about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xbuild.sh6
-rw-r--r--flake.lock100
-rw-r--r--flake.nix3
-rw-r--r--flake/default.nix4
-rw-r--r--flake/nixosConfigurations/default.nix4
-rw-r--r--flake/packages/default.nix5
-rw-r--r--hosts/apzu/default.nix86
-rw-r--r--hosts/tiamat/default.nix101
-rw-r--r--lib/default.nix69
-rw-r--r--modules/by-name/di/direnv/module.nix4
-rw-r--r--modules/by-name/lf/lf/colors5
-rwxr-xr-xmodules/by-name/lf/lf/commands/base.sh78
-rw-r--r--modules/by-name/lf/lf/commands/default.nix226
-rwxr-xr-xmodules/by-name/lf/lf/commands/run.sh30
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/archive.sh77
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/archive_compress.sh63
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/archive_decompress.sh23
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/broot_jump.sh25
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/cd_project_root.sh19
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/chmod.sh16
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/clear_trash.sh8
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/dl_file.sh43
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/dragon.sh9
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/dragon_individual.sh7
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/dragon_stay.sh9
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/execute.sh5
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/follow_link.sh13
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/fzf_jump.sh24
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/go_project_root.sh22
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/mk_directory.sh (renamed from modules/by-name/lf/lf/commands/scripts/mk_dir.sh)7
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/mk_file.sh7
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/mk_file_and_edit.sh33
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/mk_link.sh (renamed from modules/by-name/lf/lf/commands/scripts/mk_ln.sh)16
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/mk_scr_temp.sh38
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/mk_script.sh (renamed from modules/by-name/lf/lf/commands/scripts/mk_scr_default.sh)21
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/restore_trash.sh16
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/set_clipboard_path.sh9
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/set_wall_paper.sh19
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/set_wallpaper.sh19
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/stripspace.sh36
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/trash.sh26
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/trash_clear.sh9
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/trash_restore.sh17
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/unarchive.sh36
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/view_file.sh5
-rw-r--r--modules/by-name/lf/lf/keybindings/default.nix27
-rw-r--r--modules/by-name/lo/locale/keymaps/us_modified.xkb9
-rw-r--r--modules/by-name/lo/locale/module.nix5
-rw-r--r--modules/by-name/mp/mpv/module.nix315
-rw-r--r--modules/by-name/nv/nvim/module.nix3
-rw-r--r--modules/by-name/ol/ollama/module.nix10
-rwxr-xr-xmodules/by-name/ri/river/init_base.sh22
-rw-r--r--modules/by-name/ri/river/module.nix199
-rw-r--r--modules/by-name/so/sound/module.nix2
-rw-r--r--modules/by-name/sw/swaylock/images/GTDcanonical.png (renamed from modules/home.legacy/conf/swaylock/GTDcanonical.png)bin34659 -> 34659 bytes
-rw-r--r--modules/by-name/sw/swaylock/images/commands.jpg (renamed from modules/home.legacy/conf/swaylock/commands.jpg)bin629695 -> 629695 bytes
-rw-r--r--modules/by-name/sw/swaylock/images/duwon-lee-tempano-port.jpg (renamed from modules/home.legacy/conf/swaylock/duwon-lee-tempano-port.jpg)bin671125 -> 671125 bytes
-rw-r--r--modules/by-name/sw/swaylock/images/gnu.png (renamed from modules/home.legacy/conf/swaylock/gnu.png)bin327518 -> 327518 bytes
-rw-r--r--modules/by-name/sw/swaylock/module.nix27
-rw-r--r--modules/by-name/yt/yt/input.conf4
-rw-r--r--modules/by-name/yt/yt/mpv.conf1
-rw-r--r--modules/by-name/zs/zsh/module.nix191
-rw-r--r--modules/common/abstract-nord.png (renamed from modules/home.legacy/files/wallpaper/abstract-nord.png)bin140219 -> 140219 bytes
-rw-r--r--modules/common/default.nix (renamed from flake/nixosConfigurations/common.nix)77
-rw-r--r--modules/home.legacy/conf/default.nix2
-rw-r--r--modules/home.legacy/conf/firefox/config/bookmarks/default.nix22
-rw-r--r--modules/home.legacy/conf/firefox/config/extensions/extensions.json6
-rw-r--r--modules/home.legacy/conf/firefox/config/prefs/override.js2
-rw-r--r--modules/home.legacy/conf/firefox/config/search/engines/default.nix6
-rw-r--r--modules/home.legacy/conf/mail/default.nix33
-rw-r--r--modules/home.legacy/conf/mbsync/default.nix17
-rw-r--r--modules/home.legacy/conf/mpv/default.nix10
-rw-r--r--modules/home.legacy/conf/swaylock/default.nix10
-rw-r--r--modules/home.legacy/files/default.nix1
-rw-r--r--modules/home.legacy/files/wallpaper/default.nix14
-rw-r--r--modules/home.legacy/pkgs/default.nix69
-rw-r--r--modules/home.legacy/wms/default.nix1
-rw-r--r--modules/home.legacy/wms/river/default.nix91
-rwxr-xr-xmodules/home.legacy/wms/river/init.sh80
-rw-r--r--modules/home.legacy/wms/river/res/keys.ron58
-rw-r--r--modules/home.legacy/wms/river/res/moonlander.ron66
-rw-r--r--pkgs/by-name/bl/blake3/add_cargo_lock.patch431
-rw-r--r--pkgs/by-name/bl/blake3/package.nix29
-rw-r--r--pkgs/by-name/ge/generate_moz_extension/Cargo.lock87
-rw-r--r--pkgs/by-name/ge/generate_moz_extension/Cargo.toml6
-rw-r--r--pkgs/by-name/ge/generate_moz_extension/flake.lock12
-rw-r--r--pkgs/by-name/lf/lf-make-map/Cargo.lock36
-rw-r--r--pkgs/by-name/lf/lf-make-map/Cargo.toml6
-rw-r--r--pkgs/by-name/lf/lf-make-map/flake.lock12
-rwxr-xr-xpkgs/by-name/lo/lock/lock.sh13
-rw-r--r--pkgs/by-name/lo/lock/package.nix13
-rw-r--r--pkgs/by-name/ne/neorg/package.nix5
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/.envrc3
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/.gitignore2
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/Cargo.lock334
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/Cargo.toml71
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/TODO1
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/contrib/example.json5
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/flake.lock27
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/flake.nix25
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/package.nix14
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/cli.rs11
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/key_map/commands.rs109
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs79
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/main.rs34
-rwxr-xr-xpkgs/by-name/ri/river-mk-keymap/update.sh3
-rw-r--r--pkgs/by-name/ri/river-start/package.nix14
-rwxr-xr-xpkgs/by-name/ri/river-start/river-start.sh10
-rw-r--r--pkgs/by-name/sc/screenshot_persistent/package.nix13
-rwxr-xr-xpkgs/by-name/sc/screenshot_persistent/screenshot_persistent.sh10
-rw-r--r--pkgs/by-name/up/update-vim-plugins/flake.lock6
-rw-r--r--pkgs/by-name/up/update-vim-plugins/poetry.lock355
-rw-r--r--pkgs/by-name/up/update-vim-plugins/update_vim_plugins/update.py2
-rw-r--r--pkgs/by-name/vi/vimExtraPlugins/plugins/plugins.md4
-rw-r--r--pkgs/by-name/yt/yt/package.nix22
-rw-r--r--tests/by-name/nv/nvim-neorg/test.desc2
116 files changed, 2596 insertions, 1988 deletions
diff --git a/build.sh b/build.sh
index 3c3d387c..0e574a3a 100755
--- a/build.sh
+++ b/build.sh
@@ -1,6 +1,8 @@
 #!/usr/bin/env sh
 
 host="${1-tiamat}"
+[ "$#" -gt 0 ] && shift 1
+
 root="$(git rev-parse --show-toplevel)"
 
 SYSTEM_OUT="$root/result-system"
