at 23.11-pre 1.7 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.slimserver; 8 9in { 10 options = { 11 12 services.slimserver = { 13 14 enable = mkOption { 15 type = types.bool; 16 default = false; 17 description = lib.mdDoc '' 18 Whether to enable slimserver. 19 ''; 20 }; 21 22 package = mkOption { 23 type = types.package; 24 default = pkgs.slimserver; 25 defaultText = literalExpression "pkgs.slimserver"; 26 description = lib.mdDoc "Slimserver package to use."; 27 }; 28 29 dataDir = mkOption { 30 type = types.path; 31 default = "/var/lib/slimserver"; 32 description = lib.mdDoc '' 33 The directory where slimserver stores its state, tag cache, 34 playlists etc. 35 ''; 36 }; 37 }; 38 }; 39 40 41 ###### implementation 42 43 config = mkIf cfg.enable { 44 45 systemd.tmpfiles.rules = [ 46 "d '${cfg.dataDir}' - slimserver slimserver - -" 47 ]; 48 49 systemd.services.slimserver = { 50 after = [ "network.target" ]; 51 description = "Slim Server for Logitech Squeezebox Players"; 52 wantedBy = [ "multi-user.target" ]; 53 54 serviceConfig = { 55 User = "slimserver"; 56 # Issue 40589: Disable broken image/video support (audio still works!) 57 ExecStart = "${cfg.package}/slimserver.pl --logdir ${cfg.dataDir}/logs --prefsdir ${cfg.dataDir}/prefs --cachedir ${cfg.dataDir}/cache --noimage --novideo"; 58 }; 59 }; 60 61 users = { 62 users.slimserver = { 63 description = "Slimserver daemon user"; 64 home = cfg.dataDir; 65 group = "slimserver"; 66 isSystemUser = true; 67 }; 68 groups.slimserver = {}; 69 }; 70 }; 71 72} 73