This repository has no description
3.1 kB
119 lines
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 ./tts.nix
83 ];
84 krebs.htgen.news = {
85 port = 7999;
86 user = {
87 name = "radio-news";
88 };
89 script = ". ${pkgs.writers.writeDash "htgen-news" ''
90 set -xefu
91 case "''${Method:-GET} $Request_URI" in
92 "GET /")
93 printf 'HTTP/1.1 200 OK\r\n'
94 printf 'Connection: close\r\n'
95 printf '\r\n'
96 cat "$HOME"/news | jq -sc .
97 exit
98 ;;
99 "POST /")
100 payload=$(head -c "$req_content_length")
101 printf '%s' "$payload" | jq 'has("from") and has("to") and has("text")' >&2
102 printf '%s' "$payload" | jq -c '{ from: .from, to: .to, text: .text, priority: (.priority // 0)}' >> "$HOME"/news
103 printf 'HTTP/1.1 200 OK\r\n'
104 printf 'Connection: close\r\n'
105 printf '\r\n'
106 exit
107 ;;
108 esac
109 ''}";
110 };
111
112 # debug
113 environment.systemPackages = [
114 send_to_radio
115 newsshow
116 get_current_news
117 gc_news
118 ];
119}