This repository has no description
3.2 kB
120 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 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}