1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 uid = config.ids.uids.squeezelite;
8 cfg = config.services.squeezelite;
9
10in {
11
12 ###### interface
13
14 options = {
15
16 services.squeezelite= {
17
18 enable = mkEnableOption "Squeezelite, a software Squeezebox emulator";
19
20 dataDir = mkOption {
21 default = "/var/lib/squeezelite";
22 type = types.str;
23 description = ''
24 The directory where Squeezelite stores its name file.
25 '';
26 };
27
28 extraArguments = mkOption {
29 default = "";
30 type = types.str;
31 description = ''
32 Additional command line arguments to pass to Squeezelite.
33 '';
34 };
35
36 };
37
38 };
39
40
41 ###### implementation
42
43 config = mkIf cfg.enable {
44
45 systemd.services.squeezelite= {
46 wantedBy = [ "multi-user.target" ];
47 after = [ "network.target" "sound.target" ];
48 description = "Software Squeezebox emulator";
49 preStart = "mkdir -p ${cfg.dataDir} && chown -R squeezelite ${cfg.dataDir}";
50 serviceConfig = {
51 ExecStart = "${pkgs.squeezelite}/bin/squeezelite -N ${cfg.dataDir}/player-name ${cfg.extraArguments}";
52 User = "squeezelite";
53 PermissionsStartOnly = true;
54 };
55 };
56
57 users.extraUsers.squeezelite= {
58 inherit uid;
59 group = "nogroup";
60 extraGroups = [ "audio" ];
61 description = "Squeezelite user";
62 home = "${cfg.dataDir}";
63 };
64
65 };
66
67}