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