summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/importer.nix15
-rw-r--r--lib/mkFlakeOutputs.nix84
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; };
+ };
+}