dotfiles/config/default.nix

175 lines
3.5 KiB
Nix
Raw Normal View History

2024-10-06 15:25:05 -05:00
{lib, ...}: let
deviceNames = [
"desktop"
"fallaryn"
"laptop"
"nas"
"phone"
2024-11-01 17:44:17 -05:00
"printer"
2024-10-06 15:25:05 -05:00
"server"
"tablet"
];
instanceNames = [
"acme"
"caddy"
"castopod"
"forgejo"
"jellyfin"
"mastodon"
"matrix"
"minecraft"
"nextcloud"
"nginx"
"ollama"
2024-10-18 22:05:40 -05:00
"owncast"
2024-10-06 15:25:05 -05:00
"peertube"
"postgresql"
"samba"
"syncthing"
"synology"
"vaultwarden"
2024-10-19 18:22:29 -05:00
"web"
"wiki"
2024-10-06 15:25:05 -05:00
"writefreely"
];
userNames = [
"user0"
"user1"
"user2"
"user3"
];
stringType = lib.mkOption {
type = lib.types.str;
};
intType = lib.mkOption {
type = lib.types.int;
};
listType = lib.mkOption {
type = lib.types.listOf lib.types.str;
};
numOptions = 20;
genOptions = config: prefix:
builtins.listToAttrs (
map
(i: {
name = "${prefix}${toString i}";
value = config;
})
(builtins.genList (i: i) numOptions)
);
in let
peopleSubmodule = lib.types.submodule {
options =
builtins.listToAttrs (map (name: {
inherit name;
value = stringType;
})
userNames)
// {
user = lib.mkOption {
type = lib.types.attrsOf userSubmodule;
};
};
};
userSubmodule = lib.types.submodule {
options = {
name = stringType;
sshKeys = listType;
group = stringType;
2024-10-23 15:16:43 -05:00
aliases = genOptions stringType "name";
2024-10-06 15:25:05 -05:00
email = genOptions stringType "address";
2024-10-19 18:22:29 -05:00
paths = genOptions stringType "path";
2024-10-06 15:25:05 -05:00
};
};
serviceSubmodule = lib.types.submodule {
options =
builtins.listToAttrs (
map
(name: {
inherit name;
value = stringType;
})
instanceNames
)
// {
instance = lib.mkOption {
type = lib.types.attrsOf instanceSubmodule;
};
};
};
instanceSubmodule = lib.types.submodule {
options = {
subdomain = stringType;
label = stringType;
name = stringType;
2024-10-19 18:22:29 -05:00
domains = genOptions stringType "url";
dns = genOptions stringType "provider";
localhost = genOptions stringType "address";
email = genOptions stringType "address";
2024-10-06 15:25:05 -05:00
sops = genOptions stringType "path";
paths = genOptions stringType "path";
ports = genOptions intType "port";
ssl = {
cert = stringType;
key = stringType;
};
};
};
systemSubmodule = lib.types.submodule {
options =
builtins.listToAttrs (
map
(name: {
inherit name;
value = stringType;
})
deviceNames
)
// {
device = lib.mkOption {
type = lib.types.attrsOf deviceSubmodule;
};
};
};
deviceSubmodule = let
mountConfig = {
mount = stringType;
device = stringType;
options = listType;
};
in
lib.types.submodule {
options =
{
boot = mountConfig;
ip = genOptions stringType "address";
label = stringType;
name = stringType;
sync = stringType;
}
// genOptions mountConfig "folder"
// genOptions mountConfig "samba"
// genOptions mountConfig "storage";
};
in {
options = {
service = lib.mkOption {
type = serviceSubmodule;
};
system = lib.mkOption {
type = systemSubmodule;
};
people = lib.mkOption {
type = peopleSubmodule;
};
};
config = {
people = import ./user.nix;
service = import ./instance.nix;
system = import ./device.nix;
};
}