diff options
author | Rickard Nilsson <rickynils@gmail.com> | 2013-11-13 01:52:57 +0100 |
---|---|---|
committer | Rickard Nilsson <rickynils@gmail.com> | 2013-11-13 01:52:57 +0100 |
commit | 26d7598d464127157d3ca49d9c71561d70f1d209 (patch) | |
tree | 695801988d7855cf6dd3e423a0a3f67440df1e75 /nixos/modules/services/networking | |
parent | f923c3220485b057cacbabb3396ba42d1dbb2b97 (diff) | |
download | nixlib-26d7598d464127157d3ca49d9c71561d70f1d209.tar nixlib-26d7598d464127157d3ca49d9c71561d70f1d209.tar.gz nixlib-26d7598d464127157d3ca49d9c71561d70f1d209.tar.bz2 nixlib-26d7598d464127157d3ca49d9c71561d70f1d209.tar.lz nixlib-26d7598d464127157d3ca49d9c71561d70f1d209.tar.xz nixlib-26d7598d464127157d3ca49d9c71561d70f1d209.tar.zst nixlib-26d7598d464127157d3ca49d9c71561d70f1d209.zip |
networkmanager NixOS service: Make it possible to append or insert name servers in /etc/resolv.conf
Diffstat (limited to 'nixos/modules/services/networking')
-rw-r--r-- | nixos/modules/services/networking/networkmanager.nix | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/nixos/modules/services/networking/networkmanager.nix b/nixos/modules/services/networking/networkmanager.nix index 2e8d17d872d2..62bf38e4e708 100644 --- a/nixos/modules/services/networking/networkmanager.nix +++ b/nixos/modules/services/networking/networkmanager.nix @@ -55,15 +55,19 @@ let fi ''; + ns = xs: writeText "nameservers" ( + concatStrings (map (s: "nameserver ${s}\n") xs) + ); + overrideNameserversScript = writeScript "02overridedns" '' #!/bin/sh - ${optionalString cfg.overrideNameservers "${gnused}/bin/sed -i '/nameserver /d' /etc/resolv.conf"} - ${concatStrings (map (s: '' - ${optionalString cfg.appendNameservers - "${gnused}/bin/sed -i '/nameserver ${s}/d' /etc/resolv.conf" - } - echo 'nameserver ${s}' >> /etc/resolv.conf - '') config.networking.nameservers)} + tmp=`${coreutils}/bin/mktemp` + ${gnused}/bin/sed '/nameserver /d' /etc/resolv.conf > $tmp + ${gnugrep}/bin/grep 'nameserver ' /etc/resolv.conf | \ + ${gnugrep}/bin/grep -vf ${ns (cfg.appendNameservers ++ cfg.insertNameservers)} > $tmp.ns + ${optionalString (cfg.appendNameservers != []) "${coreutils}/bin/cat $tmp $tmp.ns ${ns cfg.appendNameservers} > /etc/resolv.conf"} + ${optionalString (cfg.insertNameservers != []) "${coreutils}/bin/cat $tmp ${ns cfg.insertNameservers} $tmp.ns > /etc/resolv.conf"} + ${coreutils}/bin/rm -f $tmp $tmp.ns ''; in { @@ -95,23 +99,21 @@ in { apply = list: [ networkmanager modemmanager wpa_supplicant ] ++ list; }; - overrideNameservers = mkOption { - default = false; + appendNameservers = mkOption { + type = types.listOf types.string; + default = []; description = '' - If enabled, any nameservers received by DHCP or configured in - NetworkManager will be replaced by the nameservers configured - in the <literal>networking.nameservers</literal> option. This - option overrides the <literal>appendNameservers</literal> option - if both are enabled. + A list of name servers that should be appended + to the ones configured in NetworkManager or received by DHCP. ''; }; - appendNameservers = mkOption { - default = false; + insertNameservers = mkOption { + type = types.listOf types.string; + default = []; description = '' - If enabled, the name servers configured in the - <literal>networking.nameservers</literal> option will be appended - to the ones configured in NetworkManager or received by DHCP. + A list of name servers that should be inserted before + the ones configured in NetworkManager or received by DHCP. ''; }; @@ -144,7 +146,7 @@ in { { source = "${networkmanager_openconnect}/etc/NetworkManager/VPN/nm-openconnect-service.name"; target = "NetworkManager/VPN/nm-openconnect-service.name"; } - ] ++ pkgs.lib.optional (cfg.overrideNameservers || cfg.appendNameservers) + ] ++ pkgs.lib.optional (cfg.appendNameservers == [] || cfg.insertNameservers == []) { source = overrideNameserversScript; target = "NetworkManager/dispatcher.d/02overridedns"; }; |