From 70e3e797096039fdb6331e7f90ddfc869a4f273a Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Fri, 12 Jun 2026 21:05:41 +1000 Subject: [PATCH 01/50] begin rewriting options --- flake.nix | 6 +- modules/nixos/default.nix | 9 +- modules/nixos/home/programs/cli/default.nix | 4 + .../home/programs/{tui => cli}/lazygit.nix | 0 .../home/programs/{tui => cli}/ncmpcpp.nix | 0 .../nixos/home/programs/{tui => cli}/yazi.nix | 0 modules/nixos/home/programs/default.nix | 1 - modules/nixos/home/programs/tui/default.nix | 24 --- modules/nixos/services/printing.nix | 1 + modules/nixos/services/privacy.nix | 14 +- .../home/programs/{tui => cli}/btop.nix | 0 modules/shared/home/programs/cli/default.nix | 3 + .../home/programs/{tui => cli}/gitui.nix | 0 .../programs/{tui => cli}/helix/default.nix | 0 .../programs/{tui => cli}/helix/dprint.nix | 0 .../programs/{tui => cli}/helix/moxide.toml | 0 .../programs/{tui => cli}/helix/prettier.nix | 0 modules/shared/home/programs/default.nix | 1 - modules/shared/home/programs/tui/default.nix | 7 - modules/shared/options/default.nix | 198 +++++++++--------- modules/shared/options/profiles.nix | 83 ++++++++ pkgs/default.nix | 9 +- pkgs/docs.nix | 61 ++++++ 23 files changed, 283 insertions(+), 138 deletions(-) rename modules/nixos/home/programs/{tui => cli}/lazygit.nix (100%) rename modules/nixos/home/programs/{tui => cli}/ncmpcpp.nix (100%) rename modules/nixos/home/programs/{tui => cli}/yazi.nix (100%) delete mode 100644 modules/nixos/home/programs/tui/default.nix rename modules/shared/home/programs/{tui => cli}/btop.nix (100%) rename modules/shared/home/programs/{tui => cli}/gitui.nix (100%) rename modules/shared/home/programs/{tui => cli}/helix/default.nix (100%) rename modules/shared/home/programs/{tui => cli}/helix/dprint.nix (100%) rename modules/shared/home/programs/{tui => cli}/helix/moxide.toml (100%) rename modules/shared/home/programs/{tui => cli}/helix/prettier.nix (100%) delete mode 100644 modules/shared/home/programs/tui/default.nix create mode 100644 modules/shared/options/profiles.nix create mode 100644 pkgs/docs.nix diff --git a/flake.nix b/flake.nix index 92aaa5a..e121f39 100644 --- a/flake.nix +++ b/flake.nix @@ -45,7 +45,11 @@ inherit self; }; - packages = forAllSystems (system: import ./pkgs nixpkgs.legacyPackages.${system}); + packages = forAllSystems (system: + import ./pkgs { + pkgs = nixpkgs.legacyPackages.${system}; + inherit inputs self; + }); formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra); }; diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index 1fd4591..d7a52af 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -5,6 +5,7 @@ ... }: let inherit (config.settings.system) user; + inherit (config.settings.programs.terminal.shell) userShell; keys = [ "${self}/keys/anemone.pub" @@ -28,7 +29,13 @@ in { inherit (user) home; isNormalUser = true; extraGroups = ["networkmanager" "wheel" "dialout"]; - shell = pkgs.zsh; + shell = + if userShell == "zsh" + then pkgs.zsh + else if userShell == "nushell" + then pkgs.nushell + else pkgs.bash; + initialHashedPassword = ""; openssh.authorizedKeys.keyFiles = keys; }; diff --git a/modules/nixos/home/programs/cli/default.nix b/modules/nixos/home/programs/cli/default.nix index 38a268b..a92d051 100644 --- a/modules/nixos/home/programs/cli/default.nix +++ b/modules/nixos/home/programs/cli/default.nix @@ -10,7 +10,10 @@ in { imports = [ ./hyfetch.nix + ./ncmpcpp.nix ./nushell.nix + ./yazi.nix + # ./lazygit.nix # dev ]; config = lib.mkIf cfg.cli.enable { home.packages = with pkgs; @@ -21,6 +24,7 @@ in { ddcutil grim killall + peaclock playerctl slurp wl-clipboard diff --git a/modules/nixos/home/programs/tui/lazygit.nix b/modules/nixos/home/programs/cli/lazygit.nix similarity index 100% rename from modules/nixos/home/programs/tui/lazygit.nix rename to modules/nixos/home/programs/cli/lazygit.nix diff --git a/modules/nixos/home/programs/tui/ncmpcpp.nix b/modules/nixos/home/programs/cli/ncmpcpp.nix similarity index 100% rename from modules/nixos/home/programs/tui/ncmpcpp.nix rename to modules/nixos/home/programs/cli/ncmpcpp.nix diff --git a/modules/nixos/home/programs/tui/yazi.nix b/modules/nixos/home/programs/cli/yazi.nix similarity index 100% rename from modules/nixos/home/programs/tui/yazi.nix rename to modules/nixos/home/programs/cli/yazi.nix diff --git a/modules/nixos/home/programs/default.nix b/modules/nixos/home/programs/default.nix index 8b2c7a5..e836b86 100644 --- a/modules/nixos/home/programs/default.nix +++ b/modules/nixos/home/programs/default.nix @@ -2,6 +2,5 @@ imports = [ ./cli ./gui - ./tui ]; } diff --git a/modules/nixos/home/programs/tui/default.nix b/modules/nixos/home/programs/tui/default.nix deleted file mode 100644 index 380c08b..0000000 --- a/modules/nixos/home/programs/tui/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - pkgs, - osConfig, - lib, - ... -}: let - inherit (lib) optionals concatLists; - cfg = osConfig.settings.programs; -in { - imports = [ - # ./lazygit.nix # dev - ./ncmpcpp.nix - ./yazi.nix - ]; - - config = lib.mkIf cfg.tui.enable { - home.packages = with pkgs; - concatLists [ - (optionals cfg.categories.tools.enable [ - peaclock - ]) - ]; - }; -} diff --git a/modules/nixos/services/printing.nix b/modules/nixos/services/printing.nix index 7c875e6..8fc1b88 100644 --- a/modules/nixos/services/printing.nix +++ b/modules/nixos/services/printing.nix @@ -23,6 +23,7 @@ in { openFirewall = true; }; + # TODO enable this with services.printing.profiles.enable hardware.printers = { ensurePrinters = [ { diff --git a/modules/nixos/services/privacy.nix b/modules/nixos/services/privacy.nix index 841dba5..9365ec6 100644 --- a/modules/nixos/services/privacy.nix +++ b/modules/nixos/services/privacy.nix @@ -3,14 +3,14 @@ lib, ... }: let - cfg = config.settings.system.services.privacy; + cfg = config.settings.system.services.networking.tor; in { config = lib.mkIf cfg.enable { - # services.tor = { - # enable = true; - # client.enable = true; - # client.dns.enable = true; - # torsocks.enable = true; - # }; + services.tor = { + enable = true; + client.enable = true; + client.dns.enable = true; + torsocks.enable = true; + }; }; } diff --git a/modules/shared/home/programs/tui/btop.nix b/modules/shared/home/programs/cli/btop.nix similarity index 100% rename from modules/shared/home/programs/tui/btop.nix rename to modules/shared/home/programs/cli/btop.nix diff --git a/modules/shared/home/programs/cli/default.nix b/modules/shared/home/programs/cli/default.nix index aeb4a48..b2f825a 100644 --- a/modules/shared/home/programs/cli/default.nix +++ b/modules/shared/home/programs/cli/default.nix @@ -12,11 +12,14 @@ in { ./atuin.nix ./bat.nix ./beets.nix + ./btop.nix ./bun.nix ./direnv.nix ./eza.nix ./fzf.nix ./git.nix + ./gitui.nix + ./helix ./ripgrep.nix ./starship.nix ./zoxide.nix diff --git a/modules/shared/home/programs/tui/gitui.nix b/modules/shared/home/programs/cli/gitui.nix similarity index 100% rename from modules/shared/home/programs/tui/gitui.nix rename to modules/shared/home/programs/cli/gitui.nix diff --git a/modules/shared/home/programs/tui/helix/default.nix b/modules/shared/home/programs/cli/helix/default.nix similarity index 100% rename from modules/shared/home/programs/tui/helix/default.nix rename to modules/shared/home/programs/cli/helix/default.nix diff --git a/modules/shared/home/programs/tui/helix/dprint.nix b/modules/shared/home/programs/cli/helix/dprint.nix similarity index 100% rename from modules/shared/home/programs/tui/helix/dprint.nix rename to modules/shared/home/programs/cli/helix/dprint.nix diff --git a/modules/shared/home/programs/tui/helix/moxide.toml b/modules/shared/home/programs/cli/helix/moxide.toml similarity index 100% rename from modules/shared/home/programs/tui/helix/moxide.toml rename to modules/shared/home/programs/cli/helix/moxide.toml diff --git a/modules/shared/home/programs/tui/helix/prettier.nix b/modules/shared/home/programs/cli/helix/prettier.nix similarity index 100% rename from modules/shared/home/programs/tui/helix/prettier.nix rename to modules/shared/home/programs/cli/helix/prettier.nix diff --git a/modules/shared/home/programs/default.nix b/modules/shared/home/programs/default.nix index 8b2c7a5..e836b86 100644 --- a/modules/shared/home/programs/default.nix +++ b/modules/shared/home/programs/default.nix @@ -2,6 +2,5 @@ imports = [ ./cli ./gui - ./tui ]; } diff --git a/modules/shared/home/programs/tui/default.nix b/modules/shared/home/programs/tui/default.nix deleted file mode 100644 index 80f86ad..0000000 --- a/modules/shared/home/programs/tui/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - imports = [ - ./helix - ./btop.nix - ./gitui.nix - ]; -} diff --git a/modules/shared/options/default.nix b/modules/shared/options/default.nix index 7abbaeb..601fe99 100644 --- a/modules/shared/options/default.nix +++ b/modules/shared/options/default.nix @@ -5,70 +5,68 @@ }: let inherit (lib) mkEnableOption mkOption types; - cfg = config.settings; + cfg = config.nest; in { - options.settings = { + options.nest = { + # TODO: use different namespace + profile = mkOption { + type = types.enum ["desktop" "server" "minimal"]; + default = "minimal"; # TODO minimal config is default + description = "The system profile preset to apply."; + }; + programs = { - enable = - mkEnableOption "Enable all programs" - // {default = true;}; + # no platform namespaces for programs e.g. cli.darwin + # internal implementation will ignore programs that + # doesn't + enable = mkEnableOption "programs"; + cli.enable = mkEnableOption "CLI programs"; + gui.enable = mkEnableOption "GUI programs"; + + devtools = { + enable = mkEnableOption "developer tools"; - cli.enable = - mkEnableOption "Enable CLI programs" - // {default = cfg.programs.enable;}; - tui.enable = - mkEnableOption "Enable TUI programs" - // {default = cfg.programs.enable;}; - gui.enable = - mkEnableOption "Enable GUI programs" - // {default = cfg.desktop.enable;}; + haskell.enable = mkEnableOption "haskell tooling"; + nix.enable = mkEnableOption "nix tooling"; + openscad.enable = mkEnableOption "openscad tooling"; + python.enable = mkEnableOption "python tooling"; + rust.enable = mkEnableOption "rust tooling"; + typst.enable = mkEnableOption "typst tooling"; + zig.enable = mkEnableOption "zig tooling"; - categories = { - enable = - mkEnableOption "Enable all program categories" - // {default = cfg.programs.enable;}; - core.enable = - mkEnableOption "Enable core programs" - // {default = cfg.programs.categories.enable;}; - design.enable = - mkEnableOption "Enable design programs" - // {default = cfg.programs.categories.enable;}; - dev.enable = - mkEnableOption "Enable development programs" - // {default = cfg.programs.categories.enable;}; - edu.enable = - mkEnableOption "Enable educational programs" - // {default = cfg.programs.categories.enable;}; - fs.enable = - mkEnableOption "Enable file management programs" - // {default = cfg.programs.categories.enable;}; - fun.enable = - mkEnableOption "Enable fun programs" - // {default = cfg.programs.categories.enable;}; - gaming.enable = - mkEnableOption "Enable gaming programs" - // {default = cfg.programs.categories.enable;}; - mail.enable = - mkEnableOption "Enable email programs" - // {default = cfg.programs.categories.enable;}; - media.enable = - mkEnableOption "Enable multimedia programs" - // {default = cfg.programs.categories.enable;}; - music.enable = - mkEnableOption "Enable music programs" - // {default = cfg.programs.categories.enable;}; - printing.enable = - mkEnableOption "Enable 3D printing programs" - // {default = cfg.programs.categories.enable;}; - privacy.enable = - mkEnableOption "Enable privacy programs" - // {default = cfg.programs.categories.enable;}; - tools.enable = - mkEnableOption "Enable QOL programs" - // {default = cfg.programs.categories.enable;}; - web.enable = - mkEnableOption "Enable browsers" - // {default = cfg.programs.categories.enable;}; + web = { + enable = mkEnableOption "web tooling"; + pnpm.enable = lib.mkEnableOption "pnpm package manager"; + bun.enable = lib.mkEnableOption "bun runtime and toolchain"; + }; + }; + + games.enable = mkEnableOption "games"; + media.enable = mkEnableOption "media and creative tools"; + productivity.enable = mkEnableOption "productivity programs"; + social.enable = mkEnableOption "social programs"; + browsers = { + enable = mkEnableOption "web browsers"; + helium.enable = mkEnableOption "helium browser"; # TODO not in nixpkgs yet https://github.com/NixOS/nixpkgs/pull/498572 + firefox.enable = mkEnableOption "firefox browser"; + floorp.enable = mkEnableOption "floorp browser"; + }; + + terminal = { + emulator = { + ghostty.enable = mkEnableOption "ghostty"; + alacritty.enable = mkEnableOption "alacritty"; + kitty.enable = mkEnableOption "kitty"; + }; + shell = { + zsh.enable = mkEnableOption "zsh"; + nushell.enable = mkEnableOption "nushell"; + userShell = lib.mkOption { + type = lib.types.enum ["zsh" "nushell" "bash"]; + default = "zsh"; + description = "The primary interactive shell the user account."; + }; + }; }; }; @@ -98,48 +96,58 @@ in { hostName = mkOption { type = types.str; - description = "The hostname of your system"; - default = "nixos"; + description = "The hostname of your system."; }; services = { - enable = - mkEnableOption "Enable system services" - // {default = true;}; - bluetooth.enable = - mkEnableOption "Enable Bluetooth" - // {default = cfg.system.services.enable;}; - sound.enable = - mkEnableOption "Enable sound" - // {default = cfg.system.services.enable;}; - sync.enable = - mkEnableOption "Enable syncthing" - // {default = false;}; - printing.enable = - mkEnableOption "Enable printing" - // {default = cfg.system.services.enable;}; - networking.enable = - mkEnableOption "Enable networking" - // {default = cfg.system.services.enable;}; - security.enable = - mkEnableOption "Enable security" - // {default = cfg.system.services.enable;}; - backups.enable = - mkEnableOption "Enable restic" - // {default = false;}; + enable = mkEnableOption "core system services"; + backups = { + # TODO: move this to shared/ + enable = mkEnableOption "backups via restic"; + }; + bluetooth.enable = mkEnableOption "Bluetooth"; + # not available on darwin + networking = { + enable = mkEnableOption "networking" // {default = cfg.system.services.enable;}; + profiles.enable = mkEnableOption "NetworkManager profiles" // {default = true;}; # TODO + tailscale.enable = mkEnableOption "tailscale"; # TODO + tor.enable = mkEnableOption "TOR network"; + }; + # not available on darwin + printing = { + enable = mkEnableOption "printing"; + profiles = mkEnableOption "printing profiles" // {default = true;}; # TODO + }; + # not available on darwin + sound.enable = mkEnableOption "sound"; + ssh.enable = mkEnableOption "SSH server"; + sync.enable = mkEnableOption "syncthing"; }; }; desktop = { - enable = - mkEnableOption "Enable desktop environment" - // {default = true;}; - niri.enable = - mkEnableOption "Enable Niri twm" - // {default = cfg.desktop.enable;}; - hyprland.enable = - mkEnableOption "Enable Hyprland and its ecosystem" - // {default = cfg.desktop.enable;}; + enable = mkEnableOption "desktop environment"; + niri.enable = mkEnableOption "Niri"; + hyprland.enable = mkEnableOption "Hyprland"; + }; + + selfhost = { + enable = mkEnableOption "selfhosted applications"; + # caddy.enable = mkEnableOption "caddy"; not needed with cloudflared + kanidm.enable = mkEnableOption "kanidm"; + cloudflared.enable = mkEnableOption "cloudflared"; + pihole.enable = mkEnableOption "pihole"; # TODO or coredns or adguard home for "split horizon DNS" maybe? + + atuin.enable = mkEnableOption "atuin"; + pds.enable = mkEnableOption "pds"; + tangled.knot.enable = mkEnableOption "tangled knot"; + glance.enable = mkEnableOption "tangled knot"; + printing3d = { + enable = mkEnableOption "3D printing"; # TODO + klipper.enable = mkEnableOption "klipper"; + mainsail.enable = mkEnableOption "mainsail"; + }; + navidrome.enable = mkEnableOption "navidrome"; }; }; } diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix new file mode 100644 index 0000000..980e27f --- /dev/null +++ b/modules/shared/options/profiles.nix @@ -0,0 +1,83 @@ +{ + lib, + config, + ... +}: let + cfg = config.nest; + + profiles = { + # defaults from options.nix + minimal = { + system.services = { + enable = lib.mkDefault true; + networking.enable = lib.mkDefault true; + }; + }; + + desktop = { + programs = { + enable = lib.mkDefault true; + # we are already grouping for cli or gui which i prefer over grouping + # by categories as that is already the file tree and cant have both + # as the options are hierarchical + cli.enable = lib.mkDefault true; + gui.enable = lib.mkDefault true; + + games.enable = true; + media.enable = true; + productivity.enable = true; + social.enable = true; + browsers = { + enable = true; + helium.enable = true; + firefox.enable = true; + }; + + terminal = { + emulator.ghostty.enable = lib.mkDefault true; + shell = { + zsh.enable = true; + userShell = "zsh"; + }; + }; + }; + system.services = { + enable = lib.mkDefault true; + backups.enable = lib.mkDefault true; + bluetooth.enable = lib.mkDefault true; + networking.enable = lib.mkDefault true; + printing.enable = lib.mkDefault true; + sound.enable = lib.mkDefault true; + }; + desktop = { + enable = lib.mkDefault true; + niri.enable = lib.mkDefault true; + }; + }; + + server = { + programs = { + enable = lib.mkDefault true; + cli.enable = lib.mkDefault true; + + terminal = { + enable = lib.mkDefault true; + emulator.ghostty.enable = lib.mkDefault true; + shell = { + zsh.enable = true; + userShell = "zsh"; + }; + }; + }; + + system.services = { + enable = lib.mkDefault true; + networking.enable = lib.mkDefault true; + ssh.enable = lib.mkDefault true; + # TODO backups and config for them + }; + }; + }; +in { + config.settings = profiles.${cfg.profile} or {}; +} diff --git a/pkgs/default.nix b/pkgs/default.nix index f7784d0..c03dae4 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,4 +1,11 @@ -pkgs: { +{ + pkgs, + inputs, + self, + ... +}: { discord-rpc-lsp = pkgs.callPackage ./discord-rpc-lsp.nix {}; glide-wm = pkgs.callPackage ./glide-wm.nix {}; + + docs = pkgs.callPackage ./docs.nix {inherit inputs self;}; } diff --git a/pkgs/docs.nix b/pkgs/docs.nix new file mode 100644 index 0000000..ef5ce91 --- /dev/null +++ b/pkgs/docs.nix @@ -0,0 +1,61 @@ +{ + lib, + pkgs, + inputs, + self ? inputs.self, + nixosOptionsDoc, + runCommand, +}: let + inherit (lib.attrsets) filterAttrs; + inherit (lib.modules) evalModules; + inherit (lib.strings) removePrefix; + + gitHubDeclaration = user: repo: subpath: { + url = "https://github.com/${user}/${repo}/blob/main/${subpath}"; + name = subpath; + }; + + eval = evalModules { + modules = [ + (self + /modules/shared/options/default.nix) + { + _module = { + check = false; + args = {inherit pkgs;}; + }; + } + ]; + + specialArgs = { + inherit self inputs; + }; + }; + + doc = nixosOptionsDoc { + options = filterAttrs (n: _: n != "_module") eval.options.settings; + documentType = "none"; + transformOptions = opt: + opt + // { + declarations = + map ( + decl: + if lib.hasPrefix (toString self) (toString decl) + then + gitHubDeclaration "42willow" "flake" ( + removePrefix "/" (removePrefix (toString self) (toString decl)) + ) + else decl + ) + opt.declarations; + }; + }; +in + runCommand "flake-options-docs" {} '' + mkdir -p $out + cat > $out/options.md << 'EOF' + # Flake Configuration Options + + EOF + cat ${doc.optionsCommonMark} >> $out/options.md + '' From 3cb4da84e34e207489c36e4edc3d10157fa184c5 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Fri, 12 Jun 2026 22:24:42 +1000 Subject: [PATCH 02/50] move some stuff around --- hosts/anemone/default.nix | 4 +- modules/shared/options/default.nix | 147 +++++++++++++++------------- modules/shared/options/profiles.nix | 26 ++--- 3 files changed, 95 insertions(+), 82 deletions(-) diff --git a/hosts/anemone/default.nix b/hosts/anemone/default.nix index 0874283..1fb0b6b 100644 --- a/hosts/anemone/default.nix +++ b/hosts/anemone/default.nix @@ -19,7 +19,9 @@ in { disabledModules = ["profiles/base.nix"]; - settings = { + nest = { + profile = "minimal"; + programs = { enable = false; cli.enable = true; diff --git a/modules/shared/options/default.nix b/modules/shared/options/default.nix index 601fe99..14b1c10 100644 --- a/modules/shared/options/default.nix +++ b/modules/shared/options/default.nix @@ -8,45 +8,28 @@ cfg = config.nest; in { options.nest = { - # TODO: use different namespace profile = mkOption { - type = types.enum ["desktop" "server" "minimal"]; - default = "minimal"; # TODO minimal config is default - description = "The system profile preset to apply."; + type = types.nullOr (types.enum ["desktop" "server"]); + default = null; + description = "The system profile preset to apply. If null, the system falls back to the minimal defaults."; }; programs = { - # no platform namespaces for programs e.g. cli.darwin - # internal implementation will ignore programs that - # doesn't - enable = mkEnableOption "programs"; - cli.enable = mkEnableOption "CLI programs"; - gui.enable = mkEnableOption "GUI programs"; - - devtools = { - enable = mkEnableOption "developer tools"; - - haskell.enable = mkEnableOption "haskell tooling"; - nix.enable = mkEnableOption "nix tooling"; - openscad.enable = mkEnableOption "openscad tooling"; - python.enable = mkEnableOption "python tooling"; - rust.enable = mkEnableOption "rust tooling"; - typst.enable = mkEnableOption "typst tooling"; - zig.enable = mkEnableOption "zig tooling"; - - web = { - enable = mkEnableOption "web tooling"; - pnpm.enable = lib.mkEnableOption "pnpm package manager"; - bun.enable = lib.mkEnableOption "bun runtime and toolchain"; - }; - }; + enable = mkEnableOption "programs" // {default = true;}; + cli = mkEnableOption "CLI programs" // {default = true;}; + gui = mkEnableOption "GUI programs"; games.enable = mkEnableOption "games"; media.enable = mkEnableOption "media and creative tools"; productivity.enable = mkEnableOption "productivity programs"; social.enable = mkEnableOption "social programs"; + + utilities = { + git.enable = mkEnableOption "git version control" // {default = true;}; + btop.enable = mkEnableOption "btop resource monitor"; + }; + browsers = { - enable = mkEnableOption "web browsers"; helium.enable = mkEnableOption "helium browser"; # TODO not in nixpkgs yet https://github.com/NixOS/nixpkgs/pull/498572 firefox.enable = mkEnableOption "firefox browser"; floorp.enable = mkEnableOption "floorp browser"; @@ -59,6 +42,8 @@ in { kitty.enable = mkEnableOption "kitty"; }; shell = { + atuin.enable = mkEnableOption "atuin shell history"; + starship.enable = mkEnableOption "starship prompt" // {default = cfg.programs.terminal.tools.enable;}; zsh.enable = mkEnableOption "zsh"; nushell.enable = mkEnableOption "nushell"; userShell = lib.mkOption { @@ -67,6 +52,30 @@ in { description = "The primary interactive shell the user account."; }; }; + tools = { + enable = mkEnableOption "modern terminal utilities"; + bat.enable = mkEnableOption "bat" // {default = cfg.programs.terminal.tools.enable;}; + eza.enable = mkEnableOption "eza" // {default = cfg.programs.terminal.tools.enable;}; + fzf.enable = mkEnableOption "fzf" // {default = cfg.programs.terminal.tools.enable;}; + zoxide.enable = mkEnableOption "zoxide" // {default = cfg.programs.terminal.tools.enable;}; + }; + }; + + devtools = { + enable = mkEnableOption "developer tools"; + + haskell.enable = mkEnableOption "haskell tooling"; + nix.enable = mkEnableOption "nix tooling"; + openscad.enable = mkEnableOption "openscad tooling"; + python.enable = mkEnableOption "python tooling"; + rust.enable = mkEnableOption "rust tooling"; + typst.enable = mkEnableOption "typst tooling"; + zig.enable = mkEnableOption "zig tooling"; + + web = { + pnpm.enable = lib.mkEnableOption "pnpm package manager"; + bun.enable = lib.mkEnableOption "bun runtime and toolchain"; + }; }; }; @@ -98,31 +107,6 @@ in { type = types.str; description = "The hostname of your system."; }; - - services = { - enable = mkEnableOption "core system services"; - backups = { - # TODO: move this to shared/ - enable = mkEnableOption "backups via restic"; - }; - bluetooth.enable = mkEnableOption "Bluetooth"; - # not available on darwin - networking = { - enable = mkEnableOption "networking" // {default = cfg.system.services.enable;}; - profiles.enable = mkEnableOption "NetworkManager profiles" // {default = true;}; # TODO - tailscale.enable = mkEnableOption "tailscale"; # TODO - tor.enable = mkEnableOption "TOR network"; - }; - # not available on darwin - printing = { - enable = mkEnableOption "printing"; - profiles = mkEnableOption "printing profiles" // {default = true;}; # TODO - }; - # not available on darwin - sound.enable = mkEnableOption "sound"; - ssh.enable = mkEnableOption "SSH server"; - sync.enable = mkEnableOption "syncthing"; - }; }; desktop = { @@ -131,23 +115,48 @@ in { hyprland.enable = mkEnableOption "Hyprland"; }; - selfhost = { - enable = mkEnableOption "selfhosted applications"; - # caddy.enable = mkEnableOption "caddy"; not needed with cloudflared - kanidm.enable = mkEnableOption "kanidm"; - cloudflared.enable = mkEnableOption "cloudflared"; - pihole.enable = mkEnableOption "pihole"; # TODO or coredns or adguard home for "split horizon DNS" maybe? + services = { + enable = mkEnableOption "core system services" // {default = true;}; + backups = { + # TODO: move this to shared/ + enable = mkEnableOption "backups via restic"; + }; + bluetooth.enable = mkEnableOption "Bluetooth"; + # not available on darwin + networking = { + enable = mkEnableOption "networking" // {default = cfg.system.services.enable;}; + profiles.enable = mkEnableOption "NetworkManager profiles" // {default = true;}; + tailscale.enable = mkEnableOption "tailscale"; + tor.enable = mkEnableOption "TOR network"; + }; + # not available on darwin + printing = { + enable = mkEnableOption "printing"; + profiles = mkEnableOption "printing profiles" // {default = true;}; + }; + # not available on darwin + sound.enable = mkEnableOption "sound"; + ssh.enable = mkEnableOption "SSH server"; + sync.enable = mkEnableOption "syncthing"; + + selfhost = { + enable = mkEnableOption "selfhosting services"; + # caddy.enable = mkEnableOption "caddy"; not needed with cloudflared + kanidm.enable = mkEnableOption "kanidm"; + cloudflared.enable = mkEnableOption "cloudflared"; + pihole.enable = mkEnableOption "pihole"; # TODO or coredns or adguard home for "split horizon DNS" maybe? - atuin.enable = mkEnableOption "atuin"; - pds.enable = mkEnableOption "pds"; - tangled.knot.enable = mkEnableOption "tangled knot"; - glance.enable = mkEnableOption "tangled knot"; - printing3d = { - enable = mkEnableOption "3D printing"; # TODO - klipper.enable = mkEnableOption "klipper"; - mainsail.enable = mkEnableOption "mainsail"; + atuin.enable = mkEnableOption "atuin"; + pds.enable = mkEnableOption "pds"; + tangled.knot.enable = mkEnableOption "tangled knot"; + glance.enable = mkEnableOption "tangled knot"; + printing3d = { + enable = mkEnableOption "3D printing"; # TODO + klipper.enable = mkEnableOption "klipper"; + mainsail.enable = mkEnableOption "mainsail"; + }; + navidrome.enable = mkEnableOption "navidrome"; }; - navidrome.enable = mkEnableOption "navidrome"; }; }; } diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index 980e27f..aefc686 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -8,6 +8,10 @@ profiles = { # defaults from options.nix minimal = { + programs = { + enable = lib.mkDefault true; + cli = lib.mkDefault true; + }; system.services = { enable = lib.mkDefault true; networking.enable = lib.mkDefault true; @@ -23,22 +27,22 @@ cli.enable = lib.mkDefault true; gui.enable = lib.mkDefault true; - games.enable = true; - media.enable = true; - productivity.enable = true; - social.enable = true; + games.enable = lib.mkDefault true; + media.enable = lib.mkDefault true; + productivity.enable = lib.mkDefault true; + social.enable = lib.mkDefault true; browsers = { - enable = true; - helium.enable = true; - firefox.enable = true; + helium.enable = lib.mkDefault true; + firefox.enable = lib.mkDefault true; }; terminal = { emulator.ghostty.enable = lib.mkDefault true; shell = { - zsh.enable = true; + zsh.enable = lib.mkDefault true; userShell = "zsh"; }; + tools.enable = lib.mkDefault true; }; }; system.services = { @@ -58,13 +62,11 @@ server = { programs = { enable = lib.mkDefault true; - cli.enable = lib.mkDefault true; + cli = lib.mkDefault true; terminal = { - enable = lib.mkDefault true; - emulator.ghostty.enable = lib.mkDefault true; shell = { - zsh.enable = true; + zsh.enable = lib.mkDefault true; userShell = "zsh"; }; }; From f72edd7cb46979abf501160bbc3c4305361bc5e1 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Fri, 12 Jun 2026 22:30:39 +1000 Subject: [PATCH 03/50] modularise options --- modules/shared/options/default.nix | 167 ++-------------------------- modules/shared/options/desktop.nix | 9 ++ modules/shared/options/programs.nix | 73 ++++++++++++ modules/shared/options/services.nix | 52 +++++++++ modules/shared/options/system.nix | 43 +++++++ 5 files changed, 184 insertions(+), 160 deletions(-) create mode 100644 modules/shared/options/desktop.nix create mode 100644 modules/shared/options/programs.nix create mode 100644 modules/shared/options/services.nix create mode 100644 modules/shared/options/system.nix diff --git a/modules/shared/options/default.nix b/modules/shared/options/default.nix index 14b1c10..b3bf5f0 100644 --- a/modules/shared/options/default.nix +++ b/modules/shared/options/default.nix @@ -1,162 +1,9 @@ { - lib, - config, - ... -}: let - inherit (lib) mkEnableOption mkOption types; - - cfg = config.nest; -in { - options.nest = { - profile = mkOption { - type = types.nullOr (types.enum ["desktop" "server"]); - default = null; - description = "The system profile preset to apply. If null, the system falls back to the minimal defaults."; - }; - - programs = { - enable = mkEnableOption "programs" // {default = true;}; - cli = mkEnableOption "CLI programs" // {default = true;}; - gui = mkEnableOption "GUI programs"; - - games.enable = mkEnableOption "games"; - media.enable = mkEnableOption "media and creative tools"; - productivity.enable = mkEnableOption "productivity programs"; - social.enable = mkEnableOption "social programs"; - - utilities = { - git.enable = mkEnableOption "git version control" // {default = true;}; - btop.enable = mkEnableOption "btop resource monitor"; - }; - - browsers = { - helium.enable = mkEnableOption "helium browser"; # TODO not in nixpkgs yet https://github.com/NixOS/nixpkgs/pull/498572 - firefox.enable = mkEnableOption "firefox browser"; - floorp.enable = mkEnableOption "floorp browser"; - }; - - terminal = { - emulator = { - ghostty.enable = mkEnableOption "ghostty"; - alacritty.enable = mkEnableOption "alacritty"; - kitty.enable = mkEnableOption "kitty"; - }; - shell = { - atuin.enable = mkEnableOption "atuin shell history"; - starship.enable = mkEnableOption "starship prompt" // {default = cfg.programs.terminal.tools.enable;}; - zsh.enable = mkEnableOption "zsh"; - nushell.enable = mkEnableOption "nushell"; - userShell = lib.mkOption { - type = lib.types.enum ["zsh" "nushell" "bash"]; - default = "zsh"; - description = "The primary interactive shell the user account."; - }; - }; - tools = { - enable = mkEnableOption "modern terminal utilities"; - bat.enable = mkEnableOption "bat" // {default = cfg.programs.terminal.tools.enable;}; - eza.enable = mkEnableOption "eza" // {default = cfg.programs.terminal.tools.enable;}; - fzf.enable = mkEnableOption "fzf" // {default = cfg.programs.terminal.tools.enable;}; - zoxide.enable = mkEnableOption "zoxide" // {default = cfg.programs.terminal.tools.enable;}; - }; - }; - - devtools = { - enable = mkEnableOption "developer tools"; - - haskell.enable = mkEnableOption "haskell tooling"; - nix.enable = mkEnableOption "nix tooling"; - openscad.enable = mkEnableOption "openscad tooling"; - python.enable = mkEnableOption "python tooling"; - rust.enable = mkEnableOption "rust tooling"; - typst.enable = mkEnableOption "typst tooling"; - zig.enable = mkEnableOption "zig tooling"; - - web = { - pnpm.enable = lib.mkEnableOption "pnpm package manager"; - bun.enable = lib.mkEnableOption "bun runtime and toolchain"; - }; - }; - }; - - system = { - user = { - name = mkOption { - type = types.str; - description = "The username of the main user for your system"; - default = "willow"; - }; - home = mkOption { - type = types.path; - description = "The home directory of the main user for your system"; - default = "/home/${cfg.system.user.name}"; - }; - group = mkOption { - type = types.str; - description = "The group of the main user for your system"; - default = "users"; - }; - flakeDir = mkOption { - type = types.path; - description = "The directory of this flake, used for symlinks"; - default = "${cfg.system.user.home}/flake"; - }; - }; - - hostName = mkOption { - type = types.str; - description = "The hostname of your system."; - }; - }; - - desktop = { - enable = mkEnableOption "desktop environment"; - niri.enable = mkEnableOption "Niri"; - hyprland.enable = mkEnableOption "Hyprland"; - }; - - services = { - enable = mkEnableOption "core system services" // {default = true;}; - backups = { - # TODO: move this to shared/ - enable = mkEnableOption "backups via restic"; - }; - bluetooth.enable = mkEnableOption "Bluetooth"; - # not available on darwin - networking = { - enable = mkEnableOption "networking" // {default = cfg.system.services.enable;}; - profiles.enable = mkEnableOption "NetworkManager profiles" // {default = true;}; - tailscale.enable = mkEnableOption "tailscale"; - tor.enable = mkEnableOption "TOR network"; - }; - # not available on darwin - printing = { - enable = mkEnableOption "printing"; - profiles = mkEnableOption "printing profiles" // {default = true;}; - }; - # not available on darwin - sound.enable = mkEnableOption "sound"; - ssh.enable = mkEnableOption "SSH server"; - sync.enable = mkEnableOption "syncthing"; - - selfhost = { - enable = mkEnableOption "selfhosting services"; - # caddy.enable = mkEnableOption "caddy"; not needed with cloudflared - kanidm.enable = mkEnableOption "kanidm"; - cloudflared.enable = mkEnableOption "cloudflared"; - pihole.enable = mkEnableOption "pihole"; # TODO or coredns or adguard home for "split horizon DNS" maybe? - - atuin.enable = mkEnableOption "atuin"; - pds.enable = mkEnableOption "pds"; - tangled.knot.enable = mkEnableOption "tangled knot"; - glance.enable = mkEnableOption "tangled knot"; - printing3d = { - enable = mkEnableOption "3D printing"; # TODO - klipper.enable = mkEnableOption "klipper"; - mainsail.enable = mkEnableOption "mainsail"; - }; - navidrome.enable = mkEnableOption "navidrome"; - }; - }; - }; + imports = [ + ./desktop.nix + ./programs.nix + ./services.nix + ./system.nix + ]; + # TODO sort out profiles } diff --git a/modules/shared/options/desktop.nix b/modules/shared/options/desktop.nix new file mode 100644 index 0000000..8245da5 --- /dev/null +++ b/modules/shared/options/desktop.nix @@ -0,0 +1,9 @@ +{lib, ...}: let + inherit (lib) mkEnableOption; +in { + desktop = { + enable = mkEnableOption "desktop environment"; + niri.enable = mkEnableOption "Niri"; + hyprland.enable = mkEnableOption "Hyprland"; + }; +} diff --git a/modules/shared/options/programs.nix b/modules/shared/options/programs.nix new file mode 100644 index 0000000..6dc865c --- /dev/null +++ b/modules/shared/options/programs.nix @@ -0,0 +1,73 @@ +{ + lib, + config, + ... +}: let + inherit (lib) mkEnableOption; + cfg = config.nest; +in { + programs = { + enable = mkEnableOption "programs" // {default = true;}; + cli = mkEnableOption "CLI programs" // {default = true;}; + gui = mkEnableOption "GUI programs"; + + games.enable = mkEnableOption "games"; + media.enable = mkEnableOption "media and creative tools"; + productivity.enable = mkEnableOption "productivity programs"; + social.enable = mkEnableOption "social programs"; + + utilities = { + git.enable = mkEnableOption "git version control" // {default = true;}; + btop.enable = mkEnableOption "btop resource monitor"; + }; + + browsers = { + helium.enable = mkEnableOption "helium browser"; # TODO not in nixpkgs yet https://github.com/NixOS/nixpkgs/pull/498572 + firefox.enable = mkEnableOption "firefox browser"; + floorp.enable = mkEnableOption "floorp browser"; + }; + + terminal = { + emulator = { + ghostty.enable = mkEnableOption "ghostty"; + alacritty.enable = mkEnableOption "alacritty"; + kitty.enable = mkEnableOption "kitty"; + }; + shell = { + atuin.enable = mkEnableOption "atuin shell history"; + starship.enable = mkEnableOption "starship prompt" // {default = cfg.programs.terminal.tools.enable;}; + zsh.enable = mkEnableOption "zsh"; + nushell.enable = mkEnableOption "nushell"; + userShell = lib.mkOption { + type = lib.types.enum ["zsh" "nushell" "bash"]; + default = "zsh"; + description = "The primary interactive shell the user account."; + }; + }; + tools = { + enable = mkEnableOption "modern terminal utilities"; + bat.enable = mkEnableOption "bat" // {default = cfg.programs.terminal.tools.enable;}; + eza.enable = mkEnableOption "eza" // {default = cfg.programs.terminal.tools.enable;}; + fzf.enable = mkEnableOption "fzf" // {default = cfg.programs.terminal.tools.enable;}; + zoxide.enable = mkEnableOption "zoxide" // {default = cfg.programs.terminal.tools.enable;}; + }; + }; + + devtools = { + enable = mkEnableOption "developer tools"; + + haskell.enable = mkEnableOption "haskell tooling"; + nix.enable = mkEnableOption "nix tooling"; + openscad.enable = mkEnableOption "openscad tooling"; + python.enable = mkEnableOption "python tooling"; + rust.enable = mkEnableOption "rust tooling"; + typst.enable = mkEnableOption "typst tooling"; + zig.enable = mkEnableOption "zig tooling"; + + web = { + pnpm.enable = lib.mkEnableOption "pnpm package manager"; + bun.enable = lib.mkEnableOption "bun runtime and toolchain"; + }; + }; + }; +} diff --git a/modules/shared/options/services.nix b/modules/shared/options/services.nix new file mode 100644 index 0000000..fd2b75d --- /dev/null +++ b/modules/shared/options/services.nix @@ -0,0 +1,52 @@ +{ + lib, + config, + ... +}: let + inherit (lib) mkEnableOption; + cfg = config.nest; +in { + services = { + enable = mkEnableOption "core system services" // {default = true;}; + backups = { + # TODO: move this to shared/ + enable = mkEnableOption "backups via restic"; + }; + bluetooth.enable = mkEnableOption "Bluetooth"; + # not available on darwin + networking = { + enable = mkEnableOption "networking" // {default = cfg.system.services.enable;}; + profiles.enable = mkEnableOption "NetworkManager profiles" // {default = true;}; + tailscale.enable = mkEnableOption "tailscale"; + tor.enable = mkEnableOption "TOR network"; + }; + # not available on darwin + printing = { + enable = mkEnableOption "printing"; + profiles = mkEnableOption "printing profiles" // {default = true;}; + }; + # not available on darwin + sound.enable = mkEnableOption "sound"; + ssh.enable = mkEnableOption "SSH server"; + sync.enable = mkEnableOption "syncthing"; + + selfhost = { + enable = mkEnableOption "selfhosting services"; + # caddy.enable = mkEnableOption "caddy"; not needed with cloudflared + kanidm.enable = mkEnableOption "kanidm"; + cloudflared.enable = mkEnableOption "cloudflared"; + pihole.enable = mkEnableOption "pihole"; # TODO or coredns or adguard home for "split horizon DNS" maybe? + + atuin.enable = mkEnableOption "atuin"; + pds.enable = mkEnableOption "pds"; + tangled.knot.enable = mkEnableOption "tangled knot"; + glance.enable = mkEnableOption "tangled knot"; + printing3d = { + enable = mkEnableOption "3D printing"; # TODO + klipper.enable = mkEnableOption "klipper"; + mainsail.enable = mkEnableOption "mainsail"; + }; + navidrome.enable = mkEnableOption "navidrome"; + }; + }; +} diff --git a/modules/shared/options/system.nix b/modules/shared/options/system.nix new file mode 100644 index 0000000..d387c94 --- /dev/null +++ b/modules/shared/options/system.nix @@ -0,0 +1,43 @@ +{ + lib, + config, + ... +}: let + inherit (lib) mkOption types; + cfg = config.nest; +in { + options.nest = { + # TODO move out of here + profile = mkOption { + type = types.nullOr (types.enum ["desktop" "server"]); + default = null; + description = "The system profile preset to apply. If null, the system falls back to the minimal defaults."; + }; + + system = { + hostName = mkOption { + type = types.str; + description = "The hostname of your system."; + }; + + user = { + name = mkOption { + type = types.str; + default = "willow"; + }; + home = mkOption { + type = types.path; + default = "/home/${cfg.system.user.name}"; + }; + group = mkOption { + type = types.str; + default = "users"; + }; + flakeDir = mkOption { + type = types.path; + default = "${cfg.system.user.home}/flake"; + }; + }; + }; + }; +} From dc3e2ab324233d72ceaedb5acb40db54f9d1f376 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sat, 13 Jun 2026 20:19:04 +1000 Subject: [PATCH 04/50] more adjustments --- hosts/earthy/default.nix | 9 ++- hosts/starling/default.nix | 6 +- modules/darwin/default.nix | 2 +- modules/darwin/home/default.nix | 2 +- modules/darwin/home/glide-wm.nix | 2 +- modules/nixos/default.nix | 4 +- modules/nixos/desktop/hyprland.nix | 4 +- modules/nixos/desktop/niri.nix | 4 +- modules/nixos/home/default.nix | 2 +- .../nixos/home/desktop/hyprland/default.nix | 4 +- .../nixos/home/desktop/hyprland/hypridle.nix | 4 +- .../nixos/home/desktop/hyprland/hyprlock.nix | 4 +- .../nixos/home/desktop/hyprland/hyprpaper.nix | 4 +- modules/nixos/home/desktop/niri/binds.nix | 4 +- modules/nixos/home/desktop/niri/default.nix | 4 +- modules/nixos/home/programs/cli/default.nix | 34 ++++----- modules/nixos/home/programs/cli/hyfetch.nix | 5 +- modules/nixos/home/programs/cli/lazygit.nix | 7 +- modules/nixos/home/programs/cli/ncmpcpp.nix | 6 +- modules/nixos/home/programs/cli/nushell.nix | 8 +- modules/nixos/home/programs/cli/yazi.nix | 7 +- .../home/programs/gui/browsers/chromium.nix | 4 +- .../programs/gui/browsers/firefox/default.nix | 4 +- .../home/programs/gui/browsers/floorp.nix | 4 +- modules/nixos/home/programs/gui/default.nix | 75 ++++++++----------- modules/nixos/home/programs/gui/lightburn.nix | 5 +- .../nixos/home/programs/gui/obs-studio.nix | 6 +- .../nixos/home/programs/gui/quickshell.nix | 5 +- modules/nixos/home/programs/gui/spicetify.nix | 6 +- .../nixos/home/programs/gui/thunderbird.nix | 6 +- modules/nixos/home/programs/gui/tofi.nix | 5 +- .../home/programs/gui/waybar/default.nix | 5 +- .../nixos/home/programs/gui/zed/default.nix | 8 +- modules/nixos/home/services/mpd.nix | 2 +- modules/nixos/home/themes/gtk.nix | 2 +- modules/nixos/home/themes/qt.nix | 2 +- modules/nixos/home/themes/stylix.nix | 2 +- modules/nixos/programs/default.nix | 8 +- modules/nixos/programs/fonts.nix | 2 +- modules/nixos/services/default.nix | 5 +- modules/nixos/services/mpdscribble.nix | 2 +- modules/nixos/services/pipewire.nix | 2 +- modules/nixos/services/printing.nix | 5 +- modules/nixos/services/restic.nix | 3 +- .../nixos/services/{privacy.nix => tor.nix} | 2 +- modules/nixos/system/network.nix | 6 +- modules/nixos/themes/catppuccin.nix | 2 +- modules/shared/home/default.nix | 2 +- modules/shared/home/home.nix | 2 +- modules/shared/home/programs/cli/atuin.nix | 6 +- modules/shared/home/programs/cli/bat.nix | 7 +- modules/shared/home/programs/cli/beets.nix | 7 +- modules/shared/home/programs/cli/btop.nix | 5 +- modules/shared/home/programs/cli/bun.nix | 6 +- modules/shared/home/programs/cli/default.nix | 12 +-- modules/shared/home/programs/cli/direnv.nix | 6 +- modules/shared/home/programs/cli/eza.nix | 6 +- modules/shared/home/programs/cli/fzf.nix | 6 +- modules/shared/home/programs/cli/git.nix | 5 +- modules/shared/home/programs/cli/gitui.nix | 5 +- .../home/programs/cli/helix/default.nix | 5 +- modules/shared/home/programs/cli/ripgrep.nix | 6 +- modules/shared/home/programs/cli/starship.nix | 6 +- modules/shared/home/programs/cli/zoxide.nix | 6 +- modules/shared/home/programs/cli/zsh.nix | 5 +- .../home/programs/gui/terminals/alacritty.nix | 6 +- .../home/programs/gui/terminals/ghostty.nix | 6 +- .../home/programs/gui/terminals/kitty.nix | 6 +- modules/shared/home/programs/gui/zathura.nix | 6 +- modules/shared/home/scripts/spotdl.nix | 2 +- modules/shared/options/default.nix | 2 +- modules/shared/options/profiles.nix | 20 +---- modules/shared/options/programs.nix | 9 +-- modules/shared/options/services.nix | 6 +- 74 files changed, 217 insertions(+), 253 deletions(-) rename modules/nixos/services/{privacy.nix => tor.nix} (79%) diff --git a/hosts/earthy/default.nix b/hosts/earthy/default.nix index 4a41db8..7b60e23 100644 --- a/hosts/earthy/default.nix +++ b/hosts/earthy/default.nix @@ -11,10 +11,15 @@ in { "${self}/modules/nixos" ]; - settings = { + nest = { system = { hostName = "earthy"; - services.sync.enable = true; + }; + services = { + syncthing.enable = true; + selfhost = { + mpd.enable = true; + }; }; }; diff --git a/hosts/starling/default.nix b/hosts/starling/default.nix index 16c4d7b..7b26996 100644 --- a/hosts/starling/default.nix +++ b/hosts/starling/default.nix @@ -6,7 +6,7 @@ }: let inherit (inputs) self; - cfg = config.settings; + cfg = config.nest; in { imports = [ "${self}/modules/darwin" @@ -18,7 +18,7 @@ in { hostName = "starling"; }; - settings = { + nest = { system = { user = let home = "/Users/${cfg.system.user.name}"; @@ -28,7 +28,7 @@ in { group = "staff"; flakeDir = "${home}/Documents/git/flake"; }; - services.sync.enable = true; + services.syncthing.enable = true; }; }; diff --git a/modules/darwin/default.nix b/modules/darwin/default.nix index 44a9337..d256d37 100644 --- a/modules/darwin/default.nix +++ b/modules/darwin/default.nix @@ -1,5 +1,5 @@ {config, ...}: let - inherit (config.settings.system) user; + inherit (config.nest.system) user; in { imports = [ ../shared diff --git a/modules/darwin/home/default.nix b/modules/darwin/home/default.nix index d7faff5..118e647 100644 --- a/modules/darwin/home/default.nix +++ b/modules/darwin/home/default.nix @@ -1,5 +1,5 @@ {config, ...}: let - inherit (config.settings.system) user; + inherit (config.nest.system) user; in { home-manager.users.${user.name} = { imports = [ diff --git a/modules/darwin/home/glide-wm.nix b/modules/darwin/home/glide-wm.nix index c66b3da..76ddfd5 100644 --- a/modules/darwin/home/glide-wm.nix +++ b/modules/darwin/home/glide-wm.nix @@ -4,7 +4,7 @@ osConfig, ... }: let - inherit (osConfig.settings.system.user) flakeDir; + inherit (osConfig.nest.system.user) flakeDir; mkLink = config.lib.file.mkOutOfStoreSymlink; settingsFile = mkLink "${flakeDir}/modules/darwin/home/glide.toml"; in { diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index d7a52af..99ba987 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -4,8 +4,8 @@ config, ... }: let - inherit (config.settings.system) user; - inherit (config.settings.programs.terminal.shell) userShell; + inherit (config.nest.system) user; + inherit (config.nest.programs.terminal.shell) userShell; keys = [ "${self}/keys/anemone.pub" diff --git a/modules/nixos/desktop/hyprland.nix b/modules/nixos/desktop/hyprland.nix index 6ce538a..0f54094 100644 --- a/modules/nixos/desktop/hyprland.nix +++ b/modules/nixos/desktop/hyprland.nix @@ -3,9 +3,9 @@ config, ... }: let - cfg = config.settings.desktop.hyprland; + cfg = config.nest.desktop; in { - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.enable && cfg.hyprland.enable) { nix.settings = { substituters = ["https://hyprland.cachix.org"]; trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; diff --git a/modules/nixos/desktop/niri.nix b/modules/nixos/desktop/niri.nix index 7e6ed24..49f2b7d 100644 --- a/modules/nixos/desktop/niri.nix +++ b/modules/nixos/desktop/niri.nix @@ -5,11 +5,11 @@ lib, ... }: let - cfg = config.settings.desktop.niri; + cfg = config.nest.desktop; in { imports = [inputs.niri.nixosModules.niri]; - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.enable && cfg.niri.enable) { niri-flake.cache.enable = true; nixpkgs.overlays = [inputs.niri.overlays.niri]; diff --git a/modules/nixos/home/default.nix b/modules/nixos/home/default.nix index e7f6b1a..ca77332 100644 --- a/modules/nixos/home/default.nix +++ b/modules/nixos/home/default.nix @@ -1,5 +1,5 @@ {config, ...}: let - inherit (config.settings.system) user; + inherit (config.nest.system) user; in { home-manager.users.${user.name} = { imports = [ diff --git a/modules/nixos/home/desktop/hyprland/default.nix b/modules/nixos/home/desktop/hyprland/default.nix index 1a29287..35fc6b9 100644 --- a/modules/nixos/home/desktop/hyprland/default.nix +++ b/modules/nixos/home/desktop/hyprland/default.nix @@ -4,7 +4,7 @@ pkgs, ... }: let - cfg = osConfig.settings.desktop.hyprland; + cfg = osConfig.nest.desktop; in { imports = [ ./autostart.nix @@ -17,7 +17,7 @@ in { ./settings.nix ]; - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.enable && cfg.hyprland.enable) { wayland.windowManager.hyprland = { enable = true; }; diff --git a/modules/nixos/home/desktop/hyprland/hypridle.nix b/modules/nixos/home/desktop/hyprland/hypridle.nix index 4d8f2a1..a002a06 100644 --- a/modules/nixos/home/desktop/hyprland/hypridle.nix +++ b/modules/nixos/home/desktop/hyprland/hypridle.nix @@ -3,9 +3,9 @@ osConfig, ... }: let - cfg = osConfig.settings.desktop.hyprland; + cfg = osConfig.nest.desktop; in { - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.enable && cfg.hyprland.enable) { services.hypridle = { enable = false; settings = { diff --git a/modules/nixos/home/desktop/hyprland/hyprlock.nix b/modules/nixos/home/desktop/hyprland/hyprlock.nix index 916fc97..f41ee31 100644 --- a/modules/nixos/home/desktop/hyprland/hyprlock.nix +++ b/modules/nixos/home/desktop/hyprland/hyprlock.nix @@ -8,7 +8,7 @@ lib, ... }: let - cfg = osConfig.settings.desktop.hyprland; + cfg = osConfig.nest.desktop; scripts = { song-art = pkgs.writeShellScriptBin "song-art" '' @@ -39,7 +39,7 @@ ''; }; in { - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.enable && cfg.hyprland.enable) { catppuccin.hyprlock.useDefaultConfig = false; programs.hyprlock = { enable = false; diff --git a/modules/nixos/home/desktop/hyprland/hyprpaper.nix b/modules/nixos/home/desktop/hyprland/hyprpaper.nix index 9f324a3..0e72ffa 100644 --- a/modules/nixos/home/desktop/hyprland/hyprpaper.nix +++ b/modules/nixos/home/desktop/hyprland/hyprpaper.nix @@ -5,9 +5,9 @@ osConfig, ... }: let - cfg = osConfig.settings.desktop.hyprland; + cfg = osConfig.nest.desktop; in { - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.enable && cfg.hyprland.enable) { services.hyprpaper = { enable = true; settings = let diff --git a/modules/nixos/home/desktop/niri/binds.nix b/modules/nixos/home/desktop/niri/binds.nix index 0514d02..4695f9c 100644 --- a/modules/nixos/home/desktop/niri/binds.nix +++ b/modules/nixos/home/desktop/niri/binds.nix @@ -5,10 +5,10 @@ osConfig, ... }: let - cfg = osConfig.settings.desktop.niri; + cfg = osConfig.nest.desktop; wpctl = lib.getExe' pkgs.wireplumber "wpctl"; in { - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.enable && cfg.niri.enable) { programs.niri.settings.binds = { # ==== Actions ==== diff --git a/modules/nixos/home/desktop/niri/default.nix b/modules/nixos/home/desktop/niri/default.nix index 91eb382..fc73c14 100644 --- a/modules/nixos/home/desktop/niri/default.nix +++ b/modules/nixos/home/desktop/niri/default.nix @@ -5,13 +5,13 @@ lib, ... }: let - cfg = osConfig.settings.desktop.niri; + cfg = osConfig.nest.desktop; in { imports = [ ./binds.nix ]; - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.enable && cfg.niri.enable) { programs.niri.settings = { animations.enable = true; prefer-no-csd = true; diff --git a/modules/nixos/home/programs/cli/default.nix b/modules/nixos/home/programs/cli/default.nix index a92d051..3decff3 100644 --- a/modules/nixos/home/programs/cli/default.nix +++ b/modules/nixos/home/programs/cli/default.nix @@ -5,34 +5,30 @@ lib, ... }: let - inherit (lib) optionals concatLists; - cfg = osConfig.settings.programs; + inherit (lib) optionals; + cfg = osConfig.nest; in { imports = [ ./hyfetch.nix ./ncmpcpp.nix ./nushell.nix ./yazi.nix - # ./lazygit.nix # dev + ./lazygit.nix ]; - config = lib.mkIf cfg.cli.enable { + config = lib.mkIf cfg.programs.cli { home.packages = with pkgs; with inputs; - concatLists [ - (optionals cfg.categories.tools.enable [ - brightnessctl - ddcutil - grim - killall - peaclock - playerctl - slurp - wl-clipboard - ]) - (optionals cfg.categories.dev.enable [ - # nix - nix-output-monitor - ]) + [ + nix-output-monitor + ] + ++ optionals cfg.desktop.enable [ + brightnessctl + ddcutil + grim + killall + playerctl + slurp + wl-clipboard ]; }; } diff --git a/modules/nixos/home/programs/cli/hyfetch.nix b/modules/nixos/home/programs/cli/hyfetch.nix index d9aeaa5..720111b 100644 --- a/modules/nixos/home/programs/cli/hyfetch.nix +++ b/modules/nixos/home/programs/cli/hyfetch.nix @@ -4,10 +4,9 @@ pkgs, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.tools.enable) { + config = lib.mkIf cfg.cli { programs.hyfetch = { enable = true; settings = { diff --git a/modules/nixos/home/programs/cli/lazygit.nix b/modules/nixos/home/programs/cli/lazygit.nix index d2b5388..c5448a1 100644 --- a/modules/nixos/home/programs/cli/lazygit.nix +++ b/modules/nixos/home/programs/cli/lazygit.nix @@ -3,10 +3,9 @@ lib, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.tui.enable - && cfg.categories.dev.enable) { - programs.lazygit.enable = true; + config = lib.mkIf cfg.cli { + programs.lazygit.enable = false; }; } diff --git a/modules/nixos/home/programs/cli/ncmpcpp.nix b/modules/nixos/home/programs/cli/ncmpcpp.nix index 19a9b99..80ebd94 100644 --- a/modules/nixos/home/programs/cli/ncmpcpp.nix +++ b/modules/nixos/home/programs/cli/ncmpcpp.nix @@ -4,10 +4,10 @@ pkgs, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.tui.enable - && cfg.categories.music.enable) { + config = lib.mkIf (cfg.cli + && cfg.media.enable) { programs.ncmpcpp = { enable = true; package = pkgs.ncmpcpp.override { diff --git a/modules/nixos/home/programs/cli/nushell.nix b/modules/nixos/home/programs/cli/nushell.nix index 45145de..438a2ff 100644 --- a/modules/nixos/home/programs/cli/nushell.nix +++ b/modules/nixos/home/programs/cli/nushell.nix @@ -4,12 +4,12 @@ config, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.tools.enable) { + config = lib.mkIf (cfg.cli + && cfg.terminal.shell.nushell.enable) { programs.nushell = { - enable = false; + enable = true; extraConfig = '' $env.config = { show_banner: false, diff --git a/modules/nixos/home/programs/cli/yazi.nix b/modules/nixos/home/programs/cli/yazi.nix index 6ed35e1..44717cc 100644 --- a/modules/nixos/home/programs/cli/yazi.nix +++ b/modules/nixos/home/programs/cli/yazi.nix @@ -3,10 +3,9 @@ lib, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.tui.enable - && cfg.categories.fs.enable) { - programs.yazi.enable = true; + config = lib.mkIf cfg.cli { + programs.yazi.enable = false; }; } diff --git a/modules/nixos/home/programs/gui/browsers/chromium.nix b/modules/nixos/home/programs/gui/browsers/chromium.nix index bc9feb3..97c8495 100644 --- a/modules/nixos/home/programs/gui/browsers/chromium.nix +++ b/modules/nixos/home/programs/gui/browsers/chromium.nix @@ -3,9 +3,9 @@ lib, ... }: let - cfg = osConfig.settings.programs.categories.web; + cfg = osConfig.nest.programs; in { - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.gui && cfg.browsers.chromium.enable) { programs.chromium = { enable = true; extensions = [ diff --git a/modules/nixos/home/programs/gui/browsers/firefox/default.nix b/modules/nixos/home/programs/gui/browsers/firefox/default.nix index a82bb62..0fa9324 100644 --- a/modules/nixos/home/programs/gui/browsers/firefox/default.nix +++ b/modules/nixos/home/programs/gui/browsers/firefox/default.nix @@ -4,7 +4,7 @@ inputs, ... }: let - cfg = osConfig.settings.programs.categories.web; + cfg = osConfig.nest.programs; ffConfig = { "toolkit.legacyUserProfileCustomizations.stylesheets" = true; "browser.ml.chat.enabled" = false; @@ -23,7 +23,7 @@ in { ./policies.nix ]; - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.gui && cfg.browsers.firefox.enable) { programs.firefox = { enable = true; diff --git a/modules/nixos/home/programs/gui/browsers/floorp.nix b/modules/nixos/home/programs/gui/browsers/floorp.nix index 47632d2..de24e2e 100644 --- a/modules/nixos/home/programs/gui/browsers/floorp.nix +++ b/modules/nixos/home/programs/gui/browsers/floorp.nix @@ -3,9 +3,9 @@ lib, ... }: let - cfg = osConfig.settings.programs.categories.web; + cfg = osConfig.nest.programs; in { - config = lib.mkIf cfg.enable { + config = lib.mkIf (cfg.gui && cfg.browsers.chromium.enable) { programs.floorp = { enable = true; profiles.default = { diff --git a/modules/nixos/home/programs/gui/default.nix b/modules/nixos/home/programs/gui/default.nix index f44699b..167ccd8 100644 --- a/modules/nixos/home/programs/gui/default.nix +++ b/modules/nixos/home/programs/gui/default.nix @@ -5,87 +5,78 @@ ... }: let inherit (lib) optionals concatLists; - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { imports = [ ./browsers - ./waybar # core - # ./cura.nix # 3dp - # ./lightburn.nix # cnc - # ./obs-studio.nix # media - ./quickshell.nix # core - ./spicetify.nix # music - ./thunderbird.nix # mail - ./tofi.nix # core - ./zed # dev + ./waybar + ./cura.nix + # ./lightburn.nix + # ./obs-studio.nix + # ./quickshell.nix + ./spicetify.nix + ./thunderbird.nix + ./tofi.nix + ./zed ]; - config = lib.mkIf cfg.gui.enable { + config = lib.mkIf cfg.gui { home.packages = with pkgs; concatLists [ - (optionals cfg.categories.tools.enable [ + [ keepassxc localsend polkit_gnome popsicle - qbittorrent - ]) + nautilus + ] - (optionals cfg.categories.fun.enable [ - calibre + (optionals cfg.games.enable [ prismlauncher - vesktop - hexchat - (discord.override { - withOpenASAR = true; - }) ]) - (optionals cfg.categories.privacy.enable [ + (optionals cfg.privacy.enable [ tor-browser ]) - (optionals cfg.categories.media.enable [ + (optionals cfg.media.enable [ # darktable eog mpv + calibre + qbittorrent ]) - (optionals cfg.categories.fs.enable [ - nautilus + (optionals cfg.social.enable [ + vesktop + hexchat + (discord.override { + withOpenASAR = true; + }) ]) - # (optionals cfg.categories.dev.enable [ - # vscode - # ]) - - (optionals cfg.categories.design.enable [ - # graphic design + (optionals cfg.design.enable [ aseprite inkscape - - # 3D design - # blender openscad ]) - (optionals cfg.categories.edu.enable [ - # drawio - # ganttproject-bin + (optionals cfg.productivity.enable [ libreoffice - # logseq qalculate-qt - # blanket ]) ] ++ (with pkgs.unstable; concatLists [ - (optionals cfg.categories.tools.enable [ - obsidian + (optionals cfg.privacy.enable [ veracrypt ]) - (optionals cfg.categories.design.enable [ + (optionals cfg.productivity.enable [ + obsidian + ]) + + (optionals cfg.media.enable [ cura-appimage ]) ]); diff --git a/modules/nixos/home/programs/gui/lightburn.nix b/modules/nixos/home/programs/gui/lightburn.nix index 248c515..d11b5f5 100644 --- a/modules/nixos/home/programs/gui/lightburn.nix +++ b/modules/nixos/home/programs/gui/lightburn.nix @@ -4,10 +4,9 @@ pkgs, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.core.enable) { + config = lib.mkIf cfg.gui { home.packages = [ ( let diff --git a/modules/nixos/home/programs/gui/obs-studio.nix b/modules/nixos/home/programs/gui/obs-studio.nix index 2726945..87ac06c 100644 --- a/modules/nixos/home/programs/gui/obs-studio.nix +++ b/modules/nixos/home/programs/gui/obs-studio.nix @@ -4,10 +4,10 @@ osConfig, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.media.enable) { + config = lib.mkIf (cfg.gui + && cfg.media.enable) { programs.obs-studio = { enable = true; plugins = with pkgs.obs-studio-plugins; [ diff --git a/modules/nixos/home/programs/gui/quickshell.nix b/modules/nixos/home/programs/gui/quickshell.nix index e4bb5ae..5fbde00 100644 --- a/modules/nixos/home/programs/gui/quickshell.nix +++ b/modules/nixos/home/programs/gui/quickshell.nix @@ -5,10 +5,9 @@ pkgs, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.core.enable) { + config = lib.mkIf cfg.gui { home.packages = [ inputs.quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default ]; diff --git a/modules/nixos/home/programs/gui/spicetify.nix b/modules/nixos/home/programs/gui/spicetify.nix index 8216ab1..7027b47 100644 --- a/modules/nixos/home/programs/gui/spicetify.nix +++ b/modules/nixos/home/programs/gui/spicetify.nix @@ -5,13 +5,13 @@ osConfig, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.hostPlatform.system}; in { imports = [inputs.spicetify-nix.homeManagerModules.default]; - config = lib.mkIf (cfg.gui.enable - && cfg.categories.music.enable) { + config = lib.mkIf (cfg.gui + && cfg.media.enable) { programs.spicetify = { enable = true; enabledExtensions = with spicePkgs.extensions; [ diff --git a/modules/nixos/home/programs/gui/thunderbird.nix b/modules/nixos/home/programs/gui/thunderbird.nix index ce5a782..b7f17c4 100644 --- a/modules/nixos/home/programs/gui/thunderbird.nix +++ b/modules/nixos/home/programs/gui/thunderbird.nix @@ -3,10 +3,10 @@ lib, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.mail.enable) { + config = lib.mkIf (cfg.gui + && cfg.productivity.enable) { programs.thunderbird = { enable = true; profiles."default" = { diff --git a/modules/nixos/home/programs/gui/tofi.nix b/modules/nixos/home/programs/gui/tofi.nix index 95a3fff..a059b37 100644 --- a/modules/nixos/home/programs/gui/tofi.nix +++ b/modules/nixos/home/programs/gui/tofi.nix @@ -4,10 +4,9 @@ config, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.core.enable) { + config = lib.mkIf cfg.gui { programs.tofi = { enable = true; settings = { diff --git a/modules/nixos/home/programs/gui/waybar/default.nix b/modules/nixos/home/programs/gui/waybar/default.nix index 8e59cbd..1fb022d 100644 --- a/modules/nixos/home/programs/gui/waybar/default.nix +++ b/modules/nixos/home/programs/gui/waybar/default.nix @@ -3,10 +3,9 @@ osConfig, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.core.enable) { + config = lib.mkIf cfg.gui { programs.waybar = { enable = true; style = builtins.readFile ./style.css; diff --git a/modules/nixos/home/programs/gui/zed/default.nix b/modules/nixos/home/programs/gui/zed/default.nix index ff2fdf3..67cb4b2 100644 --- a/modules/nixos/home/programs/gui/zed/default.nix +++ b/modules/nixos/home/programs/gui/zed/default.nix @@ -5,12 +5,12 @@ pkgs, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.dev.enable) { + config = lib.mkIf (cfg.gui + && cfg.devtools.enable) { home = let - inherit (osConfig.settings.system.user) flakeDir; + inherit (osConfig.nest.system.user) flakeDir; mkLink = config.lib.file.mkOutOfStoreSymlink; settingsFile = mkLink "${flakeDir}/modules/nixos/programs/gui/zed/settings.json"; keymapFile = mkLink "${flakeDir}/modules/nixos/programs/gui/zed/keymap.json"; diff --git a/modules/nixos/home/services/mpd.nix b/modules/nixos/home/services/mpd.nix index 745a9fd..85a1bef 100644 --- a/modules/nixos/home/services/mpd.nix +++ b/modules/nixos/home/services/mpd.nix @@ -5,7 +5,7 @@ lib, ... }: let - cfg = osConfig.settings.programs.categories.music; + cfg = osConfig.nest.services.selfhost.mpd; in { config = lib.mkIf cfg.enable { services = { diff --git a/modules/nixos/home/themes/gtk.nix b/modules/nixos/home/themes/gtk.nix index 5423c66..e52499a 100644 --- a/modules/nixos/home/themes/gtk.nix +++ b/modules/nixos/home/themes/gtk.nix @@ -3,7 +3,7 @@ lib, ... }: let - cfg = osConfig.settings.desktop; + cfg = osConfig.nest.desktop; in { config = lib.mkIf cfg.enable { gtk = { diff --git a/modules/nixos/home/themes/qt.nix b/modules/nixos/home/themes/qt.nix index e5f5543..9af6335 100644 --- a/modules/nixos/home/themes/qt.nix +++ b/modules/nixos/home/themes/qt.nix @@ -3,7 +3,7 @@ lib, ... }: let - cfg = osConfig.settings.desktop; + cfg = osConfig.nest.desktop; in { config = lib.mkIf cfg.enable { qt = { diff --git a/modules/nixos/home/themes/stylix.nix b/modules/nixos/home/themes/stylix.nix index 99d334e..4b92d3e 100644 --- a/modules/nixos/home/themes/stylix.nix +++ b/modules/nixos/home/themes/stylix.nix @@ -5,7 +5,7 @@ lib, ... }: let - cfg = osConfig.settings.desktop; + cfg = osConfig.nest.desktop; in { imports = [inputs.stylix.homeModules.stylix]; diff --git a/modules/nixos/programs/default.nix b/modules/nixos/programs/default.nix index 1119575..2020306 100644 --- a/modules/nixos/programs/default.nix +++ b/modules/nixos/programs/default.nix @@ -2,7 +2,9 @@ lib, config, ... -}: { +}: let + cfg = config.nest.programs; +in{ imports = [ ./fonts.nix ]; @@ -13,7 +15,7 @@ clean.enable = true; clean.extraArgs = "--keep-since 4d --keep 3"; }; - steam.enable = lib.mkDefault config.settings.desktop.enable; - zsh.enable = true; + steam.enable = cfg.games.enable; + zsh.enable = cfg.terminal.shell.zsh.enable; }; } diff --git a/modules/nixos/programs/fonts.nix b/modules/nixos/programs/fonts.nix index 7fb7da3..b6d85ed 100644 --- a/modules/nixos/programs/fonts.nix +++ b/modules/nixos/programs/fonts.nix @@ -4,7 +4,7 @@ lib, ... }: let - cfg = config.settings.desktop; + cfg = config.nest.desktop; in { config = lib.mkIf cfg.enable { fonts = { diff --git a/modules/nixos/services/default.nix b/modules/nixos/services/default.nix index 0d5e3c2..69c4857 100644 --- a/modules/nixos/services/default.nix +++ b/modules/nixos/services/default.nix @@ -4,21 +4,22 @@ config, ... }: let - cfg = config.settings.system.services; + cfg = config.nest.services; in { imports = [ ./i18n.nix ./mpdscribble.nix ./pipewire.nix ./printing.nix - ./privacy.nix ./restic.nix + ./tor.nix # ./sddm.nix # ./xfce.nix ]; config = lib.mkIf cfg.enable { services = { + # TODO some of these can probably be disabled for server environments gnome.gnome-keyring.enable = true; dbus.enable = true; # D-Bus message bus fstrim.enable = true; # SSD TRIM diff --git a/modules/nixos/services/mpdscribble.nix b/modules/nixos/services/mpdscribble.nix index 500e6cd..e0a0063 100644 --- a/modules/nixos/services/mpdscribble.nix +++ b/modules/nixos/services/mpdscribble.nix @@ -3,7 +3,7 @@ lib, ... }: let - cfg = config.settings.programs.categories.music; + cfg = config.nest.services.selfhost.mpd; in { config = lib.mkIf cfg.enable { services.mpdscribble = { diff --git a/modules/nixos/services/pipewire.nix b/modules/nixos/services/pipewire.nix index 5d2c74c..e187a08 100644 --- a/modules/nixos/services/pipewire.nix +++ b/modules/nixos/services/pipewire.nix @@ -4,7 +4,7 @@ lib, ... }: let - cfg = config.settings.system.services.sound; + cfg = config.nest.services.sound; in { config = lib.mkIf cfg.enable { # Enable sound with pipewire diff --git a/modules/nixos/services/printing.nix b/modules/nixos/services/printing.nix index 8fc1b88..e650464 100644 --- a/modules/nixos/services/printing.nix +++ b/modules/nixos/services/printing.nix @@ -4,7 +4,7 @@ lib, ... }: let - cfg = config.settings.system.services.printing; + cfg = config.nest.services.printing; in { config = lib.mkIf cfg.enable { services.printing = { @@ -23,8 +23,7 @@ in { openFirewall = true; }; - # TODO enable this with services.printing.profiles.enable - hardware.printers = { + hardware.printers = lib.mkIf cfg.profiles.enable { ensurePrinters = [ { # http://localhost:631/printers/Brother-HL-5340D diff --git a/modules/nixos/services/restic.nix b/modules/nixos/services/restic.nix index 84dc491..1ea7709 100644 --- a/modules/nixos/services/restic.nix +++ b/modules/nixos/services/restic.nix @@ -4,7 +4,7 @@ lib, ... }: let - cfg = config.settings.system.services.backups; + cfg = config.nest.services.backups; in { config = lib.mkIf cfg.enable { users = { @@ -26,6 +26,7 @@ in { services.restic.backups = { remotebackup = { passwordFile = "${config.age.secrets.restic.path}"; + # TODO move these to config (per-device and required) paths = [ "/mnt/shared/docs" "/mnt/shared/git" diff --git a/modules/nixos/services/privacy.nix b/modules/nixos/services/tor.nix similarity index 79% rename from modules/nixos/services/privacy.nix rename to modules/nixos/services/tor.nix index 9365ec6..57c59ee 100644 --- a/modules/nixos/services/privacy.nix +++ b/modules/nixos/services/tor.nix @@ -3,7 +3,7 @@ lib, ... }: let - cfg = config.settings.system.services.networking.tor; + cfg = config.nest.services.networking.tor; in { config = lib.mkIf cfg.enable { services.tor = { diff --git a/modules/nixos/system/network.nix b/modules/nixos/system/network.nix index 85f52a2..07a911d 100644 --- a/modules/nixos/system/network.nix +++ b/modules/nixos/system/network.nix @@ -2,13 +2,13 @@ config, pkgs, ... -}: { +}: let cfg = config.nest.services.networking; in { networking = { - inherit (config.settings.system) hostName; + inherit (config.nest.system) hostName; networkmanager = { enable = true; # https://github.com/Janik-Haag/nm2nix - ensureProfiles = { + ensureProfiles = lib.mkIf cfg.profiles { environmentFiles = [config.age.secrets.wifi.path]; # https://github.com/alyraffauf/nixcfg/blob/4ccc90fe11c63702879cf50b888ee460c185400d/common/wifi.nix diff --git a/modules/nixos/themes/catppuccin.nix b/modules/nixos/themes/catppuccin.nix index dbe554f..47cb4a6 100644 --- a/modules/nixos/themes/catppuccin.nix +++ b/modules/nixos/themes/catppuccin.nix @@ -4,7 +4,7 @@ lib, ... }: let - cfg = config.settings.desktop; + cfg = config.nest.desktop; in { imports = [ inputs.catppuccin.nixosModules.catppuccin diff --git a/modules/shared/home/default.nix b/modules/shared/home/default.nix index 5dd655b..6a9de3e 100644 --- a/modules/shared/home/default.nix +++ b/modules/shared/home/default.nix @@ -3,7 +3,7 @@ config, ... }: let - inherit (config.settings.system) user; + inherit (config.nest.system) user; in { home-manager = { useGlobalPkgs = true; diff --git a/modules/shared/home/home.nix b/modules/shared/home/home.nix index 2b562cd..f92ca40 100644 --- a/modules/shared/home/home.nix +++ b/modules/shared/home/home.nix @@ -1,5 +1,5 @@ {osConfig, ...}: let - inherit (osConfig.settings.system) user; + inherit (osConfig.nest.system) user; in { imports = [ ./programs diff --git a/modules/shared/home/programs/cli/atuin.nix b/modules/shared/home/programs/cli/atuin.nix index e98f70b..ec9e377 100644 --- a/modules/shared/home/programs/cli/atuin.nix +++ b/modules/shared/home/programs/cli/atuin.nix @@ -4,11 +4,11 @@ lib, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { # TODO: sync and dedicated server - config = lib.mkIf (cfg.cli.enable - && cfg.categories.core.enable) { + config = lib.mkIf (cfg.cli + && cfg.terminal.shell.atuin.enable) { programs.atuin = { enable = true; diff --git a/modules/shared/home/programs/cli/bat.nix b/modules/shared/home/programs/cli/bat.nix index 6ea2a38..1f4710c 100644 --- a/modules/shared/home/programs/cli/bat.nix +++ b/modules/shared/home/programs/cli/bat.nix @@ -3,10 +3,9 @@ lib, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.core.enable) { - programs.bat.enable = true; + config = lib.mkIf (cfg.cli) { + programs.bat.enable = cfg.terminal.tools.bat.enable; }; } diff --git a/modules/shared/home/programs/cli/beets.nix b/modules/shared/home/programs/cli/beets.nix index 16985c2..d207257 100644 --- a/modules/shared/home/programs/cli/beets.nix +++ b/modules/shared/home/programs/cli/beets.nix @@ -5,11 +5,12 @@ pkgs, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; inherit (pkgs) stdenv; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.music.enable) { + # TODO different config setting + config = lib.mkIf (cfg.cli + && cfg.media.enable) { systemd.user.services.mpdstats = lib.mkIf (stdenv.isLinux && config.services.mpd.enable) diff --git a/modules/shared/home/programs/cli/btop.nix b/modules/shared/home/programs/cli/btop.nix index cbaa69a..8c19b1a 100644 --- a/modules/shared/home/programs/cli/btop.nix +++ b/modules/shared/home/programs/cli/btop.nix @@ -3,10 +3,9 @@ lib, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.tui.enable - && cfg.categories.core.enable) { + config = lib.mkIf cfg.cli { programs.btop.enable = true; }; } diff --git a/modules/shared/home/programs/cli/bun.nix b/modules/shared/home/programs/cli/bun.nix index 88621b9..3ec33b5 100644 --- a/modules/shared/home/programs/cli/bun.nix +++ b/modules/shared/home/programs/cli/bun.nix @@ -3,10 +3,10 @@ osConfig, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.dev.enable) { + config = lib.mkIf (cfg.cli + && cfg.devtools.web.bun.enable) { programs.bun.enable = true; }; } diff --git a/modules/shared/home/programs/cli/default.nix b/modules/shared/home/programs/cli/default.nix index b2f825a..7c2a436 100644 --- a/modules/shared/home/programs/cli/default.nix +++ b/modules/shared/home/programs/cli/default.nix @@ -6,7 +6,7 @@ ... }: let inherit (lib) optionals concatLists; - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { imports = [ ./atuin.nix @@ -26,20 +26,20 @@ in { ./zsh.nix ]; - config = lib.mkIf cfg.cli.enable { + config = lib.mkIf cfg.cli { home.packages = with pkgs; with inputs; concatLists [ - (optionals cfg.categories.tools.enable [ + [ catppuccin.packages."${pkgs.stdenv.hostPlatform.system}".catwalk catppuccin.packages."${pkgs.stdenv.hostPlatform.system}".whiskers - # archivebox just tldr typst - ]) - (optionals cfg.categories.dev.enable [ + ] + (optionals cfg.devtools.enable [ + # TODO use categories pnpm # nix diff --git a/modules/shared/home/programs/cli/direnv.nix b/modules/shared/home/programs/cli/direnv.nix index d88763a..83ef966 100644 --- a/modules/shared/home/programs/cli/direnv.nix +++ b/modules/shared/home/programs/cli/direnv.nix @@ -4,10 +4,10 @@ config, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.dev.enable) { + config = lib.mkIf (cfg.cli + && cfg.devtools.nix.enable) { programs.direnv = { enable = true; silent = true; diff --git a/modules/shared/home/programs/cli/eza.nix b/modules/shared/home/programs/cli/eza.nix index c486d76..b7dde13 100644 --- a/modules/shared/home/programs/cli/eza.nix +++ b/modules/shared/home/programs/cli/eza.nix @@ -4,10 +4,10 @@ config, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.tools.enable) { + config = lib.mkIf (cfg.cli + && cfg.terminal.tools.eza.enable) { programs.eza = { enable = true; icons = "auto"; diff --git a/modules/shared/home/programs/cli/fzf.nix b/modules/shared/home/programs/cli/fzf.nix index dd14e8d..fba83f5 100644 --- a/modules/shared/home/programs/cli/fzf.nix +++ b/modules/shared/home/programs/cli/fzf.nix @@ -4,10 +4,10 @@ config, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.tools.enable) { + config = lib.mkIf (cfg.cli + && cfg.terminal.tools.fzf.enable) { programs.fzf = { enable = true; enableBashIntegration = config.programs.bash.enable; diff --git a/modules/shared/home/programs/cli/git.nix b/modules/shared/home/programs/cli/git.nix index a0e3899..62b35b4 100644 --- a/modules/shared/home/programs/cli/git.nix +++ b/modules/shared/home/programs/cli/git.nix @@ -4,10 +4,9 @@ config, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.core.enable) { + config = lib.mkIf cfg.cli { programs.git = { enable = true; lfs.enable = true; diff --git a/modules/shared/home/programs/cli/gitui.nix b/modules/shared/home/programs/cli/gitui.nix index f9fcf99..4a6f94e 100644 --- a/modules/shared/home/programs/cli/gitui.nix +++ b/modules/shared/home/programs/cli/gitui.nix @@ -3,10 +3,9 @@ lib, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.tui.enable - && cfg.categories.dev.enable) { + config = lib.mkIf cfg.cli { programs.gitui = { enable = true; diff --git a/modules/shared/home/programs/cli/helix/default.nix b/modules/shared/home/programs/cli/helix/default.nix index 5bc45b4..d972ee6 100644 --- a/modules/shared/home/programs/cli/helix/default.nix +++ b/modules/shared/home/programs/cli/helix/default.nix @@ -5,10 +5,9 @@ config, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.tui.enable - && cfg.categories.core.enable) { + config = lib.mkIf cfg.cli { xdg.configFile.".prettierrc.json".text = builtins.toJSON (import ./prettier.nix {inherit pkgs;}); xdg.configFile.".dprint.jsonc".text = builtins.toJSON (import ./dprint.nix {inherit pkgs;}); xdg.configFile."moxide/settings.toml".source = ./moxide.toml; diff --git a/modules/shared/home/programs/cli/ripgrep.nix b/modules/shared/home/programs/cli/ripgrep.nix index 372f597..60959f9 100644 --- a/modules/shared/home/programs/cli/ripgrep.nix +++ b/modules/shared/home/programs/cli/ripgrep.nix @@ -3,10 +3,10 @@ osConfig, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.tools.enable) { + config = lib.mkIf (cfg.cli + && cfg.terminal.tools.ripgrep.enable) { programs.ripgrep = { enable = true; diff --git a/modules/shared/home/programs/cli/starship.nix b/modules/shared/home/programs/cli/starship.nix index 9d07cd3..7ff1b5f 100644 --- a/modules/shared/home/programs/cli/starship.nix +++ b/modules/shared/home/programs/cli/starship.nix @@ -5,7 +5,7 @@ osConfig, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; # ss = symbol: style: { # inherit symbol; # format = "[$symbol ](${style})"; @@ -15,8 +15,8 @@ format = "via [$symbol](${style})"; }; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.core.enable) { + config = lib.mkIf (cfg.cli + && cfg.terminal.shell.starship.enable) { programs.starship = { enable = true; enableBashIntegration = config.programs.bash.enable; diff --git a/modules/shared/home/programs/cli/zoxide.nix b/modules/shared/home/programs/cli/zoxide.nix index 8d352ec..cb16f33 100644 --- a/modules/shared/home/programs/cli/zoxide.nix +++ b/modules/shared/home/programs/cli/zoxide.nix @@ -4,10 +4,10 @@ config, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.core.enable) { + config = lib.mkIf (cfg.cli + &&cfg.terminal.tools.zoxide.enable) { programs.zoxide = { enable = true; enableBashIntegration = config.programs.bash.enable; diff --git a/modules/shared/home/programs/cli/zsh.nix b/modules/shared/home/programs/cli/zsh.nix index d274a09..ceba971 100644 --- a/modules/shared/home/programs/cli/zsh.nix +++ b/modules/shared/home/programs/cli/zsh.nix @@ -4,10 +4,9 @@ config, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli.enable - && cfg.categories.core.enable) { + config = lib.mkIf cfg.cli { # TODO options programs.zsh = { enable = true; enableCompletion = true; diff --git a/modules/shared/home/programs/gui/terminals/alacritty.nix b/modules/shared/home/programs/gui/terminals/alacritty.nix index f030e29..6efd136 100644 --- a/modules/shared/home/programs/gui/terminals/alacritty.nix +++ b/modules/shared/home/programs/gui/terminals/alacritty.nix @@ -3,10 +3,10 @@ osConfig, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.core.enable) { + config = lib.mkIf (cfg.gui + && cfg.terminal.emulator.alacritty.enable) { programs.alacritty = { enable = true; settings = { diff --git a/modules/shared/home/programs/gui/terminals/ghostty.nix b/modules/shared/home/programs/gui/terminals/ghostty.nix index d3ab30d..3351734 100644 --- a/modules/shared/home/programs/gui/terminals/ghostty.nix +++ b/modules/shared/home/programs/gui/terminals/ghostty.nix @@ -5,10 +5,10 @@ pkgs, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.core.enable) { + config = lib.mkIf (cfg.gui + && cfg.terminal.emulator.ghostty.enable) { programs.ghostty = { enable = true; diff --git a/modules/shared/home/programs/gui/terminals/kitty.nix b/modules/shared/home/programs/gui/terminals/kitty.nix index 33e3ae5..64edbe5 100644 --- a/modules/shared/home/programs/gui/terminals/kitty.nix +++ b/modules/shared/home/programs/gui/terminals/kitty.nix @@ -3,10 +3,10 @@ osConfig, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.core.enable) { + config = lib.mkIf (cfg.gui + && cfg.terminal.emulator.kitty.enable) { programs.kitty = { enable = false; settings = { diff --git a/modules/shared/home/programs/gui/zathura.nix b/modules/shared/home/programs/gui/zathura.nix index 331c447..27928b2 100644 --- a/modules/shared/home/programs/gui/zathura.nix +++ b/modules/shared/home/programs/gui/zathura.nix @@ -3,10 +3,10 @@ lib, ... }: let - cfg = osConfig.settings.programs; + cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.gui.enable - && cfg.categories.media.enable) { + config = lib.mkIf (cfg.gui + && cfg.media.enable) { programs.zathura = { enable = false; diff --git a/modules/shared/home/scripts/spotdl.nix b/modules/shared/home/scripts/spotdl.nix index eb00b19..6466e0b 100644 --- a/modules/shared/home/scripts/spotdl.nix +++ b/modules/shared/home/scripts/spotdl.nix @@ -4,7 +4,7 @@ lib, ... }: let - cfg = osConfig.settings.programs.categories.music; + cfg = osConfig.nest.programs.categories.music; # TODO)) Add queuing for multiple URLs bdl = pkgs.writeShellScriptBin "bdl" '' diff --git a/modules/shared/options/default.nix b/modules/shared/options/default.nix index b3bf5f0..8707aeb 100644 --- a/modules/shared/options/default.nix +++ b/modules/shared/options/default.nix @@ -1,9 +1,9 @@ { imports = [ ./desktop.nix + ./profiles.nix ./programs.nix ./services.nix ./system.nix ]; - # TODO sort out profiles } diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index aefc686..3b57b55 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -6,26 +6,11 @@ cfg = config.nest; profiles = { - # defaults from options.nix - minimal = { - programs = { - enable = lib.mkDefault true; - cli = lib.mkDefault true; - }; - system.services = { - enable = lib.mkDefault true; - networking.enable = lib.mkDefault true; - }; - }; - desktop = { programs = { enable = lib.mkDefault true; - # we are already grouping for cli or gui which i prefer over grouping - # by categories as that is already the file tree and cant have both - # as the options are hierarchical - cli.enable = lib.mkDefault true; - gui.enable = lib.mkDefault true; + cli = lib.mkDefault true; + gui = lib.mkDefault true; games.enable = lib.mkDefault true; media.enable = lib.mkDefault true; @@ -76,7 +61,6 @@ enable = lib.mkDefault true; networking.enable = lib.mkDefault true; ssh.enable = lib.mkDefault true; - # TODO backups and config for them }; }; }; diff --git a/modules/shared/options/programs.nix b/modules/shared/options/programs.nix index 6dc865c..b1c9a14 100644 --- a/modules/shared/options/programs.nix +++ b/modules/shared/options/programs.nix @@ -9,18 +9,14 @@ in { programs = { enable = mkEnableOption "programs" // {default = true;}; cli = mkEnableOption "CLI programs" // {default = true;}; - gui = mkEnableOption "GUI programs"; + gui = mkEnableOption "GUI programs" // {default = cfg.desktop.enable;}; games.enable = mkEnableOption "games"; media.enable = mkEnableOption "media and creative tools"; + privacy.enable = mkEnableOption "privacy programs"; productivity.enable = mkEnableOption "productivity programs"; social.enable = mkEnableOption "social programs"; - utilities = { - git.enable = mkEnableOption "git version control" // {default = true;}; - btop.enable = mkEnableOption "btop resource monitor"; - }; - browsers = { helium.enable = mkEnableOption "helium browser"; # TODO not in nixpkgs yet https://github.com/NixOS/nixpkgs/pull/498572 firefox.enable = mkEnableOption "firefox browser"; @@ -49,6 +45,7 @@ in { bat.enable = mkEnableOption "bat" // {default = cfg.programs.terminal.tools.enable;}; eza.enable = mkEnableOption "eza" // {default = cfg.programs.terminal.tools.enable;}; fzf.enable = mkEnableOption "fzf" // {default = cfg.programs.terminal.tools.enable;}; + ripgrep.enable = mkEnableOption "ripgrep" // {default = cfg.programs.terminal.tools.enable;}; zoxide.enable = mkEnableOption "zoxide" // {default = cfg.programs.terminal.tools.enable;}; }; }; diff --git a/modules/shared/options/services.nix b/modules/shared/options/services.nix index fd2b75d..d34ee0b 100644 --- a/modules/shared/options/services.nix +++ b/modules/shared/options/services.nix @@ -18,7 +18,7 @@ in { enable = mkEnableOption "networking" // {default = cfg.system.services.enable;}; profiles.enable = mkEnableOption "NetworkManager profiles" // {default = true;}; tailscale.enable = mkEnableOption "tailscale"; - tor.enable = mkEnableOption "TOR network"; + tor.enable = mkEnableOption "tor network"; }; # not available on darwin printing = { @@ -28,11 +28,11 @@ in { # not available on darwin sound.enable = mkEnableOption "sound"; ssh.enable = mkEnableOption "SSH server"; - sync.enable = mkEnableOption "syncthing"; + syncthing.enable = mkEnableOption "syncthing"; selfhost = { - enable = mkEnableOption "selfhosting services"; # caddy.enable = mkEnableOption "caddy"; not needed with cloudflared + mpd.enable = mkEnableOption "mpd"; kanidm.enable = mkEnableOption "kanidm"; cloudflared.enable = mkEnableOption "cloudflared"; pihole.enable = mkEnableOption "pihole"; # TODO or coredns or adguard home for "split horizon DNS" maybe? From a6c1d401f893d34cef62d27c5a29227415883c31 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sat, 13 Jun 2026 20:20:28 +1000 Subject: [PATCH 05/50] format --- modules/nixos/programs/default.nix | 2 +- modules/nixos/system/network.nix | 4 +++- modules/shared/home/programs/cli/zoxide.nix | 2 +- modules/shared/home/programs/cli/zsh.nix | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/nixos/programs/default.nix b/modules/nixos/programs/default.nix index 2020306..30975d1 100644 --- a/modules/nixos/programs/default.nix +++ b/modules/nixos/programs/default.nix @@ -4,7 +4,7 @@ ... }: let cfg = config.nest.programs; -in{ +in { imports = [ ./fonts.nix ]; diff --git a/modules/nixos/system/network.nix b/modules/nixos/system/network.nix index 07a911d..465d9fc 100644 --- a/modules/nixos/system/network.nix +++ b/modules/nixos/system/network.nix @@ -2,7 +2,9 @@ config, pkgs, ... -}: let cfg = config.nest.services.networking; in { +}: let + cfg = config.nest.services.networking; +in { networking = { inherit (config.nest.system) hostName; networkmanager = { diff --git a/modules/shared/home/programs/cli/zoxide.nix b/modules/shared/home/programs/cli/zoxide.nix index cb16f33..eea30c2 100644 --- a/modules/shared/home/programs/cli/zoxide.nix +++ b/modules/shared/home/programs/cli/zoxide.nix @@ -7,7 +7,7 @@ cfg = osConfig.nest.programs; in { config = lib.mkIf (cfg.cli - &&cfg.terminal.tools.zoxide.enable) { + && cfg.terminal.tools.zoxide.enable) { programs.zoxide = { enable = true; enableBashIntegration = config.programs.bash.enable; diff --git a/modules/shared/home/programs/cli/zsh.nix b/modules/shared/home/programs/cli/zsh.nix index ceba971..6565514 100644 --- a/modules/shared/home/programs/cli/zsh.nix +++ b/modules/shared/home/programs/cli/zsh.nix @@ -6,7 +6,8 @@ }: let cfg = osConfig.nest.programs; in { - config = lib.mkIf cfg.cli { # TODO options + config = lib.mkIf cfg.cli { + # TODO options programs.zsh = { enable = true; enableCompletion = true; From 406d3ad066c66206c8ff6a218047b97d778e883e Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sat, 13 Jun 2026 20:25:17 +1000 Subject: [PATCH 06/50] avoid repeated keys apply statix recommendations --- hosts/earthy/default.nix | 42 +++++++++---------- modules/darwin/desktop/aerospace.nix | 10 ++--- modules/shared/home/programs/cli/bat.nix | 2 +- modules/shared/home/programs/cli/git.nix | 8 ++-- .../home/programs/cli/helix/default.nix | 8 ++-- 5 files changed, 37 insertions(+), 33 deletions(-) diff --git a/hosts/earthy/default.nix b/hosts/earthy/default.nix index 7b60e23..729d8df 100644 --- a/hosts/earthy/default.nix +++ b/hosts/earthy/default.nix @@ -23,13 +23,6 @@ in { }; }; - services.openssh = { - enable = true; - settings = { - PermitRootLogin = "yes"; - }; - }; - # samba environment.systemPackages = [pkgs.cifs-utils]; fileSystems."/mnt/nas" = { @@ -41,21 +34,28 @@ in { in ["${automount_opts},credentials=${config.age.secrets.samba.path}"]; }; - # tlp - services.tlp = { - enable = true; - settings = { - CPU_ENERGY_PERF_POLICY_AC = "performance"; - CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power"; - PLATFORM_PROFILE_ON_AC = "performance"; - PLATFORM_PROFILE_ON_BAT = "low-power"; - WIFI_PWR_ON_AC = "off"; # default: off - WIFI_PWR_ON_BAT = "off"; # default: on todo)) trying to resolve samba frozen unit session slice issue + services = { + tlp = { + enable = true; + settings = { + CPU_ENERGY_PERF_POLICY_AC = "performance"; + CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power"; + PLATFORM_PROFILE_ON_AC = "performance"; + PLATFORM_PROFILE_ON_BAT = "low-power"; + WIFI_PWR_ON_AC = "off"; # default: off + WIFI_PWR_ON_BAT = "off"; # default: on todo)) trying to resolve samba frozen unit session slice issue + }; }; - }; - # fwupd - services.fwupd = { - enable = true; + openssh = { + enable = true; + settings = { + PermitRootLogin = "yes"; + }; + }; + + fwupd = { + enable = true; + }; }; } diff --git a/modules/darwin/desktop/aerospace.nix b/modules/darwin/desktop/aerospace.nix index 3f53c09..1f672ed 100644 --- a/modules/darwin/desktop/aerospace.nix +++ b/modules/darwin/desktop/aerospace.nix @@ -3,11 +3,11 @@ enable = false; settings = { - gaps = { - outer.left = 8; - outer.bottom = 8; - outer.top = 8; - outer.right = 8; + gaps.outer = { + left = 8; + bottom = 8; + top = 8; + right = 8; }; mode.main.binding = { diff --git a/modules/shared/home/programs/cli/bat.nix b/modules/shared/home/programs/cli/bat.nix index 1f4710c..46bc691 100644 --- a/modules/shared/home/programs/cli/bat.nix +++ b/modules/shared/home/programs/cli/bat.nix @@ -5,7 +5,7 @@ }: let cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli) { + config = lib.mkIf cfg.cli { programs.bat.enable = cfg.terminal.tools.bat.enable; }; } diff --git a/modules/shared/home/programs/cli/git.nix b/modules/shared/home/programs/cli/git.nix index 62b35b4..226cc2f 100644 --- a/modules/shared/home/programs/cli/git.nix +++ b/modules/shared/home/programs/cli/git.nix @@ -12,8 +12,11 @@ in { lfs.enable = true; settings = { - user.name = "willow"; - user.email = "42willow" + "@" + "pm.me"; + user = { + name = "willow"; + email = "42willow" + "@" + "pm.me"; + signingkey = osConfig.age.secrets.gh.path; + }; aliases = { co = "checkout"; @@ -50,7 +53,6 @@ in { # commit signing commit.gpgsign = true; gpg.format = "ssh"; - user.signingkey = osConfig.age.secrets.gh.path; gpg.ssh.allowedSignersFile = "${config.home.homeDirectory}/.ssh/allowed_signers"; }; }; diff --git a/modules/shared/home/programs/cli/helix/default.nix b/modules/shared/home/programs/cli/helix/default.nix index d972ee6..5deb69a 100644 --- a/modules/shared/home/programs/cli/helix/default.nix +++ b/modules/shared/home/programs/cli/helix/default.nix @@ -8,9 +8,11 @@ cfg = osConfig.nest.programs; in { config = lib.mkIf cfg.cli { - xdg.configFile.".prettierrc.json".text = builtins.toJSON (import ./prettier.nix {inherit pkgs;}); - xdg.configFile.".dprint.jsonc".text = builtins.toJSON (import ./dprint.nix {inherit pkgs;}); - xdg.configFile."moxide/settings.toml".source = ./moxide.toml; + xdg.configFile = { + ".dprint.jsonc".text = builtins.toJSON (import ./dprint.nix {inherit pkgs;}); + ".prettierrc.json".text = builtins.toJSON (import ./prettier.nix {inherit pkgs;}); + "moxide/settings.toml".source = ./moxide.toml; + }; programs.helix = { enable = true; From 70b2f4cf4d3e4495b3d4dce95b85169bff57fa3c Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sat, 13 Jun 2026 20:25:58 +1000 Subject: [PATCH 07/50] deadnix --- flake.nix | 4 ++-- modules/nixos/programs/default.nix | 1 - modules/shared/home/programs/cli/helix/dprint.nix | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/flake.nix b/flake.nix index e121f39..3d0f671 100644 --- a/flake.nix +++ b/flake.nix @@ -9,7 +9,7 @@ nixpkgs, ... } @ inputs: let - mkNixosSystem = name: hostPath: + mkNixosSystem = _name: hostPath: nixos-stable.lib.nixosSystem { modules = [ hostPath @@ -18,7 +18,7 @@ specialArgs = {inherit self inputs;}; }; - mkDarwinSystem = name: hostPath: + mkDarwinSystem = _name: hostPath: nix-darwin.lib.darwinSystem { modules = [ hostPath diff --git a/modules/nixos/programs/default.nix b/modules/nixos/programs/default.nix index 30975d1..141a00b 100644 --- a/modules/nixos/programs/default.nix +++ b/modules/nixos/programs/default.nix @@ -1,5 +1,4 @@ { - lib, config, ... }: let diff --git a/modules/shared/home/programs/cli/helix/dprint.nix b/modules/shared/home/programs/cli/helix/dprint.nix index 440278b..03a0987 100644 --- a/modules/shared/home/programs/cli/helix/dprint.nix +++ b/modules/shared/home/programs/cli/helix/dprint.nix @@ -8,7 +8,7 @@ }; plugins = with pkgs; dprint-plugins.getPluginList ( - plugins: + _plugins: with dprint-plugins; [ dprint-plugin-json dprint-plugin-markdown From 88da712f22dff5f2ee97588849a2175c7747a43d Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 11:02:13 +1000 Subject: [PATCH 08/50] attempt to fix up options --- modules/nixos/system/network.nix | 1 + modules/shared/options/desktop.nix | 2 +- modules/shared/options/profiles.nix | 15 ++++++++-- modules/shared/options/programs.nix | 2 +- modules/shared/options/services.nix | 2 +- modules/shared/options/system.nix | 45 ++++++++++++----------------- 6 files changed, 34 insertions(+), 33 deletions(-) diff --git a/modules/nixos/system/network.nix b/modules/nixos/system/network.nix index 465d9fc..b07fe95 100644 --- a/modules/nixos/system/network.nix +++ b/modules/nixos/system/network.nix @@ -1,6 +1,7 @@ { config, pkgs, + lib, ... }: let cfg = config.nest.services.networking; diff --git a/modules/shared/options/desktop.nix b/modules/shared/options/desktop.nix index 8245da5..abcf01d 100644 --- a/modules/shared/options/desktop.nix +++ b/modules/shared/options/desktop.nix @@ -1,7 +1,7 @@ {lib, ...}: let inherit (lib) mkEnableOption; in { - desktop = { + options.nest.desktop = { enable = mkEnableOption "desktop environment"; niri.enable = mkEnableOption "Niri"; hyprland.enable = mkEnableOption "Hyprland"; diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index 3b57b55..6d59213 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -1,9 +1,9 @@ { - lib, config, + lib, ... }: let - cfg = config.nest; + inherit (lib) mkOption types; profiles = { desktop = { @@ -65,5 +65,14 @@ }; }; in { - config.settings = profiles.${cfg.profile} or {}; + options.nest.profile = mkOption { + type = types.nullOr (types.enum ["desktop" "server"]); + default = null; + description = "The system profile preset to apply. If null, the system falls back to the minimal defaults."; + }; + + config.nest = + if config.nest.profile != null + then profiles.${config.nest.profile} + else {}; } diff --git a/modules/shared/options/programs.nix b/modules/shared/options/programs.nix index b1c9a14..87dc174 100644 --- a/modules/shared/options/programs.nix +++ b/modules/shared/options/programs.nix @@ -6,7 +6,7 @@ inherit (lib) mkEnableOption; cfg = config.nest; in { - programs = { + options.nest.programs = { enable = mkEnableOption "programs" // {default = true;}; cli = mkEnableOption "CLI programs" // {default = true;}; gui = mkEnableOption "GUI programs" // {default = cfg.desktop.enable;}; diff --git a/modules/shared/options/services.nix b/modules/shared/options/services.nix index d34ee0b..a4c2dd5 100644 --- a/modules/shared/options/services.nix +++ b/modules/shared/options/services.nix @@ -6,7 +6,7 @@ inherit (lib) mkEnableOption; cfg = config.nest; in { - services = { + options.nest.services = { enable = mkEnableOption "core system services" // {default = true;}; backups = { # TODO: move this to shared/ diff --git a/modules/shared/options/system.nix b/modules/shared/options/system.nix index d387c94..3719618 100644 --- a/modules/shared/options/system.nix +++ b/modules/shared/options/system.nix @@ -6,37 +6,28 @@ inherit (lib) mkOption types; cfg = config.nest; in { - options.nest = { - # TODO move out of here - profile = mkOption { - type = types.nullOr (types.enum ["desktop" "server"]); - default = null; - description = "The system profile preset to apply. If null, the system falls back to the minimal defaults."; + options.nest.system = { + hostName = mkOption { + type = types.str; + description = "The hostname of your system."; }; - system = { - hostName = mkOption { + user = { + name = mkOption { type = types.str; - description = "The hostname of your system."; + default = "willow"; }; - - user = { - name = mkOption { - type = types.str; - default = "willow"; - }; - home = mkOption { - type = types.path; - default = "/home/${cfg.system.user.name}"; - }; - group = mkOption { - type = types.str; - default = "users"; - }; - flakeDir = mkOption { - type = types.path; - default = "${cfg.system.user.home}/flake"; - }; + home = mkOption { + type = types.path; + default = "/home/${cfg.system.user.name}"; + }; + group = mkOption { + type = types.str; + default = "users"; + }; + flakeDir = mkOption { + type = types.path; + default = "${cfg.system.user.home}/flake"; }; }; }; From 942e40b4486d64b08e97fd707e284e3df3a59330 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 11:07:44 +1000 Subject: [PATCH 09/50] fix infinite recursion move profiles out of nest namespace --- modules/shared/options/profiles.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index 6d59213..1db36a6 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -65,14 +65,14 @@ }; }; in { - options.nest.profile = mkOption { + options.profile = mkOption { type = types.nullOr (types.enum ["desktop" "server"]); default = null; description = "The system profile preset to apply. If null, the system falls back to the minimal defaults."; }; config.nest = - if config.nest.profile != null - then profiles.${config.nest.profile} + if config.profile != null + then profiles.${config.profile} else {}; } From c2f61f9925ea4ae0543aef0cb929f26c7bfebae6 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 11:13:34 +1000 Subject: [PATCH 10/50] format --- modules/nixos/programs/default.nix | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/modules/nixos/programs/default.nix b/modules/nixos/programs/default.nix index 141a00b..43e3efd 100644 --- a/modules/nixos/programs/default.nix +++ b/modules/nixos/programs/default.nix @@ -1,7 +1,4 @@ -{ - config, - ... -}: let +{config, ...}: let cfg = config.nest.programs; in { imports = [ From bb39da4bee388804e2eda12657be60c90cf992b0 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 11:13:56 +1000 Subject: [PATCH 11/50] try fix infinite recursion --- overlays.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays.nix b/overlays.nix index 823caf4..5a1e999 100644 --- a/overlays.nix +++ b/overlays.nix @@ -17,5 +17,5 @@ }; }; - additions = final: _prev: import "${self}/pkgs" final.pkgs; + additions = final: _prev: import "${self}/pkgs" {pkgs = final;}; } From e4e5e361eeda981c67f51b0545bc172e1d45aa3d Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 11:15:00 +1000 Subject: [PATCH 12/50] fix syncthing option --- hosts/starling/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hosts/starling/default.nix b/hosts/starling/default.nix index a64c08d..e507a0f 100644 --- a/hosts/starling/default.nix +++ b/hosts/starling/default.nix @@ -32,8 +32,8 @@ in { group = "staff"; flakeDir = "${home}/Documents/git/flake"; }; - services.syncthing.enable = true; }; + services.syncthing.enable = true; # TODO enable syncthing (disabled in module) - requires disabling syncthing network which is flagged }; nix = { From 752532783a703eff43ea3e8f7a5b11416cba2e1b Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 11:16:35 +1000 Subject: [PATCH 13/50] undo change --- overlays.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays.nix b/overlays.nix index 5a1e999..823caf4 100644 --- a/overlays.nix +++ b/overlays.nix @@ -17,5 +17,5 @@ }; }; - additions = final: _prev: import "${self}/pkgs" {pkgs = final;}; + additions = final: _prev: import "${self}/pkgs" final.pkgs; } From d7559706f9ee63c5d05ce0ac1a019613efbd76bc Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 11:19:37 +1000 Subject: [PATCH 14/50] change profile settings --- hosts/anemone/default.nix | 2 -- hosts/earthy/default.nix | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/hosts/anemone/default.nix b/hosts/anemone/default.nix index 1fb0b6b..b17686c 100644 --- a/hosts/anemone/default.nix +++ b/hosts/anemone/default.nix @@ -20,8 +20,6 @@ in { disabledModules = ["profiles/base.nix"]; nest = { - profile = "minimal"; - programs = { enable = false; cli.enable = true; diff --git a/hosts/earthy/default.nix b/hosts/earthy/default.nix index 729d8df..78b0bbb 100644 --- a/hosts/earthy/default.nix +++ b/hosts/earthy/default.nix @@ -11,6 +11,7 @@ in { "${self}/modules/nixos" ]; + profile = "desktop"; nest = { system = { hostName = "earthy"; From d0c5aee03cb4aba87200a4a1a0ffa8276b382af9 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 13:00:55 +1000 Subject: [PATCH 15/50] revert: autogen docs --- flake.nix | 6 +---- pkgs/default.nix | 9 +------ pkgs/docs.nix | 61 ------------------------------------------------ 3 files changed, 2 insertions(+), 74 deletions(-) delete mode 100644 pkgs/docs.nix diff --git a/flake.nix b/flake.nix index 3d0f671..a97505c 100644 --- a/flake.nix +++ b/flake.nix @@ -45,11 +45,7 @@ inherit self; }; - packages = forAllSystems (system: - import ./pkgs { - pkgs = nixpkgs.legacyPackages.${system}; - inherit inputs self; - }); + packages = forAllSystems (system: import ./pkgs nixpkgs.legacyPackages.${system}); formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra); }; diff --git a/pkgs/default.nix b/pkgs/default.nix index c03dae4..f7784d0 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,11 +1,4 @@ -{ - pkgs, - inputs, - self, - ... -}: { +pkgs: { discord-rpc-lsp = pkgs.callPackage ./discord-rpc-lsp.nix {}; glide-wm = pkgs.callPackage ./glide-wm.nix {}; - - docs = pkgs.callPackage ./docs.nix {inherit inputs self;}; } diff --git a/pkgs/docs.nix b/pkgs/docs.nix deleted file mode 100644 index ef5ce91..0000000 --- a/pkgs/docs.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ - lib, - pkgs, - inputs, - self ? inputs.self, - nixosOptionsDoc, - runCommand, -}: let - inherit (lib.attrsets) filterAttrs; - inherit (lib.modules) evalModules; - inherit (lib.strings) removePrefix; - - gitHubDeclaration = user: repo: subpath: { - url = "https://github.com/${user}/${repo}/blob/main/${subpath}"; - name = subpath; - }; - - eval = evalModules { - modules = [ - (self + /modules/shared/options/default.nix) - { - _module = { - check = false; - args = {inherit pkgs;}; - }; - } - ]; - - specialArgs = { - inherit self inputs; - }; - }; - - doc = nixosOptionsDoc { - options = filterAttrs (n: _: n != "_module") eval.options.settings; - documentType = "none"; - transformOptions = opt: - opt - // { - declarations = - map ( - decl: - if lib.hasPrefix (toString self) (toString decl) - then - gitHubDeclaration "42willow" "flake" ( - removePrefix "/" (removePrefix (toString self) (toString decl)) - ) - else decl - ) - opt.declarations; - }; - }; -in - runCommand "flake-options-docs" {} '' - mkdir -p $out - cat > $out/options.md << 'EOF' - # Flake Configuration Options - - EOF - cat ${doc.optionsCommonMark} >> $out/options.md - '' From a8f3815920e2ed9bc7be633bc747bf8323992f53 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 13:03:19 +1000 Subject: [PATCH 16/50] fix old options --- modules/shared/home/services/syncthing.nix | 2 +- modules/shared/home/themes/catppuccin.nix | 2 +- modules/shared/nix/age.nix | 2 +- modules/shared/nix/default.nix | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/shared/home/services/syncthing.nix b/modules/shared/home/services/syncthing.nix index 5616583..7a0af0a 100644 --- a/modules/shared/home/services/syncthing.nix +++ b/modules/shared/home/services/syncthing.nix @@ -4,7 +4,7 @@ osConfig, ... }: let - cfg = osConfig.settings.system.services.sync; + cfg = osConfig.nest.services.syncthing; devices = { starling.id = "3NK35IK-ZONOPLB-R277NP3-MUTEU33-PFKOWCZ-U3SB6ZO-YPIBVY5-UTCTIQK"; diff --git a/modules/shared/home/themes/catppuccin.nix b/modules/shared/home/themes/catppuccin.nix index 0915b5a..15a31a7 100644 --- a/modules/shared/home/themes/catppuccin.nix +++ b/modules/shared/home/themes/catppuccin.nix @@ -4,7 +4,7 @@ lib, ... }: let - cfg = osConfig.settings.desktop; + cfg = osConfig.nest.desktop; in { imports = [ inputs.catppuccin.homeModules.catppuccin diff --git a/modules/shared/nix/age.nix b/modules/shared/nix/age.nix index c350223..8998379 100644 --- a/modules/shared/nix/age.nix +++ b/modules/shared/nix/age.nix @@ -5,7 +5,7 @@ ... }: let inherit (inputs) self; - inherit (config.settings.system) user; + inherit (config.nest.system) user; sshDir = user.home + "/.ssh"; diff --git a/modules/shared/nix/default.nix b/modules/shared/nix/default.nix index dec986c..8100ffb 100644 --- a/modules/shared/nix/default.nix +++ b/modules/shared/nix/default.nix @@ -3,7 +3,7 @@ self, ... }: let - inherit (config.settings.system) user; + inherit (config.nest.system) user; inherit (self) outputs; in { imports = [ From 67e373cfb5a6d6af4a46ba34bd7e392799c4f44c Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 13:06:14 +1000 Subject: [PATCH 17/50] fix more old stuff --- hosts/anemone/default.nix | 20 +++----------------- hosts/earthy/default.nix | 4 +--- modules/shared/home/scripts/spotdl.nix | 4 ++-- modules/shared/options/profiles.nix | 4 ++-- 4 files changed, 8 insertions(+), 24 deletions(-) diff --git a/hosts/anemone/default.nix b/hosts/anemone/default.nix index b17686c..1c0c532 100644 --- a/hosts/anemone/default.nix +++ b/hosts/anemone/default.nix @@ -19,24 +19,10 @@ in { disabledModules = ["profiles/base.nix"]; + profile = "server"; nest = { - programs = { - enable = false; - cli.enable = true; - tui.enable = true; - categories = { - enable = false; - core.enable = true; - }; - }; - system = { - hostName = "anemone"; - services = { - enable = false; - networking.enable = true; - }; - }; - desktop.enable = false; + system.hostname = "anemone"; + services.enable = false; }; services.openssh = { diff --git a/hosts/earthy/default.nix b/hosts/earthy/default.nix index 78b0bbb..02b1d84 100644 --- a/hosts/earthy/default.nix +++ b/hosts/earthy/default.nix @@ -13,9 +13,7 @@ in { profile = "desktop"; nest = { - system = { - hostName = "earthy"; - }; + system.hostName = "earthy"; services = { syncthing.enable = true; selfhost = { diff --git a/modules/shared/home/scripts/spotdl.nix b/modules/shared/home/scripts/spotdl.nix index 6466e0b..b1d2835 100644 --- a/modules/shared/home/scripts/spotdl.nix +++ b/modules/shared/home/scripts/spotdl.nix @@ -4,9 +4,9 @@ lib, ... }: let - cfg = osConfig.nest.programs.categories.music; + cfg = osConfig.nest.programs.media; - # TODO)) Add queuing for multiple URLs + # TODO Add queuing for multiple URLs bdl = pkgs.writeShellScriptBin "bdl" '' echo "Please enter the Spotify URL:" ${lib.getExe pkgs.unstable.spotdl} --version diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index 1db36a6..994fdd5 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -30,7 +30,7 @@ tools.enable = lib.mkDefault true; }; }; - system.services = { + services = { enable = lib.mkDefault true; backups.enable = lib.mkDefault true; bluetooth.enable = lib.mkDefault true; @@ -57,7 +57,7 @@ }; }; - system.services = { + services = { enable = lib.mkDefault true; networking.enable = lib.mkDefault true; ssh.enable = lib.mkDefault true; From 99ae80f6a39c08b8a64e22669ce3a1876a2f642d Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 13:07:40 +1000 Subject: [PATCH 18/50] oops cura doesn't exist --- modules/nixos/home/programs/gui/default.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/nixos/home/programs/gui/default.nix b/modules/nixos/home/programs/gui/default.nix index 167ccd8..632a4ad 100644 --- a/modules/nixos/home/programs/gui/default.nix +++ b/modules/nixos/home/programs/gui/default.nix @@ -10,10 +10,9 @@ in { imports = [ ./browsers ./waybar - ./cura.nix # ./lightburn.nix # ./obs-studio.nix - # ./quickshell.nix + ./quickshell.nix ./spicetify.nix ./thunderbird.nix ./tofi.nix From 8be7bdd8184e94dd218b6c2e076eed90174cd464 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 13:09:45 +1000 Subject: [PATCH 19/50] fix hostname capitalisation --- hosts/anemone/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hosts/anemone/default.nix b/hosts/anemone/default.nix index 1c0c532..65880f9 100644 --- a/hosts/anemone/default.nix +++ b/hosts/anemone/default.nix @@ -21,7 +21,7 @@ in { profile = "server"; nest = { - system.hostname = "anemone"; + system.hostName = "anemone"; services.enable = false; }; From a2857e1ba9fe8d12d8ace12d2f363e81a29f135c Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 13:10:46 +1000 Subject: [PATCH 20/50] forgot to include chromium option --- modules/shared/options/profiles.nix | 1 + modules/shared/options/programs.nix | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index 994fdd5..d968a8c 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -19,6 +19,7 @@ browsers = { helium.enable = lib.mkDefault true; firefox.enable = lib.mkDefault true; + chromium.enable = lib.mkDefault true; }; terminal = { diff --git a/modules/shared/options/programs.nix b/modules/shared/options/programs.nix index 87dc174..c88257b 100644 --- a/modules/shared/options/programs.nix +++ b/modules/shared/options/programs.nix @@ -21,6 +21,7 @@ in { helium.enable = mkEnableOption "helium browser"; # TODO not in nixpkgs yet https://github.com/NixOS/nixpkgs/pull/498572 firefox.enable = mkEnableOption "firefox browser"; floorp.enable = mkEnableOption "floorp browser"; + chromium.enable = mkEnableOption "chromium browser"; }; terminal = { From 0979696dda60d2406ec150739b5555d9dc5e7f29 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 13:15:57 +1000 Subject: [PATCH 21/50] fix up some oopsies --- modules/nixos/system/network.nix | 2 +- modules/shared/options/services.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/nixos/system/network.nix b/modules/nixos/system/network.nix index b07fe95..c2b1ae0 100644 --- a/modules/nixos/system/network.nix +++ b/modules/nixos/system/network.nix @@ -11,7 +11,7 @@ in { networkmanager = { enable = true; # https://github.com/Janik-Haag/nm2nix - ensureProfiles = lib.mkIf cfg.profiles { + ensureProfiles = lib.mkIf cfg.profiles.enable { environmentFiles = [config.age.secrets.wifi.path]; # https://github.com/alyraffauf/nixcfg/blob/4ccc90fe11c63702879cf50b888ee460c185400d/common/wifi.nix diff --git a/modules/shared/options/services.nix b/modules/shared/options/services.nix index a4c2dd5..b7ed0a5 100644 --- a/modules/shared/options/services.nix +++ b/modules/shared/options/services.nix @@ -23,7 +23,7 @@ in { # not available on darwin printing = { enable = mkEnableOption "printing"; - profiles = mkEnableOption "printing profiles" // {default = true;}; + profiles.enable = mkEnableOption "printing profiles" // {default = true;}; }; # not available on darwin sound.enable = mkEnableOption "sound"; From 0b8407a3ab6f673d99dc3fdfc59b8a69a682f5ef Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 13:19:37 +1000 Subject: [PATCH 22/50] remove non existent category --- modules/nixos/home/programs/gui/default.nix | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/nixos/home/programs/gui/default.nix b/modules/nixos/home/programs/gui/default.nix index 632a4ad..e3f1c40 100644 --- a/modules/nixos/home/programs/gui/default.nix +++ b/modules/nixos/home/programs/gui/default.nix @@ -44,6 +44,11 @@ in { mpv calibre qbittorrent + + # TODO split up into design category + aseprite + inkscape + openscad ]) (optionals cfg.social.enable [ @@ -54,12 +59,6 @@ in { }) ]) - (optionals cfg.design.enable [ - aseprite - inkscape - openscad - ]) - (optionals cfg.productivity.enable [ libreoffice qalculate-qt From 87eb425e92e695216075f9779849fd22b80ea07e Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 14:21:43 +1000 Subject: [PATCH 23/50] trigger ci From 0c0fb245ca514079cf492c610f7359a2bd94992b Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 14:41:14 +1000 Subject: [PATCH 24/50] trigger ci From 50784c39edfd1c0082322b830278a6aeef8df5bf Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 14:45:53 +1000 Subject: [PATCH 25/50] trigger ci From 8cadccfb506f7363c9fa8fb74ecabf77572ba7dd Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 15:18:52 +1000 Subject: [PATCH 26/50] trigger ci From 10b7aca117ea26c7b9978847a247af96dfb649ea Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 15:32:16 +1000 Subject: [PATCH 27/50] ci: use aarch64-linux for anemone --- .github/workflows/check.yml | 2 +- .github/workflows/diff.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 0fdb456..69cb410 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -25,7 +25,7 @@ jobs: target_attr: nixosConfigurations host: earthy - os: ubuntu-latest - system: x86_64-linux + system: aarch64-linux target_attr: nixosConfigurations host: anemone - os: ubuntu-latest diff --git a/.github/workflows/diff.yml b/.github/workflows/diff.yml index cb90d7d..5019def 100644 --- a/.github/workflows/diff.yml +++ b/.github/workflows/diff.yml @@ -22,7 +22,7 @@ jobs: target_attr: nixosConfigurations host: earthy - os: ubuntu-latest - system: x86_64-linux + system: aarch64-linux target_attr: nixosConfigurations host: anemone - os: ubuntu-latest From c1bc17f9f2381ea0acf6852875dbfe0e64f339c5 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 15:34:50 +1000 Subject: [PATCH 28/50] trigger ci From 2798fa7c6d15a790ba7cfb4ac25fb9d6ae667e45 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 17:25:59 +1000 Subject: [PATCH 29/50] ci: check: use arm runner for anemone --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 69cb410..c779a3c 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -24,7 +24,7 @@ jobs: system: x86_64-linux target_attr: nixosConfigurations host: earthy - - os: ubuntu-latest + - os: ubuntu-24.04-arm system: aarch64-linux target_attr: nixosConfigurations host: anemone From 31d3c9a5ff08be917a9fca8d6a658dd98c49dc55 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sun, 14 Jun 2026 17:26:23 +1000 Subject: [PATCH 30/50] hosts: starling: use desktop profile --- hosts/starling/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/hosts/starling/default.nix b/hosts/starling/default.nix index e507a0f..418f90e 100644 --- a/hosts/starling/default.nix +++ b/hosts/starling/default.nix @@ -18,6 +18,7 @@ in { hostName = "starling"; }; + profile = "desktop"; nest = { system = { user = let From f677d77074474fc3079e6f34614ffd856a8c28a5 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Mon, 15 Jun 2026 12:07:30 +1000 Subject: [PATCH 31/50] profile base config --- hosts/earthy/default.nix | 3 ++ modules/shared/options/profiles.nix | 55 ++++++++++++++--------------- modules/shared/options/programs.nix | 2 +- modules/shared/options/services.nix | 2 +- 4 files changed, 32 insertions(+), 30 deletions(-) diff --git a/hosts/earthy/default.nix b/hosts/earthy/default.nix index 02b1d84..2573b6e 100644 --- a/hosts/earthy/default.nix +++ b/hosts/earthy/default.nix @@ -20,6 +20,9 @@ in { mpd.enable = true; }; }; + programs = { + terminal.emulator.alacritty.enable = true; + }; }; # samba diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index d968a8c..b293193 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -3,19 +3,40 @@ lib, ... }: let - inherit (lib) mkOption types; + inherit (lib) mkOption types recursiveUpdate; + + # base config for desktop and server profiles + # the default (no profile) is just the defaults outlined in the options + base = { + programs = { + enable = lib.mkDefault true; + cli = lib.mkDefault true; + terminal = { + shell = { + atuin.enable = true; + starship.enable = true; + zsh.enable = lib.mkDefault true; + userShell = "zsh"; + }; + tools.enable = lib.mkDefault true; + }; + }; + services = { + enable = lib.mkDefault true; + networking.enable = lib.mkDefault true; + }; + }; profiles = { - desktop = { + desktop = recursiveUpdate base { programs = { - enable = lib.mkDefault true; - cli = lib.mkDefault true; gui = lib.mkDefault true; games.enable = lib.mkDefault true; media.enable = lib.mkDefault true; productivity.enable = lib.mkDefault true; social.enable = lib.mkDefault true; + browsers = { helium.enable = lib.mkDefault true; firefox.enable = lib.mkDefault true; @@ -24,18 +45,12 @@ terminal = { emulator.ghostty.enable = lib.mkDefault true; - shell = { - zsh.enable = lib.mkDefault true; - userShell = "zsh"; - }; - tools.enable = lib.mkDefault true; }; }; services = { enable = lib.mkDefault true; backups.enable = lib.mkDefault true; bluetooth.enable = lib.mkDefault true; - networking.enable = lib.mkDefault true; printing.enable = lib.mkDefault true; sound.enable = lib.mkDefault true; }; @@ -45,24 +60,8 @@ }; }; - server = { - programs = { - enable = lib.mkDefault true; - cli = lib.mkDefault true; - - terminal = { - shell = { - zsh.enable = lib.mkDefault true; - userShell = "zsh"; - }; - }; - }; - - services = { - enable = lib.mkDefault true; - networking.enable = lib.mkDefault true; - ssh.enable = lib.mkDefault true; - }; + server = recursiveUpdate base { + services.ssh.enable = lib.mkDefault true; }; }; in { diff --git a/modules/shared/options/programs.nix b/modules/shared/options/programs.nix index c88257b..e1f7162 100644 --- a/modules/shared/options/programs.nix +++ b/modules/shared/options/programs.nix @@ -32,7 +32,7 @@ in { }; shell = { atuin.enable = mkEnableOption "atuin shell history"; - starship.enable = mkEnableOption "starship prompt" // {default = cfg.programs.terminal.tools.enable;}; + starship.enable = mkEnableOption "starship prompt"; zsh.enable = mkEnableOption "zsh"; nushell.enable = mkEnableOption "nushell"; userShell = lib.mkOption { diff --git a/modules/shared/options/services.nix b/modules/shared/options/services.nix index b7ed0a5..254fa8b 100644 --- a/modules/shared/options/services.nix +++ b/modules/shared/options/services.nix @@ -7,7 +7,7 @@ cfg = config.nest; in { options.nest.services = { - enable = mkEnableOption "core system services" // {default = true;}; + enable = mkEnableOption "core system services" // {default = true;}; # TODO clarify what these are and if this option is needed backups = { # TODO: move this to shared/ enable = mkEnableOption "backups via restic"; From 9b1ba5bb4bdb8a21be0d86234f2715aaf707b672 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Mon, 15 Jun 2026 12:23:03 +1000 Subject: [PATCH 32/50] disable backups by default --- modules/shared/options/profiles.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index b293193..ca06393 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -49,7 +49,6 @@ }; services = { enable = lib.mkDefault true; - backups.enable = lib.mkDefault true; bluetooth.enable = lib.mkDefault true; printing.enable = lib.mkDefault true; sound.enable = lib.mkDefault true; From ac74d8b8c1ba7f04fcfe4b4262128f4dccc82ae0 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Mon, 15 Jun 2026 12:24:04 +1000 Subject: [PATCH 33/50] enable privacy category by default --- modules/shared/options/profiles.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index ca06393..67afd5e 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -34,6 +34,7 @@ games.enable = lib.mkDefault true; media.enable = lib.mkDefault true; + privacy.enable = lib.mkDefault true; productivity.enable = lib.mkDefault true; social.enable = lib.mkDefault true; From 821667f0683ff9875ffb964044c90b32dbd91373 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Mon, 15 Jun 2026 12:25:57 +1000 Subject: [PATCH 34/50] enable devtools for desktop --- modules/shared/options/profiles.nix | 2 ++ modules/shared/options/programs.nix | 14 +++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index 67afd5e..2eba55d 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -47,6 +47,8 @@ terminal = { emulator.ghostty.enable = lib.mkDefault true; }; + + devtools.enable = true; }; services = { enable = lib.mkDefault true; diff --git a/modules/shared/options/programs.nix b/modules/shared/options/programs.nix index e1f7162..2dd4fcb 100644 --- a/modules/shared/options/programs.nix +++ b/modules/shared/options/programs.nix @@ -54,13 +54,13 @@ in { devtools = { enable = mkEnableOption "developer tools"; - haskell.enable = mkEnableOption "haskell tooling"; - nix.enable = mkEnableOption "nix tooling"; - openscad.enable = mkEnableOption "openscad tooling"; - python.enable = mkEnableOption "python tooling"; - rust.enable = mkEnableOption "rust tooling"; - typst.enable = mkEnableOption "typst tooling"; - zig.enable = mkEnableOption "zig tooling"; + haskell.enable = mkEnableOption "haskell tooling" // {default = cfg.programs.devtools.enable;}; + nix.enable = mkEnableOption "nix tooling" // {default = cfg.programs.devtools.enable;}; + openscad.enable = mkEnableOption "openscad tooling" // {default = cfg.programs.devtools.enable;}; + python.enable = mkEnableOption "python tooling" // {default = cfg.programs.devtools.enable;}; + rust.enable = mkEnableOption "rust tooling" // {default = cfg.programs.devtools.enable;}; + typst.enable = mkEnableOption "typst tooling" // {default = cfg.programs.devtools.enable;}; + zig.enable = mkEnableOption "zig tooling" // {default = cfg.programs.devtools.enable;}; web = { pnpm.enable = lib.mkEnableOption "pnpm package manager"; From 030846e267e35d25dc5a10da518a012b640dd340 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Mon, 15 Jun 2026 19:36:34 +1000 Subject: [PATCH 35/50] remove hyprland again dunno how this got back --- modules/nixos/desktop/hyprland.nix | 17 -- .../nixos/home/desktop/hyprland/default.nix | 31 ---- .../nixos/home/desktop/hyprland/hypridle.nix | 45 ------ .../nixos/home/desktop/hyprland/hyprlock.nix | 148 ------------------ .../nixos/home/desktop/hyprland/hyprpaper.nix | 29 ---- 5 files changed, 270 deletions(-) delete mode 100644 modules/nixos/desktop/hyprland.nix delete mode 100644 modules/nixos/home/desktop/hyprland/default.nix delete mode 100644 modules/nixos/home/desktop/hyprland/hypridle.nix delete mode 100644 modules/nixos/home/desktop/hyprland/hyprlock.nix delete mode 100644 modules/nixos/home/desktop/hyprland/hyprpaper.nix diff --git a/modules/nixos/desktop/hyprland.nix b/modules/nixos/desktop/hyprland.nix deleted file mode 100644 index 0f54094..0000000 --- a/modules/nixos/desktop/hyprland.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - lib, - config, - ... -}: let - cfg = config.nest.desktop; -in { - config = lib.mkIf (cfg.enable && cfg.hyprland.enable) { - nix.settings = { - substituters = ["https://hyprland.cachix.org"]; - trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; - }; - programs.hyprland = { - enable = true; - }; - }; -} diff --git a/modules/nixos/home/desktop/hyprland/default.nix b/modules/nixos/home/desktop/hyprland/default.nix deleted file mode 100644 index 35fc6b9..0000000 --- a/modules/nixos/home/desktop/hyprland/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - osConfig, - lib, - pkgs, - ... -}: let - cfg = osConfig.nest.desktop; -in { - imports = [ - ./autostart.nix - ./binds.nix - ./env.nix - ./hypridle.nix - ./hyprlock.nix - ./hyprpaper.nix - ./rules.nix - ./settings.nix - ]; - - config = lib.mkIf (cfg.enable && cfg.hyprland.enable) { - wayland.windowManager.hyprland = { - enable = true; - }; - - home.packages = with pkgs; [ - hypridle - hyprpicker - hyprcursor - ]; - }; -} diff --git a/modules/nixos/home/desktop/hyprland/hypridle.nix b/modules/nixos/home/desktop/hyprland/hypridle.nix deleted file mode 100644 index a002a06..0000000 --- a/modules/nixos/home/desktop/hyprland/hypridle.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ - lib, - osConfig, - ... -}: let - cfg = osConfig.nest.desktop; -in { - config = lib.mkIf (cfg.enable && cfg.hyprland.enable) { - services.hypridle = { - enable = false; - settings = { - general = { - lock_cmd = "pidof hyprlock || hyprlock"; - before_sleep_cmd = "loginctl lock-session"; - after_sleep_cmd = "hyprctl dispatch dpms on"; - }; - - listener = [ - { - # 3 minutes: dim screen - timeout = 180; - on-timeout = "brightnessctl -s set 10"; - on-resume = "brightnessctl -r"; - } - { - # 10 mins: lock screen - timeout = 600; - on-timeout = "hyprlock"; - } - { - # 20 mins: turn off screen - timeout = 1200; - on-timeout = "hyprctl dispatch dpms off"; - on-resume = "hyprctl dispatch dpms on"; - } - { - # 30 mins: suspend - timeout = 1800; - on-timeout = "systemctl suspend"; - } - ]; - }; - }; - }; -} diff --git a/modules/nixos/home/desktop/hyprland/hyprlock.nix b/modules/nixos/home/desktop/hyprland/hyprlock.nix deleted file mode 100644 index f41ee31..0000000 --- a/modules/nixos/home/desktop/hyprland/hyprlock.nix +++ /dev/null @@ -1,148 +0,0 @@ -# Credits to: -# - https://github.com/Nitestack/dotfiles/blob/master/nix/home-manager/hyprland/plugins/hyprlock.nix -# - https://github.com/BHlmaoMSD/dotfiles/blob/main/hypr/hyprlock.conf -{ - inputs, - pkgs, - osConfig, - lib, - ... -}: let - cfg = osConfig.nest.desktop; - - scripts = { - song-art = pkgs.writeShellScriptBin "song-art" '' - #!/usr/bin/env bash - - file_dir=$(playerctl metadata --format '{{mpris:artUrl}}' | sed 's/file:\/\///') - - if [[ $(playerctl status) == "Playing" ]]; then - echo $file_dir - fi - ''; - song-info = pkgs.writeShellScriptBin "song-info" '' - #!/usr/bin/env bash - - artist=$(playerctl metadata --format '{{artist}}') - title=$(playerctl metadata --format '{{title}}') - - if [[ $(playerctl status) == "Playing" ]]; then - case "$1" in - --title) - echo $title - ;; - --artist) - echo $artist - ;; - esac - fi - ''; - }; -in { - config = lib.mkIf (cfg.enable && cfg.hyprland.enable) { - catppuccin.hyprlock.useDefaultConfig = false; - programs.hyprlock = { - enable = false; - # package = inputs.nixos-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}.hyprlock; - # See https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock - settings = { - general = { - disable_loading_bar = true; - hide_cursor = true; - }; - - # ── Background ──────────────────────────────────────────────────────── - background = { - path = "${inputs.wallpapers.packages.${pkgs.stdenv.hostPlatform.system}.macchiato}/share/wallpapers/macchiato/images/art/kurzgesagt/unknown_lifeform.png"; - blur_passes = 2; - }; - - # ── Labels ──────────────────────────────────────────────────────────── - label = [ - { - monitor = ""; - text = "cmd[update:1000] echo \"$(date +\"%A, %d. %B\")\""; - color = "$text"; - font_size = 20; - position = "0, 400"; - halign = "center"; - valign = "center"; - } - { - monitor = ""; - text = "cmd[update:1000] echo \"\$(date +\"%-H:%M\")\""; - color = "$text"; - font_size = 93; - position = "0, 253"; - halign = "center"; - valign = "center"; - } - { - text = "cmd[update:1000] echo \"$(${scripts.song-info}/bin/song-info --title)\""; - color = "$text"; - font_size = 17; - position = "0, -270"; - halign = "center"; - valign = "center"; - } - { - text = "cmd[update:1000] echo \"$(${scripts.song-info}/bin/song-info --artist)\""; - color = "$text"; - font_size = 15; - position = "0, -300"; - halign = "center"; - valign = "center"; - } - ]; - - # ── Input Field ─────────────────────────────────────────────────────── - input-field = { - size = "300, 60"; - outline_thickness = 4; - dots_size = 0.2; - dots_spacing = 0.2; - dots_center = true; - outer_color = "$accent"; - inner_color = "$surface0"; - font_color = "$text"; - fade_on_empty = false; - placeholder_text = "󰌾 Password..."; - hide_input = false; - check_color = "$accent"; - fail_color = "$red"; - position = "0, 65"; - halign = "center"; - valign = "bottom"; - }; - - # ── Images ──────────────────────────────────────────────────────────── - image = [ - { - size = 256; - rounding = 6; - border_size = 3; - border_color = "$accent"; - rotate = -6; - reload_time = 2; - reload_cmd = "${scripts.song-art}/bin/song-art"; - position = "0, -25"; - halign = "center"; - valign = "center"; - } - { - size = 256; - rounding = 6; - border_size = 4; - border_color = "$accent"; - rotate = 0; - reload_time = 2; - reload_cmd = "${scripts.song-art}/bin/song-art"; - position = "0, -25"; - halign = "center"; - valign = "center"; - } - ]; - }; - }; - }; -} diff --git a/modules/nixos/home/desktop/hyprland/hyprpaper.nix b/modules/nixos/home/desktop/hyprland/hyprpaper.nix deleted file mode 100644 index 0e72ffa..0000000 --- a/modules/nixos/home/desktop/hyprland/hyprpaper.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - inputs, - pkgs, - lib, - osConfig, - ... -}: let - cfg = osConfig.nest.desktop; -in { - config = lib.mkIf (cfg.enable && cfg.hyprland.enable) { - services.hyprpaper = { - enable = true; - settings = let - walls = inputs.wallpapers.packages.${pkgs.stdenv.hostPlatform.system}.macchiato; - in { - preload = [ - "${walls}/share/wallpapers/macchiato/images/art/kurzgesagt/black_hole_1.png" - "${walls}/share/wallpapers/macchiato/images/art/kurzgesagt/black_hole_2.png" - ]; - wallpaper = [ - "eDP-1, ${walls}/share/wallpapers/macchiato/images/art/kurzgesagt/black_hole_1.png" - "DP-1, ${walls}/share/wallpapers/macchiato/images/art/kurzgesagt/black_hole_2.png" - "DP-2, ${walls}/share/wallpapers/macchiato/images/art/kurzgesagt/black_hole_2.png" - ]; - splash = false; - }; - }; - }; -} From 5aafaf77d75ea1563ceebcf06f8acff53ba2782f Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Mon, 15 Jun 2026 20:27:16 +1000 Subject: [PATCH 36/50] try minimise diff --- hosts/starling/default.nix | 1 + modules/nixos/home/programs/cli/lazygit.nix | 2 +- modules/nixos/home/programs/cli/yazi.nix | 2 +- modules/shared/options/programs.nix | 4 ++-- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/hosts/starling/default.nix b/hosts/starling/default.nix index 418f90e..d0834f2 100644 --- a/hosts/starling/default.nix +++ b/hosts/starling/default.nix @@ -35,6 +35,7 @@ in { }; }; services.syncthing.enable = true; # TODO enable syncthing (disabled in module) - requires disabling syncthing network which is flagged + programs.terminal.emulator.alacritty.enable = true; }; nix = { diff --git a/modules/nixos/home/programs/cli/lazygit.nix b/modules/nixos/home/programs/cli/lazygit.nix index c5448a1..9ece197 100644 --- a/modules/nixos/home/programs/cli/lazygit.nix +++ b/modules/nixos/home/programs/cli/lazygit.nix @@ -6,6 +6,6 @@ cfg = osConfig.nest.programs; in { config = lib.mkIf cfg.cli { - programs.lazygit.enable = false; + programs.lazygit.enable = true; }; } diff --git a/modules/nixos/home/programs/cli/yazi.nix b/modules/nixos/home/programs/cli/yazi.nix index 44717cc..8c43535 100644 --- a/modules/nixos/home/programs/cli/yazi.nix +++ b/modules/nixos/home/programs/cli/yazi.nix @@ -6,6 +6,6 @@ cfg = osConfig.nest.programs; in { config = lib.mkIf cfg.cli { - programs.yazi.enable = false; + programs.yazi.enable = true; }; } diff --git a/modules/shared/options/programs.nix b/modules/shared/options/programs.nix index 2dd4fcb..677a165 100644 --- a/modules/shared/options/programs.nix +++ b/modules/shared/options/programs.nix @@ -63,8 +63,8 @@ in { zig.enable = mkEnableOption "zig tooling" // {default = cfg.programs.devtools.enable;}; web = { - pnpm.enable = lib.mkEnableOption "pnpm package manager"; - bun.enable = lib.mkEnableOption "bun runtime and toolchain"; + pnpm.enable = lib.mkEnableOption "pnpm package manager" // {default = cfg.programs.devtools.enable;}; + bun.enable = lib.mkEnableOption "bun runtime and toolchain" // {default = cfg.programs.devtools.enable;}; }; }; }; From 5fa90a02f075452ac6f0a4723a5e195d6872a60b Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Mon, 15 Jun 2026 21:17:28 +1000 Subject: [PATCH 37/50] additional changes that i need to undo later on --- hosts/anemone/default.nix | 17 +++++++++++++++++ modules/nixos/home/programs/cli/default.nix | 4 ++-- modules/shared/home/programs/cli/default.nix | 4 ++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/hosts/anemone/default.nix b/hosts/anemone/default.nix index 65880f9..866799f 100644 --- a/hosts/anemone/default.nix +++ b/hosts/anemone/default.nix @@ -23,6 +23,23 @@ in { nest = { system.hostName = "anemone"; services.enable = false; + programs = { + terminal.tools = { + enable = false; + bat.enable = true; + zoxide.enable = true; + }; + devtools.enable = false; + }; + }; + + # programs that were previously disabled via categories.*.enable = false + home-manager.users.willow = { + programs = { + yazi.enable = false; + lazygit.enable = false; + gitui.enable = false; + }; }; services.openssh = { diff --git a/modules/nixos/home/programs/cli/default.nix b/modules/nixos/home/programs/cli/default.nix index 3decff3..dd857dd 100644 --- a/modules/nixos/home/programs/cli/default.nix +++ b/modules/nixos/home/programs/cli/default.nix @@ -18,9 +18,9 @@ in { config = lib.mkIf cfg.programs.cli { home.packages = with pkgs; with inputs; - [ + (optionals cfg.programs.devtools.enable [ nix-output-monitor - ] + ]) ++ optionals cfg.desktop.enable [ brightnessctl ddcutil diff --git a/modules/shared/home/programs/cli/default.nix b/modules/shared/home/programs/cli/default.nix index 7c2a436..1aad1da 100644 --- a/modules/shared/home/programs/cli/default.nix +++ b/modules/shared/home/programs/cli/default.nix @@ -30,14 +30,14 @@ in { home.packages = with pkgs; with inputs; concatLists [ - [ + (optionals cfg.terminal.tools.enable [ catppuccin.packages."${pkgs.stdenv.hostPlatform.system}".catwalk catppuccin.packages."${pkgs.stdenv.hostPlatform.system}".whiskers just tldr typst - ] + ]) (optionals cfg.devtools.enable [ # TODO use categories pnpm From 393ae6ae1eb3e1f620d7f85d8266d228ec350e1c Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Mon, 15 Jun 2026 21:27:30 +1000 Subject: [PATCH 38/50] revert: "additional changes that i need to undo later on" This reverts commit 5fa90a02f075452ac6f0a4723a5e195d6872a60b. --- hosts/anemone/default.nix | 17 ----------------- modules/nixos/home/programs/cli/default.nix | 4 ++-- modules/shared/home/programs/cli/default.nix | 4 ++-- 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/hosts/anemone/default.nix b/hosts/anemone/default.nix index 866799f..65880f9 100644 --- a/hosts/anemone/default.nix +++ b/hosts/anemone/default.nix @@ -23,23 +23,6 @@ in { nest = { system.hostName = "anemone"; services.enable = false; - programs = { - terminal.tools = { - enable = false; - bat.enable = true; - zoxide.enable = true; - }; - devtools.enable = false; - }; - }; - - # programs that were previously disabled via categories.*.enable = false - home-manager.users.willow = { - programs = { - yazi.enable = false; - lazygit.enable = false; - gitui.enable = false; - }; }; services.openssh = { diff --git a/modules/nixos/home/programs/cli/default.nix b/modules/nixos/home/programs/cli/default.nix index dd857dd..3decff3 100644 --- a/modules/nixos/home/programs/cli/default.nix +++ b/modules/nixos/home/programs/cli/default.nix @@ -18,9 +18,9 @@ in { config = lib.mkIf cfg.programs.cli { home.packages = with pkgs; with inputs; - (optionals cfg.programs.devtools.enable [ + [ nix-output-monitor - ]) + ] ++ optionals cfg.desktop.enable [ brightnessctl ddcutil diff --git a/modules/shared/home/programs/cli/default.nix b/modules/shared/home/programs/cli/default.nix index 1aad1da..7c2a436 100644 --- a/modules/shared/home/programs/cli/default.nix +++ b/modules/shared/home/programs/cli/default.nix @@ -30,14 +30,14 @@ in { home.packages = with pkgs; with inputs; concatLists [ - (optionals cfg.terminal.tools.enable [ + [ catppuccin.packages."${pkgs.stdenv.hostPlatform.system}".catwalk catppuccin.packages."${pkgs.stdenv.hostPlatform.system}".whiskers just tldr typst - ]) + ] (optionals cfg.devtools.enable [ # TODO use categories pnpm From d797daefb051c478b56ca22cbffbf4129604ced4 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Wed, 17 Jun 2026 09:47:20 +1000 Subject: [PATCH 39/50] lib: mkProgramOption --- modules/lib/default.nix | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 modules/lib/default.nix diff --git a/modules/lib/default.nix b/modules/lib/default.nix new file mode 100644 index 0000000..59ccf73 --- /dev/null +++ b/modules/lib/default.nix @@ -0,0 +1,38 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkEnableOption optionalAttrs toUpper getAttrFromPath setAttrByPath; +in { + # lib.mkExtensible + mkProgramOption = { + name, + type, + scope ? [], # e.g. ["terminal" "shell"] + useGlobalEnable ? true, # whether to respect programs and cli/gui toggles + default ? + if useGlobalEnable + then (config.nest.programs.enable && config.nest.programs.${type}) + else false, + defaultText ? + if useGlobalEnable + then "nest.programs.enable and nest.programs.${type}" + else null, + }: + assert lib.asserts.assertOneOf "mkProgramOption" type ["gui" "cli"]; + let + optPath = scope ++ [name]; + enablePath = ["nest" "programs"] ++ optPath ++ ["enable"]; + in { + options = setAttrByPath optPath { + enable = + mkEnableOption "${toUpper type} program ${name}" + // ( + {inherit default;} + // optionalAttrs (defaultText != null) {inherit defaultText;} + ); + }; + enable = getAttrFromPath enablePath config; + }; +} From ff89d17eae962edf1c3d99d755b61e0cc10ff7d0 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Wed, 17 Jun 2026 09:47:34 +1000 Subject: [PATCH 40/50] anemone: disable programs --- hosts/anemone/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/hosts/anemone/default.nix b/hosts/anemone/default.nix index 65880f9..b532d82 100644 --- a/hosts/anemone/default.nix +++ b/hosts/anemone/default.nix @@ -23,6 +23,7 @@ in { nest = { system.hostName = "anemone"; services.enable = false; + programs.enable = false; }; services.openssh = { From a1fc95b1a1a7a3243c1435d5faf7040ba433b82d Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Fri, 19 Jun 2026 19:46:00 +1000 Subject: [PATCH 41/50] lib: mkProgramsOptions tree walker --- modules/darwin/default.nix | 4 +- modules/lib/default.nix | 73 +++++--- modules/nixos/default.nix | 1 + modules/shared/home/programs/cli/starship.nix | 4 +- modules/shared/options/profiles.nix | 4 +- modules/shared/options/programs.nix | 175 ++++++++++++------ 6 files changed, 171 insertions(+), 90 deletions(-) diff --git a/modules/darwin/default.nix b/modules/darwin/default.nix index d256d37..67852e2 100644 --- a/modules/darwin/default.nix +++ b/modules/darwin/default.nix @@ -2,12 +2,14 @@ inherit (config.nest.system) user; in { imports = [ - ../shared ./desktop ./home ./homebrew.nix ./nix ./services + + ../shared + ../lib ]; users.users.${user.name}.home = user.home; diff --git a/modules/lib/default.nix b/modules/lib/default.nix index 59ccf73..d0a56a1 100644 --- a/modules/lib/default.nix +++ b/modules/lib/default.nix @@ -3,36 +3,51 @@ lib, ... }: let - inherit (lib) mkEnableOption optionalAttrs toUpper getAttrFromPath setAttrByPath; + inherit (lib) mkEnableOption toUpper getAttrFromPath splitString; in { - # lib.mkExtensible - mkProgramOption = { - name, - type, - scope ? [], # e.g. ["terminal" "shell"] - useGlobalEnable ? true, # whether to respect programs and cli/gui toggles - default ? - if useGlobalEnable - then (config.nest.programs.enable && config.nest.programs.${type}) - else false, - defaultText ? - if useGlobalEnable - then "nest.programs.enable and nest.programs.${type}" - else null, - }: - assert lib.asserts.assertOneOf "mkProgramOption" type ["gui" "cli"]; - let - optPath = scope ++ [name]; - enablePath = ["nest" "programs"] ++ optPath ++ ["enable"]; - in { - options = setAttrByPath optPath { - enable = - mkEnableOption "${toUpper type} program ${name}" - // ( - {inherit default;} - // optionalAttrs (defaultText != null) {inherit defaultText;} - ); + _module.args.lib' = { + programType = let + base = type: { + programType = type; + description = null; + __functor = self: description: self // {inherit description;}; }; - enable = getAttrFromPath enablePath config; + in { + cli = base "cli"; + gui = base "gui"; }; + + mkProgramGroup = name: children: {inherit name children;}; + + mkProgramOptions = tree: let + get = path: getAttrFromPath (splitString "." path) config; + walk = ancestors: + builtins.mapAttrs ( + name: value: + if value ? programType + then let + typ = value.programType; + desc = value.description or "${toUpper typ} program ${name}"; + default = + config.nest.programs.enable + && config.nest.programs.${typ} + && lib.all (x: x) (map get ancestors); + defaultText = + "nest.programs.enable and nest.programs.${typ}" + + lib.optionalString (ancestors != []) + (" and " + lib.concatStringsSep " and " ancestors); + in + {enable = mkEnableOption desc // {inherit default defaultText;};} + // builtins.removeAttrs value ["programType" "description" "__functor"] + else if value ? children + then + {enable = mkEnableOption value.name;} + // walk (ancestors ++ ["nest.programs.${name}.enable"]) (value.children or {}) + else if builtins.isAttrs value + then walk ancestors value + else value + ); + in + walk [] tree; + }; } diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index 99ba987..41a2050 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -23,6 +23,7 @@ in { ./themes ../shared + ../lib ]; users.users.${user.name} = { diff --git a/modules/shared/home/programs/cli/starship.nix b/modules/shared/home/programs/cli/starship.nix index 7ff1b5f..ef9a48c 100644 --- a/modules/shared/home/programs/cli/starship.nix +++ b/modules/shared/home/programs/cli/starship.nix @@ -5,7 +5,6 @@ osConfig, ... }: let - cfg = osConfig.nest.programs; # ss = symbol: style: { # inherit symbol; # format = "[$symbol ](${style})"; @@ -15,8 +14,7 @@ format = "via [$symbol](${style})"; }; in { - config = lib.mkIf (cfg.cli - && cfg.terminal.shell.starship.enable) { + config = lib.mkIf osConfig.nest.programs.terminal.shell.starship.enable { programs.starship = { enable = true; enableBashIntegration = config.programs.bash.enable; diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index 2eba55d..9363e29 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -15,8 +15,8 @@ shell = { atuin.enable = true; starship.enable = true; - zsh.enable = lib.mkDefault true; - userShell = "zsh"; + # zsh.enable = lib.mkDefault true; TODO + # userShell = "zsh"; TODO }; tools.enable = lib.mkDefault true; }; diff --git a/modules/shared/options/programs.nix b/modules/shared/options/programs.nix index 677a165..56b5bee 100644 --- a/modules/shared/options/programs.nix +++ b/modules/shared/options/programs.nix @@ -1,71 +1,136 @@ { lib, + lib', config, ... }: let inherit (lib) mkEnableOption; + inherit (lib') mkProgramOptions programType mkProgramGroup; cfg = config.nest; in { - options.nest.programs = { - enable = mkEnableOption "programs" // {default = true;}; - cli = mkEnableOption "CLI programs" // {default = true;}; - gui = mkEnableOption "GUI programs" // {default = cfg.desktop.enable;}; + options.nest.programs = + { + enable = mkEnableOption "programs" // {default = true;}; + cli = mkEnableOption "CLI programs" // {default = true;}; + gui = mkEnableOption "GUI programs" // {default = cfg.desktop.enable;}; + } + // (with programType; + mkProgramOptions { + games = mkProgramGroup "games" {}; + media = mkProgramGroup "media and creative tools" {}; + privacy = mkProgramGroup "privacy programs" {}; + productivity = mkProgramGroup "productivity programs" {}; + social = mkProgramGroup "social programs" {}; - games.enable = mkEnableOption "games"; - media.enable = mkEnableOption "media and creative tools"; - privacy.enable = mkEnableOption "privacy programs"; - productivity.enable = mkEnableOption "productivity programs"; - social.enable = mkEnableOption "social programs"; + browsers = { + chromium = gui; + firefox = gui // {extensions.enable = mkEnableOption "firefox extensions";}; + floorp = gui; + helium = gui; + }; + + terminal = { + emulator = { + ghostty = gui; + alacritty = gui; + kitty = gui; + }; + shell = { + atuin = cli "shell history"; + starship = cli "terminal prompt"; + zsh = cli; + nushell = cli; + }; + tools = mkProgramGroup "modern terminal utilities" { + bat = cli "modern cat"; + eza = cli "modern ls"; + fzf = cli "fuzzy finder"; + ripgrep = cli "modern grep"; + zoxide = cli "modern cd"; + }; + }; - browsers = { - helium.enable = mkEnableOption "helium browser"; # TODO not in nixpkgs yet https://github.com/NixOS/nixpkgs/pull/498572 - firefox.enable = mkEnableOption "firefox browser"; - floorp.enable = mkEnableOption "floorp browser"; - chromium.enable = mkEnableOption "chromium browser"; - }; + devtools = mkProgramGroup "developer tools" { + haskell = mkProgramGroup "haskell tooling" {}; + nix = mkProgramGroup "nix tooling" {}; + openscad = mkProgramGroup "openscad tooling" {}; + python = mkProgramGroup "python tooling" {}; + rust = mkProgramGroup "rust tooling" {}; + typst = mkProgramGroup "typst tooling" {}; + zig = mkProgramGroup "zig tooling" {}; - terminal = { - emulator = { - ghostty.enable = mkEnableOption "ghostty"; - alacritty.enable = mkEnableOption "alacritty"; - kitty.enable = mkEnableOption "kitty"; - }; - shell = { - atuin.enable = mkEnableOption "atuin shell history"; - starship.enable = mkEnableOption "starship prompt"; - zsh.enable = mkEnableOption "zsh"; - nushell.enable = mkEnableOption "nushell"; - userShell = lib.mkOption { - type = lib.types.enum ["zsh" "nushell" "bash"]; - default = "zsh"; - description = "The primary interactive shell the user account."; + web = mkProgramGroup "web development tooling" { + pnpm = cli "pnpm package manager"; + bun = cli "bun runtime and toolchain"; + }; }; - }; - tools = { - enable = mkEnableOption "modern terminal utilities"; - bat.enable = mkEnableOption "bat" // {default = cfg.programs.terminal.tools.enable;}; - eza.enable = mkEnableOption "eza" // {default = cfg.programs.terminal.tools.enable;}; - fzf.enable = mkEnableOption "fzf" // {default = cfg.programs.terminal.tools.enable;}; - ripgrep.enable = mkEnableOption "ripgrep" // {default = cfg.programs.terminal.tools.enable;}; - zoxide.enable = mkEnableOption "zoxide" // {default = cfg.programs.terminal.tools.enable;}; - }; - }; + }); + + # # note: this isnt used its just for reference as i move to the new schema + # _ = { + # enable = mkEnableOption "programs" // {default = true;}; + # cli = mkEnableOption "CLI programs" // {default = true;}; + # gui = mkEnableOption "GUI programs" // {default = cfg.desktop.enable;}; + + # games.enable = mkEnableOption "games"; + # media.enable = mkEnableOption "media and creative tools"; + # privacy.enable = mkEnableOption "privacy programs"; + # productivity.enable = mkEnableOption "productivity programs"; + # social.enable = mkEnableOption "social programs"; + + # browsers = { + # helium.enable = mkEnableOption "helium browser"; # TODO not in nixpkgs yet https://github.com/NixOS/nixpkgs/pull/498572 + # firefox.enable = mkEnableOption "firefox browser"; + # floorp.enable = mkEnableOption "floorp browser"; + # chromium.enable = mkEnableOption "chromium browser"; + # }; + + # terminal = { + # emulator = { + # ghostty.enable = mkEnableOption "ghostty"; + # alacritty.enable = mkEnableOption "alacritty"; + # kitty.enable = mkEnableOption "kitty"; + # }; + # shell = { + # atuin.enable = mkEnableOption "atuin shell history"; + # starship = lib.mkProgramOption { + # name = "starship prompt"; + # type = "cli"; + # }; + # zsh.enable = mkEnableOption "zsh"; + # nushell.enable = mkEnableOption "nushell"; + # # this doesn't belong here, maybe in system.nix because this is just for programs! + # userShell = lib.mkOption { + # type = lib.types.enum ["zsh" "nushell" "bash"]; + # default = "zsh"; + # description = "The primary interactive shell the user account."; + # }; + # }; + # tools = { + # enable = mkEnableOption "modern terminal utilities"; + # bat.enable = mkEnableOption "bat" // {default = cfg.programs.terminal.tools.enable;}; + # eza.enable = mkEnableOption "eza" // {default = cfg.programs.terminal.tools.enable;}; + # fzf.enable = mkEnableOption "fzf" // {default = cfg.programs.terminal.tools.enable;}; + # ripgrep.enable = mkEnableOption "ripgrep" // {default = cfg.programs.terminal.tools.enable;}; + # zoxide.enable = mkEnableOption "zoxide" // {default = cfg.programs.terminal.tools.enable;}; + # }; + # }; - devtools = { - enable = mkEnableOption "developer tools"; + # devtools = { + # enable = mkEnableOption "developer tools"; - haskell.enable = mkEnableOption "haskell tooling" // {default = cfg.programs.devtools.enable;}; - nix.enable = mkEnableOption "nix tooling" // {default = cfg.programs.devtools.enable;}; - openscad.enable = mkEnableOption "openscad tooling" // {default = cfg.programs.devtools.enable;}; - python.enable = mkEnableOption "python tooling" // {default = cfg.programs.devtools.enable;}; - rust.enable = mkEnableOption "rust tooling" // {default = cfg.programs.devtools.enable;}; - typst.enable = mkEnableOption "typst tooling" // {default = cfg.programs.devtools.enable;}; - zig.enable = mkEnableOption "zig tooling" // {default = cfg.programs.devtools.enable;}; + # haskell.enable = mkEnableOption "haskell tooling" // {default = cfg.programs.devtools.enable;}; + # nix.enable = mkEnableOption "nix tooling" // {default = cfg.programs.devtools.enable;}; + # openscad.enable = mkEnableOption "openscad tooling" // {default = cfg.programs.devtools.enable;}; + # python.enable = mkEnableOption "python tooling" // {default = cfg.programs.devtools.enable;}; + # rust.enable = mkEnableOption "rust tooling" // {default = cfg.programs.devtools.enable;}; + # typst.enable = mkEnableOption "typst tooling" // {default = cfg.programs.devtools.enable;}; + # zig.enable = mkEnableOption "zig tooling" // {default = cfg.programs.devtools.enable;}; - web = { - pnpm.enable = lib.mkEnableOption "pnpm package manager" // {default = cfg.programs.devtools.enable;}; - bun.enable = lib.mkEnableOption "bun runtime and toolchain" // {default = cfg.programs.devtools.enable;}; - }; - }; - }; + # web = { + # pnpm.enable = lib.mkEnableOption "pnpm package manager" // {default = cfg.programs.devtools.enable;}; + # bun.enable = lib.mkEnableOption "bun runtime and toolchain" // {default = cfg.programs.devtools.enable;}; + # }; + # }; + # }; } From aa929fdb0c17ca9879400465db5f27086e1b2bbb Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Fri, 19 Jun 2026 20:32:16 +1000 Subject: [PATCH 42/50] move shell option --- modules/nixos/default.nix | 5 +-- modules/shared/options/profiles.nix | 12 +++-- modules/shared/options/programs.nix | 70 +---------------------------- modules/shared/options/system.nix | 5 +++ 4 files changed, 16 insertions(+), 76 deletions(-) diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index 41a2050..e861187 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -5,7 +5,6 @@ ... }: let inherit (config.nest.system) user; - inherit (config.nest.programs.terminal.shell) userShell; keys = [ "${self}/keys/anemone.pub" @@ -31,9 +30,9 @@ in { isNormalUser = true; extraGroups = ["networkmanager" "wheel" "dialout"]; shell = - if userShell == "zsh" + if user.shell == "zsh" then pkgs.zsh - else if userShell == "nushell" + else if user.shell == "nushell" then pkgs.nushell else pkgs.bash; diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index 9363e29..a935cad 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -13,14 +13,18 @@ cli = lib.mkDefault true; terminal = { shell = { - atuin.enable = true; - starship.enable = true; - # zsh.enable = lib.mkDefault true; TODO - # userShell = "zsh"; TODO + atuin.enable = lib.mkDefault true; + starship.enable = lib.mkDefault true; }; tools.enable = lib.mkDefault true; }; }; + system = { + user.shell = { + zsh.enable = lib.mkDefault true; + userShell = "zsh"; + }; + }; services = { enable = lib.mkDefault true; networking.enable = lib.mkDefault true; diff --git a/modules/shared/options/programs.nix b/modules/shared/options/programs.nix index 56b5bee..eb86d2f 100644 --- a/modules/shared/options/programs.nix +++ b/modules/shared/options/programs.nix @@ -26,7 +26,7 @@ in { chromium = gui; firefox = gui // {extensions.enable = mkEnableOption "firefox extensions";}; floorp = gui; - helium = gui; + helium = gui; # TODO not in nixpkgs yet }; terminal = { @@ -65,72 +65,4 @@ in { }; }; }); - - # # note: this isnt used its just for reference as i move to the new schema - # _ = { - # enable = mkEnableOption "programs" // {default = true;}; - # cli = mkEnableOption "CLI programs" // {default = true;}; - # gui = mkEnableOption "GUI programs" // {default = cfg.desktop.enable;}; - - # games.enable = mkEnableOption "games"; - # media.enable = mkEnableOption "media and creative tools"; - # privacy.enable = mkEnableOption "privacy programs"; - # productivity.enable = mkEnableOption "productivity programs"; - # social.enable = mkEnableOption "social programs"; - - # browsers = { - # helium.enable = mkEnableOption "helium browser"; # TODO not in nixpkgs yet https://github.com/NixOS/nixpkgs/pull/498572 - # firefox.enable = mkEnableOption "firefox browser"; - # floorp.enable = mkEnableOption "floorp browser"; - # chromium.enable = mkEnableOption "chromium browser"; - # }; - - # terminal = { - # emulator = { - # ghostty.enable = mkEnableOption "ghostty"; - # alacritty.enable = mkEnableOption "alacritty"; - # kitty.enable = mkEnableOption "kitty"; - # }; - # shell = { - # atuin.enable = mkEnableOption "atuin shell history"; - # starship = lib.mkProgramOption { - # name = "starship prompt"; - # type = "cli"; - # }; - # zsh.enable = mkEnableOption "zsh"; - # nushell.enable = mkEnableOption "nushell"; - # # this doesn't belong here, maybe in system.nix because this is just for programs! - # userShell = lib.mkOption { - # type = lib.types.enum ["zsh" "nushell" "bash"]; - # default = "zsh"; - # description = "The primary interactive shell the user account."; - # }; - # }; - # tools = { - # enable = mkEnableOption "modern terminal utilities"; - # bat.enable = mkEnableOption "bat" // {default = cfg.programs.terminal.tools.enable;}; - # eza.enable = mkEnableOption "eza" // {default = cfg.programs.terminal.tools.enable;}; - # fzf.enable = mkEnableOption "fzf" // {default = cfg.programs.terminal.tools.enable;}; - # ripgrep.enable = mkEnableOption "ripgrep" // {default = cfg.programs.terminal.tools.enable;}; - # zoxide.enable = mkEnableOption "zoxide" // {default = cfg.programs.terminal.tools.enable;}; - # }; - # }; - - # devtools = { - # enable = mkEnableOption "developer tools"; - - # haskell.enable = mkEnableOption "haskell tooling" // {default = cfg.programs.devtools.enable;}; - # nix.enable = mkEnableOption "nix tooling" // {default = cfg.programs.devtools.enable;}; - # openscad.enable = mkEnableOption "openscad tooling" // {default = cfg.programs.devtools.enable;}; - # python.enable = mkEnableOption "python tooling" // {default = cfg.programs.devtools.enable;}; - # rust.enable = mkEnableOption "rust tooling" // {default = cfg.programs.devtools.enable;}; - # typst.enable = mkEnableOption "typst tooling" // {default = cfg.programs.devtools.enable;}; - # zig.enable = mkEnableOption "zig tooling" // {default = cfg.programs.devtools.enable;}; - - # web = { - # pnpm.enable = lib.mkEnableOption "pnpm package manager" // {default = cfg.programs.devtools.enable;}; - # bun.enable = lib.mkEnableOption "bun runtime and toolchain" // {default = cfg.programs.devtools.enable;}; - # }; - # }; - # }; } diff --git a/modules/shared/options/system.nix b/modules/shared/options/system.nix index 3719618..231347e 100644 --- a/modules/shared/options/system.nix +++ b/modules/shared/options/system.nix @@ -25,6 +25,11 @@ in { type = types.str; default = "users"; }; + shell = mkOption { + type = lib.types.enum ["zsh" "nushell" "bash"]; + default = "zsh"; + description = "The primary interactive shell the user account."; + }; flakeDir = mkOption { type = types.path; default = "${cfg.system.user.home}/flake"; From 79a9d43d0338ab586c8ee7e345f116a1d0626a2f Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Fri, 19 Jun 2026 20:34:45 +1000 Subject: [PATCH 43/50] fix oopsies from merge --- hosts/starling/default.nix | 2 +- modules/shared/nix/age.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hosts/starling/default.nix b/hosts/starling/default.nix index cdd6d00..ae333ac 100644 --- a/hosts/starling/default.nix +++ b/hosts/starling/default.nix @@ -4,7 +4,7 @@ config, ... }: let - cfg = config.settings; + cfg = config.nest; in { imports = [ "${self}/modules/darwin" diff --git a/modules/shared/nix/age.nix b/modules/shared/nix/age.nix index 323760a..f5eb61a 100644 --- a/modules/shared/nix/age.nix +++ b/modules/shared/nix/age.nix @@ -5,7 +5,7 @@ config, ... }: let - inherit (config.settings.system) user; + inherit (config.nest.system) user; sshDir = user.home + "/.ssh"; From d689e95d6d68ec78a2309848a4695c8f2948ebd3 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Fri, 19 Jun 2026 21:10:14 +1000 Subject: [PATCH 44/50] do things --- modules/lib/default.nix | 15 +++++++++------ modules/shared/home/programs/cli/ripgrep.nix | 7 ++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/modules/lib/default.nix b/modules/lib/default.nix index d0a56a1..84674bb 100644 --- a/modules/lib/default.nix +++ b/modules/lib/default.nix @@ -3,7 +3,7 @@ lib, ... }: let - inherit (lib) mkEnableOption toUpper getAttrFromPath splitString; + inherit (lib) mkEnableOption toUpper getAttrFromPath splitString concatStringsSep; in { _module.args.lib' = { programType = let @@ -21,7 +21,7 @@ in { mkProgramOptions = tree: let get = path: getAttrFromPath (splitString "." path) config; - walk = ancestors: + walk = prefix: ancestors: builtins.mapAttrs ( name: value: if value ? programType @@ -40,14 +40,17 @@ in { {enable = mkEnableOption desc // {inherit default defaultText;};} // builtins.removeAttrs value ["programType" "description" "__functor"] else if value ? children - then + then let + fullPath = prefix ++ [name]; + ancestorStr = "nest.programs.${concatStringsSep "." fullPath}.enable"; + in {enable = mkEnableOption value.name;} - // walk (ancestors ++ ["nest.programs.${name}.enable"]) (value.children or {}) + // walk fullPath (ancestors ++ [ancestorStr]) (value.children or {}) else if builtins.isAttrs value - then walk ancestors value + then walk (prefix ++ [name]) ancestors value else value ); in - walk [] tree; + walk [] [] tree; }; } diff --git a/modules/shared/home/programs/cli/ripgrep.nix b/modules/shared/home/programs/cli/ripgrep.nix index 60959f9..5ac410a 100644 --- a/modules/shared/home/programs/cli/ripgrep.nix +++ b/modules/shared/home/programs/cli/ripgrep.nix @@ -2,11 +2,8 @@ lib, osConfig, ... -}: let - cfg = osConfig.nest.programs; -in { - config = lib.mkIf (cfg.cli - && cfg.terminal.tools.ripgrep.enable) { +}: { + config = lib.mkIf osConfig.nest.programs.terminal.tools.ripgrep.enable { programs.ripgrep = { enable = true; From a12b697545ba9fb7a33c052d1c7400fbd84f54d9 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Fri, 19 Jun 2026 21:23:26 +1000 Subject: [PATCH 45/50] fix incorrect option --- modules/shared/options/profiles.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index a935cad..70e8557 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -22,7 +22,7 @@ system = { user.shell = { zsh.enable = lib.mkDefault true; - userShell = "zsh"; + shell = "zsh"; }; }; services = { From 514cd0586011b63536193044b74281574dc06606 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Fri, 19 Jun 2026 21:28:59 +1000 Subject: [PATCH 46/50] fix oopsy again --- modules/shared/options/profiles.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/shared/options/profiles.nix b/modules/shared/options/profiles.nix index 70e8557..d93aec4 100644 --- a/modules/shared/options/profiles.nix +++ b/modules/shared/options/profiles.nix @@ -15,15 +15,13 @@ shell = { atuin.enable = lib.mkDefault true; starship.enable = lib.mkDefault true; + zsh.enable = lib.mkDefault true; }; tools.enable = lib.mkDefault true; }; }; system = { - user.shell = { - zsh.enable = lib.mkDefault true; - shell = "zsh"; - }; + user.shell = lib.mkDefault "zsh"; }; services = { enable = lib.mkDefault true; From f1abd436693dae9123a7594eb08284b505d60417 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sat, 20 Jun 2026 15:08:01 +1000 Subject: [PATCH 47/50] ci: replace magic-nix-cache with hestia --- .github/workflows/check.yml | 2 +- .github/workflows/diff.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index c779a3c..f35bcd5 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -52,7 +52,7 @@ jobs: with: github_access_token: ${{ secrets.GITHUB_TOKEN }} - - uses: DeterminateSystems/magic-nix-cache-action@v14 + - uses: Mic92/hestia@v1 - name: Validate Host run: | diff --git a/.github/workflows/diff.yml b/.github/workflows/diff.yml index 1eee960..5ed0ec6 100644 --- a/.github/workflows/diff.yml +++ b/.github/workflows/diff.yml @@ -49,7 +49,7 @@ jobs: with: github_access_token: ${{ secrets.GITHUB_TOKEN }} - - uses: DeterminateSystems/magic-nix-cache-action@v14 + - uses: Mic92/hestia@v1 - name: Generate Nix Diff uses: 42willow/nix-diff-action@main From c8e83eb9cb45cd0192ff70f09a7dc6e7bc609b82 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sat, 20 Jun 2026 16:19:01 +1000 Subject: [PATCH 48/50] some optional logging and comments --- modules/lib/default.nix | 57 ++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/modules/lib/default.nix b/modules/lib/default.nix index 84674bb..c056523 100644 --- a/modules/lib/default.nix +++ b/modules/lib/default.nix @@ -3,9 +3,17 @@ lib, ... }: let - inherit (lib) mkEnableOption toUpper getAttrFromPath splitString concatStringsSep; + inherit (lib) mkEnableOption toUpper getAttrFromPath concatStringsSep optionalString; + + traceLogs = false; + trace = msg: x: + if traceLogs + then builtins.trace msg x + else x; in { _module.args.lib' = { + # __functor allows a description to be optionally attached + # e.g. lib'.programType.cli "description" or lib'.programType.cli programType = let base = type: { programType = type; @@ -17,38 +25,63 @@ in { gui = base "gui"; }; + # group constructor (so the tree walker knows its a group) mkProgramGroup = name: children: {inherit name children;}; mkProgramOptions = tree: let - get = path: getAttrFromPath (splitString "." path) config; + # resolve a list-path against the final merged config + # e.g. ["nest" "programs" "shell" "git" "enable"] + get = path: getAttrFromPath path config; + + # walk the tree recursively + # + # prefix: + # relative path from tree root + # grows on every decent (groups + plain attrsets) + # e.g. ["terminal" "tools"] + # + # ancestors: + # paths of every parent group enable + # grows on group nodes (mkProgramGroup) + # e.g. [["nest" "programs" "terminal" "tools" "enable"]] + # + # plain attrsets don't add ancestors, but prefix still advances walk = prefix: ancestors: builtins.mapAttrs ( name: value: if value ? programType + # leaf node (program) then let typ = value.programType; desc = value.description or "${toUpper typ} program ${name}"; default = - config.nest.programs.enable - && config.nest.programs.${typ} - && lib.all (x: x) (map get ancestors); + config.nest.programs.enable # global master + && config.nest.programs.${typ} # type (e.g. nest.programs.cli) + && builtins.all (x: x) (map get ancestors); # all parent groups enabled defaultText = "nest.programs.enable and nest.programs.${typ}" - + lib.optionalString (ancestors != []) - (" and " + lib.concatStringsSep " and " ancestors); + + optionalString (ancestors != []) + (" and " + concatStringsSep " and " (map (concatStringsSep ".") ancestors)); in + trace "PROGRAM: name=${name}, prefix=[${concatStringsSep "," prefix}], ancestors=[${concatStringsSep "; " (map (concatStringsSep ".") ancestors)}], default=${builtins.toString default}" {enable = mkEnableOption desc // {inherit default defaultText;};} // builtins.removeAttrs value ["programType" "description" "__functor"] + # group node else if value ? children then let - fullPath = prefix ++ [name]; - ancestorStr = "nest.programs.${concatStringsSep "." fullPath}.enable"; + fullPath = prefix ++ [name]; # e.g. ["terminal" "tools" "ripgrep"] + ancestorPath = ["nest" "programs"] ++ fullPath ++ ["enable"]; in + trace "GROUP: name=${value.name}, fullPath=[${concatStringsSep "," fullPath}], ancestorPath=[${concatStringsSep "," ancestorPath}]" {enable = mkEnableOption value.name;} - // walk fullPath (ancestors ++ [ancestorStr]) (value.children or {}) + // walk fullPath (ancestors ++ [ancestorPath]) (value.children) + # plain attrset (structural grouping without option) else if builtins.isAttrs value - then walk (prefix ++ [name]) ancestors value - else value + then + trace "ATTRSET: name=${name}, prefix=[${concatStringsSep "," prefix}] recursing" + (walk (prefix ++ [name]) ancestors value) + # pass through unchanged + else trace "VALUE: name=${name} (non-attrs, passing through)" value ); in walk [] [] tree; From 725d5091ee10649b6d18667dd5e7f0fb1cf0e6a9 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Sat, 20 Jun 2026 16:20:32 +1000 Subject: [PATCH 49/50] improve variable names --- modules/lib/default.nix | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/lib/default.nix b/modules/lib/default.nix index c056523..5e55fa6 100644 --- a/modules/lib/default.nix +++ b/modules/lib/default.nix @@ -35,18 +35,18 @@ in { # walk the tree recursively # - # prefix: + # treePath: # relative path from tree root # grows on every decent (groups + plain attrsets) # e.g. ["terminal" "tools"] # - # ancestors: + # parentEnablePaths: # paths of every parent group enable # grows on group nodes (mkProgramGroup) # e.g. [["nest" "programs" "terminal" "tools" "enable"]] # - # plain attrsets don't add ancestors, but prefix still advances - walk = prefix: ancestors: + # plain attrsets don't add parentEnablePaths, but treePath still advances + walk = treePath: parentEnablePaths: builtins.mapAttrs ( name: value: if value ? programType @@ -57,29 +57,29 @@ in { default = config.nest.programs.enable # global master && config.nest.programs.${typ} # type (e.g. nest.programs.cli) - && builtins.all (x: x) (map get ancestors); # all parent groups enabled + && builtins.all (x: x) (map get parentEnablePaths); # all parent groups enabled defaultText = "nest.programs.enable and nest.programs.${typ}" - + optionalString (ancestors != []) - (" and " + concatStringsSep " and " (map (concatStringsSep ".") ancestors)); + + optionalString (parentEnablePaths != []) + (" and " + concatStringsSep " and " (map (concatStringsSep ".") parentEnablePaths)); in - trace "PROGRAM: name=${name}, prefix=[${concatStringsSep "," prefix}], ancestors=[${concatStringsSep "; " (map (concatStringsSep ".") ancestors)}], default=${builtins.toString default}" + trace "PROGRAM: name=${name}, treePath=[${concatStringsSep "," treePath}], parentEnablePaths=[${concatStringsSep "; " (map (concatStringsSep ".") parentEnablePaths)}], default=${builtins.toString default}" {enable = mkEnableOption desc // {inherit default defaultText;};} // builtins.removeAttrs value ["programType" "description" "__functor"] # group node else if value ? children then let - fullPath = prefix ++ [name]; # e.g. ["terminal" "tools" "ripgrep"] + fullPath = treePath ++ [name]; # e.g. ["terminal" "tools" "ripgrep"] ancestorPath = ["nest" "programs"] ++ fullPath ++ ["enable"]; in trace "GROUP: name=${value.name}, fullPath=[${concatStringsSep "," fullPath}], ancestorPath=[${concatStringsSep "," ancestorPath}]" {enable = mkEnableOption value.name;} - // walk fullPath (ancestors ++ [ancestorPath]) (value.children) + // walk fullPath (parentEnablePaths ++ [ancestorPath]) (value.children) # plain attrset (structural grouping without option) else if builtins.isAttrs value then - trace "ATTRSET: name=${name}, prefix=[${concatStringsSep "," prefix}] recursing" - (walk (prefix ++ [name]) ancestors value) + trace "ATTRSET: name=${name}, treePath=[${concatStringsSep "," treePath}] recursing" + (walk (treePath ++ [name]) parentEnablePaths value) # pass through unchanged else trace "VALUE: name=${name} (non-attrs, passing through)" value ); From 381886429e6714de80d3ae4e0bb02d5d379a0a04 Mon Sep 17 00:00:00 2001 From: willow <42willow@pm.me> Date: Mon, 22 Jun 2026 15:08:17 +1000 Subject: [PATCH 50/50] some thingies that i need to fix --- modules/lib/default.nix | 2 +- modules/shared/home/programs/cli/bun.nix | 3 +-- modules/shared/home/programs/cli/eza.nix | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/modules/lib/default.nix b/modules/lib/default.nix index 5e55fa6..5ec2fb1 100644 --- a/modules/lib/default.nix +++ b/modules/lib/default.nix @@ -5,7 +5,7 @@ }: let inherit (lib) mkEnableOption toUpper getAttrFromPath concatStringsSep optionalString; - traceLogs = false; + traceLogs = true; trace = msg: x: if traceLogs then builtins.trace msg x diff --git a/modules/shared/home/programs/cli/bun.nix b/modules/shared/home/programs/cli/bun.nix index 3ec33b5..c1c2311 100644 --- a/modules/shared/home/programs/cli/bun.nix +++ b/modules/shared/home/programs/cli/bun.nix @@ -5,8 +5,7 @@ }: let cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli - && cfg.devtools.web.bun.enable) { + config = { programs.bun.enable = true; }; } diff --git a/modules/shared/home/programs/cli/eza.nix b/modules/shared/home/programs/cli/eza.nix index b7dde13..7a41376 100644 --- a/modules/shared/home/programs/cli/eza.nix +++ b/modules/shared/home/programs/cli/eza.nix @@ -6,8 +6,7 @@ }: let cfg = osConfig.nest.programs; in { - config = lib.mkIf (cfg.cli - && cfg.terminal.tools.eza.enable) { + config = lib.mkIf (cfg.cli) { programs.eza = { enable = true; icons = "auto";