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