mirror of
https://github.com/kmein/niveum
synced 2026-03-18 19:11:08 +01:00
Compare commits
7 Commits
94491c4570
...
89686082d0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
89686082d0 | ||
| 4af218f7ad | |||
| b08576c972 | |||
| 44cb0bf8a5 | |||
| 4c9305c89d | |||
| 8c838966f2 | |||
| 6ffb80322b |
78
flake.lock
generated
78
flake.lock
generated
@@ -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": {
|
||||
|
||||
@@ -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
39
packages/brainmelter.nix
Executable 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
|
||||
''
|
||||
2
secrets
2
secrets
Submodule secrets updated: 04f66a7296...c622f9bac9
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user