1
0
mirror of https://github.com/kmein/niveum synced 2026-03-18 19:11:08 +01:00

7 Commits

Author SHA1 Message Date
github-actions[bot]
89686082d0 flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/96e078c646b711aee04b82ba01aefbff87004ded?narHash=sha256-bHCFgGeu8XjWlVuaWzi3QONjDW3coZDqSHvnd4l7xus%3D' (2025-04-26)
  → 'github:ryantm/agenix/6697e8babbd8f323dfd5e28f160a0128582c128b?narHash=sha256-E1WjB%2BzvDw4x058mg3MIdK5j2huvnNpTEEt2brhg2H8%3D' (2025-05-17)
• Updated input 'home-manager':
    'github:nix-community/home-manager/50eee705bbdbac942074a8c120e8194185633675?narHash=sha256-EyXUNSa%2BH%2BYvGVuQJP1nZskXAowxKYp79RNUsNdQTj4%3D' (2025-05-02)
  → 'github:nix-community/home-manager/1eec32f0efe3b830927989767a9e6ece0d82d608?narHash=sha256-3MmiUN/jOHBHQUnjqzg6qKArc17j2OS6jisEppDY4g8%3D' (2025-05-15)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/1d3aeb5a193b9ff13f63f4d9cc169fb88129f860?narHash=sha256-QkNoyEf6TbaTW5UZYX0OkwIJ/ZMeKSSoOMnSDPQuol0%3D' (2025-05-06)
  → 'github:NixOS/nixpkgs/ba8b70ee098bc5654c459d6a95dfc498b91ff858?narHash=sha256-IKKIXTSYJMmUtE%2BKav5Rob8SgLPnfnq4Qu8LyT4gdqQ%3D' (2025-05-15)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/0bb671aaa84205c180ec9122d9aa2f5823b7b2aa?narHash=sha256-JtzH3pV0oqlR9lTccOU5SbAY8PzbEp2lyXKlD/DGdRQ%3D' (2025-05-10)
  → 'github:NixOS/nixpkgs/9c41bec752558e97427e6895c2ea02d80c5930b2?narHash=sha256-Vq5qJpg87%2BCMgc7r5ystLFKeMW1MYRall%2Bx07slUUtM%3D' (2025-05-18)
• Updated input 'nur':
    'github:nix-community/NUR/887e5be213778cb047379434b6bb41ad09d9c8db?narHash=sha256-%2BU1n00EyLKzvZlMHK/YGS6OGIYsKfaz4j1qydyyrIRk%3D' (2025-05-10)
  → 'github:nix-community/NUR/beb1ef00d70f1baae3683c46bfe3296785a93c6f?narHash=sha256-hUO0fgjfNeL2kX/ahXrErTwYxDY%2BNBWd//PqHTJmCps%3D' (2025-05-17)
• Updated input 'nur/nixpkgs':
    'github:nixos/nixpkgs/dda3dcd3fe03e991015e9a74b22d35950f264a54?narHash=sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ%2BTCkTRpRc%3D' (2025-05-08)
  → 'github:nixos/nixpkgs/e06158e58f3adee28b139e9c2bcfcc41f8625b46?narHash=sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4%2BwYK4%3D' (2025-05-15)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/be092436d4c0c303b654e4007453b69c0e33009e?narHash=sha256-GcUWDQUDRYrD34ol90KGUpjbVcOfUNbv0s955jPecko%3D' (2025-05-10)
  → 'github:oxalica/rust-overlay/f44db7d7cea4528288780c6347756173a8248225?narHash=sha256-veyXchTz6eWwvuW5X49UluHkheHkFcqHJSwGuKBhrmQ%3D' (2025-05-17)
• Updated input 'stockholm':
    'github:krebs/stockholm/8d0538bf86e4f9df4f5cc358a1760b255be797e9?narHash=sha256-tQZ8sXCU6yvC0ut/%2BezRUSd89Nbyqqn0JVCjYDwcqQA%3D' (2025-02-11)
  → 'github:krebs/stockholm/d4abc837cc7b87b4f23fe48cc306df26e3de7aab?narHash=sha256-i2s6jU%2B8GLKVjhWDyvFYxmXI7A44c9p6apPPyKt0ETk%3D' (2025-05-13)
