about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--darwin/default.nix8
-rw-r--r--darwin/delta/configuration.nix48
-rw-r--r--flake.lock732
-rw-r--r--flake.nix11
-rw-r--r--home/configs/delta/remirin.nix24
-rw-r--r--home/configs/haruka/sefidel.nix2
-rw-r--r--home/default.nix45
-rw-r--r--home/profiles/base/default.nix24
-rw-r--r--home/profiles/browsing/default.nix1
-rw-r--r--home/profiles/communication/default.nix13
-rw-r--r--home/profiles/darwin/default.nix17
-rw-r--r--home/profiles/development/default.nix9
-rw-r--r--home/profiles/fonts/default.nix5
-rw-r--r--home/profiles/gui/config/dunst.nix50
-rw-r--r--home/profiles/gui/config/mako.nix45
-rw-r--r--home/profiles/gui/config/sway.nix16
-rw-r--r--home/profiles/gui/config/waybar/settings.nix14
-rw-r--r--home/profiles/gui/config/waybar/style.nix19
-rw-r--r--home/profiles/gui/default.nix105
-rw-r--r--home/profiles/gui/scripts/aeroplane-mode.nix12
-rw-r--r--home/profiles/gui/scripts/scratchpad-indicator.nix18
-rw-r--r--home/profiles/research/default.nix12
-rw-r--r--home/profiles/security/default.nix27
-rw-r--r--lib/default.nix2
-rw-r--r--lib/mk_darwin.nix23
-rw-r--r--lib/mk_home.nix5
-rw-r--r--modules/keyd-qol.nix19
-rw-r--r--modules/persistence.nix10
-rw-r--r--modules/secure-boot.nix28
-rw-r--r--modules/services/atticd.nix6
-rw-r--r--modules/services/blocky/grafana_blocky_rev3.json2
-rw-r--r--modules/services/hydra.nix4
-rw-r--r--modules/services/invidious.nix1
-rw-r--r--modules/services/jellyfin.nix26
-rw-r--r--modules/services/nextcloud.nix2
-rw-r--r--modules/tailscale-initrd.nix2
-rw-r--r--nixos/alpha/configuration.nix87
-rw-r--r--nixos/alpha/hardware-configuration.nix1
-rw-r--r--nixos/default.nix7
-rw-r--r--nixos/haruka/configuration.nix86
-rw-r--r--nixos/haruka/hardware-configuration.nix1
-rw-r--r--nixos/kanata/configuration.nix142
-rw-r--r--nixos/kanata/secrets/secrets.yaml10
43 files changed, 1136 insertions, 585 deletions
diff --git a/darwin/default.nix b/darwin/default.nix
new file mode 100644
index 0000000..babf824
--- /dev/null
+++ b/darwin/default.nix
@@ -0,0 +1,8 @@
+{ self, unstable, ... }:
+
+{
+  delta = self.lib.mkDarwin {
+    name = "delta";
+    nixpkgs = unstable;
+  };
+}
diff --git a/darwin/delta/configuration.nix b/darwin/delta/configuration.nix
new file mode 100644
index 0000000..3f5e94a
--- /dev/null
+++ b/darwin/delta/configuration.nix
@@ -0,0 +1,48 @@
+{ pkgs, ... }:
+
+{
+  homebrew = {
+    enable = true;
+
+    taps = [
+      "dwarvesf/homebrew-tap"
+    ];
+
+    brews = [
+      # Thunderbird requires GPGME in 'standard locations'
+      "gpgme"
+    ];
+
+    casks = [
+      "bentobox"
+      "bettertouchtool"
+      "bitwarden"
+      "jetbrains-toolbox"
+      "jordanbaird-ice"
+      "karabiner-elements"
+      "kicad" # XXX: Nix one marked as broken on darwin
+      "little-snitch"
+      "macfuse"
+      "micro-snitch"
+      "monarch"
+      "notchnook"
+      "openmtp"
+      "orbstack"
+      "raycast"
+      "spotify"
+      "tailscale"
+      "transmission"
+      "transmission"
+      "vimmotion"
+      "vlc"
+      "yubico-yubikey-manager"
+    ];
+  };
+
+  # Necessary for using flakes on this system.
+  nix.settings.experimental-features = "nix-command flakes";
+
+  # $ darwin-rebuild changelog
+  system.stateVersion = 5;
+  nixpkgs.hostPlatform = "aarch64-darwin";
+}
diff --git a/flake.lock b/flake.lock
index 365bda5..d687c32 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,42 +1,36 @@
 {
   "nodes": {
-    "attic": {
-      "inputs": {
-        "crane": "crane",
-        "flake-compat": "flake-compat",
-        "flake-utils": "flake-utils",
-        "nixpkgs": "nixpkgs",
-        "nixpkgs-stable": "nixpkgs-stable"
-      },
+    "cl-nix-lite": {
       "locked": {
-        "lastModified": 1717279440,
-        "narHash": "sha256-kH04ReTjxOpQumgWnqy40vvQLSnLGxWP6RF3nq5Esrk=",
-        "owner": "zhaofengli",
-        "repo": "attic",
-        "rev": "717cc95983cdc357bc347d70be20ced21f935843",
+        "lastModified": 1728174978,
+        "narHash": "sha256-Grqqg+xuicANB85j0gNEXxi9SBKY7bzGeTuyi95eGcY=",
+        "owner": "hraban",
+        "repo": "cl-nix-lite",
+        "rev": "31cfe6275c341eb3120a99f4b1c8516c49a29d87",
         "type": "github"
       },
       "original": {
-        "owner": "zhaofengli",
-        "repo": "attic",
+        "owner": "hraban",
+        "repo": "cl-nix-lite",
         "type": "github"
       }
     },
     "colmena": {
       "inputs": {
-        "flake-compat": "flake-compat_2",
-        "flake-utils": "flake-utils_2",
+        "flake-compat": "flake-compat",
+        "flake-utils": "flake-utils",
+        "nix-github-actions": "nix-github-actions",
         "nixpkgs": [
           "unstable"
         ],
         "stable": "stable"
       },
       "locked": {
-        "lastModified": 1711386353,
-        "narHash": "sha256-gWEpb8Hybnoqb4O4tmpohGZk6+aerAbJpywKcFIiMlg=",
+        "lastModified": 1731527002,
+        "narHash": "sha256-dI9I6suECoIAmbS4xcrqF8r2pbmed8WWm5LIF1yWPw8=",
         "owner": "zhaofengli",
         "repo": "colmena",
-        "rev": "cd65ef7a25cdc75052fbd04b120aeb066c3881db",
+        "rev": "e3ad42138015fcdf2524518dd564a13145c72ea1",
         "type": "github"
       },
       "original": {
@@ -48,16 +42,16 @@
     "crane": {
       "inputs": {
         "nixpkgs": [
-          "attic",
+          "lanzaboote",
           "nixpkgs"
         ]
       },
       "locked": {
-        "lastModified": 1717025063,
-        "narHash": "sha256-dIubLa56W9sNNz0e8jGxrX3CAkPXsq7snuFA/Ie6dn8=",
+        "lastModified": 1717535930,
+        "narHash": "sha256-1hZ/txnbd/RmiBPNUs7i8UQw2N89uAK3UzrGAWdnFfU=",
         "owner": "ipetkov",
         "repo": "crane",
-        "rev": "480dff0be03dac0e51a8dfc26e882b0d123a450e",
+        "rev": "55e7754ec31dac78980c8be45f8a28e80e370946",
         "type": "github"
       },
       "original": {
@@ -69,11 +63,11 @@
     "flake-compat": {
       "flake": false,
       "locked": {
-        "lastModified": 1673956053,
-        "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
+        "lastModified": 1650374568,
+        "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
         "owner": "edolstra",
         "repo": "flake-compat",
-        "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
+        "rev": "b4a34015c698c7793d592d66adbab377907a2be8",
         "type": "github"
       },
       "original": {
@@ -85,11 +79,11 @@
     "flake-compat_2": {
       "flake": false,
       "locked": {
-        "lastModified": 1650374568,
-        "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
+        "lastModified": 1733328505,
+        "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
         "owner": "edolstra",
         "repo": "flake-compat",
-        "rev": "b4a34015c698c7793d592d66adbab377907a2be8",
+        "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
         "type": "github"
       },
       "original": {
@@ -117,15 +111,16 @@
     "flake-compat_4": {
       "flake": false,
       "locked": {
-        "lastModified": 1673956053,
-        "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
-        "owner": "edolstra",
+        "lastModified": 1730663653,
+        "narHash": "sha256-kFCUWettiFHDIqxCWWQ9qY8pVh+Lj+XL0Giyy/kdomg=",
+        "owner": "hraban",
         "repo": "flake-compat",
-        "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
+        "rev": "e5b16676185cb7548581c852f51ce7f3a49bba5e",
         "type": "github"
       },
       "original": {
-        "owner": "edolstra",
+        "owner": "hraban",
+        "ref": "fixed-output",
         "repo": "flake-compat",
         "type": "github"
       }
@@ -133,11 +128,11 @@
     "flake-compat_5": {
       "flake": false,
       "locked": {
-        "lastModified": 1696426674,
-        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+        "lastModified": 1733328505,
+        "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
         "owner": "edolstra",
         "repo": "flake-compat",
-        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+        "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
         "type": "github"
       },
       "original": {
@@ -180,17 +175,16 @@
     "flake-parts": {
       "inputs": {
         "nixpkgs-lib": [
-          "hydra",
-          "nix",
+          "lanzaboote",
           "nixpkgs"
         ]
       },
       "locked": {
-        "lastModified": 1712014858,
-        "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=",
+        "lastModified": 1717285511,
+        "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=",
         "owner": "hercules-ci",
         "repo": "flake-parts",
-        "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d",
+        "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8",
         "type": "github"
       },
       "original": {
@@ -207,11 +201,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1717285511,
-        "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=",
+        "lastModified": 1733312601,
+        "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
         "owner": "hercules-ci",
         "repo": "flake-parts",
-        "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8",
+        "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
         "type": "github"
       },
       "original": {
@@ -229,11 +223,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1712014858,
-        "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=",
+        "lastModified": 1733312601,
+        "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
         "owner": "hercules-ci",
         "repo": "flake-parts",
-        "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d",
+        "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
         "type": "github"
       },
       "original": {
@@ -246,11 +240,11 @@
         "nixpkgs-lib": "nixpkgs-lib"
       },
       "locked": {
-        "lastModified": 1717285511,
-        "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=",
+        "lastModified": 1733312601,
+        "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
         "owner": "hercules-ci",
         "repo": "flake-parts",
-        "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8",
+        "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
         "type": "github"
       },
       "original": {
@@ -268,11 +262,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1712014858,
-        "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=",
+        "lastModified": 1722555600,
+        "narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=",
         "owner": "hercules-ci",
         "repo": "flake-parts",
-        "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d",
+        "rev": "8471fe90ad337a8074e957b69ca4d0089218391d",
         "type": "github"
       },
       "original": {
@@ -281,22 +275,28 @@
         "type": "github"
       }
     },
-    "flake-utils": {
+    "flake-parts_6": {
+      "inputs": {
+        "nixpkgs-lib": [
+          "nur",
+          "nixpkgs"
+        ]
+      },
       "locked": {
-        "lastModified": 1667395993,
-        "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
-        "owner": "numtide",
-        "repo": "flake-utils",
-        "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
+        "lastModified": 1733312601,
+        "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
         "type": "github"
       },
       "original": {
-        "owner": "numtide",
-        "repo": "flake-utils",
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
         "type": "github"
       }
     },
-    "flake-utils_2": {
+    "flake-utils": {
       "locked": {
         "lastModified": 1659877975,
         "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
@@ -311,13 +311,16 @@
         "type": "github"
       }
     },
-    "flake-utils_3": {
+    "flake-utils_2": {
+      "inputs": {
+        "systems": "systems"
+      },
       "locked": {
-        "lastModified": 1667395993,
-        "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
+        "lastModified": 1710146030,
+        "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
         "owner": "numtide",
         "repo": "flake-utils",
-        "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
+        "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
         "type": "github"
       },
       "original": {
@@ -326,34 +329,36 @@
         "type": "github"
       }
     },
-    "flake-utils_4": {
+    "flake-utils_3": {
       "inputs": {
-        "systems": "systems"
+        "systems": [
+          "mac-app-util",
+          "systems"
+        ]
       },
       "locked": {
-        "lastModified": 1710146030,
-        "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
+        "lastModified": 1731533236,
+        "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
         "owner": "numtide",
         "repo": "flake-utils",
-        "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
+        "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
         "type": "github"
       },
       "original": {
-        "owner": "numtide",
-        "repo": "flake-utils",
-        "type": "github"
+        "id": "flake-utils",
+        "type": "indirect"
       }
     },
-    "flake-utils_5": {
+    "flake-utils_4": {
       "inputs": {
-        "systems": "systems_2"
+        "systems": "systems_3"
       },
       "locked": {
-        "lastModified": 1705309234,
-        "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+        "lastModified": 1731533236,
+        "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
         "owner": "numtide",
         "repo": "flake-utils",
-        "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+        "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
         "type": "github"
       },
       "original": {
@@ -365,7 +370,7 @@
     "git-hooks": {
       "inputs": {
         "flake-compat": "flake-compat_6",
-        "gitignore": "gitignore",
+        "gitignore": "gitignore_2",
         "nixpkgs": [
           "neovim-nightly",
           "nixpkgs"
@@ -376,11 +381,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1717664902,
-        "narHash": "sha256-7XfBuLULizXjXfBYy/VV+SpYMHreNRHk9nKMsm1bgb4=",
+        "lastModified": 1734279981,
+        "narHash": "sha256-NdaCraHPp8iYMWzdXAt5Nv6sA3MUzlCiGiR586TCwo0=",
         "owner": "cachix",
         "repo": "git-hooks.nix",
-        "rev": "cc4d466cb1254af050ff7bdf47f6d404a7c646d1",
+        "rev": "aa9f40c906904ebd83da78e7f328cd8aeaeae785",
         "type": "github"
       },
       "original": {
@@ -392,6 +397,28 @@
     "gitignore": {
       "inputs": {
         "nixpkgs": [
+          "lanzaboote",
+          "pre-commit-hooks-nix",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1709087332,
+        "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
+        "owner": "hercules-ci",
+        "repo": "gitignore.nix",
+        "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "gitignore.nix",
+        "type": "github"
+      }
+    },
+    "gitignore_2": {
+      "inputs": {
+        "nixpkgs": [
           "neovim-nightly",
           "git-hooks",
           "nixpkgs"
@@ -420,11 +447,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1718018037,
-        "narHash": "sha256-03rLBd/lKecgaKz0j5ESUf9lDn5R0SJatZTKLL5unWE=",
+        "lastModified": 1733333617,
+        "narHash": "sha256-nMMQXREGvLOLvUa0ByhYFdaL0Jov0t1wzLbKjr05P2w=",
         "owner": "hercules-ci",
         "repo": "hercules-ci-effects",
-        "rev": "0ab08b23ce3c3f75fe9a5598756b6fb8bcf0b414",
+        "rev": "56f8ea8d502c87cf62444bec4ee04512e8ea24ea",
         "type": "github"
       },
       "original": {
@@ -440,11 +467,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1718243258,
-        "narHash": "sha256-abBpj2VU8p6qlRzTU8o22q68MmOaZ4v8zZ4UlYl5YRU=",
+        "lastModified": 1734344598,
+        "narHash": "sha256-wNX3hsScqDdqKWOO87wETUEi7a/QlPVgpC/Lh5rFOuA=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "8d5e27b4807d25308dfe369d5a923d87e7dbfda3",
+        "rev": "83ecd50915a09dca928971139d3a102377a8d242",
         "type": "github"
       },
       "original": {
@@ -455,15 +482,16 @@
     },
     "hydra": {
       "inputs": {
+        "libgit2": "libgit2",
         "nix": "nix",
-        "nixpkgs": "nixpkgs_2"
+        "nixpkgs": "nixpkgs"
       },
       "locked": {
-        "lastModified": 1716479415,
-        "narHash": "sha256-WAJJ4UL3hsqsfZ05cHthjEwItnv7Xy84r2y6lzkBMh8=",
+        "lastModified": 1733444895,
+        "narHash": "sha256-r+t/0U8Pp6/Lvi3s3v8nDB9xCggvxFsnCEJ9TuZvVJc=",
         "owner": "NixOS",
         "repo": "hydra",
-        "rev": "b3e0d9a8b78d55e5fea394839524f5a24d694230",
+        "rev": "250668a19fa4d8ff9a6176ee6c44ca3003adedf1",
         "type": "github"
       },
       "original": {
@@ -474,11 +502,11 @@
     },
     "impermanence": {
       "locked": {
-        "lastModified": 1717932370,
-        "narHash": "sha256-7C5lCpiWiyPoIACOcu2mukn/1JRtz6HC/1aEMhUdcw0=",
+        "lastModified": 1734200366,
+        "narHash": "sha256-0NursoP4BUdnc+wy+Mq3icHkXu/RgP1Sjo0MJxV2+Dw=",
         "owner": "nix-community",
         "repo": "impermanence",
-        "rev": "27979f1c3a0d3b9617a3563e2839114ba7d48d3f",
+        "rev": "c6323585fa0035d780e3d8906eb1b24b65d19a48",
         "type": "github"
       },
       "original": {
@@ -487,17 +515,44 @@
         "type": "github"
       }
     },
+    "lanzaboote": {
+      "inputs": {
+        "crane": "crane",
+        "flake-compat": "flake-compat_3",
+        "flake-parts": "flake-parts",
+        "flake-utils": "flake-utils_2",
+        "nixpkgs": [
+          "unstable"
+        ],
+        "pre-commit-hooks-nix": "pre-commit-hooks-nix",
+        "rust-overlay": "rust-overlay"
+      },
+      "locked": {
+        "lastModified": 1718178907,
+        "narHash": "sha256-eSZyrQ9uoPB9iPQ8Y5H7gAmAgAvCw3InStmU3oEjqsE=",
+        "owner": "nix-community",
+        "repo": "lanzaboote",
+        "rev": "b627ccd97d0159214cee5c7db1412b75e4be6086",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "ref": "v0.4.1",
+        "repo": "lanzaboote",
+        "type": "github"
+      }
+    },
     "lib-aggregate": {
       "inputs": {
         "flake-utils": "flake-utils_4",
         "nixpkgs-lib": "nixpkgs-lib_2"
       },
       "locked": {
-        "lastModified": 1717935050,
-        "narHash": "sha256-UWi8G3J+pS+9LVMdjrpLJwncdiMQWrnuUd5ygxCHeNc=",
+        "lastModified": 1734264809,
+        "narHash": "sha256-94fu5E0gM8aMY0bX/ix7BWGf/e/OfGjoCtNrJfwL0dM=",
         "owner": "nix-community",
         "repo": "lib-aggregate",
-        "rev": "1b6ea3be6ba37d4d3ba6e5041e2f152bb684ba2c",
+        "rev": "46bedda9e45f2735f41ec3c01cba2b8ce7ba9808",
         "type": "github"
       },
       "original": {
@@ -509,19 +564,57 @@
     "libgit2": {
       "flake": false,
       "locked": {
-        "lastModified": 1697646580,
-        "narHash": "sha256-oX4Z3S9WtJlwvj0uH9HlYcWv+x1hqp8mhXl7HsLu2f0=",
+        "lastModified": 1715853528,
+        "narHash": "sha256-J2rCxTecyLbbDdsyBWn9w7r3pbKRMkI9E7RvRgAqBdY=",
         "owner": "libgit2",
         "repo": "libgit2",
-        "rev": "45fd9ed7ae1a9b74b957ef4f337bc3c8b3df01b5",
+        "rev": "36f7e21ad757a3dacc58cf7944329da6bc1d6e96",
         "type": "github"
       },
       "original": {
         "owner": "libgit2",
+        "ref": "v1.8.1",
         "repo": "libgit2",
         "type": "github"
       }
     },
+    "mac-app-util": {
+      "inputs": {
+        "cl-nix-lite": "cl-nix-lite",
+        "flake-compat": "flake-compat_4",
+        "flake-utils": "flake-utils_3",
+        "nixpkgs": "nixpkgs_2",
+        "systems": "systems_2"
+      },
+      "locked": {
+        "lastModified": 1732920695,
+        "narHash": "sha256-1fxvJZUznwrmEtYqpPuWi2tPcL9kj6v7p1J7ZZncAPE=",
+        "owner": "hraban",
+        "repo": "mac-app-util",
+        "rev": "548672d0cb661ce11d08ee8bde92b87d2a75c872",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hraban",
+        "repo": "mac-app-util",
+        "type": "github"
+      }
+    },
+    "madness-ld": {
+      "locked": {
+        "lastModified": 1720637547,
+        "narHash": "sha256-5MGG0iRBvP35VlcHvxVrapuLygZwHwMB3g0M0fWxz58=",
+        "owner": "antithesishq",
+        "repo": "madness",
+        "rev": "c22c9c03579b7175d94f63e44ee0e518bb5ccdba",
+        "type": "github"
+      },
+      "original": {
+        "owner": "antithesishq",
+        "repo": "madness",
+        "type": "github"
+      }
+    },
     "neovim-nightly": {
       "inputs": {
         "flake-compat": "flake-compat_5",
@@ -531,14 +624,15 @@
         "neovim-src": "neovim-src",
         "nixpkgs": [
           "unstable"
-        ]
+        ],
+        "treefmt-nix": "treefmt-nix"
       },
       "locked": {
-        "lastModified": 1718424280,
-        "narHash": "sha256-Y1Bjk8e9KJQ+5gwxNcRSz4l6k0yDLQ28MZ9qoeEeCII=",
+        "lastModified": 1734377470,
+        "narHash": "sha256-2ICLd6Pc1ATA008wHi4k0JsV5mWM4jmEULINxdnd/+c=",
         "owner": "nix-community",
         "repo": "neovim-nightly-overlay",
-        "rev": "450744cea2778415ff8c23553d37048d01df6c5b",
+        "rev": "f54ecbd4dc854d955fa3a06cecf5217130b70f61",
         "type": "github"
       },
       "original": {
@@ -550,11 +644,11 @@
     "neovim-src": {
       "flake": false,
       "locked": {
-        "lastModified": 1718407238,
-        "narHash": "sha256-eJ0qrdEWH7WRwLTBIXIOYB/DvBHvgvm6x4bBonkzXLQ=",
+        "lastModified": 1734351849,
+        "narHash": "sha256-fRNSqRIwg/J46FA27cunOXgzBRZ7mfGDCtpdNI0MTtc=",
         "owner": "neovim",
         "repo": "neovim",
-        "rev": "199d852d9f8584217be38efb56b725aa3db62931",
+        "rev": "798f9284793ad9693c68352f5d07dafb73fd281e",
         "type": "github"
       },
       "original": {
@@ -565,44 +659,76 @@
     },
     "nix": {
       "inputs": {
-        "flake-compat": "flake-compat_4",
-        "flake-parts": "flake-parts",
-        "libgit2": "libgit2",
+        "flake-compat": [
+          "hydra"
+        ],
+        "flake-parts": [
+          "hydra"
+        ],
+        "git-hooks-nix": [
+          "hydra"
+        ],
+        "libgit2": [
+          "hydra",
+          "libgit2"
+        ],
         "nixpkgs": [
           "hydra",
           "nixpkgs"
         ],
-        "nixpkgs-regression": "nixpkgs-regression",
-        "pre-commit-hooks": "pre-commit-hooks"
+        "nixpkgs-23-11": [
+          "hydra"
+        ],
+        "nixpkgs-regression": [
+          "hydra"
+        ]
       },
       "locked": {
-        "lastModified": 1713874370,
-        "narHash": "sha256-gW1mO/CvsQQ5gvgiwzxsGhPFI/tx30NING+qgF5Do0s=",
+        "lastModified": 1726787955,
+        "narHash": "sha256-XFznzb8L4SdUm9u+w3DPpMWJhffuv+/6+aiVl00slns=",
         "owner": "NixOS",
         "repo": "nix",
-        "rev": "1c8150ac312b5f9ba1b3f6768ff43b09867e5883",
+        "rev": "a7fdef6858dd45b9d7bda7c92324c63faee7f509",
         "type": "github"
       },
       "original": {
         "owner": "NixOS",
-        "ref": "2.22-maintenance",
+        "ref": "2.24-maintenance",
         "repo": "nix",
         "type": "github"
       }
     },
+    "nix-darwin": {
+      "inputs": {
+        "nixpkgs": "nixpkgs_3"
+      },
+      "locked": {
+        "lastModified": 1737085297,
+        "narHash": "sha256-0gpgsX7hCauT6pblVg+hrDnt83lPoYzq/2BqqyvU8Tc=",
+        "owner": "LnL7",
+        "repo": "nix-darwin",
+        "rev": "09414c7e2def24a5c52e588017b8524bcb68972a",
+        "type": "github"
+      },
+      "original": {
+        "owner": "LnL7",
+        "repo": "nix-darwin",
+        "type": "github"
+      }
+    },
     "nix-eval-jobs": {
       "inputs": {
         "flake-parts": "flake-parts_5",
-        "nix-github-actions": "nix-github-actions",
-        "nixpkgs": "nixpkgs_3",
-        "treefmt-nix": "treefmt-nix"
+        "nix-github-actions": "nix-github-actions_2",
+        "nixpkgs": "nixpkgs_4",
+        "treefmt-nix": "treefmt-nix_2"
       },
       "locked": {
-        "lastModified": 1717698186,
-        "narHash": "sha256-e3/cvm7bAn0RsTBcPfHwuYOi2lwoO4jpTn4nmMSvHfU=",
+        "lastModified": 1733909753,
+        "narHash": "sha256-5GChR6LKh6EwGXLfR3HLW2Z0AWoyce4Hyp3VB5C4FCk=",
         "owner": "nix-community",
         "repo": "nix-eval-jobs",
-        "rev": "b6169e08e76e10b673d1b54f944cddb1e7cbea97",
+        "rev": "b1f94fed4af8e7f30665a3bf8b369dc3b8a95884",
         "type": "github"
       },
       "original": {
@@ -616,14 +742,15 @@
         "flake-parts": "flake-parts_4",
         "nixpkgs": [
           "unstable"
-        ]
+        ],
+        "umu": "umu"
       },
       "locked": {
-        "lastModified": 1718328127,
-        "narHash": "sha256-2ldscRIlStuv/fRmifXbvjlMpyVuy8Z9zhiDBRM6oe0=",
+        "lastModified": 1734313951,
+        "narHash": "sha256-DCjhmX5dVn11J8Ss+5Py4yMh8k7a63HakMENccGZBr4=",
         "owner": "fufexan",
         "repo": "nix-gaming",
-        "rev": "2c9a664875b410d12282fed9043f4703b6fdb029",
+        "rev": "a5f8dee3f7e6864da0d69a227bc8a90a3cbf9d0f",
         "type": "github"
       },
       "original": {
@@ -635,17 +762,38 @@
     "nix-github-actions": {
       "inputs": {
         "nixpkgs": [
+          "colmena",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1729742964,
+        "narHash": "sha256-B4mzTcQ0FZHdpeWcpDYPERtyjJd/NIuaQ9+BV1h+MpA=",
+        "owner": "nix-community",
+        "repo": "nix-github-actions",
+        "rev": "e04df33f62cdcf93d73e9a04142464753a16db67",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "repo": "nix-github-actions",
+        "type": "github"
+      }
+    },
+    "nix-github-actions_2": {
+      "inputs": {
+        "nixpkgs": [
           "nixpkgs-wayland",
           "nix-eval-jobs",
           "nixpkgs"
         ]
       },
       "locked": {
-        "lastModified": 1703863825,
-        "narHash": "sha256-rXwqjtwiGKJheXB43ybM8NwWB8rO2dSRrEqes0S7F5Y=",
+        "lastModified": 1731952509,
+        "narHash": "sha256-p4gB3Rhw8R6Ak4eMl8pqjCPOLCZRqaehZxdZ/mbFClM=",
         "owner": "nix-community",
         "repo": "nix-github-actions",
-        "rev": "5163432afc817cf8bd1f031418d1869e4c9d5547",
+        "rev": "7b5f051df789b6b20d259924d349a9ba3319b226",
         "type": "github"
       },
       "original": {
@@ -656,27 +804,27 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1711401922,
-        "narHash": "sha256-QoQqXoj8ClGo0sqD/qWKFWezgEwUL0SUh37/vY2jNhc=",
+        "lastModified": 1726688310,
+        "narHash": "sha256-Xc9lEtentPCEtxc/F1e6jIZsd4MPDYv4Kugl9WtXlz0=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "07262b18b97000d16a4bdb003418bd2fb067a932",
+        "rev": "dbebdd67a6006bb145d98c8debf9140ac7e651d0",
         "type": "github"
       },
       "original": {
         "owner": "NixOS",
-        "ref": "nixpkgs-unstable",
+        "ref": "nixos-24.05-small",
         "repo": "nixpkgs",
         "type": "github"
       }
     },
     "nixpkgs-2311": {
       "locked": {
-        "lastModified": 1718229064,
-        "narHash": "sha256-ZFav8A9zPNfjZg/wrxh1uZeMJHELRfRgFP+meq01XYk=",
+        "lastModified": 1720535198,
+        "narHash": "sha256-zwVvxrdIzralnSbcpghA92tWu2DV2lwv89xZc8MTrbg=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "5c2ec3a5c2ee9909904f860dadc19bc12cd9cc44",
+        "rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5",
         "type": "github"
       },
       "original": {
@@ -688,23 +836,23 @@
     },
     "nixpkgs-lib": {
       "locked": {
-        "lastModified": 1717284937,
-        "narHash": "sha256-lIbdfCsf8LMFloheeE6N31+BMIeixqyQWbSr2vk79EQ=",
+        "lastModified": 1733096140,
+        "narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=",
         "type": "tarball",
-        "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz"
+        "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
       },
       "original": {
         "type": "tarball",
-        "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz"
+        "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
       }
     },
     "nixpkgs-lib_2": {
       "locked": {
-        "lastModified": 1717894324,
-        "narHash": "sha256-4q6ZO3BqHgdd3Aacb/xiQXB4g9TQKpQg/praTpD9vbI=",
+        "lastModified": 1734224914,
+        "narHash": "sha256-hKWALzQ/RxxXdKWsLKXULru6XTag9Cc5exgVyS4a/AE=",
         "owner": "nix-community",
         "repo": "nixpkgs.lib",
-        "rev": "13eac98dc5233fe7e52f0cd0e2cba7dcd77feca5",
+        "rev": "538697b664a64fade8ce628d01f35d1f1fd82d77",
         "type": "github"
       },
       "original": {
@@ -715,11 +863,11 @@
     },
     "nixpkgs-master": {
       "locked": {
-        "lastModified": 1718446532,
-        "narHash": "sha256-u73is+EmDoCg+6fRiRVm3491/Zbbnw4XUosxa6CNV/I=",
+        "lastModified": 1734391385,
+        "narHash": "sha256-qySKxm95i2LwZ9bsuGI++01DXVVwX/D+MX5HMsn4Saw=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "c339c066b893e5683830ba870b1ccd3bbea88ece",
+        "rev": "c16f43f97c059903ac4d07ad5c5e193beeaf1f7b",
         "type": "github"
       },
       "original": {
@@ -729,29 +877,13 @@
         "type": "github"
       }
     },
-    "nixpkgs-regression": {
-      "locked": {
-        "lastModified": 1643052045,
-        "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
-        "owner": "NixOS",
-        "repo": "nixpkgs",
-        "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
-        "type": "github"
-      },
-      "original": {
-        "owner": "NixOS",
-        "repo": "nixpkgs",
-        "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
-        "type": "github"
-      }
-    },
     "nixpkgs-stable": {
       "locked": {
-        "lastModified": 1711460390,
-        "narHash": "sha256-akSgjDZL6pVHEfSE6sz1DNSXuYX6hq+P/1Z5IoYWs7E=",
+        "lastModified": 1710695816,
+        "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "44733514b72e732bd49f5511bd0203dea9b9a434",
+        "rev": "614b4613980a522ba49f0d194531beddbb7220d3",
         "type": "github"
       },
       "original": {
@@ -761,22 +893,6 @@
         "type": "github"
       }
     },
-    "nixpkgs-stable_2": {
-      "locked": {
-        "lastModified": 1717880976,
-        "narHash": "sha256-BRvSCsKtDUr83NEtbGfHLUOdDK0Cgbezj2PtcHnz+sQ=",
-        "owner": "NixOS",
-        "repo": "nixpkgs",
-        "rev": "4913a7c3d8b8d00cb9476a6bd730ff57777f740c",
-        "type": "github"
-      },
-      "original": {
-        "owner": "NixOS",
-        "ref": "release-23.11",
-        "repo": "nixpkgs",
-        "type": "github"
-      }
-    },
     "nixpkgs-wayland": {
       "inputs": {
         "flake-compat": "flake-compat_7",
@@ -787,11 +903,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1718399896,
-        "narHash": "sha256-32ukRcPI2W5exf4A7/ISqoKp+sL1MxdMjFt3I+8XS5Y=",
+        "lastModified": 1734366874,
+        "narHash": "sha256-DBB1cTb+gmjUpcR3Ki+qQbdQsHwBjW7FB7iOp39WF0g=",
         "owner": "nix-community",
         "repo": "nixpkgs-wayland",
-        "rev": "422bb5c5106008418f499ca591c0138f73e213f4",
+        "rev": "7c76738f71e0d4a0365ad95ab3a09e236a655f30",
         "type": "github"
       },
       "original": {
@@ -802,27 +918,43 @@
     },
     "nixpkgs_2": {
       "locked": {
-        "lastModified": 1712848736,
-        "narHash": "sha256-CzZwhqyLlebljv1zFS2KWVH/3byHND0LfaO1jKsGuVo=",
+        "lastModified": 1732617236,
+        "narHash": "sha256-PYkz6U0bSEaEB1al7O1XsqVNeSNS+s3NVclJw7YC43w=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "1d6a23f11e44d0fb64b3237569b87658a9eb5643",
+        "rev": "af51545ec9a44eadf3fe3547610a5cdd882bc34e",
         "type": "github"
       },
       "original": {
         "owner": "NixOS",
-        "ref": "nixos-23.11-small",
         "repo": "nixpkgs",
+        "rev": "af51545ec9a44eadf3fe3547610a5cdd882bc34e",
         "type": "github"
       }
     },
     "nixpkgs_3": {
       "locked": {
-        "lastModified": 1715037484,
-        "narHash": "sha256-OUt8xQFmBU96Hmm4T9tOWTu4oCswCzoVl+pxSq/kiFc=",
+        "lastModified": 1736241350,
+        "narHash": "sha256-CHd7yhaDigUuJyDeX0SADbTM9FXfiWaeNyY34FL1wQU=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "8c9fd3e564728e90829ee7dbac6edc972971cd0f",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixpkgs-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs_4": {
+      "locked": {
+        "lastModified": 1732238832,
+        "narHash": "sha256-sQxuJm8rHY20xq6Ah+GwIUkF95tWjGRd1X8xF+Pkk38=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "ad7efee13e0d216bf29992311536fce1d3eefbef",
+        "rev": "8edf06bea5bcbee082df1b7369ff973b91618b8d",
         "type": "github"
       },
       "original": {
@@ -832,13 +964,34 @@
         "type": "github"
       }
     },
+    "nixpkgs_5": {
+      "locked": {
+        "lastModified": 1734119587,
+        "narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=",
+        "owner": "nixos",
+        "repo": "nixpkgs",
+        "rev": "3566ab7246670a43abd2ffa913cc62dad9cdf7d5",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nixos",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
     "nur": {
+      "inputs": {
+        "flake-parts": "flake-parts_6",
+        "nixpkgs": "nixpkgs_5",
+        "treefmt-nix": "treefmt-nix_3"
+      },
       "locked": {
-        "lastModified": 1718447279,
-        "narHash": "sha256-1fDQmySl7Q9iEjAkIQl9xrKU4yb0XxpKMGy8WaAibBw=",
+        "lastModified": 1734392816,
+        "narHash": "sha256-c5+jESqfMDazS1U0fyfE/oea3PJUtz9QgdG3sdqAUP0=",
         "owner": "nix-community",
         "repo": "NUR",
-        "rev": "33e61fa0c96330985e302a0800fdc550caf5f1d7",
+        "rev": "4bb63c4c7ee2eb895a9c17c7e3a3252586f3ffa2",
         "type": "github"
       },
       "original": {
@@ -847,34 +1000,25 @@
         "type": "github"
       }
     },
-    "pre-commit-hooks": {
+    "pre-commit-hooks-nix": {
       "inputs": {
         "flake-compat": [
-          "hydra",
-          "nix"
-        ],
-        "flake-utils": "flake-utils_3",
-        "gitignore": [
-          "hydra",
-          "nix"
+          "lanzaboote",
+          "flake-compat"
         ],
+        "gitignore": "gitignore",
         "nixpkgs": [
-          "hydra",
-          "nix",
+          "lanzaboote",
           "nixpkgs"
         ],
-        "nixpkgs-stable": [
-          "hydra",
-          "nix",
-          "nixpkgs"
-        ]
+        "nixpkgs-stable": "nixpkgs-stable"
       },
       "locked": {
-        "lastModified": 1712897695,
-        "narHash": "sha256-nMirxrGteNAl9sWiOhoN5tIHyjBbVi5e2tgZUgZlK3Y=",
+        "lastModified": 1717664902,
+        "narHash": "sha256-7XfBuLULizXjXfBYy/VV+SpYMHreNRHk9nKMsm1bgb4=",
         "owner": "cachix",
         "repo": "pre-commit-hooks.nix",
-        "rev": "40e6053ecb65fcbf12863338a6dcefb3f55f1bf8",
+        "rev": "cc4d466cb1254af050ff7bdf47f6d404a7c646d1",
         "type": "github"
       },
       "original": {
@@ -885,13 +1029,16 @@
     },
     "root": {
       "inputs": {
-        "attic": "attic",
         "colmena": "colmena",
-        "flake-compat": "flake-compat_3",
+        "flake-compat": "flake-compat_2",
         "home-manager": "home-manager",
         "hydra": "hydra",
         "impermanence": "impermanence",
+        "lanzaboote": "lanzaboote",
+        "mac-app-util": "mac-app-util",
+        "madness-ld": "madness-ld",
         "neovim-nightly": "neovim-nightly",
+        "nix-darwin": "nix-darwin",
         "nix-gaming": "nix-gaming",
         "nixpkgs-2311": "nixpkgs-2311",
         "nixpkgs-master": "nixpkgs-master",
@@ -905,17 +1052,41 @@
     },
     "rust": {
       "inputs": {
-        "flake-utils": "flake-utils_5",
         "nixpkgs": [
           "unstable"
         ]
       },
       "locked": {
-        "lastModified": 1718417877,
-        "narHash": "sha256-s8QrTANEtY6UxzfkcBfoN93bgW9aCRIq54LPRVNu/4c=",
+        "lastModified": 1734316514,
+        "narHash": "sha256-0aLx44yMblcOGpfFXKCzp2GhU5JaE6OTvdU+JYrXiUc=",
         "owner": "oxalica",
         "repo": "rust-overlay",
-        "rev": "7c2d603cb67c974ef8c5cfee1150060dbb299e04",
+        "rev": "83ee8ff74d6294a7657320f16814754c4594127b",
+        "type": "github"
+      },
+      "original": {
+        "owner": "oxalica",
+        "repo": "rust-overlay",
+        "type": "github"
+      }
+    },
+    "rust-overlay": {
+      "inputs": {
+        "flake-utils": [
+          "lanzaboote",
+          "flake-utils"
+        ],
+        "nixpkgs": [
+          "lanzaboote",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1717813066,
+        "narHash": "sha256-wqbRwq3i7g5EHIui0bIi84mdqZ/It1AXBSLJ5tafD28=",
+        "owner": "oxalica",
+        "repo": "rust-overlay",
+        "rev": "6dc3e45fe4aee36efeed24d64fc68b1f989d5465",
         "type": "github"
       },
       "original": {
@@ -928,15 +1099,14 @@
       "inputs": {
         "nixpkgs": [
           "unstable"
-        ],
-        "nixpkgs-stable": "nixpkgs-stable_2"
+        ]
       },
       "locked": {
-        "lastModified": 1718137936,
-        "narHash": "sha256-psA+1Q5fPaK6yI3vzlLINNtb6EeXj111zQWnZYyJS9c=",
+        "lastModified": 1733965552,
+        "narHash": "sha256-GZ4YtqkfyTjJFVCub5yAFWsHknG1nS/zfk7MuHht4Fs=",
         "owner": "Mic92",
         "repo": "sops-nix",
-        "rev": "c279dec105dd53df13a5e57525da97905cc0f0d6",
+        "rev": "2d73fc6ac4eba4b9a83d3cb8275096fbb7ab4004",
         "type": "github"
       },
       "original": {
@@ -947,16 +1117,16 @@
     },
     "stable": {
       "locked": {
-        "lastModified": 1696039360,
-        "narHash": "sha256-g7nIUV4uq1TOVeVIDEZLb005suTWCUjSY0zYOlSBsyE=",
+        "lastModified": 1730883749,
+        "narHash": "sha256-mwrFF0vElHJP8X3pFCByJR365Q2463ATp2qGIrDUdlE=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "32dcb45f66c0487e92db8303a798ebc548cadedc",
+        "rev": "dba414932936fde69f0606b4f1d87c5bc0003ede",
         "type": "github"
       },
       "original": {
         "owner": "NixOS",
-        "ref": "nixos-23.05",
+        "ref": "nixos-24.05",
         "repo": "nixpkgs",
         "type": "github"
       }
@@ -978,6 +1148,21 @@
     },
     "systems_2": {
       "locked": {
+        "lastModified": 1689347925,
+        "narHash": "sha256-ozenz5bFe1UUqOn7f60HRmgc01BgTGIKZ4Xl+HbocGQ=",
+        "owner": "nix-systems",
+        "repo": "default-darwin",
+        "rev": "2235d7e6cc29ae99878133c95e9fe5e157661ffb",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default-darwin",
+        "type": "github"
+      }
+    },
+    "systems_3": {
+      "locked": {
         "lastModified": 1681028828,
         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
         "owner": "nix-systems",
@@ -994,17 +1179,59 @@
     "treefmt-nix": {
       "inputs": {
         "nixpkgs": [
+          "neovim-nightly",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1733761991,
+        "narHash": "sha256-s4DalCDepD22jtKL5Nw6f4LP5UwoMcPzPZgHWjAfqbQ=",
+        "owner": "numtide",
+        "repo": "treefmt-nix",
+        "rev": "0ce9d149d99bc383d1f2d85f31f6ebd146e46085",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "treefmt-nix",
+        "type": "github"
+      }
+    },
+    "treefmt-nix_2": {
+      "inputs": {
+        "nixpkgs": [
           "nixpkgs-wayland",
           "nix-eval-jobs",
           "nixpkgs"
         ]
       },
       "locked": {
-        "lastModified": 1711963903,
-        "narHash": "sha256-N3QDhoaX+paWXHbEXZapqd1r95mdshxToGowtjtYkGI=",
+        "lastModified": 1723303070,
+        "narHash": "sha256-krGNVA30yptyRonohQ+i9cnK+CfCpedg6z3qzqVJcTs=",
+        "owner": "numtide",
+        "repo": "treefmt-nix",
+        "rev": "14c092e0326de759e16b37535161b3cb9770cea3",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "treefmt-nix",
+        "type": "github"
+      }
+    },
+    "treefmt-nix_3": {
+      "inputs": {
+        "nixpkgs": [
+          "nur",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1733222881,
+        "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=",
         "owner": "numtide",
         "repo": "treefmt-nix",
-        "rev": "49dc4a92b02b8e68798abd99184f228243b6e3ac",
+        "rev": "49717b5af6f80172275d47a418c9719a31a78b53",
         "type": "github"
       },
       "original": {
@@ -1013,13 +1240,38 @@
         "type": "github"
       }
     },
+    "umu": {
+      "inputs": {
+        "nixpkgs": [
+          "nix-gaming",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "dir": "packaging/nix",
+        "lastModified": 1734207213,
+        "narHash": "sha256-5CZPAeKm24Y1BKnN8Md3HUViCMCs7AVghRC+05Bdlkk=",
+        "ref": "refs/heads/main",
+        "rev": "6189d0d9fd062e89a375db20aeae1d1c009e9833",
+        "revCount": 869,
+        "submodules": true,
+        "type": "git",
+        "url": "https://github.com/Open-Wine-Components/umu-launcher/?dir=packaging/nix"
+      },
+      "original": {
+        "dir": "packaging/nix",
+        "submodules": true,
+        "type": "git",
+        "url": "https://github.com/Open-Wine-Components/umu-launcher/?dir=packaging/nix"
+      }
+    },
     "unstable": {
       "locked": {
-        "lastModified": 1718318537,
-        "narHash": "sha256-4Zu0RYRcAY/VWuu6awwq4opuiD//ahpc2aFHg2CWqFY=",
+        "lastModified": 1734119587,
+        "narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "e9ee548d90ff586a6471b4ae80ae9cfcbceb3420",
+        "rev": "3566ab7246670a43abd2ffa913cc62dad9cdf7d5",
         "type": "github"
       },
       "original": {
@@ -1031,11 +1283,11 @@
     },
     "unstable-small": {
       "locked": {
-        "lastModified": 1718419000,
-        "narHash": "sha256-v4+aJpRDbJil691DXo5SydqowcB01B6E9+wFH/pNk6k=",
+        "lastModified": 1734318609,
+        "narHash": "sha256-VPbVfHSvFs58T+kbseS7wa9WP6p2z7RJmjTnV4pAPQ0=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "24b048f70e34020c93ed7c11491bc050ff6eb142",
+        "rev": "66cdf593c0041cf1efc9b2889d80c9a5c497b284",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index c6c7350..67e1701 100644
--- a/flake.nix
+++ b/flake.nix
@@ -7,6 +7,8 @@
     nixpkgs-master.url = "github:nixos/nixpkgs/master";
     nixpkgs-2311.url = "github:nixos/nixpkgs/nixos-23.11";
 
+    nix-darwin.url = "github:LnL7/nix-darwin";
+
     home-manager.url = "github:nix-community/home-manager";
     home-manager.inputs.nixpkgs.follows = "unstable";
 
@@ -20,15 +22,20 @@
 
     impermanence.url = "github:nix-community/impermanence";
 
+    lanzaboote.url = "github:nix-community/lanzaboote/v0.4.1";
+    lanzaboote.inputs.nixpkgs.follows = "unstable";
+
     sops-nix.url = "github:Mic92/sops-nix";
     sops-nix.inputs.nixpkgs.follows = "unstable";
 
+    madness-ld.url = "github:antithesishq/madness";
+
     flake-compat.url = "github:edolstra/flake-compat";
     flake-compat.flake = false;
 
     hydra.url = "github:NixOS/hydra";
 
-    attic.url = "github:zhaofengli/attic";
+    mac-app-util.url = "github:hraban/mac-app-util";
 
     neovim-nightly.url = "github:nix-community/neovim-nightly-overlay";
     neovim-nightly.inputs.nixpkgs.follows = "unstable";
@@ -50,6 +57,8 @@
 
       nixosConfigurations = import ./nixos inputs;
 
+      darwinConfigurations = import ./darwin inputs;
+
       homeConfigurations = import ./home inputs;
 
       colmena = self.lib.mkColmenaFromNixOSConfigurations self.nixosConfigurations;
diff --git a/home/configs/delta/remirin.nix b/home/configs/delta/remirin.nix
new file mode 100644
index 0000000..aa6eac3
--- /dev/null
+++ b/home/configs/delta/remirin.nix
@@ -0,0 +1,24 @@
+{ pkgs, ... }:
+
+{
+  config = {
+    activeProfiles = [
+      "base"
+      "darwin"
+#      "gui"
+#      "browsing"
+      "development"
+      "communication"
+#      "multimedia"
+#      "creative"
+     "research"
+#      "security"
+#      "gaming"
+    ];
+
+    programs.htop.settings.detailed_cpu_time = true;
+
+    sops.defaultSopsFile = ../../secrets/secrets.yaml;
+    sops.gnupg.home = "/Users/remirin/.gnupg";
+  };
+}
diff --git a/home/configs/haruka/sefidel.nix b/home/configs/haruka/sefidel.nix
index 22e53e9..9782020 100644
--- a/home/configs/haruka/sefidel.nix
+++ b/home/configs/haruka/sefidel.nix
@@ -17,7 +17,7 @@
     profiles.gui = {
       laptop.enable = true;
       font = {
-        name = "ProFont";
+        name = "Iosevka Term NF";
         pixelSize = 14;
       };
     };
diff --git a/home/default.nix b/home/default.nix
index 0d414f3..2bb23a1 100644
--- a/home/default.nix
+++ b/home/default.nix
@@ -1,4 +1,4 @@
-{ self, unstable, ... } @ inputs:
+{ self, unstable, nixpkgs-2311, ... } @ inputs:
 
 {
   "sefidel@alpha" = self.lib.mkHome {
@@ -9,7 +9,7 @@
       overlays = with inputs; [
         rust.overlays.default
         neovim-nightly.overlays.default
-        nur.overlay
+        nur.overlays.default
         nixpkgs-wayland.overlay
       ];
     };
@@ -42,15 +42,8 @@
       overlays = with inputs; [
         rust.overlays.default
         neovim-nightly.overlays.default
-        nur.overlay
+        nur.overlays.default
         nixpkgs-wayland.overlay
-        # TODO: fractional scaling is broken on 1.8+
-        (final: prev:
-        let
-          nixpkgs2311 = import nixpkgs-2311 { system = "x86_64-linux"; };
-        in {
-          sway-unwrapped = nixpkgs2311.pkgs.sway-unwrapped;
-         })
       ];
     };
 
@@ -73,6 +66,38 @@
     version = "23.11";
   };
 
+  "remirin@delta" = self.lib.mkHome {
+    username = "remirin";
+    hostname = "delta";
+    homeDirectory = "/Users/remirin";
+    pkgs = import unstable {
+      system = "aarch64-apple-darwin";
+      overlays = with inputs; [
+        rust.overlays.default
+        neovim-nightly.overlays.default
+        nur.overlays.default
+      ];
+    };
+
+    extraModules = [
+      ./profiles/populate.nix
+      ./profiles/base
+      ./profiles/darwin
+      ./profiles/browsing
+      ./profiles/development
+      ./profiles/communication
+      ./profiles/multimedia
+      ./profiles/creative
+      ./profiles/research
+      ./profiles/security
+
+      inputs.mac-app-util.homeManagerModules.default
+      inputs.sops-nix.homeManagerModules.sops
+    ];
+
+    version = "25.05";
+  };
+
   "sefidel@cobalt" = self.lib.mkHome {
     username = "sefidel";
     hostname = "cobalt";
diff --git a/home/profiles/base/default.nix b/home/profiles/base/default.nix
index 5e01ca0..a2e44c9 100644
--- a/home/profiles/base/default.nix
+++ b/home/profiles/base/default.nix
@@ -23,14 +23,17 @@ in
       # Airport
       AIRPORT_USER = "20963";
       AIRPORT_HOST = "hk-s020.rsync.net";
+
+      # TODO: https://github.com/nix-community/home-manager/pull/5901
+      SSH_AUTH_SOCK = lib.mkIf (config.services.gpg-agent.enable && pkgs.stdenv.isDarwin) "$(${config.programs.gpg.package}/bin/gpgconf --list-dirs agent-ssh-socket)";
     };
 
     home.keyboard.layout = "us";
     home.packages = [
       # Nix Tools
+      pkgs.nh
       pkgs.nix-index
       pkgs.nix-tree
-      pkgs.nix-top
       pkgs.nix-update
       pkgs.hydra-check
 
@@ -48,6 +51,7 @@ in
       pkgs.procs
       pkgs.sops
       pkgs.tree
+      pkgs.units
       pkgs.neovim
 
       # Common build tools
@@ -158,7 +162,7 @@ in
             };
           }
 
-          {
+          (lib.mkIf pkgs.stdenv.isLinux {
             name = "doas-zsh-plugin";
             src = pkgs.fetchFromGitHub {
               owner = "anatolykopyl";
@@ -167,6 +171,18 @@ in
               sha256 = "sha256-10rcF9cho9GuZCFQVIdFjvHCAlTLHNaLY4twxjT2jcE=";
             };
             file = "doas.plugin.zsh";
+          })
+
+          (lib.mkIf pkgs.stdenv.isDarwin {
+            name = "sudo-zsh-plugin";
+            src = pkgs.oh-my-zsh.src;
+            file = "plugins/sudo/sudo.plugin.zsh";
+          })
+
+          {
+            name = "zsh-vi-mode";
+            src = pkgs.zsh-vi-mode;
+            file = "share/zsh-vi-mode/zsh-vi-mode.plugin.zsh";
           }
         ];
 
@@ -244,9 +260,9 @@ in
     '';
 
     services = {
-      gpg-agent = lib.mkIf pkgs.stdenv.isLinux {
+      gpg-agent = {
         enable = true;
-        pinentryPackage = pkgs.pinentry-gnome3;
+        pinentryPackage = lib.mkIf pkgs.stdenv.isLinux pkgs.pinentry-gnome3;
         defaultCacheTtl = 3600;
         defaultCacheTtlSsh = 3600;
         maxCacheTtl = 86400;
diff --git a/home/profiles/browsing/default.nix b/home/profiles/browsing/default.nix
index e2baa0a..5634b34 100644
--- a/home/profiles/browsing/default.nix
+++ b/home/profiles/browsing/default.nix
@@ -98,6 +98,7 @@ in
 
         extensions = with pkgs.nur.repos.rycee.firefox-addons; [
           bitwarden
+          consent-o-matic
           kagi-search
           tridactyl
         ];
diff --git a/home/profiles/communication/default.nix b/home/profiles/communication/default.nix
index 4a287ee..38d14b1 100644
--- a/home/profiles/communication/default.nix
+++ b/home/profiles/communication/default.nix
@@ -25,7 +25,7 @@ in
   };
 
   config = lib.mkIf cfg.enable (lib.mkMerge [
-    # TODO: is this needed?
+    # TODO: also configure mail in Darwin
     (lib.mkIf pkgs.stdenv.isLinux {
       sops.secrets.sef-email-password = { };
 
@@ -407,10 +407,8 @@ in
         ispell
         urlscan
 
-        discord-canary
+        discord
         element-desktop
-        kiwitalk
-        nheko
         slack
         (weechat.override {
           configure = { availablePlugins, ... }: {
@@ -426,9 +424,14 @@ in
         })
       ];
 
-      nixpkgs.allowedUnfree = [ "slack" "discord-canary" ];
+      nixpkgs.allowedUnfree = [ "slack" "discord" ];
 
       xdg.configFile."Element/config.json".text = builtins.toJSON (import ./element-config.nix);
     }
+    (lib.mkIf pkgs.stdenv.isDarwin {
+      home.packages = with pkgs; [
+        thunderbird-latest-unwrapped
+      ];
+    })
   ]);
 }
diff --git a/home/profiles/darwin/default.nix b/home/profiles/darwin/default.nix
new file mode 100644
index 0000000..989beb1
--- /dev/null
+++ b/home/profiles/darwin/default.nix
@@ -0,0 +1,17 @@
+{ config, lib, pkgs, ... }:
+let cfg = config.profiles.darwin;
+in
+{
+  options.profiles.darwin = {
+    enable = lib.mkEnableOption
+      "Profile for darwin-related packages";
+  };
+
+  config = lib.mkIf cfg.enable {
+    home.packages = [
+      pkgs.iterm2
+      # pkgs.karabiner-elements # Package 'damaged', even with trampoline
+    ];
+
+  };
+}
diff --git a/home/profiles/development/default.nix b/home/profiles/development/default.nix
index 15cec65..dbc3767 100644
--- a/home/profiles/development/default.nix
+++ b/home/profiles/development/default.nix
@@ -41,7 +41,7 @@ in
         init.defaultBranch = "main";
         pull.rebase = true;
 
-        merge.conflictStyle = "diff3";
+        merge.conflictStyle = "zdiff3";
 
         mergetool.fugitive = {
           cmd = ''nvim -f -c "Gvdiffsplit!" "$MERGED"'';
@@ -222,7 +222,6 @@ in
       pkgs.du-dust
       pkgs.deploy-rs
       pkgs.dnsutils
-      pkgs.gdb
       # TODO: https://github.com/cli/cli/issues/4955
       pkgs.gh
       pkgs.git-annex
@@ -233,7 +232,6 @@ in
       pkgs.ouch
       pkgs.tcpdump
       pkgs.tokei
-      pkgs.valgrind
       pkgs.mtr
       pkgs.nil
       pkgs.nixpkgs-fmt
@@ -244,6 +242,7 @@ in
       pkgs.rust-analyzer
       pkgs.sd
       pkgs.tig
+      pkgs.wireshark
       pkgs.xh
       pkgs.cargo-play
       pkgs.cargo-edit
@@ -262,6 +261,10 @@ in
       pkgs.pkg-config
       (pkgs.python3.withPackages (ps: with ps; [ pynvim ]))
       pkgs.gopls
+    ] ++ lib.optionals (pkgs.stdenv.isLinux) [
+      pkgs.gdb
+      pkgs.kicad # Marked as broken on Darwin
+      pkgs.valgrind # Marked as broken on Darwin
     ];
   };
 }
diff --git a/home/profiles/fonts/default.nix b/home/profiles/fonts/default.nix
index 3f4edab..b886d78 100644
--- a/home/profiles/fonts/default.nix
+++ b/home/profiles/fonts/default.nix
@@ -10,12 +10,15 @@ in
   config = lib.mkIf cfg.enable {
     home.packages = with pkgs; [
       dina-font
+      iosevka
       sarasa-gothic
       #siji # TODO: bitmap font conflict
       jetbrains-mono
       twemoji-color-font
       emacs-all-the-icons-fonts
-      (nerdfonts.override { fonts = [ "Iosevka" "JetBrainsMono" ]; })
+      nerd-fonts.iosevka
+      nerd-fonts.iosevka-term
+      nerd-fonts.jetbrains-mono
     ];
 
     fonts.fontconfig.enable = true;
diff --git a/home/profiles/gui/config/dunst.nix b/home/profiles/gui/config/dunst.nix
deleted file mode 100644
index f6e80b3..0000000
--- a/home/profiles/gui/config/dunst.nix
+++ /dev/null
@@ -1,50 +0,0 @@
-{ config, neotheme }:
-
-with neotheme.colors;
-
-let
-  guiCfg = config.profiles.gui;
-in
-{
-  global = {
-    padding = 8;
-    width = "330";
-    origin = "top-right";
-    offset = "8x25";
-    notification_limit = 5;
-    frame_width = 2;
-    vertical_alignment = "center";
-    horizontal_padding = 8;
-    icon_position = "left";
-    corner_radius = 10;
-
-    markup = "full";
-    word_wrap = true;
-    show_indicators = false;
-    format = "<b>%s</b>\\n\\n%b";
-    font = "${guiCfg.font.name} ${toString guiCfg.font.size}";
-    frame_color = "#${color3}";
-    separator_color = "auto";
-    max_icon_size = 80;
-  };
-
-  urgency_low = {
-    foreground = "#${foreground}";
-    background = "#${background}";
-    frame_color = "#${color4}";
-    timeout = 4;
-  };
-
-  urgency_normal = {
-    foreground = "#${foreground}";
-    background = "#${background}";
-    frame_color = "#${color3}";
-    timeout = 8;
-  };
-
-  urgency_critical = {
-    foreground = "#${foreground}";
-    background = "#${background}";
-    frame_color = "#${color1}";
-  };
-}
diff --git a/home/profiles/gui/config/mako.nix b/home/profiles/gui/config/mako.nix
new file mode 100644
index 0000000..a471a6a
--- /dev/null
+++ b/home/profiles/gui/config/mako.nix
@@ -0,0 +1,45 @@
+{ config, neotheme }:
+
+with neotheme.colors;
+
+let
+  guiCfg = config.profiles.gui;
+in
+{
+  anchor = "top-right";
+  width = 330;
+  padding = "8";
+  margin = "16,8";
+  borderRadius = 10;
+  borderSize = 2;
+
+  borderColor = "#${color3}";
+  backgroundColor = "#${background}";
+  textColor = "#${foreground}";
+  progressColor = "over #${color5}";
+
+  markup = true;
+  font = "${guiCfg.font.name} ${toString guiCfg.font.size}";
+
+  maxVisible = 5;
+
+  extraConfig = ''
+    [urgency=low]
+    border-color=#${color4}
+    default-timeout=4000
+
+    [urgency=normal]
+    border-color=#${color3}
+    default-timeout=8000
+
+    [urgency=critical]
+    border-color=#${color1}
+    default-timeout=0
+
+    [app-name=yubikey-touch-detector]
+    anchor=bottom-center
+    text-alignment=center
+    padding=32
+
+  '';
+}
diff --git a/home/profiles/gui/config/sway.nix b/home/profiles/gui/config/sway.nix
index 36b1b95..162be7d 100644
--- a/home/profiles/gui/config/sway.nix
+++ b/home/profiles/gui/config/sway.nix
@@ -70,6 +70,11 @@ in
 
   # floating
   bindsym $mod+f floating toggle
+  bindsym $mod+Shift+f move position center
+
+  # scratchpad
+  bindsym $mod+grave scratchpad show; focus
+  bindsym $mod+shift+grave move scratchpad
 
   # kill focused
   bindsym $mod+w kill
@@ -84,6 +89,7 @@ in
   for_window [window_type="dialog"]      floating enable
   for_window [window_type="menu"]        floating enable
   for_window [class="mpv"]               floating enable
+  for_window [app_id="kicad"]            floating enable
   for_window [class=".*"]                inhibit_idle fullscreen
   for_window [app_id=".*"]               title_format ""
   for_window [class=".*"]                title_format ""
@@ -200,6 +206,8 @@ in
   default_border pixel 3
   hide_edge_borders --i3 smart
   gaps inner 8
+  # TODO: https://github.com/swaywm/sway/issues/8102
+  gaps right 2
   smart_borders on
 
   set $color0 #${color0}
@@ -250,9 +258,11 @@ in
     tap_button_map lmr          #1Finger > Left Click , 2Finger > Right Click, 3Fingers > MiddleClick
   }
 
-  input "1149:8264:Primax_Kensington_Eagle_Trackball" {
-    accel_profile flat
-    pointer_accel 0
+  # Kensington Slimblade Pro
+  # TODO: directly handle device?
+  input "4012:6878:keyd_virtual_pointer" {
+    accel_profile adaptive
+    pointer_accel -0.7
   }
 
   input type:keyboard {
diff --git a/home/profiles/gui/config/waybar/settings.nix b/home/profiles/gui/config/waybar/settings.nix
index 9470824..341a1b3 100644
--- a/home/profiles/gui/config/waybar/settings.nix
+++ b/home/profiles/gui/config/waybar/settings.nix
@@ -1,4 +1,4 @@
-{ config, lib, neotheme }:
+{ config, lib, pkgs, neotheme }:
 
 with neotheme.colors;
 
@@ -10,7 +10,7 @@ in
   position = "top";
   height = 22;
   modules-left = [ "wireplumber" "custom/separator" "cpu" "custom/separator" "memory" "custom/separator" "idle_inhibitor" ];
-  modules-center = [ "sway/workspaces" ];
+  modules-center = [ "sway/workspaces" "custom/scratchpad-indicator" ];
   modules-right = [ "group/tray" "custom/separator" "network" "custom/separator" ]
     ++ lib.optionals (guiCfg.laptop.enable) [ "battery" "custom/separator" ]
     ++ [ "clock" ];
@@ -96,6 +96,16 @@ in
     tooltip = false;
   };
 
+  "custom/scratchpad-indicator" = {
+    format = "(+{})";
+    interval = 3;
+    return-type = "json";
+    hide-empty-text = true;
+    exec = "${pkgs.writeShellScript "scratchpad-indicator" (import ../../scripts/scratchpad-indicator.nix)}";
+    on-click = "exec swaymsg scratchpad show";
+    on-click-right = "exec swaymsg move scratchpad";
+  };
+
   "custom/separator" = {
     format = "|";
     interval = "once";
diff --git a/home/profiles/gui/config/waybar/style.nix b/home/profiles/gui/config/waybar/style.nix
index 92eb772..1f5327e 100644
--- a/home/profiles/gui/config/waybar/style.nix
+++ b/home/profiles/gui/config/waybar/style.nix
@@ -73,6 +73,21 @@ in
     border-bottom: 1px solid #${bright0};
   }
 
+  @keyframes blinkBattery {
+    to {
+      border-color: #${color3};
+    }
+  }
+
+  #battery.charging {
+    border-bottom: 1px solid transparent;
+    animation-name: blinkBattery;
+    animation-duration: 1s;
+    animation-timing-function: steps(12);
+    animation-iteration-count: infinite;
+    animation-direction: alternate;
+  }
+
   #tray {
     /* TODO: https://github.com/Alexays/Waybar/issues/2906 */
     margin: 0;
@@ -92,6 +107,10 @@ in
     padding-right: 0.2rem;
   }
 
+  #custom-scratchpad-indicator {
+    color: #f0a0c0;
+  }
+
   #custom-separator {
     color: #${alt1};
     background-color: #${background};
diff --git a/home/profiles/gui/default.nix b/home/profiles/gui/default.nix
index 838d2ab..966f2ba 100644
--- a/home/profiles/gui/default.nix
+++ b/home/profiles/gui/default.nix
@@ -66,8 +66,8 @@ in
       };
 
       gtk = {
-        theme.dark = "Orchis-Dark-Compact";
-        theme.light = "Orchis-Light-Compact";
+        theme.dark = "Adwaita-dark";
+        theme.light = "Adwaita";
         iconTheme.dark = "Papirus-Dark";
         iconTheme.light = "Papirus-Light";
       };
@@ -76,7 +76,7 @@ in
     gtk.enable = true;
     gtk.iconTheme.package = pkgs.papirus-icon-theme;
     gtk.iconTheme.name = neotheme.gtk.iconTheme.dark;
-    gtk.theme.package = (pkgs.orchis-theme.override { tweaks = [ "primary" "compact" ]; });
+    gtk.theme.package = pkgs.gnome-themes-extra;
     gtk.theme.name = neotheme.gtk.theme.dark;
     gtk.font.name = "${cfg.font.name} ${toString cfg.font.size}";
 
@@ -84,6 +84,7 @@ in
 
     home.packages = [
       # Sway
+      pkgs.alsa-utils
       pkgs.autotiling
       pkgs.brightnessctl
       pkgs.blueberry
@@ -105,26 +106,17 @@ in
     ];
 
     home.sessionVariables = {
-      # Disabled as Element/Discord currently uses an old version of Electron
-      # that doesn't support IM.
-      # NIXOS_OZONE_WL = 1; # NOTE: might cause problems with old electron
+      NIXOS_OZONE_WL = 1; # NOTE: might cause problems with old electron
       _JAVA_AWT_WM_NONREPARENTING = 1; # Fix 'grey screen' issue on java apps
       SDL_VIDEODRIVER = "wayland";
+      # TODO: https://github.com/qutebrowser/qutebrowser/discussions/7938
+      QT_SCALE_FACTOR_ROUNDING_POLICY = "RoundPreferFloor";
     };
 
     wayland.windowManager.sway = {
       enable = true;
 
-      package =
-        if cfg.laptop.enable then
-          options.wayland.windowManager.sway.package.default.override
-            (prev: {
-              sway-unwrapped = prev.sway-unwrapped.override (s-prev: {
-                wlroots = s-prev.wlroots.overrideAttrs {
-                  patches = [ ../../../overlays/patches/wlroots-displaylink/DisplayLink_v2.patch ];
-                };
-              });
-            }) else options.wayland.windowManager.sway.package.default;
+      package = options.wayland.windowManager.sway.package.default;
 
       wrapperFeatures = {
         base = true;
@@ -164,16 +156,45 @@ in
       waybar = {
         enable = config.wayland.windowManager.sway.enable;
 
-        settings = [ (import ./config/waybar/settings.nix { inherit config lib neotheme; }) ];
+        settings = [ (import ./config/waybar/settings.nix { inherit config lib pkgs neotheme; }) ];
 
         style = import ./config/waybar/style.nix { inherit config neotheme; };
       };
     };
 
     services = {
-      dunst = {
+      darkman = {
         enable = true;
-        settings = import ./config/dunst.nix { inherit config neotheme; };
+        settings = {
+          lat = 36.5;
+          lng = 127.2;
+          usegeoclue = true;
+        };
+
+        darkModeScripts = {
+          gtk-theme = ''
+            ${pkgs.dconf}/bin/dconf write \
+              /org/gnome/desktop/interface/color-scheme "'prefer-dark'"
+
+            ${pkgs.dconf}/bin/dconf write \
+              /org/gnome/desktop/interface/gtk-theme "'${neotheme.gtk.theme.dark}'"
+
+            ${pkgs.dconf}/bin/dconf write \
+              /org/gnome/desktop/interface/icon-theme "'${neotheme.gtk.iconTheme.dark}'"
+          '';
+        };
+        lightModeScripts = {
+          gtk-theme = ''
+            ${pkgs.dconf}/bin/dconf write \
+              /org/gnome/desktop/interface/color-scheme "'prefer-light'"
+
+            ${pkgs.dconf}/bin/dconf write \
+              /org/gnome/desktop/interface/gtk-theme "'${neotheme.gtk.theme.light}'"
+
+            ${pkgs.dconf}/bin/dconf write \
+              /org/gnome/desktop/interface/icon-theme "'${neotheme.gtk.iconTheme.light}'"
+          '';
+        };
       };
 
       kanshi = {
@@ -206,6 +227,10 @@ in
         ];
       };
 
+      mako = {
+        enable = true;
+      } // import ./config/mako.nix { inherit config neotheme; };
+
       swayidle =
         let
           # TODO: remove when >1.6.11
@@ -247,13 +272,7 @@ in
             { timeout = 270; command = "${pkgs.libnotify}/bin/notify-send -t 30000 'Locking screen in 30 seconds'"; }
             # 5m
             { timeout = 300; command = lockCommand; }
-          ] ++ lib.optionals (!cfg.laptop.enable)
-            [{
-              # 10m (desktop only)
-              timeout = 600;
-              command = "${config.wayland.windowManager.sway.package}/bin/swaymsg 'output * dpms off'";
-              resumeCommand = "${config.wayland.windowManager.sway.package}/bin/swaymsg 'output * dpms on'";
-            }] ++ [
+          ] ++ [
             {
               # 10m on laptops, 15m on desktop
               timeout = if cfg.laptop.enable then 600 else 900;
@@ -267,40 +286,6 @@ in
         latitude = "36.5";
         longitude = "127.2";
       };
-
-      darkman = {
-        enable = true;
-        settings = {
-          lat = 36.5;
-          lng = 127.2;
-          usegeoclue = true;
-        };
-
-        darkModeScripts = {
-          gtk-theme = ''
-            ${pkgs.dconf}/bin/dconf write \
-              /org/gnome/desktop/interface/color-scheme "'prefer-dark'"
-
-            ${pkgs.dconf}/bin/dconf write \
-              /org/gnome/desktop/interface/gtk-theme "'${neotheme.gtk.theme.dark}'"
-
-            ${pkgs.dconf}/bin/dconf write \
-              /org/gnome/desktop/interface/icon-theme "'${neotheme.gtk.iconTheme.dark}'"
-          '';
-        };
-        lightModeScripts = {
-          gtk-theme = ''
-            ${pkgs.dconf}/bin/dconf write \
-              /org/gnome/desktop/interface/color-scheme "'prefer-light'"
-
-            ${pkgs.dconf}/bin/dconf write \
-              /org/gnome/desktop/interface/gtk-theme "'${neotheme.gtk.theme.light}'"
-
-            ${pkgs.dconf}/bin/dconf write \
-              /org/gnome/desktop/interface/icon-theme "'${neotheme.gtk.iconTheme.light}'"
-          '';
-        };
-      };
     };
   };
 }
diff --git a/home/profiles/gui/scripts/aeroplane-mode.nix b/home/profiles/gui/scripts/aeroplane-mode.nix
index 9f09c05..0b1ecf3 100644
--- a/home/profiles/gui/scripts/aeroplane-mode.nix
+++ b/home/profiles/gui/scripts/aeroplane-mode.nix
@@ -1,15 +1,13 @@
 ''
 set -euo pipefail
 
-rfkill_soft=$(rfkill -ro soft | tail -n +2 | sort -u)
+radio_status=$(nmcli radio | tail -n +2 | awk 'OFS="\n" {print $2,$4}' | sort -u)
 
-rfkill toggle all
-
-if [[ $rfkill_soft == "unblocked"  ]]; then
+if [[ $radio_status == "enabled" ]]; then
+    nmcli radio all off
     notify-send --urgency=critical "Aeroplane mode ACTIVATED"
-elif [[ $rfkill_soft == "blocked" ]]; then
-    notify-send --urgency=critical "Aeroplane mode DEACTIVATED"
 else
-    notify-send --urgency=critical "WARN: RFKill was in inconsistent state. Aeroplane mode ACTIVATED"
+    nmcli radio all on
+    notify-send --urgency=low "Aeroplane mode DEACTIVATED"
 fi
 ''
diff --git a/home/profiles/gui/scripts/scratchpad-indicator.nix b/home/profiles/gui/scripts/scratchpad-indicator.nix
new file mode 100644
index 0000000..7ee66c3
--- /dev/null
+++ b/home/profiles/gui/scripts/scratchpad-indicator.nix
@@ -0,0 +1,18 @@
+''
+output="$(swaymsg -t get_tree | jq -r 'recurse(.nodes[]?)|recurse(.floating_nodes[]?)|select(.name == "__i3_scratch").floating_nodes[]|"`<b>"+.name+"`</b> - "+.app_id+" "+(.id|tostring)')"
+number="$(swaymsg -r -t get_tree | jq -r 'recurse(.nodes[]) | first(select(.name=="__i3_scratch")) | .floating_nodes | length')"
+
+if [ "$number" -gt 0 ]; then
+    text="$number"
+else
+    text=""
+fi
+
+output="$(echo "$output" | sed -r 's/[&]+/and/g')" # Replace unprintable & character with the word 'and'
+tooltip="Scratchpad\n\n"
+tooltip+="$(echo "$output" | sed -z 's/\n/\\n/g')"
+tooltip=''${tooltip::-2}
+
+echo "{\"text\":\"$text\", \"tooltip\":\"$tooltip\"}"
+exit 0
+''
diff --git a/home/profiles/research/default.nix b/home/profiles/research/default.nix
index 2d98905..fd85282 100644
--- a/home/profiles/research/default.nix
+++ b/home/profiles/research/default.nix
@@ -31,8 +31,8 @@ in
         index-active-bg = "#dbd3c4";
         index-active-fg = "#4f5058";
 
-        highlight-color = "#d4ae80";
-        highlight-active-color = "#8197bf";
+        highlight-color = "#rgba(212,174,128,0.5)";
+        highlight-active-color = "rgba(129,151,191,0.5)";
 
         notification-bg = "#dbd3c4";
         notification-fg = "#151515";
@@ -51,16 +51,12 @@ in
     };
 
     home.packages = [
-      pkgs.kicad
       pkgs.ltex-ls
-      pkgs.libreoffice
       pkgs.obsidian
       pkgs.pandoc
-      pkgs.tana
       pkgs.texlive.combined.scheme-small
+      pkgs.tinymist
       pkgs.typst
-      pkgs.typst-lsp
-      pkgs.typst-preview
       pkgs.websocat
 
       pkgs.nanum
@@ -69,6 +65,6 @@ in
     # Let HM manage installed fonts
     fonts.fontconfig.enable = true;
 
-    nixpkgs.allowedUnfree = [ "obsidian" "tana" ];
+    nixpkgs.allowedUnfree = [ "obsidian" ];
   };
 }
diff --git a/home/profiles/security/default.nix b/home/profiles/security/default.nix
index b64de22..2201f3e 100644
--- a/home/profiles/security/default.nix
+++ b/home/profiles/security/default.nix
@@ -12,7 +12,6 @@ in
       pkgs.yubikey-manager
       pkgs.age-plugin-yubikey
 
-      pkgs.keepassxc
       pkgs.bitwarden
       pkgs.bitwarden-cli
 
@@ -20,5 +19,31 @@ in
 
       pkgs.protonvpn-gui
     ];
+
+    systemd.user = lib.mkIf pkgs.stdenv.isLinux {
+      sockets.yubikey-touch-detector = {
+        Unit.Description = "Unix socket activation for YubiKey touch detector service";
+        Socket = {
+          ListenStream = "%t/yubikey-touch-detector.socket";
+          RemoveOnStop = true;
+        };
+        Install.WantedBy = [ "sockets.target" ];
+      };
+
+      services.yubikey-touch-detector = {
+        Unit = {
+          Description = "Detects when your YubiKey is waiting for a touch";
+          Requires = "yubikey-touch-detector.socket";
+        };
+        Service = {
+          ExecStart = "${lib.getExe pkgs.yubikey-touch-detector} --libnotify -v";
+          EnvironmentFile = "-%E/yubikey-touch-detector/service.conf";
+        };
+        Install = {
+          Also = "yubikey-touch-detector.socket";
+          WantedBy = [ "default.target" ];
+        };
+      };
+    };
   };
 }
diff --git a/lib/default.nix b/lib/default.nix
index d437dc6..2ed3bca 100644
--- a/lib/default.nix
+++ b/lib/default.nix
@@ -11,7 +11,7 @@ let
 
   mylib = makeExtensible (self:
     mapModules ./.
-    (file: import file ({ inherit lib; } // inputs)));
+    (file: import file ({ inherit lib inputs; } // inputs)));
 in
 mylib.extend
   (self: super:
diff --git a/lib/mk_darwin.nix b/lib/mk_darwin.nix
new file mode 100644
index 0000000..1da4dc3
--- /dev/null
+++ b/lib/mk_darwin.nix
@@ -0,0 +1,23 @@
+{ self, unstable, nix-darwin, ... } @ args:
+{
+  mkDarwin = { name, nixpkgs ? unstable, system ? "aarch64-darwin", overlays ? null, extraModules ? null }:
+    nix-darwin.lib.darwinSystem (
+      let
+        configFolder = "${self}/darwin";
+        entryPoint = "${configFolder}/${name}/configuration.nix";
+      in
+      {
+        system = system;
+        pkgs = import nixpkgs { inherit system; };
+
+        modules = [
+          {
+            networking.hostName = name;
+            system.configurationRevision = self.rev or self.dirtyRev;
+          }
+          entryPoint
+        ] ++ nixpkgs.lib.optional (overlays != null) { nixpkgs.overlays = overlays; }
+        ++ nixpkgs.lib.optionals (extraModules != null) extraModules;
+      }
+    );
+}
diff --git a/lib/mk_home.nix b/lib/mk_home.nix
index d416787..b7f780e 100644
--- a/lib/mk_home.nix
+++ b/lib/mk_home.nix
@@ -1,6 +1,6 @@
 { self, home-manager, unstable, ... } @ inputs:
 {
-  mkHome = { username, hostname, pkgs, version, extraModules ? null }:
+  mkHome = { username, hostname, homeDirectory ? "/home/${username}", pkgs, version, extraModules ? null }:
     let
       entrypoint = "${self}/home/configs/${hostname}/${username}.nix";
       defaultModule = { lib, config, ... }: {
@@ -14,8 +14,7 @@
         };
 
         home = {
-          inherit username;
-          homeDirectory = "/home/${username}";
+          inherit username homeDirectory;
           stateVersion = version;
         };
       };
diff --git a/modules/keyd-qol.nix b/modules/keyd-qol.nix
index 2f720d7..23ea784 100644
--- a/modules/keyd-qol.nix
+++ b/modules/keyd-qol.nix
@@ -31,6 +31,25 @@
           };
         };
       };
+
+      kensington_trackball = {
+        ids = [
+          # Slimblade Pro
+          "047d:80d4" # Bluetooth
+          "047d:80d6" # 2.4Ghz
+          "047d:80d7" # Wired
+        ];
+        settings = {
+          main = {
+            # MIDDLE / MOUSE1
+            # LEFT   / RIGHT
+            middlemouse = "middlemouse";
+            mouse1 = "rightmouse";
+            leftmouse = "leftmouse";
+            rightmouse = "back";
+          };
+        };
+      };
     };
   };
 }
diff --git a/modules/persistence.nix b/modules/persistence.nix
index 3131d61..989bed0 100644
--- a/modules/persistence.nix
+++ b/modules/persistence.nix
@@ -1,4 +1,4 @@
-{ config, lib, ... }:
+{ config, inputs, lib, ... }:
 
 
 with lib;
@@ -6,6 +6,10 @@ let
   cfg = config.modules.persistence;
 in
 {
+  imports = [
+    inputs.impermanence.nixosModules.impermanence
+  ];
+
   options.modules.persistence = {
     enable = mkEnableOption "impermanence persistence";
 
@@ -17,6 +21,8 @@ in
       '';
     };
 
+    setupSshHostKeys = mkEnableOption "configure persistence for OpenSSH Host keys";
+
     directories = mkOption {
       type = types.listOf types.str;
       default = [ ];
@@ -28,7 +34,7 @@ in
 
     environment.persistence.${cfg.storagePath}.directories = cfg.directories;
 
-    services.openssh.hostKeys = [
+    services.openssh.hostKeys = mkIf cfg.setupSshHostKeys [
       {
         path = "${cfg.storagePath}/ssh/ssh_host_ed25519_key";
         type = "ed25519";
diff --git a/modules/secure-boot.nix b/modules/secure-boot.nix
new file mode 100644
index 0000000..7f079e4
--- /dev/null
+++ b/modules/secure-boot.nix
@@ -0,0 +1,28 @@
+{ config, inputs, pkgs, lib, ... }:
+
+let
+  cfg = config.modules.secure-boot;
+in
+{
+  imports = [
+    inputs.lanzaboote.nixosModules.lanzaboote
+  ];
+
+  options.modules.secure-boot = {
+    enable = lib.mkEnableOption "Secure boot with lanzaboote";
+  };
+
+  config = lib.mkIf cfg.enable {
+    boot.lanzaboote.enable = true;
+    boot.lanzaboote.pkiBundle = "/etc/secureboot";
+
+    # Managed by lanzaboote
+    boot.loader.systemd-boot.enable = lib.mkForce false;
+
+    modules.persistence.directories = [
+      "/etc/secureboot"
+    ];
+
+    environment.systemPackages = [ pkgs.sbctl ];
+  };
+}
diff --git a/modules/services/atticd.nix b/modules/services/atticd.nix
index ef79871..fe11074 100644
--- a/modules/services/atticd.nix
+++ b/modules/services/atticd.nix
@@ -1,4 +1,4 @@
-{ config, lib, pkgs, ... }:
+{ config, inputs, lib, pkgs, ... }:
 
 with lib;
 let
@@ -24,7 +24,7 @@ in
     (mkIf cfg.enable {
       services.atticd = {
         enable = true;
-        credentialsFile = cfg.secrets.attic-credentials;
+        environmentFile = cfg.secrets.attic-credentials;
 
         settings = {
           listen = "[::]:4005";
@@ -104,7 +104,7 @@ in
           # NOTE: currently this expects `attic/config.toml` to be manually
           # generated and placed on `/var/lib/atticd-watch-store`
           Environment = "XDG_CONFIG_HOME=/var/lib/atticd-watch-store";
-          ExecStart = "${pkgs.attic}/bin/attic watch-store hydra";
+          ExecStart = "${pkgs.attic-client}/bin/attic watch-store hydra";
           Restart = "on-failure";
           RestartSec = "5s";
           ProtectKernelLogs = true;
diff --git a/modules/services/blocky/grafana_blocky_rev3.json b/modules/services/blocky/grafana_blocky_rev3.json
index e4e837c..01e6ea5 100644
--- a/modules/services/blocky/grafana_blocky_rev3.json
+++ b/modules/services/blocky/grafana_blocky_rev3.json
@@ -861,7 +861,7 @@
       "datasource": {
         "uid": "5Z0Y8D3GXAMDODSF"
       },
-      "description": "Number of occured errors",
+      "description": "Number of errors occurred",
       "fieldConfig": {
         "defaults": {
           "decimals": 0,
diff --git a/modules/services/hydra.nix b/modules/services/hydra.nix
index d0e5968..be30db3 100644
--- a/modules/services/hydra.nix
+++ b/modules/services/hydra.nix
@@ -9,7 +9,7 @@ in
     enable = mkEnableOption "Whether to enable Hydra, a Nix-based continuous build system";
     baseURL = mkOption {
       type = types.str;
-      example = "https://hydra.kusanari.network";
+      example = "https://hydra.kanata.network";
       description = "The base URL for the Hydra webserver instance";
     };
   };
@@ -23,7 +23,7 @@ in
       hydraURL = cfg.baseURL;
       dbi = "dbi:Pg:dbname=hydra;user=hydra;";
       useSubstitutes = true;
-      notificationSender = "hydra@kusanari.network";
+      notificationSender = "hydra@kanata.network";
 
       listenHost = "localhost";
       port = 4004;
diff --git a/modules/services/invidious.nix b/modules/services/invidious.nix
index 949f2c7..8952cda 100644
--- a/modules/services/invidious.nix
+++ b/modules/services/invidious.nix
@@ -27,6 +27,7 @@ in
       database.createLocally = true;
 
       http3-ytproxy.enable = true;
+      sig-helper.enable = true;
 
       settings = {
         db.user = "indivious";
diff --git a/modules/services/jellyfin.nix b/modules/services/jellyfin.nix
new file mode 100644
index 0000000..1936a54
--- /dev/null
+++ b/modules/services/jellyfin.nix
@@ -0,0 +1,26 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+let
+  cfg = config.modules.services.jellyfin;
+in
+{
+  options.modules.services.jellyfin = {
+    enable = mkEnableOption "";
+
+    dataDir = mkOption { type = types.str; };
+  };
+
+  config = mkIf cfg.enable {
+    services.jellyfin = {
+      enable = true;
+
+      dataDir = cfg.dataDir;
+    };
+
+    environment.systemPackages = with pkgs; [
+      jellyfin-web
+      jellyfin-ffmpeg
+    ];
+  };
+}
diff --git a/modules/services/nextcloud.nix b/modules/services/nextcloud.nix
index 70b08e6..9a472a8 100644
--- a/modules/services/nextcloud.nix
+++ b/modules/services/nextcloud.nix
@@ -36,7 +36,7 @@ in
     services.nextcloud = {
       enable = true;
 
-      package = pkgs.nextcloud29;
+      package = pkgs.nextcloud30;
       database.createLocally = true;
       hostName = cfg.realHost;
 
diff --git a/modules/tailscale-initrd.nix b/modules/tailscale-initrd.nix
index 4429d60..21bbd53 100644
--- a/modules/tailscale-initrd.nix
+++ b/modules/tailscale-initrd.nix
@@ -83,7 +83,7 @@
         extraUtilsCommands = ''
           copy_bin_and_libs ${pkgs.tailscale}/bin/tailscaled
           copy_bin_and_libs ${pkgs.tailscale}/bin/tailscale
-          copy_bin_and_libs ${pkgs.iproute}/bin/ip
+          copy_bin_and_libs ${pkgs.iproute2}/bin/ip
           copy_bin_and_libs ${iptables-static}/bin/iptables
           copy_bin_and_libs ${iptables-static}/bin/xtables-legacy-multi
 
diff --git a/nixos/alpha/configuration.nix b/nixos/alpha/configuration.nix
index f0fbf27..2098d1b 100644
--- a/nixos/alpha/configuration.nix
+++ b/nixos/alpha/configuration.nix
@@ -16,7 +16,8 @@
     sudo.wheelNeedsPassword = false;
   };
 
-  boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
+  # Use latest LTS kernel (https://github.com/NixOS/nixpkgs/pull/341596)
+  boot.kernelPackages = pkgs.linuxPackages;
   boot.kernelParams = [
     # "nohibernate"
     "console=tty1"
@@ -33,24 +34,16 @@
   boot.zfs.forceImportAll = false;
   boot.zfs.allowHibernation = true; # NOTE: disable if using swap on ZFS
 
-  # GRUB bootloader
-  boot.loader.efi.canTouchEfiVariables = true;
-  boot.loader.grub = {
-    enable = true;
-
-    efiSupport = true;
-    configurationLimit = 10;
-    device = "nodev";
-    useOSProber = true;
-    copyKernels = true;
-    extraEntries = ''
-      menuentry "Reboot" {
-        reboot
-      }
-      menuentry "Shutdown" {
-        halt
-      }
-    '';
+  boot.loader.systemd-boot = {
+    # Managed by lanzaboote
+    enable = false;
+    editor = false;
+    configurationLimit = 16;
+    # TODO: https://github.com/NixOS/nixpkgs/pull/334526
+    # bootCounting.enable = true;
+    # bootCounting.tries = 3;
+    # bootCounting.enable = true;
+    # bootCounting.tries = 3;
   };
 
   boot.initrd.postDeviceCommands = lib.mkAfter ''
@@ -115,17 +108,25 @@
 
   services.openssh.enable = true;
   services.openssh.settings.PasswordAuthentication = false;
-  services.openssh.hostKeys = [
-    {
-      path = "/persist/ssh/ssh_host_ed25519_key";
-      type = "ed25519";
-    }
-    {
-      path = "/persist/ssh/ssh_host_rsa_key";
-      type = "rsa";
-      bits = 4096;
-    }
-  ];
+
+  modules = {
+    secure-boot.enable = true;
+
+    persistence = {
+      enable = true;
+      storagePath = "/persist";
+      setupSshHostKeys = true;
+
+      directories = [
+        "/etc/NetworkManager/system-connections"
+        "/var/lib/nixos"
+        "/var/lib/bluetooth"
+        "/var/lib/tailscale"
+        "/var/lib/libvirt"
+        "/etc/cups"
+      ];
+    };
+  };
 
   sops.secrets.borg-alpha-rolling-pass = { };
   services.borgbackup.jobs.alpha-rolling = {
@@ -138,6 +139,7 @@
       # Ephemeral user files
       "**/.cache"
       "**/.nix-profile"
+      "**/.config"
       # Rust build files
       "**/target"
       # Large, non-essential files
@@ -175,8 +177,6 @@
 
   services.openssh.knownHosts."hk-s020.rsync.net".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILcPl9x9JfRFwsn09NnDw/xBZbAN80ZQck+h6AqlVqPH";
 
-  sound.enable = true;
-
   services.pipewire = {
     enable = true;
 
@@ -208,14 +208,6 @@
   services.avahi.enable = true;
   services.avahi.nssmdns4 = true;
 
-  environment.persistence."/persist".directories = [
-    "/etc/NetworkManager/system-connections"
-    "/var/lib/bluetooth"
-    "/var/lib/tailscale"
-    "/var/lib/libvirt"
-    "/etc/cups"
-  ];
-
   services.pcscd.enable = true;
 
   programs.dconf.enable = true;
@@ -284,7 +276,8 @@
     fontDir.enable = true;
 
     packages = with pkgs; [
-      (nerdfonts.override { fonts = [ "Iosevka" "JetBrainsMono" ]; })
+      nerd-fonts.iosevka
+      nerd-fonts.jetbrains-mono
       cozette
       dina-font
       emacs-all-the-icons-fonts
@@ -342,16 +335,16 @@
     remotePlay.openFirewall = true;
     dedicatedServer.openFirewall = true;
   };
-  nixpkgs.allowedUnfree = [ "steam" "steam-original" "steam-run" "brgenml1lpr" ];
+  nixpkgs.allowedUnfree = [ "steam" "steam-unwrapped" "brgenml1lpr" ];
+
+  madness.enable = true;
 
   environment.sessionVariables = {
     WLR_NO_HARDWARE_CURSORS = "1"; # Prevent cursors disappearing on nouveau
   };
 
-  hardware.opengl.enable = true;
-  hardware.opengl.driSupport = true;
-  hardware.opengl.driSupport32Bit = true;
-  hardware.opengl.extraPackages = with pkgs; [ vaapiVdpau libvdpau-va-gl ];
+  hardware.graphics.enable = true;
+  hardware.graphics.extraPackages = with pkgs; [ vaapiVdpau libvdpau-va-gl ];
 
   xdg.portal = {
     enable = true;
@@ -367,8 +360,6 @@
 
   users.mutableUsers = false;
 
-  fileSystems."/persist".neededForBoot = true;
-
   users.users = {
     root.hashedPasswordFile = config.sops.secrets.root-password.path;
     sefidel = {
diff --git a/nixos/alpha/hardware-configuration.nix b/nixos/alpha/hardware-configuration.nix
index 5ec5d86..8c40065 100644
--- a/nixos/alpha/hardware-configuration.nix
+++ b/nixos/alpha/hardware-configuration.nix
@@ -21,6 +21,7 @@
   fileSystems."/boot" =
     { device = "/dev/disk/by-uuid/12CE-A600";
       fsType = "vfat";
+      options = [ "umask=0077" ];
     };
 
   fileSystems."/nix" =
diff --git a/nixos/default.nix b/nixos/default.nix
index 599ba75..22593b5 100644
--- a/nixos/default.nix
+++ b/nixos/default.nix
@@ -6,8 +6,7 @@
     nixpkgs = unstable;
     extraModules = [
       inputs.sops-nix.nixosModules.sops
-      inputs.impermanence.nixosModules.impermanence
-      inputs.attic.nixosModules.atticd
+      inputs.madness-ld.nixosModules.madness
     ];
   };
 
@@ -16,8 +15,6 @@
     nixpkgs = unstable;
     extraModules = [
       inputs.sops-nix.nixosModules.sops
-      inputs.impermanence.nixosModules.impermanence
-      inputs.attic.nixosModules.atticd
     ];
   };
 
@@ -26,8 +23,6 @@
     nixpkgs = unstable;
     extraModules = [
       inputs.sops-nix.nixosModules.sops
-      inputs.impermanence.nixosModules.impermanence
-      inputs.attic.nixosModules.atticd
     ];
     overlays = [
       (final: prev: {
diff --git a/nixos/haruka/configuration.nix b/nixos/haruka/configuration.nix
index a36d8b3..f7c0ce4 100644
--- a/nixos/haruka/configuration.nix
+++ b/nixos/haruka/configuration.nix
@@ -16,7 +16,8 @@
     sudo.wheelNeedsPassword = false;
   };
 
-  boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
+  # Use latest LTS kernel (https://github.com/NixOS/nixpkgs/pull/341596)
+  boot.kernelPackages = pkgs.linuxPackages;
   boot.kernelParams = [
     "console=tty1"
     "i915.fastboot=1"
@@ -36,27 +37,14 @@
   boot.zfs.forceImportAll = false;
   boot.zfs.allowHibernation = true; # NOTE: disable if using swap on ZFS
 
-  # GRUB bootloader
-  boot.loader.efi.canTouchEfiVariables = true;
-  boot.loader.grub = {
-    enable = true;
-
-    efiSupport = true;
-    configurationLimit = 10;
-    device = "nodev";
-    useOSProber = true;
-    copyKernels = true;
-    gfxmodeEfi = "1920x1200";
-    fontSize = 32;
-
-    extraEntries = ''
-      menuentry "Reboot" {
-        reboot
-      }
-      menuentry "Shutdown" {
-        halt
-      }
-    '';
+  boot.loader.systemd-boot = {
+    # Managed by lanzaboote
+    enable = false;
+    editor = false;
+    configurationLimit = 16;
+    # TODO: https://github.com/NixOS/nixpkgs/pull/334526
+    # bootCounting.enable = true;
+    # bootCounting.tries = 3;
   };
 
   # Erase your darlings.
@@ -126,17 +114,25 @@
 
   services.openssh.enable = true;
   services.openssh.settings.PasswordAuthentication = false;
-  services.openssh.hostKeys = [
-    {
-      path = "/persist/ssh/ssh_host_ed25519_key";
-      type = "ed25519";
-    }
-    {
-      path = "/persist/ssh/ssh_host_rsa_key";
-      type = "rsa";
-      bits = 4096;
-    }
-  ];
+
+  modules = {
+    secure-boot.enable = true;
+
+    persistence = {
+      enable = true;
+      storagePath = "/persist";
+      setupSshHostKeys = true;
+
+      directories = [
+        "/etc/NetworkManager/system-connections"
+        "/etc/cups"
+        "/var/lib/nixos"
+        "/var/lib/fprint"
+        "/var/lib/bluetooth"
+        "/var/lib/tailscale"
+      ];
+    };
+  };
 
   sops.secrets.borg-haruka-rolling-pass = { };
   services.borgbackup.jobs.haruka-rolling = {
@@ -149,6 +145,7 @@
       # Ephemeral user files
       "**/.cache"
       "**/.nix-profile"
+      "**/.config"
       # Rust build files
       "**/target"
     ];
@@ -184,8 +181,6 @@
 
   services.openssh.knownHosts."hk-s020.rsync.net".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILcPl9x9JfRFwsn09NnDw/xBZbAN80ZQck+h6AqlVqPH";
 
-  sound.enable = true;
-
   services.pipewire = {
     enable = true;
 
@@ -223,14 +218,6 @@
   services.avahi.enable = true;
   services.avahi.nssmdns4 = true;
 
-  environment.persistence."/persist".directories = [
-    "/etc/NetworkManager/system-connections"
-    "/etc/cups"
-    "/var/lib/fprint"
-    "/var/lib/bluetooth"
-    "/var/lib/tailscale"
-  ];
-
   services.pcscd.enable = true;
 
   programs.dconf.enable = true;
@@ -297,8 +284,11 @@
     fontDir.enable = true;
 
     packages = with pkgs; [
-      (nerdfonts.override { fonts = [ "Iosevka" "JetBrainsMono" ]; })
+      nerd-fonts.iosevka
+      nerd-fonts.iosevka-term
+      nerd-fonts.jetbrains-mono
       emacs-all-the-icons-fonts
+      iosevka
       jetbrains-mono
       nanum
       profont
@@ -349,10 +339,8 @@
     zsh.enableCompletion = true;
   };
 
-  hardware.opengl.enable = true;
-  hardware.opengl.driSupport = true;
-  hardware.opengl.driSupport32Bit = true;
-  hardware.opengl.extraPackages = with pkgs; [ vaapiVdpau libvdpau-va-gl ];
+  hardware.graphics.enable = true;
+  hardware.graphics.extraPackages = with pkgs; [ vaapiVdpau libvdpau-va-gl ];
 
   xdg.portal = {
     enable = true;
@@ -368,8 +356,6 @@
 
   users.mutableUsers = false;
 
-  fileSystems."/persist".neededForBoot = true;
-
   users.users = {
     root.hashedPasswordFile = config.sops.secrets.root-password.path;
     sefidel = {
diff --git a/nixos/haruka/hardware-configuration.nix b/nixos/haruka/hardware-configuration.nix
index 06a342f..6820226 100644
--- a/nixos/haruka/hardware-configuration.nix
+++ b/nixos/haruka/hardware-configuration.nix
@@ -24,6 +24,7 @@
     {
       device = "/dev/disk/by-uuid/5382-69DE";
       fsType = "vfat";
+      options = [ "umask=0077" ];
     };
 
   fileSystems."/nix" =
diff --git a/nixos/kanata/configuration.nix b/nixos/kanata/configuration.nix
index a5ed1be..c0120bb 100644
--- a/nixos/kanata/configuration.nix
+++ b/nixos/kanata/configuration.nix
@@ -62,7 +62,7 @@ in
 
   modules.tailscale-initrd = {
     enable = true;
-    # XXX: This has to be manually generatd during NixOS install.
+    # XXX: This has to be manually generated during NixOS install.
     # The files are then copied to initrd secrets during activation.
     tailscaleStatePath = "/persist/initrd/tailscale-initrd.state";
   };
@@ -70,22 +70,6 @@ in
   services.openssh.enable = true;
   users.users.root.openssh.authorizedKeys.keys = maintainerKeys;
 
-  # NOTE: managed by modules.persistence
-  # TODO: remove?
-  # fileSystems."/persist".neededForBoot = true;
-  #
-  # services.openssh.hostKeys = [
-  #   {
-  #     path = "/persist/ssh/ssh_host_ed25519_key";
-  #     type = "ed25519";
-  #   }
-  #   {
-  #     path = "/persist/ssh/ssh_host_rsa_key";
-  #     type = "rsa";
-  #     bits = 4096;
-  #   }
-  # ];
-
   sops.defaultSopsFile = ./secrets/secrets.yaml;
 
   powerManagement.cpuFreqGovernor = "ondemand";
@@ -94,7 +78,7 @@ in
   sops.secrets.nextcloud-admin-pass = { owner = "nextcloud"; };
   sops.secrets.acme-credentials = { owner = "acme"; };
   sops.secrets.grafana-admin-pass = { owner = "grafana"; };
-  sops.secrets.cf-kusanari-kanata-credentials = { owner = "cloudflared"; };
+  sops.secrets.cf-kanata-credentials = { owner = "cloudflared"; };
   sops.secrets.nitter-account-jsonl = { };
   # sops.secrets.interlink-private-key = { };
   sops.secrets.interlink-wg-config = { };
@@ -118,6 +102,46 @@ in
     enableIPv6 = true;
   };
 
+  services.nscd = {
+    enable = true;
+    config = ''
+      # We basically use nscd as a proxy for forwarding nss requests to appropriate
+      # nss modules, as we run nscd with LD_LIBRARY_PATH set to the directory
+      # containing all such modules
+      # Note that we can not use `enable-cache no` As this will actually cause nscd
+      # to just reject the nss requests it receives, which then causes glibc to
+      # fallback to trying to handle the request by itself. Which won't work as glibc
+      # is not aware of the path in which the nss modules live.  As a workaround, we
+      # have `enable-cache yes` with an explicit ttl of 0
+      server-user             nscd
+
+      enable-cache            passwd          yes
+      positive-time-to-live   passwd          0
+      negative-time-to-live   passwd          0
+      shared                  passwd          yes
+
+      enable-cache            group           yes
+      positive-time-to-live   group           0
+      negative-time-to-live   group           0
+      shared                  group           yes
+
+      enable-cache            netgroup        yes
+      positive-time-to-live   netgroup        0
+      negative-time-to-live   netgroup        0
+      shared                  netgroup        yes
+
+      enable-cache            hosts           yes
+      positive-time-to-live   hosts           3600 # Invidious spams DNS queries to PubSubHubBub
+      negative-time-to-live   hosts           0
+      shared                  hosts           yes
+
+      enable-cache            services        yes
+      positive-time-to-live   services        0
+      negative-time-to-live   services        0
+      shared                  services        yes
+    '';
+  };
+
   services.tailscale = {
     enable = true;
     useRoutingFeatures = "both";
@@ -136,6 +160,7 @@ in
   networking.firewall.allowedTCPPorts = [ 80 443 ];
   modules = {
     persistence.directories = [
+      "/var/lib/nixos"
       "/var/lib/tailscale"
       "/var/lib/nixos-containers"
     ];
@@ -143,6 +168,7 @@ in
     persistence = {
       enable = true;
       storagePath = "/persist";
+      setupSshHostKeys = true;
     };
 
     # NOTE: This module only populates route entries,
@@ -151,18 +177,18 @@ in
       enable = true;
 
       routes = {
-        "dns.kusanari.network".to = "http://localhost:4000";
-        "metrics.kusanari.network".to = "http://localhost:4001";
-        "nitter.kusanari.network".to = "http://localhost:4002";
-        "invidious.kusanari.network".to = "http://localhost:4003";
-        "hydra.kusanari.network".to = "http://localhost:4004";
-        "cache.kusanari.network".to = "http://localhost:4005";
-        "torrent.kusanari.network".to = "http://localhost:4006";
-        "paperless.kusanari.network".to = "http://localhost:4007";
-        "change.labs.kusanari.network".to = "http://localhost:4901";
+        "dns.kanata.network".to = "http://localhost:4000";
+        "metrics.kanata.network".to = "http://localhost:4001";
+        "nitter.kanata.network".to = "http://localhost:4002";
+        "invidious.kanata.network".to = "http://localhost:4003";
+        "hydra.kanata.network".to = "http://localhost:4004";
+        "cache.kanata.network".to = "http://localhost:4005";
+        "torrent.kanata.network".to = "http://localhost:4006";
+        "paperless.kanata.network".to = "http://localhost:4007";
+        "jellyfin.kanata.network".to = "http://localhost:8096";
 
         # Nginx pre-configured routes
-        "nextcloud.kusanari.network" = {
+        "nextcloud.kanata.network" = {
           to = "http://localhost:80";
           configureNginx = false;
         };
@@ -170,13 +196,13 @@ in
 
       ssl = {
         enable = true;
-        acmeHost = "kusanari.network";
+        acmeHost = "kanata.network";
       };
 
       tailscaleIp = "100.93.1.1";
-      # kusanari-kanata @ core
+      # kanata @ core
       cloudflareUUID = "bf6dcc14-d315-41c7-b798-3fe0e0e968eb";
-      secrets.cloudflare-credentials = config.sops.secrets.cf-kusanari-kanata-credentials.path;
+      secrets.cloudflare-credentials = config.sops.secrets.cf-kanata-credentials.path;
     };
 
     services.nginx.enable = true;
@@ -186,7 +212,7 @@ in
       email = poorObfuscation "sefidel.net" "postmaster";
 
       certs = {
-        "kusanari.network" = {
+        "kanata.network" = {
           subDomains = [
             "*.labs"
             "cache"
@@ -208,7 +234,7 @@ in
 
     services.metrics = {
       enable = true;
-      realHost = "metrics.kusanari.network";
+      realHost = "metrics.kanata.network";
       secrets.adminPassword = config.sops.secrets.grafana-admin-pass.path;
     };
 
@@ -217,7 +243,7 @@ in
     services.blocky = {
       enable = true;
 
-      realHost = "dns.kusanari.network";
+      realHost = "dns.kanata.network";
     };
 
     services.nextcloud = rec {
@@ -228,40 +254,40 @@ in
         acmeHost = domain;
       };
 
-      domain = "kusanari.network";
-      realHost = "nextcloud.kusanari.network";
+      domain = "kanata.network";
+      realHost = "nextcloud.kanata.network";
       secrets.admin-pass = config.sops.secrets.nextcloud-admin-pass.path;
     };
 
     services.nitter = {
       enable = true;
 
-      title = "Kusanari Nitter";
+      title = "Kanata Nitter";
 
-      domain = "kusanari.network";
-      realHost = "nitter.kusanari.network";
+      domain = "kanata.network";
+      realHost = "nitter.kanata.network";
       secrets.nitter-guest-accounts = config.sops.secrets.nitter-account-jsonl.path;
     };
 
     services.invidious = {
       enable = true;
 
-      domain = "kusanari.network";
-      realHost = "invidious.kusanari.network";
+      domain = "kanata.network";
+      realHost = "invidious.kanata.network";
       secrets.invidious-hmac-key = config.sops.secrets.invidious-hmac.path;
     };
 
     services.hydra = {
       enable = true;
 
-      baseURL = "https://hydra.kusanari.network";
+      baseURL = "https://hydra.kanata.network";
     };
 
     services.atticd = {
       enable = true;
 
-      hosts = [ "cache.kusanari.network" ];
-      baseURL = "https://cache.kusanari.network/";
+      hosts = [ "cache.kanata.network" ];
+      baseURL = "https://cache.kanata.network/";
 
       storagePath = "/smol/archive/attic";
 
@@ -280,33 +306,17 @@ in
     services.paperless = {
       enable = true;
 
-      realHost = "paperless.kusanari.network";
+      realHost = "paperless.kanata.network";
       secrets.paperless-superuser-password = config.sops.secrets.paperless-superuser-password.path;
     };
-  };
-
-  services.changedetection-io = {
-    enable = true;
-
-    listenAddress = "localhost";
-    port = 4901;
+    services.jellyfin = {
+      enable = true;
 
-    baseURL = "https://change.labs.kusanari.network";
-    behindProxy = true;
-    webDriverSupport = true;
+      dataDir = "/smol/moon/jellyfin";
+    };
   };
 
-  services.nginx.virtualHosts."change.labs.kusanari.network".locations."/" = {
-    proxyWebsockets = true;
-    extraConfig = ''
-      proxy_redirect off;
-      proxy_set_header Host $host;
-      proxy_set_header X-Real-IP $remote_addr;
-      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-      proxy_set_header X-Forwarded-Proto $scheme;
-      proxy_set_header Referer "https://change.labs.kusanari.network";
-    '';
-  };
+  users.groups.media.members = [ "jellyfin" "nextcloud" ];
 
   containers.v-interlink = {
     autoStart = true;
diff --git a/nixos/kanata/secrets/secrets.yaml b/nixos/kanata/secrets/secrets.yaml
index a32a80f..277ddd9 100644
--- a/nixos/kanata/secrets/secrets.yaml
+++ b/nixos/kanata/secrets/secrets.yaml
@@ -4,12 +4,12 @@ initrd-ts-state: ENC[AES256_GCM,data:8xftKiXfuaWB4XxvP9LBAmFTbX1VbGJix6SqkIbDliU
 zfs-smol-key: ENC[AES256_GCM,data:M6JUsFoAvt2nqI/9bVq0slhrcQE8sGgC3s0x,iv:hZK99Veh+oMhxxA9BbBe7OBisjhF00baAb1JQ7yfMaA=,tag:30GjpPzIpgw5htoK1BcmUg==,type:str]
 nextcloud-admin-pass: ENC[AES256_GCM,data:Lvk/j/3fissx6Kyccp9q2gi7ahbd+pR7jFXnx5OL0JRG,iv:Y0GI/z4pFW98Ll6xpuENr+fTrm7JoE9KadDKx2O4WLI=,tag:ofln+SgrhJm8BpKnVSngoQ==,type:str]
 grafana-admin-pass: ENC[AES256_GCM,data:waHiV4NyatwQrvRkws8FQut49/ryh9srNSshUbvm,iv:XvU06AqljDsUk9smAak/4OCursX6U/SckPc92AkSTWk=,tag:xBcELmTUUs0mzOY+oiqidA==,type:str]
-cf-kusanari-kanata-credentials: ENC[AES256_GCM,data:whwnxMT9JS3iDHbGTk2FoeDBiug26JoRWlyA3sOij861PVJZBEvQJubXD2E5hSwJhyoMIUpb8wgnvB/6GhznouwWfsNh7I39wcaxvHArTNkW+LXrAu8m7ra5dtSUHhPUQifLNYB/TsKHsB+TMhc5IMD6hAHs4uraZHmF1cej8PufTDKDLHjwVwDDJSP1ujQaUrRUvp4NUc8ImVCwnG0PYCVv,iv:umi4Yj11E6+BriksGLzvm+YW7NuARmRtvHz2cixILQA=,tag:+LQs2veOW0CmSKCUNtd9KA==,type:str]
+cf-kanata-credentials: ENC[AES256_GCM,data:zOKmtTXbmkFD8QOY2dO3pIhru3+2N5DqP+CQUPdiW5guXCzxBUI9ueosoT7qbmm9Ks1KlJ372Ah5riKHT4x2qUg642bnDrjbx4IvKZgenvLsf6XIEFKuV6XKfp6XI6cMoOGF6J/HGv0s/my9jBMAWMNgLC8ilQXH8L3BzjRANJpkzrak6oEMbarTIdwsZoBOD7xDnt4nDerAANsfaYEzt2YU,iv:imseTCuMGUSR9WkDHGlUmjdqOKGBigAEX3ClckIYa9U=,tag:0of2EZxi1QWejfK8s4x7mw==,type:str]
 nitter-account-jsonl: ENC[AES256_GCM,data:a7nSbFcG+E5xXnY4moLAu1ULujjZ8czGGLQNqaLZtFISG5Fc/0mMwRxKdArp9pwdUrteSUWzoKlkeTfsHsoS4TmPMuna/nLKSjBV1bvPdOuBEIi6IP9o6zb9izUvcwTAcMiWPjeRYNyLy5p9tvdIQ0MmRmd5UW9WUILLs7r5dmIK/ssNgYf89jJsdhBRpzOmjOtBbzn2uTA6+3s7ldswSWhAP94654Hrbg1IKxvefAgAqm+/2aNvY1Jxh71bNlWH+/WNBtH7pC24NeNWjiNHKzGhix2UecmcQ5/CEo8DBa6mg4gpe9i+VxzHhl3NJoFrfuicFT2ebTEjv8p7ZXLF3ZRgscXXb9YJ5CjmVILiUh/yYqM2jzSLbGHKIetlNFlmNkAYXN3j+A4w4Jiu4lVA3jwFPVxk92pSHi7hhib5gP3P20Zfbr89zk9tGIBQVDWo4p1LrwumH6aCq+XaIPAHOspFheIteZUJ1q0V2vylrBfkrj+ISDQ94aWgSKC74dynGL4joH4DJ2g6xSh26FMNlvBR7Mwg1PpfmJKx0I3iROoEc3RCPdxaoPiJNL7gpRlHV2a5H+ZCgpuWxcQ=,iv:joZcbUidniBqGu9Lkg6wd+mBdmgU/inbPEOlXewU5U4=,tag:y8Uv4zxuTAsTKB+OB4S6Xw==,type:str]
 acme-credentials: ENC[AES256_GCM,data:6SIuFH3sRcz/Z855br7VgFKEEA1crztKmhVd3chK7ERJpfG9pTxxX0mAxG3aK5OhXwZpDMp0YkxtEphdkb5m0ZU=,iv:bUMtK0SvtrNwlhuY1k0dNVIOcJgM1OLjmbl+X+Zj01E=,tag:x6kdGrSsImZlpHrPnEAmXA==,type:str]
 invidious-hmac: ENC[AES256_GCM,data:uIw4aQm6oYd5heSxrJnt6Nvc+fTPLMSEDtDyZ/ayogl6qx/gPg==,iv:8AVzwO9peE0UC70nLxBxHKzTcitrzvBvy120fdQD1+c=,tag:rr7MOqgOFFxXN8W+9MKvLg==,type:str]
 #ENC[AES256_GCM,data:c0B2RqGRFmyxyz93TCWL5wMTYiFmnvWU9aQwZszQ137fhL7bQdENPLWQkoiWyW6o3GXTyuL2bni1VnO4eD5idWzt7dw=,iv:147La8vNPRLMnK992cQD1NmQgbDrDBLwSPEX4haeIS4=,tag:hmGGslH4O9dlTSoDTWIdIg==,type:comment]
-interlink-wg-config: ENC[AES256_GCM,data:zT0yr7O4JhpmnI5++cK7aJEKkLM9rxcWGyvwJ7Q4ZR6wWLe0LnNIzEpjjMAvh/If4NYOU8qpVOUgxaREij3hIhJ1QzyAb/nF80msZWDmmMvtVLZmC1wNw+p88UKrPwRBbLIwVbwCyWJtIdnZTHzscktfSY+mC/mB8fESh8XpRXH7YW/W1+nyrSQCmJ3LGopHBukqJstLunu7qW34xZ5k37/TKToyqW4JLUxamrPsBycR1ZnfTvIHluOvXhQLOleBEJN+GyduRqPV7tAajbMZAlyZa5Y6mGVA0kcba3GpuiV4uQjFJcSiYLa2JztWSbsWFJBl1YPXdsWzWOrQ,iv:iiye6Zb2OlctZFFuRbJ7RiXW0k400/DmWDlh5SXgp+Q=,tag:qa3BedClEOaSyst+xjPe4Q==,type:str]
+interlink-wg-config: ENC[AES256_GCM,data:vao5c0rUCjjd+c2bqqpk7VQZ28yWmAEpBp9sXyh1IRE2MeoWNj0m+e4EbqmEFVKfRbOFgkj5Ek5dAKs7UEb2NMxNYh+s/3cDj8i0cls7fRyb02ctMEVQN2hgArOwG4MdFHPn8BDhyChnAo+FkSS7q8p3AOLehB2jrQg+tzY31l3d01Cfcqswh1wJ8p4eSevvmx5PwNeH7fh35HOh5qzcJFrHkr+eUnKWXyF3zKiKAf/KM5cfz/3WVg4omRjrQCWRHjXrCHh53a7QGlYy1V4KFjzJGriywicGsbvLrnR5Fr2AZCK781NWO/Vxf2PiFzsLHpJ4wTmfkUKNrWDu,iv:iJNc+HrCKs6fUtMkSZ8HZJQE0+GXzxZBIAWFO13DseY=,tag:wUww5nKO+h21HAor+UUIAg==,type:str]
 proton-private-key: ENC[AES256_GCM,data:OnZGYf/203XOLXyDRIqrRKwLe0cN2c0RF+CkwwNtttP+ACD3AJCY0rNgKoc=,iv:IWFF95Z3r+OuSu+GfJWJjwRv5b9KZSKGMuxSnkRGqlg=,tag:QvDBvSzzGxwawhaio47MEQ==,type:str]
 attic-credentials: ENC[AES256_GCM,data:S25D1E4kTp2Nre1uu1WWVV1jrEpQtPz5+5XQ/W0pr0CF5pFm0UEyGn2XdJKQzyM5CYSCo581JeJNMtTKIwEKm8lYY9X5e8Jgwe2o5f5YRwmHSfvK1UAJoUdM7Q0FaAcVTU3bNis1dClqDvB0QbNjF1xsYCKCgZRe8TSenmJgPjA=,iv:m+UzkoVsEfUtKIYaGZIej4efhVuWN4EKCqMamlQwWaI=,tag:vBPq0JkRDbKmyw9qLbh1gg==,type:str]
 transmission-extra-config: ENC[AES256_GCM,data:lyZ8Nkjp0Mjm4HFDqRN1G6iyBksHT6dKKQDSO8Br1DpXxKLDBclQ4L2F1FqQJ3OB/7o4EqWFX8J1ZjVYDCQkQnhr6v13glvFciICQ99hPsypUS349936vDCgEF/WP0RAHOsaRq81JnMDegZvEg==,iv:bfN2oEfQ3uk4i6hwHp2ZdYCf3l7Kb0EoXSEGyOSB8CM=,tag:fZkMayEJiXzifTCiVLJq6w==,type:str]
@@ -38,8 +38,8 @@ sops:
             YkRGS2ZBbm1keWpUQUFOWDRtTWZVa0EKc+lKEP0L/yoFLx6p1zbWfifPWc7Y9Qqh
             qccODSyHqzwdriHLxXuw9SCnF+SeA721te6+pDVhJj8vqv2UqHiATw==
             -----END AGE ENCRYPTED FILE-----
-    lastmodified: "2024-04-05T15:01:25Z"
-    mac: ENC[AES256_GCM,data:ndnsAuHSyQSGx0G2YzECaZhGDvVbbXDbSWLdh1r2Vy6beVeX/e6JP7AxnIRfhipKfJLlhOA1rtbCOiwpq4FubozXDJOviI0oLZWU4ZDSCgWHKsUVoMdC3gqw87Qhts77PfDqdYVgglAr2/n6AzhY8NVkjuMWu4iDiD9yfb+bJ5o=,iv:J32wZYk6yiEgJBWrs6QTjM/EY6XqRfu/BkhiP9PxAWQ=,tag:eL3mcerITq55qYlxF5JhEw==,type:str]
+    lastmodified: "2024-12-08T16:00:13Z"
+    mac: ENC[AES256_GCM,data:6SjNDZWaGYObqWM9UXlxPEwbSdu74Ih21sYcUnqVDttznMtCTbsJ154bhNQXSK4LhKnfocp0IpO9Ft5ZLS4cEXJ6XqWeZKqTl+b14Y0Pw6xEq7330DxbDxwMSwk+0IEn0Xo3vMy6MisSgcOsm9R5E61vjNfWFH6EKTjE0MefbbQ=,iv:KvYvDo9GM+qimRjmE6NcGAoGfp8w+I+1YCI4gwrq9eI=,tag:96oHidSwuJdC8+HVNtD+zA==,type:str]
     pgp: []
     unencrypted_suffix: _unencrypted
-    version: 3.8.1
+    version: 3.9.1