1
0
mirror of https://github.com/kmein/niveum synced 2026-03-25 14:01:06 +01:00

16 Commits

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

• Updated input 'home-manager':
    'github:nix-community/home-manager/de3758e31a3a1bc79d569f5deb5dac39791bf9b6' (2022-09-23)
  → 'github:nix-community/home-manager/a7f0cc2d7b271b4a5df9b9e351d556c172f7e903' (2022-09-30)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/7e27b838cd7ac90fed03d0d5a8487848c4b0b6d2' (2022-09-23)
  → 'github:NixOS/nixpkgs/9cac45850280978a21a3eb67b15a18f34cbffa2d' (2022-10-01)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/ae1dc133ea5f1538d035af41e5ddbc2ebcb67b90' (2022-09-22)
  → 'github:NixOS/nixpkgs/10ecda252ce1b3b1d6403caeadbcc8f30d5ab796' (2022-09-30)
• Updated input 'recht':
    'github:kmein/recht/d551afed23122bb3106e59eb2274394ec5555048' (2021-04-28)
  → 'github:kmein/recht/dc2cb407052a53965e6678fd84f0d887f887c11c' (2022-09-28)
• Updated input 'retiolum':
    'github:krebs/retiolum/8d9b86a0ce503588bb34ae8676fdbcb0e4014119' (2022-09-24)
  → 'github:krebs/retiolum/86208b5a747d7aa661240b2d5c2f229f2ed76959' (2022-09-28)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=55957c6d6adb51d2079c117c1e7309c60ee0fe0f' (2022-09-19)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=8f929b04b3de012a9c72306786f076b78aa9f98c' (2022-09-27)
2022-10-02 01:16:36 +00:00
6063f4c90b feat(ssh): use fysiweb identity for ip login on dev1 2022-09-28 15:54:42 +02:00
7c4557331f feat(newsboat): hooktube is no more 2022-09-28 15:54:21 +02:00
8a7e4386fb fix(newsboat): call link handler 2022-09-28 14:15:39 +02:00
61ab528d56 feat: screencap script 2022-09-28 09:34:17 +02:00
032810109c fix(ci): add mega password 2022-09-27 22:28:58 +02:00
6b0bb6a806 feat(cloud): add script for browsing mega 2022-09-27 22:07:03 +02:00
7ce64d461c fix(notemenu): do not show hidden files 2022-09-27 20:40:24 +02:00
51afd41254 fix(notement): correctly handle files with spaces 2022-09-27 19:36:22 +02:00
eb4fa1b9bd feat(nextcloud): disable gui client 2022-09-27 19:19:14 +02:00
ac7a4b2aa5 feat(nextcloud): sync nextcloud notes periodically 2022-09-27 19:18:42 +02:00
89a4b13b2d feat: bye ncdu, hi gdu 2022-09-27 19:17:30 +02:00
f5da2dffd8 feat(newsboat): add odysee to linkhandler 2022-09-27 09:47:50 +02:00
cdf42df7c1 feat(bin): add tuesday script 2022-09-26 09:40:12 +02:00
3ccf0cfe9a feat(bin): add prospekte script 2022-09-26 09:39:59 +02:00
83632cbd9c feat(ful): monitoring 2022-09-26 09:30:28 +02:00
14 changed files with 257 additions and 46 deletions

65
.bin/prospekte.sh Executable file
View File

