Skip to content

Commit 4e4f2ea

Browse files
committed
add ytdl-sub
1 parent 7d784a0 commit 4e4f2ea

File tree

2 files changed

+152
-0
lines changed

2 files changed

+152
-0
lines changed

hosts/prod/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
./nginx.nix
1212
./restic.nix
1313
./wireguard.nix
14+
./youtube-downloads.nix
1415
];
1516

1617
filesystems.defaultLayout = true;

hosts/prod/youtube-downloads.nix

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
{ nixpkgs-unstable, ... }:
2+
3+
{
4+
imports = [ "${nixpkgs-unstable}/nixos/modules/services/misc/ytdl-sub.nix" ];
5+
6+
services.sshfs.mounts."/mnt/youtube" = {
7+
host = "u381435.your-storagebox.de";
8+
port = 23;
9+
user = "u381435";
10+
path = "youtube";
11+
readOnly = false;
12+
allowOther = true;
13+
};
14+
15+
services.ytdl-sub.instances.default = {
16+
enable = true;
17+
schedule = "3/8:17";
18+
19+
config = {
20+
presets."YouTube Playlist" =
21+
let
22+
base_name = "{subscription_name}/{playlist_index_padded}_{uid}_{%sanitize(title)}";
23+
in
24+
{
25+
preset = [
26+
"Best Video Quality"
27+
"Chunk Downloads"
28+
];
29+
download = "{subscription_value}";
30+
output_options = {
31+
output_directory = "/mnt/youtube";
32+
file_name = "${base_name}.{ext}";
33+
maintain_download_archive = true;
34+
};
35+
chapters = {
36+
embed_chapters = true;
37+
sponsorblock_categories = "all";
38+
remove_sponsorblock_categories = [
39+
"sponsor"
40+
"selfpromo"
41+
"interaction"
42+
];
43+
};
44+
embed_thumbnail = true;
45+
subtitles = {
46+
subtitles_name = "${base_name}.{lang}.{subtitles_ext}";
47+
subtitles_type = "vtt";
48+
embed_subtitles = true;
49+
allow_auto_generated_subtitles = true;
50+
languages = [
51+
"en"
52+
"de"
53+
];
54+
};
55+
ytdl_options = {
56+
cookiefile = "/var/lib/ytdl-sub/default/.cookies";
57+
};
58+
overrides = {
59+
chunk_max_downloads = 200;
60+
};
61+
};
62+
};
63+
64+
subscriptions."YouTube Playlist" = {
65+
algorithmen_und_datenstrukturen = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7q2hZHyLJS6IeHQIlyEgKqf";
66+
angular_5 = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7pY65LXhI1_bIcOByRhP9Xb";
67+
anonymitaet_im_internet = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7on8Ckrk2wo4ySeenf3rgf0";
68+
assembler = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rhjy2t320NvKKGwP6Rxnpg";
69+
bash = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7r-Tw-cNntRgvwA7nXPAjP4";
70+
binaere_mathematik = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rsjQsc8hFAdR4BlO_MQib1";
71+
binary_exploitation_secure_coding = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qff-bnM05OqSI0fx4GknZ6";
72+
bitcoin_blockchain_kryptowaehrungen = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oiW2UVh1Go8JgllRbZRcPK";
73+
clean_code = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7ryyZikMDPxxyYxEKtKn0ji";
74+
cloud = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oxg9u5X2a-9X_jpN8iPOQy";
75+
cpp = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oG-kkn36ZnDpRq6iahUXZS";
76+
c_sharp = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rlNexPh8wjI2DyABX8It7U";
77+
css3_fuer_anfaenger = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qQz698kYRkkBXJDeXJY_I7";
78+
c = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7q4shI4L__SRpetWff9BjLZ";
79+
dart_flutter = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qokXX4II7FCZthJcrirT4o";
80+
data_mining = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qIOuGJrd-lu-ZZc9t4EdwM";
81+
datenvisualisierung = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7pb4apqIMKvCz37t_dLznMm";
82+
devops_grundlagen = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7pSbRnMtEG5XEdYVwJE5se9";
83+
docker = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oea6IDCLzpKe5XfLmWCwgr";
84+
firewalls = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oAAFVjNrAz1uRqIcanXreg";
85+
ghidra_reverse_engineering = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oQc3MxjWB-rYHHo9vX905a";
86+
git_und_github = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rbmmqb1Lt_RGU4DEhelTrR";
87+
graphentheorie = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7q2hZHyLJS6IeHQIlyEgKqf";
88+
haskell = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7pFIXDN1NLw6jMExuK-wN8I";
89+
html5_fuer_anfaenger = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qIbKPeroqn3-BkUTWzYBT4";
90+
iam = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rBqyMDGlv4LZmNrq1gChjh";
91+
it_sicherheit_hacken_essentials = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oVGaVtkLlu3jYl_D8ugxeT";
92+
java_algorithmen = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7o4qcD8tepVY5k7YiHYfMu5";
93+
java_fortgeschrittene_techniken = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oirQMpjPjrmNx4vcVIGIGY";
94+
java_ray_tracing = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rvhHip_LTM-J-5wHw7dWnw";
95+
javascript_express = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7ogA_q-mOoYH3dDQIh8B3Oe";
96+
javascript_jest = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qgQ2jnCFTo_knQTbpU5W4X";
97+
javascript = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qOfMI2ZNk-LXUAiXKrwDIi";
98+
java_swing = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7o5ALam15-pQWtf22RgU6D7";
99+
java = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qI9vtiiU5bJBfbxqBailVM";
100+
jquery = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qbE13388pQpsXQkpRQ96sM";
101+
kotlin_fortgeschrittene_techniken = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rylgyThgUldHG8KE6Nbc1O";
102+
kotlin = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rylgyThgUldHG8KE6Nbc1O";
103+
kryptographie = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7pWwFv5APk240hrehtCJae-";
104+
lambda_kalkuel = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oBz3PP5sGIkLnmBbw10UUP";
105+
latex = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7phxF5hBRWNJx9-KtIHjVYv";
106+
linux_autokey = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qCtvw6fiki0ihkwv7tIWN_";
107+
linux_distributionen = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7o15uBS2J9Ryz-pM-P9xcWJ";
108+
linux_gnupg = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7pUKpzMbzggvudByxULkut-";
109+
linux = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oaopPUB0SEmzZLf3aE5msy";
110+
llms = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7r4pg1j8eFsEQp3nL0w4jJz";
111+
logik = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7r7ztDWJ66pMNRYaa_TUjKP";
112+
machine_learning = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qoIUw0MBYQ9qJffZAVdRWC";
113+
medienkompetenz = "https://www.youtube.com/playlist?list=PL6RbeNL8jYDees12cwPupr49wMArrVQEX";
114+
mengenlehre = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7q_xBcMAlQ2K18HjMpAe0Nm";
115+
netzsicherheit = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7ovwsL-PKfByCX-jGuZAopM";
116+
netzwerktechnik = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rjW6OL4aGL-L1SzBUijh8r";
117+
nodejs = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7o-5JThNbEVW6CGAhWJwnkA";
118+
php_fuer_anfaenger = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rZMP1lj32Qyp4bkarvzCGm";
119+
programmieren_lernen = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7onyAB57T0xqV2ZVSZOo79a";
120+
prolog = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7q7ODiEAnq2EnsP-8LMGtfw";
121+
python_data_science = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7o46LI06XkxAqcg4Ucm7pwn";
122+
python_flask = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7otfP2zTa8AIiNIWVg0BRqs";
123+
python_lets_code = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7p09TLbRQmqzbH81DHjBO8E";
124+
python_pillow = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7p6tJ5S5Yvbw3reoZcHdyfR";
125+
python_pyqt = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7ruNQIfS8NRpjzZIRq0A8QP";
126+
python_pytorch = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rx55Mai21reZtd_8m-qe27";
127+
python_selenium = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7ruEf-FwVD3Z5owHgdXNKlb";
128+
python_tensorflow = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oj8ijyHSTOoW9bHLlXQ7hp";
129+
python = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs";
130+
react_js = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oi_Q4whC28Yp12l1I-hauk";
131+
sass_scss = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oopYYGy5hX-Y6b07_3DPp5";
132+
serveradministration = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7orIal3z8bq8HlHxnN-CtXr";
133+
signalverarbeitung = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qvLZlbEiRwHoP0mbmAHNId";
134+
softskills = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rC5g_bZNxZF6lOjSfNBKkE";
135+
softwareengineering = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qNMn6zimfu4JPUklG-4Uu4";
136+
spark_pyspark = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7pkk8-Yxa7mjAqi_E9DE_Z9";
137+
sql_und_datenbanken = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7qYPusTRflv3tkzhYoT-KiB";
138+
threejs = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rrmmZEVGA4GfLLNLlGipWo";
139+
typescript = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7pwHqtQSBXGBUNkyGGOJQXf";
140+
uml = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oC7U6tm0BOnGg1R9ont0Vo";
141+
unreal_engine = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7olLCliQ05e6hvEOl6sbBgv";
142+
windows10 = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7rRSgXNzZMV3XlrfklBugNW";
143+
wireshark = "https://www.youtube.com/playlist?list=PLNmsVeXQZj7oIlWv3K9xACZi3fHfYLKtj";
144+
145+
# TODO
146+
# lustige_web_ui_effekte = "";
147+
};
148+
};
149+
150+
systemd.services.ytdl-sub-default.serviceConfig.ReadWritePaths = [ "/mnt/youtube" ];
151+
}

0 commit comments

Comments
 (0)