| 
									
										
										
										
											2009-05-28 12:43:54 +00:00
										 |  |  | # /etc files related to networking, such as /etc/services. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2009-05-28 12:43:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2012-10-19 15:41:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-28 12:43:54 +00:00
										 |  |  | let | 
					
						
							| 
									
										
										
										
											2012-10-19 15:41:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-09 21:02:01 +00:00
										 |  |  |   cfg = config.networking; | 
					
						
							| 
									
										
										
										
											2014-07-03 01:59:35 +03:00
										 |  |  |   dnsmasqResolve = config.services.dnsmasq.enable && | 
					
						
							|  |  |  |                    config.services.dnsmasq.resolveLocalQueries; | 
					
						
							| 
									
										
										
										
											2018-07-23 16:26:03 +02:00
										 |  |  |   hasLocalResolver = config.services.bind.enable || | 
					
						
							|  |  |  |                      config.services.unbound.enable || | 
					
						
							|  |  |  |                      dnsmasqResolve; | 
					
						
							| 
									
										
										
										
											2009-05-28 12:43:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-28 13:49:54 +02:00
										 |  |  |   resolvconfOptions = cfg.resolvconfOptions | 
					
						
							|  |  |  |     ++ optional cfg.dnsSingleRequest "single-request" | 
					
						
							| 
									
										
										
										
											2017-01-21 14:58:25 +01:00
										 |  |  |     ++ optional cfg.dnsExtensionMechanism "edns0"; | 
					
						
							| 
									
										
										
										
											2018-09-23 15:55:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   localhostMapped4 = cfg.hosts ? "127.0.0.1" && elem "localhost" cfg.hosts."127.0.0.1"; | 
					
						
							|  |  |  |   localhostMapped6 = cfg.hosts ? "::1"       && elem "localhost" cfg.hosts."::1"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   localhostMultiple = any (elem "localhost") (attrValues (removeAttrs cfg.hosts [ "127.0.0.1" "::1" ])); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-28 12:43:54 +00:00
										 |  |  |   options = { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-08 21:13:16 +03:00
										 |  |  |     networking.hosts = lib.mkOption { | 
					
						
							| 
									
										
										
										
											2018-09-23 15:55:39 +00:00
										 |  |  |       type = types.attrsOf (types.listOf types.str); | 
					
						
							| 
									
										
										
										
											2017-07-09 23:12:57 +03:00
										 |  |  |       example = literalExample ''
 | 
					
						
							| 
									
										
										
										
											2017-07-08 21:13:16 +03:00
										 |  |  |         { | 
					
						
							| 
									
										
										
										
											2017-07-09 00:28:05 +03:00
										 |  |  |           "127.0.0.1" = [ "foo.bar.baz" ]; | 
					
						
							| 
									
										
										
										
											2017-07-08 21:13:16 +03:00
										 |  |  |           "192.168.0.2" = [ "fileserver.local" "nameserver.local" ]; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							| 
									
										
										
										
											2017-07-09 00:28:05 +03:00
										 |  |  |         Locally defined maps of hostnames to IP addresses. | 
					
						
							| 
									
										
										
										
											2017-07-08 21:13:16 +03:00
										 |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2017-07-04 01:58:48 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 14:58:51 -04:00
										 |  |  |     networking.extraHosts = lib.mkOption { | 
					
						
							| 
									
										
										
										
											2013-10-30 17:37:45 +01:00
										 |  |  |       type = types.lines; | 
					
						
							| 
									
										
										
										
											2009-05-28 12:43:54 +00:00
										 |  |  |       default = ""; | 
					
						
							|  |  |  |       example = "192.168.0.1 lanlocalhost"; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							| 
									
										
										
										
											2017-07-08 21:13:16 +03:00
										 |  |  |         Additional verbatim entries to be appended to <filename>/etc/hosts</filename>. | 
					
						
							| 
									
										
										
										
											2009-05-28 12:43:54 +00:00
										 |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-03 09:17:43 +02:00
										 |  |  |     networking.hostConf = lib.mkOption { | 
					
						
							|  |  |  |       type = types.lines; | 
					
						
							|  |  |  |       default = "multi on"; | 
					
						
							|  |  |  |       example = ''
 | 
					
						
							|  |  |  |         multi on | 
					
						
							|  |  |  |         reorder on | 
					
						
							|  |  |  |         trim lan | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         The contents of <filename>/etc/host.conf</filename>. See also <citerefentry><refentrytitle>host.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 14:58:51 -04:00
										 |  |  |     networking.dnsSingleRequest = lib.mkOption { | 
					
						
							| 
									
										
										
										
											2013-10-30 17:37:45 +01:00
										 |  |  |       type = types.bool; | 
					
						
							| 
									
										
										
										
											2012-10-21 21:46:05 -07:00
										 |  |  |       default = false; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Recent versions of glibc will issue both ipv4 (A) and ipv6 (AAAA) | 
					
						
							|  |  |  |         address queries at the same time, from the same port. Sometimes upstream | 
					
						
							|  |  |  |         routers will systemically drop the ipv4 queries. The symptom of this problem is | 
					
						
							|  |  |  |         that 'getent hosts example.com' only returns ipv6 (or perhaps only ipv4) addresses. The | 
					
						
							|  |  |  |         workaround for this is to specify the option 'single-request' in | 
					
						
							| 
									
										
										
										
											2013-05-04 11:26:56 +02:00
										 |  |  |         /etc/resolv.conf. This option enables that. | 
					
						
							| 
									
										
										
										
											2012-10-21 21:46:05 -07:00
										 |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-19 21:50:27 +01:00
										 |  |  |     networking.dnsExtensionMechanism = lib.mkOption { | 
					
						
							|  |  |  |       type = types.bool; | 
					
						
							| 
									
										
										
										
											2017-01-10 15:13:14 +01:00
										 |  |  |       default = true; | 
					
						
							| 
									
										
										
										
											2016-01-19 21:50:27 +01:00
										 |  |  |       description = ''
 | 
					
						
							|  |  |  |         Enable the <code>edns0</code> option in <filename>resolv.conf</filename>. With | 
					
						
							|  |  |  |         that option set, <code>glibc</code> supports use of the extension mechanisms for | 
					
						
							|  |  |  |         DNS (EDNS) specified in RFC 2671. The most popular user of that feature is DNSSEC, | 
					
						
							|  |  |  |         which does not work without it. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-21 23:39:03 +02:00
										 |  |  |     networking.extraResolvconfConf = lib.mkOption { | 
					
						
							|  |  |  |       type = types.lines; | 
					
						
							|  |  |  |       default = ""; | 
					
						
							|  |  |  |       example = "libc=NO"; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Extra configuration to append to <filename>resolvconf.conf</filename>. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-01 07:38:49 +01:00
										 |  |  |     networking.resolvconfOptions = lib.mkOption { | 
					
						
							| 
									
										
										
										
											2016-05-28 13:49:54 +02:00
										 |  |  |       type = types.listOf types.str; | 
					
						
							|  |  |  |       default = []; | 
					
						
							|  |  |  |       example = [ "ndots:1" "rotate" ]; | 
					
						
							| 
									
										
										
										
											2015-12-01 07:38:49 +01:00
										 |  |  |       description = ''
 | 
					
						
							|  |  |  |         Set the options in <filename>/etc/resolv.conf</filename>. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2015-09-21 23:39:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-14 23:49:14 +01:00
										 |  |  |     networking.timeServers = mkOption { | 
					
						
							|  |  |  |       default = [ | 
					
						
							|  |  |  |         "0.nixos.pool.ntp.org" | 
					
						
							|  |  |  |         "1.nixos.pool.ntp.org" | 
					
						
							|  |  |  |         "2.nixos.pool.ntp.org" | 
					
						
							|  |  |  |         "3.nixos.pool.ntp.org" | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         The set of NTP servers from which to synchronise. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-19 20:13:54 +01:00
										 |  |  |     networking.proxy = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       default = lib.mkOption { | 
					
						
							|  |  |  |         type = types.nullOr types.str; | 
					
						
							|  |  |  |         default = null; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option specifies the default value for httpProxy, httpsProxy, ftpProxy and rsyncProxy. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = "http://127.0.0.1:3128"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       httpProxy = lib.mkOption { | 
					
						
							|  |  |  |         type = types.nullOr types.str; | 
					
						
							|  |  |  |         default = cfg.proxy.default; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option specifies the http_proxy environment variable. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = "http://127.0.0.1:3128"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       httpsProxy = lib.mkOption { | 
					
						
							|  |  |  |         type = types.nullOr types.str; | 
					
						
							|  |  |  |         default = cfg.proxy.default; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option specifies the https_proxy environment variable. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = "http://127.0.0.1:3128"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ftpProxy = lib.mkOption { | 
					
						
							|  |  |  |         type = types.nullOr types.str; | 
					
						
							|  |  |  |         default = cfg.proxy.default; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option specifies the ftp_proxy environment variable. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = "http://127.0.0.1:3128"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       rsyncProxy = lib.mkOption { | 
					
						
							|  |  |  |         type = types.nullOr types.str; | 
					
						
							|  |  |  |         default = cfg.proxy.default; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option specifies the rsync_proxy environment variable. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = "http://127.0.0.1:3128"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-11 11:17:06 +03:00
										 |  |  |       allProxy = lib.mkOption { | 
					
						
							|  |  |  |         type = types.nullOr types.str; | 
					
						
							|  |  |  |         default = cfg.proxy.default; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option specifies the all_proxy environment variable. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = "http://127.0.0.1:3128"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-19 20:13:54 +01:00
										 |  |  |       noProxy = lib.mkOption { | 
					
						
							|  |  |  |         type = types.nullOr types.str; | 
					
						
							|  |  |  |         default = null; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option specifies the no_proxy environment variable. | 
					
						
							|  |  |  |           If a default proxy is used and noProxy is null, | 
					
						
							|  |  |  |           then noProxy will be set to 127.0.0.1,localhost. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = "127.0.0.1,localhost,.localdomain"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       envVars = lib.mkOption { | 
					
						
							|  |  |  |         type = types.attrs; | 
					
						
							|  |  |  |         internal = true; | 
					
						
							|  |  |  |         default = {}; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Environment variables used for the network proxy. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2009-05-28 12:43:54 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  |   config = { | 
					
						
							| 
									
										
										
										
											2009-05-28 12:43:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-23 15:55:39 +00:00
										 |  |  |     assertions = [{ | 
					
						
							|  |  |  |       assertion = localhostMapped4; | 
					
						
							|  |  |  |       message = ''`networking.hosts` doesn't map "127.0.0.1" to "localhost"''; | 
					
						
							|  |  |  |     } { | 
					
						
							|  |  |  |       assertion = !cfg.enableIPv6 || localhostMapped6; | 
					
						
							|  |  |  |       message = ''`networking.hosts` doesn't map "::1" to "localhost"''; | 
					
						
							|  |  |  |     } { | 
					
						
							|  |  |  |       assertion = !localhostMultiple; | 
					
						
							|  |  |  |       message = ''
 | 
					
						
							|  |  |  |         `networking.hosts` maps "localhost" to something other than "127.0.0.1" | 
					
						
							|  |  |  |         or "::1". This will break some applications. Please use | 
					
						
							|  |  |  |         `networking.extraHosts` if you really want to add such a mapping. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     networking.hosts = { | 
					
						
							|  |  |  |       "127.0.0.1" = [ "localhost" ]; | 
					
						
							| 
									
										
										
										
											2018-09-23 15:55:39 +00:00
										 |  |  |     } // optionalAttrs (cfg.hostName != "") { | 
					
						
							|  |  |  |       "127.0.1.1" = [ cfg.hostName ]; | 
					
						
							| 
									
										
										
										
											2018-09-23 15:55:39 +00:00
										 |  |  |     } // optionalAttrs cfg.enableIPv6 { | 
					
						
							|  |  |  |       "::1" = [ "localhost" ]; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  |     environment.etc = | 
					
						
							|  |  |  |       { # /etc/services: TCP/UDP port assignments. | 
					
						
							| 
									
										
										
										
											2017-03-19 12:40:52 +01:00
										 |  |  |         "services".source = pkgs.iana-etc + "/etc/services"; | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # /etc/protocols: IP protocol numbers. | 
					
						
							| 
									
										
										
										
											2017-03-19 12:40:52 +01:00
										 |  |  |         "protocols".source  = pkgs.iana-etc + "/etc/protocols"; | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # /etc/hosts: Hostname-to-IP mappings. | 
					
						
							| 
									
										
										
										
											2018-09-23 15:55:39 +00:00
										 |  |  |         "hosts".text = let | 
					
						
							|  |  |  |           oneToString = set: ip: ip + " " + concatStringsSep " " set.${ip}; | 
					
						
							|  |  |  |           allToString = set: concatMapStringsSep "\n" (oneToString set) (attrNames set); | 
					
						
							|  |  |  |         in ''
 | 
					
						
							|  |  |  |           ${allToString cfg.hosts} | 
					
						
							|  |  |  |           ${cfg.extraHosts} | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2014-11-23 03:04:02 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-03 09:17:43 +02:00
										 |  |  |         # /etc/host.conf: resolver configuration file | 
					
						
							|  |  |  |         "host.conf".text = cfg.hostConf; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  |         # /etc/resolvconf.conf: Configuration for openresolv. | 
					
						
							|  |  |  |         "resolvconf.conf".text = | 
					
						
							|  |  |  |             ''
 | 
					
						
							|  |  |  |               # This is the default, but we must set it here to prevent | 
					
						
							|  |  |  |               # a collision with an apparently unrelated environment | 
					
						
							|  |  |  |               # variable with the same name exported by dhcpcd. | 
					
						
							|  |  |  |               interface_order='lo lo[0-9]*' | 
					
						
							| 
									
										
										
										
											2018-11-21 15:26:37 +01:00
										 |  |  |             '' + optionalString config.services.nscd.enable '' | 
					
						
							|  |  |  |               # Invalidate the nscd cache whenever resolv.conf is | 
					
						
							|  |  |  |               # regenerated. | 
					
						
							|  |  |  |               libc_restart='${pkgs.systemd}/bin/systemctl try-restart --no-block nscd.service 2> /dev/null' | 
					
						
							| 
									
										
										
										
											2016-05-28 13:49:54 +02:00
										 |  |  |             '' + optionalString (length resolvconfOptions > 0) '' | 
					
						
							| 
									
										
										
										
											2015-12-01 07:38:49 +01:00
										 |  |  |               # Options as described in resolv.conf(5) | 
					
						
							| 
									
										
										
										
											2016-05-28 13:49:54 +02:00
										 |  |  |               resolv_conf_options='${concatStringsSep " " resolvconfOptions}' | 
					
						
							| 
									
										
										
										
											2014-07-03 01:59:35 +03:00
										 |  |  |             '' + optionalString hasLocalResolver '' | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  |               # This hosts runs a full-blown DNS resolver. | 
					
						
							|  |  |  |               name_servers='127.0.0.1' | 
					
						
							| 
									
										
										
										
											2014-07-03 01:59:35 +03:00
										 |  |  |             '' + optionalString dnsmasqResolve '' | 
					
						
							|  |  |  |               dnsmasq_conf=/etc/dnsmasq-conf.conf | 
					
						
							|  |  |  |               dnsmasq_resolv=/etc/dnsmasq-resolv.conf | 
					
						
							| 
									
										
										
										
											2015-09-21 23:39:03 +02:00
										 |  |  |             '' + cfg.extraResolvconfConf + '' | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  |             '';
 | 
					
						
							| 
									
										
										
										
											2014-11-23 03:04:02 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-31 22:34:06 +01:00
										 |  |  |       } // optionalAttrs config.services.resolved.enable { | 
					
						
							| 
									
										
										
										
											2018-11-13 19:05:30 +01:00
										 |  |  |         # symlink the dynamic stub resolver of resolv.conf as recommended by upstream: | 
					
						
							| 
									
										
										
										
											2017-07-13 15:40:31 +02:00
										 |  |  |         # https://www.freedesktop.org/software/systemd/man/systemd-resolved.html#/etc/resolv.conf | 
					
						
							| 
									
										
										
										
											2018-11-13 19:05:30 +01:00
										 |  |  |         "resolv.conf".source = "/run/systemd/resolve/stub-resolv.conf"; | 
					
						
							| 
									
										
										
										
											2017-05-31 22:34:06 +01:00
										 |  |  |       } // optionalAttrs (config.services.resolved.enable && dnsmasqResolve) { | 
					
						
							|  |  |  |         "dnsmasq-resolv.conf".source = "/run/systemd/resolve/resolv.conf"; | 
					
						
							| 
									
										
										
										
											2018-10-22 11:11:02 -07:00
										 |  |  |       } // optionalAttrs (pkgs.stdenv.hostPlatform.libc == "glibc") { | 
					
						
							|  |  |  |         # /etc/rpc: RPC program numbers. | 
					
						
							|  |  |  |         "rpc".source = pkgs.glibc.out + "/etc/rpc"; | 
					
						
							| 
									
										
										
										
											2017-05-31 22:34:06 +01:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-19 20:13:54 +01:00
										 |  |  |       networking.proxy.envVars = | 
					
						
							|  |  |  |         optionalAttrs (cfg.proxy.default != null) { | 
					
						
							|  |  |  |           # other options already fallback to proxy.default | 
					
						
							|  |  |  |           no_proxy = "127.0.0.1,localhost"; | 
					
						
							|  |  |  |         } // optionalAttrs (cfg.proxy.httpProxy != null) { | 
					
						
							|  |  |  |           http_proxy  = cfg.proxy.httpProxy; | 
					
						
							|  |  |  |         } // optionalAttrs (cfg.proxy.httpsProxy != null) { | 
					
						
							|  |  |  |           https_proxy = cfg.proxy.httpsProxy; | 
					
						
							|  |  |  |         } // optionalAttrs (cfg.proxy.rsyncProxy != null) { | 
					
						
							|  |  |  |           rsync_proxy = cfg.proxy.rsyncProxy; | 
					
						
							|  |  |  |         } // optionalAttrs (cfg.proxy.ftpProxy != null) { | 
					
						
							|  |  |  |           ftp_proxy   = cfg.proxy.ftpProxy; | 
					
						
							| 
									
										
										
										
											2015-12-11 11:17:06 +03:00
										 |  |  |         } // optionalAttrs (cfg.proxy.allProxy != null) { | 
					
						
							|  |  |  |           all_proxy   = cfg.proxy.allProxy; | 
					
						
							| 
									
										
										
										
											2014-11-19 20:13:54 +01:00
										 |  |  |         } // optionalAttrs (cfg.proxy.noProxy != null) { | 
					
						
							|  |  |  |           no_proxy    = cfg.proxy.noProxy; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Install the proxy environment variables | 
					
						
							| 
									
										
										
										
											2014-11-30 14:48:41 +01:00
										 |  |  |     environment.sessionVariables = cfg.proxy.envVars; | 
					
						
							| 
									
										
										
										
											2014-11-19 20:13:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-24 00:50:26 -08:00
										 |  |  |     # This is needed when /etc/resolv.conf is being overriden by networkd | 
					
						
							|  |  |  |     # and other configurations. If the file is destroyed by an environment | 
					
						
							|  |  |  |     # activation then it must be rebuilt so that applications which interface | 
					
						
							|  |  |  |     # with /etc/resolv.conf directly don't break. | 
					
						
							| 
									
										
										
										
											2016-09-26 02:00:41 +02:00
										 |  |  |     system.activationScripts.resolvconf = stringAfter [ "etc" "specialfs" "var" ] | 
					
						
							| 
									
										
										
										
											2014-11-24 00:50:26 -08:00
										 |  |  |       ''
 | 
					
						
							|  |  |  |         # Systemd resolved controls its own resolv.conf | 
					
						
							|  |  |  |         rm -f /run/resolvconf/interfaces/systemd | 
					
						
							|  |  |  |         ${optionalString config.services.resolved.enable ''
 | 
					
						
							|  |  |  |           rm -rf /run/resolvconf/interfaces | 
					
						
							|  |  |  |           mkdir -p /run/resolvconf/interfaces | 
					
						
							|  |  |  |           ln -s /run/systemd/resolve/resolv.conf /run/resolvconf/interfaces/systemd | 
					
						
							|  |  |  |         ''}
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-04 13:31:10 +00:00
										 |  |  |         # Make sure resolv.conf is up to date if not managed manually or by systemd | 
					
						
							|  |  |  |         ${optionalString (!config.environment.etc?"resolv.conf") ''
 | 
					
						
							| 
									
										
										
										
											2014-11-26 11:19:31 -08:00
										 |  |  |           ${pkgs.openresolv}/bin/resolvconf -u | 
					
						
							|  |  |  |         ''}
 | 
					
						
							| 
									
										
										
										
											2014-11-24 00:50:26 -08:00
										 |  |  |       '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-23 15:55:39 +00:00
										 |  |  | } |