| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  |  | { config, lib, pkgs, utils, ... }: | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-01 14:42:43 +01:00
										 |  |  |  | with utils; | 
					
						
							| 
									
										
										
										
											2014-05-05 15:52:33 -04:00
										 |  |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  |  | with import ./systemd-unit-options.nix { inherit config lib; }; | 
					
						
							| 
									
										
										
										
											2015-04-20 11:31:17 +02:00
										 |  |  |  | with import ./systemd-lib.nix { inherit config lib pkgs; }; | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | let | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |   cfg = config.systemd; | 
					
						
							| 
									
										
										
										
											2012-06-17 23:31:21 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:17:57 +01:00
										 |  |  |  |   systemd = cfg.package; | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |   upstreamSystemUnits = | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |     [ # Targets. | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  |       "basic.target" | 
					
						
							| 
									
										
										
										
											2013-01-08 17:26:51 +01:00
										 |  |  |  |       "sysinit.target" | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  |       "sockets.target" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "exit.target" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |       "graphical.target" | 
					
						
							|  |  |  |  |       "multi-user.target" | 
					
						
							|  |  |  |  |       "network.target" | 
					
						
							| 
									
										
										
										
											2014-12-01 17:19:06 -08:00
										 |  |  |  |       "network-pre.target" | 
					
						
							| 
									
										
										
										
											2013-07-16 11:55:12 +02:00
										 |  |  |  |       "network-online.target" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |       "nss-lookup.target" | 
					
						
							|  |  |  |  |       "nss-user-lookup.target" | 
					
						
							|  |  |  |  |       "time-sync.target" | 
					
						
							| 
									
										
										
										
											2012-08-10 18:56:12 -04:00
										 |  |  |  |       #"cryptsetup.target" | 
					
						
							| 
									
										
										
										
											2012-08-14 18:14:48 -04:00
										 |  |  |  |       "sigpwr.target" | 
					
						
							| 
									
										
										
										
											2013-03-27 13:58:12 +01:00
										 |  |  |  |       "timers.target" | 
					
						
							|  |  |  |  |       "paths.target" | 
					
						
							| 
									
										
										
										
											2014-04-16 00:59:26 +02:00
										 |  |  |  |       "rpcbind.target" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-21 21:01:48 +01:00
										 |  |  |  |       # Rescue mode. | 
					
						
							| 
									
										
										
										
											2013-01-08 18:24:06 +01:00
										 |  |  |  |       "rescue.target" | 
					
						
							|  |  |  |  |       "rescue.service" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-15 13:09:22 -04:00
										 |  |  |  |       # Udev. | 
					
						
							| 
									
										
										
										
											2012-07-16 17:47:11 -04:00
										 |  |  |  |       "systemd-udevd-control.socket" | 
					
						
							|  |  |  |  |       "systemd-udevd-kernel.socket" | 
					
						
							| 
									
										
										
										
											2014-04-17 18:52:31 +02:00
										 |  |  |  |       "systemd-udevd.service" | 
					
						
							| 
									
										
										
										
											2012-06-15 13:09:22 -04:00
										 |  |  |  |       "systemd-udev-settle.service" | 
					
						
							|  |  |  |  |       "systemd-udev-trigger.service" | 
					
						
							| 
									
										
										
										
											2017-02-08 21:42:07 +03:00
										 |  |  |  |       # hwdb.bin is managed by NixOS | 
					
						
							|  |  |  |  |       # "systemd-hwdb-update.service" | 
					
						
							| 
									
										
										
										
											2012-06-15 13:09:22 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-17 18:52:31 +02:00
										 |  |  |  |       # Consoles. | 
					
						
							|  |  |  |  |       "getty.target" | 
					
						
							| 
									
										
										
										
											2018-02-11 23:43:24 +01:00
										 |  |  |  |       "getty-pre.target" | 
					
						
							| 
									
										
										
										
											2014-04-17 18:52:31 +02:00
										 |  |  |  |       "getty@.service" | 
					
						
							|  |  |  |  |       "serial-getty@.service" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "console-getty.service" | 
					
						
							| 
									
										
										
										
											2014-04-17 18:52:31 +02:00
										 |  |  |  |       "container-getty@.service" | 
					
						
							|  |  |  |  |       "systemd-vconsole-setup.service" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-14 18:14:48 -04:00
										 |  |  |  |       # Hardware (started by udev when a relevant device is plugged in). | 
					
						
							|  |  |  |  |       "sound.target" | 
					
						
							|  |  |  |  |       "bluetooth.target" | 
					
						
							|  |  |  |  |       "printer.target" | 
					
						
							|  |  |  |  |       "smartcard.target" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |       # Login stuff. | 
					
						
							|  |  |  |  |       "systemd-logind.service" | 
					
						
							|  |  |  |  |       "autovt@.service" | 
					
						
							|  |  |  |  |       "systemd-user-sessions.service" | 
					
						
							| 
									
										
										
										
											2019-10-03 22:24:15 +02:00
										 |  |  |  |       "dbus-org.freedesktop.import1.service" | 
					
						
							| 
									
										
										
										
											2014-04-16 10:48:14 +02:00
										 |  |  |  |       "dbus-org.freedesktop.machine1.service" | 
					
						
							| 
									
										
										
										
											2012-06-15 14:51:48 -04:00
										 |  |  |  |       "user@.service" | 
					
						
							| 
									
										
										
										
											2018-08-04 11:22:37 +01:00
										 |  |  |  |       "user-runtime-dir@.service" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |       # Journal. | 
					
						
							|  |  |  |  |       "systemd-journald.socket" | 
					
						
							|  |  |  |  |       "systemd-journald.service" | 
					
						
							| 
									
										
										
										
											2012-07-20 12:02:42 -04:00
										 |  |  |  |       "systemd-journal-flush.service" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "systemd-journal-catalog-update.service" | 
					
						
							| 
									
										
										
										
											2015-05-11 14:41:41 +02:00
										 |  |  |  |       "systemd-journald-audit.socket" | 
					
						
							| 
									
										
										
										
											2014-08-23 23:28:03 +02:00
										 |  |  |  |       "systemd-journald-dev-log.socket" | 
					
						
							| 
									
										
										
										
											2012-07-16 17:47:11 -04:00
										 |  |  |  |       "syslog.socket" | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-16 11:29:41 +02:00
										 |  |  |  |       # Coredumps. | 
					
						
							|  |  |  |  |       "systemd-coredump.socket" | 
					
						
							|  |  |  |  |       "systemd-coredump@.service" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |       # SysV init compatibility. | 
					
						
							|  |  |  |  |       "systemd-initctl.socket" | 
					
						
							|  |  |  |  |       "systemd-initctl.service" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-06 16:52:08 -04:00
										 |  |  |  |       # Kernel module loading. | 
					
						
							| 
									
										
										
										
											2014-04-17 18:52:31 +02:00
										 |  |  |  |       "systemd-modules-load.service" | 
					
						
							|  |  |  |  |       "kmod-static-nodes.service" | 
					
						
							| 
									
										
										
										
											2012-08-06 16:52:08 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  |       # Filesystems. | 
					
						
							| 
									
										
										
										
											2012-07-16 17:47:11 -04:00
										 |  |  |  |       "systemd-fsck@.service" | 
					
						
							|  |  |  |  |       "systemd-fsck-root.service" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |       "systemd-remount-fs.service" | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  |       "local-fs.target" | 
					
						
							|  |  |  |  |       "local-fs-pre.target" | 
					
						
							|  |  |  |  |       "remote-fs.target" | 
					
						
							|  |  |  |  |       "remote-fs-pre.target" | 
					
						
							|  |  |  |  |       "swap.target" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |       "dev-hugepages.mount" | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  |       "dev-mqueue.mount" | 
					
						
							| 
									
										
										
										
											2014-04-28 09:13:57 +02:00
										 |  |  |  |       "sys-fs-fuse-connections.mount" | 
					
						
							|  |  |  |  |       "sys-kernel-config.mount" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |       "sys-kernel-debug.mount" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-16 00:59:26 +02:00
										 |  |  |  |       # Maintaining state across reboots. | 
					
						
							|  |  |  |  |       "systemd-random-seed.service" | 
					
						
							| 
									
										
										
										
											2014-04-18 19:37:15 +02:00
										 |  |  |  |       "systemd-backlight@.service" | 
					
						
							| 
									
										
										
										
											2015-10-07 21:48:30 +02:00
										 |  |  |  |       "systemd-rfkill.service" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "systemd-rfkill.socket" | 
					
						
							| 
									
										
										
										
											2014-04-16 00:59:26 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |       # Hibernate / suspend. | 
					
						
							|  |  |  |  |       "hibernate.target" | 
					
						
							|  |  |  |  |       "suspend.target" | 
					
						
							| 
									
										
										
										
											2019-08-26 11:04:10 +02:00
										 |  |  |  |       "suspend-then-hibernate.target" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |       "sleep.target" | 
					
						
							| 
									
										
										
										
											2013-03-27 13:58:12 +01:00
										 |  |  |  |       "hybrid-sleep.target" | 
					
						
							| 
									
										
										
										
											2012-07-20 15:40:50 -04:00
										 |  |  |  |       "systemd-hibernate.service" | 
					
						
							| 
									
										
										
										
											2013-03-27 13:58:12 +01:00
										 |  |  |  |       "systemd-hybrid-sleep.service" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "systemd-suspend.service" | 
					
						
							| 
									
										
										
										
											2019-08-26 11:04:10 +02:00
										 |  |  |  |       "systemd-suspend-then-hibernate.service" | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |       # Reboot stuff. | 
					
						
							|  |  |  |  |       "reboot.target" | 
					
						
							| 
									
										
										
										
											2012-07-16 17:47:11 -04:00
										 |  |  |  |       "systemd-reboot.service" | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  |       "poweroff.target" | 
					
						
							| 
									
										
										
										
											2012-07-16 17:47:11 -04:00
										 |  |  |  |       "systemd-poweroff.service" | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  |       "halt.target" | 
					
						
							| 
									
										
										
										
											2012-07-16 17:47:11 -04:00
										 |  |  |  |       "systemd-halt.service" | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  |       "shutdown.target" | 
					
						
							|  |  |  |  |       "umount.target" | 
					
						
							|  |  |  |  |       "final.target" | 
					
						
							| 
									
										
										
										
											2012-08-14 18:14:48 -04:00
										 |  |  |  |       "kexec.target" | 
					
						
							| 
									
										
										
										
											2013-09-16 17:15:42 +02:00
										 |  |  |  |       "systemd-kexec.service" | 
					
						
							| 
									
										
										
										
											2014-04-16 00:59:26 +02:00
										 |  |  |  |       "systemd-update-utmp.service" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-19 17:02:54 -04:00
										 |  |  |  |       # Password entry. | 
					
						
							|  |  |  |  |       "systemd-ask-password-console.path" | 
					
						
							|  |  |  |  |       "systemd-ask-password-console.service" | 
					
						
							|  |  |  |  |       "systemd-ask-password-wall.path" | 
					
						
							|  |  |  |  |       "systemd-ask-password-wall.service" | 
					
						
							| 
									
										
										
										
											2014-04-16 00:59:26 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |       # Slices / containers. | 
					
						
							|  |  |  |  |       "slices.target" | 
					
						
							|  |  |  |  |       "user.slice" | 
					
						
							|  |  |  |  |       "machine.slice" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "machines.target" | 
					
						
							| 
									
										
										
										
											2019-10-03 22:24:15 +02:00
										 |  |  |  |       "systemd-importd.service" | 
					
						
							| 
									
										
										
										
											2014-04-16 00:59:26 +02:00
										 |  |  |  |       "systemd-machined.service" | 
					
						
							| 
									
										
										
										
											2016-06-09 15:45:55 +02:00
										 |  |  |  |       "systemd-nspawn@.service" | 
					
						
							| 
									
										
										
										
											2014-04-17 13:23:06 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |       # Temporary file creation / cleanup. | 
					
						
							|  |  |  |  |       "systemd-tmpfiles-clean.service" | 
					
						
							| 
									
										
										
										
											2014-04-17 16:10:48 +02:00
										 |  |  |  |       "systemd-tmpfiles-clean.timer" | 
					
						
							| 
									
										
										
										
											2014-04-17 13:23:06 +02:00
										 |  |  |  |       "systemd-tmpfiles-setup.service" | 
					
						
							|  |  |  |  |       "systemd-tmpfiles-setup-dev.service" | 
					
						
							| 
									
										
										
										
											2014-04-17 18:52:31 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |       # Misc. | 
					
						
							|  |  |  |  |       "systemd-sysctl.service" | 
					
						
							| 
									
										
										
										
											2015-12-06 14:30:18 +01:00
										 |  |  |  |       "dbus-org.freedesktop.timedate1.service" | 
					
						
							|  |  |  |  |       "dbus-org.freedesktop.locale1.service" | 
					
						
							|  |  |  |  |       "dbus-org.freedesktop.hostname1.service" | 
					
						
							|  |  |  |  |       "systemd-timedated.service" | 
					
						
							|  |  |  |  |       "systemd-localed.service" | 
					
						
							|  |  |  |  |       "systemd-hostnamed.service" | 
					
						
							| 
									
										
										
										
											2015-12-21 12:09:38 +01:00
										 |  |  |  |       "systemd-binfmt.service" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "systemd-exit.service" | 
					
						
							| 
									
										
										
										
											2018-02-11 23:43:24 +01:00
										 |  |  |  |       "systemd-update-done.service" | 
					
						
							| 
									
										
										
										
											2018-05-26 16:49:08 -07:00
										 |  |  |  |     ] ++ optionals config.services.journald.enableHttpGateway [ | 
					
						
							|  |  |  |  |       "systemd-journal-gatewayd.socket" | 
					
						
							|  |  |  |  |       "systemd-journal-gatewayd.service" | 
					
						
							|  |  |  |  |     ] ++ cfg.additionalUpstreamSystemUnits; | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |   upstreamSystemWants = | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |     [ "sysinit.target.wants" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |       "sockets.target.wants" | 
					
						
							|  |  |  |  |       "local-fs.target.wants" | 
					
						
							|  |  |  |  |       "multi-user.target.wants" | 
					
						
							| 
									
										
										
										
											2013-03-27 13:58:12 +01:00
										 |  |  |  |       "timers.target.wants" | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |     ]; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |   upstreamUserUnits = | 
					
						
							|  |  |  |  |     [ "basic.target" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "bluetooth.target" | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |       "default.target" | 
					
						
							|  |  |  |  |       "exit.target" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "graphical-session-pre.target" | 
					
						
							|  |  |  |  |       "graphical-session.target" | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |       "paths.target" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "printer.target" | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |       "shutdown.target" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "smartcard.target" | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |       "sockets.target" | 
					
						
							| 
									
										
										
										
											2017-01-26 01:52:38 +01:00
										 |  |  |  |       "sound.target" | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |       "systemd-exit.service" | 
					
						
							| 
									
										
										
										
											2019-06-07 14:43:38 +08:00
										 |  |  |  |       "systemd-tmpfiles-clean.service" | 
					
						
							|  |  |  |  |       "systemd-tmpfiles-clean.timer" | 
					
						
							|  |  |  |  |       "systemd-tmpfiles-setup.service" | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |       "timers.target" | 
					
						
							|  |  |  |  |     ]; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-15 16:01:30 -04:00
										 |  |  |  |   makeJobScript = name: text: | 
					
						
							| 
									
										
										
										
											2018-08-07 09:00:52 +02:00
										 |  |  |  |     let mkScriptName =  s: "unit-script-" + (replaceChars [ "\\" "@" ] [ "-" "_" ] (shellEscape s) ); | 
					
						
							|  |  |  |  |     in  pkgs.writeTextFile { name = mkScriptName name; executable = true; inherit text; }; | 
					
						
							| 
									
										
										
										
											2012-07-19 17:41:42 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-20 17:34:43 +00:00
										 |  |  |  |   unitConfig = { config, options, ... }: { | 
					
						
							| 
									
										
										
										
											2012-10-09 15:14:15 -04:00
										 |  |  |  |     config = { | 
					
						
							|  |  |  |  |       unitConfig = | 
					
						
							| 
									
										
										
										
											2014-03-12 18:35:50 +01:00
										 |  |  |  |         optionalAttrs (config.requires != []) | 
					
						
							|  |  |  |  |           { Requires = toString config.requires; } | 
					
						
							|  |  |  |  |         // optionalAttrs (config.wants != []) | 
					
						
							|  |  |  |  |           { Wants = toString config.wants; } | 
					
						
							|  |  |  |  |         // optionalAttrs (config.after != []) | 
					
						
							|  |  |  |  |           { After = toString config.after; } | 
					
						
							|  |  |  |  |         // optionalAttrs (config.before != []) | 
					
						
							|  |  |  |  |           { Before = toString config.before; } | 
					
						
							|  |  |  |  |         // optionalAttrs (config.bindsTo != []) | 
					
						
							|  |  |  |  |           { BindsTo = toString config.bindsTo; } | 
					
						
							|  |  |  |  |         // optionalAttrs (config.partOf != []) | 
					
						
							|  |  |  |  |           { PartOf = toString config.partOf; } | 
					
						
							|  |  |  |  |         // optionalAttrs (config.conflicts != []) | 
					
						
							|  |  |  |  |           { Conflicts = toString config.conflicts; } | 
					
						
							| 
									
										
										
										
											2014-11-19 13:11:30 -08:00
										 |  |  |  |         // optionalAttrs (config.requisite != []) | 
					
						
							|  |  |  |  |           { Requisite = toString config.requisite; } | 
					
						
							| 
									
										
										
										
											2014-03-12 18:35:50 +01:00
										 |  |  |  |         // optionalAttrs (config.restartTriggers != []) | 
					
						
							|  |  |  |  |           { X-Restart-Triggers = toString config.restartTriggers; } | 
					
						
							|  |  |  |  |         // optionalAttrs (config.description != "") { | 
					
						
							| 
									
										
										
										
											2016-04-27 10:56:40 +08:00
										 |  |  |  |           Description = config.description; } | 
					
						
							|  |  |  |  |         // optionalAttrs (config.documentation != []) { | 
					
						
							|  |  |  |  |           Documentation = toString config.documentation; } | 
					
						
							|  |  |  |  |         // optionalAttrs (config.onFailure != []) { | 
					
						
							| 
									
										
										
										
											2018-11-20 17:34:43 +00:00
										 |  |  |  |           OnFailure = toString config.onFailure; } | 
					
						
							|  |  |  |  |         // optionalAttrs (options.startLimitIntervalSec.isDefined) { | 
					
						
							|  |  |  |  |           StartLimitIntervalSec = toString config.startLimitIntervalSec; | 
					
						
							| 
									
										
										
										
											2012-10-09 15:14:15 -04:00
										 |  |  |  |         }; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  |   }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-06 11:45:59 -04:00
										 |  |  |  |   serviceConfig = { name, config, ... }: { | 
					
						
							| 
									
										
										
										
											2013-11-18 15:45:24 +01:00
										 |  |  |  |     config = mkMerge | 
					
						
							| 
									
										
										
										
											2014-04-17 18:52:31 +02:00
										 |  |  |  |       [ { # Default path for systemd services.  Should be quite minimal. | 
					
						
							| 
									
										
										
										
											2020-01-06 15:58:06 +01:00
										 |  |  |  |           path = mkAfter | 
					
						
							| 
									
										
										
										
											2013-11-18 15:45:24 +01:00
										 |  |  |  |             [ pkgs.coreutils | 
					
						
							|  |  |  |  |               pkgs.findutils | 
					
						
							|  |  |  |  |               pkgs.gnugrep | 
					
						
							|  |  |  |  |               pkgs.gnused | 
					
						
							|  |  |  |  |               systemd | 
					
						
							|  |  |  |  |             ]; | 
					
						
							|  |  |  |  |           environment.PATH = config.path; | 
					
						
							| 
									
										
										
										
											2014-04-17 18:52:31 +02:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-11-18 15:45:24 +01:00
										 |  |  |  |         (mkIf (config.preStart != "") | 
					
						
							|  |  |  |  |           { serviceConfig.ExecStartPre = makeJobScript "${name}-pre-start" ''
 | 
					
						
							| 
									
										
										
										
											2018-03-01 14:38:53 -05:00
										 |  |  |  |               #! ${pkgs.runtimeShell} -e | 
					
						
							| 
									
										
										
										
											2013-11-18 15:45:24 +01:00
										 |  |  |  |               ${config.preStart} | 
					
						
							|  |  |  |  |             '';
 | 
					
						
							|  |  |  |  |           }) | 
					
						
							|  |  |  |  |         (mkIf (config.script != "") | 
					
						
							|  |  |  |  |           { serviceConfig.ExecStart = makeJobScript "${name}-start" ''
 | 
					
						
							| 
									
										
										
										
											2018-03-01 14:38:53 -05:00
										 |  |  |  |               #! ${pkgs.runtimeShell} -e | 
					
						
							| 
									
										
										
										
											2013-11-18 15:45:24 +01:00
										 |  |  |  |               ${config.script} | 
					
						
							|  |  |  |  |             '' + " " + config.scriptArgs;
 | 
					
						
							|  |  |  |  |           }) | 
					
						
							|  |  |  |  |         (mkIf (config.postStart != "") | 
					
						
							|  |  |  |  |           { serviceConfig.ExecStartPost = makeJobScript "${name}-post-start" ''
 | 
					
						
							| 
									
										
										
										
											2018-03-01 14:38:53 -05:00
										 |  |  |  |               #! ${pkgs.runtimeShell} -e | 
					
						
							| 
									
										
										
										
											2013-11-18 15:45:24 +01:00
										 |  |  |  |               ${config.postStart} | 
					
						
							|  |  |  |  |             '';
 | 
					
						
							|  |  |  |  |           }) | 
					
						
							| 
									
										
										
										
											2014-09-15 20:03:20 -07:00
										 |  |  |  |         (mkIf (config.reload != "") | 
					
						
							|  |  |  |  |           { serviceConfig.ExecReload = makeJobScript "${name}-reload" ''
 | 
					
						
							| 
									
										
										
										
											2018-03-01 14:38:53 -05:00
										 |  |  |  |               #! ${pkgs.runtimeShell} -e | 
					
						
							| 
									
										
										
										
											2014-09-15 20:03:20 -07:00
										 |  |  |  |               ${config.reload} | 
					
						
							|  |  |  |  |             '';
 | 
					
						
							|  |  |  |  |           }) | 
					
						
							| 
									
										
										
										
											2013-11-26 18:24:55 +01:00
										 |  |  |  |         (mkIf (config.preStop != "") | 
					
						
							|  |  |  |  |           { serviceConfig.ExecStop = makeJobScript "${name}-pre-stop" ''
 | 
					
						
							| 
									
										
										
										
											2018-03-01 14:38:53 -05:00
										 |  |  |  |               #! ${pkgs.runtimeShell} -e | 
					
						
							| 
									
										
										
										
											2013-11-26 18:24:55 +01:00
										 |  |  |  |               ${config.preStop} | 
					
						
							|  |  |  |  |             '';
 | 
					
						
							|  |  |  |  |           }) | 
					
						
							| 
									
										
										
										
											2013-11-18 15:45:24 +01:00
										 |  |  |  |         (mkIf (config.postStop != "") | 
					
						
							|  |  |  |  |           { serviceConfig.ExecStopPost = makeJobScript "${name}-post-stop" ''
 | 
					
						
							| 
									
										
										
										
											2018-03-01 14:38:53 -05:00
										 |  |  |  |               #! ${pkgs.runtimeShell} -e | 
					
						
							| 
									
										
										
										
											2013-11-18 15:45:24 +01:00
										 |  |  |  |               ${config.postStop} | 
					
						
							|  |  |  |  |             '';
 | 
					
						
							|  |  |  |  |           }) | 
					
						
							|  |  |  |  |       ]; | 
					
						
							| 
									
										
										
										
											2012-08-06 11:45:59 -04:00
										 |  |  |  |   }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |  |   mountConfig = { config, ... }: { | 
					
						
							| 
									
										
										
										
											2012-12-28 13:29:53 +01:00
										 |  |  |  |     config = { | 
					
						
							|  |  |  |  |       mountConfig = | 
					
						
							|  |  |  |  |         { What = config.what; | 
					
						
							|  |  |  |  |           Where = config.where; | 
					
						
							|  |  |  |  |         } // optionalAttrs (config.type != "") { | 
					
						
							|  |  |  |  |           Type = config.type; | 
					
						
							|  |  |  |  |         } // optionalAttrs (config.options != "") { | 
					
						
							|  |  |  |  |           Options = config.options; | 
					
						
							|  |  |  |  |         }; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  |   }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |  |   automountConfig = { config, ... }: { | 
					
						
							| 
									
										
										
										
											2013-09-23 22:56:05 +02:00
										 |  |  |  |     config = { | 
					
						
							|  |  |  |  |       automountConfig = | 
					
						
							|  |  |  |  |         { Where = config.where; | 
					
						
							|  |  |  |  |         }; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  |   }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-17 18:52:31 +02:00
										 |  |  |  |   commonUnitText = def: ''
 | 
					
						
							| 
									
										
										
										
											2014-03-12 18:20:57 +01:00
										 |  |  |  |       [Unit] | 
					
						
							|  |  |  |  |       ${attrsToSection def.unitConfig} | 
					
						
							|  |  |  |  |     '';
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |   targetToUnit = name: def: | 
					
						
							| 
									
										
										
										
											2017-02-02 00:51:16 +03:00
										 |  |  |  |     { inherit (def) aliases wantedBy requiredBy enable; | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |       text = | 
					
						
							|  |  |  |  |         ''
 | 
					
						
							|  |  |  |  |           [Unit] | 
					
						
							|  |  |  |  |           ${attrsToSection def.unitConfig} | 
					
						
							|  |  |  |  |         '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2012-06-18 15:28:31 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |   serviceToUnit = name: def: | 
					
						
							| 
									
										
										
										
											2017-02-02 00:51:16 +03:00
										 |  |  |  |     { inherit (def) aliases wantedBy requiredBy enable; | 
					
						
							| 
									
										
										
										
											2014-03-12 18:20:57 +01:00
										 |  |  |  |       text = commonUnitText def + | 
					
						
							| 
									
										
										
										
											2012-06-18 15:28:31 -04:00
										 |  |  |  |         ''
 | 
					
						
							|  |  |  |  |           [Service] | 
					
						
							| 
									
										
										
										
											2012-10-30 17:27:14 +01:00
										 |  |  |  |           ${let env = cfg.globalEnvironment // def.environment; | 
					
						
							| 
									
										
										
										
											2014-07-30 10:28:05 +02:00
										 |  |  |  |             in concatMapStrings (n: | 
					
						
							| 
									
										
										
										
											2019-08-13 21:52:01 +00:00
										 |  |  |  |               let s = optionalString (env.${n} != null) | 
					
						
							| 
									
										
										
										
											2017-01-27 22:01:21 +00:00
										 |  |  |  |                 "Environment=${builtins.toJSON "${n}=${env.${n}}"}\n"; | 
					
						
							| 
									
										
										
										
											2019-02-10 00:11:31 +00:00
										 |  |  |  |               # systemd max line length is now 1MiB | 
					
						
							|  |  |  |  |               # https://github.com/systemd/systemd/commit/e6dde451a51dc5aaa7f4d98d39b8fe735f73d2af | 
					
						
							|  |  |  |  |               in if stringLength s >= 1048576 then throw "The value of the environment variable ‘${n}’ in systemd service ‘${name}.service’ is too long." else s) (attrNames env)} | 
					
						
							| 
									
										
										
										
											2014-03-17 15:02:53 +01:00
										 |  |  |  |           ${if def.reloadIfChanged then ''
 | 
					
						
							|  |  |  |  |             X-ReloadIfChanged=true | 
					
						
							|  |  |  |  |           '' else if !def.restartIfChanged then '' | 
					
						
							|  |  |  |  |             X-RestartIfChanged=false | 
					
						
							|  |  |  |  |           '' else ""}
 | 
					
						
							| 
									
										
										
										
											2013-01-05 01:05:25 +01:00
										 |  |  |  |           ${optionalString (!def.stopIfChanged) "X-StopIfChanged=false"} | 
					
						
							| 
									
										
										
										
											2012-10-01 16:27:42 -04:00
										 |  |  |  |           ${attrsToSection def.serviceConfig} | 
					
						
							| 
									
										
										
										
											2012-06-18 15:28:31 -04:00
										 |  |  |  |         '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |   socketToUnit = name: def: | 
					
						
							| 
									
										
										
										
											2017-02-02 00:51:16 +03:00
										 |  |  |  |     { inherit (def) aliases wantedBy requiredBy enable; | 
					
						
							| 
									
										
										
										
											2014-03-12 18:20:57 +01:00
										 |  |  |  |       text = commonUnitText def + | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |         ''
 | 
					
						
							|  |  |  |  |           [Socket] | 
					
						
							|  |  |  |  |           ${attrsToSection def.socketConfig} | 
					
						
							| 
									
										
										
										
											2013-05-14 16:07:55 +02:00
										 |  |  |  |           ${concatStringsSep "\n" (map (s: "ListenStream=${s}") def.listenStreams)} | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |         '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-02 01:03:13 +01:00
										 |  |  |  |   timerToUnit = name: def: | 
					
						
							| 
									
										
										
										
											2017-02-02 00:51:16 +03:00
										 |  |  |  |     { inherit (def) aliases wantedBy requiredBy enable; | 
					
						
							| 
									
										
										
										
											2014-03-12 18:20:57 +01:00
										 |  |  |  |       text = commonUnitText def + | 
					
						
							| 
									
										
										
										
											2013-03-02 01:03:13 +01:00
										 |  |  |  |         ''
 | 
					
						
							|  |  |  |  |           [Timer] | 
					
						
							|  |  |  |  |           ${attrsToSection def.timerConfig} | 
					
						
							|  |  |  |  |         '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-31 12:23:27 +02:00
										 |  |  |  |   pathToUnit = name: def: | 
					
						
							| 
									
										
										
										
											2017-02-02 00:51:16 +03:00
										 |  |  |  |     { inherit (def) aliases wantedBy requiredBy enable; | 
					
						
							| 
									
										
										
										
											2014-03-31 12:23:27 +02:00
										 |  |  |  |       text = commonUnitText def + | 
					
						
							|  |  |  |  |         ''
 | 
					
						
							|  |  |  |  |           [Path] | 
					
						
							|  |  |  |  |           ${attrsToSection def.pathConfig} | 
					
						
							|  |  |  |  |         '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-28 13:29:53 +01:00
										 |  |  |  |   mountToUnit = name: def: | 
					
						
							| 
									
										
										
										
											2017-02-02 00:51:16 +03:00
										 |  |  |  |     { inherit (def) aliases wantedBy requiredBy enable; | 
					
						
							| 
									
										
										
										
											2014-03-12 18:20:57 +01:00
										 |  |  |  |       text = commonUnitText def + | 
					
						
							| 
									
										
										
										
											2012-12-28 13:29:53 +01:00
										 |  |  |  |         ''
 | 
					
						
							|  |  |  |  |           [Mount] | 
					
						
							|  |  |  |  |           ${attrsToSection def.mountConfig} | 
					
						
							|  |  |  |  |         '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 22:56:05 +02:00
										 |  |  |  |   automountToUnit = name: def: | 
					
						
							| 
									
										
										
										
											2017-02-02 00:51:16 +03:00
										 |  |  |  |     { inherit (def) aliases wantedBy requiredBy enable; | 
					
						
							| 
									
										
										
										
											2014-03-12 18:20:57 +01:00
										 |  |  |  |       text = commonUnitText def + | 
					
						
							| 
									
										
										
										
											2013-09-23 22:56:05 +02:00
										 |  |  |  |         ''
 | 
					
						
							|  |  |  |  |           [Automount] | 
					
						
							|  |  |  |  |           ${attrsToSection def.automountConfig} | 
					
						
							|  |  |  |  |         '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-20 09:21:52 +03:00
										 |  |  |  |   sliceToUnit = name: def: | 
					
						
							| 
									
										
										
										
											2017-02-02 00:51:16 +03:00
										 |  |  |  |     { inherit (def) aliases wantedBy requiredBy enable; | 
					
						
							| 
									
										
										
										
											2016-12-20 09:21:52 +03:00
										 |  |  |  |       text = commonUnitText def + | 
					
						
							|  |  |  |  |         ''
 | 
					
						
							|  |  |  |  |           [Slice] | 
					
						
							|  |  |  |  |           ${attrsToSection def.sliceConfig} | 
					
						
							|  |  |  |  |         '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-21 16:30:53 +02:00
										 |  |  |  |   logindHandlerType = types.enum [ | 
					
						
							|  |  |  |  |     "ignore" "poweroff" "reboot" "halt" "kexec" "suspend" | 
					
						
							| 
									
										
										
										
											2018-10-28 13:41:21 -07:00
										 |  |  |  |     "hibernate" "hybrid-sleep" "suspend-then-hibernate" "lock" | 
					
						
							| 
									
										
										
										
											2017-05-21 16:30:53 +02:00
										 |  |  |  |   ]; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  | in | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |   ###### interface | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   options = { | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:17:57 +01:00
										 |  |  |  |     systemd.package = mkOption { | 
					
						
							|  |  |  |  |       default = pkgs.systemd; | 
					
						
							| 
									
										
										
										
											2016-01-17 19:34:55 +01:00
										 |  |  |  |       defaultText = "pkgs.systemd"; | 
					
						
							| 
									
										
										
										
											2013-01-16 13:17:57 +01:00
										 |  |  |  |       type = types.package; | 
					
						
							|  |  |  |  |       description = "The systemd package."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |     systemd.units = mkOption { | 
					
						
							| 
									
										
										
										
											2012-06-18 15:28:31 -04:00
										 |  |  |  |       description = "Definition of systemd units."; | 
					
						
							| 
									
										
										
										
											2012-06-17 23:31:21 -04:00
										 |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; attrsOf (submodule ( | 
					
						
							|  |  |  |  |         { name, config, ... }: | 
					
						
							| 
									
										
										
										
											2014-04-17 23:35:05 +02:00
										 |  |  |  |         { options = concreteUnitOptions; | 
					
						
							| 
									
										
										
										
											2013-11-18 13:18:58 +01:00
										 |  |  |  |           config = { | 
					
						
							| 
									
										
										
										
											2014-03-13 00:18:17 +01:00
										 |  |  |  |             unit = mkDefault (makeUnit name config); | 
					
						
							| 
									
										
										
										
											2013-11-18 13:18:58 +01:00
										 |  |  |  |           }; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |         })); | 
					
						
							| 
									
										
										
										
											2012-06-18 15:28:31 -04:00
										 |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |     systemd.packages = mkOption { | 
					
						
							| 
									
										
										
										
											2012-08-21 11:28:47 -04:00
										 |  |  |  |       default = []; | 
					
						
							|  |  |  |  |       type = types.listOf types.package; | 
					
						
							| 
									
										
										
										
											2019-07-26 12:11:44 +03:00
										 |  |  |  |       example = literalExample "[ pkgs.systemd-cryptsetup-generator ]"; | 
					
						
							|  |  |  |  |       description = "Packages providing systemd units and hooks."; | 
					
						
							| 
									
										
										
										
											2012-08-21 11:28:47 -04:00
										 |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |     systemd.targets = mkOption { | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig] ); | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |       description = "Definition of systemd target units."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |     systemd.services = mkOption { | 
					
						
							| 
									
										
										
										
											2012-06-18 15:28:31 -04:00
										 |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig serviceConfig ]); | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |       description = "Definition of systemd service units."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |     systemd.sockets = mkOption { | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; attrsOf (submodule [ { options = socketOptions; } unitConfig ]); | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |       description = "Definition of systemd socket units."; | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-02 01:03:13 +01:00
										 |  |  |  |     systemd.timers = mkOption { | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; attrsOf (submodule [ { options = timerOptions; } unitConfig ]); | 
					
						
							| 
									
										
										
										
											2013-03-02 01:03:13 +01:00
										 |  |  |  |       description = "Definition of systemd timer units."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-31 12:23:27 +02:00
										 |  |  |  |     systemd.paths = mkOption { | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; attrsOf (submodule [ { options = pathOptions; } unitConfig ]); | 
					
						
							| 
									
										
										
										
											2014-03-31 12:23:27 +02:00
										 |  |  |  |       description = "Definition of systemd path units."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |     systemd.mounts = mkOption { | 
					
						
							| 
									
										
										
										
											2012-12-28 13:29:53 +01:00
										 |  |  |  |       default = []; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; listOf (submodule [ { options = mountOptions; } unitConfig mountConfig ]); | 
					
						
							| 
									
										
										
										
											2012-12-28 13:29:53 +01:00
										 |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Definition of systemd mount units. | 
					
						
							|  |  |  |  |         This is a list instead of an attrSet, because systemd mandates the names to be derived from | 
					
						
							|  |  |  |  |         the 'where' attribute. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 22:56:05 +02:00
										 |  |  |  |     systemd.automounts = mkOption { | 
					
						
							|  |  |  |  |       default = []; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; listOf (submodule [ { options = automountOptions; } unitConfig automountConfig ]); | 
					
						
							| 
									
										
										
										
											2013-09-23 22:56:05 +02:00
										 |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Definition of systemd automount units. | 
					
						
							|  |  |  |  |         This is a list instead of an attrSet, because systemd mandates the names to be derived from | 
					
						
							|  |  |  |  |         the 'where' attribute. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-20 09:21:52 +03:00
										 |  |  |  |     systemd.slices = mkOption { | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							|  |  |  |  |       type = with types; attrsOf (submodule [ { options = sliceOptions; } unitConfig] ); | 
					
						
							|  |  |  |  |       description = "Definition of slice configurations."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  |     systemd.generators = mkOption { | 
					
						
							|  |  |  |  |       type = types.attrsOf types.path; | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2019-08-13 21:52:01 +00:00
										 |  |  |  |       example = { systemd-gpt-auto-generator = "/dev/null"; }; | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Definition of systemd generators. | 
					
						
							|  |  |  |  |         For each <literal>NAME = VALUE</literal> pair of the attrSet, a link is generated from | 
					
						
							|  |  |  |  |         <literal>/etc/systemd/system-generators/NAME</literal> to <literal>VALUE</literal>. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-25 16:27:28 +03:00
										 |  |  |  |     systemd.shutdown = mkOption { | 
					
						
							|  |  |  |  |       type = types.attrsOf types.path; | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Definition of systemd shutdown executables. | 
					
						
							|  |  |  |  |         For each <literal>NAME = VALUE</literal> pair of the attrSet, a link is generated from | 
					
						
							|  |  |  |  |         <literal>/etc/systemd/system-shutdown/NAME</literal> to <literal>VALUE</literal>. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |     systemd.defaultUnit = mkOption { | 
					
						
							| 
									
										
										
										
											2012-06-17 23:31:21 -04:00
										 |  |  |  |       default = "multi-user.target"; | 
					
						
							| 
									
										
										
										
											2013-10-30 11:02:04 +01:00
										 |  |  |  |       type = types.str; | 
					
						
							| 
									
										
										
										
											2012-06-17 23:31:21 -04:00
										 |  |  |  |       description = "Default unit started when the system boots."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2012-07-19 17:32:50 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-19 09:42:53 +02:00
										 |  |  |  |     systemd.ctrlAltDelUnit = mkOption { | 
					
						
							|  |  |  |  |       default = "reboot.target"; | 
					
						
							|  |  |  |  |       type = types.str; | 
					
						
							|  |  |  |  |       example = "poweroff.target"; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Target that should be started when Ctrl-Alt-Delete is pressed. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |     systemd.globalEnvironment = mkOption { | 
					
						
							| 
									
										
										
										
											2019-08-08 23:35:52 +02:00
										 |  |  |  |       type = with types; attrsOf (nullOr (oneOf [ str path package ])); | 
					
						
							| 
									
										
										
										
											2012-10-30 17:27:14 +01:00
										 |  |  |  |       default = {}; | 
					
						
							|  |  |  |  |       example = { TZ = "CET"; }; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Environment variables passed to <emphasis>all</emphasis> systemd units. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-10 22:23:42 +01:00
										 |  |  |  |     systemd.enableCgroupAccounting = mkOption { | 
					
						
							| 
									
										
										
										
											2019-08-19 17:50:29 +02:00
										 |  |  |  |       default = true; | 
					
						
							| 
									
										
										
										
											2018-03-10 22:23:42 +01:00
										 |  |  |  |       type = types.bool; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Whether to enable cgroup accounting. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-07 20:24:29 +02:00
										 |  |  |  |     systemd.coredump.enable = mkOption { | 
					
						
							|  |  |  |  |       default = true; | 
					
						
							|  |  |  |  |       type = types.bool; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Whether core dumps should be processed by | 
					
						
							|  |  |  |  |         <command>systemd-coredump</command>. If disabled, core dumps | 
					
						
							|  |  |  |  |         appear in the current directory of the crashing process. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-16 11:29:41 +02:00
										 |  |  |  |     systemd.coredump.extraConfig = mkOption { | 
					
						
							|  |  |  |  |       default = ""; | 
					
						
							|  |  |  |  |       type = types.lines; | 
					
						
							|  |  |  |  |       example = "Storage=journal"; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Extra config options for systemd-coredump. See coredump.conf(5) man page | 
					
						
							|  |  |  |  |         for available options. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-15 19:49:01 +01:00
										 |  |  |  |     systemd.extraConfig = mkOption { | 
					
						
							|  |  |  |  |       default = ""; | 
					
						
							|  |  |  |  |       type = types.lines; | 
					
						
							|  |  |  |  |       example = "DefaultLimitCORE=infinity"; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Extra config options for systemd. See man systemd-system.conf for | 
					
						
							|  |  |  |  |         available options. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-19 17:32:50 -04:00
										 |  |  |  |     services.journald.console = mkOption { | 
					
						
							|  |  |  |  |       default = ""; | 
					
						
							| 
									
										
										
										
											2013-10-30 11:02:04 +01:00
										 |  |  |  |       type = types.str; | 
					
						
							| 
									
										
										
										
											2012-11-02 14:10:06 +01:00
										 |  |  |  |       description = "If non-empty, write log messages to the specified TTY device."; | 
					
						
							| 
									
										
										
										
											2012-07-19 17:32:50 -04:00
										 |  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2012-08-06 11:45:59 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 20:28:45 +01:00
										 |  |  |  |     services.journald.rateLimitInterval = mkOption { | 
					
						
							| 
									
										
										
										
											2018-07-25 20:01:58 -04:00
										 |  |  |  |       default = "30s"; | 
					
						
							| 
									
										
										
										
											2013-10-30 11:02:04 +01:00
										 |  |  |  |       type = types.str; | 
					
						
							| 
									
										
										
										
											2012-12-16 20:28:45 +01:00
										 |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Configures the rate limiting interval that is applied to all | 
					
						
							|  |  |  |  |         messages generated on the system. This rate limiting is applied | 
					
						
							|  |  |  |  |         per-service, so that two services which log do not interfere with | 
					
						
							|  |  |  |  |         each other's limit. The value may be specified in the following | 
					
						
							|  |  |  |  |         units: s, min, h, ms, us. To turn off any kind of rate limiting, | 
					
						
							|  |  |  |  |         set either value to 0. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     services.journald.rateLimitBurst = mkOption { | 
					
						
							| 
									
										
										
										
											2018-07-25 20:01:58 -04:00
										 |  |  |  |       default = 1000; | 
					
						
							| 
									
										
										
										
											2015-06-15 18:11:32 +02:00
										 |  |  |  |       type = types.int; | 
					
						
							| 
									
										
										
										
											2012-12-16 20:28:45 +01:00
										 |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Configures the rate limiting burst limit (number of messages per | 
					
						
							|  |  |  |  |         interval) that is applied to all messages generated on the system. | 
					
						
							|  |  |  |  |         This rate limiting is applied per-service, so that two services | 
					
						
							|  |  |  |  |         which log do not interfere with each other's limit. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-29 18:57:42 +08:00
										 |  |  |  |     services.journald.extraConfig = mkOption { | 
					
						
							|  |  |  |  |       default = ""; | 
					
						
							|  |  |  |  |       type = types.lines; | 
					
						
							|  |  |  |  |       example = "Storage=volatile"; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Extra config options for systemd-journald. See man journald.conf | 
					
						
							|  |  |  |  |         for available options. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-01 14:50:20 +01:00
										 |  |  |  |     services.journald.enableHttpGateway = mkOption { | 
					
						
							|  |  |  |  |       default = false; | 
					
						
							|  |  |  |  |       type = types.bool; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							| 
									
										
										
										
											2014-04-17 19:05:29 +02:00
										 |  |  |  |         Whether to enable the HTTP gateway to the journal. | 
					
						
							| 
									
										
										
										
											2014-02-01 14:50:20 +01:00
										 |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-27 13:01:30 -04:00
										 |  |  |  |     services.journald.forwardToSyslog = mkOption { | 
					
						
							|  |  |  |  |       default = config.services.rsyslogd.enable || config.services.syslog-ng.enable; | 
					
						
							| 
									
										
										
										
											2019-02-18 20:21:04 +01:00
										 |  |  |  |       defaultText = "services.rsyslogd.enable || services.syslog-ng.enable"; | 
					
						
							| 
									
										
										
										
											2018-10-27 13:01:30 -04:00
										 |  |  |  |       type = types.bool; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Whether to forward log messages to syslog. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-24 11:54:01 +01:00
										 |  |  |  |     services.logind.extraConfig = mkOption { | 
					
						
							|  |  |  |  |       default = ""; | 
					
						
							| 
									
										
										
										
											2013-11-15 21:56:45 +01:00
										 |  |  |  |       type = types.lines; | 
					
						
							| 
									
										
										
										
											2017-08-03 03:05:36 +02:00
										 |  |  |  |       example = "IdleAction=lock"; | 
					
						
							| 
									
										
										
										
											2013-02-24 11:54:01 +01:00
										 |  |  |  |       description = ''
 | 
					
						
							| 
									
										
										
										
											2018-12-11 16:51:16 -05:00
										 |  |  |  |         Extra config options for systemd-logind. See | 
					
						
							|  |  |  |  |         <link xlink:href="https://www.freedesktop.org/software/systemd/man/logind.conf.html"> | 
					
						
							|  |  |  |  |         logind.conf(5)</link> for available options. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     services.logind.killUserProcesses = mkOption { | 
					
						
							|  |  |  |  |       default = false; | 
					
						
							|  |  |  |  |       type = types.bool; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Specifies whether the processes of a user should be killed | 
					
						
							|  |  |  |  |         when the user logs out.  If true, the scope unit corresponding | 
					
						
							|  |  |  |  |         to the session and all processes inside that scope will be | 
					
						
							|  |  |  |  |         terminated.  If false, the scope is "abandoned" (see | 
					
						
							|  |  |  |  |         <link xlink:href="https://www.freedesktop.org/software/systemd/man/systemd.scope.html#"> | 
					
						
							|  |  |  |  |         systemd.scope(5)</link>), and processes are not killed. | 
					
						
							|  |  |  |  |         </para> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         <para> | 
					
						
							|  |  |  |  |         See <link xlink:href="https://www.freedesktop.org/software/systemd/man/logind.conf.html#KillUserProcesses=">logind.conf(5)</link> | 
					
						
							|  |  |  |  |         for more details. | 
					
						
							| 
									
										
										
										
											2013-02-24 11:54:01 +01:00
										 |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-21 16:30:53 +02:00
										 |  |  |  |     services.logind.lidSwitch = mkOption { | 
					
						
							|  |  |  |  |       default = "suspend"; | 
					
						
							|  |  |  |  |       example = "ignore"; | 
					
						
							|  |  |  |  |       type = logindHandlerType; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Specifies what to be done when the laptop lid is closed. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     services.logind.lidSwitchDocked = mkOption { | 
					
						
							|  |  |  |  |       default = "ignore"; | 
					
						
							|  |  |  |  |       example = "suspend"; | 
					
						
							|  |  |  |  |       type = logindHandlerType; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Specifies what to be done when the laptop lid is closed | 
					
						
							|  |  |  |  |         and another screen is added. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-16 23:56:22 +01:00
										 |  |  |  |     services.logind.lidSwitchExternalPower = mkOption { | 
					
						
							|  |  |  |  |       default = config.services.logind.lidSwitch; | 
					
						
							| 
									
										
										
										
											2019-02-18 20:21:04 +01:00
										 |  |  |  |       defaultText = "services.logind.lidSwitch"; | 
					
						
							| 
									
										
										
										
											2019-02-16 23:56:22 +01:00
										 |  |  |  |       example = "ignore"; | 
					
						
							|  |  |  |  |       type = logindHandlerType; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Specifies what to do when the laptop lid is closed and the system is | 
					
						
							|  |  |  |  |         on external power. By default use the same action as specified in | 
					
						
							|  |  |  |  |         services.logind.lidSwitch. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 16:40:54 +08:00
										 |  |  |  |     systemd.user.extraConfig = mkOption { | 
					
						
							|  |  |  |  |       default = ""; | 
					
						
							|  |  |  |  |       type = types.lines; | 
					
						
							|  |  |  |  |       example = "DefaultCPUAccounting=yes"; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Extra config options for systemd user instances. See man systemd-user.conf for | 
					
						
							|  |  |  |  |         available options. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-17 16:10:48 +02:00
										 |  |  |  |     systemd.tmpfiles.rules = mkOption { | 
					
						
							|  |  |  |  |       type = types.listOf types.str; | 
					
						
							|  |  |  |  |       default = []; | 
					
						
							|  |  |  |  |       example = [ "d /tmp 1777 root root 10d" ]; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Rules for creating and cleaning up temporary files | 
					
						
							|  |  |  |  |         automatically. See | 
					
						
							|  |  |  |  |         <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> | 
					
						
							| 
									
										
										
										
											2017-09-24 13:16:38 +02:00
										 |  |  |  |         for the exact format. | 
					
						
							| 
									
										
										
										
											2014-04-17 16:10:48 +02:00
										 |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |     systemd.user.units = mkOption { | 
					
						
							|  |  |  |  |       description = "Definition of systemd per-user units."; | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; attrsOf (submodule ( | 
					
						
							|  |  |  |  |         { name, config, ... }: | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |         { options = concreteUnitOptions; | 
					
						
							|  |  |  |  |           config = { | 
					
						
							|  |  |  |  |             unit = mkDefault (makeUnit name config); | 
					
						
							|  |  |  |  |           }; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |         })); | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 09:41:51 +08:00
										 |  |  |  |     systemd.user.paths = mkOption { | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							|  |  |  |  |       type = with types; attrsOf (submodule [ { options = pathOptions; } unitConfig ]); | 
					
						
							|  |  |  |  |       description = "Definition of systemd per-user path units."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |     systemd.user.services = mkOption { | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig serviceConfig ] ); | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |       description = "Definition of systemd per-user service units."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 09:41:51 +08:00
										 |  |  |  |     systemd.user.slices = mkOption { | 
					
						
							| 
									
										
										
										
											2014-12-30 05:46:36 +01:00
										 |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2017-07-13 09:41:51 +08:00
										 |  |  |  |       type = with types; attrsOf (submodule [ { options = sliceOptions; } unitConfig ] ); | 
					
						
							|  |  |  |  |       description = "Definition of systemd per-user slice units."; | 
					
						
							| 
									
										
										
										
											2014-12-30 05:46:36 +01:00
										 |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-20 21:34:21 +03:00
										 |  |  |  |     systemd.user.sockets = mkOption { | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							| 
									
										
										
										
											2016-09-13 12:56:36 +09:00
										 |  |  |  |       type = with types; attrsOf (submodule [ { options = socketOptions; } unitConfig ] ); | 
					
						
							| 
									
										
										
										
											2014-06-20 21:34:21 +03:00
										 |  |  |  |       description = "Definition of systemd per-user socket units."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-27 10:56:40 +08:00
										 |  |  |  |     systemd.user.targets = mkOption { | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							|  |  |  |  |       type = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig] ); | 
					
						
							|  |  |  |  |       description = "Definition of systemd per-user target units."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 09:41:51 +08:00
										 |  |  |  |     systemd.user.timers = mkOption { | 
					
						
							|  |  |  |  |       default = {}; | 
					
						
							|  |  |  |  |       type = with types; attrsOf (submodule [ { options = timerOptions; } unitConfig ] ); | 
					
						
							|  |  |  |  |       description = "Definition of systemd per-user timer units."; | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-25 14:05:57 -04:00
										 |  |  |  |     systemd.additionalUpstreamSystemUnits = mkOption { | 
					
						
							|  |  |  |  |       default = [ ]; | 
					
						
							|  |  |  |  |       type = types.listOf types.str; | 
					
						
							|  |  |  |  |       example = [ "debug-shell.service" "systemd-quotacheck.service" ]; | 
					
						
							|  |  |  |  |       description = ''
 | 
					
						
							|  |  |  |  |         Additional units shipped with systemd that shall be enabled. | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  |   }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-06 11:45:59 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  |   ###### implementation | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-19 21:05:12 +02:00
										 |  |  |  |   config = { | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-22 23:23:05 +02:00
										 |  |  |  |     warnings = concatLists (mapAttrsToList (name: service: | 
					
						
							|  |  |  |  |       optional (service.serviceConfig.Type or "" == "oneshot" && service.serviceConfig.Restart or "no" != "no") | 
					
						
							|  |  |  |  |         "Service ‘${name}.service’ with ‘Type=oneshot’ must have ‘Restart=no’") cfg.services); | 
					
						
							| 
									
										
										
										
											2014-04-09 23:55:17 -05:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |     system.build.units = cfg.units; | 
					
						
							| 
									
										
										
										
											2012-06-16 00:19:43 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  |     environment.systemPackages = [ systemd ]; | 
					
						
							| 
									
										
										
										
											2012-08-06 11:45:59 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-24 15:27:47 +01:00
										 |  |  |  |     environment.etc = let | 
					
						
							| 
									
										
										
										
											2019-07-25 16:27:28 +03:00
										 |  |  |  |       # generate contents for /etc/systemd/system-${type} from attrset of links and packages | 
					
						
							| 
									
										
										
										
											2019-07-26 12:11:44 +03:00
										 |  |  |  |       hooks = type: links: pkgs.runCommand "system-${type}" { | 
					
						
							| 
									
										
										
										
											2018-11-08 11:59:03 +01:00
										 |  |  |  |           preferLocalBuild = true; | 
					
						
							| 
									
										
										
										
											2019-07-26 12:11:44 +03:00
										 |  |  |  |           packages = cfg.packages; | 
					
						
							| 
									
										
										
										
											2019-07-25 16:27:28 +03:00
										 |  |  |  |       } ''
 | 
					
						
							|  |  |  |  |         set -e | 
					
						
							| 
									
										
										
										
											2016-03-25 12:45:54 +01:00
										 |  |  |  |         mkdir -p $out | 
					
						
							|  |  |  |  |         for package in $packages | 
					
						
							|  |  |  |  |         do | 
					
						
							| 
									
										
										
										
											2019-07-25 16:27:28 +03:00
										 |  |  |  |           for hook in $package/lib/systemd/system-${type}/*
 | 
					
						
							|  |  |  |  |           do | 
					
						
							|  |  |  |  |             ln -s $hook $out/ | 
					
						
							|  |  |  |  |           done | 
					
						
							|  |  |  |  |         done | 
					
						
							|  |  |  |  |         ${concatStrings (mapAttrsToList (exec: target: "ln -s ${target} $out/${exec};\n") links)} | 
					
						
							| 
									
										
										
										
											2016-03-25 12:45:54 +01:00
										 |  |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2016-03-24 15:27:47 +01:00
										 |  |  |  |     in ({ | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  |       "systemd/system".source = generateUnits "system" cfg.units upstreamSystemUnits upstreamSystemWants; | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  |       "systemd/user".source = generateUnits "user" cfg.user.units upstreamUserUnits []; | 
					
						
							| 
									
										
										
										
											2013-05-09 16:21:42 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  |       "systemd/system.conf".text = ''
 | 
					
						
							| 
									
										
										
										
											2013-05-09 16:21:42 +02:00
										 |  |  |  |         [Manager] | 
					
						
							| 
									
										
										
										
											2018-03-10 22:23:42 +01:00
										 |  |  |  |         ${optionalString config.systemd.enableCgroupAccounting ''
 | 
					
						
							|  |  |  |  |           DefaultCPUAccounting=yes | 
					
						
							| 
									
										
										
										
											2019-08-19 17:43:57 +02:00
										 |  |  |  |           DefaultBlockIOAccounting=yes | 
					
						
							| 
									
										
										
										
											2018-03-10 22:23:42 +01:00
										 |  |  |  |           DefaultIOAccounting=yes | 
					
						
							|  |  |  |  |           DefaultBlockIOAccounting=yes | 
					
						
							| 
									
										
										
										
											2019-08-19 17:43:57 +02:00
										 |  |  |  |           DefaultIPAccounting=yes | 
					
						
							| 
									
										
										
										
											2018-03-10 22:23:42 +01:00
										 |  |  |  |         ''}
 | 
					
						
							| 
									
										
										
										
											2019-08-16 11:29:41 +02:00
										 |  |  |  |         DefaultLimitCORE=infinity | 
					
						
							| 
									
										
										
										
											2013-11-15 19:49:01 +01:00
										 |  |  |  |         ${config.systemd.extraConfig} | 
					
						
							| 
									
										
										
										
											2013-05-09 16:21:42 +02:00
										 |  |  |  |       '';
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 16:40:54 +08:00
										 |  |  |  |       "systemd/user.conf".text = ''
 | 
					
						
							|  |  |  |  |         [Manager] | 
					
						
							|  |  |  |  |         ${config.systemd.user.extraConfig} | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  |       "systemd/journald.conf".text = ''
 | 
					
						
							| 
									
										
										
										
											2013-05-09 16:21:42 +02:00
										 |  |  |  |         [Journal] | 
					
						
							| 
									
										
										
										
											2018-09-29 12:16:45 -07:00
										 |  |  |  |         Storage=persistent | 
					
						
							| 
									
										
										
										
											2013-05-09 16:21:42 +02:00
										 |  |  |  |         RateLimitInterval=${config.services.journald.rateLimitInterval} | 
					
						
							|  |  |  |  |         RateLimitBurst=${toString config.services.journald.rateLimitBurst} | 
					
						
							|  |  |  |  |         ${optionalString (config.services.journald.console != "") ''
 | 
					
						
							|  |  |  |  |           ForwardToConsole=yes | 
					
						
							|  |  |  |  |           TTYPath=${config.services.journald.console} | 
					
						
							|  |  |  |  |         ''}
 | 
					
						
							| 
									
										
										
										
											2018-10-27 13:01:30 -04:00
										 |  |  |  |         ${optionalString (config.services.journald.forwardToSyslog) ''
 | 
					
						
							|  |  |  |  |           ForwardToSyslog=yes | 
					
						
							|  |  |  |  |         ''}
 | 
					
						
							| 
									
										
										
										
											2013-11-29 18:57:42 +08:00
										 |  |  |  |         ${config.services.journald.extraConfig} | 
					
						
							| 
									
										
										
										
											2013-05-09 16:21:42 +02:00
										 |  |  |  |       '';
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-16 11:29:41 +02:00
										 |  |  |  |       "systemd/coredump.conf".text = | 
					
						
							|  |  |  |  |         ''
 | 
					
						
							|  |  |  |  |           [Coredump] | 
					
						
							|  |  |  |  |           ${config.systemd.coredump.extraConfig} | 
					
						
							|  |  |  |  |         '';
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  |       "systemd/logind.conf".text = ''
 | 
					
						
							| 
									
										
										
										
											2013-05-09 16:21:42 +02:00
										 |  |  |  |         [Login] | 
					
						
							| 
									
										
										
										
											2018-12-11 16:51:16 -05:00
										 |  |  |  |         KillUserProcesses=${if config.services.logind.killUserProcesses then "yes" else "no"} | 
					
						
							| 
									
										
										
										
											2017-05-21 16:30:53 +02:00
										 |  |  |  |         HandleLidSwitch=${config.services.logind.lidSwitch} | 
					
						
							|  |  |  |  |         HandleLidSwitchDocked=${config.services.logind.lidSwitchDocked} | 
					
						
							| 
									
										
										
										
											2019-02-16 23:56:22 +01:00
										 |  |  |  |         HandleLidSwitchExternalPower=${config.services.logind.lidSwitchExternalPower} | 
					
						
							| 
									
										
										
										
											2013-05-09 16:21:42 +02:00
										 |  |  |  |         ${config.services.logind.extraConfig} | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  |       "systemd/sleep.conf".text = ''
 | 
					
						
							| 
									
										
										
										
											2013-05-09 16:25:24 +02:00
										 |  |  |  |         [Sleep] | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-11 13:32:24 +02:00
										 |  |  |  |       # install provided sysctl snippets | 
					
						
							|  |  |  |  |       "sysctl.d/50-coredump.conf".source = "${systemd}/example/sysctl.d/50-coredump.conf"; | 
					
						
							|  |  |  |  |       "sysctl.d/50-default.conf".source = "${systemd}/example/sysctl.d/50-default.conf"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-23 15:09:06 +02:00
										 |  |  |  |       "tmpfiles.d/journal-nocow.conf".source = "${systemd}/example/tmpfiles.d/journal-nocow.conf"; | 
					
						
							|  |  |  |  |       "tmpfiles.d/static-nodes-permissions.conf".source = "${systemd}/example/tmpfiles.d/static-nodes-permissions.conf"; | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  |       "tmpfiles.d/systemd.conf".source = "${systemd}/example/tmpfiles.d/systemd.conf"; | 
					
						
							| 
									
										
										
										
											2019-10-09 10:53:01 +02:00
										 |  |  |  |       "tmpfiles.d/systemd-nspawn.conf".source = "${systemd}/example/tmpfiles.d/systemd-nspawn.conf"; | 
					
						
							|  |  |  |  |       "tmpfiles.d/systemd-tmp.conf".source = "${systemd}/example/tmpfiles.d/systemd-tmp.conf"; | 
					
						
							| 
									
										
										
										
											2019-09-23 15:09:06 +02:00
										 |  |  |  |       "tmpfiles.d/var.conf".source = "${systemd}/example/tmpfiles.d/var.conf"; | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  |       "tmpfiles.d/x11.conf".source = "${systemd}/example/tmpfiles.d/x11.conf"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       "tmpfiles.d/nixos.conf".text = ''
 | 
					
						
							|  |  |  |  |         # This file is created automatically and should not be modified. | 
					
						
							|  |  |  |  |         # Please change the option ‘systemd.tmpfiles.rules’ instead. | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         ${concatStringsSep "\n" cfg.tmpfiles.rules} | 
					
						
							|  |  |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2016-03-25 12:45:54 +01:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 12:11:44 +03:00
										 |  |  |  |       "systemd/system-generators" = { source = hooks "generators" cfg.generators; }; | 
					
						
							|  |  |  |  |       "systemd/system-shutdown" = { source = hooks "shutdown" cfg.shutdown; }; | 
					
						
							| 
									
										
										
										
											2016-03-25 12:45:54 +01:00
										 |  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-09-26 18:34:36 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-06 17:38:53 -08:00
										 |  |  |  |     services.dbus.enable = true; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |  |     users.users.systemd-network.uid = config.ids.uids.systemd-network; | 
					
						
							|  |  |  |  |     users.groups.systemd-network.gid = config.ids.gids.systemd-network; | 
					
						
							|  |  |  |  |     users.users.systemd-resolve.uid = config.ids.uids.systemd-resolve; | 
					
						
							|  |  |  |  |     users.groups.systemd-resolve.gid = config.ids.gids.systemd-resolve; | 
					
						
							| 
									
										
										
										
											2015-05-11 15:54:16 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-01 23:32:12 +01:00
										 |  |  |  |     # Target for ‘charon send-keys’ to hook into. | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |  |     users.groups.keys.gid = config.ids.gids.keys; | 
					
						
							| 
									
										
										
										
											2014-02-11 07:00:10 -05:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |     systemd.targets.keys = | 
					
						
							| 
									
										
										
										
											2012-11-01 23:32:12 +01:00
										 |  |  |  |       { description = "Security Keys"; | 
					
						
							| 
									
										
										
										
											2014-02-26 13:35:04 -05:00
										 |  |  |  |         unitConfig.X-StopOnReconfiguration = true; | 
					
						
							| 
									
										
										
										
											2012-11-01 23:32:12 +01:00
										 |  |  |  |       }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 12:33:18 +01:00
										 |  |  |  |     systemd.units = | 
					
						
							| 
									
										
										
										
											2017-07-13 09:41:51 +08:00
										 |  |  |  |          mapAttrs' (n: v: nameValuePair "${n}.path"    (pathToUnit    n v)) cfg.paths | 
					
						
							| 
									
										
										
										
											2012-10-01 18:58:11 -04:00
										 |  |  |  |       // mapAttrs' (n: v: nameValuePair "${n}.service" (serviceToUnit n v)) cfg.services | 
					
						
							| 
									
										
										
										
											2017-07-13 09:41:51 +08:00
										 |  |  |  |       // mapAttrs' (n: v: nameValuePair "${n}.slice"   (sliceToUnit   n v)) cfg.slices | 
					
						
							|  |  |  |  |       // mapAttrs' (n: v: nameValuePair "${n}.socket"  (socketToUnit  n v)) cfg.sockets | 
					
						
							|  |  |  |  |       // mapAttrs' (n: v: nameValuePair "${n}.target"  (targetToUnit  n v)) cfg.targets | 
					
						
							|  |  |  |  |       // mapAttrs' (n: v: nameValuePair "${n}.timer"   (timerToUnit   n v)) cfg.timers | 
					
						
							| 
									
										
										
										
											2012-12-28 13:29:53 +01:00
										 |  |  |  |       // listToAttrs (map | 
					
						
							| 
									
										
										
										
											2013-01-01 14:42:43 +01:00
										 |  |  |  |                    (v: let n = escapeSystemdPath v.where; | 
					
						
							| 
									
										
										
										
											2013-09-23 22:56:05 +02:00
										 |  |  |  |                        in nameValuePair "${n}.mount" (mountToUnit n v)) cfg.mounts) | 
					
						
							|  |  |  |  |       // listToAttrs (map | 
					
						
							|  |  |  |  |                    (v: let n = escapeSystemdPath v.where; | 
					
						
							|  |  |  |  |                        in nameValuePair "${n}.automount" (automountToUnit n v)) cfg.automounts); | 
					
						
							| 
									
										
										
										
											2012-06-14 18:44:56 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  |     systemd.user.units = | 
					
						
							| 
									
										
										
										
											2017-07-13 09:41:51 +08:00
										 |  |  |  |          mapAttrs' (n: v: nameValuePair "${n}.path"    (pathToUnit    n v)) cfg.user.paths | 
					
						
							|  |  |  |  |       // mapAttrs' (n: v: nameValuePair "${n}.service" (serviceToUnit n v)) cfg.user.services | 
					
						
							|  |  |  |  |       // mapAttrs' (n: v: nameValuePair "${n}.slice"   (sliceToUnit   n v)) cfg.user.slices | 
					
						
							| 
									
										
										
										
											2014-12-30 05:46:36 +01:00
										 |  |  |  |       // mapAttrs' (n: v: nameValuePair "${n}.socket"  (socketToUnit  n v)) cfg.user.sockets | 
					
						
							| 
									
										
										
										
											2016-04-27 10:56:40 +08:00
										 |  |  |  |       // mapAttrs' (n: v: nameValuePair "${n}.target"  (targetToUnit  n v)) cfg.user.targets | 
					
						
							| 
									
										
										
										
											2014-12-30 05:46:36 +01:00
										 |  |  |  |       // mapAttrs' (n: v: nameValuePair "${n}.timer"   (timerToUnit   n v)) cfg.user.timers; | 
					
						
							| 
									
										
										
										
											2014-04-18 00:38:40 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-30 13:53:12 +02:00
										 |  |  |  |     system.requiredKernelConfig = map config.lib.kernelConfig.isEnabled | 
					
						
							|  |  |  |  |       [ "DEVTMPFS" "CGROUPS" "INOTIFY_USER" "SIGNALFD" "TIMERFD" "EPOLL" "NET" | 
					
						
							| 
									
										
										
										
											2018-03-22 22:16:30 +03:00
										 |  |  |  |         "SYSFS" "PROC_FS" "FHANDLE" "CRYPTO_USER_API_HASH" "CRYPTO_HMAC" | 
					
						
							|  |  |  |  |         "CRYPTO_SHA256" "DMIID" "AUTOFS4_FS" "TMPFS_POSIX_ACL" | 
					
						
							| 
									
										
										
										
											2014-04-30 13:53:12 +02:00
										 |  |  |  |         "TMPFS_XATTR" "SECCOMP" | 
					
						
							|  |  |  |  |       ]; | 
					
						
							| 
									
										
										
										
											2012-11-29 18:51:44 +01:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |  |     users.groups.systemd-journal.gid = config.ids.gids.systemd-journal; | 
					
						
							|  |  |  |  |     users.users.systemd-journal-gateway.uid = config.ids.uids.systemd-journal-gateway; | 
					
						
							|  |  |  |  |     users.groups.systemd-journal-gateway.gid = config.ids.gids.systemd-journal-gateway; | 
					
						
							| 
									
										
										
										
											2013-07-19 21:18:44 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-09 14:28:35 +02:00
										 |  |  |  |     # Generate timer units for all services that have a ‘startAt’ value. | 
					
						
							|  |  |  |  |     systemd.timers = | 
					
						
							|  |  |  |  |       mapAttrs (name: service: | 
					
						
							|  |  |  |  |         { wantedBy = [ "timers.target" ]; | 
					
						
							|  |  |  |  |           timerConfig.OnCalendar = service.startAt; | 
					
						
							|  |  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2016-10-19 02:10:46 +02:00
										 |  |  |  |         (filterAttrs (name: service: service.enable && service.startAt != []) cfg.services); | 
					
						
							| 
									
										
										
										
											2013-10-09 14:28:35 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-20 23:45:13 -07:00
										 |  |  |  |     # Generate timer units for all services that have a ‘startAt’ value. | 
					
						
							|  |  |  |  |     systemd.user.timers = | 
					
						
							|  |  |  |  |       mapAttrs (name: service: | 
					
						
							|  |  |  |  |         { wantedBy = [ "timers.target" ]; | 
					
						
							|  |  |  |  |           timerConfig.OnCalendar = service.startAt; | 
					
						
							|  |  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2016-10-19 02:10:46 +02:00
										 |  |  |  |         (filterAttrs (name: service: service.startAt != []) cfg.user.services); | 
					
						
							| 
									
										
										
										
											2015-08-20 23:45:13 -07:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-17 19:05:29 +02:00
										 |  |  |  |     systemd.sockets.systemd-journal-gatewayd.wantedBy = | 
					
						
							|  |  |  |  |       optional config.services.journald.enableHttpGateway "sockets.target"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-17 12:03:04 +02:00
										 |  |  |  |     # Provide the systemd-user PAM service, required to run systemd | 
					
						
							|  |  |  |  |     # user instances. | 
					
						
							|  |  |  |  |     security.pam.services.systemd-user = | 
					
						
							|  |  |  |  |       { # Ensure that pam_systemd gets included. This is special-cased | 
					
						
							|  |  |  |  |         # in systemd to provide XDG_RUNTIME_DIR. | 
					
						
							|  |  |  |  |         startSession = true; | 
					
						
							|  |  |  |  |       }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-11 12:39:37 +02:00
										 |  |  |  |     # Some overrides to upstream units. | 
					
						
							|  |  |  |  |     systemd.services."systemd-backlight@".restartIfChanged = false; | 
					
						
							| 
									
										
										
										
											2017-04-04 16:29:24 +02:00
										 |  |  |  |     systemd.services."systemd-fsck@".restartIfChanged = false; | 
					
						
							| 
									
										
										
										
											2017-04-04 18:15:40 +02:00
										 |  |  |  |     systemd.services."systemd-fsck@".path = [ config.system.path ]; | 
					
						
							| 
									
										
										
										
											2014-05-20 11:10:20 +02:00
										 |  |  |  |     systemd.services."user@".restartIfChanged = false; | 
					
						
							| 
									
										
										
										
											2014-07-17 20:59:25 +02:00
										 |  |  |  |     systemd.services.systemd-journal-flush.restartIfChanged = false; | 
					
						
							| 
									
										
										
										
											2015-05-11 12:39:37 +02:00
										 |  |  |  |     systemd.services.systemd-random-seed.restartIfChanged = false; | 
					
						
							|  |  |  |  |     systemd.services.systemd-remount-fs.restartIfChanged = false; | 
					
						
							|  |  |  |  |     systemd.services.systemd-update-utmp.restartIfChanged = false; | 
					
						
							|  |  |  |  |     systemd.services.systemd-user-sessions.restartIfChanged = false; # Restart kills all active sessions. | 
					
						
							| 
									
										
										
										
											2019-01-05 13:55:27 +01:00
										 |  |  |  |     systemd.services.systemd-udev-settle.restartIfChanged = false; # Causes long delays in nixos-rebuild | 
					
						
							| 
									
										
										
										
											2017-09-27 22:23:19 +01:00
										 |  |  |  |     # Restarting systemd-logind breaks X11 | 
					
						
							|  |  |  |  |     # - upstream commit: https://cgit.freedesktop.org/xorg/xserver/commit/?id=dc48bd653c7e101 | 
					
						
							|  |  |  |  |     # - systemd announcement: https://github.com/systemd/systemd/blob/22043e4317ecd2bc7834b48a6d364de76bb26d91/NEWS#L103-L112 | 
					
						
							|  |  |  |  |     # - this might be addressed in the future by xorg | 
					
						
							|  |  |  |  |     #systemd.services.systemd-logind.restartTriggers = [ config.environment.etc."systemd/logind.conf".source ]; | 
					
						
							|  |  |  |  |     systemd.services.systemd-logind.restartIfChanged = false; | 
					
						
							| 
									
										
										
										
											2016-06-28 09:02:44 +02:00
										 |  |  |  |     systemd.services.systemd-logind.stopIfChanged = false; | 
					
						
							| 
									
										
										
										
											2018-09-27 21:46:31 +01:00
										 |  |  |  |     # The user-runtime-dir@ service is managed by systemd-logind we should not touch it or else we break the users' sessions. | 
					
						
							|  |  |  |  |     systemd.services."user-runtime-dir@".stopIfChanged = false; | 
					
						
							|  |  |  |  |     systemd.services."user-runtime-dir@".restartIfChanged = false; | 
					
						
							| 
									
										
										
										
											2016-09-30 15:46:22 +03:00
										 |  |  |  |     systemd.services.systemd-journald.restartTriggers = [ config.environment.etc."systemd/journald.conf".source ]; | 
					
						
							|  |  |  |  |     systemd.services.systemd-journald.stopIfChanged = false; | 
					
						
							| 
									
										
										
										
											2015-05-11 12:39:37 +02:00
										 |  |  |  |     systemd.targets.local-fs.unitConfig.X-StopOnReconfiguration = true; | 
					
						
							|  |  |  |  |     systemd.targets.remote-fs.unitConfig.X-StopOnReconfiguration = true; | 
					
						
							| 
									
										
										
										
											2017-02-23 16:01:36 +01:00
										 |  |  |  |     systemd.targets.network-online.wantedBy = [ "multi-user.target" ]; | 
					
						
							| 
									
										
										
										
											2018-02-11 23:43:24 +01:00
										 |  |  |  |     systemd.services.systemd-binfmt.wants = [ "proc-sys-fs-binfmt_misc.mount" ]; | 
					
						
							| 
									
										
										
										
											2014-07-11 23:33:40 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-11 15:48:45 +02:00
										 |  |  |  |     # Don't bother with certain units in containers. | 
					
						
							|  |  |  |  |     systemd.services.systemd-remount-fs.unitConfig.ConditionVirtualization = "!container"; | 
					
						
							|  |  |  |  |     systemd.services.systemd-random-seed.unitConfig.ConditionVirtualization = "!container"; | 
					
						
							| 
									
										
										
										
											2019-10-07 20:24:29 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |     boot.kernel.sysctl = mkIf (!cfg.coredump.enable) { | 
					
						
							|  |  |  |  |       "kernel.core_pattern" = "core"; | 
					
						
							|  |  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2015-04-19 21:05:12 +02:00
										 |  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2014-11-19 13:11:30 -08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-14 18:05:50 +02:00
										 |  |  |  |   # FIXME: Remove these eventually. | 
					
						
							|  |  |  |  |   imports = | 
					
						
							|  |  |  |  |     [ (mkRenamedOptionModule [ "boot" "systemd" "sockets" ] [ "systemd" "sockets" ]) | 
					
						
							|  |  |  |  |       (mkRenamedOptionModule [ "boot" "systemd" "targets" ] [ "systemd" "targets" ]) | 
					
						
							|  |  |  |  |       (mkRenamedOptionModule [ "boot" "systemd" "services" ] [ "systemd" "services" ]) | 
					
						
							| 
									
										
										
										
											2019-12-10 02:51:19 +01:00
										 |  |  |  |       (mkRenamedOptionModule [ "jobs" ] [ "systemd" "services" ]) | 
					
						
							|  |  |  |  |       (mkRemovedOptionModule [ "systemd" "generator-packages" ] "Use systemd.packages instead.") | 
					
						
							| 
									
										
										
										
											2015-10-14 18:05:50 +02:00
										 |  |  |  |     ]; | 
					
						
							| 
									
										
										
										
											2012-06-01 20:15:07 -04:00
										 |  |  |  | } |