summaryrefslogtreecommitdiffstats
path: root/nixos/modules/config
diff options
context:
space:
mode:
authorSilvan Mosberger <contact@infinisil.com>2020-03-07 01:53:31 +0100
committerSilvan Mosberger <contact@infinisil.com>2020-03-07 01:53:31 +0100
commitec6e4db6e413219fd55ba52d207de4d59a356057 (patch)
treec0e528042334dd68b15ec0c22c7ac312eeb8ad15 /nixos/modules/config
parentefcab647abf3fd16020f970f66b1b2f5c29299cf (diff)
nixos/networking: Add hostFiles option
When blocklists are built with a derivation, using extraHosts would require IFD, since the result of the derivation needs to be converted to a string again. By introducing this option no IFD is needed for such use-cases, since the fetched files can be assigned directly.
Diffstat (limited to 'nixos/modules/config')
-rw-r--r--nixos/modules/config/networking.nix27
1 files changed, 21 insertions, 6 deletions
diff --git a/nixos/modules/config/networking.nix b/nixos/modules/config/networking.nix
index 81427bb8ee64..dd36696b94d2 100644
--- a/nixos/modules/config/networking.nix
+++ b/nixos/modules/config/networking.nix
@@ -35,12 +35,22 @@ in
'';
};
+ networking.hostFiles = lib.mkOption {
+ type = types.listOf types.path;
+ defaultText = lib.literalExample "Hosts from `networking.hosts` and `networking.extraHosts`";
+ example = lib.literalExample ''[ "''${pkgs.my-blocklist-package}/share/my-blocklist/hosts" ]'';
+ description = ''
+ Files that should be concatenated together to form <filename>/etc/hosts</filename>.
+ '';
+ };
+
networking.extraHosts = lib.mkOption {
type = types.lines;
default = "";
example = "192.168.0.1 lanlocalhost";
description = ''
Additional verbatim entries to be appended to <filename>/etc/hosts</filename>.
+ For adding hosts from derivation results, use <option>networking.hostFiles</option> instead.
'';
};
@@ -159,6 +169,15 @@ in
"::1" = [ "localhost" ];
};
+ networking.hostFiles = let
+ stringHosts =
+ let
+ oneToString = set: ip: ip + " " + concatStringsSep " " set.${ip} + "\n";
+ allToString = set: concatMapStrings (oneToString set) (attrNames set);
+ in pkgs.writeText "string-hosts" (allToString (filterAttrs (_: v: v != []) cfg.hosts));
+ extraHosts = pkgs.writeText "extra-hosts" cfg.extraHosts;
+ in mkBefore [ stringHosts extraHosts ];
+
environment.etc =
{ # /etc/services: TCP/UDP port assignments.
services.source = pkgs.iana-etc + "/etc/services";
@@ -167,12 +186,8 @@ in
protocols.source = pkgs.iana-etc + "/etc/protocols";
# /etc/hosts: Hostname-to-IP mappings.
- hosts.text = let
- oneToString = set: ip: ip + " " + concatStringsSep " " set.${ip};
- allToString = set: concatMapStringsSep "\n" (oneToString set) (attrNames set);
- in ''
- ${allToString (filterAttrs (_: v: v != []) cfg.hosts)}
- ${cfg.extraHosts}
+ hosts.source = pkgs.runCommandNoCC "hosts" {} ''
+ cat ${escapeShellArgs cfg.hostFiles} > $out
'';
# /etc/host.conf: resolver configuration file