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 send_to_radio = pkgs.writers.writeDashBin "send_to_radio" '' 4 ${pkgs.vorbis-tools}/bin/oggenc - | 5 ${pkgs.cyberlocker-tools}/bin/cput news.ogg 6 ${pkgs.curl}/bin/curl -fSs -X POST http://localhost:8002/newsshow 7 ''; 8 9 gc_news = pkgs.writers.writeDashBin "gc_news" '' 10 set -xefu 11 export TZ=UTC #workaround for jq parsing wrong timestamp 12 ${pkgs.coreutils}/bin/cat $HOME/news | ${pkgs.jq}/bin/jq -cs 'map(select((.to|fromdateiso8601) > now)) | .[]' > $HOME/bla-news.tmp 13 ${pkgs.coreutils}/bin/mv $HOME/bla-news.tmp $HOME/news 14 ''; 15 16 get_current_news = pkgs.writers.writeDashBin "get_current_news" '' 17 set -xefu 18 export TZ=UTC #workaround for jq parsing wrong timestamp 19 ${pkgs.coreutils}/bin/cat $HOME/news | ${pkgs.jq}/bin/jq -rs ' 20 sort_by(.priority) | 21 map(select( 22 ((.to | fromdateiso8601) > now) and 23 (.from|fromdateiso8601) < now) | 24 .text 25 ) | .[]' 26 ''; 27 28 newsshow = 29 pkgs.writers.writeDashBin "newsshow" # sh 30 '' 31 cat << EOF 32 hello crabpeople! 33 $(${pkgs.ddate}/bin/ddate +'Today is %{%A, the %e of %B%}, %Y. %N%nCelebrate %H') 34 It is $(date --utc +%H) o clock U.T.C. 35 todays news: 36 $(get_current_news) 37 $(gc_news) 38 EOF 39 ''; 40in 41{ 42 systemd.services.newsshow = { 43 path = [ 44 newsshow 45 send_to_radio 46 gc_news 47 get_current_news 48 pkgs.retry 49 ]; 50 script = '' 51 set -efu 52 retry -t 5 -d 10 -- newsshow | 53 retry -t 5 -d 10 -- /run/current-system/sw/bin/tts | 54 retry -t 5 -d 10 -- send_to_radio 55 ''; 56 startAt = "*:00:00"; 57 serviceConfig = { 58 User = "radio-news"; 59 }; 60 }; 61 62 security.acme.certs."radio-news.r".server = config.krebs.ssl.acmeURL; 63 64 services.nginx.virtualHosts."radio-news.r" = { 65 enableACME = true; 66 addSSL = true; 67 locations."/" = { 68 proxyPass = "http://localhost:7999"; 69 proxyWebsockets = true; 70 extraConfig = '' 71 add_header 'Access-Control-Allow-Origin' '*'; 72 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; 73 ''; 74 }; 75 }; 76 imports = [ 77 self.inputs.stockholm.nixosModules.htgen 78 ./tts.nix 79 ]; 80 krebs.htgen.news = { 81 port = 7999; 82 user = { 83 name = "radio-news"; 84 }; 85 script = ''. ${pkgs.writers.writeDash "htgen-news" '' 86 set -xefu 87 case "''${Method:-GET} $Request_URI" in 88 "GET /") 89 printf 'HTTP/1.1 200 OK\r\n' 90 printf 'Connection: close\r\n' 91 printf '\r\n' 92 cat "$HOME"/news | jq -sc . 93 exit 94 ;; 95 "POST /") 96 payload=$(head -c "$req_content_length") 97 printf '%s' "$payload" | jq 'has("from") and has("to") and has("text")' >&2 98 printf '%s' "$payload" | jq -c '{ from: .from, to: .to, text: .text, priority: (.priority // 0)}' >> "$HOME"/news 99 printf 'HTTP/1.1 200 OK\r\n' 100 printf 'Connection: close\r\n' 101 printf '\r\n' 102 exit 103 ;; 104 esac 105 ''}''; 106 }; 107 108 # debug 109 environment.systemPackages = [ 110 send_to_radio 111 newsshow 112 get_current_news 113 gc_news 114 ]; 115}