mirror of
https://github.com/JulienMalka/snowfield.git
synced 2025-03-23 20:30:52 +01:00
74 lines
1.8 KiB
Nix
74 lines
1.8 KiB
Nix
inputs: profiles: dnsLib: final: _prev:
|
|
|
|
with builtins;
|
|
let
|
|
evalMeta =
|
|
raw:
|
|
(_prev.evalModules {
|
|
modules = [
|
|
(import ../modules/meta/default.nix)
|
|
{ machine.meta = raw; }
|
|
];
|
|
specialArgs = {
|
|
inherit profiles;
|
|
};
|
|
}).config.machine.meta;
|
|
|
|
non_local_machines = (import ./snowfield.nix).machines;
|
|
in
|
|
rec {
|
|
importConfig =
|
|
path:
|
|
(mapAttrs (name: _value: import (path + "/${name}/default.nix")) (
|
|
final.filterAttrs (_: v: v == "directory") (readDir path)
|
|
));
|
|
|
|
mkSubdomain = name: port: {
|
|
luj.nginx.enable = true;
|
|
services.nginx.virtualHosts."${name}.julienmalka.me" = {
|
|
enableACME = true;
|
|
forceSSL = true;
|
|
locations."/" = {
|
|
proxyPass = "http://localhost:${toString port}";
|
|
};
|
|
};
|
|
};
|
|
|
|
mkVPNSubdomain = name: port: {
|
|
luj.nginx.enable = true;
|
|
services.nginx.virtualHosts."${name}.luj" = {
|
|
forceSSL = true;
|
|
enableACME = true;
|
|
locations."/" = {
|
|
proxyPass = "http://localhost:${toString port}";
|
|
};
|
|
};
|
|
};
|
|
|
|
listToAttrsWithMerge =
|
|
l:
|
|
mapAttrs (_: v: _prev.fold (elem: acc: elem.value // acc) { } v) (builtins.groupBy (e: e.name) l);
|
|
|
|
mapAttrsWithMerge = f: set: listToAttrsWithMerge (map (attr: f attr set.${attr}) (attrNames set));
|
|
|
|
snowfield =
|
|
(mapAttrs (
|
|
name: _value:
|
|
let
|
|
machineF = import (../machines + "/${name}/default.nix");
|
|
in
|
|
evalMeta
|
|
(machineF (
|
|
(mapAttrs (_: _: null) (builtins.functionArgs machineF)) // { inherit inputs profiles; }
|
|
)).machine.meta
|
|
) (final.filterAttrs (_: v: v == "directory") (readDir ../machines)))
|
|
// mapAttrs (_: evalMeta) non_local_machines;
|
|
|
|
dns = import ./dns.nix {
|
|
lib = final;
|
|
inherit dnsLib;
|
|
};
|
|
|
|
mkMachine = import ./mkmachine.nix inputs final;
|
|
|
|
}
|