diff options
| author | Mike Vink <mike1994vink@gmail.com> | 2023-11-20 10:36:20 +0000 |
|---|---|---|
| committer | Mike Vink <mike1994vink@gmail.com> | 2023-11-20 10:36:20 +0000 |
| commit | 228dfe4ab48689281ec5e603242e50d52330d568 (patch) | |
| tree | 724da9523ac1bc31d5e076883d21bc2446825fd8 /ivi | |
| parent | cab61c714497d00a7d5b7c30f6813333e5801451 (diff) | |
fixup
Diffstat (limited to 'ivi')
| -rw-r--r-- | ivi/default.nix | 21 | ||||
| -rw-r--r-- | ivi/ivi.nix | 88 |
2 files changed, 109 insertions, 0 deletions
diff --git a/ivi/default.nix b/ivi/default.nix new file mode 100644 index 0000000..7b80611 --- /dev/null +++ b/ivi/default.nix @@ -0,0 +1,21 @@ +self: lib: prev: with lib; { + modulesIn = dir: pipe dir [ + builtins.readDir + (mapAttrsToList (name: type: + if type == "regular" && hasSuffix ".nix" name && name != "default.nix" then + [ { name = removeSuffix ".nix" name; value = dir + "/${name}"; } ] + else if type == "directory" && pathExists (dir + "/${name}/default.nix") then + [ { inherit name; value = dir + "/${name}"; } ] + else + [] + )) + concatLists + listToAttrs + ]; + + # Collects the inputs of a flake recursively (with possible duplicates). + collectFlakeInputs = input: + [ input ] ++ concatMap collectFlakeInputs (builtins.attrValues (input.inputs or {})); + + ivi = import ./ivi.nix self lib; +} diff --git a/ivi/ivi.nix b/ivi/ivi.nix new file mode 100644 index 0000000..f7cc0d0 --- /dev/null +++ b/ivi/ivi.nix @@ -0,0 +1,88 @@ +self: lib: with lib; let + modules = [ + { + options.machines = mkOption { + description = "Lookup for static info needed to configure machines"; + default = {}; + type = with types; attrsOf (submodule ({ name, config, ... }: { + freeformType = attrs; + options = { + modules = mkOption { + description = "Final list of modules to import"; + type = listOf str; + default = []; + }; + profiles = mkOption { + description = "List of profiles to use"; + type = listOf str; + default = []; + }; + hostname = mkOption { + description = "The machine's hostname"; + type = str; + readOnly = true; + default = name; + }; + ipv4 = mkOption { + description = "The machines public IPv4 addresses"; + type = listOf str; + default = []; + }; + ipv6 = mkOption { + description = "The machines public IPv6 addresses"; + type = listOf str; + default = []; + }; + isDeployed = mkOption { + description = "The machine is deployed with nixos"; + type = bool; + default = false; + }; + }; + config = { + modules = + (concatMap + (p: (attrValues (modulesIn (self + "/profiles/" + p)))) + ivi.machines.${name}.profiles + ); + }; + })); + }; + config = { + _module.freeformType = with types; attrs; + + username = "ivi"; + githubUsername = "ivi-vink"; + realName = "Mike Vink"; + domain = "vinkies.net"; + email = "ivi@vinkies.net"; + sshKeys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMT59Kbv+rO0PvB1q5u3l9wdUgsKT0M8vQ7WHnjq+kYN ${ivi.email}" + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDqsfYS7sOLfLWvGTmxT2QYGkbXJ5kREFl42n3jtte5sLps76KECgKqEjA4OLhNZ51lKFBDzcn1QOUl3RN4+qHsBtkr+02a7hhf1bBLeb1sx6+FVXdsarln5lUF/NMcpj6stUi8mqY4aQ21jQKxZsGip9fI8fx3HtXYCVhIarRbshQlwDqTplJBLDtrnmWTprxVnz1xSZRr3euXsIh1FFQZI6klPPBa6qFJtWWtGNBCRr8Sruo6I4on7QjNyW/s1OgiNAR0N2IO9wCdjlXrjNnFEAaMrpDpZde7eULbiFP2pHYVVy/InwNhhePYkeBh/4BzlaUZVv6gXsX7wOC5OyWaXbbMzWEopbnqeXXLwNyOZ88YpN/c+kZk2/1CHl+xmlVGAr9TnZ9VST5Y4ZAEqq8OKoP3ZcchAWxWjzTgPogSfiIAP/n5xrgB+8uRZb/gkN+I7RTQKGrS2Ex7gfkj39beDeevQj3XVQ1U2kp3n+jUBHItCCpZyHISgTYW2Ct6lrziJpD0kPlAOrN3BGQtkStHYK+4EE1PrrwWGkG7Ue+tlETe8FTg+AMv1VjLV9b3pHZJCrao5/cY2MxkfGzf4HTfeueqSLSsrYuiogHAPvvzfvOV5un+dWX8HyeBjmKTBwDBFuhdca/wzk0ArHSgEYUmh2NXj/G4gaSF3EX5ZSxmMQ== ${ivi.email}" + ]; + + machines = { + lemptop = { + profiles = [ + "core" + "station" + "email" + ]; + }; + wsl = { + profiles = [ + "core" + ]; + }; + serber = { + isDeployed = true; + profiles = [ + "core" + "server" + ]; + }; + }; + }; + } + ]; +in (evalModules { inherit modules; }).config |