• Updated input 'stockholm/buildbot-nix':
    'github:Mic92/buildbot-nix/c077f430f3717d41bb303d031398058665315166?narHash=sha256-T9THCbnlj4CkKbTP%2BlisA5PUMoTXE7uh4FyDQzui%2Bdc%3D' (2025-01-26)
  → 'github:Mic92/buildbot-nix/7ad9b4886eccb5eecc0686a16266ddabf6cbefe9?narHash=sha256-mRnIdJLP%2B0NSim9ao30ue0Z3ttSuxzXwQG7UN1KuKfU%3D' (2025-05-07)
• Updated input 'stockholm/buildbot-nix/flake-parts':
    'github:hercules-ci/flake-parts/b905f6fc23a9051a6e1b741e1438dbfc0634c6de?narHash=sha256-%2Bhu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU%3D' (2025-01-06)
  → 'github:hercules-ci/flake-parts/c621e8422220273271f52058f618c94e405bb0f5?narHash=sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY%3D' (2025-04-01)
• Updated input 'stockholm/buildbot-nix/hercules-ci-effects':
    'github:hercules-ci/hercules-ci-effects/afd0a42e8c61ebb56899315ee4084a8b2e4ff425?narHash=sha256-JTBWmyGf8K1Rwb%2BgviHIUzRJk/sITtT%2B72HXFkTZUjo%3D' (2025-01-15)
  → 'github:hercules-ci/hercules-ci-effects/5b6cec51c9ec095a0d3fd4c8eeb53eb5c59ae33e?narHash=sha256-1Z4WPGVky4w3lrhrgs89OKsLzPdtkbi1bPLNFWsoLfY%3D' (2025-04-15)
• Updated input 'stockholm/buildbot-nix/treefmt-nix':
    'github:numtide/treefmt-nix/f2cc121df15418d028a59c9737d38e3a90fbaf8f?narHash=sha256-5An1wq5U8sNycOBBg3nsDDgpwBmR9liOpDGlhliA6Xo%3D' (2025-01-21)
  → 'github:numtide/treefmt-nix/29ec5026372e0dec56f890e50dbe4f45930320fd?narHash=sha256-4h3s1L/kKqt3gMDcVfN8/4v2jqHrgLIe4qok4ApH5x4%3D' (2025-05-02)
• Updated input 'stockholm/nixpkgs':
    'github:NixOS/nixpkgs/852ff1d9e153d8875a83602e03fdef8a63f0ecf8?narHash=sha256-Zf0hSrtzaM1DEz8//%2BXs51k/wdSajticVrATqDrfQjg%3D' (2025-01-26)
  → 'github:NixOS/nixpkgs/d89fc19e405cb2d55ce7cc114356846a0ee5e956?narHash=sha256-3e%2BAVBczosP5dCLQmMoMEogM57gmZ2qrVSrmq9aResQ%3D' (2025-05-10)
2025-05-18 01:08:52 +00:00
4af218f7ad radio-news: send earlier 2025-05-16 14:03:42 +02:00
b08576c972 radio-news: expire earlier 2025-05-16 10:08:30 +02:00
44cb0bf8a5 remock secrets 2025-05-14 16:39:04 +02:00
4c9305c89d init brainmelter 2025-05-14 06:57:06 +02:00
8c838966f2 radio news: automatically post digest 2025-05-13 20:22:42 +02:00
6ffb80322b radio news digest 2025-05-13 19:51:43 +02:00
6 changed files with 147 additions and 40 deletions

78
flake.lock generated
View File

