ma office-radio: init

This commit is contained in:
makefu 2021-01-25 08:32:21 +01:00
parent 4406723edc
commit ae72700c34
4 changed files with 110 additions and 0 deletions

View file

@ -0,0 +1,6 @@
{
imports = [
./mpd.nix
./webserver.nix
];
}

View file

@ -0,0 +1,58 @@
{ 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;
}

View file

@ -0,0 +1,6 @@
{
"cybertisch1" = 0;
"cybertisch2" = 1;
"cyberklo" = 2;
"baellebad" = 3;
}

View file

@ -0,0 +1,40 @@
{ pkgs, ... }:
let
mpds = import ./mpdconfig.nix;
pkg = pkgs.office-radio;
in {
systemd.services.office-radio-appsrv = {
after = [ "network.target" ];
description = "Office Radio Appserver";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${pkg}/bin/office-radio";
DynamicUser = true;
ProtectSystem = true;
NoNewPrivileges = true;
ProtectKernelTunables = true;
ProtectControlGroups = true;
ProtectKernelModules = true;
RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX AF_NETLINK";
RestrictNamespaces = true;
Restart = "always";
};
};
systemd.services.office-radio-stopper = {
after = [ "network.target" ];
description = "Office Radio Script to stop idle streams";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${pkg}/bin/stop-idle-streams";
DynamicUser = true;
ProtectSystem = true;
NoNewPrivileges = true;
ProtectKernelTunables = true;
ProtectControlGroups = true;
ProtectKernelModules = true;
RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX AF_NETLINK";
RestrictNamespaces = true;
Restart = "always";
};
};
}