diff --git a/home/hosts/andromache/default.nix b/home/hosts/andromache/default.nix index d3b00c85..f18f192b 100644 --- a/home/hosts/andromache/default.nix +++ b/home/hosts/andromache/default.nix @@ -8,31 +8,6 @@ { imports = [ ../../modules - ../../modules/3d - ../../modules/ai-tools - ../../modules/anki - ../../modules/audio - ../../modules/browser - ../../modules/cloud - ../../modules/comms - ../../modules/desktop/niri - ../../modules/devenv - ../../modules/direnv - ../../modules/git - ../../modules/k8s/k9s.nix - ../../modules/keepassxc - ../../modules/music - ../../modules/nvim - ../../modules/pandoc - ../../modules/photography - ../../modules/secrets - ../../modules/shell - ../../modules/ssh - ../../modules/taskwarrior - ../../modules/terminal - ../../modules/torrenting - ../../modules/yubikey - ../../modules/zk ]; home = { diff --git a/home/hosts/astyanax/default.nix b/home/hosts/astyanax/default.nix index 6e4e94a3..51fff476 100644 --- a/home/hosts/astyanax/default.nix +++ b/home/hosts/astyanax/default.nix @@ -7,29 +7,6 @@ { imports = [ ../../modules - ../../modules/3d - ../../modules/ai-tools - ../../modules/anki - ../../modules/audio - ../../modules/browser - ../../modules/cloud - ../../modules/comms - ../../modules/desktop/niri - ../../modules/devenv - ../../modules/direnv - ../../modules/git - ../../modules/k8s/k9s.nix - ../../modules/keepassxc - ../../modules/music - ../../modules/nfc - ../../modules/nvim - ../../modules/pandoc - ../../modules/secrets - ../../modules/shell - ../../modules/ssh - ../../modules/taskwarrior - ../../modules/terminal - ../../modules/yubikey ]; home = { @@ -48,34 +25,33 @@ claude-code.enable = true; opencode.enable = true; }; - desktop.niri.enable = true; + anki.enable = true; + audio.enable = true; browser.enable = true; browser.primary = "librewolf"; cloud.hetzner.enable = true; comms.signal.enable = true; + desktop.niri.enable = true; + devenv.enable = true; + direnv.enable = true; git.enable = true; git.github.enable = true; + k8s.k9s.enable = true; + keepassxc.enable = true; + music.enable = true; + my.yubikey.enable = true; + nfc.enable = true; + nvim.enable = true; + pandoc.enable = true; + secrets.enable = true; shell = { enable = true; bash.aliases.lang-js = true; bash.addBinToPath = true; }; - anki.enable = true; - k8s.k9s.enable = true; - secrets.enable = true; - taskwarrior.enable = true; - secrets.enable = true; - my.yubikey.enable = true; - audio.enable = true; ssh.enable = true; - music.enable = true; + taskwarrior.enable = true; terminal.enable = true; - devenv.enable = true; - keepassxc.enable = true; - direnv.enable = true; - nvim.enable = true; - nfc.enable = true; - pandoc.enable = true; programs = { home-manager.enable = true; diff --git a/home/hosts/work/default.nix b/home/hosts/work/default.nix index 3e0df315..798aaa96 100644 --- a/home/hosts/work/default.nix +++ b/home/hosts/work/default.nix @@ -9,35 +9,6 @@ imports = [ inputs.sops-nix.homeManagerModules.sops ../../modules - ../../modules/ai-tools - ../../modules/anki - ../../modules/browser - ../../modules/bruno - ../../modules/cloud - ../../modules/comms - ../../modules/database - ../../modules/dconf - ../../modules/desktop/niri - ../../modules/devenv - ../../modules/direnv - ../../modules/docker - ../../modules/git - ../../modules/go - ../../modules/infra - ../../modules/k8s - ../../modules/k8s/k9s.nix - ../../modules/keepassxc - ../../modules/music - ../../modules/nodejs - ../../modules/nvim - ../../modules/pandoc - ../../modules/secrets - ../../modules/shell - ../../modules/stylix - ../../modules/taskwarrior - ../../modules/ticketing - ../../modules/terminal - ../../modules/vscode ]; sops.age.keyFile = "${config.home.homeDirectory}/.config/sops/age/keys.txt"; @@ -63,50 +34,50 @@ defaultWrapper = "mesa"; }; - desktop.niri.enable = true; - browser = { - enable = true; - primary = "firefox"; - secondary = "chromium"; - }; - devenv.enable = true; - music.enable = true; - terminal.enable = true; - keepassxc.enable = true; - direnv.enable = true; - nvim.enable = true; - my.dconf.enable = true; - pandoc.enable = true; - cloud.azure.enable = true; - comms.signal.enable = true; - comms.teams.enable = true; ai-tools = { claude-code.enable = true; tirith.enable = true; opencode.enable = true; }; + anki.enable = true; + browser = { + enable = true; + primary = "firefox"; + secondary = "chromium"; + }; + bruno.enable = true; + cloud.azure.enable = true; + comms.signal.enable = true; + comms.teams.enable = true; database = { mssql.enable = true; postgresql.enable = true; redis.enable = true; }; - anki.enable = true; - taskwarrior.enable = true; - k8s.enable = true; - shell.enable = true; - my.stylix.enable = true; + desktop.niri.enable = true; + devenv.enable = true; + direnv.enable = true; + docker.enable = true; git = { enable = true; github.enable = true; gitlab.enable = true; }; + go.enable = true; + k8s.enable = true; + keepassxc.enable = true; + music.enable = true; + my.dconf.enable = true; + my.stylix.enable = true; + nvim.enable = true; + pandoc.enable = true; + shell.enable = true; + taskwarrior.enable = true; + terminal.enable = true; + infra.enable = true; + nodejs.enable = true; secrets.enable = true; secrets.vault.enable = true; - bruno.enable = true; - docker.enable = true; - infra.enable = true; - go.enable = true; - nodejs.enable = true; ticketing.enable = true; vscode.enable = true; diff --git a/home/modules/default.nix b/home/modules/default.nix index 20555de1..72420a66 100644 --- a/home/modules/default.nix +++ b/home/modules/default.nix @@ -5,52 +5,40 @@ ... }: -let - moduleDirs = lib.filterAttrs (_: v: v == "directory") (builtins.readDir ./.); - dirHasEnableOption = - name: +{ + imports = let - nixFiles = lib.filterAttrs (n: v: v == "regular" && lib.hasSuffix ".nix" n) ( - builtins.readDir ./${name} - ); + dirs = lib.attrNames (lib.filterAttrs (_: v: v == "directory") (builtins.readDir ./.)); + hasDef = name: builtins.pathExists ./${name}/default.nix; in - !(builtins.pathExists ./${name}/default.nix) - || lib.any (f: lib.hasInfix "mkEnableOption" (builtins.readFile ./${name}/${f})) ( - builtins.attrNames nixFiles - ); - withoutEnableOption = builtins.attrNames ( - lib.filterAttrs (name: _: !dirHasEnableOption name) moduleDirs - ); -in -lib.throwIf (withoutEnableOption != [ ]) - "home modules missing enable option: ${lib.concatStringsSep ", " withoutEnableOption}" - { - options = { - host.username = lib.mkOption { - type = lib.types.str; - default = config.home.username; - }; + map (name: ./${name}) (builtins.filter hasDef dirs); - nixgl.wrap = lib.mkOption { - type = lib.types.functionTo lib.types.package; - default = if config.lib ? nixGL then config.lib.nixGL.wrap else lib.id; - readOnly = true; - }; - - wrapApp = lib.mkOption { - type = lib.types.raw; - default = - pkg: flags: - if config.lib ? nixGL then - pkg.overrideAttrs (old: { - nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.makeWrapper ]; - postInstall = (old.postInstall or "") + '' - wrapProgram $out/bin/${pkg.meta.mainProgram} --add-flags "${flags}" - ''; - }) - else - pkg; - readOnly = true; - }; + options = { + host.username = lib.mkOption { + type = lib.types.str; + default = config.home.username; }; - } + + nixgl.wrap = lib.mkOption { + type = lib.types.functionTo lib.types.package; + default = if config.lib ? nixGL then config.lib.nixGL.wrap else lib.id; + readOnly = true; + }; + + wrapApp = lib.mkOption { + type = lib.types.raw; + default = + pkg: flags: + if config.lib ? nixGL then + pkg.overrideAttrs (old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.makeWrapper ]; + postInstall = (old.postInstall or "") + '' + wrapProgram $out/bin/${pkg.meta.mainProgram} --add-flags "${flags}" + ''; + }) + else + pkg; + readOnly = true; + }; + }; +} diff --git a/hosts/andromache/default.nix b/hosts/andromache/default.nix index 00c74ab1..6281946e 100644 --- a/hosts/andromache/default.nix +++ b/hosts/andromache/default.nix @@ -17,51 +17,57 @@ in inputs.nixos-hardware.nixosModules.common-cpu-intel inputs.nixos-hardware.nixosModules.common-pc inputs.nixos-hardware.nixosModules.common-pc-ssd - ../../modules/common - ../../modules/boot/bootloader.nix + ../../modules (import ../../modules/disko/zfs-encrypted-root.nix { inherit lib config; device = "/dev/nvme1n1"; }) - ../../modules/ai-tools - ../../modules/anki - ../../modules/audio - ../../modules/backups - ../../modules/bluetooth - ../../modules/desktops/niri - ../../modules/docker - ../../modules/firewall - ../../modules/fonts - ../../modules/gaming - ../../modules/git - ../../modules/hcloud - ../../modules/keyboard - ../../modules/localization - ../../modules/networking - ../../modules/nvidia - ../../modules/secrets - ../../modules/ssh - ../../modules/storage - ../../modules/stylix - ../../modules/syncthing - ../../modules/tailscale - ../../modules/taskwarrior - ../../modules/users - ../../modules/wol - ../../modules/yubikey ]; home-manager.users.${config.host.username} = import ../../home/hosts/${config.host.name}; - secrets.nixSigningKey.enable = true; - - restic-backup.enable = true; - tailscale.enable = true; + "ai-tools".enable = true; + anki.enable = true; + audio.enable = true; + bluetooth.enable = true; + bootloader.enable = true; + desktop.niri.enable = true; + firewall = { + enable = true; + allowedTCPPorts = [ 22 ]; + }; + gaming.enable = true; + git.enable = true; + keyboard.enable = true; + localization.enable = true; + my = { + fonts.enable = true; + stylix.enable = true; + users.enable = true; + yubikey = { + enable = true; + pam.enable = false; + }; + }; desktop.ly.enable = true; - docker.enable = true; - hcloud.enable = true; + networking.enable = true; + nvidia.enable = true; + restic-backup.enable = true; + secrets = { + enable = true; + nixSigningKey.enable = true; + }; + ssh.enable = true; + storage.enable = true; + syncthing.enable = true; + tailscale.enable = true; + taskwarrior.enable = true; + wol = { + enable = true; + interfaces.eno1 = { inherit (wolInterfaces.eno1) macAddress; }; + }; disko.devices = { disk.data = { @@ -91,25 +97,10 @@ in inputs.colmena.packages.${pkgs.stdenv.hostPlatform.system}.colmena ]; - my.yubikey = { - enable = true; - pam.enable = false; - }; - services.locate = { enable = true; package = pkgs.plocate; }; networking.hostId = "80eef97e"; - - wol = { - enable = true; - interfaces.eno1 = { inherit (wolInterfaces.eno1) macAddress; }; - }; - - firewall = { - enable = true; - allowedTCPPorts = [ 22 ]; - }; } diff --git a/hosts/astyanax/default.nix b/hosts/astyanax/default.nix index 1e20bedb..5f18bcb7 100644 --- a/hosts/astyanax/default.nix +++ b/hosts/astyanax/default.nix @@ -5,9 +5,7 @@ pkgs, ... }: -let - wolInterfaces = import ../andromache/wol-interfaces.nix; -in + { imports = [ inputs.disko.nixosModules.disko @@ -16,47 +14,50 @@ in inputs.nixos-hardware.nixosModules.common-pc inputs.nixos-hardware.nixosModules.common-pc-ssd # inputs.nixos-hardware.nixosModules.lenovo-thinkpad-e14-intel-gen7 (not available yet?) - inputs.sops-nix.nixosModules.sops - ../../modules/common - ../../modules/boot/bootloader.nix + ../../modules (import ../../modules/disko/zfs-encrypted-root.nix { inherit lib config; device = "/dev/nvme0n1"; }) - ../../modules/ai-tools - ../../modules/anki - ../../modules/audio - ../../modules/backups - ../../modules/bluetooth - ../../modules/desktops/niri - ../../modules/docker - ../../modules/firewall - ../../modules/fonts - ../../modules/git - ../../modules/keyboard - ../../modules/localization - ../../modules/networking - ../../modules/nfc - ../../modules/secrets - ../../modules/ssh - ../../modules/storage - ../../modules/stylix - ../../modules/tailscale - ../../modules/taskwarrior - ../../modules/users - ../../modules/yubikey ]; home-manager.users.${config.host.username} = import ../../home/hosts/${config.host.name}; - secrets.nixSigningKey.enable = true; + "ai-tools".enable = true; + anki.enable = true; + audio.enable = true; + bluetooth.enable = true; + bootloader.enable = true; + desktop.niri.enable = true; + git.enable = true; + keyboard.enable = true; + localization.enable = true; + my = { + fonts.enable = true; + stylix.enable = true; + users.enable = true; + yubikey = { + enable = true; + pam.enable = false; + }; + }; + networking.enable = true; + secrets.enable = true; + ssh.enable = true; + storage.enable = true; + taskwarrior.enable = true; + secrets.nixSigningKey.enable = true; restic-backup.enable = true; tailscale.enable = true; + desktop.ly.enable = true; docker.enable = true; nfc.enable = true; - desktop.ly.enable = true; - audio.automation.enable = true; + + firewall = { + enable = true; + allowedTCPPorts = [ 22 ]; + }; hardware = { cpu.intel.updateMicrocode = true; @@ -90,18 +91,8 @@ in hostId = "80eef97e"; }; - firewall = { - enable = true; - allowedTCPPorts = [ 22 ]; - }; - boot.binfmt.emulatedSystems = [ "aarch64-linux" ]; - my.yubikey = { - enable = true; - pam.enable = false; - }; - services = { fwupd.enable = true; locate = { diff --git a/hosts/eetion-02/default.nix b/hosts/eetion-02/default.nix index c6ea12f6..667f0f79 100644 --- a/hosts/eetion-02/default.nix +++ b/hosts/eetion-02/default.nix @@ -7,10 +7,11 @@ imports = [ ./hard.nix ./host.nix - ../../modules/common - ../../modules/ssh + ../../modules ]; + ssh.enable = true; + boot = { kernelParams = [ "console=ttyS1,115200n8" diff --git a/hosts/eetion/default.nix b/hosts/eetion/default.nix index 415165e8..0685e1db 100644 --- a/hosts/eetion/default.nix +++ b/hosts/eetion/default.nix @@ -7,12 +7,10 @@ imports = [ ./hard.nix ./host.nix - ../../modules/common - ../../modules/ssh - ../../modules/tailscale - # ../../modules/uptime-kuma + ../../modules ]; + ssh.enable = true; tailscale.enable = true; boot.loader = { diff --git a/hosts/hecuba/default.nix b/hosts/hecuba/default.nix index 9db565c5..9731ae54 100644 --- a/hosts/hecuba/default.nix +++ b/hosts/hecuba/default.nix @@ -12,14 +12,14 @@ inputs.disko.nixosModules.disko ./hard.nix ./host.nix - ../../modules/common - ../../modules/ssh - ../../modules/docker + ../../modules ]; - networking.hostName = config.host.name; + ssh.enable = true; docker.enable = true; + networking.hostName = config.host.name; + fileSystems."/" = { device = "/dev/disk/by-label/nixos"; fsType = "ext4"; diff --git a/hosts/vm/default.nix b/hosts/vm/default.nix index 1b24563b..b21f4eeb 100644 --- a/hosts/vm/default.nix +++ b/hosts/vm/default.nix @@ -9,27 +9,30 @@ ./hard.nix ./host.nix ./disk.nix - ../../modules/common - ../../modules/anki - ../../modules/audio - ../../modules/boot/bootloader.nix - ../../modules/fonts - ../../modules/git - ../../modules/keyboard - ../../modules/localization - ../../modules/networking - ../../modules/ai-tools - ../../modules/ssh - ../../modules/storage - ../../modules/stylix - ../../modules/secrets - ../../modules/taskwarrior - ../../modules/users - ../../modules/x + ../../modules ]; home-manager.users.${config.host.username} = import ../../home/hosts/vm; + "ai-tools".enable = true; + anki.enable = true; + audio.enable = true; + bootloader.enable = true; + desktop.x.enable = true; + git.enable = true; + keyboard.enable = true; + localization.enable = true; + my = { + fonts.enable = true; + stylix.enable = true; + users.enable = true; + }; + networking.enable = true; + secrets.enable = true; + ssh.enable = true; + storage.enable = true; + taskwarrior.enable = true; + disko = { devices.disk.main = { device = "/dev/vda"; diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 00000000..17a0d473 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,10 @@ +{ lib, ... }: + +{ + imports = + let + dirs = lib.attrNames (lib.filterAttrs (_: v: v == "directory") (builtins.readDir ./.)); + hasDef = name: builtins.pathExists ./${name}/default.nix; + in + map (name: ./${name}) (builtins.filter hasDef dirs); +} diff --git a/modules/desktops/default.nix b/modules/desktops/default.nix new file mode 100644 index 00000000..bb1213da --- /dev/null +++ b/modules/desktops/default.nix @@ -0,0 +1,8 @@ +{ ... }: + +{ + imports = [ + ./gnome + ./niri + ]; +}