@@ -19,7 +21,7 @@ check() {
 }
 
 build_system() {
-    _val="$(nix build ".#nixosConfigurations.$host.config.system.build.toplevel" --print-out-paths --no-link)"
+    _val="$(nix build ".#nixosConfigurations.$host.config.system.build.toplevel" --print-out-paths --no-link "$@")"
     exit_val="$?"
 
     if [ "$exit_val" -ne 0 ]; then
@@ -30,7 +32,7 @@ build_system() {
     fi
 }
 
-system="$(build_system)"
+system="$(build_system "$@")"
 [ "$system" = "1" ] && exit 1
 
 check "$SYSTEM_OUT"
diff --git a/flake.lock b/flake.lock
index c52bac02..e93fc0f6 100644
--- a/flake.lock
+++ b/flake.lock
@@ -57,11 +57,11 @@
     },
     "crane": {
       "locked": {
-        "lastModified": 1737689766,
-        "narHash": "sha256-ivVXYaYlShxYoKfSo5+y5930qMKKJ8CLcAoIBPQfJ6s=",
+        "lastModified": 1739936662,
+        "narHash": "sha256-x4syUjNUuRblR07nDPeLDP7DpphaBVbUaSoeZkFbGSk=",
         "owner": "ipetkov",
         "repo": "crane",
-        "rev": "6fe74265bbb6d016d663b1091f015e2976c4a527",
+        "rev": "19de14aaeb869287647d9461cbd389187d8ecdb7",
         "type": "github"
       },
       "original": {
@@ -97,11 +97,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1738148035,
-        "narHash": "sha256-KYOATYEwaKysL3HdHdS5kbQMXvzS4iPJzJrML+3TKAo=",
+        "lastModified": 1739841949,
+        "narHash": "sha256-lSOXdgW/1zi/SSu7xp71v+55D5Egz8ACv0STkj7fhbs=",
         "owner": "nix-community",
         "repo": "disko",
-        "rev": "18d0a984cc2bc82cf61df19523a34ad463aa7f54",
+        "rev": "15dbf8cebd8e2655a883b74547108e089f051bf0",
         "type": "github"
       },
       "original": {
@@ -133,11 +133,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1736143030,
-        "narHash": "sha256-+hu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU=",
+        "lastModified": 1738453229,
+        "narHash": "sha256-7H9XgNiGLKN1G1CgRh0vUL4AheZSYzPm+zmZ7vxbJdo=",
         "owner": "hercules-ci",
         "repo": "flake-parts",
-        "rev": "b905f6fc23a9051a6e1b741e1438dbfc0634c6de",
+        "rev": "32ea77a06711b758da0ad9bd6a844c5740a87abd",
         "type": "github"
       },
       "original": {
@@ -265,11 +265,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1738145391,
-        "narHash": "sha256-/9mfbWYN9HDQbKa2HdAe2T5e3FfY8e4eqc1FIvAyvLg=",
+        "lastModified": 1740208222,
+        "narHash": "sha256-FqgPcK5BK+Mc4cGBCGz555UsVd/TQK9FvmuamBWu+ZY=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "1b4f2a48168b3d90e11365552d1e7e601a4be6b6",
+        "rev": "f4a07823a298deff0efb0db30f9318511de7c232",
         "type": "github"
       },
       "original": {
@@ -358,11 +358,11 @@
     },
     "library": {
       "locked": {
-        "lastModified": 1738161079,
-        "narHash": "sha256-YDiu0DbtwOSo1GO3D9A0Q+dHzsYJ6pJ8ZYEkgmK1szI=",
+        "lastModified": 1738443114,
+        "narHash": "sha256-IV7n/l3rFoz5UuavrDv0a7IIOPne0jDQVmJAR8bve8U=",
         "ref": "prime",
-        "rev": "847a8167fe3b52c3b8e19017b31a97e12ad411ea",
-        "revCount": 16,
+        "rev": "65bf71bb6ef05ce684924a1dc248bb2e8e2869fb",
+        "revCount": 17,
         "type": "git",
         "url": "https://git.foss-syndicate.org/vhack.eu/nix-library"
       },
@@ -379,11 +379,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1738033138,
-        "narHash": "sha256-qlIM8A3bdL9c6PexhpS+QyZLO9y/8a3V75HVyJgDE5Q=",
+        "lastModified": 1739933872,
+        "narHash": "sha256-UhuvTR4OrWR+WBaRCZm4YMkvjJhZ1KZo/jRjE41m+Ek=",
         "owner": "lnl7",
         "repo": "nix-darwin",
-        "rev": "349a74c66c596ef97ee97b4d80a3ca61227b6120",
+        "rev": "6ab392f626a19f1122d1955c401286e1b7cf6b53",
         "type": "github"
       },
       "original": {
@@ -420,11 +420,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1737861961,
-        "narHash": "sha256-LIRtMvAwLGb8pBoamzgEF67oKlNPz4LuXiRPVZf+TpE=",
+        "lastModified": 1739676768,
+        "narHash": "sha256-U1HQ7nzhJyVVXUgjU028UCkbLQLEIkg42+G7iIiBmlU=",
         "owner": "nix-community",
         "repo": "nix-index-database",
-        "rev": "79b7b8eae3243fc5aa9aad34ba6b9bbb2266f523",
+        "rev": "ae15068e79e22b76c344f0d7f8aed1bb1c5b0b63",
         "type": "github"
       },
       "original": {
@@ -464,11 +464,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1738170240,
-        "narHash": "sha256-4Sj34kjdmGVwwvCPOL4zztLOLMUv2jfvBDkvq6/KySc=",
+        "lastModified": 1739902813,
+        "narHash": "sha256-BgOQcKKz7VNvSHIbBllHisv32HvF3W3ALF9sdnC++V8=",
         "owner": "nix-community",
         "repo": "nixvim",
-        "rev": "e908e344f4cd7b3eb629b93e8af312888f3ee681",
+        "rev": "0ab9947137cd034ec64eb5cd9ede94e53af21f50",
         "type": "github"
       },
       "original": {
@@ -502,11 +502,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1737885589,
-        "narHash": "sha256-Zf0hSrtzaM1DEz8//+Xs51k/wdSajticVrATqDrfQjg=",
+        "lastModified": 1739866667,
+        "narHash": "sha256-EO1ygNKZlsAC9avfcwHkKGMsmipUk1Uc0TbrEZpkn64=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "852ff1d9e153d8875a83602e03fdef8a63f0ecf8",
+        "rev": "73cf49b8ad837ade2de76f87eb53fc85ed5d4680",
         "type": "github"
       },
       "original": {
@@ -518,11 +518,11 @@
     },
     "nixpkgs-lib": {
       "locked": {
-        "lastModified": 1737853225,
-        "narHash": "sha256-ZqbbvE9MVNHxSObvAoqRExBsQpfz81u3Ry77agBJIyo=",
+        "lastModified": 1739667890,
+        "narHash": "sha256-7QtSNdCEbYG1v+ZVrFWhBkhlo2GWehPffWC0BP1VZSo=",
         "owner": "nix-community",
         "repo": "nixpkgs.lib",
-        "rev": "31d08f4e55442d13eb8766b4d6852d9fb8292382",
+        "rev": "9b883b6d4d3bd580734ddb4b5bfde8ebffd26559",
         "type": "github"
       },
       "original": {
@@ -549,11 +549,11 @@
     },
     "nixpkgs-stable": {
       "locked": {
-        "lastModified": 1738023785,
-        "narHash": "sha256-BPHmb3fUwdHkonHyHi1+x89eXB3kA1jffIpwPVJIVys=",
+        "lastModified": 1739923778,
+        "narHash": "sha256-BqUY8tz0AQ4to2Z4+uaKczh81zsGZSYxjgvtw+fvIfM=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "2b4230bf03deb33103947e2528cac2ed516c5c89",
+        "rev": "36864ed72f234b9540da4cf7a0c49e351d30d3f1",
         "type": "github"
       },
       "original": {
@@ -590,11 +590,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1737924095,
-        "narHash": "sha256-9RO/IlxiE7bpY7GYsdDMNB533PnDOBo9UvYyXXqlN4c=",
+        "lastModified": 1739738736,
+        "narHash": "sha256-Rl4Fw+3PsLTEzzUGlB8kePaiIersDbv5voAif3D6LoM=",
         "owner": "NuschtOS",
         "repo": "search",
-        "rev": "5efc9c966bb9bdad07a3c28667eac38b758c6f18",
+        "rev": "9ff62c8e1fbe5dc649dee680c7eb4935936c8ac3",
         "type": "github"
       },
       "original": {
@@ -620,11 +620,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1736884309,
-        "narHash": "sha256-eiCqmKl0BIRiYk5/ZhZozwn4/7Km9CWTbc15Cv+VX5k=",
+        "lastModified": 1739883580,
+        "narHash": "sha256-3ydikhrNaWy8j0cqHju/94PcD4GZ9T4Ju4rHh34oz3k=",
         "owner": "nix-community",
         "repo": "poetry2nix",
-        "rev": "75d0515332b7ca269f6d7abfd2c44c47a7cbca7b",
+        "rev": "d90f9db68a4bda31c346be16dfd8d3263be4547e",
         "type": "github"
       },
       "original": {
@@ -675,11 +675,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1735599473,
-        "narHash": "sha256-lKKA9AI7uk+G+OY4fX3EcnTWqq9pr7Vryxxrm4aiT28=",
+        "lastModified": 1738406121,
+        "narHash": "sha256-N3scpt+nwPbqzsRs4gjZpDiBivfPRQJ0D75bPeYhHME=",
         "ref": "prime",
-        "rev": "a91e8256a3adc1ab7ee94bfcea7198b51cfb6b37",
-        "revCount": 18,
+        "rev": "2b6889092e5839c8987e800f1d3d847dd5b50153",
+        "revCount": 19,
         "type": "git",
         "url": "https://git.foss-syndicate.org/bpeetz/qmk_layout.git"
       },
@@ -802,11 +802,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1738117527,
-        "narHash": "sha256-GFviGfaezjGLFUlxdv3zyC7rSZvTXqwcG/YsF6MDkOw=",
+        "lastModified": 1740191166,
+        "narHash": "sha256-WqRxO1Afx8jPYG4CKwkvDFWFvDLCwCd4mxb97hFGYPg=",
         "owner": "oxalica",
         "repo": "rust-overlay",
-        "rev": "6a3dc6ce4132bd57359214d986db376f2333c14d",
+        "rev": "74a3fb71b0cc67376ab9e7c31abcd68c813fc226",
         "type": "github"
       },
       "original": {
@@ -930,11 +930,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1738070913,
-        "narHash": "sha256-j6jC12vCFsTGDmY2u1H12lMr62fnclNjuCtAdF1a4Nk=",
+        "lastModified": 1739829690,
+        "narHash": "sha256-mL1szCeIsjh6Khn3nH2cYtwO5YXG6gBiTw1A30iGeDU=",
         "owner": "numtide",
         "repo": "treefmt-nix",
-        "rev": "bebf27d00f7d10ba75332a0541ac43676985dea3",
+        "rev": "3d0579f5cc93436052d94b73925b48973a104204",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index d8e38f34..6dd46d91 100644
--- a/flake.nix
+++ b/flake.nix
@@ -297,6 +297,8 @@
     system = "x86_64-linux";
     sysLib = shell_library.lib.${system};
 
+    baseLib = import ./lib {inherit (pkgs) lib;};
+
     inherit (library) nixLib;
 
     pkgsStable = nixpkgs-stable.legacyPackages.${system};
@@ -323,6 +325,7 @@
         myPkgs
         system
         sysLib
+        baseLib
         nixpkgs_as_input
         nixpkgs_open_prs
         # modules
diff --git a/flake/default.nix b/flake/default.nix
index be6d2b70..c942c678 100644
--- a/flake/default.nix
+++ b/flake/default.nix
@@ -4,6 +4,7 @@
   pkgs,
   pkgsStable,
   nixLib,
+  baseLib,
   myPkgs,
   system,
   sysLib,
@@ -43,6 +44,7 @@
       shell_library
       sysLib
       nixLib
+      baseLib
       templates
       # modules
       home-manager
@@ -111,6 +113,8 @@ in {
 
   formatter."${system}" = treefmtEval.config.build.wrapper;
 
+  baseLib."${system}" = baseLib;
+
   apps."${system}" = import ./apps {inherit self system;};
 
   devShells."${system}" = {
diff --git a/flake/nixosConfigurations/default.nix b/flake/nixosConfigurations/default.nix
index b0a02580..0c2f8c90 100644
--- a/flake/nixosConfigurations/default.nix
+++ b/flake/nixosConfigurations/default.nix
@@ -9,6 +9,7 @@
   shell_library,
   sysLib,
   nixLib,
+  baseLib,
   templates,
   # modules
   home-manager,
@@ -38,7 +39,7 @@
     serverphone.nixosModules.default
 
     ../../modules
-    ./common.nix
+    ../../modules/common
   ];
 
   specialArgs = {
@@ -50,6 +51,7 @@
       shell_library
       sysLib
       nixLib
+      baseLib
       # extra information
       system
       # modules
diff --git a/flake/packages/default.nix b/flake/packages/default.nix
index a8fc2d64..82924a25 100644
--- a/flake/packages/default.nix
+++ b/flake/packages/default.nix
@@ -23,7 +23,10 @@
         # NOTE: This is copied from `nixvim`, and could be achieved by setting
         # `config.wrapRc` to `true`. But I have yet to find a way to set this in this
         # context, but not in the general context.  <2024-11-09>
-        wrapped = config.build.package.override (prev: {
+        # NOTE: I'm not sure why we need `nvimPackage` instead of just the `package`
+        # attribute here, but the bare `package` attribute does not provide a `override`
+        # function. <2025-02-02>
+        wrapped = config.build.nvimPackage.override (prev: {
           wrapperArgs =
             (
               if lib.isString prev.wrapperArgs
diff --git a/hosts/apzu/default.nix b/hosts/apzu/default.nix
index d0090339..331da147 100644
--- a/hosts/apzu/default.nix
+++ b/hosts/apzu/default.nix
@@ -1,4 +1,10 @@
-{...}: {
+{
+  lib,
+  pkgs,
+  baseLib,
+  config,
+  ...
+}: {
   imports = [
     ./hardware.nix
   ];
@@ -19,6 +25,84 @@
         laptop = true;
         backlight = "intel_backlight";
       };
+      river.init = {
+        mappings = {
+          layout = "dvorak-modified";
+          keymap =
+            {
+              # Focus change
+              "<Meta-T>" = {command = ["focus-view" "next"];};
+              "<Meta-N>" = {command = ["focus-view" "previous"];};
+              "<Meta+Ctrl-T>" = {command = ["focus-output" "next"];};
+              "<Meta+Ctrl-N>" = {command = ["focus-output" "previous"];};
+
+              # Standard programs
+              "<Meta-<ENTER>>" = {command = ["spawn" "${lib.getExe pkgs.alacritty}"];};
+              "<Meta+Shift-q>" = {command = ["exit"];};
+              "<Meta-L>" = {command = ["spawn" "${lib.getExe pkgs.lock}"];};
+
+              # Screenshot
+              "<PRINTSCREEN>" = {command = ["spawn" "${lib.getExe pkgs.screenshot_persistent}"];};
+
+              # Audio
+              "<MEDIA_RAISEVOLUME>" = {
+                command = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%+"];
+                modes = ["normal" "locked"];
+              };
+              "<MEDIA_LOWERVOLUME>" = {
+                command = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%-"];
+                modes = ["normal" "locked"];
+              };
+              "<MEDIA_MUTEVOLUME>" = {
+                command = ["spawn" "${lib.getExe pkgs.mpc} toggle"];
+                modes = ["normal" "locked"];
+              };
+
+              # Launcher
+              "<Meta-R>" = {command = ["spawn" "${lib.getExe pkgs.rofi} -show combi -modes combi -combi-modes 'window, drun, run' -show-icons"];};
+              "<Meta-<F1>>" = {command = ["spawn" "${lib.getExe config.home-manager.users.soispha.soispha.programs.neorg.package} dmenu"];};
+              "<Meta-<F2>>" = {command = ["spawn" "${lib.getExe pkgs.keepassxc}"];};
+              "<Meta-<F3>>" = {command = ["spawn" "${lib.getExe pkgs.signal-desktop}"];};
+              # "<Meta-<F4>>" = {command = ["spawn" "${lib.getExe pkgs.steam}"];};
+
+              # Client
+              "<Meta-f>" = {command = ["toggle-fullscreen"];};
+              "<Meta+Shift-c>" = {command = ["close"];};
+              "<Meta+Ctrl- >" = {command = ["toggle-float"];};
+              "<Meta+Ctrl-<ENTER>>" = {command = ["zoom"];};
+              "<Meta-o>" = {command = ["send-to-output" "next"];};
+              "<Meta+Shift-T>" = {command = ["swap" "next"];};
+              "<Meta+Shift-N>" = {command = ["swap" "previous"];};
+
+              # Toggle all tags
+              "<Meta-0>" = {command = ["set-focused-tags" (builtins.toString ((baseLib.pow 2 32) - 1))];};
+              "<Meta+Shift-0>" = {command = ["set-view-tags" (builtins.toString ((baseLib.pow 2 32) - 1))];};
+
+              # Mouse
+              "<MOUSE_LEFT>" = {
+                command = ["move-view"];
+                map_mode = "MapMouse";
+              };
+              "<MOUSE_RIGHT>" = {
+                command = ["resize-view"];
+                map_mode = "MapMouse";
+              };
+            }
+            // (
+              builtins.foldl' (acc: elem: acc // elem) {} (
+                builtins.map (index: let
+                  num = builtins.toString index;
+                  index2tag = input: builtins.toString (baseLib.pow 2 (input - 1));
+                in {
+                  "<Meta-${num}>" = {command = ["set-focused-tags" (index2tag index)];};
+                  "<Meta+Shift-${num}>" = {command = ["set-view-tags" (index2tag index)];};
+                  "<Meta+Shift+Ctrl-${num}>" = {command = ["toggle-view-tags" (index2tag index)];};
+                }) (builtins.genList (i: i + 1) 9)
+              )
+            );
+        };
+        screenSetupCode = {};
+      };
     };
 
     locale.enable = true;
diff --git a/hosts/tiamat/default.nix b/hosts/tiamat/default.nix
index 4e76675c..d18c0533 100644
--- a/hosts/tiamat/default.nix
+++ b/hosts/tiamat/default.nix
@@ -1,4 +1,12 @@
-{...}: {
+{
+  lib,
+  pkgs,
+  baseLib,
+  qmk_firmware,
+  system,
+  config,
+  ...
+}: {
   imports = [
     ./hardware.nix
   ];
@@ -24,6 +32,97 @@
     programs = {
       river = {
         unicodeInput.enable = true;
+        init = {
+          mappings = {
+            layout = "us";
+            keymap = let
+              map = key: "<Alt+Ctrl+Meta+Shift-${key}>";
+            in
+              (lib.mapAttrs' (name: value: lib.nameValuePair (map name) value) {
+                # Movement
+                "A" = {command = ["exit"];};
+                "B" = {command = ["close"];};
+
+                "C" = {command = ["focus-view" "previous"];};
+                "D" = {command = ["focus-view" "next"];};
+
+                "E" = {command = ["swap" "previous"];};
+                "F" = {command = ["swap" "next"];};
+
+                "G" = {command = ["zoom"];};
+
+                "H" = {command = ["toggle-fullscreen"];};
+                "I" = {command = ["toggle-float"];};
+
+                "J" = {command = ["send-to-output" "next"];};
+
+                "K" = {command = ["spawn" "${lib.getExe pkgs.alacritty}"];};
+                "L" = {command = ["spawn" "${lib.getExe pkgs.screenshot_persistent}"];};
+
+                # Audio
+                # "M" = {command = ["spawn" "video-pause toggle"]; modes = ["normal" "locked"]; };
+                "N" = {
+                  command = ["spawn" "${lib.getExe pkgs.mpc} toggle"];
+                  modes = ["normal" "locked"];
+                };
+
+                # Launcher
+                "O" = {command = ["spawn" "${lib.getExe pkgs.rofi} -show combi -modes combi -combi-modes 'window,drun,run' -show-icons"];};
+                "P" = {command = ["spawn" "${lib.getExe config.home-manager.users.soispha.soispha.programs.neorg.package} dmenu"];};
+                "Q" = {command = ["spawn" "${lib.getExe pkgs.keepassxc}"];};
+                # "R" = {command = ["spawn" "nheko"];};
+                "S" = {command = ["spawn" "${lib.getExe pkgs.signal-desktop}"];};
+                "T" = {command = ["spawn" "${lib.getExe pkgs.lock}"];};
+
+                "U" = {command = ["focus-output" "next"];};
+                "V" = {command = ["focus-previous-tags"];};
+                "W" = {command = ["send-to-previous-tags"];};
+                # "X" = {command = ["spawn" "bemenu-run"];};
+                # "Y" = {command = ["spawn" "bemenu-run"];};
+
+                # Toggle all tags
+                "0" = {command = ["set-focused-tags" "${builtins.toString ((baseLib.pow 2 32) - 1)}"];};
+
+                # Support Unicode input
+                "Z" = {command = ["spawn" "${lib.getExe qmk_firmware.packages.${system}.qmk_unicode_type} 106 65377"];};
+              })
+              // ({
+                  # TODO: add toggle-focus mapping
+
+                  # Toggle all tags
+                  "<Alt+Ctrl+Shift-0>" = {command = ["set-view-tags" "${builtins.toString ((baseLib.pow 2 32) - 1)}"];};
+
+                  # Mouse
+                  "<Meta-<MOUSE_LEFT>>" = {
+                    command = ["move-view"];
+                    map_mode = "MapMouse";
+                  };
+                  "<Meta-<MOUSE_RIGHT>>" = {
+                    command = ["resize-view"];
+                    map_mode = "MapMouse";
+                  };
+                }
+                // (
+                  builtins.foldl' (acc: elem: acc // elem) {} (
+                    builtins.map (index: let
+                      num = builtins.toString index;
+                      index2tag = input: builtins.toString (baseLib.pow 2 (input - 1));
+                    in {
+                      "${map num}" = {command = ["set-focused-tags" (index2tag index)];};
+                      "<Alt+Ctrl+Shift-${num}>" = {command = ["set-view-tags" (index2tag index)];};
+                      # "<Super+Shift+Ctrl-${num}>" = {command = ["toggle-view-tags" (index2tag index)];};
+                    }) (builtins.genList (i: i + 1) 9)
+                  )
+                ));
+          };
+          screenSetupCode = {
+            "DP-2" = {pos = "2560,0";};
+            "DP-1" = {
+              scale = "1.5";
+              pos = "0,0";
+            };
+          };
+        };
       };
     };
     locale = {
diff --git a/lib/default.nix b/lib/default.nix
new file mode 100644
index 00000000..80227cf4
--- /dev/null
+++ b/lib/default.nix
@@ -0,0 +1,69 @@
+{lib}: let
+  /*
+  Converts `number` from a binary number to a decimal one.
+
+  The input is indented to be a number composed only of `1`s and `0` (e.g., 10010.)
+
+  # Type
+
+  binaryToDecimal :: Int -> Int
+
+  # Arguments
+
+  number
+  : The sequence of `1`s and `0`s defining a binary number, in little endian.
+
+  # Examples
+
+  binaryToDecimal 1001
+  => 9
+  */
+  binaryToDecimal = number: let
+    binaryList =
+      builtins.map lib.strings.toInt (lib.lists.reverseList (lib.strings.stringToCharacters (builtins.toString number)));
+  in
+    builtins.foldl' (acc: num: acc + num) 0
+    (lib.lists.imap0 (index: elem: elem * (pow 2 index)) binaryList);
+
+  /*
+  source: https://github.com/NixOS/nix/issues/10387#issuecomment-2494597690
+
+  Raises the `base` to the power of `power`.
+
+  Considering the small input size and the lack of a built-in power function [2],
+  this naive power implementation should satisfy reasonable performance
+  requirements.
+
+  Due to the lack of a modulo and bitwise AND operator, it is questionable whether
+  the recursive exponentiation by squaring [1] implementation would even be
+  faster.
+
+  [1]: https://en.wikipedia.org/wiki/Exponentiation_by_squaring
+  [2]: https://github.com/NixOS/nix/issues/10387
+
+  # Type
+
+  pow :: Number -> Number -> Number
+
+  # Arguments
+
+  base
+  : The base number to be raised.
+
+  power
+  : The exponent to raise `base` to.
+
+  # Examples
+
+  pow 2 5
+  => 32
+  */
+  pow = base: power:
+    if power == 0
+    then 1
+    else if power > 0
+    then (base * (pow base (power - 1)))
+    else builtins.throw "Negative powers are not supported";
+in {
+  inherit binaryToDecimal pow;
+}
diff --git a/modules/by-name/di/direnv/module.nix b/modules/by-name/di/direnv/module.nix
index afe95712..1ddf3d5d 100644
--- a/modules/by-name/di/direnv/module.nix
+++ b/modules/by-name/di/direnv/module.nix
@@ -14,8 +14,8 @@ in {
     nix-direnv.enable = true;
     config = {
       warn_timeout = 0;
-      strict_env = true;
-      disable_stdin = true;
+      # strict_env = true;
+      # disable_stdin = true;
     };
   };
 }
diff --git a/modules/by-name/lf/lf/colors b/modules/by-name/lf/lf/colors
index 1c2853ec..17201e64 100644
--- a/modules/by-name/lf/lf/colors
+++ b/modules/by-name/lf/lf/colors
@@ -60,11 +60,6 @@ fi      00          # FILE
 # links to hide
 ~/.mozilla       01;08;30
 ~/.ssh           01;08;30
-~/.zshenv        01;08;30
-
-~/.steampid      01;08;30
-~/.steam         01;08;30
-~/.steampath     01;08;30
 
 # archives or compressed (dircolors defaults)
 *.tar   01;31
diff --git a/modules/by-name/lf/lf/commands/base.sh b/modules/by-name/lf/lf/commands/base.sh
new file mode 100755
index 00000000..61b59a7b
--- /dev/null
+++ b/modules/by-name/lf/lf/commands/base.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env sh
+
+# shellcheck disable=SC2269
+id="$id"
+
+# Prompt the user for input.
+# This will just _print_ the prompt, you still need to `read -r` the user's answer.
+#
+# # Type
+# prompt :: String
+#
+# # Arguments
+# $1
+# : The prompt to print for the user.
+prompt() {
+    printf "=> %s" "$1"
+}
+
+# Reads its Stdin into a temporary file and returns the path of the temporary file.
+# This is only really useful, if you want to pipe something into an while read loop that
+# should modify global variables. Piping directly into it will not work, because the shell
+# would just run it in a subshell, so you need this workaround.
+#
+# # Type
+# tmp :: <stdin> -> Path
+#
+# # Arguments
+#
+# # Examples
+# while read -r file; do
+#   set -- "$@" "$file"
+# done < "$(echo "$fx" | tmp)"
+tmp() {
+    __base_tmp_temporary_file="$(mktemp --tmpdir="$__base_tmp_temporary_directory")"
+    cat >"$__base_tmp_temporary_file"
+    echo "$__base_tmp_temporary_file"
+}
+__base_tmp_temporary_directory="$(mktemp --directory)"
+trap 'rm --recursive "$__base_tmp_temporary_directory"' EXIT
+
+# Run a lf command on the current lf client
+# All arguments will run in like they were typed directly into lf.
+# # TODO(@bpeetz): Escape the single quotes in the input arguments. <2025-02-02>
+#
+# # Type
+# lf_cmd :: [String]
+#
+# # Arguments
+# $1..$@
+# : The arguments composing the command to run.
+lf_cmd() {
+    arguments=""
+    for arg in "$@"; do
+        if [ -z "$arguments" ]; then
+            arguments="'$arg'"
+        else
+            arguments="$arguments '$arg'"
+        fi
+    done
+
+    lf -remote "send $id $arguments"
+}
+
+# Print an error message and exit with error code 1.
+# The error message will be printed to lf.
+#
+# # Type
+# die :: String
+#
+# # Arguments
+# $1
+# : The error message
+die() {
+    lf_cmd echo "Error: $1"
+    exit 1
+}
+
+# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/default.nix b/modules/by-name/lf/lf/commands/default.nix
index b3c9acab..9a709168 100644
--- a/modules/by-name/lf/lf/commands/default.nix
+++ b/modules/by-name/lf/lf/commands/default.nix
@@ -1,231 +1,157 @@
-{
-  pkgs,
-  sysLib,
-  shell_library,
-  system,
-  ...
-}: let
+{pkgs, ...}: let
   functionCall = {
     name,
     dependencies,
-    replacementStrings,
     ...
   }:
-    sysLib.writeShellScript {
+    pkgs.writeShellApplication {
       inherit name;
-      src = ./scripts/${name}.sh;
-      keepPath = true;
-      dependencies = dependencies ++ (builtins.attrValues {inherit (pkgs) dash coreutils;});
-      inherit replacementStrings;
+      text = builtins.readFile ./base.sh + builtins.readFile ./scripts/${name}.sh;
+      runtimeInputs = dependencies;
     }
     + "/bin/${name}";
 
+  # closes the lf tui
   shell = {
     name,
     dependencies,
-    replacementStrings ? null,
     ...
   }: ''
     ''${{
-      ${functionCall {inherit name dependencies replacementStrings;}}
+      ${functionCall {inherit name dependencies;}}
     }}
-  ''; # closes the lf tui
+  '';
+  # runs the command in the ui/term bar
   pipe = {
     name,
     dependencies,
-    replacementStrings ? null,
     ...
   }: ''
     %{{
-      ${functionCall {inherit name dependencies replacementStrings;}}
+      ${functionCall {inherit name dependencies;}}
     }}
-  ''; # runs the command in the ui/term bar
+  '';
+  # runs the command in the background
   async = {
     name,
     dependencies,
-    replacementStrings ? null,
     ...
   }: ''
     &{{
-      ${functionCall {inherit name dependencies replacementStrings;}}
+      ${functionCall {inherit name dependencies;}}
     }}
-  ''; # runs the command in the background
+  '';
+  # adds a prompt after the command has run
   wait = {
     name,
     dependencies,
-    replacementStrings ? null,
     ...
   }: ''
     !{{
-      ${functionCall {inherit name dependencies replacementStrings;}}
+      ${functionCall {inherit name dependencies;}}
     }}
-  ''; # adds a prompt after the command has run
+  '';
 in {
-  archive = shell {
-    name = "archive";
-    dependencies = builtins.attrValues {
-      inherit
-        (pkgs)
-        fzf
-        gnutar
-        xz
-        p7zip
-        zip
-        ;
-    };
-  };
-  broot_jump = shell {
-    name = "broot_jump";
-    dependencies = builtins.attrValues {
-      inherit (pkgs) broot;
-    };
+  archive_compress = shell {
+    name = "archive_compress";
+    dependencies = with pkgs; [
+      fzf
+      gnutar
+      xz
+      p7zip
+      zip
+    ];
+  };
+  archive_decompress = pipe {
+    name = "archive_decompress";
+    dependencies = with pkgs; [
+      gnutar
+      unzip
+      p7zip
+    ];
   };
+
+  cd_project_root = async {
+    name = "cd_project_root";
+    dependencies = [pkgs.git];
+  };
+
   chmod = pipe {
     name = "chmod";
     dependencies = [];
   };
-  clear_trash = shell {
-    name = "clear_trash";
-    dependencies = builtins.attrValues {
-      inherit
-        (pkgs)
-        fzf
-        trashy
-        ;
-    };
-  };
-  dl_file = pipe {
-    name = "dl_file";
-    dependencies = builtins.attrValues {
-      inherit
-        (pkgs)
-        xdragon
-        curl
-        ;
-    };
-  };
+
   dragon = pipe {
     name = "dragon";
-    dependencies = builtins.attrValues {
-      inherit
-        (pkgs)
-        xdragon
-        ;
-    };
+    dependencies = [pkgs.xdragon];
   };
   dragon_individual = pipe {
     name = "dragon_individual";
-    dependencies = builtins.attrValues {
-      inherit
-        (pkgs)
-        xdragon
-        ;
-    };
+    dependencies = [pkgs.xdragon];
   };
   dragon_stay = pipe {
     name = "dragon_stay";
-    dependencies = builtins.attrValues {
-      inherit
-        (pkgs)
-        xdragon
-        ;
-    };
+    dependencies = [pkgs.xdragon];
   };
+
   execute = shell {
     name = "execute";
     dependencies = [];
   };
   follow_link = pipe {
     name = "follow_link";
-    dependencies = with pkgs; [lf];
-  };
-  fzf_jump = shell {
-    name = "fzf_jump";
-    dependencies = builtins.attrValues {
-      inherit (pkgs) fzf lf gnused;
-    };
+    dependencies = [];
   };
-  mk_dir = pipe {
-    name = "mk_dir";
+
+  mk_directory = pipe {
+    name = "mk_directory";
     dependencies = [];
   };
   mk_file = shell {
     name = "mk_file";
     dependencies = [];
   };
-  mk_file_and_edit = shell {
-    name = "mk_file_and_edit";
+  mk_link = pipe {
+    name = "mk_link";
     dependencies = [];
   };
-  mk_ln = pipe {
-    name = "mk_ln";
+  mk_script = shell {
+    name = "mk_script";
     dependencies = [];
   };
-  mk_scr_default = shell {
-    name = "mk_scr_default";
-    dependencies = builtins.attrValues {};
-    replacementStrings = {
-      SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}";
-    };
-  };
-  mk_scr_temp = shell {
-    name = "mk_scr_temp";
-    dependencies = builtins.attrValues {};
-    replacementStrings = {
-      SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}";
-      TO_BE_SHELL_LIBRARY_PATH = "%SHELL_LIBRARY_PATH"; # replacement is not recursive
-    };
-  };
-  view_file = async {
-    name = "view_file";
-    dependencies = builtins.attrValues {inherit (pkgs) file;};
-  };
-  go_project_base_directory = async {
-    name = "go_project_root";
-    dependencies = [];
-  };
-  restore_trash = shell {
-    name = "restore_trash";
-    dependencies = builtins.attrValues {
-      inherit
-        (pkgs)
-        fzf
-        trashy
-        ;
-    };
-  };
+
   set_clipboard_path = async {
     name = "set_clipboard_path";
     dependencies = [pkgs.wl-clipboard];
   };
-  set_wall_paper = pipe {
-    name = "set_wall_paper";
-    dependencies = [];
+  set_wallpaper = pipe {
+    name = "set_wallpaper";
+    dependencies = with pkgs; [
+      river # for `riverctl`
+      swaybg
+    ];
   };
+
   stripspace = pipe {
     name = "stripspace";
-    dependencies = [];
+    dependencies = [pkgs.gnused];
   };
+
   trash = pipe {
     name = "trash";
-    dependencies = builtins.attrValues {
-      inherit
-        (pkgs)
-        trashy
-        trash-cli
-        findutils
-        ;
-    };
-  };
-  unarchive = pipe {
-    name = "unarchive";
-    dependencies = builtins.attrValues {
-      inherit
-        (pkgs)
-        gnutar
-        unzip
-        p7zip
-        ;
-    };
+    dependencies = [pkgs.trash-cli];
+  };
+  trash_clear = shell {
+    name = "trash_clear";
+    dependencies = with pkgs; [conceal fzf gawk trashy];
+  };
+  trash_restore = shell {
+    name = "trash_restore";
+    dependencies = with pkgs; [conceal fzf gawk trashy];
+  };
+
+  view_file = async {
+    name = "view_file";
+    dependencies = with pkgs; [file];
   };
 }
diff --git a/modules/by-name/lf/lf/commands/run.sh b/modules/by-name/lf/lf/commands/run.sh
new file mode 100755
index 00000000..6a9b8cab
--- /dev/null
+++ b/modules/by-name/lf/lf/commands/run.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env sh
+
+# Run one of the commands for debugging purposes.
+
+[ "$#" -gt 1 ] || {
+    echo "Usage: $0 <script_name> <input_files>.."
+    exit 2
+}
+
+script_name="./scripts/$1"
+shift 1
+
+fx=""
+for arg in "$@"; do
+    if [ -z "$fx" ]; then
+        fx="$arg"
+    else
+        fx="$(printf "%s\n%s" "$fx" "$arg")"
+    fi
+done
+
+export f="$1"
+set --
+
+# shellcheck source=/dev/null
+. ./base.sh
+# shellcheck source=/dev/null
+. "$script_name"
+
+# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/archive.sh b/modules/by-name/lf/lf/commands/scripts/archive.sh
deleted file mode 100755
index 25f40534..00000000
--- a/modules/by-name/lf/lf/commands/scripts/archive.sh
+++ /dev/null
@@ -1,77 +0,0 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# Option '-f' disables pathname expansion which can be useful when $f, $fs, and
-# $fx variables contain names with '*' or '?' characters. However, this option
-# is used selectively within individual commands as it can be limiting at
-# times.
-set -f
-
-# shellcheck disable=SC2269
-f="$f"
-# shellcheck disable=SC2269
-fx="$fx"
-# shellcheck disable=SC2269
-fs="$fs"
-
-archivers="$(tmp echo gzip xz 7z zip)"
-archiver="$(awk '{for (i=1; i<=NF; i++) print $i}' "$archivers" | fzf)"
-
-case "$archiver" in
-"gzip")
-    ext=tar.gz
-    ;;
-"xz")
-    ext=tar.xz
-    ;;
-"7z")
-    ext=7z
-    ;;
-"zip")
-    ext=zip
-    ;;
-esac
-
-prompt "Archive name: "
-name=""
-while [ -z "$name" ] || [ -e "$name" ]; do
-    read -r name_base
-    name="$name_base.$ext"
-    if [ -e "$name" ]; then
-        prompt "Archive already exists, overwrite [y|N]: "
-        read -r ans
-
-        if [ "$ans" = "y" ]; then
-            break
-        else
-            prompt "Archive name: "
-        fi
-    fi
-done
-
-root="$(if [ "$(pwd)" = "/" ]; then pwd; else echo "$(pwd)/"; fi)"
-
-# fx contains all selected file name separated by a newline
-while read -r raw_file; do
-    file="$(echo "$raw_file" | sed "s|$root||")"
-    set -- "$@" "$file"
-done <"$(tmp echo "$fx")"
-
-case "$archiver" in
-"gzip")
-    tar --create --gzip -file="$name" "$@"
-    ;;
-"xz")
-    tar --create --file="$name" "$@"
-    xz --compress -9 --extreme --threads=0 "$name"
-    ;;
-"7z")
-    7z a "$name" "$@"
-    ;;
-"zip")
-    zip --symlinks -9 -r "$name" "$@"
-    ;;
-esac
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/archive_compress.sh b/modules/by-name/lf/lf/commands/scripts/archive_compress.sh
new file mode 100755
index 00000000..c3776a80
--- /dev/null
+++ b/modules/by-name/lf/lf/commands/scripts/archive_compress.sh
@@ -0,0 +1,63 @@
+# shellcheck shell=sh
+
+# shellcheck disable=SC2269
+f="$f"
+# shellcheck disable=SC2269
+fx="$fx"
+# shellcheck disable=SC2269
+fs="$fs"
+
+archiver="$(printf "%s\n" gzip xz 7z zip | fzf)"
+
+case "$archiver" in
+"gzip")
+    ext=tar.gz
+    ;;
+"xz")
+    ext=tar.xz
+    ;;
+"7z")
+    ext=7z
+    ;;
+"zip")
+    ext=zip
+    ;;
+esac
+
+prompt "Archive name: "
+name=""
+while [ -z "$name" ] || [ -e "$name" ]; do
+    read -r name_base
+    name="$name_base.$ext"
+    if [ -e "$name" ]; then
+        prompt "Archive already exists, overwrite [y|N]: "
+        read -r ans
+
+        if [ "$ans" = "y" ]; then
+            break
+        else
+            prompt "New Archive name: "
+        fi
+    fi
+done
+
+# fx contains all selected file name separated by a newline
+while read -r file; do
+    set -- "$@" "$(realpath --relative-to="$(pwd)" "$file")"
+done <"$(echo "$fx" | tmp)"
+
+case "$archiver" in
+"gzip")
+    tar --create --gzip --file="$name" "$@"
+    ;;
+"xz")
+    tar --create "$@" | xz --compress -9 --format=xz --extreme --threads=0 --stdout >"$name"
+    ;;
+"7z")
+    7z a "$name" "$@"
+    ;;
+"zip")
+    zip --symlinks -9 --recurse-paths "$name" "$@"
+    ;;
+esac
+# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/archive_decompress.sh b/modules/by-name/lf/lf/commands/scripts/archive_decompress.sh
new file mode 100755
index 00000000..08374176
--- /dev/null
+++ b/modules/by-name/lf/lf/commands/scripts/archive_decompress.sh
@@ -0,0 +1,23 @@
+# shellcheck shell=sh
+
+# shellcheck disable=SC2269
+f="$f"
+# shellcheck disable=SC2269
+fx="$fx"
+# shellcheck disable=SC2269
+fs="$fs"
+# shellcheck disable=SC2269
+id="$id"
+
+echo "$fx" | while read -r file; do
+    case "$file" in
+    *.tar.bz | *.tar.bz2 | *.tbz | *.tbz2) tar --extract --bzip2 --verbose --file="$file" ;;
+    *.tar.gz | *.tgz) tar --extract --gzip --verbose --file="$file" ;;
+    *.tar.xz | *.txz) tar --extract --xz --verbose --file="$file" ;;
+    *.tar*) tar --extract --verbose --file="$file" ;;
+    *.zip) unzip "$file" ;;
+    *.7z) 7z x "$file" ;;
+    *) die "'$file' is not a supported file for unarchiving." ;;
+    esac
+done
+# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/broot_jump.sh b/modules/by-name/lf/lf/commands/scripts/broot_jump.sh
deleted file mode 100755
index 8f40ba01..00000000
--- a/modules/by-name/lf/lf/commands/scripts/broot_jump.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# shellcheck disable=SC2269
-f="$f"
-# shellcheck disable=SC2269
-fx="$fx"
-# shellcheck disable=SC2269
-fs="$fs"
-# shellcheck disable=SC2269
-id="$id"
-
-tmp=$(mktmp)
-res="$(broot --outcmd "$tmp" && sed 's/cd //' "$tmp")"
-
-if [ -f "$res" ]; then
-    cmd="select"
-elif [ -d "$res" ]; then
-    cmd="cd"
-fi
-
-lf -remote "send '$id' '$cmd' '$res'"
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/cd_project_root.sh b/modules/by-name/lf/lf/commands/scripts/cd_project_root.sh
new file mode 100755
index 00000000..19100947
--- /dev/null
+++ b/modules/by-name/lf/lf/commands/scripts/cd_project_root.sh
@@ -0,0 +1,19 @@
+# shellcheck shell=sh
+
+# shellcheck disable=SC2269
+f="$f"
+# shellcheck disable=SC2269
+fx="$fx"
+# shellcheck disable=SC2269
+fs="$fs"
+# shellcheck disable=SC2269
+id="$id"
+
+root="$(git rev-parse --show-toplevel)"
+if [ "$root" ]; then
+    lf_cmd cd "$root" || die "Bug: Failed to cd to project root at '$root'"
+else
+    die "Unable to locate base dir"
+fi
+
+# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/chmod.sh b/modules/by-name/lf/lf/commands/scripts/chmod.sh
index 9859127b..3dc5f19c 100755
--- a/modules/by-name/lf/lf/commands/scripts/chmod.sh
+++ b/modules/by-name/lf/lf/commands/scripts/chmod.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -12,13 +9,12 @@ fs="$fs"
 # shellcheck disable=SC2269
 id="$id"
 
-readp "Mode bits: " bits
-# shellcheck disable=SC2269
-bits="$bits"
+prompt "Mode bits: "
+read -r bits
 
-while read -r file; do
+echo "$fx" | while read -r file; do
     chmod "$bits" "$file"
-done <"$(tmp echo "$fx")"
+done
 
-lf -remote 'send reload'
+lf_cmd reload
 # vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/clear_trash.sh b/modules/by-name/lf/lf/commands/scripts/clear_trash.sh
deleted file mode 100755
index 9052bb5f..00000000
--- a/modules/by-name/lf/lf/commands/scripts/clear_trash.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# could also use --force, for instand removal
-trash list | fzf --multi | awk '{print $NF}' | xargs trash empty --match=exact
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/dl_file.sh b/modules/by-name/lf/lf/commands/scripts/dl_file.sh
deleted file mode 100755
index c7e3d8b2..00000000
--- a/modules/by-name/lf/lf/commands/scripts/dl_file.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# shellcheck disable=SC2269
-f="$f"
-# shellcheck disable=SC2269
-fx="$fx"
-# shellcheck disable=SC2269
-fs="$fs"
-# shellcheck disable=SC2269
-id="$id"
-
-# Provides the ability to download a file by dropping it into a window
-
-url="$(dragon -t -x)"
-
-if [ -n "$url" ]; then
-    prompt "File Name: "
-    name=""
-    while [ -z "$name" ] || [ -e "$name" ]; do
-        read -r name
-        if [ -e "$name" ]; then
-            prompt "File already exists, overwrite [y|N]: "
-            read -r ans
-
-            if [ "$ans" = "y" ]; then
-                break
-            else
-                prompt "File Name: "
-            fi
-        fi
-    done
-
-    # Download the file with curl
-    if [ -n "$name" ]; then
-        curl -o "$name" "$url" || die "curl failed"
-    fi
-else
-    die "URL is null!"
-fi
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/dragon.sh b/modules/by-name/lf/lf/commands/scripts/dragon.sh
index cf3c3176..299d7bbe 100755
--- a/modules/by-name/lf/lf/commands/scripts/dragon.sh
+++ b/modules/by-name/lf/lf/commands/scripts/dragon.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -14,7 +11,7 @@ id="$id"
 
 while read -r file; do
     set -- "$@" "$file"
-done <"$(tmp echo "$fx")"
+done <"$(echo "$fx" | tmp)"
 
-dragon -a -x "$@"
+dragon --all --and-exit "$@"
 # vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/dragon_individual.sh b/modules/by-name/lf/lf/commands/scripts/dragon_individual.sh
index 2465cdfa..1cb603d9 100755
--- a/modules/by-name/lf/lf/commands/scripts/dragon_individual.sh
+++ b/modules/by-name/lf/lf/commands/scripts/dragon_individual.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -14,7 +11,7 @@ id="$id"
 
 while read -r file; do
     set -- "$@" "$file"
-done <"$(tmp echo "$fx")"
+done <"$(echo "$fx" | tmp)"
 
 dragon "$@"
 # vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/dragon_stay.sh b/modules/by-name/lf/lf/commands/scripts/dragon_stay.sh
index 066b4c75..4a16e802 100755
--- a/modules/by-name/lf/lf/commands/scripts/dragon_stay.sh
+++ b/modules/by-name/lf/lf/commands/scripts/dragon_stay.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -14,7 +11,7 @@ id="$id"
 
 while read -r file; do
     set -- "$@" "$file"
-done <"$(tmp echo "$fx")"
+done <"$(echo "$fx" | tmp)"
 
-dragon -a "$@"
+dragon --all "$@"
 # vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/execute.sh b/modules/by-name/lf/lf/commands/scripts/execute.sh
index aa97fd7f..1d5dc87f 100755
--- a/modules/by-name/lf/lf/commands/scripts/execute.sh
+++ b/modules/by-name/lf/lf/commands/scripts/execute.sh
@@ -1,7 +1,4 @@
-#!/usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
diff --git a/modules/by-name/lf/lf/commands/scripts/follow_link.sh b/modules/by-name/lf/lf/commands/scripts/follow_link.sh
index 80413990..509fc2e0 100755
--- a/modules/by-name/lf/lf/commands/scripts/follow_link.sh
+++ b/modules/by-name/lf/lf/commands/scripts/follow_link.sh
@@ -1,7 +1,4 @@
-#!/usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -14,6 +11,12 @@ id="$id"
 
 dir="$(realpath "$f")"
 
-lf -remote "send $id cd \"$dir\""
+if [ -f "$dir" ]; then
+    cmd="select"
+elif [ -d "$dir" ]; then
+    cmd="cd"
+fi
+
+lf_cmd "$cmd" "$dir"
 
 # vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/fzf_jump.sh b/modules/by-name/lf/lf/commands/scripts/fzf_jump.sh
deleted file mode 100755
index ad1633fb..00000000
--- a/modules/by-name/lf/lf/commands/scripts/fzf_jump.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-res="$(fd . --maxdepth 3 | fzf --header='Jump to location')"
-
-# shellcheck disable=SC2269
-f="$f"
-# shellcheck disable=SC2269
-fx="$fx"
-# shellcheck disable=SC2269
-fs="$fs"
-# shellcheck disable=SC2269
-id="$id"
-
-if [ -f "$res" ]; then
-    cmd="select"
-elif [ -d "$res" ]; then
-    cmd="cd"
-fi
-
-lf -remote "send $id $cmd \"$res\""
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/go_project_root.sh b/modules/by-name/lf/lf/commands/scripts/go_project_root.sh
deleted file mode 100755
index 5f7746d3..00000000
--- a/modules/by-name/lf/lf/commands/scripts/go_project_root.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# shellcheck disable=SC2269
-f="$f"
-# shellcheck disable=SC2269
-fx="$fx"
-# shellcheck disable=SC2269
-fs="$fs"
-# shellcheck disable=SC2269
-id="$id"
-
-flake_base_dir="$(search_flake_base_dir)"
-if [ "$flake_base_dir" ]; then
-    lf -remote "send $id cd $flake_base_dir" || die "Bug: No base dir ($flake_base_dir)"
-else
-    die "Unable to locate base dir"
-fi
-
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/mk_dir.sh b/modules/by-name/lf/lf/commands/scripts/mk_directory.sh
index 150f7eed..58921ccd 100755
--- a/modules/by-name/lf/lf/commands/scripts/mk_dir.sh
+++ b/modules/by-name/lf/lf/commands/scripts/mk_directory.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -23,7 +20,7 @@ while [ -z "$name" ] || [ -e "$name" ]; do
         if [ "$ans" = "y" ]; then
             break
         else
