This repository has been archived on 2025-10-08. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
nixos-config/lib/config.nix
2025-09-27 15:35:36 +05:00

99 lines
2 KiB
Nix

{
inputs,
nixpkgs,
nixpkgs-old,
nixpkgs-latest,
}:
deviceName:
{
hostName,
userName,
additionalOverlays ? [ ],
systemArch ? builtins.currentSystem,
}:
let
inherit (nixpkgs) lib;
DeviceCustomOptions = ../options/device;
HostCustomOptions = ../options/host;
HomeCustomOptions = ../options/home;
DeviceConfig = ../devices/${deviceName};
HostConfig = ../users/${hostName}/host;
HomeConfig = ../users/${userName}/home;
customFunctions = import ./utils.nix { inherit lib; };
baseOverlays =
import ../overlays {
inherit
systemArch
nixpkgs-old
nixpkgs-latest
packagesConfig
;
}
|> builtins.attrValues;
overlays = baseOverlays ++ additionalOverlays;
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 = [
DeviceCustomOptions
HostCustomOptions
CustomOptions
DeviceConfig
HostConfig
{
nixpkgs = {
inherit overlays;
config = userPackagesConfig;
};
networking.hostName = hostName;
}
inputs.home-manager.nixosModules.home-manager
{
home-manager = {
users.${userName} = import HomeConfig;
users.${userName} = import HomeCustomOptions;
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; };
}
];
}