summaryrefslogtreecommitdiffstats
path: root/lass/2configs/radio.nix
diff options
context:
space:
mode:
Diffstat (limited to 'lass/2configs/radio.nix')
-rw-r--r--lass/2configs/radio.nix60
1 files changed, 36 insertions, 24 deletions
diff --git a/lass/2configs/radio.nix b/lass/2configs/radio.nix
index 501251d13..15d07dada 100644
--- a/lass/2configs/radio.nix
+++ b/lass/2configs/radio.nix
@@ -1,6 +1,5 @@
{ config, pkgs, ... }:
-
-with import <stockholm/lib>;
+with pkgs.stockholm.lib;
let
name = "radio";
@@ -84,7 +83,7 @@ let
'';
set_irc_topic = pkgs.writeDash "set_irc_topic" ''
- ${pkgs.curl}/bin/curl -fsSv --unix-socket /home/radio/reaktor.sock http://z/ \
+ ${pkgs.curl}/bin/curl -fsS --unix-socket /home/radio/reaktor.sock http://z/ \
-H content-type:application/json \
-d "$(${pkgs.jq}/bin/jq -n \
--arg text "$1" '{
@@ -109,12 +108,12 @@ in {
users.users = {
"${name}" = rec {
inherit name;
+ createHome = mkForce false;
group = name;
uid = genid_uint31 name;
description = "radio manager";
home = "/home/${name}";
useDefaultShell = true;
- createHome = true;
openssh.authorizedKeys.keys = with config.krebs.users; [
lass.pubkey
lass-mors.pubkey
@@ -148,27 +147,37 @@ in {
audio_output {
type "httpd"
- name "lassulus radio mp3"
- encoder "lame" # optional
- port "8002"
- quality "5.0" # do not define if bitrate is defined
- # bitrate "128" # do not define if quality is defined
+ name "raw radio"
+ encoder "wave"
+ port "7900"
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.
}
+ '';
+ };
+ services.liquidsoap.streams.radio-news = pkgs.writeText "radio-news.liq" ''
+ source = mksafe(input.http("http://localhost:7900/raw.wave"))
- audio_output {
- type "httpd"
- name "lassulus radio"
- encoder "vorbis" # optional
- port "8000"
- 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.
- }
+ output.icecast(mount = '/music.ogg', password = 'hackme', %vorbis(quality = 1), source)
+ output.icecast(mount = '/music.mp3', password = 'hackme', %mp3.vbr(), source)
+ output.icecast(mount = '/music.opus', password = 'hackme', %opus(), source)
+
+ extra_input = audio_to_stereo(input.harbor("live", port=1338))
+
+ o = smooth_add(normal = source, special = extra_input)
+ output.icecast(mount = '/radio.ogg', password = 'hackme', %vorbis(quality = 1), o)
+ output.icecast(mount = '/radio.mp3', password = 'hackme', %mp3.vbr(), o)
+ output.icecast(mount = '/radio.opus', password = 'hackme', %opus(), o)
+ '';
+ services.icecast = {
+ enable = true;
+ hostname = "radio.lassul.us";
+ admin.password = "hackme";
+ extraConf = ''
+ <authentication>
+ <source-password>hackme</source-password>
+ </authentication>
'';
};
@@ -176,7 +185,6 @@ in {
tables = {
filter.INPUT.rules = [
{ predicate = "-p tcp --dport 8000"; target = "ACCEPT"; }
- { predicate = "-p tcp --dport 8002"; target = "ACCEPT"; }
{ predicate = "-i retiolum -p tcp --dport 8001"; target = "ACCEPT"; }
];
};
@@ -219,13 +227,16 @@ in {
systemd.services.radio-recent = let
recentlyPlayed = pkgs.writeDash "recentlyPlayed" ''
+ set -xeu
LIMIT=1000 #how many tracks to keep in the history
- HISTORY_FILE=/tmp/played
+ HISTORY_FILE=/var/lib/radio/recent
while :; do
${pkgs.mpc_cli}/bin/mpc idle player > /dev/null
${pkgs.mpc_cli}/bin/mpc current -f %file%
done | while read track; do
- listeners=$(${pkgs.iproute}/bin/ss -Hno state established 'sport = :8000' | grep '^tcp' | wc -l)
+
+ listeners=$(${pkgs.curl}/bin/curl lassul.us:8000/status-json.xsl |
+ ${pkgs.jq}/bin/jq '[.icestats.source[].listeners] | add')
echo "$(date -Is)" "$track" | tee -a "$HISTORY_FILE"
echo "$(tail -$LIMIT "$HISTORY_FILE")" > "$HISTORY_FILE"
${set_irc_topic} "playing: $track listeners: $listeners"
@@ -345,7 +356,8 @@ in {
proxy_pass http://localhost:8000;
'';
locations."= /recent".extraConfig = ''
- alias /tmp/played;
+ default_type "text/plain";
+ alias /var/lib/radio/recent;
'';
locations."= /current".extraConfig = ''
proxy_pass http://localhost:8001;