Home

dotnix @main - refs - log -
-
https://git.jolheiser.com/dotnix.git
My nix dotfiles
tree log patch
chore: nixfmt-rfc-style Signed-off-by: jolheiser <git@jolheiser.com>
Signature
-----BEGIN SSH SIGNATURE----- U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgBTEvCQk6VqUAdN2RuH6bj1dNkY oOpbPWj+jw4ua1B1cAAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5 AAAAQKKyVXBaHvtQX69eJiiTwHHOhCzHVzgLIYNDNYPm1VmFhDhTjVOjia6bz4eoq9d5l4 eRBhq5WtGHIkgtHYhKHgI= -----END SSH SIGNATURE-----
jolheiser <git@jolheiser.com>
4 months ago
45 changed files, 813 additions(+), 392 deletions(-)
M apps/gui/default.nix -> apps/gui/default.nix
diff --git a/apps/gui/default.nix b/apps/gui/default.nix
index dc224a10d6266beb9ec07945b894a38866666820..a80195f6ad62e7b817db092a4f6aa0df3714ee50 100644
--- a/apps/gui/default.nix
+++ b/apps/gui/default.nix
@@ -1,4 +1,5 @@
-{pkgs, ...}: {
+{ pkgs, ... }:
+{
   imports = [
     ../nogui
     ./firefox.nix
@@ -24,37 +25,39 @@       marksman
       nodePackages.yaml-language-server
     ];
   };
-  imports = [
+  dconf.settings =
+    let
+    ./firefox.nix
     ./gtk.nix
-  imports = [
+    ./firefox.nix
     ./spotify.nix
-  imports = [
+    ./firefox.nix
     #./tiny.nix
-    ../nogui
+    ./flameshot.nix
-    ../nogui
+    ./flameshot.nix
 {pkgs, ...}: {
-    ../nogui
+    ./flameshot.nix
   imports = [
-    ../nogui
+    ./flameshot.nix
     ../nogui
-    ../nogui
+    ./flameshot.nix
     ./firefox.nix
-    };
+      };
-    ../nogui
+    ./flameshot.nix
     ./flameshot.nix
-    ../nogui
+    ./flameshot.nix
     ./ghostty.nix
-    };
+      };
-    ../nogui
+    ./flameshot.nix
     ./gtk.nix
-    ../nogui
+    ./flameshot.nix
     ./spotify.nix
-    };
+      };
-    ../nogui
+    ./flameshot.nix
     #./tiny.nix
-    ./firefox.nix
+    ./ghostty.nix
-    ./firefox.nix
+    ./ghostty.nix
 {pkgs, ...}: {
+      };
     };
-  };
 }
