summaryrefslogtreecommitdiffstats
path: root/lass/2configs/radio.nix
diff options
context:
space:
mode:
authorJeschli <jeschli@gmail.com>2020-04-22 12:35:00 +0200
committerJeschli <jeschli@gmail.com>2020-04-22 12:35:00 +0200
commit3c0496ec1a774c539cf10311bff821ff07ddbf01 (patch)
tree9fbafe92c3f26571bb562255d86ffcc2975216ea /lass/2configs/radio.nix
parent119a7cfe5a87323ec7231c263abc444229564a1c (diff)
parentcabaf519b5970cbe5c1e57832d3bd12da4f47371 (diff)
Merge branch 'master' of https://cgit.lassul.us/stockholm
Diffstat (limited to 'lass/2configs/radio.nix')
-rw-r--r--lass/2configs/radio.nix106
1 files changed, 98 insertions, 8 deletions
diff --git a/lass/2configs/radio.nix b/lass/2configs/radio.nix
index 74b15a0ab..6245691fe 100644
--- a/lass/2configs/radio.nix
+++ b/lass/2configs/radio.nix
@@ -12,10 +12,10 @@ let
music_dir = "/home/radio/music";
add_random = pkgs.writeDashBin "add_random" ''
- ${pkgs.mpc_cli}/bin/mpc add "$(${pkgs.mpc_cli}/bin/mpc ls the_playlist/music | grep '\.ogg$' | shuf -n1)"
+ ${pkgs.mpc_cli}/bin/mpc add "$(${pkgs.findutils}/bin/find "${music_dir}/the_playlist" | grep -v '/other/' | grep '\.ogg$' | shuf -n1 | sed 's,${music_dir}/,,')"
'';
- skip_track = pkgs.writeDashBin "skip_track" ''
+ skip_track = pkgs.writeBashBin "skip_track" ''
set -eu
${add_random}/bin/add_random
@@ -23,21 +23,62 @@ let
current_track=$(${pkgs.mpc_cli}/bin/mpc current -f %file%)
track_infos=$(${print_current}/bin/print_current)
skip_count=$(${pkgs.attr}/bin/getfattr -n user.skip_count --only-values "$music_dir"/"$current_track" || echo 0)
- if [ "$skip_count" -gt 2 ]; then
- mv "$music_dir"/"$current_track" "$music_dir"/.graveyard/
- echo killing: "$track_infos"
- else
+ if [[ "$current_track" =~ ^the_playlist/music/.* ]] && [ "$skip_count" -le 2 ]; then
skip_count=$((skip_count+1))
${pkgs.attr}/bin/setfattr -n user.skip_count -v "$skip_count" "$music_dir"/"$current_track"
echo skipping: "$track_infos" skip_count: "$skip_count"
+ else
+ mkdir -p "$music_dir"/.graveyard/
+ mv "$music_dir"/"$current_track" "$music_dir"/.graveyard/
+ echo killing: "$track_infos"
fi
${pkgs.mpc_cli}/bin/mpc -q next
'';
+ good_track = pkgs.writeBashBin "good_track" ''
+ set -eu
+
+ music_dir=${escapeShellArg music_dir}
+ current_track=$(${pkgs.mpc_cli}/bin/mpc current -f %file%)
+ track_infos=$(${print_current}/bin/print_current)
+ if [[ "$current_track" =~ ^the_playlist/music/.* ]]; then
+ ${pkgs.attr}/bin/setfattr -n user.skip_count -v 0 "$music_dir"/"$current_track"
+ else
+ mv "$music_dir"/"$current_track" "$music_dir"/the_playlist/music/ || :
+ fi
+ echo good: "$track_infos"
+ '';
+
+ track_youtube_link = pkgs.writeDash "track_youtube_link" ''
+ ${pkgs.mpc_cli}/bin/mpc current -f %file% \
+ | ${pkgs.gnused}/bin/sed 's@.*\(.\{11\}\)\.ogg@https://www.youtube.com/watch?v=\1@'
+ '';
+
print_current = pkgs.writeDashBin "print_current" ''
echo "$(${pkgs.mpc_cli}/bin/mpc current -f %file%) \
- $(${pkgs.mpc_cli}/bin/mpc current -f %file% \
- | ${pkgs.gnused}/bin/sed 's@.*\(.\{11\}\)\.ogg@http://www.youtube.com/watch?v=\1@')"
+ $(${track_youtube_link})"
+ '';
+
+ print_current_json = pkgs.writeDashBin "print_current_json" ''
+ ${pkgs.jq}/bin/jq -n -c \
+ --arg name "$(${pkgs.mpc_cli}/bin/mpc current)" \
+ --arg filename "$(${pkgs.mpc_cli}/bin/mpc current -f %file%)" \
+ --arg youtube "$(${track_youtube_link})" '{
+ name: $name,
+ filename: $filename,
+ youtube: $youtube
+ }'
+ '';
+
+ write_to_irc = pkgs.writeDash "write_to_irc" ''
+ ${pkgs.curl}/bin/curl -fsSv --unix-socket /home/radio/reaktor.sock http://z/ \
+ -H content-type:application/json \
+ -d "$(${pkgs.jq}/bin/jq -n \
+ --arg text "$1" '{
+ command:"PRIVMSG",
+ params:["#the_playlist",$text]
+ }'
+ )"
'';
in {
@@ -63,8 +104,10 @@ in {
krebs.per-user.${name}.packages = with pkgs; [
add_random
+ good_track
skip_track
print_current
+ print_current_json
ncmpcpp
mpc_cli
];
@@ -130,6 +173,7 @@ in {
tables = {
filter.INPUT.rules = [
{ predicate = "-p tcp --dport 8000"; target = "ACCEPT"; }
+ { predicate = "-i retiolum -p tcp --dport 8001"; target = "ACCEPT"; }
];
};
};
@@ -179,6 +223,7 @@ in {
done | while read track; do
echo "$(date -Is)" "$track" | tee -a "$HISTORY_FILE"
echo "$(tail -$LIMIT "$HISTORY_FILE")" > "$HISTORY_FILE"
+ ${write_to_irc} "playing: $track"
done
'';
in {
@@ -190,6 +235,7 @@ in {
serviceConfig = {
ExecStart = recentlyPlayed;
+ User = "radio";
};
};
@@ -202,6 +248,7 @@ in {
useTLS = true;
nick = "the_playlist";
username = "radio";
+ API.listen = "unix:/home/radio/reaktor.sock";
plugins = [
{
plugin = "register";
@@ -224,6 +271,13 @@ in {
arguments = [2];
commands = {
skip.filename = "${skip_track}/bin/skip_track";
+ next.filename = "${skip_track}/bin/skip_track";
+ bad.filename = "${skip_track}/bin/skip_track";
+
+ good.filename = "${good_track}/bin/good_track";
+ nice.filename = "${good_track}/bin/good_track";
+ like.filename = "${good_track}/bin/good_track";
+
current.filename = "${print_current}/bin/print_current";
suggest.filename = pkgs.writeDash "suggest" ''
echo "$@" >> playlist_suggest
@@ -236,6 +290,42 @@ in {
];
};
+ krebs.htgen.radio = {
+ port = 8001;
+ user = {
+ name = "radio";
+ };
+ script = ''
+ case "$Method $Request_URI" in
+ "GET /current")
+ printf 'HTTP/1.1 200 OK\r\n'
+ printf 'Connection: close\r\n'
+ printf '\r\n'
+ ${print_current_json}/bin/print_current_json
+ exit
+ ;;
+ "POST /skip")
+ printf 'HTTP/1.1 200 OK\r\n'
+ printf 'Connection: close\r\n'
+ printf '\r\n'
+ msg=$(${skip_track}/bin/skip_track)
+ ${write_to_irc} "$msg"
+ echo "$msg"
+ exit
+ ;;
+ "POST /good")
+ printf 'HTTP/1.1 200 OK\r\n'
+ printf 'Connection: close\r\n'
+ printf '\r\n'
+ msg=$(${good_track}/bin/good_track)
+ ${write_to_irc} "$msg"
+ echo "$msg"
+ exit
+ ;;
+ esac
+ '';
+ };
+
services.nginx = {
enable = true;
virtualHosts."radio.lassul.us" = {