This repository has been archived on 2026-09-17. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
nixos-config/secrets/icecastPw.age
pijukka 32c7ada1e7 Add sound.0ff.space: Icecast + Liquidsoap internet radio on pinix
Nix-native (no Docker, unlike alfo's radiopi reference), streaming a
shuffled folder of MP3s from /var/lib/radio/music. Bypasses the
upstream services.icecast module since it bakes the admin/source
password into a world-readable store path; both units instead render
their config from a template at service start, reading the password
live from the agenix runtime path.

Runs as a dedicated icecast-radio system user rather than root --
icecast segfaults instead of exiting cleanly when it detects EUID 0
without a <changeowner> configured. Liquidsoap's playlist() needed
mksafe() to satisfy output.icecast()'s infallible-source requirement.
Icecast binds 0.0.0.0 (not just the tailnet IP) since Liquidsoap's
source connection is a loopback connection on the same host.

Traefik route added on blunix (sound.0ff.space -> pinix:8032, same
pattern as the other pinix-backed public services). DNS record still
needs to be created manually (no broadly-scoped Cloudflare credential
in this repo).
2026-08-04 08:42:36 +02:00

18 lines
1 KiB
Text

-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGJyRmx0dyByOTNP
UDVhVnJaeTdzOEJPU1pHU0xWamhSSThjOURpWm5kU290UUlwNlc4ClVnWmgzVmJ0
aVNmaVpIQmJxU3Z1eDZNTTFEemRCZUNib3hjMEV0QzRsbDgKLT4gc3NoLWVkMjU1
MTkgWkJTdjJnIFRPRmRaRGZqaUp1UXRuZFRmSHQ5eHRjVnJlR1prNk1NUkxVRmg2
bmpTUzAKRUFpcmxlUTN3SVo3Vm5OWCtGSXovS241aHFjb3pYYW9mY1BoM1dQcUhR
UQotPiBzc2gtZWQyNTUxOSBTQ0pkY3cgZm9oL2ZncWQ5SENJKzk5ckt3eE14bmlN
YUI4N2tIa0d1RXdtNk1EWTJuYwpOb1JRdThGbklLWEI2R0c3UGUyL01NaWpjRnBV
YUsyamloWjdKMXBTbE5FCi0+IHNzaC1lZDI1NTE5IEhleDZRUSA1RXU4NW0zamh6
RVprbWpmNk5tOXlZK2loaVVWeitrOTQ1UkVWeThTK1JRCmRFY1l6NkFsVUlDRlJS
T1daWFNxOHhhNVZ2byszbnVlTk5lbEp5ZUxtYmMKLT4gc3NoLWVkMjU1MTkgSkRK
cUNnIG51UUd3WW9oOHpoaUl0bndST21oZlV5eFNpN3hncmRpdzdkaURPMVM5MFkK
c0hlUEtCVzRRdUlUcW1NZ3NjMTBLRS9SQ3lFLzJ1N1BKZEk0UXV6eDFZawotPiBh
JUB2LWdyZWFzZSBRUGgrKyBKJ1pECkdZSzdUSG1JcEdkTUdKWnRsYngzcjJtWgot
LS0gLytWVGttcnVHVTlrUmIwOWFMQjhPaDdTMDBHZVIvQm4zR0JsRkQ2KzNUTQrj
AoQfjxwE5jutiYBjQs3btgN71aiuPGJst28mi4d+KVeyfZhNw+TCM+faPeabWNaZ
QEWDRGmnJlRcbU61wx9A
-----END AGE ENCRYPTED FILE-----