diff options
Diffstat (limited to 'nixos/modules/config/networking.nix')
-rw-r--r-- | nixos/modules/config/networking.nix | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/nixos/modules/config/networking.nix b/nixos/modules/config/networking.nix index d503f5a8b20e..619f36cd5150 100644 --- a/nixos/modules/config/networking.nix +++ b/nixos/modules/config/networking.nix @@ -20,12 +20,26 @@ in options = { + networking.hosts = lib.mkOption { + type = types.attrsOf ( types.listOf types.str ); + default = {}; + example = literalExample '' + { + "127.0.0.1" = [ "foo.bar.baz" ]; + "192.168.0.2" = [ "fileserver.local" "nameserver.local" ]; + }; + ''; + description = '' + Locally defined maps of hostnames to IP addresses. + ''; + }; + networking.extraHosts = lib.mkOption { type = types.lines; default = ""; example = "192.168.0.1 lanlocalhost"; description = '' - Additional entries to be appended to <filename>/etc/hosts</filename>. + Additional verbatim entries to be appended to <filename>/etc/hosts</filename>. ''; }; @@ -188,11 +202,22 @@ in # /etc/hosts: Hostname-to-IP mappings. "hosts".text = + let oneToString = set : ip : ip + " " + concatStringsSep " " ( getAttr ip set ); + allToString = set : concatMapStringsSep "\n" ( oneToString set ) ( attrNames set ); + userLocalHosts = optionalString + ( builtins.hasAttr "127.0.0.1" cfg.hosts ) + ( concatStringsSep " " ( remove "localhost" cfg.hosts."127.0.0.1" )); + userLocalHosts6 = optionalString + ( builtins.hasAttr "::1" cfg.hosts ) + ( concatStringsSep " " ( remove "localhost" cfg.hosts."::1" )); + otherHosts = allToString ( removeAttrs cfg.hosts [ "127.0.0.1" "::1" ]); + in '' - 127.0.0.1 localhost + 127.0.0.1 ${userLocalHosts} localhost ${optionalString cfg.enableIPv6 '' - ::1 localhost + ::1 ${userLocalHosts6} localhost ''} + ${otherHosts} ${cfg.extraHosts} ''; @@ -223,7 +248,9 @@ in ''; } // optionalAttrs config.services.resolved.enable { - "resolv.conf".source = "/run/systemd/resolve/resolv.conf"; + # symlink the static version of resolv.conf as recommended by upstream: + # https://www.freedesktop.org/software/systemd/man/systemd-resolved.html#/etc/resolv.conf + "resolv.conf".source = "${pkgs.systemd}/lib/systemd/resolv.conf"; } // optionalAttrs (config.services.resolved.enable && dnsmasqResolve) { "dnsmasq-resolv.conf".source = "/run/systemd/resolve/resolv.conf"; }; |