···4444- Inspect what changed during these actions and print units that failed and
4545 that were newly started
46464747+By default, some units are filtered from the outputs to make it less spammy.
4848+This can be disabled for development or testing by setting the environment variable
4949+`STC_DISPLAY_ALL_UNITS=1`
5050+4751Most of these actions are either self-explaining but some of them have to do
4852with our units or the activation script. For this reason, these topics are
4953explained in the next sections.
+2
nixos/doc/manual/release-notes/rl-2311.section.md
···359359360360- The application firewall `opensnitch` now uses the process monitor method eBPF as default as recommended by upstream. The method can be changed with the setting [services.opensnitch.settings.ProcMonitorMethod](#opt-services.opensnitch.settings.ProcMonitorMethod).
361361362362+- `services.hedgedoc` has been heavily refactored, reducing the amount of declared options in the module. Most of the options should still work without any changes. Some options have been deprecated, as they no longer have any effect. See [#244941](https://github.com/NixOS/nixpkgs/pull/244941) for more details.
363363+362364- The module [services.ankisyncd](#opt-services.ankisyncd.package) has been switched to [anki-sync-server-rs](https://github.com/ankicommunity/anki-sync-server-rs) from the old python version, which was difficult to update, had not been updated in a while, and did not support recent versions of anki.
363365Unfortunately all servers supporting new clients (newer version of anki-sync-server, anki's built in sync server and this new rust package) do not support the older sync protocol that was used in the old server, so such old clients will also need updating and in particular the anki package in nixpkgs is also being updated in this release.
364366The module update takes care of the new config syntax and the data itself (user login and cards) are compatible, so users of the module will be able to just log in again after updating both client and server without any extra action.
···88{
99 options.programs.corectrl = {
1010 enable = mkEnableOption (lib.mdDoc ''
1111- A tool to overclock amd graphics cards and processors.
1111+ CoreCtrl, a tool to overclock amd graphics cards and processors.
1212 Add your user to the corectrl group to run corectrl without needing to enter your password
1313 '');
14141515 gpuOverclock = {
1616 enable = mkEnableOption (lib.mdDoc ''
1717- true
1717+ GPU overclocking
1818 '');
1919 ppfeaturemask = mkOption {
2020 type = types.str;
+1-1
nixos/modules/hardware/i2c.nix
···1111 enable = mkEnableOption (lib.mdDoc ''
1212 i2c devices support. By default access is granted to users in the "i2c"
1313 group (will be created if non-existent) and any user with a seat, meaning
1414- logged on the computer locally.
1414+ logged on the computer locally
1515 '');
16161717 group = mkOption {
+1-1
nixos/modules/hardware/keyboard/uhk.nix
···1111 non-root access to the firmware of UHK keyboards.
1212 You need it when you want to flash a new firmware on the keyboard.
1313 Access to the keyboard is granted to users in the "input" group.
1414- You may want to install the uhk-agent package.
1414+ You may want to install the uhk-agent package
1515 '');
16161717 };
+1-1
nixos/modules/hardware/keyboard/zsa.nix
···1111 udev rules for keyboards from ZSA like the ErgoDox EZ, Planck EZ and Moonlander Mark I.
1212 You need it when you want to flash a new configuration on the keyboard
1313 or use their live training in the browser.
1414- You may want to install the wally-cli package.
1414+ You may want to install the wally-cli package
1515 '');
1616 };
1717
···99 {
1010 options.hardware.tuxedo-keyboard = {
1111 enable = mkEnableOption (lib.mdDoc ''
1212- Enables the tuxedo-keyboard driver.
1212+ the tuxedo-keyboard driver.
13131414 To configure the driver, pass the options to the {option}`boot.kernelParams` configuration.
1515 There are several parameters you can change. It's best to check at the source code description which options are supported.
+13-13
nixos/modules/hardware/video/nvidia.nix
···2424 options = {
2525 hardware.nvidia = {
2626 datacenter.enable = lib.mkEnableOption (lib.mdDoc ''
2727- Data Center drivers for NVIDIA cards on a NVLink topology.
2727+ Data Center drivers for NVIDIA cards on a NVLink topology
2828 '');
2929 datacenter.settings = lib.mkOption {
3030 type = settingsFormat.type;
···79798080 powerManagement.enable = lib.mkEnableOption (lib.mdDoc ''
8181 experimental power management through systemd. For more information, see
8282- the NVIDIA docs, on Chapter 21. Configuring Power Management Support.
8282+ the NVIDIA docs, on Chapter 21. Configuring Power Management Support
8383 '');
84848585 powerManagement.finegrained = lib.mkEnableOption (lib.mdDoc ''
8686 experimental power management of PRIME offload. For more information, see
8787- the NVIDIA docs, on Chapter 22. PCI-Express Runtime D3 (RTD3) Power Management.
8787+ the NVIDIA docs, on Chapter 22. PCI-Express Runtime D3 (RTD3) Power Management
8888 '');
89899090 dynamicBoost.enable = lib.mkEnableOption (lib.mdDoc ''
9191 dynamic Boost balances power between the CPU and the GPU for improved
9292 performance on supported laptops using the nvidia-powerd daemon. For more
9393- information, see the NVIDIA docs, on Chapter 23. Dynamic Boost on Linux.
9393+ information, see the NVIDIA docs, on Chapter 23. Dynamic Boost on Linux
9494 '');
95959696 modesetting.enable = lib.mkEnableOption (lib.mdDoc ''
···9999 Enabling this fixes screen tearing when using Optimus via PRIME (see
100100 {option}`hardware.nvidia.prime.sync.enable`. This is not enabled
101101 by default because it is not officially supported by NVIDIA and would not
102102- work with SLI.
102102+ work with SLI
103103 '');
104104105105 prime.nvidiaBusId = lib.mkOption {
···153153154154 Note that this configuration will only be successful when a display manager
155155 for which the {option}`services.xserver.displayManager.setupCommands`
156156- option is supported is used.
156156+ option is supported is used
157157 '');
158158159159 prime.allowExternalGpu = lib.mkEnableOption (lib.mdDoc ''
160160- configuring X to allow external NVIDIA GPUs when using Prime [Reverse] sync optimus.
160160+ configuring X to allow external NVIDIA GPUs when using Prime [Reverse] sync optimus
161161 '');
162162163163 prime.offload.enable = lib.mkEnableOption (lib.mdDoc ''
···166166 If this is enabled, then the bus IDs of the NVIDIA and Intel/AMD GPUs have to
167167 be specified ({option}`hardware.nvidia.prime.nvidiaBusId` and
168168 {option}`hardware.nvidia.prime.intelBusId` or
169169- {option}`hardware.nvidia.prime.amdgpuBusId`).
169169+ {option}`hardware.nvidia.prime.amdgpuBusId`)
170170 '');
171171172172 prime.offload.enableOffloadCmd = lib.mkEnableOption (lib.mdDoc ''
···174174 for offloading programs to an nvidia device. To work, should have also enabled
175175 {option}`hardware.nvidia.prime.offload.enable` or {option}`hardware.nvidia.prime.reverseSync.enable`.
176176177177- Example usage `nvidia-offload sauerbraten_client`.
177177+ Example usage `nvidia-offload sauerbraten_client`
178178 '');
179179180180 prime.reverseSync.enable = lib.mkEnableOption (lib.mdDoc ''
···202202203203 Note that this configuration will only be successful when a display manager
204204 for which the {option}`services.xserver.displayManager.setupCommands`
205205- option is supported is used.
205205+ option is supported is used
206206 '');
207207208208 nvidiaSettings =
209209 (lib.mkEnableOption (lib.mdDoc ''
210210- nvidia-settings, NVIDIA's GUI configuration tool.
210210+ nvidia-settings, NVIDIA's GUI configuration tool
211211 ''))
212212 // {default = true;};
213213214214 nvidiaPersistenced = lib.mkEnableOption (lib.mdDoc ''
215215 nvidia-persistenced a update for NVIDIA GPU headless mode, i.e.
216216- It ensures all GPUs stay awake even during headless mode.
216216+ It ensures all GPUs stay awake even during headless mode
217217 '');
218218219219 forceFullCompositionPipeline = lib.mkEnableOption (lib.mdDoc ''
220220 forcefully the full composition pipeline.
221221 This sometimes fixes screen tearing issues.
222222 This has been reported to reduce the performance of some OpenGL applications and may produce issues in WebGL.
223223- It also drastically increases the time the driver needs to clock down after load.
223223+ It also drastically increases the time the driver needs to clock down after load
224224 '');
225225226226 package = lib.mkOption {
···88 options = {
99 programs.calls = {
1010 enable = mkEnableOption (lib.mdDoc ''
1111- Whether to enable GNOME calls: a phone dialer and call handler.
1111+ GNOME calls: a phone dialer and call handler
1212 '');
1313 };
1414 };
+1-1
nixos/modules/programs/cnping.nix
···88{
99 options = {
1010 programs.cnping = {
1111- enable = mkEnableOption (lib.mdDoc "Whether to install a setcap wrapper for cnping");
1111+ enable = mkEnableOption (lib.mdDoc "a setcap wrapper for cnping");
1212 };
1313 };
1414
+1-1
nixos/modules/programs/direnv.nix
···1111 enable = lib.mkEnableOption (lib.mdDoc ''
1212 direnv integration. Takes care of both installation and
1313 setting up the sourcing of the shell. Additionally enables nix-direnv
1414- integration. Note that you need to logout and login for this change to apply.
1414+ integration. Note that you need to logout and login for this change to apply
1515 '');
16161717 package = lib.mkPackageOptionMD pkgs "direnv" {};
+2-2
nixos/modules/programs/feedbackd.nix
···88 options = {
99 programs.feedbackd = {
1010 enable = mkEnableOption (lib.mdDoc ''
1111- Whether to enable the feedbackd D-BUS service and udev rules.
1111+ the feedbackd D-BUS service and udev rules.
12121313- Your user needs to be in the `feedbackd` group to trigger effects.
1313+ Your user needs to be in the `feedbackd` group to trigger effects
1414 '');
1515 package = mkOption {
1616 description = lib.mdDoc ''
+1-1
nixos/modules/programs/kdeconnect.nix
···99 1714 to 1764 as they are needed for it to function properly.
1010 You can use the {option}`package` to use
1111 `gnomeExtensions.gsconnect` as an alternative
1212- implementation if you use Gnome.
1212+ implementation if you use Gnome
1313 '');
1414 package = mkOption {
1515 default = pkgs.plasma5Packages.kdeconnect-kde;
+1-1
nixos/modules/programs/wayland/wayfire.nix
···66 meta.maintainers = with lib.maintainers; [ rewine ];
7788 options.programs.wayfire = {
99- enable = lib.mkEnableOption (lib.mdDoc "Wayfire, a wayland compositor based on wlroots.");
99+ enable = lib.mkEnableOption (lib.mdDoc "Wayfire, a wayland compositor based on wlroots");
10101111 package = lib.mkPackageOptionMD pkgs "wayfire" { };
1212
+10-10
nixos/modules/services/backup/znapzend.nix
···359359 };
360360361361 features.oracleMode = mkEnableOption (lib.mdDoc ''
362362- Destroy snapshots one by one instead of using one long argument list.
362362+ destroying snapshots one by one instead of using one long argument list.
363363 If source and destination are out of sync for a long time, you may have
364364 so many snapshots to destroy that the argument gets is too long and the
365365- command fails.
365365+ command fails
366366 '');
367367 features.recvu = mkEnableOption (lib.mdDoc ''
368368 recvu feature which uses `-u` on the receiving end to keep the destination
369369- filesystem unmounted.
369369+ filesystem unmounted
370370 '');
371371 features.compressed = mkEnableOption (lib.mdDoc ''
372372 compressed feature which adds the options `-Lce` to
···377377 support and -e is for embedded data support. see
378378 {manpage}`znapzend(1)`
379379 and {manpage}`zfs(8)`
380380- for more info.
380380+ for more info
381381 '');
382382 features.sendRaw = mkEnableOption (lib.mdDoc ''
383383 sendRaw feature which adds the options `-w` to the
···386386 backup that can't be read without the encryption key/passphrase, useful
387387 when the remote isn't fully trusted or not physically secure. This
388388 option must be used consistently, raw incrementals cannot be based on
389389- non-raw snapshots and vice versa.
389389+ non-raw snapshots and vice versa
390390 '');
391391 features.skipIntermediates = mkEnableOption (lib.mdDoc ''
392392- Enable the skipIntermediates feature to send a single increment
392392+ the skipIntermediates feature to send a single increment
393393 between latest common snapshot and the newly made one. It may skip
394394 several source snaps if the destination was offline for some time, and
395395 it should skip snapshots not managed by znapzend. Normally for online
396396 destinations, the new snapshot is sent as soon as it is created on the
397397- source, so there are no automatic increments to skip.
397397+ source, so there are no automatic increments to skip
398398 '');
399399 features.lowmemRecurse = mkEnableOption (lib.mdDoc ''
400400 use lowmemRecurse on systems where you have too many datasets, so a
401401 recursive listing of attributes to find backup plans exhausts the
402402 memory available to {command}`znapzend`: instead, go the slower
403403 way to first list all impacted dataset names, and then query their
404404- configs one by one.
404404+ configs one by one
405405 '');
406406 features.zfsGetType = mkEnableOption (lib.mdDoc ''
407407- use zfsGetType if your {command}`zfs get` supports a
407407+ using zfsGetType if your {command}`zfs get` supports a
408408 `-t` argument for filtering by dataset type at all AND
409409 lists properties for snapshots by default when recursing, so that there
410410 is too much data to process while searching for backup plans.
···412412 `--recursive` search for backup plans can literally
413413 differ by hundreds of times (depending on the amount of snapshots in
414414 that dataset tree... and a decent backup plan will ensure you have a lot
415415- of those), so you would benefit from requesting this feature.
415415+ of those), so you would benefit from requesting this feature
416416 '');
417417 };
418418 };
+1-1
nixos/modules/services/databases/cassandra.nix
···122122 options.services.cassandra = {
123123124124 enable = mkEnableOption (lib.mdDoc ''
125125- Apache Cassandra – Scalable and highly available database.
125125+ Apache Cassandra – Scalable and highly available database
126126 '');
127127128128 clusterName = mkOption {
+1-1
nixos/modules/services/databases/ferretdb.nix
···11111212 options = {
1313 services.ferretdb = {
1414- enable = mkEnableOption "FerretDB, an Open Source MongoDB alternative.";
1414+ enable = mkEnableOption "FerretDB, an Open Source MongoDB alternative";
15151616 package = mkOption {
1717 type = types.package;
+1-1
nixos/modules/services/databases/redis.nix
···7575 Note that the NixOS module for Redis disables kernel support
7676 for Transparent Huge Pages (THP),
7777 because this features causes major performance problems for Redis,
7878- e.g. (https://redis.io/topics/latency).
7878+ e.g. (https://redis.io/topics/latency)
7979 '');
80808181 user = mkOption {
+1-1
nixos/modules/services/databases/surrealdb.nix
···8899 options = {
1010 services.surrealdb = {
1111- enable = mkEnableOption (lib.mdDoc "A scalable, distributed, collaborative, document-graph database, for the realtime web ");
1111+ enable = mkEnableOption (lib.mdDoc "SurrealDB, a scalable, distributed, collaborative, document-graph database, for the realtime web");
12121313 package = mkOption {
1414 default = pkgs.surrealdb;
···1515 services.deepin.dde-api = {
16161717 enable = mkEnableOption (lib.mdDoc ''
1818- Provides some dbus interfaces that is used for screen zone detecting,
1919- thumbnail generating, and sound playing in Deepin Desktop Environment.
1818+ some dbus interfaces that is used for screen zone detecting,
1919+ thumbnail generating, and sound playing in Deepin Desktop Environment
2020 '');
21212222 };
···24242525 options = {
2626 services.gnome.gnome-browser-connector.enable = mkEnableOption (mdDoc ''
2727- Native host connector for the GNOME Shell browser extension, a DBus service
2828- allowing to install GNOME Shell extensions from a web browser.
2727+ native host connector for the GNOME Shell browser extension, a DBus service
2828+ allowing to install GNOME Shell extensions from a web browser
2929 '');
3030 };
3131
···99{
1010 options = {
1111 hardware.tuxedo-rs = {
1212- enable = mkEnableOption (lib.mdDoc "Rust utilities for interacting with hardware from TUXEDO Computers.");
1212+ enable = mkEnableOption (lib.mdDoc "Rust utilities for interacting with hardware from TUXEDO Computers");
13131414- tailor-gui.enable = mkEnableOption (lib.mdDoc "Alternative to TUXEDO Control Center, written in Rust.");
1414+ tailor-gui.enable = mkEnableOption (lib.mdDoc "tailor-gui, an alternative to TUXEDO Control Center, written in Rust");
1515 };
1616 };
1717
+1-1
nixos/modules/services/mail/dovecot.nix
···302302303303 enablePAM = mkEnableOption (lib.mdDoc "creating a own Dovecot PAM service and configure PAM user logins") // { default = true; };
304304305305- enableDHE = mkEnableOption (lib.mdDoc "enable ssl_dh and generation of primes for the key exchange") // { default = true; };
305305+ enableDHE = mkEnableOption (lib.mdDoc "ssl_dh and generation of primes for the key exchange") // { default = true; };
306306307307 sieveScripts = mkOption {
308308 type = types.attrsOf types.path;
+1-1
nixos/modules/services/mail/mailman.nix
···260260 };
261261262262 serve = {
263263- enable = mkEnableOption (lib.mdDoc "Automatic nginx and uwsgi setup for mailman-web");
263263+ enable = mkEnableOption (lib.mdDoc "automatic nginx and uwsgi setup for mailman-web");
264264265265 virtualRoot = mkOption {
266266 default = "/";
+2-2
nixos/modules/services/matrix/mjolnir.nix
···9696 type = types.submodule {
9797 options = {
9898 enable = mkEnableOption (lib.mdDoc ''
9999- If true, accessToken is ignored and the username/password below will be
100100- used instead. The access token of the bot will be stored in the dataPath.
9999+ ignoring the accessToken. If true, accessToken is ignored and the username/password below will be
100100+ used instead. The access token of the bot will be stored in the dataPath
101101 '');
102102103103 username = mkOption {
+2-2
nixos/modules/services/misc/klipper.nix
···111111 (submodule {
112112 options = {
113113 enable = mkEnableOption (lib.mdDoc ''
114114- building of firmware for manual flashing.
114114+ building of firmware for manual flashing
115115 '');
116116 enableKlipperFlash = mkEnableOption (lib.mdDoc ''
117117 flashings scripts for firmware. This will add `klipper-flash-$mcu` scripts to your environment which can be called to flash the firmware.
118118- Please check the configs at [klipper](https://github.com/Klipper3d/klipper/tree/master/config) whether your board supports flashing via `make flash`.
118118+ Please check the configs at [klipper](https://github.com/Klipper3d/klipper/tree/master/config) whether your board supports flashing via `make flash`
119119 '');
120120 serial = mkOption {
121121 type = types.nullOr path;
+2-2
nixos/modules/services/misc/packagekit.nix
···40404141 options.services.packagekit = {
4242 enable = mkEnableOption (lib.mdDoc ''
4343- PackageKit provides a cross-platform D-Bus abstraction layer for
4343+ PackageKit, a cross-platform D-Bus abstraction layer for
4444 installing software. Software utilizing PackageKit can install
4545- software regardless of the package manager.
4545+ software regardless of the package manager
4646 '');
47474848 settings = mkOption {
+1-1
nixos/modules/services/misc/rshim.nix
···1212in
1313{
1414 options.services.rshim = {
1515- enable = lib.mkEnableOption (lib.mdDoc "User-space rshim driver for the BlueField SoC");
1515+ enable = lib.mkEnableOption (lib.mdDoc "user-space rshim driver for the BlueField SoC");
16161717 package = lib.mkPackageOptionMD pkgs "rshim-user-space" { };
1818
+1-1
nixos/modules/services/misc/sourcehut/default.nix
···438438 };
439439440440 options."lists.sr.ht" = commonServiceSettings "lists" // {
441441- allow-new-lists = mkEnableOption (lib.mdDoc "Allow creation of new lists");
441441+ allow-new-lists = mkEnableOption (lib.mdDoc "creation of new lists");
442442 notify-from = mkOption {
443443 description = lib.mdDoc "Outgoing email for notifications generated by users.";
444444 type = types.str;
+1-1
nixos/modules/services/misc/tp-auto-kbbl.nix
···991010 options = {
1111 services.tp-auto-kbbl = {
1212- enable = mkEnableOption (lib.mdDoc "Auto toggle keyboard back-lighting on Thinkpads (and maybe other laptops) for Linux");
1212+ enable = mkEnableOption (lib.mdDoc "auto toggle keyboard back-lighting on Thinkpads (and maybe other laptops) for Linux");
13131414 package = mkOption {
1515 type = types.package;
+2-2
nixos/modules/services/misc/zoneminder.nix
···6767 options = {
6868 services.zoneminder = with lib; {
6969 enable = lib.mkEnableOption (lib.mdDoc ''
7070- ZoneMinder
7070+ ZoneMinder.
71717272 If you intend to run the database locally, you should set
7373 `config.services.zoneminder.database.createLocally` to true. Otherwise,
7474 when set to `false` (the default), you will have to create the database
7575 and database user as well as populate the database yourself.
7676 Additionally, you will need to run `zmupdate.pl` yourself when
7777- upgrading to a newer version.
7777+ upgrading to a newer version
7878 '');
79798080 webserver = mkOption {
···11111212 # the upstream package runs as root, but doesn't seem to be strictly
1313 # necessary for basic functionality
1414- runAsRoot = mkEnableOption (lib.mdDoc "Whether to run as root");
1414+ runAsRoot = mkEnableOption (lib.mdDoc "running as root");
15151616 autoRetirement = mkEnableOption (lib.mdDoc ''
1717- Whether to automatically retire the host upon OS shutdown.
1717+ retiring the host upon OS shutdown
1818 '');
19192020 apiKeyFile = mkOption {
···5959 };
60606161 options.diagnostic =
6262- mkEnableOption (lib.mdDoc "Collect memory usage for the agent itself");
6262+ mkEnableOption (lib.mdDoc "collecting memory usage for the agent itself");
6363 };
6464 };
6565 };
···177177178178 backup = {
179179 enable = mkEnableOption (lib.mdDoc ''
180180- Backup server role. When using OpenAFS built-in buserver, use in conjunction with the
180180+ the backup server role. When using OpenAFS built-in buserver, use in conjunction with the
181181 `database` role to maintain the Backup
182182 Database. Normally only used in conjunction with tape storage
183183 or IBM's Tivoli Storage Manager.
184184185185 For a modern backup server, enable this role and see
186186- {option}`enableFabs`.
186186+ {option}`enableFabs`
187187 '');
188188189189 enableFabs = mkEnableOption (lib.mdDoc ''
+1-1
nixos/modules/services/networking/create_ap.nix
···88in {
99 options = {
1010 services.create_ap = {
1111- enable = mkEnableOption (lib.mdDoc "setup wifi hotspots using create_ap");
1111+ enable = mkEnableOption (lib.mdDoc "setting up wifi hotspots using create_ap");
1212 settings = mkOption {
1313 type = with types; attrsOf (oneOf [ int bool str ]);
1414 default = {};
+3-3
nixos/modules/services/networking/dae.nix
···1414 options = {
1515 services.dae = with lib;{
1616 enable = mkEnableOption
1717- (mdDoc "A Linux high-performance transparent proxy solution based on eBPF");
1717+ (mdDoc "dae, a Linux high-performance transparent proxy solution based on eBPF");
18181919 package = mkPackageOptionMD pkgs "dae" { };
2020···4646 openFirewall = mkOption {
4747 type = with types; submodule {
4848 options = {
4949- enable = mkEnableOption "enable";
4949+ enable = mkEnableOption (mdDoc "opening {option}`port` in the firewall");
5050 port = mkOption {
5151 type = types.port;
5252 description = ''
···9191 };
92929393 disableTxChecksumIpGeneric =
9494- mkEnableOption (mdDoc "See <https://github.com/daeuniverse/dae/issues/43>");
9494+ mkEnableOption "" // { description = mdDoc "See <https://github.com/daeuniverse/dae/issues/43>"; };
95959696 };
9797 };
+4-4
nixos/modules/services/networking/deconz.nix
···5454 description = "TCP port for the WebSocket.";
5555 };
56565757- openFirewall = lib.mkEnableOption "open up the service ports in the firewall";
5757+ openFirewall = lib.mkEnableOption "opening up the service ports in the firewall";
58585959- allowRebootSystem = lib.mkEnableOption "allow rebooting the system";
5959+ allowRebootSystem = lib.mkEnableOption "rebooting the system";
60606161- allowRestartService = lib.mkEnableOption "allow killing/restarting processes";
6161+ allowRestartService = lib.mkEnableOption "killing/restarting processes";
62626363- allowSetSystemTime = lib.mkEnableOption "allow setting the system time";
6363+ allowSetSystemTime = lib.mkEnableOption "setting the system time";
64646565 extraArgs = lib.mkOption {
6666 type = lib.types.listOf lib.types.str;
+1-1
nixos/modules/services/networking/go-neb.nix
···99 configFile = settingsFormat.generate "config.yaml" cfg.config;
1010in {
1111 options.services.go-neb = {
1212- enable = mkEnableOption (lib.mdDoc "Extensible matrix bot written in Go");
1212+ enable = mkEnableOption (lib.mdDoc "an extensible matrix bot written in Go");
13131414 bindAddress = mkOption {
1515 type = types.str;
+2-2
nixos/modules/services/networking/hostapd.nix
···116116 options = {
117117 services.hostapd = {
118118 enable = mkEnableOption (mdDoc ''
119119- Whether to enable hostapd. hostapd is a user space daemon for access point and
119119+ hostapd, a user space daemon for access point and
120120 authentication servers. It implements IEEE 802.11 access point management,
121121 IEEE 802.1X/WPA/WPA2/EAP Authenticators, RADIUS client, EAP server, and RADIUS
122122- authentication server.
122122+ authentication server
123123 '');
124124125125 package = mkPackageOption pkgs "hostapd" {};
···272272 };
273273274274 faxcron.enable.spoolInit = mkEnableOption (lib.mdDoc ''
275275- Purge old files from the spooling area with
275275+ purging old files from the spooling area with
276276 {file}`faxcron`
277277- each time the spooling area is initialized.
277277+ each time the spooling area is initialized
278278 '');
279279 faxcron.enable.frequency = mkOption {
280280 type = nullOr nonEmptyStr;
281281 default = null;
282282 example = "daily";
283283 description = lib.mdDoc ''
284284- Purge old files from the spooling area with
284284+ purging old files from the spooling area with
285285 {file}`faxcron` with the given frequency
286286- (see systemd.time(7)).
286286+ (see systemd.time(7))
287287 '';
288288 };
289289 faxcron.infoDays = mkOption {
+4-4
nixos/modules/services/networking/i2pd.nix
···265265 '';
266266 };
267267268268- logCLFTime = mkEnableOption (lib.mdDoc "Full CLF-formatted date and time to log");
268268+ logCLFTime = mkEnableOption (lib.mdDoc "full CLF-formatted date and time to log");
269269270270 address = mkOption {
271271 type = with types; nullOr str;
···456456 '';
457457 };
458458459459- trust.enable = mkEnableOption (lib.mdDoc "Explicit trust options");
459459+ trust.enable = mkEnableOption (lib.mdDoc "explicit trust options");
460460461461 trust.family = mkOption {
462462 type = with types; nullOr str;
···474474 '';
475475 };
476476477477- trust.hidden = mkEnableOption (lib.mdDoc "Router concealment");
477477+ trust.hidden = mkEnableOption (lib.mdDoc "router concealment");
478478479479 websocket = mkEndpointOpt "websockets" "127.0.0.1" 7666;
480480···552552553553 proto.http = (mkEndpointOpt "http" "127.0.0.1" 7070) // {
554554555555- auth = mkEnableOption (lib.mdDoc "Webconsole authentication");
555555+ auth = mkEnableOption (lib.mdDoc "webconsole authentication");
556556557557 user = mkOption {
558558 type = types.str;
···77 enable = mkEnableOption (lib.mdDoc "the openiscsi iscsi daemon");
88 enableAutoLoginOut = mkEnableOption (lib.mdDoc ''
99 automatic login and logout of all automatic targets.
1010- You probably do not want this.
1010+ You probably do not want this
1111 '');
1212 discoverPortal = mkOption {
1313 type = nullOr str;
···88{
99 options = {
1010 services.snowflake-proxy = {
1111- enable = mkEnableOption (lib.mdDoc "System to defeat internet censorship");
1111+ enable = mkEnableOption (lib.mdDoc "snowflake-proxy, a system to defeat internet censorship");
12121313 broker = mkOption {
1414 description = lib.mdDoc "Broker URL (default \"https://snowflake-broker.torproject.net/\")";
+2-2
nixos/modules/services/networking/yggdrasil.nix
···116116 };
117117118118 persistentKeys = mkEnableOption (lib.mdDoc ''
119119- If enabled then keys will be generated once and Yggdrasil
119119+ persistent keys. If enabled then keys will be generated once and Yggdrasil
120120 will retain the same IPv6 address when the service is
121121- restarted. Keys are stored at ${keysPath}.
121121+ restarted. Keys are stored at ${keysPath}
122122 '');
123123124124 extraArgs = mkOption {
+1-1
nixos/modules/services/system/earlyoom.nix
···1111in
1212{
1313 options.services.earlyoom = {
1414- enable = mkEnableOption (lib.mdDoc "Early out of memory killing");
1414+ enable = mkEnableOption (lib.mdDoc "early out of memory killing");
15151616 freeMemThreshold = mkOption {
1717 type = types.ints.between 1 100;
···13131414 WARNING: enabling this option (while convenient) should *not* be done on a
1515 machine where you do not trust the other users as it allows any other
1616- local user to DoS your session by spamming notifications.
1616+ local user to DoS your session by spamming notifications
1717 '');
1818 };
1919
···4040 };
41414242 allowVideoAccess = lib.mkEnableOption (lib.mdDoc ''
4343- Enable access to video devices like cameras on the system.
4343+ access to video devices like cameras on the system
4444 '');
4545 };
4646 };
···11{ config, lib, pkgs, ... }:
2233let
44- inherit (lib) literalExpression mdDoc mkEnableOption mkIf mkOption mkPackageOptionMD mkRenamedOptionModule types versionAtLeast;
44+ inherit (lib) mkOption types mdDoc literalExpression;
5566 cfg = config.services.hedgedoc;
77···99 # versionAtLeast statement remains set to 21.03 for backwards compatibility.
1010 # See https://github.com/NixOS/nixpkgs/pull/108899 and
1111 # https://github.com/NixOS/rfcs/blob/master/rfcs/0080-nixos-release-schedule.md.
1212- name = if versionAtLeast config.system.stateVersion "21.03"
1313- then "hedgedoc"
1414- else "codimd";
1515-1616- settingsFormat = pkgs.formats.json {};
1212+ name = if lib.versionAtLeast config.system.stateVersion "21.03" then
1313+ "hedgedoc"
1414+ else
1515+ "codimd";
17161818- prettyJSON = conf:
1919- pkgs.runCommandLocal "hedgedoc-config.json" {
2020- nativeBuildInputs = [ pkgs.jq ];
2121- } ''
2222- jq '{production:del(.[]|nulls)|del(.[][]?|nulls)}' \
2323- < ${settingsFormat.generate "hedgedoc-ugly.json" cfg.settings} \
2424- > $out
2525- '';
1717+ settingsFormat = pkgs.formats.json { };
2618in
2719{
2020+ meta.maintainers = with lib.maintainers; [ SuperSandro2000 h7x4 ];
2121+2822 imports = [
2929- (mkRenamedOptionModule [ "services" "codimd" ] [ "services" "hedgedoc" ])
3030- (mkRenamedOptionModule
3131- [ "services" "hedgedoc" "configuration" ] [ "services" "hedgedoc" "settings" ])
2323+ (lib.mkRenamedOptionModule [ "services" "codimd" ] [ "services" "hedgedoc" ])
2424+ (lib.mkRenamedOptionModule [ "services" "hedgedoc" "configuration" ] [ "services" "hedgedoc" "settings" ])
2525+ (lib.mkRenamedOptionModule [ "services" "hedgedoc" "groups" ] [ "users" "users" "hedgedoc" "extraGroups" ])
2626+ (lib.mkRemovedOptionModule [ "services" "hedgedoc" "workDir" ] ''
2727+ This option has been removed in favor of systemd managing the state directory.
2828+2929+ If you have set this option without specifying `services.settings.uploadsDir`,
3030+ please move these files to `/var/lib/hedgedoc/uploads`, or set the option to point
3131+ at the correct location.
3232+ '')
3233 ];
33343435 options.services.hedgedoc = {
3535- package = mkPackageOptionMD pkgs "hedgedoc" { };
3636- enable = mkEnableOption (lib.mdDoc "the HedgeDoc Markdown Editor");
3636+ package = lib.mkPackageOptionMD pkgs "hedgedoc" { };
3737+ enable = lib.mkEnableOption (mdDoc "the HedgeDoc Markdown Editor");
37383838- groups = mkOption {
3939- type = types.listOf types.str;
4040- default = [];
4141- description = lib.mdDoc ''
4242- Groups to which the service user should be added.
4343- '';
4444- };
4545-4646- workDir = mkOption {
4747- type = types.path;
4848- default = "/var/lib/${name}";
4949- description = lib.mdDoc ''
5050- Working directory for the HedgeDoc service.
5151- '';
5252- };
3939+ settings = mkOption {
4040+ type = types.submodule {
4141+ freeformType = settingsFormat.type;
4242+ options = {
4343+ domain = mkOption {
4444+ type = with types; nullOr str;
4545+ default = null;
4646+ example = "hedgedoc.org";
4747+ description = mdDoc ''
4848+ Domain to use for website.
53495454- settings = let options = {
5555- debug = mkEnableOption (lib.mdDoc "debug mode");
5656- domain = mkOption {
5757- type = types.nullOr types.str;
5858- default = null;
5959- example = "hedgedoc.org";
6060- description = lib.mdDoc ''
6161- Domain name for the HedgeDoc instance.
6262- '';
6363- };
6464- urlPath = mkOption {
6565- type = types.nullOr types.str;
6666- default = null;
6767- example = "/url/path/to/hedgedoc";
6868- description = lib.mdDoc ''
6969- Path under which HedgeDoc is accessible.
7070- '';
7171- };
7272- host = mkOption {
7373- type = types.str;
7474- default = "localhost";
7575- description = lib.mdDoc ''
7676- Address to listen on.
7777- '';
7878- };
7979- port = mkOption {
8080- type = types.port;
8181- default = 3000;
8282- example = 80;
8383- description = lib.mdDoc ''
8484- Port to listen on.
8585- '';
8686- };
8787- path = mkOption {
8888- type = types.nullOr types.str;
8989- default = null;
9090- example = "/run/hedgedoc.sock";
9191- description = lib.mdDoc ''
9292- Specify where a UNIX domain socket should be placed.
9393- '';
9494- };
9595- allowOrigin = mkOption {
9696- type = types.listOf types.str;
9797- default = [];
9898- example = [ "localhost" "hedgedoc.org" ];
9999- description = lib.mdDoc ''
100100- List of domains to whitelist.
101101- '';
102102- };
103103- useSSL = mkOption {
104104- type = types.bool;
105105- default = false;
106106- description = lib.mdDoc ''
107107- Enable to use SSL server. This will also enable
108108- {option}`protocolUseSSL`.
109109- '';
110110- };
111111- enableStatsApi = mkOption {
112112- type = types.bool;
113113- default = false;
114114- description = lib.mdDoc ''
115115- Enables or disables the /status and /metrics endpoint.
116116- '';
117117- };
118118- hsts = {
119119- enable = mkOption {
120120- type = types.bool;
121121- default = true;
122122- description = lib.mdDoc ''
123123- Whether to enable HSTS if HTTPS is also enabled.
124124- '';
125125- };
126126- maxAgeSeconds = mkOption {
127127- type = types.int;
128128- default = 31536000;
129129- description = lib.mdDoc ''
130130- Max duration for clients to keep the HSTS status.
131131- '';
132132- };
133133- includeSubdomains = mkOption {
134134- type = types.bool;
135135- default = true;
136136- description = lib.mdDoc ''
137137- Whether to include subdomains in HSTS.
138138- '';
139139- };
140140- preload = mkOption {
141141- type = types.bool;
142142- default = true;
143143- description = lib.mdDoc ''
144144- Whether to allow preloading of the site's HSTS status.
145145- '';
146146- };
147147- };
148148- csp = mkOption {
149149- type = types.nullOr types.attrs;
150150- default = null;
151151- example = literalExpression ''
152152- {
153153- enable = true;
154154- directives = {
155155- scriptSrc = "trustworthy.scripts.example.com";
156156- };
157157- upgradeInsecureRequest = "auto";
158158- addDefaults = true;
159159- }
160160- '';
161161- description = lib.mdDoc ''
162162- Specify the Content Security Policy which is passed to Helmet.
163163- For configuration details see <https://helmetjs.github.io/docs/csp/>.
164164- '';
165165- };
166166- protocolUseSSL = mkOption {
167167- type = types.bool;
168168- default = false;
169169- description = lib.mdDoc ''
170170- Enable to use TLS for resource paths.
171171- This only applies when {option}`domain` is set.
172172- '';
173173- };
174174- urlAddPort = mkOption {
175175- type = types.bool;
176176- default = false;
177177- description = lib.mdDoc ''
178178- Enable to add the port to callback URLs.
179179- This only applies when {option}`domain` is set
180180- and only for ports other than 80 and 443.
181181- '';
182182- };
183183- useCDN = mkOption {
184184- type = types.bool;
185185- default = false;
186186- description = lib.mdDoc ''
187187- Whether to use CDN resources or not.
188188- '';
189189- };
190190- allowAnonymous = mkOption {
191191- type = types.bool;
192192- default = true;
193193- description = lib.mdDoc ''
194194- Whether to allow anonymous usage.
195195- '';
196196- };
197197- allowAnonymousEdits = mkOption {
198198- type = types.bool;
199199- default = false;
200200- description = lib.mdDoc ''
201201- Whether to allow guests to edit existing notes with the `freely` permission,
202202- when {option}`allowAnonymous` is enabled.
203203- '';
204204- };
205205- allowFreeURL = mkOption {
206206- type = types.bool;
207207- default = false;
208208- description = lib.mdDoc ''
209209- Whether to allow note creation by accessing a nonexistent note URL.
210210- '';
211211- };
212212- requireFreeURLAuthentication = mkOption {
213213- type = types.bool;
214214- default = false;
215215- description = lib.mdDoc ''
216216- Whether to require authentication for FreeURL mode style note creation.
217217- '';
218218- };
219219- defaultPermission = mkOption {
220220- type = types.enum [ "freely" "editable" "limited" "locked" "private" ];
221221- default = "editable";
222222- description = lib.mdDoc ''
223223- Default permissions for notes.
224224- This only applies for signed-in users.
225225- '';
226226- };
227227- dbURL = mkOption {
228228- type = types.nullOr types.str;
229229- default = null;
230230- example = ''
231231- postgres://user:pass@host:5432/dbname
232232- '';
233233- description = lib.mdDoc ''
234234- Specify which database to use.
235235- HedgeDoc supports mysql, postgres, sqlite and mssql.
236236- See [
237237- https://sequelize.readthedocs.io/en/v3/](https://sequelize.readthedocs.io/en/v3/) for more information.
238238- Note: This option overrides {option}`db`.
239239- '';
240240- };
241241- db = mkOption {
242242- type = types.attrs;
243243- default = {};
244244- example = literalExpression ''
245245- {
246246- dialect = "sqlite";
247247- storage = "/var/lib/${name}/db.${name}.sqlite";
248248- }
249249- '';
250250- description = lib.mdDoc ''
251251- Specify the configuration for sequelize.
252252- HedgeDoc supports mysql, postgres, sqlite and mssql.
253253- See [
254254- https://sequelize.readthedocs.io/en/v3/](https://sequelize.readthedocs.io/en/v3/) for more information.
255255- Note: This option overrides {option}`db`.
256256- '';
257257- };
258258- sslKeyPath= mkOption {
259259- type = types.nullOr types.str;
260260- default = null;
261261- example = "/var/lib/hedgedoc/hedgedoc.key";
262262- description = lib.mdDoc ''
263263- Path to the SSL key. Needed when {option}`useSSL` is enabled.
264264- '';
265265- };
266266- sslCertPath = mkOption {
267267- type = types.nullOr types.str;
268268- default = null;
269269- example = "/var/lib/hedgedoc/hedgedoc.crt";
270270- description = lib.mdDoc ''
271271- Path to the SSL cert. Needed when {option}`useSSL` is enabled.
272272- '';
273273- };
274274- sslCAPath = mkOption {
275275- type = types.listOf types.str;
276276- default = [];
277277- example = [ "/var/lib/hedgedoc/ca.crt" ];
278278- description = lib.mdDoc ''
279279- SSL ca chain. Needed when {option}`useSSL` is enabled.
280280- '';
281281- };
282282- dhParamPath = mkOption {
283283- type = types.nullOr types.str;
284284- default = null;
285285- example = "/var/lib/hedgedoc/dhparam.pem";
286286- description = lib.mdDoc ''
287287- Path to the SSL dh params. Needed when {option}`useSSL` is enabled.
288288- '';
289289- };
290290- tmpPath = mkOption {
291291- type = types.str;
292292- default = "/tmp";
293293- description = lib.mdDoc ''
294294- Path to the temp directory HedgeDoc should use.
295295- Note that {option}`serviceConfig.PrivateTmp` is enabled for
296296- the HedgeDoc systemd service by default.
297297- (Non-canonical paths are relative to HedgeDoc's base directory)
298298- '';
299299- };
300300- defaultNotePath = mkOption {
301301- type = types.nullOr types.str;
302302- default = "${cfg.package}/public/default.md";
303303- defaultText = literalExpression "\"\${cfg.package}/public/default.md\"";
304304- description = lib.mdDoc ''
305305- Path to the default Note file.
306306- (Non-canonical paths are relative to HedgeDoc's base directory)
307307- '';
308308- };
309309- docsPath = mkOption {
310310- type = types.nullOr types.str;
311311- default = "${cfg.package}/public/docs";
312312- defaultText = literalExpression "\"\${cfg.package}/public/docs\"";
313313- description = lib.mdDoc ''
314314- Path to the docs directory.
315315- (Non-canonical paths are relative to HedgeDoc's base directory)
316316- '';
317317- };
318318- indexPath = mkOption {
319319- type = types.nullOr types.str;
320320- default = "${cfg.package}/public/views/index.ejs";
321321- defaultText = literalExpression "\"\${cfg.package}/public/views/index.ejs\"";
322322- description = lib.mdDoc ''
323323- Path to the index template file.
324324- (Non-canonical paths are relative to HedgeDoc's base directory)
325325- '';
326326- };
327327- hackmdPath = mkOption {
328328- type = types.nullOr types.str;
329329- default = "${cfg.package}/public/views/hackmd.ejs";
330330- defaultText = literalExpression "\"\${cfg.package}/public/views/hackmd.ejs\"";
331331- description = lib.mdDoc ''
332332- Path to the hackmd template file.
333333- (Non-canonical paths are relative to HedgeDoc's base directory)
334334- '';
335335- };
336336- errorPath = mkOption {
337337- type = types.nullOr types.str;
338338- default = "${cfg.package}/public/views/error.ejs";
339339- defaultText = literalExpression "\"\${cfg.package}/public/views/error.ejs\"";
340340- description = lib.mdDoc ''
341341- Path to the error template file.
342342- (Non-canonical paths are relative to HedgeDoc's base directory)
343343- '';
344344- };
345345- prettyPath = mkOption {
346346- type = types.nullOr types.str;
347347- default = "${cfg.package}/public/views/pretty.ejs";
348348- defaultText = literalExpression "\"\${cfg.package}/public/views/pretty.ejs\"";
349349- description = lib.mdDoc ''
350350- Path to the pretty template file.
351351- (Non-canonical paths are relative to HedgeDoc's base directory)
352352- '';
353353- };
354354- slidePath = mkOption {
355355- type = types.nullOr types.str;
356356- default = "${cfg.package}/public/views/slide.hbs";
357357- defaultText = literalExpression "\"\${cfg.package}/public/views/slide.hbs\"";
358358- description = lib.mdDoc ''
359359- Path to the slide template file.
360360- (Non-canonical paths are relative to HedgeDoc's base directory)
361361- '';
362362- };
363363- uploadsPath = mkOption {
364364- type = types.str;
365365- default = "${cfg.workDir}/uploads";
366366- defaultText = literalExpression "\"\${cfg.workDir}/uploads\"";
367367- description = lib.mdDoc ''
368368- Path under which uploaded files are saved.
369369- '';
370370- };
371371- sessionName = mkOption {
372372- type = types.str;
373373- default = "connect.sid";
374374- description = lib.mdDoc ''
375375- Specify the name of the session cookie.
376376- '';
377377- };
378378- sessionSecret = mkOption {
379379- type = types.nullOr types.str;
380380- default = null;
381381- description = lib.mdDoc ''
382382- Specify the secret used to sign the session cookie.
383383- If unset, one will be generated on startup.
384384- '';
385385- };
386386- sessionLife = mkOption {
387387- type = types.int;
388388- default = 1209600000;
389389- description = lib.mdDoc ''
390390- Session life time in milliseconds.
391391- '';
392392- };
393393- heartbeatInterval = mkOption {
394394- type = types.int;
395395- default = 5000;
396396- description = lib.mdDoc ''
397397- Specify the socket.io heartbeat interval.
398398- '';
399399- };
400400- heartbeatTimeout = mkOption {
401401- type = types.int;
402402- default = 10000;
403403- description = lib.mdDoc ''
404404- Specify the socket.io heartbeat timeout.
405405- '';
406406- };
407407- documentMaxLength = mkOption {
408408- type = types.int;
409409- default = 100000;
410410- description = lib.mdDoc ''
411411- Specify the maximum document length.
412412- '';
413413- };
414414- email = mkOption {
415415- type = types.bool;
416416- default = true;
417417- description = lib.mdDoc ''
418418- Whether to enable email sign-in.
419419- '';
420420- };
421421- allowEmailRegister = mkOption {
422422- type = types.bool;
423423- default = true;
424424- description = lib.mdDoc ''
425425- Whether to enable email registration.
426426- '';
427427- };
428428- allowGravatar = mkOption {
429429- type = types.bool;
430430- default = true;
431431- description = lib.mdDoc ''
432432- Whether to use gravatar as profile picture source.
433433- '';
434434- };
435435- imageUploadType = mkOption {
436436- type = types.enum [ "imgur" "s3" "minio" "filesystem" ];
437437- default = "filesystem";
438438- description = lib.mdDoc ''
439439- Specify where to upload images.
440440- '';
441441- };
442442- minio = mkOption {
443443- type = types.nullOr (types.submodule {
444444- options = {
445445- accessKey = mkOption {
446446- type = types.str;
447447- description = lib.mdDoc ''
448448- Minio access key.
449449- '';
450450- };
451451- secretKey = mkOption {
452452- type = types.str;
453453- description = lib.mdDoc ''
454454- Minio secret key.
455455- '';
456456- };
457457- endPoint = mkOption {
458458- type = types.str;
459459- description = lib.mdDoc ''
460460- Minio endpoint.
461461- '';
462462- };
463463- port = mkOption {
464464- type = types.port;
465465- default = 9000;
466466- description = lib.mdDoc ''
467467- Minio listen port.
468468- '';
469469- };
470470- secure = mkOption {
471471- type = types.bool;
472472- default = true;
473473- description = lib.mdDoc ''
474474- Whether to use HTTPS for Minio.
475475- '';
476476- };
5050+ This is useful if you are trying to run hedgedoc behind
5151+ a reverse proxy.
5252+ '';
47753 };
478478- });
479479- default = null;
480480- description = lib.mdDoc "Configure the minio third-party integration.";
481481- };
482482- s3 = mkOption {
483483- type = types.nullOr (types.submodule {
484484- options = {
485485- accessKeyId = mkOption {
486486- type = types.str;
487487- description = lib.mdDoc ''
488488- AWS access key id.
489489- '';
490490- };
491491- secretAccessKey = mkOption {
492492- type = types.str;
493493- description = lib.mdDoc ''
494494- AWS access key.
495495- '';
496496- };
497497- region = mkOption {
498498- type = types.str;
499499- description = lib.mdDoc ''
500500- AWS S3 region.
501501- '';
502502- };
503503- };
504504- });
505505- default = null;
506506- description = lib.mdDoc "Configure the s3 third-party integration.";
507507- };
508508- s3bucket = mkOption {
509509- type = types.nullOr types.str;
510510- default = null;
511511- description = lib.mdDoc ''
512512- Specify the bucket name for upload types `s3` and `minio`.
513513- '';
514514- };
515515- allowPDFExport = mkOption {
516516- type = types.bool;
517517- default = true;
518518- description = lib.mdDoc ''
519519- Whether to enable PDF exports.
520520- '';
521521- };
522522- imgur.clientId = mkOption {
523523- type = types.nullOr types.str;
524524- default = null;
525525- description = lib.mdDoc ''
526526- Imgur API client ID.
527527- '';
528528- };
529529- azure = mkOption {
530530- type = types.nullOr (types.submodule {
531531- options = {
532532- connectionString = mkOption {
533533- type = types.str;
534534- description = lib.mdDoc ''
535535- Azure Blob Storage connection string.
536536- '';
537537- };
538538- container = mkOption {
539539- type = types.str;
540540- description = lib.mdDoc ''
541541- Azure Blob Storage container name.
542542- It will be created if non-existent.
543543- '';
544544- };
545545- };
546546- });
547547- default = null;
548548- description = lib.mdDoc "Configure the azure third-party integration.";
549549- };
550550- oauth2 = mkOption {
551551- type = types.nullOr (types.submodule {
552552- options = {
553553- authorizationURL = mkOption {
554554- type = types.str;
555555- description = lib.mdDoc ''
556556- Specify the OAuth authorization URL.
557557- '';
558558- };
559559- tokenURL = mkOption {
560560- type = types.str;
561561- description = lib.mdDoc ''
562562- Specify the OAuth token URL.
563563- '';
564564- };
565565- baseURL = mkOption {
566566- type = with types; nullOr str;
567567- default = null;
568568- description = lib.mdDoc ''
569569- Specify the OAuth base URL.
570570- '';
571571- };
572572- userProfileURL = mkOption {
573573- type = with types; nullOr str;
574574- default = null;
575575- description = lib.mdDoc ''
576576- Specify the OAuth userprofile URL.
577577- '';
578578- };
579579- userProfileUsernameAttr = mkOption {
580580- type = with types; nullOr str;
581581- default = null;
582582- description = lib.mdDoc ''
583583- Specify the name of the attribute for the username from the claim.
584584- '';
585585- };
586586- userProfileDisplayNameAttr = mkOption {
587587- type = with types; nullOr str;
588588- default = null;
589589- description = lib.mdDoc ''
590590- Specify the name of the attribute for the display name from the claim.
591591- '';
592592- };
593593- userProfileEmailAttr = mkOption {
594594- type = with types; nullOr str;
595595- default = null;
596596- description = lib.mdDoc ''
597597- Specify the name of the attribute for the email from the claim.
598598- '';
599599- };
600600- scope = mkOption {
601601- type = with types; nullOr str;
602602- default = null;
603603- description = lib.mdDoc ''
604604- Specify the OAuth scope.
605605- '';
606606- };
607607- providerName = mkOption {
608608- type = with types; nullOr str;
609609- default = null;
610610- description = lib.mdDoc ''
611611- Specify the name to be displayed for this strategy.
612612- '';
613613- };
614614- rolesClaim = mkOption {
615615- type = with types; nullOr str;
616616- default = null;
617617- description = lib.mdDoc ''
618618- Specify the role claim name.
619619- '';
620620- };
621621- accessRole = mkOption {
622622- type = with types; nullOr str;
623623- default = null;
624624- description = lib.mdDoc ''
625625- Specify role which should be included in the ID token roles claim to grant access
626626- '';
627627- };
628628- clientID = mkOption {
629629- type = types.str;
630630- description = lib.mdDoc ''
631631- Specify the OAuth client ID.
632632- '';
633633- };
634634- clientSecret = mkOption {
635635- type = with types; nullOr str;
636636- default = null;
637637- description = lib.mdDoc ''
638638- Specify the OAuth client secret.
639639- '';
640640- };
5454+ urlPath = mkOption {
5555+ type = with types; nullOr str;
5656+ default = null;
5757+ example = "hedgedoc";
5858+ description = mdDoc ''
5959+ URL path for the website.
6060+6161+ This is useful if you are hosting hedgedoc on a path like
6262+ `www.example.com/hedgedoc`
6363+ '';
64164 };
642642- });
643643- default = null;
644644- description = lib.mdDoc "Configure the OAuth integration.";
645645- };
646646- facebook = mkOption {
647647- type = types.nullOr (types.submodule {
648648- options = {
649649- clientID = mkOption {
650650- type = types.str;
651651- description = lib.mdDoc ''
652652- Facebook API client ID.
653653- '';
654654- };
655655- clientSecret = mkOption {
656656- type = types.str;
657657- description = lib.mdDoc ''
658658- Facebook API client secret.
659659- '';
660660- };
6565+ host = mkOption {
6666+ type = with types; nullOr str;
6767+ default = "localhost";
6868+ description = mdDoc ''
6969+ Address to listen on.
7070+ '';
66171 };
662662- });
663663- default = null;
664664- description = lib.mdDoc "Configure the facebook third-party integration";
665665- };
666666- twitter = mkOption {
667667- type = types.nullOr (types.submodule {
668668- options = {
669669- consumerKey = mkOption {
670670- type = types.str;
671671- description = lib.mdDoc ''
672672- Twitter API consumer key.
673673- '';
674674- };
675675- consumerSecret = mkOption {
676676- type = types.str;
677677- description = lib.mdDoc ''
678678- Twitter API consumer secret.
679679- '';
680680- };
7272+ port = mkOption {
7373+ type = types.port;
7474+ default = 3000;
7575+ example = 80;
7676+ description = mdDoc ''
7777+ Port to listen on.
7878+ '';
68179 };
682682- });
683683- default = null;
684684- description = lib.mdDoc "Configure the Twitter third-party integration.";
685685- };
686686- github = mkOption {
687687- type = types.nullOr (types.submodule {
688688- options = {
689689- clientID = mkOption {
690690- type = types.str;
691691- description = lib.mdDoc ''
692692- GitHub API client ID.
693693- '';
694694- };
695695- clientSecret = mkOption {
696696- type = types.str;
697697- description = lib.mdDoc ''
698698- Github API client secret.
699699- '';
700700- };
8080+ path = mkOption {
8181+ type = with types; nullOr path;
8282+ default = null;
8383+ example = "/run/hedgedoc/hedgedoc.sock";
8484+ description = mdDoc ''
8585+ Path to UNIX domain socket to listen on
8686+8787+ ::: {.note}
8888+ If specified, {option}`host` and {option}`port` will be ignored.
8989+ :::
9090+ '';
70191 };
702702- });
703703- default = null;
704704- description = lib.mdDoc "Configure the GitHub third-party integration.";
705705- };
706706- gitlab = mkOption {
707707- type = types.nullOr (types.submodule {
708708- options = {
709709- baseURL = mkOption {
710710- type = types.str;
711711- default = "";
712712- description = lib.mdDoc ''
713713- GitLab API authentication endpoint.
714714- Only needed for other endpoints than gitlab.com.
715715- '';
716716- };
717717- clientID = mkOption {
718718- type = types.str;
719719- description = lib.mdDoc ''
720720- GitLab API client ID.
721721- '';
722722- };
723723- clientSecret = mkOption {
724724- type = types.str;
725725- description = lib.mdDoc ''
726726- GitLab API client secret.
727727- '';
728728- };
729729- scope = mkOption {
730730- type = types.enum [ "api" "read_user" ];
731731- default = "api";
732732- description = lib.mdDoc ''
733733- GitLab API requested scope.
734734- GitLab snippet import/export requires api scope.
735735- '';
736736- };
9292+ protocolUseSSL = mkOption {
9393+ type = types.bool;
9494+ default = false;
9595+ example = true;
9696+ description = mdDoc ''
9797+ Use `https://` for all links.
9898+9999+ This is useful if you are trying to run hedgedoc behind
100100+ a reverse proxy.
101101+102102+ ::: {.note}
103103+ Only applied if {option}`domain` is set.
104104+ :::
105105+ '';
737106 };
738738- });
739739- default = null;
740740- description = lib.mdDoc "Configure the GitLab third-party integration.";
741741- };
742742- mattermost = mkOption {
743743- type = types.nullOr (types.submodule {
744744- options = {
745745- baseURL = mkOption {
746746- type = types.str;
747747- description = lib.mdDoc ''
748748- Mattermost authentication endpoint.
749749- '';
750750- };
751751- clientID = mkOption {
752752- type = types.str;
753753- description = lib.mdDoc ''
754754- Mattermost API client ID.
755755- '';
756756- };
757757- clientSecret = mkOption {
758758- type = types.str;
759759- description = lib.mdDoc ''
760760- Mattermost API client secret.
761761- '';
762762- };
107107+ allowOrigin = mkOption {
108108+ type = with types; listOf str;
109109+ default = with cfg.settings; [ host ] ++ lib.optionals (domain != null) [ domain ];
110110+ defaultText = literalExpression ''
111111+ with config.services.hedgedoc.settings; [ host ] ++ lib.optionals (domain != null) [ domain ]
112112+ '';
113113+ example = [ "localhost" "hedgedoc.org" ];
114114+ description = mdDoc ''
115115+ List of domains to whitelist.
116116+ '';
763117 };
764764- });
765765- default = null;
766766- description = lib.mdDoc "Configure the Mattermost third-party integration.";
767767- };
768768- dropbox = mkOption {
769769- type = types.nullOr (types.submodule {
770770- options = {
771771- clientID = mkOption {
772772- type = types.str;
773773- description = lib.mdDoc ''
774774- Dropbox API client ID.
775775- '';
118118+ db = mkOption {
119119+ type = types.attrs;
120120+ default = {
121121+ dialect = "sqlite";
122122+ storage = "/var/lib/${name}/db.sqlite";
776123 };
777777- clientSecret = mkOption {
778778- type = types.str;
779779- description = lib.mdDoc ''
780780- Dropbox API client secret.
781781- '';
782782- };
783783- appKey = mkOption {
784784- type = types.str;
785785- description = lib.mdDoc ''
786786- Dropbox app key.
787787- '';
788788- };
124124+ defaultText = literalExpression ''
125125+ {
126126+ dialect = "sqlite";
127127+ storage = "/var/lib/hedgedoc/db.sqlite";
128128+ }
129129+ '';
130130+ example = literalExpression ''
131131+ db = {
132132+ username = "hedgedoc";
133133+ database = "hedgedoc";
134134+ host = "localhost:5432";
135135+ # or via socket
136136+ # host = "/run/postgresql";
137137+ dialect = "postgresql";
138138+ };
139139+ '';
140140+ description = mdDoc ''
141141+ Specify the configuration for sequelize.
142142+ HedgeDoc supports `mysql`, `postgres`, `sqlite` and `mssql`.
143143+ See <https://sequelize.readthedocs.io/en/v3/>
144144+ for more information.
145145+146146+ ::: {.note}
147147+ The relevant parts will be overriden if you set {option}`dbURL`.
148148+ :::
149149+ '';
789150 };
790790- });
791791- default = null;
792792- description = lib.mdDoc "Configure the Dropbox third-party integration.";
793793- };
794794- google = mkOption {
795795- type = types.nullOr (types.submodule {
796796- options = {
797797- clientID = mkOption {
798798- type = types.str;
799799- description = lib.mdDoc ''
800800- Google API client ID.
801801- '';
802802- };
803803- clientSecret = mkOption {
804804- type = types.str;
805805- description = lib.mdDoc ''
806806- Google API client secret.
807807- '';
808808- };
151151+ useSSL = mkOption {
152152+ type = types.bool;
153153+ default = false;
154154+ description = mdDoc ''
155155+ Enable to use SSL server.
156156+157157+ ::: {.note}
158158+ This will also enable {option}`protocolUseSSL`.
159159+160160+ It will also require you to set the following:
161161+162162+ - {option}`sslKeyPath`
163163+ - {option}`sslCertPath`
164164+ - {option}`sslCAPath`
165165+ - {option}`dhParamPath`
166166+ :::
167167+ '';
809168 };
810810- });
811811- default = null;
812812- description = lib.mdDoc "Configure the Google third-party integration.";
813813- };
814814- ldap = mkOption {
815815- type = types.nullOr (types.submodule {
816816- options = {
817817- providerName = mkOption {
818818- type = types.str;
819819- default = "";
820820- description = lib.mdDoc ''
821821- Optional name to be displayed at login form, indicating the LDAP provider.
822822- '';
823823- };
824824- url = mkOption {
825825- type = types.str;
826826- example = "ldap://localhost";
827827- description = lib.mdDoc ''
828828- URL of LDAP server.
829829- '';
830830- };
831831- bindDn = mkOption {
832832- type = types.str;
833833- description = lib.mdDoc ''
834834- Bind DN for LDAP access.
835835- '';
836836- };
837837- bindCredentials = mkOption {
838838- type = types.str;
839839- description = lib.mdDoc ''
840840- Bind credentials for LDAP access.
841841- '';
842842- };
843843- searchBase = mkOption {
844844- type = types.str;
845845- example = "o=users,dc=example,dc=com";
846846- description = lib.mdDoc ''
847847- LDAP directory to begin search from.
848848- '';
849849- };
850850- searchFilter = mkOption {
851851- type = types.str;
852852- example = "(uid={{username}})";
853853- description = lib.mdDoc ''
854854- LDAP filter to search with.
855855- '';
856856- };
857857- searchAttributes = mkOption {
858858- type = types.nullOr (types.listOf types.str);
859859- default = null;
860860- example = [ "displayName" "mail" ];
861861- description = lib.mdDoc ''
862862- LDAP attributes to search with.
863863- '';
864864- };
865865- userNameField = mkOption {
866866- type = types.str;
867867- default = "";
868868- description = lib.mdDoc ''
869869- LDAP field which is used as the username on HedgeDoc.
870870- By default {option}`useridField` is used.
871871- '';
872872- };
873873- useridField = mkOption {
874874- type = types.str;
875875- example = "uid";
876876- description = lib.mdDoc ''
877877- LDAP field which is a unique identifier for users on HedgeDoc.
878878- '';
879879- };
880880- tlsca = mkOption {
881881- type = types.str;
882882- default = "/etc/ssl/certs/ca-certificates.crt";
883883- example = "server-cert.pem,root.pem";
884884- description = lib.mdDoc ''
885885- Root CA for LDAP TLS in PEM format.
886886- '';
887887- };
169169+ uploadsPath = mkOption {
170170+ type = types.path;
171171+ default = "/var/lib/${name}/uploads";
172172+ defaultText = "/var/lib/hedgedoc/uploads";
173173+ description = mdDoc ''
174174+ Directory for storing uploaded images.
175175+ '';
888176 };
889889- });
890890- default = null;
891891- description = lib.mdDoc "Configure the LDAP integration.";
892892- };
893893- saml = mkOption {
894894- type = types.nullOr (types.submodule {
895895- options = {
896896- idpSsoUrl = mkOption {
897897- type = types.str;
898898- example = "https://idp.example.com/sso";
899899- description = lib.mdDoc ''
900900- IdP authentication endpoint.
901901- '';
902902- };
903903- idpCert = mkOption {
904904- type = types.path;
905905- example = "/path/to/cert.pem";
906906- description = lib.mdDoc ''
907907- Path to IdP certificate file in PEM format.
908908- '';
909909- };
910910- issuer = mkOption {
911911- type = types.str;
912912- default = "";
913913- description = lib.mdDoc ''
914914- Optional identity of the service provider.
915915- This defaults to the server URL.
916916- '';
917917- };
918918- identifierFormat = mkOption {
919919- type = types.str;
920920- default = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress";
921921- description = lib.mdDoc ''
922922- Optional name identifier format.
923923- '';
924924- };
925925- groupAttribute = mkOption {
926926- type = types.str;
927927- default = "";
928928- example = "memberOf";
929929- description = lib.mdDoc ''
930930- Optional attribute name for group list.
931931- '';
932932- };
933933- externalGroups = mkOption {
934934- type = types.listOf types.str;
935935- default = [];
936936- example = [ "Temporary-staff" "External-users" ];
937937- description = lib.mdDoc ''
938938- Excluded group names.
939939- '';
940940- };
941941- requiredGroups = mkOption {
942942- type = types.listOf types.str;
943943- default = [];
944944- example = [ "Hedgedoc-Users" ];
945945- description = lib.mdDoc ''
946946- Required group names.
947947- '';
948948- };
949949- providerName = mkOption {
950950- type = types.str;
951951- default = "";
952952- example = "My institution";
953953- description = lib.mdDoc ''
954954- Optional name to be displayed at login form indicating the SAML provider.
955955- '';
956956- };
957957- attribute = {
958958- id = mkOption {
959959- type = types.str;
960960- default = "";
961961- description = lib.mdDoc ''
962962- Attribute map for `id`.
963963- Defaults to `NameID` of SAML response.
964964- '';
965965- };
966966- username = mkOption {
967967- type = types.str;
968968- default = "";
969969- description = lib.mdDoc ''
970970- Attribute map for `username`.
971971- Defaults to `NameID` of SAML response.
972972- '';
973973- };
974974- email = mkOption {
975975- type = types.str;
976976- default = "";
977977- description = lib.mdDoc ''
978978- Attribute map for `email`.
979979- Defaults to `NameID` of SAML response if
980980- {option}`identifierFormat` has
981981- the default value.
982982- '';
983983- };
984984- };
177177+178178+ # Declared because we change the default to false.
179179+ allowGravatar = mkOption {
180180+ type = types.bool;
181181+ default = false;
182182+ example = true;
183183+ description = mdDoc ''
184184+ Whether to enable [Libravatar](https://wiki.libravatar.org/) as
185185+ profile picture source on your instance.
186186+187187+ Despite the naming of the setting, Hedgedoc replaced Gravatar
188188+ with Libravatar in [CodiMD 1.4.0](https://hedgedoc.org/releases/1.4.0/)
189189+ '';
985190 };
986986- });
987987- default = null;
988988- description = lib.mdDoc "Configure the SAML integration.";
191191+ };
989192 };
990990- }; in lib.mkOption {
991991- type = lib.types.submodule {
992992- freeformType = settingsFormat.type;
993993- inherit options;
994994- };
995995- description = lib.mdDoc ''
193193+194194+ description = mdDoc ''
996195 HedgeDoc configuration, see
997196 <https://docs.hedgedoc.org/configuration/>
998197 for documentation.
···1003202 type = with types; nullOr path;
1004203 default = null;
1005204 example = "/var/lib/hedgedoc/hedgedoc.env";
10061006- description = lib.mdDoc ''
205205+ description = mdDoc ''
1007206 Environment file as defined in {manpage}`systemd.exec(5)`.
10082071009208 Secrets may be passed to the service without adding them to the world-readable
···1028227 };
1029228 };
103022910311031- config = mkIf cfg.enable {
10321032- assertions = [
10331033- { assertion = cfg.settings.db == {} -> (
10341034- cfg.settings.dbURL != "" && cfg.settings.dbURL != null
10351035- );
10361036- message = "Database configuration for HedgeDoc missing."; }
10371037- ];
10381038- users.groups.${name} = {};
230230+ config = lib.mkIf cfg.enable {
231231+ users.groups.${name} = { };
1039232 users.users.${name} = {
1040233 description = "HedgeDoc service user";
1041234 group = name;
10421042- extraGroups = cfg.groups;
10431043- home = cfg.workDir;
10441044- createHome = true;
1045235 isSystemUser = true;
1046236 };
1047237238238+ services.hedgedoc.settings = {
239239+ defaultNotePath = lib.mkDefault "${cfg.package}/public/default.md";
240240+ docsPath = lib.mkDefault "${cfg.package}/public/docs";
241241+ viewPath = lib.mkDefault "${cfg.package}/public/views";
242242+ };
243243+1048244 systemd.services.hedgedoc = {
1049245 description = "HedgeDoc Service";
246246+ documentation = [ "https://docs.hedgedoc.org/" ];
1050247 wantedBy = [ "multi-user.target" ];
1051248 after = [ "networking.target" ];
10521052- preStart = ''
10531053- ${pkgs.envsubst}/bin/envsubst \
10541054- -o ${cfg.workDir}/config.json \
10551055- -i ${prettyJSON cfg.settings}
10561056- mkdir -p ${cfg.settings.uploadsPath}
10571057- '';
249249+ preStart =
250250+ let
251251+ configFile = settingsFormat.generate "hedgedoc-config.json" {
252252+ production = cfg.settings;
253253+ };
254254+ in
255255+ ''
256256+ ${pkgs.envsubst}/bin/envsubst \
257257+ -o /run/${name}/config.json \
258258+ -i ${configFile}
259259+ ${pkgs.coreutils}/bin/mkdir -p ${cfg.settings.uploadsPath}
260260+ '';
1058261 serviceConfig = {
10591059- WorkingDirectory = cfg.workDir;
10601060- StateDirectory = [ cfg.workDir cfg.settings.uploadsPath ];
10611061- ExecStart = "${lib.getExe cfg.package}";
10621062- EnvironmentFile = mkIf (cfg.environmentFile != null) [ cfg.environmentFile ];
262262+ User = name;
263263+ Group = name;
264264+265265+ Restart = "always";
266266+ ExecStart = "${cfg.package}/bin/hedgedoc";
267267+ RuntimeDirectory = [ name ];
268268+ StateDirectory = [ name ];
269269+ WorkingDirectory = "/run/${name}";
270270+ ReadWritePaths = [
271271+ "-${cfg.settings.uploadsPath}"
272272+ ] ++ lib.optionals (cfg.settings.db ? "storage") [ "-${cfg.settings.db.storage}" ];
273273+ EnvironmentFile = lib.mkIf (cfg.environmentFile != null) [ cfg.environmentFile ];
1063274 Environment = [
10641064- "CMD_CONFIG_FILE=${cfg.workDir}/config.json"
275275+ "CMD_CONFIG_FILE=/run/${name}/config.json"
1065276 "NODE_ENV=production"
1066277 ];
10671067- Restart = "always";
10681068- User = name;
278278+279279+ # Hardening
280280+ AmbientCapabilities = "";
281281+ CapabilityBoundingSet = "";
282282+ LockPersonality = true;
283283+ NoNewPrivileges = true;
284284+ PrivateDevices = true;
285285+ PrivateMounts = true;
1069286 PrivateTmp = true;
287287+ PrivateUsers = true;
288288+ ProcSubset = "pid";
289289+ ProtectClock = true;
290290+ ProtectControlGroups = true;
291291+ ProtectHome = true;
292292+ ProtectHostname = true;
293293+ ProtectKernelLogs = true;
294294+ ProtectKernelModules = true;
295295+ ProtectKernelTunables = true;
296296+ ProtectProc = "invisible";
297297+ ProtectSystem = "strict";
298298+ RemoveIPC = true;
299299+ RestrictAddressFamilies = [
300300+ "AF_INET"
301301+ "AF_INET6"
302302+ # Required for connecting to database sockets,
303303+ # and listening to unix socket at `cfg.settings.path`
304304+ "AF_UNIX"
305305+ ];
306306+ RestrictNamespaces = true;
307307+ RestrictRealtime = true;
308308+ RestrictSUIDSGID = true;
309309+ SocketBindAllow = lib.mkIf (cfg.settings.path == null) cfg.settings.port;
310310+ SocketBindDeny = "any";
311311+ SystemCallArchitectures = "native";
312312+ SystemCallFilter = [
313313+ "@system-service"
314314+ "~@privileged @obsolete"
315315+ "@pkey"
316316+ ];
317317+ UMask = "0007";
1070318 };
1071319 };
1072320 };
+1-1
nixos/modules/services/web-apps/hledger-web.nix
···7788 enable = mkEnableOption (lib.mdDoc "hledger-web service");
991010- serveApi = mkEnableOption (lib.mdDoc "Serve only the JSON web API, without the web UI");
1010+ serveApi = mkEnableOption (lib.mdDoc "serving only the JSON web API, without the web UI");
11111212 host = mkOption {
1313 type = types.str;
+2-2
nixos/modules/services/web-apps/isso.nix
···1212 options = {
1313 services.isso = {
1414 enable = mkEnableOption (lib.mdDoc ''
1515- A commenting server similar to Disqus.
1515+ isso, a commenting server similar to Disqus.
16161717 Note: The application's author suppose to run isso behind a reverse proxy.
1818 The embedded solution offered by NixOS is also only suitable for small installations
1919- below 20 requests per second.
1919+ below 20 requests per second
2020 '');
21212222 settings = mkOption {
+2-2
nixos/modules/services/web-apps/jitsi-meet.nix
···105105 type = bool;
106106 default = true;
107107 description = lib.mdDoc ''
108108- Whether to enable Jitsi Videobridge instance and configure it to connect to Prosody.
108108+ Jitsi Videobridge instance and configure it to connect to Prosody.
109109110110- Additional configuration is possible with {option}`services.jitsi-videobridge`.
110110+ Additional configuration is possible with {option}`services.jitsi-videobridge`
111111 '';
112112 };
113113
···88 options = {
99 services.meme-bingo-web = {
1010 enable = mkEnableOption (mdDoc ''
1111- A web app for the meme bingo, rendered entirely on the web server and made interactive with forms.
1111+ a web app for the meme bingo, rendered entirely on the web server and made interactive with forms.
12121313- Note: The application's author suppose to run meme-bingo-web behind a reverse proxy for SSL and HTTP/3.
1313+ Note: The application's author suppose to run meme-bingo-web behind a reverse proxy for SSL and HTTP/3
1414 '');
15151616 package = mkOption {
···1616 options.services.keter = {
1717 enable = lib.mkEnableOption (lib.mdDoc ''keter, a web app deployment manager.
1818Note that this module only support loading of webapps:
1919-Keep an old app running and swap the ports when the new one is booted.
1919+Keep an old app running and swap the ports when the new one is booted
2020'');
21212222 root = lib.mkOption {
···7979 // { default = true; internal = true; };
8080 enableValidation = lib.mkEnableOption (lib.mdDoc ''the validation of bootspec documents for each build.
8181 This will introduce Go in the build-time closure as we are relying on [Cuelang](https://cuelang.org/) for schema validation.
8282- Enable this option if you want to ascertain that your documents are correct.
8282+ Enable this option if you want to ascertain that your documents are correct
8383 ''
8484 );
8585
···11+Index: tkdiff
22+===================================================================
33+diff --git a/tkdiff b/tkdiff
44+--- a/tkdiff (revision 188)
55++++ b/tkdiff (revision 189)
66+@@ -111,7 +111,7 @@
77+ }
88+99+ # Determine the name of the temporary directory, the rc file name,
1010+-# and possible VPATH EnvVar, all of which are platform dependent.
1111++# NULLdev, and possible VPATH EnvVar, all of which are platform dependent.
1212+ #
1313+ # Much MAY likely be overridden by a preference in .tkdiffrc,
1414+ # EXCEPT (obviously) when no such file actually exists yet
1515+@@ -126,6 +126,9 @@
1616+ set opts(tmpdir) C:/temp
1717+ }
1818+1919++ # Reserved filename which is actually a NULL device
2020++ set opts(NULLdev) "nul"
2121++
2222+ # Split up and store a VPATH if it exists
2323+ if {[info exists ::env(VPATH)]} {
2424+ set finfo(Vpath) [split $::env(VPATH) ";"]
2525+@@ -145,6 +148,9 @@
2626+ set opts(tmpdir) $::env(TMPDIR)
2727+ } {set opts(tmpdir) /tmp }
2828+2929++ # Reserved filename which is actually a NULL device (Unix-like platforms)
3030++ set opts(NULLdev) "/dev/null"
3131++
3232+ # Split up and store a VPATH if it exists
3333+ if {[info exists ::env(VPATH)]} {
3434+ set finfo(Vpath) [split $::env(VPATH) ":"]
3535+@@ -2106,7 +2112,7 @@
3636+ # 1 Failed (PLUS a 'pushed' HARD-error message to the caller)
3737+ ###############################################################################
3838+ proc get-file {fn ndx {probe 0}} {
3939+- global g finfo
4040++ global g opts finfo
4141+4242+ # Ancestor files are stored into a slightly adjusted array element name
4343+ # N.B> 'ndx' AS PASSED *can* be an EXPRESSION (not just a number): resolve!
4444+@@ -2121,7 +2127,7 @@
4545+ } elseif {!$tildechk} {
4646+ # DO NOT REPORT non-existence if this attempt was ONLY a probe
4747+ if {$probe} { return 1 } { set MSG "File '$fn' does not exist" }
4848+- } elseif {[file isfile $fn]} {
4949++ } elseif {[file isfile $fn] || $fn == $opts(NULLdev)} {
5050+ set finfo(${A}lbl,$ndx) [shortNm [set finfo(${A}pth,$ndx) "$fn"]]
5151+ } else { set MSG "'$fn' exists, but is not a file" }
5252+5353+@@ -2857,7 +2863,7 @@
5454+ # Align various label decorations to the CURRENT input file pairing
5555+ ###############################################################################
5656+ proc alignDecor {pairnum} {
5757+- global g w finfo
5858++ global g w opts finfo
5959+6060+ # Establish if 3way mode is NOW active and what file indices are in use
6161+ set g(is3way) [info exists finfo(albl,$pairnum)]
6262+@@ -2874,7 +2880,8 @@
6363+ set finfo(lbl,$LR) $finfo(ulbl,$ndx($n)) ;# Override lbl display
6464+ } else {set finfo(lbl,$LR) $finfo(lbl,$ndx($n))}
6565+6666+- if {![info exists finfo(tmp,$ndx($n))]} {
6767++ if {![info exists finfo(tmp,$ndx($n))] \
6868++ && $finfo(pth,$ndx($n)) != $opts(NULLdev)} {
6969+ # (N.B> Tip data will ALSO be used by report generation heading)
7070+ set g(tooltip,${LR}Label) "{$finfo(pth,$ndx($n))\n"
7171+ append g(tooltip,${LR}Label) \
+43
pkgs/by-name/tk/tkdiff/package.nix
···11+{ diffutils, fetchzip, lib, makeBinaryWrapper, stdenv, tk }:
22+33+stdenv.mkDerivation (finalAttrs: {
44+ pname = "tkdiff";
55+ version = "5.6";
66+77+ src = fetchzip {
88+ url = "mirror://sourceforge/tkdiff/tkdiff-${builtins.replaceStrings ["."] ["-"] finalAttrs.version}.zip";
99+ hash = "sha256-EpbIdjsejkkTaSpoZRM5AHz0r1Cio+YzRryK0BoghBk=";
1010+ };
1111+1212+ # fix regression: allow /dev/null again. eg: "tkdiff /dev/null file"
1313+ # svn diff --git -r188:189 https://svn.code.sf.net/p/tkdiff/code/trunk
1414+ patches = [ ./189.patch ];
1515+1616+ nativeBuildInputs = [ makeBinaryWrapper ];
1717+1818+ installPhase = ''
1919+ runHook preInstall
2020+2121+ install -Dm755 -t $out/bin tkdiff
2222+ wrapProgram $out/bin/tkdiff \
2323+ --prefix PATH : ${lib.makeBinPath [ diffutils tk ]}
2424+2525+ runHook postInstall
2626+ '';
2727+2828+ meta = {
2929+ description = "A graphical front end to the diff program";
3030+ homepage = "https://tkdiff.sourceforge.io/";
3131+ license = lib.licenses.gpl2Plus;
3232+ longDescription = ''
3333+ TkDiff is a graphical front end to the diff program. It provides a
3434+ side-by-side view of the differences between two text files, along
3535+ with several innovative features such as diff bookmarks, a graphical
3636+ map of differences for quick navigation, and a facility for slicing
3737+ diff regions to achieve exactly the merge output desired.
3838+ '';
3939+ mainProgram = "tkdiff";
4040+ maintainers = with lib.maintainers; [ robert-manchester ];
4141+ platforms = tk.meta.platforms;
4242+ };
4343+})
···44, installShellFiles
55, stdenv
66, darwin
77+, rust-jemalloc-sys
78 # tests
89, ruff-lsp
910}:
···3132 installShellFiles
3233 ];
33343434- buildInputs = lib.optionals stdenv.isDarwin [
3535+ buildInputs = [
3636+ rust-jemalloc-sys
3737+ ] ++ lib.optionals stdenv.isDarwin [
3538 darwin.apple_sdk.frameworks.CoreServices
3639 ];
37403841 cargoBuildFlags = [ "--package=ruff_cli" ];
3942 cargoTestFlags = cargoBuildFlags;
4040-4141- preBuild = lib.optionalString (stdenv.isDarwin && stdenv.isx86_64) ''
4242- # See https://github.com/jemalloc/jemalloc/issues/1997
4343- # Using a value of 48 should work on both emulated and native x86_64-darwin.
4444- export JEMALLOC_SYS_WITH_LG_VADDR=48
4545- '';
46434744 # tests expect no colors
4845 preCheck = ''
+1-1
pkgs/os-specific/linux/ryzenadj/default.nix
···2121 description = "Adjust power management settings for Ryzen Mobile Processors.";
2222 homepage = "https://github.com/FlyGoat/RyzenAdj";
2323 license = licenses.lgpl3Only;
2424- maintainers = with maintainers; [ ];
2424+ maintainers = with maintainers; [ rhendric ];
2525 platforms = [ "x86_64-linux" ];
2626 };
2727}
+2-2
pkgs/servers/computing/slurm/default.nix
···14141515stdenv.mkDerivation rec {
1616 pname = "slurm";
1717- version = "23.02.5.1";
1717+ version = "23.02.6.1";
18181919 # N.B. We use github release tags instead of https://www.schedmd.com/downloads.php
2020 # because the latter does not keep older releases.
···2323 repo = "slurm";
2424 # The release tags use - instead of .
2525 rev = "${pname}-${builtins.replaceStrings ["."] ["-"] version}";
2626- sha256 = "sha256-9VvZ8xySYFyBa5tZzf5WCShbEDpqE1/5t76jXX6t+bc=";
2626+ sha256 = "sha256-azgGM4qfS0xtUaiGfXtu8MNYdgpZRUfx+zBgAAlmt6g=";
2727 };
28282929 outputs = [ "out" "dev" ];
+2
pkgs/servers/kanidm/default.nix
···1111, sqlite
1212, pam
1313, bashInteractive
1414+, rust-jemalloc-sys
1415}:
15161617let
···5960 openssl
6061 sqlite
6162 pam
6363+ rust-jemalloc-sys
6264 ];
63656466 # The UI needs to be in place before the tests are run.
···354354 qiskit-aqua = throw "qiskit-aqua has been removed due to deprecation, with its functionality moved to different qiskit packages";
355355 rabbitpy = throw "rabbitpy has been removed, since it is unmaintained and broken"; # added 2023-07-01
356356 rdflib-jsonld = throw "rdflib-jsonld is not compatible with rdflib 6"; # added 2021-11-05
357357+ recaptcha_client = throw "recaptcha_client has been removed since it is no longer maintained"; # added 2023-10-20
357358 rednose = throw "rednose is no longer maintained (since February 2018)"; # added 2023-08-06
358359 retworkx = rustworkx; # added 2023-05-14
359360 repeated_test = repeated-test; # added 2022-11-15