# # These are the different profiles that can be used when building NixOS. # # flake.nix # └─ ./hosts # ├─ default.nix * # ├─ configuration_common.nix # ├─ configuration_desktop.nix # ├─ configuration_server.nix # ├─ home.nix # └─ ./desktop OR ./laptop OR ./vm # ├─ ./default.nix # └─ ./home.nix # { lib, inputs, nixpkgs, nixpkgs-unstable, nixos-hardware, home-manager, home-manager-unstable, agenix, jovian-nixos, microvm, impermanence, lanzaboote, ... }: let # Default user — desktop hosts share this; server hosts may override per-host # by passing a different `user` value in their own specialArgs block. defaultUser = "kabbone"; location = builtins.getEnv "HOME" + "/.setup"; system = "x86_64-linux"; pkgs-unstable = import nixpkgs-unstable { inherit system; config.allowUnfree = true; }; pkgs-kabbone = import ../packages { inherit system; pkgs = import nixpkgs { inherit system; config.allowUnfree = true; }; }; pkgs = import nixpkgs { inherit system; config.allowUnfree = true; # Prefer host-specific overlays over a global one here. # Set nixpkgs.overlays inside the host's own module (e.g. hosts/desktop/default.nix) # so only that host's pkgs is affected. Packages can be imported inline — # no specialArgs needed. See hosts/desktop/default.nix for an example. }; # Helper: returns [hm-module, config-attrset] for the modules list. # hm - the home-manager flake input to use (stable or unstable) # user - the username whose home-manager config to build # hmImports - list of home.nix paths for this host mkHM = hm: user: hmImports: [ hm.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.extraSpecialArgs = {inherit user;}; home-manager.users.${user}.imports = hmImports; } ]; in { hades = lib.nixosSystem { # Desktop profile inherit system; specialArgs = { inherit inputs location nixos-hardware agenix microvm nixpkgs lanzaboote; user = defaultUser; }; modules = [ agenix.nixosModules.default microvm.nixosModules.host lanzaboote.nixosModules.lanzaboote ./desktop # myDesktop options set inside ./configuration_common.nix ../modules/hardware/remoteBuilder.nix nixos-hardware.nixosModules.common-cpu-amd nixos-hardware.nixosModules.common-gpu-amd nixos-hardware.nixosModules.common-pc-ssd ] ++ (mkHM home-manager defaultUser [./home.nix ./desktop/home.nix]); }; lifebook = lib.nixosSystem { # Laptop profile inherit system; specialArgs = { inherit inputs location nixos-hardware agenix lanzaboote; user = defaultUser; }; modules = [ agenix.nixosModules.default lanzaboote.nixosModules.lanzaboote ./lifebook # myDesktop options set inside ./configuration_common.nix nixos-hardware.nixosModules.common-cpu-intel nixos-hardware.nixosModules.common-pc-ssd ] ++ (mkHM home-manager defaultUser [./home.nix ./lifebook/home.nix]); }; steamdeck = nixpkgs-unstable.lib.nixosSystem { # steamdeck profile inherit system; specialArgs = { inherit inputs location nixos-hardware agenix jovian-nixos lanzaboote; user = defaultUser; }; modules = [ agenix.nixosModules.default jovian-nixos.nixosModules.default lanzaboote.nixosModules.lanzaboote ./steamdeck ./configuration_common.nix ] ++ (mkHM home-manager-unstable defaultUser [./home.nix ./steamdeck/home.nix]); }; kabtop = lib.nixosSystem { # Server profile inherit system; specialArgs = { inherit inputs location nixos-hardware agenix impermanence; user = defaultUser; }; modules = [ agenix.nixosModules.default microvm.nixosModules.host ./kabtop ./configuration_common.nix nixos-hardware.nixosModules.common-cpu-amd nixos-hardware.nixosModules.common-pc-ssd ] ++ (mkHM home-manager defaultUser [./home_server.nix ./kabtop/home.nix]); }; nasbak = lib.nixosSystem { # Server profile inherit system; specialArgs = { inherit inputs location nixos-hardware agenix; user = defaultUser; }; modules = [ agenix.nixosModules.default ./nasbackup ./configuration_common.nix nixos-hardware.nixosModules.common-cpu-intel nixos-hardware.nixosModules.common-pc-ssd ] ++ (mkHM home-manager defaultUser [./home_server.nix ./nasbackup/home.nix]); }; jupiter = lib.nixosSystem { # Server profile inherit system; specialArgs = { inherit inputs location nixos-hardware agenix; user = defaultUser; }; modules = [ agenix.nixosModules.default ./jupiter ./configuration_common.nix nixos-hardware.nixosModules.common-cpu-intel nixos-hardware.nixosModules.common-pc-ssd ] ++ (mkHM home-manager defaultUser [./home_server.nix ./jupiter/home.nix]); }; kabtopci = lib.nixosSystem { # Server profile inherit system; specialArgs = { inherit inputs location nixos-hardware agenix impermanence; user = defaultUser; }; modules = [ agenix.nixosModules.default microvm.nixosModules.host ./kabtopci ./configuration_common.nix nixos-hardware.nixosModules.common-pc-ssd ] ++ (mkHM home-manager defaultUser [./home_server.nix ./kabtopci/home.nix]); }; kubemaster-1 = lib.nixosSystem { # Server profile inherit system; specialArgs = { inherit inputs location nixos-hardware agenix impermanence; user = defaultUser; }; modules = [ agenix.nixosModules.default microvm.nixosModules.host ./kubemaster-1 ./configuration_common.nix nixos-hardware.nixosModules.common-cpu-intel nixos-hardware.nixosModules.common-pc-ssd ] ++ (mkHM home-manager defaultUser [./home_server.nix ./kubemaster-1/home.nix]); }; dmz = lib.nixosSystem { # Server profile inherit system; specialArgs = { inherit inputs location nixos-hardware agenix impermanence; user = defaultUser; }; modules = [ agenix.nixosModules.default microvm.nixosModules.host ./dmz ./configuration_common.nix nixos-hardware.nixosModules.common-pc-ssd ] ++ (mkHM home-manager defaultUser [./home_server.nix ./dmz/home.nix]); }; # vm = lib.nixosSystem { # VM profile # inherit system; # specialArgs = { inherit inputs user location; }; # modules = [ # ./vm # ./configuration.nix # # (mkHM home-manager [ ./home.nix ./vm/home.nix ]) # ]; # }; }