stockholm/makefu/2configs/bureautomation/office-radio/mpd.nix
2021-01-25 08:32:21 +01:00

59 lines
1.9 KiB
Nix

{ config, lib, pkgs, ... }:
let
mpds = import ./mpdconfig.nix;
systemd_mpd = name: value: let
path = "/var/lib/mpd-${name}";
num = lib.strings.fixedWidthNumber 2 value;
mpdconf = pkgs.writeText "mpd-config-${name}" ''
music_directory "${path}/music"
playlist_directory "${path}/playlists"
db_file "${path}/tag_cache"
state_file "${path}/state"
sticker_file "${path}/sticker.sql"
bind_to_address "127.0.0.1"
port "66${num}"
log_level "default"
auto_update "yes"
audio_output {
type "httpd"
name "Office Radio ${num} - ${name}"
encoder "vorbis" # optional
port "280${num}"
quality "5.0" # do not define if bitrate is defined
# bitrate "128" # do not define if quality is defined
format "44100:16:2"
always_on "yes" # prevent MPD from disconnecting all listeners when playback is stopped.
tags "yes" # httpd supports sending tags to listening streams.
}
'';
in {
after = [ "network.target" ];
description = "Office Radio MPD ${toString value} - ${name}";
wantedBy = ["multi-user.target"];
serviceConfig = {
#User = "mpd";
DynamicUser = true;
ExecStart = "${pkgs.mpd}/bin/mpd --no-daemon ${mpdconf}";
LimitRTPRIO = 50;
LimitRTTIME = "infinity";
ProtectSystem = true;
NoNewPrivileges = true;
ProtectKernelTunables = true;
ProtectControlGroups = true;
ProtectKernelModules = true;
RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX AF_NETLINK";
RestrictNamespaces = true;
Restart = "always";
StateDirectory = [ "mpd-${name}" ];
};
};
in
{
systemd.services = lib.attrsets.mapAttrs' (name: value:
lib.attrsets.nameValuePair
("office-radio-" +name) (systemd_mpd name value))
mpds;
}