ma office-radio: init
This commit is contained in:
parent
4406723edc
commit
ae72700c34
6
2configs/bureautomation/office-radio/default.nix
Normal file
6
2configs/bureautomation/office-radio/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
imports = [
|
||||
./mpd.nix
|
||||
./webserver.nix
|
||||
];
|
||||
}
|
58
2configs/bureautomation/office-radio/mpd.nix
Normal file
58
2configs/bureautomation/office-radio/mpd.nix
Normal 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;
|
||||
}
|
6
2configs/bureautomation/office-radio/mpdconfig.nix
Normal file
6
2configs/bureautomation/office-radio/mpdconfig.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"cybertisch1" = 0;
|
||||
"cybertisch2" = 1;
|
||||
"cyberklo" = 2;
|
||||
"baellebad" = 3;
|
||||
}
|
40
2configs/bureautomation/office-radio/webserver.nix
Normal file
40
2configs/bureautomation/office-radio/webserver.nix
Normal 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";
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue