This repository has no description
0

Configure Feed

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

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