@@ -0,0 +1,65 @@
#!/bin/sh
lidl() {
echo LIDL
curl -sSL 'https://endpoints.lidl-flyer.com/v3/region-overview/lidl/de-DE/0.json' \
| jq -r '
.categories
| map(select(.name == "Filial-Angebote") | .subcategories | map(.flyers))
| flatten
| flatten
| .[]
| .pdfUrl
'
}
aldi_nord() {
echo ALDI nord
echo 'https://magazine.aldi-nord.de/aldi-nord/aldi-aktuell/GetPDF.ashx'
echo 'https://magazine.aldi-nord.de/aldi-nord/aldi-vorschau/GetPDF.ashx'
}
rewe_berlin() {(
store_id=662366923
publisher_id=1062
echo REWE
curl -sSL 'https://www.bonialserviceswidget.de/de/stores/'$store_id'/brochures?storeId='$store_id'&publisherId='$publisher_id | while read -r brochure_id; do
curl -sSL 'https://www.bonialserviceswidget.de/de/v5/brochureDetails/'"$brochure_id"'?publisherId='$publisher_id | jq -r .pdfUrl
done
)}
kaufland() {(
region_code=8920
echo KAUFLAND
curl -sSL https://filiale.kaufland.de/prospekte.html | htmlq --attribute href '.flyer a' | grep -Eo 'DE_de_KDZ[^/]*' | sed "s/_3000_/_${region_code}_/" | while read -r flyer_id; do
curl -sSL "https://endpoints.leaflets.kaufland.com/v3/$flyer_id/flyer.json?regionCode=$region_code" | jq -r .flyer.pdfUrl
done
)}
netto_schwarz() {
echo 'NETTO (schwarz)'
curl -sSL 'https://squid-api.tjek.com/v2/catalogs?dealer_ids=90f2VL&order_by=created' \
| jq -r '.[] | .id' \
| while read -r flyer_id; do
curl -sSL "https://squid-api.tjek.com/v2/catalogs/$flyer_id/download" \
| jq -r .pdf_url
done
}
dir="$(mktemp -d)"
trap clean EXIT
clean() {
rm -rf "$dir"
}
prospekt_url="$( (
lidl
aldi_nord
rewe_berlin
kaufland
netto_schwarz
) | fzf)"
curl -sSL "$prospekt_url" -o "$dir/prospekt.pdf"
zathura "$dir/prospekt.pdf"

16
.bin/screencap.sh Executable file
View File

@@ -0,0 +1,16 @@
#! /usr/bin/env nix-shell
#! nix-shell -i sh -p coreutils byzanz xorg.xwininfo gnused
# shellcheck shell=sh
# ref https://gist.github.com/aforemny/0994cb7f06ea30d56c8b9681ff5d2054
set -eux
eval "$(xwininfo | \
sed -n -e 's/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p' \
-e 's/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p' \
-e 's/^ \+Width: \+\([0-9]\+\).*/w=\1/p' \
-e 's/^ \+Height: \+\([0-9]\+\).*/h=\1/p')"
trap "pkill -f 'sleep 360d'" INT
byzanz-record -e "sleep 360d" -c -x $x -y $y -w $w -h $h "$@"

50
.bin/toposort.nix Normal file
View File

@@ -0,0 +1,50 @@
let
lib = import <nixpkgs/lib>;
in rec {
inherit lib;
input = [
{
x = ["pool" "zfs"];
y = ["mdadm" "raid1"];
}
{
x = ["pool" "zfs"];
y = ["disk" "sda"];
}
{
x = ["mdadm" "raid1"];
y = ["disk" "sdb"];
}
{
x = ["mdadm" "raid1"];
y = ["disk" "sdc"];
}
];
outNodes = node: graph:
lib.unique
(builtins.map (e: e.y)
(builtins.filter (v: v.x == node) graph));
vertices = graph:
lib.unique
(builtins.map (x: x.y) graph ++ builtins.map (x: x.x) graph);
deleteVertex = node: graph: (builtins.filter (v: v.x != node && v.y != node) graph);
findSink = graph:
lib.findFirst
(v: outNodes v graph == [])
(lib.trace graph (builtins.abort "No sink found"))
(vertices graph);
topSort = graph:
if graph == []
then []
else if builtins.length graph == 1
then let only = builtins.head graph; in [only.y only.x]
else let sink = findSink graph; in [sink] ++ topSort (deleteVertex sink graph);
output = topSort input;
}

15
.bin/tuesday-1800 Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
expected_max_results=1024 # the upper bound on the number of restaurants
radius=500
echo '[out:json];node(id:260050809)->.cbase;
(
way(around.cbase:'$radius')[amenity=restaurant];
node(around.cbase:'$radius')[amenity=restaurant];
);out;' \
| curl -sSL -d @- -X POST http://overpass-api.de/api/interpreter \
| jq --argjson random "$(shuf -i 0-$expected_max_results -n 1)" '
.elements
| length as $length
| .[$random % $length]
'

