at 17.09-beta 1.4 kB view raw
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}