aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--flake.lock861
-rw-r--r--flake.lock.license9
-rw-r--r--flake.nix258
-rw-r--r--flake/default.nix5
-rw-r--r--hosts/by-name/apzu/hardware.nix5
-rw-r--r--hosts/default.nix7
-rw-r--r--inputs.nix53
-rw-r--r--modules/by-name/at/atuin/module.nix1
-rw-r--r--modules/by-name/au/ausweisapp/module.nix18
-rw-r--r--modules/by-name/ba/backup/module.nix4
-rw-r--r--modules/by-name/bo/boot/iso_entry/archlive_iso.nix86
-rw-r--r--modules/by-name/bo/boot/iso_entry/signing_key.nix27
-rw-r--r--modules/by-name/bo/boot/module.nix289
-rw-r--r--modules/by-name/cl/cleanup/module.nix3
-rw-r--r--modules/by-name/di/direnv/module.nix8
-rw-r--r--modules/by-name/di/disks/module.nix85
-rw-r--r--modules/by-name/fo/foot/module.nix82
-rw-r--r--modules/by-name/im/impermanence/module.nix26
-rwxr-xr-xmodules/by-name/lf/lf/commands/base.sh10
-rw-r--r--modules/by-name/lf/lf/commands/default.nix20
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/archive_decompress.sh2
-rwxr-xr-xmodules/by-name/lf/lf/commands/scripts/cd_lf_make_map.sh27
-rw-r--r--modules/by-name/lf/lf/ctpv/helpers.sh1
-rw-r--r--modules/by-name/lf/lf/ctpv/prev/application/archive/default.nix2
-rw-r--r--modules/by-name/lf/lf/ctpv/prev/application/epub/default.nix1
-rw-r--r--modules/by-name/lf/lf/ctpv/prev/application/pdf/default.nix1
-rw-r--r--modules/by-name/lf/lf/ctpv/prev/audio/default.nix3
-rw-r--r--modules/by-name/lf/lf/ctpv/prev/font/default.nix1
-rw-r--r--modules/by-name/lf/lf/ctpv/prev/image/default.nix1
-rw-r--r--modules/by-name/lf/lf/ctpv/prev/image/svg+xml/default.nix1
-rw-r--r--modules/by-name/lf/lf/ctpv/prev/video/default.nix1
-rw-r--r--modules/by-name/lf/lf/keybindings/default.nix18
-rw-r--r--modules/by-name/lf/lf/module.nix17
-rwxr-xr-xmodules/by-name/lf/lf/wrappers/ll/ll.sh14
-rw-r--r--modules/by-name/lo/locale/module.nix3
-rw-r--r--modules/by-name/ly/ly/module.nix1
-rw-r--r--modules/by-name/mp/mpd/module.nix5
-rw-r--r--modules/by-name/mp/mpd/mpc.nix32
-rw-r--r--modules/by-name/mp/mpv/module.nix10
-rw-r--r--modules/by-name/ni/nix/module.nix86
-rw-r--r--modules/by-name/ni/nixos-shell/module.nix5
-rw-r--r--modules/by-name/ni/nixpkgs/module.nix7
-rw-r--r--modules/by-name/nv/nvim/plgs/femaco/lua/femaco.lua43
-rw-r--r--modules/by-name/nv/nvim/plgs/luasnip/snippets/all.lua178
-rw-r--r--modules/by-name/nv/nvim/plgs/luasnip/snippets/tex/delimiter.lua20
-rw-r--r--modules/by-name/nv/nvim/plgs/luasnip/snippets/tex/greek.lua68
-rw-r--r--modules/by-name/nv/nvim/plgs/neorg/default.nix2
-rw-r--r--modules/by-name/qu/qutebrowser/include/redirects.py2
-rw-r--r--modules/by-name/qu/qutebrowser/module.hm.nix4
-rw-r--r--modules/by-name/qu/qutebrowser/module.nix6
-rw-r--r--modules/by-name/ri/river/keymap.nix9
-rw-r--r--modules/by-name/ss/ssh/module.nix38
-rw-r--r--modules/common/default.nix11
-rw-r--r--modules/home.legacy/conf/beets/default.nix11
-rw-r--r--modules/home.legacy/conf/beets/plugins/mbsubmit/default.nix0
-rw-r--r--modules/home.legacy/conf/gtk/default.nix1
-rw-r--r--modules/home.legacy/pkgs/default.nix4
-rw-r--r--notes/beets_import.md20
-rw-r--r--npins/default.nix249
-rw-r--r--npins/full.nix8
-rw-r--r--npins/sources.json424
-rwxr-xr-xpkgs/by-name/co/con2pdf/con2pdf.sh6
-rw-r--r--pkgs/by-name/fu/fupdate-sys/package.nix41
-rw-r--r--pkgs/by-name/fu/fupdate/Cargo.lock12
-rw-r--r--pkgs/by-name/fu/fupdate/Cargo.toml4
-rw-r--r--pkgs/by-name/fu/fupdate/flake.lock27
-rw-r--r--pkgs/by-name/fu/fupdate/flake.lock.license9
-rw-r--r--pkgs/by-name/fu/fupdate/flake.nix12
-rw-r--r--pkgs/by-name/fu/fupdate/src/cli.rs2
-rw-r--r--pkgs/by-name/fu/fupdate/src/main.rs2
-rwxr-xr-xpkgs/by-name/fu/fupdate/update.sh4
-rw-r--r--pkgs/by-name/lf/lf-make-map/Cargo.lock258
-rw-r--r--pkgs/by-name/lf/lf-make-map/Cargo.toml5
-rw-r--r--pkgs/by-name/lf/lf-make-map/flake.lock27
-rw-r--r--pkgs/by-name/lf/lf-make-map/flake.lock.license9
-rw-r--r--pkgs/by-name/lf/lf-make-map/flake.nix10
-rw-r--r--pkgs/by-name/lf/lf-make-map/src/cli.rs6
-rw-r--r--pkgs/by-name/lf/lf-make-map/src/main.rs89
-rw-r--r--pkgs/by-name/lf/lf-make-map/src/mapping/interactive.rs172
-rw-r--r--pkgs/by-name/lf/lf-make-map/src/mapping/map_key.rs12
-rw-r--r--pkgs/by-name/lf/lf-make-map/src/mapping/mod.rs1
-rwxr-xr-xpkgs/by-name/lf/lf-make-map/tests/base.sh2
-rw-r--r--pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs/output.old13
-rwxr-xr-xpkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs/test.sh49
-rw-r--r--pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs_duplicates/output.old17
-rwxr-xr-xpkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs_duplicates/test.sh53
-rwxr-xr-xpkgs/by-name/lf/lf-make-map/tests/cases/simple/test.sh8
-rwxr-xr-xpkgs/by-name/lf/lf-make-map/update.sh4
-rw-r--r--pkgs/by-name/mp/mpdpopm/Cargo.lock321
-rw-r--r--pkgs/by-name/mp/mpdpopm/Cargo.toml29
-rw-r--r--pkgs/by-name/mp/mpdpopm/README.md189
-rw-r--r--pkgs/by-name/mp/mpdpopm/flake.lock48
-rw-r--r--pkgs/by-name/mp/mpdpopm/flake.nix20
-rw-r--r--pkgs/by-name/mp/mpdpopm/package.nix2
-rw-r--r--pkgs/by-name/mp/mpdpopm/src/bin/mpdpopm/cli.rs3
-rw-r--r--pkgs/by-name/mp/mpdpopm/src/dj/algorithms.rs2
-rw-r--r--pkgs/by-name/mp/mpdpopm/src/lib.rs2
-rwxr-xr-xpkgs/by-name/mp/mpdpopm/update.sh4
-rwxr-xr-xpkgs/by-name/mp/mpp-searchadd/mpp-searchadd.sh5
-rw-r--r--pkgs/by-name/no/notify-run/flake.lock27
-rw-r--r--pkgs/by-name/no/notify-run/flake.lock.license9
-rw-r--r--pkgs/by-name/no/notify-run/flake.nix7
-rwxr-xr-xpkgs/by-name/no/notify-run/update.sh4
-rw-r--r--pkgs/by-name/qu/qutebrowser-patched/package.nix29
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/Cargo.lock62
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/Cargo.toml16
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/flake.lock27
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/flake.lock.license9
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/flake.nix7
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/key_map/commands.rs2
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs8
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/wayland/dispatches.rs5
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/wayland/mod.rs2
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/wayland/render/layout.rs2
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/wayland/render/mod.rs8
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/wayland/river/protocols.rs2
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/multi.rs4
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/raw.rs2
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/slot.rs11
-rwxr-xr-xpkgs/by-name/ri/river-mk-keymap/update.sh4
-rw-r--r--pkgs/by-name/ta/tails-iso/files.json7
-rw-r--r--pkgs/by-name/ta/tails-iso/package.nix91
-rwxr-xr-xpkgs/by-name/ta/tails-iso/update.sh66
-rw-r--r--pkgs/by-name/ts/tskm/Cargo.lock336
-rw-r--r--pkgs/by-name/ts/tskm/Cargo.toml26
-rw-r--r--pkgs/by-name/ts/tskm/flake.lock27
-rw-r--r--pkgs/by-name/ts/tskm/flake.lock.license9
-rw-r--r--pkgs/by-name/ts/tskm/flake.nix7
-rw-r--r--pkgs/by-name/ts/tskm/src/browser/mod.rs45
-rw-r--r--pkgs/by-name/ts/tskm/src/cli.rs71
-rw-r--r--pkgs/by-name/ts/tskm/src/interface/input/handle.rs5
-rw-r--r--pkgs/by-name/ts/tskm/src/interface/input/mod.rs2
-rw-r--r--pkgs/by-name/ts/tskm/src/interface/neorg/handle.rs9
-rw-r--r--pkgs/by-name/ts/tskm/src/interface/open/handle.rs28
-rw-r--r--pkgs/by-name/ts/tskm/src/interface/open/mod.rs2
-rw-r--r--pkgs/by-name/ts/tskm/src/main.rs11
-rw-r--r--pkgs/by-name/ts/tskm/src/state.rs26
-rw-r--r--pkgs/by-name/ts/tskm/src/task/mod.rs56
-rwxr-xr-xpkgs/by-name/ts/tskm/update.sh4
-rw-r--r--pkgs/by-name/yt/yt/package.nix4
-rwxr-xr-xpkgs/update_pkgs.sh2
-rw-r--r--scripts/npins_to_unflake.jq34
-rwxr-xr-xscripts/unflake.sh6
-rwxr-xr-xscripts/why-depends61
-rw-r--r--unflake.nix193
-rwxr-xr-xupdate.sh8
146 files changed, 3334 insertions, 2722 deletions
diff --git a/flake.lock b/flake.lock
deleted file mode 100644
index b4b59623..00000000
--- a/flake.lock
+++ /dev/null
@@ -1,861 +0,0 @@
-{
- "nodes": {
- "agenix": {
- "inputs": {
- "darwin": [
- "nix-darwin"
- ],
- "home-manager": [
- "home-manager"
- ],
- "nixpkgs": [
- "nixpkgs"
- ],
- "systems": [
- "systems"
- ]
- },
- "locked": {
- "lastModified": 1770165109,
- "narHash": "sha256-9VnK6Oqai65puVJ4WYtCTvlJeXxMzAp/69HhQuTdl/I=",
- "owner": "ryantm",
- "repo": "agenix",
- "rev": "b027ee29d959fda4b60b57566d64c98a202e0feb",
- "type": "github"
- },
- "original": {
- "owner": "ryantm",
- "repo": "agenix",
- "type": "github"
- }
- },
- "beautysh": {
- "inputs": {
- "flake-parts": [
- "flake-parts"
- ],
- "git-hooks-nix": [
- "git-hooks"
- ],
- "nix-github-actions": [
- "nix-github-actions"
- ],
- "nixpkgs": [
- "nixpkgs"
- ],
- "pyproject-build-systems": "pyproject-build-systems",
- "pyproject-nix": "pyproject-nix",
- "treefmt-nix": [
- "treefmt-nix"
- ],
- "uv2nix": "uv2nix"
- },
- "locked": {
- "lastModified": 1773310854,
- "narHash": "sha256-zzDG59jx8ExshO+uRvVNzzWwY2FLjptPOCei1mB1GkU=",
- "owner": "lovesegfault",
- "repo": "beautysh",
- "rev": "34c3b3da0233e76d7d1ad90a78f3679185ecf31c",
- "type": "github"
- },
- "original": {
- "owner": "lovesegfault",
- "repo": "beautysh",
- "type": "github"
- }
- },
- "crane": {
- "locked": {
- "lastModified": 1775839657,
- "narHash": "sha256-SPm9ck7jh3Un9nwPuMGbRU04UroFmOHjLP56T10MOeM=",
- "owner": "ipetkov",
- "repo": "crane",
- "rev": "7cf72d978629469c4bd4206b95c402514c1f6000",
- "type": "github"
- },
- "original": {
- "owner": "ipetkov",
- "repo": "crane",
- "type": "github"
- }
- },
- "devshell": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1768818222,
- "narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=",
- "owner": "numtide",
- "repo": "devshell",
- "rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "devshell",
- "type": "github"
- }
- },
- "disko": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1773889306,
- "narHash": "sha256-PAqwnsBSI9SVC2QugvQ3xeYCB0otOwCacB1ueQj2tgw=",
- "owner": "nix-community",
- "repo": "disko",
- "rev": "5ad85c82cc52264f4beddc934ba57f3789f28347",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "disko",
- "type": "github"
- }
- },
- "flake-compat": {
- "flake": false,
- "locked": {
- "lastModified": 1767039857,
- "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
- "owner": "edolstra",
- "repo": "flake-compat",
- "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
- "type": "github"
- },
- "original": {
- "owner": "edolstra",
- "repo": "flake-compat",
- "type": "github"
- }
- },
- "flake-parts": {
- "inputs": {
- "nixpkgs-lib": [
- "nixpkgs-lib"
- ]
- },
- "locked": {
- "lastModified": 1775087534,
- "narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=",
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "type": "github"
- }
- },
- "flake-utils": {
- "inputs": {
- "systems": [
- "systems"
- ]
- },
- "locked": {
- "lastModified": 1731533236,
- "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
- "git-hooks": {
- "inputs": {
- "flake-compat": [
- "flake-compat"
- ],
- "gitignore": [
- "gitignore"
- ],
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1775585728,
- "narHash": "sha256-8Psjt+TWvE4thRKktJsXfR6PA/fWWsZ04DVaY6PUhr4=",
- "owner": "cachix",
- "repo": "git-hooks.nix",
- "rev": "580633fa3fe5fc0379905986543fd7495481913d",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "repo": "git-hooks.nix",
- "type": "github"
- }
- },
- "gitignore": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1762808025,
- "narHash": "sha256-XmjITeZNMTQXGhhww6ed/Wacy2KzD6svioyCX7pkUu4=",
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "rev": "cb5e3fdca1de58ccbc3ef53de65bd372b48f567c",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "type": "github"
- }
- },
- "haumea": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1776025312,
- "narHash": "sha256-fFI2Tt4PCgMwjZ8PEzrhglqj7W5mP094m3H9glHD6WA=",
- "owner": "nix-community",
- "repo": "haumea",
- "rev": "e25760eecb368f9722b30f2bf01a4afc907f8f11",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "haumea",
- "type": "github"
- }
- },
- "home-manager": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1776114641,
- "narHash": "sha256-VJMt3n9zGRzupzvlhcKIz4SpWflKh0rWfYTgmkmun0Q=",
- "owner": "nix-community",
- "repo": "home-manager",
- "rev": "2de7205ce6e10b031151033e69b7ef89708dc282",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "ref": "master",
- "repo": "home-manager",
- "type": "github"
- }
- },
- "impermanence": {
- "inputs": {
- "home-manager": [
- "home-manager"
- ],
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1769548169,
- "narHash": "sha256-03+JxvzmfwRu+5JafM0DLbxgHttOQZkUtDWBmeUkN8Y=",
- "owner": "nix-community",
- "repo": "impermanence",
- "rev": "7b1d382faf603b6d264f58627330f9faa5cba149",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "impermanence",
- "type": "github"
- }
- },
- "ixx": {
- "inputs": {
- "flake-utils": [
- "nuschtosSearch",
- "flake-utils"
- ],
- "nixpkgs": [
- "nuschtosSearch",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1754860581,
- "narHash": "sha256-EM0IE63OHxXCOpDHXaTyHIOk2cNvMCGPqLt/IdtVxgk=",
- "owner": "NuschtOS",
- "repo": "ixx",
- "rev": "babfe85a876162c4acc9ab6fb4483df88fa1f281",
- "type": "github"
- },
- "original": {
- "owner": "NuschtOS",
- "ref": "v0.1.1",
- "repo": "ixx",
- "type": "github"
- }
- },
- "lanzaboote": {
- "inputs": {
- "crane": [
- "crane"
- ],
- "nixpkgs": [
- "nixpkgs-stable"
- ],
- "pre-commit": [
- "pre-commit-hooks"
- ],
- "rust-overlay": [
- "rust-overlay"
- ]
- },
- "locked": {
- "lastModified": 1765382359,
- "narHash": "sha256-RJmgVDzjRI18BWVogG6wpsl1UCuV6ui8qr4DJ1LfWZ8=",
- "owner": "nix-community",
- "repo": "lanzaboote",
- "rev": "e8c096ade12ec9130ff931b0f0e25d2f1bc63607",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "ref": "v1.0.0",
- "repo": "lanzaboote",
- "type": "github"
- }
- },
- "library": {
- "locked": {
- "lastModified": 1738443114,
- "narHash": "sha256-IV7n/l3rFoz5UuavrDv0a7IIOPne0jDQVmJAR8bve8U=",
- "ref": "prime",
- "rev": "65bf71bb6ef05ce684924a1dc248bb2e8e2869fb",
- "revCount": 17,
- "type": "git",
- "url": "https://git.foss-syndicate.org/vhack.eu/nix-library"
- },
- "original": {
- "ref": "prime",
- "type": "git",
- "url": "https://git.foss-syndicate.org/vhack.eu/nix-library"
- }
- },
- "nix-darwin": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1775037210,
- "narHash": "sha256-KM2WYj6EA7M/FVZVCl3rqWY+TFV5QzSyyGE2gQxeODU=",
- "owner": "lnl7",
- "repo": "nix-darwin",
- "rev": "06648f4902343228ce2de79f291dd5a58ee12146",
- "type": "github"
- },
- "original": {
- "owner": "lnl7",
- "repo": "nix-darwin",
- "type": "github"
- }
- },
- "nix-github-actions": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1737420293,
- "narHash": "sha256-F1G5ifvqTpJq7fdkT34e/Jy9VCyzd5XfJ9TO8fHhJWE=",
- "owner": "nix-community",
- "repo": "nix-github-actions",
- "rev": "f4158fa080ef4503c8f4c820967d946c2af31ec9",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "nix-github-actions",
- "type": "github"
- }
- },
- "nix-index-database": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1775970782,
- "narHash": "sha256-7jt9Vpm48Yy5yAWigYpde+HxtYEpEuyzIQJF4VYehhk=",
- "owner": "nix-community",
- "repo": "nix-index-database",
- "rev": "bedba5989b04614fc598af9633033b95a937933f",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "nix-index-database",
- "type": "github"
- }
- },
- "nixos-generators": {
- "inputs": {
- "nixlib": [
- "nixpkgs-lib"
- ],
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1769813415,
- "narHash": "sha256-nnVmNNKBi1YiBNPhKclNYDORoHkuKipoz7EtVnXO50A=",
- "owner": "nix-community",
- "repo": "nixos-generators",
- "rev": "8946737ff703382fda7623b9fab071d037e897d5",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "nixos-generators",
- "type": "github"
- }
- },
- "nixpkgs": {
- "locked": {
- "lastModified": 1776030597,
- "narHash": "sha256-H2CYM/RmVqCo1iud5BhPp8Pim2d1ESGt2FDHjbmju8A=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "c88e63f4caf12c731f61ce71f300680ce73c180e",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixos-unstable-small",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs-lib": {
- "locked": {
- "lastModified": 1775959049,
- "narHash": "sha256-o2JFoAWll4ZuHnVKX2ld03ynKR2zkvTDxJ/ZTCDz2/I=",
- "owner": "nix-community",
- "repo": "nixpkgs.lib",
- "rev": "ec2b7be3c0b3b764aa0380fa32aa304a5b680cf8",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "nixpkgs.lib",
- "type": "github"
- }
- },
- "nixpkgs-stable": {
- "locked": {
- "lastModified": 1776067740,
- "narHash": "sha256-B35lpsqnSZwn1Lmz06BpwF7atPgFmUgw1l8KAV3zpVQ=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "7e495b747b51f95ae15e74377c5ce1fe69c1765f",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixos-25.11",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixvim": {
- "inputs": {
- "flake-parts": [
- "flake-parts"
- ],
- "nixpkgs": [
- "nixpkgs"
- ],
- "systems": [
- "systems"
- ]
- },
- "locked": {
- "lastModified": 1776128025,
- "narHash": "sha256-spZM5zll0cBPHHSZPioZREArzCsllurKQsJME08nnXY=",
- "owner": "nix-community",
- "repo": "nixvim",
- "rev": "0a12693297d23f1b3af04ba6112b5936e2eba41b",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "nixvim",
- "type": "github"
- }
- },
- "nuschtosSearch": {
- "inputs": {
- "flake-utils": [
- "flake-utils"
- ],
- "ixx": "ixx",
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1776097945,
- "narHash": "sha256-zQFcpo9Caj9ZLvjGHnvXsPjwyUmznf1kixcMA0+e0bw=",
- "owner": "NuschtOS",
- "repo": "search",
- "rev": "d15c05d20b434704c3e84f9dea161b8184b6643d",
- "type": "github"
- },
- "original": {
- "owner": "NuschtOS",
- "repo": "search",
- "type": "github"
- }
- },
- "poetry2nix": {
- "inputs": {
- "flake-utils": [
- "flake-utils"
- ],
- "nix-github-actions": [
- "nix-github-actions"
- ],
- "nixpkgs": [
- "nixpkgs"
- ],
- "systems": [
- "systems"
- ],
- "treefmt-nix": [
- "treefmt-nix"
- ]
- },
- "locked": {
- "lastModified": 1743690424,
- "narHash": "sha256-cX98bUuKuihOaRp8dNV1Mq7u6/CQZWTPth2IJPATBXc=",
- "owner": "nix-community",
- "repo": "poetry2nix",
- "rev": "ce2369db77f45688172384bbeb962bc6c2ea6f94",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "poetry2nix",
- "type": "github"
- }
- },
- "pre-commit-hooks": {
- "inputs": {
- "flake-compat": [
- "flake-compat"
- ],
- "gitignore": [
- "gitignore"
- ],
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1775585728,
- "narHash": "sha256-8Psjt+TWvE4thRKktJsXfR6PA/fWWsZ04DVaY6PUhr4=",
- "owner": "cachix",
- "repo": "pre-commit-hooks.nix",
- "rev": "580633fa3fe5fc0379905986543fd7495481913d",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "repo": "pre-commit-hooks.nix",
- "type": "github"
- }
- },
- "pyproject-build-systems": {
- "inputs": {
- "nixpkgs": [
- "beautysh",
- "nixpkgs"
- ],
- "pyproject-nix": [
- "beautysh",
- "pyproject-nix"
- ],
- "uv2nix": [
- "beautysh",
- "uv2nix"
- ]
- },
- "locked": {
- "lastModified": 1772555609,
- "narHash": "sha256-3BA3HnUvJSbHJAlJj6XSy0Jmu7RyP2gyB/0fL7XuEDo=",
- "owner": "pyproject-nix",
- "repo": "build-system-pkgs",
- "rev": "c37f66a953535c394244888598947679af231863",
- "type": "github"
- },
- "original": {
- "owner": "pyproject-nix",
- "repo": "build-system-pkgs",
- "type": "github"
- }
- },
- "pyproject-nix": {
- "inputs": {
- "nixpkgs": [
- "beautysh",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1772865871,
- "narHash": "sha256-/ZTSg97aouL0SlPHaokA4r3iuH9QzHVuWPACD2CUCFY=",
- "owner": "pyproject-nix",
- "repo": "pyproject.nix",
- "rev": "e537db02e72d553cea470976b9733581bcf5b3ed",
- "type": "github"
- },
- "original": {
- "owner": "pyproject-nix",
- "repo": "pyproject.nix",
- "type": "github"
- }
- },
- "qmk_firmware": {
- "inputs": {
- "flake-utils": [
- "flake-utils"
- ],
- "nixpkgs": [
- "nixpkgs"
- ],
- "systems": [
- "systems"
- ],
- "treefmt-nix": [
- "treefmt-nix"
- ]
- },
- "locked": {
- "lastModified": 1753517111,
- "narHash": "sha256-dv5P3ahDICDacdzEmcyxrtKgbRWhVFiKQaLEz+WniGM=",
- "ref": "prime",
- "rev": "4dff2e6ba5c9c80de3e3d2213ad28802814c3bba",
- "revCount": 39,
- "type": "git",
- "url": "https://git.foss-syndicate.org/bpeetz/qmk_layout.git"
- },
- "original": {
- "ref": "prime",
- "type": "git",
- "url": "https://git.foss-syndicate.org/bpeetz/qmk_layout.git"
- }
- },
- "root": {
- "inputs": {
- "agenix": "agenix",
- "beautysh": "beautysh",
- "crane": "crane",
- "devshell": "devshell",
- "disko": "disko",
- "flake-compat": "flake-compat",
- "flake-parts": "flake-parts",
- "flake-utils": "flake-utils",
- "git-hooks": "git-hooks",
- "gitignore": "gitignore",
- "haumea": "haumea",
- "home-manager": "home-manager",
- "impermanence": "impermanence",
- "lanzaboote": "lanzaboote",
- "library": "library",
- "nix-darwin": "nix-darwin",
- "nix-github-actions": "nix-github-actions",
- "nix-index-database": "nix-index-database",
- "nixos-generators": "nixos-generators",
- "nixpkgs": "nixpkgs",
- "nixpkgs-lib": "nixpkgs-lib",
- "nixpkgs-stable": "nixpkgs-stable",
- "nixvim": "nixvim",
- "nuschtosSearch": "nuschtosSearch",
- "poetry2nix": "poetry2nix",
- "pre-commit-hooks": "pre-commit-hooks",
- "qmk_firmware": "qmk_firmware",
- "rust-overlay": "rust-overlay",
- "serverphone": "serverphone",
- "systems": "systems",
- "templates": "templates",
- "treefmt-nix": "treefmt-nix"
- }
- },
- "rust-overlay": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1776050130,
- "narHash": "sha256-/f/6/1WOfBJaGMfqV3VxWD9lpFRbPpF+Cx4MO+0mGok=",
- "owner": "oxalica",
- "repo": "rust-overlay",
- "rev": "3c27f4c92a7d977556dd2c10bb564d9c61b375e9",
- "type": "github"
- },
- "original": {
- "owner": "oxalica",
- "repo": "rust-overlay",
- "type": "github"
- }
- },
- "serverphone": {
- "inputs": {
- "crane": [
- "crane"
- ],
- "flake-compat": [
- "flake-compat"
- ],
- "flake-utils": [
- "flake-utils"
- ],
- "nixpkgs": [
- "nixpkgs"
- ],
- "rust-overlay": [
- "rust-overlay"
- ],
- "systems": [
- "systems"
- ]
- },
- "locked": {
- "lastModified": 1697538431,
- "narHash": "sha256-M2nQ9tuvt++ukXCdr4IhGqrQqpPpmjjlOZeAKjHQung=",
- "ref": "refs/heads/prime",
- "rev": "2ac6ef2b49f4a7b8b0490a068bc2dba6767f0b7d",
- "revCount": 71,
- "type": "git",
- "url": "https://codeberg.org/vhack.eu/serverphone.git"
- },
- "original": {
- "type": "git",
- "url": "https://codeberg.org/vhack.eu/serverphone.git"
- }
- },
- "systems": {
- "locked": {
- "lastModified": 1680978846,
- "narHash": "sha256-Gtqg8b/v49BFDpDetjclCYXm8mAnTrUzR0JnE2nv5aw=",
- "owner": "nix-systems",
- "repo": "x86_64-linux",
- "rev": "2ecfcac5e15790ba6ce360ceccddb15ad16d08a8",
- "type": "github"
- },
- "original": {
- "owner": "nix-systems",
- "repo": "x86_64-linux",
- "type": "github"
- }
- },
- "templates": {
- "inputs": {
- "flake-utils": [
- "flake-utils"
- ],
- "nixpkgs": [
- "nixpkgs"
- ],
- "systems": [
- "systems"
- ],
- "treefmt-nix": [
- "treefmt-nix"
- ]
- },
- "locked": {
- "lastModified": 1733053857,
- "narHash": "sha256-rI1qMFzbXVjfEvmf2OS4upnibXpL21its6cCXqhz86o=",
- "ref": "refs/heads/prime",
- "rev": "0294fb03df7c265f8fae24a9e775d69a953bbf03",
- "revCount": 204,
- "type": "git",
- "url": "https://codeberg.org/bpeetz/flake-templates.git"
- },
- "original": {
- "type": "git",
- "url": "https://codeberg.org/bpeetz/flake-templates.git"
- }
- },
- "treefmt-nix": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1775636079,
- "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=",
- "owner": "numtide",
- "repo": "treefmt-nix",
- "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "treefmt-nix",
- "type": "github"
- }
- },
- "uv2nix": {
- "inputs": {
- "nixpkgs": [
- "beautysh",
- "nixpkgs"
- ],
- "pyproject-nix": [
- "beautysh",
- "pyproject-nix"
- ]
- },
- "locked": {
- "lastModified": 1772545244,
- "narHash": "sha256-Ys+5UMOqp2kRvnSjyBcvGnjOhkIXB88On1ZcAstz1vY=",
- "owner": "pyproject-nix",
- "repo": "uv2nix",
- "rev": "482aba340ded40ef557d331315f227d5eba84ced",
- "type": "github"
- },
- "original": {
- "owner": "pyproject-nix",
- "repo": "uv2nix",
- "type": "github"
- }
- }
- },
- "root": "root",
- "version": 7
-}
diff --git a/flake.lock.license b/flake.lock.license
deleted file mode 100644
index eae6a84c..00000000
--- a/flake.lock.license
+++ /dev/null
@@ -1,9 +0,0 @@
-nixos-config - My current NixOS configuration
-
-Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-SPDX-License-Identifier: GPL-3.0-or-later
-
-This file is part of my nixos-config.
-
-You should have received a copy of the License along with this program.
-If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/flake.nix b/flake.nix
index 206a440f..a5ada983 100644
--- a/flake.nix
+++ b/flake.nix
@@ -11,249 +11,31 @@
{
description = "A NixOS System Configuration";
- inputs = {
- # base
- nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11";
- nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small";
+ inputs = {};
- # open nixpkgs prs
+ outputs = {self, ...}: let
+ sources = import ./npins/full.nix {};
- library = {
- url = "git+https://git.foss-syndicate.org/vhack.eu/nix-library?ref=prime";
- };
-
- # inputs for following
- nix-darwin = {
- url = "github:lnl7/nix-darwin";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
- systems = {
- url = "github:nix-systems/x86_64-linux"; # only evaluate for this system
- };
- nuschtosSearch = {
- url = "github:NuschtOS/search";
- inputs = {
- flake-utils.follows = "flake-utils";
- nixpkgs.follows = "nixpkgs";
- };
- };
- nix-github-actions = {
- url = "github:nix-community/nix-github-actions";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
- git-hooks = {
- url = "github:cachix/git-hooks.nix";
- inputs = {
- flake-compat.follows = "flake-compat";
- gitignore.follows = "gitignore";
- nixpkgs.follows = "nixpkgs";
- };
- };
- poetry2nix = {
- url = "github:nix-community/poetry2nix";
- inputs = {
- systems.follows = "systems";
- nixpkgs.follows = "nixpkgs";
- flake-utils.follows = "flake-utils";
- treefmt-nix.follows = "treefmt-nix";
- nix-github-actions.follows = "nix-github-actions";
- };
- };
- flake-parts = {
- url = "github:hercules-ci/flake-parts";
- inputs = {
- nixpkgs-lib.follows = "nixpkgs-lib";
- };
- };
- nixpkgs-lib = {
- url = "github:nix-community/nixpkgs.lib";
- };
- haumea = {
- url = "github:nix-community/haumea";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
- gitignore = {
- url = "github:hercules-ci/gitignore.nix";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
- beautysh = {
- url = "github:lovesegfault/beautysh";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- flake-parts.follows = "flake-parts";
- git-hooks-nix.follows = "git-hooks";
- treefmt-nix.follows = "treefmt-nix";
- nix-github-actions.follows = "nix-github-actions";
- };
- };
- devshell = {
- url = "github:numtide/devshell";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
- pre-commit-hooks = {
- url = "github:cachix/pre-commit-hooks.nix";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- flake-compat.follows = "flake-compat";
- gitignore.follows = "gitignore";
- };
- };
- flake-compat = {
- url = "github:edolstra/flake-compat";
- flake = false;
- };
- crane = {
- url = "github:ipetkov/crane";
- inputs = {};
- };
- flake-utils = {
- url = "github:numtide/flake-utils";
- inputs = {
- systems.follows = "systems";
- };
- };
- rust-overlay = {
- url = "github:oxalica/rust-overlay";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
-
- # nixos modules
- home-manager = {
- url = "github:nix-community/home-manager/master";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
- disko = {
- url = "github:nix-community/disko";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
- nixvim = {
- url = "github:nix-community/nixvim";
- inputs = {
- flake-parts.follows = "flake-parts";
- nixpkgs.follows = "nixpkgs";
- systems.follows = "systems";
- };
- };
- agenix = {
- url = "github:ryantm/agenix";
- inputs = {
- darwin.follows = "nix-darwin";
- nixpkgs.follows = "nixpkgs";
- home-manager.follows = "home-manager";
- systems.follows = "systems";
- };
- };
- impermanence = {
- url = "github:nix-community/impermanence";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- home-manager.follows = "home-manager";
- };
- };
- nixos-generators = {
- url = "github:nix-community/nixos-generators";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- nixlib.follows = "nixpkgs-lib";
- };
- };
- serverphone = {
- url = "git+https://codeberg.org/vhack.eu/serverphone.git";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- systems.follows = "systems";
- flake-compat.follows = "flake-compat";
- flake-utils.follows = "flake-utils";
- rust-overlay.follows = "rust-overlay";
- crane.follows = "crane";
- };
- };
- lanzaboote = {
- url = "github:nix-community/lanzaboote/v1.0.0";
- inputs = {
- nixpkgs.follows = "nixpkgs-stable";
- crane.follows = "crane";
- rust-overlay.follows = "rust-overlay";
- pre-commit.follows = "pre-commit-hooks";
- };
- };
- nix-index-database = {
- url = "github:nix-community/nix-index-database";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
-
- # my configs
- templates = {
- url = "git+https://codeberg.org/bpeetz/flake-templates.git";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- flake-utils.follows = "flake-utils";
- systems.follows = "systems";
- treefmt-nix.follows = "treefmt-nix";
- };
- };
-
- # my bins
- qmk_firmware = {
- url = "git+https://git.foss-syndicate.org/bpeetz/qmk_layout.git?ref=prime";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- treefmt-nix.follows = "treefmt-nix";
- systems.follows = "systems";
- flake-utils.follows = "flake-utils";
- };
- };
-
- # external resources
- treefmt-nix = {
- url = "github:numtide/treefmt-nix";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
- };
-
- outputs = {
# core
- self,
- nixpkgs,
- nixpkgs-stable,
- library,
+ nixpkgs = sources.loadFlake "nixpkgs";
+ nixpkgs-stable = sources.loadFlake "nixpkgs-stable";
+ library = sources.loadFlake "library";
# modules
- home-manager,
- nixos-generators,
- impermanence,
- agenix,
- serverphone,
- disko,
- lanzaboote,
- nixvim,
- nix-index-database,
+ home-manager = sources.loadFlake "home-manager";
+ nixos-generators = sources.loadFlake "nixos-generators";
+ impermanence = sources.loadFlake "impermanence";
+ agenix = sources.loadFlake "agenix";
+ serverphone = sources.loadFlake "serverphone";
+ disko = sources.loadFlake "disko";
+ lanzaboote = sources.loadFlake "lanzaboote";
+ nixvim = sources.loadFlake "nixvim";
+ nix-index-database = sources.loadFlake "nix-index-database";
# external dependencies
- treefmt-nix,
- templates,
+ treefmt-nix = sources.loadFlake "treefmt-nix";
+ templates = sources.loadFlake "templates";
# my binaries
- qmk_firmware,
- ...
- }: let
+ qmk_firmware = sources.loadFlake "qmk_firmware";
+
system = "x86_64-linux";
packageSets = rec {
@@ -304,6 +86,8 @@
outputs = import ./flake {
inherit
self
+ sources
+ nixpkgs
system
openPRsNixpkgs
packageSets
diff --git a/flake/default.nix b/flake/default.nix
index 83138f32..598dcbd2 100644
--- a/flake/default.nix
+++ b/flake/default.nix
@@ -9,6 +9,8 @@
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
{
self,
+ sources,
+ nixpkgs,
system,
openPRsNixpkgs,
packageSets,
@@ -29,6 +31,8 @@
nixosConfigurations = import ../hosts {
inherit
self
+ sources
+ nixpkgs
system
openPRsNixpkgs
packageSets
@@ -107,6 +111,7 @@ in {
pkgs.alejandra
pkgs.deadnix
pkgs.nvd
+ pkgs.npins
];
};
};
diff --git a/hosts/by-name/apzu/hardware.nix b/hosts/by-name/apzu/hardware.nix
index 8d481fa6..70b041e7 100644
--- a/hosts/by-name/apzu/hardware.nix
+++ b/hosts/by-name/apzu/hardware.nix
@@ -13,13 +13,14 @@
];
soispha = {
+ boot.enableIsoEntry = true;
+
disks = {
enable = true;
disk = "/dev/disk/by-id/nvme-INTEL_SSDPEKNU512GZH_PHKA1481032A512A_1";
ssd = true;
swap = {
- uuid = "c94cd20a-dd3c-436f-9841-6fe92e5c8719";
- resumeOffset = "533760";
+ ram_size = "16G";
};
};
diff --git a/hosts/default.nix b/hosts/default.nix
index 64768074..fc18d556 100644
--- a/hosts/default.nix
+++ b/hosts/default.nix
@@ -9,6 +9,8 @@
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
{
self,
+ sources,
+ nixpkgs,
system,
openPRsNixpkgs,
packageSets,
@@ -24,18 +26,19 @@
};
generateHost = _: path:
- self.inputs.nixpkgs.lib.nixosSystem {
+ nixpkgs.lib.nixosSystem {
specialArgs = {
inherit
+ self
libraries
modules
- self
;
};
modules = [
{
_module.args = {
inherit
+ sources
# extra package sources
openPRsNixpkgs
packageSets
diff --git a/inputs.nix b/inputs.nix
new file mode 100644
index 00000000..7d89fb55
--- /dev/null
+++ b/inputs.nix
@@ -0,0 +1,53 @@
+let
+ nixpkgsVersion = "26.05";
+ lanzabooteVersion = "v1.0.0";
+in {
+ "agenix" = {
+ url = "github:ryantm/agenix/main";
+ };
+ "disko" = {
+ url = "github:nix-community/disko/master";
+ };
+ "flake-compat" = {
+ url = "git+https://git.lix.systems/lix-project/flake-compat?ref=main";
+ };
+ "home-manager" = {
+ url = "github:nix-community/home-manager/master";
+ };
+ "impermanence" = {
+ url = "github:nix-community/impermanence/master";
+ };
+ "lanzaboote" = {
+ url = "github:nix-community/lanzaboote/${lanzabooteVersion}";
+ };
+ "library" = {
+ url = "git+https://git.foss-syndicate.org/vhack.eu/nix-library?ref=prime";
+ };
+ "nix-index-database" = {
+ url = "github:nix-community/nix-index-database/main";
+ };
+ "nixos-generators" = {
+ url = "github:nix-community/nixos-generators/master";
+ };
+ "nixpkgs-stable" = {
+ url = "github:NixOS/nixpkgs/nixos-${nixpkgsVersion}";
+ };
+ "nixpkgs" = {
+ url = "github:NixOS/nixpkgs/nixos-unstable-small";
+ };
+ "nixvim" = {
+ url = "github:nix-community/nixvim/main";
+ };
+ "qmk_firmware" = {
+ url = "git+https://git.foss-syndicate.org/bpeetz/qmk_layout?ref=prime";
+ };
+ # "serverphone" = {
+ # url = "git+https://codeberg.org/vhack.eu/serverphone?ref=prime";
+ # };
+ "templates" = {
+ url = "git+https://codeberg.org/bpeetz/flake-templates?ref=prime";
+ };
+ "treefmt-nix" = {
+ url = "github:numtide/treefmt-nix/main";
+ };
+}
diff --git a/modules/by-name/at/atuin/module.nix b/modules/by-name/at/atuin/module.nix
index 6cf8a396..78a4332c 100644
--- a/modules/by-name/at/atuin/module.nix
+++ b/modules/by-name/at/atuin/module.nix
@@ -10,7 +10,6 @@
{
config,
lib,
- pkgs,
...
}: let
cfg = config.soispha.programs.atuin;
diff --git a/modules/by-name/au/ausweisapp/module.nix b/modules/by-name/au/ausweisapp/module.nix
new file mode 100644
index 00000000..3a89db9d
--- /dev/null
+++ b/modules/by-name/au/ausweisapp/module.nix
@@ -0,0 +1,18 @@
+{
+ config,
+ lib,
+ libraries,
+ ...
+}: let
+ cfg = config.soispha.programs.ausweisapp;
+in {
+ options.soispha.programs.ausweisapp = {
+ enable = libraries.base.options.mkEnable "AusweisApp";
+ };
+
+ config = lib.mkIf cfg.enable {
+ soispha.impermanence.userDirectories = [
+ ".config/AusweisApp"
+ ];
+ };
+}
diff --git a/modules/by-name/ba/backup/module.nix b/modules/by-name/ba/backup/module.nix
index 7a788764..dd0dfac7 100644
--- a/modules/by-name/ba/backup/module.nix
+++ b/modules/by-name/ba/backup/module.nix
@@ -186,7 +186,7 @@ in {
# This setting is normally passed to rclone, but we force
# the command on the remote.
- # As such, the value does not matter and must only be parseable by restic.
+ # As such, the value does not matter and must only be parse-able by restic.
repository = "rclone: ";
timerConfig = {
@@ -209,7 +209,7 @@ in {
# This setting is normally passed to rclone, but we force
# the command on the remote.
- # As such, the value does not matter and must only be parseable by restic.
+ # As such, the value does not matter and must only be parse-able by restic.
repository = "rclone: ";
timerConfig = null;
diff --git a/modules/by-name/bo/boot/iso_entry/archlive_iso.nix b/modules/by-name/bo/boot/iso_entry/archlive_iso.nix
deleted file mode 100644
index d0ae8457..00000000
--- a/modules/by-name/bo/boot/iso_entry/archlive_iso.nix
+++ /dev/null
@@ -1,86 +0,0 @@
-# nixos-config - My current NixOS configuration
-#
-# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-# SPDX-License-Identifier: GPL-3.0-or-later
-#
-# This file is part of my nixos-config.
-#
-# You should have received a copy of the License along with this program.
-# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-{pkgs ? (builtins.getFlake "nixpkgs").legacyPackages."x86_64-linux"}: let
- signing_key = import ./signing_key.nix {inherit pkgs;};
-
- checked_iso = pkgs.stdenv.mkDerivation {
- pname = "archlinux-iso";
- version = "2024.05.01";
-
- srcs = [
- (pkgs.fetchurl {
- url = "https://archlinux.org/iso/2024.05.01/archlinux-2024.05.01-x86_64.iso.sig";
- hash = "sha256-QOGYng6a7zA5EJKGotDccJ7fD2MmPPXQEdVr1kjJvi4=";
- })
- (pkgs.fetchurl {
- url = "https://mirror.informatik.tu-freiberg.de/arch/iso/latest/archlinux-2024.05.01-x86_64.iso";
- hash = "sha256-G0oE74pzUIUqEwcO5JhEKwh6YHoYhAtN19mYZ+tfakw=";
- })
- (pkgs.fetchurl {
- url = "https://archlinux.org/iso/2024.05.01/b2sums.txt";
- hash = "sha256-HSMS13hHXFKKQsCA8spa7XtirHCBTmePwhOsStVPbHw=";
- })
- ];
-
- dontUnpack = true;
-
- nativeBuildInputs = with pkgs; [
- sequoia-sq
- ];
-
- buildPhase =
- /*
- bash
- */
- ''
- cp -r "${signing_key}" ./release-key.pgp
- for src in $srcs; do
- cp -r "$src" "$(stripHash "$src")"
- done
-
- sed '2d;3d;4d' b2sums.txt > b2sums_clean.txt
-
- # As per the directions from: https://archlinux.org/download/
-
- # blake hash check
- b2sum -c ./b2sums_clean.txt
-
- # pgp signature check
- sq verify --signer-file release-key.pgp --detached archlinux-2024.05.01-x86_64.iso.sig archlinux-2024.05.01-x86_64.iso
- '';
-
- installPhase = ''
- cp archlinux-2024.05.01-x86_64.iso "$out";
- '';
- };
-in
- pkgs.stdenv.mkDerivation {
- name = "live_iso_boot_entry";
-
- src = checked_iso;
-
- dontUnpack = true;
-
- nativeBuildInputs = with pkgs; [
- libarchive # for bsdtar
- ];
-
- buildPhase = ''
- mkdir iso
- bsdtar -xf "$src" -C iso
- '';
-
- installPhase = ''
- install -D ./iso/arch/boot/x86_64/initramfs-linux.img "$out/live/initramfs-linux.img"
- install -D ./iso/arch/boot/x86_64/vmlinuz-linux "$out/live/vmlinuz-linux"
-
- install -D "$src" "$out/archlinux.iso"
- '';
- }
diff --git a/modules/by-name/bo/boot/iso_entry/signing_key.nix b/modules/by-name/bo/boot/iso_entry/signing_key.nix
deleted file mode 100644
index d9268d75..00000000
--- a/modules/by-name/bo/boot/iso_entry/signing_key.nix
+++ /dev/null
@@ -1,27 +0,0 @@
-# nixos-config - My current NixOS configuration
-#
-# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-# SPDX-License-Identifier: GPL-3.0-or-later
-#
-# This file is part of my nixos-config.
-#
-# You should have received a copy of the License along with this program.
-# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-{pkgs ? (builtins.getFlake "nixpkgs").legacyPackages."x86_64-linux"}:
-pkgs.stdenv.mkDerivation {
- name = "archlinux_signing_keys";
-
- outputHash = "sha256-evGWzkxMaZw3rlixKsyWCS/ZvNuZ+OfXQb6sgiHz9XY=";
- outputHashAlgo = "sha256";
- NIX_SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
-
- nativeBuildInputs = with pkgs; [
- sequoia-sq
- ];
-
- dontUnpack = true;
-
- buildPhase = ''
- sq --verbose --no-cert-store --no-key-store network wkd fetch pierre@archlinux.org --output "$out"
- '';
-}
diff --git a/modules/by-name/bo/boot/module.nix b/modules/by-name/bo/boot/module.nix
index 4b95aedf..4dc9130a 100644
--- a/modules/by-name/bo/boot/module.nix
+++ b/modules/by-name/bo/boot/module.nix
@@ -12,139 +12,212 @@
lib,
pkgs,
modules,
+ modulesPath,
+ system,
+ specialArgs,
...
}: let
cfg = config.soispha.boot;
+
+ tails = let
+ tailsPrefix = "/EFI/tails";
+ in {
+ root = "${tailsPrefix}/tails.iso";
+ initrd = "${tailsPrefix}/initrd.img";
+ vmlinuz = "${tailsPrefix}/vmlinuz-linux";
+ };
+
+ iso = pkgs.tails-iso;
+
+ # From:
+ # - The extracted ISO's boot dir
+ # - Reverse engineered from:
+ # - `<tails iso squashfs>/usr/share/initramfs-tools/init`
+ # - `<tails iso squashfs>/usr/lib/live/boot/`
+ iso_options =
+ ## General options?
+ [
+ "initrd=${tails.initrd}"
+ # "noprompt"
+ # "timezone=Etc/UTC"
+ # "config"
+ # "noautologin"
+ # "slab_nomerge"
+ # "slub_debug=FZ"
+ # "mce=0"
+ # "vsyscall=none"
+ # "init_on_free=1"
+ # "mds=full,nosmt"
+ # "page_alloc.shuffle=1"
+ # "randomize_kstack_offset=on"
+ # "efi_pstore.pstore_disable=1"
+ # "erst_disable"
+ # "spec_store_bypass_disable=on"
+ # "systemd.condition_needs_update=no"
+ ]
+ ## Systemd log options
+ ++ [
+ "systemd.log_level=debug"
+ "systemd.log_target=console"
+ "console=tty1"
+ "systemd.journald.forward_to_console=1"
+ "systemd.unit=rescue.target"
+ ]
+ ## Options for the first `init` script
+ ++ [
+ # Use the `*-live` scripts
+ "boot=live"
+
+ # "splash"
+ "plymouth.enable=0"
+
+ # "quiet"
+ "debug"
+ ]
+ ## Options for the `*-live` `init` scripts
+ ++ [
+ "module=Tails"
+
+ # TODO: RO-makes the fromiso not work <2026-06-08>
+ # "live-boot.read-only=/dev/nvme0*"
+
+ # Don't store things persistently
+ "nopersistence"
+
+ "fromiso=/dev/nvme0n1p1/${tails.root}"
+ ];
in {
options.soispha.boot = {
enable = lib.mkEnableOption "Bootloader configuration";
- # TODO: Add this option <2024-05-16>
- # enableIsoEntry = lib.mkEnableOption "an tails iso boot entry";
+ enableIsoEntry = lib.mkEnableOption "an tails iso boot entry";
};
imports = [
modules.lanzaboote.nixosModules.lanzaboote
];
- config = lib.mkIf cfg.enable (
- # let
- # cfg = config.boot.loader.systemd-boot;
- # inherit (config.boot.loader) efi;
- #
- # esa = n: lib.strings.escapeShellArg n;
- #
- # bootMountPoint =
- # if cfg.xbootldrMountPoint != null
- # then cfg.xbootldrMountPoint
- # else efi.efiSysMountPoint;
- #
- # nixosDir = "/EFI/nixos";
- #
- # # FIXME: This system has two big problems:
- # # 1. It does not updated files, which still have the same name
- # # 2. It forgets about files, which were 'deleted' in this configuration (these just
- # # stay on disk forever) <2024-05-11>
- # copyExtraFiles = ''
- # echo "[systemd-boot] copying files to ${bootMountPoint}"
- # empty_file=$(mktemp boot_empty_file_XXX)
- #
- # ${lib.concatStrings (lib.mapAttrsToList (n: v:
- # /*
- # bash
- # */
- # ''
- # if ! [ -e ${esa "${bootMountPoint}/${n}"} ]; then
- # install -Dp "${v}" ${esa "${bootMountPoint}/${n}"}
- # install -D "$empty_file" ${esa "${bootMountPoint}/${nixosDir}/.extra-files/${n}"}
- # fi
- # '')
- # cfg.extraFiles)}
- #
- # ${lib.concatStrings (lib.mapAttrsToList (n: v:
- # /*
- # bash
- # */
- # ''
- # # if ! [ -e ${esa "${bootMountPoint}/loader/entries/${n}"} ]; then
- # install -Dp "${pkgs.writeText n v}" ${esa "${bootMountPoint}/loader/entries/${n}"}
- # install -D "$empty_file" ${esa "${bootMountPoint}/${nixosDir}/.extra-files/loader/entries/${n}"}
- # # fi
- # '')
- # cfg.extraEntries)}
- # '';
- # in
- {
- # FIXME: Reactviate this whole iso thing when a disko redeploy is done.
- # (and switch to tails instead of arch) <2024-05-12>
- #
- # system.activationScripts = {
- # copyExtraFilesForBoot = copyExtraFiles;
- # };
+ config = lib.mkIf cfg.enable {
+ # This should only be necessary for `lanzaboote`, but that is the current default in
+ # this module.
+ soispha.impermanence.directories = [
+ "/var/lib/sbctl"
+ ];
+
+ boot = {
+ initrd = {
+ kernelModules = ["nvme" "btrfs"];
+ };
+
+ kernelPackages = pkgs.linuxPackages_latest;
- # This should only be necessary for `lanzaboote`, but that is the current default in
- # this module.
- soispha.impermanence.directories = [
- "/var/lib/sbctl"
- ];
+ lanzaboote = {
+ enable = true;
+ pkiBundle = "/var/lib/sbctl";
- boot = {
- initrd = {
- kernelModules = ["nvme" "btrfs"];
+ settings = {
+ # Disable editing the kernel command line (which could allow someone to become root)
+ editor = false;
+ default = "@saved";
};
+ };
- kernelPackages = pkgs.linuxPackages_latest;
+ loader = {
+ external = lib.mkIf cfg.enableIsoEntry {
+ installHook = lib.mkForce (let
+ lanzabooteCfg = config.boot.lanzaboote;
- lanzaboote = {
- enable = true;
- pkiBundle = "/var/lib/sbctl";
+ lanzabooteInstallHook = import "${modulesPath}/../lib/eval-config.nix" {
+ inherit system specialArgs;
+ modules = [
+ modules.lanzaboote.nixosModules.lanzaboote
- settings = {
- # Disable editing the kernel command line (which could allow someone to become root)
- editor = false;
- default = "@saved";
- };
+ {
+ # Copy the relevant config into the eval-module context.
+ boot = {
+ inherit (config.boot) kernelPackages;
+
+ lanzaboote = {
+ inherit (lanzabooteCfg) enable pkiBundle;
+ settings = {
+ inherit (lanzabooteCfg.settings) editor default;
+ };
+ };
+
+ loader = {
+ inherit (config.boot.loader) timeout efi systemd-boot;
+ };
+ };
+ systemd.package = config.systemd.package;
+ }
+ ];
+ };
+
+ install = pkgs.writeShellScript "wrapped-install-tails-iso-marker" ''
+ echo "[Wrapped bootloader install] Copying tails iso..."
+ ${copyExtraFiles}
+
+ echo "[Wrapped bootloader install] Running original lanzaboote install..."
+ ${lanzabooteInstallHook.config.boot.loader.external.installHook}
+ '';
+
+ copyExtraFiles = let
+ systemdCfg = config.boot.loader.systemd-boot;
+ nixosDir = "EFI/nixos";
+
+ bootMountPoint = config.boot.loader.efi.efiSysMountPoint;
+ install = lib.getExe' pkgs.coreutils "install";
+
+ inherit (lib) mapAttrsToList;
+ inherit (lib.strings) escapeShellArg concatStrings;
+ in
+ pkgs.writeShellScript "copy-extra-files" ''
+ ${concatStrings (
+ mapAttrsToList (n: v: ''
+ ${install} -Dp "${v}" "${bootMountPoint}/"${escapeShellArg n}
+ ${install} -D /dev/null "${bootMountPoint}/${nixosDir}/.extra-files/"${escapeShellArg n}
+ '')
+ systemdCfg.extraFiles
+ )}
+
+ ${lib.getExe pkgs.sbctl} sign "${bootMountPoint}/${tails.vmlinuz}"
+
+ ${concatStrings (
+ mapAttrsToList (n: v: ''
+ ${install} -Dp "${pkgs.writeText n v}" "${bootMountPoint}/loader/entries/"${escapeShellArg n}
+ ${install} -D /dev/null "${bootMountPoint}/${nixosDir}/.extra-files/loader/entries/"${escapeShellArg n}
+ '')
+ systemdCfg.extraEntries
+ )}
+ '';
+ in
+ install);
};
- loader = {
- systemd-boot = {
- # Lanzaboote currently replaces the systemd-boot module.
- # This setting is usually set to true in configuration.nix
- # generated at installation time. So we force it to false
- # for now.
- enable = false;
+ systemd-boot = lib.mkIf cfg.enableIsoEntry {
+ # Lanzaboote currently replaces the systemd-boot module.
+ enable = false;
- # extraEntries = {
- # "live.conf" = ''
- # title Archlinux Live ISO
- # linux /live/vmlinuz-linux
- # initrd /live/initramfs-linux.img
- # options img_dev=${config.soispha.disks.disk} img_loop=/archlinux.iso copytoram
- # '';
- # };
- #
- # extraFiles = let
- # iso = import ./archlive_iso.nix {inherit pkgs;};
- # in {
- # "archlinux.iso" = "${iso}/archlinux.iso";
- # "live/initramfs-linux.img" = "${iso}/live/initramfs-linux.img";
- # "live/vmlinuz-linux" = "${iso}/live/vmlinuz-linux";
- # };
+ extraEntries = {
+ "live.conf" = ''
+ title Tails ${iso.passthru.version} Live ISO
+ linux ${tails.vmlinuz}
+ initrd ${tails.initrd}
+ options ${builtins.concatStringsSep " " iso_options}
+ '';
};
- grub = {
- enable = false;
- # theme = pkgs.nixos-grub2-theme;
- splashImage = ./boot_pictures/gnu.png;
- efiSupport = true;
- device = "nodev"; # only for efi
+ extraFiles = {
+ "${tails.root}" = "${iso}/tails.iso";
+ "${tails.vmlinuz}" = "${iso}/live/vmlinuz-linux";
+ "${tails.initrd}" = "${iso}/live/initrd.img";
};
+ };
- efi = {
- canTouchEfiVariables = true;
- efiSysMountPoint = "/boot";
- };
+ efi = {
+ canTouchEfiVariables = true;
+ efiSysMountPoint = "/boot";
};
};
- }
- );
+ };
+ };
}
diff --git a/modules/by-name/cl/cleanup/module.nix b/modules/by-name/cl/cleanup/module.nix
index 98c699eb..9b42b337 100644
--- a/modules/by-name/cl/cleanup/module.nix
+++ b/modules/by-name/cl/cleanup/module.nix
@@ -21,6 +21,9 @@ in {
config = lib.mkIf cfg.enable {
programs.nano.enable = false;
+
+ services.speechd.enable = false;
+
environment = {
defaultPackages = lib.mkForce [];
};
diff --git a/modules/by-name/di/direnv/module.nix b/modules/by-name/di/direnv/module.nix
index 7c81e671..363f5cea 100644
--- a/modules/by-name/di/direnv/module.nix
+++ b/modules/by-name/di/direnv/module.nix
@@ -10,6 +10,7 @@
{
config,
lib,
+ pkgs,
...
}: let
cfg = config.soispha.programs.direnv;
@@ -20,7 +21,12 @@ in {
config.home-manager.users.soispha.programs.direnv = lib.mkIf cfg.enable {
enable = true;
- nix-direnv.enable = true;
+
+ nix-direnv = {
+ enable = true;
+ package = pkgs.nix-direnv.override {nix = config.nix.package;};
+ };
+
config = {
warn_timeout = 0;
# strict_env = true;
diff --git a/modules/by-name/di/disks/module.nix b/modules/by-name/di/disks/module.nix
index 3e9d4614..ed5c939a 100644
--- a/modules/by-name/di/disks/module.nix
+++ b/modules/by-name/di/disks/module.nix
@@ -14,10 +14,9 @@
modules,
...
}: let
- # FIXME: The iso redeploy requires a bigger efi partition <2024-05-12>
cfg = config.soispha.disks;
defaultMountOptions = [
- "compress=zstd:3" # This saves disk space, at a performance cost
+ "compress-force=zstd:15" # This saves disk space, at a performance cost
"noatime" # should have some performance upsides, and I don't use it anyways
"lazytime" # make time changes in memory
];
@@ -34,15 +33,10 @@ in {
ssd = lib.mkEnableOption "ssd specific improvements, like trim";
swap = {
- uuid = lib.mkOption {
+ ram_size = lib.mkOption {
type = lib.types.str;
- example = lib.literalExpression "d1d20ae7-3d8a-44da-86da-677dbbb10c89";
- description = "The uuid of the swapfile";
- };
- resumeOffset = lib.mkOption {
- type = lib.types.str;
- example = lib.literalExpression "134324224";
- description = "The resume offset of the swapfile";
+ example = lib.literalExpression "16G";
+ description = "The size of the ram (translates to the swapfile size)";
};
};
};
@@ -54,6 +48,12 @@ in {
config = lib.mkIf cfg.enable {
systemd = lib.recursiveUpdate (import ./hibernate.nix {inherit pkgs;}) (import ./fstrim.nix {inherit pkgs lib cfg;});
+ services.btrfs.autoScrub = {
+ enable = true;
+ fileSystems = ["/srv" "/nix"];
+ interval = "monthly";
+ };
+
disko.devices = {
disk = {
main = {
@@ -61,21 +61,44 @@ in {
content = {
type = "gpt";
partitions = {
+ ESP = {
+ # 2GiB plus 512MiB for tails ISO and normal boot stuff
+ size = "2600M";
+
+ type = "EF00";
+ content = {
+ type = "filesystem";
+ format = "vfat";
+ mountpoint = "/boot";
+ mountOptions = ["umask=0077"];
+ };
+ };
+
+ nix = {
+ size = "30G";
+ content = {
+ type = "luks";
+ name = "nixos-store";
+ extraOpenArgs = ["--allow-discards"];
+ content = {
+ type = "btrfs";
+ extraArgs = ["-f" "--label nixos-store"]; # Override existing partitions
+ mountpoint = "/nix";
+ mountOptions = defaultMountOptions;
+ };
+ };
+ };
+
root = {
size = "100%";
- name = "root";
content = {
type = "luks";
- name = "nixos";
+ name = "nixos-root";
extraOpenArgs = ["--allow-discards"];
content = {
type = "btrfs";
- extraArgs = ["-f" "--label nixos"]; # Override existing partitions
+ extraArgs = ["-f" "--label nixos-root"]; # Override existing partitions
subvolumes = {
- "nix" = {
- mountpoint = "/nix";
- mountOptions = defaultMountOptions;
- };
"persistent-storage" = {
mountpoint = "/srv";
mountOptions = defaultMountOptions;
@@ -90,21 +113,17 @@ in {
"noatime" # should have some performance upsides, and I don't use it anyways
"lazytime" # make time changes in memory
];
+ swap = {
+ swapfile = {
+ priority = -1; # lower than zramSwap, just in case
+ size = cfg.swap.ram_size;
+ };
+ };
};
};
};
};
};
- boot = {
- type = "EF00";
- size = "512M";
- name = "boot";
- content = {
- type = "filesystem";
- format = "vfat";
- mountpoint = "/boot";
- };
- };
};
};
};
@@ -130,6 +149,9 @@ in {
};
};
fileSystems = {
+ "/nix" = {
+ neededForBoot = true;
+ };
"/srv" = {
neededForBoot = true;
};
@@ -137,23 +159,14 @@ in {
neededForBoot = true;
};
};
- swapDevices = [
- #{
- # device = "/swap/swapfile";
- # priority = 1; # lower than zramSwap, just in case
- # # size = 2048; # TODO: can nixos create a btrfs swapfile correctly?
- #}
- ];
zramSwap = {
enable = true;
priority = 10; # needs to be higher than hardware-swap
};
boot = {
kernelParams = [
- "resume_offset=${cfg.swap.resumeOffset}"
"zswap.enabled=0" # zswap and zram are not really compatible
];
- resumeDevice = "/dev/disk/by-uuid/${cfg.swap.uuid}";
};
};
}
diff --git a/modules/by-name/fo/foot/module.nix b/modules/by-name/fo/foot/module.nix
new file mode 100644
index 00000000..d818aac0
--- /dev/null
+++ b/modules/by-name/fo/foot/module.nix
@@ -0,0 +1,82 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+{
+ config,
+ lib,
+ libraries,
+ ...
+}: let
+ cfg = config.soispha.foot;
+in {
+ options.soispha.foot = {
+ enable = libraries.base.options.mkEnable "foot terminal";
+ };
+
+ config = lib.mkIf cfg.enable {
+ home-manager.users.soispha = {
+ programs.foot = {
+ enable = true;
+ server.enable = true;
+ settings = {
+ main = {
+ font = "SauceCodePro Nerd Font Mono:size=12";
+ horizontal-letter-offset = -1;
+ vertical-letter-offset = -1;
+ };
+ # environment = {
+ # COLORTERM = "truecolor";
+ # };
+ "regex:hashes" = {
+ regex = "([a-fA-F0-9]{7,128})";
+ launch = "git show \${match}";
+ };
+ "regex:paths" = {
+ regex = "([^ '\"`=:\\\\[\\\\(]*/)([^/: '\"`\\\\)\\\\]]*)";
+ launch = "ll \${match}";
+ };
+
+ key-bindings = {
+ regex-launch = [
+ "[hashes] Control+h"
+ "[paths] Control+t"
+ ];
+ regex-copy = [
+ "[hashes] Control+Shift+h"
+ "[paths] Control+Shift+t"
+ ];
+ };
+ };
+ };
+
+ systemd.user.services = let
+ footCfg = config.home-manager.users.soispha.programs.foot;
+ inherit (footCfg.server) systemdTarget;
+ in {
+ foot-initial-term = {
+ Unit = {
+ Description = "Fast, lightweight and minimalistic Wayland terminal emulator.";
+ Documentation = "man:foot(1)";
+ PartOf = [systemdTarget];
+ After = [systemdTarget];
+ ConditionEnvironment = "WAYLAND_DISPLAY";
+ };
+
+ Service = {
+ ExecStart = "${lib.getExe' footCfg.package "footclient"}";
+ };
+
+ Install = {
+ WantedBy = [systemdTarget];
+ };
+ };
+ };
+ };
+ };
+}
diff --git a/modules/by-name/im/impermanence/module.nix b/modules/by-name/im/impermanence/module.nix
index 78ad570f..43943363 100644
--- a/modules/by-name/im/impermanence/module.nix
+++ b/modules/by-name/im/impermanence/module.nix
@@ -59,22 +59,24 @@ in {
inherit (cfg) directories;
users.soispha = {
- directories = [
- # TODO: These should all be moved to their respective modules <2024-12-08>
- ".local/share"
+ directories =
+ [
+ # TODO: These should all be moved to their respective modules <2024-12-08>
+ ".local/share"
- ".local/state/nvim"
- ".local/state/mpv"
- ".local/state/wireplumber"
+ ".local/state/nvim"
+ ".local/state/mpv"
+ ".local/state/wireplumber"
- ".config/Signal"
+ ".config/Signal"
- ".cache"
+ ".cache"
- "media"
- "repos"
- "documents"
- ] ++ cfg.userDirectories;
+ "media"
+ "repos"
+ "documents"
+ ]
+ ++ cfg.userDirectories;
};
files = [
diff --git a/modules/by-name/lf/lf/commands/base.sh b/modules/by-name/lf/lf/commands/base.sh
index 7003d76c..e0b6216c 100755
--- a/modules/by-name/lf/lf/commands/base.sh
+++ b/modules/by-name/lf/lf/commands/base.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env sh
+#!/usr/bin/env bash
# nixos-config - My current NixOS configuration
#
@@ -41,7 +41,7 @@ prompt() {
# set -- "$@" "$file"
# done < "$(echo "$fx" | tmp)"
tmp() {
- __base_tmp_temporary_file="$(mktemp -t --tmpdir="$__base_tmp_temporary_directory" lf_commands_tmp_fun_XXXXXXXX )"
+ __base_tmp_temporary_file="$(mktemp -t --tmpdir="$__base_tmp_temporary_directory" lf_commands_tmp_fun_XXXXXXXX)"
cat >"$__base_tmp_temporary_file"
echo "$__base_tmp_temporary_file"
}
@@ -50,7 +50,6 @@ 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]
@@ -61,6 +60,11 @@ trap 'rm --recursive "$__base_tmp_temporary_directory"' EXIT
lf_cmd() {
arguments=""
for arg in "$@"; do
+ # We _can_ use the fancy bash syntax, but it's really hard to correctly quote the
+ # single quote in bash, and I don't really feel like it's worth it.
+ # shellcheck disable=SC2001
+ arg="$(echo "$arg" | sed "s/'/\\\'/g")"
+
if [ -z "$arguments" ]; then
arguments="'$arg'"
else
diff --git a/modules/by-name/lf/lf/commands/default.nix b/modules/by-name/lf/lf/commands/default.nix
index 055bfa2c..42dc548e 100644
--- a/modules/by-name/lf/lf/commands/default.nix
+++ b/modules/by-name/lf/lf/commands/default.nix
@@ -16,7 +16,14 @@
pkgs.writeShellApplication {
inherit name;
text = builtins.readFile ./base.sh + builtins.readFile ./scripts/${name}.sh;
- runtimeInputs = [pkgs.lf pkgs.mktemp pkgs.coreutils] ++ dependencies;
+ runtimeInputs =
+ [
+ pkgs.lf
+ pkgs.mktemp
+ pkgs.coreutils
+ pkgs.gnused
+ ]
+ ++ dependencies;
inheritPath = keepPath;
}
+ "/bin/${name}";
@@ -54,14 +61,17 @@ in {
pkgs.xz
pkgs.p7zip
pkgs.zip
+ pkgs.gzip
];
};
archive_decompress = pipe {
name = "archive_decompress";
dependencies = [
pkgs.gnutar
- pkgs.unzip
+ pkgs.openjdk_headless
pkgs.p7zip
+ pkgs.xz
+ pkgs.gzip
];
};
@@ -69,6 +79,12 @@ in {
name = "cd_project_root";
dependencies = [pkgs.git];
};
+ cd_lf_make_map = shell {
+ name = "cd_lf_make_map";
+ dependencies = [
+ pkgs.lf-make-map
+ ];
+ };
chmod = pipe {
name = "chmod";
diff --git a/modules/by-name/lf/lf/commands/scripts/archive_decompress.sh b/modules/by-name/lf/lf/commands/scripts/archive_decompress.sh
index 6cae62a2..10eb0bc5 100755
--- a/modules/by-name/lf/lf/commands/scripts/archive_decompress.sh
+++ b/modules/by-name/lf/lf/commands/scripts/archive_decompress.sh
@@ -25,7 +25,7 @@ echo "$fx" | while read -r file; do
*.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" ;;
+ *.zip) jar --verbose --extract --file "$file" ;;
*.7z) 7z x "$file" ;;
*) die "'$file' is not a supported file for unarchiving." ;;
esac
diff --git a/modules/by-name/lf/lf/commands/scripts/cd_lf_make_map.sh b/modules/by-name/lf/lf/commands/scripts/cd_lf_make_map.sh
new file mode 100755
index 00000000..00befd3f
--- /dev/null
+++ b/modules/by-name/lf/lf/commands/scripts/cd_lf_make_map.sh
@@ -0,0 +1,27 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+# shellcheck shell=sh
+
+# shellcheck disable=SC2269
+f="$f"
+# shellcheck disable=SC2269
+fx="$fx"
+# shellcheck disable=SC2269
+fs="$fs"
+# shellcheck disable=SC2269
+id="$id"
+
+root="$(lf-make-map --depth 4 interactive ~/media ~/repos ~/documents ~/.config ~/.local)"
+if [ "$root" ]; then
+ lf_cmd cd "$root" || die "Bug: Failed to cd to selected path at '$root'"
+fi
+
+# vim: ft=sh
diff --git a/modules/by-name/lf/lf/ctpv/helpers.sh b/modules/by-name/lf/lf/ctpv/helpers.sh
index 71524082..d0bba315 100644
--- a/modules/by-name/lf/lf/ctpv/helpers.sh
+++ b/modules/by-name/lf/lf/ctpv/helpers.sh
@@ -31,6 +31,7 @@ chafa_run() {
# TODO: Animation support would be nice, but it would need to be supported in chafa by
# allowing us to make a call to ctpvclear after each image is displayed. <2024-11-25>
chafa --size "${w}x${h}" --animate=off "$1" | sed 's/#/\n#/g'
+ exiftool "$1"
}
send_image() {
diff --git a/modules/by-name/lf/lf/ctpv/prev/application/archive/default.nix b/modules/by-name/lf/lf/ctpv/prev/application/archive/default.nix
index d64c9572..dc34d5de 100644
--- a/modules/by-name/lf/lf/ctpv/prev/application/archive/default.nix
+++ b/modules/by-name/lf/lf/ctpv/prev/application/archive/default.nix
@@ -94,6 +94,8 @@
pkgs.xz
pkgs.zip
+ pkgs.coreutils
+
# Unfree stuff
# pkgs.lha
# pkgs.rar
diff --git a/modules/by-name/lf/lf/ctpv/prev/application/epub/default.nix b/modules/by-name/lf/lf/ctpv/prev/application/epub/default.nix
index d28503e2..43e683a9 100644
--- a/modules/by-name/lf/lf/ctpv/prev/application/epub/default.nix
+++ b/modules/by-name/lf/lf/ctpv/prev/application/epub/default.nix
@@ -18,6 +18,7 @@
pkgs.bk
pkgs.epub-thumbnailer
pkgs.chafa
+ pkgs.exiftool
pkgs.gnused
];
};
diff --git a/modules/by-name/lf/lf/ctpv/prev/application/pdf/default.nix b/modules/by-name/lf/lf/ctpv/prev/application/pdf/default.nix
index bc8abf8f..cb96d7a9 100644
--- a/modules/by-name/lf/lf/ctpv/prev/application/pdf/default.nix
+++ b/modules/by-name/lf/lf/ctpv/prev/application/pdf/default.nix
@@ -16,6 +16,7 @@
dependencies = [
pkgs.poppler-utils # for `pdftoppm`
pkgs.chafa
+ pkgs.exiftool
pkgs.gnused
pkgs.coreutils
];
diff --git a/modules/by-name/lf/lf/ctpv/prev/audio/default.nix b/modules/by-name/lf/lf/ctpv/prev/audio/default.nix
index 7ae5d7fd..b9d4ff0d 100644
--- a/modules/by-name/lf/lf/ctpv/prev/audio/default.nix
+++ b/modules/by-name/lf/lf/ctpv/prev/audio/default.nix
@@ -14,9 +14,10 @@
matches.mime = ["audio/*"];
dependencies = [
pkgs.ffmpegthumbnailer
- pkgs.ffmpeg
+ pkgs.ffmpeg-headless
pkgs.chafa
+ pkgs.exiftool
pkgs.gnused
pkgs.coreutils
];
diff --git a/modules/by-name/lf/lf/ctpv/prev/font/default.nix b/modules/by-name/lf/lf/ctpv/prev/font/default.nix
index 0f94603b..e2ce2cc2 100644
--- a/modules/by-name/lf/lf/ctpv/prev/font/default.nix
+++ b/modules/by-name/lf/lf/ctpv/prev/font/default.nix
@@ -22,6 +22,7 @@
dependencies = [
pkgs.fontforge # for `fontimage`
pkgs.chafa
+ pkgs.exiftool
pkgs.gnused
pkgs.coreutils
];
diff --git a/modules/by-name/lf/lf/ctpv/prev/image/default.nix b/modules/by-name/lf/lf/ctpv/prev/image/default.nix
index 79037d5a..765c7c83 100644
--- a/modules/by-name/lf/lf/ctpv/prev/image/default.nix
+++ b/modules/by-name/lf/lf/ctpv/prev/image/default.nix
@@ -14,6 +14,7 @@
matches.mime = ["image/*"];
dependencies = [
pkgs.chafa
+ pkgs.exiftool
pkgs.gnused
];
};
diff --git a/modules/by-name/lf/lf/ctpv/prev/image/svg+xml/default.nix b/modules/by-name/lf/lf/ctpv/prev/image/svg+xml/default.nix
index 25bd6f77..12e65337 100644
--- a/modules/by-name/lf/lf/ctpv/prev/image/svg+xml/default.nix
+++ b/modules/by-name/lf/lf/ctpv/prev/image/svg+xml/default.nix
@@ -16,6 +16,7 @@
dependencies = [
pkgs.imagemagick
pkgs.chafa
+ pkgs.exiftool
pkgs.gnused
];
};
diff --git a/modules/by-name/lf/lf/ctpv/prev/video/default.nix b/modules/by-name/lf/lf/ctpv/prev/video/default.nix
index d500fbd9..dc51dbdf 100644
--- a/modules/by-name/lf/lf/ctpv/prev/video/default.nix
+++ b/modules/by-name/lf/lf/ctpv/prev/video/default.nix
@@ -15,6 +15,7 @@
dependencies = [
pkgs.ffmpegthumbnailer
pkgs.chafa
+ pkgs.exiftool
pkgs.gnused
];
};
diff --git a/modules/by-name/lf/lf/keybindings/default.nix b/modules/by-name/lf/lf/keybindings/default.nix
index fbc33f6f..b6b7a548 100644
--- a/modules/by-name/lf/lf/keybindings/default.nix
+++ b/modules/by-name/lf/lf/keybindings/default.nix
@@ -82,22 +82,16 @@
ch = "chmod";
bg = "set_wallpaper";
r = ":rename; cmd-end";
- H = "cd_project_root";
R = "reload";
C = "clear";
U = "unselect";
# Movement
- gjr = "cd ~/.local/share/Trash/files";
- gus = "cd /run/user/${builtins.toString uid}";
+ nu = "cd /run/user/${builtins.toString uid}";
+ ne = "cd /etc";
+ nd = "cd ${downloadDir}";
+ nt = "cd /tmp";
+ nh = "cd_project_root";
- gc = "cd ~/.config";
- gl = "cd ~/.local";
- gE = "cd /etc";
- gD = "cd ${downloadDir}";
-
- "gU." = "cd /usr";
- gUs = " cd /usr/share";
-
- gt = "cd /tmp";
+ g = "cd_lf_make_map";
}
diff --git a/modules/by-name/lf/lf/module.nix b/modules/by-name/lf/lf/module.nix
index 8dfd0c52..daa236e6 100644
--- a/modules/by-name/lf/lf/module.nix
+++ b/modules/by-name/lf/lf/module.nix
@@ -85,7 +85,6 @@ in {
drawbox = true;
- # errorfmt = "\\033[1;91m==> ERROR:\\033[0m\\033[1;93m%s\\033[0m";
errorfmt = "\\033[1;91m%s\\033[0m";
hidden = true; # show hidden files
icons = true;
@@ -94,22 +93,6 @@ in {
shell = "${lib.getExe pkgs.dash}";
shellopts = "-eu"; # e: exit on error; u: error for unset variables
};
- extraConfig = ''
- # Dynamically generate the cd mappings.
- # This code dependends on the fact, that the lf server was started previously
- # and keep running through `autoquit = false`.
- # (Otherwise, the remote command is silently dropped: https://github.com/gokcehan/lf/issues/495)
- &{{
- tmp="$(mktemp -t lf_make_map_dynamic_mapping_source_XXXXX)"
- ${lib.getExe pkgs.lf-make-map} --depth 4 generate ~/media ~/repos ~/documents >"$tmp"
-
- lf -remote "send $id source $tmp"
- sleep 1
- lf -remote "send $id source $tmp"
-
- rm "$tmp"
- }}
- '';
};
};
};
diff --git a/modules/by-name/lf/lf/wrappers/ll/ll.sh b/modules/by-name/lf/lf/wrappers/ll/ll.sh
index ce29fd97..9bb314c6 100755
--- a/modules/by-name/lf/lf/wrappers/ll/ll.sh
+++ b/modules/by-name/lf/lf/wrappers/ll/ll.sh
@@ -10,20 +10,14 @@
# You should have received a copy of the License along with this program.
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-last_directory="$(mktemp -t ll_last_directory_XXXXXXX)"
-cleanup() {
- rm "$last_directory"
-}
-trap cleanup EXIT
+[ -d "$XDG_RUNTIME_DIR/ll" ] || mkdir "$XDG_RUNTIME_DIR/ll"
+last_directory="$XDG_RUNTIME_DIR/ll/last_directory"
command lf -last-dir-path="$last_directory" "$@"
dir="$(cat "$last_directory")"
-if cd "$dir"; then
- [ -d "$XDG_RUNTIME_DIR/ll" ] || mkdir "$XDG_RUNTIME_DIR/ll"
- echo "$dir" >"$XDG_RUNTIME_DIR/ll/last_directory"
-else
- die "$dir does not exist!"
+if ! cd "$dir"; then
+ die "ll: Failed to cd to '$dir'. Does it exist?"
fi
# vim: ft=sh
diff --git a/modules/by-name/lo/locale/module.nix b/modules/by-name/lo/locale/module.nix
index 3c9c646c..0aa812ec 100644
--- a/modules/by-name/lo/locale/module.nix
+++ b/modules/by-name/lo/locale/module.nix
@@ -43,6 +43,9 @@ in {
LC_TIME = "sv_SE.UTF-8";
LC_COLLATE = "C.UTF-8";
};
+ extraLocales = [
+ "fr_FR.UTF-8/UTF-8"
+ ];
};
# Layout
diff --git a/modules/by-name/ly/ly/module.nix b/modules/by-name/ly/ly/module.nix
index 9ddbdaa9..dedabe81 100644
--- a/modules/by-name/ly/ly/module.nix
+++ b/modules/by-name/ly/ly/module.nix
@@ -82,6 +82,7 @@ in {
animation = "dur_file";
dur_file_path = "${./blackhole-smooth-240x67.dur}";
+ full_color = true;
custom_sessions = "${customSessionsDir}";
diff --git a/modules/by-name/mp/mpd/module.nix b/modules/by-name/mp/mpd/module.nix
index 37c648c6..474d81c4 100644
--- a/modules/by-name/mp/mpd/module.nix
+++ b/modules/by-name/mp/mpd/module.nix
@@ -62,6 +62,11 @@ in {
services.mpd = {
enable = true;
+
+ package = pkgs.mpd.override {
+ ffmpeg = pkgs.ffmpeg-headless;
+ };
+
network = {
listenAddress = socketPath;
};
diff --git a/modules/by-name/mp/mpd/mpc.nix b/modules/by-name/mp/mpd/mpc.nix
index cd4a4ec0..5fbeddc5 100644
--- a/modules/by-name/mp/mpd/mpc.nix
+++ b/modules/by-name/mp/mpd/mpc.nix
@@ -14,10 +14,28 @@
...
}: let
cfg = config.soispha.services.mpd.mpc;
+
+ mpp = pkgs.mpp.override {
+ # Removes the currently playing song from the disk and storage
+ mpp-beetrm = pkgs.mpp-beetrm.override {
+ beets = cfg.beetsPkg;
+ };
+
+ # Works like normal `mpc searchadd` but uses the `beets` query syntax
+ mpp-searchadd = pkgs.mpp-searchadd.override {
+ beets = cfg.beetsPkg;
+ };
+ };
in {
options.soispha.services.mpd.mpc = {
enable = lib.mkEnableOption "mpc with extensions";
+ mppPackage = lib.mkOption {
+ type = lib.types.package;
+ description = "The package to use, when calling `mpp`";
+ default = mpp;
+ };
+
beetsPkg = lib.mkOption {
type = lib.types.package;
description = "The package to use, when calling `beet`";
@@ -26,18 +44,8 @@ in {
config = lib.mkIf cfg.enable {
home-manager.users.soispha.home.packages = [
- pkgs.mpp # Wrapper around `mpc` that allows the usage of `mpc-{beetsrm,lyrics,searchadd}` (below) without the `-`
-
- # Removes the currently playing song from the disk and storage
- (pkgs.mpp-beetrm.override {
- beets = cfg.beetsPkg;
- })
- # Works like normal `mpc searchadd` but uses the `beets` query syntax
- (pkgs.mpp-searchadd.override {
- beets = cfg.beetsPkg;
- })
- # Displays the lyrics of the currently playing song
- pkgs.mpp-lyrics
+ # Wrapper around `mpc` that allows the usage of `mpc-{beetsrm,lyrics,searchadd}`
+ cfg.mppPackage
];
};
}
diff --git a/modules/by-name/mp/mpv/module.nix b/modules/by-name/mp/mpv/module.nix
index 4416b295..0610dcd8 100644
--- a/modules/by-name/mp/mpv/module.nix
+++ b/modules/by-name/mp/mpv/module.nix
@@ -23,11 +23,18 @@ in {
programs.mpv = {
enable = true;
+ package = pkgs.mpv.override {
+ mpv-unwrapped = pkgs.mpv-unwrapped.override {
+ ffmpeg = pkgs.ffmpeg-headless;
+ };
+ };
+
bindings = {
q = "quit 0";
"Ctrl+c" = "quit 1";
"Shift+q" = "quit-watch-later 1";
};
+
config = {
osd-bar = true;
@@ -46,9 +53,6 @@ in {
max_width = 250;
};
};
- scripts = [
- pkgs.mpvScripts.thumbfast
- ];
};
};
}
diff --git a/modules/by-name/ni/nix/module.nix b/modules/by-name/ni/nix/module.nix
index 2b91f59b..65b6ed5c 100644
--- a/modules/by-name/ni/nix/module.nix
+++ b/modules/by-name/ni/nix/module.nix
@@ -9,63 +9,71 @@
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
{
pkgs,
+ libraries,
+ config,
+ lib,
# flakes
+ sources,
self,
system,
externalDependencies,
...
-}: {
- # TODO(@bpeetz): Modularize <2025-02-08>
+}: let
+ nixpkgs = sources.loadFlake "nixpkgs";
- nix = {
- package = pkgs.lixPackageSets.latest.lix;
+ cfg = config.soispha.nix;
+in {
+ options.soispha.nix = {
+ enable = libraries.base.options.mkEnable "nix";
+ };
- # Disable nix channels (this is a remnant of old days)
- channel.enable = false;
+ config = lib.mkIf cfg.enable {
+ nix = {
+ package = pkgs.lixPackageSets.latest.lix;
- registry = {
- nixpkgs.flake = self.inputs.nixpkgs;
- n.flake =
- self.inputs.nixpkgs
- // {
- # Otherwise nixpkgs's config and overlays are not available:
+ # Disable nix channels (this is a remnant of old days)
+ channel.enable = false;
- # Both attrs exists, so we just override both and hope
- outputs.legacyPackages."${system}" = pkgs;
- legacyPackages."${system}" = pkgs;
- };
+ registry = {
+ nixpkgs.flake = nixpkgs;
+ n.flake =
+ nixpkgs
+ // {
+ # Otherwise nixpkgs's config and overlays are not available:
- t.flake = externalDependencies.templates;
+ # Both attrs exists, so we just override both and hope
+ outputs.legacyPackages."${system}" = pkgs;
+ legacyPackages."${system}" = pkgs;
+ };
- my_flake.flake = self;
- m.flake = self;
- };
+ t.flake = externalDependencies.templates;
- gc = {
- automatic = true;
- dates = "weekly";
- options = "--delete-older-than 7d";
- };
+ my_flake.flake = self;
+ m.flake = self;
+ };
- settings = {
- auto-optimise-store = true;
- experimental-features = [
- "nix-command"
- "flakes"
- #"ca-derivations"
- ];
+ gc = {
+ automatic = true;
+ dates = "weekly";
+ options = "--delete-older-than 7d";
+ };
- use-xdg-base-directories = true;
+ settings = {
+ auto-optimise-store = true;
+ experimental-features = [
+ "nix-command"
+ "flakes"
+ ];
- #substituters = ["https://cache.ngi0.nixos.org/"];
- #trusted-public-keys = ["cache.ngi0.nixos.org-1:KqH5CBLNSyX184S9BKZJo1LxrxJ9ltnY2uAs5c/f1MA="];
+ use-xdg-base-directories = true;
- fallback = true; # Build from source, if binary can't be substituted
+ fallback = true; # Build from source, if binary can't be substituted
- keep-failed = false; # keep failed tmp build dirs
- pure-eval = true; # restrict file system and network access to hash
+ keep-failed = false; # keep failed tmp build dirs
+ pure-eval = true; # restrict file system and network access to hash
- sandbox-fallback = false; # Don't disable the sandbox, if the kernel doesn't support it
+ sandbox-fallback = false; # Don't disable the sandbox, if the kernel doesn't support it
+ };
};
};
}
diff --git a/modules/by-name/ni/nixos-shell/module.nix b/modules/by-name/ni/nixos-shell/module.nix
index 8dda2890..3556a98b 100644
--- a/modules/by-name/ni/nixos-shell/module.nix
+++ b/modules/by-name/ni/nixos-shell/module.nix
@@ -11,10 +11,11 @@
lib,
config,
pkgs,
- self,
+ sources,
...
}: let
cfg = config.soispha.nixos-shell;
+ nixpkgs = sources.loadFlake "nixpkgs";
in {
options.soispha.nixos-shell = {
enable = lib.mkEnableOption "nixos-shell";
@@ -85,7 +86,7 @@ in {
};
config = let
- vmSystem = self.inputs.nixpkgs.lib.nixosSystem {
+ vmSystem = nixpkgs.lib.nixosSystem {
inherit (cfg.configuration) specialArgs;
modules = [
diff --git a/modules/by-name/ni/nixpkgs/module.nix b/modules/by-name/ni/nixpkgs/module.nix
index 502bcff2..84d8e074 100644
--- a/modules/by-name/ni/nixpkgs/module.nix
+++ b/modules/by-name/ni/nixpkgs/module.nix
@@ -36,14 +36,13 @@ in {
];
config = {
- # TODO: this fails because of the root tempsize, which should be increased
- # contentAddressedByDefault = true;
-
hostSystem = cfg.systemName;
allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [
- "pypemicro" # required by pynitrokey
+ # the plugin is lacking an license and is thus unfree, effectively
+ # its okay though (TODO: investigate <2026-05-11>)?
+ "cmp-calc"
];
};
};
diff --git a/modules/by-name/nv/nvim/plgs/femaco/lua/femaco.lua b/modules/by-name/nv/nvim/plgs/femaco/lua/femaco.lua
index 50a6cb23..4dc9ce97 100644
--- a/modules/by-name/nv/nvim/plgs/femaco/lua/femaco.lua
+++ b/modules/by-name/nv/nvim/plgs/femaco/lua/femaco.lua
@@ -8,7 +8,6 @@
-- You should have received a copy of the License along with this program.
-- If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-
local clip_val = require("femaco.utils").clip_val
require("femaco").setup({
@@ -19,7 +18,7 @@ require("femaco").setup({
prepare_buffer = function(opts)
local buf = vim.api.nvim_create_buf(false, false)
return vim.api.nvim_open_win(buf, true, opts)
- end;
+ end,
-- should return options passed to nvim_open_win
-- @param code_block: data about the code-block with the keys
@@ -28,42 +27,34 @@ require("femaco").setup({
-- * lang
float_opts = function(code_block)
return {
- relative = "cursor";
- width = clip_val(5, 120, vim.api.nvim_win_get_width(0) - 10); -- TODO how to offset sign column etc?
- height = clip_val(5, #code_block.lines, vim.api.nvim_win_get_height(0) - 6);
- anchor = "NW";
- row = 0;
- col = 0;
- style = "minimal";
- border = "rounded";
- zindex = 1;
+ relative = "cursor",
+ width = clip_val(5, 120, vim.api.nvim_win_get_width(0) - 10), -- TODO how to offset sign column etc?
+ height = clip_val(5, #code_block.lines, vim.api.nvim_win_get_height(0) - 6),
+ anchor = "NW",
+ row = 0,
+ col = 0,
+ style = "minimal",
+ border = "rounded",
+ zindex = 1,
}
- end;
+ end,
-- return filetype to use for a given lang
-- lang can be nil
- ft_from_lang = function(lang)
- return lang
- end;
+ ft_from_lang = function(lang) return lang end,
-- what to do after opening the float
- post_open_float = function(winnr)
- vim.wo.signcolumn = "no"
- end;
+ post_open_float = function(winnr) vim.wo.signcolumn = "no" end,
-- create the path to a temporary file
- create_tmp_filepath = function(filetype)
- return os.tmpname()
- end;
+ create_tmp_filepath = function(filetype) return os.tmpname() end,
-- if a newline should always be used, useful for multiline injections
-- which separators needs to be on separate lines such as markdown, neorg etc
-- @param base_filetype: The filetype which FeMaco is called from, not the
-- filetype of the injected language (this is the current buffer so you can
-- get it from vim.bo.filetyp).
- ensure_newline = function(base_filetype)
- return base_filetype == "nix"
- end;
+ ensure_newline = function(base_filetype) return base_filetype == "nix" end,
-- Return true if the indentation should be normalized. Useful when the
-- injected language inherits indentation from the construction scope (e.g. an
@@ -73,7 +64,5 @@ require("femaco").setup({
-- @param base_filetype: The filetype which FeMaco is called from, not the
-- filetype of the injected language (this is the current buffer, so you can
-- get it from vim.bo.filetype).
- normalize_indent = function(base_filetype)
- return base_filetype == "nix"
- end;
+ normalize_indent = function(base_filetype) return base_filetype == "nix" end,
})
diff --git a/modules/by-name/nv/nvim/plgs/luasnip/snippets/all.lua b/modules/by-name/nv/nvim/plgs/luasnip/snippets/all.lua
index 371f5539..8c30063e 100644
--- a/modules/by-name/nv/nvim/plgs/luasnip/snippets/all.lua
+++ b/modules/by-name/nv/nvim/plgs/luasnip/snippets/all.lua
@@ -20,21 +20,20 @@ local get_comment_string = function(comment_type)
local utils = require("Comment.utils")
-- use the `Comments.nvim` API to fetch the comment string for the region (eq. '--%s' or '--[[%s]]' for `lua`)
- local cstring =
- calculate_comment_string({ ctype = comment_type; range = utils.get_region(); })
+ local cstring = calculate_comment_string({ ctype = comment_type, range = utils.get_region() })
if cstring == nil then
-- TODO: Use `vim.bo.commentstring` <2025-05-02>
-- Use some useful default values.
- return { ["begin"] = "#"; ["end"] = ""; }
+ return { ["begin"] = "#", ["end"] = "" }
end
-- as we want only the strings themselves and not strings ready for using `format` we want to split the left and right side
local left, right = utils.unwrap_cstr(cstring)
-- create a `{left, right}` table for it
- return { ["begin"] = left; ["end"] = right; }
+ return { ["begin"] = left, ["end"] = right }
end
--- Wraps a table of snippet nodes in two comment function nodes.
@@ -45,18 +44,13 @@ end
local wrap_snippet_in_comments = function(comment_type, nodes)
local output = {}
- table.insert(output, ls.function_node(function()
- return get_comment_string(comment_type)["begin"]
- end))
-
+ table.insert(output, ls.function_node(function() return get_comment_string(comment_type)["begin"] end))
for _, v in ipairs(nodes) do
table.insert(output, v)
end
- table.insert(output, ls.function_node(function()
- return get_comment_string(comment_type)["end"]
- end))
+ table.insert(output, ls.function_node(function() return get_comment_string(comment_type)["end"] end))
return output
end
@@ -91,42 +85,36 @@ local function pair(pair_begin, pair_end, file_types, condition_function)
-- It would be nice, if it would support both an empty array (`{}`) and nil <2023-08-27>
-- file_types = file_types or {};
- return ls.snippet(
- {
- trig = pair_begin;
- wordTrig = false;
- snippetType = "autosnippet";
- },
- {
- ls.text_node({ pair_begin; });
- ls.dynamic_node(1, get_visual);
- ls.text_node({ pair_end; });
- },
- {
- condition = function()
- local filetype_check = true
+ return ls.snippet({
+ trig = pair_begin,
+ wordTrig = false,
+ snippetType = "autosnippet",
+ }, {
+ ls.text_node({ pair_begin }),
+ ls.dynamic_node(1, get_visual),
+ ls.text_node({ pair_end }),
+ }, {
+ condition = function()
+ local filetype_check = true
- if file_types ~= nil then
- filetype_check = file_types[vim.bo.filetype] or false
- end
+ if file_types ~= nil then filetype_check = file_types[vim.bo.filetype] or false end
- return (not condition_function(pair_begin, pair_end)) and filetype_check
- end;
- }
- )
+ return (not condition_function(pair_begin, pair_end)) and filetype_check
+ end,
+ })
end
local auto_pairs = {
- pair("(", ")", nil, char_count_same);
- pair("{", "}", nil, char_count_same);
- pair("[", "]", nil, char_count_same);
- pair("<", ">", { ["rust"] = true; ["tex"] = true; }, char_count_same);
- pair("'", "'", nil, even_count);
- pair("\"", "\"", nil, even_count);
- pair("`", "`", nil, even_count);
+ pair("(", ")", nil, char_count_same),
+ pair("{", "}", nil, char_count_same),
+ pair("[", "]", nil, char_count_same),
+ pair("<", ">", { ["rust"] = true, ["tex"] = true }, char_count_same),
+ pair("'", "'", nil, even_count),
+ pair("\"", "\"", nil, even_count),
+ pair("`", "`", nil, even_count),
}
-ls.add_snippets("all", auto_pairs, { type = "snippets"; key = "auto_pairs"; })
+ls.add_snippets("all", auto_pairs, { type = "snippets", key = "auto_pairs" })
-- }}}
-- todo_comments {{{
@@ -134,9 +122,7 @@ local read_git_config = function(config_value)
local command = string.format("git config \"%s\"", config_value)
local handle = io.popen(command)
- if handle == nil then
- return error(string.format("Failed to call `%s`.", command))
- end
+ if handle == nil then return error(string.format("Failed to call `%s`.", command)) end
local result = handle:read("*a")
handle:close()
@@ -199,14 +185,17 @@ local todo_snippet = function(trig, name, comment_type, mark_function)
local date_node, signature_node = mark_function()
- local nodes = fmt("{} {}{}: {} {} {}", wrap_snippet_in_comments(comment_type, {
- ls.text_node(name);
- signature_node;
- ls.insert_node(1, "content");
- date_node;
- }))
+ local nodes = fmt(
+ "{} {}{}: {} {} {}",
+ wrap_snippet_in_comments(comment_type, {
+ ls.text_node(name),
+ signature_node,
+ ls.insert_node(1, "content"),
+ date_node,
+ })
+ )
- return ls.snippet(context, nodes, { ctype = comment_type; })
+ return ls.snippet(context, nodes, { ctype = comment_type })
end
---@param trigger string: The luasnip trigger
@@ -214,26 +203,18 @@ end
---@param name string: All aliases for a name
---@return table: All possible snippets build from the marks
local process_marks = function(trigger, name, comment_type)
- local username = function()
- return handle_from_name(read_git_config("user.name"))
- end
+ local username = function() return handle_from_name(read_git_config("user.name")) end
local marks = {
- signature = function()
- return ls.text_node("(" .. username() .. ")"), ls.text_node("")
- end;
+ signature = function() return ls.text_node("(" .. username() .. ")"), ls.text_node("") end,
date_signature = function()
return ls.text_node("<" .. os.date("%Y-%m-%d") .. ">"), ls.text_node("(" .. username() .. ")")
- end;
+ end,
- date = function()
- return ls.text_node("<" .. os.date("%Y-%m-%d") .. ">"), ls.text_node("")
- end;
+ date = function() return ls.text_node("<" .. os.date("%Y-%m-%d") .. ">"), ls.text_node("") end,
- empty = function()
- return ls.text_node(""), ls.text_node("")
- end;
+ empty = function() return ls.text_node(""), ls.text_node("") end,
}
local output = {}
@@ -247,20 +228,20 @@ local process_marks = function(trigger, name, comment_type)
end
local todo_snippet_specs = {
- { { trig = "todo"; }; { "TODO"; }; { ctype = 1; }; };
- { { trig = "fix"; }; { "FIXME"; "ISSUE"; }; { ctype = 1; }; };
- { { trig = "hack"; }; { "HACK"; }; { ctype = 1; }; };
- { { trig = "warn"; }; { "WARNING"; }; { ctype = 1; }; };
- { { trig = "perf"; }; { "PERFORMANCE"; "OPTIMIZE"; }; { ctype = 1; }; };
- { { trig = "note"; }; { "NOTE"; "INFO"; }; { ctype = 1; }; };
+ { { trig = "todo" }, { "TODO" }, { ctype = 1 } },
+ { { trig = "fix" }, { "FIXME", "ISSUE" }, { ctype = 1 } },
+ { { trig = "hack" }, { "HACK" }, { ctype = 1 } },
+ { { trig = "warn" }, { "WARNING" }, { ctype = 1 } },
+ { { trig = "perf" }, { "PERFORMANCE", "OPTIMIZE" }, { ctype = 1 } },
+ { { trig = "note" }, { "NOTE", "INFO" }, { ctype = 1 } },
-- NOTE: Block commented todo-comments
- { { trig = "todob"; }; { "TODO"; }; { ctype = 2; }; };
- { { trig = "fixb"; }; { "FIXME"; "ISSUE"; }; { ctype = 2; }; };
- { { trig = "hackb"; }; { "HACK"; }; { ctype = 2; }; };
- { { trig = "warnb"; }; { "WARNING"; }; { ctype = 2; }; };
- { { trig = "perfb"; }; { "PERF"; "PERFORMANCE"; "OPTIM"; "OPTIMIZE"; }; { ctype = 2; }; };
- { { trig = "noteb"; }; { "NOTE"; "INFO"; }; { ctype = 2; }; };
+ { { trig = "todob" }, { "TODO" }, { ctype = 2 } },
+ { { trig = "fixb" }, { "FIXME", "ISSUE" }, { ctype = 2 } },
+ { { trig = "hackb" }, { "HACK" }, { ctype = 2 } },
+ { { trig = "warnb" }, { "WARNING" }, { ctype = 2 } },
+ { { trig = "perfb" }, { "PERF", "PERFORMANCE", "OPTIM", "OPTIMIZE" }, { ctype = 2 } },
+ { { trig = "noteb" }, { "NOTE", "INFO" }, { ctype = 2 } },
}
local todo_comment_snippets = {}
@@ -271,7 +252,7 @@ for _, v in ipairs(todo_snippet_specs) do
end
end
-ls.add_snippets("all", todo_comment_snippets, { type = "snippets"; key = "todo_comments"; })
+ls.add_snippets("all", todo_comment_snippets, { type = "snippets", key = "todo_comments" })
-- }}}
-- spdx snippets {{{
@@ -283,27 +264,30 @@ local generate_spdx_snippet = function(comment_type, spdx_license_expr, trigger)
context.name = trigger .. " spdx snippet expr"
context.trig = trigger
-
local nodes = {
- fmt("{} SPDX-SnippetBegin {}", wrap_snippet_in_comments(comment_type, {}));
+ fmt("{} SPDX-SnippetBegin {}", wrap_snippet_in_comments(comment_type, {})),
- fmt("{} SPDX-SnippetCopyrightText: {} {} <{}> {}",
- wrap_snippet_in_comments(comment_type, {
- ls.insert_node(1, "year");
- ls.insert_node(2, "author");
- ls.insert_node(3, "email");
- })
- );
+ fmt(
+ "{} SPDX-SnippetCopyrightText: {} {} <{}> {}",
+ wrap_snippet_in_comments(comment_type, {
+ ls.insert_node(1, "year"),
+ ls.insert_node(2, "author"),
+ ls.insert_node(3, "email"),
+ })
+ ),
- fmt("{} SPDX-License-Identifier: {} {}", wrap_snippet_in_comments(comment_type, {
- ls.text_node(spdx_license_expr);
- }));
+ fmt(
+ "{} SPDX-License-Identifier: {} {}",
+ wrap_snippet_in_comments(comment_type, {
+ ls.text_node(spdx_license_expr),
+ })
+ ),
- { ls.insert_node(4, "content"); };
+ { ls.insert_node(4, "content") },
- fmt("{} SPDX-SnippetEnd {}", wrap_snippet_in_comments(comment_type, {}));
+ fmt("{} SPDX-SnippetEnd {}", wrap_snippet_in_comments(comment_type, {})),
- { ls.insert_node(0); };
+ { ls.insert_node(0) },
}
local newline_nodes = {}
@@ -313,16 +297,16 @@ local generate_spdx_snippet = function(comment_type, spdx_license_expr, trigger)
end
-- luasnip requires newlines to be encoded like this:
- table.insert(newline_nodes, ls.text_node({ ""; ""; }))
+ table.insert(newline_nodes, ls.text_node({ "", "" }))
end
- return ls.snippet(context, newline_nodes, { ctype = comment_type; })
+ return ls.snippet(context, newline_nodes, { ctype = comment_type })
end
local spdx = {
- { trigger = "spdx-AGPL3+"; license = "AGPL-3.0-or-later"; };
- { trigger = "spdx-GPL3+"; license = "GPL-3.0-or-later"; };
- { trigger = "spdx-MIT"; license = "MIT"; };
+ { trigger = "spdx-AGPL3+", license = "AGPL-3.0-or-later" },
+ { trigger = "spdx-GPL3+", license = "GPL-3.0-or-later" },
+ { trigger = "spdx-MIT", license = "MIT" },
}
local spdx_snippets = {}
@@ -334,5 +318,5 @@ for _, value in ipairs(spdx) do
table.insert(spdx_snippets, snippet)
end
-ls.add_snippets("all", spdx_snippets, { type = "snippets"; key = "spdx_snippets"; })
+ls.add_snippets("all", spdx_snippets, { type = "snippets", key = "spdx_snippets" })
-- }}}
diff --git a/modules/by-name/nv/nvim/plgs/luasnip/snippets/tex/delimiter.lua b/modules/by-name/nv/nvim/plgs/luasnip/snippets/tex/delimiter.lua
index bcd128f7..02d285b7 100644
--- a/modules/by-name/nv/nvim/plgs/luasnip/snippets/tex/delimiter.lua
+++ b/modules/by-name/nv/nvim/plgs/luasnip/snippets/tex/delimiter.lua
@@ -19,23 +19,23 @@ local get_visual = function(_, parent)
end
end
-local translation_table = { ["("] = ")"; ["{"] = "}"; ["["] = "]"; }
+local translation_table = { ["("] = ")", ["{"] = "}", ["["] = "]" }
-- Return snippet tables
return {
-- LEFT/RIGHT ALL BRACES
ls.snippet(
{
- trig = "([^%a])l([%(%[%{])";
- regTrig = true;
- wordTrig = false;
- snippetType = "autosnippet";
+ trig = "([^%a])l([%(%[%{])",
+ regTrig = true,
+ wordTrig = false,
+ snippetType = "autosnippet",
},
fmt("{}\\left{}{}\\right{}", {
- ls.function_node(function(_, snip) return snip.captures[1] end);
- ls.function_node(function(_, snip) return snip.captures[2] end);
- ls.dynamic_node(1, get_visual);
- ls.function_node(function(_, snip) return translation_table[snip.captures[2]] end);
+ ls.function_node(function(_, snip) return snip.captures[1] end),
+ ls.function_node(function(_, snip) return snip.captures[2] end),
+ ls.dynamic_node(1, get_visual),
+ ls.function_node(function(_, snip) return translation_table[snip.captures[2]] end),
})
- );
+ ),
}
diff --git a/modules/by-name/nv/nvim/plgs/luasnip/snippets/tex/greek.lua b/modules/by-name/nv/nvim/plgs/luasnip/snippets/tex/greek.lua
index 21aa7414..a98f6e8c 100644
--- a/modules/by-name/nv/nvim/plgs/luasnip/snippets/tex/greek.lua
+++ b/modules/by-name/nv/nvim/plgs/luasnip/snippets/tex/greek.lua
@@ -12,38 +12,38 @@ local ls = require("luasnip")
-- Return snippet tables
return {
- ls.snippet({ trig = ";a"; snippetType = "autosnippet"; }, { ls.text_node("\\alpha"); });
- ls.snippet({ trig = ";b"; snippetType = "autosnippet"; }, { ls.text_node("\\beta"); });
- ls.snippet({ trig = ";g"; snippetType = "autosnippet"; }, { ls.text_node("\\gamma"); });
- ls.snippet({ trig = ";G"; snippetType = "autosnippet"; }, { ls.text_node("\\Gamma"); });
- ls.snippet({ trig = ";d"; snippetType = "autosnippet"; }, { ls.text_node("\\delta"); });
- ls.snippet({ trig = ";D"; snippetType = "autosnippet"; }, { ls.text_node("\\Delta"); });
- ls.snippet({ trig = ";e"; snippetType = "autosnippet"; }, { ls.text_node("\\epsilon"); });
- ls.snippet({ trig = ";ve"; snippetType = "autosnippet"; }, { ls.text_node("\\varepsilon"); });
- ls.snippet({ trig = ";z"; snippetType = "autosnippet"; }, { ls.text_node("\\zeta"); });
- ls.snippet({ trig = ";h"; snippetType = "autosnippet"; }, { ls.text_node("\\eta"); });
- ls.snippet({ trig = ";o"; snippetType = "autosnippet"; }, { ls.text_node("\\theta"); });
- ls.snippet({ trig = ";vo"; snippetType = "autosnippet"; }, { ls.text_node("\\vartheta"); });
- ls.snippet({ trig = ";O"; snippetType = "autosnippet"; }, { ls.text_node("\\Theta"); });
- ls.snippet({ trig = ";k"; snippetType = "autosnippet"; }, { ls.text_node("\\kappa"); });
- ls.snippet({ trig = ";l"; snippetType = "autosnippet"; }, { ls.text_node("\\lambda"); });
- ls.snippet({ trig = ";L"; snippetType = "autosnippet"; }, { ls.text_node("\\Lambda"); });
- ls.snippet({ trig = ";m"; snippetType = "autosnippet"; }, { ls.text_node("\\mu"); });
- ls.snippet({ trig = ";n"; snippetType = "autosnippet"; }, { ls.text_node("\\nu"); });
- ls.snippet({ trig = ";x"; snippetType = "autosnippet"; }, { ls.text_node("\\xi"); });
- ls.snippet({ trig = ";X"; snippetType = "autosnippet"; }, { ls.text_node("\\Xi"); });
- ls.snippet({ trig = ";i"; snippetType = "autosnippet"; }, { ls.text_node("\\pi"); });
- ls.snippet({ trig = ";I"; snippetType = "autosnippet"; }, { ls.text_node("\\Pi"); });
- ls.snippet({ trig = ";r"; snippetType = "autosnippet"; }, { ls.text_node("\\rho"); });
- ls.snippet({ trig = ";s"; snippetType = "autosnippet"; }, { ls.text_node("\\sigma"); });
- ls.snippet({ trig = ";S"; snippetType = "autosnippet"; }, { ls.text_node("\\Sigma"); });
- ls.snippet({ trig = ";t"; snippetType = "autosnippet"; }, { ls.text_node("\\tau"); });
- ls.snippet({ trig = ";f"; snippetType = "autosnippet"; }, { ls.text_node("\\phi"); });
- ls.snippet({ trig = ";vf"; snippetType = "autosnippet"; }, { ls.text_node("\\varphi"); });
- ls.snippet({ trig = ";F"; snippetType = "autosnippet"; }, { ls.text_node("\\Phi"); });
- ls.snippet({ trig = ";c"; snippetType = "autosnippet"; }, { ls.text_node("\\chi"); });
- ls.snippet({ trig = ";p"; snippetType = "autosnippet"; }, { ls.text_node("\\psi"); });
- ls.snippet({ trig = ";P"; snippetType = "autosnippet"; }, { ls.text_node("\\Psi"); });
- ls.snippet({ trig = ";w"; snippetType = "autosnippet"; }, { ls.text_node("\\omega"); });
- ls.snippet({ trig = ";W"; snippetType = "autosnippet"; }, { ls.text_node("\\Omega"); });
+ ls.snippet({ trig = ";a", snippetType = "autosnippet" }, { ls.text_node("\\alpha") }),
+ ls.snippet({ trig = ";b", snippetType = "autosnippet" }, { ls.text_node("\\beta") }),
+ ls.snippet({ trig = ";g", snippetType = "autosnippet" }, { ls.text_node("\\gamma") }),
+ ls.snippet({ trig = ";G", snippetType = "autosnippet" }, { ls.text_node("\\Gamma") }),
+ ls.snippet({ trig = ";d", snippetType = "autosnippet" }, { ls.text_node("\\delta") }),
+ ls.snippet({ trig = ";D", snippetType = "autosnippet" }, { ls.text_node("\\Delta") }),
+ ls.snippet({ trig = ";e", snippetType = "autosnippet" }, { ls.text_node("\\epsilon") }),
+ ls.snippet({ trig = ";ve", snippetType = "autosnippet" }, { ls.text_node("\\varepsilon") }),
+ ls.snippet({ trig = ";z", snippetType = "autosnippet" }, { ls.text_node("\\zeta") }),
+ ls.snippet({ trig = ";h", snippetType = "autosnippet" }, { ls.text_node("\\eta") }),
+ ls.snippet({ trig = ";o", snippetType = "autosnippet" }, { ls.text_node("\\theta") }),
+ ls.snippet({ trig = ";vo", snippetType = "autosnippet" }, { ls.text_node("\\vartheta") }),
+ ls.snippet({ trig = ";O", snippetType = "autosnippet" }, { ls.text_node("\\Theta") }),
+ ls.snippet({ trig = ";k", snippetType = "autosnippet" }, { ls.text_node("\\kappa") }),
+ ls.snippet({ trig = ";l", snippetType = "autosnippet" }, { ls.text_node("\\lambda") }),
+ ls.snippet({ trig = ";L", snippetType = "autosnippet" }, { ls.text_node("\\Lambda") }),
+ ls.snippet({ trig = ";m", snippetType = "autosnippet" }, { ls.text_node("\\mu") }),
+ ls.snippet({ trig = ";n", snippetType = "autosnippet" }, { ls.text_node("\\nu") }),
+ ls.snippet({ trig = ";x", snippetType = "autosnippet" }, { ls.text_node("\\xi") }),
+ ls.snippet({ trig = ";X", snippetType = "autosnippet" }, { ls.text_node("\\Xi") }),
+ ls.snippet({ trig = ";i", snippetType = "autosnippet" }, { ls.text_node("\\pi") }),
+ ls.snippet({ trig = ";I", snippetType = "autosnippet" }, { ls.text_node("\\Pi") }),
+ ls.snippet({ trig = ";r", snippetType = "autosnippet" }, { ls.text_node("\\rho") }),
+ ls.snippet({ trig = ";s", snippetType = "autosnippet" }, { ls.text_node("\\sigma") }),
+ ls.snippet({ trig = ";S", snippetType = "autosnippet" }, { ls.text_node("\\Sigma") }),
+ ls.snippet({ trig = ";t", snippetType = "autosnippet" }, { ls.text_node("\\tau") }),
+ ls.snippet({ trig = ";f", snippetType = "autosnippet" }, { ls.text_node("\\phi") }),
+ ls.snippet({ trig = ";vf", snippetType = "autosnippet" }, { ls.text_node("\\varphi") }),
+ ls.snippet({ trig = ";F", snippetType = "autosnippet" }, { ls.text_node("\\Phi") }),
+ ls.snippet({ trig = ";c", snippetType = "autosnippet" }, { ls.text_node("\\chi") }),
+ ls.snippet({ trig = ";p", snippetType = "autosnippet" }, { ls.text_node("\\psi") }),
+ ls.snippet({ trig = ";P", snippetType = "autosnippet" }, { ls.text_node("\\Psi") }),
+ ls.snippet({ trig = ";w", snippetType = "autosnippet" }, { ls.text_node("\\omega") }),
+ ls.snippet({ trig = ";W", snippetType = "autosnippet" }, { ls.text_node("\\Omega") }),
}
diff --git a/modules/by-name/nv/nvim/plgs/neorg/default.nix b/modules/by-name/nv/nvim/plgs/neorg/default.nix
index 5ed87f0e..b69f5a58 100644
--- a/modules/by-name/nv/nvim/plgs/neorg/default.nix
+++ b/modules/by-name/nv/nvim/plgs/neorg/default.nix
@@ -55,7 +55,7 @@ in {
__empty = null;
};
"core.dirman".config = {
- workspaces = { };
+ workspaces = {};
};
"core.export".config = {
__empty = null;
diff --git a/modules/by-name/qu/qutebrowser/include/redirects.py b/modules/by-name/qu/qutebrowser/include/redirects.py
index 63a44ecf..2588b9e0 100644
--- a/modules/by-name/qu/qutebrowser/include/redirects.py
+++ b/modules/by-name/qu/qutebrowser/include/redirects.py
@@ -34,7 +34,7 @@ def farside_redir(target: str, url: QUrl) -> bool:
# Any return value other than a literal 'False' means we redirect
REDIRECT_MAP: typing.Dict[str, typing.Callable[..., typing.Optional[bool]]] = {
- "reddit.com": operator.methodcaller("setHost", "redlib.vhack.eu"),
+ "reddit.com": partial(farside_redir, "redlib"),
# Source: https://libredirect.github.io/
"medium.com": partial(farside_redir, "scribe"),
"stackoverflow.com": partial(farside_redir, "anonymousoverflow"),
diff --git a/modules/by-name/qu/qutebrowser/module.hm.nix b/modules/by-name/qu/qutebrowser/module.hm.nix
index 3f0f0d52..41e8952d 100644
--- a/modules/by-name/qu/qutebrowser/module.hm.nix
+++ b/modules/by-name/qu/qutebrowser/module.hm.nix
@@ -280,7 +280,7 @@ in {
options.programs.qutebrowser = {
enable = lib.mkEnableOption "qutebrowser";
- package = lib.mkPackageOption pkgs "qutebrowser" {};
+ package = lib.mkPackageOption pkgs "qutebrowser" {nullable = true;};
loadAutoconfig = lib.mkOption {
type = lib.types.bool;
@@ -429,7 +429,7 @@ in {
in
lib.mkIf cfg.enable {
home = {
- packages = [cfg.package];
+ packages = lib.mkIf (cfg.package != null) [cfg.package];
file = {
".qutebrowser/config.py" = lib.mkIf pkgs.stdenv.hostPlatform.isDarwin {
diff --git a/modules/by-name/qu/qutebrowser/module.nix b/modules/by-name/qu/qutebrowser/module.nix
index dab06237..51c1b239 100644
--- a/modules/by-name/qu/qutebrowser/module.nix
+++ b/modules/by-name/qu/qutebrowser/module.nix
@@ -2,7 +2,7 @@
config,
lib,
pkgs,
- self,
+ sources,
...
}: let
cfg = config.soispha.programs.qutebrowser;
@@ -80,7 +80,7 @@ in {
config = lib.mkIf cfg.enable {
home-manager.users.soispha = {
disabledModules = [
- "${self.inputs.home-manager}/modules/programs/qutebrowser.nix"
+ "${sources.sources.home-manager}/modules/programs/qutebrowser.nix"
];
imports = [
./module.hm.nix
@@ -90,7 +90,7 @@ in {
programs.qutebrowser = {
enable = true;
- package = pkgs.hello; # TODO: Set to null, once supported <2025-06-06>
+ package = null;
settings = import ./settings {
inherit lib pkgs;
diff --git a/modules/by-name/ri/river/keymap.nix b/modules/by-name/ri/river/keymap.nix
index 9bcbf387..eacfd75b 100644
--- a/modules/by-name/ri/river/keymap.nix
+++ b/modules/by-name/ri/river/keymap.nix
@@ -37,6 +37,7 @@
};
cfg = config.soispha.programs.river;
+ inherit (config.soispha.services.mpd.mpc) mppPackage;
in {
soispha.programs.river.init.mappings.keymap = lib.mkIf cfg.enable (lib.fixedPoints.fix
(self: {
@@ -46,7 +47,7 @@ in {
"a" = mkSpawn pkgs.alacritty "" {};
"b" = mkSpawn pkgs.tskm "open select" {once = true;};
"k" = mkSpawn pkgs.keepassxc "" {once = true;};
- "s" = mkSpawn pkgs.signal-desktop "" {once = true;};
+ # "s" = mkSpawn pkgs.signal-desktop "" {once = true;};
"p" = mkSpawn pkgs.screenshot_persistent "" {once = true;};
"i" = mkSpawn pkgs.anki "" {once = true;};
};
@@ -76,9 +77,9 @@ in {
"u" = mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%+" {};
"d" = mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%-" {};
"m" = mkSpawn' pkgs.wireplumber "wpctl" "set-mute @DEFAULT_SINK@ toggle" {};
- "n" = mkSpawn pkgs.mpp "next" {};
- "p" = mkSpawn pkgs.mpp "prev" {};
- "t" = mkSpawn pkgs.mpp "toggle" {};
+ "n" = mkSpawn mppPackage "next" {};
+ "p" = mkSpawn mppPackage "prev" {};
+ "t" = mkSpawn mppPackage "toggle" {};
"g" = mkSpawn' pkgs.mpdpopm "mpdpopm" "rating inc" {once = true;};
"b" = mkSpawn' pkgs.mpdpopm "mpdpopm" "rating decr" {once = true;};
};
diff --git a/modules/by-name/ss/ssh/module.nix b/modules/by-name/ss/ssh/module.nix
index f7218e36..87c50728 100644
--- a/modules/by-name/ss/ssh/module.nix
+++ b/modules/by-name/ss/ssh/module.nix
@@ -15,16 +15,16 @@
}: let
cfg = config.soispha.programs.ssh;
- mkDefaultMatchBlock = userKnownHostsFile: {
- addKeysToAgent = "no";
- compression = true;
- controlMaster = "no";
- controlPersist = "no";
- forwardAgent = false;
- hashKnownHosts = false;
- serverAliveCountMax = 3;
- serverAliveInterval = 240;
- inherit userKnownHostsFile;
+ mkDefaultMatchBlock = UserKnownHostsFile: {
+ AddKeysToAgent = "no";
+ Compression = true;
+ ControlMaster = "no";
+ ControlPersist = "no";
+ ForwardAgent = false;
+ HashKnownHosts = false;
+ ServerAliveCountMax = 3;
+ ServerAliveInterval = 240;
+ inherit UserKnownHostsFile;
};
in {
options.soispha.programs.ssh = {
@@ -48,19 +48,23 @@ in {
enable = true;
enableDefaultConfig = false;
- matchBlocks."*" = mkDefaultMatchBlock (
- builtins.toString (pkgs.writeTextFile {
- name = "root-known-hosts";
- text = cfg.rootKnownHosts;
- })
- );
+ settings = {
+ "Host *" = mkDefaultMatchBlock (
+ builtins.toString (pkgs.writeTextFile {
+ name = "root-known-hosts";
+ text = cfg.rootKnownHosts;
+ })
+ );
+ };
};
soispha.programs.ssh = {
enable = true;
enableDefaultConfig = false;
- matchBlocks."*" = mkDefaultMatchBlock "${config.home-manager.users.soispha.xdg.dataHome}/ssh/known_hosts";
+ settings = {
+ "Host *" = mkDefaultMatchBlock "${config.home-manager.users.soispha.xdg.dataHome}/ssh/known_hosts";
+ };
};
};
};
diff --git a/modules/common/default.nix b/modules/common/default.nix
index 40c08378..ea9f2ded 100644
--- a/modules/common/default.nix
+++ b/modules/common/default.nix
@@ -105,12 +105,18 @@
# Already synchronized by mbsync
"~/.local/share/maildir"
+
+ # "Unknown filetype" (and there is no real reason to (try to) synchronize sockets)
+ "~/.local/share/gnupg/S.gpg-agent"
+ "~/.local/share/gnupg/S.gpg-agent.browser"
+ "~/.local/share/gnupg/S.gpg-agent.extra"
+ "~/.local/share/gnupg/S.gpg-agent.ssh"
+ "~/.local/share/gnupg/S.scdaemon"
+
# Should not be synchronized
"~/.local/share/unison"
# These are just to big to be synchronized (# TODO: Work around that <2024-08-31> )
- "~/media/music/beets.old"
- "~/media/music/deerix"
"~/.local/share/Steam"
]
++ homeManagerSymlinks;
@@ -218,7 +224,6 @@
["${lib.getExe pkgs.swaybg}" "--image" "${./abstract-nord.png}"]
pkgs.swayidle
- pkgs.alacritty
];
};
};
diff --git a/modules/home.legacy/conf/beets/default.nix b/modules/home.legacy/conf/beets/default.nix
index 0879b1a5..43d6bff9 100644
--- a/modules/home.legacy/conf/beets/default.nix
+++ b/modules/home.legacy/conf/beets/default.nix
@@ -14,7 +14,6 @@
...
}: let
plugins = import ./plugins.nix {};
-
# TODO: Enable xtractor again <2025-03-29>
# package = pkgs.beets.override {
# pluginOverrides = {
@@ -23,7 +22,6 @@
# propagatedBuildInputs = [pkgs.beetsExtraPlugins.xtractor];
# };
# };
- package = pkgs.beets;
in {
imports = [
./plugins
@@ -31,7 +29,14 @@ in {
programs.beets = {
enable = true;
- inherit package;
+ package = pkgs.python3.pkgs.toPythonApplication (pkgs.python3.pkgs.beets.override
+ {
+ ffmpeg = pkgs.ffmpeg-headless;
+ keyfinder-cli = pkgs.keyfinder-cli.override {
+ ffmpeg =
+ pkgs.ffmpeg-headless;
+ };
+ });
settings = {
library = "${config.xdg.dataHome}/beets/library.db";
diff --git a/modules/home.legacy/conf/beets/plugins/mbsubmit/default.nix b/modules/home.legacy/conf/beets/plugins/mbsubmit/default.nix
deleted file mode 100644
index e69de29b..00000000
--- a/modules/home.legacy/conf/beets/plugins/mbsubmit/default.nix
+++ /dev/null
diff --git a/modules/home.legacy/conf/gtk/default.nix b/modules/home.legacy/conf/gtk/default.nix
index c1a94f73..e624765b 100644
--- a/modules/home.legacy/conf/gtk/default.nix
+++ b/modules/home.legacy/conf/gtk/default.nix
@@ -15,6 +15,7 @@
gtk = {
enable = true;
theme = {
+ # NOTE: The `nordic` package pulls the whole plasma shell, to copy some stuff from a plasma theme :/ <2026-05-29>
package = pkgs.nordic;
name = "Nordic";
};
diff --git a/modules/home.legacy/pkgs/default.nix b/modules/home.legacy/pkgs/default.nix
index 18ef3d98..065f0c96 100644
--- a/modules/home.legacy/pkgs/default.nix
+++ b/modules/home.legacy/pkgs/default.nix
@@ -22,10 +22,6 @@ with pkgs; let
};
TuiCli = {
- Pdfs = [
- con2pdf # Scanner implementation
- ];
-
Misc = [
killall # kill a application by name
bc # Smart calculator
diff --git a/notes/beets_import.md b/notes/beets_import.md
deleted file mode 100644
index 6725192e..00000000
--- a/notes/beets_import.md
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-nixos-config - My current NixOS configuration
-
-Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-SPDX-License-Identifier: GPL-3.0-or-later
-
-This file is part of my nixos-config.
-
-You should have received a copy of the License along with this program.
-If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
--->
-
-# How to import an artist into beets
-
-1. Download said artist (`deerix`)
-1. Remove the useless/bad albums of the downloaded artist
-1. Check for name duplicates (`./find_duplicates`)
-1. Import (`beet import <artist>`)
-1. Remove duplicated files (`beet duplicates artist:<artist>`)
-1. Search for canonical name duplicates (`beet list artist:<artist> <leftover name>`)
diff --git a/npins/default.nix b/npins/default.nix
new file mode 100644
index 00000000..884fc8cc
--- /dev/null
+++ b/npins/default.nix
@@ -0,0 +1,249 @@
+/*
+ This file is provided under the MIT licence:
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+# Generated by npins. Do not modify; will be overwritten regularly
+let
+ # Backwards-compatibly make something that previously didn't take any arguments take some
+ # The function must return an attrset, and will unfortunately be eagerly evaluated
+ # Same thing, but it catches eval errors on the default argument so that one may still call it with other arguments
+ mkFunctor =
+ fn:
+ let
+ e = builtins.tryEval (fn { });
+ in
+ (if e.success then e.value else { error = fn { }; }) // { __functor = _self: fn; };
+
+ # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295
+ range =
+ first: last: if first > last then [ ] else builtins.genList (n: first + n) (last - first + 1);
+
+ # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257
+ stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1));
+
+ # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269
+ stringAsChars = f: s: concatStrings (map f (stringToCharacters s));
+ concatStrings = builtins.concatStringsSep "";
+
+ # If the environment variable NPINS_OVERRIDE_${name} is set, then use
+ # the path directly as opposed to the fetched source.
+ # (Taken from Niv for compatibility)
+ mayOverride =
+ name: path:
+ let
+ envVarName = "NPINS_OVERRIDE_${saneName}";
+ saneName = stringAsChars (c: if (builtins.match "[a-zA-Z0-9]" c) == null then "_" else c) name;
+ ersatz = builtins.getEnv envVarName;
+ in
+ if ersatz == "" then
+ path
+ else
+ # this turns the string into an actual Nix path (for both absolute and
+ # relative paths)
+ builtins.trace "Overriding path of \"${name}\" with \"${ersatz}\" due to set \"${envVarName}\"" (
+ if builtins.substring 0 1 ersatz == "/" then
+ /. + ersatz
+ else
+ /. + builtins.getEnv "PWD" + "/${ersatz}"
+ );
+
+ mkSource =
+ name: spec:
+ {
+ pkgs ? null,
+ }:
+ assert spec ? type;
+ let
+ # Unify across builtin and pkgs fetchers.
+ # `fetchGit` requires a wrapper because of slight API differences.
+ fetchers =
+ if pkgs == null then
+ {
+ inherit (builtins) fetchTarball fetchurl;
+ # For some fucking reason, fetchGit has a different signature than the other builtin fetchers …
+ fetchGit = args: (builtins.fetchGit args).outPath;
+ }
+ else
+ {
+ fetchTarball =
+ {
+ url,
+ sha256,
+ }:
+ pkgs.fetchzip {
+ inherit url sha256;
+ extension = "tar";
+ };
+ inherit (pkgs) fetchurl;
+ fetchGit =
+ {
+ url,
+ submodules,
+ rev,
+ name,
+ narHash,
+ }:
+ pkgs.fetchgit {
+ inherit url rev name;
+ fetchSubmodules = submodules;
+ hash = narHash;
+ };
+ };
+
+ # Dispatch to the correct code path based on the type
+ path =
+ if spec.type == "Git" then
+ mkGitSource fetchers spec
+ else if spec.type == "GitRelease" then
+ mkGitSource fetchers spec
+ else if spec.type == "PyPi" then
+ mkPyPiSource fetchers spec
+ else if spec.type == "Channel" then
+ mkChannelSource fetchers spec
+ else if spec.type == "Tarball" then
+ mkTarballSource fetchers spec
+ else if spec.type == "Container" then
+ mkContainerSource pkgs spec
+ else
+ builtins.throw "Unknown source type ${spec.type}";
+ in
+ spec // { outPath = mayOverride name path; };
+
+ mkGitSource =
+ {
+ fetchTarball,
+ fetchGit,
+ ...
+ }:
+ {
+ repository,
+ revision,
+ url ? null,
+ submodules,
+ hash,
+ ...
+ }:
+ assert repository ? type;
+ # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository
+ # In the latter case, there we will always be an url to the tarball
+ if url != null && !submodules then
+ fetchTarball {
+ inherit url;
+ sha256 = hash;
+ }
+ else
+ let
+ url =
+ if repository.type == "Git" then
+ repository.url
+ else if repository.type == "GitHub" then
+ "https://github.com/${repository.owner}/${repository.repo}.git"
+ else if repository.type == "GitLab" then
+ "${repository.server}/${repository.repo_path}.git"
+ else if repository.type == "Forgejo" then
+ "${repository.server}/${repository.owner}/${repository.repo}.git"
+ else
+ throw "Unrecognized repository type ${repository.type}";
+ urlToName =
+ url: rev:
+ let
+ matched = builtins.match "^.*/([^/]*)(\\.git)?$" url;
+
+ short = builtins.substring 0 7 rev;
+
+ appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else "";
+ in
+ "${if matched == null then "source" else builtins.head matched}${appendShort}";
+ name = urlToName url revision;
+ in
+ fetchGit {
+ rev = revision;
+ narHash = hash;
+
+ inherit name submodules url;
+ };
+
+ mkPyPiSource =
+ { fetchurl, ... }:
+ {
+ url,
+ hash,
+ ...
+ }:
+ fetchurl {
+ inherit url;
+ sha256 = hash;
+ };
+
+ mkChannelSource =
+ { fetchTarball, ... }:
+ {
+ url,
+ hash,
+ ...
+ }:
+ fetchTarball {
+ inherit url;
+ sha256 = hash;
+ };
+
+ mkTarballSource =
+ { fetchTarball, ... }:
+ {
+ url,
+ locked_url ? url,
+ hash,
+ ...
+ }:
+ fetchTarball {
+ url = locked_url;
+ sha256 = hash;
+ };
+
+ mkContainerSource =
+ pkgs:
+ {
+ image_name,
+ image_tag,
+ image_digest,
+ ...
+ }:
+ if pkgs == null then
+ builtins.throw "container sources require passing in a Nixpkgs value: https://github.com/andir/npins/blob/master/README.md#using-the-nixpkgs-fetchers"
+ else
+ pkgs.dockerTools.pullImage {
+ imageName = image_name;
+ imageDigest = image_digest;
+ finalImageTag = image_tag;
+ };
+in
+mkFunctor (
+ {
+ input ? ./sources.json,
+ }:
+ let
+ data =
+ if builtins.isPath input then
+ # while `readFile` will throw an error anyways if the path doesn't exist,
+ # we still need to check beforehand because *our* error can be caught but not the one from the builtin
+ # *piegames sighs*
+ if builtins.pathExists input then
+ builtins.fromJSON (builtins.readFile input)
+ else
+ throw "Input path ${toString input} does not exist"
+ else if builtins.isAttrs input then
+ input
+ else
+ throw "Unsupported input type ${builtins.typeOf input}, must be a path or an attrset";
+ version = data.version;
+ in
+ if version == 7 then
+ builtins.mapAttrs (name: spec: mkFunctor (mkSource name spec)) data.pins
+ else
+ throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`"
+)
diff --git a/npins/full.nix b/npins/full.nix
new file mode 100644
index 00000000..0fb56679
--- /dev/null
+++ b/npins/full.nix
@@ -0,0 +1,8 @@
+_: let
+ sources = import ../unflake.nix;
+ loadFlake = input: sources."${input}";
+
+ # loadFlake = flakeInput: (import sources.flake-compat {src = sources."${flakeInput}";}).outputs;
+in {
+ inherit sources loadFlake;
+}
diff --git a/npins/sources.json b/npins/sources.json
new file mode 100644
index 00000000..c3ff6cb0
--- /dev/null
+++ b/npins/sources.json
@@ -0,0 +1,424 @@
+{
+ "pins": {
+ "unflake_git_https---codeberg-org-bpeetz-flake-templates_ref_prime": {
+ "type": "Git",
+ "repository": {
+ "type": "Forgejo",
+ "server": "https://codeberg.org/",
+ "owner": "bpeetz",
+ "repo": "flake-templates"
+ },
+ "branch": "prime",
+ "submodules": false,
+ "revision": "0294fb03df7c265f8fae24a9e775d69a953bbf03",
+ "url": "https://codeberg.org/bpeetz/flake-templates/archive/0294fb03df7c265f8fae24a9e775d69a953bbf03.tar.gz",
+ "hash": "sha256-rI1qMFzbXVjfEvmf2OS4upnibXpL21its6cCXqhz86o="
+ },
+ "unflake_git_https---git-foss-syndicate-org-bpeetz-qmk_layout_ref_prime": {
+ "type": "Git",
+ "repository": {
+ "type": "Git",
+ "url": "https://git.foss-syndicate.org/bpeetz/qmk_layout"
+ },
+ "branch": "prime",
+ "submodules": false,
+ "revision": "4dff2e6ba5c9c80de3e3d2213ad28802814c3bba",
+ "url": null,
+ "hash": "sha256-dv5P3ahDICDacdzEmcyxrtKgbRWhVFiKQaLEz+WniGM="
+ },
+ "unflake_git_https---git-foss-syndicate-org-vhack-eu-nix-library_ref_prime": {
+ "type": "Git",
+ "repository": {
+ "type": "Git",
+ "url": "https://git.foss-syndicate.org/vhack.eu/nix-library"
+ },
+ "branch": "prime",
+ "submodules": false,
+ "revision": "65bf71bb6ef05ce684924a1dc248bb2e8e2869fb",
+ "url": null,
+ "hash": "sha256-IV7n/l3rFoz5UuavrDv0a7IIOPne0jDQVmJAR8bve8U="
+ },
+ "unflake_git_https---git-lix-systems-lix-project-flake-compat_ref_main": {
+ "type": "Git",
+ "repository": {
+ "type": "Forgejo",
+ "server": "https://git.lix.systems/",
+ "owner": "lix-project",
+ "repo": "flake-compat"
+ },
+ "branch": "main",
+ "submodules": false,
+ "revision": "382052b74656a369c5408822af3f2501e9b1af81",
+ "url": "https://git.lix.systems/lix-project/flake-compat/archive/382052b74656a369c5408822af3f2501e9b1af81.tar.gz",
+ "hash": "sha256-Eg9b/rq/ECYwNwEXs5i9wHyhxNI0JrYx2srdI2uZMaQ="
+ },
+ "unflake_github_cachix_pre-commit-hooks-nix": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "cachix",
+ "repo": "pre-commit-hooks.nix"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a",
+ "url": "https://github.com/cachix/pre-commit-hooks.nix/archive/61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a.tar.gz",
+ "hash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs="
+ },
+ "unflake_github_hercules-ci_flake-parts": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "hercules-ci",
+ "repo": "flake-parts"
+ },
+ "branch": "main",
+ "submodules": false,
+ "revision": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
+ "url": "https://github.com/hercules-ci/flake-parts/archive/f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb.tar.gz",
+ "hash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4="
+ },
+ "unflake_github_hercules-ci_gitignore-nix": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "cb5e3fdca1de58ccbc3ef53de65bd372b48f567c",
+ "url": "https://github.com/hercules-ci/gitignore.nix/archive/cb5e3fdca1de58ccbc3ef53de65bd372b48f567c.tar.gz",
+ "hash": "sha256-XmjITeZNMTQXGhhww6ed/Wacy2KzD6svioyCX7pkUu4="
+ },
+ "unflake_github_ipetkov_crane": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "ipetkov",
+ "repo": "crane"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "0532eb17955225173906d671fb36306bdeb1e2dc",
+ "url": "https://github.com/ipetkov/crane/archive/0532eb17955225173906d671fb36306bdeb1e2dc.tar.gz",
+ "hash": "sha256-EVZd2RsbpreRUDSi9rBwPY+ZxoyMaiEBbZxxhljbaS4="
+ },
+ "unflake_github_lnl7_nix-darwin_ref_master": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "lnl7",
+ "repo": "nix-darwin"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "56c666e108467d87d13508936aade6d567f2a501",
+ "url": "https://github.com/lnl7/nix-darwin/archive/56c666e108467d87d13508936aade6d567f2a501.tar.gz",
+ "hash": "sha256-zXcwYQGCT6pzinK+1dBB2ekTVtfxGZAapb3Evdcu4fY="
+ },
+ "unflake_github_nix-community_disko_ref_master": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "disko"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "115e5211780054d8a890b41f0b7734cafad54dfe",
+ "url": "https://github.com/nix-community/disko/archive/115e5211780054d8a890b41f0b7734cafad54dfe.tar.gz",
+ "hash": "sha256-eTAlX0CwgB84Ts3GaBd944A3DRXVMzgA0EqroZBISUo="
+ },
+ "unflake_github_nix-community_home-manager": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "home-manager"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "f384af1bec6423a0d4ba1855917ab948f64e5808",
+ "url": "https://github.com/nix-community/home-manager/archive/f384af1bec6423a0d4ba1855917ab948f64e5808.tar.gz",
+ "hash": "sha256-s7Tv6FUQThRAvW8En8XVC6HMb0uiikzVccCcCo9u/Bg="
+ },
+ "unflake_github_nix-community_home-manager_ref_master": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "home-manager"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "f384af1bec6423a0d4ba1855917ab948f64e5808",
+ "url": "https://github.com/nix-community/home-manager/archive/f384af1bec6423a0d4ba1855917ab948f64e5808.tar.gz",
+ "hash": "sha256-s7Tv6FUQThRAvW8En8XVC6HMb0uiikzVccCcCo9u/Bg="
+ },
+ "unflake_github_nix-community_impermanence_ref_master": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "impermanence"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "7b1d382faf603b6d264f58627330f9faa5cba149",
+ "url": "https://github.com/nix-community/impermanence/archive/7b1d382faf603b6d264f58627330f9faa5cba149.tar.gz",
+ "hash": "sha256-03+JxvzmfwRu+5JafM0DLbxgHttOQZkUtDWBmeUkN8Y="
+ },
+ "unflake_github_nix-community_lanzaboote_ref_v1-0-0": {
+ "type": "GitRelease",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "lanzaboote"
+ },
+ "pre_releases": false,
+ "version_upper_bound": null,
+ "release_prefix": null,
+ "submodules": false,
+ "version": "v1.0.0",
+ "revision": "2fe211d9c0e2320ce23dc995a3f93666ca149d9a",
+ "url": "https://api.github.com/repos/nix-community/lanzaboote/tarball/refs/tags/v1.0.0",
+ "hash": "sha256-RJmgVDzjRI18BWVogG6wpsl1UCuV6ui8qr4DJ1LfWZ8="
+ },
+ "unflake_github_nix-community_nix-index-database_ref_main": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "nix-index-database"
+ },
+ "branch": "main",
+ "submodules": false,
+ "revision": "97df9dc0b7c924344b793a15c1e8e4522ebb854e",
+ "url": "https://github.com/nix-community/nix-index-database/archive/97df9dc0b7c924344b793a15c1e8e4522ebb854e.tar.gz",
+ "hash": "sha256-4axz3OBPTKa6LIkXV8n0lc63MQU+et2CB5DGobEAi6k="
+ },
+ "unflake_github_nix-community_nixos-generators_ref_master": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "nixos-generators"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "8946737ff703382fda7623b9fab071d037e897d5",
+ "url": "https://github.com/nix-community/nixos-generators/archive/8946737ff703382fda7623b9fab071d037e897d5.tar.gz",
+ "hash": "sha256-nnVmNNKBi1YiBNPhKclNYDORoHkuKipoz7EtVnXO50A="
+ },
+ "unflake_github_nix-community_nixpkgs-lib": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "nixpkgs.lib"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "49d924421d7c3175edc499fdc738bd70d69d97d5",
+ "url": "https://github.com/nix-community/nixpkgs.lib/archive/49d924421d7c3175edc499fdc738bd70d69d97d5.tar.gz",
+ "hash": "sha256-/LAL+E75c0ioCHxyVFGwzXorfuHzToKgqPUCRq4RTIY="
+ },
+ "unflake_github_nix-community_nixvim_ref_main": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "nixvim"
+ },
+ "branch": "main",
+ "submodules": false,
+ "revision": "b7521616f15ad73c6bec458d64ed7f06f4095edb",
+ "url": "https://github.com/nix-community/nixvim/archive/b7521616f15ad73c6bec458d64ed7f06f4095edb.tar.gz",
+ "hash": "sha256-ZRAMRXQE1UKBtpnPwwOqV8teaPDD/fdABvUXMjcyhow="
+ },
+ "unflake_github_nix-systems_default": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-systems",
+ "repo": "default"
+ },
+ "branch": "main",
+ "submodules": false,
+ "revision": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "url": "https://github.com/nix-systems/default/archive/da67096a3b9bf56a91d16901293e51ba5b49a27e.tar.gz",
+ "hash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768="
+ },
+ "unflake_github_nix-systems_default_ref_future-26-11": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-systems",
+ "repo": "default"
+ },
+ "branch": "future-26.11",
+ "submodules": false,
+ "revision": "c29398b59d2048c4ab79345812849c9bd15e9150",
+ "url": "https://github.com/nix-systems/default/archive/c29398b59d2048c4ab79345812849c9bd15e9150.tar.gz",
+ "hash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w="
+ },
+ "unflake_github_nix-systems_x86_64-linux": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-systems",
+ "repo": "x86_64-linux"
+ },
+ "branch": "main",
+ "submodules": false,
+ "revision": "2ecfcac5e15790ba6ce360ceccddb15ad16d08a8",
+ "url": "https://github.com/nix-systems/x86_64-linux/archive/2ecfcac5e15790ba6ce360ceccddb15ad16d08a8.tar.gz",
+ "hash": "sha256-Gtqg8b/v49BFDpDetjclCYXm8mAnTrUzR0JnE2nv5aw="
+ },
+ "unflake_github_nixos_flake-compat_flake_false": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nixos",
+ "repo": "flake-compat"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
+ "url": "https://github.com/nixos/flake-compat/archive/5edf11c44bc78a0d334f6334cdaf7d60d732daab.tar.gz",
+ "hash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns="
+ },
+ "unflake_github_nixos_nixpkgs_ref_nixos-25-05": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nixos",
+ "repo": "nixpkgs"
+ },
+ "branch": "nixos-25.05",
+ "submodules": false,
+ "revision": "ac62194c3917d5f474c1a844b6fd6da2db95077d",
+ "url": "https://github.com/nixos/nixpkgs/archive/ac62194c3917d5f474c1a844b6fd6da2db95077d.tar.gz",
+ "hash": "sha256-16KkgfdYqjaeRGBaYsNrhPRRENs0qzkQVUooNHtoy2w="
+ },
+ "unflake_github_nixos_nixpkgs_ref_nixos-26-05": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nixos",
+ "repo": "nixpkgs"
+ },
+ "branch": "nixos-26.05",
+ "submodules": false,
+ "revision": "b51242d7d43689db2f3be91bd05d5b24fbb469c4",
+ "url": "https://github.com/nixos/nixpkgs/archive/b51242d7d43689db2f3be91bd05d5b24fbb469c4.tar.gz",
+ "hash": "sha256-K5sT4jTpGs15ADhviMKNBH38REpPf5Q6mM1+N6cArVE="
+ },
+ "unflake_github_nixos_nixpkgs_ref_nixos-unstable": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nixos",
+ "repo": "nixpkgs"
+ },
+ "branch": "nixos-unstable",
+ "submodules": false,
+ "revision": "331800de5053fcebacf6813adb5db9c9dca22a0c",
+ "url": "https://github.com/nixos/nixpkgs/archive/331800de5053fcebacf6813adb5db9c9dca22a0c.tar.gz",
+ "hash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw="
+ },
+ "unflake_github_nixos_nixpkgs_ref_nixos-unstable-small": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nixos",
+ "repo": "nixpkgs"
+ },
+ "branch": "nixos-unstable-small",
+ "submodules": false,
+ "revision": "c8560a2e8ad260841c482fe30731087b92f2223e",
+ "url": "https://github.com/nixos/nixpkgs/archive/c8560a2e8ad260841c482fe30731087b92f2223e.tar.gz",
+ "hash": "sha256-JsufhU/MyfEEJMNmtmW0DY6LbOVIjjPS0zGQpHvgrBY="
+ },
+ "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nixos",
+ "repo": "nixpkgs"
+ },
+ "branch": "nixpkgs-unstable",
+ "submodules": false,
+ "revision": "4df1b885d76a54e1aa1a318f8d16fd6005b6401f",
+ "url": "https://github.com/nixos/nixpkgs/archive/4df1b885d76a54e1aa1a318f8d16fd6005b6401f.tar.gz",
+ "hash": "sha256-vhVhuXzFrIOfcssC/9hDHx7MHzDKjF3keHuREOQqQiQ="
+ },
+ "unflake_github_numtide_flake-utils": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "numtide",
+ "repo": "flake-utils"
+ },
+ "branch": "main",
+ "submodules": false,
+ "revision": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+ "url": "https://github.com/numtide/flake-utils/archive/11707dc2f618dd54ca8739b309ec4fc024de578b.tar.gz",
+ "hash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI="
+ },
+ "unflake_github_numtide_treefmt-nix": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "numtide",
+ "repo": "treefmt-nix"
+ },
+ "branch": "main",
+ "submodules": false,
+ "revision": "db947814a175b7ca6ded66e21383d938df01c227",
+ "url": "https://github.com/numtide/treefmt-nix/archive/db947814a175b7ca6ded66e21383d938df01c227.tar.gz",
+ "hash": "sha256-eynAfOmbmxJnkp7YewvCEbShNnnYJ9gLLqkzsYtBPeM="
+ },
+ "unflake_github_numtide_treefmt-nix_ref_main": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "numtide",
+ "repo": "treefmt-nix"
+ },
+ "branch": "main",
+ "submodules": false,
+ "revision": "db947814a175b7ca6ded66e21383d938df01c227",
+ "url": "https://github.com/numtide/treefmt-nix/archive/db947814a175b7ca6ded66e21383d938df01c227.tar.gz",
+ "hash": "sha256-eynAfOmbmxJnkp7YewvCEbShNnnYJ9gLLqkzsYtBPeM="
+ },
+ "unflake_github_oxalica_rust-overlay": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "oxalica",
+ "repo": "rust-overlay"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "7cc96a6a3fd6613cafd633250a3934483479b9a1",
+ "url": "https://github.com/oxalica/rust-overlay/archive/7cc96a6a3fd6613cafd633250a3934483479b9a1.tar.gz",
+ "hash": "sha256-CvRZn3Ut0scqLJ1xwQFkZwKGVBUUNBPrFVXRTMZpbfU="
+ },
+ "unflake_github_ryantm_agenix_ref_main": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "ryantm",
+ "repo": "agenix"
+ },
+ "branch": "main",
+ "submodules": false,
+ "revision": "b027ee29d959fda4b60b57566d64c98a202e0feb",
+ "url": "https://github.com/ryantm/agenix/archive/b027ee29d959fda4b60b57566d64c98a202e0feb.tar.gz",
+ "hash": "sha256-9VnK6Oqai65puVJ4WYtCTvlJeXxMzAp/69HhQuTdl/I="
+ }
+ },
+ "version": 7
+}
diff --git a/pkgs/by-name/co/con2pdf/con2pdf.sh b/pkgs/by-name/co/con2pdf/con2pdf.sh
index ebe35ad3..5737bc82 100755
--- a/pkgs/by-name/co/con2pdf/con2pdf.sh
+++ b/pkgs/by-name/co/con2pdf/con2pdf.sh
@@ -12,6 +12,12 @@
# TODO(@bpeetz): This should probably be rewritten in rust. <2025-04-14>
+
+# shellcheck disable=SC2317,SC2329
+
+echo "Rewrite this script in something else then shell (or remove the dependency on the sh-lib)"
+exit 2
+
NAME="con2pdf"
help() {
cat <<EOF
diff --git a/pkgs/by-name/fu/fupdate-sys/package.nix b/pkgs/by-name/fu/fupdate-sys/package.nix
index 7fd4674b..6672c2f2 100644
--- a/pkgs/by-name/fu/fupdate-sys/package.nix
+++ b/pkgs/by-name/fu/fupdate-sys/package.nix
@@ -11,7 +11,7 @@
writeShellApplication,
# Dependencies
git,
- nixos-rebuild,
+ nixos-rebuild-ng,
sudo,
openssh,
coreutils,
@@ -19,20 +19,25 @@
gnugrep,
gnused,
systemd,
-}:
-writeShellApplication {
- name = "fupdate-sys";
- text = builtins.readFile ./fupdate-sys.sh;
- inheritPath = false;
- runtimeInputs = [
- git
- nixos-rebuild
- sudo
- openssh
- coreutils
- mktemp
- gnugrep
- gnused
- systemd
- ];
-}
+ lixPackageSets,
+}: let
+ nixos-rebuild-without-nix = nixos-rebuild-ng.override {
+ nix = lixPackageSets.latest.lix;
+ };
+in
+ writeShellApplication {
+ name = "fupdate-sys";
+ text = builtins.readFile ./fupdate-sys.sh;
+ inheritPath = false;
+ runtimeInputs = [
+ git
+ nixos-rebuild-without-nix
+ sudo
+ openssh
+ coreutils
+ mktemp
+ gnugrep
+ gnused
+ systemd
+ ];
+ }
diff --git a/pkgs/by-name/fu/fupdate/Cargo.lock b/pkgs/by-name/fu/fupdate/Cargo.lock
index 86c17590..2c3ff16c 100644
--- a/pkgs/by-name/fu/fupdate/Cargo.lock
+++ b/pkgs/by-name/fu/fupdate/Cargo.lock
@@ -69,9 +69,9 @@ checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
[[package]]
name = "clap"
-version = "4.6.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
+checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
dependencies = [
"clap_builder",
"clap_derive",
@@ -91,9 +91,9 @@ dependencies = [
[[package]]
name = "clap_complete"
-version = "4.6.2"
+version = "4.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ff7a1dccbdd8b078c2bdebff47e404615151534d5043da397ec50286816f9cb"
+checksum = "e0a7a9bfdb35811f9e59832f0f05975114d2251b415fb534108e6f34060fd772"
dependencies = [
"clap",
"clap_lex",
@@ -103,9 +103,9 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.6.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
+checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
dependencies = [
"heck",
"proc-macro2",
diff --git a/pkgs/by-name/fu/fupdate/Cargo.toml b/pkgs/by-name/fu/fupdate/Cargo.toml
index 339c1111..e263e43d 100644
--- a/pkgs/by-name/fu/fupdate/Cargo.toml
+++ b/pkgs/by-name/fu/fupdate/Cargo.toml
@@ -17,8 +17,8 @@ edition = "2021"
[dependencies]
anyhow = "1.0.102"
-clap = { version = "4.6.0", features = ["derive"] }
-clap_complete = { version = "4.6.2", features = ["unstable-dynamic"] }
+clap = { version = "4.6.1", features = ["derive"] }
+clap_complete = { version = "4.6.5", features = ["unstable-dynamic"] }
[profile.release]
lto = true
diff --git a/pkgs/by-name/fu/fupdate/flake.lock b/pkgs/by-name/fu/fupdate/flake.lock
deleted file mode 100644
index 9aaa1a94..00000000
--- a/pkgs/by-name/fu/fupdate/flake.lock
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "nodes": {
- "nixpkgs": {
- "locked": {
- "lastModified": 1775888245,
- "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "13043924aaa7375ce482ebe2494338e058282925",
- "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/fu/fupdate/flake.lock.license b/pkgs/by-name/fu/fupdate/flake.lock.license
deleted file mode 100644
index eae6a84c..00000000
--- a/pkgs/by-name/fu/fupdate/flake.lock.license
+++ /dev/null
@@ -1,9 +0,0 @@
-nixos-config - My current NixOS configuration
-
-Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-SPDX-License-Identifier: GPL-3.0-or-later
-
-This file is part of my nixos-config.
-
-You should have received a copy of the License along with this program.
-If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/pkgs/by-name/fu/fupdate/flake.nix b/pkgs/by-name/fu/fupdate/flake.nix
index f06e27ec..22b0957f 100644
--- a/pkgs/by-name/fu/fupdate/flake.nix
+++ b/pkgs/by-name/fu/fupdate/flake.nix
@@ -10,16 +10,16 @@
{
description = "This is a Nix flake update manager.";
- inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
- };
+ inputs = {};
- outputs = {nixpkgs, ...}: let
+ outputs = {...}: let
system = "x86_64-linux";
- pkgs = nixpkgs.legacyPackages."${system}";
+ sources = import ../../../../npins/full.nix {};
+
+ pkgs = (sources.loadFlake "nixpkgs").legacyPackages."${system}";
in {
devShells."${system}".default = pkgs.mkShell {
- packages = [
+ packages = [
pkgs.cargo
pkgs.clippy
pkgs.rustc
diff --git a/pkgs/by-name/fu/fupdate/src/cli.rs b/pkgs/by-name/fu/fupdate/src/cli.rs
index 6ebd1bc4..a7168413 100644
--- a/pkgs/by-name/fu/fupdate/src/cli.rs
+++ b/pkgs/by-name/fu/fupdate/src/cli.rs
@@ -11,7 +11,7 @@
use std::{env, ffi::OsStr, fs::read_dir};
use clap::Parser;
-use clap_complete::{engine::ArgValueCompleter, CompletionCandidate};
+use clap_complete::{CompletionCandidate, engine::ArgValueCompleter};
/// This is a Nix flake update manager.
#[derive(Parser, Debug)]
diff --git a/pkgs/by-name/fu/fupdate/src/main.rs b/pkgs/by-name/fu/fupdate/src/main.rs
index b4af6cd6..2200ce83 100644
--- a/pkgs/by-name/fu/fupdate/src/main.rs
+++ b/pkgs/by-name/fu/fupdate/src/main.rs
@@ -10,7 +10,7 @@
use std::process::Command;
-use anyhow::{bail, Context, Result};
+use anyhow::{Context, Result, bail};
use clap::{CommandFactory, Parser};
pub mod cli;
diff --git a/pkgs/by-name/fu/fupdate/update.sh b/pkgs/by-name/fu/fupdate/update.sh
index 8e36e13e..5ad524e8 100755
--- a/pkgs/by-name/fu/fupdate/update.sh
+++ b/pkgs/by-name/fu/fupdate/update.sh
@@ -10,5 +10,5 @@
# You should have received a copy of the License along with this program.
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-[ "$1" = "upgrade" ] && cargo upgrade
-cargo update
+[ "$1" = "upgrade" ] && cargo upgrade --incompatible allow --pinned allow --recursive true
+cargo update --recursive
diff --git a/pkgs/by-name/lf/lf-make-map/Cargo.lock b/pkgs/by-name/lf/lf-make-map/Cargo.lock
index 3f959f3b..c6a44974 100644
--- a/pkgs/by-name/lf/lf-make-map/Cargo.lock
+++ b/pkgs/by-name/lf/lf-make-map/Cargo.lock
@@ -78,21 +78,27 @@ checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
[[package]]
name = "autocfg"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
+
+[[package]]
+name = "bitflags"
+version = "2.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a"
[[package]]
name = "bumpalo"
-version = "3.20.2"
+version = "3.20.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
[[package]]
name = "cc"
-version = "1.2.60"
+version = "1.2.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20"
+checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -119,9 +125,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.6.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
+checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
dependencies = [
"clap_builder",
"clap_derive",
@@ -141,9 +147,9 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.6.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
+checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
dependencies = [
"heck",
"proc-macro2",
@@ -170,12 +176,70 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
+name = "crossterm"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b"
+dependencies = [
+ "bitflags",
+ "document-features",
+ "mio",
+ "parking_lot",
+ "rustix",
+ "signal-hook",
+ "signal-hook-mio",
+]
+
+[[package]]
+name = "document-features"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
+dependencies = [
+ "litrs",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
name = "find-msvc-tools"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
[[package]]
+name = "futures-core"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+
+[[package]]
+name = "futures-task"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
+
+[[package]]
+name = "futures-util"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "slab",
+]
+
+[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -230,10 +294,12 @@ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
[[package]]
name = "js-sys"
-version = "0.3.95"
+version = "0.3.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca"
+checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11"
dependencies = [
+ "cfg-if",
+ "futures-util",
"once_cell",
"wasm-bindgen",
]
@@ -253,6 +319,7 @@ version = "0.1.0"
dependencies = [
"anyhow",
"clap",
+ "crossterm",
"keymaps",
"log",
"stderrlog",
@@ -261,15 +328,48 @@ dependencies = [
[[package]]
name = "libc"
-version = "0.2.185"
+version = "0.2.186"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
+
+[[package]]
+name = "litrs"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
+
+[[package]]
+name = "lock_api"
+version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
+dependencies = [
+ "scopeguard",
+]
[[package]]
name = "log"
-version = "0.4.29"
+version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f"
+
+[[package]]
+name = "mio"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys",
+]
[[package]]
name = "num-traits"
@@ -293,6 +393,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]]
+name = "parking_lot"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-link",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+
+[[package]]
name = "proc-macro2"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -311,6 +440,28 @@ dependencies = [
]
[[package]]
+name = "redox_syscall"
+version = "0.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "rustix"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
+dependencies = [
+ "bitflags",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
name = "rustversion"
version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -326,10 +477,59 @@ dependencies = [
]
[[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"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
+dependencies = [
+ "errno",
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+
+[[package]]
+name = "smallvec"
+version = "1.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
[[package]]
name = "stderrlog"
@@ -422,10 +622,16 @@ dependencies = [
]
[[package]]
+name = "wasi"
+version = "0.11.1+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+
+[[package]]
name = "wasm-bindgen"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89"
+checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409"
dependencies = [
"cfg-if",
"once_cell",
@@ -436,9 +642,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed"
+checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -446,9 +652,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904"
+checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -459,9 +665,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129"
+checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437"
dependencies = [
"unicode-ident",
]
diff --git a/pkgs/by-name/lf/lf-make-map/Cargo.toml b/pkgs/by-name/lf/lf-make-map/Cargo.toml
index 63d6287e..272e62b9 100644
--- a/pkgs/by-name/lf/lf-make-map/Cargo.toml
+++ b/pkgs/by-name/lf/lf-make-map/Cargo.toml
@@ -18,8 +18,9 @@ edition = "2024"
[dependencies]
anyhow = "1.0.102"
-clap = { version = "4.6.0", features = ["derive", "env"] }
+clap = { version = "4.6.1", features = ["derive", "env"] }
+crossterm = {version = "0.29.0", default-features = false, features = ["events"]}
keymaps = "1.2.0"
-log = "0.4.29"
+log = "0.4.31"
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
deleted file mode 100644
index 9aaa1a94..00000000
--- a/pkgs/by-name/lf/lf-make-map/flake.lock
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "nodes": {
- "nixpkgs": {
- "locked": {
- "lastModified": 1775888245,
- "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "13043924aaa7375ce482ebe2494338e058282925",
- "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/lf/lf-make-map/flake.lock.license b/pkgs/by-name/lf/lf-make-map/flake.lock.license
deleted file mode 100644
index eae6a84c..00000000
--- a/pkgs/by-name/lf/lf-make-map/flake.lock.license
+++ /dev/null
@@ -1,9 +0,0 @@
-nixos-config - My current NixOS configuration
-
-Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-SPDX-License-Identifier: GPL-3.0-or-later
-
-This file is part of my nixos-config.
-
-You should have received a copy of the License along with this program.
-If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/pkgs/by-name/lf/lf-make-map/flake.nix b/pkgs/by-name/lf/lf-make-map/flake.nix
index 8ce8ff0f..2d1e93a2 100644
--- a/pkgs/by-name/lf/lf-make-map/flake.nix
+++ b/pkgs/by-name/lf/lf-make-map/flake.nix
@@ -10,13 +10,13 @@
{
description = "An automatic lf cd mapping generator";
- inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
- };
+ inputs = {};
- outputs = {nixpkgs, ...}: let
+ outputs = {...}: let
system = "x86_64-linux";
- pkgs = nixpkgs.legacyPackages."${system}";
+ sources = import ../../../../npins/full.nix {};
+
+ pkgs = (sources.loadFlake "nixpkgs").legacyPackages."${system}";
in {
devShells."${system}".default = pkgs.mkShell {
packages = [
diff --git a/pkgs/by-name/lf/lf-make-map/src/cli.rs b/pkgs/by-name/lf/lf-make-map/src/cli.rs
index 70746984..25a5a626 100644
--- a/pkgs/by-name/lf/lf-make-map/src/cli.rs
+++ b/pkgs/by-name/lf/lf-make-map/src/cli.rs
@@ -50,6 +50,12 @@ pub enum Command {
#[command(flatten)]
options: CommandOptions,
},
+
+ /// Perform interactive selection, and then cd-there.
+ Interactive {
+ #[command(flatten)]
+ options: CommandOptions,
+ },
}
#[derive(Debug, Parser)]
diff --git a/pkgs/by-name/lf/lf-make-map/src/main.rs b/pkgs/by-name/lf/lf-make-map/src/main.rs
index d5d934e1..1576c1dd 100644
--- a/pkgs/by-name/lf/lf-make-map/src/main.rs
+++ b/pkgs/by-name/lf/lf-make-map/src/main.rs
@@ -39,6 +39,7 @@ fn main() -> anyhow::Result<()> {
let relevant_directories = match &args.command {
Command::Visualize { options } => &options.relevant_directories,
Command::Generate { options } => &options.relevant_directories,
+ Command::Interactive { options } => &options.relevant_directories,
};
for dir in relevant_directories {
@@ -99,6 +100,7 @@ fn main() -> anyhow::Result<()> {
match args.command {
Command::Visualize { .. } => println!("{}", mappings.0),
Command::Generate { .. } => println!("{}", mappings.to_lf_mappings(args.home_name)),
+ Command::Interactive { .. } => mappings.interactive_start(args.home_name)?,
}
Ok(())
@@ -144,90 +146,3 @@ because it can't be turned to a string
)
})
}
-
-// fn gen_lf_mappings(home_name: PathBuf, char_num: usize, rel_dirs: Vec<PathBuf>) {
-// let mut mappings_vec = vec![];
-// let mut index_counter = 0;
-// rel_dirs.iter().for_each(|rel_dir| {
-// mappings_vec.push(vec![Mapping::new(
-// &gen_hot_key(rel_dir, rel_dir, char_num),
-// rel_dir,
-// rel_dir,
-// None,
-// )]);
-// get_dir(rel_dir.to_owned()).iter().for_each(|path| {
-// mappings_vec[index_counter].push(Mapping::new(
-// &gen_hot_key(
-// path,
-// path.parent().expect("All paths here should have parents"),
-// char_num,
-// ),
-// path,
-// &path
-// .parent()
-// .expect("All paths here should have parents")
-// .to_owned(),
-// None,
-// ));
-// });
-// index_counter += 1;
-// });
-// print_mappings(&mappings_vec, home_name);
-// mappings_vec
-// .into_iter()
-// .for_each(|rel_dir_mapping: Vec<Mapping>| {
-// let mut hash_map = sort_mapping_by_hot_key(rel_dir_mapping.clone());
-// //dbg!(hash_map);
-// hash_map.insert("gsi".to_owned(), vec![rel_dir_mapping[0].clone()]);
-// });
-// }
-//
-// fn sort_mapping_by_hot_key(mut mappings: Vec<Mapping>) -> HashMap<String, Vec<Mapping>> {
-// mappings.sort_by_key(|mapping| mapping.hot_key.clone());
-//
-// let mut filtered_mappings: HashMap<String, Vec<Mapping>> = HashMap::new();
-// mappings.iter().for_each(|mapping| {
-// filtered_mappings.insert(mapping.hot_key.clone(), vec![]);
-// });
-// //dbg!(&mappings);
-//
-// let mut index_counter = 1;
-// mappings.iter().for_each(|mapping| {
-// if mappings.len() > index_counter {
-// let next_mapping = &mappings[index_counter];
-// let vec = filtered_mappings
-// .get_mut(&mapping.hot_key)
-// .expect("This existst as it has been initialized");
-//
-// if &next_mapping.hot_key == &mapping.hot_key {
-// vec.push(mapping.clone());
-// vec.push(next_mapping.clone());
-// } else {
-// vec.push(mapping.clone());
-// }
-//
-// let new_vec = vec.to_owned();
-// filtered_mappings.insert(mapping.hot_key.to_owned(), new_vec);
-// }
-//
-// index_counter += 1;
-// });
-// filtered_mappings
-// }
-//
-// fn print_mappings(mappings: &Vec<Vec<Mapping>>, home_name: PathBuf) {
-// for mapping in mappings {
-// mapping.iter().for_each(|map| {
-// println!(
-// "{} = \"cd {}\";",
-// map.hot_key,
-// map.path
-// .display()
-// .to_string()
-// .replace(home_name.to_str().expect("This should be UTF-8"), "~")
-// );
-// });
-//
-// println!("# -------------");
-// }
-// }
diff --git a/pkgs/by-name/lf/lf-make-map/src/mapping/interactive.rs b/pkgs/by-name/lf/lf-make-map/src/mapping/interactive.rs
new file mode 100644
index 00000000..b8ac27d2
--- /dev/null
+++ b/pkgs/by-name/lf/lf-make-map/src/mapping/interactive.rs
@@ -0,0 +1,172 @@
+// nixos-config - My current NixOS configuration
+//
+// Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// This file is part of my nixos-config.
+//
+// You should have received a copy of the License along with this program.
+// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+use std::{io::stderr, path::PathBuf};
+
+use anyhow::Result;
+use crossterm::{
+ cursor::{MoveToRow, MoveUp},
+ event::{
+ Event, KeyEventKind, KeyModifiers, KeyboardEnhancementFlags, PopKeyboardEnhancementFlags,
+ PushKeyboardEnhancementFlags, read,
+ },
+ execute,
+ style::Print,
+ terminal::{self, Clear, ClearType, EnterAlternateScreen, LeaveAlternateScreen},
+};
+
+use crate::mapping::map_key::MapKey;
+
+use super::MappingsTrie;
+
+enum Status {
+ Done(PathBuf),
+ Stop,
+}
+
+impl MappingsTrie {
+ pub fn interactive_start(&self, home_path: PathBuf) -> Result<()> {
+ terminal::enable_raw_mode()?;
+ execute!(
+ stderr(),
+ EnterAlternateScreen,
+ PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES),
+ MoveToRow(0)
+ )?;
+
+ let output = self.interactive_start_inner(home_path);
+
+ execute!(stderr(), LeaveAlternateScreen, PopKeyboardEnhancementFlags)?;
+ terminal::disable_raw_mode()?;
+
+ match output? {
+ Status::Done(path_buf) => {
+ println!("{}", path_buf.display())
+ }
+ Status::Stop => (),
+ }
+
+ Ok(())
+ }
+
+ fn interactive_start_inner(&self, home_path: PathBuf) -> Result<Status> {
+ macro_rules! done {
+ ($state:ident, $last_length:ident) => {{
+ let value = match self.0.get(&$state).expect("Is some").value() {
+ Some(value) => value,
+ None => return Ok(Status::Stop),
+ };
+
+ let path = home_path.join(&value.path);
+
+ terminal::disable_raw_mode()?;
+ execute!(
+ stderr(),
+ MoveUp($last_length as u16),
+ Clear(ClearType::FromCursorDown),
+ Print(format!("{}\n", path.display()))
+ )?;
+ terminal::enable_raw_mode()?;
+
+ return Ok(Status::Done(path));
+ }};
+ }
+
+ let mut state: Vec<MapKey> = vec![];
+ let mut last_length: usize = 1;
+ while let (trie, matched) = self.0.try_get(&state)
+ && matched == state
+ {
+ if trie.value().is_some() {
+ done!(state, last_length);
+ } else {
+ if let Some(last) = state.last_mut()
+ && let Some(mlast) = matched.last()
+ {
+ last.resolution = mlast.resolution;
+ mlast.part_path.clone_into(&mut last.part_path);
+ }
+ }
+
+ {
+ terminal::disable_raw_mode()?;
+ let string = trie.to_string();
+ execute!(
+ stderr(),
+ MoveUp(last_length as u16),
+ Clear(ClearType::FromCursorDown),
+ Print(format!(
+ "Current state: {}\n",
+ self.current_progress(home_path.display().to_string(), &state)
+ )),
+ Print(&string)
+ )?;
+ last_length = string.lines().count() + 1;
+ terminal::enable_raw_mode()?;
+ }
+
+ if let Event::Key(event) = read()?
+ && event.kind == KeyEventKind::Press
+ {
+ match event.code {
+ crossterm::event::KeyCode::Backspace => {
+ state.pop();
+ }
+ crossterm::event::KeyCode::Enter => done!(state, last_length),
+ crossterm::event::KeyCode::Esc => break,
+ crossterm::event::KeyCode::Char(char) => {
+ if event.modifiers == KeyModifiers::CONTROL && char == 'c' {
+ break;
+ } else {
+ state.push(MapKey {
+ key: char,
+ resolution: 0,
+ part_path: String::new(),
+ });
+ }
+ }
+
+ crossterm::event::KeyCode::Left
+ | crossterm::event::KeyCode::Right
+ | crossterm::event::KeyCode::Up
+ | crossterm::event::KeyCode::Down
+ | crossterm::event::KeyCode::Home
+ | crossterm::event::KeyCode::End
+ | crossterm::event::KeyCode::PageUp
+ | crossterm::event::KeyCode::PageDown
+ | crossterm::event::KeyCode::Tab
+ | crossterm::event::KeyCode::BackTab
+ | crossterm::event::KeyCode::Delete
+ | crossterm::event::KeyCode::Insert
+ | crossterm::event::KeyCode::F(_)
+ | crossterm::event::KeyCode::Null
+ | crossterm::event::KeyCode::CapsLock
+ | crossterm::event::KeyCode::ScrollLock
+ | crossterm::event::KeyCode::NumLock
+ | crossterm::event::KeyCode::PrintScreen
+ | crossterm::event::KeyCode::Pause
+ | crossterm::event::KeyCode::Menu
+ | crossterm::event::KeyCode::KeypadBegin
+ | crossterm::event::KeyCode::Media(_)
+ | crossterm::event::KeyCode::Modifier(_) => (),
+ }
+ }
+ }
+
+ Ok(Status::Stop)
+ }
+
+ fn current_progress(&self, home_path: String, state: &[MapKey]) -> String {
+ state
+ .iter()
+ .map(|mk| &mk.part_path)
+ .fold(home_path, |acc, part| format!("{acc}/{part}"))
+ }
+}
diff --git a/pkgs/by-name/lf/lf-make-map/src/mapping/map_key.rs b/pkgs/by-name/lf/lf-make-map/src/mapping/map_key.rs
index 5fd046fb..d90eb963 100644
--- a/pkgs/by-name/lf/lf-make-map/src/mapping/map_key.rs
+++ b/pkgs/by-name/lf/lf-make-map/src/mapping/map_key.rs
@@ -87,7 +87,6 @@ impl MapKey {
generated_chars.extend(
(0..(new_resolution - self.part_path.len()))
- .into_iter()
.map(|_| self.part_path.chars().last().expect("This will exists")),
);
@@ -110,14 +109,14 @@ impl MapKey {
}
pub fn display(values: &[Self]) -> String {
- values.iter().map(|value| value.key.clone()).collect()
+ values.iter().map(|value| value.key).collect()
}
fn part_path_to_key(part: &str, number_of_chars: usize) -> String {
fn make(pat: char, part: &str, number_of_chars: usize) -> String {
let mut acc = String::new();
- if !part.split(pat).all(|part| part.len() > 0) {
+ if !part.split(pat).all(|part| !part.is_empty()) {
panic!(
"\
Can't turn this path '{}' to a mapping.
@@ -152,6 +151,13 @@ This should not happen, please report the bug!",
make('_', part, number_of_chars)
} else if part.contains('-') && !part.starts_with('-') && !part.ends_with('-') {
make('-', part, number_of_chars)
+ } else if part.starts_with('.') {
+ // HACK: Special case for directories like ~/.config ~/.local and so on.
+ // We just drop the starting '.' and it's easier to type. <2026-06-02>
+ part.chars()
+ .skip(1)
+ .take(number_of_chars)
+ .collect::<String>()
} else {
part.chars().take(number_of_chars).collect::<String>()
};
diff --git a/pkgs/by-name/lf/lf-make-map/src/mapping/mod.rs b/pkgs/by-name/lf/lf-make-map/src/mapping/mod.rs
index 21392388..b733990e 100644
--- a/pkgs/by-name/lf/lf-make-map/src/mapping/mod.rs
+++ b/pkgs/by-name/lf/lf-make-map/src/mapping/mod.rs
@@ -14,6 +14,7 @@ use log::{Level, debug, log_enabled, trace};
use map_key::MapKey;
pub mod lf_mapping;
+pub mod interactive;
pub mod map_key;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
diff --git a/pkgs/by-name/lf/lf-make-map/tests/base.sh b/pkgs/by-name/lf/lf-make-map/tests/base.sh
index c7694985..d860cf84 100755
--- a/pkgs/by-name/lf/lf-make-map/tests/base.sh
+++ b/pkgs/by-name/lf/lf-make-map/tests/base.sh
@@ -18,7 +18,7 @@ execute_make_maps() {
}
fd . cases --max-depth 1 --type directory | while read -r case; do
- echo "Executing '$case/test.sh'"
+ echo "Executing '${case}test.sh'"
# shellcheck source=/dev/null
LOCATION="$case/test.sh" . "$case/test.sh"
diff --git a/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs/output.old b/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs/output.old
new file mode 100644
index 00000000..49307bc6
--- /dev/null
+++ b/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs/output.old
@@ -0,0 +1,13 @@
+map gc. cd "/tmp/tmp.DfcgjemfCG/.config"
+map gca. cd "/tmp/tmp.DfcgjemfCG/.config/apzu"
+map gcl. cd "/tmp/tmp.DfcgjemfCG/.config/lahmu"
+map gct. cd "/tmp/tmp.DfcgjemfCG/.config/tiamat"
+map gd. cd "/tmp/tmp.DfcgjemfCG/documents"
+map gda. cd "/tmp/tmp.DfcgjemfCG/documents/apzu"
+map gdl. cd "/tmp/tmp.DfcgjemfCG/documents/lahmu"
+map gdt. cd "/tmp/tmp.DfcgjemfCG/documents/tiamat"
+map gl. cd "/tmp/tmp.DfcgjemfCG/.local"
+map gln. cd "/tmp/tmp.DfcgjemfCG/.local/nvim"
+map glsh. cd "/tmp/tmp.DfcgjemfCG/.local/share"
+map glst. cd "/tmp/tmp.DfcgjemfCG/.local/state"
+
diff --git a/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs/test.sh b/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs/test.sh
new file mode 100755
index 00000000..d3df848c
--- /dev/null
+++ b/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs/test.sh
@@ -0,0 +1,49 @@
+#! /usr/bin/env sh
+
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+mkFile() {
+ t="$1"
+
+ mkdir --parents "$(dirname "$t")"
+ echo "TEST_FILE" >"$t"
+}
+
+# We need to hard code this, so that our output matches the golden sample.
+base="/tmp/tmp.DfcgjemfCG"
+test="$(mktemp --directory -t lf_make_temp_test_XXXXX)"
+
+if [ -d "$base" ]; then
+ rm --recursive "$base"
+fi
+mkdir "$base"
+
+cleanup() {
+ rm --recursive "$base" "$test"
+}
+trap cleanup EXIT
+
+mkFile "$base/.local/share/file1.txt"
+mkFile "$base/.local/state/file1.txt"
+mkFile "$base/.local/nvim/log.LOG"
+mkFile "$base/.local/.tog/TOG.LOG"
+
+mkFile "$base/.config/apzu/file2.txt"
+mkFile "$base/.config/tiamat/file2.txt"
+mkFile "$base/.config/lahmu/file2.txt"
+
+mkFile "$base/documents/apzu/file2.txt"
+mkFile "$base/documents/tiamat/file2.txt"
+mkFile "$base/documents/lahmu/file2.txt"
+
+execute_make_maps --home-name "$base" --depth 100 generate "$base/.local" "$base/.config" "$base/documents" >"$test/output.new"
+
+diff "$test/output.new" "$(dirname "$LOCATION")/output.old"
diff --git a/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs_duplicates/output.old b/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs_duplicates/output.old
new file mode 100644
index 00000000..f7523ba3
--- /dev/null
+++ b/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs_duplicates/output.old
@@ -0,0 +1,17 @@
+map gca. cd "/tmp/tmp.DfcgjemfCG/cats"
+map gcaa. cd "/tmp/tmp.DfcgjemfCG/cats/apzu"
+map gcal. cd "/tmp/tmp.DfcgjemfCG/cats/lahmu"
+map gcat. cd "/tmp/tmp.DfcgjemfCG/cats/tiamat"
+map gco. cd "/tmp/tmp.DfcgjemfCG/.config"
+map gcoa. cd "/tmp/tmp.DfcgjemfCG/.config/apzu"
+map gcol. cd "/tmp/tmp.DfcgjemfCG/.config/lahmu"
+map gcot. cd "/tmp/tmp.DfcgjemfCG/.config/tiamat"
+map gd. cd "/tmp/tmp.DfcgjemfCG/documents"
+map gda. cd "/tmp/tmp.DfcgjemfCG/documents/apzu"
+map gdl. cd "/tmp/tmp.DfcgjemfCG/documents/lahmu"
+map gdt. cd "/tmp/tmp.DfcgjemfCG/documents/tiamat"
+map gl. cd "/tmp/tmp.DfcgjemfCG/.local"
+map gln. cd "/tmp/tmp.DfcgjemfCG/.local/nvim"
+map glsh. cd "/tmp/tmp.DfcgjemfCG/.local/share"
+map glst. cd "/tmp/tmp.DfcgjemfCG/.local/state"
+
diff --git a/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs_duplicates/test.sh b/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs_duplicates/test.sh
new file mode 100755
index 00000000..33447e54
--- /dev/null
+++ b/pkgs/by-name/lf/lf-make-map/tests/cases/dot_dirs_duplicates/test.sh
@@ -0,0 +1,53 @@
+#! /usr/bin/env sh
+
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+mkFile() {
+ t="$1"
+
+ mkdir --parents "$(dirname "$t")"
+ echo "TEST_FILE" >"$t"
+}
+
+# We need to hard code this, so that our output matches the golden sample.
+base="/tmp/tmp.DfcgjemfCG"
+test="$(mktemp --directory -t lf_make_temp_test_XXXXX)"
+
+if [ -d "$base" ]; then
+ rm --recursive "$base"
+fi
+mkdir "$base"
+
+cleanup() {
+ rm --recursive "$base" "$test"
+}
+trap cleanup EXIT
+
+mkFile "$base/.local/share/file1.txt"
+mkFile "$base/.local/state/file1.txt"
+mkFile "$base/.local/nvim/log.LOG"
+mkFile "$base/.local/.tog/TOG.LOG"
+
+mkFile "$base/.config/apzu/file2.txt"
+mkFile "$base/.config/tiamat/file2.txt"
+mkFile "$base/.config/lahmu/file2.txt"
+
+mkFile "$base/documents/apzu/file2.txt"
+mkFile "$base/documents/tiamat/file2.txt"
+mkFile "$base/documents/lahmu/file2.txt"
+
+mkFile "$base/cats/apzu/file2.txt"
+mkFile "$base/cats/tiamat/file2.txt"
+mkFile "$base/cats/lahmu/file2.txt"
+
+execute_make_maps --home-name "$base" --depth 100 generate "$base/.local" "$base/.config" "$base/documents" "$base/cats" >"$test/output.new"
+
+diff "$test/output.new" "$(dirname "$LOCATION")/output.old"
diff --git a/pkgs/by-name/lf/lf-make-map/tests/cases/simple/test.sh b/pkgs/by-name/lf/lf-make-map/tests/cases/simple/test.sh
index 22f97009..97ee0cb9 100755
--- a/pkgs/by-name/lf/lf-make-map/tests/cases/simple/test.sh
+++ b/pkgs/by-name/lf/lf-make-map/tests/cases/simple/test.sh
@@ -14,11 +14,9 @@
base="/tmp/tmp.DfcgjemfCG"
test="$(mktemp --directory -t lf_make_temp_test_XXXXX)"
-[ -d "$base" ] && {
- echo "$base already exists!"
- exit 1
-}
-
+if [ -d "$base" ]; then
+ rm --recursive "$base"
+fi
mkdir "$base"
cleanup() {
diff --git a/pkgs/by-name/lf/lf-make-map/update.sh b/pkgs/by-name/lf/lf-make-map/update.sh
index 23d90a86..188771c4 100755
--- a/pkgs/by-name/lf/lf-make-map/update.sh
+++ b/pkgs/by-name/lf/lf-make-map/update.sh
@@ -10,5 +10,5 @@
# You should have received a copy of the License along with this program.
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-[ "$1" = "upgrade" ] && cargo upgrade
-cargo update
+[ "$1" = "upgrade" ] && cargo upgrade --incompatible allow --pinned allow --recursive true
+cargo update --recursive
diff --git a/pkgs/by-name/mp/mpdpopm/Cargo.lock b/pkgs/by-name/mp/mpdpopm/Cargo.lock
index f656f654..6984cef5 100644
--- a/pkgs/by-name/mp/mpdpopm/Cargo.lock
+++ b/pkgs/by-name/mp/mpdpopm/Cargo.lock
@@ -113,9 +113,9 @@ dependencies = [
[[package]]
name = "autocfg"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
[[package]]
name = "base64"
@@ -134,11 +134,11 @@ dependencies = [
[[package]]
name = "bit-set"
-version = "0.8.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
+checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd"
dependencies = [
- "bit-vec 0.8.0",
+ "bit-vec 0.9.1",
]
[[package]]
@@ -149,9 +149,9 @@ checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
[[package]]
name = "bit-vec"
-version = "0.8.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
+checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51"
[[package]]
name = "bitflags"
@@ -161,9 +161,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.11.0"
+version = "2.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
+checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a"
[[package]]
name = "block-buffer"
@@ -182,9 +182,9 @@ checksum = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9"
[[package]]
name = "bumpalo"
-version = "3.20.2"
+version = "3.20.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
[[package]]
name = "bytemuck"
@@ -209,9 +209,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.2.60"
+version = "1.2.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20"
+checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -230,6 +230,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
+name = "chacha20"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601"
+dependencies = [
+ "cfg-if",
+ "cpufeatures 0.3.0",
+ "rand_core 0.10.1",
+]
+
+[[package]]
name = "chrono"
version = "0.4.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -244,9 +255,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.6.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
+checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
dependencies = [
"clap_builder",
"clap_derive",
@@ -266,9 +277,9 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.6.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
+checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
dependencies = [
"heck",
"proc-macro2",
@@ -290,9 +301,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
[[package]]
name = "compact_str"
-version = "0.9.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a"
+checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab"
dependencies = [
"castaway",
"cfg-if",
@@ -327,12 +338,21 @@ dependencies = [
]
[[package]]
+name = "cpufeatures"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"
+dependencies = [
+ "libc",
+]
+
+[[package]]
name = "crossterm"
version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"crossterm_winapi",
"derive_more",
"document-features",
@@ -465,9 +485,9 @@ dependencies = [
[[package]]
name = "either"
-version = "1.15.0"
+version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
+checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
[[package]]
name = "ena"
@@ -685,6 +705,7 @@ dependencies = [
"cfg-if",
"libc",
"r-efi 6.0.0",
+ "rand_core 0.10.1",
"wasip2",
"wasip3",
]
@@ -711,9 +732,9 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.17.0"
+version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"
+checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
[[package]]
name = "heck"
@@ -770,7 +791,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
dependencies = [
"equivalent",
- "hashbrown 0.17.0",
+ "hashbrown 0.17.1",
"serde",
"serde_core",
]
@@ -820,10 +841,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "js-sys"
-version = "0.3.95"
+version = "0.3.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca"
+checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11"
dependencies = [
+ "cfg-if",
+ "futures-util",
"once_cell",
"wasm-bindgen",
]
@@ -845,7 +868,7 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653"
dependencies = [
- "cpufeatures",
+ "cpufeatures 0.2.17",
]
[[package]]
@@ -856,12 +879,12 @@ checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f"
[[package]]
name = "lalrpop"
-version = "0.22.2"
+version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba4ebbd48ce411c1d10fb35185f5a51a7bfa3d8b24b4e330d30c9e3a34129501"
+checksum = "98a80a963123205c7157323c99611bc4abb65dcbd62ef46dc4bac74a3941bc75"
dependencies = [
"ascii-canvas",
- "bit-set 0.8.0",
+ "bit-set 0.9.1",
"ena",
"itertools",
"lalrpop-util",
@@ -878,12 +901,11 @@ dependencies = [
[[package]]
name = "lalrpop-util"
-version = "0.22.2"
+version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5baa5e9ff84f1aefd264e6869907646538a52147a755d494517a8007fb48733"
+checksum = "884f3e747ed2dcee867cda1b0c31a048f9e20de2d916a248949319921a2e666e"
dependencies = [
"regex-automata",
- "rustversion",
]
[[package]]
@@ -900,9 +922,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "libc"
-version = "0.2.185"
+version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
+checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
[[package]]
name = "line-clipping"
@@ -910,7 +932,7 @@ version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f50e8f47623268b5407192d26876c4d7f89d686ca130fdc53bced4814cd29f8"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
]
[[package]]
@@ -936,9 +958,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.29"
+version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f"
[[package]]
name = "lru"
@@ -970,9 +992,9 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.8.0"
+version = "2.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
[[package]]
name = "memmem"
@@ -997,9 +1019,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "mio"
-version = "1.2.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
+checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda"
dependencies = [
"libc",
"log",
@@ -1023,7 +1045,7 @@ dependencies = [
"lazy_static",
"os_str_bytes",
"pin-project",
- "rand 0.9.4",
+ "rand 0.10.1",
"ratatui",
"regex",
"serde",
@@ -1047,7 +1069,7 @@ version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"cfg-if",
"cfg_aliases",
"libc",
@@ -1075,9 +1097,9 @@ dependencies = [
[[package]]
name = "num-conv"
-version = "0.2.1"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967"
+checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
[[package]]
name = "num-derive"
@@ -1131,9 +1153,9 @@ dependencies = [
[[package]]
name = "os_str_bytes"
-version = "7.1.1"
+version = "7.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63eceb7b5d757011a87d08eb2123db15d87fb0c281f65d101ce30a1e96c3ad5c"
+checksum = "89284d0c2af7b0eb5e814798aa07265413c8fd72009f7fc82ea25a81fb287ce9"
dependencies = [
"memchr",
]
@@ -1206,11 +1228,12 @@ dependencies = [
[[package]]
name = "petgraph"
-version = "0.7.1"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772"
+checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
dependencies = [
"fixedbitset 0.5.7",
+ "hashbrown 0.15.5",
"indexmap",
]
@@ -1221,7 +1244,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
dependencies = [
"phf_macros",
- "phf_shared",
+ "phf_shared 0.11.3",
]
[[package]]
@@ -1231,7 +1254,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
dependencies = [
"phf_generator",
- "phf_shared",
+ "phf_shared 0.11.3",
]
[[package]]
@@ -1240,8 +1263,8 @@ version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
dependencies = [
- "phf_shared",
- "rand 0.8.5",
+ "phf_shared 0.11.3",
+ "rand 0.8.6",
]
[[package]]
@@ -1251,7 +1274,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216"
dependencies = [
"phf_generator",
- "phf_shared",
+ "phf_shared 0.11.3",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -1267,6 +1290,15 @@ dependencies = [
]
[[package]]
+name = "phf_shared"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
name = "pico-args"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1274,18 +1306,18 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
[[package]]
name = "pin-project"
-version = "1.1.11"
+version = "1.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517"
+checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
-version = "1.1.11"
+version = "1.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6"
+checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"
dependencies = [
"proc-macro2",
"quote",
@@ -1311,15 +1343,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
-name = "ppv-lite86"
-version = "0.2.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
-dependencies = [
- "zerocopy",
-]
-
-[[package]]
name = "precomputed-hash"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1367,31 +1390,22 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
[[package]]
name = "rand"
-version = "0.8.5"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
dependencies = [
"rand_core 0.6.4",
]
[[package]]
name = "rand"
-version = "0.9.4"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
+checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207"
dependencies = [
- "rand_chacha",
- "rand_core 0.9.5",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
-dependencies = [
- "ppv-lite86",
- "rand_core 0.9.5",
+ "chacha20",
+ "getrandom 0.4.2",
+ "rand_core 0.10.1",
]
[[package]]
@@ -1402,12 +1416,9 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
[[package]]
name = "rand_core"
-version = "0.9.5"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
-dependencies = [
- "getrandom 0.3.4",
-]
+checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
[[package]]
name = "ratatui"
@@ -1429,7 +1440,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ef8dea09a92caaf73bff7adb70b76162e5937524058a7e5bff37869cbbec293"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"compact_str",
"hashbrown 0.16.1",
"indoc",
@@ -1481,7 +1492,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7dbfa023cd4e604c2553483820c5fe8aa9d71a42eea5aa77c6e7f35756612db"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"hashbrown 0.16.1",
"indoc",
"instability",
@@ -1500,7 +1511,7 @@ version = "0.5.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
]
[[package]]
@@ -1547,7 +1558,7 @@ version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"errno",
"libc",
"linux-raw-sys",
@@ -1619,9 +1630,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.149"
+version = "1.0.150"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
+checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
dependencies = [
"itoa",
"memchr",
@@ -1646,15 +1657,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [
"cfg-if",
- "cpufeatures",
+ "cpufeatures 0.2.17",
"digest",
]
[[package]]
name = "sha3"
-version = "0.10.8"
+version = "0.10.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
+checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874"
dependencies = [
"digest",
"keccak",
@@ -1671,9 +1682,9 @@ dependencies = [
[[package]]
name = "shlex"
-version = "1.3.0"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
[[package]]
name = "signal-hook"
@@ -1708,9 +1719,9 @@ dependencies = [
[[package]]
name = "siphasher"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e"
+checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"
[[package]]
name = "slab"
@@ -1726,9 +1737,9 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
[[package]]
name = "socket2"
-version = "0.6.3"
+version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
+checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51"
dependencies = [
"libc",
"windows-sys",
@@ -1742,13 +1753,13 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "string_cache"
-version = "0.8.9"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
+checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901"
dependencies = [
"new_debug_unreachable",
"parking_lot",
- "phf_shared",
+ "phf_shared 0.13.1",
"precomputed-hash",
]
@@ -1839,7 +1850,7 @@ checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7"
dependencies = [
"anyhow",
"base64",
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"fancy-regex",
"filedescriptor",
"finl_unicode",
@@ -1945,9 +1956,9 @@ checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
[[package]]
name = "tokio"
-version = "1.51.1"
+version = "1.52.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c"
+checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe"
dependencies = [
"bytes",
"libc",
@@ -1972,9 +1983,9 @@ dependencies = [
[[package]]
name = "toml"
-version = "0.9.12+spec-1.1.0"
+version = "1.1.2+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863"
+checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee"
dependencies = [
"indexmap",
"serde_core",
@@ -1982,14 +1993,14 @@ dependencies = [
"toml_datetime",
"toml_parser",
"toml_writer",
- "winnow 0.7.15",
+ "winnow",
]
[[package]]
name = "toml_datetime"
-version = "0.7.5+spec-1.1.0"
+version = "1.1.1+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
+checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
dependencies = [
"serde_core",
]
@@ -2000,7 +2011,7 @@ version = "1.1.2+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
dependencies = [
- "winnow 1.0.1",
+ "winnow",
]
[[package]]
@@ -2072,9 +2083,9 @@ dependencies = [
[[package]]
name = "typenum"
-version = "1.19.0"
+version = "1.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
+checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
[[package]]
name = "ucd-trie"
@@ -2090,9 +2101,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "unicode-segmentation"
-version = "1.13.2"
+version = "1.13.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
+checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
[[package]]
name = "unicode-truncate"
@@ -2125,9 +2136,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
-version = "1.23.0"
+version = "1.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9"
+checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7"
dependencies = [
"atomic",
"getrandom 0.4.2",
@@ -2174,11 +2185,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasip2"
-version = "1.0.2+wasi-0.2.9"
+version = "1.0.3+wasi-0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
+checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
dependencies = [
- "wit-bindgen",
+ "wit-bindgen 0.57.1",
]
[[package]]
@@ -2187,14 +2198,14 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
dependencies = [
- "wit-bindgen",
+ "wit-bindgen 0.51.0",
]
[[package]]
name = "wasm-bindgen"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89"
+checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409"
dependencies = [
"cfg-if",
"once_cell",
@@ -2205,9 +2216,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed"
+checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -2215,9 +2226,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904"
+checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -2228,9 +2239,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129"
+checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437"
dependencies = [
"unicode-ident",
]
@@ -2263,7 +2274,7 @@ version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"hashbrown 0.15.5",
"indexmap",
"semver",
@@ -2442,15 +2453,9 @@ dependencies = [
[[package]]
name = "winnow"
-version = "0.7.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
-
-[[package]]
-name = "winnow"
-version = "1.0.1"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5"
+checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1"
[[package]]
name = "wit-bindgen"
@@ -2462,6 +2467,12 @@ dependencies = [
]
[[package]]
+name = "wit-bindgen"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
+
+[[package]]
name = "wit-bindgen-core"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2510,7 +2521,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
dependencies = [
"anyhow",
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"indexmap",
"log",
"serde",
@@ -2541,26 +2552,6 @@ dependencies = [
]
[[package]]
-name = "zerocopy"
-version = "0.8.48"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
-dependencies = [
- "zerocopy-derive",
-]
-
-[[package]]
-name = "zerocopy-derive"
-version = "0.8.48"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.117",
-]
-
-[[package]]
name = "zmij"
version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/pkgs/by-name/mp/mpdpopm/Cargo.toml b/pkgs/by-name/mp/mpdpopm/Cargo.toml
index bba20ef6..536c87c8 100644
--- a/pkgs/by-name/mp/mpdpopm/Cargo.toml
+++ b/pkgs/by-name/mp/mpdpopm/Cargo.toml
@@ -21,27 +21,36 @@ keywords = ["mpd", "music", "daemon"]
categories = ["multimedia", "network-programming", "database"]
[build-dependencies]
-lalrpop = { version = "0.22", features = ["lexer"] }
+lalrpop = { version = "0.23", features = ["lexer"] }
[dependencies]
async-trait = "0.1"
boolinator = "2.4"
chrono = "0.4"
-clap = {version = "4.6", features = ["derive"]}
+clap = { version = "4.6", features = ["derive"] }
errno = "0.3"
futures = "0.3"
-lalrpop-util = { version = "0.22", features = ["lexer"] }
+lalrpop-util = { version = "0.23", features = ["lexer"] }
lazy_static = "1.5"
-os_str_bytes = "7.1"
+os_str_bytes = "7.2"
pin-project = "1.1"
regex = "1.12"
serde = { version = "1.0", features = ["derive"] }
-serde_json = "1.0.149"
-toml = "0.9"
-tokio = { version = "1.51", features = ["io-util", "macros", "net", "process", "rt-multi-thread", "signal", "sync", "time"] }
+serde_json = "1.0.150"
+toml = "1.1"
+tokio = { version = "1.52", features = [
+ "io-util",
+ "macros",
+ "net",
+ "process",
+ "rt-multi-thread",
+ "signal",
+ "sync",
+ "time",
+] }
tracing = "0.1.44"
-tracing-subscriber = { version = "0.3.23", features = ["env-filter"]}
+tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
anyhow = "1.0.102"
-shlex = "1.3.0"
-rand = "0.9.4"
+shlex = "2.0.1"
+rand = "0.10.1"
ratatui = "0.30.0"
diff --git a/pkgs/by-name/mp/mpdpopm/README.md b/pkgs/by-name/mp/mpdpopm/README.md
index 3c2d961b..b4d0db7d 100644
--- a/pkgs/by-name/mp/mpdpopm/README.md
+++ b/pkgs/by-name/mp/mpdpopm/README.md
@@ -1,26 +1,23 @@
-
# Table of Contents
-1. [Introduction](#orgb2618c9)
-2. [What Can You Do With It?](#orgf1adf2c)
-3. [Licsense](#org3f75b89)
-4. [Prerequisites](#org67de102)
-5. [Installing](#installing)
- 1. [Use the pre-built binaries](#orgb2e3434)
- 2. [Crates.io](#org971a8b3)
- 3. [Use the Debian package](#org55e51f8)
- 4. [Use the Arch package](#org49ada47)
- 5. [Autotools source distributions](#org9c94559)
- 6. [Building from source](#org64bc5dd)
-6. [Getting Started](#getting_started)
- 1. [Program Structure](#org4a22fae)
- 2. [Getting Set-up](#orgfbd2d7d)
- 1. [MPD](#orgb37b483)
- 2. [mppopmd](#org38f4b69)
- 3. [mppopm](#orgfa9dacf)
-7. [Status & Roadmap](#orgd90c7da)
-
-
+1. [Introduction](#orgb2618c9)
+1. [What Can You Do With It?](#orgf1adf2c)
+1. [Licsense](#org3f75b89)
+1. [Prerequisites](#org67de102)
+1. [Installing](#installing)
+ 1. [Use the pre-built binaries](#orgb2e3434)
+ 1. [Crates.io](#org971a8b3)
+ 1. [Use the Debian package](#org55e51f8)
+ 1. [Use the Arch package](#org49ada47)
+ 1. [Autotools source distributions](#org9c94559)
+ 1. [Building from source](#org64bc5dd)
+1. [Getting Started](#getting_started)
+ 1. [Program Structure](#org4a22fae)
+ 1. [Getting Set-up](#orgfbd2d7d)
+ 1. [MPD](#orgb37b483)
+ 1. [mppopmd](#org38f4b69)
+ 1. [mppopm](#orgfa9dacf)
+1. [Status & Roadmap](#orgd90c7da)
<a id="orgb2618c9"></a>
@@ -30,7 +27,6 @@
This README focuses on obtaining & installing [mpdpopm](https://github.com/sp1ff/mpdpopm); the user manual is distributed with the package in [Texinfo](https://www.gnu.org/software/texinfo/) format. The HTML version of the user manual is hosted on my personal [site](https://www.unwoundstack.com/doc/mpdpopm/curr).
-
<a id="orgf1adf2c"></a>
# What Can You Do With It?
@@ -39,73 +35,76 @@ Once you've [installed](#installing) & [started](#getting_started) [mpdpopm](htt
If you'd like to make use of this information in your song selection, you can ask `mppopmd` to queue-up songs on this basis by saying things like:
- mppopm findadd "(rating > 128)"
+```
+mppopm findadd "(rating > 128)"
+```
to add all songs with a rating greater than 128 to the play queue, or
- mppopm findadd "(lastplayed <= \"2022-12-28\")"
+```
+mppopm findadd "(lastplayed <= \"2022-12-28\")"
+```
to add all songs that haven't been played in the last year.
-
<a id="org3f75b89"></a>
# Licsense
[mpdpopm](https://github.com/sp1ff/mpdpopm) is GPL v3 software.
-
<a id="org67de102"></a>
# Prerequisites
[Music Player Daemon](https://www.musicpd.org/): "Music Player Daemon (MPD) is a flexible, powerful, server-side application for playing music. Through plugins and libraries it can play a variety of sound files while being controlled by its network protocol." If you're reading this, I assume you're already running MPD, so this document won't have much to say on installing & configuring it other than that you **do** need to setup the sticker database by setting `sticker_file` in your configuration.
-If you choose to use the pre-built binaries or the Debian or Arch packages (available under [releases](https://github.com/sp1ff/mpdpopm/releases)), that's all you'll need&#x2013; you can jump ahead to the section entitled [Installing](#getting_started), below.
+If you choose to use the pre-built binaries or the Debian or Arch packages (available under [releases](https://github.com/sp1ff/mpdpopm/releases)), that's all you'll need– you can jump ahead to the section entitled [Installing](#getting_started), below.
If you would prefer to download [mpdpopm](https://github.com/sp1ff/mpdpopm) from [crates.io](https://crates.io/crates/mpdpopm), you'll need need the [Rust](https://www.rust-lang.org/tools/install) toolchain ("Rust is a memory- & thread-safe language with no runtime or garbage collector"). Installing the toolchain is easy:
- curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
+```
+curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
+```
[mpdpopm](https://github.com/sp1ff/mpdpopm) is also available as an Autotools source distribution (also under [releases](https://github.com/sp1ff/mpdpopm/releases)), and of course you can just clone the repo & build the project from source. In either of those two cases you'll need the Gnu [Autotools](https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html) installed in addition to Rust. In the former case, grab the tarball in the format of your choice & perform the usual "./configure && make && make install" incantation. In the latter, you'll need to invoke "./bootstrap" after you clone the repo. Again, if you're considering that route, I assume you're familiar with the Autotools & won't say much about them here.
-
<a id="installing"></a>
# Installing
As mentioned above, you can install [mpdpopm](https://github.com/sp1ff/mpdpopm) in a few different ways. In increasing order of complexity:
-
<a id="orgb2e3434"></a>
## Use the pre-built binaries
-Thanks to a suggestion by [m040601](https://github.com/m040601), you can download pre-built binaries for each [release](https://github.com/sp1ff/mpdpopm/releases). At the time of this writing, only Linux & MacOS are supported, and only on x86<sub>64</sub> at that. If that works for you, you can do something like:
+Thanks to a suggestion by [m040601](https://github.com/m040601), you can download pre-built binaries for each [release](https://github.com/sp1ff/mpdpopm/releases). At the time of this writing, only Linux & MacOS are supported, and only on x86<sub>64</sub> at that. If that works for you, you can do something like:
- cd /tmp
- curl -L --output mpdpopm-0.3.5.tar.gz https://github.com/sp1ff/mpdpopm/releases/download/0.3.5/mpdpopm-0.3.5-x86_64-unknown-linux.tar.gz
- tar xf mpdpopm-0.3.5.tar.gz
- tree mpdpopm-0.3.5-x86_64-unknown-linux/
- mpdpopm-0.3.5-x86_64-unknown-linux/
- ├── bin
- │ ├── mppopm
- │ └── mppopmd
- └── doc
- ├── AUTHORS
- ├── ChangeLog
- ├── COPYING
- ├── NEWS
- ├── README.org
- ├── THANKS
- ├── mppopmd.conf
- ├── mppopmd.info
- └── mppopmd.service
-
- 2 directories, 10 files
+```
+cd /tmp
+curl -L --output mpdpopm-0.3.5.tar.gz https://github.com/sp1ff/mpdpopm/releases/download/0.3.5/mpdpopm-0.3.5-x86_64-unknown-linux.tar.gz
+tar xf mpdpopm-0.3.5.tar.gz
+tree mpdpopm-0.3.5-x86_64-unknown-linux/
+mpdpopm-0.3.5-x86_64-unknown-linux/
+├── bin
+│ ├── mppopm
+│ └── mppopmd
+└── doc
+ ├── AUTHORS
+ ├── ChangeLog
+ ├── COPYING
+ ├── NEWS
+ ├── README.org
+ ├── THANKS
+ ├── mppopmd.conf
+ ├── mppopmd.info
+ └── mppopmd.service
-Copy the binaries `mppopmd` (the daemon) and `mppopm` (the CLI) to a convenient place (e.g. `/usr/local/bin` or `$HOME/.local/bin`) and proceed to [Getting Started](#getting_started), below.
+2 directories, 10 files
+```
+Copy the binaries `mppopmd` (the daemon) and `mppopm` (the CLI) to a convenient place (e.g. `/usr/local/bin` or `$HOME/.local/bin`) and proceed to [Getting Started](#getting_started), below.
<a id="org971a8b3"></a>
@@ -113,105 +112,104 @@ Copy the binaries `mppopmd` (the daemon) and `mppopm` (the CLI) to a convenient
If you've got the Rust toolchain installed, just say `cargo install mpdpopm`. The binaries will now be in `$HOME/.cargo/bin`, and you can proceed to [Getting Started](#getting_started), below.
-
<a id="org55e51f8"></a>
## Use the Debian package
If you're running on a Debian-based Linux distribution, and you're on an x86<sub>64</sub> processor, I've begun providing a Debian binary package, courtesy of the very cool [cargo-deb](https://github.com/mmstick/cargo-deb) Cargo helper command. Just do:
- cd /tmp
- curl -L -O https://github.com/sp1ff/mpdpopm/releases/download/0.3.5/mpdpopm_0.3.5_amd64.deb
- sudo dpkg -i mpdpopm_0.3.5_amd64.deb
+```
+cd /tmp
+curl -L -O https://github.com/sp1ff/mpdpopm/releases/download/0.3.5/mpdpopm_0.3.5_amd64.deb
+sudo dpkg -i mpdpopm_0.3.5_amd64.deb
+```
The binaries will be placed in `/usr/local/bin`, and you can proceed to [Getting Started](#getting_started), below.
-
<a id="org49ada47"></a>
## Use the Arch package
If you're running on an Arch-based Linux distribution, I maintain a few packages in the [AUR](https://aur.archlinux.org/):
-- [mpdpopm](https://aur.archlinux.org/packages/mpdpopm): which will grab the latest release & build it locally
-- [mpdpopm-git](https://aur.archlinux.org/packages/mpdpopm-git): grab `HEAD` from `master` & build it locally
-- [mpdpopm-bin](https://aur.archlinux.org/packages/mpdpopm-bin): grab the pre-built binaries from the latest release & install 'em
+- [mpdpopm](https://aur.archlinux.org/packages/mpdpopm): which will grab the latest release & build it locally
+- [mpdpopm-git](https://aur.archlinux.org/packages/mpdpopm-git): grab `HEAD` from `master` & build it locally
+- [mpdpopm-bin](https://aur.archlinux.org/packages/mpdpopm-bin): grab the pre-built binaries from the latest release & install 'em
You can clone the git repo for whichever package you'd like to use (remotes at link), do `makepkg` & then use pacman to install the package you just built, or use an AUR package manager (I use `yay`, e.g.)
-
<a id="org9c94559"></a>
## Autotools source distributions
If you've got the Rust toolchain as well as Autotools installed, you can build from source via Autotools:
- cd /tmp
- curl -L -O https://github.com/sp1ff/mpdpopm/releases/download/0.3.5/mpdpopm-0.3.5.tar.xz
- tar xf mpdpopm-0.3.5.tar.xz
- cd mpdpopm-0.3.5
- ./configure
- make
- make check
- sudo make install
+```
+cd /tmp
+curl -L -O https://github.com/sp1ff/mpdpopm/releases/download/0.3.5/mpdpopm-0.3.5.tar.xz
+tar xf mpdpopm-0.3.5.tar.xz
+cd mpdpopm-0.3.5
+./configure
+make
+make check
+sudo make install
+```
All the usual `configure` options apply (`--prefix`, e.g.) In particular, you can say `--enable-debug` to produce debug builds.
-
<a id="org64bc5dd"></a>
## Building from source
Finally, and again if you have the build toolchain (Rust & Autotools) installed, you can build from source:
- git clone git@github.com:sp1ff/mpdpopm.git
- cd mpdpopm
- ./bootstrap
- ./configure
- make
- make check
- sudo make install
+```
+git clone git@github.com:sp1ff/mpdpopm.git
+cd mpdpopm
+./bootstrap
+./configure
+make
+make check
+sudo make install
+```
Notice the call to `./bootstrap`, in this case.
-
<a id="getting_started"></a>
# Getting Started
This README provides a "quick-start" guide to getting mpdpopm up & running. For detailed user docs, refer to the [manual](https://www.unwoundstack.com/doc/mpdpopm/curr).
-
<a id="org4a22fae"></a>
## Program Structure
[mpdpopm](https://github.com/sp1ff/mpdpopm) provides two programs:
-1. `mppopmd` is the companion daemon process
-2. `mppopm` is the associated command-line interface to the daemon
+1. `mppopmd` is the companion daemon process
+1. `mppopm` is the associated command-line interface to the daemon
`mppopmd` will monitor `mpd` for song playback & note when songs complete; this is how it knows to increment the playcount & update the last played timestamp for each song to which you listen. `mppopmd` records this information (i.e. play counts, last played and ratings) using `mpd` [stickers](https://www.musicpd.org/doc/html/protocol.html#stickers). A sticker is a little bit of textual information which clients can attach to songs in the form of a name-value pair. [mpdpopm](https://github.com/sp1ff/mpdpopm) defines a new sticker name for each of these items & udpates the values for each song when & as requested.
-Of course, other `mpd` clients will not, in general, be aware of `mppopmd` or the stickers it sets: you the user will have to bridge that gap. You could of course just fire-up `netcat` & start sending commands over the MPD protocol using `sendmessage`, but that's not particularly convenient&#x2013; that's where `mppopm` comes in. `mppopm` is the client interface; one can through it instruct `mppopmd` to set ratings, get & set the various stickers mpdpopm knows about, and even search for songs in terms of mpdpopm attributes & add them to the play queue.
-
+Of course, other `mpd` clients will not, in general, be aware of `mppopmd` or the stickers it sets: you the user will have to bridge that gap. You could of course just fire-up `netcat` & start sending commands over the MPD protocol using `sendmessage`, but that's not particularly convenient– that's where `mppopm` comes in. `mppopm` is the client interface; one can through it instruct `mppopmd` to set ratings, get & set the various stickers mpdpopm knows about, and even search for songs in terms of mpdpopm attributes & add them to the play queue.
<a id="orgfbd2d7d"></a>
## Getting Set-up
-
<a id="orgb37b483"></a>
### MPD
If you're reading this, I assume you already have MPD up & running, so this section will be brief. One note, prompted by user [m040601](https://github.com/m040601), however: as mentioned above, [mpdpopm](https://github.com/sp1ff/mpdpopm) leverages the MPD sticker database. I was chagrined to find that if you do not configure MPD to maintain a sticker database, all sticker commands will simply be disabled. Therefore, before setting up [mpdpopm](https://github.com/sp1ff/mpdpopm), find your `mpd` configuration file and check to be sure you have a `sticker_file` entry; something like this:
- sticker_file "/home/sp1ff/lib/mpd/sticker.sql"
+```
+sticker_file "/home/sp1ff/lib/mpd/sticker.sql"
+```
Check also that the you have write access to the named file & its parent directory.
-
<a id="org38f4b69"></a>
### mppopmd
@@ -224,37 +222,38 @@ Once you've got the daemon running to your satisfaction, if you're on a systemd-
[tanshoku](https://github.com/tanshoku) was kind enough to contribute a systemd unit for this purpose. At present, the build does not install it, but provides it as an example and leaves it to the user to install should they desire (and after they have edited it to suit their configuration). You can find it in `${prefix}/share/mpdpopm/examples` for the Autotools distribution, `/usr/local/share/mpdpopm/examples` for the Debian package, and in the `doc` folder for the pre-built binaries.
-
<a id="orgfa9dacf"></a>
### mppopm
At this point, [mpdpopm](https://github.com/sp1ff/mpdpopm) will happily monitor your playback history & keep play counts & last played timestamps for you. If you would like to rate tracks, however, you will need to somehow induce your favorite mpd client to send a "rating" message to the [mpdpopm](https://github.com/sp1ff/mpdpopm) commands channel ("unwoundstack.com:commands" by default). Since this is unlikely to be convenient, I wrote an mpd client for the purpose: a little CLI called `mppopm`. You can simply execute
- mppopm set-rating '*****'
+```
+mppopm set-rating '*****'
+```
-to set the current track's rating to five "stars" (say `mppopm --help` for an explanation of the rating system; in brief&#x2013; it's Winamp's). NB. the set rating command by default produces no output; if you want confirmation that something's happening, use the `-v` flag.
+to set the current track's rating to five "stars" (say `mppopm --help` for an explanation of the rating system; in brief– it's Winamp's). NB. the set rating command by default produces no output; if you want confirmation that something's happening, use the `-v` flag.
The CLI offers "get" & "set" commands for play counts, last played timestamps & the rating. It also provides commands for searching your songs on the basis of play count, rating & last played times in addition to the usual artist, title &c. Say `mppopm --help` for a full list of options, including how to tell it where the mpd server can be found on your network.
-
<a id="orgd90c7da"></a>
# Status & Roadmap
I am currently using [mpdpopm](https://github.com/sp1ff/mpdpopm) day in & day out with my music collection, but it's early days; I have chosen the version number (0.n) in the hopes of indicating that. Right now, mpdpopm is the bare-bones of an app: it's plumbing, not the sink.
-Heretofore, you could use the `mppopm` CLI to, say, rate the current song, but in order to actually <span class="underline">do</span> anything with that rating in the future, you'd have had to write some kind of mpd client for yourself. With the 0.2 release, I've added support for extended MPD filter syntax that allows queries that include the stickers that [mpdpopm](https://github.com/sp1ff/mpdpopm) manages&#x2013; so you can now, for instance, say:
+Heretofore, you could use the `mppopm` CLI to, say, rate the current song, but in order to actually <span class="underline">do</span> anything with that rating in the future, you'd have had to write some kind of mpd client for yourself. With the 0.2 release, I've added support for extended MPD filter syntax that allows queries that include the stickers that [mpdpopm](https://github.com/sp1ff/mpdpopm) manages– so you can now, for instance, say:
- mppopm findadd "(artist =~ \"foo\") and (rating > 175)"
+```
+mppopm findadd "(artist =~ \"foo\") and (rating > 175)"
+```
MPD will handle the "artist =~" clause & [mpdpopm](https://github.com/sp1ff/mpdpopm) the "rating >" clause, as well as combining the results.
This will hopefully be a start to making [mpdpopm](https://github.com/sp1ff/mpdpopm) into a more of a user-facing application than a developer-facing utlity.
-Windows support may be some time coming; the daemon depends on Unix signal handling, the MPD Unix socket, and the Unix daemon logic, especially `fork` & `exec`&#x2026; if you'd like to run it on Windows, let me know&#x2013; if there's enough interest, and I can get some kind of Windows VM setup, I'll look at a port.
+Windows support may be some time coming; the daemon depends on Unix signal handling, the MPD Unix socket, and the Unix daemon logic, especially `fork` & `exec`… if you'd like to run it on Windows, let me know– if there's enough interest, and I can get some kind of Windows VM setup, I'll look at a port.
-Longer-term, I see [mpdpopm](https://github.com/sp1ff/mpdpopm) as a "dual" to mpd&#x2013; mpd commits to never altering your files. mpdpopm will take on that task in terms of tags, at least. To address the "plumbing, not the sink" problem, I'd like to author a client that will handle player control (of course), but also visualization & tag editing&#x2013; a complete music library solution.
+Longer-term, I see [mpdpopm](https://github.com/sp1ff/mpdpopm) as a "dual" to mpd– mpd commits to never altering your files. mpdpopm will take on that task in terms of tags, at least. To address the "plumbing, not the sink" problem, I'd like to author a client that will handle player control (of course), but also visualization & tag editing– a complete music library solution.
Suggestions, bug reports & PRs welcome!
-
diff --git a/pkgs/by-name/mp/mpdpopm/flake.lock b/pkgs/by-name/mp/mpdpopm/flake.lock
deleted file mode 100644
index 6e71f62d..00000000
--- a/pkgs/by-name/mp/mpdpopm/flake.lock
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "nodes": {
- "nixpkgs": {
- "locked": {
- "lastModified": 1775888245,
- "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "13043924aaa7375ce482ebe2494338e058282925",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixpkgs-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "root": {
- "inputs": {
- "nixpkgs": "nixpkgs",
- "treefmt-nix": "treefmt-nix"
- }
- },
- "treefmt-nix": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1775636079,
- "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=",
- "owner": "numtide",
- "repo": "treefmt-nix",
- "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "treefmt-nix",
- "type": "github"
- }
- }
- },
- "root": "root",
- "version": 7
-}
diff --git a/pkgs/by-name/mp/mpdpopm/flake.nix b/pkgs/by-name/mp/mpdpopm/flake.nix
index f6b622fe..d672bd1b 100644
--- a/pkgs/by-name/mp/mpdpopm/flake.nix
+++ b/pkgs/by-name/mp/mpdpopm/flake.nix
@@ -11,24 +11,14 @@
description = "A mpd rating tracker";
inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
-
- treefmt-nix = {
- url = "github:numtide/treefmt-nix";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- };
- };
};
- outputs = {
- self,
- nixpkgs,
- treefmt-nix,
- ...
- }: let
+ outputs = {self, ...}: let
system = "x86_64-linux";
- pkgs = nixpkgs.legacyPackages."${system}";
+ sources = import ../../../../npins/full.nix {};
+
+ pkgs = (sources.loadFlake "nixpkgs").legacyPackages."${system}";
+ treefmt-nix = sources.loadFlake "treefmt-nix";
treefmtEval = import ./treefmt.nix {inherit treefmt-nix pkgs;};
in {
diff --git a/pkgs/by-name/mp/mpdpopm/package.nix b/pkgs/by-name/mp/mpdpopm/package.nix
index 907bb1cf..7048f41e 100644
--- a/pkgs/by-name/mp/mpdpopm/package.nix
+++ b/pkgs/by-name/mp/mpdpopm/package.nix
@@ -16,7 +16,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
version = "0.1.0";
buildInputs = [];
- nativeBuildInputs = [ ];
+ nativeBuildInputs = [];
src = ./.;
cargoLock = {
diff --git a/pkgs/by-name/mp/mpdpopm/src/bin/mpdpopm/cli.rs b/pkgs/by-name/mp/mpdpopm/src/bin/mpdpopm/cli.rs
index c20bf3fa..7ec89441 100644
--- a/pkgs/by-name/mp/mpdpopm/src/bin/mpdpopm/cli.rs
+++ b/pkgs/by-name/mp/mpdpopm/src/bin/mpdpopm/cli.rs
@@ -228,6 +228,5 @@ pub(crate) enum SubCommand {
/// Show general stats about your music collection.
///
/// This includes favorite artist, songs and also the negative ones.
- Stats {
- }
+ Stats {},
}
diff --git a/pkgs/by-name/mp/mpdpopm/src/dj/algorithms.rs b/pkgs/by-name/mp/mpdpopm/src/dj/algorithms.rs
index 2c3ddad6..3587df93 100644
--- a/pkgs/by-name/mp/mpdpopm/src/dj/algorithms.rs
+++ b/pkgs/by-name/mp/mpdpopm/src/dj/algorithms.rs
@@ -4,7 +4,7 @@ use std::{
};
use anyhow::{Context, Result};
-use rand::{Rng, distr};
+use rand::{RngExt, distr};
use tracing::info;
use crate::{clients::Client, storage};
diff --git a/pkgs/by-name/mp/mpdpopm/src/lib.rs b/pkgs/by-name/mp/mpdpopm/src/lib.rs
index 2394b729..6d04a527 100644
--- a/pkgs/by-name/mp/mpdpopm/src/lib.rs
+++ b/pkgs/by-name/mp/mpdpopm/src/lib.rs
@@ -47,7 +47,7 @@ pub mod vars;
#[allow(clippy::let_unit_value)]
#[allow(clippy::just_underscores_and_digits)]
pub mod filters {
- include!(concat!(env!("OUT_DIR"), "/src/filters.rs"));
+ include!(concat!(env!("OUT_DIR"), "/filters.rs"));
}
use crate::{
diff --git a/pkgs/by-name/mp/mpdpopm/update.sh b/pkgs/by-name/mp/mpdpopm/update.sh
index e0c0821b..5aedf3b3 100755
--- a/pkgs/by-name/mp/mpdpopm/update.sh
+++ b/pkgs/by-name/mp/mpdpopm/update.sh
@@ -10,5 +10,5 @@
# You should have received a copy of the License along with this program.
# If not, see <https://www.gnu.org/licenses/agpl.txt>.
-[ "$1" = "upgrade" ] && cargo upgrade
-cargo update
+[ "$1" = "upgrade" ] && cargo upgrade --incompatible allow --pinned allow --recursive true
+cargo update --recursive
diff --git a/pkgs/by-name/mp/mpp-searchadd/mpp-searchadd.sh b/pkgs/by-name/mp/mpp-searchadd/mpp-searchadd.sh
index d76e73b8..89909ed9 100755
--- a/pkgs/by-name/mp/mpp-searchadd/mpp-searchadd.sh
+++ b/pkgs/by-name/mp/mpp-searchadd/mpp-searchadd.sh
@@ -10,6 +10,11 @@
# You should have received a copy of the License along with this program.
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+# Run `beets` once, to trigger eventual beets migrations.
+# Otherwise, these might screw with our file adding (because `beets` prints them on stdout,
+# for some reason !?)
+beet --version >/dev/null
+
beet list "$@" --path | while read -r track; do
mpc add "$track"
done
diff --git a/pkgs/by-name/no/notify-run/flake.lock b/pkgs/by-name/no/notify-run/flake.lock
deleted file mode 100644
index 9aaa1a94..00000000
--- a/pkgs/by-name/no/notify-run/flake.lock
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "nodes": {
- "nixpkgs": {
- "locked": {
- "lastModified": 1775888245,
- "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "13043924aaa7375ce482ebe2494338e058282925",
- "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/no/notify-run/flake.lock.license b/pkgs/by-name/no/notify-run/flake.lock.license
deleted file mode 100644
index eae6a84c..00000000
--- a/pkgs/by-name/no/notify-run/flake.lock.license
+++ /dev/null
@@ -1,9 +0,0 @@
-nixos-config - My current NixOS configuration
-
-Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-SPDX-License-Identifier: GPL-3.0-or-later
-
-This file is part of my nixos-config.
-
-You should have received a copy of the License along with this program.
-If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/pkgs/by-name/no/notify-run/flake.nix b/pkgs/by-name/no/notify-run/flake.nix
index 07be3258..ea5fecb2 100644
--- a/pkgs/by-name/no/notify-run/flake.nix
+++ b/pkgs/by-name/no/notify-run/flake.nix
@@ -11,12 +11,13 @@
description = "An safe way to run applications, that might fail";
inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
};
- outputs = {nixpkgs, ...}: let
+ outputs = {...}: let
system = "x86_64-linux";
- pkgs = nixpkgs.legacyPackages."${system}";
+ sources = import ../../../../npins/full.nix {};
+
+ pkgs = (sources.loadFlake "nixpkgs").legacyPackages."${system}";
in {
devShells."${system}".default = pkgs.mkShell {
packages = [
diff --git a/pkgs/by-name/no/notify-run/update.sh b/pkgs/by-name/no/notify-run/update.sh
index 23d90a86..188771c4 100755
--- a/pkgs/by-name/no/notify-run/update.sh
+++ b/pkgs/by-name/no/notify-run/update.sh
@@ -10,5 +10,5 @@
# You should have received a copy of the License along with this program.
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-[ "$1" = "upgrade" ] && cargo upgrade
-cargo update
+[ "$1" = "upgrade" ] && cargo upgrade --incompatible allow --pinned allow --recursive true
+cargo update --recursive
diff --git a/pkgs/by-name/qu/qutebrowser-patched/package.nix b/pkgs/by-name/qu/qutebrowser-patched/package.nix
index 1f2ea889..1e0532a1 100644
--- a/pkgs/by-name/qu/qutebrowser-patched/package.nix
+++ b/pkgs/by-name/qu/qutebrowser-patched/package.nix
@@ -1,6 +1,25 @@
-{qutebrowser}:
-qutebrowser.overrideAttrs (final: prev: {
- pname = "${prev.pname}-patched";
+{
+ qutebrowser,
+ python3,
+}: let
+ python3NoSpeech = python3.override {
+ packageOverrides = self: super: {
+ pyqt6 = super.pyqt6.override {withSpeech = false;};
+ };
+ };
+ # NOTE: It's just not feasible to re-compile a webengine. <2026-05-29>
+ # qt6PackagesNoFfmpeg = qt6Packages.overrideScope (
+ # _: prev: {
+ # qtwebengine = prev.qtwebengine.override {
+ # ffmpeg = ffmpeg-headless;
+ # };
+ # }
+ # );
+in
+ (qutebrowser.overrideAttrs (final: prev: {
+ pname = "${prev.pname}-patched";
- patches = (prev.patches or []) ++ [./0001-fix-standardpaths-Continue-to-work-with-xdg-while-ba.patch];
-})
+ patches = (prev.patches or []) ++ [./0001-fix-standardpaths-Continue-to-work-with-xdg-while-ba.patch];
+ })).override {
+ python3 = python3NoSpeech;
+ }
diff --git a/pkgs/by-name/ri/river-mk-keymap/Cargo.lock b/pkgs/by-name/ri/river-mk-keymap/Cargo.lock
index 79496c3d..b122ef3c 100644
--- a/pkgs/by-name/ri/river-mk-keymap/Cargo.lock
+++ b/pkgs/by-name/ri/river-mk-keymap/Cargo.lock
@@ -97,9 +97,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.11.0"
+version = "2.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
+checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a"
[[package]]
name = "byteorder"
@@ -109,9 +109,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "cc"
-version = "1.2.60"
+version = "1.2.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20"
+checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -125,9 +125,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "clap"
-version = "4.6.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
+checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
dependencies = [
"clap_builder",
"clap_derive",
@@ -147,9 +147,9 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.6.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
+checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
dependencies = [
"heck",
"proc-macro2",
@@ -297,7 +297,7 @@ version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c7e611d49285d4c4b2e1727b72cf05353558885cc5252f93707b845dfcaf3d3"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"byteorder",
"core-foundation",
"core-graphics",
@@ -401,9 +401,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "libc"
-version = "0.2.185"
+version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
+checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
[[package]]
name = "libloading"
@@ -417,9 +417,9 @@ dependencies = [
[[package]]
name = "libredox"
-version = "0.1.16"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c"
+checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3"
dependencies = [
"libc",
]
@@ -432,15 +432,15 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
[[package]]
name = "log"
-version = "0.4.29"
+version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f"
[[package]]
name = "memchr"
-version = "2.8.0"
+version = "2.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
[[package]]
name = "memmap2"
@@ -490,9 +490,9 @@ dependencies = [
[[package]]
name = "pathfinder_simd"
-version = "0.5.5"
+version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf9027960355bf3afff9841918474a81a5f972ac6d226d518060bba758b5ad57"
+checksum = "4500030c302e4af1d423f36f3b958d1aecb6c04184356ed5a833bf6b60435777"
dependencies = [
"rustc_version",
]
@@ -514,9 +514,9 @@ dependencies = [
[[package]]
name = "quick-xml"
-version = "0.39.2"
+version = "0.39.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d"
+checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e"
dependencies = [
"memchr",
]
@@ -577,7 +577,7 @@ version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"errno",
"libc",
"linux-raw-sys",
@@ -631,9 +631,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.149"
+version = "1.0.150"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
+checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
dependencies = [
"itoa",
"memchr",
@@ -644,9 +644,9 @@ dependencies = [
[[package]]
name = "shlex"
-version = "1.3.0"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
[[package]]
name = "smallvec"
@@ -754,7 +754,7 @@ version = "0.31.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"rustix",
"wayland-backend",
"wayland-scanner",
@@ -766,7 +766,7 @@ version = "0.32.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"wayland-backend",
"wayland-client",
"wayland-scanner",
@@ -778,7 +778,7 @@ version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234"
dependencies = [
- "bitflags 2.11.0",
+ "bitflags 2.12.1",
"wayland-backend",
"wayland-client",
"wayland-protocols",
@@ -862,9 +862,9 @@ dependencies = [
[[package]]
name = "yeslogic-fontconfig-sys"
-version = "6.0.0"
+version = "6.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "503a066b4c037c440169d995b869046827dbc71263f6e8f3be6d77d4f3229dbd"
+checksum = "1d8b8abf912b9a29ff112e1671c97c33636903d13a69712037190e6805af4f76"
dependencies = [
"dlib",
"once_cell",
diff --git a/pkgs/by-name/ri/river-mk-keymap/Cargo.toml b/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
index 5b1443d3..3abe4d67 100644
--- a/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
+++ b/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
@@ -18,19 +18,23 @@ edition = "2021"
[dependencies]
ab_glyph = "0.2.32"
anyhow = "1.0.102"
-clap = { version = "4.6.0", features = ["derive"] }
+clap = { version = "4.6.1", features = ["derive"] }
font-kit = "0.14.3"
-keymaps = { version = "1.2.0", features = ["serde", "mouse-keys", "modifier-keys"] }
+keymaps = { version = "1.2.0", features = [
+ "serde",
+ "mouse-keys",
+ "modifier-keys",
+] }
memmap2 = "0.9.10"
rustix = { version = "1.1.4", features = ["fs", "shm"] }
serde = { version = "1.0.228", features = ["derive"] }
-serde_json = "1.0.149"
-shlex = "1.3.0"
+serde_json = "1.0.150"
+shlex = "2.0.1"
thiserror = "2.0.18"
vte = "0.15.0"
-wayland-client = {version = "0.31.14", default-features = false}
+wayland-client = { version = "0.31.14", default-features = false }
wayland-protocols-wlr = { version = "0.3.12", features = ["client"] }
-wayland-scanner = {version = "0.31.10", default-features = false}
+wayland-scanner = { version = "0.31.10", default-features = false }
[profile.release]
lto = true
diff --git a/pkgs/by-name/ri/river-mk-keymap/flake.lock b/pkgs/by-name/ri/river-mk-keymap/flake.lock
deleted file mode 100644
index 9aaa1a94..00000000
--- a/pkgs/by-name/ri/river-mk-keymap/flake.lock
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "nodes": {
- "nixpkgs": {
- "locked": {
- "lastModified": 1775888245,
- "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "13043924aaa7375ce482ebe2494338e058282925",
- "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.lock.license b/pkgs/by-name/ri/river-mk-keymap/flake.lock.license
deleted file mode 100644
index eae6a84c..00000000
--- a/pkgs/by-name/ri/river-mk-keymap/flake.lock.license
+++ /dev/null
@@ -1,9 +0,0 @@
-nixos-config - My current NixOS configuration
-
-Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-SPDX-License-Identifier: GPL-3.0-or-later
-
-This file is part of my nixos-config.
-
-You should have received a copy of the License along with this program.
-If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/pkgs/by-name/ri/river-mk-keymap/flake.nix b/pkgs/by-name/ri/river-mk-keymap/flake.nix
index b338e4c9..d1467506 100644
--- a/pkgs/by-name/ri/river-mk-keymap/flake.nix
+++ b/pkgs/by-name/ri/river-mk-keymap/flake.nix
@@ -11,12 +11,13 @@
description = "A smart way to configure river keybindings";
inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
};
- outputs = {nixpkgs, ...}: let
+ outputs = {...}: let
system = "x86_64-linux";
- pkgs = nixpkgs.legacyPackages."${system}";
+
+ sources = import ../../../../npins/full.nix {};
+ pkgs = (sources.loadFlake "nixpkgs").legacyPackages."${system}";
nativeBuildInputs = [
pkgs.pkg-config
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
index 8372b61d..ebae7939 100644
--- 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
@@ -10,7 +10,7 @@
use std::{env::current_exe, path::Path, process::Command};
-use anyhow::{bail, Result};
+use anyhow::{Result, bail};
use keymaps::key_repr::{Key, KeyValue, Keys, MediaKeyCode, ModifierKeyCode, MouseKeyValue};
use rustix::path::Arg;
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
index 16dc02f4..106ae9bd 100644
--- 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
@@ -10,7 +10,7 @@
use std::{fmt::Display, ops::Deref, str::FromStr};
-use anyhow::{anyhow, bail, Context, Result};
+use anyhow::{Context, Result, anyhow, bail};
use keymaps::{
key_repr::{Key, Keys},
map_tree::MapTrie,
@@ -98,8 +98,10 @@ impl FromStr for KeyMap {
for (key, value) in raw {
decode_value(
&mut out,
- vec![Key::from_str(&key)
- .with_context(|| format!("Failed to parse key ('{key}')"))?],
+ vec![
+ Key::from_str(&key)
+ .with_context(|| format!("Failed to parse key ('{key}')"))?,
+ ],
&value,
)?;
}
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/wayland/dispatches.rs b/pkgs/by-name/ri/river-mk-keymap/src/wayland/dispatches.rs
index c6e04fdf..5bdf9d3d 100644
--- a/pkgs/by-name/ri/river-mk-keymap/src/wayland/dispatches.rs
+++ b/pkgs/by-name/ri/river-mk-keymap/src/wayland/dispatches.rs
@@ -2,12 +2,12 @@ use std::num::NonZero;
use keymaps::key_repr::Key;
use wayland_client::{
+ Connection, Dispatch, QueueHandle,
globals::GlobalListContents,
protocol::{
wl_buffer::WlBuffer, wl_compositor::WlCompositor, wl_registry, wl_seat::WlSeat,
wl_shm::WlShm, wl_shm_pool::WlShmPool, wl_surface::WlSurface,
},
- Connection, Dispatch, QueueHandle,
};
use wayland_protocols_wlr::layer_shell::v1::client::{
@@ -16,12 +16,11 @@ use wayland_protocols_wlr::layer_shell::v1::client::{
};
use crate::wayland::{
- ansi, render,
+ AppData, ansi, render,
river::protocols::river_protocols::{
zriver_seat_status_v1::{self, ZriverSeatStatusV1},
zriver_status_manager_v1::ZriverStatusManagerV1,
},
- AppData,
};
impl Dispatch<ZriverSeatStatusV1, ()> for AppData {
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/wayland/mod.rs b/pkgs/by-name/ri/river-mk-keymap/src/wayland/mod.rs
index 44c010d5..2b37e9b5 100644
--- a/pkgs/by-name/ri/river-mk-keymap/src/wayland/mod.rs
+++ b/pkgs/by-name/ri/river-mk-keymap/src/wayland/mod.rs
@@ -7,6 +7,7 @@
use anyhow::Result;
use wayland_client::{
+ Connection,
globals::registry_queue_init,
protocol::{
wl_compositor::WlCompositor,
@@ -14,7 +15,6 @@ use wayland_client::{
wl_shm::{self, WlShm},
wl_surface::WlSurface,
},
- Connection,
};
use wayland_protocols_wlr::layer_shell::v1::client::{
zwlr_layer_shell_v1::{self, ZwlrLayerShellV1},
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/wayland/render/layout.rs b/pkgs/by-name/ri/river-mk-keymap/src/wayland/render/layout.rs
index 7f0aaec9..032e98a4 100644
--- a/pkgs/by-name/ri/river-mk-keymap/src/wayland/render/layout.rs
+++ b/pkgs/by-name/ri/river-mk-keymap/src/wayland/render/layout.rs
@@ -1,4 +1,4 @@
-use ab_glyph::{point, Font, Glyph, Point, ScaleFont};
+use ab_glyph::{Font, Glyph, Point, ScaleFont, point};
use crate::wayland::ansi::{StyledChar, StyledString};
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/wayland/render/mod.rs b/pkgs/by-name/ri/river-mk-keymap/src/wayland/render/mod.rs
index e92def3c..fa44f602 100644
--- a/pkgs/by-name/ri/river-mk-keymap/src/wayland/render/mod.rs
+++ b/pkgs/by-name/ri/river-mk-keymap/src/wayland/render/mod.rs
@@ -1,6 +1,6 @@
use std::{fs::File, io::Read};
-use ab_glyph::{point, Font, FontVec, PxScale, ScaleFont};
+use ab_glyph::{Font, FontVec, PxScale, ScaleFont, point};
use anyhow::{Context, Result};
use font_kit::{
family_name::FamilyName, handle::Handle, properties::Properties, source::SystemSource,
@@ -76,11 +76,7 @@ pub(super) fn text(input: &StyledString) -> Result<(ColorVec, (u32, u32))> {
scaled_font.h_advance(g.id)
};
- if next > acc {
- next
- } else {
- acc
- }
+ if next > acc { next } else { acc }
})
.ceil() as usize;
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/wayland/river/protocols.rs b/pkgs/by-name/ri/river-mk-keymap/src/wayland/river/protocols.rs
index e54b65e1..29f5aabe 100644
--- a/pkgs/by-name/ri/river-mk-keymap/src/wayland/river/protocols.rs
+++ b/pkgs/by-name/ri/river-mk-keymap/src/wayland/river/protocols.rs
@@ -12,7 +12,7 @@ pub(crate) mod river_protocols {
pub(crate) mod __status {
use wayland_client::backend as wayland_backend;
use wayland_client::protocol::__interfaces::{
- wl_output_interface, wl_seat_interface, WL_OUTPUT_INTERFACE, WL_SEAT_INTERFACE,
+ WL_OUTPUT_INTERFACE, WL_SEAT_INTERFACE, wl_output_interface, wl_seat_interface,
};
wayland_scanner::generate_interfaces!("./resources/river-status-unstable-v1.xml");
}
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/multi.rs b/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/multi.rs
index 0b1fdc1b..db0e06c1 100644
--- a/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/multi.rs
+++ b/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/multi.rs
@@ -68,14 +68,14 @@ use std::io;
use std::os::unix::io::OwnedFd;
use std::sync::{
- atomic::{AtomicBool, Ordering},
Arc,
+ atomic::{AtomicBool, Ordering},
};
use wayland_client::backend::protocol::Message;
use wayland_client::backend::{Backend, ObjectData, ObjectId};
use wayland_client::{
- protocol::{wl_buffer, wl_shm},
Proxy,
+ protocol::{wl_buffer, wl_shm},
};
use crate::wayland::shm::CreatePoolError;
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/raw.rs b/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/raw.rs
index a12afaa0..3f4416de 100644
--- a/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/raw.rs
+++ b/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/raw.rs
@@ -18,9 +18,9 @@ use std::{
use memmap2::MmapMut;
use wayland_client::{
+ Dispatch, Proxy, QueueHandle, WEnum,
backend::ObjectData,
protocol::{wl_buffer, wl_shm, wl_shm_pool},
- Dispatch, Proxy, QueueHandle, WEnum,
};
use super::CreatePoolError;
diff --git a/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/slot.rs b/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/slot.rs
index ab52c5f6..1f70c0e9 100644
--- a/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/slot.rs
+++ b/pkgs/by-name/ri/river-mk-keymap/src/wayland/shm/slot.rs
@@ -4,20 +4,20 @@ use std::io;
use std::{
os::unix::io::{AsRawFd, OwnedFd},
sync::{
- atomic::{AtomicU8, AtomicUsize, Ordering},
Arc, Mutex, Weak,
+ atomic::{AtomicU8, AtomicUsize, Ordering},
},
};
use wayland_client::backend::protocol::Message;
use wayland_client::backend::{ObjectData, ObjectId};
use wayland_client::{
- protocol::{wl_buffer, wl_shm, wl_surface},
Proxy,
+ protocol::{wl_buffer, wl_shm, wl_surface},
};
-use crate::wayland::shm::raw::RawPool;
use crate::wayland::shm::CreatePoolError;
+use crate::wayland::shm::raw::RawPool;
#[derive(Debug, thiserror::Error)]
pub(crate) enum CreateBufferError {
@@ -420,7 +420,10 @@ impl Buffer {
/// Note: if you need to ensure that [`canvas()`](Buffer::canvas) calls never return data that
/// could be attached to a surface in a multi-threaded client, make this call while you have
/// exclusive access to the corresponding [`SlotPool`].
- pub(crate) fn attach_to(&self, surface: &wl_surface::WlSurface) -> Result<(), ActivateSlotError> {
+ pub(crate) fn attach_to(
+ &self,
+ surface: &wl_surface::WlSurface,
+ ) -> Result<(), ActivateSlotError> {
self.activate()?;
surface.attach(Some(&self.inner), 0, 0);
Ok(())
diff --git a/pkgs/by-name/ri/river-mk-keymap/update.sh b/pkgs/by-name/ri/river-mk-keymap/update.sh
index 8e36e13e..5ad524e8 100755
--- a/pkgs/by-name/ri/river-mk-keymap/update.sh
+++ b/pkgs/by-name/ri/river-mk-keymap/update.sh
@@ -10,5 +10,5 @@
# You should have received a copy of the License along with this program.
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-[ "$1" = "upgrade" ] && cargo upgrade
-cargo update
+[ "$1" = "upgrade" ] && cargo upgrade --incompatible allow --pinned allow --recursive true
+cargo update --recursive
diff --git a/pkgs/by-name/ta/tails-iso/files.json b/pkgs/by-name/ta/tails-iso/files.json
new file mode 100644
index 00000000..0e42badf
--- /dev/null
+++ b/pkgs/by-name/ta/tails-iso/files.json
@@ -0,0 +1,7 @@
+{
+ "version": "7.8.1",
+ "files": {
+ "iso.sig": "sha256-DQm+EHe0KllmzLQzGU61cqaRDNjhU3KUCtDzHKDwWck=",
+ "iso": "sha256-Y4Sch1ZgWUODi9rxcXimVrFvicXPCN6SgLvINvJGcvw="
+ }
+}
diff --git a/pkgs/by-name/ta/tails-iso/package.nix b/pkgs/by-name/ta/tails-iso/package.nix
new file mode 100644
index 00000000..87bfd0b2
--- /dev/null
+++ b/pkgs/by-name/ta/tails-iso/package.nix
@@ -0,0 +1,91 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+{
+ stdenv,
+ fetchurl,
+ sequoia-sq,
+ libarchive, # for bsdtar
+}: let
+ files = builtins.fromJSON (builtins.readFile (./files.json));
+
+ checked_iso = stdenv.mkDerivation (finalAttrs: {
+ pname = "raw-tails-iso";
+ version = "amd64-${files.version}";
+
+ srcs = [
+ (fetchurl {
+ url = "https://tails.net/torrents/files/tails-${finalAttrs.version}.iso.sig";
+ hash = files.files."iso.sig";
+ })
+ (fetchurl {
+ url = "https://download.tails.net/tails/stable/tails-${finalAttrs.version}/tails-${finalAttrs.version}.iso";
+ hash = files.files."iso";
+ })
+ (fetchurl {
+ url = "https://tails.net/tails-signing.key";
+ hash = "sha256-OwdqyM7o7K6F5Km0U1RU3hzsnaT+Yw0sjQk/thMeq1k=";
+ })
+ ];
+
+ dontUnpack = true;
+
+ nativeBuildInputs = [
+ sequoia-sq
+ ];
+
+ buildPhase =
+ /*
+ bash
+ */
+ ''
+ for src in $srcs; do
+ cp --recursive "$src" "$(stripHash "$src")"
+ done
+
+ sq verify \
+ --signer-file=tails-signing.key \
+ --signature-file=tails-${finalAttrs.version}.iso.sig \
+ tails-${finalAttrs.version}.iso
+ '';
+
+ installPhase = ''
+ cp tails-${finalAttrs.version}.iso "$out";
+ '';
+ });
+in
+ stdenv.mkDerivation {
+ pname = "tails-iso-package";
+ inherit (checked_iso) version;
+
+ src = checked_iso;
+
+ dontUnpack = true;
+
+ nativeBuildInputs = [
+ libarchive
+ ];
+
+ buildPhase = ''
+ mkdir iso
+ bsdtar -xf "$src" -C iso
+ '';
+
+ passthru = {
+ inherit (files) version;
+ };
+
+ installPhase = ''
+ install -D "$src" "$out/tails.iso"
+ install -D ./iso/live/vmlinuz "$out/live/vmlinuz-linux"
+ install -D ./iso/live/initrd.img "$out/live/initrd.img"
+
+ chmod --recursive -x $out/tails.iso $out/live/*
+ '';
+ }
diff --git a/pkgs/by-name/ta/tails-iso/update.sh b/pkgs/by-name/ta/tails-iso/update.sh
new file mode 100755
index 00000000..5a2a81cd
--- /dev/null
+++ b/pkgs/by-name/ta/tails-iso/update.sh
@@ -0,0 +1,66 @@
+#! /usr/bin/env sh
+
+set -e
+
+tmpHomePath="$(mktemp -d "${TMPDIR:-/tmp}/nix-prefetch-url-XXXXXXXXXX")"
+cleanup() {
+ chmod -R u+w "$tmpHomePath"
+ rm -rf "$tmpHomePath"
+}
+trap cleanup EXIT
+
+info() {
+ echo "$1" 1>&2
+}
+
+# Returns a name based on the url and reference
+#
+# This function needs to be in sync with nix's fetchgit implementation
+# of urlToName() to re-use the same nix store paths.
+url_to_name() {
+ url=$1
+
+ basename "$url" .git | cut -d: -f2
+}
+
+get_sha256() {
+ url="$1"
+ storePathName="$(url_to_name "$url")"
+ hashType="sha256"
+
+ tmpOut="$tmpHomePath/$storePathName"
+ info "Prefetching '$url'..."
+
+ curl --follow "$url" >"$tmpOut"
+
+ # Compute the hash.
+ hash=$(nix-hash --flat --type "$hashType" --sri "$tmpOut")
+
+ # Add the downloaded file to the Nix store.
+ finalPath=$(nix-store --add-fixed "$hashType" "$tmpOut")
+
+ info " -> Downloaded to '$finalPath'"
+ echo "$hash"
+}
+
+old_version="$(jq .version --raw-output <./files.json)"
+new_version="$(curl --follow https://download.tails.net/tails/stable/ 2>/dev/null | html2text -links | grep --regexp='\s*[0-9]\. tails-amd64-' | sed 's/\s*[0-9]\. tails-amd64-\(.*\)\//\1/')"
+
+if [ "$old_version" = "$new_version" ]; then
+ # No need to update.
+ info exit 0
+fi
+
+final_version="amd64-$new_version"
+
+cat <<EOF | jq . | tee ./files.json
+{
+ "version": "$new_version",
+ "files": {
+ "iso.sig": "$(get_sha256 "https://tails.net/torrents/files/tails-$final_version.iso.sig")",
+ "iso": "$(get_sha256 "https://download.tails.net/tails/stable/tails-$final_version/tails-$final_version.iso")"
+ }
+}
+EOF
+
+# vim: ft=sh
diff --git a/pkgs/by-name/ts/tskm/Cargo.lock b/pkgs/by-name/ts/tskm/Cargo.lock
index d13f1e48..20af41dc 100644
--- a/pkgs/by-name/ts/tskm/Cargo.lock
+++ b/pkgs/by-name/ts/tskm/Cargo.lock
@@ -18,18 +18,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
[[package]]
-name = "ahash"
-version = "0.8.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
-dependencies = [
- "cfg-if",
- "once_cell",
- "version_check",
- "zerocopy",
-]
-
-[[package]]
name = "android_system_properties"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -101,22 +89,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236"
[[package]]
+name = "async-trait"
+version = "0.1.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
name = "autocfg"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
[[package]]
name = "bitflags"
-version = "2.11.0"
+version = "2.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
+checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a"
[[package]]
name = "bumpalo"
-version = "3.20.2"
+version = "3.20.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
[[package]]
name = "byteorder"
@@ -126,12 +125,12 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "cc"
-version = "1.2.60"
+version = "1.2.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20"
+checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
dependencies = [
"find-msvc-tools",
- "shlex",
+ "shlex 2.0.1",
]
[[package]]
@@ -156,9 +155,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.6.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
+checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
dependencies = [
"clap_builder",
"clap_derive",
@@ -178,21 +177,21 @@ dependencies = [
[[package]]
name = "clap_complete"
-version = "4.6.2"
+version = "4.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ff7a1dccbdd8b078c2bdebff47e404615151534d5043da397ec50286816f9cb"
+checksum = "e0a7a9bfdb35811f9e59832f0f05975114d2251b415fb534108e6f34060fd772"
dependencies = [
"clap",
"clap_lex",
"is_executable",
- "shlex",
+ "shlex 1.3.0",
]
[[package]]
name = "clap_derive"
-version = "4.6.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
+checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
dependencies = [
"heck",
"proc-macro2",
@@ -250,9 +249,9 @@ dependencies = [
[[package]]
name = "displaydoc"
-version = "0.2.5"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f"
dependencies = [
"proc-macro2",
"quote",
@@ -309,6 +308,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
+name = "foldhash"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
+
+[[package]]
name = "form_urlencoded"
version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -318,6 +323,30 @@ dependencies = [
]
[[package]]
+name = "futures-core"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+
+[[package]]
+name = "futures-task"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
+
+[[package]]
+name = "futures-util"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "slab",
+]
+
+[[package]]
name = "getrandom"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -335,52 +364,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
dependencies = [
"cfg-if",
+ "js-sys",
"libc",
"r-efi",
"wasip2",
"wasip3",
+ "wasm-bindgen",
]
[[package]]
name = "hashbrown"
-version = "0.14.5"
+version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
- "ahash",
+ "foldhash 0.1.5",
]
[[package]]
name = "hashbrown"
-version = "0.15.5"
+version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
dependencies = [
- "foldhash",
+ "foldhash 0.2.0",
]
[[package]]
name = "hashbrown"
-version = "0.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"
-
-[[package]]
-name = "hashlink"
-version = "0.9.1"
+version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af"
-dependencies = [
- "hashbrown 0.14.5",
-]
+checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
[[package]]
name = "hashlink"
-version = "0.10.0"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
+checksum = "ea0b22561a9c04a7cb1a302c013e0259cd3b4bb619f145b32f72b8b4bcbed230"
dependencies = [
- "hashbrown 0.15.5",
+ "hashbrown 0.16.1",
]
[[package]]
@@ -520,9 +542,9 @@ dependencies = [
[[package]]
name = "idna_adapter"
-version = "1.2.1"
+version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
+checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"
dependencies = [
"icu_normalizer",
"icu_properties",
@@ -535,7 +557,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
dependencies = [
"equivalent",
- "hashbrown 0.17.0",
+ "hashbrown 0.17.1",
"serde",
"serde_core",
]
@@ -574,10 +596,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "js-sys"
-version = "0.3.95"
+version = "0.3.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca"
+checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11"
dependencies = [
+ "cfg-if",
+ "futures-util",
"once_cell",
"wasm-bindgen",
]
@@ -590,24 +614,24 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "libc"
-version = "0.2.185"
+version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
+checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
[[package]]
name = "libredox"
-version = "0.1.16"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c"
+checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3"
dependencies = [
"libc",
]
[[package]]
name = "libsqlite3-sys"
-version = "0.30.1"
+version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149"
+checksum = "b1f111c8c41e7c61a49cd34e44c7619462967221a6443b0ec299e0ac30cfb9b1"
dependencies = [
"pkg-config",
"vcpkg",
@@ -621,9 +645,9 @@ checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
[[package]]
name = "log"
-version = "0.4.29"
+version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f"
[[package]]
name = "md5"
@@ -633,9 +657,9 @@ checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0"
[[package]]
name = "memchr"
-version = "2.8.0"
+version = "2.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
[[package]]
name = "miniz_oxide"
@@ -681,6 +705,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
+name = "pin-project-lite"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+
+[[package]]
name = "pkg-config"
version = "0.3.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -741,17 +771,28 @@ dependencies = [
]
[[package]]
+name = "rsqlite-vfs"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c51c9ae4df8a7fba42103df5c621fa3c37eccf3a3c650879e90fc48b11cc192c"
+dependencies = [
+ "hashbrown 0.16.1",
+ "thiserror",
+]
+
+[[package]]
name = "rusqlite"
-version = "0.32.1"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e"
+checksum = "a0d2b0146dd9661bf67bb107c0bb2a55064d556eeb3fc314151b957f313bcd4e"
dependencies = [
"bitflags",
"fallible-iterator",
"fallible-streaming-iterator",
- "hashlink 0.9.1",
+ "hashlink",
"libsqlite3-sys",
"smallvec",
+ "sqlite-wasm-rs",
]
[[package]]
@@ -786,6 +827,17 @@ dependencies = [
]
[[package]]
+name = "serde-wasm-bindgen"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
name = "serde_core"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -807,9 +859,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.149"
+version = "1.0.150"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
+checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
dependencies = [
"itoa",
"memchr",
@@ -825,18 +877,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
+name = "shlex"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
+
+[[package]]
name = "simd-adler32"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
[[package]]
+name = "slab"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+
+[[package]]
name = "smallvec"
version = "1.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
[[package]]
+name = "sqlite-wasm-rs"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc3efc0da82635d7e1ced0053bbbfa8c7ab9645d0bf36ceb4f7127bb85315d75"
+dependencies = [
+ "cc",
+ "js-sys",
+ "rsqlite-vfs",
+ "wasm-bindgen",
+]
+
+[[package]]
name = "stable_deref_trait"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -862,15 +938,15 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "strum"
-version = "0.27.2"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf"
+checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd"
[[package]]
name = "strum_macros"
-version = "0.27.2"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
+checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664"
dependencies = [
"heck",
"proc-macro2",
@@ -902,22 +978,28 @@ dependencies = [
[[package]]
name = "taskchampion"
-version = "2.0.3"
+version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b010f5ebe51e88ae490691ed2a43b699e3468c8e3838e244accd8526aca7751b"
+checksum = "82f3be5bd922568eaaa1cbf30d4daf7979723c53465f3b202a88c7746fd0d7b6"
dependencies = [
"anyhow",
+ "async-trait",
"byteorder",
"chrono",
"flate2",
+ "getrandom 0.4.2",
"log",
"rusqlite",
"serde",
+ "serde-wasm-bindgen",
"serde_json",
"strum",
"strum_macros",
"thiserror",
+ "tokio",
"uuid",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
]
[[package]]
@@ -969,6 +1051,27 @@ dependencies = [
]
[[package]]
+name = "tokio"
+version = "1.52.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe"
+dependencies = [
+ "pin-project-lite",
+ "tokio-macros",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
name = "tskm"
version = "0.1.0"
dependencies = [
@@ -982,6 +1085,7 @@ dependencies = [
"serde_json",
"stderrlog",
"taskchampion",
+ "tokio",
"url",
"walkdir",
"yaml-rust2",
@@ -1026,9 +1130,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
-version = "1.23.0"
+version = "1.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9"
+checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7"
dependencies = [
"getrandom 0.4.2",
"js-sys",
@@ -1043,12 +1147,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
-name = "version_check"
-version = "0.9.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
-
-[[package]]
name = "walkdir"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1066,11 +1164,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasip2"
-version = "1.0.2+wasi-0.2.9"
+version = "1.0.3+wasi-0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
+checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
dependencies = [
- "wit-bindgen",
+ "wit-bindgen 0.57.1",
]
[[package]]
@@ -1079,14 +1177,14 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
dependencies = [
- "wit-bindgen",
+ "wit-bindgen 0.51.0",
]
[[package]]
name = "wasm-bindgen"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89"
+checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409"
dependencies = [
"cfg-if",
"once_cell",
@@ -1096,10 +1194,20 @@ dependencies = [
]
[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed"
+checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1107,9 +1215,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904"
+checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -1120,9 +1228,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129"
+checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437"
dependencies = [
"unicode-ident",
]
@@ -1322,6 +1430,12 @@ dependencies = [
]
[[package]]
+name = "wit-bindgen"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
+
+[[package]]
name = "wit-bindgen-core"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1408,13 +1522,13 @@ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
[[package]]
name = "yaml-rust2"
-version = "0.10.4"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2462ea039c445496d8793d052e13787f2b90e750b833afee748e601c17621ed9"
+checksum = "631a50d867fafb7093e709d75aaee9e0e0d5deb934021fcea25ac2fe09edc51e"
dependencies = [
"arraydeque",
"encoding_rs",
- "hashlink 0.10.0",
+ "hashlink",
]
[[package]]
@@ -1441,30 +1555,10 @@ dependencies = [
]
[[package]]
-name = "zerocopy"
-version = "0.8.48"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
-dependencies = [
- "zerocopy-derive",
-]
-
-[[package]]
-name = "zerocopy-derive"
-version = "0.8.48"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
name = "zerofrom"
-version = "0.1.7"
+version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df"
+checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"
dependencies = [
"zerofrom-derive",
]
diff --git a/pkgs/by-name/ts/tskm/Cargo.toml b/pkgs/by-name/ts/tskm/Cargo.toml
index 39bcf089..c934ce19 100644
--- a/pkgs/by-name/ts/tskm/Cargo.toml
+++ b/pkgs/by-name/ts/tskm/Cargo.toml
@@ -17,18 +17,30 @@ edition = "2021"
[dependencies]
anyhow = { version = "1.0.102", default-features = false }
-clap = { version = "4.6.0", features = [ "derive", "std", "color", "help", "usage", "error-context", "suggestions", ], default-features = false }
-clap_complete = { version = "4.6.2", features = ["unstable-dynamic"] }
+clap = { version = "4.6.1", features = [
+ "derive",
+ "std",
+ "color",
+ "help",
+ "usage",
+ "error-context",
+ "suggestions",
+], default-features = false }
+clap_complete = { version = "4.6.5", features = ["unstable-dynamic"] }
dirs = { version = "6.0.0", default-features = false }
-log = { version = "0.4.29", default-features = false }
+log = { version = "0.4.31", default-features = false }
serde = { version = "1.0.228", features = ["derive"], default-features = false }
-serde_json = { version = "1.0.149", default-features = false }
+serde_json = { version = "1.0.150", default-features = false }
stderrlog = { version = "0.6.0", default-features = false }
-taskchampion = { version = "2.0.3", default-features = false }
-url = { version = "2.5.8", features = ["serde", "std"], default-features = false }
+taskchampion = { version = "3.1.0", features =["storage", "storage-sqlite"], default-features = false }
+url = { version = "2.5.8", features = [
+ "serde",
+ "std",
+], default-features = false }
walkdir = { version = "2.5.0", default-features = false }
md5 = { version = "0.8.0", default-features = false }
-yaml-rust2 = "0.10.4"
+yaml-rust2 = "0.11.0"
+tokio = { version = "1.52.3", features = ["rt-multi-thread"] }
[profile.release]
lto = true
diff --git a/pkgs/by-name/ts/tskm/flake.lock b/pkgs/by-name/ts/tskm/flake.lock
deleted file mode 100644
index 9aaa1a94..00000000
--- a/pkgs/by-name/ts/tskm/flake.lock
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "nodes": {
- "nixpkgs": {
- "locked": {
- "lastModified": 1775888245,
- "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "13043924aaa7375ce482ebe2494338e058282925",
- "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/ts/tskm/flake.lock.license b/pkgs/by-name/ts/tskm/flake.lock.license
deleted file mode 100644
index eae6a84c..00000000
--- a/pkgs/by-name/ts/tskm/flake.lock.license
+++ /dev/null
@@ -1,9 +0,0 @@
-nixos-config - My current NixOS configuration
-
-Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-SPDX-License-Identifier: GPL-3.0-or-later
-
-This file is part of my nixos-config.
-
-You should have received a copy of the License along with this program.
-If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/pkgs/by-name/ts/tskm/flake.nix b/pkgs/by-name/ts/tskm/flake.nix
index 6217f942..e4d22c09 100644
--- a/pkgs/by-name/ts/tskm/flake.nix
+++ b/pkgs/by-name/ts/tskm/flake.nix
@@ -11,12 +11,13 @@
description = "This is the core interface to the system-integrated task management";
inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
};
- outputs = {nixpkgs, ...}: let
+ outputs = {...}: let
system = "x86_64-linux";
- pkgs = nixpkgs.legacyPackages."${system}";
+
+ sources = import ../../../../npins/full.nix {};
+ pkgs = (sources.loadFlake "nixpkgs").legacyPackages."${system}";
in {
devShells."${system}".default = pkgs.mkShell {
buildInputs = [
diff --git a/pkgs/by-name/ts/tskm/src/browser/mod.rs b/pkgs/by-name/ts/tskm/src/browser/mod.rs
index 2129982f..fd90b820 100644
--- a/pkgs/by-name/ts/tskm/src/browser/mod.rs
+++ b/pkgs/by-name/ts/tskm/src/browser/mod.rs
@@ -14,7 +14,7 @@ use url::Url;
use crate::{state::State, task};
#[allow(clippy::too_many_lines)]
-pub fn open_in_browser<U>(
+pub async fn open_in_browser<U>(
selected_project: &task::Project,
state: &mut State,
urls: Option<Vec<U>>,
@@ -24,8 +24,9 @@ where
{
let old_project: Option<task::Project> =
task::Project::get_current().context("Failed to get currently active project")?;
- let old_task: Option<task::Task> =
- task::Task::get_current(state).context("Failed to get currently active task")?;
+ let old_task: Option<task::Task> = task::Task::get_current(state)
+ .await
+ .context("Failed to get currently active task")?;
selected_project.activate().with_context(|| {
format!(
@@ -35,25 +36,36 @@ where
})?;
let tracking_task = {
- let all_tasks = selected_project.get_tasks(state).with_context(|| {
+ let all_tasks = selected_project.get_tasks(state).await.with_context(|| {
format!(
"Failed to get assoctiated tasks for project: '{}'",
selected_project.to_project_display()
)
})?;
- let tracking_task = all_tasks.into_iter().find(|t| {
- let maybe_desc = t.description(state);
- if let Ok(desc) = maybe_desc {
- desc == "tracking"
- } else {
- error!(
- "Getting task description returned error: {}",
- maybe_desc.expect_err("We already check for Ok")
- );
- false
+ let tracking_task = {
+ let mut output = None;
+
+ for t in all_tasks {
+ let maybe_desc = t.description(state).await;
+ let found = if let Ok(desc) = maybe_desc {
+ desc == "tracking"
+ } else {
+ error!(
+ "Getting task description returned error: {}",
+ maybe_desc.expect_err("We already check for Ok")
+ );
+ false
+ };
+
+ if found {
+ output = Some(t);
+ break;
+ }
}
- });
+
+ output
+ };
if let Some(task) = tracking_task {
info!(
@@ -61,6 +73,7 @@ where
selected_project.to_project_display()
);
task.start(state)
+ .await
.with_context(|| format!("Failed to start task {task}"))?;
}
tracking_task
@@ -180,10 +193,12 @@ where
if let Some(task) = tracking_task {
task.stop(state)
+ .await
.with_context(|| format!("Failed to stop task {task}"))?;
}
if let Some(task) = old_task {
task.start(state)
+ .await
.with_context(|| format!("Failed to start task {task}"))?;
}
diff --git a/pkgs/by-name/ts/tskm/src/cli.rs b/pkgs/by-name/ts/tskm/src/cli.rs
index 359c1050..3dc1181d 100644
--- a/pkgs/by-name/ts/tskm/src/cli.rs
+++ b/pkgs/by-name/ts/tskm/src/cli.rs
@@ -8,11 +8,12 @@
// You should have received a copy of the License along with this program.
// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-use std::{ffi::OsStr, path::PathBuf};
+use std::{ffi::OsStr, path::PathBuf, thread};
use anyhow::{bail, Result};
use clap::{builder::StyledStr, ArgAction, Parser, Subcommand, ValueEnum};
use clap_complete::{ArgValueCompleter, CompletionCandidate};
+use tokio::runtime::Runtime;
use crate::{
interface::{
@@ -23,6 +24,43 @@ use crate::{
state, task,
};
+macro_rules! as_sync {
+ (
+ wrap $old_name_1:ident($($arg_name_1:ident : $arg_type_1:ty),*) -> $output_1:ty => $new_name_1:ident;
+ $(
+ wrap $old_name:ident($($arg_name:ident : $arg_type:ty),*) -> $output:ty => $new_name:ident;
+ )+
+ ) => {
+ as_sync!(
+ wrap $old_name_1($($arg_name_1 : $arg_type_1),*) -> $output_1 => $new_name_1;
+ );
+ as_sync!(
+ $(
+ wrap $old_name($($arg_name : $arg_type),*) -> $output => $new_name;
+ )+
+ );
+ };
+ (
+ wrap $old_name:ident($($arg_name:ident : $arg_type:ty),*) -> $output:ty => $new_name:ident $(;)?
+ ) => {
+ fn $new_name($($arg_name: $arg_type),*) -> $output {
+ $(
+ let $arg_name = $arg_name.to_owned();
+ ),*
+
+ let handle: std::thread::JoinHandle<$output> = thread::spawn(move || {
+ let rt = Runtime::new().expect("No runtime issue");
+
+ let output = rt.block_on($old_name($($arg_name.as_ref()),*));
+
+ output
+ });
+
+ handle.join().expect("The thread should be joinable")
+ }
+ };
+}
+
#[derive(Parser, Debug)]
#[command(author, version, about, long_about, verbatim_doc_comment)]
/// This is the core interface to the system-integrated task management
@@ -94,16 +132,21 @@ pub enum NeorgCommand {
/// Open the `neorg` project associated with id of the task.
Task {
/// The working set id of the task
- #[arg(value_name = "ID", value_parser = task_from_working_set_id, add = ArgValueCompleter::new(complete_task_id))]
+ #[arg(value_name = "ID", value_parser = task_from_working_set_id_sync, add = ArgValueCompleter::new(complete_task_id_sync))]
task: task::Task,
},
}
-fn task_from_working_set_id(id: &str) -> Result<task::Task> {
+as_sync!(
+ wrap task_from_working_set_id(id: &str) -> Result<task::Task> => task_from_working_set_id_sync;
+ wrap complete_task_id(current: &OsStr) -> Vec<CompletionCandidate> => complete_task_id_sync;
+);
+
+async fn task_from_working_set_id(id: &str) -> Result<task::Task> {
let id: usize = id.parse()?;
- let mut state = state::State::new_ro()?;
+ let mut state = state::State::new_ro().await?;
- let Some(task) = task::Task::from_working_set(id, &mut state)? else {
+ let Some(task) = task::Task::from_working_set(id, &mut state).await? else {
bail!("Working set id '{id}' is not valid!")
};
Ok(task)
@@ -201,14 +244,14 @@ pub enum InputCommand {
Tags {},
}
-fn complete_task_id(current: &OsStr) -> Vec<CompletionCandidate> {
- fn format_task(
+async fn complete_task_id(current: &OsStr) -> Vec<CompletionCandidate> {
+ async fn format_task(
task: task::Task,
current: &str,
state: &mut state::State,
) -> Option<CompletionCandidate> {
let id = {
- let Ok(base) = task.working_set_id(state) else {
+ let Ok(base) = task.working_set_id(state).await else {
return None;
};
base.to_string()
@@ -219,7 +262,7 @@ fn complete_task_id(current: &OsStr) -> Vec<CompletionCandidate> {
}
let description = {
- let Ok(base) = task.description(state) else {
+ let Ok(base) = task.description(state).await else {
return None;
};
StyledStr::from(base)
@@ -234,11 +277,11 @@ fn complete_task_id(current: &OsStr) -> Vec<CompletionCandidate> {
return output;
};
- let Ok(mut state) = state::State::new_ro() else {
+ let Ok(mut state) = state::State::new_ro().await else {
return output;
};
- let Ok(pending) = state.replica().pending_tasks() else {
+ let Ok(pending) = state.replica().pending_tasks().await else {
return output;
};
@@ -249,9 +292,9 @@ fn complete_task_id(current: &OsStr) -> Vec<CompletionCandidate> {
if let Some(current_project) = current_project {
for t in pending {
let task = task::Task::from(&t);
- if let Ok(project) = task.project(&mut state) {
+ if let Ok(project) = task.project(&mut state).await {
if project == current_project {
- if let Some(out) = format_task(task, current, &mut state) {
+ if let Some(out) = format_task(task, current, &mut state).await {
output.push(out);
}
}
@@ -260,7 +303,7 @@ fn complete_task_id(current: &OsStr) -> Vec<CompletionCandidate> {
} else {
for t in pending {
let task = task::Task::from(&t);
- if let Some(out) = format_task(task, current, &mut state) {
+ if let Some(out) = format_task(task, current, &mut state).await {
output.push(out);
}
}
diff --git a/pkgs/by-name/ts/tskm/src/interface/input/handle.rs b/pkgs/by-name/ts/tskm/src/interface/input/handle.rs
index f9772f34..cd868f7a 100644
--- a/pkgs/by-name/ts/tskm/src/interface/input/handle.rs
+++ b/pkgs/by-name/ts/tskm/src/interface/input/handle.rs
@@ -28,7 +28,7 @@ use super::{Input, Tag};
/// # Panics
/// When internal assertions fail.
#[allow(clippy::too_many_lines)]
-pub fn handle(command: InputCommand, state: &mut State) -> Result<()> {
+pub async fn handle(command: InputCommand, state: &mut State) -> Result<()> {
match command {
InputCommand::Add { inputs } => {
for input in inputs {
@@ -79,7 +79,8 @@ pub fn handle(command: InputCommand, state: &mut State) -> Result<()> {
&project,
state,
Some(all.iter().map(|f| f.url.clone()).collect()),
- )?;
+ )
+ .await?;
{
use std::io::{stdin, stdout, Write};
diff --git a/pkgs/by-name/ts/tskm/src/interface/input/mod.rs b/pkgs/by-name/ts/tskm/src/interface/input/mod.rs
index 1d1d67f4..b6176a96 100644
--- a/pkgs/by-name/ts/tskm/src/interface/input/mod.rs
+++ b/pkgs/by-name/ts/tskm/src/interface/input/mod.rs
@@ -18,7 +18,7 @@ use std::{
str::FromStr,
};
-use anyhow::{bail, Context, Result};
+use anyhow::{Context, Result, bail};
use url::Url;
use walkdir::WalkDir;
diff --git a/pkgs/by-name/ts/tskm/src/interface/neorg/handle.rs b/pkgs/by-name/ts/tskm/src/interface/neorg/handle.rs
index ea3a89ae..12a0180d 100644
--- a/pkgs/by-name/ts/tskm/src/interface/neorg/handle.rs
+++ b/pkgs/by-name/ts/tskm/src/interface/neorg/handle.rs
@@ -19,10 +19,10 @@ use anyhow::{bail, Context, Result};
use crate::{cli::NeorgCommand, state::State};
-pub fn handle(command: NeorgCommand, state: &mut State) -> Result<()> {
+pub async fn handle(command: NeorgCommand, state: &mut State) -> Result<()> {
match command {
NeorgCommand::Task { task } => {
- let project = task.project(state)?;
+ let project = task.project(state).await?;
let base = dirs::data_local_dir()
.expect("This should exists")
.join("tskm/notes");
@@ -46,7 +46,8 @@ pub fn handle(command: NeorgCommand, state: &mut State) -> Result<()> {
let mut file = options.open(&path)?;
file.write_all(
- format!("* {} (% {})", task.description(state)?, task.uuid()).as_bytes(),
+ format!("* {} (% {})", task.description(state).await?, task.uuid())
+ .as_bytes(),
)
.with_context(|| {
format!("Failed to write task uuid to file: '{}'", path.display())
@@ -92,7 +93,7 @@ pub fn handle(command: NeorgCommand, state: &mut State) -> Result<()> {
}
{
- task.mark_neorg_data(state)?;
+ task.mark_neorg_data(state).await?;
}
}
}
diff --git a/pkgs/by-name/ts/tskm/src/interface/open/handle.rs b/pkgs/by-name/ts/tskm/src/interface/open/handle.rs
index 3897a63b..5b9100bc 100644
--- a/pkgs/by-name/ts/tskm/src/interface/open/handle.rs
+++ b/pkgs/by-name/ts/tskm/src/interface/open/handle.rs
@@ -31,7 +31,7 @@ fn is_empty(project: &task::Project) -> Result<bool> {
}
#[allow(clippy::too_many_lines)]
-pub fn handle(command: OpenCommand, state: &mut State) -> Result<()> {
+pub async fn handle(command: OpenCommand, state: &mut State) -> Result<()> {
match command {
OpenCommand::Review { non_empty } => {
for project in task::Project::all().context("Failed to get all project files")? {
@@ -43,12 +43,14 @@ pub fn handle(command: OpenCommand, state: &mut State) -> Result<()> {
project.to_project_display(),
if is_empty { "is empty" } else { "is not empty" }
);
- open_in_browser(project, state, None::<Vec<Url>>).with_context(|| {
- format!(
- "Failed to open project ('{}') in qutebrowser",
- project.to_project_display()
- )
- })?;
+ open_in_browser(project, state, None::<Vec<Url>>)
+ .await
+ .with_context(|| {
+ format!(
+ "Failed to open project ('{}') in qutebrowser",
+ project.to_project_display()
+ )
+ })?;
if project.is_touched() {
project.untouch().with_context(|| {
@@ -63,9 +65,11 @@ pub fn handle(command: OpenCommand, state: &mut State) -> Result<()> {
}
OpenCommand::Project { project, urls } => {
project.touch().context("Failed to touch project")?;
- open_in_browser(&project, state, urls).with_context(|| {
- format!("Failed to open project: {}", project.to_project_display())
- })?;
+ open_in_browser(&project, state, urls)
+ .await
+ .with_context(|| {
+ format!("Failed to open project: {}", project.to_project_display())
+ })?;
}
OpenCommand::Select { urls } => {
let selected_project: task::Project = task::Project::from_project_string(
@@ -85,7 +89,9 @@ pub fn handle(command: OpenCommand, state: &mut State) -> Result<()> {
.touch()
.context("Failed to touch project")?;
- open_in_browser(&selected_project, state, urls).context("Failed to open project")?;
+ open_in_browser(&selected_project, state, urls)
+ .await
+ .context("Failed to open project")?;
}
OpenCommand::ListTabs { projects, mode } => {
let projects = {
diff --git a/pkgs/by-name/ts/tskm/src/interface/open/mod.rs b/pkgs/by-name/ts/tskm/src/interface/open/mod.rs
index e403b4a8..407536d2 100644
--- a/pkgs/by-name/ts/tskm/src/interface/open/mod.rs
+++ b/pkgs/by-name/ts/tskm/src/interface/open/mod.rs
@@ -14,7 +14,7 @@ use std::{
str::FromStr,
};
-use anyhow::{anyhow, Context, Result};
+use anyhow::{Context, Result, anyhow};
use taskchampion::chrono::NaiveDateTime;
use url::Url;
use yaml_rust2::Yaml;
diff --git a/pkgs/by-name/ts/tskm/src/main.rs b/pkgs/by-name/ts/tskm/src/main.rs
index e6113111..a852bd7b 100644
--- a/pkgs/by-name/ts/tskm/src/main.rs
+++ b/pkgs/by-name/ts/tskm/src/main.rs
@@ -24,7 +24,8 @@ pub mod rofi;
pub mod state;
pub mod task;
-fn main() -> Result<(), anyhow::Error> {
+#[tokio::main]
+async fn main() -> Result<(), anyhow::Error> {
clap_complete::CompleteEnv::with_factory(CliArgs::command).complete();
let args = CliArgs::parse();
@@ -38,12 +39,12 @@ fn main() -> Result<(), anyhow::Error> {
.init()
.expect("Let's just hope that this does not panic");
- let mut state = State::new_rw()?;
+ let mut state = State::new_rw().await?;
match args.command {
- Command::Inputs { command } => input::handle(command, &mut state)?,
- Command::Neorg { command } => neorg::handle(command, &mut state)?,
- Command::Open { command } => open::handle(command, &mut state)?,
+ Command::Inputs { command } => input::handle(command, &mut state).await?,
+ Command::Neorg { command } => neorg::handle(command, &mut state).await?,
+ Command::Open { command } => open::handle(command, &mut state).await?,
Command::Projects { command } => project::handle(command)?,
}
diff --git a/pkgs/by-name/ts/tskm/src/state.rs b/pkgs/by-name/ts/tskm/src/state.rs
index ae71764e..57495bb8 100644
--- a/pkgs/by-name/ts/tskm/src/state.rs
+++ b/pkgs/by-name/ts/tskm/src/state.rs
@@ -11,10 +11,13 @@
use std::path::PathBuf;
use anyhow::Result;
-use taskchampion::{Replica, StorageConfig, storage::AccessMode};
+use taskchampion::{
+ storage::{sqlite::SqliteStorage, AccessMode},
+ Replica,
+};
pub struct State {
- replica: Replica,
+ replica: Replica<SqliteStorage>,
}
impl std::fmt::Debug for State {
@@ -28,28 +31,23 @@ impl State {
dirs::data_local_dir().expect("Should exist").join("task")
}
- fn new(taskdb_dir: PathBuf, access_mode: AccessMode) -> Result<Self> {
- let storage = StorageConfig::OnDisk {
- taskdb_dir,
- create_if_missing: false,
- access_mode,
- }
- .into_storage()?;
+ async fn new(taskdb_dir: PathBuf, access_mode: AccessMode) -> Result<Self> {
+ let storage = SqliteStorage::new(taskdb_dir, access_mode, false).await?;
let replica = Replica::new(storage);
Ok(Self { replica })
}
- pub fn new_ro() -> Result<Self> {
- Self::new(Self::taskdb_dir(), AccessMode::ReadOnly)
+ pub async fn new_ro() -> Result<Self> {
+ Self::new(Self::taskdb_dir(), AccessMode::ReadOnly).await
}
- pub fn new_rw() -> Result<Self> {
- Self::new(Self::taskdb_dir(), AccessMode::ReadWrite)
+ pub async fn new_rw() -> Result<Self> {
+ Self::new(Self::taskdb_dir(), AccessMode::ReadWrite).await
}
#[must_use]
- pub fn replica(&mut self) -> &mut Replica {
+ pub fn replica(&mut self) -> &mut Replica<SqliteStorage> {
&mut self.replica
}
}
diff --git a/pkgs/by-name/ts/tskm/src/task/mod.rs b/pkgs/by-name/ts/tskm/src/task/mod.rs
index 9c671273..1362615d 100644
--- a/pkgs/by-name/ts/tskm/src/task/mod.rs
+++ b/pkgs/by-name/ts/tskm/src/task/mod.rs
@@ -45,18 +45,20 @@ impl From<&taskchampion::TaskData> for Task {
}
impl Task {
- pub fn from_working_set(id: usize, state: &mut State) -> Result<Option<Self>> {
+ pub async fn from_working_set(id: usize, state: &mut State) -> Result<Option<Self>> {
Ok(state
.replica()
- .working_set()?
+ .working_set()
+ .await?
.by_index(id)
.map(|uuid| Self { uuid }))
}
- pub fn get_current(state: &mut State) -> Result<Option<Self>> {
+ pub async fn get_current(state: &mut State) -> Result<Option<Self>> {
let tasks = state
.replica()
- .pending_tasks()?
+ .pending_tasks()
+ .await?
.into_iter()
.filter(taskchampion::Task::is_active)
.collect::<Vec<_>>();
@@ -76,62 +78,65 @@ impl Task {
pub fn uuid(&self) -> &taskchampion::Uuid {
&self.uuid
}
- pub fn working_set_id(&self, state: &mut State) -> Result<usize> {
+ pub async fn working_set_id(&self, state: &mut State) -> Result<usize> {
Ok(state
.replica()
- .working_set()?
+ .working_set()
+ .await?
.by_uuid(self.uuid)
.expect("The task should be in the working set"))
}
- fn as_task(&self, state: &mut State) -> Result<taskchampion::Task> {
+ async fn as_task(&self, state: &mut State) -> Result<taskchampion::Task> {
Ok(state
.replica()
- .get_task(self.uuid)?
+ .get_task(self.uuid)
+ .await?
.expect("We have the task from this replica, it should still be in it"))
}
/// Adds a tag to the task, to show the user that it has additional neorg data.
- pub fn mark_neorg_data(&self, state: &mut State) -> Result<()> {
+ pub async fn mark_neorg_data(&self, state: &mut State) -> Result<()> {
let mut ops = vec![];
- self.as_task(state)?
+ self.as_task(state)
+ .await?
.add_tag(&Tag::from_str("neorg_data").expect("Is valid"), &mut ops)?;
- state.replica().commit_operations(ops)?;
+ state.replica().commit_operations(ops).await?;
Ok(())
}
/// Try to start this task.
/// It will stop previously active tasks.
- pub fn start(&self, state: &mut State) -> Result<()> {
+ pub async fn start(&self, state: &mut State) -> Result<()> {
info!("Activating {self}");
- if let Some(active) = Self::get_current(state)? {
- active.stop(state)?;
+ if let Some(active) = Self::get_current(state).await? {
+ active.stop(state).await?;
}
let mut ops = vec![];
- self.as_task(state)?.start(&mut ops)?;
- state.replica().commit_operations(ops)?;
+ self.as_task(state).await?.start(&mut ops)?;
+ state.replica().commit_operations(ops).await?;
Ok(())
}
/// Stops this task.
- pub fn stop(&self, state: &mut State) -> Result<()> {
+ pub async fn stop(&self, state: &mut State) -> Result<()> {
info!("Stopping {self}");
let mut ops = vec![];
- self.as_task(state)?.stop(&mut ops)?;
- state.replica().commit_operations(ops)?;
+ self.as_task(state).await?.stop(&mut ops)?;
+ state.replica().commit_operations(ops).await?;
Ok(())
}
- pub fn description(&self, state: &mut State) -> Result<String> {
- Ok(self.as_task(state)?.get_description().to_owned())
+ pub async fn description(&self, state: &mut State) -> Result<String> {
+ Ok(self.as_task(state).await?.get_description().to_owned())
}
- pub fn project(&self, state: &mut State) -> Result<Project> {
+ pub async fn project(&self, state: &mut State) -> Result<Project> {
let output = {
- let task = self.as_task(state)?;
+ let task = self.as_task(state).await?;
let task_data = task.into_task_data();
task_data
.get("project")
@@ -303,10 +308,11 @@ impl Project {
/// # Errors
/// When `task` execution fails.
- pub fn get_tasks(&self, state: &mut State) -> Result<Vec<Task>> {
+ pub async fn get_tasks(&self, state: &mut State) -> Result<Vec<Task>> {
Ok(state
.replica()
- .pending_task_data()?
+ .pending_task_data()
+ .await?
.into_iter()
.filter(|t| t.get("project").expect("Is set") == self.to_project_display())
.map(|t| Task::from(&t))
diff --git a/pkgs/by-name/ts/tskm/update.sh b/pkgs/by-name/ts/tskm/update.sh
index 8e36e13e..5ad524e8 100755
--- a/pkgs/by-name/ts/tskm/update.sh
+++ b/pkgs/by-name/ts/tskm/update.sh
@@ -10,5 +10,5 @@
# You should have received a copy of the License along with this program.
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-[ "$1" = "upgrade" ] && cargo upgrade
-cargo update
+[ "$1" = "upgrade" ] && cargo upgrade --incompatible allow --pinned allow --recursive true
+cargo update --recursive
diff --git a/pkgs/by-name/yt/yt/package.nix b/pkgs/by-name/yt/yt/package.nix
index 4e1b2ecb..41234e19 100644
--- a/pkgs/by-name/yt/yt/package.nix
+++ b/pkgs/by-name/yt/yt/package.nix
@@ -34,6 +34,8 @@
}: let
version = "1.9.0";
python = python3.withPackages (ps: [ps.yt-dlp]);
+
+ mpv = mpv-unwrapped.override {ffmpeg = ffmpeg-headless;};
in
rustPlatform.buildRustPackage (finalAttrs: {
inherit version;
@@ -48,7 +50,7 @@ in
cargoHash = "sha256-U0alYK9mhz6esVf0mad9o7Ra6tRaL9HKCOftyOg34HE=";
buildInputs = [
- mpv-unwrapped.dev
+ mpv.dev
ffmpeg-headless
openssl
libffi
diff --git a/pkgs/update_pkgs.sh b/pkgs/update_pkgs.sh
index d036142e..17f97a35 100755
--- a/pkgs/update_pkgs.sh
+++ b/pkgs/update_pkgs.sh
@@ -40,8 +40,6 @@ fd . --type directory --max-depth 1 | while read -r shard; do
if [ -x update.sh ]; then
printf " \033[34;1m> \033[0m\033[34;1m%s\033[0m\n" "Running '${shard}${package}update.sh' .."
- [ -f flake.nix ] && nix flake update
-
direnv allow
eval "$(direnv export bash 2>/dev/null)"
./update.sh "$@"
diff --git a/scripts/npins_to_unflake.jq b/scripts/npins_to_unflake.jq
new file mode 100644
index 00000000..80e6b5a3
--- /dev/null
+++ b/scripts/npins_to_unflake.jq
@@ -0,0 +1,34 @@
+def make_url(value):
+ value.repository as $repo |
+ if value.type == "Git" then
+ if $repo.type == "Git" then
+ "git+\($repo.url)?ref=\(value.branch)"
+ elif $repo.type == "GitHub" then
+ "github:\($repo.owner)/\($repo.repo)/\(value.branch)"
+ elif $repo.type == "Forgejo" then
+ "git+\($repo.server)/\($repo.owner)/\($repo.repo)?ref=\(value.branch)"
+ else
+ error("Invalid repository type: '\($repo.type)'")
+ end
+ elif value.type == "GitRelease" then
+ if $repo.type == "GitHub" then
+ "github:\($repo.owner)/\($repo.repo)/\(value.version)"
+ else
+ error("Invalid repository type: '\($repo.type)'")
+ end
+ elif value.type == "Channel" then
+ empty
+ else
+ error("Invalid value type: '\(value.type)'")
+ end
+ ;
+
+"{
+\(
+ .pins | to_entries | map(
+ " \"\(.key)\" = {
+ url = \"\(make_url(.value))\";
+ };"
+ ) | join("\n")
+ )
+}"
diff --git a/scripts/unflake.sh b/scripts/unflake.sh
new file mode 100755
index 00000000..e4aa816d
--- /dev/null
+++ b/scripts/unflake.sh
@@ -0,0 +1,6 @@
+#! /usr/bin/env sh
+
+NIX_CONFIG="pure-eval = false" nix run -f https://codeberg.org/goldstein/unflake/archive/main.tar.gz unflake -- "$@"
+
+
+# vim: ft=sh
diff --git a/scripts/why-depends b/scripts/why-depends
index 1afe9150..ae1ac6f7 100755
--- a/scripts/why-depends
+++ b/scripts/why-depends
@@ -1,23 +1,56 @@
#! /usr/bin/env sh
-search_string="$1-"
-shift 1
+main() {
+ use_running="$1"
+ host="$2"
+ package="$3"
-if [ "$1" != "" ]; then
- # Add the version
- search_string="${search_string}${1}$"
- shift 1
-fi
+ if [ "$use_running" = "true" ]; then
+ base="/run/current-system"
+ else
+ base=".#nixosConfigurations.$host.config.system.build.toplevel"
+ fi
+
+ fd "[a-zA-Z0-9]{32}-$package" /nix/store --type directory --threads 1 --exec nix --option warn-dirty false why-depends "$base"
+}
+
+running=false
+host="$(hostname)"
+packages=""
+direct_packages=""
+
+while [ "$#" -ne 0 ]; do
+ case "$1" in
+ "--running")
+ running=true
+ ;;
+ "--host")
+ shift 1
+ host="$1"
+ ;;
+ "--direct")
+ shift 1
+ direct_packages="$direct_packages $1"
+ ;;
+ *)
+ # Treat everything else as a package to check
+ packages="$packages $1"
+ ;;
+ esac
-if [ "$1" = "--running" ]; then
shift 1
- base="/run/current-system"
-else
- host="$(hostname)"
- base=".#nixosConfigurations.$host.config.system.build.toplevel"
-fi
+done
+if [ -n "$packages" ]; then
+ for package in $packages; do
+ main "$running" "$host" "$package-"
+ done
+fi
-fd "$search_string" /nix/store --type directory --threads 1 --exec nix why-depends "$@" "$base"
+if [ -n "$direct_packages" ]; then
+ for package in $direct_packages; do
+ main "$running" "$host" "$package-[0-9]"
+ done
+fi
# vim: ft=sh
diff --git a/unflake.nix b/unflake.nix
new file mode 100644
index 00000000..b095e8cd
--- /dev/null
+++ b/unflake.nix
@@ -0,0 +1,193 @@
+# @generated by https://codeberg.org/goldstein/unflake
+let
+ indirect_deps = {
+ unflake_indirect_nixpkgs = builtins.getFlake "flake:nixpkgs";
+ };
+ specs = {};
+ deps = indirect_deps // builtins.mapAttrs (_: v:
+ if builtins.typeOf v.outPath == "set" then
+ v.outPath
+ else if v?revision then
+ { outPath = v.outPath; rev = v.revision; }
+ else
+ { outPath = v.outPath; }
+ ) (import ./npins/default.nix);
+ injections = rec {
+ unflake_indirect_nixpkgs = {
+ };
+ unflake_github_cachix_pre-commit-hooks-nix = {
+ flake-compat = "unflake_github_nixos_flake-compat_flake_false";
+ gitignore = "unflake_github_hercules-ci_gitignore-nix";
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ };
+ unflake_github_hercules-ci_flake-parts = {
+ nixpkgs-lib = "unflake_github_nix-community_nixpkgs-lib";
+ };
+ unflake_github_hercules-ci_gitignore-nix = {
+ nixpkgs = "unflake_indirect_nixpkgs";
+ };
+ unflake_github_ipetkov_crane = {
+ };
+ unflake_github_lnl7_nix-darwin_ref_master = {
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ };
+ unflake_github_nix-community_nix-index-database_ref_main = {
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixos-unstable";
+ };
+ unflake_github_nix-community_nixvim_ref_main = {
+ flake-parts = "unflake_github_hercules-ci_flake-parts";
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ systems = "unflake_github_nix-systems_default_ref_future-26-11";
+ };
+ unflake_github_nix-community_disko_ref_master = {
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ };
+ unflake_github_nix-community_home-manager_ref_master = {
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ };
+ unflake_github_nix-community_impermanence_ref_master = {
+ home-manager = "unflake_github_nix-community_home-manager";
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixos-unstable";
+ };
+ unflake_github_nix-community_nixos-generators_ref_master = {
+ nixlib = "unflake_github_nix-community_nixpkgs-lib";
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ };
+ unflake_github_nix-community_lanzaboote_ref_v1-0-0 = {
+ crane = "unflake_github_ipetkov_crane";
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixos-unstable";
+ pre-commit = "unflake_github_cachix_pre-commit-hooks-nix";
+ rust-overlay = "unflake_github_oxalica_rust-overlay";
+ };
+ unflake_github_nix-community_home-manager = {
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ };
+ unflake_github_nix-community_nixpkgs-lib = {
+ };
+ unflake_github_nix-systems_default_ref_future-26-11 = {
+ };
+ unflake_github_nix-systems_default = {
+ };
+ unflake_github_nix-systems_x86_64-linux = {
+ };
+ unflake_github_nixos_nixpkgs_ref_nixos-25-05 = {
+ };
+ unflake_github_nixos_nixpkgs_ref_nixos-26-05 = {
+ };
+ unflake_github_nixos_nixpkgs_ref_nixos-unstable = {
+ };
+ unflake_github_nixos_nixpkgs_ref_nixos-unstable-small = {
+ };
+ unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable = {
+ };
+ unflake_github_numtide_treefmt-nix_ref_main = {
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ };
+ unflake_github_numtide_flake-utils = {
+ systems = "unflake_github_nix-systems_default";
+ };
+ unflake_github_numtide_treefmt-nix = {
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ };
+ unflake_github_oxalica_rust-overlay = {
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ };
+ unflake_github_ryantm_agenix_ref_main = {
+ darwin = "unflake_github_lnl7_nix-darwin_ref_master";
+ home-manager = "unflake_github_nix-community_home-manager";
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixos-25-05";
+ systems = "unflake_github_nix-systems_default";
+ };
+ unflake_git_https---git-lix-systems-lix-project-flake-compat_ref_main = {
+ };
+ unflake_git_https---codeberg-org-bpeetz-flake-templates_ref_prime = {
+ flake-utils = "unflake_github_numtide_flake-utils";
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ systems = "unflake_github_nix-systems_x86_64-linux";
+ treefmt-nix = "unflake_github_numtide_treefmt-nix";
+ };
+ unflake_git_https---git-foss-syndicate-org-bpeetz-qmk_layout_ref_prime = {
+ flake-utils = "unflake_github_numtide_flake-utils";
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ systems = "unflake_github_nix-systems_x86_64-linux";
+ treefmt-nix = "unflake_github_numtide_treefmt-nix";
+ };
+ unflake_git_https---git-foss-syndicate-org-vhack-eu-nix-library_ref_prime = {
+ };
+ };
+ inject = name: flake_path: subdir:
+ let
+ inputs = builtins.mapAttrs (_: dep: universe.${dep}) injections.${name} // {
+ inherit self;
+ };
+ sourceInfo = deps.${name};
+ outPath = "${sourceInfo.outPath}${subdir}";
+ outputs = (import "${sourceInfo.outPath}/${flake_path}").outputs inputs;
+ self = outputs // sourceInfo // {
+ inherit inputs outputs outPath sourceInfo;
+ _type = "flake";
+ _flake = true;
+ };
+ in self;
+ universe = rec {
+ unflake_indirect_nixpkgs = inject "unflake_indirect_nixpkgs" "flake.nix" "";
+ unflake_github_cachix_pre-commit-hooks-nix = inject "unflake_github_cachix_pre-commit-hooks-nix" "flake.nix" "";
+ unflake_github_hercules-ci_flake-parts = inject "unflake_github_hercules-ci_flake-parts" "flake.nix" "";
+ unflake_github_hercules-ci_gitignore-nix = inject "unflake_github_hercules-ci_gitignore-nix" "flake.nix" "";
+ unflake_github_ipetkov_crane = inject "unflake_github_ipetkov_crane" "flake.nix" "";
+ unflake_github_lnl7_nix-darwin_ref_master = inject "unflake_github_lnl7_nix-darwin_ref_master" "flake.nix" "";
+ unflake_github_nix-community_nix-index-database_ref_main = inject "unflake_github_nix-community_nix-index-database_ref_main" "flake.nix" "";
+ unflake_github_nix-community_nixvim_ref_main = inject "unflake_github_nix-community_nixvim_ref_main" "flake.nix" "";
+ unflake_github_nix-community_disko_ref_master = inject "unflake_github_nix-community_disko_ref_master" "flake.nix" "";
+ unflake_github_nix-community_home-manager_ref_master = inject "unflake_github_nix-community_home-manager_ref_master" "flake.nix" "";
+ unflake_github_nix-community_impermanence_ref_master = inject "unflake_github_nix-community_impermanence_ref_master" "flake.nix" "";
+ unflake_github_nix-community_nixos-generators_ref_master = inject "unflake_github_nix-community_nixos-generators_ref_master" "flake.nix" "";
+ unflake_github_nix-community_lanzaboote_ref_v1-0-0 = inject "unflake_github_nix-community_lanzaboote_ref_v1-0-0" "flake.nix" "";
+ unflake_github_nix-community_home-manager = inject "unflake_github_nix-community_home-manager" "flake.nix" "";
+ unflake_github_nix-community_nixpkgs-lib = inject "unflake_github_nix-community_nixpkgs-lib" "flake.nix" "";
+ unflake_github_nix-systems_default_ref_future-26-11 = inject "unflake_github_nix-systems_default_ref_future-26-11" "flake.nix" "";
+ unflake_github_nix-systems_default = inject "unflake_github_nix-systems_default" "flake.nix" "";
+ unflake_github_nix-systems_x86_64-linux = inject "unflake_github_nix-systems_x86_64-linux" "flake.nix" "";
+ unflake_github_nixos_nixpkgs_ref_nixos-25-05 = inject "unflake_github_nixos_nixpkgs_ref_nixos-25-05" "flake.nix" "";
+ unflake_github_nixos_nixpkgs_ref_nixos-26-05 = inject "unflake_github_nixos_nixpkgs_ref_nixos-26-05" "flake.nix" "";
+ unflake_github_nixos_nixpkgs_ref_nixos-unstable = inject "unflake_github_nixos_nixpkgs_ref_nixos-unstable" "flake.nix" "";
+ unflake_github_nixos_nixpkgs_ref_nixos-unstable-small = inject "unflake_github_nixos_nixpkgs_ref_nixos-unstable-small" "flake.nix" "";
+ unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable = inject "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable" "flake.nix" "";
+ unflake_github_nixos_flake-compat_flake_false = deps.unflake_github_nixos_flake-compat_flake_false;
+ unflake_github_numtide_treefmt-nix_ref_main = inject "unflake_github_numtide_treefmt-nix_ref_main" "flake.nix" "";
+ unflake_github_numtide_flake-utils = inject "unflake_github_numtide_flake-utils" "flake.nix" "";
+ unflake_github_numtide_treefmt-nix = inject "unflake_github_numtide_treefmt-nix" "flake.nix" "";
+ unflake_github_oxalica_rust-overlay = inject "unflake_github_oxalica_rust-overlay" "flake.nix" "";
+ unflake_github_ryantm_agenix_ref_main = inject "unflake_github_ryantm_agenix_ref_main" "flake.nix" "";
+ unflake_git_https---git-lix-systems-lix-project-flake-compat_ref_main = inject "unflake_git_https---git-lix-systems-lix-project-flake-compat_ref_main" "flake.nix" "";
+ unflake_git_https---codeberg-org-bpeetz-flake-templates_ref_prime = inject "unflake_git_https---codeberg-org-bpeetz-flake-templates_ref_prime" "flake.nix" "";
+ unflake_git_https---git-foss-syndicate-org-bpeetz-qmk_layout_ref_prime = inject "unflake_git_https---git-foss-syndicate-org-bpeetz-qmk_layout_ref_prime" "flake.nix" "";
+ unflake_git_https---git-foss-syndicate-org-vhack-eu-nix-library_ref_prime = inject "unflake_git_https---git-foss-syndicate-org-vhack-eu-nix-library_ref_prime" "flake.nix" "";
+ };
+ inputs = {
+ agenix = universe.unflake_github_ryantm_agenix_ref_main;
+ disko = universe.unflake_github_nix-community_disko_ref_master;
+ flake-compat = universe.unflake_git_https---git-lix-systems-lix-project-flake-compat_ref_main;
+ home-manager = universe.unflake_github_nix-community_home-manager_ref_master;
+ impermanence = universe.unflake_github_nix-community_impermanence_ref_master;
+ lanzaboote = universe.unflake_github_nix-community_lanzaboote_ref_v1-0-0;
+ library = universe.unflake_git_https---git-foss-syndicate-org-vhack-eu-nix-library_ref_prime;
+ nix-index-database = universe.unflake_github_nix-community_nix-index-database_ref_main;
+ nixos-generators = universe.unflake_github_nix-community_nixos-generators_ref_master;
+ nixpkgs = universe.unflake_github_nixos_nixpkgs_ref_nixos-unstable-small;
+ nixpkgs-stable = universe.unflake_github_nixos_nixpkgs_ref_nixos-26-05;
+ nixvim = universe.unflake_github_nix-community_nixvim_ref_main;
+ qmk_firmware = universe.unflake_git_https---git-foss-syndicate-org-bpeetz-qmk_layout_ref_prime;
+ templates = universe.unflake_git_https---codeberg-org-bpeetz-flake-templates_ref_prime;
+ treefmt-nix = universe.unflake_github_numtide_treefmt-nix_ref_main;
+ };
+in inputs // {
+ withInputs = fn: let outputs = fn (inputs // { inherit self; }); self = outputs // {
+ inherit inputs outputs;
+ _type = "flake";
+ outPath = builtins.toString ./.;
+ }; in self;
+ __functor = self: self.withInputs;
+ self = throw "to use inputs.self, write `import ./unflake.nix (inputs: ...)`";
+ _unflake = { inherit specs deps injections; };
+}
diff --git a/update.sh b/update.sh
index 980df783..7f583808 100755
--- a/update.sh
+++ b/update.sh
@@ -16,12 +16,16 @@ __update_sh_run() {
printf "\033[35;1m> \033[0m\033[35;1m%s\033[0m\n" "Running '$(basename "$__update_sh_command") $*' .."
- "$__update_sh_command" "$@"
+ if ! "$__update_sh_command" "$@"; then
+ printf "ERROR: Command failed ('%s')\n" "$__update_sh_command"
+ exit 1
+ fi
unset __update_sh_command
}
-__update_sh_run nix flake update
+__update_sh_run unflake.sh --backend=npins
+__update_sh_run npins update
__update_sh_run ./pkgs/update_pkgs.sh "$@"
# __update_sh_run nix flake check