1
ci.nix
View File

@@ -46,6 +46,7 @@
"mail/meinhaki"
"mail/dslalewa"
"mail/posteo"
"mega/password"
"nextcloud-fysi/password"
"nextcloud/password"
"openweathermap.key"

View File

@@ -15,14 +15,6 @@ in {
};
systemd.tmpfiles.rules = map tmpfilesConfig [
{
type = "L+";
user = config.users.users.me.name;
group = "users";
mode = "0755";
argument = "${config.users.users.me.home}/cloud/Seafile/Wiki";
path = "${config.users.users.me.home}/notes";
}
{
type = "L+";
user = config.users.users.me.name;
@@ -42,9 +34,9 @@ in {
];
home-manager.users.me = {
services.gnome-keyring.enable = true;
services.gnome-keyring.enable = false;
services.nextcloud-client = {
enable = true;
enable = false;
startInBackground = true;
};
systemd.user.services.nextcloud-client = {
@@ -55,6 +47,28 @@ in {
};
};
systemd.user.services.nextcloud-syncer = {
enable = true;
wants = ["network-online.target"];
wantedBy = ["default.target"];
startAt = "*:00/10";
script = let
kieran = {
user = "kieran";
password = lib.fileContents <secrets/nextcloud/password>;
endpoint = "https://cloud.xn--kiern-0qa.de";
target = "${config.users.users.me.home}/notes";
};
in ''
mkdir -p ${lib.escapeShellArg kieran.target}
${pkgs.nextcloud-client}/bin/nextcloudcmd --user ${kieran.user} --password ${lib.escapeShellArg kieran.password} --path /Notes ${lib.escapeShellArg kieran.target} ${kieran.endpoint}
'';
serviceConfig = {
Type = "oneshot";
Restart = "on-failure";
};
};
environment.systemPackages = [
(pkgs.writers.writeDashBin "book" ''
set -efu
@@ -62,8 +76,32 @@ in {
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/syncthing/library -type f
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/Seafile/Books -type f
} | ${pkgs.fzf}/bin/fzf)"
${pkgs.zathura}/bin/zathura "$book"
exec ${pkgs.zathura}/bin/zathura "$book"
'')
(let
kieran = {
user = "kieran.meinhardt@gmail.com";
password = lib.fileContents <secrets/mega/password>;
};
megatools = command: "${pkgs.megatools}/bin/megatools ${command} --username ${lib.escapeShellArg kieran.user} --password ${lib.escapeShellArg kieran.password}";
in
pkgs.writers.writeDashBin "book-mega" ''
set -efu
selection="$(${megatools "ls"} | ${pkgs.fzf}/bin/fzf)"
test -n "$selection" || exit 1
tmpdir="$(mktemp -d)"
trap clean EXIT
clean() {
rm -rf "$tmpdir"
}
(
cd "$tmpdir"
${megatools "get"} "$selection"
exec ${pkgs.zathura}/bin/zathura "$(basename "$selection")"
)
'')
];
fileSystems."/media/moodle" = {

View File

@@ -243,7 +243,7 @@ in {
note_file=$({
echo diary/$(date -I).md
echo diary/$(date -I -d yesterday).md
find . -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2
find . ! -name '.*' -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2-
} | rofi -dmenu -i -p 'notes')
if test "$note_file"
then

View File

@@ -11,7 +11,28 @@
youtube-download = "${pkgs.ts}/bin/ts ${pkgs.yt-dlp}/bin/yt-dlp -f ${ytdl-format} --add-metadata";
newsboat-home = "${config.users.users.me.home}/cloud/Seafile/Documents/newsboat";
linkhandler-bin = "${scripts.linkhandler}/bin/linkhandler";
linkhandler = pkgs.writers.writeDash "linkhandler" ''
# Feed script a url or file location.
# If an image, it will view in sxiv,
# if a video or gif, it will view in mpv
# if a music file or pdf, it will download,
# otherwise it opens link in browser.
# If no url given. Opens browser. For using script as $BROWSER.
[ -z "$1" ] && { "$BROWSER"; exit; }
case "$1" in
*mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtu.be*|*bitchute.com*|*videos.lukesmith.xyz*|*odysee.com*)
setsid -f ${pkgs.mpv}/bin/mpv -quiet "$1" >/dev/null 2>&1 ;;
*png|*jpg|*jpe|*jpeg|*gif)
curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///")" && sxiv -a "/tmp/$(echo "$1" | sed "s/.*\///")" >/dev/null 2>&1 & ;;
*mp3|*flac|*opus|*mp3?source*)
setsid -f tsp curl -LO "$1" >/dev/null 2>&1 ;;
*)
if [ -f "$1" ]; then "$TERMINAL" -e "$EDITOR" "$1"
else setsid -f "$BROWSER" "$1" >/dev/null 2>&1; fi ;;
esac
'';
newsboat-config = pkgs.writeText "config" ''
auto-reload no
@@ -25,12 +46,12 @@
text-width 85
external-url-viewer "${pkgs.urlscan}/bin/urlscan -dc -r '${linkhandler-bin} {}'"
browser ${linkhandler-bin}
external-url-viewer "${pkgs.urlscan}/bin/urlscan -dc -r '${linkhandler} {}'"
browser ${linkhandler}
macro , open-in-browser
macro c set browser "${pkgs.xsel}/bin/xsel -b <<<" ; open-in-browser ; set browser ${linkhandler-bin}
macro v set browser "${pkgs.utillinux}/bin/setsid -f ${pkgs.mpv}/bin/mpv" ; open-in-browser ; set browser ${linkhandler-bin}
macro y set browser "${youtube-download}" ; open-in-browser ; set browser ${linkhandler-bin}
macro c set browser "${pkgs.xsel}/bin/xsel -b <<<" ; open-in-browser ; set browser ${linkhandler}
macro v set browser "${pkgs.utillinux}/bin/setsid -f ${pkgs.mpv}/bin/mpv" ; open-in-browser ; set browser ${linkhandler}
macro y set browser "${youtube-download}" ; open-in-browser ; set browser ${linkhandler}
bind-key j down
bind-key k up