@@ -12,11 +12,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1745630506,
"narHash": "sha256-bHCFgGeu8XjWlVuaWzi3QONjDW3coZDqSHvnd4l7xus=",
"lastModified": 1747514353,
"narHash": "sha256-E1WjB+zvDw4x058mg3MIdK5j2huvnNpTEEt2brhg2H8=",
"owner": "ryantm",
"repo": "agenix",
"rev": "96e078c646b711aee04b82ba01aefbff87004ded",
"rev": "6697e8babbd8f323dfd5e28f160a0128582c128b",
"type": "github"
},
"original": {
@@ -181,11 +181,11 @@
"treefmt-nix": "treefmt-nix_2"
},
"locked": {
"lastModified": 1737857314,
"narHash": "sha256-T9THCbnlj4CkKbTP+lisA5PUMoTXE7uh4FyDQzui+dc=",
"lastModified": 1746626503,
"narHash": "sha256-mRnIdJLP+0NSim9ao30ue0Z3ttSuxzXwQG7UN1KuKfU=",
"owner": "Mic92",
"repo": "buildbot-nix",
"rev": "c077f430f3717d41bb303d031398058665315166",
"rev": "7ad9b4886eccb5eecc0686a16266ddabf6cbefe9",
"type": "github"
},
"original": {
@@ -382,11 +382,11 @@
]
},
"locked": {
"lastModified": 1736143030,
"narHash": "sha256-+hu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU=",
"lastModified": 1743550720,
"narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "b905f6fc23a9051a6e1b741e1438dbfc0634c6de",
"rev": "c621e8422220273271f52058f618c94e405bb0f5",
"type": "github"
},
"original": {
@@ -611,11 +611,11 @@
]
},
"locked": {
"lastModified": 1736917206,
"narHash": "sha256-JTBWmyGf8K1Rwb+gviHIUzRJk/sITtT+72HXFkTZUjo=",
"lastModified": 1744693102,
"narHash": "sha256-1Z4WPGVky4w3lrhrgs89OKsLzPdtkbi1bPLNFWsoLfY=",
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"rev": "afd0a42e8c61ebb56899315ee4084a8b2e4ff425",
"rev": "5b6cec51c9ec095a0d3fd4c8eeb53eb5c59ae33e",
"type": "github"
},
"original": {
@@ -654,11 +654,11 @@
]
},
"locked": {
"lastModified": 1746171682,
"narHash": "sha256-EyXUNSa+H+YvGVuQJP1nZskXAowxKYp79RNUsNdQTj4=",
"lastModified": 1747331121,
"narHash": "sha256-3MmiUN/jOHBHQUnjqzg6qKArc17j2OS6jisEppDY4g8=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "50eee705bbdbac942074a8c120e8194185633675",
"rev": "1eec32f0efe3b830927989767a9e6ece0d82d608",
"type": "github"
},
"original": {
@@ -1109,11 +1109,11 @@
},
"nixpkgs-unstable_2": {
"locked": {
"lastModified": 1746886008,
"narHash": "sha256-JtzH3pV0oqlR9lTccOU5SbAY8PzbEp2lyXKlD/DGdRQ=",
"lastModified": 1747529194,
"narHash": "sha256-Vq5qJpg87+CMgc7r5ystLFKeMW1MYRall+x07slUUtM=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0bb671aaa84205c180ec9122d9aa2f5823b7b2aa",
"rev": "9c41bec752558e97427e6895c2ea02d80c5930b2",
"type": "github"
},
"original": {
@@ -1231,11 +1231,11 @@
},
"nixpkgs_7": {
"locked": {
"lastModified": 1746557022,
"narHash": "sha256-QkNoyEf6TbaTW5UZYX0OkwIJ/ZMeKSSoOMnSDPQuol0=",
"lastModified": 1747335874,
"narHash": "sha256-IKKIXTSYJMmUtE+Kav5Rob8SgLPnfnq4Qu8LyT4gdqQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1d3aeb5a193b9ff13f63f4d9cc169fb88129f860",
"rev": "ba8b70ee098bc5654c459d6a95dfc498b91ff858",
"type": "github"
},
"original": {
@@ -1247,11 +1247,11 @@
},
"nixpkgs_8": {
"locked": {
"lastModified": 1746663147,
"narHash": "sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ+TCkTRpRc=",
"lastModified": 1747327360,
"narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "dda3dcd3fe03e991015e9a74b22d35950f264a54",
"rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46",
"type": "github"
},
"original": {
@@ -1263,11 +1263,11 @@
},
"nixpkgs_9": {
"locked": {
"lastModified": 1737885589,
"narHash": "sha256-Zf0hSrtzaM1DEz8//+Xs51k/wdSajticVrATqDrfQjg=",
"lastModified": 1746904237,
"narHash": "sha256-3e+AVBczosP5dCLQmMoMEogM57gmZ2qrVSrmq9aResQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "852ff1d9e153d8875a83602e03fdef8a63f0ecf8",
"rev": "d89fc19e405cb2d55ce7cc114356846a0ee5e956",
"type": "github"
},
"original": {
@@ -1395,11 +1395,11 @@
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1746881822,
"narHash": "sha256-+U1n00EyLKzvZlMHK/YGS6OGIYsKfaz4j1qydyyrIRk=",
"lastModified": 1747525536,
"narHash": "sha256-hUO0fgjfNeL2kX/ahXrErTwYxDY+NBWd//PqHTJmCps=",
"owner": "nix-community",
"repo": "NUR",
"rev": "887e5be213778cb047379434b6bb41ad09d9c8db",
"rev": "beb1ef00d70f1baae3683c46bfe3296785a93c6f",
"type": "github"
},
"original": {
@@ -1568,11 +1568,11 @@
]
},
"locked": {
"lastModified": 1746844454,
"narHash": "sha256-GcUWDQUDRYrD34ol90KGUpjbVcOfUNbv0s955jPecko=",
"lastModified": 1747449297,
"narHash": "sha256-veyXchTz6eWwvuW5X49UluHkheHkFcqHJSwGuKBhrmQ=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "be092436d4c0c303b654e4007453b69c0e33009e",
"rev": "f44db7d7cea4528288780c6347756173a8248225",
"type": "github"
},
"original": {
@@ -1646,11 +1646,11 @@
"nixpkgs": "nixpkgs_9"
},
"locked": {
"lastModified": 1739285100,
"narHash": "sha256-tQZ8sXCU6yvC0ut/+ezRUSd89Nbyqqn0JVCjYDwcqQA=",
"lastModified": 1747157099,
"narHash": "sha256-i2s6jU+8GLKVjhWDyvFYxmXI7A44c9p6apPPyKt0ETk=",
"owner": "krebs",
"repo": "stockholm",
"rev": "8d0538bf86e4f9df4f5cc358a1760b255be797e9",
"rev": "d4abc837cc7b87b4f23fe48cc306df26e3de7aab",
"type": "github"
},
"original": {
@@ -1977,11 +1977,11 @@
]
},
"locked": {
"lastModified": 1737483750,
"narHash": "sha256-5An1wq5U8sNycOBBg3nsDDgpwBmR9liOpDGlhliA6Xo=",
"lastModified": 1746216483,
"narHash": "sha256-4h3s1L/kKqt3gMDcVfN8/4v2jqHrgLIe4qok4ApH5x4=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "f2cc121df15418d028a59c9737d38e3a90fbaf8f",
"rev": "29ec5026372e0dec56f890e50dbe4f45930320fd",
"type": "github"
},
"original": {

View File

@@ -335,6 +335,7 @@
packages = rec {
auc = pkgs.callPackage packages/auc.nix {};
betacode = pkgs.callPackage packages/betacode.nix {};
brainmelter = pkgs.callPackage packages/brainmelter.nix {};
brassica = pkgs.callPackage packages/brassica.nix {};
cheat-sh = pkgs.callPackage packages/cheat-sh.nix {};
closest = pkgs.callPackage packages/closest {};

39
packages/brainmelter.nix Executable file
View File

@@ -0,0 +1,39 @@
{ writers, flite, netcat, gnused, ... }:
writers.writeDashBin "brainmelter" ''
SERVER="brockman.news"
PORT=6667
NICK="irccat"
USER="irccat"
CHANNEL="#all"
# Open connection to IRC server using a FIFO and netcat
FIFO=$(mktemp -u)
mkfifo "$FIFO"
trap "rm -f $FIFO" EXIT
# Send IRC commands
{
echo "NICK $NICK"
echo "USER $USER 0 * :$USER"
sleep 5
echo "JOIN $CHANNEL"
while true; do
sleep 30
echo "PING :keepalive"
done
} > "$FIFO" &
# Read from server and write to stdout
${netcat}/bin/nc "$SERVER" "$PORT" < "$FIFO" | while IFS= read -r line; do
voice="$(echo -e "awb\nkal\nrms\nslt" | shuf -n1)"
echo "$line" \
| ${gnused}/bin/sed -n 's/.*go.brockman.news\/\S\+ //p' \
| tee /dev/stderr \
| ${flite}/bin/flite -voice "$voice"
# Respond to PINGs to avoid timeout
if [ "$line" = PING* ]; then
server_ping=$(echo "$line" | cut -d':' -f2)
echo "PONG :$server_ping" > "$FIFO"
fi
done
''

Submodule secrets updated: 04f66a7296...c622f9bac9

View File

@@ -16,6 +16,7 @@ secrets/ful-retiolum-privateKey-ed25519.age
secrets/ful-retiolum-privateKey-rsa.age
secrets/ful-root.age
secrets/fu-sftp-key.age
secrets/gemini-api-key.age
secrets/github-token-i3status-rust.age
secrets/grafana-password-admin.age
secrets/hetzner-storagebox-credentials.age

View File

@@ -1,4 +1,5 @@
{
config,
pkgs,
lib,
...
@@ -8,6 +9,71 @@
in {
services.nginx.virtualHosts."redaktion.r".locations."/".extraConfig = serveHtml ../../lib/radio-news.html pkgs;
age.secrets = {
gemini-api-key.file = ../../secrets/gemini-api-key.age;
};
systemd.services.news-digest = {
enable = true;
wantedBy = ["multi-user.target"];
wants = ["network-online.target"];
serviceConfig.LoadCredential = [
"gemini-api-key:${config.age.secrets.gemini-api-key.path}"
];
startAt = "*:50";
script = ''
set -efu
PATH=$PATH:${lib.makeBinPath [pkgs.w3m pkgs.gnused pkgs.curl pkgs.jq]}
export GEMINI_API_KEY="$(cat "$CREDENTIALS_DIRECTORY/gemini-api-key")"
WIKI_URL="https://en.wikipedia.org/wiki/Portal:Current_events"
EVENTS=$(w3m -dump "$WIKI_URL" | sed -n "/$(date -I)/,/$(date -I -d yesterday)/p" | head -n -1)
SYSTEM_PROMPT=$(cat <<EOF
You are a news anchor writing a short news digest for a radio broadcast.
Summarize the following news headlines into a cohesive, engaging script under 400 words.
Keep it professional, concise, and easy to follow.
Begin the digest with: "Here's your news update for $(date -u +"%B %d, %Y")."
EOF
)
REQUEST=$(cat <<EOF
{
"system_instruction": {
"parts": [
{
"text": $(jq -Rs <<< "$SYSTEM_PROMPT")
}
]
},
"contents": [
{
"parts": [
{
"text": "Current events (from Wikipedia): $(echo "$EVENTS")"
}
]
}
]
}
EOF
)
RESPONSE=$(echo "$REQUEST" | curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-8b:generateContent?key=$GEMINI_API_KEY" -s -H "Content-Type: application/json" -d @-)
echo "$RESPONSE" | jq --arg from "$(date -u -Is | sed 's/+00:00/Z/')" --arg to "$(date -u -Is -d 'now + 30 minutes' | sed 's/+00:00/Z/')" '
{
from: $from,
to: $to,
text: .candidates[].content.parts[].text
}' | curl -s -X POST http://radio-news.r -H "Content-Type: application/json" -d @-
'';
};
niveum.passport.services = [
{
title = "Retiolum Radio News";