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