1
0
nixfiles/hosts/storage-2/mixcloud.nix

90 lines
2.5 KiB
Nix
Raw Normal View History

{ config, lib, pkgs, ... }:
2022-01-02 21:55:09 +01:00
with lib;
let
mixcloudSources = {
avocadoom = "https://www.mixcloud.com/avocadoom/";
b4m = "https://www.mixcloud.com/b4m/";
barbnerdy = "https://soundcloud.com/barbnerdy";
beh2342 = "https://soundcloud.com/beh2342";
couchsofa = "https://www.mixcloud.com/couchsofa/";
#das-kraftfuttermischwerk = "https://soundcloud.com/das-kraftfuttermischwerk";
dj-spock = "https://www.mixcloud.com/dj_spock/";
LoungeControl = "https://www.mixcloud.com/LoungeControl/";
sh1bumi = "https://soundcloud.com/sh1bumi";
shroombab = "https://www.mixcloud.com/shroombab/";
tasmo = "https://www.mixcloud.com/tasmo/";
vidister = "https://mixcloud.com/vidister/";
};
generateYoutubedlMixcloudUnits = source: url: (
nameValuePair "youtube-dl-mixcloud-${source}" {
serviceConfig = {
User = "data-mixcloud";
Group = "data-mixcloud";
Restart="on-failure";
};
2024-06-03 14:24:23 +02:00
path = [ pkgs.yt-dlp ];
script = ''
mkdir -p /data/mixcloud/${source}/
cd /data/mixcloud/${source}/
2024-06-03 14:24:23 +02:00
yt-dlp --ignore-errors --playlist-random --download-archive .already-downloaded.txt --newline -x --audio-format mp3 ${url}
'';
startAt = "*-*-* 05:05:00";
}
);
generateYoutubedlMixcloudTimers = source: url: (
nameValuePair "youtube-dl-mixcloud-${source}" {
timerConfig = {
RandomizedDelaySec = 10800;
};
}
);
in {
sops.secrets.mixcloud-htpasswd = {
owner = "nginx";
group = "nginx";
};
2022-01-02 21:55:09 +01:00
services.nginx.virtualHosts = {
"mixcloud.clerie.de" = {
enableACME = true;
forceSSL = true;
locations."/" = {
alias = "/data/mixcloud/";
basicAuthFile = config.sops.secrets.mixcloud-htpasswd.path;
2022-01-02 21:55:09 +01:00
extraConfig = ''
autoindex on;
2022-05-26 01:04:25 +02:00
autoindex_exact_size off;
2022-01-02 21:55:09 +01:00
'';
};
locations."/media/" = {
alias = "/data/media/";
basicAuthFile = config.sops.secrets.mixcloud-htpasswd.path;
extraConfig = ''
autoindex on;
autoindex_exact_size off;
'';
};
2022-01-02 21:55:09 +01:00
};
};
users.users.data-mixcloud = {
group = "data-mixcloud";
home = "/data/mixcloud";
useDefaultShell = true;
isSystemUser = true;
};
users.groups.data-mixcloud = {};
systemd.tmpfiles.rules = [
"d /data/mixcloud - data-mixcloud data-mixcloud - -"
];
systemd.services = (mapAttrs' generateYoutubedlMixcloudUnits mixcloudSources);
systemd.timers = (mapAttrs' generateYoutubedlMixcloudTimers mixcloudSources);
2022-01-02 21:55:09 +01:00
}