106 lines
2.2 KiB
Nix
106 lines
2.2 KiB
Nix
{ lib, ... }:
|
|
|
|
rec {
|
|
genHostName = hostname: { config.networking.hostName = hostname; };
|
|
|
|
genHome =
|
|
{
|
|
inputs,
|
|
users,
|
|
src,
|
|
...
|
|
}:
|
|
[ inputs.home-manager.nixosModules.home-manager ]
|
|
++ (map (user: { home-manager.users.${user} = import (src + "/users/${user}/home.nix"); }) users);
|
|
|
|
genSops =
|
|
{
|
|
inputs,
|
|
users,
|
|
src,
|
|
...
|
|
}:
|
|
[ inputs.sops-nix.nixosModules.sops ]
|
|
++ (map (user: {
|
|
sops.secrets."${user}/user-password" = {
|
|
sopsFile = src + "/users/${user}/secrets.yaml";
|
|
neededForUsers = true;
|
|
};
|
|
}) users);
|
|
|
|
importUser =
|
|
user: src:
|
|
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}@args:
|
|
{
|
|
users.users.${user} = import (src + "/users/${user}") (args // { name = user; });
|
|
};
|
|
|
|
genUsers = { users, src, ... }: (map (user: importUser user src) users);
|
|
|
|
genNonX86 =
|
|
{ ... }:
|
|
{
|
|
config.nixpkgs = {
|
|
config.allowUnsupportedSystem = true;
|
|
buildPlatform = "x86_64-linux";
|
|
};
|
|
};
|
|
|
|
genWrapper =
|
|
var: func: args:
|
|
lib.optionals var (func args);
|
|
|
|
constructSystem =
|
|
{
|
|
hostname,
|
|
users,
|
|
inputs,
|
|
src,
|
|
home ? true,
|
|
iso ? [ ],
|
|
modules ? [ ],
|
|
server ? true,
|
|
sops ? true,
|
|
system ? "x86_64-linux",
|
|
|
|
}@args:
|
|
|
|
lib.nixosSystem {
|
|
inherit system;
|
|
specialArgs = inputs;
|
|
modules =
|
|
[
|
|
inputs.nixos-modules.nixosModule
|
|
(genHostName hostname)
|
|
(src + "/systems/${hostname}/hardware.nix")
|
|
(src + "/systems/${hostname}/configuration.nix")
|
|
]
|
|
++ modules
|
|
++ (lib.rad-dev.fileList (src + "/modules"))
|
|
++ genWrapper sops genSops args
|
|
++ genWrapper home genHome args
|
|
++ genWrapper true genUsers args
|
|
++ genWrapper (system != "x86_64-linux") genNonX86 args;
|
|
};
|
|
|
|
genSystems =
|
|
inputs: src: path:
|
|
builtins.listToAttrs (
|
|
map (name: {
|
|
inherit name;
|
|
value = constructSystem (
|
|
{
|
|
inherit inputs src;
|
|
hostname = name;
|
|
}
|
|
// import (path + "/${name}") { inherit inputs; }
|
|
);
|
|
}) (lib.rad-dev.lsdir path)
|
|
);
|
|
}
|