99 lines
2.3 KiB
Nix
99 lines
2.3 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
host_secrets,
|
|
...
|
|
}: let
|
|
ports = import ../data/ports.nix {};
|
|
secrets = host_secrets;
|
|
in {
|
|
environment.systemPackages = with pkgs; [mpc_cli];
|
|
|
|
systemd.tmpfiles.rules = [
|
|
"d /Music - root root"
|
|
];
|
|
|
|
systemd.services.music-sync = {
|
|
wantedBy = ["multi-user.target"];
|
|
after = ["network.target"];
|
|
partOf = ["mpd.service"];
|
|
|
|
path = with pkgs; [bash rclone mount umount];
|
|
script = let
|
|
rclone_config = pkgs.writeText "rclone.conf" ''
|
|
[Music]
|
|
type = webdav
|
|
url = https://storage-webdav.owo.monster/music_ro/
|
|
vendor = nextcloud
|
|
'';
|
|
in ''
|
|
set -e
|
|
rclone --config ${rclone_config} sync Music: /Music
|
|
'';
|
|
};
|
|
|
|
systemd.timers.music-sync = {
|
|
wantedBy = ["timers.target"];
|
|
partOf = ["music-sync.service"];
|
|
timerConfig.OnCalendar = "hourly";
|
|
};
|
|
|
|
systemd.services.mpd = {
|
|
after = ["music-copy.service"];
|
|
};
|
|
|
|
services.mpd = {
|
|
enable = true;
|
|
network.listenAddress = "0.0.0.0";
|
|
musicDirectory = "/Music";
|
|
credentials = [
|
|
{
|
|
passwordFile = "${secrets.mpd_control_password.path}";
|
|
permissions = ["read" "add" "control" "admin"];
|
|
}
|
|
];
|
|
extraConfig =
|
|
''
|
|
host_permissions "127.0.0.1 read,add,control,admin"
|
|
samplerate_converter "0"
|
|
metadata_to_use "title,artist"
|
|
auto_update "yes"
|
|
audio_buffer_size "4096"
|
|
replaygain "track"
|
|
audio_output_format "44100:16:2"
|
|
''
|
|
+ lib.concatStringsSep "\n" (lib.forEach ["low" "medium" "high"] (quality: let
|
|
bitrates = {
|
|
"low" = "64";
|
|
"medium" = "96";
|
|
"high" = "128";
|
|
};
|
|
bitrate = bitrates.${quality};
|
|
in ''
|
|
audio_output {
|
|
type "httpd"
|
|
name "HTTP Opus ${bitrate}k"
|
|
encoder "opus"
|
|
port "${toString ports."mpd-opus-${quality}"}"
|
|
bitrate "${bitrate}000"
|
|
format "44100:16:2"
|
|
always_on "yes"
|
|
tags "yes"
|
|
signal "music"
|
|
}
|
|
''))
|
|
+ ''
|
|
audio_output {
|
|
type "httpd"
|
|
name "HTTP FLAC"
|
|
encoder "flac"
|
|
port "${toString ports.mpd-flac}"
|
|
format "44100:16:2"
|
|
always_on "yes"
|
|
tags "yes"
|
|
}
|
|
'';
|
|
};
|
|
}
|