summaryrefslogtreecommitdiffstats
path: root/lass/2configs
diff options
context:
space:
mode:
Diffstat (limited to 'lass/2configs')
-rw-r--r--lass/2configs/radio/default.nix (renamed from lass/2configs/radio.nix)30
-rw-r--r--lass/2configs/radio/news.nix (renamed from lass/2configs/radio-news.nix)59
2 files changed, 61 insertions, 28 deletions
diff --git a/lass/2configs/radio.nix b/lass/2configs/radio/default.nix
index 15d07dada..34115f56a 100644
--- a/lass/2configs/radio.nix
+++ b/lass/2configs/radio/default.nix
@@ -105,6 +105,10 @@ let
'';
in {
+ imports = [
+ ./news.nix
+ ];
+
users.users = {
"${name}" = rec {
inherit name;
@@ -161,14 +165,14 @@ in {
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)
+ output.icecast(mount = '/music.opus', password = 'hackme', %opus(bitrate = 64), 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)
+ output.icecast(mount = '/radio.opus', password = 'hackme', %opus(bitrate = 64), o)
'';
services.icecast = {
enable = true;
@@ -227,7 +231,7 @@ in {
systemd.services.radio-recent = let
recentlyPlayed = pkgs.writeDash "recentlyPlayed" ''
- set -xeu
+ set -xefu
LIMIT=1000 #how many tracks to keep in the history
HISTORY_FILE=/var/lib/radio/recent
while :; do
@@ -368,6 +372,16 @@ in {
locations."= /good".extraConfig = ''
proxy_pass http://localhost:8001;
'';
+ locations."= /radio.sh".extraConfig = ''
+ alias ${pkgs.writeScript "radio.sh" ''
+ #!/bin/sh
+ while sleep 1; do
+ mpv \
+ --cache-secs=0 --demuxer-readahead-secs=0 --untimed --cache-pause=no \
+ 'http://lassul.us:8000/radio.opus'
+ done
+ ''};
+ '';
locations."= /controls".extraConfig = ''
default_type "text/html";
alias ${pkgs.writeText "controls.html" ''
@@ -482,11 +496,9 @@ in {
};
services.syncthing.declarative.folders."the_playlist" = {
path = "/home/radio/music/the_playlist";
- devices = [ "mors" "phone" "prism" ];
- };
- krebs.permown."/home/radio/music/the_playlist" = {
- owner = "radio";
- group = "syncthing";
- umask = "0002";
+ devices = [ "mors" "phone" "prism" "omo" ];
};
+ krebs.acl."/home/radio/music/the_playlist"."u:syncthing:X".parents = true;
+ krebs.acl."/home/radio/music/the_playlist"."u:syncthing:rwX" = {};
+ krebs.acl."/home/radio/music/the_playlist"."u:radio:rwX" = {};
}
diff --git a/lass/2configs/radio-news.nix b/lass/2configs/radio/news.nix
index eb7d3bd9a..4f88197cb 100644
--- a/lass/2configs/radio-news.nix
+++ b/lass/2configs/radio/news.nix
@@ -1,13 +1,28 @@
{ config, lib, pkgs, ... }:
let
weather_report = pkgs.writers.writeDashBin "weather_report" ''
- set -efu
- ${pkgs.curl}/bin/curl -fsSL https://wttr.in/''${1-}?format=j1 \
- | ${pkgs.jq}/bin/jq -r '
- [.nearest_area[0] | "Weather report for \(.areaName[0].value), \(.country[0].value)."]
- + [.current_condition[0] | "Currently it is \(.weatherDesc[0].value) outside with a temperature of \(.temp_C) degrees."]
- | join("\n")
- '
+ set -efu
+ export PATH="${lib.makeBinPath [
+ pkgs.iproute2
+ pkgs.coreutils
+ pkgs.jq
+ pkgs.curl
+ pkgs.gnugrep
+ pkgs.gnused
+ ]}"
+ ss -Hno state established 'sport = :8000' |
+ grep '^tcp' | sed 's/.*\[.*\].*\[\(::ffff:\)\{0,1\}\(.*\)\].*/\2/' |
+ sed '/127.0.0.1/d;/:/d' |
+ while read -r ip; do
+ curl -sSL "https://wttr.in/@$ip?format=j1"
+ done | jq -rs 'unique_by(.nearest_area[0].areaName[0].value) |
+ map((.nearest_area[0] |
+ "Weather report for \(.areaName[0].value), \(.country[0].value).")
+ + (.current_condition[0] |
+ " Currently it is \(.weatherDesc[0].value) outside with a temperature of \(.temp_C) degrees."
+ )
+ ) | unique | .[]'
+ '
'';
send_to_radio = pkgs.writers.writeDashBin "send_to_radio" ''
${pkgs.vorbisTools}/bin/oggenc - |
@@ -26,17 +41,15 @@ let
'';
newsshow = pkgs.writers.writeDashBin "newsshow" /* sh */ ''
- echo "
+ cat << EOF
hello crabpeople!
- $(${pkgs.ddate}/bin/ddate | sed 's/YOLD/Year of Discord/')!
+ $(${pkgs.ddate}/bin/ddate +'Today is %{%A, the %e of %B%}, %Y. %N%nCelebrate %H')
It is $(date --utc +%H) o clock UTC.
todays news:
$(get_current_news)
$(gc_news)
- $(weather_report berlin)
- $(weather_report 70173)
- $(weather_report munich)
- "
+ $(weather_report)
+ EOF
'';
in
{
@@ -73,15 +86,23 @@ in
};
script = ''. ${pkgs.writers.writeDash "htgen-news" ''
set -xefu
- case "$Method $Request_URI" in
+ case "''${Method:-GET} $Request_URI" in
+ "GET /")
+ printf 'HTTP/1.1 200 OK\r\n'
+ printf 'Access-Control-Allow-Origin: *\r\n';
+ printf 'Access-Control-Allow-Methods: GET, POST, OPTIONS\r\n';
+ printf 'Connection: close\r\n'
+ printf '\r\n'
+ cat "$HOME"/news | jq -sc .
+ exit
+ ;;
"POST /")
- payload=$(head -c "$req_content_length" \
- | sed 's/+/ /g;s/%\(..\)/\\x\1/g;' \
- | xargs -0 echo -e \
- )
+ payload=$(head -c "$req_content_length")
echo "$payload" | jq 'has("from") and has("to") and has("text")' >&2
- echo "$payload" | jq -c '{ from: (.from | fromdate | todate), to: (.to | fromdate | todate), text: .text }' >> $HOME/news
+ echo "$payload" | jq -c '{ from: (.from | fromdate | todate), to: (.to | fromdate | todate), text: .text }' >> "$HOME"/news
printf 'HTTP/1.1 200 OK\r\n'
+ printf 'Access-Control-Allow-Origin: *\r\n';
+ printf 'Access-Control-Allow-Methods: GET, POST, OPTIONS\r\n';
printf 'Connection: close\r\n'
printf '\r\n'
exit