diff --git a/.bin/256color b/.bin/256color
deleted file mode 100755
index c33cd1f..0000000
--- a/.bin/256color
+++ /dev/null
@@ -1,38 +0,0 @@
-#! /bin/sh
-set -euf
-
-pl() {
- for i in $(seq $1 $(expr $2 - 1)); do
- printf '\e[38;5;%sm%03i\e[m ' $i $i
- done
- printf '\e[38;5;%sm%03i\e[m\n' $2 $2
-}
-
-p() {
- printf '\e[38;5;%sm%03i\e[m ' $1 $1
-}
-pn() {
- printf '\e[38;5;%sm%03i\e[m\n' $1 $1
-}
-
-p6x6() {
- for i in $(seq 0 5); do
- for j in $(seq 0 5); do
- p $(expr $1 + $i + $j \* 6)
- done
- echo
- done
-}
-
-pl 0 7
-pl 8 15
-
-p6x6 16
-p6x6 52
-p6x6 88
-p6x6 124
-p6x6 160
-p6x6 196
-
-pl 232 243
-pl 244 255
diff --git a/.bin/avesta.sed b/.bin/avesta.sed
deleted file mode 100755
index 7cedb1e..0000000
--- a/.bin/avesta.sed
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env -S sed -f
-s/ΔΜ/π¬/g
-s/tΜ°/π¬/g
-s/Ε‘Μ£/π¬΄/g
-s/Ε‘Μ/π¬³/g
-s/Δ
Μ/π¬
/g
-s/Εα΅/π¬€/g
-s/ΙΜ/π¬/g
-s/ΕΜ/π¬£/g
-s/xΜ/π¬/g
-s/xα΅/π¬/g
-s/a/π¬/g
-s/Δ/π¬/g
-s/Γ₯/π¬/g
-s/Δ
/π¬/g
-s/Ι/π¬/g
-s/e/π¬/g
-s/Δ/π¬/g
-s/o/π¬/g
-s/Ε/π¬/g
-s/i/π¬/g
-s/Δ«/π¬/g
-s/u/π¬/g
-s/Ε«/π¬/g
-s/k/π¬/g
-s/x/π¬/g
-s/g/π¬/g
-s/Δ‘/π¬/g
-s/Ξ³/π¬/g
-s/c/π¬/g
-s/j/π¬/g
-s/t/π¬/g
-s/ΞΈ/π¬/g
-s/d/π¬/g
-s/Ξ΄/π¬/g
-s/p/π¬/g
-s/f/π¬/g
-s/b/π¬ /g
-s/Ξ²/π¬‘/g
-s/Ε/π¬’/g
-s/n/π¬₯/g
-s/Ε/π¬¦/g
-s/αΉ/π¬§/g
-s/m/π¬¨/g
-s/mΜ¨/π¬©/g
-s/αΊ/π¬«/g
-s/y/π¬ͺ/g
-s/v/㪪/g
-s/r/π¬/g
-s/s/π¬―/g
-s/z/π¬°/g
-s/Ε‘/π¬±/g
-s/ΕΎ/π¬²/g
-s/h/π¬΅/g
diff --git a/.bin/bvg.sh b/.bin/bvg.sh
deleted file mode 100755
index 690e021..0000000
--- a/.bin/bvg.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/sh
-interesting="U6 N6 140 M46 184 N84"
-
-curl -sSL 'https://www.bvg.de/disruption-reports/q' \
- --data-raw '{"variables":{},"query":"{
- allDisruptions {
- disruptions {
- meldungsId
- linie
- verkehrsmittel
- __typename
- ... on Traffic {
- datum
- gueltigVonDatum
- gueltigVonZeit
- gueltigBisDatum
- gueltigBisZeit
- richtungName
- richtungHafasId
- beginnAbschnittName
- beginnAbschnittHafasId
- endeAbschnittName
- endeAbschnittHafasId
- textIntUrsache
- sev
- textIntAuswirkung
- umfahrung
- textWAPSMSUrsache
- textWAPSMSAuswirkung
- prioritaet
- __typename
- }
- }
- __typename
- }
- }"}' \
- | jq --arg interesting "$interesting" '
- .data.allDisruptions.disruptions
- | map(select(
- (.linie as $linie
- | $interesting
- | split(" ")
- | index($linie))
- and (.["__typename"] == "Traffic")
- ))
- '
diff --git a/.bin/chunk-pdf b/.bin/chunk-pdf
deleted file mode 100755
index 86b2b69..0000000
--- a/.bin/chunk-pdf
+++ /dev/null
@@ -1,23 +0,0 @@
-#! /usr/bin/env nix-shell
-#! nix-shell -i bash -p pdftk gnugrep
-set -efu
-
-INPUT_FILE="${2:?Pass the PDF path as second argument.}"
-PAGES_PER_REPORT="${1:?Pass the chunk size as first argument.}"
-
-if [ ! -f "$INPUT_FILE" ]; then
- echo >&2 "File $INPUT_FILE does not exist."
- exit 1
-fi
-
-TOTAL_PAGES="$(pdftk "$INPUT_FILE" dump_data | grep NumberOfPages | cut -f2 -d' ')"
-
-RUNS=$((TOTAL_PAGES/PAGES_PER_REPORT))
-
-for run in $(seq 0 "$((RUNS-1))"); do
- start_page=$((run*PAGES_PER_REPORT+1))
- end_page=$(((run+1)*PAGES_PER_REPORT))
- output_file="chunk_$((run+1)).pdf"
- echo "splitting $INPUT_FILE from $start_page to $end_page into $output_file"
- pdftk "$INPUT_FILE" cat "$start_page-$end_page" output "$output_file"
-done
diff --git a/.bin/csv2json b/.bin/csv2json
deleted file mode 100755
index 064e4ef..0000000
--- a/.bin/csv2json
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env python3
-
-import csv
-import json
-import sys
-import argparse
-
-parser = argparse.ArgumentParser()
-parser.add_argument("--delimiter", "-d", default=",", help="CSV field separator")
-
-args = parser.parse_args()
-
-if __name__ == "__main__":
- json.dump(list(csv.DictReader(sys.stdin, delimiter=args.delimiter)), sys.stdout)
diff --git a/.bin/fix-sd.sh b/.bin/fix-sd.sh
deleted file mode 100755
index 456a8ff..0000000
--- a/.bin/fix-sd.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-set -xfu
-
-drive="$1"
-mountpoint="/media/sd-card-$(date +%s)"
-backup_directory="$(pwd)"
-
-trap clean EXIT
-clean() {
- umount "$mountpoint"
- rmdir "$mountpoint"
- fsck.exfat "$drive"
-}
-
-filenames="$(fsck.exfat "$drive" 2>&1 | sed -nE "s/.* file '(.*?)' is not allocated.*/\1/p")"
-mkdir "$mountpoint"
-mount "$drive" "$mountpoint"
-
-echo "$filenames" | while read -r filename; do
- find "$mountpoint" -type f -name "$filename" -exec mv {} "$backup_directory" \;
-done
diff --git a/.bin/json2csv b/.bin/json2csv
deleted file mode 100755
index 0f1f7a1..0000000
--- a/.bin/json2csv
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python3
-import csv
-import json
-import sys
-
-if __name__ == "__main__":
- json_list = json.load(sys.stdin)
- if not isinstance(json_list, list):
- print("JSON object is not a list.", file=sys.stderr)
- sys.exit(1)
- if len(json_list) == 0:
- print("JSON list is empty.", file=sys.stderr)
- sys.exit(1)
- keys = set()
- for element in json_list:
- if isinstance(element, dict):
- keys |= element.keys()
- else:
- print("Non-dict element:", element, file=sys.stderr)
- sys.exit(1)
- writer = csv.DictWriter(sys.stdout, fieldnames=list(keys))
- writer.writeheader()
- for element in json_list:
- writer.writerow(element)
diff --git a/.bin/mp3player-write b/.bin/mp3player-write
deleted file mode 100755
index 7072631..0000000
--- a/.bin/mp3player-write
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/env bash
-
-# Usage:
-# ./mp3_transfer.sh -s 1.3 /mnt/mp3player file1.m4a file2.m4a ...
-
-set -e
-
-# Default speed
-SPEED=1.0
-
-# Parse options
-while getopts ":s:" opt; do
- case $opt in
- s)
- SPEED=$OPTARG
- ;;
- \?)
- echo "Invalid option: -$OPTARG" >&2
- exit 1
- ;;
- :)
- echo "Option -$OPTARG requires a value." >&2
- exit 1
- ;;
- esac
-done
-
-# Shift past the options
-shift $((OPTIND -1))
-
-# Check arguments
-if [ "$#" -lt 2 ]; then
- echo "Usage: $0 [-s speed] MOUNT_POINT FILE1 [FILE2 ...]"
- exit 1
-fi
-
-MOUNT_POINT=$1
-shift
-FILES=("$@")
-
-# Check mount point exists
-if [ ! -d "$MOUNT_POINT" ]; then
- echo "Error: Mount point '$MOUNT_POINT' does not exist."
- exit 1
-fi
-
-# Estimate required space
-TOTAL_SIZE=0
-for f in "${FILES[@]}"; do
- if [ ! -f "$f" ]; then
- echo "Warning: File '$f' does not exist, skipping."
- continue
- fi
- # Get file size in bytes
- FILE_SIZE=$(stat --printf="%s" "$f")
- # Estimate mp3 output size: roughly 1/2 of original m4a (adjust if needed)
- TOTAL_SIZE=$((TOTAL_SIZE + FILE_SIZE / 2))
-done
-
-# Get available space in bytes
-AVAILABLE=$(df --output=avail "$MOUNT_POINT" | tail -n 1)
-AVAILABLE=$((AVAILABLE * 1024)) # df reports in KB
-
-if [ "$TOTAL_SIZE" -gt "$AVAILABLE" ]; then
- echo "Error: Not enough space on device. Required: $TOTAL_SIZE bytes, Available: $AVAILABLE bytes"
- exit 1
-fi
-
-echo "Enough space available. Starting conversion..."
-
-sanitize_filename() {
- local name="$1"
- # Remove path, keep only base name
- name=$(basename "$name")
- # Remove any extension
- name=${name%.*}
- # Replace spaces and special chars with underscore
- name=$(echo "$name" | tr ' ' '_' | tr -cd '[:alnum:]_-')
- # Truncate to max 50 chars
- echo "${name:0:50}"
-}
-
-# Convert and copy files
-for f in "${FILES[@]}"; do
- if [ ! -f "$f" ]; then
- continue
- fi
-
- # Determine the next prefix
- existing_prefixes=$(ls "$MOUNT_POINT" | grep -E '^[0-9].*\.mp3$' | sed -E 's/^([0-9]).*/\1/' | sort -n | uniq)
- for i in {0..9}; do
- if ! echo "$existing_prefixes" | grep -q "^$i$"; then
- PREFIX=$i
- break
- fi
- done
-
- echo "Using prefix: $PREFIX"
-
- BASENAME=$(sanitize_filename "$f")
- OUT_PATTERN="$MOUNT_POINT/${PREFIX}_%03d_${BASENAME}.mp3"
-
- echo "Converting '$f' to '$OUT_PATTERN' at speed $SPEED..."
-
- ffmpeg -nostdin -i "$f" \
- -filter:a "atempo=$SPEED" \
- -ar 22050 -ac 1 -c:a libmp3lame -b:a 32k \
- -f segment -segment_time 300 \
- "$OUT_PATTERN"
-
- # Update prefix for next file
- # Count how many segments were created
- SEG_COUNT=$(ls "$MOUNT_POINT" | grep -E "^${PREFIX}[0-9]{2}_" | wc -l)
- PREFIX=$((PREFIX + SEG_COUNT))
-done
-
-echo "All files processed successfully."
diff --git a/.bin/mushakkil.sh b/.bin/mushakkil.sh
deleted file mode 100755
index 08716d4..0000000
--- a/.bin/mushakkil.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-curl -sSL 'https://diac.alsharekh.org/Diac/DiacText' \
- -H "Content-Type: application/json" \
- --data-raw "$(jq --raw-input '{word: ., type: 1}')" \
- --compressed \
- | jq -r .diacWord
diff --git a/.bin/nix-haddock-index b/.bin/nix-haddock-index
deleted file mode 100755
index 294e3df..0000000
--- a/.bin/nix-haddock-index
+++ /dev/null
@@ -1,93 +0,0 @@
-#! /usr/bin/env nix-shell
-#! nix-shell -i bash -p coreutils gnugrep gnused graphviz
-#
-# usage: nix-haddock-index
-#
-# Run this script in an environment where either NIX_GHC is set, or the ghc
-# executable exists, to generate an HTML index file pointing to all Haddock
-# files accessible to the respective ghc version.
-#
-# Additionally, an SVG dependency graph of all packages is linked at the
-# bottom of the index file.
-#
-# Note: all files will be generated in /tmp, and won't be deleted automatically
-#
-
-set -efux
-
-if test -z "${NIX_GHC-}"; then
- NIX_GHC=$(readlink -f "$(type -P ghc)")
-fi
-
-if ! echo $NIX_GHC | grep -q '^/nix/store/'; then
- printf '%s: error: unsupported GHC executable path (not in Nix store): %q\n' \
- "$0" \
- "$NIX_GHC" \
- >&2
- exit -1
-fi
-
-NIX_GHC_PREFIX=$(dirname "$(dirname "$NIX_GHC")")
-NIX_GHC_DOCDIR=$NIX_GHC_PREFIX/share/doc/ghc/html
-
-main() {
-
- hash=$(echo $NIX_GHC_PREFIX | sed -n 's|^/nix/store/\([a-z0-9]\+\).*|\1|p')
- title="Haddock index for $NIX_GHC_PREFIX"
-
- header=$(
- printf 'Haddock index for %s\n' \
- $NIX_GHC_PREFIX \
- $NIX_GHC_PREFIX \
- )
-
- suffix=${hash:+-$hash}
- index_file=/tmp/haddock$suffix-index.html
- svg_file=/tmp/haddock$suffix.svg
-
- #if ! test -e $index_file; then
- eval "$(
- echo 'gen_index() {'
- echo ' html_head'
- "$NIX_GHC_PREFIX"/bin/ghc-pkg dump | sed -n '
- s/^---$/ reset/p
- s/^\(name\|version\):\s*\([-A-Za-z0-9_.]\+\)$/ \1=\2/p
- s/^haddock-html:\s*\([-A-Za-z0-9_./]\+\)$/ haddock_html \1/p
- '
- echo ' html_foot'
- echo '}'
- )"
-
- gen_index > $index_file
- #fi
-
- #if ! test -e $svg_file; then
- "$NIX_GHC_PREFIX"/bin/ghc-pkg dot | tred | dot -Tsvg | sed '
- s/