This repository has no description
0

Configure Feed

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

superconfig / configs / services / radio / news.nix
3.5 kB 123 lines
1{ 2 self, 3 config, 4 pkgs, 5 ... 6}: 7let 8 news = "/home/radio-news/news"; 9 10 # GET / lists the news, POST / adds a JSON object { from, to, text, priority } 11 newsCgi = pkgs.writers.writeDash "radio-news-cgi" '' 12 case "$REQUEST_METHOD $DOCUMENT_URI" in 13 "GET /") 14 printf 'Content-Type: application/json\r\n\r\n' 15 cat ${news} 2>/dev/null | ${pkgs.jq}/bin/jq -sc . 16 ;; 17 "POST /") 18 if entries=$(${pkgs.jq}/bin/jq -c '{ from, to, text, priority: (.priority // 0) }'); then 19 printf '%s\n' "$entries" >> ${news} 20 printf 'Status: 200 OK\r\n\r\n' 21 else 22 printf 'Status: 400 Bad Request\r\n\r\n' 23 fi 24 ;; 25 *) 26 printf 'Status: 404 Not Found\r\n\r\n' 27 ;; 28 esac 29 ''; 30 31 send_to_radio = pkgs.writers.writeDashBin "send_to_radio" '' 32 ${pkgs.vorbis-tools}/bin/oggenc - | 33 ${self.packages.${pkgs.stdenv.hostPlatform.system}.cyberlocker-tools}/bin/cput news.ogg 34 ${pkgs.curl}/bin/curl -fSs -X POST http://localhost:8002/newsshow 35 ''; 36 37 gc_news = pkgs.writers.writeDashBin "gc_news" '' 38 set -xefu 39 export TZ=UTC #workaround for jq parsing wrong timestamp 40 ${pkgs.coreutils}/bin/cat $HOME/news | ${pkgs.jq}/bin/jq -cs 'map(select((.to|fromdateiso8601) > now)) | .[]' > $HOME/bla-news.tmp 41 ${pkgs.coreutils}/bin/mv $HOME/bla-news.tmp $HOME/news 42 ''; 43 44 get_current_news = pkgs.writers.writeDashBin "get_current_news" '' 45 set -xefu 46 export TZ=UTC #workaround for jq parsing wrong timestamp 47 ${pkgs.coreutils}/bin/cat $HOME/news | ${pkgs.jq}/bin/jq -rs ' 48 sort_by(.priority) | 49 map(select( 50 ((.to | fromdateiso8601) > now) and 51 (.from|fromdateiso8601) < now) | 52 .text 53 ) | .[]' 54 ''; 55 56 newsshow = 57 pkgs.writers.writeDashBin "newsshow" # sh 58 '' 59 cat << EOF 60 hello crabpeople! 61 $(${pkgs.ddate}/bin/ddate +'Today is %{%A, the %e of %B%}, %Y. %N%nCelebrate %H') 62 It is $(date --utc +%H) o clock U.T.C. 63 todays news: 64 $(get_current_news) 65 $(gc_news) 66 EOF 67 ''; 68in 69{ 70 systemd.services.newsshow = { 71 path = [ 72 newsshow 73 send_to_radio 74 gc_news 75 get_current_news 76 pkgs.retry 77 ]; 78 script = '' 79 set -efu 80 retry -t 5 -d 10 -- newsshow | 81 retry -t 5 -d 10 -- /run/current-system/sw/bin/tts | 82 retry -t 5 -d 10 -- send_to_radio 83 ''; 84 startAt = "*:00:00"; 85 serviceConfig = { 86 User = "radio-news"; 87 }; 88 }; 89 90 services.nginx.virtualHosts."radio-news.r" = { 91 locations."/".extraConfig = '' 92 add_header 'Access-Control-Allow-Origin' '*'; 93 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; 94 include ${config.services.nginx.package}/conf/fastcgi_params; 95 fastcgi_param SCRIPT_FILENAME ${newsCgi}; 96 fastcgi_pass unix:${config.services.fcgiwrap.instances.radio-news.socket.address}; 97 ''; 98 }; 99 imports = [ 100 ./tts.nix 101 ]; 102 services.fcgiwrap.instances.radio-news = { 103 process.user = "radio-news"; 104 process.group = "radio-news"; 105 socket.user = config.services.nginx.user; 106 socket.group = config.services.nginx.group; 107 }; 108 users.users.radio-news = { 109 isSystemUser = true; 110 group = "radio-news"; 111 home = "/home/radio-news"; 112 createHome = true; 113 }; 114 users.groups.radio-news = { }; 115 116 # debug 117 environment.systemPackages = [ 118 send_to_radio 119 newsshow 120 get_current_news 121 gc_news 122 ]; 123}