sneeuwvlok/lib/nixos.nix
2025-03-18 16:43:07 +01:00

71 lines
2 KiB
Nix

args@{
inputs,
lib,
pkgs,
self,
...
}: let
inherit (inputs.nixpkgs.lib) nixosSystem;
inherit (builtins) baseNameOf elem map;
inherit (lib.attrsets) filterAttrs;
inherit (lib.modules) mkAliasOptionModule mkDefault mkIf;
inherit (lib.strings) removeSuffix;
inherit (self.modules) mapModules mapModulesRec';
inherit (self) mkSysUser mkHmUser;
in rec
{
mkHost = path: attrs @ {system ? "x86_64-linux", ...}:
nixosSystem {
inherit system;
specialArgs = {inherit lib inputs system; };
modules =
let
stateVersion = "23.11";
in [
inputs.nixos-boot.nixosModules.default
{
nixpkgs.pkgs = pkgs;
networking.hostName = mkDefault (removeSuffix ".nix" (baseNameOf path));
system = {
inherit stateVersion;
configurationRevision = with inputs; mkIf (self ? rev) self.rev;
};
imports = [
inputs.home-manager.nixosModules.home-manager
"${path}/hardware.nix"
./_users.nix
]
++ (mapModulesRec' (toString ../modules/system) import);
users = {
mutableUsers = true; # Set this to false when I get sops with passwords set up properly
# users = mapModules "${path}/users" mkSysUser;
};
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
sharedModules = [
inputs.plasma-manager.homeManagerModules.plasma-manager
];
# users = mapModules "${path}/users" (p: mkHmUser p stateVersion);
};
}
{
modules.chris = (import "${path}/user/chris/default.nix");
modules.kaas = (import "${path}/user/kaas/default.nix");
}
(filterAttrs (n: v: !elem n ["system"]) attrs)
../. # ../default.nix
(import path)
];
};
mapHosts = dir: attrs @ {system ? system, ...}:
mapModules dir (hostPath: mkHost hostPath attrs);
}