View File

@@ -96,7 +96,7 @@ in {
file # determine file type
dos2unix
genpass # generate passwords
ncdu # ncurses disk usage
gdu # ncurses disk usage (ncdu is broken)
rmlint # remove duplicate files
python3Packages.jsonschema # json validation
jq # json toolkit

View File

@@ -24,7 +24,7 @@ in {
home-manager.users.me.programs.ssh = {
enable = true;
matchBlocks = {
matchBlocks = rec {
"github.com" = {
hostname = "ssh.github.com";
port = 443;
@@ -72,6 +72,7 @@ in {
user = "root";
identityFile = sshIdentity "fysiweb";
};
${fysi-dev1.hostname} = fysi-dev1;
"fysi-shared0" = {
hostname = "49.12.205.235";
user = "root";

38
flake.lock generated
View File

@@ -23,11 +23,11 @@
"utils": "utils"
},
"locked": {
"lastModified": 1663932797,
"narHash": "sha256-IH8ZBW99W2k7wKLS+Sat9HiKX1TPZjFTnsPizK5crok=",
"lastModified": 1664573442,
"narHash": "sha256-AovlSIuJfMf8n9QLNUVtsCul+NVHIoen7APH2fLls3k=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "de3758e31a3a1bc79d569f5deb5dac39791bf9b6",
"rev": "a7f0cc2d7b271b4a5df9b9e351d556c172f7e903",
"type": "github"
},
"original": {
@@ -110,11 +110,11 @@
},
"nixos-stable": {
"locked": {
"lastModified": 1663939948,
"narHash": "sha256-tZROWStjk7aXbM6XTbspRb9dSk/4lw7EFBOrt2A09Ag=",
"lastModified": 1664594436,
"narHash": "sha256-YHowMADGzdi7fKnGlg47qe0PIljq+11VqLarmXDuKxQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "7e27b838cd7ac90fed03d0d5a8487848c4b0b6d2",
"rev": "9cac45850280978a21a3eb67b15a18f34cbffa2d",
"type": "github"
},
"original": {
@@ -126,11 +126,11 @@
},
"nixos-unstable": {
"locked": {
"lastModified": 1663850217,
"narHash": "sha256-tp9nXo1/IdN/xN9m06ryy0QUAEfoN6K56ObM/1QTAjc=",
"lastModified": 1664538465,
"narHash": "sha256-EnlC7dDKX7X1wlnXkB1gmn9rBZQ0J9+biVTZHw//8us=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ae1dc133ea5f1538d035af41e5ddbc2ebcb67b90",
"rev": "10ecda252ce1b3b1d6403caeadbcc8f30d5ab796",
"type": "github"
},
"original": {
@@ -143,11 +143,11 @@
"recht": {
"flake": false,
"locked": {
"lastModified": 1619583518,
"narHash": "sha256-3eFw6xWue9cvPxXq1ROq32ecvPOmqOedgQhyOr7N9iE=",
"lastModified": 1664353498,
"narHash": "sha256-s1MUaSOkyoAMarB4a1DgMsfVhmhAsLIjtyeT+ZCxOEE=",
"owner": "kmein",
"repo": "recht",
"rev": "d551afed23122bb3106e59eb2274394ec5555048",
"rev": "dc2cb407052a53965e6678fd84f0d887f887c11c",
"type": "github"
},
"original": {
@@ -159,11 +159,11 @@
"retiolum": {
"flake": false,
"locked": {
"lastModified": 1664019034,
"narHash": "sha256-do31QxpQtmuWclx9yhM6UslVO7XdXofLbXZ4nr3fLJ0=",
"lastModified": 1664394335,
"narHash": "sha256-7dMfkp2+cwjzgzrSCsDzdktMha+SdPOm/jr49iOOkoI=",
"owner": "krebs",
"repo": "retiolum",
"rev": "8d9b86a0ce503588bb34ae8676fdbcb0e4014119",
"rev": "86208b5a747d7aa661240b2d5c2f229f2ed76959",
"type": "github"
},
"original": {
@@ -211,11 +211,11 @@
"stockholm": {
"flake": false,
"locked": {
"lastModified": 1663587256,
"narHash": "sha256-tOwUL8UFP8H8FosYVp8WiPr0nIPhcbN79nNJJgD0cUU=",
"lastModified": 1664291396,
"narHash": "sha256-KExj21MgDoZUOFoz/5iPLrKpLntcKqDbcpnCBZVup3Q=",
"ref": "refs/heads/master",
"rev": "55957c6d6adb51d2079c117c1e7309c60ee0fe0f",
"revCount": 10779,
"rev": "8f929b04b3de012a9c72306786f076b78aa9f98c",
"revCount": 10827,
"type": "git",
"url": "https://cgit.lassul.us/stockholm"
},

View File

@@ -278,12 +278,6 @@ in
name = "nix-git";
};
linkhandler = wrapScript {
packages = [pkgs.utillinux pkgs.mpv pkgs.curl pkgs.gnused pkgs.sxiv pkgs.ts];
script = "${voidrice}/.local/bin/linkhandler";
name = "linkhandler";
};
mansplain = wrapScript {
packages = [pkgs.man pkgs.zathura pkgs.dmenu pkgs.gnused];
script = ./mansplain.sh;

View File

@@ -8,7 +8,7 @@
in {
imports = [
./hardware-configuration.nix
# <niveum/configs/monitoring.nix>
<niveum/configs/monitoring.nix>
<niveum/configs/nix.nix>
<niveum/configs/save-space.nix>
<niveum/configs/spacetime.nix>

View File

@@ -258,6 +258,16 @@ in {
}
];
}
{
job_name = "ful";
static_configs = [
{
targets = [
"ful.r:${toString config.services.prometheus.exporters.node.port}"
];
}
];
}
];
services.prometheus.exporters.blackbox = {