From 159801e7646b76ed6a6df0020b945b983526e624 Mon Sep 17 00:00:00 2001 From: geekiot Date: Fri, 26 Sep 2025 21:57:05 +0500 Subject: [PATCH] add (lib): make the function to create nixos system --- lib/config.nix | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 lib/config.nix diff --git a/lib/config.nix b/lib/config.nix new file mode 100644 index 0000000..601c7ad --- /dev/null +++ b/lib/config.nix @@ -0,0 +1,88 @@ +{ + inputs, + nixpkgs, + nixpkgs-old, + nixpkgs-latest, +}: +deviceName: +{ + hostName, + userName, + additionalOverlays ? [ ], + systemArch ? builtins.currentSystem, +}: +let + inherit (nixpkgs) lib; + + customFunctions = import ./utils.nix { inherit lib; }; + + baseOverlays = + import ../overlays { + inherit + systemArch + nixpkgs-old + nixpkgs-latest + packagesConfig + ; + } + |> builtins.attrValues; + overlays = baseOverlays ++ additionalOverlays; + + DeviceConfig = ../devices/${deviceName}; + HostConfig = ../users/${hostName}/host; + HomeConfig = ../users/${userName}/home; + + userData = import ../users/${userName}/data.nix { + inherit + deviceName + hostName + userName + systemArch + ; + }; + + userPackagesConfig = import ../users/${hostName}/packages-config.nix { inherit lib; }; + + additionalArgs = { inherit inputs customFunctions userData; }; + + sops = { + defaultSopsFormat = "yaml"; + defaultSopsFile = ../secrets/main.yaml; + age.keyFile = "${userData.paths.sopsKeyFile}"; + }; +in +lib.nixosSystem { + system = systemArch; + specialArgs = additionalArgs; + + modules = [ + DeviceConfig + HostConfig + + { + nixpkgs = { + inherit overlays; + config = userPackagesConfig; + }; + } + + inputs.home-manager.nixosModules.home-manager + { + home-manager = { + users.${userName} = import HomeConfig; + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = additionalArgs; + sharedModules = [ + inputs.sops-nix.homeManagerModules.sops + ]; + }; + } + + inputs.sops-nix.nixosModules.sops + { + inherit sops; + home-manager.users.${userName} = { inherit sops; }; + } + ]; +}