aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--flake.nix2
-rw-r--r--flake/default.nix1
-rw-r--r--hosts/by-name/apzu/hardware.nix11
-rw-r--r--inputs.nix56
-rw-r--r--modules/by-name/at/atuin/module.nix45
-rw-r--r--modules/by-name/at/atuin/secrets/encryption_key.age27
-rw-r--r--modules/by-name/at/atuin/secrets/user_id.age14
-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.nix291
-rw-r--r--modules/by-name/ca/cargo/module.nix3
-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.nix71
-rw-r--r--modules/by-name/fo/foot/theme.ini40
-rw-r--r--modules/by-name/gi/git/module.nix9
-rw-r--r--modules/by-name/i3/i3bar-river/module.nix21
-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.nix17
-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.nix4
-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.nix121
-rw-r--r--modules/by-name/lf/lf/module.nix31
-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/lu/lutris/module.nix39
-rw-r--r--modules/by-name/ly/ly/module.nix26
-rw-r--r--modules/by-name/ly/ly/setup.sh47
-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.nix82
-rw-r--r--modules/by-name/ni/nixpkgs/module.nix12
-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/nv/nvim/plgs/nvim-cmp/default.nix6
-rw-r--r--modules/by-name/qu/qutebrowser/include/redirects.py2
-rw-r--r--modules/by-name/qu/qutebrowser/settings/default.nix4
-rw-r--r--modules/by-name/ri/river/keymap.nix11
-rw-r--r--modules/by-name/ri/river/module.nix51
-rw-r--r--modules/by-name/ss/ssh/module.nix38
-rw-r--r--modules/by-name/st/steam/module.nix15
-rw-r--r--modules/by-name/sw/swaybg/images/abstract-nord.png (renamed from modules/common/abstract-nord.png)bin140219 -> 140219 bytes
-rw-r--r--modules/by-name/sw/swaybg/images/abstract-nord.png.license (renamed from modules/common/abstract-nord.png.license)0
-rw-r--r--modules/by-name/sw/swaybg/module.nix35
-rw-r--r--modules/by-name/sw/swayidle/module.nix45
-rw-r--r--modules/by-name/xd/xdg/module.nix7
-rw-r--r--modules/by-name/yt/yt/module.nix4
-rw-r--r--modules/common/default.nix19
-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/default.nix1
-rw-r--r--modules/home.legacy/conf/gtk/default.nix1
-rw-r--r--modules/home.legacy/conf/swayidle/config5
-rw-r--r--modules/home.legacy/conf/swayidle/config.license9
-rw-r--r--modules/home.legacy/conf/swayidle/default.nix35
-rw-r--r--modules/home.legacy/pkgs/default.nix14
-rw-r--r--notes/beets_import.md20
-rw-r--r--npins/default.nix45
-rw-r--r--npins/full.nix10
-rw-r--r--npins/sources.json389
-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.lock100
-rw-r--r--pkgs/by-name/fu/fupdate/Cargo.toml4
-rw-r--r--pkgs/by-name/fu/fupdate/flake.nix4
-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
-rwxr-xr-xpkgs/by-name/gi/git-cgit/git-cgit.sh131
-rw-r--r--pkgs/by-name/gi/git-cgit/package.nix28
-rwxr-xr-xpkgs/by-name/hi/hibernate/hibernate.sh7
-rw-r--r--pkgs/by-name/lf/lf-make-map/Cargo.lock225
-rw-r--r--pkgs/by-name/lf/lf-make-map/Cargo.toml5
-rw-r--r--pkgs/by-name/lf/lf-make-map/flake.nix4
-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.rs41
-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.lock659
-rw-r--r--pkgs/by-name/mp/mpdpopm/Cargo.toml31
-rw-r--r--pkgs/by-name/mp/mpdpopm/README.md189
-rw-r--r--pkgs/by-name/mp/mpdpopm/flake.nix2
-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/Cargo.lock4
-rw-r--r--pkgs/by-name/no/notify-run/Cargo.toml2
-rw-r--r--pkgs/by-name/no/notify-run/flake.nix2
-rwxr-xr-xpkgs/by-name/no/notify-run/update.sh4
-rw-r--r--pkgs/by-name/qu/qutebrowser-patched/package.nix30
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/Cargo.lock70
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/Cargo.toml18
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/flake.nix2
-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.lock588
-rw-r--r--pkgs/by-name/ts/tskm/Cargo.toml28
-rw-r--r--pkgs/by-name/ts/tskm/flake.nix2
-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
-rw-r--r--scripts/npins_to_unflake.jq34
-rwxr-xr-xscripts/unflake.sh21
-rwxr-xr-xscripts/why-depends61
-rw-r--r--secrets.nix1
-rw-r--r--unflake.nix189
-rwxr-xr-xupdate.sh6
156 files changed, 3649 insertions, 2235 deletions
diff --git a/flake.nix b/flake.nix
index a5ada983..7aa74923 100644
--- a/flake.nix
+++ b/flake.nix
@@ -35,6 +35,7 @@
templates = sources.loadFlake "templates";
# my binaries
qmk_firmware = sources.loadFlake "qmk_firmware";
+ turtle = sources.loadFlake "turtle";
system = "x86_64-linux";
@@ -78,6 +79,7 @@
externalBinaries = {
inherit
qmk_firmware
+ turtle
;
};
diff --git a/flake/default.nix b/flake/default.nix
index 598dcbd2..c35a5f55 100644
--- a/flake/default.nix
+++ b/flake/default.nix
@@ -95,6 +95,7 @@ in {
pkgs.cocogitto
pkgs.git-bug
pkgs.reuse
+ pkgs.html2text
# secrets
pkgs.ragenix
diff --git a/hosts/by-name/apzu/hardware.nix b/hosts/by-name/apzu/hardware.nix
index 8d481fa6..d037473a 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";
};
};
@@ -32,6 +33,12 @@
boot = {
kernelModules = ["kvm-intel" "rtw89"];
+ kernelParams = [
+ # Use the newer experimental xe driver
+ # "i915.force_probe=!9a49"
+ # "xe.force_probe=9a49"
+ ];
+
initrd.availableKernelModules = ["xhci_pci" "vmd" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"];
};
}
diff --git a/inputs.nix b/inputs.nix
new file mode 100644
index 00000000..ccf2e2af
--- /dev/null
+++ b/inputs.nix
@@ -0,0 +1,56 @@
+let
+ nixpkgsVersion = "26.05";
+ lanzabooteVersion = "v1.1.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";
+ };
+ "turtle" = {
+ url = "git+https://git.foss-syndicate.org/bpeetz/forks/atuin?ref=main";
+ };
+ "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..caabdf40 100644
--- a/modules/by-name/at/atuin/module.nix
+++ b/modules/by-name/at/atuin/module.nix
@@ -10,7 +10,8 @@
{
config,
lib,
- pkgs,
+ externalBinaries,
+ system,
...
}: let
cfg = config.soispha.programs.atuin;
@@ -22,11 +23,19 @@ in {
};
config = lib.mkIf cfg.enable {
- age.secrets.atuin_encryption_key = lib.mkIf cfg.enableAge {
- file = ./secrets/encryption_key.age;
- mode = "700";
- owner = "soispha";
- group = "users";
+ age.secrets = {
+ atuin_encryption_key = lib.mkIf cfg.enableAge {
+ file = ./secrets/encryption_key.age;
+ mode = "700";
+ owner = "soispha";
+ group = "users";
+ };
+ atuin_user_id = lib.mkIf cfg.enableAge {
+ file = ./secrets/user_id.age;
+ mode = "700";
+ owner = "soispha";
+ group = "users";
+ };
};
soispha.programs.zsh.integrations.atuin = ./atuin.zsh;
@@ -35,24 +44,21 @@ in {
programs.atuin = {
enable = true;
+ package = externalBinaries.turtle.packages.${system}.default;
+
daemon.enable = true;
# We can do this on our own.
enableZshIntegration = false;
settings = {
- key_path = lib.mkMerge [
- (lib.mkIf cfg.enableAge "${config.age.secrets.atuin_encryption_key.path}")
- (lib.mkIf (!cfg.enableAge)
- "${config.home-manager.users.soispha.xdg.dataHome}/atuin/atuin_secret_key.key")
- ];
-
sync = lib.mkIf cfg.enableAge {
- # The v2 sync API
- records = true;
+ encryption_key_path = "${config.age.secrets.atuin_encryption_key.path}";
+ user_id_path = "${config.age.secrets.atuin_user_id.path}";
+
+ auto = true;
+ address = "https://atuin-sync.vhack.eu";
};
- auto_sync = lib.mkIf cfg.enableAge true;
- sync_address = lib.mkIf cfg.enableAge "https://atuin-sync.vhack.eu";
logs = {
enabled = true;
@@ -79,9 +85,6 @@ in {
vim_normal = "blink-block";
};
- # Who wants software, that automatically calls home?!
- update_check = false;
-
stats = {
# This overrides the default value.
ignored_commands = [];
@@ -93,10 +96,6 @@ in {
"n" = "select-previous";
"s" = "cursor-right";
};
-
- # I currently don't want a sync deamon or a dotfiles manager running.
- dotfiles.enable = false;
- ai.enabled = false;
};
};
};
diff --git a/modules/by-name/at/atuin/secrets/encryption_key.age b/modules/by-name/at/atuin/secrets/encryption_key.age
index 4c2bb7b4..a69db402 100644
--- a/modules/by-name/at/atuin/secrets/encryption_key.age
+++ b/modules/by-name/at/atuin/secrets/encryption_key.age
@@ -1,15 +1,16 @@
-----BEGIN AGE ENCRYPTED FILE-----
-YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqT1Y2RU9hQmkxWEoveitY
-dDEzQU85QkVXOCsxS3JFb0xKMngrT08xMGswCkJzcm9GanVUbytKcmI1U1lzWVM0
-eGV5OUcwU2M4UGlzZ3ZpQUJtYUJxcTQKLT4gc3NoLWVkMjU1MTkgelpFb25nIElC
-OExoMzVpV0U3czZ2aUp3a0ZDcUlTQnFhallxOTdhTE1YdnFrWVdPRzQKQmN6L1Z4
-S0ZWeWNSREFhMExMa0FOdWhnUTI5bXptVnU5SDFQZkk1R00vdwotPiBzc2gtZWQy
-NTUxOSA3SGZGVXcgbm1LZ1VwRDdjRFh0SCtTT1I2ZDFsSmhsZzVBcHMxSXhWQlNM
-cFVpU2kwRQpEUStYQVJiWSt1THA5ZEJlL2NnQ2NwZTlWWEVtYkpjb09RckxkaWdP
-djFvCi0+ICktZ3JlYXNlIGsgZnRHZHhEIDxVLQo4SkZtRm8vTEJnYVRnZXAwK3Yv
-eUQ0TGdYRVpOTmozSE52MlFqeG1HalVWb1JmZ2k5ZVJFNVpBUGdyMnlVZwotLS0g
-UjI2WVhtU0lITzVMSU1Nc2RKcnJXZVUreWxnZXoxZnBRL0xpUmd3dDhtNArERqzQ
-//hB8CunQlwCCYnISj6FaQphnWz8E3sIyi3FqH2ww9MQ4RzbVqLOOKgg4wVWRC8Y
-RmFWPl1SfJoA8DIPoTEgqQZseB+PT7CYHo4LEwrpkcQ5cndOI2JbO+HzZdk9H+tM
-GbsggKI=
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1NkNRQUdYekxZaEF3WTdC
+ZDBndHBMZUVPM2dObDcvazBjaXlQT3QrUmtVCkc1TUhMd1h1YWxtaXNncGZSODg0
+QWtUTDhybFltaDBVWTE3VVBoeUtubzQKLT4gc3NoLWVkMjU1MTkgelpFb25nIHEy
+VGRMeUZDSUlGRmE0NzlnWSsvY3VHVmRxR1NpNGRmS1ZRWG9TcFdaQmsKcjhKb1VG
+V2tNZkdXTXhSb25ETUplYlZWaHU0Y0grYUtjSVVHVzhmMzV5TQotPiBzc2gtZWQy
+NTUxOSA3SGZGVXcgTTBhcUJISVVRVU1hNk5VZkNTNUZHUzY1TSs4a2ZNYytIdVVG
+TG5mRjhBawpRVG50Wkl2S2NKdUxTeVhiOTJ0RG00NCswQ01jV1lYbVpYNC90N3V1
+WXZRCi0+IDEoIS1ncmVhc2UgSUZzazpsRCBCbi0gWQpxMUJtNk13ZHptVjladTAz
+U2IxRjIyK0wvY3k1T3JiQ1ZFNlMvU0t3TWNyN09SVVlWc2FIQU9lZDZ0azIwT29z
+CjRFREVXdGozNVhKWlE5L3NxTGdDZFVvL2NDYlpRTWtrd1J0cFZwcm9OVW1Vb1pz
+SnptUWdvZ3E4VThHOXZRCi0tLSBUeW0zYnNVZkRYWDJoTTV0V2QveWpIY0p0UmxP
+UXlSNHNPbllBYitjTWpVCgUpBZTJYd2sFY9GvDwJMKt0WVrDZVE2PF5jAww8Ml/w
+rEycAm/dmIiMV5mfKOdU0aHNMl6RM/7PLHSa4G+wIRRrKQkoNcu8cqOziBRWgSOn
+JKxVFCdwlEgAo+J+qtRHkwitjOJ0ce6OOg==
-----END AGE ENCRYPTED FILE-----
diff --git a/modules/by-name/at/atuin/secrets/user_id.age b/modules/by-name/at/atuin/secrets/user_id.age
new file mode 100644
index 00000000..6ac3bcd6
--- /dev/null
+++ b/modules/by-name/at/atuin/secrets/user_id.age
@@ -0,0 +1,14 @@
+-----BEGIN AGE ENCRYPTED FILE-----
+YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0T3hFUm1NZU1RU2IxNWsx
+ZFh2ckVsTnNBZVVqMm9HaGFOTmtKMlh3M2xzClJ1N0RsbFJYYWhnYktpYnFaYWNY
+c2VGRzZoMW1GOENsV3FoTEJ1OWVDQ00KLT4gc3NoLWVkMjU1MTkgelpFb25nIDlY
+MnRoMFB4dTUyS0pIenVjelRxRERXZ2ptVURZWGttZWR5R25NMWYzekUKaVRDKzJj
+cCtRY0F6VVFGUlIyeGhLSThXMVFvNEl2Y0tMdHpSOEI4cjVtTQotPiBzc2gtZWQy
+NTUxOSA3SGZGVXcgbjNpdGZZa1NxbEw3YkV4UmxTb0dtSlFPM1htK1QzWXBaRGdv
+ZUdTYkoxSQpMcHZCMnNPR0QySkovQ0I1THVPK3Z5RlFCbGJ5Zk5teDBKbUFvY1p4
+T3lzCi0+IGtrVXxkQlItZ3JlYXNlIDBRO3cKWnk5M2MyTUExRDBYd25RdkxRQWla
+bnpTU1J0T1NMbVZldGpCbVZOTFZuV29ZRll0UDJwdHo0YWoKLS0tIFI5RG9WSDZu
+am9RYnFONE9wZ3pVaG1tVnBLNTZqK3d4NFhhT1F1bWlORzAKz44Fafb+Ck5aMxJF
+5/pNNcYE3IRUqjKTWjmSO+fBFVPnlfIIc6gKFhO4Nm05QIxqzSW08PbBhVYFH65u
+ivRjFHUg+Gp3
+-----END AGE ENCRYPTED FILE-----
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..8c8b2af1 100644
--- a/modules/by-name/bo/boot/module.nix
+++ b/modules/by-name/bo/boot/module.nix
@@ -12,139 +12,214 @@
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 = {
+ # TODO: Check that the ISO we use for booting is _actually_ still the one we
+ # copied there (someone might exchange it in between) <2026-06-09>
+ "${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/ca/cargo/module.nix b/modules/by-name/ca/cargo/module.nix
index d36a11e5..6a0675d3 100644
--- a/modules/by-name/ca/cargo/module.nix
+++ b/modules/by-name/ca/cargo/module.nix
@@ -27,8 +27,7 @@ in {
cargoHome = "${config.home-manager.users.soispha.xdg.dataHome}/cargo";
settings = {
- # {cargo-cache-home} means $CARGO_HOME
- build.build-dir = "{cargo-cache-home}/shared-target/";
+ build.build-dir = "${config.home-manager.users.soispha.xdg.cacheHome}/cargo/shared-target/";
};
};
};
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..74273b49
--- /dev/null
+++ b/modules/by-name/fo/foot/module.nix
@@ -0,0 +1,71 @@
+# 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,
+ pkgs,
+ ...
+}: let
+ cfg = config.soispha.foot;
+in {
+ options.soispha.foot = {
+ enable = libraries.base.options.mkEnable "foot terminal";
+ };
+
+ config = lib.mkIf cfg.enable {
+ # TODO: Maybe we can use the xdg-autostart mechanism for this? <2026-06-23>
+ soispha.programs.river.init.autoStart = [
+ ["${lib.getExe' pkgs.foot "footclient"}"]
+ ];
+
+ home-manager.users.soispha = {
+ systemd.user.services.foot = {
+ # Don't restart the foot server (otherwise all my open foot terminals would exit
+ # too)
+ Unit.X-SwitchMethod = "keep-old";
+
+ # TODO: This should probably be added <2026-07-02>
+ # OOMScoreAdjust=-100;
+ };
+
+ programs.foot = {
+ enable = true;
+ server.enable = true;
+ settings = {
+ main = {
+ include = "${./theme.ini}";
+ font = "SauceCodePro Nerd Font Mono:size=12";
+ letter-spacing = "-0.25";
+ };
+ "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"
+ ];
+ };
+ };
+ };
+ };
+ };
+}
diff --git a/modules/by-name/fo/foot/theme.ini b/modules/by-name/fo/foot/theme.ini
new file mode 100644
index 00000000..f5f36039
--- /dev/null
+++ b/modules/by-name/fo/foot/theme.ini
@@ -0,0 +1,40 @@
+# From https://github.com/mbadolato/iTerm2-Color-Schemes/blob/75bc70670c28b5dc97625af38deb3ae49f4363e6/foot/Carbonfox.ini
+# Other themes I considered:
+# - ayu-mirage
+# - catppuccin-mocha
+# - chiba-dark
+# - iterm
+# - kitty
+# - modus-vivendi
+# - modus-vivendi-tinted
+# - molokai
+# - tokyonight-storm
+# - visibone
+# - xterm
+# - poimandres
+# -*- conf -*-
+# VisiBone
+
+[colors-dark]
+cursor=161616 f2f4f8
+foreground=f2f4f8
+background=161616
+regular0=282828
+regular1=ee5396
+regular2=25be6a
+regular3=08bdba
+regular4=78a9ff
+regular5=be95ff
+regular6=33b1ff
+regular7=dfdfe0
+bright0=484848
+bright1=f16da6
+bright2=46c880
+bright3=2dc7c4
+bright4=8cb6ff
+bright5=c8a5ff
+bright6=52bdff
+bright7=e4e4e5
+selection-foreground=f2f4f8
+selection-background=2a2a2a
+
diff --git a/modules/by-name/gi/git/module.nix b/modules/by-name/gi/git/module.nix
index 64a64904..28e61ecb 100644
--- a/modules/by-name/gi/git/module.nix
+++ b/modules/by-name/gi/git/module.nix
@@ -9,6 +9,7 @@
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
{
lib,
+ pkgs,
config,
...
}: let
@@ -43,6 +44,14 @@ in {
};
};
+ # Add my custom git-scripts
+ home.packages = [
+ pkgs.git-edit-index # Allows you to edit the indexed version of a file
+ pkgs.git-cm # A wrapper that re-adds the last commit's subject
+ pkgs.git-cgit # Allows fast cgit settings setup
+ pkgs.stamp # Add a license header to a file
+ ];
+
programs.git = {
enable = true;
diff --git a/modules/by-name/i3/i3bar-river/module.nix b/modules/by-name/i3/i3bar-river/module.nix
index 8a2203aa..982ec1e3 100644
--- a/modules/by-name/i3/i3bar-river/module.nix
+++ b/modules/by-name/i3/i3bar-river/module.nix
@@ -110,7 +110,26 @@ in {
};
config = lib.mkIf cfg.enable {
- soispha.programs.river.init.backgroundStart = [cfg.package];
+ systemd.user.services."i3bar-river" = {
+ description = "Highly customizable Wayland bar for river";
+ partOf = ["graphical-session.target"];
+ after = ["graphical-session.target"];
+ requisite = ["graphical-session.target"];
+
+ path = [
+ pkgs.bash # `sh` is needed for starting the status command
+
+ # TODO: This should be a wrapper of the status command <2026-06-23>
+ pkgs.btrfs-progs # `btrfs` is needed by the storage block in the status command
+ ];
+
+ serviceConfig = {
+ ExecStart = "${lib.getExe cfg.package}";
+ ExecReload = "kill -SIGUSR2 $MAINPID";
+ Restart = "on-failure";
+ };
+ wantedBy = ["graphical-session.target"];
+ };
home-manager.users.soispha = {
programs.i3bar-river = {
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 7fea7357..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}";
@@ -61,7 +68,7 @@ in {
name = "archive_decompress";
dependencies = [
pkgs.gnutar
- pkgs.unzip
+ pkgs.openjdk_headless
pkgs.p7zip
pkgs.xz
pkgs.gzip
@@ -72,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..a5fc2c50 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,10 @@
pkgs.xz
pkgs.zip
+ pkgs.cabextract
+
+ 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..d7f8eb95 100644
--- a/modules/by-name/lf/lf/keybindings/default.nix
+++ b/modules/by-name/lf/lf/keybindings/default.nix
@@ -15,50 +15,69 @@
"'\"'" = null;
";" = null;
"\"'\"" = null;
- c = null;
- d = null;
- e = null;
- j = null;
- k = null;
- m = null;
- f = null;
# Sorting
- kn = ":set sortby natural; set info";
- ks = ":set sortby size; set info size";
- kt = ":set sortby time; set info time";
- ka = ":set sortby atime; set info atime";
- kc = ":set sortby ctime; set info ctime";
- ke = ":set sortby ext; set info";
+ # k = null;
+ k = {
+ n = ":set sortby natural; set info";
+ s = ":set sortby size; set info size";
+ t = ":set sortby time; set info time";
+ a = ":set sortby atime; set info atime";
+ c = ":set sortby ctime; set info ctime";
+ e = ":set sortby ext; set info";
+ };
# Searching
l = "search-next";
L = "search-prev";
- # File Openers
- ee = "\$\$EDITOR \"$f\"";
- es = "\$ nvim -S \"$f\"";
+ # File edit
+ # e = null;
+ e = {
+ e = "\$\$EDITOR \"$f\"";
+ s = "\$ nvim -S \"$f\"";
+ };
+
u = "view_file";
- cc = "\$sudo -e \"$f\"";
- fe = "execute";
- fl = "follow_link";
- cp = "set_clipboard_path";
+
+ # f = null;
+ f = {
+ e = "execute";
+ l = "follow_link";
+ };
+
+ # c = null;
+ c = {
+ p = "set_clipboard_path";
+ s = "stripspace";
+ h = "chmod";
+ };
# Archive Mappings
- au = "archive_decompress";
- aa = "archive_compress";
+ a = {
+ u = "archive_decompress";
+ a = "archive_compress";
+ };
- # Trash Mappings
- dd = "trash";
- jc = "trash_clear";
- jr = "trash_restore";
+ D = {
+ D = "delete";
+ };
+ # d = null;
+ d = {
+ # Trash Mappings
+ d = "trash";
- # Dragon Mapping
- dr = "dragon";
- ds = "dragon_stay";
- di = "dragon_individual";
+ # Dragon Mapping
+ r = "dragon";
+ s = "dragon_stay";
+ i = "dragon_individual";
+ };
- cs = "stripspace";
+ # j = null;
+ j = {
+ c = "trash_clear";
+ r = "trash_restore";
+ };
# Vim keys
h = "updir";
@@ -68,36 +87,36 @@
# Basic Functions
"." = "set hidden!";
- DD = "delete";
p = "paste";
x = "cut";
y = "copy";
"<enter>" = "open";
- mk = "mk_link";
- mf = "mk_file";
- md = "mk_directory";
- ms = "mk_script";
+ # m = null;
+ m = {
+ k = "mk_link";
+ f = "mk_file";
+ d = "mk_directory";
+ s = "mk_script";
+ };
+
+ b = {
+ g = "set_wallpaper";
+ };
- 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}";
-
- gc = "cd ~/.config";
- gl = "cd ~/.local";
- gE = "cd /etc";
- gD = "cd ${downloadDir}";
-
- "gU." = "cd /usr";
- gUs = " cd /usr/share";
+ # (walking) Movement
+ w = {
+ u = "cd /run/user/${builtins.toString uid}";
+ e = "cd /etc";
+ d = "cd ${downloadDir}";
+ t = "cd /tmp";
+ h = "cd_project_root";
+ };
- 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..0a0e193f 100644
--- a/modules/by-name/lf/lf/module.nix
+++ b/modules/by-name/lf/lf/module.nix
@@ -17,7 +17,19 @@
...
}: let
commands = import ./commands {inherit pkgs sysLib shell_library system;};
- keybindings = import ./keybindings {inherit (cfg.keymaps) uid downloadDir;};
+ keybindings_raw = import ./keybindings {inherit (cfg.keymaps) uid downloadDir;};
+
+ process = prefix: attrs:
+ lib.mapAttrsToList (name: value:
+ if (builtins.isAttrs value)
+ then
+ (process name value)
+ ++ [(lib.nameValuePair name null)]
+ else if prefix == null
+ then (lib.nameValuePair name value)
+ else (lib.nameValuePair (prefix + name) value))
+ attrs;
+ keybindings = builtins.listToAttrs (lib.lists.flatten (process null keybindings_raw));
packages = import ./wrappers {inherit pkgs;};
@@ -85,7 +97,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 +105,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/lu/lutris/module.nix b/modules/by-name/lu/lutris/module.nix
new file mode 100644
index 00000000..f0b92a0b
--- /dev/null
+++ b/modules/by-name/lu/lutris/module.nix
@@ -0,0 +1,39 @@
+# 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>.
+{
+ lib,
+ config,
+ libraries,
+ pkgs,
+ ...
+}: let
+ cfg = config.soispha.programs.lutris;
+in {
+ options.soispha.programs.lutris = {
+ enable = libraries.base.options.mkEnable "Lutris";
+ };
+
+ config = lib.mkIf cfg.enable {
+ soispha.impermanence.userDirectories = [
+ ".config/lutris"
+ ];
+
+ home-manager.users.soispha = {
+ programs.lutris = {
+ enable = true;
+ steamPackage = lib.mkIf config.programs.steam.enable config.programs.steam.package;
+ defaultWinePackage = pkgs.proton-ge-bin;
+ protonPackages = [pkgs.proton-ge-bin];
+
+ # winePackages = [pkgs.wineWow64Packages.full];
+ };
+ };
+ };
+}
diff --git a/modules/by-name/ly/ly/module.nix b/modules/by-name/ly/ly/module.nix
index dedabe81..e2d3b0ae 100644
--- a/modules/by-name/ly/ly/module.nix
+++ b/modules/by-name/ly/ly/module.nix
@@ -31,6 +31,7 @@
Terminal=true
'';
+ # TODO: This could use the `services.display-manager.sessionPackages` option <2026-06-23>
customSessionsDir =
pkgs.runCommand "custom-sessions" {}
/*
@@ -39,8 +40,22 @@
''
mkdir "$out";
cp "${riverDesktop}/share/applications/river.desktop" "$out"
- cp "${shellDesktop}" "$out"
+ cp "${shellDesktop}" "$out/zsh.desktop"
'';
+
+ setup = pkgs.writeShellApplication {
+ name = "setup";
+
+ bashOptions = [];
+
+ runtimeInputs = [
+ pkgs.findutils
+ pkgs.systemd
+ ];
+ inheritPath = true;
+
+ text = builtins.readFile ./setup.sh;
+ };
in {
options.soispha.programs.ly = {
enable = lib.mkEnableOption "ly";
@@ -84,6 +99,11 @@ in {
dur_file_path = "${./blackhole-smooth-240x67.dur}";
full_color = true;
+ # NOTE: This does the same as the default nixos setup cmd, but we don't
+ # immidiately start the `graphical-session.target`. That is started by river's
+ # init. <2026-06-23>
+ setup_cmd = "${lib.getExe setup}";
+
custom_sessions = "${customSessionsDir}";
# Clear the screen before starting up (otherwise error messages might linger on
@@ -98,12 +118,12 @@ in {
clock = "%c";
hibernate_cmd = "systemctl hibernate";
- inactivity_cmd = "systmectl suspend-then-hibernate";
+ inactivity_cmd = "systemctl suspend-then-hibernate";
restart_cmd = "reboot";
shutdown_cmd = "shutdown $PLATFORM_SHUTDOWN_ARG now";
sleep_cmd = "systemctl suspend";
- inactivity_delay = 30; # unit is seconds
+ inactivity_delay = 120; # unit is seconds
};
};
};
diff --git a/modules/by-name/ly/ly/setup.sh b/modules/by-name/ly/ly/setup.sh
new file mode 100644
index 00000000..6e8bed2b
--- /dev/null
+++ b/modules/by-name/ly/ly/setup.sh
@@ -0,0 +1,47 @@
+#! /usr/bin/env bash
+
+# Shared environment setup for graphical sessions.
+
+# shellcheck disable=1091
+. /etc/profile
+
+cd "$HOME" || {
+ echo 1>&2 "No HOME :("
+ exit 1
+}
+
+if [ -z "$_DID_SYSTEMD_CAT" ]; then
+ export _DID_SYSTEMD_CAT=1
+ exec systemd-cat -t xsession "$0" "$@"
+fi
+
+
+# Import environment variables into the systemd user environment.
+/run/current-system/systemd/bin/systemctl --user import-environment DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY XDG_SESSION_ID
+
+# Speed up application start by 50-150ms according to
+# https://kdemonkey.blogspot.com/2008/04/magic-trick.html
+compose_cache="${XCOMPOSECACHE:-$HOME/.compose-cache}"
+mkdir -p "$compose_cache"
+# To avoid accidentally deleting a wrongly set up XCOMPOSECACHE directory,
+# defensively try to delete cache *files* only, following the file format specified in
+# https://gitlab.freedesktop.org/xorg/lib/libx11/-/blob/master/modules/im/ximcp/imLcIm.c#L353-358
+# sprintf (*res, "%s/%c%d_%03x_%08x_%08x", dir, _XimGetMyEndian(), XIM_CACHE_VERSION, (unsigned int)sizeof (DefTree), hash, hash2);
+find "$compose_cache" -maxdepth 1 -regextype posix-extended -regex '.*/[Bl][0-9]+_[0-9a-f]{3}_[0-9a-f]{8}_[0-9a-f]{8}' -delete
+unset compose_cache
+
+# Work around KDE errors when a user first logs in and
+# .local/share doesn't exist yet.
+mkdir -p "${XDG_DATA_HOME:-$HOME/.local/share}"
+
+unset _DID_SYSTEMD_CAT
+
+
+if test "$1"; then
+ # Run the supplied session command.
+ exec "$@"
+else
+ # TODO: Do we need this? Should not the session always exist?
+ echo "error: unknown session $1" 1>&2
+ exit 1
+fi
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 ed4462f4..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,
...
-}:
-let
+}: let
nixpkgs = sources.loadFlake "nixpkgs";
+
+ cfg = config.soispha.nix;
in {
- # TODO(@bpeetz): Modularize <2025-02-08>
+ options.soispha.nix = {
+ enable = libraries.base.options.mkEnable "nix";
+ };
- nix = {
- package = pkgs.lixPackageSets.latest.lix;
+ config = lib.mkIf cfg.enable {
+ nix = {
+ package = pkgs.lixPackageSets.latest.lix;
- # Disable nix channels (this is a remnant of old days)
- channel.enable = false;
+ # Disable nix channels (this is a remnant of old days)
+ channel.enable = false;
- registry = {
- nixpkgs.flake = nixpkgs;
- n.flake =
- nixpkgs
- // {
- # Otherwise nixpkgs's config and overlays are not available:
+ registry = {
+ nixpkgs.flake = nixpkgs;
+ n.flake =
+ nixpkgs
+ // {
+ # Otherwise nixpkgs's config and overlays are not available:
- # Both attrs exists, so we just override both and hope
- outputs.legacyPackages."${system}" = pkgs;
- legacyPackages."${system}" = pkgs;
- };
+ # Both attrs exists, so we just override both and hope
+ outputs.legacyPackages."${system}" = pkgs;
+ legacyPackages."${system}" = pkgs;
+ };
- t.flake = externalDependencies.templates;
+ t.flake = externalDependencies.templates;
- my_flake.flake = self;
- m.flake = self;
- };
+ my_flake.flake = self;
+ m.flake = self;
+ };
- gc = {
- automatic = true;
- dates = "weekly";
- options = "--delete-older-than 7d";
- };
+ gc = {
+ automatic = true;
+ dates = "weekly";
+ options = "--delete-older-than 7d";
+ };
- settings = {
- auto-optimise-store = true;
- experimental-features = [
- "nix-command"
- "flakes"
- ];
+ settings = {
+ auto-optimise-store = true;
+ experimental-features = [
+ "nix-command"
+ "flakes"
+ ];
- use-xdg-base-directories = true;
+ 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/nixpkgs/module.nix b/modules/by-name/ni/nixpkgs/module.nix
index 84d8e074..1ded8444 100644
--- a/modules/by-name/ni/nixpkgs/module.nix
+++ b/modules/by-name/ni/nixpkgs/module.nix
@@ -22,7 +22,13 @@ in {
example = "x86_64-linux";
type = lib.types.str;
};
+ unfreePackageNames = lib.mkOption {
+ description = "Names of unfree packages to allow";
+ example = "[ steam steam-unwrapped ]";
+ type = lib.types.listOf lib.types.str;
+ };
};
+
config = let
myPkgsOverlay = self: super: packageSets.soispha;
in
@@ -39,11 +45,7 @@ in {
hostSystem = cfg.systemName;
allowUnfreePredicate = pkg:
- builtins.elem (lib.getName pkg) [
- # the plugin is lacking an license and is thus unfree, effectively
- # its okay though (TODO: investigate <2026-05-11>)?
- "cmp-calc"
- ];
+ builtins.elem (lib.getName pkg) cfg.unfreePackageNames;
};
};
};
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/nv/nvim/plgs/nvim-cmp/default.nix b/modules/by-name/nv/nvim/plgs/nvim-cmp/default.nix
index 315f3fc7..48883bd3 100644
--- a/modules/by-name/nv/nvim/plgs/nvim-cmp/default.nix
+++ b/modules/by-name/nv/nvim/plgs/nvim-cmp/default.nix
@@ -14,6 +14,12 @@
}: let
cfg = config.soispha.programs.nvim;
in {
+ soispha.nixpkgs.unfreePackageNames = [
+ # the plugin is lacking an license and is thus unfree, effectively
+ # its okay though (TODO: investigate <2026-05-11>)?
+ "cmp-calc"
+ ];
+
home-manager.users.soispha.programs.nixvim = lib.mkIf cfg.enable {
opts.completeopt = [
"menu" # Show completions in a menu
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/settings/default.nix b/modules/by-name/qu/qutebrowser/settings/default.nix
index 282c5816..b0259c22 100644
--- a/modules/by-name/qu/qutebrowser/settings/default.nix
+++ b/modules/by-name/qu/qutebrowser/settings/default.nix
@@ -502,11 +502,11 @@ in {
"@du" = duckduckgo;
# NIX
- "@np" = "https://search.nixos.org/packages?type=packages&query={}"; # Nix packages
+ "@np" = "https://search.nixos.org/packages?channel=unstable&type=packages&query={}"; # Nix packages
"@ng" = "https://noogle.dev/q?term={}"; # Nix functions
- "@no" = "https://search.nixos.org/options?type=options&query={}"; # NixOS options
+ "@no" = "https://search.nixos.org/options?channel=unstable&type=options&query={}"; # NixOS options
"@nh" = "https://home-manager-options.extranix.com/?query={}&release=master"; # Home-Manager options
"@ni" = "https://github.com/NixOS/nixpkgs/issues?q=is%3Aissue+is%3Aopen+{}"; # Nixpkgs issues
diff --git a/modules/by-name/ri/river/keymap.nix b/modules/by-name/ri/river/keymap.nix
index 9bcbf387..1d4b8c3e 100644
--- a/modules/by-name/ri/river/keymap.nix
+++ b/modules/by-name/ri/river/keymap.nix
@@ -37,16 +37,17 @@
};
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: {
"<LEFT_SUPER>" = {
# Spawn standard programs
"r" = {
- "a" = mkSpawn pkgs.alacritty "" {};
+ "a" = mkSpawn' pkgs.foot "footclient" "" {};
"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/ri/river/module.nix b/modules/by-name/ri/river/module.nix
index bafaf0a3..7eb30014 100644
--- a/modules/by-name/ri/river/module.nix
+++ b/modules/by-name/ri/river/module.nix
@@ -35,7 +35,9 @@
else builtins.map esa input
);
in "err_fail ${program} &";
- longRunningPrograms = builtins.concatStringsSep "\n" (builtins.map mkLrProgram cfg.init.backgroundStart);
+ longRunningPrograms =
+ builtins.concatStringsSep "\n" (builtins.map mkLrProgram
+ cfg.init.autoStart);
keymapFormat = pkgs.formats.json {};
keymapGenerate = name: value:
@@ -163,12 +165,14 @@ in {
'';
};
- backgroundStart = lib.mkOption {
- type = lib.types.listOf (lib.types.either lib.types.package (lib.types.listOf lib.types.str));
- description = "List of programs to start in the background";
+ autoStart = lib.mkOption {
+ type =
+ lib.types.listOf (lib.types.either lib.types.package (lib.types.listOf
+ lib.types.str));
+ description = "List of programs to be started at river start";
example = ''
[
- pkgs.gammastep
+ ''${lib.getExe pkgs.foot}
]
'';
};
@@ -235,14 +239,49 @@ in {
# ${text}
${other_stuff}
'';
+
+ sessionVars =
+ (builtins.attrNames config.environment.sessionVariables)
+ ++ (builtins.attrNames config.home-manager.users.soispha.home.sessionVariables)
+ ++ [
+ "WAYLAND_DISPLAY"
+ "DISPLAY"
+ "XDG_RUNTIME_DIR"
+ ];
+
+ part = acc: vars: let
+ firstTen = lib.lists.take 5 vars;
+ in
+ if firstTen == []
+ then acc
+ else part (acc ++ [firstTen]) (lib.lists.removePrefix firstTen vars);
+
+ partedSessionVars = part [] sessionVars;
+
+ mkEnvSet = prefix: vars: let
+ stringVars = builtins.concatStringsSep " " vars;
+ in ''err_fail ${riverctl} spawn "${prefix} ${stringVars}"'';
+
+ dbusEnvs =
+ builtins.map
+ (mkEnvSet "${lib.getExe' pkgs.dbus "dbus-update-activation-environment"} --verbose --systemd")
+ partedSessionVars;
+ systemdUserEnvs =
+ builtins.map
+ (mkEnvSet "systemctl --user --verbose import-environment")
+ partedSessionVars;
in
builtins.readFile ./init_base.sh
+
# bash
mkHeading "Environment variables" ''
- err_fail ${riverctl} spawn "${lib.getExe' pkgs.dbus "dbus-update-activation-environment"} --verbose --systemd SEATD_SOCK DISPLAY WAYLAND_DISPLAY DESKTOP_SESSION=river XDG_CURRENT_DESKTOP=river"
export XDG_CURRENT_DESKTOP=river DESKTOP_SESSION=river;
''
+ + mkHeading "Informing dbus about changed env-vars" (builtins.concatStringsSep "\n" dbusEnvs)
+ + mkHeading "Informing systemd user about changed env-vars" (builtins.concatStringsSep "\n" systemdUserEnvs)
+ + mkHeading "Starting graphical-session-target" ''
+ err_fail systemctl --user start nixos-fake-graphical-session.target
+ ''
+ mkHeading "Key Mappings" keymappings
+ mkHeading "Rules" ruleSetup
+ mkHeading "General Settings" generalSettings
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/by-name/st/steam/module.nix b/modules/by-name/st/steam/module.nix
index 87cdc709..aaa36fd3 100644
--- a/modules/by-name/st/steam/module.nix
+++ b/modules/by-name/st/steam/module.nix
@@ -19,15 +19,12 @@ in {
};
config = lib.mkIf cfg.enable {
- nixpkgs.config.allowUnfreePredicate = pkg:
- builtins.elem (lib.getName pkg) [
- # NOTE: These are not really applied. Needs to be at
- # <modules/by-name/ni/nixpkgs/config.nix> for some reason. <2025-04-25>
- "steam"
- "steam-unwrapped"
- "steam-original"
- "steam-run"
- ];
+ soispha.nixpkgs.unfreePackageNames = [
+ "steam"
+ "steam-unwrapped"
+ "steam-original"
+ "steam-run"
+ ];
programs.steam = {
enable = true;
diff --git a/modules/common/abstract-nord.png b/modules/by-name/sw/swaybg/images/abstract-nord.png
index 5ef498bf..5ef498bf 100644
--- a/modules/common/abstract-nord.png
+++ b/modules/by-name/sw/swaybg/images/abstract-nord.png
Binary files differ
diff --git a/modules/common/abstract-nord.png.license b/modules/by-name/sw/swaybg/images/abstract-nord.png.license
index eae6a84c..eae6a84c 100644
--- a/modules/common/abstract-nord.png.license
+++ b/modules/by-name/sw/swaybg/images/abstract-nord.png.license
diff --git a/modules/by-name/sw/swaybg/module.nix b/modules/by-name/sw/swaybg/module.nix
new file mode 100644
index 00000000..fa6a079a
--- /dev/null
+++ b/modules/by-name/sw/swaybg/module.nix
@@ -0,0 +1,35 @@
+# 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,
+ pkgs,
+ libraries,
+ ...
+}: let
+ cfg = config.soispha.programs.swaybg;
+in {
+ options.soispha.programs.swaybg = {
+ enable = libraries.base.options.mkEnable "swaybg";
+ };
+
+ config = lib.mkIf cfg.enable {
+ systemd.user.services."swaybg" = {
+ description = "Background display for river";
+ partOf = ["graphical-session.target"];
+ after = ["graphical-session.target"];
+ requisite = ["graphical-session.target"];
+ serviceConfig = {
+ ExecStart = "${lib.getExe pkgs.swaybg} --image ${./images/abstract-nord.png}";
+ };
+ wantedBy = ["graphical-session.target"];
+ };
+ };
+}
diff --git a/modules/by-name/sw/swayidle/module.nix b/modules/by-name/sw/swayidle/module.nix
new file mode 100644
index 00000000..9bda534f
--- /dev/null
+++ b/modules/by-name/sw/swayidle/module.nix
@@ -0,0 +1,45 @@
+# 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,
+ pkgs,
+ lib,
+ libraries,
+ ...
+}: let
+ cfg = config.soispha.programs.swayidle;
+ swaylock = lib.getExe pkgs.swaylock;
+in {
+ options.soispha.programs.swayidle = {
+ enable = libraries.base.options.mkEnable "swayidle";
+ };
+
+ config = lib.mkIf cfg.enable {
+ home-manager.users.soispha = {
+ services.swayidle = {
+ enable = true;
+ events = {
+ "before-sleep" = "${swaylock} -f ";
+ };
+
+ timeouts = [
+ {
+ timeout = 180;
+ command = "${swaylock} -fF";
+ }
+ {
+ timeout = 360;
+ command = "systemctl suspend-then-hibernate";
+ }
+ ];
+ };
+ };
+ };
+}
diff --git a/modules/by-name/xd/xdg/module.nix b/modules/by-name/xd/xdg/module.nix
index 108e0179..9430d82f 100644
--- a/modules/by-name/xd/xdg/module.nix
+++ b/modules/by-name/xd/xdg/module.nix
@@ -41,15 +41,15 @@
};
cfg = config.soispha.xdg;
+
+ inherit (config.home-manager.users.soispha.home) homeDirectory;
in {
options.soispha.xdg = {
enable = lib.mkEnableOption "xdg";
};
config = lib.mkIf cfg.enable {
- home-manager.users.soispha.xdg = let
- inherit (config.home-manager.users.soispha.home) homeDirectory;
- in {
+ home-manager.users.soispha.xdg = {
enable = true;
configFile."xdg-desktop-portal-termfilechooser/config".source = tfcConfigFile;
@@ -75,6 +75,7 @@ in {
music = "${homeDirectory}/media/music";
pictures = "${homeDirectory}/media/pictures";
videos = "${homeDirectory}/media/videos";
+ projects = "${homeDirectory}/repos";
templates = null;
publicShare = null;
diff --git a/modules/by-name/yt/yt/module.nix b/modules/by-name/yt/yt/module.nix
index 81bacf44..f001c030 100644
--- a/modules/by-name/yt/yt/module.nix
+++ b/modules/by-name/yt/yt/module.nix
@@ -113,6 +113,10 @@ in {
config = {
home-manager.users.soispha = lib.mkIf cfg.enable {
+ home.packages = [
+ pkgs.yt
+ ];
+
xdg.configFile = {
"yt/mpv.conf".text = renderOptions mpvConf;
"yt/mpv.input.conf".text = renderBindings mpvInputConfig;
diff --git a/modules/common/default.nix b/modules/common/default.nix
index 40c08378..e5172921 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;
@@ -213,17 +219,10 @@
pointer-1133-49970-Logitech_Gaming_Mouse_G502 = [["pointer-accel" "0"] ["accel-profile" "none"]];
pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I = [["pointer-accel" "0"] ["accel-profile" "none"]];
};
- backgroundStart = [
- # TODO(@bpeetz): Move these to systemd units/their own modules <2025-05-18>
-
- ["${lib.getExe pkgs.swaybg}" "--image" "${./abstract-nord.png}"]
- pkgs.swayidle
- pkgs.alacritty
- ];
};
};
mpv.enable = true;
- steam.enable = false;
+ steam.enable = true;
ssh.enable = true;
swaylock.enable = true;
timewarrior.enable = true;
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/default.nix b/modules/home.legacy/conf/default.nix
index 89502a64..b50068ea 100644
--- a/modules/home.legacy/conf/default.nix
+++ b/modules/home.legacy/conf/default.nix
@@ -24,6 +24,5 @@
./prusa_slicer
./python
./starship
- ./swayidle
];
}
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/conf/swayidle/config b/modules/home.legacy/conf/swayidle/config
deleted file mode 100644
index a48f670b..00000000
--- a/modules/home.legacy/conf/swayidle/config
+++ /dev/null
@@ -1,5 +0,0 @@
-timeout 180 'swaylock -fF'
-
-timeout 360 'systemctl suspend-then-hibernate'
-
-before-sleep 'swaylock -f'
diff --git a/modules/home.legacy/conf/swayidle/config.license b/modules/home.legacy/conf/swayidle/config.license
deleted file mode 100644
index eae6a84c..00000000
--- a/modules/home.legacy/conf/swayidle/config.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/modules/home.legacy/conf/swayidle/default.nix b/modules/home.legacy/conf/swayidle/default.nix
deleted file mode 100644
index 4483c8b9..00000000
--- a/modules/home.legacy/conf/swayidle/default.nix
+++ /dev/null
@@ -1,35 +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>.
-{...}: {
- # TODO: This fails to hibernate when the hardware swap was not previously activated. <2025-04-04>
- xdg.configFile."swayidle/config".source = ./config;
-
- # services.swayidle = {
- # enable = true;
- # events = [
- # {
- # event = "before-sleep";
- # command = "${pkgs.swaylock}/bin/swaylock -f ";
- # }
- # ];
- # timeouts = [
- # {
- # timeout = 180;
- # command = "${pkgs.swaylock}/bin/swaylock -fFu ";
- # }
- # {
- # timeout = 360;
- # # TODO: systemctl is installed?
- # command = "systemctl suspend-then-hibernate";
- # }
- # ];
- # # systemdTarget = ""; # TODO: this might be usefull
- # };
-}
diff --git a/modules/home.legacy/pkgs/default.nix b/modules/home.legacy/pkgs/default.nix
index 18ef3d98..ddc633c1 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
@@ -52,12 +48,6 @@ with pkgs; let
];
};
- Media = {
- YouTube = [
- yt # A command line YouTube client
- ];
- };
-
Hardware = {
Storage = [
# TODO: smartmontools # Control and monitor S.M.A.R.T. enabled ATA and SCSI Hard Drives
@@ -94,10 +84,6 @@ with pkgs; let
Programming = {
GeneralTools = [
- stamp # Add a license header to a file
- git # the fast distributed version control system
- git-edit-index # Allows you to edit the indexed version of a file
- git-cm # A wrapper that re-adds the last commit's subject
glow # Command-line markdown renderer
];
};
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
index 884fc8cc..8ec5eca6 100644
--- a/npins/default.nix
+++ b/npins/default.nix
@@ -65,7 +65,9 @@ let
if pkgs == null then
{
inherit (builtins) fetchTarball fetchurl;
- # For some fucking reason, fetchGit has a different signature than the other builtin fetchers …
+ # Frustratingly, due to flakes and `fetchTree`, `fetchGit`
+ # has a different signature than the other builtin
+ # fetchers
fetchGit = args: (builtins.fetchGit args).outPath;
}
else
@@ -95,7 +97,6 @@ let
};
};
- # Dispatch to the correct code path based on the type
path =
if spec.type == "Git" then
mkGitSource fetchers spec
@@ -105,8 +106,8 @@ let
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 == "Url" || spec.type == "MutableUrl" then
+ mkUrlSource fetchers spec
else if spec.type == "Container" then
mkContainerSource pkgs spec
else
@@ -192,16 +193,20 @@ let
sha256 = hash;
};
- mkTarballSource =
- { fetchTarball, ... }:
+ mkUrlSource =
+ {
+ fetchTarball,
+ fetchurl,
+ ...
+ }:
{
url,
- locked_url ? url,
hash,
+ unpack,
...
}:
- fetchTarball {
- url = locked_url;
+ (if unpack then fetchTarball else fetchurl) {
+ inherit url;
sha256 = hash;
};
@@ -211,16 +216,22 @@ let
image_name,
image_tag,
image_digest,
+ hash,
...
- }:
+ }@args:
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;
- };
+ pkgs.dockerTools.pullImage (
+ {
+ imageName = image_name;
+ imageDigest = image_digest;
+ finalImageTag = image_tag;
+ hash = hash;
+ }
+ // (if args.arch or null != null then { arch = args.arch; } else { })
+ );
+
in
mkFunctor (
{
@@ -231,7 +242,7 @@ mkFunctor (
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*
+ # See: <https://git.lix.systems/lix-project/lix/issues/1098>
if builtins.pathExists input then
builtins.fromJSON (builtins.readFile input)
else
@@ -242,7 +253,7 @@ mkFunctor (
throw "Unsupported input type ${builtins.typeOf input}, must be a path or an attrset";
version = data.version;
in
- if version == 7 then
+ if version == 8 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
index 71540c0f..0fb56679 100644
--- a/npins/full.nix
+++ b/npins/full.nix
@@ -1,8 +1,8 @@
_: let
- sources = import ./default.nix {};
-in {
- inherit sources;
+ sources = import ../unflake.nix;
+ loadFlake = input: sources."${input}";
- loadFlake = flakeInput: (import sources.flake-compat {src = sources."${flakeInput}";}).outputs;
- load = input: import 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
index 224906d9..60ce6665 100644
--- a/npins/sources.json
+++ b/npins/sources.json
@@ -1,32 +1,56 @@
{
"pins": {
- "agenix": {
+ "unflake_git_https---codeberg-org-bpeetz-flake-templates_ref_prime": {
"type": "Git",
"repository": {
- "type": "GitHub",
- "owner": "ryantm",
- "repo": "agenix"
+ "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-forks-atuin_ref_main": {
+ "type": "Git",
+ "repository": {
+ "type": "Git",
+ "url": "https://git.foss-syndicate.org/bpeetz/forks/atuin"
},
"branch": "main",
"submodules": false,
- "revision": "b027ee29d959fda4b60b57566d64c98a202e0feb",
- "url": "https://github.com/ryantm/agenix/archive/b027ee29d959fda4b60b57566d64c98a202e0feb.tar.gz",
- "hash": "sha256-9VnK6Oqai65puVJ4WYtCTvlJeXxMzAp/69HhQuTdl/I="
+ "revision": "3ba41b526d57368bfa8d151fd777865370c24f6b",
+ "url": null,
+ "hash": "sha256-6upceGLe7W2i00Qsv4fPQUuAIAUpHK8Tm/dsmoQ4SzI="
},
- "disko": {
+ "unflake_git_https---git-foss-syndicate-org-bpeetz-qmk_layout_ref_prime": {
"type": "Git",
"repository": {
- "type": "GitHub",
- "owner": "nix-community",
- "repo": "disko"
+ "type": "Git",
+ "url": "https://git.foss-syndicate.org/bpeetz/qmk_layout"
},
- "branch": "master",
+ "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": "63b4e7e6cf75307c1d26ac3762b886b5b0247267",
- "url": "https://github.com/nix-community/disko/archive/63b4e7e6cf75307c1d26ac3762b886b5b0247267.tar.gz",
- "hash": "sha256-8GzXDOXckDWwST8TY5DbwYFjdvQLlP7K9CLSVx6iTTo="
+ "revision": "65bf71bb6ef05ce684924a1dc248bb2e8e2869fb",
+ "url": null,
+ "hash": "sha256-IV7n/l3rFoz5UuavrDv0a7IIOPne0jDQVmJAR8bve8U="
},
- "flake-compat": {
+ "unflake_git_https---git-lix-systems-lix-project-flake-compat_ref_main": {
"type": "Git",
"repository": {
"type": "Forgejo",
@@ -40,7 +64,72 @@
"url": "https://git.lix.systems/lix-project/flake-compat/archive/382052b74656a369c5408822af3f2501e9b1af81.tar.gz",
"hash": "sha256-Eg9b/rq/ECYwNwEXs5i9wHyhxNI0JrYx2srdI2uZMaQ="
},
- "home-manager": {
+ "unflake_github_cachix_pre-commit-hooks-nix": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "cachix",
+ "repo": "pre-commit-hooks.nix"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "9f7e99119ece7705299595299f3b031f39356de1",
+ "url": "https://github.com/cachix/pre-commit-hooks.nix/archive/9f7e99119ece7705299595299f3b031f39356de1.tar.gz",
+ "hash": "sha256-wLMOrPgVyeF3XmP+qfYcLqnVdTxikdcSvbIY7rA9jTA="
+ },
+ "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_ipetkov_crane": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "ipetkov",
+ "repo": "crane"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "469fd08d0bcf6926321fa973c6777fbc87785dd7",
+ "url": "https://github.com/ipetkov/crane/archive/469fd08d0bcf6926321fa973c6777fbc87785dd7.tar.gz",
+ "hash": "sha256-SlXKwIRIhrOSAcTjCB3ftPLzJWZStQIPS7J1FlZPnKk="
+ },
+ "unflake_github_lnl7_nix-darwin_ref_master": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "lnl7",
+ "repo": "nix-darwin"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "a1fa429e945becaf60468600daf649be4ba0350c",
+ "url": "https://github.com/lnl7/nix-darwin/archive/a1fa429e945becaf60468600daf649be4ba0350c.tar.gz",
+ "hash": "sha256-rCPytmKNjctLloB6UgK5CRrHSwV4b0ygxtJLPPp8R14="
+ },
+ "unflake_github_nix-community_disko_ref_master": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "disko"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
+ "url": "https://github.com/nix-community/disko/archive/ff8702b4de27f72b4c78573dfb89ec74e36abdf1.tar.gz",
+ "hash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o="
+ },
+ "unflake_github_nix-community_home-manager": {
"type": "Git",
"repository": {
"type": "GitHub",
@@ -49,11 +138,24 @@
},
"branch": "master",
"submodules": false,
- "revision": "e4419d3123b780d5f4c0bceeace450424387638c",
- "url": "https://github.com/nix-community/home-manager/archive/e4419d3123b780d5f4c0bceeace450424387638c.tar.gz",
- "hash": "sha256-dGM+QCstz/DyLB68+JK5GWyMx4QSqmOJEVgZmy63d/g="
+ "revision": "d32537981c036473cf6990ae03176a5d84c43b29",
+ "url": "https://github.com/nix-community/home-manager/archive/d32537981c036473cf6990ae03176a5d84c43b29.tar.gz",
+ "hash": "sha256-HvlS1KDGXDjd1bNzzPvH1mkDJATlDAfVYfTh//wJBEA="
},
- "impermanence": {
+ "unflake_github_nix-community_home-manager_ref_master": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nix-community",
+ "repo": "home-manager"
+ },
+ "branch": "master",
+ "submodules": false,
+ "revision": "d32537981c036473cf6990ae03176a5d84c43b29",
+ "url": "https://github.com/nix-community/home-manager/archive/d32537981c036473cf6990ae03176a5d84c43b29.tar.gz",
+ "hash": "sha256-HvlS1KDGXDjd1bNzzPvH1mkDJATlDAfVYfTh//wJBEA="
+ },
+ "unflake_github_nix-community_impermanence_ref_master": {
"type": "Git",
"repository": {
"type": "GitHub",
@@ -66,7 +168,7 @@
"url": "https://github.com/nix-community/impermanence/archive/7b1d382faf603b6d264f58627330f9faa5cba149.tar.gz",
"hash": "sha256-03+JxvzmfwRu+5JafM0DLbxgHttOQZkUtDWBmeUkN8Y="
},
- "lanzaboote": {
+ "unflake_github_nix-community_lanzaboote_ref_v1-1-0": {
"type": "GitRelease",
"repository": {
"type": "GitHub",
@@ -77,24 +179,12 @@
"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="
- },
- "library": {
- "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="
+ "version": "v1.1.0",
+ "revision": "7c9a54a7f87b4539ddbd8bda09a8a5f5f9361aa9",
+ "url": "https://api.github.com/repos/nix-community/lanzaboote/tarball/refs/tags/v1.1.0",
+ "hash": "sha256-hqijVSEETttmo8Okql9/LG0Ua34hdciKW1a5zzlj8mU="
},
- "nix-index-database": {
+ "unflake_github_nix-community_nix-index-database_ref_main": {
"type": "Git",
"repository": {
"type": "GitHub",
@@ -103,11 +193,11 @@
},
"branch": "main",
"submodules": false,
- "revision": "2dea2b920e7127b3afa8506713f23536651de312",
- "url": "https://github.com/nix-community/nix-index-database/archive/2dea2b920e7127b3afa8506713f23536651de312.tar.gz",
- "hash": "sha256-2KUbS/HhzWW3kkkY1+RiWj9mJ76VEXw8lBJzcCFKzfY="
+ "revision": "058b1f9381fa79fcda49982370a750ff92dbba43",
+ "url": "https://github.com/nix-community/nix-index-database/archive/058b1f9381fa79fcda49982370a750ff92dbba43.tar.gz",
+ "hash": "sha256-ripjZa7BBLwL1uS5VJF3s/VpZpWt5ZIQEvkJ/FJNpQw="
},
- "nixos-generators": {
+ "unflake_github_nix-community_nixos-generators_ref_master": {
"type": "Git",
"repository": {
"type": "GitHub",
@@ -120,26 +210,20 @@
"url": "https://github.com/nix-community/nixos-generators/archive/8946737ff703382fda7623b9fab071d037e897d5.tar.gz",
"hash": "sha256-nnVmNNKBi1YiBNPhKclNYDORoHkuKipoz7EtVnXO50A="
},
- "nixpkgs": {
- "type": "Channel",
- "name": "nixpkgs-unstable",
- "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre993588.68a8af93ff42/nixexprs.tar.xz",
- "hash": "sha256-Z5mLDoR8p0d7psIY4LnyaHHRykXngMcWXTZ9JWvtvPc="
- },
- "nixpkgs-stable": {
+ "unflake_github_nix-community_nixpkgs-lib": {
"type": "Git",
"repository": {
"type": "GitHub",
- "owner": "NixOS",
- "repo": "nixpkgs"
+ "owner": "nix-community",
+ "repo": "nixpkgs.lib"
},
- "branch": "nixos-25.11",
+ "branch": "master",
"submodules": false,
- "revision": "0c88e1f2bdb93d5999019e99cb0e61e1fe2af4c5",
- "url": "https://github.com/NixOS/nixpkgs/archive/0c88e1f2bdb93d5999019e99cb0e61e1fe2af4c5.tar.gz",
- "hash": "sha256-q/nkKLDtHIyLjZpKhWk3cSK5IYsFqtMd6UtXF3ddjgA="
+ "revision": "db3f255737b94216eb71cce308e2912cf6bc2d7c",
+ "url": "https://github.com/nix-community/nixpkgs.lib/archive/db3f255737b94216eb71cce308e2912cf6bc2d7c.tar.gz",
+ "hash": "sha256-ePjCwr1sNm9NYUqywL7QfK3JnlS015msC+eBu2zKlp8="
},
- "nixvim": {
+ "unflake_github_nix-community_nixvim_ref_main": {
"type": "Git",
"repository": {
"type": "GitHub",
@@ -148,47 +232,141 @@
},
"branch": "main",
"submodules": false,
- "revision": "7986a276960b4dfaed9bb2c3c438b5ba71ae08f1",
- "url": "https://github.com/nix-community/nixvim/archive/7986a276960b4dfaed9bb2c3c438b5ba71ae08f1.tar.gz",
- "hash": "sha256-DFwjggMV+nzCZpwK6Obxj9F+P59rbLVowGqHETfctBk="
+ "revision": "702008d2b3dd1d032a953e3bdd2532531aac0639",
+ "url": "https://github.com/nix-community/nixvim/archive/702008d2b3dd1d032a953e3bdd2532531aac0639.tar.gz",
+ "hash": "sha256-vVYo8fbgTgXBU47dLmnUcfetOI/MLui+wXU44x3ZeqM="
},
- "qmk_layout": {
+ "unflake_github_nix-systems_default": {
"type": "Git",
"repository": {
- "type": "Git",
- "url": "https://git.foss-syndicate.org/bpeetz/qmk_layout"
+ "type": "GitHub",
+ "owner": "nix-systems",
+ "repo": "default"
},
- "branch": "prime",
+ "branch": "main",
"submodules": false,
- "revision": "4dff2e6ba5c9c80de3e3d2213ad28802814c3bba",
- "url": null,
- "hash": "sha256-dv5P3ahDICDacdzEmcyxrtKgbRWhVFiKQaLEz+WniGM="
+ "revision": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "url": "https://github.com/nix-systems/default/archive/da67096a3b9bf56a91d16901293e51ba5b49a27e.tar.gz",
+ "hash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768="
},
- "serverphone": {
+ "unflake_github_nix-systems_default_ref_future-26-11": {
"type": "Git",
"repository": {
- "type": "Git",
- "url": "https://codeberg.org/vhack.eu/serverphone.git"
+ "type": "GitHub",
+ "owner": "nix-systems",
+ "repo": "default"
},
- "branch": "prime",
+ "branch": "future-26.11",
"submodules": false,
- "revision": "2ac6ef2b49f4a7b8b0490a068bc2dba6767f0b7d",
- "url": null,
- "hash": "sha256-M2nQ9tuvt++ukXCdr4IhGqrQqpPpmjjlOZeAKjHQung="
+ "revision": "c29398b59d2048c4ab79345812849c9bd15e9150",
+ "url": "https://github.com/nix-systems/default/archive/c29398b59d2048c4ab79345812849c9bd15e9150.tar.gz",
+ "hash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w="
},
- "templates": {
+ "unflake_github_nix-systems_x86_64-linux": {
"type": "Git",
"repository": {
- "type": "Git",
- "url": "https://codeberg.org/bpeetz/flake-templates.git"
+ "type": "GitHub",
+ "owner": "nix-systems",
+ "repo": "x86_64-linux"
},
- "branch": "prime",
+ "branch": "main",
"submodules": false,
- "revision": "0294fb03df7c265f8fae24a9e775d69a953bbf03",
- "url": null,
- "hash": "sha256-rI1qMFzbXVjfEvmf2OS4upnibXpL21its6cCXqhz86o="
+ "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": "95ca1e203c0750115fd4a6f17d5a245dfe6b1edd",
+ "url": "https://github.com/nixos/nixpkgs/archive/95ca1e203c0750115fd4a6f17d5a245dfe6b1edd.tar.gz",
+ "hash": "sha256-JC9PjqKYG9ve5U8aDOLQipp3+KLANBHUvGdLZlxzdKI="
+ },
+ "unflake_github_nixos_nixpkgs_ref_nixos-unstable": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nixos",
+ "repo": "nixpkgs"
+ },
+ "branch": "nixos-unstable",
+ "submodules": false,
+ "revision": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
+ "url": "https://github.com/nixos/nixpkgs/archive/b5aa0fbd538984f6e3d201be0005b4463d8b09f8.tar.gz",
+ "hash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ="
+ },
+ "unflake_github_nixos_nixpkgs_ref_nixos-unstable-small": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nixos",
+ "repo": "nixpkgs"
+ },
+ "branch": "nixos-unstable-small",
+ "submodules": false,
+ "revision": "8465ac306246eef81317cd771e7c27c8ac415aef",
+ "url": "https://github.com/nixos/nixpkgs/archive/8465ac306246eef81317cd771e7c27c8ac415aef.tar.gz",
+ "hash": "sha256-xD+RttHOID/wIQ9MglPYjWI7hJxAn16OPOZQO/p5LEw="
+ },
+ "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable": {
+ "type": "Git",
+ "repository": {
+ "type": "GitHub",
+ "owner": "nixos",
+ "repo": "nixpkgs"
+ },
+ "branch": "nixpkgs-unstable",
+ "submodules": false,
+ "revision": "e52c192be9d7b2c4bd4aed326c8731b35f8bb75c",
+ "url": "https://github.com/nixos/nixpkgs/archive/e52c192be9d7b2c4bd4aed326c8731b35f8bb75c.tar.gz",
+ "hash": "sha256-D5jO0ME1lA9bDHnd5kVawBwItG/N4oZr3FlXmMzLec8="
},
- "treefmt-nix": {
+ "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",
@@ -197,10 +375,49 @@
},
"branch": "main",
"submodules": false,
- "revision": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
- "url": "https://github.com/numtide/treefmt-nix/archive/790751ff7fd3801feeaf96d7dc416a8d581265ba.tar.gz",
- "hash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0="
+ "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": "13139aefa973f3d96c60c0fbab801de058ae25ca",
+ "url": "https://github.com/oxalica/rust-overlay/archive/13139aefa973f3d96c60c0fbab801de058ae25ca.tar.gz",
+ "hash": "sha256-5eqDcnBjb1424HRQdnhuhNOBZguq1Z2tqSa2OMF/m2c="
+ },
+ "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
+ "version": 8
}
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 a8243fdf..5ea7cdd7 100644
--- a/pkgs/by-name/fu/fupdate/Cargo.lock
+++ b/pkgs/by-name/fu/fupdate/Cargo.lock
@@ -47,7 +47,7 @@ version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys",
]
[[package]]
@@ -58,14 +58,14 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"once_cell_polyfill",
- "windows-sys 0.61.2",
+ "windows-sys",
]
[[package]]
name = "anyhow"
-version = "1.0.102"
+version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
[[package]]
name = "clap"
@@ -91,9 +91,9 @@ dependencies = [
[[package]]
name = "clap_complete"
-version = "4.6.3"
+version = "4.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "660c0520455b1013b9bcb0393d5f643d7e4454fb69c915b8d6d2aa0e9a45acc3"
+checksum = "97bf4965940c2382204c0ded6dd3dd48c0c4e872f1e76fb1bf94f45991a2cb6a"
dependencies = [
"clap",
"clap_lex",
@@ -142,11 +142,11 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "is_executable"
-version = "1.0.5"
+version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baabb8b4867b26294d818bf3f651a454b6901431711abb96e296245888d6e8c4"
+checksum = "82cb6a9f675da968c63b6208c641b9dca58fc0133ae53375736b1767b0cab8bd"
dependencies = [
- "windows-sys 0.60.2",
+ "windows-sys",
]
[[package]]
@@ -172,9 +172,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.45"
+version = "1.0.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
+checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
dependencies = [
"proc-macro2",
]
@@ -193,9 +193,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
-version = "2.0.117"
+version = "2.0.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
dependencies = [
"proc-macro2",
"quote",
@@ -222,83 +222,9 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
name = "windows-sys"
-version = "0.60.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
-dependencies = [
- "windows-targets",
-]
-
-[[package]]
-name = "windows-sys"
version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
dependencies = [
"windows-link",
]
-
-[[package]]
-name = "windows-targets"
-version = "0.53.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
-dependencies = [
- "windows-link",
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_gnullvm",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
-]
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
-
-[[package]]
-name = "windows_i686_gnullvm"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
diff --git a/pkgs/by-name/fu/fupdate/Cargo.toml b/pkgs/by-name/fu/fupdate/Cargo.toml
index e5d599db..3f4386f1 100644
--- a/pkgs/by-name/fu/fupdate/Cargo.toml
+++ b/pkgs/by-name/fu/fupdate/Cargo.toml
@@ -16,9 +16,9 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-anyhow = "1.0.102"
+anyhow = "1.0.103"
clap = { version = "4.6.1", features = ["derive"] }
-clap_complete = { version = "4.6.3", features = ["unstable-dynamic"] }
+clap_complete = { version = "4.6.6", features = ["unstable-dynamic"] }
[profile.release]
lto = true
diff --git a/pkgs/by-name/fu/fupdate/flake.nix b/pkgs/by-name/fu/fupdate/flake.nix
index 63d696e1..22b0957f 100644
--- a/pkgs/by-name/fu/fupdate/flake.nix
+++ b/pkgs/by-name/fu/fupdate/flake.nix
@@ -10,13 +10,13 @@
{
description = "This is a Nix flake update manager.";
- inputs = { };
+ inputs = {};
outputs = {...}: let
system = "x86_64-linux";
sources = import ../../../../npins/full.nix {};
- pkgs = sources.load "nixpkgs";
+ pkgs = (sources.loadFlake "nixpkgs").legacyPackages."${system}";
in {
devShells."${system}".default = pkgs.mkShell {
packages = [
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/gi/git-cgit/git-cgit.sh b/pkgs/by-name/gi/git-cgit/git-cgit.sh
new file mode 100755
index 00000000..d24fda15
--- /dev/null
+++ b/pkgs/by-name/gi/git-cgit/git-cgit.sh
@@ -0,0 +1,131 @@
+#!/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>.
+
+NAME="git-cgit"
+
+not_empty() {
+ arg="$1"
+ name="$2"
+
+ if [ "$arg" = "" ]; then
+ echo 1>&2 "flag '$name' is empty"
+ exit 2
+ fi
+}
+
+help() {
+ cat <<EOF
+Create a cgit repo to push the current repo to.
+
+USAGE:
+ $NAME [OPTIONS] --git URL..
+
+OPTIONS:
+ --help | -h
+ Display this help and exit.
+ --git URL
+ git upstream URL.
+ Should be in the form:
+ 'ssh://git@<url>/path/to/repo'
+ --desc DESC
+ Optional description (will be read from './.git/description' otherwise).
+ --defbranch
+ Optional default branch
+ --cgit-owner
+ Optional cgit owner
+EOF
+}
+
+git_url=""
+ssh_url=""
+url_path=""
+desc="$(cat "$(git rev-parse --show-toplevel)/.git/description")"
+
+cgit_owner="$(id --name -u)"
+defbranch="$(git branch --show-current)"
+
+while [ "$#" -ne 0 ]; do
+ case "$1" in
+ "--help" | "-h")
+ help
+ exit 0
+ ;;
+ "--git")
+ shift 1
+ git_url="$1"
+ ;;
+ "--desc")
+ shift 1
+ desc="$1"
+ ;;
+ "--defbranch")
+ shift 1
+ defbranch="$1"
+ ;;
+ "--cgit-owner")
+ shift 1
+ cgit_owner="$1"
+ ;;
+ esac
+ shift 1
+done
+
+# In the form git@<url>
+ssh_url="${git_url#ssh://}"
+while [ "$(dirname "$ssh_url")" != "." ]; do
+ ssh_url="$(dirname "$ssh_url")"
+done
+url_path="${git_url#ssh://"$ssh_url"}"
+url_path="${url_path#/}"
+
+not_empty "$git_url" "--git"
+not_empty "$ssh_url" "--git <indirectly>"
+not_empty "$url_path" "--git <indirectly>"
+
+not_empty "$desc" "--desc"
+not_empty "$defbranch" "--defbranch"
+not_empty "$cgit_owner" "--cgit-owner"
+
+cat <<EOF
+Initializing repo with following values:
+ --git -> '$git_url'
+ <ssh_url> -> '$ssh_url'
+ <url_path> -> '$url_path'
+
+ --desc -> '$desc'
+ --defbranch -> '$defbranch'
+ --cgit-owner -> '$cgit_owner'
+
+EOF
+
+printf "Continue [y/N]? "
+read -r continue
+if [ "$continue" != "y" ]; then
+ echo 1>&2 "Not continuing.."
+ exit 1
+fi
+
+set -x
+
+git remote remove origin
+git remote add origin "$git_url"
+
+git push --set-upstream origin "$defbranch"
+
+ssh "$ssh_url" -- perms "$url_path" + READERS @all
+ssh "$ssh_url" -- desc "$url_path" "$desc"
+
+ssh "$ssh_url" -- config "$url_path" --add cgit.defbranch "$defbranch"
+ssh "$ssh_url" -- config "$url_path" --add cgit.owner "$cgit_owner"
+
+ssh "$ssh_url" -- info
+# vim: ft=sh
diff --git a/pkgs/by-name/gi/git-cgit/package.nix b/pkgs/by-name/gi/git-cgit/package.nix
new file mode 100644
index 00000000..b64c5e84
--- /dev/null
+++ b/pkgs/by-name/gi/git-cgit/package.nix
@@ -0,0 +1,28 @@
+# 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>.
+{
+ writeShellApplication,
+ # Dependencies
+ coreutils,
+ git,
+ openssh,
+}:
+writeShellApplication {
+ name = "git-cgit";
+ text = builtins.readFile ./git-cgit.sh;
+
+ inheritPath = false;
+
+ runtimeInputs = [
+ coreutils
+ git
+ openssh
+ ];
+}
diff --git a/pkgs/by-name/hi/hibernate/hibernate.sh b/pkgs/by-name/hi/hibernate/hibernate.sh
index 4a68e0d7..5f2a524a 100755
--- a/pkgs/by-name/hi/hibernate/hibernate.sh
+++ b/pkgs/by-name/hi/hibernate/hibernate.sh
@@ -10,7 +10,8 @@
# 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>.
-# TODO(@bpeetz): This functionality could be moved to `tskm`. <2025-04-14>
+# TODO(@bpeetz): The task context reset functionality could be moved to `tskm`. <2025-04-14>
+# TODO: This whole script should be a systemd service with Before=hibernate.target <2026-06-26>
context="$(task _get rc.context)"
[ "$context" ] && task context none
@@ -19,6 +20,10 @@ context="$(task _get rc.context)"
active="$(task +ACTIVE _ids)"
[ "$active" ] && task stop "$active"
+# Make sure that the swayidle service is actually running. Otherwise we don't get a
+# screenlock upon hibernate-resume.
+systemctl --user start swayidle.service
+
systemctl hibernate "$@"
# vim: ft=sh
diff --git a/pkgs/by-name/lf/lf-make-map/Cargo.lock b/pkgs/by-name/lf/lf-make-map/Cargo.lock
index 0333c4e0..799f83ef 100644
--- a/pkgs/by-name/lf/lf-make-map/Cargo.lock
+++ b/pkgs/by-name/lf/lf-make-map/Cargo.lock
@@ -72,27 +72,33 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.102"
+version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
[[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.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
[[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.61"
+version = "1.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d"
+checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -106,9 +112,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "chrono"
-version = "0.4.44"
+version = "0.4.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
+checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
dependencies = [
"iana-time-zone",
"js-sys",
@@ -170,6 +176,40 @@ 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"
@@ -254,13 +294,12 @@ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
[[package]]
name = "js-sys"
-version = "0.3.98"
+version = "0.3.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08"
+checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102"
dependencies = [
"cfg-if",
"futures-util",
- "once_cell",
"wasm-bindgen",
]
@@ -279,6 +318,7 @@ version = "0.1.0"
dependencies = [
"anyhow",
"clap",
+ "crossterm",
"keymaps",
"log",
"stderrlog",
@@ -292,10 +332,43 @@ 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 = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
name = "log"
-version = "0.4.29"
+version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
+
+[[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"
@@ -319,6 +392,29 @@ 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"
@@ -335,14 +431,36 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.45"
+version = "1.0.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
+checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
dependencies = [
"proc-macro2",
]
[[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"
@@ -358,10 +476,47 @@ 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 = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+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"
@@ -370,6 +525,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
[[package]]
+name = "smallvec"
+version = "1.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
+
+[[package]]
name = "stderrlog"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -390,9 +551,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
-version = "2.0.117"
+version = "2.0.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
dependencies = [
"proc-macro2",
"quote",
@@ -460,10 +621,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.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790"
+checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4"
dependencies = [
"cfg-if",
"once_cell",
@@ -474,9 +641,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578"
+checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -484,9 +651,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2"
+checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -497,9 +664,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441"
+checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24"
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 00e1e9dc..8411a4b9 100644
--- a/pkgs/by-name/lf/lf-make-map/Cargo.toml
+++ b/pkgs/by-name/lf/lf-make-map/Cargo.toml
@@ -17,9 +17,10 @@ edition = "2024"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-anyhow = "1.0.102"
+anyhow = "1.0.103"
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.33"
stderrlog = "0.6.0"
walkdir = "2.5.0"
diff --git a/pkgs/by-name/lf/lf-make-map/flake.nix b/pkgs/by-name/lf/lf-make-map/flake.nix
index 9cd88c70..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 = { };
+ inputs = {};
outputs = {...}: let
system = "x86_64-linux";
sources = import ../../../../npins/full.nix {};
- pkgs = sources.load "nixpkgs";
+ 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..6d88d5af 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
@@ -48,8 +48,8 @@ impl PartialOrd for MapKey {
}
impl MapKey {
- pub fn new_from_part_path(part_path: &str, resolution: usize) -> Vec<Self> {
- let key = Self::part_path_to_key(part_path, resolution);
+ pub fn new_from_part_path(part_path: &str, resolution: usize, full_path: &str) -> Vec<Self> {
+ let key = Self::path_part_to_key(part_path, resolution, Some(full_path));
key.chars()
.map(|ch| Self {
@@ -63,7 +63,7 @@ impl MapKey {
pub fn new_ones_from_path(path: &str, number_of_chars: usize) -> Vec<Self> {
let key: Vec<MapKey> = path
.split('/')
- .flat_map(|part| Self::new_from_part_path(part, number_of_chars))
+ .flat_map(|part| Self::new_from_part_path(part, number_of_chars, path))
.collect();
debug!(
@@ -80,14 +80,13 @@ impl MapKey {
// debug!("Incrementing: '{}' ('{}')", &self, &self.part_path);
let added_chars = if new_resolution < self.part_path.len() {
- MapKey::part_path_to_key(&self.part_path, new_resolution)
+ MapKey::path_part_to_key(&self.part_path, new_resolution, None)
} else {
let mut generated_chars =
- MapKey::part_path_to_key(&self.part_path, self.part_path.len());
+ MapKey::path_part_to_key(&self.part_path, self.part_path.len(), None);
generated_chars.extend(
(0..(new_resolution - self.part_path.len()))
- .into_iter()
.map(|_| self.part_path.chars().last().expect("This will exists")),
);
@@ -110,19 +109,24 @@ 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 {
+ fn path_part_to_key(part: &str, number_of_chars: usize, full_path: Option<&str>) -> String {
+ fn make(pat: char, part: &str, number_of_chars: usize, full_path: Option<&str>) -> String {
let mut acc = String::new();
- if !part.split(pat).all(|part| part.len() > 0) {
+ if part.split(pat).all(|split| split.is_empty()) {
panic!(
"\
-Can't turn this path '{}' to a mapping.
-This should not happen, please report the bug!",
- part
+Failed to split path part `{part}`, with pattern `{pat}`, because all resulting split parts are empty. {}
+This should not happen, please report this bug!", {
+ if let Some(full_path) = full_path {
+ format!("(Full path was: `{full_path}`)")
+ } else {
+ String::new()
+ }
+ }
)
}
@@ -149,9 +153,16 @@ This should not happen, please report the bug!",
}
let value = if part.contains('_') && !part.starts_with('_') && !part.ends_with('_') {
- make('_', part, number_of_chars)
+ make('_', part, number_of_chars, full_path)
} else if part.contains('-') && !part.starts_with('-') && !part.ends_with('-') {
- make('-', part, number_of_chars)
+ make('-', part, number_of_chars, full_path)
+ } 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 3d2d31ac..971668d3 100644
--- a/pkgs/by-name/mp/mpdpopm/Cargo.lock
+++ b/pkgs/by-name/mp/mpdpopm/Cargo.lock
@@ -78,9 +78,18 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.102"
+version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
[[package]]
name = "ascii-canvas"
@@ -99,7 +108,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -113,9 +122,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 +143,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 +158,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 +170,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.11.1"
+version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
+checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
[[package]]
name = "block-buffer"
@@ -182,9 +191,15 @@ checksum = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9"
[[package]]
name = "bumpalo"
-version = "3.20.2"
+version = "3.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
+
+[[package]]
+name = "by_address"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06"
[[package]]
name = "bytemuck"
@@ -194,9 +209,9 @@ checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec"
[[package]]
name = "bytes"
-version = "1.11.1"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
+checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593"
[[package]]
name = "castaway"
@@ -209,9 +224,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.2.61"
+version = "1.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d"
+checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -230,10 +245,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
+name = "chacha20"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
+dependencies = [
+ "cfg-if",
+ "cpufeatures 0.3.0",
+ "rand_core 0.10.1",
+]
+
+[[package]]
name = "chrono"
-version = "0.4.44"
+version = "0.4.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
+checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
dependencies = [
"iana-time-zone",
"js-sys",
@@ -273,7 +299,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -290,9 +316,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 +353,27 @@ dependencies = [
]
[[package]]
+name = "cpufeatures"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "critical-section"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
+
+[[package]]
name = "crossterm"
version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"crossterm_winapi",
"derive_more",
"document-features",
@@ -393,7 +434,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -404,7 +445,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
dependencies = [
"darling_core",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -418,9 +459,6 @@ name = "deranged"
version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
-dependencies = [
- "powerfmt",
-]
[[package]]
name = "derive_more"
@@ -441,7 +479,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustc_version",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -465,9 +503,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"
@@ -514,6 +552,12 @@ dependencies = [
]
[[package]]
+name = "fast-srgb8"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1"
+
+[[package]]
name = "filedescriptor"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -622,7 +666,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -678,15 +722,14 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.4.2"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
+checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
dependencies = [
"cfg-if",
"libc",
"r-efi 6.0.0",
- "wasip2",
- "wasip3",
+ "rand_core 0.10.1",
]
[[package]]
@@ -711,9 +754,14 @@ 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"
+dependencies = [
+ "allocator-api2",
+ "equivalent",
+ "foldhash 0.2.0",
+]
[[package]]
name = "heck"
@@ -752,12 +800,6 @@ dependencies = [
]
[[package]]
-name = "id-arena"
-version = "2.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
-
-[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -770,9 +812,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
dependencies = [
"equivalent",
- "hashbrown 0.17.0",
- "serde",
- "serde_core",
+ "hashbrown 0.17.1",
]
[[package]]
@@ -794,7 +834,7 @@ dependencies = [
"indoc",
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -820,13 +860,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "js-sys"
-version = "0.3.98"
+version = "0.3.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08"
+checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102"
dependencies = [
"cfg-if",
"futures-util",
- "once_cell",
"wasm-bindgen",
]
@@ -847,7 +886,7 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653"
dependencies = [
- "cpufeatures",
+ "cpufeatures 0.2.17",
]
[[package]]
@@ -858,12 +897,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",
@@ -880,12 +919,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]]
@@ -895,24 +933,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
-name = "leb128fmt"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
-
-[[package]]
name = "libc"
version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
[[package]]
+name = "libm"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
+
+[[package]]
name = "line-clipping"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f50e8f47623268b5407192d26876c4d7f89d686ca130fdc53bced4814cd29f8"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
]
[[package]]
@@ -938,17 +976,17 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.29"
+version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
[[package]]
name = "lru"
-version = "0.16.4"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39"
+checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9"
dependencies = [
- "hashbrown 0.16.1",
+ "hashbrown 0.17.1",
]
[[package]]
@@ -972,9 +1010,9 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.8.0"
+version = "2.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
[[package]]
name = "memmem"
@@ -999,9 +1037,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",
@@ -1025,7 +1063,7 @@ dependencies = [
"lazy_static",
"os_str_bytes",
"pin-project",
- "rand 0.9.4",
+ "rand 0.10.1",
"ratatui",
"regex",
"serde",
@@ -1049,7 +1087,7 @@ version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"cfg-if",
"cfg_aliases",
"libc",
@@ -1077,9 +1115,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"
@@ -1089,7 +1127,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -1141,6 +1179,30 @@ dependencies = [
]
[[package]]
+name = "palette"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6"
+dependencies = [
+ "approx",
+ "fast-srgb8",
+ "libm",
+ "palette_derive",
+]
+
+[[package]]
+name = "palette_derive"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30"
+dependencies = [
+ "by_address",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.118",
+]
+
+[[package]]
name = "parking_lot"
version = "0.12.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1193,7 +1255,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -1208,11 +1270,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",
]
@@ -1223,7 +1286,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
dependencies = [
"phf_macros",
- "phf_shared",
+ "phf_shared 0.11.3",
]
[[package]]
@@ -1233,7 +1296,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
dependencies = [
"phf_generator",
- "phf_shared",
+ "phf_shared 0.11.3",
]
[[package]]
@@ -1242,7 +1305,7 @@ version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
dependencies = [
- "phf_shared",
+ "phf_shared 0.11.3",
"rand 0.8.6",
]
@@ -1253,10 +1316,10 @@ 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",
+ "syn 2.0.118",
]
[[package]]
@@ -1269,6 +1332,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"
@@ -1276,22 +1348,22 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
[[package]]
name = "pin-project"
-version = "1.1.12"
+version = "1.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbf0d9e68100b3a7989b4901972f265cd542e560a3a8a724e1e20322f4d06ce9"
+checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
-version = "1.1.12"
+version = "1.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a990e22f43e84855daf260dded30524ef4a9021cc7541c26540500a50b624389"
+checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -1313,31 +1385,12 @@ 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"
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
[[package]]
-name = "prettyplease"
-version = "0.2.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
-dependencies = [
- "proc-macro2",
- "syn 2.0.117",
-]
-
-[[package]]
name = "proc-macro2"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1348,9 +1401,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.45"
+version = "1.0.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
+checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
dependencies = [
"proc-macro2",
]
@@ -1378,22 +1431,13 @@ dependencies = [
[[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.3",
+ "rand_core 0.10.1",
]
[[package]]
@@ -1404,40 +1448,41 @@ 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"
-version = "0.30.0"
+version = "0.30.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1ce67fb8ba4446454d1c8dbaeda0557ff5e94d39d5e5ed7f10a65eb4c8266bc"
+checksum = "3274ba0a2c5e1bcad2a2005d20f4dc59dad26b2eb0940fb094500dba4099d57d"
dependencies = [
"instability",
"ratatui-core",
"ratatui-crossterm",
"ratatui-macros",
+ "ratatui-termina",
"ratatui-termwiz",
"ratatui-widgets",
+ "serde",
]
[[package]]
name = "ratatui-core"
-version = "0.1.0"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ef8dea09a92caaf73bff7adb70b76162e5937524058a7e5bff37869cbbec293"
+checksum = "cbb175c433c8e28a809d1f5773a2ae96e68c0ce40db865cbab1020bf33ae479c"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"compact_str",
- "hashbrown 0.16.1",
- "indoc",
+ "critical-section",
+ "hashbrown 0.17.1",
"itertools",
"kasuari",
"lru",
+ "palette",
+ "serde",
"strum",
"thiserror 2.0.18",
"unicode-segmentation",
@@ -1447,9 +1492,9 @@ dependencies = [
[[package]]
name = "ratatui-crossterm"
-version = "0.1.0"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "577c9b9f652b4c121fb25c6a391dd06406d3b092ba68827e6d2f09550edc54b3"
+checksum = "567584a3b0e6a8203c23de40b4861497266725eb5363dbfd18a1edd603cca9f0"
dependencies = [
"cfg-if",
"crossterm",
@@ -1459,19 +1504,30 @@ dependencies = [
[[package]]
name = "ratatui-macros"
-version = "0.7.0"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7f1342a13e83e4bb9d0b793d0ea762be633f9582048c892ae9041ef39c936f4"
+checksum = "ed7dc68daa7498a43e4d68e0eb078427e10c38fbcfbb1e42d955f1fa2140d814"
dependencies = [
"ratatui-core",
"ratatui-widgets",
]
[[package]]
-name = "ratatui-termwiz"
+name = "ratatui-termina"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f76fe0bd0ed4295f0321b1676732e2454024c15a35d01904ddb315afd3d545c"
+checksum = "c0bf912d9e66f057a759d92e386a280ea886b352ab757d6ac4d653c7ed2c43c2"
+dependencies = [
+ "instability",
+ "ratatui-core",
+ "termina",
+]
+
+[[package]]
+name = "ratatui-termwiz"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "faf03e0380b7744054d6cb74224fe3adf062a029754933f575ca1e3b4c2ce977"
dependencies = [
"ratatui-core",
"termwiz",
@@ -1479,17 +1535,18 @@ dependencies = [
[[package]]
name = "ratatui-widgets"
-version = "0.3.0"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7dbfa023cd4e604c2553483820c5fe8aa9d71a42eea5aa77c6e7f35756612db"
+checksum = "66e3d19bcc9130ca376277d93b60767ff121ace3be06f5f95f81dd68956407d1"
dependencies = [
- "bitflags 2.11.1",
- "hashbrown 0.16.1",
+ "bitflags 2.13.0",
+ "hashbrown 0.17.1",
"indoc",
"instability",
"itertools",
"line-clipping",
"ratatui-core",
+ "serde",
"strum",
"time",
"unicode-segmentation",
@@ -1502,14 +1559,14 @@ version = "0.5.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
]
[[package]]
name = "regex"
-version = "1.12.3"
+version = "1.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
+checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba"
dependencies = [
"aho-corasick",
"memchr",
@@ -1530,9 +1587,9 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.8.10"
+version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
+checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
[[package]]
name = "rustc_version"
@@ -1549,7 +1606,7 @@ version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"errno",
"libc",
"linux-raw-sys",
@@ -1616,14 +1673,14 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[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",
@@ -1648,7 +1705,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [
"cfg-if",
- "cpufeatures",
+ "cpufeatures 0.2.17",
"digest",
]
@@ -1673,9 +1730,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"
@@ -1722,15 +1779,15 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
[[package]]
name = "smallvec"
-version = "1.15.1"
+version = "1.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
[[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",
@@ -1744,13 +1801,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",
]
@@ -1762,23 +1819,23 @@ 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"
dependencies = [
"strum_macros",
]
[[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",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -1794,9 +1851,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.117"
+version = "2.0.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
dependencies = [
"proc-macro2",
"quote",
@@ -1813,6 +1870,19 @@ dependencies = [
]
[[package]]
+name = "termina"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9048a889effe34a5cddee0af7f53285198b16dca3be510858d38dfdb3e62a04e"
+dependencies = [
+ "bitflags 2.13.0",
+ "parking_lot",
+ "rustix",
+ "signal-hook",
+ "windows-sys",
+]
+
+[[package]]
name = "terminfo"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1841,7 +1911,7 @@ checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7"
dependencies = [
"anyhow",
"base64",
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"fancy-regex",
"filedescriptor",
"finl_unicode",
@@ -1901,7 +1971,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -1912,7 +1982,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -1926,9 +1996,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.47"
+version = "0.3.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
+checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50"
dependencies = [
"deranged",
"libc",
@@ -1941,15 +2011,15 @@ dependencies = [
[[package]]
name = "time-core"
-version = "0.1.8"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
+checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
[[package]]
name = "tokio"
-version = "1.52.2"
+version = "1.52.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386"
+checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe"
dependencies = [
"bytes",
"libc",
@@ -1969,14 +2039,14 @@ checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[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",
@@ -1984,14 +2054,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",
]
@@ -2002,7 +2072,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.2",
+ "winnow",
]
[[package]]
@@ -2030,7 +2100,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -2074,9 +2144,9 @@ dependencies = [
[[package]]
name = "typenum"
-version = "1.20.0"
+version = "1.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de"
+checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
[[package]]
name = "ucd-trie"
@@ -2092,9 +2162,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"
@@ -2127,12 +2197,12 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
-version = "1.23.1"
+version = "1.23.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76"
+checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53"
dependencies = [
"atomic",
- "getrandom 0.4.2",
+ "getrandom 0.4.3",
"js-sys",
"wasm-bindgen",
]
@@ -2176,27 +2246,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasip2"
-version = "1.0.3+wasi-0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
-dependencies = [
- "wit-bindgen 0.57.1",
-]
-
-[[package]]
-name = "wasip3"
-version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
+version = "1.0.4+wasi-0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
+checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"
dependencies = [
- "wit-bindgen 0.51.0",
+ "wit-bindgen",
]
[[package]]
name = "wasm-bindgen"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790"
+checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4"
dependencies = [
"cfg-if",
"once_cell",
@@ -2207,9 +2268,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578"
+checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -2217,61 +2278,27 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2"
+checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e"
dependencies = [
"bumpalo",
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441"
+checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24"
dependencies = [
"unicode-ident",
]
[[package]]
-name = "wasm-encoder"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
-dependencies = [
- "leb128fmt",
- "wasmparser",
-]
-
-[[package]]
-name = "wasm-metadata"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
-dependencies = [
- "anyhow",
- "indexmap",
- "wasm-encoder",
- "wasmparser",
-]
-
-[[package]]
-name = "wasmparser"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
-dependencies = [
- "bitflags 2.11.1",
- "hashbrown 0.15.5",
- "indexmap",
- "semver",
-]
-
-[[package]]
name = "wezterm-bidi"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2395,7 +2422,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -2406,7 +2433,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.117",
+ "syn 2.0.118",
]
[[package]]
@@ -2444,24 +2471,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.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0"
-
-[[package]]
-name = "wit-bindgen"
-version = "0.51.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
-dependencies = [
- "wit-bindgen-rust-macro",
-]
+checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1"
[[package]]
name = "wit-bindgen"
@@ -2470,105 +2482,6 @@ 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"
-checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
-dependencies = [
- "anyhow",
- "heck",
- "wit-parser",
-]
-
-[[package]]
-name = "wit-bindgen-rust"
-version = "0.51.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
-dependencies = [
- "anyhow",
- "heck",
- "indexmap",
- "prettyplease",
- "syn 2.0.117",
- "wasm-metadata",
- "wit-bindgen-core",
- "wit-component",
-]
-
-[[package]]
-name = "wit-bindgen-rust-macro"
-version = "0.51.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
-dependencies = [
- "anyhow",
- "prettyplease",
- "proc-macro2",
- "quote",
- "syn 2.0.117",
- "wit-bindgen-core",
- "wit-bindgen-rust",
-]
-
-[[package]]
-name = "wit-component"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
-dependencies = [
- "anyhow",
- "bitflags 2.11.1",
- "indexmap",
- "log",
- "serde",
- "serde_derive",
- "serde_json",
- "wasm-encoder",
- "wasm-metadata",
- "wasmparser",
- "wit-parser",
-]
-
-[[package]]
-name = "wit-parser"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
-dependencies = [
- "anyhow",
- "id-arena",
- "indexmap",
- "log",
- "semver",
- "serde",
- "serde_derive",
- "serde_json",
- "unicode-xid",
- "wasmparser",
-]
-
-[[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 51931865..2349db93 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.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.52", 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"]}
-anyhow = "1.0.102"
-shlex = "1.3.0"
-rand = "0.9.4"
-ratatui = "0.30.0"
+tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
+anyhow = "1.0.103"
+shlex = "2.0.1"
+rand = "0.10.1"
+ratatui = "0.30.2"
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.nix b/pkgs/by-name/mp/mpdpopm/flake.nix
index 444d841c..d672bd1b 100644
--- a/pkgs/by-name/mp/mpdpopm/flake.nix
+++ b/pkgs/by-name/mp/mpdpopm/flake.nix
@@ -17,7 +17,7 @@
system = "x86_64-linux";
sources = import ../../../../npins/full.nix {};
- pkgs = sources.load "nixpkgs";
+ pkgs = (sources.loadFlake "nixpkgs").legacyPackages."${system}";
treefmt-nix = sources.loadFlake "treefmt-nix";
treefmtEval = import ./treefmt.nix {inherit treefmt-nix pkgs;};
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/Cargo.lock b/pkgs/by-name/no/notify-run/Cargo.lock
index ef352c0f..ecc6e6b0 100644
--- a/pkgs/by-name/no/notify-run/Cargo.lock
+++ b/pkgs/by-name/no/notify-run/Cargo.lock
@@ -13,9 +13,9 @@ version = 4
[[package]]
name = "anyhow"
-version = "1.0.102"
+version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
[[package]]
name = "notify-run"
diff --git a/pkgs/by-name/no/notify-run/Cargo.toml b/pkgs/by-name/no/notify-run/Cargo.toml
index f7da67de..463438c6 100644
--- a/pkgs/by-name/no/notify-run/Cargo.toml
+++ b/pkgs/by-name/no/notify-run/Cargo.toml
@@ -17,4 +17,4 @@ edition = "2024"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-anyhow = "1.0.102"
+anyhow = "1.0.103"
diff --git a/pkgs/by-name/no/notify-run/flake.nix b/pkgs/by-name/no/notify-run/flake.nix
index 286f179e..ea5fecb2 100644
--- a/pkgs/by-name/no/notify-run/flake.nix
+++ b/pkgs/by-name/no/notify-run/flake.nix
@@ -17,7 +17,7 @@
system = "x86_64-linux";
sources = import ../../../../npins/full.nix {};
- pkgs = sources.load "nixpkgs";
+ 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..bf4fab1d 100644
--- a/pkgs/by-name/qu/qutebrowser-patched/package.nix
+++ b/pkgs/by-name/qu/qutebrowser-patched/package.nix
@@ -1,6 +1,26 @@
-{qutebrowser}:
-qutebrowser.overrideAttrs (final: prev: {
- pname = "${prev.pname}-patched";
+{
+ qutebrowser,
+ python3,
+}: let
+ python3NoSpeech = python3.override {
+ packageOverrides = self: super: {
+ # NOTE: The re-compile is not worth the space saving <2026-07-01>
+ # 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 73d938c1..cd80a355 100644
--- a/pkgs/by-name/ri/river-mk-keymap/Cargo.lock
+++ b/pkgs/by-name/ri/river-mk-keymap/Cargo.lock
@@ -79,15 +79,15 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.102"
+version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
[[package]]
name = "arrayvec"
-version = "0.7.6"
+version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
+checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe"
[[package]]
name = "bitflags"
@@ -97,9 +97,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.11.1"
+version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
+checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
[[package]]
name = "byteorder"
@@ -109,9 +109,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "cc"
-version = "1.2.61"
+version = "1.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d"
+checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -297,7 +297,7 @@ version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c7e611d49285d4c4b2e1727b72cf05353558885cc5252f93707b845dfcaf3d3"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"byteorder",
"core-foundation",
"core-graphics",
@@ -417,9 +417,9 @@ dependencies = [
[[package]]
name = "libredox"
-version = "0.1.16"
+version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c"
+checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652"
dependencies = [
"libc",
]
@@ -432,21 +432,21 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
[[package]]
name = "log"
-version = "0.4.29"
+version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
[[package]]
name = "memchr"
-version = "2.8.0"
+version = "2.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
[[package]]
name = "memmap2"
-version = "0.9.10"
+version = "0.9.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3"
+checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0"
dependencies = [
"libc",
]
@@ -514,18 +514,18 @@ dependencies = [
[[package]]
name = "quick-xml"
-version = "0.39.3"
+version = "0.39.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "721da970c312655cde9b4ffe0547f20a8494866a4af5ff51f18b7c633d0c870b"
+checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e"
dependencies = [
"memchr",
]
[[package]]
name = "quote"
-version = "1.0.45"
+version = "1.0.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
+checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
dependencies = [
"proc-macro2",
]
@@ -577,7 +577,7 @@ version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"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,15 +644,15 @@ 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"
-version = "1.15.1"
+version = "1.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
[[package]]
name = "strsim"
@@ -662,9 +662,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
-version = "2.0.117"
+version = "2.0.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
dependencies = [
"proc-macro2",
"quote",
@@ -754,7 +754,7 @@ version = "0.31.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"rustix",
"wayland-backend",
"wayland-scanner",
@@ -762,11 +762,11 @@ dependencies = [
[[package]]
name = "wayland-protocols"
-version = "0.32.12"
+version = "0.32.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f"
+checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"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.1",
+ "bitflags 2.13.0",
"wayland-backend",
"wayland-client",
"wayland-protocols",
diff --git a/pkgs/by-name/ri/river-mk-keymap/Cargo.toml b/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
index 34a5b1e5..e056b3d1 100644
--- a/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
+++ b/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
@@ -17,20 +17,24 @@ edition = "2021"
[dependencies]
ab_glyph = "0.2.32"
-anyhow = "1.0.102"
+anyhow = "1.0.103"
clap = { version = "4.6.1", features = ["derive"] }
font-kit = "0.14.3"
-keymaps = { version = "1.2.0", features = ["serde", "mouse-keys", "modifier-keys"] }
-memmap2 = "0.9.10"
+keymaps = { version = "1.2.0", features = [
+ "serde",
+ "mouse-keys",
+ "modifier-keys",
+] }
+memmap2 = "0.9.11"
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.nix b/pkgs/by-name/ri/river-mk-keymap/flake.nix
index 75855a04..d1467506 100644
--- a/pkgs/by-name/ri/river-mk-keymap/flake.nix
+++ b/pkgs/by-name/ri/river-mk-keymap/flake.nix
@@ -17,7 +17,7 @@
system = "x86_64-linux";
sources = import ../../../../npins/full.nix {};
- pkgs = sources.load "nixpkgs";
+ 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..717f850c
--- /dev/null
+++ b/pkgs/by-name/ta/tails-iso/files.json
@@ -0,0 +1,7 @@
+{
+ "version": "7.9.1",
+ "files": {
+ "iso.sig": "sha256-vjlzcCy9oG2FhFsJIPeCG6HU1LPPgb3iEi4jCDl/jrk=",
+ "iso": "sha256-KvUzGVqMiUAXBglyiLM2kdvX/N0qVwPqcAxbONMAEJo="
+ }
+}
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..10336449
--- /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.
+ 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 645cf3e7..64728bc6 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"
@@ -74,7 +62,7 @@ version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys",
]
[[package]]
@@ -85,14 +73,14 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"once_cell_polyfill",
- "windows-sys 0.61.2",
+ "windows-sys",
]
[[package]]
name = "anyhow"
-version = "1.0.102"
+version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
[[package]]
name = "arraydeque"
@@ -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.1"
+version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
+checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
[[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.61"
+version = "1.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d"
+checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96"
dependencies = [
"find-msvc-tools",
- "shlex",
+ "shlex 2.0.1",
]
[[package]]
@@ -142,9 +141,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "chrono"
-version = "0.4.44"
+version = "0.4.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
+checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
dependencies = [
"iana-time-zone",
"js-sys",
@@ -178,14 +177,14 @@ dependencies = [
[[package]]
name = "clap_complete"
-version = "4.6.3"
+version = "4.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "660c0520455b1013b9bcb0393d5f643d7e4454fb69c915b8d6d2aa0e9a45acc3"
+checksum = "97bf4965940c2382204c0ded6dd3dd48c0c4e872f1e76fb1bf94f45991a2cb6a"
dependencies = [
"clap",
"clap_lex",
"is_executable",
- "shlex",
+ "shlex 1.3.0",
]
[[package]]
@@ -245,14 +244,14 @@ dependencies = [
"libc",
"option-ext",
"redox_users",
- "windows-sys 0.61.2",
+ "windows-sys",
]
[[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",
@@ -269,12 +268,6 @@ dependencies = [
]
[[package]]
-name = "equivalent"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
-
-[[package]]
name = "fallible-iterator"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -304,9 +297,9 @@ dependencies = [
[[package]]
name = "foldhash"
-version = "0.1.5"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
[[package]]
name = "form_urlencoded"
@@ -354,57 +347,33 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.4.2"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
+checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
dependencies = [
"cfg-if",
+ "js-sys",
"libc",
"r-efi",
- "wasip2",
- "wasip3",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.14.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
-dependencies = [
- "ahash",
+ "wasm-bindgen",
]
[[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",
]
[[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"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af"
-dependencies = [
- "hashbrown 0.14.5",
-]
-
-[[package]]
name = "hashlink"
-version = "0.10.0"
+version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
+checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f"
dependencies = [
- "hashbrown 0.15.5",
+ "hashbrown",
]
[[package]]
@@ -526,12 +495,6 @@ dependencies = [
]
[[package]]
-name = "id-arena"
-version = "2.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
-
-[[package]]
name = "idna"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -553,18 +516,6 @@ dependencies = [
]
[[package]]
-name = "indexmap"
-version = "2.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
-dependencies = [
- "equivalent",
- "hashbrown 0.17.0",
- "serde",
- "serde_core",
-]
-
-[[package]]
name = "is-terminal"
version = "0.4.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -572,16 +523,16 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46"
dependencies = [
"hermit-abi",
"libc",
- "windows-sys 0.61.2",
+ "windows-sys",
]
[[package]]
name = "is_executable"
-version = "1.0.5"
+version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baabb8b4867b26294d818bf3f651a454b6901431711abb96e296245888d6e8c4"
+checksum = "82cb6a9f675da968c63b6208c641b9dca58fc0133ae53375736b1767b0cab8bd"
dependencies = [
- "windows-sys 0.60.2",
+ "windows-sys",
]
[[package]]
@@ -598,23 +549,16 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "js-sys"
-version = "0.3.98"
+version = "0.3.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08"
+checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102"
dependencies = [
"cfg-if",
"futures-util",
- "once_cell",
"wasm-bindgen",
]
[[package]]
-name = "leb128fmt"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
-
-[[package]]
name = "libc"
version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -622,18 +566,18 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
[[package]]
name = "libredox"
-version = "0.1.16"
+version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c"
+checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652"
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",
@@ -647,9 +591,9 @@ checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
[[package]]
name = "log"
-version = "0.4.29"
+version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
[[package]]
name = "md5"
@@ -659,9 +603,9 @@ checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0"
[[package]]
name = "memchr"
-version = "2.8.0"
+version = "2.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
[[package]]
name = "miniz_oxide"
@@ -728,16 +672,6 @@ dependencies = [
]
[[package]]
-name = "prettyplease"
-version = "0.2.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
-dependencies = [
- "proc-macro2",
- "syn",
-]
-
-[[package]]
name = "proc-macro2"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -748,9 +682,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.45"
+version = "1.0.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
+checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
dependencies = [
"proc-macro2",
]
@@ -773,17 +707,28 @@ dependencies = [
]
[[package]]
+name = "rsqlite-vfs"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c51c9ae4df8a7fba42103df5c621fa3c37eccf3a3c650879e90fc48b11cc192c"
+dependencies = [
+ "hashbrown",
+ "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]]
@@ -802,12 +747,6 @@ dependencies = [
]
[[package]]
-name = "semver"
-version = "1.0.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
-
-[[package]]
name = "serde"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -818,6 +757,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"
@@ -839,9 +789,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",
@@ -857,6 +807,12 @@ 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"
@@ -870,9 +826,21 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
[[package]]
name = "smallvec"
-version = "1.15.1"
+version = "1.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
+
+[[package]]
+name = "sqlite-wasm-rs"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+checksum = "dc3efc0da82635d7e1ced0053bbbfa8c7ab9645d0bf36ceb4f7127bb85315d75"
+dependencies = [
+ "cc",
+ "js-sys",
+ "rsqlite-vfs",
+ "wasm-bindgen",
+]
[[package]]
name = "stable_deref_trait"
@@ -900,15 +868,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",
@@ -918,9 +886,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.117"
+version = "2.0.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
dependencies = [
"proc-macro2",
"quote",
@@ -940,22 +908,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.3",
"log",
"rusqlite",
"serde",
+ "serde-wasm-bindgen",
"serde_json",
"strum",
"strum_macros",
"thiserror",
+ "tokio",
"uuid",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
]
[[package]]
@@ -1007,6 +981,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 = [
@@ -1020,6 +1015,7 @@ dependencies = [
"serde_json",
"stderrlog",
"taskchampion",
+ "tokio",
"url",
"walkdir",
"yaml-rust2",
@@ -1032,12 +1028,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
-name = "unicode-xid"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
-
-[[package]]
name = "url"
version = "2.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1064,11 +1054,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
-version = "1.23.1"
+version = "1.23.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76"
+checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53"
dependencies = [
- "getrandom 0.4.2",
+ "getrandom 0.4.3",
"js-sys",
"serde_core",
"wasm-bindgen",
@@ -1081,12 +1071,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"
@@ -1103,28 +1087,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
-name = "wasip2"
-version = "1.0.3+wasi-0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
-dependencies = [
- "wit-bindgen 0.57.1",
-]
-
-[[package]]
-name = "wasip3"
-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 0.51.0",
-]
-
-[[package]]
name = "wasm-bindgen"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790"
+checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4"
dependencies = [
"cfg-if",
"once_cell",
@@ -1134,10 +1100,20 @@ dependencies = [
]
[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.76"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578"
+checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1145,9 +1121,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2"
+checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -1158,54 +1134,20 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.121"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441"
+checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24"
dependencies = [
"unicode-ident",
]
[[package]]
-name = "wasm-encoder"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
-dependencies = [
- "leb128fmt",
- "wasmparser",
-]
-
-[[package]]
-name = "wasm-metadata"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
-dependencies = [
- "anyhow",
- "indexmap",
- "wasm-encoder",
- "wasmparser",
-]
-
-[[package]]
-name = "wasmparser"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
-dependencies = [
- "bitflags",
- "hashbrown 0.15.5",
- "indexmap",
- "semver",
-]
-
-[[package]]
name = "winapi-util"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys",
]
[[package]]
@@ -1269,15 +1211,6 @@ dependencies = [
[[package]]
name = "windows-sys"
-version = "0.60.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
-dependencies = [
- "windows-targets",
-]
-
-[[package]]
-name = "windows-sys"
version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
@@ -1286,165 +1219,6 @@ dependencies = [
]
[[package]]
-name = "windows-targets"
-version = "0.53.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
-dependencies = [
- "windows-link",
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_gnullvm",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
-]
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
-
-[[package]]
-name = "windows_i686_gnullvm"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.53.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
-
-[[package]]
-name = "wit-bindgen"
-version = "0.51.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
-dependencies = [
- "wit-bindgen-rust-macro",
-]
-
-[[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"
-checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
-dependencies = [
- "anyhow",
- "heck",
- "wit-parser",
-]
-
-[[package]]
-name = "wit-bindgen-rust"
-version = "0.51.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
-dependencies = [
- "anyhow",
- "heck",
- "indexmap",
- "prettyplease",
- "syn",
- "wasm-metadata",
- "wit-bindgen-core",
- "wit-component",
-]
-
-[[package]]
-name = "wit-bindgen-rust-macro"
-version = "0.51.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
-dependencies = [
- "anyhow",
- "prettyplease",
- "proc-macro2",
- "quote",
- "syn",
- "wit-bindgen-core",
- "wit-bindgen-rust",
-]
-
-[[package]]
-name = "wit-component"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
-dependencies = [
- "anyhow",
- "bitflags",
- "indexmap",
- "log",
- "serde",
- "serde_derive",
- "serde_json",
- "wasm-encoder",
- "wasm-metadata",
- "wasmparser",
- "wit-parser",
-]
-
-[[package]]
-name = "wit-parser"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
-dependencies = [
- "anyhow",
- "id-arena",
- "indexmap",
- "log",
- "semver",
- "serde",
- "serde_derive",
- "serde_json",
- "unicode-xid",
- "wasmparser",
-]
-
-[[package]]
name = "writeable"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1452,20 +1226,20 @@ 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]]
name = "yoke"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
+checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5"
dependencies = [
"stable_deref_trait",
"yoke-derive",
@@ -1485,30 +1259,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 2770cda7..3ce2276d 100644
--- a/pkgs/by-name/ts/tskm/Cargo.toml
+++ b/pkgs/by-name/ts/tskm/Cargo.toml
@@ -16,19 +16,31 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-anyhow = { version = "1.0.102", default-features = false }
-clap = { version = "4.6.1", features = [ "derive", "std", "color", "help", "usage", "error-context", "suggestions", ], default-features = false }
-clap_complete = { version = "4.6.3", features = ["unstable-dynamic"] }
+anyhow = { version = "1.0.103", default-features = false }
+clap = { version = "4.6.1", features = [
+ "derive",
+ "std",
+ "color",
+ "help",
+ "usage",
+ "error-context",
+ "suggestions",
+], default-features = false }
+clap_complete = { version = "4.6.6", features = ["unstable-dynamic"] }
dirs = { version = "6.0.0", default-features = false }
-log = { version = "0.4.29", default-features = false }
+log = { version = "0.4.33", 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.nix b/pkgs/by-name/ts/tskm/flake.nix
index ac28eb83..e4d22c09 100644
--- a/pkgs/by-name/ts/tskm/flake.nix
+++ b/pkgs/by-name/ts/tskm/flake.nix
@@ -17,7 +17,7 @@
system = "x86_64-linux";
sources = import ../../../../npins/full.nix {};
- pkgs = sources.load "nixpkgs";
+ 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/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..2404260a
--- /dev/null
+++ b/scripts/unflake.sh
@@ -0,0 +1,21 @@
+#! /usr/bin/env sh
+
+set -e
+
+# HACK(@bpeetz): unflake doesn't support npins version 8 yet, so we pretend to still use
+# version 7.
+# Essentially, we are abusing the fact that `npins` will look at `NPINS_DIRECTORY` while
+# unflake doesn't.
+# <2026-06-13>
+NPINS_DIRECTORY="$(mktemp -t "npins_fake_dir_for_unflake_XXXXX" -d)"
+export NPINS_DIRECTORY
+
+mv npins/sources.json "$NPINS_DIRECTORY/"
+jq '.version = 7' <"$NPINS_DIRECTORY/sources.json" >npins/sources.json
+
+NIX_CONFIG="pure-eval = false" nix run -f https://codeberg.org/goldstein/unflake/archive/main.tar.gz unflake -- "$@"
+
+mv "$NPINS_DIRECTORY/sources.json" npins/sources.json
+rmdir "$NPINS_DIRECTORY"
+
+# 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/secrets.nix b/secrets.nix
index fc5a9249..443ed562 100644
--- a/secrets.nix
+++ b/secrets.nix
@@ -14,6 +14,7 @@ let
apzu = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBivF5b6PyxsR/t+4Qg4IEDXHVXrjmZpslTUNXpvcVbO";
in {
"modules/by-name/at/atuin/secrets/encryption_key.age".publicKeys = [soispha tiamat apzu];
+ "modules/by-name/at/atuin/secrets/user_id.age".publicKeys = [soispha tiamat apzu];
"modules/by-name/ta/taskwarrior/secrets/sync_server_encryption_key.age".publicKeys = [soispha tiamat apzu];
diff --git a/unflake.nix b/unflake.nix
new file mode 100644
index 00000000..e3311eb8
--- /dev/null
+++ b/unflake.nix
@@ -0,0 +1,189 @@
+# @generated by https://codeberg.org/goldstein/unflake
+let
+ indirect_deps = {
+ };
+ 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_github_cachix_pre-commit-hooks-nix = {
+ flake-compat = "unflake_github_nixos_flake-compat_flake_false";
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixpkgs-unstable";
+ };
+ unflake_github_hercules-ci_flake-parts = {
+ nixpkgs-lib = "unflake_github_nix-community_nixpkgs-lib";
+ };
+ 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-1-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-foss-syndicate-org-bpeetz-forks-atuin_ref_main = {
+ nixpkgs = "unflake_github_nixos_nixpkgs_ref_nixos-unstable-small";
+ };
+ 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_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_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-1-0 = inject "unflake_github_nix-community_lanzaboote_ref_v1-1-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-foss-syndicate-org-bpeetz-forks-atuin_ref_main = inject "unflake_git_https---git-foss-syndicate-org-bpeetz-forks-atuin_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-1-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;
+ turtle = universe.unflake_git_https---git-foss-syndicate-org-bpeetz-forks-atuin_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 1a9656fa..7f583808 100755
--- a/update.sh
+++ b/update.sh
@@ -16,11 +16,15 @@ __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 unflake.sh --backend=npins
__update_sh_run npins update
__update_sh_run ./pkgs/update_pkgs.sh "$@"