From c2b343f52252d01f2c8eb06386bb387706a9c1b7 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Thu, 22 Jan 2026 17:19:09 +0100 Subject: [PATCH 01/36] fix(git): aliases setting shouldve been alias --- modules/git.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/git.nix b/modules/git.nix index 1776f43..26dbd7c 100644 --- a/modules/git.nix +++ b/modules/git.nix @@ -26,7 +26,7 @@ with lib; git = { enable = true; settings = { - aliases = { + alias = { fix = "commit --fixup"; pufowile = "push --force-with-lease"; sl = "log --oneline --decorate --graph"; From 2620efb5ea52fb58346c69f6d7ef36b138a0c973 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Thu, 22 Jan 2026 17:19:41 +0100 Subject: [PATCH 02/36] feat(zsh): run artisan OR testbench in docker OR local with a() and p() --- modules/zsh.nix | 56 +++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/modules/zsh.nix b/modules/zsh.nix index 20dffd6..9e05fdf 100644 --- a/modules/zsh.nix +++ b/modules/zsh.nix @@ -41,27 +41,36 @@ with lib; "rm *" ]; }; - initContent = '' - fastfetch + initContent = # sh + '' + fastfetch - function p() { - if [ -f docker-compose.yml ] || [ -f docker-compose.yaml ]; then - if docker ps -f "name=php" -f "publish=80" --format "{{.ID}}" | grep -q .; then - docker compose exec php $@ - return + function a() { + if [ -f artisan ]; then + p php artisan + else + p php ./vendor/bin/testbench + fi + } + + function p() { + if [ -f docker-compose.yml ] || [ -f docker-compose.yaml ]; then + if docker ps -f "name=php" -f "publish=80" --format "{{.ID}}" | grep -q .; then + docker compose exec php $@ + return + fi fi - fi - # TODO: local PHP should probably take precedence when dnsmasq is setup correctly - if command -v php >/dev/null 2>&1; then - $@ - return - fi + # TODO: local PHP should probably take precedence when dnsmasq is setup correctly + if command -v php >/dev/null 2>&1; then + $@ + return + fi - echo "Failed to run $@. Could not find PHP or PHP docker container." - return 1 - } - ''; + echo "Failed to run $@. Could not find PHP or PHP docker container." + return 1 + } + ''; oh-my-zsh = { enable = true; plugins = [ @@ -76,14 +85,15 @@ with lib; ]; theme = "juanghurtado"; }; - profileExtra = mkIf config.home.wayland.enable '' - if uwsm check may-start; then - exec uwsm start default - fi - ''; + profileExtra = + mkIf config.home.wayland.enable # sh + '' + if uwsm check may-start; then + exec uwsm start default + fi + ''; syntaxHighlighting.enable = true; shellAliases = { - a = "p php artisan"; artisan = "a"; cat = "bat --paging=never"; c = "p composer"; From d13bcad3941177da182ef7680c309217c7e015ad Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Thu, 22 Jan 2026 17:19:59 +0100 Subject: [PATCH 03/36] feat(nvim): lint markdown using markdownlint-cli2 as well as vale for prose --- modules/nvim/nvim-lint.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/nvim/nvim-lint.nix b/modules/nvim/nvim-lint.nix index 7d23c74..a6de246 100644 --- a/modules/nvim/nvim-lint.nix +++ b/modules/nvim/nvim-lint.nix @@ -15,6 +15,7 @@ "jsonlint" ]; markdown = [ + "markdownlint-cli2" "vale" ]; php = [ From 4604a683f878a00ea409d3406465e016f0510140 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Thu, 22 Jan 2026 17:20:29 +0100 Subject: [PATCH 04/36] feat(nvim): display diagnostics on virtual line with lsp-lines --- modules/nvim/lsp.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/nvim/lsp.nix b/modules/nvim/lsp.nix index 3de4da7..4588e91 100644 --- a/modules/nvim/lsp.nix +++ b/modules/nvim/lsp.nix @@ -90,6 +90,7 @@ }; }; lspkind.enable = true; # vscode-like pictograms for lsp + lsp-lines.enable = true; # diagnostics in virtual line lsp-signature.enable = true; # method signatures }; }; From c3c266c9fbf6c3794f3adbff613f268a6f53acac Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Thu, 22 Jan 2026 17:19:41 +0100 Subject: [PATCH 05/36] feat(zsh): run artisan OR testbench in docker OR local with a() and p() --- modules/zsh.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/zsh.nix b/modules/zsh.nix index 9e05fdf..aeb50ed 100644 --- a/modules/zsh.nix +++ b/modules/zsh.nix @@ -47,9 +47,9 @@ with lib; function a() { if [ -f artisan ]; then - p php artisan + p php artisan $@ else - p php ./vendor/bin/testbench + p php ./vendor/bin/testbench $@ fi } From 3fd3cb7865324e7667630cfb2bdac8e415906c8c Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Wed, 28 Jan 2026 13:48:04 +0100 Subject: [PATCH 06/36] feat(git): add git filter-repo to simplify history management --- modules/git.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/git.nix b/modules/git.nix index 26dbd7c..94e5947 100644 --- a/modules/git.nix +++ b/modules/git.nix @@ -1,6 +1,7 @@ { config, lib, + pkgs, specialArgs, ... }: @@ -15,6 +16,10 @@ with lib; }; config = mkIf cfg.enable { + home.packages = with pkgs; [ + git-filter-repo + ]; + programs = { gh = { enable = true; From 36f5ae1d027941735e5b4854eac74e00e01e82a6 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Wed, 28 Jan 2026 13:54:37 +0100 Subject: [PATCH 07/36] feat(nvim): formatting sql with sqlruff --- modules/nvim/conform.nix | 3 +++ modules/nvim/lsp.nix | 1 + 2 files changed, 4 insertions(+) diff --git a/modules/nvim/conform.nix b/modules/nvim/conform.nix index 8de5bd2..31f157f 100644 --- a/modules/nvim/conform.nix +++ b/modules/nvim/conform.nix @@ -114,6 +114,9 @@ rust = [ "rustfmt" ]; + sql = [ + "sqruff" + ]; typescript = [ "eslint_d" "prettierd" diff --git a/modules/nvim/lsp.nix b/modules/nvim/lsp.nix index 4588e91..8d9fe3b 100644 --- a/modules/nvim/lsp.nix +++ b/modules/nvim/lsp.nix @@ -31,6 +31,7 @@ installRustc = false; }; superhtml.enable = true; + sqruff.enable = true; tailwindcss.enable = true; ts_ls.enable = true; vue_ls.enable = true; From 86c47cca68b87713ee6487b584d600ff42358dc3 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Thu, 29 Jan 2026 14:47:01 +0100 Subject: [PATCH 08/36] refactor(uwsmPrefix): include space in commands instead of variable --- modules/brightnessctl.nix | 4 ++-- modules/hyprland/binds.nix | 12 ++++++------ modules/hyprland/hyprmon.nix | 2 +- modules/hyprland/hyprpicker.nix | 2 +- modules/hyprland/settings.nix | 2 +- modules/playerctl.nix | 10 +++++----- modules/waybar.nix | 6 +++--- modules/wayland.nix | 4 ++-- modules/wlogout.nix | 2 +- modules/yazi.nix | 2 +- 10 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/brightnessctl.nix b/modules/brightnessctl.nix index 2c44e3e..b3d7cbe 100644 --- a/modules/brightnessctl.nix +++ b/modules/brightnessctl.nix @@ -21,8 +21,8 @@ with lib; wayland.windowManager.hyprland.settings = mkIf config.home.hyprland.enable { bindel = [ - ", XF86MonBrightnessDown, exec, ${uwsmPrefix}brightnessctl s 10%-" - ", XF86MonBrightnessUp, exec, ${uwsmPrefix}brightnessctl s 10%+" + ", XF86MonBrightnessDown, exec, ${uwsmPrefix} brightnessctl s 10%-" + ", XF86MonBrightnessUp, exec, ${uwsmPrefix} brightnessctl s 10%+" ]; }; }; diff --git a/modules/hyprland/binds.nix b/modules/hyprland/binds.nix index e18ec13..5b0579f 100644 --- a/modules/hyprland/binds.nix +++ b/modules/hyprland/binds.nix @@ -18,12 +18,12 @@ in "SUPER_ALT_CTRL, S, pass, ^(com\.obsproject\.Studio)$" # Hotkeys - "SUPER, Return, exec, ${uwsmPrefix}alacritty" + "SUPER, Return, exec, ${uwsmPrefix} alacritty" "SUPER, Space, exec, rofi -show-icons -show drun -l 10" "SUPER, V, exec, cliphist list | rofi -dmenu -display-columns 2 | cliphist decode | wl-copy" - "SUPER_ALT, M, exec, ${uwsmPrefix}wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" - "SUPER_ALT, B, exec, ${uwsmPrefix}~/.config/hypr/scripts/bluetooth-toggle.sh" + "SUPER_ALT, M, exec, ${uwsmPrefix} wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + "SUPER_ALT, B, exec, ${uwsmPrefix} ~/.config/hypr/scripts/bluetooth-toggle.sh" # Manipulate windows "SUPER, W, killactive" @@ -97,9 +97,9 @@ in ]; bindel = [ - ", XF86AudioMute, exec, ${uwsmPrefix}wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - ", XF86AudioLowerVolume, exec, ${uwsmPrefix}wpctl set-volume -l 1.25 @DEFAULT_AUDIO_SINK@ 5%-" - ", XF86AudioRaiseVolume, exec, ${uwsmPrefix}wpctl set-volume -l 1.25 @DEFAULT_AUDIO_SINK@ 5%+" + ", XF86AudioMute, exec, ${uwsmPrefix} wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioLowerVolume, exec, ${uwsmPrefix} wpctl set-volume -l 1.25 @DEFAULT_AUDIO_SINK@ 5%-" + ", XF86AudioRaiseVolume, exec, ${uwsmPrefix} wpctl set-volume -l 1.25 @DEFAULT_AUDIO_SINK@ 5%+" ]; bindm = [ diff --git a/modules/hyprland/hyprmon.nix b/modules/hyprland/hyprmon.nix index 13e5323..8bee5b7 100644 --- a/modules/hyprland/hyprmon.nix +++ b/modules/hyprland/hyprmon.nix @@ -21,7 +21,7 @@ with lib; wayland.windowManager.hyprland.settings = { bind = [ - "SUPER, P, exec, ${uwsmPrefix}alacritty -e hyprmon" # F4 + "SUPER, P, exec, ${uwsmPrefix} alacritty -e hyprmon" # F4 ]; }; }; diff --git a/modules/hyprland/hyprpicker.nix b/modules/hyprland/hyprpicker.nix index d010bbc..66e8744 100644 --- a/modules/hyprland/hyprpicker.nix +++ b/modules/hyprland/hyprpicker.nix @@ -21,7 +21,7 @@ with lib; wayland.windowManager.hyprland.settings = { bind = [ - "SUPER, D, exec, ${uwsmPrefix}hyprpicker -na" + "SUPER, D, exec, ${uwsmPrefix} hyprpicker -na" ]; }; }; diff --git a/modules/hyprland/settings.nix b/modules/hyprland/settings.nix index 0739836..a1fb775 100644 --- a/modules/hyprland/settings.nix +++ b/modules/hyprland/settings.nix @@ -5,7 +5,7 @@ in { wayland.windowManager.hyprland.settings = { exec-once = [ - "${uwsmPrefix} wl-paste -w cliphist store" # TODO: switch to clipse or stick with rofi and cliphist? + "${uwsmPrefix} wl-paste -w cliphist store" # TODO: switch to clipse or stick with rofi and cliphist? ]; monitor = [ diff --git a/modules/playerctl.nix b/modules/playerctl.nix index 3452e8d..3f3ce67 100644 --- a/modules/playerctl.nix +++ b/modules/playerctl.nix @@ -21,11 +21,11 @@ with lib; wayland.windowManager.hyprland.settings = mkIf config.home.hyprland.enable { bindl = [ - ", XF86AudioPrev, exec, ${uwsmPrefix}playerctl previous" - ", XF86AudioPlay, exec, ${uwsmPrefix}playerctl play-pause" - ", XF86AudioNext, exec, ${uwsmPrefix}playerctl next" - ", XF86AudioMedia, exec, ${uwsmPrefix}playerctl play-pause" - ", XF86AudioStop, exec, ${uwsmPrefix}playerctl stop" + ", XF86AudioPrev, exec, ${uwsmPrefix} playerctl previous" + ", XF86AudioPlay, exec, ${uwsmPrefix} playerctl play-pause" + ", XF86AudioNext, exec, ${uwsmPrefix} playerctl next" + ", XF86AudioMedia, exec, ${uwsmPrefix} playerctl play-pause" + ", XF86AudioStop, exec, ${uwsmPrefix} playerctl stop" ]; }; }; diff --git a/modules/waybar.nix b/modules/waybar.nix index cb14e20..27463c2 100644 --- a/modules/waybar.nix +++ b/modules/waybar.nix @@ -117,7 +117,7 @@ with lib; " " ]; }; - "on-click" = "${uwsmPrefix}pwvucontrol"; + "on-click" = "${uwsmPrefix} pwvucontrol"; }; "network" = { @@ -131,7 +131,7 @@ with lib; "tooltip-format-ethernet" = " {ifname} ({ipaddr}/{cidr})"; "tooltip-format-disconnected" = "Disconnected"; "max-length" = 50; - "on-click" = "${uwsmPrefix}alacritty -e impala"; + "on-click" = "${uwsmPrefix} alacritty -e impala"; }; "bluetooth" = { @@ -142,7 +142,7 @@ with lib; "tooltip-format" = "{device_alias}"; "tooltip-format-connected" = "󰂰 {device_enumerate}"; "tooltip-format-enumerate-connected" = "{device_alias}"; - "on-click" = "${uwsmPrefix}alacritty -e bluetui"; + "on-click" = "${uwsmPrefix} alacritty -e bluetui"; }; "battery" = { diff --git a/modules/wayland.nix b/modules/wayland.nix index 23a9453..003597a 100644 --- a/modules/wayland.nix +++ b/modules/wayland.nix @@ -6,7 +6,7 @@ }: let cfg = config.home.wayland; - uwsmPrefix = "uwsm app -- "; + uwsmPrefix = "uwsm app --"; in with lib; { @@ -14,7 +14,7 @@ with lib; home.wayland = { enable = mkEnableOption "wayland"; uwsm.prefix = mkOption { - default = "${uwsmPrefix}"; + default = "${uwsmPrefix} "; type = with types; str; description = "UWSM prefix"; }; diff --git a/modules/wlogout.nix b/modules/wlogout.nix index cc510d6..d24a6ef 100644 --- a/modules/wlogout.nix +++ b/modules/wlogout.nix @@ -20,7 +20,7 @@ with lib; layout = [ { "label" = "lock"; - "action" = "which hyprlock &>/dev/null && ${uwsmPrefix}hyprlock || loginctl lock-session"; + "action" = "which hyprlock &>/dev/null && ${uwsmPrefix} hyprlock || loginctl lock-session"; "text" = "[L] ock"; "keybind" = "l"; } diff --git a/modules/yazi.nix b/modules/yazi.nix index 616c3c3..395eb89 100644 --- a/modules/yazi.nix +++ b/modules/yazi.nix @@ -66,7 +66,7 @@ with lib; wayland.windowManager.hyprland.settings = mkIf config.home.hyprland.enable { bind = [ - "SUPER, E, exec, ${uwsmPrefix}alacritty -e 'yazi'" + "SUPER, E, exec, ${uwsmPrefix} alacritty -e yazi" ]; }; }; From 1072c7877f10850a1bc81bf7124ba3ccd5befa82 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Thu, 29 Jan 2026 14:56:50 +0100 Subject: [PATCH 09/36] refactor(alacritty): extract to dedicated module And keep hyprland binds with the module instead. Alacritty now opens with SUPER A so we can start it without launching Zellij by default (to support attaching to remote sessions without nesting). --- hosts/luna/users/shorty/default.nix | 1 + hosts/mars/users/shorty/default.nix | 1 + hosts/shared/default.nix | 9 -------- modules/alacritty.nix | 32 +++++++++++++++++++++++++++++ modules/hyprland/binds.nix | 1 - 5 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 modules/alacritty.nix diff --git a/hosts/luna/users/shorty/default.nix b/hosts/luna/users/shorty/default.nix index 63b3e30..50b6b08 100644 --- a/hosts/luna/users/shorty/default.nix +++ b/hosts/luna/users/shorty/default.nix @@ -28,6 +28,7 @@ with lib; scanmem ]; + alacritty.enable = true; bluetui.enable = true; brightnessctl.enable = true; dunst.enable = true; diff --git a/hosts/mars/users/shorty/default.nix b/hosts/mars/users/shorty/default.nix index 1f04288..2d7cdb6 100644 --- a/hosts/mars/users/shorty/default.nix +++ b/hosts/mars/users/shorty/default.nix @@ -11,6 +11,7 @@ with lib; nix-prefetch-git ]; + alacritty.enable = true; docker.enable = true; eza.enable = true; feh = { diff --git a/hosts/shared/default.nix b/hosts/shared/default.nix index 9bd2a5a..b0456ee 100644 --- a/hosts/shared/default.nix +++ b/hosts/shared/default.nix @@ -46,13 +46,4 @@ with lib; zip ]; }; - - programs = { - alacritty = { - enable = true; - settings = { - font.offset.y = 8; - }; - }; - }; } diff --git a/modules/alacritty.nix b/modules/alacritty.nix new file mode 100644 index 0000000..56a3b4a --- /dev/null +++ b/modules/alacritty.nix @@ -0,0 +1,32 @@ +{ + config, + lib, + ... +}: +let + cfg = config.home.alacritty; + uwsmPrefix = config.home.wayland.uwsm.prefix; +in +with lib; +{ + options = { + home.alacritty.enable = mkEnableOption "alacritty"; + }; + + config = mkIf cfg.enable { + programs = { + alacritty = { + enable = true; + settings = { + font.offset.y = 8; + }; + }; + }; + + wayland.windowManager.hyprland.settings = mkIf config.home.hyprland.enable { + bind = [ + "SUPER, Return, exec, ${uwsmPrefix} alacritty" + ]; + }; + }; +} diff --git a/modules/hyprland/binds.nix b/modules/hyprland/binds.nix index 5b0579f..271aaa5 100644 --- a/modules/hyprland/binds.nix +++ b/modules/hyprland/binds.nix @@ -18,7 +18,6 @@ in "SUPER_ALT_CTRL, S, pass, ^(com\.obsproject\.Studio)$" # Hotkeys - "SUPER, Return, exec, ${uwsmPrefix} alacritty" "SUPER, Space, exec, rofi -show-icons -show drun -l 10" "SUPER, V, exec, cliphist list | rofi -dmenu -display-columns 2 | cliphist decode | wl-copy" From fd5bea713da6ad06c36f03cf366208d2bf1df4c6 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Thu, 29 Jan 2026 14:58:42 +0100 Subject: [PATCH 10/36] refactor(zellij): alacritty automatically launches $SHELL --- modules/zellij.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/zellij.nix b/modules/zellij.nix index 9465798..1ec7587 100644 --- a/modules/zellij.nix +++ b/modules/zellij.nix @@ -14,11 +14,6 @@ with lib; config = mkIf cfg.enable { programs = { - alacritty = mkIf config.programs.alacritty.enable { - settings = { - terminal.shell = "zellij"; - }; - }; zellij = { enable = true; enableZshIntegration = config.programs.zsh.enable; From 939f97e6ea16e4aa38e5d85290971d7a0d5c22fb Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Thu, 29 Jan 2026 14:59:29 +0100 Subject: [PATCH 11/36] fix(zellij): use default layout as this displays the keybindings on CTRL B I found myself having to look up keybinds I don't use often by hand too often.. --- modules/zellij.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/zellij.nix b/modules/zellij.nix index 1ec7587..ad89902 100644 --- a/modules/zellij.nix +++ b/modules/zellij.nix @@ -19,7 +19,6 @@ with lib; enableZshIntegration = config.programs.zsh.enable; settings = { show_startup_tips = false; - default_layout = "compact"; # NOTE: https://github.com/zellij-org/zellij/blob/main/zellij-utils/assets/config/default.kdl keybinds = { "normal clear-defaults=true" = { From 0bd4caffbbca4fc2bf7dd450d812f737d3cb6f37 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Fri, 30 Jan 2026 11:19:26 +0100 Subject: [PATCH 12/36] refactor(sops): rekey with proper master key --- .sops.yaml | 2 +- hosts/shared/secrets/openrouter_api_key | 8 ++++---- hosts/shared/secrets/rclone.conf | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.sops.yaml b/.sops.yaml index ee06b0a..897056c 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -1,5 +1,5 @@ keys: - - &master age1fczq47wpa2wpm9ejy85qw3axw2c9v0f4qrywv5amnuqsjc87ws6qx75pfr + - &master age1hunzh8g6qs0yztln5q4akxvepd667xky4lkff4jga57kzah69ujqvpd7kt - &host_mars age1epkfxmjk0tlne8rmxqq77u06q3lnf5xfjcrwq42nuasswefndyfscw84cy - &user_shorty age1hy523tlslqas8qgs0lxgxanp9gx06fjekn608w4qf66mxkjzmucqh0g6vg creation_rules: diff --git a/hosts/shared/secrets/openrouter_api_key b/hosts/shared/secrets/openrouter_api_key index 8d47fff..853502c 100644 --- a/hosts/shared/secrets/openrouter_api_key +++ b/hosts/shared/secrets/openrouter_api_key @@ -3,16 +3,16 @@ "sops": { "age": [ { - "recipient": "age1fczq47wpa2wpm9ejy85qw3axw2c9v0f4qrywv5amnuqsjc87ws6qx75pfr", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArcnppbEtic29jMWRYWWRk\nSDkrdnd2VUthMlFNOHFTYmFFRjYwTkZLK0UwCkVLdmt3NFFjQVB1U096STd0UmVn\nT2FyNVhlLzdHNG5lMktVTlRNS1FjZU0KLS0tIFE1UU9zNFZlcHVEdTJ0dEdIa3hh\nZHBXS0tPMnBhVnpJQlJaU3lBODR5Uk0KMGRp7RvRgMlARbQJ+R6eGwS0JmpV3lHD\nrroOoBT2iac//VJGRwGBvHy8YIuA02Begu0GDGNjcfO6UPURmsCr+Q==\n-----END AGE ENCRYPTED FILE-----\n" + "recipient": "age1hunzh8g6qs0yztln5q4akxvepd667xky4lkff4jga57kzah69ujqvpd7kt", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRdUxtd0lTcCtYVUwvQzZN\nSndsb0hGN3Jta3V0Rmp2OUk5ZUJHcGRsRG53Cmp0RkJRZytVZjZ3cDR0SFczTGMv\nMzB2b2xsWUxKck1pQUtabmhTNFdEb0UKLS0tIGpGUm54aE1vZWs2UnhENXUyWDgr\nMzdVNjRXYkNRMXJ6VEdEZjNTenJqeEUKc6SG6nMbf9kWOKoTFjkb746pgQMiVXNF\n0SAAMIT9TOnLjsN6J6/e0LFpboxKq/uv0ghfA5CGTQexhwZbFIItAA==\n-----END AGE ENCRYPTED FILE-----\n" }, { "recipient": "age1epkfxmjk0tlne8rmxqq77u06q3lnf5xfjcrwq42nuasswefndyfscw84cy", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIb3lxS0pTMkpQS3QxN3E3\nNXdDZ0lUWkxxVjhNWmUvTW13Q0ZNa0wxaGtvCk1aVkd1VW9UMWFacVRxNWJRMVA1\nZ2pyTEQ2dldkdG9MOUkzakhCYU5yczAKLS0tIGVZRVV4bWpicG9sZ0pZdUF2a3lo\nMkFnS25vRTJPcElkUzEvejdES0l0SU0KK3ajTZTQoOCq9mH9Qw9ojorSMwbZbjgH\nz6VguqunOyaupgk/Bz/E3iuQi7hBIixVOnaNrcDokEs3q3tn8KhzaQ==\n-----END AGE ENCRYPTED FILE-----\n" + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIMnpzUjhuemVjbURlQ2k0\naUcxbkRzNVA3SnVVT2ZWbjgzcFpwTDhhb3lrCm9Fa1VtUzQzWEQybXZOOHZpT2Fh\nV2pVWXNUZDdjNzNvSzBBK0U1em56cmMKLS0tIFY3eGNYMnUzWmJGZ0VLeXY3ZEdu\nUUdmVWQwZUFvaWxud0FsWGFncCtPWTgKD32D6fun2Do5cIlJAsZCbQdcahCUaxzi\nyFlJuK1uoVuszANehfXGwNvskPc2IhFDS7HkY4LkyICVwzmDIVO70g==\n-----END AGE ENCRYPTED FILE-----\n" }, { "recipient": "age1hy523tlslqas8qgs0lxgxanp9gx06fjekn608w4qf66mxkjzmucqh0g6vg", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyQVZsTnIrTjNzVmJTYW42\nTFVZbGRwWTA1ZVNaRUx1Q3prZnVIRk80NmpZCmRYa1p1RitJRzd4TjNldHFFVDk5\nUVpkaE00SDcxQW4yUXc0RHVDeWtiSjgKLS0tIHRHMkc2VnFTZThHTGgzdEZ3VTkw\ndFRmNVM1VUZ6U3RRZDlraDNMZXJQVGcKM4mdeIV9PSJO5WemQkkswrW31vIDi1uA\nOMr9xnmLSHACacJjCsiiPISdMZu0qVVNBl/DCoJZVJEi5d6u5I++qw==\n-----END AGE ENCRYPTED FILE-----\n" + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWOFZneFdjeklraHlPdVdR\neFltVWh4UVlQTUhTMDVCN3pOVWZqcHk0QndZClJnRnQ0RlR5NUFvUW00R1ZGeGVN\ndVJiTDhKM2grSy9NOFI1bmIrTVFaWVkKLS0tIFFVOXllc3MzanMyeXJmSDdvNVVi\nbzY2SlhOeEhDei8vTjR5UTdCVWpLN00KLBnF2fSnEetO99rz0cwQOMWYg8pFpxHh\nrNES3yMfTBuXUXs+do+U7sOtCVFeVupGiCiFaQksaQ+TcSsHEQ+i2w==\n-----END AGE ENCRYPTED FILE-----\n" } ], "lastmodified": "2025-02-18T10:54:37Z", diff --git a/hosts/shared/secrets/rclone.conf b/hosts/shared/secrets/rclone.conf index 34499ae..065dba7 100644 --- a/hosts/shared/secrets/rclone.conf +++ b/hosts/shared/secrets/rclone.conf @@ -3,16 +3,16 @@ "sops": { "age": [ { - "recipient": "age1fczq47wpa2wpm9ejy85qw3axw2c9v0f4qrywv5amnuqsjc87ws6qx75pfr", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZNWlseGRWcmZiUUVueVpD\nODB0cHRhUnNUR3BFek9VZHZhZnV3MHVmR1RRCmxoVVFFc1AzODVhWlY3SzBvZ3Ay\naUV0dVJ2RDVQaWc4Zlg1enlPbHFLL0UKLS0tIEtoaE45SG9lVlJmWm5lWlM4YVFB\naUZMcTdvbDlHK2RYQWlTNWlkNHZTSm8K15frHfBMPXhiHN9r91d4h6WUJLPrU9+F\nv3NBJ84Dhl/VRRthJyXSg3LTMI9eN5Rq9VtzLO8Ye3GCiSBeyaUH0Q==\n-----END AGE ENCRYPTED FILE-----\n" + "recipient": "age1hunzh8g6qs0yztln5q4akxvepd667xky4lkff4jga57kzah69ujqvpd7kt", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZNmdVL2pUb01VOVFDQ0dp\nZE8vQzEzT2w5S3VNRUtBbithUDdrcGEyaUFBCitiWnZ0RkhYenhzNURuNzJ2N1kx\neXZsK081RzBSbWhZR096NGhFRCtaMk0KLS0tIGFsNnZDVktHYjM5azczM3oyWUdn\nazNZSkJDVTcrK0Z2OUNCMHdRME1BeUkKpI4XhCCX1P/h0dqHi2OYmZA7Zcr/zRpB\nIP97L/OPlQlmfrbsznqNCtwMNYZ7lwv+FJRXU4XohqKgZ5IRrOAg/A==\n-----END AGE ENCRYPTED FILE-----\n" }, { "recipient": "age1epkfxmjk0tlne8rmxqq77u06q3lnf5xfjcrwq42nuasswefndyfscw84cy", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzNFh2WE81eUpmQ0hzaEx1\nczBweXVTTmVUbGdrNzVPeGE3bjREa1RhcjFRCmwwVEI0b0E1alprbTl2eGF0YXFi\ncDNKOVJKOHNCdDR4MzR0cFN4ZXpVYTQKLS0tIGZ2WEFySWV5V0hxdWpaeWJSNlZD\ndmF4Q2lPZjhEYTYvcllTOFpOUDRYcFEK7ZrvxKB41UgH2AafvkRgzOckv809H37g\nKiOknxWOzzngILhp3o1EvWFrE65TH/Rlh8i2f0maqJj9Dw/8UfdGbA==\n-----END AGE ENCRYPTED FILE-----\n" + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtaXN1dUVCQ0t5MHM0cG1J\nWWJ0dC9UY0k5VkZzQzhBeHNBS1ErMWdkT21BCmlyTnRJRlpzT25teU4zeW1LZ2g1\nZmpkUEFxa3JTSXUrdlA4MXdNY1hPNEUKLS0tIEZqNW5uQzlUZlB2dnJmdHhENUZU\nT2dKSmdaQmY5RmtBUFMzUHY2RHBabVEKwYvwcsHoTxU5OkBwTBow+VP4Cl/KzWmC\nWLiIeUAx+zfDmpjbsV0JHuw1jlfW4ku1JJ6fCz7LIrUID3dcwU0PvQ==\n-----END AGE ENCRYPTED FILE-----\n" }, { "recipient": "age1hy523tlslqas8qgs0lxgxanp9gx06fjekn608w4qf66mxkjzmucqh0g6vg", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzN3dzeUs3dU9CVUM4b2JH\nNFk2ZGNETWEzTjUzUkgzMmVNUmN1RnFweGpJCi9EZ2w5dnBDV2dyTjcvZy9hdDFq\ncjhtcWJadE1wNEpjdUV0eWVBWkJGZkEKLS0tIHBSZkFSYy9PQ0tPb2RnWFZBTVFh\nYjRva2pEbVRPbEpWSUFNRXoyOEJJNkUKvQ3qJPwW8kmVHsB0am1ZIEYBdweDWlMu\nocLLNOTlL/rlIdTF3Y+h2oUjOzBzSZXKtWq+9QHra5vGwipL1K5zAQ==\n-----END AGE ENCRYPTED FILE-----\n" + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0TzJiUzNxYU5udzBHY2Mv\ndWY1NkZHSGZzamtLekhsTm5HRFl4clc0b1dFClpmWi9YYWE4Y21icUJKKzhZY2VS\nalJjeFlkM2pVLzBUQjRUamxYSVg5Y2MKLS0tIDdPMzYzYkNPb3RXck5RNFBORHhM\nbVlDem5OQ1VCNExqTU9BK0RET2I2Z1UKNCt7dPryjelSLobAGgipMuMZExZzkATV\nEjh8FKJ5xSNdDYWHiirY2dI/In8i26WY+3JiobB075V7JQ9I4OLttg==\n-----END AGE ENCRYPTED FILE-----\n" } ], "lastmodified": "2025-02-12T10:44:19Z", From 6709c5dafa5621b758323b68ded3b18ae15bfe66 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Fri, 30 Jan 2026 17:04:56 +0100 Subject: [PATCH 13/36] fixup! feat(firefox): custom search engines for Sonarr and Radarr --- modules/firefox.nix | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/firefox.nix b/modules/firefox.nix index 027ef13..9cd90dd 100644 --- a/modules/firefox.nix +++ b/modules/firefox.nix @@ -97,75 +97,75 @@ with lib; "bing".metaData.hidden = true; "ddg".metaData.alias = "@d"; "google".metaData.alias = "@g"; - "wikipedia (en)".metaData.alias = "@w"; + "wikipedia".metaData.alias = "@w"; - "Arch Linux Wiki" = { + "archlinux" = { urls = [ { template = "https://wiki.archlinux.org/index.php?search={searchTerms}"; } ]; icon = "https://wiki.archlinux.org/favicon.ico"; definedAliases = [ "@a" ]; }; - "Github" = { + "github" = { urls = [ { template = "https://github.com/search?q={searchTerms}"; } ]; icon = "https://github.githubassets.com/favicons/favicon.svg"; definedAliases = [ "@gh" ]; }; - "Reddit" = { + "reddit" = { urls = [ { template = "https://reddit.com/search?q={searchTerms}"; } ]; icon = "https://www.redditstatic.com/shreddit/assets/favicon/192x192.png"; definedAliases = [ "@r" ]; }; - "MyNixOS" = { + "mynixos" = { urls = [ { template = "https://mynixos.com/search?q={searchTerms}"; } ]; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@n" ]; }; - "NixOS Wiki" = { + "nixoswiki" = { urls = [ { template = "https://wiki.nixos.org/w/index.php?search={searchTerms}"; } ]; icon = "https://wiki.nixos.org/nixos.png"; definedAliases = [ "@nw" ]; }; - "PHP" = { + "php" = { urls = [ { template = "https://php.net/{searchTerms}"; } ]; icon = "https://www.php.net/favicon-196x196.png?v=2"; definedAliases = [ "@php" ]; }; - "ProtonDB" = { + "protondb" = { urls = [ { template = "https://protondb.com/search?q={searchTerms}"; } ]; icon = "https://protondb.com/sites/protondb/images/favicon-32x32.png"; definedAliases = [ "@p" ]; }; - "YouTube" = { + "youtube" = { urls = [ { template = "https://youtube.com/results?search_query={searchTerms}"; } ]; icon = "https://youtube.com/img/favicon_144.png"; definedAliases = [ "@yt" ]; }; - "YouTube Music" = { + "youtubemusic" = { urls = [ { template = "https://music.youtube.com/search?q={searchTerms}"; } ]; icon = "https://music.youtube.com/img/favicon_144.png"; definedAliases = [ "@ytm" ]; }; - "Rotten Tomatoes" = { + "rottentomatoes" = { urls = [ { template = "https://www.rottentomatoes.com/search?search={searchTerms}"; } ]; icon = "https://editorial.rottentomatoes.com/wp-content/uploads/2022/05/favicon.png?w=32"; definedAliases = [ "@rt" ]; }; - "Sonarr" = { + "sonarr" = { urls = [ { template = "https://sonarr.99linesofcode.nl/add/new?term={searchTerms}"; } ]; icon = "https://sonarr.99linesofcode.nl/Content/Images/Icons/favicon-32x32.png"; definedAliases = [ "@sonarr" ]; }; - "Radarr" = { + "radarr" = { urls = [ { template = "https://radarr.99linesofcode.nl/add/new?term={searchTerms}"; } ]; icon = "https://radarr.99linesofcode.nl/Content/Images/Icons/favicon-32x32.png"; definedAliases = [ "@radarr" ]; From 12b8e33aa00406947351a487fd163d2088a47817 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Tue, 3 Feb 2026 13:53:23 +0100 Subject: [PATCH 14/36] fix(mars.shorty): enable styling with stylix --- hosts/mars/users/shorty/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/hosts/mars/users/shorty/default.nix b/hosts/mars/users/shorty/default.nix index 2d7cdb6..18b4106 100644 --- a/hosts/mars/users/shorty/default.nix +++ b/hosts/mars/users/shorty/default.nix @@ -24,6 +24,7 @@ with lib; openssh.enable = true; rclone.enable = true; sops.enable = true; + stylix.enable = true; yazi.enable = true; zellij.enable = true; zsh.enable = true; From af6a6c5d901bc5253da2003f5b3030280bab5220 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Fri, 6 Feb 2026 22:32:59 +0000 Subject: [PATCH 15/36] feat(lazysql): TUI client for SQL --- hosts/luna/users/shorty/default.nix | 1 + hosts/mars/users/shorty/default.nix | 1 + modules/lazysql.nix | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 modules/lazysql.nix diff --git a/hosts/luna/users/shorty/default.nix b/hosts/luna/users/shorty/default.nix index 50b6b08..0915d29 100644 --- a/hosts/luna/users/shorty/default.nix +++ b/hosts/luna/users/shorty/default.nix @@ -50,6 +50,7 @@ with lib; hyprland.enable = true; impala.enable = true; lazydocker.enable = true; + lazysql.enable = true; mpv.enable = true; nvim.enable = true; obsidian.enable = true; diff --git a/hosts/mars/users/shorty/default.nix b/hosts/mars/users/shorty/default.nix index 18b4106..80bf61a 100644 --- a/hosts/mars/users/shorty/default.nix +++ b/hosts/mars/users/shorty/default.nix @@ -20,6 +20,7 @@ with lib; }; git.enable = true; lazydocker.enable = true; + lazysql.enable = true; nvim.enable = true; openssh.enable = true; rclone.enable = true; diff --git a/modules/lazysql.nix b/modules/lazysql.nix new file mode 100644 index 0000000..f54d9ad --- /dev/null +++ b/modules/lazysql.nix @@ -0,0 +1,21 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.home.lazysql; +in +with lib; +{ + options = { + home.lazysql.enable = mkEnableOption "lazysql"; + }; + + config = mkIf cfg.enable { + programs.lazysql = { + enable = true; + }; + }; +} From ddbe338df3631ef93c132b2e3f625fe8e94a9745 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Thu, 19 Feb 2026 20:38:55 +0100 Subject: [PATCH 16/36] fix(sops): use age key generated for host by nixos-config --- modules/sops.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/sops.nix b/modules/sops.nix index f73be2e..f873a42 100644 --- a/modules/sops.nix +++ b/modules/sops.nix @@ -3,10 +3,12 @@ inputs, lib, pkgs, + specialArgs, ... }: let cfg = config.home.sops; + inherit (specialArgs) username; in with lib; { @@ -29,6 +31,7 @@ with lib; defaultSopsFile = ../.sops.yaml; age = { generateKey = false; + keyFile = "/home/${username}/.config/sops/age/keys.txt"; sshKeyPaths = [ "${config.home.homeDirectory}/.ssh/id_ed25519" ]; }; }; From c4d0bf088e77ed77426865ec8193e477a10f0972 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:18:04 +0100 Subject: [PATCH 17/36] refactor(rustdesk): install pre build package --- hosts/luna/users/shorty/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hosts/luna/users/shorty/default.nix b/hosts/luna/users/shorty/default.nix index 0915d29..40e8668 100644 --- a/hosts/luna/users/shorty/default.nix +++ b/hosts/luna/users/shorty/default.nix @@ -18,7 +18,7 @@ with lib; insomnia # FOSS alternative to Postman API tester nix-prefetch-git polychromatic - # rustdesk + rustdesk-flutter scrcpy android-tools act # run GitHub Actions locally From 16ea4543a3329fbd4f069124de5cdb2827966a7d Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:18:53 +0100 Subject: [PATCH 18/36] fix(yazi): settings.manager was renamed to settings.mgr --- modules/yazi.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/yazi.nix b/modules/yazi.nix index 395eb89..2463672 100644 --- a/modules/yazi.nix +++ b/modules/yazi.nix @@ -22,7 +22,7 @@ with lib; programs.yazi = { enable = true; settings = { - manager = { + mgr = { linemode = "none"; ratio = [ 1 From 6f29d71b577e4069b2c9c579738612fce9f14df3 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:19:35 +0100 Subject: [PATCH 19/36] fix(yazi): suppress shell wrapper rename warning by being explicit --- modules/yazi.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/yazi.nix b/modules/yazi.nix index 2463672..665a664 100644 --- a/modules/yazi.nix +++ b/modules/yazi.nix @@ -59,6 +59,7 @@ with lib; micro_workers = 5; }; }; + shellWrapperName = "y"; plugins = { # TODO: add ouch.yazi for compressing and decompressing archives }; From 0da7ebc3d5e042ed96e76d0cfec7819e8f75851d Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:20:20 +0100 Subject: [PATCH 20/36] feat(nvim): force mini-icons to use glyphs --- modules/nvim/mini.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/nvim/mini.nix b/modules/nvim/mini.nix index 20e8e22..3ad6d46 100644 --- a/modules/nvim/mini.nix +++ b/modules/nvim/mini.nix @@ -21,7 +21,9 @@ }; }; }; - icons = { }; + icons = { + style = "glyph"; + }; pairs = { modes = { insert = true; From db7b9ec12ea729aa29dcab7dd4510b66e9bc0276 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:55:47 +0100 Subject: [PATCH 21/36] fix(ghidra): now builds correctly again --- hosts/luna/users/shorty/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hosts/luna/users/shorty/default.nix b/hosts/luna/users/shorty/default.nix index 40e8668..01a0c2e 100644 --- a/hosts/luna/users/shorty/default.nix +++ b/hosts/luna/users/shorty/default.nix @@ -24,7 +24,7 @@ with lib; act # run GitHub Actions locally wireshark gdb - # ghidra # FIXME: wouldnt build for 4ebc11dad54b7e5b8a46c6edb2533852e99ec566bbe10836b2d6dba89c9c2e3c + ghidra scanmem ]; From 6cd01fa3c7381feff5a01c27afe9adaa5fd30f79 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:56:22 +0100 Subject: [PATCH 22/36] fix(feh): disable override as imlib2 build argument no longer exists --- modules/feh.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/feh.nix b/modules/feh.nix index d6c49eb..55ca574 100644 --- a/modules/feh.nix +++ b/modules/feh.nix @@ -41,7 +41,6 @@ with lib; config = mkIf cfg.enable { programs.feh = with pkgs; { enable = true; - # package = feh.override { imlib2 = imlib2Full; }; # FIXME: wouldnt build for 4ebc11dad54b7e5b8a46c6edb2533852e99ec566bbe10836b2d6dba89c9c2e3c }; xdg.mimeApps.defaultApplications = mkIf cfg.defaultApplication.enable ( From 3a6224d6333fb7a64cc53012902de4a425817d58 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:57:10 +0100 Subject: [PATCH 23/36] refactor(nvim): disable treesitter-refactor until it has been updated --- modules/nvim/treesitter.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nvim/treesitter.nix b/modules/nvim/treesitter.nix index ee2b76e..7ae1980 100644 --- a/modules/nvim/treesitter.nix +++ b/modules/nvim/treesitter.nix @@ -19,7 +19,7 @@ trim_scope = "outer"; }; }; - # treesitter-refactor.enable = true; # FIXME: wouldnt build for 4ebc11dad54b7e5b8a46c6edb2533852e99ec566bbe10836b2d6dba89c9c2e3c + # treesitter-refactor.enable = true; # FIXME:conflicts with treesitter changes/migration, enable later treesitter-textobjects = { enable = true; settings = { From b7d23766f90d3b85ea84bcaed7c282eda8a92444 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:57:43 +0100 Subject: [PATCH 24/36] fix(freecad): freecad-wayland no longer exists and freecad presently doesn't build --- hosts/luna/users/shorty/default.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hosts/luna/users/shorty/default.nix b/hosts/luna/users/shorty/default.nix index 01a0c2e..8e771f7 100644 --- a/hosts/luna/users/shorty/default.nix +++ b/hosts/luna/users/shorty/default.nix @@ -13,8 +13,7 @@ with lib; bitwarden-cli discord electron - # (freecad.override { withWayland = config.home.wayland.enable; }) - freecad-wayland + # freecad # FIXME: doesn't build with nixpkgs#2fc6539b481e1d2569f25f8799236694180c0993 insomnia # FOSS alternative to Postman API tester nix-prefetch-git polychromatic From 8db600f122788185cb2799e308603118a47035d8 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:59:30 +0100 Subject: [PATCH 25/36] chore: nix flake update 2fc6539b481e1d2569f25f8799236694180c0993 --- flake.lock | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/flake.lock b/flake.lock index cc70b52..e26409b 100644 --- a/flake.lock +++ b/flake.lock @@ -92,11 +92,11 @@ ] }, "locked": { - "lastModified": 1765835352, - "narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=", + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "a34fae9c08a15ad73f295041fec82323541400a9", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "type": "github" }, "original": { @@ -207,11 +207,11 @@ ] }, "locked": { - "lastModified": 1768240557, - "narHash": "sha256-bVqJ34yMiiUQwYhjliiiN5LBH1Y+UldbIjNTCUtDdwE=", + "lastModified": 1772060133, + "narHash": "sha256-VuyRptb8v1lVGMlLp4/1vRX3Efwec0CN0S6mKmDPzLg=", "owner": "nix-community", "repo": "home-manager", - "rev": "b3f737e70fb9eef1d2308ea6738ffed5ae080f9b", + "rev": "ce9b6e52500a0ea0ec48f0bbf6d7a3e431d9dfa4", "type": "github" }, "original": { @@ -227,11 +227,11 @@ ] }, "locked": { - "lastModified": 1768184343, - "narHash": "sha256-dS+Xr1UQYBn8IUWs2/pme7xwl/CGGtmwCnyyfhOQgtM=", + "lastModified": 1772073742, + "narHash": "sha256-wl7hHR9lC3hDnNecY7LquuApIEyRFTzA9reAoOUqE4c=", "owner": "nix-community", "repo": "nix-vscode-extensions", - "rev": "585d0a79468dfd5a1234b4c867fadc7cf24b6483", + "rev": "13af57106c02b31342f8046860550e526218eaa4", "type": "github" }, "original": { @@ -242,11 +242,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1768127708, - "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", + "lastModified": 1771848320, + "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", + "rev": "2fc6539b481e1d2569f25f8799236694180c0993", "type": "github" }, "original": { @@ -265,11 +265,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1767906546, - "narHash": "sha256-AoSWS8+P+7hQ/jIdv0wBjgH1MvnerdWBFXO4GV3JoQs=", + "lastModified": 1771135771, + "narHash": "sha256-wyvBIhDuyCRyjB3yPg77qoyxrlgQtBR1rVW3c9knV3E=", "owner": "nix-community", "repo": "nixvim", - "rev": "7eb8f36f085b85a2aeff929aff52d0f6aa14e000", + "rev": "ed0424f0b08d303a7348f52f7850ad1b2704f9ba", "type": "github" }, "original": { @@ -286,11 +286,11 @@ ] }, "locked": { - "lastModified": 1768240195, - "narHash": "sha256-tBWjR3zFzc6KftTiITuQ71Y1XylPsqN4XgSfYxtItT0=", + "lastModified": 1772120935, + "narHash": "sha256-0XNEMp/aIxhdC7+cEjqoeVgnbRN30o1RaNCcyLpkoko=", "owner": "nix-community", "repo": "NUR", - "rev": "a1bc4fd38ae4c787e18d20991c472c8f0c556bd9", + "rev": "197e0b37cd38b86556175fa8818f3f57f47632b8", "type": "github" }, "original": { @@ -343,11 +343,11 @@ ] }, "locked": { - "lastModified": 1768104471, - "narHash": "sha256-HdnXWQsA1EI27IJlaENUEEug58trUrh6+MT0cFiDHmY=", + "lastModified": 1772048434, + "narHash": "sha256-/wA0OaH6kZ/pFA+nXR/tvg5oupOmEDmMS5us79JT60o=", "owner": "mic92", "repo": "sops-nix", - "rev": "94f9cbd20f680ebb2ad6cdf39da97cbcfaedf004", + "rev": "334daa7c273dd8bf7a0cd370e4e16022b64e55e9", "type": "github" }, "original": { @@ -377,11 +377,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1768241331, - "narHash": "sha256-li0Z2Tr5qpH+wyuCMpzXSsHYRleaTukcdLTpAsGcVzY=", + "lastModified": 1771787992, + "narHash": "sha256-Vg4bGwwenNYI8p3nJTl9FRyeIyrjATeZrZr+GyUSDrw=", "owner": "danth", "repo": "stylix", - "rev": "a62840a9e95801969a03b91e49c1607b5322224c", + "rev": "30054cca073b49b42a71289edec858f535b27fe9", "type": "github" }, "original": { @@ -524,11 +524,11 @@ ] }, "locked": { - "lastModified": 1753541826, - "narHash": "sha256-foGgZu8+bCNIGeuDqQ84jNbmKZpd+JvnrL2WlyU4tuU=", + "lastModified": 1770124655, + "narHash": "sha256-yHmd2B13EtBUPLJ+x0EaBwNkQr9LTne1arLVxT6hSnY=", "owner": "nix-community", "repo": "nixos-vscode-server", - "rev": "6d5f074e4811d143d44169ba4af09b20ddb6937d", + "rev": "92ce71c3ba5a94f854e02d57b14af4997ab54ef0", "type": "github" }, "original": { From 4d124c86af1fe0d2c25ade880f3bbf96e0bb48e1 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 14:25:15 +0100 Subject: [PATCH 26/36] refactor(nvim): globals in nested attr set --- modules/nvim.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/nvim.nix b/modules/nvim.nix index 6f1ebc4..d51e3d9 100644 --- a/modules/nvim.nix +++ b/modules/nvim.nix @@ -33,8 +33,11 @@ with lib; viAlias = true; vimAlias = true; vimdiffAlias = true; - globals.mapleader = " "; - globals.maplocalleader = "\\"; + + globals = { + mapleader = " "; + maplocalleader = "\\"; + }; opts = { autowrite = true; # write the contents of the file automatically on certain commands From 100cae5bc7d6a0a0ff1a49f012710056c97637f2 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 28 Feb 2026 14:32:23 +0100 Subject: [PATCH 27/36] feat(firefox): enable fake-filler extension --- modules/firefox.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/firefox.nix b/modules/firefox.nix index 9cd90dd..9ed8882 100644 --- a/modules/firefox.nix +++ b/modules/firefox.nix @@ -73,7 +73,7 @@ with lib; extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ bitwarden darkreader - # fake-filler # TODO: added in a later commit + fake-filler gaoptout ublock-origin sponsorblock From 5b9219a41c3e9cc63684251a60419432b07f5634 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:46:42 +0100 Subject: [PATCH 28/36] refactor: ripgrep ignore searching changelog and flake.lock --- .ignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .ignore diff --git a/.ignore b/.ignore new file mode 100644 index 0000000..6fa596b --- /dev/null +++ b/.ignore @@ -0,0 +1,3 @@ +CHANGELOG.md + +flake.lock From 4e0cd59e499a20d65d481a613c8d0022b857bbf7 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:47:08 +0100 Subject: [PATCH 29/36] feat(nvim): add line length rulers at 80, 120 and 160 characters --- modules/nvim.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/nvim.nix b/modules/nvim.nix index d51e3d9..488af12 100644 --- a/modules/nvim.nix +++ b/modules/nvim.nix @@ -42,6 +42,7 @@ with lib; opts = { autowrite = true; # write the contents of the file automatically on certain commands clipboard = "unnamedplus"; # use system clipboard + colorcolumn = "80,120,160"; # color line length columns completeopt = "menu,menuone,noselect"; confirm = true; # confirm to save changes before exiting modified buffer cursorline = true; # enable highlighting of the current line From 3a6d6319051bb8dd752bb9968d5c4b5fef203507 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:48:16 +0100 Subject: [PATCH 30/36] refactor(nvim): treesitter-refactor is no longer actively maintained. https://github.com/nvim-treesitter/nvim-treesitter-locals is mentioned as a replacement but a nixvim package for this doesn't currently exist. --- modules/nvim/treesitter.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/nvim/treesitter.nix b/modules/nvim/treesitter.nix index 7ae1980..2c6cdd5 100644 --- a/modules/nvim/treesitter.nix +++ b/modules/nvim/treesitter.nix @@ -19,7 +19,6 @@ trim_scope = "outer"; }; }; - # treesitter-refactor.enable = true; # FIXME:conflicts with treesitter changes/migration, enable later treesitter-textobjects = { enable = true; settings = { From 74a93b7f7447c7afe0cd93452cc239e4da108374 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:49:23 +0100 Subject: [PATCH 31/36] feat(nvim): autocompletions for method signature, symbols and treesitter parser --- modules/nvim/cmp.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/nvim/cmp.nix b/modules/nvim/cmp.nix index 58d7aba..739a25b 100644 --- a/modules/nvim/cmp.nix +++ b/modules/nvim/cmp.nix @@ -33,17 +33,18 @@ }; snippet.expand = "luasnip"; sources = [ - { name = "emoji"; } { name = "buffer"; } { name = "cmdline"; } { name = "dap"; } { name = "luasnip"; } { name = "nvim_lsp"; } + { name = "nvim_lsp_document_symbol"; } + { name = "nvim_lsp_signature_help"; } { name = "path"; } + { name = "treesitter"; } ]; }; }; - cmp-nvim-lsp.enable = true; }; }; } From dfac65e919dd4bf687c3abd44e443ba0eb656282 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:50:02 +0100 Subject: [PATCH 32/36] refactor(nvim): use jsonls, ts_ls and yamlls for formatting instead of jq/yq --- modules/nvim/conform.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/nvim/conform.nix b/modules/nvim/conform.nix index 31f157f..d1f4ce7 100644 --- a/modules/nvim/conform.nix +++ b/modules/nvim/conform.nix @@ -86,7 +86,6 @@ "prettier" ]; json = [ - "jq" "eslint_d" "prettierd" "prettier" @@ -128,7 +127,6 @@ "prettier" ]; yaml = [ - "yq" "eslint_d" "prettierd" "prettier" From 2525fd8726791954dbdbe86b8e471ea570e8ae62 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:52:33 +0100 Subject: [PATCH 33/36] feat(nvim): allow aligning code through mini-align --- modules/nvim/mini.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/nvim/mini.nix b/modules/nvim/mini.nix index 3ad6d46..0683b65 100644 --- a/modules/nvim/mini.nix +++ b/modules/nvim/mini.nix @@ -5,6 +5,7 @@ ]; plugins = { + mini-align.enable = true; mini = { enable = true; mockDevIcons = true; From d58b7a6fe5ca0f3c6705d96bd5816960692b9d85 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sat, 14 Mar 2026 23:05:39 +0100 Subject: [PATCH 34/36] feat(nvim): split or join arguments easily using mini-splitjoin --- modules/nvim/mini.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/nvim/mini.nix b/modules/nvim/mini.nix index 0683b65..91de6a3 100644 --- a/modules/nvim/mini.nix +++ b/modules/nvim/mini.nix @@ -6,6 +6,7 @@ plugins = { mini-align.enable = true; + mini-splitjoin.enable = true; mini = { enable = true; mockDevIcons = true; From f1baa4411deeb4153497da1a4969fa7cc46be918 Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sun, 15 Mar 2026 00:04:21 +0100 Subject: [PATCH 35/36] feat(nvim): handle linting, formatting and error checking at lsp, nvim-lint or conform level --- modules/nvim/conform.nix | 118 +++++++++++++++++-------------------- modules/nvim/lsp.nix | 2 + modules/nvim/nvim-lint.nix | 17 +++--- 3 files changed, 62 insertions(+), 75 deletions(-) diff --git a/modules/nvim/conform.nix b/modules/nvim/conform.nix index d1f4ce7..7d55896 100644 --- a/modules/nvim/conform.nix +++ b/modules/nvim/conform.nix @@ -45,11 +45,9 @@ "trim_newlines" ]; sh = [ - "shellcheck" "shfmt" ]; bash = [ - "shellcheck" "shellharden" "shfmt" ]; @@ -75,40 +73,47 @@ "prettierd" "prettier" ]; - javascript = [ - "eslint_d" - "prettierd" - "prettier" - ]; - javascriptreact = [ - "eslint_d" - "prettierd" - "prettier" - ]; - json = [ - "eslint_d" - "prettierd" - "prettier" - ]; + javascript = { + __unkeyed-1 = "eslint_d"; + __unkeyed-2 = "prettierd"; + __unkeyed-3 = "prettier"; + stop_after_first = true; + }; + javascriptreact = { + __unkeyed-1 = "eslint_d"; + __unkeyed-2 = "prettierd"; + __unkeyed-3 = "prettier"; + stop_after_first = true; + }; + json = { + __unkeyed-1 = "eslint_d"; + __unkeyed-2 = "prettierd"; + __unkeyed-3 = "prettierd"; + __unkeyed-4 = "jq"; + stop_after_first = true; + }; lua = [ "stylua" ]; - markdown = [ - "markdownlint-cli2" - "eslint_d" - "prettierd" - "prettier" - ]; + markdown = { + __unkeyed-1 = "eslint_d"; + __unkeyed-2 = "prettierd"; + __unkeyed-3 = "prettier"; + stop_after_first = true; + }; nix = [ "nixfmt" ]; - php = [ - "pint" - "php_cs_fixer" - ]; + php = { + __unkeyed-1 = "pint"; + __unkeyed-2 = "php_cs_fixer"; + stop_after_first = true; + }; python = [ - "black" - "isort" + "ruff_format" + ]; + ruby = [ + "rubocop" ]; rust = [ "rustfmt" @@ -116,45 +121,28 @@ sql = [ "sqruff" ]; - typescript = [ - "eslint_d" - "prettierd" - "prettier" - ]; - typescriptreact = [ - "eslint_d" - "prettierd" - "prettier" - ]; - yaml = [ - "eslint_d" - "prettierd" - "prettier" - ]; - }; - - formatters = with pkgs; { - isort = { - command = lib.getExe isort; - }; - jq = { - command = lib.getExe jq; - }; - nixfmt = { - command = lib.getExe nixfmt; + typescript = { + __unkeyed-1 = "eslint_d"; + __unkeyed-2 = "prettierd"; + __unkeyed-3 = "prettier"; + stop_after_first = true; }; - shellcheck = { - command = lib.getExe shellcheck; + typescriptreact = { + __unkeyed-1 = "eslint_d"; + __unkeyed-2 = "prettierd"; + __unkeyed-3 = "prettier"; + stop_after_first = true; }; - shellharden = { - command = lib.getExe shellharden; - }; - shfmt = { - command = lib.getExe shfmt; - }; - stylua = { - command = lib.getExe stylua; + yaml = { + __unkeyed-1 = "eslint_d"; + __unkeyed-2 = "prettierd"; + __unkeyed-3 = "prettierd"; + __unkeyed-4 = "yq"; + stop_after_first = true; }; + }; + + formatters = with pkgs; { squeeze_blanks = { command = lib.getExe' pkgs.coreutils "cat"; }; diff --git a/modules/nvim/lsp.nix b/modules/nvim/lsp.nix index 8d9fe3b..0b8c9a1 100644 --- a/modules/nvim/lsp.nix +++ b/modules/nvim/lsp.nix @@ -10,6 +10,7 @@ inlayHints = true; servers = { bashls.enable = true; + cssls.enable = true; emmet_ls.enable = true; eslint.enable = true; helm_ls.enable = true; @@ -25,6 +26,7 @@ pest_ls.enable = true; pyright.enable = true; ruby_lsp.enable = true; + ruff.enable = true; # python rust_analyzer = { enable = true; installCargo = false; diff --git a/modules/nvim/nvim-lint.nix b/modules/nvim/nvim-lint.nix index a6de246..b5fbc7a 100644 --- a/modules/nvim/nvim-lint.nix +++ b/modules/nvim/nvim-lint.nix @@ -8,12 +8,12 @@ lint = { enable = true; lintersByFt = { + bash = [ + "shellcheck" + ]; dockerfile = [ "hadolint" ]; - json = [ - "jsonlint" - ]; markdown = [ "markdownlint-cli2" "vale" @@ -21,20 +21,17 @@ php = [ "phpstan" ]; - rst = [ - "vale" - ]; ruby = [ - "ruby" + "rubocop" ]; - rust = [ - "rustfmt" + sh = [ + "shellcheck" ]; text = [ "vale" ]; yaml = [ - "yq" + "yamllint" ]; }; }; From dfd2b516be6b82b1f66ef8955c26330fcfba984b Mon Sep 17 00:00:00 2001 From: Jordy Schreuders <3071062+99linesofcode@users.noreply.github.com> Date: Sun, 15 Mar 2026 21:26:01 +0100 Subject: [PATCH 36/36] feat(nvim): add dotenv filetype and make sure .env files are detected as much --- modules/nvim.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/nvim.nix b/modules/nvim.nix index 488af12..5121f5b 100644 --- a/modules/nvim.nix +++ b/modules/nvim.nix @@ -29,6 +29,15 @@ with lib; enable = true; defaultEditor = true; extraConfigLuaPre = "if not vim.g.vscode then"; + extraConfigLua = # lua + '' + vim.filetype.add({ + pattern = { + ["%.env%..+"] = "dotenv"; + ["%.env"] = "dotenv"; + } + }) + ''; extraConfigLuaPost = "end"; viAlias = true; vimAlias = true;