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