Self-host your own digital island

add Eon as DNS server

Changed files
+199 -5
modules
services
+179 -2
flake.lock
···
"type": "gitlab"
}
},
+
"eon": {
+
"inputs": {
+
"flake-utils": "flake-utils",
+
"nixpkgs": [
+
"nixpkgs"
+
],
+
"opam-nix": "opam-nix",
+
"opam-repository": "opam-repository"
+
},
+
"locked": {
+
"lastModified": 1713007178,
+
"narHash": "sha256-091K5GMtbNZE78gSviME6ARITr6AL94f3naLzt2DabM=",
+
"owner": "RyanGibb",
+
"repo": "eon",
+
"rev": "d2b108c439bbd6e8a315630d730037ef940d6c74",
+
"type": "github"
+
},
+
"original": {
+
"owner": "RyanGibb",
+
"repo": "eon",
+
"type": "github"
+
}
+
},
"flake-compat": {
"flake": false,
"locked": {
+
"lastModified": 1627913399,
+
"narHash": "sha256-hY8g6H2KFL8ownSiFeMOjwPC8P0ueXpCVEbxgda3pko=",
+
"owner": "edolstra",
+
"repo": "flake-compat",
+
"rev": "12c64ca55c1014cdc1b16ed5a804aa8576601ff2",
+
"type": "github"
+
},
+
"original": {
+
"owner": "edolstra",
+
"repo": "flake-compat",
+
"type": "github"
+
}
+
},
+
"flake-compat_2": {
+
"flake": false,
+
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
···
"type": "github"
}
},
+
"flake-utils": {
+
"inputs": {
+
"systems": "systems"
+
},
+
"locked": {
+
"lastModified": 1710146030,
+
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
+
"owner": "numtide",
+
"repo": "flake-utils",
+
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
+
"type": "github"
+
},
+
"original": {
+
"owner": "numtide",
+
"repo": "flake-utils",
+
"type": "github"
+
}
+
},
+
"mirage-opam-overlays": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1661959605,
+
"narHash": "sha256-CPTuhYML3F4J58flfp3ZbMNhkRkVFKmBEYBZY5tnQwA=",
+
"owner": "dune-universe",
+
"repo": "mirage-opam-overlays",
+
"rev": "05f1c1823d891ce4d8adab91f5db3ac51d86dc0b",
+
"type": "github"
+
},
+
"original": {
+
"owner": "dune-universe",
+
"repo": "mirage-opam-overlays",
+
"type": "github"
+
}
+
},
"nixos-mailserver": {
"inputs": {
"blobs": "blobs",
-
"flake-compat": "flake-compat",
+
"flake-compat": "flake-compat_2",
"nixpkgs": "nixpkgs",
"nixpkgs-23_05": "nixpkgs-23_05",
"nixpkgs-23_11": "nixpkgs-23_11",
···
"type": "github"
}
},
+
"opam-nix": {
+
"inputs": {
+
"flake-compat": "flake-compat",
+
"flake-utils": [
+
"eon",
+
"flake-utils"
+
],
+
"mirage-opam-overlays": "mirage-opam-overlays",
+
"nixpkgs": [
+
"eon",
+
"nixpkgs"
+
],
+
"opam-overlays": "opam-overlays",
+
"opam-repository": [
+
"eon",
+
"opam-repository"
+
],
+
"opam2json": "opam2json"
+
},
+
"locked": {
+
"lastModified": 1703105504,
+
"narHash": "sha256-z7X1i2T1H37Lj9hEIJA5T0+sdE5E+PSWiiSyvYGyGSY=",
+
"owner": "RyanGibb",
+
"repo": "opam-nix",
+
"rev": "ccf2e75e8854aefe933c4e504f436a3b315802ee",
+
"type": "github"
+
},
+
"original": {
+
"owner": "RyanGibb",
+
"ref": "pin-depends-path",
+
"repo": "opam-nix",
+
"type": "github"
+
}
+
},
+
"opam-overlays": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1654162756,
+
"narHash": "sha256-RV68fUK+O3zTx61iiHIoS0LvIk0E4voMp+0SwRg6G6c=",
+
"owner": "dune-universe",
+
"repo": "opam-overlays",
+
"rev": "c8f6ef0fc5272f254df4a971a47de7848cc1c8a4",
+
"type": "github"
+
},
+
"original": {
+
"owner": "dune-universe",
+
"repo": "opam-overlays",
+
"type": "github"
+
}
+
},
+
"opam-repository": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1712915335,
+
"narHash": "sha256-CLxKnc9GgeNom5LzGhDyq4ZP8Mx8NtwYsg2YQfcSk3U=",
+
"owner": "ocaml",
+
"repo": "opam-repository",
+
"rev": "03178cf5192dd1a55105844365e56a2294cd9225",
+
"type": "github"
+
},
+
"original": {
+
"owner": "ocaml",
+
"repo": "opam-repository",
+
"type": "github"
+
}
+
},
+
"opam2json": {
+
"inputs": {
+
"nixpkgs": [
+
"eon",
+
"opam-nix",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1671540003,
+
"narHash": "sha256-5pXfbUfpVABtKbii6aaI2EdAZTjHJ2QntEf0QD2O5AM=",
+
"owner": "tweag",
+
"repo": "opam2json",
+
"rev": "819d291ea95e271b0e6027679de6abb4d4f7f680",
+
"type": "github"
+
},
+
"original": {
+
"owner": "tweag",
+
"repo": "opam2json",
+
"type": "github"
+
}
+
},
"root": {
"inputs": {
+
"eon": "eon",
"nixos-mailserver": "nixos-mailserver",
"nixpkgs": "nixpkgs_2"
}
···
"type": "github"
}
},
+
"systems_2": {
+
"locked": {
+
"lastModified": 1681028828,
+
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+
"owner": "nix-systems",
+
"repo": "default",
+
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+
"type": "github"
+
},
+
"original": {
+
"owner": "nix-systems",
+
"repo": "default",
+
"type": "github"
+
}
+
},
"utils": {
"inputs": {
-
"systems": "systems"
+
"systems": "systems_2"
},
"locked": {
"lastModified": 1709126324,
+4 -1
flake.nix
···
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11";
nixos-mailserver.url = "github:RyanGibb/nixos-mailserver/fork-23.11";
+
eon.url = "github:RyanGibb/eon";
+
eon.inputs.nixpkgs.follows = "nixpkgs";
};
-
outputs = { self, nixpkgs, nixos-mailserver, ... }: rec {
+
outputs = { self, nixpkgs, nixos-mailserver, eon, ... }: rec {
packages = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed (system:
let pkgs = nixpkgs.legacyPackages.${system};
in { manpage = import ./man { inherit pkgs system nixos-mailserver; }; });
···
imports = [
./modules/default.nix
nixos-mailserver.nixosModule
+
eon.nixosModules.default
({ pkgs, config, ... }: {
nixpkgs.overlays = [
(final: prev: {
+2 -2
modules/services/dns/default.nix
···
};
};
in {
-
imports = [ ./bind.nix ];
+
imports = [ ./bind.nix ./eon.nix ];
options.eilean.services.dns = {
enable = mkEnableOption "DNS server";
server = mkOption {
-
type = types.enum [ "bind" ];
+
type = types.enum [ "bind" "eon" ];
default = "bind";
};
openFirewall = mkOption {
+14
modules/services/dns/eon.nix
···
+
{ pkgs, config, lib, ... }:
+
+
let cfg = config.eilean.services.dns;
+
in lib.mkIf (cfg.enable && cfg.server == "eon") {
+
services.eon = {
+
enable = true;
+
zoneFiles = let
+
mapZonefile = zonename: zone:
+
"${
+
import ./zonefile.nix { inherit pkgs config lib zonename zone; }
+
}/${zonename}";
+
in lib.attrsets.mapAttrsToList mapZonefile cfg.zones;
+
};
+
}