This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

1{ self, pkgs, ... }: 2let 3 4 tts = pkgs.writers.writeBashBin "tts" '' 5 set -efu 6 set -x 7 8 offset=0 9 OUTPUT=$(mktemp -d) 10 trap 'rm -rf "$OUTPUT"' EXIT 11 SPEAKER=$[ $RANDOM % 900 ] 12 while read line; do 13 echo "$line" | 14 ${pkgs.piper-tts}/bin/piper \ 15 --model ${pkgs.fetchzip { 16 url = "https://github.com/rhasspy/piper/releases/download/v0.0.2/voice-en-us-libritts-high.tar.gz"; 17 hash = "sha256-jCoK4p0O7BuF0nr6Sfj40tpivCvU5M3GHKQRg1tfIO8="; 18 stripRoot = false; 19 }}/en-us-libritts-high.onnx \ 20 -s "$SPEAKER" \ 21 -f "$OUTPUT"/"$offset".wav >/dev/null 22 23 ((offset+=1)) 24 done 25 26 ${pkgs.sox}/bin/sox "$OUTPUT"/*.wav "$OUTPUT"/all.wav 27 cat "$OUTPUT"/all.wav 28 ''; 29 30 send_to_radio = pkgs.writers.writeDashBin "send_to_radio" '' 31 ${pkgs.vorbis-tools}/bin/oggenc - | 32 ${pkgs.cyberlocker-tools}/bin/cput news.ogg 33 ${pkgs.curl}/bin/curl -fSs -X POST http://localhost:8002/newsshow 34 ''; 35 36 gc_news = pkgs.writers.writeDashBin "gc_news" '' 37 set -xefu 38 export TZ=UTC #workaround for jq parsing wrong timestamp 39 ${pkgs.coreutils}/bin/cat $HOME/news | ${pkgs.jq}/bin/jq -cs 'map(select((.to|fromdateiso8601) > now)) | .[]' > $HOME/bla-news.tmp 40 ${pkgs.coreutils}/bin/mv $HOME/bla-news.tmp $HOME/news 41 ''; 42 43 get_current_news = pkgs.writers.writeDashBin "get_current_news" '' 44 set -xefu 45 export TZ=UTC #workaround for jq parsing wrong timestamp 46 ${pkgs.coreutils}/bin/cat $HOME/news | ${pkgs.jq}/bin/jq -rs ' 47 sort_by(.priority) | 48 map(select( 49 ((.to | fromdateiso8601) > now) and 50 (.from|fromdateiso8601) < now) | 51 .text 52 ) | .[]' 53 ''; 54 55 newsshow = pkgs.writers.writeDashBin "newsshow" /* sh */ '' 56 cat << EOF 57 hello crabpeople! 58 $(${pkgs.ddate}/bin/ddate +'Today is %{%A, the %e of %B%}, %Y. %N%nCelebrate %H') 59 It is $(date --utc +%H) o clock UTC. 60 todays news: 61 $(get_current_news) 62 $(gc_news) 63 EOF 64 ''; 65in 66{ 67 systemd.services.newsshow = { 68 path = [ 69 newsshow 70 tts 71 send_to_radio 72 gc_news 73 get_current_news 74 pkgs.retry 75 ]; 76 script = '' 77 set -efu 78 retry -t 5 -d 10 -- newsshow | 79 retry -t 5 -d 10 -- tts | 80 retry -t 5 -d 10 -- send_to_radio 81 ''; 82 startAt = "*:00:00"; 83 serviceConfig = { 84 User = "radio-news"; 85 }; 86 }; 87 88 services.nginx.virtualHosts."radio-news.r" = { 89 locations."/" = { 90 proxyPass = "http://localhost:7999"; 91 proxyWebsockets = true; 92 extraConfig = '' 93 add_header 'Access-Control-Allow-Origin' '*'; 94 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; 95 ''; 96 }; 97 }; 98 imports = [ 99 self.inputs.stockholm.nixosModules.htgen 100 ]; 101 krebs.htgen.news = { 102 port = 7999; 103 user = { 104 name = "radio-news"; 105 }; 106 script = ''. ${pkgs.writers.writeDash "htgen-news" '' 107 set -xefu 108 case "''${Method:-GET} $Request_URI" in 109 "GET /") 110 printf 'HTTP/1.1 200 OK\r\n' 111 printf 'Connection: close\r\n' 112 printf '\r\n' 113 cat "$HOME"/news | jq -sc . 114 exit 115 ;; 116 "POST /") 117 payload=$(head -c "$req_content_length") 118 printf '%s' "$payload" | jq 'has("from") and has("to") and has("text")' >&2 119 printf '%s' "$payload" | jq -c '{ from: .from, to: .to, text: .text, priority: (.priority // 0)}' >> "$HOME"/news 120 printf 'HTTP/1.1 200 OK\r\n' 121 printf 'Connection: close\r\n' 122 printf '\r\n' 123 exit 124 ;; 125 esac 126 ''}''; 127 }; 128 129 # debug 130 environment.systemPackages = [ 131 send_to_radio 132 newsshow 133 tts 134 ]; 135}