-            prompt "Directory Name: "
+            prompt "New Directory Name: "
         fi
     fi
 done
diff --git a/modules/by-name/lf/lf/commands/scripts/mk_file.sh b/modules/by-name/lf/lf/commands/scripts/mk_file.sh
index 41d5cf1a..5dafe30d 100755
--- a/modules/by-name/lf/lf/commands/scripts/mk_file.sh
+++ b/modules/by-name/lf/lf/commands/scripts/mk_file.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -23,7 +20,7 @@ while [ -z "$name" ] || [ -e "$name" ]; do
         if [ "$ans" = "y" ]; then
             break
         else
-            prompt "File name: "
+            prompt "New File name: "
         fi
     fi
 done
diff --git a/modules/by-name/lf/lf/commands/scripts/mk_file_and_edit.sh b/modules/by-name/lf/lf/commands/scripts/mk_file_and_edit.sh
deleted file mode 100755
index 19fc51db..00000000
--- a/modules/by-name/lf/lf/commands/scripts/mk_file_and_edit.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# shellcheck disable=SC2269
-f="$f"
-# shellcheck disable=SC2269
-fx="$fx"
-# shellcheck disable=SC2269
-fs="$fs"
-# shellcheck disable=SC2269
-id="$id"
-
-prompt "File name: "
-name=""
-while [ -z "$name" ] || [ -e "$name" ]; do
-    read -r name
-    if [ -e "$name" ]; then
-        prompt "File already exists, overwrite [y|N]: "
-        read -r ans
-
-        if [ "$ans" = "y" ]; then
-            break
-        else
-            prompt "File name: "
-        fi
-    fi
-done
-
-touch "$name"
-"$EDITOR" "$name"
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/mk_ln.sh b/modules/by-name/lf/lf/commands/scripts/mk_link.sh
index 7fab8e22..40b2099d 100755
--- a/modules/by-name/lf/lf/commands/scripts/mk_ln.sh
+++ b/modules/by-name/lf/lf/commands/scripts/mk_link.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -14,20 +11,19 @@ id="$id"
 
 while IFS= read -r i; do
     set -- "$@" "$i"
-done <"$HOME"/.local/share/lf/files
+done <"$HOME/.local/share/lf/files"
 
 mode="$1"
 shift
 
 if [ "$#" -eq 0 ]; then
-    msg "no files to link"
+    lf_cmd echo "No files to link."
     exit 0
 fi
 
 case "$mode" in
 copy)
-    while [ "$#" -gt 0 ]; do
-        file="$1"
+    for file in "$@"; do
         ans="$(basename "$file")"
 
         while [ -e "$ans" ]; do
@@ -36,10 +32,10 @@ copy)
         done
 
         ln --symbolic --relative "$file" "$(pwd)/$ans"
-        shift
     done
     ;;
 esac
-rm ~/.local/share/lf/files
+rm "$HOME/.local/share/lf/files"
 # lf -remote "send clear"
+
 # vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/mk_scr_temp.sh b/modules/by-name/lf/lf/commands/scripts/mk_scr_temp.sh
deleted file mode 100755
index 512b5d0b..00000000
--- a/modules/by-name/lf/lf/commands/scripts/mk_scr_temp.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# shellcheck disable=SC2269
-f="$f"
-# shellcheck disable=SC2269
-fx="$fx"
-# shellcheck disable=SC2269
-fs="$fs"
-# shellcheck disable=SC2269
-id="$id"
-
-prompt "Script name: "
-name=""
-while [ -z "$name" ] || [ -e "$name" ]; do
-    read -r name
-    if [ -e "$name" ]; then
-        prompt "Script already exists, overwrite [y|N]: "
-        read -r ans
-
-        if [ "$ans" = "y" ]; then
-            break
-        else
-            prompt "Script Name: "
-        fi
-    fi
-done
-
-script="$(pwd)"/"$name"
-
-sed 's|%TO_BE_SHELL_LIBRARY_PATH|%SHELL_LIBRARY_PATH|' "%SHELL_LIBRARY_TEMPLATE" >"$script"
-sed -i 's|dash|sh|' "$script"
-chmod +x "$script"
-"$VISUAL" "$script"
-
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/mk_scr_default.sh b/modules/by-name/lf/lf/commands/scripts/mk_script.sh
index 47d05080..bbdf6d39 100755
--- a/modules/by-name/lf/lf/commands/scripts/mk_scr_default.sh
+++ b/modules/by-name/lf/lf/commands/scripts/mk_script.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -15,8 +12,7 @@ id="$id"
 prompt "Script name: "
 name=""
 while [ -z "$name" ] || [ -e "$name" ]; do
-    read -r name_base
-    name="$name_base.sh"
+    read -r name
     if [ -e "$name" ]; then
         prompt "Script already exists, overwrite [y|N]: "
         read -r ans
@@ -24,14 +20,21 @@ while [ -z "$name" ] || [ -e "$name" ]; do
         if [ "$ans" = "y" ]; then
             break
         else
-            prompt "Script Name: "
+            prompt "New Script Name: "
         fi
     fi
 done
 
-script="$(pwd)"/"$name"
+script="$(pwd)/$name"
+
+cat <<SCRIPT >"$script"
+#! /usr/bin/env sh
+
+
+
+# vim: ft=sh
+SCRIPT
 
-cat "%SHELL_LIBRARY_TEMPLATE" >"$script"
 chmod +x "$script"
 "$VISUAL" "$script"
 
diff --git a/modules/by-name/lf/lf/commands/scripts/restore_trash.sh b/modules/by-name/lf/lf/commands/scripts/restore_trash.sh
deleted file mode 100755
index b4ef492f..00000000
--- a/modules/by-name/lf/lf/commands/scripts/restore_trash.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# shellcheck disable=SC2269
-f="$f"
-# shellcheck disable=SC2269
-fx="$fx"
-# shellcheck disable=SC2269
-fs="$fs"
-# shellcheck disable=SC2269
-id="$id"
-
-trash list | fzf --multi | awk '{print $NF}' | xargs trash restore --match=exact
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/set_clipboard_path.sh b/modules/by-name/lf/lf/commands/scripts/set_clipboard_path.sh
index ff5f3c01..893452e1 100755
--- a/modules/by-name/lf/lf/commands/scripts/set_clipboard_path.sh
+++ b/modules/by-name/lf/lf/commands/scripts/set_clipboard_path.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -17,10 +14,10 @@ if [ -n "$fx" ]; then
 elif [ -n "$f" ]; then
     echo "$f" | wl-copy --trim-newline
 else
-    lf -remote "send $id echo 'No file selected.'"
+    lf_cmd echo "No file selected."
     exit 1
 fi
 
-lf -remote "send $id echo 'Path copied'"
+lf_cmd echo "Path copied to clipboard."
 
 # vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/set_wall_paper.sh b/modules/by-name/lf/lf/commands/scripts/set_wall_paper.sh
deleted file mode 100755
index 2e607d33..00000000
--- a/modules/by-name/lf/lf/commands/scripts/set_wall_paper.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# shellcheck disable=SC2269
-f="$f"
-# shellcheck disable=SC2269
-fx="$fx"
-# shellcheck disable=SC2269
-fs="$fs"
-# shellcheck disable=SC2269
-id="$id"
-
-die "No yet implemented" # TODO: do what the 'die' says
-#sed -i "s,export AWMWALLPAPER='.*',export AWMWALLPAPER='${f}'," ${ZDOTDIR}/.zshenv
-#nohub swaybg -i "$f"
-#feh --bg-max --no-fehbg "$f"
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/set_wallpaper.sh b/modules/by-name/lf/lf/commands/scripts/set_wallpaper.sh
new file mode 100755
index 00000000..4387cd9a
--- /dev/null
+++ b/modules/by-name/lf/lf/commands/scripts/set_wallpaper.sh
@@ -0,0 +1,19 @@
+# shellcheck shell=sh
+
+# shellcheck disable=SC2269
+f="$f"
+# shellcheck disable=SC2269
+fx="$fx"
+# shellcheck disable=SC2269
+fs="$fs"
+# shellcheck disable=SC2269
+id="$id"
+
+pid="$(pgrep swaybg)"
+[ -n "$pid" ] && kill "$pid"
+
+# We cannot control the available commands for river.
+# Thus we ensure that it can correctly start `swaybg`
+swaybg="$(command -v swaybg)"
+riverctl spawn "$swaybg --image \"$f\"" && lf_cmd echo "Temporary background image set."
+# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/stripspace.sh b/modules/by-name/lf/lf/commands/scripts/stripspace.sh
index 33b1cbcf..95f8f742 100755
--- a/modules/by-name/lf/lf/commands/scripts/stripspace.sh
+++ b/modules/by-name/lf/lf/commands/scripts/stripspace.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -12,29 +9,14 @@ fs="$fs"
 # shellcheck disable=SC2269
 id="$id"
 
-files=$(mktmp)
-echo "$fx" >"$files"
-
-awk_source=$(mktmp)
-cat <<OFT >"$awk_source"
-BEGIN {FS=" "}
-{for (i=1; i != NF + 1; i++)
-    if (i == NF) {
-        parts[i]=tolower(\$i);
-    } else {
-        parts[i]=tolower(\$i"_");
-    }
-}
-END {for (i in parts) printf parts[i]}
-OFT
+echo "$fx" | while read -r file; do
+    dirty_name=$(basename "$file")
+    clean_name=$(echo "$dirty_name" | sed 's/[[:blank:]]\+/_/g' | sed 's/\(.*\)/\L\1/')
 
-while read -r file; do
-    dirty_name=$(mktmp)
-    basename "$file" >"$dirty_name"
-    clean_name=$(awk -f "$awk_source" "$dirty_name")
+    [ -e "$clean_name" ] && die "file '$clean_name' already exists!"
+    mv "$dirty_name" "$clean_name" || die "Move failed"
 
-    [ -e "$clean_name" ] && die "file \"$clean_name\" already exists!"
-    mv "$(cat "$dirty_name")" "$clean_name" || die "Move failed"
-    lf -remote 'send reload'
-done <"$files"
+    lf_cmd reload
+    lf_cmd select "$clean_name"
+done
 # vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/trash.sh b/modules/by-name/lf/lf/commands/scripts/trash.sh
index f4878c49..958bc3f9 100755
--- a/modules/by-name/lf/lf/commands/scripts/trash.sh
+++ b/modules/by-name/lf/lf/commands/scripts/trash.sh
@@ -1,7 +1,4 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
@@ -12,26 +9,9 @@ fs="$fs"
 # shellcheck disable=SC2269
 id="$id"
 
-trash_output=$(mktmp)
-expected_error_output=$(mktmp)
-
 while read -r file; do
     set -- "$@" "$file"
-done <"$(tmp echo "$fx")"
-
-# TODO: why are we using trashy at all, when trash-cli can do everything?
-#
-# try trashy first, through nix because both trashy and trash-cli provide a trash command, which conflicts
-nix run nixpkgs#trashy -- put "$@" 2>"$trash_output"
-
-# FIXME: Find a way, that does not depend on parsing an error message <2023-08-29>
-cat <<EOF >"$expected_error_output"
-error: Error during a \`trash\` operation: Unknown { description: "Path: '\"/.Trash-1000\"'. Message: Permission denied (os error 13)" }
-EOF
+done <"$(echo "$fx" | tmp)"
 
-if [ "$(cat "$expected_error_output")" = "$(cat "$trash_output")" ]; then
-    warning "Deleting with trash-cli to the /.Trash folder"
-    # this file could not be trashed because it is on the tempfs volume, trash-cli can do this this
-    trash-put "$@"
-fi
+trash-put -- "$@"
 # vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/trash_clear.sh b/modules/by-name/lf/lf/commands/scripts/trash_clear.sh
new file mode 100755
index 00000000..faa3c553
--- /dev/null
+++ b/modules/by-name/lf/lf/commands/scripts/trash_clear.sh
@@ -0,0 +1,9 @@
+# shellcheck shell=sh
+
+while read -r file; do
+    set -- "$@" "$(pwd)/$file"
+done <"$(conceal list | fzf --multi --ansi | awk '{for(i=3; i<=NF; i++) {print $i}}' | tmp)"
+
+[ "$#" -ne 0 ] && trash empty --match=exact "$@"
+
+# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/trash_restore.sh b/modules/by-name/lf/lf/commands/scripts/trash_restore.sh
new file mode 100755
index 00000000..f685345f
--- /dev/null
+++ b/modules/by-name/lf/lf/commands/scripts/trash_restore.sh
@@ -0,0 +1,17 @@
+# shellcheck shell=sh
+
+# shellcheck disable=SC2269
+f="$f"
+# shellcheck disable=SC2269
+fx="$fx"
+# shellcheck disable=SC2269
+fs="$fs"
+# shellcheck disable=SC2269
+id="$id"
+
+while read -r file; do
+    set -- "$@" "$(pwd)/$file"
+done <"$(conceal list | fzf --multi --ansi | awk '{for(i=3; i<=NF; i++) {print $i}}' | tmp)"
+
+[ "$#" -ne 0 ] && trash restore --match=exact "$@"
+# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/unarchive.sh b/modules/by-name/lf/lf/commands/scripts/unarchive.sh
deleted file mode 100755
index d4835f6b..00000000
--- a/modules/by-name/lf/lf/commands/scripts/unarchive.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# shellcheck disable=SC2269
-f="$f"
-# shellcheck disable=SC2269
-fx="$fx"
-# shellcheck disable=SC2269
-fs="$fs"
-# shellcheck disable=SC2269
-id="$id"
-
-# extract the current file with the right command
-# (xkcd link: https://xkcd.com/1168/)
-set -f
-
-unarchive() {
-    case "$1" in
-    *.tar.bz | *.tar.bz2 | *.tbz | *.tbz2) tar xjvf "$1" ;;
-    *.tar.gz | *.tgz) tar xzvf "$1" ;;
-    *.tar.xz | *.txz) tar xJvf "$1" ;;
-    *.zip) unzip "$1" ;;
-    *.rar)
-        die "rar is a unfree format!"
-        ;;
-    *.7z) 7z x "$1" ;;
-    *) die "Unsupported format" ;;
-    esac
-}
-
-while read -r file; do
-    unarchive "$file"
-done <"$fx"
-# vim: ft=sh
diff --git a/modules/by-name/lf/lf/commands/scripts/view_file.sh b/modules/by-name/lf/lf/commands/scripts/view_file.sh
index f75c4868..38e6b778 100755
--- a/modules/by-name/lf/lf/commands/scripts/view_file.sh
+++ b/modules/by-name/lf/lf/commands/scripts/view_file.sh
@@ -1,7 +1,4 @@
-#!/usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=sh
 
 # shellcheck disable=SC2269
 f="$f"
diff --git a/modules/by-name/lf/lf/keybindings/default.nix b/modules/by-name/lf/lf/keybindings/default.nix
index f624719f..c5d6427d 100644
--- a/modules/by-name/lf/lf/keybindings/default.nix
+++ b/modules/by-name/lf/lf/keybindings/default.nix
@@ -36,21 +36,18 @@
   cp = "set_clipboard_path";
 
   # Archive Mappings
-  au = "unarchive";
-  aa = "archive";
+  au = "archive_decompress";
+  aa = "archive_compress";
 
   # Trash Mappings
   dd = "trash";
-  jc = "clear_trash";
-  jr = "restore_trash";
+  jc = "trash_clear";
+  jr = "trash_restore";
 
   # Dragon Mapping
   dr = "dragon";
-  ds = "dragon-stay";
-  di = "dragon-individual";
-  #dm = "mvdragon";
-  #dc = "cpdragon";
-  dl = "dlfile";
+  ds = "dragon_stay";
+  di = "dragon_individual";
 
   cs = "stripspace";
 
@@ -68,17 +65,15 @@
   y = "copy";
   "<enter>" = "open";
 
-  mk = "mk_ln";
+  mk = "mk_link";
   mf = "mk_file";
-  me = "mk_file_and_edit";
-  md = "mk_dir";
-  ms = "mk_scr_default";
-  mt = "mk_scr_temp";
+  md = "mk_directory";
+  ms = "mk_script";
 
   ch = "chmod";
-  bg = "set_wall_paper";
+  bg = "set_wallpaper";
   r = ":rename; cmd-end";
-  H = "go_project_base_directory";
+  H = "cd_project_root";
   R = "reload";
   C = "clear";
   U = "unselect";
diff --git a/modules/by-name/lo/locale/keymaps/us_modified.xkb b/modules/by-name/lo/locale/keymaps/us_modified.xkb
deleted file mode 100644
index 6299a5e9..00000000
--- a/modules/by-name/lo/locale/keymaps/us_modified.xkb
+++ /dev/null
@@ -1,9 +0,0 @@
-partial alphanumeric_keys
-xkb_symbols "us-modified" {
-    name[Group1]= "US English with caps lock key as compose key";
-
-
-    include "us(basic)"
-    include "compose(caps)"
-};
-// vim: ft=xkb
diff --git a/modules/by-name/lo/locale/module.nix b/modules/by-name/lo/locale/module.nix
index 10569216..eda707af 100644
--- a/modules/by-name/lo/locale/module.nix
+++ b/modules/by-name/lo/locale/module.nix
@@ -42,11 +42,6 @@ in {
     };
 
     services.xserver.xkb.extraLayouts = {
-      "us-modified" = {
-        description = "standard us with caps as compose key.";
-        languages = ["eng" "swe" "deu"];
-        symbolsFile = ./keymaps/us_modified.xkb;
-      };
       "dvorak-modified" = {
         description = "standard dvorak english with german and swedish extra chars.";
         languages = ["eng" "swe" "deu"];
diff --git a/modules/by-name/mp/mpv/module.nix b/modules/by-name/mp/mpv/module.nix
new file mode 100644
index 00000000..49a97c3c
--- /dev/null
+++ b/modules/by-name/mp/mpv/module.nix
@@ -0,0 +1,315 @@
+{
+  config,
+  lib,
+  pkgs,
+  ...
+}: let
+  cfg = config.soispha.programs.mpv;
+in {
+  options.soispha.programs.mpv = {
+    enable = lib.mkEnableOption "mpv";
+  };
+
+  config.home-manager.users.soispha = lib.mkIf cfg.enable {
+    programs.mpv = {
+      enable = true;
+
+      bindings = {
+        q = "quit 0";
+        "Ctrl+c" = "quit 1";
+        "Shift+q" = "quit-watch-later 1";
+      };
+      config = {
+        # uosc provides seeking & volume indicators (via flash-timeline and flash-volume commands)
+        # if you decide to use them, you don't need osd-bar
+        osd-bar = false;
+
+        # uosc will draw its own window controls and border if you disable window border
+        border = false;
+      };
+      scriptOpts = {
+        osc = {
+          scalewindowed = 0.8;
+          hidetimeout = 300;
+        };
+        uosc = {
+          # Display style of current position. available: line, bar
+          timeline_style = "line";
+
+          # Line display style config
+          timeline_line_width = 2;
+
+          # Timeline size when fully expanded, in pixels, 0 to disable
+          timeline_size = 40;
+
+          # Comma separated states when element should always be fully visible.
+          # Available: paused, audio, image, video, idle, windowed, fullscreen
+          timeline_persistency = "";
+
+          # Top border of background color to help visually separate timeline from video
+          timeline_border = 1;
+
+          # When scrolling above timeline, wheel will seek by this amount of seconds.
+          # Default uses fast seeking. Add `!` suffix to enable exact seeks. Example: `5!`
+          timeline_step = 5;
+
+          # Render cache indicators for streaming content
+          timeline_cache = true;
+
+          # When to display an always visible progress bar (minimized timeline). Can be: windowed, fullscreen, always, never
+          # Can also be toggled on demand with `toggle-progress` command.
+          progress = "windowed";
+          progress_size = 2;
+          progress_line_width = 20;
+
+          # A comma delimited list of controls above the timeline. Set to `never` to disable.
+          # Parameter spec: enclosed in `{}` means value, enclosed in `[]` means optional
+          # Full item syntax: `[<[!]{disposition1}[,[!]{dispositionN}]>]{element}[:{paramN}][#{badge}[>{limit}]][?{tooltip}]`
+          # Common properties:
+          #   `{icon}` - parameter used to specify an icon name (example: `face`)
+          #            - pick here: https://fonts.google.com/icons?icon.platform=web&icon.set=Material+Icons&icon.style=Rounded
+          # `{element}`s and their parameters:
+          #   `{shorthand}` - preconfigured shorthands:
+          #        `play-pause`, `menu`, `subtitles`, `audio`, `video`, `playlist`,
+          #        `chapters`, `editions`, `stream-quality`, `open-file`, `items`,
+          #        `next`, `prev`, `first`, `last`, `audio-device`, `fullscreen`,
+          #        `loop-playlist`, `loop-file`, `shuffle`, `autoload`
+          #   `speed[:{scale}]` - display speed slider, [{scale}] - factor of controls_size, default: 1.3
+          #   `command:{icon}:{command}` - button that executes a {command} when pressed
+          #   `toggle:{icon}:{prop}[@{owner}]` - button that toggles mpv property. shorthand for yes/no cycle below
+          #   `cycle:{default_icon}:{prop}[@{owner}]:{value1}[={icon1}][!]/{valueN}[={iconN}][!]`
+          #       - button that cycles mpv property between values, each optionally having different icon and active flag
+          #       - presence of `!` at the end will style the button as active
+          #       - `{owner}` is the name of a script that manages this property if any. Set to `uosc` to tap into uosc options.
+          #   `gap[:{scale}]` - display an empty gap
+          #       {scale} - factor of controls_size, default: 0.3
+          #   `space` - fills all available space between previous and next item, useful to align items to the right
+          #           - multiple spaces divide the available space among themselves, which can be used for centering
+          #   `button:{name}` - button whose state, look, and click action are managed by external script
+          # Item visibility control:
+          #   `<[!]{disposition1}[,[!]{dispositionN}]>` - optional prefix to control element's visibility
+          #   - `{disposition}` can be one of:
+          #     - `idle` - true if mpv is in idle mode (no file loaded)
+          #     - `image` - true if current file is a single image
+          #     - `audio` - true for audio only files
+          #     - `video` - true for files with a video track
+          #     - `has_many_video` - true for files with more than one video track
+          #     - `has_image` - true for files with a cover or other image track
+          #     - `has_audio` - true for files with an audio track
+          #     - `has_many_audio` - true for files with more than one audio track
+          #     - `has_sub` - true for files with an subtitle track
+          #     - `has_many_sub` - true for files with more than one subtitle track
+          #     - `has_many_edition` - true for files with more than one edition
+          #     - `has_chapter` - true for files with chapter list
+          #     - `stream` - true if current file is read from a stream
+          #     - `has_playlist` - true if current playlist has 2 or more items in it
+          #   - prefix with `!` to negate the required disposition
+          #   Examples:
+          #     - `<stream>stream-quality` - show stream quality button only for streams
+          #     - `<has_audio,!audio>audio` - show audio tracks button for all files that have
+          #                                   an audio track, but are not exclusively audio only files
+          # Place `#{badge}[>{limit}]` after the element params to give it a badge. Available badges:
+          #   `sub`, `audio`, `video` - track type counters
+          #   `{mpv_prop}` - any mpv prop that makes sense to you: https://mpv.io/manual/master/#property-list
+          #                - if prop value is an array it'll display its size
+          #   `>{limit}` will display the badge only if it's numerical value is above this threshold.
+          #   Example: `#audio>1`
+          # Place `?{tooltip}` after the element config to give it a tooltip.
+          # Example implementations:
+          #   menu = command:menu:script-binding uosc/menu-blurred?Menu
+          #   subtitles = command:subtitles:script-binding uosc/subtitles#sub?Subtitles
+          #   fullscreen = cycle:crop_free:fullscreen:no/yes=fullscreen_exit!?Fullscreen
+          #   loop-playlist = cycle:repeat:loop-playlist:no/inf!?Loop playlist
+          #   toggle:{icon}:{prop} = cycle:{icon}:{prop}:no/yes!
+          controls = "menu,gap,subtitles,<has_many_audio>audio,<has_many_video>video,<has_many_edition>editions,<stream>stream-quality,gap,space,speed,space,shuffle,loop-playlist,loop-file,gap,prev,items,next,gap,fullscreen";
+          controls_size = 32;
+          controls_margin = 8;
+          controls_spacing = 2;
+          controls_persistency = "";
+
+          # Where to display volume controls: none, left, right
+          volume = "right";
+          volume_size = 40;
+          volume_border = 1;
+          volume_step = 1;
+          volume_persistency = "";
+
+          # Playback speed widget: mouse drag or wheel to change, click to reset
+          speed_step = 0.1;
+          speed_step_is_factor = false;
+          speed_persistency = "";
+
+          # Controls all menus, such as context menu, subtitle loader/selector, etc
+          menu_item_height = 36;
+          menu_min_width = 260;
+          menu_padding = 4;
+
+          # Determines if `/` or `ctrl+f` is required to activate the search, or if typing
+          # any text is sufficient.
+          # When enabled, you can no longer toggle a menu off with the same key that opened it, if the key is a unicode character.
+          menu_type_to_search = true;
+
+          # Top bar with window controls and media title
+          # Can be: never, no-border, always
+          top_bar = "never";
+          top_bar_size = 40;
+          # Can be: `no` (hide), left or right
+          top_bar_controls = false;
+          # Can be: `no` (hide), `yes` (inherit title from mpv.conf), or a custom template string
+          top_bar_title = false;
+          # Template string to enable alternative top bar title. If alt title matches main title,
+          # it'll be hidden. Tip: use `${media-title}` for main, and `${filename}` for alt title.
+          top_bar_alt_title = "";
+          # Can be:
+          #   `below`  => display alt title below the main one
+          #   `toggle` => toggle the top bar title text between main and alt by clicking
+          #               the top bar, or calling `toggle-title` binding
+          top_bar_alt_title_place = "below";
+          # Flash top bar when any of these file types is loaded. Available: audio,video,image,chapter
+          top_bar_flash_on = "video,audio";
+          top_bar_persistency = "";
+
+          # Window border drawn in no-border mode
+          window_border_size = 1;
+
+          # If there's no playlist and file ends, load next file in directory
+          # Uses `load_types` config below to determine what type of file to load next.
+          # When enabled, usoc will set mpv config `keep-open` to `yes`, and `keep-open-pause` to `no`.
+          autoload = false;
+          # Enable uosc's playlist/directory shuffle mode
+          # This simply makes the next selected playlist or directory item be random, just
+          # like any other player in the world. It also has an easily togglable control button.
+          shuffle = false;
+
+          # Scale the interface by this factor
+          scale = 1;
+          # Scale in fullscreen
+          scale_fullscreen = 1.3;
+          # Adjust the text scaling to fit your font
+          font_scale = 1;
+          # Border of text and icons when drawn directly on top of video
+          text_border = 1.2;
+          # Border radius of buttons, menus, and all other rectangles
+          border_radius = 4;
+          # A comma delimited list of color overrides in RGB HEX format. Defaults:
+          # foreground=ffffff,foreground_text=000000,background=000000,background_text=ffffff,curtain=111111,success=a5e075,error=ff616e
+          color = "";
+          # A comma delimited list of opacity overrides for various UI element backgrounds and shapes.
+          # This does not affect any text, which is always rendered fully opaque. Defaults:
+          # timeline=0.9,position=1,chapters=0.8,slider=0.9,slider_gauge=1,controls=0,speed=0.6,menu=1,submenu=0.4,border=1,title=1,tooltip=1,thumbnail=1,curtain=0.8,idle_indicator=0.8,audio_indicator=0.5,buffering_indicator=0.3,playlist_position=0.8
+          opacity = "";
+
+          # A comma delimited list of features to refine at a cost of some performance impact.
+          # text_width - Use a more accurate text width measurement that measures each text string individually
+          #              instead of just measuring the width of known letters once and adding them up.
+          # sorting    - Use filename sorting that handles non-english languages better, especially asian ones.
+          #              At the moment, this is only available on windows, and has no effect on other platforms.
+          refine = "";
+
+          # Duration of animations in milliseconds
+          animation_duration = 100;
+
+          # Execute command for background clicks shorter than this number of milliseconds, 0 to disable
+          # Execution always waits for `input-doubleclick-time` to filter out double-clicks
+          click_threshold = 0;
+          click_command = "cycle pause; script-binding uosc/flash-pause-indicator";
+
+          # Flash duration in milliseconds used by `flash-{element}` commands
+          flash_duration = 1000;
+
+          # Distances in pixels below which elements are fully faded in/out
+          proximity_in = 40;
+          proximity_out = 120;
+
+          # Use only bold font weight throughout the whole UI
+          font_bold = false;
+
+          # One of `total`, `playtime-remaining` (scaled by the current speed), `time-remaining` (remaining length of file)
+          destination_time = "playtime-remaining";
+
+          # Display sub second fraction in timestamps up to this precision
+          time_precision = 0;
+
+          # Display stream's buffered time in timeline if it's lower than this amount of seconds, 0 to disable
+          buffered_time_threshold = 60;
+
+          # Hide UI when mpv autohides the cursor. Timing is controlled by `cursor-autohide` in `mpv.conf` (in milliseconds).
+          autohide = true;
+
+          # Can be: flash, static, manual (controlled by flash-pause-indicator and decide-pause-indicator commands)
+          pause_indicator = "static";
+
+          # Sizes to list in stream quality menu
+          stream_quality_options = "4320,2160,1440,1080,720,480,360,240,144";
+
+          # Types to identify media files
+          video_types = "3g2,3gp,asf,avi,f4v,flv,h264,h265,m2ts,m4v,mkv,mov,mp4,mp4v,mpeg,mpg,ogm,ogv,rm,rmvb,ts,vob,webm,wmv,y4m";
+          audio_types = "aac,ac3,aiff,ape,au,cue,dsf,dts,flac,m4a,mid,midi,mka,mp3,mp4a,oga,ogg,opus,spx,tak,tta,wav,weba,wma,wv";
+          image_types = "apng,avif,bmp,gif,j2k,jp2,jfif,jpeg,jpg,jxl,mj2,png,svg,tga,tif,tiff,webp";
+          subtitle_types = "aqt,ass,gsub,idx,jss,lrc,mks,pgs,pjs,psb,rt,sbv,slt,smi,sub,sup,srt,ssa,ssf,ttxt,txt,usf,vt,vtt";
+          playlist_types = "m3u,m3u8,pls,url,cue";
+
+          # Type pools used by file navigation and `autoload` to determine what type of file to load next
+          # Available: video,audio,image,playlist,same. `same` means the same type pool (not just extension) as currently open file.
+          load_types = "video,audio,image";
+
+          # Default open-file menu directory. Use `{drives}` to open drives menu on windows (defaults to `/` on unix).
+          default_directory = "~/";
+
+          # List hidden files when reading directories. Due to environment limitations, this currently only hides
+          # files starting with a dot. Doesn't hide hidden files on windows (we have no way to tell they're hidden).
+          show_hidden_files = false;
+
+          # Move files to trash (recycle bin) when deleting files. Dependencies:
+          # - Linux: `sudo apt install trash-cli`
+          # - MacOS: `brew install trash`
+          use_trash = false;
+
+          # Adjusted osd margins based on the visibility of UI elements
+          adjust_osd_margins = true;
+
+          # Adds chapter range indicators to some common chapter types.
+          # Additionally to displaying the start of the chapter as a diamond icon on top of the timeline,
+          # the portion of the timeline of that chapter range is also colored based on the config below.
+          #
+          # The syntax is a comma-delimited list of `{type}:{color}` pairs, where:
+          # `{type}` => range type. Currently supported ones are:
+          #   - `openings`, `endings` => anime openings/endings
+          #   - `intros`, `outros` => video intros/outros
+          #   - `ads` => segments created by sponsor-block software like https://github.com/po5/mpv_sponsorblock
+          # `{color}` => an RGB(A) HEX color code (`rrggbb`, or `rrggbbaa`)
+          #
+          # To exclude marking any of the range types, simply remove them from the list.
+          chapter_ranges = "openings:30abf964,endings:30abf964,ads:c54e4e80";
+
+          # Add alternative lua patterns to identify beginnings of simple chapter ranges (except for `ads`)
+          # Syntax: `{type}:{pattern}[,{patternN}][;{type}:{pattern}[,{patternN}]]`
+          chapter_range_patterns = "openings:オープニング;endings:エンディング";
+
+          # Localization language priority from highest to lowest.
+          # Also controls what languages are fetched by `download-subtitles` menu.
+          # Built in languages can be found in `uosc/intl`.
+          # `slang` is a keyword to inherit values from `--slang` mpv config.
+          # Supports paths to custom json files: `languages=~~/custom.json,slang,en`
+          languages = "slang,en";
+
+          # A comma separated list of element IDs to disable. Available IDs:
+          #   window_border, top_bar, timeline, controls, volume,
+          #   idle_indicator, audio_indicator, buffering_indicator, pause_indicator
+          disable_elements = "";
+        };
+        thumbfast = {
+          hwdec = true;
+          network = false;
+          spawn_first = false;
+          max_height = 250;
+          max_width = 250;
+        };
+      };
+      scripts = with pkgs.mpvScripts; [
+        uosc
+        thumbfast
+      ];
+    };
+  };
+}
diff --git a/modules/by-name/nv/nvim/module.nix b/modules/by-name/nv/nvim/module.nix
index 69e417bb..0eb416f6 100644
--- a/modules/by-name/nv/nvim/module.nix
+++ b/modules/by-name/nv/nvim/module.nix
@@ -32,6 +32,9 @@ in {
       programs.nixvim = {
         enable = true;
 
+        # Use my global nixpkgs set, instead of constructing a separate one.
+        nixpkgs.useGlobalPackages = true;
+
         # source: https://www.patorjk.com/software/taag/#p=display&f=ANSI%20Shadow&t=Neovim
         extraConfigLuaPre = lib.mkBefore ''
           ---------------------------------------------------------------------------
diff --git a/modules/by-name/ol/ollama/module.nix b/modules/by-name/ol/ollama/module.nix
index bd0baaa6..7a4e8038 100644
--- a/modules/by-name/ol/ollama/module.nix
+++ b/modules/by-name/ol/ollama/module.nix
@@ -28,6 +28,16 @@ in {
     services.ollama = {
       enable = true;
       acceleration = false;
+
+      # TODO: This could work for GPU acceleration. <2024-12-20>
+      # acceleration = "rocm";
+      # host = "127.0.0.1";
+      # port = 11434;
+      # environmentVariables = {
+      #   HCC_AMDGPU_TARGET = "gfx1032"; # used to be necessary, but doesn't seem to anymore
+      # };
+      #
+      # rocmOverrideGfx = "10.3.2";
     };
   };
 }
diff --git a/modules/by-name/ri/river/init_base.sh b/modules/by-name/ri/river/init_base.sh
new file mode 100755
index 00000000..938b46b1
--- /dev/null
+++ b/modules/by-name/ri/river/init_base.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env sh
+
+# NOTE: Keep this in sync with the file from `river-start` <2025-02-03>
+RIVER_LOG_FILE="$HOME/.local/share/river/log"
+
+err_fail() {
+    if ! "$@"; then
+        output=""
+        for arg in "$@"; do
+            if [ -z "$output" ]; then
+                output="'$arg'"
+            else
+                output="$output '$arg'"
+            fi
+        done
+        printf "%s failed!\n" "$output" >>"$RIVER_LOG_FILE"
+    fi
+}
+exec 1>>"$RIVER_LOG_FILE"
+exec 2>>"$RIVER_LOG_FILE"
+
+# Start of the generated stuff.
diff --git a/modules/by-name/ri/river/module.nix b/modules/by-name/ri/river/module.nix
index a059da4d..c8fb973c 100644
--- a/modules/by-name/ri/river/module.nix
+++ b/modules/by-name/ri/river/module.nix
@@ -3,19 +3,216 @@
   lib,
   qmk_firmware,
   system,
+  pkgs,
   ...
 }: let
   cfg = config.soispha.programs.river;
