-
Notifications
You must be signed in to change notification settings - Fork 2
/
flake.nix
41 lines (36 loc) · 1.18 KB
/
flake.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{
description = "spora network";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
outputs = { self, nixpkgs }:
{
lib = {
hosts = nixpkgs.lib.mapAttrs' (file: _:
let
name = nixpkgs.lib.removeSuffix ".json" file;
in
nixpkgs.lib.nameValuePair name ((nixpkgs.lib.importJSON ./hosts/${file}) // { inherit name; })
) (builtins.readDir ./hosts);
};
nixosModules = {
hosts = {
networking.extraHosts = nixpkgs.lib.concatMapStringsSep "\n" (host:
"${host.address} ${host.name}.s"
) (nixpkgs.lib.attrValues self.lib.hosts);
};
spora = { config, lib, ... }: {
imports = [
self.nixosModules.hosts
];
services.mycelium = {
enable = true;
openFirewall = true;
peers = let
hostsWithoutSelf = lib.filterAttrs (name: _: name != config.networking.hostName) self.lib.hosts;
hostsWithIps = lib.filterAttrs (name: host: lib.hasAttr "public_endpoints" host) hostsWithoutSelf;
in
lib.flatten (map (host: host.public_endpoints) (lib.attrValues hostsWithIps));
};
};
};
};
}