diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/importer.nix | 15 | ||||
| -rw-r--r-- | lib/mkFlakeOutputs.nix | 84 |
2 files changed, 99 insertions, 0 deletions
diff --git a/lib/importer.nix b/lib/importer.nix new file mode 100644 index 0000000..d74d6c9 --- /dev/null +++ b/lib/importer.nix @@ -0,0 +1,15 @@ +lib: dir: +let + nodes = builtins.readDir dir; + + shouldImport = + name: type: + let + path = dir + "/${name}"; + in + (type == "regular" && name != "default.nix" && lib.hasSuffix ".nix" name) + || (type == "directory" && builtins.pathExists (path + "/default.nix")); + + validNodes = lib.filterAttrs shouldImport nodes; +in +map (name: dir + "/${name}") (builtins.attrNames validNodes) diff --git a/lib/mkFlakeOutputs.nix b/lib/mkFlakeOutputs.nix new file mode 100644 index 0000000..20952d3 --- /dev/null +++ b/lib/mkFlakeOutputs.nix @@ -0,0 +1,84 @@ +# lib/mkFlakeOutputs.nix +# +# Single file exposing all system/home builder functions. +# Partially apply once in flake.nix with flake-level deps, +# then call whichever helper you need. +{ + nixpkgs, + home-manager, + inputs, +}: +let + importer = import ./importer.nix nixpkgs.lib; + + # Shared: build a NixOS system derivation + buildSystem = + { system, hostname, user, systemState }: + let + hostConfig = import ../hosts/${hostname} { inherit user systemState hostname; }; + in + nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { inherit inputs user hostname systemState importer; }; + modules = [ hostConfig ]; + }; + + # Shared: build a standalone Home Manager derivation + buildHome = + { system, user, systemState }: + let + homeConfig = import ../users/${user} { inherit user systemState; }; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + }; + in + home-manager.lib.homeManagerConfiguration { + inherit pkgs; + extraSpecialArgs = { inherit inputs importer; }; + modules = [ + homeConfig + # inputs.beeb5kvim.homeModules.default + ]; + }; +in +{ + # NixOS + standalone Home Manager (two separate outputs) + mkSystemWithHM = + { system, hostname, user, systemState }: + { + nixosConfigurations.${hostname} = buildSystem { inherit system hostname user systemState; }; + homeConfigurations.${user} = buildHome { inherit system user systemState; }; + }; + + # NixOS with Home Manager as a NixOS module (single output, HM is baked in) + mkSystemWithHMasModule = + { system, hostname, user, systemState }: + let + hostConfig = import ../hosts/${hostname} { inherit user systemState hostname; }; + homeConfig = import ../users/${user} { inherit user systemState; }; + in + { + nixosConfigurations.${hostname} = nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { inherit inputs user hostname systemState importer; }; + modules = [ + hostConfig + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { inherit inputs importer; }; + home-manager.users.${user} = homeConfig; + } + ]; + }; + }; + + # NixOS only, no Home Manager at all + mkSystem = + { system, hostname, user, systemState }: + { + nixosConfigurations.${hostname} = buildSystem { inherit system hostname user systemState; }; + }; +} |
