forked from
lass.pds.lassul.us/superconfig
This repository has no description
3.0 kB
109 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 UTC.
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 services.nginx.virtualHosts."radio-news.r" = {
63 locations."/" = {
64 proxyPass = "http://localhost:7999";
65 proxyWebsockets = true;
66 extraConfig = ''
67 add_header 'Access-Control-Allow-Origin' '*';
68 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
69 '';
70 };
71 };
72 imports = [
73 self.inputs.stockholm.nixosModules.htgen
74 ./tts.nix
75 ];
76 krebs.htgen.news = {
77 port = 7999;
78 user = {
79 name = "radio-news";
80 };
81 script = ''. ${pkgs.writers.writeDash "htgen-news" ''
82 set -xefu
83 case "''${Method:-GET} $Request_URI" in
84 "GET /")
85 printf 'HTTP/1.1 200 OK\r\n'
86 printf 'Connection: close\r\n'
87 printf '\r\n'
88 cat "$HOME"/news | jq -sc .
89 exit
90 ;;
91 "POST /")
92 payload=$(head -c "$req_content_length")
93 printf '%s' "$payload" | jq 'has("from") and has("to") and has("text")' >&2
94 printf '%s' "$payload" | jq -c '{ from: .from, to: .to, text: .text, priority: (.priority // 0)}' >> "$HOME"/news
95 printf 'HTTP/1.1 200 OK\r\n'
96 printf 'Connection: close\r\n'
97 printf '\r\n'
98 exit
99 ;;
100 esac
101 ''}'';
102 };
103
104 # debug
105 environment.systemPackages = [
106 send_to_radio
107 newsshow
108 ];
109}