+  esa = lib.strings.escapeShellArg;
+  riverctl = lib.getExe' pkgs.river "riverctl";
+
+  mkOutputFlags = output: flags: let
+    expandedFlags = builtins.concatStringsSep " " (lib.attrsets.mapAttrsToList (flag: value: "--${esa flag} ${esa value}") flags);
+  in ''
+    err_fail ${lib.getExe pkgs.wlr-randr} --output ${esa output} ${expandedFlags}
+  '';
+  screenSetupCode = builtins.concatStringsSep "" (lib.attrsets.mapAttrsToList mkOutputFlags cfg.init.screenSetupCode);
+
+  mkLrProgram = input: let
+    program = builtins.concatStringsSep " " (
+      if lib.isDerivation input
+      then [(lib.getExe input)]
+      else builtins.map esa input
+    );
+  in "err_fail ${program} &";
+  longRunningPrograms = builtins.concatStringsSep "\n" (builtins.map mkLrProgram cfg.init.backgroundStart);
+
+  keymapFormat = pkgs.formats.json {};
+
+  keymappings = ''
+    err_fail ${riverctl} keyboard-layout ${esa cfg.init.mappings.layout}
+    err_fail ${lib.getExe pkgs.river-mk-keymap} ${keymapFormat.generate "keys.json" cfg.init.mappings.keymap}
+  '';
+
+  mkRule = {
+    app-id,
+    title,
+    action,
+  }: ''
+    err_fail ${riverctl} rule-add -app-id ${esa app-id} -title ${esa title} ${esa action}
+  '';
+  ruleSetup = builtins.concatStringsSep "" (builtins.map mkRule cfg.init.rules);
+
+  mkSetting = name: maybe_values: let
+    rawValues =
+      if builtins.isString maybe_values
+      then [maybe_values]
+      else maybe_values;
+    values = builtins.concatStringsSep " " (builtins.map esa rawValues);
+  in ''
+    err_fail ${riverctl} ${esa name} ${values}
+  '';
+  generalSettings =
+    builtins.concatStringsSep "" (lib.attrsets.mapAttrsToList mkSetting
+      cfg.init.generalSettings);
+
+  mkInput = name: arguments:
+    builtins.concatStringsSep "" (builtins.map (argumentLine: mkSetting "input" ([name] ++ argumentLine)) arguments);
+  inputs =
+    builtins.concatStringsSep "" (lib.attrsets.mapAttrsToList mkInput cfg.init.inputs);
 in {
   options.soispha.programs.river = {
     enable = lib.mkEnableOption "river";
+
     unicodeInput = {
       enable = lib.mkEnableOption "udev rules for rawhid based unicode input";
     };
+
+    init = {
+      mappings = {
+        layout = lib.mkOption {
+          type = lib.types.str;
+          description = "The keymap to use";
+          default = "dvorak-modified";
+        };
+
+        keymap = lib.mkOption {
+          type = lib.types.submodule {
+            freeformType = keymapFormat.type;
+
+            options = {};
+          };
+          default = {};
+
+          description = ''
+            Configuration for river-mk-keymap via `keys.json`.
+          '';
+        };
+      };
+
+      rules = lib.mkOption {
+        type = lib.types.listOf (lib.types.attrsOf lib.types.str);
+        default = [];
+
+        example = ''
+          [
+            {
+              app-id = "*";
+              title = "floating please";
+              action = "float";
+            }
+            {
+              app-id = "*";
+              title = "*";
+              action = "ssd";
+            }
+          ]
+        '';
+
+        description = ''
+          Configuration for river_init_lesser via `keys.json`.
+        '';
+      };
+
+      generalSettings = lib.mkOption {
+        type = lib.types.attrsOf (lib.types.either (lib.types.listOf lib.types.str) lib.types.str);
+        description = "Simple key value settings.";
+        default = {};
+        example = ''
+          {
+            background-color = "0x002b36";
+            set-repeat = ["50" "300"];
+            hide-cursor = ["when-typing" "enabled"];
+          }
+        '';
+      };
+
+      inputs = lib.mkOption {
+        type = lib.types.attrsOf (lib.types.listOf (lib.types.listOf lib.types.str));
+        description = "Options to set per input device";
+        default = {};
+        example = ''
+          {
+            pointer-1133-49970-Logitech_Gaming_Mouse_G502 = [["pointer-accel" "0"] ["accel-profile" "none"]];
+            pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I = [["pointer-accel" "0"] ["accel-profile" "none"]];
+          }
+        '';
+      };
+
+      backgroundStart = lib.mkOption {
+        type = lib.types.listOf (lib.types.either lib.types.package (lib.types.listOf lib.types.str));
+        description = "List of programs to start in the background";
+        example = ''
+          [
+            pkgs.gammastep
+          ]
+        '';
+      };
+
+      screenSetupCode = lib.mkOption {
+        type = lib.types.attrsOf (lib.types.attrsOf lib.types.str);
+        default = {};
+        description = ''
+          `wlr-randr` flags to set up outputs. The attribute names are the `--output` keys
+          and the attrs are flag value pairs to setup.
+        '';
+        example = ''
+          {
+            "Virtual-1" = {mode = "1920x1080";};
+            "DP-2" = {pos = "2560,0";};
+            "DP-1" = {scale = "1.5"; pos = "0,0";};
+          }
+        '';
+      };
+    };
   };
 
   config = lib.mkIf cfg.enable {
-    # TODO: Migrate the complete river module <2024-12-30>
     services.udev.packages = lib.mkIf cfg.unicodeInput.enable [qmk_firmware.packages.${system}.qmk_unicode_type];
+
+    home-manager.users.soispha = {
+      home.sessionVariables = {
+        WM = "river";
+        XDG_CURRENT_DESKTOP = "river";
+        DESKTOP_SESSION = "river";
+
+        # Export Wayland env Vars {{{
+        QT_QPA_PLATFORM = "wayland";
+        QT_QPA_PLATFORMTHEME = "qt5ct"; # needs qt5ct
+        CLUTTER_BACKEND = "wayland";
+        SDL_VIDEODRIVER = "wayland"; # might brake some things
+        # }}}
+      };
+
+      home.packages = [
+        pkgs.river-start
+      ];
+
+      xdg.configFile."river/init" = {
+        executable = true;
+        text = let
+          mkHeading = text: other_stuff: ''
+            # ${text}
+            ${other_stuff}
+          '';
+        in
+          builtins.readFile ./init_base.sh
+          +
+          # bash
+          mkHeading "Environment variables" ''
+            err_fail ${riverctl} spawn "${lib.getExe' pkgs.dbus "dbus-update-activation-environment"} --verbose --systemd SEATD_SOCK DISPLAY WAYLAND_DISPLAY DESKTOP_SESSION=river XDG_CURRENT_DESKTOP=river"
+            export XDG_CURRENT_DESKTOP=river DESKTOP_SESSION=river;
+          ''
+          + mkHeading "Key Mappings" keymappings
+          + mkHeading "Rules" ruleSetup
+          + mkHeading "General Settings" generalSettings
+          + mkHeading "Input Section" inputs
+          + mkHeading "Screen setup code" screenSetupCode
+          + mkHeading "Background services" longRunningPrograms
+          + mkHeading "Layout Setup" ''
+            err_fail ${riverctl} default-layout rivertile
+            ${lib.getExe' pkgs.river "rivertile"} -main-ratio 0.5 -view-padding 1 -outer-padding 0
+          '';
+      };
+    };
   };
 }
diff --git a/modules/by-name/so/sound/module.nix b/modules/by-name/so/sound/module.nix
index f3120a67..8b519f09 100644
--- a/modules/by-name/so/sound/module.nix
+++ b/modules/by-name/so/sound/module.nix
@@ -10,7 +10,7 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
-    hardware.pulseaudio.enable = false;
+    services.pulseaudio.enable = false;
     security.rtkit.enable = true;
 
     services.pipewire = {
diff --git a/modules/home.legacy/conf/swaylock/GTDcanonical.png b/modules/by-name/sw/swaylock/images/GTDcanonical.png
index ef41d79d..ef41d79d 100644
--- a/modules/home.legacy/conf/swaylock/GTDcanonical.png
+++ b/modules/by-name/sw/swaylock/images/GTDcanonical.png
Binary files differdiff --git a/modules/home.legacy/conf/swaylock/commands.jpg b/modules/by-name/sw/swaylock/images/commands.jpg
index 54016503..54016503 100644
--- a/modules/home.legacy/conf/swaylock/commands.jpg
+++ b/modules/by-name/sw/swaylock/images/commands.jpg
Binary files differdiff --git a/modules/home.legacy/conf/swaylock/duwon-lee-tempano-port.jpg b/modules/by-name/sw/swaylock/images/duwon-lee-tempano-port.jpg
index d72f32d1..d72f32d1 100644
--- a/modules/home.legacy/conf/swaylock/duwon-lee-tempano-port.jpg
+++ b/modules/by-name/sw/swaylock/images/duwon-lee-tempano-port.jpg
Binary files differdiff --git a/modules/home.legacy/conf/swaylock/gnu.png b/modules/by-name/sw/swaylock/images/gnu.png
index d07dee3e..d07dee3e 100644
--- a/modules/home.legacy/conf/swaylock/gnu.png
+++ b/modules/by-name/sw/swaylock/images/gnu.png
Binary files differdiff --git a/modules/by-name/sw/swaylock/module.nix b/modules/by-name/sw/swaylock/module.nix
index 6cbcef28..fc296de7 100644
--- a/modules/by-name/sw/swaylock/module.nix
+++ b/modules/by-name/sw/swaylock/module.nix
@@ -1,4 +1,25 @@
-{...}: {
-  # otherwise swaylock can't access the user password.
-  security.pam.services.swaylock = {};
+{
+  config,
+  lib,
+  ...
+}: let
+  cfg = config.soispha.programs.swaylock;
+in {
+  options.soispha.programs.swaylock = {
+    enable = lib.mkEnableOption "swaylock";
+  };
+
+  config = lib.mkIf cfg.enable {
+    # otherwise swaylock can't access the user password.
+    security.pam.services.swaylock = {};
+
+    home-manager.users.soispha.programs.swaylock = {
+      enable = true;
+      settings = {
+        image = "${./images/duwon-lee-tempano-port.jpg}";
+        scaling = "stretch";
+        color = "000000";
+      };
+    };
+  };
 }
diff --git a/modules/by-name/yt/yt/input.conf b/modules/by-name/yt/yt/input.conf
index 10e453a1..68dad824 100644
--- a/modules/by-name/yt/yt/input.conf
+++ b/modules/by-name/yt/yt/input.conf
@@ -7,8 +7,8 @@ D script-message yt-description-local
 WHEEL_LEFT playlist-prev
 WHEEL_RIGHT playlist-next
 
-q script-message yt-mark-done-and-go-next
-Q script-message yt-mark-watch-later
+q script-message yt-mark-watched
+Q script-message yt-mark-picked
 r script-message yt-check-new-videos
 
 P quit
diff --git a/modules/by-name/yt/yt/mpv.conf b/modules/by-name/yt/yt/mpv.conf
index b6d2501f..52a40823 100644
--- a/modules/by-name/yt/yt/mpv.conf
+++ b/modules/by-name/yt/yt/mpv.conf
@@ -1,2 +1 @@
-speed=2.7
 volume=75
diff --git a/modules/by-name/zs/zsh/module.nix b/modules/by-name/zs/zsh/module.nix
index 833da126..cb1bb086 100644
--- a/modules/by-name/zs/zsh/module.nix
+++ b/modules/by-name/zs/zsh/module.nix
@@ -6,7 +6,8 @@
   ...
 }: let
   cfg = config.soispha.programs.zsh;
-  homeConfig = config.home-manager.users.soispha;
+
+  zDotDir = ".config/zsh";
 
   sourceFile = path: "source ${path}\n";
 in {
@@ -14,98 +15,108 @@ in {
     enable = lib.mkEnableOption "zsh";
   };
 
-  config.home-manager.users.soispha = lib.mkIf cfg.enable {
-    home.sessionPath = [];
-
-    programs.zsh = {
-      enable = true;
-      enableCompletion = true;
-      autosuggestion = {
-        enable = true;
-        strategy = [];
-      };
-      syntaxHighlighting.enable = true;
-
-      autocd = true;
+  config = lib.mkIf cfg.enable {
+    environment.variables = {
+      ZDOTDIR = "${config.home-manager.users.soispha.home.homeDirectory}/${zDotDir}";
+    };
 
-      # Must be relative to the users home directory (for whatever reason)
-      # Thus no `${homeConfig.xdg.configHome}`
-      dotDir = ".config/zsh";
+    home-manager.users.soispha = {
+      home.sessionPath = lib.mkForce [];
 
-      # TODO: Remove the whole history and replace it completely with `atuin` <2024-10-21>
-      history = {
-        path = "/dev/null";
-        # save = 0; # number of lines to save
-        # size = 0; # number of lines to keep
-        # share = false; # share between sessions
-      };
+      # This just includes a `source ~/.config/zsh/.zshenv`, because home-manger by-default
+      # can't access the root `/etc/zshenv`. We can and thus, we can remove this file.
+      home.file.".zshenv".enable = false;
 
-      loginExtra =
-        # bash
-        ''
-          setopt AUTO_CD
-          setopt AUTO_PUSHD
-          setopt CHASE_DOTS
-
-          setopt ALWAYS_TO_END
-
-          setopt EXTENDED_HISTORY
-          setopt HIST_ALLOW_CLOBBER
-          setopt HIST_VERIFY
-          setopt HIST_FCNTL_LOCK
-          setopt APPEND_HISTORY
-
-          setopt DVORAK
-          setopt CORRECT
-
-          setopt PROMPT_SUBST
-          setopt TRANSIENT_RPROMPT # maybe?
-
-          setopt COMBINING_CHARS
-          setopt VI
-        '';
-
-      initExtraFirst =
-        sourceFile ./config/zsh-init.zsh
-        + ''
-          SHELL_LIBRARY_VERSION="2.1.2" source ${shell_library.rawLib.${system}}
-        '';
-
-      initExtra = let
-        start = lib.modules.mkBefore (
-          # NOTE: This must be before the insult, as we otherwise override the previous handler <2024-02-28>
-          sourceFile ./config/command_not_found/command_not_found.sh
-          + sourceFile ./config/command_not_found/command_not_found_insult.sh
-          + sourceFile ./config/custom_cursor.zsh
-          + sourceFile ./config/edit_command_line.zsh
-          + sourceFile ./plugins/zsh-history-substring-search.zsh
-        );
-        end = lib.modules.mkAfter (
-          sourceFile ./config/keymaps_start.zsh
-          + sourceFile ./config/keymaps/command.zsh
-          + sourceFile ./config/keymaps/emacs.zsh
-          + sourceFile ./config/keymaps/isearch.zsh
-          + sourceFile ./config/keymaps/vicmd.zsh
-          + sourceFile ./config/keymaps/viins.zsh
-          + sourceFile ./config/keymaps/viopp.zsh
-          + sourceFile ./config/keymaps/visual.zsh
-          + sourceFile ./config/keymaps_end.zsh
-        );
-      in
-        lib.modules.mkMerge
-        [
-          start
-          end
-        ];
-
-      localVariables = {
-        HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND = "bg=cyan,fg=white";
-        HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND = "fg=red,underline,standout,bold";
-      };
-
-      shellAliases = {
-        ll = ". ll";
-        lm = ". lm";
+      programs.zsh = {
+        enable = true;
+        enableCompletion = true;
+        autosuggestion = {
+          enable = true;
+          strategy = [];
+        };
+        syntaxHighlighting.enable = true;
+
+        autocd = true;
+
+        # Must be relative to the users home directory (for whatever reason)
+        # Thus no `${homeConfig.xdg.configHome}`
+        dotDir = zDotDir;
+
+        # TODO: Remove the whole history and replace it completely with `atuin` <2024-10-21>
+        history = {
+          path = "/dev/null";
+          # save = 0; # number of lines to save
+          # size = 0; # number of lines to keep
+          # share = false; # share between sessions
+        };
+
+        loginExtra =
+          # bash
+          ''
+            setopt AUTO_CD
+            setopt AUTO_PUSHD
+            setopt CHASE_DOTS
+
+            setopt ALWAYS_TO_END
+
+            setopt EXTENDED_HISTORY
+            setopt HIST_ALLOW_CLOBBER
+            setopt HIST_VERIFY
+            setopt HIST_FCNTL_LOCK
+            setopt APPEND_HISTORY
+
+            setopt DVORAK
+            setopt CORRECT
+
+            setopt PROMPT_SUBST
+            setopt TRANSIENT_RPROMPT # maybe?
+
+            setopt COMBINING_CHARS
+            setopt VI
+          '';
+
+        initExtraFirst =
+          sourceFile ./config/zsh-init.zsh
+          + ''
+            SHELL_LIBRARY_VERSION="2.1.2" source ${shell_library.rawLib.${system}}
+          '';
+
+        initExtra = let
+          start = lib.modules.mkBefore (
+            # NOTE: This must be before the insult, as we otherwise override the previous handler <2024-02-28>
+            sourceFile ./config/command_not_found/command_not_found.sh
+            + sourceFile ./config/command_not_found/command_not_found_insult.sh
+            + sourceFile ./config/custom_cursor.zsh
+            + sourceFile ./config/edit_command_line.zsh
+            + sourceFile ./plugins/zsh-history-substring-search.zsh
+          );
+          end = lib.modules.mkAfter (
+            sourceFile ./config/keymaps_start.zsh
+            + sourceFile ./config/keymaps/command.zsh
+            + sourceFile ./config/keymaps/emacs.zsh
+            + sourceFile ./config/keymaps/isearch.zsh
+            + sourceFile ./config/keymaps/vicmd.zsh
+            + sourceFile ./config/keymaps/viins.zsh
+            + sourceFile ./config/keymaps/viopp.zsh
+            + sourceFile ./config/keymaps/visual.zsh
+            + sourceFile ./config/keymaps_end.zsh
+          );
+        in
+          lib.modules.mkMerge
+          [
+            start
+            end
+          ];
+
+        localVariables = {
+          HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND = "bg=cyan,fg=white";
+          HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND = "fg=red,underline,standout,bold";
+        };
+
+        shellAliases = {
+          ll = ". ll";
+          lm = ". lm";
+        };
       };
     };
   };
diff --git a/modules/home.legacy/files/wallpaper/abstract-nord.png b/modules/common/abstract-nord.png
index 5ef498bf..5ef498bf 100644
--- a/modules/home.legacy/files/wallpaper/abstract-nord.png
+++ b/modules/common/abstract-nord.png
Binary files differdiff --git a/flake/nixosConfigurations/common.nix b/modules/common/default.nix
index 8071c6a9..232c329d 100644
--- a/flake/nixosConfigurations/common.nix
+++ b/modules/common/default.nix
@@ -3,6 +3,7 @@
 {
   config,
   pkgs,
+  lib,
   ...
 }: {
   soispha = {
@@ -108,7 +109,81 @@
       imv.enable = true;
       less.enable = true;
       lf.enable = true;
-      river.enable = true;
+      river = {
+        enable = true;
+        init = {
+          rules = [
+            {
+              app-id = "float";
+              title = "*";
+              action = "float";
+            }
+            {
+              app-id = "mpv";
+              title = "*";
+              action = "float";
+            }
+            {
+              app-id = "ModernGL";
+              title = "*";
+              action = "float";
+            }
+            {
+              app-id = "*";
+              title = "Manim Slides";
+              action = "float";
+            }
+            {
+              app-id = "*";
+              title = "floating please";
+              action = "float";
+            }
+
+            {
+              app-id = "*";
+              title = "*";
+              action = "ssd";
+            }
+            # This remove the focus border around Firefox (which is useful because the Firefox is nearly always in its own tag.)
+            {
+              app-id = "firefox";
+              title = "*";
+              action = "csd";
+            }
+          ];
+          generalSettings = {
+            # background
+            background-color = "0x002b36";
+            border-color-focused = "0x93a1a1";
+            border-color-unfocused = "0x586e75";
+
+            # keyboard repeat rate
+            set-repeat = ["50" "300"];
+
+            # Cursor
+            focus-follows-cursor = "normal";
+            # hide-cursor = ["timeout" "2000"];
+            hide-cursor = ["when-typing" "enabled"];
+            set-cursor-warp = "on-output-change";
+            xcursor-theme = ["Nordzy-cursors" "24"];
+          };
+          inputs = {
+            pointer-1133-49970-Logitech_Gaming_Mouse_G502 = [["pointer-accel" "0"] ["accel-profile" "none"]];
+            pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I = [["pointer-accel" "0"] ["accel-profile" "none"]];
+          };
+          backgroundStart = [
+            pkgs.gammastep
+            pkgs.yambar
+
+            pkgs.mako
+            ["${lib.getExe pkgs.swaybg}" "--image" "${./abstract-nord.png}"]
+            pkgs.swayidle
+            pkgs.alacritty
+          ];
+        };
+      };
+      mpv.enable = true;
+      swaylock.enable = true;
       taskwarrior.enable = true;
       yambar.enable = true;
       yt.enable = true;
diff --git a/modules/home.legacy/conf/default.nix b/modules/home.legacy/conf/default.nix
index 38cbc915..e1cab572 100644
--- a/modules/home.legacy/conf/default.nix
+++ b/modules/home.legacy/conf/default.nix
@@ -16,7 +16,6 @@
     ./mail
     ./mako
     ./mbsync
-    ./mpv
     ./mumble
     ./neomutt
     ./nix-index
@@ -28,7 +27,6 @@
     ./ssh
     ./starship
     ./swayidle
-    ./swaylock
     ./taskwarrior
     ./timewarrior
     ./tridactyl
diff --git a/modules/home.legacy/conf/firefox/config/bookmarks/default.nix b/modules/home.legacy/conf/firefox/config/bookmarks/default.nix
index c612bf4d..41936819 100644
--- a/modules/home.legacy/conf/firefox/config/bookmarks/default.nix
+++ b/modules/home.legacy/conf/firefox/config/bookmarks/default.nix
@@ -3,27 +3,7 @@
   pkgs,
   ...
 }: let
-  bookmarks = [
-    {
-      name = "Feed - Piped";
-      url = "https://piped.video/feed";
-    }
-
-    {
-      name = "DeepL Translate";
-      url = "https://www.deepl.com/translator";
-    }
-
-    {
-      name = "Nix lib";
-      url = "https://teu5us.github.io/nix-lib.html";
-    }
-
-    {
-      name = "Nixpkgs manual";
-      url = "https://ryantm.github.io/nixpkgs/";
-    }
-  ];
+  bookmarks = [];
 
   mkBookmarksFile = (import ./lib.nix) {inherit lib pkgs;};
   bookmarks_file = mkBookmarksFile bookmarks;
diff --git a/modules/home.legacy/conf/firefox/config/extensions/extensions.json b/modules/home.legacy/conf/firefox/config/extensions/extensions.json
index 0c318236..20061de3 100644
--- a/modules/home.legacy/conf/firefox/config/extensions/extensions.json
+++ b/modules/home.legacy/conf/firefox/config/extensions/extensions.json
@@ -3,9 +3,9 @@
     "addonId": "addon@darkreader.org",
     "default_area": "navbar",
     "pname": "darkreader",
-    "sha256": "sha256:02c67ce2b3cd96719b5e369b9207ef11ed6c3a79eccb454d1e6ec3e005004e72",
-    "url": "https://addons.mozilla.org/firefox/downloads/file/4405074/darkreader-4.9.99.xpi",
-    "version": "4.9.99"
+    "sha256": "sha256:acf683f6fc743e85d75778bf92bc99ae6d513543cefd20aa994479e5aedc4b3d",
+    "url": "https://addons.mozilla.org/firefox/downloads/file/4433330/darkreader-4.9.101.xpi",
+    "version": "4.9.101"
   },
   "keepassxc-browser": {
     "addonId": "keepassxc-browser@keepassxc.org",
diff --git a/modules/home.legacy/conf/firefox/config/prefs/override.js b/modules/home.legacy/conf/firefox/config/prefs/override.js
index bf874b33..cf74cf3b 100644
--- a/modules/home.legacy/conf/firefox/config/prefs/override.js
+++ b/modules/home.legacy/conf/firefox/config/prefs/override.js
@@ -168,7 +168,7 @@ user_pref("browser.urlbar.placeholderName", "Brave");
 
 // Set the tabs and bookmarks
 user_pref("browser.tabs.inTitlebar", 1);
-user_pref("browser.toolbars.bookmarks.visibility", "always");
+user_pref("browser.toolbars.bookmarks.visibility", "never");
 user_pref("browser.places.importBookmarksHTML", true);
 
 // Theme
diff --git a/modules/home.legacy/conf/firefox/config/search/engines/default.nix b/modules/home.legacy/conf/firefox/config/search/engines/default.nix
index a47c77df..7e7880ca 100644
--- a/modules/home.legacy/conf/firefox/config/search/engines/default.nix
+++ b/modules/home.legacy/conf/firefox/config/search/engines/default.nix
@@ -13,6 +13,12 @@
     definedAliases = ["@np"];
   };
 
+  "Nix functions" = {
+    urls = [{template = "https://noogle.dev/q?term={searchTerms}";}];
+    icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
+    definedAliases = ["@ng"];
+  };
+
   "NixOS Options" = {
     urls = [{template = "https://search.nixos.org/options?type=options&query={searchTerms}";}];
     icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
diff --git a/modules/home.legacy/conf/mail/default.nix b/modules/home.legacy/conf/mail/default.nix
index 0ecbe40a..758d2c80 100644
--- a/modules/home.legacy/conf/mail/default.nix
+++ b/modules/home.legacy/conf/mail/default.nix
@@ -1,15 +1,48 @@
 {
   config,
   pkgs,
+  lib,
   ...
 }: let
   benedikt = import ./accounts/benedikt.nix {inherit pkgs;};
   soispha = import ./accounts/soispha.nix {inherit pkgs;};
 
   accounts = {inherit soispha benedikt;};
+
+  mkHelper = {
+    userName,
+    passwordCommand,
+    ...
+  }:
+    builtins.toString (pkgs.writeShellScript "git-credential-keepassxc-libsecret"
+      # bash
+      ''
+        [ "$1" = "get" ] || {
+          exit 1
+        }
+        output="$(cat)"
+        if echo "$output" | grep "username=${userName}" -q; then
+          printf "%s\npassword=%s\n\n" "$output" "$(${passwordCommand})"
+        else
+          # Not our business.
+          exit 1
+        fi
+      '');
+  accountCredentials =
+    # TODO: This will result in only one of them being defined, as we duplicate the
+    # attribute key<2025-02-03>
+    lib.mapAttrs' (_: value: {
+      name = "credential.smtp://${value.smtp.host}:${builtins.toString value.smtp.port}";
+      value = {
+        "helper" = mkHelper value;
+      };
+    })
+    accounts;
 in {
   accounts.email = {
     maildirBasePath = "${config.xdg.dataHome}/maildir";
     inherit accounts;
   };
+
+  programs.git.extraConfig = accountCredentials;
 }
diff --git a/modules/home.legacy/conf/mbsync/default.nix b/modules/home.legacy/conf/mbsync/default.nix
index ac9808c9..8418d92d 100644
--- a/modules/home.legacy/conf/mbsync/default.nix
+++ b/modules/home.legacy/conf/mbsync/default.nix
@@ -1,17 +1,16 @@
-{
-  config,
-  lib,
-  ...
-}: {
-  # TODO: I have no clue if both are needed, but it looks neat, right?
+{lib, ...}: {
+  # This configures the program in itself (i.e., sets-up a config file, etc.)
   programs.mbsync = {
     enable = true;
   };
+
+  # This starts a systemd service to periodically sync mail
   services.mbsync = {
     enable = true;
-    # TODO: enable after isync 1.5 drops
-    #configFile = "${config.xdg.configHome}/mbsync/mbsync.conf";
   };
-  # Disable the timer, and only activate it on neomutt start
+
+  # Disable the timer, and only activate the service when neomutt starts
+  # Otherwise, the password command would prompt me to unlock the keepassxc database every
+  # time.
   systemd.user.timers.mbsync = lib.mkForce {};
 }
diff --git a/modules/home.legacy/conf/mpv/default.nix b/modules/home.legacy/conf/mpv/default.nix
deleted file mode 100644
index 6b252a38..00000000
--- a/modules/home.legacy/conf/mpv/default.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{...}: {
-  programs.mpv = {
-    enable = true;
-    bindings = {
-      q = "quit 0";
-      "Ctrl+c" = "quit 1";
-      "Shift+q" = "quit-watch-later 1";
-    };
-  };
-}
diff --git a/modules/home.legacy/conf/swaylock/default.nix b/modules/home.legacy/conf/swaylock/default.nix
deleted file mode 100644
index d662cb78..00000000
--- a/modules/home.legacy/conf/swaylock/default.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{...}: {
-  programs.swaylock = {
-    enable = true;
-    settings = {
-      image = "${./duwon-lee-tempano-port.jpg}";
-      scaling = "center";
-      color = "000000";
-    };
-  };
-}
diff --git a/modules/home.legacy/files/default.nix b/modules/home.legacy/files/default.nix
index 16fe9afe..50b340b8 100644
--- a/modules/home.legacy/files/default.nix
+++ b/modules/home.legacy/files/default.nix
@@ -1,6 +1,5 @@
 {...}: {
   imports = [
-    ./wallpaper
     ./manifest_json
   ];
 }
diff --git a/modules/home.legacy/files/wallpaper/default.nix b/modules/home.legacy/files/wallpaper/default.nix
deleted file mode 100644
index 119df225..00000000
--- a/modules/home.legacy/files/wallpaper/default.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{config, ...}: {
-  home = {
-    sessionVariables = {
-      WALLPAPER = "${config.home.homeDirectory}/media/pictures/wallpaper";
-    };
-
-    file = {
-      wallpaper = {
-        source = ./abstract-nord.png;
-        target = "media/pictures/wallpaper";
-      };
-    };
-  };
-}
diff --git a/modules/home.legacy/pkgs/default.nix b/modules/home.legacy/pkgs/default.nix
index 1a4c4a1b..1d77c7de 100644
--- a/modules/home.legacy/pkgs/default.nix
+++ b/modules/home.legacy/pkgs/default.nix
@@ -5,44 +5,37 @@
   nixosConfig,
   ...
 }:
-# TODO: Remove this whole file, and move each pkgs to a separate module. <2024-11-16>
+# TODO: Remove this whole file, and move each package to a separate module. <2024-11-16>
 with pkgs; let
+  neorgFinal =
+    neorg.override
+    {
+      defaultNeorgProjectDir = config.programs.nixvim.plugins.neorg.settings.load."core.dirman".config.workspaces.projects;
+      allProjectsNewline = config.soispha.taskwarrior.projects.projects_newline;
+      allProjectsComma = config.soispha.taskwarrior.projects.projects_comma;
+      allProjectsPipe = config.soispha.taskwarrior.projects.projects_pipe;
+      allWorkspaces = config.programs.nixvim.plugins.neorg.settings.load."core.dirman".config.workspaces;
+      xdgConfigHome = config.xdg.configHome;
+      xdgDataHome = config.xdg.dataHome;
+    };
+
   Gui = {
     Terminals = [
-      # foot # wayland native terminal
       alacritty # default terminal
     ];
-    Browsers = [
-      #ungoogled-chromium # web browser (only for web programming)
-      #brave
-    ];
-
-    ImageManipulation = [
-      #krita # new, and better (KDE)
-      #gimp # conservative, and old (GNOME)
-    ];
 
     Social = [
-      mumble # voice chat software (client)
-      # lutris # multiple game store clients
-
-      # nheko # best matrix client (as of today)
-      # element-desktop  # nheko didn't work
       signal-desktop # to avoid encryption problems with signal-bridge
     ];
 
     Misc = [
-      #kalzium # Periodic Table of Elements (`element` is [sort of] better)
       keepassxc # password manager
-      #onlykey # OnlyKey Chrome Desktop App
       anki-bin # spaced repetition
     ];
   };
 
   TuiCli = {
     EyeCandy = [
-      #banner # Print large banners to ASCII terminals
-      cmatrix # A curses-based scrolling 'Matrix'-like screen
       hyfetch # Neofetch with LGBTQ pride flags.
     ];
 
@@ -58,7 +51,6 @@ with pkgs; let
       android-file-transfer # Android MTP client with minimalistic UI
       #xdg-ninja # A shell script which checks your $HOME for unwanted files and directories.
       xdg-utils # open urls and such things
-      yokadi # Command line oriented, sqlite powered, todo list
       killall # kill a application by name
       snap-sync-forked # A btrfs based backup solution
       bc # Smart calculator
@@ -77,33 +69,18 @@ with pkgs; let
       Firefox = [
         # `neorg` handles the integration between Firefox profiles and task
         # contexts
-        (neorg.override
-          {
-            defaultNeorgProjectDir = config.programs.nixvim.plugins.neorg.settings.load."core.dirman".config.workspaces.projects;
-            allProjectsNewline = config.soispha.taskwarrior.projects.projects_newline;
-            allProjectsComma = config.soispha.taskwarrior.projects.projects_comma;
-            allProjectsPipe = config.soispha.taskwarrior.projects.projects_pipe;
-            allWorkspaces = config.programs.nixvim.plugins.neorg.settings.load."core.dirman".config.workspaces;
-            xdgConfigHome = config.xdg.configHome;
-            xdgDataHome = config.xdg.dataHome;
-          })
+        neorgFinal
       ];
     };
 
     WM = {
-      river = [river]; # A dynamic tiling wayland compositor
-
       CLITools = [
         lswt # List Wayland toplevels.
         wl-clipboard # Command-line copy/paste utilities.
-        swaylock # My current lockscreen implementation.
       ];
 
       Media = [
-        wf-recorder # Screen recorder.
         libnotify # a command to send a notification.
-        screenshot_persistent # Creates a persisting screenshot.
-        screenshot_temporary # Takes a screenshot and stores it in the clipboard.
       ];
     };
 
@@ -120,13 +97,11 @@ with pkgs; let
 
       Listen = [
         spodi # Wrapper around `spotdl`.
-        sort_song # Sorts songs in the current directory.
       ];
     };
 
     Hardware = {
       Storage = [
-        #compsize # Calculate compression ratio of a set of files on Btrfs
         # TODO: smartmontools # Control and monitor S.M.A.R.T. enabled ATA and SCSI Hard Drives
       ];
 
@@ -144,10 +119,6 @@ with pkgs; let
             backlightName = nixosConfig.soispha.laptop.backlight;
           }
         );
-
-      Input = [
-        #piper # GTK application to configure gaming mice
-      ];
     };
 
     SystemUpdate = [
@@ -176,7 +147,6 @@ with pkgs; let
       GeneralTools = [
         stamp # Add a license header to a file
         git # the fast distributed version control system
-        git-absorb # git commit --fixup, but automatic
         git-edit-index # Allows you to edit the indexed version of a file
         git-cm # A wrapper that re-adds the last commit's subject
         git-cleanup # An automatic merged branch deleter
@@ -194,7 +164,16 @@ with pkgs; let
       else builtins.attrValues x
     else [x];
 in {
-  home.packages =
+  options.soispha.programs.neorg = {
+    package = lib.mkOption {
+      type = lib.types.package;
+      default = neorgFinal;
+      description = ''
+        The neorg package to use.
+      '';
+    };
+  };
+  config.home.packages =
     []
     ++ (with builtins;
       concatLists
diff --git a/modules/home.legacy/wms/default.nix b/modules/home.legacy/wms/default.nix
index 610ea2f4..340978f1 100644
--- a/modules/home.legacy/wms/default.nix
+++ b/modules/home.legacy/wms/default.nix
@@ -1,7 +1,6 @@
 {config, ...}: {
   imports = [
     # ./sway
-    ./river
     # ./plasma
   ];
 }
diff --git a/modules/home.legacy/wms/river/default.nix b/modules/home.legacy/wms/river/default.nix
deleted file mode 100644
index 9463e94e..00000000
--- a/modules/home.legacy/wms/river/default.nix
+++ /dev/null
@@ -1,91 +0,0 @@
-{
-  pkgs,
-  sysLib,
-  river_init_lesser,
-  nixosConfig,
-  system,
-  qmk_firmware,
-  ...
-}: let
-  inherit (nixosConfig.networking) hostName;
-  mappings =
-    if hostName == "tiamat"
-    then ''
-      err_fail riverctl keyboard-layout 'us-modified'
-      err_fail river_init_lesser ~/.config/river/res/moonlander.ron
-    ''
-    else if hostName == "lahmu" || hostName == "apzu" || hostName == "mammun" || hostName == "isimud"
-    then ''
-      err_fail riverctl keyboard-layout 'dvorak-modified'
-      err_fail river_init_lesser ~/.config/river/res/keys.ron
-    ''
-    else builtins.throw "Host not covered in river mappings";
-  screen_setup =
-    if hostName == "lahmu"
-    then ''
-      err_fail wlr-randr --output Virtual-1 --mode 1920x1080
-    ''
-    else if hostName == "tiamat"
-    then ''
-      err_fail wlr-randr --output DP-2 --pos 2560,0
-      err_fail wlr-randr --output DP-1 --scale 1.5 --pos 0,0
-      err_fail gammastep &
-    ''
-    else if hostName == "apzu" || hostName == "mammun" || hostName == "isimud"
-    then ''
-      err_fail gammastep &
-    ''
-    else builtins.throw "Host not covered in river screen setup";
-  env_vars = "XDG_CURRENT_DESKTOP=river DESKTOP_SESSION=river";
-  init_scr = pkgs.substituteAll {
-    src = ./init.sh;
-    inherit mappings screen_setup env_vars;
-  };
-in {
-  home.sessionVariables = {
-    WM = "river";
-    XDG_CURRENT_DESKTOP = "river";
-    DESKTOP_SESSION = "river";
-
-    # Export Wayland env Vars {{{
-    QT_QPA_PLATFORM = "wayland";
-    QT_QPA_PLATFORMTHEME = "qt5ct"; # needs qt5ct
-    CLUTTER_BACKEND = "wayland";
-    SDL_VIDEODRIVER = "wayland"; # might brake some things
-    # }}}
-  };
-
-  xdg.configFile."river/init".source =
-    sysLib.writeShellScript {
-      name = "river_init";
-      src = init_scr;
-      keepPath = true;
-      dependencies = builtins.attrValues {
-        river_init_lesser = river_init_lesser.packages.${system}.default;
-        inherit (qmk_firmware.packages.${system}) qmk_unicode_type;
-
-        inherit
-          (pkgs)
-          dash
-          river
-          glib # gnome lib
-          gammastep
-          wlr-randr
-          yambar
-          mako
-          swaybg
-          swayidle
-          swaylock
-          alacritty
-          ;
-      };
-    }
-    + /bin/river_init;
-
-  # TODO: These mappings should be generated in nix. (Which would allow to replace the
-  # `mpc` pat adding.) <2024-11-16>
-
-  # Needed for the key-mappings.
-  home.packages = [pkgs.mpc];
-  xdg.configFile."river/res".source = ./res;
-}
diff --git a/modules/home.legacy/wms/river/init.sh b/modules/home.legacy/wms/river/init.sh
deleted file mode 100755
index 06a2e2f4..00000000
--- a/modules/home.legacy/wms/river/init.sh
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env bash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-err_fail() {
-    if ! "$@"; then
-        warning "\"$*\" failed!\n" >>~/river_log
-        # msg "Executing the safe init!"
-        # exec ~/.config/river/res/safe_init.sh
-    fi
-}
-err_fail rm ~/river_log
-exec 1>>"$HOME"/river_log
-exec 2>>"$HOME"/river_log
-
-#trap err_fail ERR
-
-#Setup of environment variables {{{
-err_fail riverctl spawn "exec dbus-update-activation-environment --systemd SEATD_SOCK DISPLAY WAYLAND_DISPLAY DESKTOP_SESSION=river XDG_CURRENT_DESKTOP=river"
-export @env_vars@
-#}}}
-
-# Setup of mappings {{{
-@mappings@
-# }}}
-
-# Setup of Rules {{{
-err_fail riverctl rule-add -app-id float -title '*' float
-err_fail riverctl rule-add -app-id mpv -title '*' float
-err_fail riverctl rule-add -app-id ModernGL -title '*' float
-err_fail riverctl rule-add -app-id '*' -title 'Manim Slides' float
-err_fail riverctl rule-add -app-id '*' -title 'floating please' float
-
-err_fail riverctl rule-add -app-id '*' -title '*' ssd
-err_fail riverctl rule-add -app-id firefox -title '*' csd # This remove the focus border around Firefox (which is useful because the Firefox is nearly always in its own tag.)
-# }}}
-
-# Set riverctl settings {{{
-# background
-err_fail riverctl background-color 0x002b36
-err_fail riverctl border-color-focused 0x93a1a1
-err_fail riverctl border-color-unfocused 0x586e75
-
-# keyboard repeat rate
-err_fail riverctl set-repeat 50 300
-
-# Cursor
-err_fail riverctl focus-follows-cursor normal
-#riverctl hide-cursor timeout 2000
-err_fail riverctl hide-cursor when-typing enabled
-err_fail riverctl set-cursor-warp on-output-change
-err_fail riverctl xcursor-theme Nordzy-cursors 24
-
-err_fail riverctl input pointer-1133-49970-Logitech_Gaming_Mouse_G502 pointer-accel 0
-err_fail riverctl input pointer-1133-49970-Logitech_Gaming_Mouse_G502 accel-profile none
-
-err_fail riverctl input pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I pointer-accel 0
-err_fail riverctl input pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I accel-profile none
-# }}}
-
-# Setup of general apps {{{
-@screen_setup@
-
-err_fail yambar &
-
-err_fail mako &
-err_fail swaybg -i "$WALLPAPER" &
-err_fail swayidle &
-err_fail alacritty &
-# }}}
-
-# Setup of layout [acts as exec!] {{{
-err_fail riverctl default-layout rivertile
-@env_vars@ rivertile -main-ratio 0.5 -view-padding 1 -outer-padding 0
-
-#riverctl default-layout luatile
-#river-luatile
-# }}}
-# vim: ft=sh
diff --git a/modules/home.legacy/wms/river/res/keys.ron b/modules/home.legacy/wms/river/res/keys.ron
deleted file mode 100644
index a2bc0fa1..00000000
--- a/modules/home.legacy/wms/river/res/keys.ron
+++ /dev/null
@@ -1,58 +0,0 @@
-#![enable(implicit_some)]
-RiverctlCommandArray(
-    commands: [
-    // Focus change
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "T",                       mods: "Super",          command: "focus-view",          command_args: "next",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "N",                       mods: "Super",          command: "focus-view",          command_args: "previous",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "T",                       mods: "Super+Control",  command: "focus-output",        command_args: "next",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "N",                       mods: "Super+Control",  command: "focus-output",        command_args: "previous",),
-
-    // Standard program
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "Return",                  mods: "Super",          command: "spawn",               command_args: "alacritty",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "q",                       mods: "Super+Shift",    command: "exit",                command_args: None,),
-
-    // Screenshot
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "Print",                   mods: "None",           command: "spawn",               command_args: "screenshot_persistent",),
-
-    // Audio
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "XF86AudioRaiseVolume",    mods: "None",           command: "spawn",               command_args: "pactl set-sink-volume 1 +5%",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal", "locked"], key: "XF86AudioLowerVolume",    mods: "None",           command: "spawn",               command_args: "pactl set-sink-volume 1 -5%",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal", "locked"], key: "XF86AudioMute",           mods: "None",           command: "spawn",               command_args: "mpc toggle",),
-
-    // Launcher
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "R",                       mods: "Super",          command: "spawn",               command_args: "rofi -show combi -modes combi -combi-modes 'window,drun,run' -show-icons",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "F1",                      mods: "Super",          command: "spawn",               command_args: "neorg dmenu",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "F2",                      mods: "Super",          command: "spawn",               command_args: "keepassxc",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "F3",                      mods: "Super",          command: "spawn",               command_args: "signal-desktop",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "F4",                      mods: "Super",          command: "spawn",               command_args: "steam",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "L",                       mods: "Super",          command: "spawn",               command_args: "lock",),
-
-    // Client
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "f",                       mods: "Super",          command: "toggle-fullscreen",   command_args: None,),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "c",                       mods: "Super+Shift",    command: "close",               command_args: None,),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "space",                   mods: "Super+Control",  command: "toggle-float",        command_args: None,),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "Return",                  mods: "Super+Control",  command: "zoom",                command_args: None,),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "o",                       mods: "Super",          command: "send-to-output",      command_args: "next",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "T",                       mods: "Super+Shift",    command: "swap",                command_args: "next",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "N",                       mods: "Super+Shift",    command: "swap",                command_args: "previous",),
-
-    // Toggle all tags
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "0",                       mods: "Super",          command: "set-focused-tags",    command_args: "4294967295"),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "0",                       mods: "Super+Shift",    command: "set-view-tags",       command_args: "4294967295"),
-
-    // Mouse
-    RiverctlCommand( map_mode: MapMouse,    mode: ["normal"],           key: "BTN_LEFT",                mods: "Super",          command: "move-view",           command_args: None,),
-    RiverctlCommand( map_mode: MapMouse,    mode: ["normal"],           key: "BTN_RIGHT",               mods: "Super",          command: "resize-view",         command_args: None,),
-
-    ],
-    // Set these mappings for the tags 0-8 with key [1-9]
-    tags_number: 9,
-    tag_commands: [
-    RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super",                 command: "set-focused-tags",),
-    RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Shift",           command: "set-view-tags",),
-    RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Control",         command: "toggle-focused-tags",),
-    RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Shift+Control",   command: "toggle-view-tags",),
-    ],
-)
-
-// vim: nolinebreak nowrap textwidth=0
diff --git a/modules/home.legacy/wms/river/res/moonlander.ron b/modules/home.legacy/wms/river/res/moonlander.ron
deleted file mode 100644
index 247c1697..00000000
--- a/modules/home.legacy/wms/river/res/moonlander.ron
+++ /dev/null
@@ -1,66 +0,0 @@
-#![enable(implicit_some)]
-RiverctlCommandArray(
-    // TODO: add toggle-focus mapping
-    commands: [
-    // Movement
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "A", mods: "Alt+Control+Super+Shift", command: "exit",                 command_args: None,),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "B", mods: "Alt+Control+Super+Shift", command: "close",                command_args: None,),
-
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "C", mods: "Alt+Control+Super+Shift", command: "focus-view",           command_args: "previous",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "D", mods: "Alt+Control+Super+Shift", command: "focus-view",           command_args: "next",),
-
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "E", mods: "Alt+Control+Super+Shift", command: "swap",                 command_args: "previous",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "F", mods: "Alt+Control+Super+Shift", command: "swap",                 command_args: "next",),
-
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "G", mods: "Alt+Control+Super+Shift", command: "zoom",                 command_args: None,),
-
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "H", mods: "Alt+Control+Super+Shift", command: "toggle-fullscreen",    command_args: None,),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "I", mods: "Alt+Control+Super+Shift", command: "toggle-float",         command_args: None,),
-
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "J", mods: "Alt+Control+Super+Shift", command: "send-to-output",       command_args: "next",),
-
-
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "K", mods: "Alt+Control+Super+Shift", command: "spawn",                command_args: "alacritty",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "L", mods: "Alt+Control+Super+Shift", command: "spawn",                command_args: "screenshot_persistent",),
-
-    // Audio
-    // RiverctlCommand( map_mode: Map,         mode: ["normal", "locked"], key: "M", mods: "Alt+Control+Super+Shift", command: "spawn",                command_args: "video-pause toggle",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal", "locked"], key: "N", mods: "Alt+Control+Super+Shift", command: "spawn",                command_args: "mpc toggle",),
-
-    // Launcher
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "O", mods: "Alt+Control+Super+Shift", command: "spawn",                command_args: "rofi -show combi -modes combi -combi-modes 'window,drun,run' -show-icons",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "P", mods: "Alt+Control+Super+Shift", command: "spawn",                command_args: "neorg dmenu",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "Q", mods: "Alt+Control+Super+Shift", command: "spawn",                command_args: "keepassxc",),
-    // RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "R", mods: "Alt+Control+Super+Shift", command: "spawn",                command_args: "nheko",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "S", mods: "Alt+Control+Super+Shift", command: "spawn",                command_args: "signal-desktop",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "T", mods: "Alt+Control+Super+Shift", command: "spawn",                command_args: "lock",),
-
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "U", mods: "Alt+Control+Super+Shift", command: "focus-output",         command_args: "next",),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "V", mods: "Alt+Control+Super+Shift", command: "focus-previous-tags",  command_args: None,),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "W", mods: "Alt+Control+Super+Shift", command: "send-to-previous-tags",command_args: None,),
-    //RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "X", mods: "Alt+Control+Super+Shift", command: "spawn",               command_args: "bemenu-run",),
-    //RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "Y", mods: "Alt+Control+Super+Shift", command: "spawn",               command_args: "bemenu-run",),
-
-
-    // Toggle all tags
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "0", mods: "Alt+Control+Super+Shift", command: "set-focused-tags",    command_args: "4294967295"),
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "0", mods: "Alt+Control+Shift",       command: "set-view-tags",       command_args: "4294967295"),
-
-    // Support Unicode input
-    RiverctlCommand( map_mode: Map,         mode: ["normal"],           key: "Z", mods: "Alt+Control+Super+Shift", command: "spawn",               command_args: "qmk-unicode-type 106 65377",),
-
-    // Mouse
-    RiverctlCommand( map_mode: MapMouse,    mode: ["normal"],           key: "BTN_LEFT",                mods: "Super",          command: "move-view",           command_args: None,),
-    RiverctlCommand( map_mode: MapMouse,    mode: ["normal"],           key: "BTN_RIGHT",               mods: "Super",          command: "resize-view",         command_args: None,),
-    ],
-
-    // Set these mappings for the tags 0-8 with key [1-9]
-    tags_number: 9,
-    tag_commands: [
-        RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Alt+Control+Super+Shift", command: "set-focused-tags",),
-        RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Alt+Control+Shift",       command: "set-view-tags",),
-        // TODO: RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Control",         command: "toggle-focused-tags",),
-        // TODO: RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Shift+Control",   command: "toggle-view-tags",),
-    ],
-)
-// vim: nolinebreak nowrap textwidth=0
diff --git a/pkgs/by-name/bl/blake3/add_cargo_lock.patch b/pkgs/by-name/bl/blake3/add_cargo_lock.patch
deleted file mode 100644
index 19a5d1d0..00000000
--- a/pkgs/by-name/bl/blake3/add_cargo_lock.patch
+++ /dev/null
@@ -1,431 +0,0 @@
-From 45fd97400c01f39f841f84d43f1d28f8102cd927 Mon Sep 17 00:00:00 2001
-From: Benedikt Peetz <benedikt.peetz@b-peetz.de>
-Date: Thu, 22 Aug 2024 11:25:24 +0200
-Subject: [PATCH] build(cargo.lock): Add
-
----
- Cargo.lock | 412 +++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 412 insertions(+)
- create mode 100644 Cargo.lock
-
-diff --git a/Cargo.lock b/Cargo.lock
-new file mode 100644
-index 0000000..98b4b7a
---- /dev/null
-+++ b/Cargo.lock
-@@ -0,0 +1,412 @@
-+# This file is automatically @generated by Cargo.
-+# It is not intended for manual editing.
-+version = 3
-+
-+[[package]]
-+name = "arrayref"
-+version = "0.3.8"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a"
-+
-+[[package]]
-+name = "arrayvec"
-+version = "0.7.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
-+
-+[[package]]
-+name = "autocfg"
-+version = "1.3.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
-+
-+[[package]]
-+name = "bitflags"
-+version = "2.6.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
-+
-+[[package]]
-+name = "blake3"
-+version = "0.4.1"
-+dependencies = [
-+ "blake3 1.5.4",
-+ "hex",
-+ "pyo3",
-+ "rayon",
-+]
-+
-+[[package]]
-+name = "blake3"
-+version = "1.5.4"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7"
-+dependencies = [
-+ "arrayref",
-+ "arrayvec",
-+ "cc",
-+ "cfg-if",
-+ "constant_time_eq",
-+ "memmap2",
-+ "rayon-core",
-+]
-+
-+[[package]]
-+name = "cc"
-+version = "1.1.13"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48"
-+dependencies = [
-+ "shlex",
-+]
-+
-+[[package]]
-+name = "cfg-if"
-+version = "1.0.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-+
-+[[package]]
-+name = "constant_time_eq"
-+version = "0.3.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
-+
-+[[package]]
-+name = "crossbeam-deque"
-+version = "0.8.5"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
-+dependencies = [
-+ "crossbeam-epoch",
-+ "crossbeam-utils",
-+]
-+
-+[[package]]
-+name = "crossbeam-epoch"
-+version = "0.9.18"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
-+dependencies = [
-+ "crossbeam-utils",
-+]
-+
-+[[package]]
-+name = "crossbeam-utils"
-+version = "0.8.20"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
-+
-+[[package]]
-+name = "either"
-+version = "1.13.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
-+
-+[[package]]
-+name = "heck"
-+version = "0.4.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
-+
-+[[package]]
-+name = "hex"
-+version = "0.4.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-+
-+[[package]]
-+name = "indoc"
-+version = "2.0.5"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
-+
-+[[package]]
-+name = "libc"
-+version = "0.2.158"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
-+
-+[[package]]
-+name = "lock_api"
-+version = "0.4.12"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
-+dependencies = [
-+ "autocfg",
-+ "scopeguard",
-+]
-+
-+[[package]]
-+name = "memmap2"
-+version = "0.9.4"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322"
-+dependencies = [
-+ "libc",
-+]
-+
-+[[package]]
-+name = "memoffset"
-+version = "0.9.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
-+dependencies = [
-+ "autocfg",
-+]
-+
-+[[package]]
-+name = "once_cell"
-+version = "1.19.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
-+
-+[[package]]
-+name = "parking_lot"
-+version = "0.12.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
-+dependencies = [
-+ "lock_api",
-+ "parking_lot_core",
-+]
-+
-+[[package]]
-+name = "parking_lot_core"
-+version = "0.9.10"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
-+dependencies = [
-+ "cfg-if",
-+ "libc",
-+ "redox_syscall",
-+ "smallvec",
-+ "windows-targets",
-+]
-+
-+[[package]]
-+name = "portable-atomic"
-+version = "1.7.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265"
-+
-+[[package]]
-+name = "proc-macro2"
-+version = "1.0.86"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
-+dependencies = [
-+ "unicode-ident",
-+]
-+
-+[[package]]
-+name = "pyo3"
-+version = "0.20.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233"
-+dependencies = [
-+ "cfg-if",
-+ "indoc",
-+ "libc",
-+ "memoffset",
-+ "parking_lot",
-+ "portable-atomic",
-+ "pyo3-build-config",
-+ "pyo3-ffi",
-+ "pyo3-macros",
-+ "unindent",
-+]
-+
-+[[package]]
-+name = "pyo3-build-config"
-+version = "0.20.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7"
-+dependencies = [
-+ "once_cell",
-+ "target-lexicon",
-+]
-+
-+[[package]]
-+name = "pyo3-ffi"
-+version = "0.20.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa"
-+dependencies = [
-+ "libc",
-+ "pyo3-build-config",
-+]
-+
-+[[package]]
-+name = "pyo3-macros"
-+version = "0.20.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158"
-+dependencies = [
-+ "proc-macro2",
-+ "pyo3-macros-backend",
-+ "quote",
-+ "syn",
-+]
-+
-+[[package]]
-+name = "pyo3-macros-backend"
-+version = "0.20.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185"
-+dependencies = [
-+ "heck",
-+ "proc-macro2",
-+ "pyo3-build-config",
-+ "quote",
-+ "syn",
-+]
-+
-+[[package]]
-+name = "quote"
-+version = "1.0.36"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
-+dependencies = [
-+ "proc-macro2",
-+]
-+
-+[[package]]
-+name = "rayon"
-+version = "1.10.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
-+dependencies = [
-+ "either",
-+ "rayon-core",
-+]
-+
-+[[package]]
-+name = "rayon-core"
-+version = "1.12.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
-+dependencies = [
-+ "crossbeam-deque",
-+ "crossbeam-utils",
-+]
-+
-+[[package]]
-+name = "redox_syscall"
-+version = "0.5.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
-+dependencies = [
-+ "bitflags",
-+]
-+
-+[[package]]
-+name = "scopeguard"
-+version = "1.2.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
-+
-+[[package]]
-+name = "shlex"
-+version = "1.3.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
-+
-+[[package]]
-+name = "smallvec"
-+version = "1.13.2"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
-+
-+[[package]]
-+name = "syn"
-+version = "2.0.75"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9"
-+dependencies = [
-+ "proc-macro2",
-+ "quote",
-+ "unicode-ident",
-+]
-+
-+[[package]]
-+name = "target-lexicon"
-+version = "0.12.16"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
-+
-+[[package]]
-+name = "unicode-ident"
-+version = "1.0.12"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
-+
-+[[package]]
-+name = "unindent"
-+version = "0.2.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
-+
-+[[package]]
-+name = "windows-targets"
-+version = "0.52.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
-+dependencies = [
-+ "windows_aarch64_gnullvm",
-+ "windows_aarch64_msvc",
-+ "windows_i686_gnu",
-+ "windows_i686_gnullvm",
-+ "windows_i686_msvc",
-+ "windows_x86_64_gnu",
-+ "windows_x86_64_gnullvm",
-+ "windows_x86_64_msvc",
-+]
-+
-+[[package]]
-+name = "windows_aarch64_gnullvm"
-+version = "0.52.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
-+
-+[[package]]
-+name = "windows_aarch64_msvc"
-+version = "0.52.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
-+
-+[[package]]
-+name = "windows_i686_gnu"
-+version = "0.52.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
-+
-+[[package]]
-+name = "windows_i686_gnullvm"
-+version = "0.52.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
-+
-+[[package]]
-+name = "windows_i686_msvc"
-+version = "0.52.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
-+
-+[[package]]
-+name = "windows_x86_64_gnu"
-+version = "0.52.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
-+
-+[[package]]
-+name = "windows_x86_64_gnullvm"
-+version = "0.52.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
-+
-+[[package]]
-+name = "windows_x86_64_msvc"
-+version = "0.52.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
--- 
-2.45.2
-
diff --git a/pkgs/by-name/bl/blake3/package.nix b/pkgs/by-name/bl/blake3/package.nix
deleted file mode 100644
index d465e856..00000000
--- a/pkgs/by-name/bl/blake3/package.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  python3Packages,
-  rustPlatform,
-  fetchFromGitHub,
-}:
-python3Packages.buildPythonPackage rec {
-  pname = "blake3";
-  version = "0.4.1";
-
-  src = fetchFromGitHub {
-    owner = "oconnor663";
-    repo = "blake3-py";
-    rev = version;
-    hash = "sha256-Ju40ea8IQMOPg9BiN47BMmr/WU8HptbqqzVI+jNGpA8=";
-  };
-
-  patches = [
-    ./add_cargo_lock.patch
-  ];
-
-  cargoDeps = rustPlatform.fetchCargoTarball {
-    inherit src patches;
-    hash = "sha256-GwyGSdmJTgsHWfcS2n2FCFrlwRcuANM8/WteYTTyY6o=";
-  };
-
-  format = "pyproject";
-
-  nativeBuildInputs = with rustPlatform; [cargoSetupHook maturinBuildHook];
-}
diff --git a/pkgs/by-name/ge/generate_moz_extension/Cargo.lock b/pkgs/by-name/ge/generate_moz_extension/Cargo.lock
index 834f69a0..68dbe01a 100644
--- a/pkgs/by-name/ge/generate_moz_extension/Cargo.lock
+++ b/pkgs/by-name/ge/generate_moz_extension/Cargo.lock
@@ -19,9 +19,9 @@ checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
 
 [[package]]
 name = "anyhow"