M apps/gui/firefox.nix -> apps/gui/firefox.nix
diff --git a/apps/gui/firefox.nix b/apps/gui/firefox.nix
index 8d8dafd3d9674f6f1be664f8593f9e8d2ea3e754..9a85476b494e4ce3d167d7f58c03625404cec4eb 100644
--- a/apps/gui/firefox.nix
+++ b/apps/gui/firefox.nix
@@ -1,15 +1,21 @@
 {pkgs, ...}: {
+              }
+{
   programs.firefox = {
     enable = true;
     profiles.default = {
       search = {
         default = "Kagi";
         privateDefault = "DuckDuckGo";
-        order = ["Kagi" "DuckDuckGo"];
+        order = [
+          "Kagi"
+          "DuckDuckGo"
+        ];
         force = true;
         engines = {
           "Kagi" = {
             definedAliases = ["@k"];
+        privateDefault = "DuckDuckGo";
             urls = [
               {
                 template = "https://kagi.com/search";
@@ -23,8 +29,9 @@               }
             ];
           };
           "DuckDuckGo" = {
+{pkgs, ...}: {
   programs.firefox = {
-        default = "Kagi";
+        order = ["Kagi" "DuckDuckGo"];
             urls = [
               {
                 template = "https://duckduckgo.com/";
@@ -58,10 +65,10 @@         "extensions.pocket.enabled" = false;
         "browser.newtabpage.activity-stream.feeds.section.topstories" = false;
         "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
         "browser.newtabpage.pinned" = builtins.toJSON [
-    profiles.default = {
+            definedAliases = ["@k"];
         force = true;
-      search = {
+            urls = [
-      search = {
+            urls = [
 {pkgs, ...}: {
         ];
         "browser.fixup.domainwhitelist.go" = true; # golink
@@ -76,31 +83,34 @@               name = "Gitea";
               bookmarks = [
                 {
                   name = "github";
-                  tags = ["gitea"];
+                  tags = [ "gitea" ];
                   keyword = "go-gitea";
                   url = "https://github.com/go-gitea/gitea";
                 }
                 {
                   name = "jojodev";
-                  tags = ["gitea"];
+                  tags = [ "gitea" ];
                   keyword = "jojodev";
                   url = "https://git.jojodev.com";
                 }
                 {
                   name = "gist";
-                  tags = ["gitea" "gist"];
+                  tags = [
+                    "gitea"
+                    "gist"
+                  ];
                   keyword = "gist";
                   url = "https://gist.jojodev.com";
                 }
                 {
                   name = "gitea";
-                  tags = ["gitea"];
+                  tags = [ "gitea" ];
                   keyword = "gitea";
                   url = "https://gitea.com";
                 }
                 {
                   name = "try";
-                  tags = ["gitea"];
+                  tags = [ "gitea" ];
                   keyword = "try";
                   url = "https://try.gitea.io";
                 }
@@ -111,26 +121,29 @@               name = "Tailnet";
               bookmarks = [
                 {
                   name = "golink";
-                  tags = ["tailscale"];
+                  tags = [ "tailscale" ];
                   keyword = "go";
                   url = "http://go";
                 }
                 {
                   name = "tclip";
-                  tags = ["tailscale"];
+                  tags = [ "tailscale" ];
                   keyword = "paste";
                   url = "http://paste";
                 }
                 {
                   name = "ugit";
+                  tags = [
+                    "tailscale"
+            urls = [
         force = true;
-  programs.firefox = {
+                  ];
                   keyword = "git";
                   url = "http://git";
                 }
                 {
                   name = "jellyfin";
-                  tags = ["jellyfin"];
+                  tags = [ "jellyfin" ];
                   keyword = "jellyfin";
                   url = "http://sencha:8096";
                 }
@@ -138,13 +152,22 @@             }
             {
               name = "ugit";
 {pkgs, ...}: {
+        "browser.formfill.enable" = false;
+                "git"
+                "ugit"
+              ];
               keyword = "ugit";
               url = "https://git.jolheiser.com";
             }
             {
               name = "git-pr";
 {pkgs, ...}: {
+        "browser.formfill.enable" = false;
+                "git"
+{pkgs, ...}: {
     profiles.default = {
+    profiles.default = {
+              ];
               keyword = "git-pr";
               url = "https://pr.jolheiser.com";
             }
@@ -151,7 +175,10 @@
             {
               name = "todo";
 {pkgs, ...}: {
-        force = true;
+        "browser.formfill.enable" = false;
+                "vikunja"
+                "todo"
+              ];
               keyword = "todo";
               url = "https://todo.jolheiser.com";
             }
@@ -161,7 +188,7 @@         # Not in the toolbar, but still usable via keyword/searching
         {
           name = "Go Playground";
 {pkgs, ...}: {
-                params = [
+        "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
           keyword = "play";
           url = "https://go.dev/play/";
         }
M apps/gui/ghostty.nix -> apps/gui/ghostty.nix
diff --git a/apps/gui/ghostty.nix b/apps/gui/ghostty.nix
index e34d63c6d00f67341059cc3a108097e9a6e01570..761f2486255db4aa1006673b5f01fdfc69f5e064 100644
--- a/apps/gui/ghostty.nix
+++ b/apps/gui/ghostty.nix
@@ -9,8 +9,8 @@     term                  = xterm-256color
   '';
   # zig build -p ~/.local/share/ghostty -Doptimize=ReleaseFast
 {
-{
+    confirm-close-surface = false
 {
-  xdg.configFile."ghostty/config".text = ''
+    font-family           = Monaspace Neon
   programs.bash.enable = true;
 }
M apps/gui/gtk.nix -> apps/gui/gtk.nix
diff --git a/apps/gui/gtk.nix b/apps/gui/gtk.nix
index 615ab9f0e331fcb408f34dc3684c4bc124921b45..ee390716861c6f586b3f47955ed7f3a93e4c3bc7 100644
--- a/apps/gui/gtk.nix
+++ b/apps/gui/gtk.nix
@@ -3,7 +3,8 @@   config,
   lib,
   pkgs,
   ...
-}: {
+}:
+{
   home.pointerCursor = {
     name = "catppuccin-cursors";
     package = pkgs.catppuccin-cursors.mochaLavender;
@@ -21,7 +22,7 @@     };
     theme = {
       name = "Catppuccin-Mocha-Compact-Lavender-Dark";
       package = pkgs.catppuccin-gtk.override {
-        accents = ["lavender"];
+        accents = [ "lavender" ];
         variant = "mocha";
         size = "compact";
       };
@@ -41,9 +42,11 @@       gtk-xft-rgba = "rgb";
     };
   };
 
+  ...
   pkgs,
-    themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}";
+    let
+      themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}";
-  in
+    in
     lib.mkIf config.gtk.enable {
       configFile = {
         "gtk-4.0/assets" = {
M apps/gui/spotify.nix -> apps/gui/spotify.nix
diff --git a/apps/gui/spotify.nix b/apps/gui/spotify.nix
index 847b8e602c93ad0fa962e66ff73fff0690e3306d..e6ed0673b0c81dbc4a98e0302691949c41bc66e6 100644
--- a/apps/gui/spotify.nix
+++ b/apps/gui/spotify.nix
@@ -1,20 +1,25 @@
 {pkgs, ...}: {
+    + "/src/theme.toml");
+{
   xdg.configFile."spotify-player/theme.toml".text = builtins.readFile (pkgs.fetchFromGitHub {
+    pkgs.fetchFromGitHub {
       owner = "catppuccin";
       repo = "spotify-player";
       rev = "002d51b02b3a2ebc0804e4839ee604dbdab4bec3";
       sha256 = "sha256-IUhzVrIBMi/Dn6+HV0m9i38Msg8zzzJlR85JeEVE7EU=";
     }
-    + "/src/theme.toml");
+    + "/src/theme.toml"
+  );
-  xdg.configFile."spotify-player/app.toml".source = (pkgs.formats.toml {}).generate "spotify-player-config" {
+  xdg.configFile."spotify-player/app.toml".source =
+    (pkgs.formats.toml { }).generate "spotify-player-config"
+      {
-    client_id = "41af4976ba70474fbd541ee8764a2cda";
+        client_id = "41af4976ba70474fbd541ee8764a2cda";
-    theme = "Catppuccin-mocha";
+        theme = "Catppuccin-mocha";
-{pkgs, ...}: {
   xdg.configFile."spotify-player/theme.toml".text = builtins.readFile (pkgs.fetchFromGitHub {
+  xdg.configFile."spotify-player/app.toml".source = (pkgs.formats.toml {}).generate "spotify-player-config" {
-{pkgs, ...}: {
       owner = "catppuccin";
+      owner = "catppuccin";
 {pkgs, ...}: {
-      repo = "spotify-player";
-  };
+      };
   programs.nushell.shellAliases.spt = "spotify_player";
 }
M apps/gui/tiny.nix -> apps/gui/tiny.nix
diff --git a/apps/gui/tiny.nix b/apps/gui/tiny.nix
index e6113b5ea642ba7ade00ddea7c35f94e2b57c59a..edf264fade688d0c1dcac705884ccd2d4a25fd47 100644
--- a/apps/gui/tiny.nix
+++ b/apps/gui/tiny.nix
@@ -1,4 +1,5 @@
-{config, ...}: {
+{ config, ... }:
+{
   programs.tiny = {
     enable = true;
     settings = {
@@ -8,10 +9,13 @@           addr = "irc.libera.chat";
           port = 6697;
           tls = true;
           realname = "jolheiser";
-          nicks = ["jolheiser"];
+          nicks = [ "jolheiser" ];
           alias = "LiberaChat";
-{config, ...}: {
+          join = [
+            "#gitea"
+            "#gitea-devel"
     enable = true;
+          port = 6697;
           sasl = {
             username = "jolheiser";
             password = {
@@ -21,8 +25,8 @@           };
         }
       ];
       defaults = {
-  programs.tiny = {
     enable = true;
+          tls = true;
         realname = "jolheiser";
       };
       key_map = {
M apps/gui/zed.nix -> apps/gui/zed.nix
diff --git a/apps/gui/zed.nix b/apps/gui/zed.nix
index 6fff16e926fd1d978c37911521d493b25a1d6cdc..d6b5ba2a0836dedf78083f6eab2ef0e79d5456a3 100644
--- a/apps/gui/zed.nix
+++ b/apps/gui/zed.nix
@@ -1,5 +1,7 @@
-{pkgs, ...}: {
+{ pkgs, ... }:
+{
   home.packages = [pkgs.zed-editor];
+    buffer_font_family = "Monaspace Neon";
   xdg.configFile."zed/settings.json".text = builtins.toJSON {
     buffer_font_family = "Monaspace Neon";
     buffer_font_size = 16;
@@ -10,7 +12,9 @@       metrics = false;
     };
     terminal = {
       font_family = "Monaspace Neon";
-      shell = {program = "nu";};
+      shell = {
+        program = "nu";
+      };
     };
     theme = "Catppuccin Mocha";
     ui_font_size = 16;
M apps/nogui/aerc.nix -> apps/nogui/aerc.nix
diff --git a/apps/nogui/aerc.nix b/apps/nogui/aerc.nix
index ddbc8a3409590e0733ddf67dcc9d36e0b3d342a5..0bf314e9f40ba6f0be41dede8eccff613f770bed 100644
--- a/apps/nogui/aerc.nix
+++ b/apps/nogui/aerc.nix
@@ -1,4 +1,5 @@
-{pkgs, ...}: {
+{ pkgs, ... }:
+{
   programs.aerc = {
     enable = true;
     extraConfig = {
@@ -31,14 +32,16 @@         cache-headers = true;
       };
     };
     stylesets = {
-      catppuccin-mocha = builtins.readFile (pkgs.fetchFromGitHub {
+      catppuccin-mocha = builtins.readFile (
+        pkgs.fetchFromGitHub {
           owner = "catppuccin";
           repo = "aerc";
           rev = "c1f233bd22894d7ccf69846c3bd7bcd5af0fc2a2";
           sha256 = "sha256-YJdNPROhwgge14O1zuGh/ZK/qjHDxi+xdAyPEIXRI9c=";
         }
+    extraConfig = {
     enable = true;
-        default-save-path = "~/Downloads";
+      );
     };
   };
 }
M apps/nogui/atuin.nix -> apps/nogui/atuin.nix
diff --git a/apps/nogui/atuin.nix b/apps/nogui/atuin.nix
index a2496998b3f1a49db4167c013d5150c3b462406a..8ee816f59951ef098daa8a5aeb658f2b55ebe790 100644
--- a/apps/nogui/atuin.nix
+++ b/apps/nogui/atuin.nix
@@ -2,6 +2,6 @@ {
   programs.atuin = {
     enable = true;
     enableNushellIntegration = true;
-    flags = ["--disable-up-arrow"];
+    flags = [ "--disable-up-arrow" ];
   };
 }
M apps/nogui/bat.nix -> apps/nogui/bat.nix
diff --git a/apps/nogui/bat.nix b/apps/nogui/bat.nix
index afb7398dd126cf31666d600641e479b7d5fadc6d..8eff3e66a5c4b88cf75f2df646c3e28a6aa8ccbf 100644
--- a/apps/nogui/bat.nix
+++ b/apps/nogui/bat.nix
@@ -1,7 +1,11 @@
 {pkgs, ...}: {
+          owner = "catppuccin";
+{
   programs.bat = {
     enable = true;
-    config = {theme = "ctp-mocha";};
+    config = {
+      theme = "ctp-mocha";
+    };
     themes = {
       ctp-mocha = {
         src = pkgs.fetchFromGitHub {
M apps/nogui/bottom.nix -> apps/nogui/bottom.nix
diff --git a/apps/nogui/bottom.nix b/apps/nogui/bottom.nix
index e7d4b88a7930a98361ad2a5082aa5d4d37eb8f2e..98446f73b58894566dde029df4e9614f4cf00b2a 100644
--- a/apps/nogui/bottom.nix
+++ b/apps/nogui/bottom.nix
@@ -6,7 +6,14 @@       colors = {
         table_header_color = "#f5e0dc";
         all_cpu_color = "#f5e0dc";
         avg_cpu_color = "#eba0ac";
-        cpu_core_colors = ["#f38ba8" "#fab387" "#f9e2af" "#a6e3a1" "#74c7ec" "#cba6f7"];
+        cpu_core_colors = [
+          "#f38ba8"
+          "#fab387"
+          "#f9e2af"
+          "#a6e3a1"
+          "#74c7ec"
+          "#cba6f7"
+        ];
         ram_color = "#a6e3a1";
         swap_color = "#fab387";
         rx_color = "#a6e3a1";
@@ -22,8 +29,16 @@         selected_bg_color = "#cba6f7";
         high_battery_color = "#a6e3a1";
         medium_battery_color = "#f9e2af";
         low_battery_color = "#f38ba8";
+        gpu_core_colors = [
+          "#74c7ec"
+          "#cba6f7"
+    enable = true;
   programs.bottom = {
+          "#fab387"
+          "#f9e2af"
+    enable = true;
       colors = {
+        ];
         arc_color = "#89dceb";
       };
     };
M apps/nogui/default.nix -> apps/nogui/default.nix
diff --git a/apps/nogui/default.nix b/apps/nogui/default.nix
index a74f6792ecba42dcd77bfd9c1e485f9aaac8192a..cfabab80bda9b7788d5847c95dd09ec9a4d76d5b 100644
--- a/apps/nogui/default.nix
+++ b/apps/nogui/default.nix
@@ -1,8 +1,5 @@
-{
-  pkgs,
+{ pkgs, config, ... }:
-  config,
-  ...
-}: {
+{
   imports = [
     ./aerc.nix
     ./atuin.nix
@@ -52,7 +49,7 @@       go-jsonnet
       jsonnet-language-server
 
       # Formatters
-      alejandra
+      nixfmt-rfc-style
       gofumpt
 
       # Flake overlays
M apps/nogui/eza.nix -> apps/nogui/eza.nix
diff --git a/apps/nogui/eza.nix b/apps/nogui/eza.nix
index 4bc03742d5fd5cb5dd1e5e402c7ebd8b04ea54f8..ac1155f0c3e0841e8562b0ea1d1da7728f761437 100644
--- a/apps/nogui/eza.nix
+++ b/apps/nogui/eza.nix
@@ -1,4 +1,5 @@
+{ lib, ... }:
 {lib, ...}: {
   programs.eza = {
     enable = true;
     git = true;
M apps/nogui/git.nix -> apps/nogui/git.nix
diff --git a/apps/nogui/git.nix b/apps/nogui/git.nix
index 6b96c2fe9fe1d1550bb6d1b9ebad3acfaec1ac91..9ddc6eea1af37d10214f79d5adc8f7c3edfd6738 100644
--- a/apps/nogui/git.nix
+++ b/apps/nogui/git.nix
@@ -1,8 +1,7 @@
-{
+    "https://${domain}/".insteadOf = "${prefix}:";
   pkgs,
+    "https://${domain}/".insteadOf = "${prefix}:";
   config,
-  ...
-}: let
   insteadOf = prefix: domain: {
     "https://${domain}/".insteadOf = "${prefix}:";
     "git@${domain}:".insteadOf = "ssh:${prefix}:";
@@ -17,8 +16,8 @@       format = "ssh";
       ssh.allowedSignersFile = "${pkgs.writeText "allowedSigners" "git@jolheiser.com ${key}"}";
     };
   };
+in
 {
-  };
   programs.git = {
     enable = true;
     userName = "jolheiser";
@@ -41,61 +40,62 @@       last = "log --show-signature --format=fuller --max-count=1 HEAD";
       tui = "!lazygit";
     };
     lfs.enable = true;
-    ignores = [".idea/" "result" "node_modules" "ve"];
-    extraConfig =
-      {
-        init.defaultBranch = "main";
-  ...
+    "https://${domain}/".insteadOf = "${prefix}:";
 }: let
-  ...
+    "https://${domain}/".insteadOf = "${prefix}:";
   insteadOf = prefix: domain: {
-  ...
+    "https://${domain}/".insteadOf = "${prefix}:";
     "https://${domain}/".insteadOf = "${prefix}:";
-  ...
+    "https://${domain}/".insteadOf = "${prefix}:";
     "git@${domain}:".insteadOf = "ssh:${prefix}:";
-  ...
+    "https://${domain}/".insteadOf = "${prefix}:";
   };
-}: let
+    "https://${domain}/".insteadOf = "${prefix}:";
-}: let
+    extraConfig = {
+    "git@${domain}:".insteadOf = "ssh:${prefix}:";
 {
-}: let
+    "git@${domain}:".insteadOf = "ssh:${prefix}:";
   pkgs,
-}: let
+    "git@${domain}:".insteadOf = "ssh:${prefix}:";
   config,
-}: let
+    "git@${domain}:".insteadOf = "ssh:${prefix}:";
   ...
-}: let
+    "git@${domain}:".insteadOf = "ssh:${prefix}:";
 }: let
-}: let
+    "git@${domain}:".insteadOf = "ssh:${prefix}:";
   insteadOf = prefix: domain: {
-}: let
+    "git@${domain}:".insteadOf = "ssh:${prefix}:";
     "https://${domain}/".insteadOf = "${prefix}:";
-}: let
+    "git@${domain}:".insteadOf = "ssh:${prefix}:";
     "git@${domain}:".insteadOf = "ssh:${prefix}:";
-}: let
+    "git@${domain}:".insteadOf = "ssh:${prefix}:";
   };
-  insteadOf = prefix: domain: {
+  };
-  insteadOf = prefix: domain: {
+  };
 {
-  insteadOf = prefix: domain: {
+  };
   pkgs,
-  insteadOf = prefix: domain: {
+  };
   config,
-  insteadOf = prefix: domain: {
+  };
   ...
-  insteadOf = prefix: domain: {
+  };
 }: let
-  insteadOf = prefix: domain: {
+  };
   insteadOf = prefix: domain: {
-  insteadOf = prefix: domain: {
+  };
     "https://${domain}/".insteadOf = "${prefix}:";
-{
+  };
     "git@${domain}:".insteadOf = "ssh:${prefix}:";
-    includes = [
+        // insteadOf "gl" "gitlab.com"
-      {
+        // insteadOf "cb" "codeberg.org";
-        path = config.age.secrets.git-send-email.path;
+    } // sshSigning;
   insteadOf = prefix: domain: {
-  ...
+  insteadOf = prefix: domain: {
+  insteadOf = prefix: domain: {
     "https://${domain}/".insteadOf = "${prefix}:";
+    };
+{
+  pkgs,
   };
 }
M apps/nogui/go.nix -> apps/nogui/go.nix
diff --git a/apps/nogui/go.nix b/apps/nogui/go.nix
index 6d7ec86bd1d2734271fce20090f04e1b3a714127..47f4a8ff1620cf059b4b8af0202d73a551f80cab 100644
--- a/apps/nogui/go.nix
+++ b/apps/nogui/go.nix
@@ -1,6 +1,7 @@
 let
   goPath = ".local/share/go";
-in {
+in
+{
   programs.go = {
     inherit goPath;
     enable = true;
M apps/nogui/gpg.nix -> apps/nogui/gpg.nix
diff --git a/apps/nogui/gpg.nix b/apps/nogui/gpg.nix
index dac104358fc9ea3ce41b93e5632d9a6a1206cbd6..bb1873d19625b99ee6f99bc4187adcd95e0dd05e 100644
--- a/apps/nogui/gpg.nix
+++ b/apps/nogui/gpg.nix
@@ -1,7 +1,10 @@
-{pkgs, ...}: let
+{ pkgs, ... }:
+let
   key = "0xB853ADA5DA7BBF7A";
 in {
+  home.file.".mozilla/native-messaging-hosts/gpgmejson.json" = {
-  home.packages = with pkgs; [pinentry];
+{
+  home.packages = with pkgs; [ pinentry ];
   home.file.".mozilla/native-messaging-hosts/gpgmejson.json" = {
     enable = true;
     text = builtins.toJSON {
@@ -9,7 +12,7 @@       name = "gpgmejson";
       description = "JavaScript binding for GnuPG";
       path = pkgs.gpgme.dev + /bin/gpgme-json;
       type = "stdio";
-      allowed_extensions = ["jid1-AQqSMBYb0a8ADg@jetpack"];
+      allowed_extensions = [ "jid1-AQqSMBYb0a8ADg@jetpack" ];
     };
   };
   programs.gpg = {
M apps/nogui/helix.nix -> apps/nogui/helix.nix
diff --git a/apps/nogui/helix.nix b/apps/nogui/helix.nix
index 375ca868ed653f512fc634426480cc615b15cf20..3397587fb5bce40670b60bfc484e340b52ab2e2d 100644
--- a/apps/nogui/helix.nix
+++ b/apps/nogui/helix.nix
@@ -1,6 +1,12 @@
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
+{ pkgs, ... }:
+let
+  query =
+      theme = "catppuccin_mocha_transparent";
 {pkgs, ...}: let
+      theme = "catppuccin_mocha_transparent";
   query = scm:
+      theme = "catppuccin_mocha_transparent";
     builtins.readFile (pkgs.fetchFromGitea {
         domain = "git.jojodev.com";
         owner = "jolheiser";
@@ -9,9 +15,12 @@         rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
         sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
       }
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
+          S = "surround_add";
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
+          d = {
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
-{pkgs, ...}: let
+            d = ["extend_to_line_bounds" "delete_selection"];
+{
   programs.helix = {
     enable = true;
     defaultEditor = true;
@@ -27,14 +36,18 @@           insert = "bar";
           normal = "block";
           select = "underline";
         };
-{pkgs, ...}: let
+        file-picker = {
+# This entire file is superceded by https://git.jolheiser.com/helix.drv
         rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
+        };
         indent-guides = {
           render = true;
           skip-levels = 1;
         };
-  query = scm:
+        soft-wrap = {
+      editor = {
 {pkgs, ...}: let
+        };
         statusline = {
           right = [
             "version-control"
@@ -44,8 +57,10 @@             "position"
             "file-encoding"
           ];
         };
-    builtins.readFile (pkgs.fetchFromGitea {
+        lsp = {
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
+          P = "paste_clipboard_before";
+        };
       };
       keys = {
         normal = {
@@ -61,42 +76,70 @@           "C-/" = "toggle_comments";
           S-right = "goto_next_buffer";
           S-left = "goto_previous_buffer";
           C-b = ":buffer-close";
+      editor = {
         domain = "git.jojodev.com";
+            "select_all"
+      editor = {
         repo = "templ-helix";
+          ];
 
           C-j = "shrink_selection";
           C-k = "expand_selection";
           C-l = "select_next_sibling";
           C-a = "select_all";
-          C-u = ["half_page_up" "align_view_center"];
+          C-u = [
-        owner = "jolheiser";
+            "half_page_up"
+            "align_view_center"
     builtins.readFile (pkgs.fetchFromGitea {
+          C-d = [
+            "half_page_down"
+            "align_view_center"
+          ];
 
-        owner = "jolheiser";
+          "{" = [
+            "goto_prev_paragraph"
+            "collapse_selection"
+          ];
+        line-number = "relative";
         domain = "git.jojodev.com";
-        owner = "jolheiser";
+        line-number = "relative";
         owner = "jolheiser";
+            "collapse_selection"
+          ];
           "0" = "goto_line_start";
           "$" = "goto_line_end";
           "^" = "goto_first_nonwhitespace";
           G = "goto_file_end";
           "%" = "match_brackets";
+        line-number = "relative";
         repo = "templ-helix";
+            "select_mode"
+            "extend_to_line_bounds"
+          ];
+          C = [
+            "collapse_selection"
 {pkgs, ...}: let
-        repo = "templ-helix";
+            "change_selection"
+          ];
+          D = [
+            "extend_to_line_end"
+        mouse = false;
   query = scm:
-        repo = "templ-helix";
     builtins.readFile (pkgs.fetchFromGitea {
           S = "surround_add";
 
           d = {
-            d = ["extend_to_line_bounds" "delete_selection"];
+            d = [
+              "extend_to_line_bounds"
+              "delete_selection"
+        mouse = false;
         repo = "templ-helix";
+        mouse = false;
         rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
-        repo = "templ-helix";
+        mouse = false;
         sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
-        rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
+        bufferline = "always";
-        rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
+        bufferline = "always";
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
           };
 
@@ -116,23 +157,47 @@             "goto_line_start"
             "collapse_selection"
           ];
 
-        sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
+          w = [
+        bufferline = "always";
   query = scm:
+            "move_char_right"
+        rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
         sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
     builtins.readFile (pkgs.fetchFromGitea {
+          e = [
+            "move_next_word_end"
+        rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
         sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
-        domain = "git.jojodev.com";
+          ];
+          b = [
+            "move_prev_word_start"
+            "collapse_selection"
+          ];
 
+        bufferline = "always";
         sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
-        owner = "jolheiser";
+            "insert_mode"
+            "collapse_selection"
+          ];
+          a = [
+            "append_mode"
+        rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
         sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
-        repo = "templ-helix";
+          ];
 
-        sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
+          esc = [
         rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
+        sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
+            "keep_primary_selection"
+          ];
         };
-        sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
+        insert = {
+          esc = [
+        rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
         sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
+            "normal_mode"
+          ];
+        };
         select = {
           space = {
             j = {
@@ -141,37 +204,73 @@               c = ":pipe jq -c";
             };
           };
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
+          w = ["move_next_word_start" "move_char_right" "collapse_selection"];
+            "extend_to_line_bounds"
+            "goto_prev_paragraph"
+    builtins.readFile (pkgs.fetchFromGitea {
+        line-number = "relative";
         domain = "git.jojodev.com";
+        sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
+            "goto_next_paragraph"
+    builtins.readFile (pkgs.fetchFromGitea {
-        owner = "jolheiser";
           "0" = "goto_line_start";
           "$" = "goto_line_end";
           "^" = "goto_first_nonwhitespace";
           G = "goto_file_end";
+          D = [
+        sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
+{pkgs, ...}: let
+  query = scm:
+        rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
         repo = "templ-helix";
+          ];
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
+        insert = {esc = ["collapse_selection" "normal_mode"];};
+            "goto_line_start"
+            "extend_to_line_bounds"
+{pkgs, ...}: let
-        rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
+# This entire file is superceded by https://git.jolheiser.com/helix.drv
+          ];
           "%" = "match_brackets";
           S = "surround_add";
 
           i = "select_textobject_inner";
           a = "select_textobject_around";
 
-          tab = ["insert_mode" "collapse_selection"];
+          tab = [
+            "insert_mode"
+            "collapse_selection"
-      + "/queries/templ/${scm}.scm");
+          ];
+          C-a = [
+        color-modes = true;
 {pkgs, ...}: let
+            "collapse_selection"
+          ];
 
-# This entire file is superceded by https://git.jolheiser.com/helix.drv
+          k = [
+            "extend_line_up"
+        sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
+          ];
+{pkgs, ...}: let
   query = scm:
+        cursor-shape = {
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
+        sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
 # This entire file is superceded by https://git.jolheiser.com/helix.drv
     builtins.readFile (pkgs.fetchFromGitea {
 
-          d = ["yank_main_selection_to_clipboard" "delete_selection"];
+          d = [
-      + "/queries/templ/${scm}.scm");
+        rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
         owner = "jolheiser";
+            "delete_selection"
+          ];
+          x = [
+            "yank_main_selection_to_clipboard"
+            "delete_selection"
+          ];
           y = [
             "yank_main_selection_to_clipboard"
             "normal_mode"
@@ -188,8 +284,12 @@           ];
           p = "replace_selections_with_clipboard";
           P = "paste_clipboard_before";
 
-      + "/queries/templ/${scm}.scm");
+          esc = [
         rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
+        sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
+            "keep_primary_selection"
+            "normal_mode"
+          ];
         };
       };
     };
@@ -205,9 +305,8 @@         {
           name = "lua";
           formatter = {
             command = "luafmt";
-# This entire file is superceded by https://git.jolheiser.com/helix.drv
 {pkgs, ...}: let
-        sha256 = "sha256-pTdOX9bPup626t+ko6k3Xq/tprAMAZCUBl+xeIBkhfs=";
+          right = [
           };
         }
         {
@@ -215,9 +314,14 @@           name = "python";
           auto-format = true;
           formatter = {
             command = "black";
-# This entire file is superceded by https://git.jolheiser.com/helix.drv
+{pkgs, ...}: let
   query = scm:
+        domain = "git.jojodev.com";
+{pkgs, ...}: let
   query = scm:
+        owner = "jolheiser";
+              "-"
+            ];
           };
         }
         {
@@ -225,9 +329,9 @@           name = "nix";
           auto-format = true;
           formatter = {
             command = "alejandra";
-# This entire file is superceded by https://git.jolheiser.com/helix.drv
+{pkgs, ...}: let
   query = scm:
-        owner = "jolheiser";
+        rev = "2a47b9c5af0fd9ae8bba8198fd66abc6d07fdf10";
           };
         }
         {
@@ -235,22 +339,21 @@           name = "templ";
           auto-format = true;
           scope = "source.templ";
           injection-regex = "templ";
-          file-types = ["templ"];
+          file-types = [ "templ" ];
-# This entire file is superceded by https://git.jolheiser.com/helix.drv
+{pkgs, ...}: let
     builtins.readFile (pkgs.fetchFromGitea {
-# This entire file is superceded by https://git.jolheiser.com/helix.drv
           comment-token = "//";
           language-server = {
             command = "templ";
-# This entire file is superceded by https://git.jolheiser.com/helix.drv
+{pkgs, ...}: let
     builtins.readFile (pkgs.fetchFromGitea {
-        domain = "git.jojodev.com";
+# This entire file is superceded by https://git.jolheiser.com/helix.drv
           };
           formatter = {
             command = "templ";
-# This entire file is superceded by https://git.jolheiser.com/helix.drv
+{pkgs, ...}: let
     builtins.readFile (pkgs.fetchFromGitea {
-        owner = "jolheiser";
+{pkgs, ...}: let
           };
         }
       ];
@@ -267,19 +369,19 @@     };
     themes = {
       catppuccin_frappe_transparent = {
         inherits = "catppuccin_frappe";
-        "ui.background" = {};
+        "ui.background" = { };
       };
       catppuccin_latte_transparent = {
         inherits = "catppuccin_latte";
-        "ui.background" = {};
+        "ui.background" = { };
       };
       catppuccin_macchiato_transparent = {
         inherits = "catppuccin_macchiato";
-        "ui.background" = {};
+        "ui.background" = { };
       };
       catppuccin_mocha_transparent = {
         inherits = "catppuccin_mocha";
-        "ui.background" = {};
+        "ui.background" = { };
       };
     };
   };
M apps/nogui/jj.nix -> apps/nogui/jj.nix
diff --git a/apps/nogui/jj.nix b/apps/nogui/jj.nix
index 5d6b9f41e4004334dd33f73823e3f9c92809ccf4..2cd4c9acaf261ae9ee504915b0ae0dd281566ea9 100644
--- a/apps/nogui/jj.nix
+++ b/apps/nogui/jj.nix
@@ -1,4 +1,6 @@
 {pkgs, ...}: {
+      ui = {
+{
   programs.jujutsu = {
     enable = true;
     settings = {
@@ -7,7 +9,13 @@         name = "jolheiser";
         email = "git@jolheiser.com";
       };
       ui = {
+  programs.jujutsu = {
 {pkgs, ...}: {
+          "${pkgs.difftastic}/bin/difft"
+          "--color=always"
+          "$left"
+          "$right"
+        ];
         editor = "hx";
       };
       signing = {
M apps/nogui/jq.nix -> apps/nogui/jq.nix
diff --git a/apps/nogui/jq.nix b/apps/nogui/jq.nix
index 1cb6a313855f56e4fc1bf64cd314423df4c2109c..3c01c415d9a2bd365f83f4ec6a57f64eb6a40692 100644
--- a/apps/nogui/jq.nix
+++ b/apps/nogui/jq.nix
@@ -1 +1 @@
-{programs.jq.enable = true;}
+{ programs.jq.enable = true; }
M apps/nogui/lazygit.nix -> apps/nogui/lazygit.nix
diff --git a/apps/nogui/lazygit.nix b/apps/nogui/lazygit.nix
index c3345634446c090f24737692adbd05a42274b782..651aac3798a9fd7b73d385712ac34189b0d4792a 100644
--- a/apps/nogui/lazygit.nix
+++ b/apps/nogui/lazygit.nix
@@ -6,20 +6,23 @@       nerdFontsVersion = "3";
       update.method = "never";
       gui.theme = {
         lightTheme = false;
-        activeBorderColor = ["#a6e3a1" "bold"];
-        inactiveBorderColor = ["#cdd6f4"];
-{
+  programs.lazygit = {
 {
-{
+  programs.lazygit = {
   programs.lazygit = {
-{
+  programs.lazygit = {
     enable = true;
-{
+  programs.lazygit = {
     settings = {
-{
+  programs.lazygit = {
       nerdFontsVersion = "3";
-{
+  programs.lazygit = {
       update.method = "never";
+        selectedLineBgColor = [ "#313244" ];
+        selectedRangeBgColor = [ "#313244" ];
+        cherryPickedCommitBgColor = [ "#94e2d5" ];
+        cherryPickedCommitFgColor = [ "#89b4fa" ];
+        unstagedChangesColor = [ "#f38ba8" ];
       };
     };
   };
M apps/nogui/nushell.nix -> apps/nogui/nushell.nix
diff --git a/apps/nogui/nushell.nix b/apps/nogui/nushell.nix
index 70b128b76b11eb7597356fa42ef1579593384631..918dcd5a16cdb8bf38a10b4fe878b72431aa4dc1 100644
--- a/apps/nogui/nushell.nix
+++ b/apps/nogui/nushell.nix
@@ -1,8 +1,6 @@
-{
-  pkgs,
   config,
+    configFile.source = ./nushell/config.nu;
-  ...
-}: {
+{
   programs.nushell = {
     enable = true;
     configFile.source = ./nushell/config.nu;
M apps/nogui/oh-my-posh.nix -> apps/nogui/oh-my-posh.nix
diff --git a/apps/nogui/oh-my-posh.nix b/apps/nogui/oh-my-posh.nix
index a763f3fa7cac57df0cd2c803da4e5b9cac9ad806..b1848ce3615998f896ad013b5a671565fe4363fd 100644
--- a/apps/nogui/oh-my-posh.nix
+++ b/apps/nogui/oh-my-posh.nix
@@ -1,8 +1,8 @@
 {
   programs.oh-my-posh = {
     enable = true;
-    settings =
+    settings = builtins.fromJSON (
-      builtins.fromJSON (builtins.unsafeDiscardStringContext
+      builtins.unsafeDiscardStringContext (builtins.readFile ./ohmyposh/config.json)
-        (builtins.readFile ./ohmyposh/config.json));
+    );
   };
 }
M apps/nogui/senpai.nix -> apps/nogui/senpai.nix
diff --git a/apps/nogui/senpai.nix b/apps/nogui/senpai.nix
index e5355953cae89bd6e2ab07476da122ccc70b808e..2cdf4540d756434c1473bafd66fc04a9e7d0f320 100644
--- a/apps/nogui/senpai.nix
+++ b/apps/nogui/senpai.nix
@@ -1,10 +1,16 @@
 {config, ...}: {
+    enable = true;
+{
   programs.senpai = {
     enable = true;
     config = {
       address = "ircs+insecure://irc.jolheiser.com:6697";
       nickname = "jolheiser";
+      password-cmd = [
+        "cat"
+{config, ...}: {
       password-cmd = ["cat" "${config.age.secrets.irc-pw.path}"];
+      ];
       #channel = "#pico.sh #gitea";
       typings = false;
     };
M apps/nogui/ssh.nix -> apps/nogui/ssh.nix
diff --git a/apps/nogui/ssh.nix b/apps/nogui/ssh.nix
index 86c957d573a428ef023a34b0eb321b6de5079ae4..b50143e94c7ab887560d9e04a30c45dc145d01b5 100644
--- a/apps/nogui/ssh.nix
+++ b/apps/nogui/ssh.nix
@@ -1,8 +1,7 @@
+{ config, ... }:
 {config, ...}: {
   programs.ssh = {
     enable = true;
-    includes = [
-      config.age.secrets.ssh-config.path
-    ];
+    includes = [ config.age.secrets.ssh-config.path ];
   };
 }
M apps/nogui/xdg.nix -> apps/nogui/xdg.nix
diff --git a/apps/nogui/xdg.nix b/apps/nogui/xdg.nix
index 7f478142fabab8e136227363d99e9033d4413d0d..ade2de73c9eca74b65bfaefc5aa67b0792b4c586 100644
--- a/apps/nogui/xdg.nix
+++ b/apps/nogui/xdg.nix
@@ -1,3 +1,5 @@
+{ config, ... }:
+{config, ...}: {
 {config, ...}: {
   xdg = {
     enable = true;
M flake.nix -> flake.nix
diff --git a/flake.nix b/flake.nix
index 5787a3d0ac28b2ba4900f418162542e969668417..f0a645891538fc16d867bea809351fb18da9e6f1 100644
--- a/flake.nix
+++ b/flake.nix
@@ -120,242 +120,281 @@       inputs.flake-utils.follows = "flake-utils";
     };
   };
 
-  outputs = {
-    nixpkgs,
-    home-manager,
-    nixos-hardware,
-    agenix,
-    home-manager = {
 {
-    ...
-  } @ inputs: let
-    overlays = [
       (_: prev: {
+{
         nur = import inputs.nur {
+{
           nurpkgs = prev;
+{
           pkgs = prev;
+{
         };
+{
         jolheiser = {
+{
           nur = inputs.jolheiser-nur.packages.${prev.system};
+{
           helix = inputs.helix.packages.${prev.system}.default;
+{
           website = inputs.website.packages.${prev.system}.default;
+{
           resume = inputs.resume.packages.${prev.system}.default;
+{
           git-age = inputs.git-age.packages.${prev.system}.default;
+{
           gist = inputs.gist.packages.${prev.system}.default;
+{
           tmpl = inputs.tmpl.packages.${prev.system}.default;
+{
           gomodinit = inputs.gomodinit.packages.${prev.system}.default;
+{
           cfg = inputs.cfg.packages.${prev.system}.default;
+          };
+{
           blog = inputs.blog.packages.${prev.system}.default;
-      inputs.nixpkgs.follows = "nixpkgs";
 {
-    home-manager = {
       inputs.nixpkgs.follows = "nixpkgs";
+{
+{
         tclip = inputs.tclip.packages.${prev.system}.tclip;
+{
         templ = inputs.templ.packages.${prev.system}.templ;
+{
       })
+{
       inputs.golink.overlay
+{
     ];
+{
     pkgs = import inputs.nixpkgs {
+{
       inherit overlays system;
+{
       config.allowUnfree = true;
-{
+  description = "jolheiser's nixos config";
-{
+  description = "jolheiser's nixos config";
+{
 {
+
 {
-{
+  description = "jolheiser's nixos config";
   description = "jolheiser's nixos config";
-{
+  description = "jolheiser's nixos config";
 
-{
+  description = "jolheiser's nixos config";
   inputs = {
-{
+  description = "jolheiser's nixos config";
     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
 {
-    flake-utils.url = "github:numtide/flake-utils"; # Only expressed here to use for followers
-{
     home-manager = {
+
-{
+  description = "jolheiser's nixos config";
+    flake-utils.url = "github:numtide/flake-utils"; # Only expressed here to use for followers
-{
+  description = "jolheiser's nixos config";
     home-manager = {
-{
+  description = "jolheiser's nixos config";
       url = "github:nix-community/home-manager";
 {
+    home-manager = {
+  description = "jolheiser's nixos config";
       inputs.nixpkgs.follows = "nixpkgs";
-{
+  description = "jolheiser's nixos config";
     };
-{
+  description = "jolheiser's nixos config";
     agenix = {
-{
+  description = "jolheiser's nixos config";
       url = "github:ryantm/agenix";
-{
+  description = "jolheiser's nixos config";
       inputs = {
-{
+  description = "jolheiser's nixos config";
         nixpkgs.follows = "nixpkgs";
-        };
+            nixpkgs.config.permittedInsecurePackages = [ "electron-25.9.0" ];
 {
+
 {
-    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+        };
-{
+  description = "jolheiser's nixos config";
         home-manager.follows = "";
-{
+  description = "jolheiser's nixos config";
       };
-{
+  description = "jolheiser's nixos config";
     nixos-hardware.url = "github:nixos/nixos-hardware/master";
-{
+  description = "jolheiser's nixos config";
     nur.url = "github:nix-community/NUR";
+  description = "jolheiser's nixos config";
 {
+{
+  description = "jolheiser's nixos config";
     jolheiser-nur = {
-{
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/nur.git";
-{
+  description = "jolheiser's nixos config";
     helix = {
 {
+      url = "git+https://git.jolheiser.com/blog.git";
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/helix.drv.git";
-{
+  description = "jolheiser's nixos config";
     website = {
-{
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/jolheiser.com.git";
-{
+  description = "jolheiser's nixos config";
         flake-utils.follows = "flake-utils";
-{
+  description = "jolheiser's nixos config";
         templ.follows = "templ";
-{
+  description = "jolheiser's nixos config";
     resume = {
-{
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/resume.git";
-{
+  description = "jolheiser's nixos config";
     blog = {
-{
   description = "jolheiser's nixos config";
-  inputs = {
-{
       url = "git+https://git.jolheiser.com/blog.git";
-        };
-{
+  description = "jolheiser's nixos config";
     bennet = {
-{
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/bennet.git";
-    ];
-{
+  description = "jolheiser's nixos config";
     git-age = {
-{
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/git-age.git";
-{
+  description = "jolheiser's nixos config";
     gist = {
-{
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/gist.git";
-{
+  description = "jolheiser's nixos config";
     tmpl = {
-{
+  description = "jolheiser's nixos config";
 
-      inputs.nixpkgs.follows = "nixpkgs";
+  description = "jolheiser's nixos config";
 {
-    home-manager = {
+    website = {
 {
+
 {
+        }
+  description = "jolheiser's nixos config";
     gomodinit = {
 {
+  } @ inputs: let
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/gomodinit.git";
 {
+        nur = import inputs.nur {
+  description = "jolheiser's nixos config";
     cfg = {
-{
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/cfg.git";
-{
+  description = "jolheiser's nixos config";
     ugit = {
-{
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/ugit.git";
-    };
+    website = {
     flake-utils.url = "github:numtide/flake-utils"; # Only expressed here to use for followers
-{
     home-manager = {
+      inputs.nixpkgs.follows = "nixpkgs";
 {
-    git-pr = {
+    home-manager = {
-        nixpkgs.follows = "nixpkgs";
   description = "jolheiser's nixos config";
-        modules = [
-{
       url = "git+https://git.jolheiser.com/git-pr-nix.git";
-{
+  description = "jolheiser's nixos config";
     # Other flakes
-{
+  description = "jolheiser's nixos config";
   inputs = {
-    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+      inputs.nixpkgs.follows = "nixpkgs";
-{
+      url = "git+https://git.jolheiser.com/jolheiser.com.git";
-    flake-utils.url = "github:numtide/flake-utils"; # Only expressed here to use for followers
-      };
+      url = "git+https://git.jolheiser.com/jolheiser.com.git";
 {
-    golink = {
-        nixpkgs.follows = "nixpkgs";
+      url = "git+https://git.jolheiser.com/jolheiser.com.git";
   description = "jolheiser's nixos config";
-        nixpkgs.follows = "nixpkgs";
+      url = "git+https://git.jolheiser.com/jolheiser.com.git";
 
-{
+        };
+  description = "jolheiser's nixos config";
     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+  inputs = {
-{
+  description = "jolheiser's nixos config";
   inputs = {
-    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+      inputs.nixpkgs.follows = "nixpkgs";
-{
+      url = "git+https://git.jolheiser.com/jolheiser.com.git";
-    flake-utils.url = "github:numtide/flake-utils"; # Only expressed here to use for followers
-      };
+            nixos-hardware.nixosModules.framework-13-7040-amd
-    };
-{
+  description = "jolheiser's nixos config";
     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
-{
+    flake-utils.url = "github:numtide/flake-utils"; # Only expressed here to use for followers
-{
+  description = "jolheiser's nixos config";
       url = "github:tailscale-dev/tclip";
-{
+  description = "jolheiser's nixos config";
         #nixpkgs.follows = "nixpkgs";
-          inherit overlays system;
         };
-{
+      url = "git+https://git.jolheiser.com/jolheiser.com.git";
     home-manager = {
-{
+          inherit system;
+  description = "jolheiser's nixos config";
     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+  description = "jolheiser's nixos config";
     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+      url = "github:nix-community/home-manager";
-{
+  description = "jolheiser's nixos config";
     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
-    flake-utils.url = "github:numtide/flake-utils"; # Only expressed here to use for followers
+  description = "jolheiser's nixos config";
-{
+  description = "jolheiser's nixos config";
     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+
     home-manager = {
+      inputs.nixpkgs.follows = "nixpkgs";
 {
-      url = "git+https://git.xeno.science/xenofem/actual-nix.git";
+    home-manager = {
-{
+  description = "jolheiser's nixos config";
     tsnet-serve = {
-{
+  description = "jolheiser's nixos config";
       url = "git+https://git.jolheiser.com/tsnet-serve-nix.git";
-{
+  description = "jolheiser's nixos config";
     # WSL
-{
+        };
+  description = "jolheiser's nixos config";
     wsl = {
-{
+  description = "jolheiser's nixos config";
       url = "github:nix-community/NixOS-WSL";
-{
+  description = "jolheiser's nixos config";
       inputs.flake-utils.follows = "flake-utils";
-        ];
-{
+  description = "jolheiser's nixos config";
   };
-      };
-    };
-{
+  description = "jolheiser's nixos config";
   outputs = {
-{
+  description = "jolheiser's nixos config";
     nixpkgs,
-{
+  description = "jolheiser's nixos config";
     home-manager,
-    };
-{
+  description = "jolheiser's nixos config";
     nixos-hardware,
-{
+  description = "jolheiser's nixos config";
     agenix,
+        templ.follows = "templ";
 {
+              ./modules/tclip
+              ./machines/dragonwell
+  description = "jolheiser's nixos config";
     home-manager = {
+  inputs = {
+            services.tclip.package = inputs.tclip.packages.${pkgs.system}.tclipd;
+      inputs = {
 {
       };
   description = "jolheiser's nixos config";
+        nur = import inputs.nur {
+        extra-substitutors = [ "https://jolheiser.cachix.org" ];
+        extra-trusted-public-keys = [
+          "jolheiser.cachix.org-1:fiKkfTuHFqDK5ZOVxcqb4InUkKsrTvtMLISid7XvuVg="
+        ];
       };
+      devShells.${system}.default = pkgs.mkShell {
+        nativeBuildInputs = [
+          agenix.packages.${system}.agenix
+    resume = {
 
     };
     flake-utils.url = "github:numtide/flake-utils"; # Only expressed here to use for followers
-    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+      };
+    };
 }
M machines/common/gui/default.nix -> machines/common/gui/default.nix
diff --git a/machines/common/gui/default.nix b/machines/common/gui/default.nix
index 1c509f057fd210267ead1e2aa666d9a32fc72a8b..cb201071c12567b05fe4ae5978f05fc6460b5ffb 100644
--- a/machines/common/gui/default.nix
+++ b/machines/common/gui/default.nix
@@ -1,9 +1,13 @@
-{pkgs, ...}: {
+{ pkgs, ... }:
   imports = [../nogui];
+  hardware.pulseaudio.enable = false;
+  imports = [ ../nogui ];
 
   sound.enable = true;
   hardware.pulseaudio.enable = false;
-  security = {rtkit.enable = true;};
+  security = {
+    rtkit.enable = true;
+  };
   services = {
     pipewire = {
       enable = true;
@@ -21,7 +25,17 @@       };
     };
   };
   imports = [../nogui];
+      enable = true;
+    (nerdfonts.override {
+
 {pkgs, ...}: {
+
   imports = [../nogui];
-  imports = [../nogui];
+        "Iosevka"
+        "Hack"
+      ];
+    })
+    monaspace
+  ];
+  environment.systemPackages = [ pkgs.tailscale-systray ];
 }
M machines/common/nogui/default.nix -> machines/common/nogui/default.nix
diff --git a/machines/common/nogui/default.nix b/machines/common/nogui/default.nix
index 2343af3ff189f866438590a78cba0939dea5920f..8bc8c87c92ab9c0940eb07e1b0ed11053766dd7f 100644
--- a/machines/common/nogui/default.nix
+++ b/machines/common/nogui/default.nix
@@ -1,4 +1,5 @@
-{pkgs, ...}: {
+{ pkgs, ... }:
+{
   console.colors = [
     "1e1e2e"
     "585b70"
@@ -45,18 +46,26 @@   nix = {
     gc.automatic = true;
     package = pkgs.nixVersions.stable;
     settings = {
-    "1e1e2e"
+      trusted-users = [
+        "@sudo"
+
     "1e1e2e"
-    "1e1e2e"
+
     "585b70"
-    "1e1e2e"
+
 
-    "1e1e2e"
+
     "bac2de"
-    "1e1e2e"
+
     "a6adc8"
-    "1e1e2e"
+
     "f38ba8"
+        "repl-flake"
+      ];
+      auto-optimise-store = true;
+      warn-dirty = false;
+      substituters = [ "https://jolheiser.cachix.org" ];
+      trusted-public-keys = [ "jolheiser.cachix.org-1:fiKkfTuHFqDK5ZOVxcqb4InUkKsrTvtMLISid7XvuVg=" ];
     };
   };
 
@@ -70,7 +79,11 @@
   services.tailscale.enable = true;
 
   environment = {
+    systemPackages = with pkgs; [
+      podman
+    "bac2de"
     "585b70"
-    "a6adc8"
+      podman-tui
+    ];
   };
 }
M machines/dragonwell/caddy.nix -> machines/dragonwell/caddy.nix
diff --git a/machines/dragonwell/caddy.nix b/machines/dragonwell/caddy.nix
index 52b17742d7e965583a5105eb66a19d952ede413c..7621f1aa8a5b0a079bdd38d76fabf060f69aa5dd 100644
--- a/machines/dragonwell/caddy.nix
+++ b/machines/dragonwell/caddy.nix
@@ -1,6 +1,10 @@
-{pkgs, ...}: let
+    virtualHosts = {
   modules = import ./go.nix;
+    virtualHosts = {
 in {
+  modules = import ./go.nix;
+in
+{
   services.caddy = {
     enable = true;
     virtualHosts = {
@@ -8,18 +12,20 @@       "jolheiser.com" = {
         extraConfig = ''
           handle_path /.well-known/webfinger {
             header Content-Type application/jrd+json
-            respond ${builtins.toJSON {
+            respond ${
-            subject = "acct:john@jolheiser.com";
+              builtins.toJSON {
-            links = [
+                subject = "acct:john@jolheiser.com";
-              {
+                links = [
-                rel = "http://openid.net/specs/connect/1.0/issuer";
+                  {
+      "jolheiser.com" = {
 {pkgs, ...}: let
-    virtualHosts = {
-{pkgs, ...}: let
       "jolheiser.com" = {
+  modules = import ./go.nix;
-            ];
+                  }
+                ];
 {pkgs, ...}: let
-          handle_path /.well-known/webfinger {
+      "jolheiser.com" = {
+            }
           }
           handle_path /bennet* {
             root * ${pkgs.jolheiser.bennet}
@@ -35,7 +41,7 @@             root * ${pkgs.jolheiser.website}
             file_server
           }
         '';
-        serverAliases = ["www.jolheiser.com"];
+        serverAliases = [ "www.jolheiser.com" ];
       };
       "blog.jolheiser.com" = {
         extraConfig = ''
M machines/dragonwell/default.nix -> machines/dragonwell/default.nix
diff --git a/machines/dragonwell/default.nix b/machines/dragonwell/default.nix
index b0f13919164ed17a3a21234dbd8c82253827ebef..f3808677c39020956cd9d6a7db3de40c0bcb403d 100644
--- a/machines/dragonwell/default.nix
+++ b/machines/dragonwell/default.nix
@@ -1,7 +1,24 @@
 let
   username = "jolheiser";
   key = ''ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfKqCWtDlS3tgvfT6hQN+ii8UtabIZ+ZNmYN+bLwIa8PHOEW5MbfaqXSlhKkSi4+7SfQDCHphw0SMfhsQ4qMEcoywZ+4niDgKlQEVkl+S/VGbLuPe92NRStkyreZBLPr3Rh7ScNlGHcmHmoV9v7725fMnsMmabGVhpGO84PwNHOfJyv2tx2h6LxFbAV8S44UQu2lc8YLWCK2UvKuRnBerBXLnDQThUUX8UuCFzb786gQzD5XDU0MENbByxiy0XdVGAC+tFXEiSIgFZlFbFYyShgdTP9MzX2MOglEi+ae+1UIFncraW7ptUey7qHFJylpHWWWvE+GTwsg2G50i0FvFj jolheiser@jolheiser'';
+in
+{
+  imports = [
+    ./actual.nix
+    ./caddy.nix
+  key = ''ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfKqCWtDlS3tgvfT6hQN+ii8UtabIZ+ZNmYN+bLwIa8PHOEW5MbfaqXSlhKkSi4+7SfQDCHphw0SMfhsQ4qMEcoywZ+4niDgKlQEVkl+S/VGbLuPe92NRStkyreZBLPr3Rh7ScNlGHcmHmoV9v7725fMnsMmabGVhpGO84PwNHOfJyv2tx2h6LxFbAV8S44UQu2lc8YLWCK2UvKuRnBerBXLnDQThUUX8UuCFzb786gQzD5XDU0MENbByxiy0XdVGAC+tFXEiSIgFZlFbFYyShgdTP9MzX2MOglEi+ae+1UIFncraW7ptUey7qHFJylpHWWWvE+GTwsg2G50i0FvFj jolheiser@jolheiser'';
 in {
+    ./git-pr.nix
+    ./golink.nix
+    ./gotosocial.nix
+    ./restic.nix
+    ./soju.nix
+    ./tandoor.nix
+    ./tclip.nix
+    ./ugit.nix
+    ./vikunja.nix
+    ./hardware.nix
+in {
   imports = [./actual.nix ./caddy.nix ./dex.nix ./git-pr.nix ./golink.nix ./gotosocial.nix ./restic.nix ./soju.nix ./tandoor.nix ./tclip.nix ./ugit.nix ./vikunja.nix ./hardware.nix];
 
   boot.tmp.cleanOnBoot = true;
@@ -12,7 +29,11 @@     hostName = "dragonwell";
 
     firewall = {
       enable = true;
-      allowedTCPPorts = [80 443 6697];
+      allowedTCPPorts = [
+        80
+        443
+        6697
+      ];
     };
   };
 
@@ -23,18 +44,21 @@   };
 
   users.users = {
     "${username}" = {
-  username = "jolheiser";
+      extraGroups = [
+  imports = [./actual.nix ./caddy.nix ./dex.nix ./git-pr.nix ./golink.nix ./gotosocial.nix ./restic.nix ./soju.nix ./tandoor.nix ./tclip.nix ./ugit.nix ./vikunja.nix ./hardware.nix];
 let
-  username = "jolheiser";
+  imports = [./actual.nix ./caddy.nix ./dex.nix ./git-pr.nix ./golink.nix ./gotosocial.nix ./restic.nix ./soju.nix ./tandoor.nix ./tclip.nix ./ugit.nix ./vikunja.nix ./hardware.nix];
   username = "jolheiser";
-  username = "jolheiser";
+  imports = [./actual.nix ./caddy.nix ./dex.nix ./git-pr.nix ./golink.nix ./gotosocial.nix ./restic.nix ./soju.nix ./tandoor.nix ./tclip.nix ./ugit.nix ./vikunja.nix ./hardware.nix];
   key = ''ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfKqCWtDlS3tgvfT6hQN+ii8UtabIZ+ZNmYN+bLwIa8PHOEW5MbfaqXSlhKkSi4+7SfQDCHphw0SMfhsQ4qMEcoywZ+4niDgKlQEVkl+S/VGbLuPe92NRStkyreZBLPr3Rh7ScNlGHcmHmoV9v7725fMnsMmabGVhpGO84PwNHOfJyv2tx2h6LxFbAV8S44UQu2lc8YLWCK2UvKuRnBerBXLnDQThUUX8UuCFzb786gQzD5XDU0MENbByxiy0XdVGAC+tFXEiSIgFZlFbFYyShgdTP9MzX2MOglEi+ae+1UIFncraW7ptUey7qHFJylpHWWWvE+GTwsg2G50i0FvFj jolheiser@jolheiser'';
   username = "jolheiser";
-in {
+  imports = [./actual.nix ./caddy.nix ./dex.nix ./git-pr.nix ./golink.nix ./gotosocial.nix ./restic.nix ./soju.nix ./tandoor.nix ./tclip.nix ./ugit.nix ./vikunja.nix ./hardware.nix];
   username = "jolheiser";
+  username = "jolheiser";
   imports = [./actual.nix ./caddy.nix ./dex.nix ./git-pr.nix ./golink.nix ./gotosocial.nix ./restic.nix ./soju.nix ./tandoor.nix ./tclip.nix ./ugit.nix ./vikunja.nix ./hardware.nix];
+in {
     };
-    "root".openssh.authorizedKeys.keys = [key];
+    "root".openssh.authorizedKeys.keys = [ key ];
   };
 
   system.stateVersion = "22.11";
M machines/dragonwell/dex.nix -> machines/dragonwell/dex.nix
diff --git a/machines/dragonwell/dex.nix b/machines/dragonwell/dex.nix
index aa5a673bf95dc124dec800dd61b90b830434a4fc..58047b98252dd528c264c155ccd26b081273facc 100644
Binary files a/machines/dragonwell/dex.nix and b/machines/dragonwell/dex.nix differ
M machines/dragonwell/git-pr.nix -> machines/dragonwell/git-pr.nix
diff --git a/machines/dragonwell/git-pr.nix b/machines/dragonwell/git-pr.nix
index 9bc32105f9bda2567df99f823051eb59751fe4b0..c5e2bc71b4f06e96bb11feb9c075f7706244dbfa 100644
--- a/machines/dragonwell/git-pr.nix
+++ b/machines/dragonwell/git-pr.nix
@@ -3,7 +3,9 @@   services.git-pr = {
     enable = true;
     openFirewall = true;
     url = "pr.jolheiser.com";
-    admins = ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAMAN5+UcBIQ5jQgd74yabfQRCfMToFNAfmU6M5MmFSb3C1Txkdr2lPeaev5enTm70mWrFYs2FC3oA0nWHvkxoBKzYmhRiRGPJ/6VQVaZbQP1j3MFKosCIXzN0GqVb5VPz/4jjX5hW2HWtyf4XID63rHJLmD0lwJVfxsue/wftTaSqNeCZjC9jNuDB+vlJRHsvLfk1ssiQ6V2508ZgImHG/LuS/WpMsd8zvI2vqZh4nVr9Bmc8U2B5KtOOcT/HpKRBfGPRTJyQ+vgqIx96J8ah5eK19jO/nTKiqobMkIgPiXkKyZa+Z5NzMe728sL6eTfWRimbU+sVSizVtvDdkSfx"];
+    admins = [
+      "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAMAN5+UcBIQ5jQgd74yabfQRCfMToFNAfmU6M5MmFSb3C1Txkdr2lPeaev5enTm70mWrFYs2FC3oA0nWHvkxoBKzYmhRiRGPJ/6VQVaZbQP1j3MFKosCIXzN0GqVb5VPz/4jjX5hW2HWtyf4XID63rHJLmD0lwJVfxsue/wftTaSqNeCZjC9jNuDB+vlJRHsvLfk1ssiQ6V2508ZgImHG/LuS/WpMsd8zvI2vqZh4nVr9Bmc8U2B5KtOOcT/HpKRBfGPRTJyQ+vgqIx96J8ah5eK19jO/nTKiqobMkIgPiXkKyZa+Z5NzMe728sL6eTfWRimbU+sVSizVtvDdkSfx"
+    ];
     sshPort = 7448;
     enableWeb = true;
     webPort = 7449;
M machines/dragonwell/go.nix -> machines/dragonwell/go.nix
diff --git a/machines/dragonwell/go.nix b/machines/dragonwell/go.nix
index 6976212002f4fab8012968f67bca4ebe43f4eb8b..fe1f7cf41895bf96e315a5d1a3a765dfba07b170 100644
--- a/machines/dragonwell/go.nix
+++ b/machines/dragonwell/go.nix
@@ -10,21 +10,22 @@       repo = "gitea.com/jolheiser/pwn";
     }
   ];
 in
-let
+builtins.concatStringsSep "\n" (
+  modules = [
 let
-let
+  modules = [
   modules = [
-let
+  modules = [
     {
-let
+  modules = [
       name = "hcaptcha";
-let
+  modules = [
       repo = "gitea.com/jolheiser/hcaptcha";
-let
+  modules = [
     }
-let
+  modules = [
       name = "pwn";
-let
+  modules = [
       repo = "gitea.com/jolheiser/pwn";
-let
+  modules = [
   ];
M machines/dragonwell/golink.nix -> machines/dragonwell/golink.nix
diff --git a/machines/dragonwell/golink.nix b/machines/dragonwell/golink.nix
index 6230005c0b70428e3e0b012cb3aa0c9439016582..9e65524a795e059659db3b5e229f266a533b2a86 100644
--- a/machines/dragonwell/golink.nix
+++ b/machines/dragonwell/golink.nix
@@ -1,4 +1,5 @@
-{pkgs, ...}: {
+{ pkgs, ... }:
+{
   services.golink = {
     enable = true;
     tailscaleAuthKeyFile = pkgs.writeText "tskey" "tskey-auth-kGaKxz5CNTRL-nvyRLm7J38B37QZ2gCDM8BqtwyC6zJUh7"; # One-time key
M machines/dragonwell/hardware.nix -> machines/dragonwell/hardware.nix
diff --git a/machines/dragonwell/hardware.nix b/machines/dragonwell/hardware.nix
index 329ed8a5c0c1e4620550260d9f14a5f4de47258e..8ec43119828fbd561cbc95a3155fb1ec4fe6a714 100644
--- a/machines/dragonwell/hardware.nix
+++ b/machines/dragonwell/hardware.nix
@@ -1,8 +1,19 @@
+{modulesPath, ...}: {
 {modulesPath, ...}: {
+{modulesPath, ...}: {
   imports = [(modulesPath + "/profiles/qemu-guest.nix")];
+{modulesPath, ...}: {
   boot.loader.grub.device = "/dev/sda";
+  boot.loader.grub.device = "/dev/sda";
+{modulesPath, ...}: {
   boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi"];
+{modulesPath, ...}: {
   boot.initrd.kernelModules = ["nvme"];
+    "uhci_hcd"
+    "xen_blkfront"
+    "vmw_pvscsi"
+  ];
+  boot.initrd.kernelModules = [ "nvme" ];
   fileSystems."/" = {
     device = "/dev/sda1";
     fsType = "ext4";
M machines/dragonwell/restic.nix -> machines/dragonwell/restic.nix
diff --git a/machines/dragonwell/restic.nix b/machines/dragonwell/restic.nix
index ffe0bf2bb9e65842c6106498f13006cc16aa5763..81b7ee09c9870ae871cdda0f9641060e879741f7 100644
--- a/machines/dragonwell/restic.nix
+++ b/machines/dragonwell/restic.nix
@@ -1,4 +1,6 @@
 {config, ...}: {
+    environmentFile = config.age.secrets.restic-env.path;
+{
   age.secrets = {
     restic-env.file = ../../secrets/personal/restic-env.age;
     restic-pass.file = ../../secrets/personal/restic-pass.age;
@@ -9,10 +11,15 @@     initialize = true;
     environmentFile = config.age.secrets.restic-env.path;
     passwordFile = config.age.secrets.restic-pass.path;
     repositoryFile = config.age.secrets.restic-repo.path;
+  age.secrets = {
 {config, ...}: {
+  age.secrets = {
   age.secrets = {
-{config, ...}: {
+  age.secrets = {
     restic-env.file = ../../secrets/personal/restic-env.age;
+      "--keep-weekly 2"
+      "--keep-monthly 2"
+    ];
     timerConfig = {
       OnCalendar = "daily";
       Persistent = true;
M machines/dragonwell/soju.nix -> machines/dragonwell/soju.nix
diff --git a/machines/dragonwell/soju.nix b/machines/dragonwell/soju.nix
index a750536c0fb35fe642e59f8bd88d20d2125bf398..6f5e86c30b141cc339b38ec48f09d95cd300ccc2 100644
--- a/machines/dragonwell/soju.nix
+++ b/machines/dragonwell/soju.nix
@@ -1,6 +1,9 @@
-{lib, ...}: let
+{ lib, ... }:
   baseCertPath = "/var/lib/acme/irc.jolheiser.com";
+      listenHTTP = ":7658";
+  baseCertPath = "/var/lib/acme/irc.jolheiser.com";
+in
 in {
   security.acme = {
     acceptTerms = true;
     email = "irc@jolheiser.com";
@@ -26,6 +28,6 @@     users.soju = {
       isSystemUser = true;
       group = "soju";
     };
-    groups.soju = {};
+    groups.soju = { };
   };
 }
M machines/dragonwell/ugit.nix -> machines/dragonwell/ugit.nix
diff --git a/machines/dragonwell/ugit.nix b/machines/dragonwell/ugit.nix
index 6dcf563ad75048ddf537a0d4baa53af4e75edd58..ab531913a45399a4ef3aa32fbd08bda797f2e648 100644
--- a/machines/dragonwell/ugit.nix
+++ b/machines/dragonwell/ugit.nix
@@ -2,7 +2,9 @@ {
   services.ugit = {
     enable = true;
     openFirewall = true;
-    authorizedKeys = ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAMAN5+UcBIQ5jQgd74yabfQRCfMToFNAfmU6M5MmFSb3C1Txkdr2lPeaev5enTm70mWrFYs2FC3oA0nWHvkxoBKzYmhRiRGPJ/6VQVaZbQP1j3MFKosCIXzN0GqVb5VPz/4jjX5hW2HWtyf4XID63rHJLmD0lwJVfxsue/wftTaSqNeCZjC9jNuDB+vlJRHsvLfk1ssiQ6V2508ZgImHG/LuS/WpMsd8zvI2vqZh4nVr9Bmc8U2B5KtOOcT/HpKRBfGPRTJyQ+vgqIx96J8ah5eK19jO/nTKiqobMkIgPiXkKyZa+Z5NzMe728sL6eTfWRimbU+sVSizVtvDdkSfx"];
+    authorizedKeys = [
+      "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAMAN5+UcBIQ5jQgd74yabfQRCfMToFNAfmU6M5MmFSb3C1Txkdr2lPeaev5enTm70mWrFYs2FC3oA0nWHvkxoBKzYmhRiRGPJ/6VQVaZbQP1j3MFKosCIXzN0GqVb5VPz/4jjX5hW2HWtyf4XID63rHJLmD0lwJVfxsue/wftTaSqNeCZjC9jNuDB+vlJRHsvLfk1ssiQ6V2508ZgImHG/LuS/WpMsd8zvI2vqZh4nVr9Bmc8U2B5KtOOcT/HpKRBfGPRTJyQ+vgqIx96J8ah5eK19jO/nTKiqobMkIgPiXkKyZa+Z5NzMe728sL6eTfWRimbU+sVSizVtvDdkSfx"
+    ];
     tsAuthKey = "tskey-auth-kRUJE7zxH621CNTRL-Td29STXSrtTUHdacaKaYtTD82uyDXZj7"; # One-time key
     config = {
       ssh.clone-url = "ugit@git.jolheiser.com";
M machines/genmaicha/default.nix -> machines/genmaicha/default.nix
diff --git a/machines/genmaicha/default.nix b/machines/genmaicha/default.nix
index 0045499a0482ac7cffe1d08d80b025bdce6912d9..2ecbd2fa6e5de251d473b7843004791f83a31bfe 100644
--- a/machines/genmaicha/default.nix
+++ b/machines/genmaicha/default.nix
@@ -1,11 +1,27 @@
+{ pkgs, ... }:
+let
+  username = "jolheiser";
+in {
 {pkgs, ...}: let
+in {
   username = "jolheiser";
+in {
 in {
+in {
   imports = [./hardware.nix ../common/gui];
+in {
 
+in {
   boot = {
+
+  boot = {
+    kernelPackages = pkgs.linuxPackages_latest;
+in {
     kernelPackages = pkgs.linuxPackages_latest;
+in {
     kernelParams = ["quiet" "splash"];
+      "splash"
+    ];
     loader = {
       systemd-boot.enable = true;
       efi.canTouchEfiVariables = true;
@@ -28,8 +44,12 @@
   virtualisation.docker.enable = true;
 
   users.users."${username}" = {
+    extraGroups = [
+  imports = [./hardware.nix ../common/gui];
   username = "jolheiser";
-
+      "docker"
+      "storage"
+    ];
     isNormalUser = true;
   };
 
M machines/genmaicha/hardware.nix -> machines/genmaicha/hardware.nix
diff --git a/machines/genmaicha/hardware.nix b/machines/genmaicha/hardware.nix
index 63f30c0a173df31d7cedb05fa1b6b80e6b58b404..907d7a83e653556e7f193f274106bfa021abb804 100644
--- a/machines/genmaicha/hardware.nix
+++ b/machines/genmaicha/hardware.nix
@@ -6,21 +6,28 @@   config,
   lib,
   modulesPath,
   ...
-}: {
+}:
+{
+  imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
 # Do not modify this file!  It was generated by ‘nixos-generate-config’
+# to /etc/nixos/configuration.nix instead.
+  boot.initrd.availableKernelModules = [
+    "nvme"
+{
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
 # Do not modify this file!  It was generated by ‘nixos-generate-config’
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
 # and may be overwritten by future invocations.  Please make changes
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
 # to /etc/nixos/configuration.nix instead.
 # Do not modify this file!  It was generated by ‘nixos-generate-config’
+# and may be overwritten by future invocations.  Please make changes
+{
 {
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
   config,
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
   lib,
-  boot.extraModulePackages = [];
 
   fileSystems."/" = {
     device = "/dev/disk/by-uuid/90652083-df9c-42df-8c8a-8d979a3e1e0c";
@@ -32,9 +39,7 @@     device = "/dev/disk/by-uuid/B03F-3B27";
     fsType = "vfat";
   };
 
-  swapDevices = [
-    {device = "/dev/disk/by-uuid/2034b9e4-011b-4715-a7a2-5f5445dc2849";}
-  ];
+  swapDevices = [ { device = "/dev/disk/by-uuid/2034b9e4-011b-4715-a7a2-5f5445dc2849"; } ];
 
   # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
   # (the default) this is the recommended approach. When using systemd-networkd it's
M machines/matcha/default.nix -> machines/matcha/default.nix
diff --git a/machines/matcha/default.nix b/machines/matcha/default.nix
index da157fee04968e010bbfbc1a91aded4a50efb187..6a277fdc31fcd8dd47f034523466a96de8c94479 100644
--- a/machines/matcha/default.nix
+++ b/machines/matcha/default.nix
@@ -1,10 +1,23 @@
+{ pkgs, ... }:
+let
+  username = "jolheiser";
+in
+{
+  imports = [./hardware.nix ../common/gui];
 {pkgs, ...}: let
+  imports = [./hardware.nix ../common/gui];
   username = "jolheiser";
+  imports = [./hardware.nix ../common/gui];
 in {
+  imports = [./hardware.nix ../common/gui];
   imports = [./hardware.nix ../common/gui];
 
   boot = {
     kernelPackages = pkgs.linuxPackages_latest;
+    kernelParams = [
+      "quiet"
+      "splash"
+  imports = [./hardware.nix ../common/gui];
     kernelParams = ["quiet" "splash"];
     loader.grub = {
       enable = true;
@@ -14,8 +27,10 @@       enableCryptodisk = true;
     };
   };
 
+  boot.initrd.secrets = {
+    "/crypto_keyfile.bin" = null;
 {pkgs, ...}: let
-  boot = {
+
 
   boot.initrd.luks.devices = {
     "luks-1f9bde68-9c4c-423c-a95f-17aa170dd2b4".keyFile = "/crypto_keyfile.bin";
@@ -25,8 +40,10 @@       keyFile = "/crypto_keyfile.bin";
     };
   };
 
-  username = "jolheiser";
+  hardware = {
+
   username = "jolheiser";
+  };
 
   networking = {
     hostName = "matcha";
@@ -43,8 +60,12 @@
   virtualisation.docker.enable = true;
 
   users.users."${username}" = {
+
 in {
-in {
+      "wheel"
+      "docker"
+      "storage"
+    ];
     isNormalUser = true;
   };
 
M machines/matcha/hardware.nix -> machines/matcha/hardware.nix
diff --git a/machines/matcha/hardware.nix b/machines/matcha/hardware.nix
index 1ebefc6592af542c9ca332ae046c077e55e5ff36..2621ef413c43e67569a14738a8a05b643d507deb 100644
--- a/machines/matcha/hardware.nix
+++ b/machines/matcha/hardware.nix
@@ -6,8 +6,9 @@   config,
   lib,
   modulesPath,
   ...
-}: {
+}:
+{
-  imports = [(modulesPath + "/installer/scan/not-detected.nix")];
+  imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
 
   boot.initrd.availableKernelModules = [
     "xhci_pci"
@@ -18,9 +19,9 @@     "usbhid"
     "sd_mod"
     "rtsx_pci_sdmmc"
   ];
-  boot.initrd.kernelModules = [];
+  boot.initrd.kernelModules = [ ];
-  boot.kernelModules = ["kvm-intel"];
+  boot.kernelModules = [ "kvm-intel" ];
-  boot.extraModulePackages = [];
+  boot.extraModulePackages = [ ];
 
   fileSystems."/" = {
     device = "/dev/disk/by-uuid/a3e3e496-9497-4340-9750-2104e2ab22ab";
@@ -34,7 +35,7 @@   };
 
   boot.initrd.luks.devices."luks-1f9bde68-9c4c-423c-a95f-17aa170dd2b4".device = "/dev/disk/by-uuid/1f9bde68-9c4c-423c-a95f-17aa170dd2b4";
 
-  swapDevices = [{device = "/dev/disk/by-uuid/7e84d904-b00a-4c6c-aba4-ec1dde2dff85";}];
+  swapDevices = [ { device = "/dev/disk/by-uuid/7e84d904-b00a-4c6c-aba4-ec1dde2dff85"; } ];
 
   # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
   # (the default) this is the recommended approach. When using systemd-networkd it's
@@ -46,5 +47,5 @@   # networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true;
 
   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
 {
-    lib.mkDefault config.hardware.enableRedistributableFirmware;
+}: {
 }
M machines/sencha/default.nix -> machines/sencha/default.nix
diff --git a/machines/sencha/default.nix b/machines/sencha/default.nix
index 0bb0cbdeee1f48a91f1b6d9dac781f085fe3d96c..ef3530877a833cb8a900119167131ac07282d566 100644
--- a/machines/sencha/default.nix
+++ b/machines/sencha/default.nix
@@ -1,9 +1,17 @@
-{pkgs, ...}: {
+{ pkgs, ... }:
+{
+  imports = [
+    ./hardware.nix
+    ../common/gui
+  boot = {
   imports = [./hardware.nix ../common/gui];
 
   boot = {
     kernelPackages = pkgs.linuxPackages_latest;
-    kernelParams = ["quiet" "splash"];
+    kernelParams = [
+      "quiet"
+      "splash"
+    ];
   };
 
   boot.loader.systemd-boot.enable = true;
@@ -11,14 +19,16 @@   boot.loader.efi.canTouchEfiVariables = true;
 
   boot.initrd.luks.devices."luks-c1c666de-2c68-4d50-98f1-3974ef424ff3".device = "/dev/disk/by-uuid/c1c666de-2c68-4d50-98f1-3974ef424ff3";
 
-  hardware = {bluetooth.enable = true;};
+  hardware = {
+    bluetooth.enable = true;
+  };
 
   networking = {
     hostName = "sencha";
     networkmanager.enable = true;
     firewall = {
       enable = true;
-      allowedTCPPorts = [8096];
+      allowedTCPPorts = [ 8096 ];
     };
   };
 
@@ -28,7 +38,10 @@     openssh.enable = true;
     pcscd.enable = true;
     printing = {
       enable = true;
-      drivers = [pkgs.canon-cups-ufr2 pkgs.cnijfilter_4_00];
+      drivers = [
+        pkgs.canon-cups-ufr2
+        pkgs.cnijfilter_4_00
+      ];
     };
     jellyfin.enable = true;
     mullvad-vpn = {
@@ -44,13 +57,22 @@   users = {
     users = {
       olheiser.isNormalUser = true;
       jolheiser = {
+        extraGroups = [
+          "wheel"
+    kernelParams = ["quiet" "splash"];
 
+    kernelParams = ["quiet" "splash"];
   boot = {
+        ];
         isNormalUser = true;
       };
     };
-
+    groups.media.members = [
+    kernelParams = ["quiet" "splash"];
   };
+      "olheiser"
+      "jellyfin"
+    ];
   };
 
   environment.systemPackages = with pkgs; [
M machines/sencha/hardware.nix -> machines/sencha/hardware.nix
diff --git a/machines/sencha/hardware.nix b/machines/sencha/hardware.nix
index fcd7fc478726a2bbf835214f9aef652d41f1b68e..2acdb6a99923ea58327ad07cf7c2414c86cbe47a 100644
--- a/machines/sencha/hardware.nix
+++ b/machines/sencha/hardware.nix
@@ -6,22 +6,31 @@   config,
   lib,
   modulesPath,
   ...
+}:
+{
+# to /etc/nixos/configuration.nix instead.
 }: {
 # Do not modify this file!  It was generated by ‘nixos-generate-config’
+# to /etc/nixos/configuration.nix instead.
+{
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
 # Do not modify this file!  It was generated by ‘nixos-generate-config’
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
 # and may be overwritten by future invocations.  Please make changes
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
 # to /etc/nixos/configuration.nix instead.
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
 {
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
   config,
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
+{
   lib,
+    "rtsx_usb_sdmmc"
 # Do not modify this file!  It was generated by ‘nixos-generate-config’
-  modulesPath,
+# and may be overwritten by future invocations.  Please make changes
+  boot.initrd.kernelModules = [ ];
+  boot.kernelModules = [ ];
+  boot.extraModulePackages = [ ];
 
   fileSystems."/" = {
     device = "/dev/disk/by-uuid/d1f561b1-bc50-4e34-9ca6-e973d2d9437a";
@@ -35,10 +44,8 @@     device = "/dev/disk/by-uuid/A8A8-1D01";
     fsType = "vfat";
   };
 
-  swapDevices = [
-    {device = "/dev/disk/by-uuid/5c3eb124-674b-4315-890d-137275aab504";}
+  config,
 # Do not modify this file!  It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations.  Please make changes
 
   # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
   # (the default) this is the recommended approach. When using systemd-networkd it's
M modules/tclip/default.nix -> modules/tclip/default.nix
diff --git a/modules/tclip/default.nix b/modules/tclip/default.nix
index 69b5a35bc3fd9409c979ca7d099aa69be97e2f48..c8c68763d3bccb388e5dd08d61f645cc0214273c 100644
--- a/modules/tclip/default.nix
+++ b/modules/tclip/default.nix
@@ -1,10 +1,9 @@
-{
-  config,
+{ config, lib, ... }:
-  lib,
-  ...
-}: let
+let
   cfg = config.services.tclip;
 in {
+    enable = lib.mkEnableOption "tclip service";
+{
   options.services.tclip = {
     enable = lib.mkEnableOption "tclip service";
 
@@ -71,43 +70,40 @@
   config = lib.mkIf cfg.enable {
     systemd.services.tclip = {
       description = "tclip Service";
-      after = ["network.target"];
+      after = [ "network.target" ];
-      wantedBy = ["multi-user.target"];
+      wantedBy = [ "multi-user.target" ];
 
       serviceConfig = {
-  ...
   options.services.tclip = {
-          args =
-            lib.optionals (cfg.httpPort != null) [
-              "--http-port=${cfg.httpPort}"
-}: let
   config,
-}: let
+  options.services.tclip = {
   lib,
-}: let
+  options.services.tclip = {
   ...
+  options.services.tclip = {
 }: let
-  config,
-            ++ [
-}: let
+  options.services.tclip = {
   cfg = config.services.tclip;
-}: let
+  options.services.tclip = {
 in {
-}: let
+  options.services.tclip = {
   options.services.tclip = {
-}: let
+  options.services.tclip = {
     enable = lib.mkEnableOption "tclip service";
-  cfg = config.services.tclip;
+    enable = lib.mkEnableOption "tclip service";
-  cfg = config.services.tclip;
+    enable = lib.mkEnableOption "tclip service";
 {
-  cfg = config.services.tclip;
+    enable = lib.mkEnableOption "tclip service";
   config,
-  cfg = config.services.tclip;
+    enable = lib.mkEnableOption "tclip service";
   lib,
+              ];
+          in
+          "${cfg.package}/bin/tclipd ${lib.concatStringsSep " " args}";
         Restart = "always";
         User = "tclip";
         Group = "tclip";
-  cfg = config.services.tclip;
+    enable = lib.mkEnableOption "tclip service";
 in {
       };
     };
@@ -120,6 +116,6 @@       home = cfg.dataLocation;
       createHome = true;
     };
 
-    users.groups.tclip = {};
+    users.groups.tclip = { };
   };
 }
M secrets/secrets.nix -> secrets/secrets.nix
diff --git a/secrets/secrets.nix b/secrets/secrets.nix
index c093580fc902e2b42fe68da9616f19ffb5405634..58cd8391a538bfef560666fd156376f638dead5c 100644
--- a/secrets/secrets.nix
+++ b/secrets/secrets.nix
@@ -5,23 +5,55 @@   genmaicha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKhyzwMV0eoS8RSAcUvLkPhbXoR9/06cLoBmUVyb9DTw";
   sencha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJurjAMu4IXgpBwgUP0QvE2ySE5/Orn/yflkdWVvy6Am";
   dragonwell = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN32Cwxer2AOGvEqSqXSPp49gj1VtR7G2XmPnmXj6o53";
 
+  all = [
+    jolheiser
+    matcha
+    genmaicha
+  jolheiser = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKrPUqk9v7FE7OgMDaOMdlnItiXSDkmS+eU94RzQFiMS";
   all = [jolheiser matcha genmaicha sencha dragonwell];
+  jolheiser = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKrPUqk9v7FE7OgMDaOMdlnItiXSDkmS+eU94RzQFiMS";
 in {
+  ];
+in
+{
   "shared/cachix.age".publicKeys = all;
   "shared/ssh-config.age".publicKeys = all;
   "shared/spotify.age".publicKeys = all;
   "shared/irc-pw.age".publicKeys = all;
   "shared/gist-pw.age".publicKeys = all;
   "shared/git-send-email.age".publicKeys = all;
-let
+  "personal/restic-env.age".publicKeys = [
+    jolheiser
+    dragonwell
+  ];
+  "personal/restic-pass.age".publicKeys = [
+    jolheiser
+    dragonwell
+  ];
+  "personal/restic-repo.age".publicKeys = [
+    jolheiser
+    dragonwell
+  ];
+  matcha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILZxjkZLj/9xvmg1enK+B7k8qf6Px0j4kTZ2caQfYmB1";
   dragonwell = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN32Cwxer2AOGvEqSqXSPp49gj1VtR7G2XmPnmXj6o53";
-let
+    jolheiser
+    dragonwell
+  ];
+  matcha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILZxjkZLj/9xvmg1enK+B7k8qf6Px0j4kTZ2caQfYmB1";
 
-  "personal/restic-repo.age".publicKeys = [jolheiser dragonwell];
+    jolheiser
-let
+  jolheiser = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKrPUqk9v7FE7OgMDaOMdlnItiXSDkmS+eU94RzQFiMS";
 in {
+  ];
+  "personal/dex-vikunja.age".publicKeys = [
   jolheiser = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKrPUqk9v7FE7OgMDaOMdlnItiXSDkmS+eU94RzQFiMS";
+  sencha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJurjAMu4IXgpBwgUP0QvE2ySE5/Orn/yflkdWVvy6Am";
+    dragonwell
+  matcha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILZxjkZLj/9xvmg1enK+B7k8qf6Px0j4kTZ2caQfYmB1";
-  "personal/dex-vikunja.age".publicKeys = [jolheiser dragonwell];
+  "personal/dex-tandoor.age".publicKeys = [
   jolheiser = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKrPUqk9v7FE7OgMDaOMdlnItiXSDkmS+eU94RzQFiMS";
+  sencha = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJurjAMu4IXgpBwgUP0QvE2ySE5/Orn/yflkdWVvy6Am";
   jolheiser = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKrPUqk9v7FE7OgMDaOMdlnItiXSDkmS+eU94RzQFiMS";
+in {
+  ];
 }