nixos/printing: add services.printing.stateless option

This will remove all state directories related to CUPS on startup, which
is particularly useful for guaranteeing that printer discovery works
more reliably on some networks, since CUPS will no longer be able to
store state that effects the next run of the service, such as old
printer names and mDNS information.

Co-authored-by: Sandro <sandro.jaeckel@gmail.com>
This commit is contained in:
matthewcroughan 2022-10-17 22:59:24 +01:00
parent 3bcc8e1ac7
commit a99ab1fbc1
2 changed files with 13 additions and 2 deletions

View File

@ -134,6 +134,15 @@ in
''; '';
}; };
stateless = mkOption {
type = types.bool;
default = false;
description = lib.mdDoc ''
If set, all state directories relating to CUPS will be removed on
startup of the service.
'';
};
startWhenNeeded = mkOption { startWhenNeeded = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;
@ -343,8 +352,9 @@ in
path = [ cups.out ]; path = [ cups.out ];
preStart = preStart = lib.optionalString cfg.stateless ''
'' rm -rf /var/cache/cups /var/lib/cups /var/spool/cups
'' + ''
mkdir -m 0700 -p /var/cache/cups mkdir -m 0700 -p /var/cache/cups
mkdir -m 0700 -p /var/spool/cups mkdir -m 0700 -p /var/spool/cups
mkdir -m 0755 -p ${cfg.tempDir} mkdir -m 0755 -p ${cfg.tempDir}

View File

@ -4,6 +4,7 @@ import ./make-test-python.nix ({pkgs, ... }:
let let
printingServer = startWhenNeeded: { printingServer = startWhenNeeded: {
services.printing.enable = true; services.printing.enable = true;
services.printing.stateless = true;
services.printing.startWhenNeeded = startWhenNeeded; services.printing.startWhenNeeded = startWhenNeeded;
services.printing.listenAddresses = [ "*:631" ]; services.printing.listenAddresses = [ "*:631" ];
services.printing.defaultShared = true; services.printing.defaultShared = true;