-version = "1.0.95"
+version = "1.0.96"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
+checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4"
 
 [[package]]
 name = "atomic-waker"
@@ -70,15 +70,15 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
 
 [[package]]
 name = "bytes"
-version = "1.9.0"
+version = "1.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
+checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9"
 
 [[package]]
 name = "cc"
-version = "1.2.10"
+version = "1.2.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229"
+checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af"
 dependencies = [
  "shlex",
 ]
@@ -127,9 +127,9 @@ dependencies = [
 
 [[package]]
 name = "equivalent"
-version = "1.0.1"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
 
 [[package]]
 name = "errno"
@@ -309,9 +309,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
 
 [[package]]
 name = "h2"
-version = "0.4.7"
+version = "0.4.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e"
+checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2"
 dependencies = [
  "atomic-waker",
  "bytes",
@@ -635,9 +635,9 @@ checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104"
 
 [[package]]
 name = "log"
-version = "0.4.25"
+version = "0.4.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f"
+checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
 
 [[package]]
 name = "memchr"
@@ -653,9 +653,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
 
 [[package]]
 name = "miniz_oxide"
-version = "0.8.3"
+version = "0.8.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924"
+checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
 dependencies = [
  "adler2",
 ]
@@ -673,9 +673,9 @@ dependencies = [
 
 [[package]]
 name = "native-tls"
-version = "0.2.13"
+version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c"
+checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
 dependencies = [
  "libc",
  "log",
@@ -699,15 +699,15 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.20.2"
+version = "1.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
+checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
 
 [[package]]
 name = "openssl"
-version = "0.10.69"
+version = "0.10.71"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5e534d133a060a3c19daec1eb3e98ec6f4685978834f2dbadfe2ec215bab64e"
+checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd"
 dependencies = [
  "bitflags",
  "cfg-if",
@@ -737,9 +737,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
 
 [[package]]
 name = "openssl-sys"
-version = "0.9.104"
+version = "0.9.106"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741"
+checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd"
 dependencies = [
  "cc",
  "libc",
@@ -835,15 +835,14 @@ dependencies = [
 
 [[package]]
 name = "ring"
-version = "0.17.8"
+version = "0.17.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
+checksum = "d34b5020fcdea098ef7d95e9f89ec15952123a4a039badd09fabebe9e963e839"
 dependencies = [
  "cc",
  "cfg-if",
  "getrandom 0.2.15",
  "libc",
- "spin",
  "untrusted",
  "windows-sys 0.52.0",
 ]
@@ -869,9 +868,9 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.23.21"
+version = "0.23.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8"
+checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395"
 dependencies = [
  "once_cell",
  "rustls-pki-types",
@@ -952,18 +951,18 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.217"
+version = "1.0.218"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70"
+checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.217"
+version = "1.0.218"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0"
+checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -972,9 +971,9 @@ dependencies = [
 
 [[package]]
 name = "serde_json"
-version = "1.0.138"
+version = "1.0.139"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949"
+checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6"
 dependencies = [
  "itoa",
  "memchr",
@@ -1011,9 +1010,9 @@ dependencies = [
 
 [[package]]
 name = "smallvec"
-version = "1.13.2"
+version = "1.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
 
 [[package]]
 name = "socket2"
@@ -1026,12 +1025,6 @@ dependencies = [
 ]
 
 [[package]]
-name = "spin"
-version = "0.9.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
-
-[[package]]
 name = "stable_deref_trait"
 version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1045,9 +1038,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
 
 [[package]]
 name = "syn"
-version = "2.0.96"
+version = "2.0.98"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80"
+checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1097,9 +1090,9 @@ dependencies = [
 
 [[package]]
 name = "tempfile"
-version = "3.16.0"
+version = "3.17.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91"
+checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230"
 dependencies = [
  "cfg-if",
  "fastrand",
@@ -1233,9 +1226,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.16"
+version = "1.0.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034"
+checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
 
 [[package]]
 name = "untrusted"
diff --git a/pkgs/by-name/ge/generate_moz_extension/Cargo.toml b/pkgs/by-name/ge/generate_moz_extension/Cargo.toml
index 876f4943..ff7a3f8c 100644
--- a/pkgs/by-name/ge/generate_moz_extension/Cargo.toml
+++ b/pkgs/by-name/ge/generate_moz_extension/Cargo.toml
@@ -6,9 +6,9 @@ edition = "2021"
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-anyhow = "1.0.95"
+anyhow = "1.0.96"
 futures = "0.3.31"
 reqwest = "0.12.12"
-serde = { version = "1.0.217", features = ["derive"] }
-serde_json = "1.0.138"
+serde = { version = "1.0.218", features = ["derive"] }
+serde_json = "1.0.139"
 tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] }
diff --git a/pkgs/by-name/ge/generate_moz_extension/flake.lock b/pkgs/by-name/ge/generate_moz_extension/flake.lock
index 0fa75ec3..e3997271 100644
--- a/pkgs/by-name/ge/generate_moz_extension/flake.lock
+++ b/pkgs/by-name/ge/generate_moz_extension/flake.lock
@@ -35,11 +35,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1738009863,
-        "narHash": "sha256-KxmFlQ2j9PpDhKRXWu85bv3R2wmfkUqdpJhEwz9JN/E=",
+        "lastModified": 1738297584,
+        "narHash": "sha256-AYvaFBzt8dU0fcSK2jKD0Vg23K2eIRxfsVXIPCW9a0E=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "f898cbfddfab52593da301a397a17d0af801bbc3",
+        "rev": "9189ac18287c599860e878e905da550aa6dec1cd",
         "type": "github"
       },
       "original": {
@@ -64,11 +64,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1738117527,
-        "narHash": "sha256-GFviGfaezjGLFUlxdv3zyC7rSZvTXqwcG/YsF6MDkOw=",
+        "lastModified": 1738376888,
+        "narHash": "sha256-S6ErHxkSm0iA7ZMsjjDaASWxbELYcdfv8BhOkkj1rHw=",
         "owner": "oxalica",
         "repo": "rust-overlay",
-        "rev": "6a3dc6ce4132bd57359214d986db376f2333c14d",
+        "rev": "83284068670d5ae4a43641c4afb150f3446be70d",
         "type": "github"
       },
       "original": {
diff --git a/pkgs/by-name/lf/lf-make-map/Cargo.lock b/pkgs/by-name/lf/lf-make-map/Cargo.lock
index ff2a1782..1e6fd3a5 100644
--- a/pkgs/by-name/lf/lf-make-map/Cargo.lock
+++ b/pkgs/by-name/lf/lf-make-map/Cargo.lock
@@ -69,9 +69,9 @@ dependencies = [
 
 [[package]]
 name = "anyhow"
-version = "1.0.95"
+version = "1.0.96"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
+checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4"
 
 [[package]]
 name = "autocfg"
@@ -87,9 +87,9 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
 
 [[package]]
 name = "cc"
-version = "1.2.10"
+version = "1.2.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229"
+checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af"
 dependencies = [
  "shlex",
 ]
@@ -116,9 +116,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "4.5.27"
+version = "4.5.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796"
+checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -126,9 +126,9 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.5.27"
+version = "4.5.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7"
+checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c"
 dependencies = [
  "anstream",
  "anstyle",
@@ -138,9 +138,9 @@ dependencies = [
 
 [[package]]
 name = "clap_derive"
-version = "4.5.24"
+version = "4.5.28"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c"
+checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed"
 dependencies = [
  "heck",
  "proc-macro2",
@@ -247,9 +247,9 @@ checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
 
 [[package]]
 name = "log"
-version = "0.4.25"
+version = "0.4.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f"
+checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
 
 [[package]]
 name = "num-traits"
@@ -262,9 +262,9 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.20.2"
+version = "1.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
+checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
 
 [[package]]
 name = "proc-macro2"
@@ -326,9 +326,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
 
 [[package]]
 name = "syn"
-version = "2.0.96"
+version = "2.0.98"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80"
+checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -356,9 +356,9 @@ dependencies = [
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.16"
+version = "1.0.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034"
+checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
 
 [[package]]
 name = "utf8parse"
diff --git a/pkgs/by-name/lf/lf-make-map/Cargo.toml b/pkgs/by-name/lf/lf-make-map/Cargo.toml
index 2318cf03..3314eaaf 100644
--- a/pkgs/by-name/lf/lf-make-map/Cargo.toml
+++ b/pkgs/by-name/lf/lf-make-map/Cargo.toml
@@ -7,8 +7,8 @@ edition = "2021"
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-anyhow = "1.0.95"
-clap = { version = "4.5.27", features = ["derive", "env"] }
-log = "0.4.25"
+anyhow = "1.0.96"
+clap = { version = "4.5.30", features = ["derive", "env"] }
+log = "0.4.26"
 stderrlog = "0.6.0"
 walkdir = "2.5.0"
diff --git a/pkgs/by-name/lf/lf-make-map/flake.lock b/pkgs/by-name/lf/lf-make-map/flake.lock
index e638dcd2..23ae6eab 100644
--- a/pkgs/by-name/lf/lf-make-map/flake.lock
+++ b/pkgs/by-name/lf/lf-make-map/flake.lock
@@ -53,11 +53,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1738009863,
-        "narHash": "sha256-KxmFlQ2j9PpDhKRXWu85bv3R2wmfkUqdpJhEwz9JN/E=",
+        "lastModified": 1738297584,
+        "narHash": "sha256-AYvaFBzt8dU0fcSK2jKD0Vg23K2eIRxfsVXIPCW9a0E=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "f898cbfddfab52593da301a397a17d0af801bbc3",
+        "rev": "9189ac18287c599860e878e905da550aa6dec1cd",
         "type": "github"
       },
       "original": {
@@ -85,11 +85,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1738117527,
-        "narHash": "sha256-GFviGfaezjGLFUlxdv3zyC7rSZvTXqwcG/YsF6MDkOw=",
+        "lastModified": 1738376888,
+        "narHash": "sha256-S6ErHxkSm0iA7ZMsjjDaASWxbELYcdfv8BhOkkj1rHw=",
         "owner": "oxalica",
         "repo": "rust-overlay",
-        "rev": "6a3dc6ce4132bd57359214d986db376f2333c14d",
+        "rev": "83284068670d5ae4a43641c4afb150f3446be70d",
         "type": "github"
       },
       "original": {
diff --git a/pkgs/by-name/lo/lock/lock.sh b/pkgs/by-name/lo/lock/lock.sh
index 3101ef9a..4c5e1c01 100755
--- a/pkgs/by-name/lo/lock/lock.sh
+++ b/pkgs/by-name/lo/lock/lock.sh
@@ -1,18 +1,15 @@
-#!/usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+# shellcheck shell=bash
 
 context="$(task _get rc.context)"
-[ "$context" ] && task context none
+[ -n "$context" ] && task context none
 
 # We have ensured that only one task is active
 active="$(task +ACTIVE _ids)"
-[ "$active" ] && task stop "$active"
+[ -n "$active" ] && task stop "$active"
 
 swaylock
 
-[ "$active" ] && task start "$active"
+[ -n "$active" ] && task start "$active"
 
-[ "$context" ] && task context "$context"
+[ -n "$context" ] && task context "$context"
 # vim: ft=sh
diff --git a/pkgs/by-name/lo/lock/package.nix b/pkgs/by-name/lo/lock/package.nix
index 0e6e38d0..1c857cd6 100644
--- a/pkgs/by-name/lo/lock/package.nix
+++ b/pkgs/by-name/lo/lock/package.nix
@@ -1,15 +1,16 @@
 {
-  sysLib,
+  writeShellApplication,
   taskwarrior,
   swaylock,
 }:
-sysLib.writeShellScript {
+writeShellApplication {
   name = "lock";
-  src = ./lock.sh;
-  generateCompletions = false;
-  keepPath = false;
-  dependencies = [
+  text = builtins.readFile ./lock.sh;
+  runtimeInputs = [
     taskwarrior
     swaylock
   ];
+  meta = {
+    mainProgram = "lock";
+  };
 }
diff --git a/pkgs/by-name/ne/neorg/package.nix b/pkgs/by-name/ne/neorg/package.nix
index 3d26d1fb..ad39290a 100644
--- a/pkgs/by-name/ne/neorg/package.nix
+++ b/pkgs/by-name/ne/neorg/package.nix
@@ -17,7 +17,7 @@
   xdgConfigHome ? builtins.getEnv "XDG_CONFIG_HOME",
   xdgDataHome ? builtins.getEnv "XDG_DATA_HOME",
 }:
-sysLib.writeShellScriptMultiPart {
+(sysLib.writeShellScriptMultiPart {
   name = "neorg";
   src = ./.;
   generateCompletions = true;
@@ -69,4 +69,7 @@ sysLib.writeShellScriptMultiPart {
     # TODO: Replace the hard-coded path here with some reference <2023-10-20>
     TASK_PROJECT_FILE = "/home/soispha/repos/nix/nixos-config/hm/soispha/conf/taskwarrior/projects/default.nix";
   };
+})
+// {
+  meta.mainProgram = "neorg";
 }
diff --git a/pkgs/by-name/ri/river-mk-keymap/.envrc b/pkgs/by-name/ri/river-mk-keymap/.envrc
new file mode 100644
index 00000000..fdd3e9d8
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/.envrc
@@ -0,0 +1,3 @@
+#!/usr/bin/env sh
+
+use flake
diff --git a/pkgs/by-name/ri/river-mk-keymap/.gitignore b/pkgs/by-name/ri/river-mk-keymap/.gitignore
new file mode 100644
index 00000000..2d5df85d
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/.gitignore
@@ -0,0 +1,2 @@
+/target
+.direnv
diff --git a/pkgs/by-name/ri/river-mk-keymap/Cargo.lock b/pkgs/by-name/ri/river-mk-keymap/Cargo.lock
new file mode 100644
index 00000000..63bdf12d
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/Cargo.lock
@@ -0,0 +1,334 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "anstream"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is_terminal_polyfill",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e"
+dependencies = [
+ "anstyle",
+ "once_cell",
+ "windows-sys",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4"
+
+[[package]]
+name = "clap"
+version = "4.5.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.5.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.5.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "is_terminal_polyfill"
+version = "1.70.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
+
+[[package]]
+name = "itoa"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
+
+[[package]]
+name = "keymaps"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cec33e805ecc09c4e4f91ca26e536978ad1ae28f2e1dc02fadafeec6d2f8504"
+dependencies = [
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "once_cell"
+version = "1.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "river-mk-keymap"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "keymaps",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd"
+
+[[package]]
+name = "serde"
+version = "1.0.218"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.218"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6"
+dependencies = [
+ "itoa",
+ "memchr",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "syn"
+version = "2.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
diff --git a/pkgs/by-name/ri/river-mk-keymap/Cargo.toml b/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
new file mode 100644
index 00000000..0fdeff73
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
@@ -0,0 +1,71 @@
+[package]
+name = "river-mk-keymap"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+anyhow = "1.0.96"
+clap = { version = "4.5.30", features = ["derive"] }
+keymaps = { version = "1.0.0", features = ["serde", "mouse-keys"] }
+serde = { version = "1.0.218", features = ["derive"] }
+serde_json = "1.0.139"
+
+[profile.release]
+lto = true
+codegen-units = 1
+panic = "abort"
+split-debuginfo = "off"
+
+[lints.rust]
+# rustc lint groups https://doc.rust-lang.org/rustc/lints/groups.html
+warnings = "warn"
+future_incompatible = { level = "warn", priority = -1 }
+let_underscore = { level = "warn", priority = -1 }
+nonstandard_style = { level = "warn", priority = -1 }
+rust_2018_compatibility = { level = "warn", priority = -1 }
+rust_2018_idioms = { level = "warn", priority = -1 }
+rust_2021_compatibility = { level = "warn", priority = -1 }
+unused = { level = "warn", priority = -1 }
+# rustc allowed-by-default lints https://doc.rust-lang.org/rustc/lints/listing/allowed-by-default.html
+# missing_docs = "warn"
+macro_use_extern_crate = "warn"
+meta_variable_misuse = "warn"
+missing_abi = "warn"
+missing_copy_implementations = "warn"
+missing_debug_implementations = "warn"
+non_ascii_idents = "warn"
+noop_method_call = "warn"
+single_use_lifetimes = "warn"
+trivial_casts = "warn"
+trivial_numeric_casts = "warn"
+unreachable_pub = "warn"
+unsafe_op_in_unsafe_fn = "warn"
+unused_crate_dependencies = "warn"
+unused_import_braces = "warn"
+unused_lifetimes = "warn"
+unused_qualifications = "warn"
+variant_size_differences = "warn"
+
+[lints.rustdoc]
+# rustdoc lints https://doc.rust-lang.org/rustdoc/lints.html
+broken_intra_doc_links = "warn"
+private_intra_doc_links = "warn"
+missing_crate_level_docs = "warn"
+private_doc_tests = "warn"
+invalid_codeblock_attributes = "warn"
+invalid_rust_codeblocks = "warn"
+bare_urls = "warn"
+
+[lints.clippy]
+# clippy allowed by default
+dbg_macro = "warn"
+# clippy categories https://doc.rust-lang.org/clippy/
+all = { level = "warn", priority = -1 }
+correctness = { level = "warn", priority = -1 }
+suspicious = { level = "warn", priority = -1 }
+style = { level = "warn", priority = -1 }
+complexity = { level = "warn", priority = -1 }
+perf = { level = "warn", priority = -1 }
+pedantic = { level = "warn", priority = -1 }
diff --git a/pkgs/by-name/ri/river-mk-keymap/TODO b/pkgs/by-name/ri/river-mk-keymap/TODO
new file mode 100644
index 00000000..be77953e
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/TODO
@@ -0,0 +1 @@
+Look at https://github.com/stefur/flow for river wayland inclusion
diff --git a/pkgs/by-name/ri/river-mk-keymap/contrib/example.json b/pkgs/by-name/ri/river-mk-keymap/contrib/example.json
new file mode 100644
index 00000000..c8673f9a
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/contrib/example.json
@@ -0,0 +1,5 @@
+{
+    "<M-a>": {
+        "command": ["focus-view", "next"]
+    }
+}
diff --git a/pkgs/by-name/ri/river-mk-keymap/flake.lock b/pkgs/by-name/ri/river-mk-keymap/flake.lock
new file mode 100644
index 00000000..2f4a1210
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/flake.lock
@@ -0,0 +1,27 @@
+{
+  "nodes": {
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1738297584,
+        "narHash": "sha256-AYvaFBzt8dU0fcSK2jKD0Vg23K2eIRxfsVXIPCW9a0E=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "9189ac18287c599860e878e905da550aa6dec1cd",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixpkgs-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "root": {
+      "inputs": {
+        "nixpkgs": "nixpkgs"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
diff --git a/pkgs/by-name/ri/river-mk-keymap/flake.nix b/pkgs/by-name/ri/river-mk-keymap/flake.nix
new file mode 100644
index 00000000..95a14456
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/flake.nix
@@ -0,0 +1,25 @@
+{
+  description = "A smart way to configure river keybindings";
+
+  inputs = {
+    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
+  };
+
+  outputs = {nixpkgs, ...}: let
+    system = "x86_64-linux";
+    pkgs = nixpkgs.legacyPackages."${system}";
+  in {
+    devShells."${system}".default = pkgs.mkShell {
+      packages = with pkgs; [
+        cargo
+        clippy
+        rustc
+        rustfmt
+
+        cargo-edit
+      ];
+    };
+  };
+}
+# vim: ts=2
+
diff --git a/pkgs/by-name/ri/river-mk-keymap/package.nix b/pkgs/by-name/ri/river-mk-keymap/package.nix
new file mode 100644
index 00000000..d9519d48
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/package.nix
@@ -0,0 +1,14 @@
+{rustPlatform}:
+rustPlatform.buildRustPackage {
+  pname = "river-mk-keymap";
+  version = "0.1.0";
+
+  src = ./.;
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  meta = {
+    mainProgram = "river-mk-keymap";
+  };
+}
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/cli.rs b/pkgs/by-name/ri/river-mk-keymap/src/cli.rs
new file mode 100644
index 00000000..55b87e1a
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/src/cli.rs
@@ -0,0 +1,11 @@
+use std::path::PathBuf;
+
+use clap::Parser;
+
+#[derive(Parser, Debug)]
+#[command(author, version, about, long_about = None)]
+/// A tool to manage your key mappings for the river window manager
+pub(super) struct Args {
+    /// Path to mappings JSON file
+    pub path: PathBuf,
+}
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/key_map/commands.rs b/pkgs/by-name/ri/river-mk-keymap/src/key_map/commands.rs
new file mode 100644
index 00000000..a4ac0ebd
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/src/key_map/commands.rs
@@ -0,0 +1,109 @@
+use std::process::Command;
+
+use keymaps::key_repr::{KeyValue, MediaKeyCode, MouseKeyValue};
+
+use super::{KeyMap, MapMode};
+
+impl KeyMap {
+    #[must_use]
+    pub fn to_commands(self) -> Vec<Command> {
+        self.0
+            .iter()
+            .flat_map(|(key, value)| {
+                let key = key.last().expect("Will exist");
+                let mods = {
+                    let modifiers = key.modifiers();
+                    let mut output = vec![];
+
+                    if modifiers.alt() {
+                        output.push("Alt");
+                    }
+                    if modifiers.ctrl() {
+                        output.push("Control");
+                    }
+                    if modifiers.meta() {
+                        output.push("Super");
+                    }
+                    if modifiers.shift() {
+                        output.push("Shift");
+                    }
+                    if output.is_empty() {
+                        "None".to_owned()
+                    } else {
+                        output.join("+")
+                    }
+                };
+                let key_value = match key.value() {
+                    KeyValue::Backspace => "BackSpace".to_owned(),
+                    KeyValue::Enter => "Enter".to_owned(),
+                    KeyValue::Left => "Left".to_owned(),
+                    KeyValue::Right => "Right".to_owned(),
+                    KeyValue::Up => "Up".to_owned(),
+                    KeyValue::Down => "Down".to_owned(),
+                    KeyValue::Home => "Home".to_owned(),
+                    KeyValue::End => "End".to_owned(),
+                    KeyValue::PageUp => "Page_Up".to_owned(),
+                    KeyValue::PageDown => "Page_Down".to_owned(),
+                    KeyValue::Tab => "Tab".to_owned(),
+                    KeyValue::BackTab => "BackTab".to_owned(),
+                    KeyValue::Delete => "Delete".to_owned(),
+                    KeyValue::Insert => "Insert".to_owned(),
+                    KeyValue::F(num) => format!("F{num}"),
+                    KeyValue::Char(a) => a.to_string(),
+                    KeyValue::Null => "Null".to_owned(),
+                    KeyValue::Esc => "Esc".to_owned(),
+                    KeyValue::CapsLock => "CapsLock".to_owned(),
+                    KeyValue::ScrollLock => "ScrollLock".to_owned(),
+                    KeyValue::NumLock => "NumLock".to_owned(),
+                    KeyValue::PrintScreen => "Print".to_owned(),
+                    KeyValue::Pause => "Pause".to_owned(),
+                    KeyValue::Menu => "Menu".to_owned(),
+                    KeyValue::KeypadBegin => "KeypadBegin".to_owned(),
+                    KeyValue::Media(media_key_code) => match media_key_code {
+                        MediaKeyCode::Play => "XF86AudioPlay".to_owned(),
+                        MediaKeyCode::Pause => "XF86AudioPause".to_owned(),
+                        MediaKeyCode::PlayPause => "XF86AudioPlayPause".to_owned(),
+                        MediaKeyCode::Reverse => "XF86AudioReverse".to_owned(),
+                        MediaKeyCode::Stop => "XF86AudioStop".to_owned(),
+                        MediaKeyCode::FastForward => "XF86AudioFastForward".to_owned(),
+                        MediaKeyCode::Rewind => "XF86AudioRewind".to_owned(),
+                        MediaKeyCode::TrackNext => "XF86AudioTrackNext".to_owned(),
+                        MediaKeyCode::TrackPrevious => "XF86AudioTrackPrevious".to_owned(),
+                        MediaKeyCode::Record => "XF86AudioRecord".to_owned(),
+                        MediaKeyCode::LowerVolume => "XF86AudioLowerVolume".to_owned(),
+                        MediaKeyCode::RaiseVolume => "XF86AudioRaiseVolume".to_owned(),
+                        MediaKeyCode::MuteVolume => "XF86AudioMuteVolume".to_owned(),
+                    },
+                    KeyValue::MouseKey(mouse_key_value) => match mouse_key_value {
+                        MouseKeyValue::Left => "BTN_LEFT".to_owned(),
+                        MouseKeyValue::Right => "BTN_RIGHT".to_owned(),
+                        MouseKeyValue::Middle => "BTN_MIDDLE".to_owned(),
+                    },
+                    _ => todo!(),
+                };
+
+                value
+                    .modes
+                    .iter()
+                    .map(|mode| {
+                        let mut riverctl = Command::new("riverctl");
+                        riverctl.args([value.map_mode.as_command(), mode, &mods, &key_value]);
+
+                        riverctl.args(value.command.iter().map(String::as_str));
+                        riverctl
+                    })
+                    .collect::<Vec<_>>()
+            })
+            .collect()
+    }
+}
+
+impl MapMode {
+    pub(crate) fn as_command(self) -> &'static str {
+        match self {
+            MapMode::Map => "map",
+            MapMode::MapMouse => "map-pointer",
+            MapMode::Unmap => "unmap",
+        }
+    }
+}
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs b/pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs
new file mode 100644
index 00000000..84a16c9d
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs
@@ -0,0 +1,79 @@
+use std::{collections::HashMap, fmt::Display, ops::Deref, str::FromStr};
+
+use anyhow::Context;
+use keymaps::{key_repr::Key, map_tree::MapTrie};
+use serde::{Deserialize, Serialize};
+
+pub mod commands;
+
+#[derive(Deserialize, Serialize, Debug)]
+#[allow(clippy::module_name_repetitions)]
+pub struct RawKeyMap(HashMap<Key, KeyConfig>);
+
+#[derive(Clone, Deserialize, Serialize, Debug, PartialEq, PartialOrd)]
+/// What values to use for: `riverctl <map_mode> <mode> <mods> <key> <command..>`
+pub struct KeyConfig {
+    command: Vec<String>,
+
+    #[serde(default = "default_mode")]
+    modes: Vec<String>,
+
+    #[serde(default = "MapMode::default")]
+    map_mode: MapMode,
+}
+
+impl FromStr for KeyMap {
+    type Err = anyhow::Error;
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        let raw: RawKeyMap =
+            serde_json::from_str(s).context("Failed to parse the keymap config file as json.")?;
+        let mut out = MapTrie::<KeyConfig>::new();
+        for (key, value) in raw.0 {
+            out.insert(&[key], value.clone())
+                .with_context(|| format!("Failed to insert mapping {key} -> {value}"))?;
+        }
+
+        Ok(Self(out))
+    }
+}
+impl Display for KeyConfig {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        f.write_str(self.command.join(" ").as_str())
+    }
+}
+
+fn default_mode() -> Vec<String> {
+    vec!["normal".to_owned()]
+}
+
+#[derive(Copy, Deserialize, Serialize, Debug, Clone, Default, PartialEq, PartialOrd)]
+enum MapMode {
+    #[default]
+    Map,
+    MapMouse,
+    Unmap,
+}
+
+impl Display for MapMode {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        <Self as std::fmt::Debug>::fmt(self, f)
+    }
+}
+
+#[derive(Debug)]
+pub struct KeyMap(MapTrie<KeyConfig>);
+
+impl Display for KeyMap {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        self.0.fmt(f)
+    }
+}
+
+impl Deref for KeyMap {
+    type Target = MapTrie<KeyConfig>;
+
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/main.rs b/pkgs/by-name/ri/river-mk-keymap/src/main.rs
new file mode 100644
index 00000000..5cb99f74
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/src/main.rs
@@ -0,0 +1,34 @@
+use std::fs;
+
+use anyhow::Context;
+use clap::Parser;
+
+mod cli;
+pub mod key_map;
+
+use crate::{cli::Args, key_map::KeyMap};
+
+fn main() -> Result<(), anyhow::Error> {
+    let args = Args::parse();
+    let keymap_file = fs::read_to_string(&args.path)
+        .with_context(|| format!("Failed to open keymap file at: '{}'.", args.path.display()))?;
+
+    let keymap: KeyMap = keymap_file
+        .parse()
+        .with_context(|| format!("Failed to parse keymap file at: {}", args.path.display()))?;
+
+    // println!("{keymap}");
+    // println!("Commands:");
+    for mut command in keymap.to_commands() {
+        // println!("Executing {command:?}");
+        let status = command
+            .status()
+            .with_context(|| format!("Failed to run command: '{command:?}'"))?;
+
+        if !status.success() {
+            eprintln!("Command ('{command:?}') returned with non zero exit code: {status}");
+        }
+    }
+
+    Ok(())
+}
diff --git a/pkgs/by-name/ri/river-mk-keymap/update.sh b/pkgs/by-name/ri/river-mk-keymap/update.sh
new file mode 100755
index 00000000..9268caf2
--- /dev/null
+++ b/pkgs/by-name/ri/river-mk-keymap/update.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cargo update && cargo upgrade
diff --git a/pkgs/by-name/ri/river-start/package.nix b/pkgs/by-name/ri/river-start/package.nix
new file mode 100644
index 00000000..ab986708
--- /dev/null
+++ b/pkgs/by-name/ri/river-start/package.nix
@@ -0,0 +1,14 @@
+{
+  writeShellApplication,
+  river,
+}:
+writeShellApplication {
+  name = "river-start";
+  text = builtins.readFile ./river-start.sh;
+  runtimeInputs = [
+    river
+  ];
+  meta = {
+    mainProgram = "river-start";
+  };
+}
diff --git a/pkgs/by-name/ri/river-start/river-start.sh b/pkgs/by-name/ri/river-start/river-start.sh
new file mode 100755
index 00000000..4587ff96
--- /dev/null
+++ b/pkgs/by-name/ri/river-start/river-start.sh
@@ -0,0 +1,10 @@
+#! /usr/bin/env sh
+
+# NOTE: Keep this in sync with the file from `base_init.sh` <2025-02-03>
+RIVER_LOG_FILE="$HOME/.local/share/river/log"
+
+[ -d "$(dirname "$RIVER_LOG_FILE")" ] || mkdir --parents "$(dirname "$RIVER_LOG_FILE")"
+
+exec river -log-level info >"$RIVER_LOG_FILE" 2>&1
+
+# vim: ft=sh
diff --git a/pkgs/by-name/sc/screenshot_persistent/package.nix b/pkgs/by-name/sc/screenshot_persistent/package.nix
index f79315a1..12bb3968 100644
--- a/pkgs/by-name/sc/screenshot_persistent/package.nix
+++ b/pkgs/by-name/sc/screenshot_persistent/package.nix
@@ -1,5 +1,5 @@
 {
-  sysLib,
+  writeShellApplication,
   grim,
   slurp,
   alacritty,
@@ -7,12 +7,10 @@
   libnotify,
   lf, # TODO: add llp
 }:
-sysLib.writeShellScript {
+writeShellApplication {
   name = "screenshot_persistent";
-  src = ./screenshot_persistent.sh;
-  generateCompletions = false;
-  keepPath = true;
-  dependencies = [
+  text = builtins.readFile ./screenshot_persistent.sh;
+  runtimeInputs = [
     grim
     slurp
     alacritty
@@ -20,4 +18,7 @@ sysLib.writeShellScript {
     libnotify
     lf # TODO: add llp
   ];
+  meta = {
+    mainProgram = "screenshot_persistent";
+  };
 }
diff --git a/pkgs/by-name/sc/screenshot_persistent/screenshot_persistent.sh b/pkgs/by-name/sc/screenshot_persistent/screenshot_persistent.sh
index 4308b8d2..2bea69e3 100755
--- a/pkgs/by-name/sc/screenshot_persistent/screenshot_persistent.sh
+++ b/pkgs/by-name/sc/screenshot_persistent/screenshot_persistent.sh
@@ -1,10 +1,6 @@
-#! /usr/bin/env dash
+# shellcheck shell=bash
 
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
-
-# only generate a path (this could lead to a time-of-check/time-of-use bug)
-tmp="$(mktmp --dry-run)"
+tmp="$(mktemp)"
 
 if grim -g "$(slurp)" "$tmp"; then
     name="$(rofi -dmenu -p "Name of screenshot: " -l 0)"
@@ -16,7 +12,7 @@ if grim -g "$(slurp)" "$tmp"; then
     done
 
     mv "$tmp" "$screen_shot_path"
-    alacritty -e lf -command ":{{ set sortby atime; set reverse!; }}"
+    alacritty --title "floating please" --command lf -command ":{{ set sortby atime; set reverse!; set info time; }}" "$screen_shot_path"
 fi
 
 # vim: ft=sh
diff --git a/pkgs/by-name/up/update-vim-plugins/flake.lock b/pkgs/by-name/up/update-vim-plugins/flake.lock
index 33ed6941..4b402869 100644
--- a/pkgs/by-name/up/update-vim-plugins/flake.lock
+++ b/pkgs/by-name/up/update-vim-plugins/flake.lock
@@ -20,11 +20,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1737885589,
-        "narHash": "sha256-Zf0hSrtzaM1DEz8//+Xs51k/wdSajticVrATqDrfQjg=",
+        "lastModified": 1739866667,
+        "narHash": "sha256-EO1ygNKZlsAC9avfcwHkKGMsmipUk1Uc0TbrEZpkn64=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "852ff1d9e153d8875a83602e03fdef8a63f0ecf8",
+        "rev": "73cf49b8ad837ade2de76f87eb53fc85ed5d4680",
         "type": "github"
       },
       "original": {
diff --git a/pkgs/by-name/up/update-vim-plugins/poetry.lock b/pkgs/by-name/up/update-vim-plugins/poetry.lock
index c2c9ff5f..9c18ea04 100644
--- a/pkgs/by-name/up/update-vim-plugins/poetry.lock
+++ b/pkgs/by-name/up/update-vim-plugins/poetry.lock
@@ -1,15 +1,15 @@
-# This file is automatically @generated by Poetry 2.0.0 and should not be changed by hand.
+# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand.
 
 [[package]]
 name = "certifi"
-version = "2024.12.14"
+version = "2025.1.31"
 description = "Python package for providing Mozilla's CA Bundle."
 optional = false
 python-versions = ">=3.6"
 groups = ["main"]
 files = [
-    {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"},
-    {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"},
+    {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"},
+    {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"},
 ]
 
 [[package]]
@@ -145,74 +145,75 @@ files = [
 
 [[package]]
 name = "coverage"
-version = "7.6.10"
+version = "7.6.12"
 description = "Code coverage measurement for Python"
 optional = false
 python-versions = ">=3.9"
 groups = ["test"]
 files = [
-    {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"},
-    {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"},
-    {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"},
-    {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"},
-    {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"},
-    {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"},
-    {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"},
-    {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"},
-    {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"},
-    {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"},
-    {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"},
-    {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"},
-    {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"},
-    {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"},
-    {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"},
-    {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"},
-    {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"},
-    {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"},
-    {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"},
-    {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"},
-    {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"},
-    {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"},
-    {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"},
-    {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"},
-    {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"},
-    {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"},
-    {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"},
-    {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"},
-    {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"},
-    {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"},
-    {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"},
-    {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"},
-    {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"},
-    {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"},
-    {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"},
-    {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"},
-    {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"},
-    {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"},
-    {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"},
-    {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"},
-    {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"},
-    {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"},
-    {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"},
-    {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"},
-    {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"},
-    {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"},
-    {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"},
-    {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"},
-    {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"},
-    {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"},
-    {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"},
-    {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"},
-    {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"},
-    {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"},
-    {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"},
-    {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"},
-    {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"},
-    {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"},
-    {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"},
-    {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"},
-    {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"},
-    {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"},
+    {file = "coverage-7.6.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:704c8c8c6ce6569286ae9622e534b4f5b9759b6f2cd643f1c1a61f666d534fe8"},
+    {file = "coverage-7.6.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad7525bf0241e5502168ae9c643a2f6c219fa0a283001cee4cf23a9b7da75879"},
+    {file = "coverage-7.6.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06097c7abfa611c91edb9e6920264e5be1d6ceb374efb4986f38b09eed4cb2fe"},
+    {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:220fa6c0ad7d9caef57f2c8771918324563ef0d8272c94974717c3909664e674"},
+    {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3688b99604a24492bcfe1c106278c45586eb819bf66a654d8a9a1433022fb2eb"},
+    {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d1a987778b9c71da2fc8948e6f2656da6ef68f59298b7e9786849634c35d2c3c"},
+    {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cec6b9ce3bd2b7853d4a4563801292bfee40b030c05a3d29555fd2a8ee9bd68c"},
+    {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ace9048de91293e467b44bce0f0381345078389814ff6e18dbac8fdbf896360e"},
+    {file = "coverage-7.6.12-cp310-cp310-win32.whl", hash = "sha256:ea31689f05043d520113e0552f039603c4dd71fa4c287b64cb3606140c66f425"},
+    {file = "coverage-7.6.12-cp310-cp310-win_amd64.whl", hash = "sha256:676f92141e3c5492d2a1596d52287d0d963df21bf5e55c8b03075a60e1ddf8aa"},
+    {file = "coverage-7.6.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e18aafdfb3e9ec0d261c942d35bd7c28d031c5855dadb491d2723ba54f4c3015"},
+    {file = "coverage-7.6.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66fe626fd7aa5982cdebad23e49e78ef7dbb3e3c2a5960a2b53632f1f703ea45"},
+    {file = "coverage-7.6.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ef01d70198431719af0b1f5dcbefc557d44a190e749004042927b2a3fed0702"},
+    {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e92ae5a289a4bc4c0aae710c0948d3c7892e20fd3588224ebe242039573bf0"},
+    {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e695df2c58ce526eeab11a2e915448d3eb76f75dffe338ea613c1201b33bab2f"},
+    {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d74c08e9aaef995f8c4ef6d202dbd219c318450fe2a76da624f2ebb9c8ec5d9f"},
+    {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e995b3b76ccedc27fe4f477b349b7d64597e53a43fc2961db9d3fbace085d69d"},
+    {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b1f097878d74fe51e1ddd1be62d8e3682748875b461232cf4b52ddc6e6db0bba"},
+    {file = "coverage-7.6.12-cp311-cp311-win32.whl", hash = "sha256:1f7ffa05da41754e20512202c866d0ebfc440bba3b0ed15133070e20bf5aeb5f"},
+    {file = "coverage-7.6.12-cp311-cp311-win_amd64.whl", hash = "sha256:e216c5c45f89ef8971373fd1c5d8d1164b81f7f5f06bbf23c37e7908d19e8558"},
+    {file = "coverage-7.6.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b172f8e030e8ef247b3104902cc671e20df80163b60a203653150d2fc204d1ad"},
+    {file = "coverage-7.6.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:641dfe0ab73deb7069fb972d4d9725bf11c239c309ce694dd50b1473c0f641c3"},
+    {file = "coverage-7.6.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e549f54ac5f301e8e04c569dfdb907f7be71b06b88b5063ce9d6953d2d58574"},
+    {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959244a17184515f8c52dcb65fb662808767c0bd233c1d8a166e7cf74c9ea985"},
+    {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda1c5f347550c359f841d6614fb8ca42ae5cb0b74d39f8a1e204815ebe25750"},
+    {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ceeb90c3eda1f2d8c4c578c14167dbd8c674ecd7d38e45647543f19839dd6ea"},
+    {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f16f44025c06792e0fb09571ae454bcc7a3ec75eeb3c36b025eccf501b1a4c3"},
+    {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b076e625396e787448d27a411aefff867db2bffac8ed04e8f7056b07024eed5a"},
+    {file = "coverage-7.6.12-cp312-cp312-win32.whl", hash = "sha256:00b2086892cf06c7c2d74983c9595dc511acca00665480b3ddff749ec4fb2a95"},
+    {file = "coverage-7.6.12-cp312-cp312-win_amd64.whl", hash = "sha256:7ae6eabf519bc7871ce117fb18bf14e0e343eeb96c377667e3e5dd12095e0288"},
+    {file = "coverage-7.6.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:488c27b3db0ebee97a830e6b5a3ea930c4a6e2c07f27a5e67e1b3532e76b9ef1"},
+    {file = "coverage-7.6.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d1095bbee1851269f79fd8e0c9b5544e4c00c0c24965e66d8cba2eb5bb535fd"},
+    {file = "coverage-7.6.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0533adc29adf6a69c1baa88c3d7dbcaadcffa21afbed3ca7a225a440e4744bf9"},
+    {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53c56358d470fa507a2b6e67a68fd002364d23c83741dbc4c2e0680d80ca227e"},
+    {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cbb1a3027c79ca6310bf101014614f6e6e18c226474606cf725238cf5bc2d4"},
+    {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79cac3390bfa9836bb795be377395f28410811c9066bc4eefd8015258a7578c6"},
+    {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b148068e881faa26d878ff63e79650e208e95cf1c22bd3f77c3ca7b1d9821a3"},
+    {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8bec2ac5da793c2685ce5319ca9bcf4eee683b8a1679051f8e6ec04c4f2fd7dc"},
+    {file = "coverage-7.6.12-cp313-cp313-win32.whl", hash = "sha256:200e10beb6ddd7c3ded322a4186313d5ca9e63e33d8fab4faa67ef46d3460af3"},
+    {file = "coverage-7.6.12-cp313-cp313-win_amd64.whl", hash = "sha256:2b996819ced9f7dbb812c701485d58f261bef08f9b85304d41219b1496b591ef"},
+    {file = "coverage-7.6.12-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:299cf973a7abff87a30609879c10df0b3bfc33d021e1adabc29138a48888841e"},
+    {file = "coverage-7.6.12-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b467a8c56974bf06e543e69ad803c6865249d7a5ccf6980457ed2bc50312703"},
+    {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2458f275944db8129f95d91aee32c828a408481ecde3b30af31d552c2ce284a0"},
+    {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a9d8be07fb0832636a0f72b80d2a652fe665e80e720301fb22b191c3434d924"},
+    {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d47376a4f445e9743f6c83291e60adb1b127607a3618e3185bbc8091f0467b"},
+    {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b95574d06aa9d2bd6e5cc35a5bbe35696342c96760b69dc4287dbd5abd4ad51d"},
+    {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ecea0c38c9079570163d663c0433a9af4094a60aafdca491c6a3d248c7432827"},
+    {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2251fabcfee0a55a8578a9d29cecfee5f2de02f11530e7d5c5a05859aa85aee9"},
+    {file = "coverage-7.6.12-cp313-cp313t-win32.whl", hash = "sha256:eb5507795caabd9b2ae3f1adc95f67b1104971c22c624bb354232d65c4fc90b3"},
+    {file = "coverage-7.6.12-cp313-cp313t-win_amd64.whl", hash = "sha256:f60a297c3987c6c02ffb29effc70eadcbb412fe76947d394a1091a3615948e2f"},
+    {file = "coverage-7.6.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e7575ab65ca8399c8c4f9a7d61bbd2d204c8b8e447aab9d355682205c9dd948d"},
+    {file = "coverage-7.6.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8161d9fbc7e9fe2326de89cd0abb9f3599bccc1287db0aba285cb68d204ce929"},
+    {file = "coverage-7.6.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a1e465f398c713f1b212400b4e79a09829cd42aebd360362cd89c5bdc44eb87"},
+    {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f25d8b92a4e31ff1bd873654ec367ae811b3a943583e05432ea29264782dc32c"},
+    {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a936309a65cc5ca80fa9f20a442ff9e2d06927ec9a4f54bcba9c14c066323f2"},
+    {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa6f302a3a0b5f240ee201297fff0bbfe2fa0d415a94aeb257d8b461032389bd"},
+    {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f973643ef532d4f9be71dd88cf7588936685fdb576d93a79fe9f65bc337d9d73"},
+    {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78f5243bb6b1060aed6213d5107744c19f9571ec76d54c99cc15938eb69e0e86"},
+    {file = "coverage-7.6.12-cp39-cp39-win32.whl", hash = "sha256:69e62c5034291c845fc4df7f8155e8544178b6c774f97a99e2734b05eb5bed31"},
+    {file = "coverage-7.6.12-cp39-cp39-win_amd64.whl", hash = "sha256:b01a840ecc25dce235ae4c1b6a0daefb2a203dba0e6e980637ee9c2f6ee0df57"},
+    {file = "coverage-7.6.12-pp39.pp310-none-any.whl", hash = "sha256:7e39e845c4d764208e7b8f6a21c541ade741e2c41afabdfa1caa28687a3c98cf"},
+    {file = "coverage-7.6.12-py3-none-any.whl", hash = "sha256:eb8668cfbc279a536c633137deeb9435d2962caec279c3f8cf8b91fff6ff8953"},
+    {file = "coverage-7.6.12.tar.gz", hash = "sha256:48cfc4641d95d34766ad41d9573cc0f22a48aa88d22657a1fe01dca0dbae4de2"},
 ]
 
 [package.dependencies]
@@ -235,26 +236,26 @@ files = [
 
 [[package]]
 name = "dateparser"
-version = "1.2.0"
+version = "1.2.1"
 description = "Date parsing library designed to parse dates from HTML pages"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 groups = ["main"]
 files = [
-    {file = "dateparser-1.2.0-py2.py3-none-any.whl", hash = "sha256:0b21ad96534e562920a0083e97fd45fa959882d4162acc358705144520a35830"},
-    {file = "dateparser-1.2.0.tar.gz", hash = "sha256:7975b43a4222283e0ae15be7b4999d08c9a70e2d378ac87385b1ccf2cffbbb30"},
+    {file = "dateparser-1.2.1-py3-none-any.whl", hash = "sha256:bdcac262a467e6260030040748ad7c10d6bacd4f3b9cdb4cfd2251939174508c"},
+    {file = "dateparser-1.2.1.tar.gz", hash = "sha256:7e4919aeb48481dbfc01ac9683c8e20bfe95bb715a38c1e9f6af889f4f30ccc3"},
 ]
 
 [package.dependencies]
-python-dateutil = "*"
-pytz = "*"
-regex = "<2019.02.19 || >2019.02.19,<2021.8.27 || >2021.8.27"
-tzlocal = "*"
+python-dateutil = ">=2.7.0"
+pytz = ">=2024.2"
+regex = ">=2015.06.24,<2019.02.19 || >2019.02.19,<2021.8.27 || >2021.8.27"
+tzlocal = ">=0.2"
 
 [package.extras]
-calendars = ["convertdate", "hijri-converter"]
-fasttext = ["fasttext"]
-langdetect = ["langdetect"]
+calendars = ["convertdate (>=2.2.1)", "hijridate"]
+fasttext = ["fasttext (>=0.9.1)", "numpy (>=1.19.3,<2)"]
+langdetect = ["langdetect (>=1.0.0)"]
 
 [[package]]
 name = "exceptiongroup"
@@ -301,14 +302,14 @@ files = [
 
 [[package]]
 name = "jsonpickle"
-version = "4.0.1"
+version = "4.0.2"
 description = "jsonpickle encodes/decodes any Python object to/from JSON"
 optional = false
 python-versions = ">=3.8"
 groups = ["main"]
 files = [
-    {file = "jsonpickle-4.0.1-py3-none-any.whl", hash = "sha256:2973c0b0d988c6792ed6c446fa582c48352e79c2880fa2c013f1abde15905555"},
-    {file = "jsonpickle-4.0.1.tar.gz", hash = "sha256:b5336144d902958b92cb08bc1e76bfa47199b8afd454303693894defd2fa50c5"},
+    {file = "jsonpickle-4.0.2-py3-none-any.whl", hash = "sha256:cd3c90d32a68dcaa7f0e4b918bda7d4bb61f3c03b182d82dae2caf9ded0ab6b3"},
+    {file = "jsonpickle-4.0.2.tar.gz", hash = "sha256:3e650b9853adcdab9d9d62a88412b6d36e9a59ba423b01cacf0cd4ee80733aca"},
 ]
 
 [package.extras]
@@ -423,112 +424,112 @@ six = ">=1.5"
 
 [[package]]
 name = "pytz"
-version = "2024.2"
+version = "2025.1"
 description = "World timezone definitions, modern and historical"
 optional = false
 python-versions = "*"
 groups = ["main"]
 files = [
-    {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"},
-    {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"},
+    {file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"},
+    {file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"},
 ]
 
 [[package]]
 name = "rapidfuzz"
-version = "3.11.0"
+version = "3.12.1"
 description = "rapid fuzzy string matching"
 optional = false
 python-versions = ">=3.9"
 groups = ["main"]
 files = [
-    {file = "rapidfuzz-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb8a54543d16ab1b69e2c5ed96cabbff16db044a50eddfc028000138ca9ddf33"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:231c8b2efbd7f8d2ecd1ae900363ba168b8870644bb8f2b5aa96e4a7573bde19"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54e7f442fb9cca81e9df32333fb075ef729052bcabe05b0afc0441f462299114"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:906f1f2a1b91c06599b3dd1be207449c5d4fc7bd1e1fa2f6aef161ea6223f165"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed59044aea9eb6c663112170f2399b040d5d7b162828b141f2673e822093fa8"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cb1965a28b0fa64abdee130c788a0bc0bb3cf9ef7e3a70bf055c086c14a3d7e"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b488b244931d0291412917e6e46ee9f6a14376625e150056fe7c4426ef28225"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f0ba13557fec9d5ffc0a22826754a7457cc77f1b25145be10b7bb1d143ce84c6"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3871fa7dfcef00bad3c7e8ae8d8fd58089bad6fb21f608d2bf42832267ca9663"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:b2669eafee38c5884a6e7cc9769d25c19428549dcdf57de8541cf9e82822e7db"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ffa1bb0e26297b0f22881b219ffc82a33a3c84ce6174a9d69406239b14575bd5"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:45b15b8a118856ac9caac6877f70f38b8a0d310475d50bc814698659eabc1cdb"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-win32.whl", hash = "sha256:22033677982b9c4c49676f215b794b0404073f8974f98739cb7234e4a9ade9ad"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:be15496e7244361ff0efcd86e52559bacda9cd975eccf19426a0025f9547c792"},
-    {file = "rapidfuzz-3.11.0-cp310-cp310-win_arm64.whl", hash = "sha256:714a7ba31ba46b64d30fccfe95f8013ea41a2e6237ba11a805a27cdd3bce2573"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8724a978f8af7059c5323d523870bf272a097478e1471295511cf58b2642ff83"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b63cb1f2eb371ef20fb155e95efd96e060147bdd4ab9fc400c97325dfee9fe1"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82497f244aac10b20710448645f347d862364cc4f7d8b9ba14bd66b5ce4dec18"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:339607394941801e6e3f6c1ecd413a36e18454e7136ed1161388de674f47f9d9"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84819390a36d6166cec706b9d8f0941f115f700b7faecab5a7e22fc367408bc3"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eea8d9e20632d68f653455265b18c35f90965e26f30d4d92f831899d6682149b"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b659e1e2ea2784a9a397075a7fc395bfa4fe66424042161c4bcaf6e4f637b38"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1315cd2a351144572e31fe3df68340d4b83ddec0af8b2e207cd32930c6acd037"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a7743cca45b4684c54407e8638f6d07b910d8d811347b9d42ff21262c7c23245"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:5bb636b0150daa6d3331b738f7c0f8b25eadc47f04a40e5c23c4bfb4c4e20ae3"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:42f4dd264ada7a9aa0805ea0da776dc063533917773cf2df5217f14eb4429eae"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:51f24cb39e64256221e6952f22545b8ce21cacd59c0d3e367225da8fc4b868d8"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-win32.whl", hash = "sha256:aaf391fb6715866bc14681c76dc0308f46877f7c06f61d62cc993b79fc3c4a2a"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:ebadd5b8624d8ad503e505a99b8eb26fe3ea9f8e9c2234e805a27b269e585842"},
-    {file = "rapidfuzz-3.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:d895998fec712544c13cfe833890e0226585cf0391dd3948412441d5d68a2b8c"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f382fec4a7891d66fb7163c90754454030bb9200a13f82ee7860b6359f3f2fa8"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dfaefe08af2a928e72344c800dcbaf6508e86a4ed481e28355e8d4b6a6a5230e"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92ebb7c12f682b5906ed98429f48a3dd80dd0f9721de30c97a01473d1a346576"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a1b3ebc62d4bcdfdeba110944a25ab40916d5383c5e57e7c4a8dc0b6c17211a"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c6d7fea39cb33e71de86397d38bf7ff1a6273e40367f31d05761662ffda49e4"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99aebef8268f2bc0b445b5640fd3312e080bd17efd3fbae4486b20ac00466308"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4469307f464ae3089acf3210b8fc279110d26d10f79e576f385a98f4429f7d97"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:eb97c53112b593f89a90b4f6218635a9d1eea1d7f9521a3b7d24864228bbc0aa"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ef8937dae823b889c0273dfa0f0f6c46a3658ac0d851349c464d1b00e7ff4252"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d95f9e9f3777b96241d8a00d6377cc9c716981d828b5091082d0fe3a2924b43e"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:b1d67d67f89e4e013a5295e7523bc34a7a96f2dba5dd812c7c8cb65d113cbf28"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d994cf27e2f874069884d9bddf0864f9b90ad201fcc9cb2f5b82bacc17c8d5f2"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-win32.whl", hash = "sha256:ba26d87fe7fcb56c4a53b549a9e0e9143f6b0df56d35fe6ad800c902447acd5b"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:b1f7efdd7b7adb32102c2fa481ad6f11923e2deb191f651274be559d56fc913b"},
-    {file = "rapidfuzz-3.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:ed78c8e94f57b44292c1a0350f580e18d3a3c5c0800e253f1583580c1b417ad2"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e60814edd0c9b511b5f377d48b9782b88cfe8be07a98f99973669299c8bb318a"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f28952da055dbfe75828891cd3c9abf0984edc8640573c18b48c14c68ca5e06"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e8f93bc736020351a6f8e71666e1f486bb8bd5ce8112c443a30c77bfde0eb68"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76a4a11ba8f678c9e5876a7d465ab86def047a4fcc043617578368755d63a1bc"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc0e0d41ad8a056a9886bac91ff9d9978e54a244deb61c2972cc76b66752de9c"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8ea35f2419c7d56b3e75fbde2698766daedb374f20eea28ac9b1f668ef4f74"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd340bbd025302276b5aa221dccfe43040c7babfc32f107c36ad783f2ffd8775"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:494eef2c68305ab75139034ea25328a04a548d297712d9cf887bf27c158c388b"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5a167344c1d6db06915fb0225592afdc24d8bafaaf02de07d4788ddd37f4bc2f"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:8c7af25bda96ac799378ac8aba54a8ece732835c7b74cfc201b688a87ed11152"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d2a0f7e17f33e7890257367a1662b05fecaf56625f7dbb6446227aaa2b86448b"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4d0d26c7172bdb64f86ee0765c5b26ea1dc45c52389175888ec073b9b28f4305"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-win32.whl", hash = "sha256:6ad02bab756751c90fa27f3069d7b12146613061341459abf55f8190d899649f"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:b1472986fd9c5d318399a01a0881f4a0bf4950264131bb8e2deba9df6d8c362b"},
-    {file = "rapidfuzz-3.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:c408f09649cbff8da76f8d3ad878b64ba7f7abdad1471efb293d2c075e80c822"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1bac4873f6186f5233b0084b266bfb459e997f4c21fc9f029918f44a9eccd304"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f9f12c2d0aa52b86206d2059916153876a9b1cf9dfb3cf2f344913167f1c3d4"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd501de6f7a8f83557d20613b58734d1cb5f0be78d794cde64fe43cfc63f5f2"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4416ca69af933d4a8ad30910149d3db6d084781d5c5fdedb713205389f535385"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f0821b9bdf18c5b7d51722b906b233a39b17f602501a966cfbd9b285f8ab83cd"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0edecc3f90c2653298d380f6ea73b536944b767520c2179ec5d40b9145e47aa"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4513dd01cee11e354c31b75f652d4d466c9440b6859f84e600bdebfccb17735a"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d9727b85511b912571a76ce53c7640ba2c44c364e71cef6d7359b5412739c570"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ab9eab33ee3213f7751dc07a1a61b8d9a3d748ca4458fffddd9defa6f0493c16"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6b01c1ddbb054283797967ddc5433d5c108d680e8fa2684cf368be05407b07e4"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:3857e335f97058c4b46fa39ca831290b70de554a5c5af0323d2f163b19c5f2a6"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d98a46cf07c0c875d27e8a7ed50f304d83063e49b9ab63f21c19c154b4c0d08d"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-win32.whl", hash = "sha256:c36539ed2c0173b053dafb221458812e178cfa3224ade0960599bec194637048"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:ec8d7d8567e14af34a7911c98f5ac74a3d4a743cd848643341fc92b12b3784ff"},
-    {file = "rapidfuzz-3.11.0-cp39-cp39-win_arm64.whl", hash = "sha256:62171b270ecc4071be1c1f99960317db261d4c8c83c169e7f8ad119211fe7397"},
-    {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f06e3c4c0a8badfc4910b9fd15beb1ad8f3b8fafa8ea82c023e5e607b66a78e4"},
-    {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fe7aaf5a54821d340d21412f7f6e6272a9b17a0cbafc1d68f77f2fc11009dcd5"},
-    {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25398d9ac7294e99876a3027ffc52c6bebeb2d702b1895af6ae9c541ee676702"},
-    {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a52eea839e4bdc72c5e60a444d26004da00bb5bc6301e99b3dde18212e41465"},
-    {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c87319b0ab9d269ab84f6453601fd49b35d9e4a601bbaef43743f26fabf496c"},
-    {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3048c6ed29d693fba7d2a7caf165f5e0bb2b9743a0989012a98a47b975355cca"},
-    {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b04f29735bad9f06bb731c214f27253bd8bedb248ef9b8a1b4c5bde65b838454"},
-    {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7864e80a0d4e23eb6194254a81ee1216abdc53f9dc85b7f4d56668eced022eb8"},
-    {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3794df87313dfb56fafd679b962e0613c88a293fd9bd5dd5c2793d66bf06a101"},
-    {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d71da0012face6f45432a11bc59af19e62fac5a41f8ce489e80c0add8153c3d1"},
-    {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff38378346b7018f42cbc1f6d1d3778e36e16d8595f79a312b31e7c25c50bd08"},
-    {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6668321f90aa02a5a789d4e16058f2e4f2692c5230252425c3532a8a62bc3424"},
-    {file = "rapidfuzz-3.11.0.tar.gz", hash = "sha256:a53ca4d3f52f00b393fab9b5913c5bafb9afc27d030c8a1db1283da6917a860f"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbb7ea2fd786e6d66f225ef6eef1728832314f47e82fee877cb2a793ebda9579"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1ae41361de05762c1eaa3955e5355de7c4c6f30d1ef1ea23d29bf738a35809ab"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc3c39e0317e7f68ba01bac056e210dd13c7a0abf823e7b6a5fe7e451ddfc496"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69f2520296f1ae1165b724a3aad28c56fd0ac7dd2e4cff101a5d986e840f02d4"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34dcbf5a7daecebc242f72e2500665f0bde9dd11b779246c6d64d106a7d57c99"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:773ab37fccf6e0513891f8eb4393961ddd1053c6eb7e62eaa876e94668fc6d31"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ecf0e6de84c0bc2c0f48bc03ba23cef2c5f1245db7b26bc860c11c6fd7a097c"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4dc2ebad4adb29d84a661f6a42494df48ad2b72993ff43fad2b9794804f91e45"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8389d98b9f54cb4f8a95f1fa34bf0ceee639e919807bb931ca479c7a5f2930bf"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:165bcdecbfed9978962da1d3ec9c191b2ff9f1ccc2668fbaf0613a975b9aa326"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:129d536740ab0048c1a06ccff73c683f282a2347c68069affae8dbc423a37c50"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b67e390261ffe98ec86c771b89425a78b60ccb610c3b5874660216fcdbded4b"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-win32.whl", hash = "sha256:a66520180d3426b9dc2f8d312f38e19bc1fc5601f374bae5c916f53fa3534a7d"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:82260b20bc7a76556cecb0c063c87dad19246a570425d38f8107b8404ca3ac97"},
+    {file = "rapidfuzz-3.12.1-cp310-cp310-win_arm64.whl", hash = "sha256:3a860d103bbb25c69c2e995fdf4fac8cb9f77fb69ec0a00469d7fd87ff148f46"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d9afad7b16d01c9e8929b6a205a18163c7e61b6cd9bcf9c81be77d5afc1067a"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb424ae7240f2d2f7d8dda66a61ebf603f74d92f109452c63b0dbf400204a437"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42149e6d13bd6d06437d2a954dae2184dadbbdec0fdb82dafe92860d99f80519"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:760ac95d788f2964b73da01e0bdffbe1bf2ad8273d0437565ce9092ae6ad1fbc"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2cf27e8e4bf7bf9d92ef04f3d2b769e91c3f30ba99208c29f5b41e77271a2614"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00ceb8ff3c44ab0d6014106c71709c85dee9feedd6890eff77c814aa3798952b"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b61c558574fbc093d85940c3264c08c2b857b8916f8e8f222e7b86b0bb7d12"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:346a2d8f17224e99f9ef988606c83d809d5917d17ad00207237e0965e54f9730"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d60d1db1b7e470e71ae096b6456e20ec56b52bde6198e2dbbc5e6769fa6797dc"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2477da227e266f9c712f11393182c69a99d3c8007ea27f68c5afc3faf401cc43"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8499c7d963ddea8adb6cffac2861ee39a1053e22ca8a5ee9de1197f8dc0275a5"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:12802e5c4d8ae104fb6efeeb436098325ce0dca33b461c46e8df015c84fbef26"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-win32.whl", hash = "sha256:e1061311d07e7cdcffa92c9b50c2ab4192907e70ca01b2e8e1c0b6b4495faa37"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6e4ed63e204daa863a802eec09feea5448617981ba5d150f843ad8e3ae071a4"},
+    {file = "rapidfuzz-3.12.1-cp311-cp311-win_arm64.whl", hash = "sha256:920733a28c3af47870835d59ca9879579f66238f10de91d2b4b3f809d1ebfc5b"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f6235b57ae3faa3f85cb3f90c9fee49b21bd671b76e90fc99e8ca2bdf0b5e4a3"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:af4585e5812632c357fee5ab781c29f00cd06bea58f8882ff244cc4906ba6c9e"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5942dc4460e5030c5f9e1d4c9383de2f3564a2503fe25e13e89021bcbfea2f44"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b31ab59e1a0df5afc21f3109b6cfd77b34040dbf54f1bad3989f885cfae1e60"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97c885a7a480b21164f57a706418c9bbc9a496ec6da087e554424358cadde445"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d844c0587d969ce36fbf4b7cbf0860380ffeafc9ac5e17a7cbe8abf528d07bb"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93c95dce8917bf428064c64024de43ffd34ec5949dd4425780c72bd41f9d969"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:834f6113d538af358f39296604a1953e55f8eeffc20cb4caf82250edbb8bf679"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a940aa71a7f37d7f0daac186066bf6668d4d3b7e7ef464cb50bc7ba89eae1f51"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ec9eaf73501c9a7de2c6938cb3050392e2ee0c5ca3921482acf01476b85a7226"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3c5ec360694ac14bfaeb6aea95737cf1a6cf805b5fe8ea7fd28814706c7fa838"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6b5e176524653ac46f1802bdd273a4b44a5f8d0054ed5013a8e8a4b72f254599"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-win32.whl", hash = "sha256:6f463c6f1c42ec90e45d12a6379e18eddd5cdf74138804d8215619b6f4d31cea"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:b894fa2b30cd6498a29e5c470cb01c6ea898540b7e048a0342775a5000531334"},
+    {file = "rapidfuzz-3.12.1-cp312-cp312-win_arm64.whl", hash = "sha256:43bb17056c5d1332f517b888c4e57846c4b5f936ed304917eeb5c9ac85d940d4"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:97f824c15bc6933a31d6e3cbfa90188ba0e5043cf2b6dd342c2b90ee8b3fd47c"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a973b3f5cabf931029a3ae4a0f72e3222e53d412ea85fc37ddc49e1774f00fbf"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df7880e012228722dec1be02b9ef3898ed023388b8a24d6fa8213d7581932510"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c78582f50e75e6c2bc38c791ed291cb89cf26a3148c47860c1a04d6e5379c8e"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d7d9e6a04d8344b0198c96394c28874086888d0a2b2f605f30d1b27b9377b7d"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5620001fd4d6644a2f56880388179cc8f3767670f0670160fcb97c3b46c828af"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0666ab4c52e500af7ba5cc17389f5d15c0cdad06412c80312088519fdc25686d"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:27b4d440fa50b50c515a91a01ee17e8ede719dca06eef4c0cccf1a111a4cfad3"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:83dccfd5a754f2a0e8555b23dde31f0f7920601bfa807aa76829391ea81e7c67"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b572b634740e047c53743ed27a1bb3b4f93cf4abbac258cd7af377b2c4a9ba5b"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7fa7b81fb52902d5f78dac42b3d6c835a6633b01ddf9b202a3ca8443be4b2d6a"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b1d4fbff980cb6baef4ee675963c081f7b5d6580a105d6a4962b20f1f880e1fb"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-win32.whl", hash = "sha256:3fe8da12ea77271097b303fa7624cfaf5afd90261002314e3b0047d36f4afd8d"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:6f7e92fc7d2a7f02e1e01fe4f539324dfab80f27cb70a30dd63a95445566946b"},
+    {file = "rapidfuzz-3.12.1-cp313-cp313-win_arm64.whl", hash = "sha256:e31be53d7f4905a6a038296d8b773a79da9ee9f0cd19af9490c5c5a22e37d2e5"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bef5c91d5db776523530073cda5b2a276283258d2f86764be4a008c83caf7acd"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:841e0c2a5fbe8fc8b9b1a56e924c871899932c0ece7fbd970aa1c32bfd12d4bf"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046fc67f3885d94693a2151dd913aaf08b10931639cbb953dfeef3151cb1027c"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4d2d39b2e76c17f92edd6d384dc21fa020871c73251cdfa017149358937a41d"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5857dda85165b986c26a474b22907db6b93932c99397c818bcdec96340a76d5"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c26cd1b9969ea70dbf0dbda3d2b54ab4b2e683d0fd0f17282169a19563efeb1"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf56ea4edd69005786e6c80a9049d95003aeb5798803e7a2906194e7a3cb6472"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fbe7580b5fb2db8ebd53819171ff671124237a55ada3f64d20fc9a149d133960"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:018506a53c3b20dcbda8c93d4484b9eb1764c93d5ea16be103cf6b0d8b11d860"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:325c9c71b737fcd32e2a4e634c430c07dd3d374cfe134eded3fe46e4c6f9bf5d"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:930756639643e3aa02d3136b6fec74e5b9370a24f8796e1065cd8a857a6a6c50"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0acbd27543b158cb915fde03877383816a9e83257832818f1e803bac9b394900"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-win32.whl", hash = "sha256:80ff9283c54d7d29b2d954181e137deee89bec62f4a54675d8b6dbb6b15d3e03"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:fd37e53f0ed239d0cec27b250cec958982a8ba252ce64aa5e6052de3a82fa8db"},
+    {file = "rapidfuzz-3.12.1-cp39-cp39-win_arm64.whl", hash = "sha256:4a4422e4f73a579755ab60abccb3ff148b5c224b3c7454a13ca217dfbad54da6"},
+    {file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b7cba636c32a6fc3a402d1cb2c70c6c9f8e6319380aaf15559db09d868a23e56"},
+    {file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b79286738a43e8df8420c4b30a92712dec6247430b130f8e015c3a78b6d61ac2"},
+    {file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dc1937198e7ff67e217e60bfa339f05da268d91bb15fec710452d11fe2fdf60"},
+    {file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b85817a57cf8db32dd5d2d66ccfba656d299b09eaf86234295f89f91be1a0db2"},
+    {file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04283c6f3e79f13a784f844cd5b1df4f518ad0f70c789aea733d106c26e1b4fb"},
+    {file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a718f740553aad5f4daef790191511da9c6eae893ee1fc2677627e4b624ae2db"},
+    {file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cbdf145c7e4ebf2e81c794ed7a582c4acad19e886d5ad6676086369bd6760753"},
+    {file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0d03ad14a26a477be221fddc002954ae68a9e2402b9d85433f2d0a6af01aa2bb"},
+    {file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1187aeae9c89e838d2a0a2b954b4052e4897e5f62e5794ef42527bf039d469e"},
+    {file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd47dfb1bca9673a48b923b3d988b7668ee8efd0562027f58b0f2b7abf27144c"},
+    {file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187cdb402e223264eebed2fe671e367e636a499a7a9c82090b8d4b75aa416c2a"},
+    {file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6899b41bf6c30282179f77096c1939f1454836440a8ab05b48ebf7026a3b590"},
+    {file = "rapidfuzz-3.12.1.tar.gz", hash = "sha256:6a98bbca18b4a37adddf2d8201856441c26e9c981d8895491b5bc857b5f780eb"},
 ]
 
 [package.extras]
@@ -730,14 +731,14 @@ files = [
 
 [[package]]
 name = "tzlocal"
-version = "5.2"
+version = "5.3"
 description = "tzinfo object for the local timezone"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 groups = ["main"]
 files = [
-    {file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"},
-    {file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"},
+    {file = "tzlocal-5.3-py3-none-any.whl", hash = "sha256:3814135a1bb29763c6e4f08fd6e41dbb435c7a60bfbb03270211bcc537187d8c"},
+    {file = "tzlocal-5.3.tar.gz", hash = "sha256:2fafbfc07e9d8b49ade18f898d6bcd37ae88ce3ad6486842a2e4f03af68323d2"},
 ]
 
 [package.dependencies]
diff --git a/pkgs/by-name/up/update-vim-plugins/update_vim_plugins/update.py b/pkgs/by-name/up/update-vim-plugins/update_vim_plugins/update.py
index 7eb3eeb4..b338d81d 100644
--- a/pkgs/by-name/up/update-vim-plugins/update_vim_plugins/update.py
+++ b/pkgs/by-name/up/update-vim-plugins/update_vim_plugins/update.py
@@ -157,7 +157,7 @@ class UpdateCommand(Command):
         failed_but_known = None
         failed_plugin = None
         try:
-            debug_string += f" - <info>({i+1}/{size}) Processing</info> {spec!r}\n"
+            debug_string += f" - <info>({i + 1}/{size}) Processing</info> {spec!r}\n"
             vim_plugin = plugin_from_spec(spec)
             debug_string += f"   • <comment>Success</comment> {vim_plugin!r}\n"
             processed_plugin = vim_plugin
diff --git a/pkgs/by-name/vi/vimExtraPlugins/plugins/plugins.md b/pkgs/by-name/vi/vimExtraPlugins/plugins/plugins.md
index bc620f4e..47337126 100644
--- a/pkgs/by-name/vi/vimExtraPlugins/plugins/plugins.md
+++ b/pkgs/by-name/vi/vimExtraPlugins/plugins/plugins.md
@@ -2,5 +2,5 @@
 
 | Repo | Last Update | Nix package name | Last checked |
 |:---|:---|:---|:---|
-| [lmburns/lf.nvim](https://github.com/lmburns/lf.nvim) | 2023-10-03 | `lf-nvim` | 2025-01-29 |
-| [nvim-telescope/telescope-bibtex.nvim](https://github.com/nvim-telescope/telescope-bibtex.nvim) | 2024-03-28 | `telescope-bibtex-nvim` | 2025-01-29 |
+| [lmburns/lf.nvim](https://github.com/lmburns/lf.nvim) | 2023-10-03 | `lf-nvim` | 2025-02-22 |
+| [nvim-telescope/telescope-bibtex.nvim](https://github.com/nvim-telescope/telescope-bibtex.nvim) | 2024-03-28 | `telescope-bibtex-nvim` | 2025-02-22 |
diff --git a/pkgs/by-name/yt/yt/package.nix b/pkgs/by-name/yt/yt/package.nix
index 90a70473..3c780374 100644
--- a/pkgs/by-name/yt/yt/package.nix
+++ b/pkgs/by-name/yt/yt/package.nix
@@ -10,18 +10,18 @@
   python3,
   rustPlatform,
   sqlite,
-  blake3,
+  fd,
 }: let
-  version = "1.4.1";
+  version = "1.5.0";
 
   src = fetchgit {
     url = "https://git.foss-syndicate.org/bpeetz/clients/yt";
     rev = "v${version}";
-    hash = "sha256-Zuc3hrhvYdz2ktQhfMcLX7E5W/ZneMMLJ6+CoJ/JZMs=";
+    hash = "sha256-P/mpF2KPjoC7XZ6juJubeGEHhL2ajdOeiuIEb5sYrS0=";
   };
 
   buildInputs = [
-    (python3.withPackages (ps: [ps.yt-dlp blake3]))
+    (python3.withPackages (ps: [ps.yt-dlp]))
     mpv-unwrapped.dev
     ffmpeg
   ];
@@ -33,6 +33,7 @@ in
     nativeBuildInputs = [
       makeWrapper
       sqlite
+      fd
     ];
 
     passthru.updateScript = gitUpdater {rev-prefix = "v";};
@@ -46,7 +47,7 @@ in
       PYO3_PYTHON = lib.getExe (python3.withPackages (ps: [ps.yt-dlp]));
 
       C_INCLUDE_PATH = "${glibc.dev}/include";
-      DATABASE_URL = "sqlite://target/database.sqlite";
+      DATABASE_URL = "sqlite://target/database.sqlx";
       LIBCLANG_INCLUDE_PATH = "${llvmPackages_latest.clang-unwrapped.lib}/lib/clang/${clang_version}/include";
       LIBCLANG_PATH = "${llvmPackages_latest.clang-unwrapped.lib}/lib/libclang.so";
     };
@@ -55,19 +56,14 @@ in
     doCheck = false;
 
     prePatch = ''
-      echo "$PATH"
       bash ./scripts/mkdb.sh
     '';
 
-    cargoHash = "sha256-QIAZb8twLxLm3TJOtb++pTWz98v49pt13auAEAeYFSk=";
-
-    postBuild = ''
-      install -m755 ./python_update/raw_update.py -D "$out/bin/raw_update.py"
-      patchShebangs "$out/bin/raw_update.py"
-    '';
+    useFetchCargoVendor = true;
+    cargoHash = "sha256-0XTbC+mFsczUFXqAtiQ+BIsCfKilerhlzE41pzVjLVs=";
 
     postInstall = ''
       wrapProgram $out/bin/yt \
-        --prefix PATH : ${lib.makeBinPath buildInputs}:$out/bin
+        --prefix PATH : ${lib.makeBinPath buildInputs}
     '';
   }
diff --git a/tests/by-name/nv/nvim-neorg/test.desc b/tests/by-name/nv/nvim-neorg/test.desc
index bd7b7312..bd1e8f49 100644
--- a/tests/by-name/nv/nvim-neorg/test.desc
+++ b/tests/by-name/nv/nvim-neorg/test.desc
@@ -61,7 +61,7 @@ Sleep 0.5
 
 
 Type 10t
-Sleep 0.5
+Sleep 1.0
 
 Expect ^11\s*◉ Some other content$