about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--flake.lock74
-rw-r--r--flake.nix2
-rw-r--r--modules/by-name/i3/i3status-rust/module.nix6
-rw-r--r--modules/by-name/ni/nix/module.nix3
-rw-r--r--modules/by-name/ri/river/keymap.nix196
-rw-r--r--modules/by-name/ri/river/module.nix2
-rw-r--r--pkgs/by-name/fu/fupdate/flake.lock6
-rw-r--r--pkgs/by-name/lf/lf-make-map/Cargo.lock8
-rw-r--r--pkgs/by-name/lf/lf-make-map/Cargo.toml2
-rw-r--r--pkgs/by-name/lf/lf-make-map/flake.lock6
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/Cargo.lock12
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/Cargo.toml2
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/flake.lock6
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/key_map/commands.rs16
-rw-r--r--pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs5
-rw-r--r--pkgs/by-name/ts/tskm/Cargo.lock8
-rw-r--r--pkgs/by-name/ts/tskm/flake.lock6
17 files changed, 192 insertions, 168 deletions
diff --git a/flake.lock b/flake.lock
index 2a5bc552..66b6ddae 100644
--- a/flake.lock
+++ b/flake.lock
@@ -97,11 +97,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1750680230,
-        "narHash": "sha256-kD88T/NqmcgfOBFAwphN30ccaUdj6K6+LG0XdM2w2LA=",
+        "lastModified": 1750903843,
+        "narHash": "sha256-Ng9+f0H5/dW+mq/XOKvB9uwvGbsuiiO6HrPdAcVglCs=",
         "owner": "nix-community",
         "repo": "disko",
-        "rev": "8fd2d6c75009ac75f9a6fb18c33a239806778d01",
+        "rev": "83c4da299c1d7d300f8c6fd3a72ac46cb0d59aae",
         "type": "github"
       },
       "original": {
@@ -179,11 +179,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1750684550,
-        "narHash": "sha256-uLtw0iF9mQ94L831NOlQLPX9wm0qzd5yim3rcwACEoM=",
+        "lastModified": 1750779888,
+        "narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
         "owner": "cachix",
         "repo": "git-hooks.nix",
-        "rev": "fae816c55a75675f30d18c9cbdecc13b970d95d4",
+        "rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
         "type": "github"
       },
       "original": {
@@ -239,11 +239,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1750730235,
-        "narHash": "sha256-rZErlxiV7ssvI8t7sPrKU+fRigNc2KvoKZG3gtUtK50=",
+        "lastModified": 1751336185,
+        "narHash": "sha256-ptnVr2x+sl7cZcTuGx/0BOE2qCAIYHTcgfA+/h60ml0=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "d07e9cceb4994ed64a22b9b36f8b76923e87ac38",
+        "rev": "96354906f58464605ff81d2f6c2ea23211cbf051",
         "type": "github"
       },
       "original": {
@@ -353,11 +353,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1750618568,
-        "narHash": "sha256-w9EG5FOXrjXGfbqCcQg9x1lMnTwzNDW5BMXp8ddy15E=",
+        "lastModified": 1751313918,
+        "narHash": "sha256-HsJM3XLa43WpG+665aGEh8iS8AfEwOIQWk3Mke3e7nk=",
         "owner": "lnl7",
         "repo": "nix-darwin",
-        "rev": "1dd19f19e4b53a1fd2e8e738a08dd5fe635ec7e5",
+        "rev": "e04a388232d9a6ba56967ce5b53a8a6f713cdfcf",
         "type": "github"
       },
       "original": {
@@ -394,11 +394,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1750565152,
-        "narHash": "sha256-A6ZIoIgaPPkzIVxKuaxwEJicPOeTwC/MD9iuC3FVhDM=",
+        "lastModified": 1751170039,
+        "narHash": "sha256-3EKpUmyGmHYA/RuhZjINTZPU+OFWko0eDwazUOW64nw=",
         "owner": "nix-community",
         "repo": "nix-index-database",
-        "rev": "78cd697acc2e492b4e92822a4913ffad279c20e6",
+        "rev": "9c932ae632d6b5150515e5749b198c175d8565db",
         "type": "github"
       },
       "original": {
@@ -432,27 +432,27 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1751011381,
-        "narHash": "sha256-krGXKxvkBhnrSC/kGBmg5MyupUUT5R6IBCLEzx9jhMM=",
+        "lastModified": 1751331362,
+        "narHash": "sha256-U4PMIjimk9RQwERsPkd7+84WRoWgaeVGDo/XuydRpns=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "30e2e2857ba47844aa71991daa6ed1fc678bcbb7",
+        "rev": "08ed4a9c085d54f04207ec4e8c5e0eddbe991229",
         "type": "github"
       },
       "original": {
         "owner": "NixOS",
-        "ref": "nixos-unstable",
+        "ref": "nixos-unstable-small",
         "repo": "nixpkgs",
         "type": "github"
       }
     },
     "nixpkgs-lib": {
       "locked": {
-        "lastModified": 1750555020,
-        "narHash": "sha256-/MjivcZIz8dyLOTFdJzS5Yazt2QCePQBh8uZooODaYw=",
+        "lastModified": 1751159883,
+        "narHash": "sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo=",
         "owner": "nix-community",
         "repo": "nixpkgs.lib",
-        "rev": "6fb7349157ee1bffd053b1fdd454aa74ff7b4aee",
+        "rev": "14a40a1d7fb9afa4739275ac642ed7301a9ba1ab",
         "type": "github"
       },
       "original": {
@@ -463,11 +463,11 @@
     },
     "nixpkgs-stable": {
       "locked": {
-        "lastModified": 1750622754,
-        "narHash": "sha256-kMhs+YzV4vPGfuTpD3mwzibWUE6jotw5Al2wczI0Pv8=",
+        "lastModified": 1751211869,
+        "narHash": "sha256-1Cu92i1KSPbhPCKxoiVG5qnoRiKTgR5CcGSRyLpOd7Y=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "c7ab75210cb8cb16ddd8f290755d9558edde7ee1",
+        "rev": "b43c397f6c213918d6cfe6e3550abfe79b5d1c51",
         "type": "github"
       },
       "original": {
@@ -493,11 +493,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1750751277,
-        "narHash": "sha256-wdUjRFiiHK8sDmntP1wLYZEqKgju8bGedwulu+myD6E=",
+        "lastModified": 1751144320,
+        "narHash": "sha256-KJsKiGfkfXFB23V26NQ1p+UPsexI6NKtivnrwSlWWdQ=",
         "owner": "nix-community",
         "repo": "nixvim",
-        "rev": "3843b6226193bd2c40de0aea1343065b1bf9d3e4",
+        "rev": "ceb52aece5d571b37096945c2815604195a04eb4",
         "type": "github"
       },
       "original": {
@@ -573,11 +573,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1750684550,
-        "narHash": "sha256-uLtw0iF9mQ94L831NOlQLPX9wm0qzd5yim3rcwACEoM=",
+        "lastModified": 1750779888,
+        "narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
         "owner": "cachix",
         "repo": "pre-commit-hooks.nix",
-        "rev": "fae816c55a75675f30d18c9cbdecc13b970d95d4",
+        "rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
         "type": "github"
       },
       "original": {
@@ -658,11 +658,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1750732748,
-        "narHash": "sha256-HR2b3RHsPeJm+Fb+1ui8nXibgniVj7hBNvUbXEyz0DU=",
+        "lastModified": 1751338093,
+        "narHash": "sha256-/yd9nPcTfUZPFtwjRbdB5yGLdt3LTPqz6Ja63Joiahs=",
         "owner": "oxalica",
         "repo": "rust-overlay",
-        "rev": "4b4494b2ba7e8a8041b2e28320b2ee02c115c75f",
+        "rev": "6cfb7821732dac2d3e2dea857a5613d3b856c20c",
         "type": "github"
       },
       "original": {
@@ -757,11 +757,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1749194973,
-        "narHash": "sha256-eEy8cuS0mZ2j/r/FE0/LYBSBcIs/MKOIVakwHVuqTfk=",
+        "lastModified": 1750931469,
+        "narHash": "sha256-0IEdQB1nS+uViQw4k3VGUXntjkDp7aAlqcxdewb/hAc=",
         "owner": "numtide",
         "repo": "treefmt-nix",
-        "rev": "a05be418a1af1198ca0f63facb13c985db4cb3c5",
+        "rev": "ac8e6f32e11e9c7f153823abc3ab007f2a65d3e1",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index 925d90f8..9c5a2963 100644
--- a/flake.nix
+++ b/flake.nix
@@ -14,7 +14,7 @@
   inputs = {
     # base
     nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.05";
-    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small";
 
     # open nixpkgs prs
 
diff --git a/modules/by-name/i3/i3status-rust/module.nix b/modules/by-name/i3/i3status-rust/module.nix
index 5bd911d8..48bcd5de 100644
--- a/modules/by-name/i3/i3status-rust/module.nix
+++ b/modules/by-name/i3/i3status-rust/module.nix
@@ -81,11 +81,12 @@ in {
             }
             {
               block = "memory";
-              format = " $icon $mem_used_percents {($swap_used_percents.eng(range:1..)) | }";
+              format = " $icon $mem_used_percents{ ($swap_used_percents.eng(range:1..))|} ";
             }
             {
               block = "amd_gpu";
-              format = "  $icon $utilization (^icon_memory_mem $vram_used_percents) ";
+              format = " $icon $utilization (^icon_memory_mem $vram_used_percents) ";
+              error_format = "";
             }
 
             {
@@ -117,6 +118,7 @@ in {
             }
             {
               block = "battery";
+              format = " $icon $percentage{ $time_remaining.dur(hms:true, min_unit:m)|}{ $power|} ";
               missing_format = "";
             }
 
diff --git a/modules/by-name/ni/nix/module.nix b/modules/by-name/ni/nix/module.nix
index 40a84539..2b91f59b 100644
--- a/modules/by-name/ni/nix/module.nix
+++ b/modules/by-name/ni/nix/module.nix
@@ -18,8 +18,7 @@
   # TODO(@bpeetz): Modularize <2025-02-08>
 
   nix = {
-    # TODO(@bpeetz): Switch back to lix, once they fix their correctness bug. <2025-06-28>
-    package = pkgs.nix;
+    package = pkgs.lixPackageSets.latest.lix;
 
     # Disable nix channels  (this is a remnant of old days)
     channel.enable = false;
diff --git a/modules/by-name/ri/river/keymap.nix b/modules/by-name/ri/river/keymap.nix
index 052d36c3..d1266576 100644
--- a/modules/by-name/ri/river/keymap.nix
+++ b/modules/by-name/ri/river/keymap.nix
@@ -8,120 +8,127 @@
   index2tag = input: builtins.toString (libraries.base.pow 2 (input - 1));
 
   mkTagCommand = name: index: [name (index2tag index)];
-  mkSpawn' = pkg: binaryName: args: {
-    command = [
-      "spawn"
-      "${lib.getExe' pkg binaryName} ${args}"
-    ];
+  mkSpawn' = pkg: binaryName: args: further: (further
+    // {
+      command = [
+        "spawn"
+        "${lib.getExe' pkg binaryName} ${args}"
+      ];
 
-    description = "${binaryName} ${args}";
-  };
-  mkSpawn = pkg: args: (mkSpawn' pkg pkg.meta.mainProgram args);
+      description = "${binaryName} ${args}";
+    });
+
+  mkSpawn = pkg: args: further: (mkSpawn' pkg pkg.meta.mainProgram args further);
 
   cfg = config.soispha.programs.river;
-in {
-  soispha.programs.river.init.mappings.keymap = lib.mkIf cfg.enable {
-    "<LEFT_SUPER>" = {
-      # Change focus
-      "f" = {
-        "t" = ["focus-view" "next"];
-        "n" = ["focus-view" "previous"];
-        "<Ctrl-t>" = ["focus-output" "next"];
-        "<Ctrl-n>" = ["focus-output" "previous"];
-      };
 
-      # Spawn standard programs
-      "r" = {
-        "a" = mkSpawn pkgs.alacritty "";
-        "b" = mkSpawn pkgs.tskm "open select";
-        "k" = mkSpawn pkgs.keepassxc "";
-        "s" = mkSpawn pkgs.signal-desktop "";
-        "p" = mkSpawn pkgs.screenshot_persistent "";
-      };
+  coreKeymap = {
+    # Change focus
+    "f" = {
+      "t" = ["focus-view" "next"];
+      "n" = ["focus-view" "previous"];
+      "T" = ["focus-output" "next"];
+      "N" = ["focus-output" "previous"];
+    };
 
-      # Client changes
-      "c" = {
-        "f" = ["toggle-fullscreen"];
-        "c" = ["close"];
-        " " = ["toggle-float"];
-        "<ENTER>" = ["zoom"];
-        "o" = ["send-to-output" "next"];
-        "t" = ["swap" "next"];
-        "n" = ["swap" "previous"];
-      };
+    # Spawn standard programs
+    "r" = {
+      "a" = mkSpawn pkgs.alacritty "" {};
+      "b" = mkSpawn pkgs.tskm "open select" {once = true;};
+      "k" = mkSpawn pkgs.keepassxc "" {once = true;};
+      "s" = mkSpawn pkgs.signal-desktop "" {once = true;};
+      "p" = mkSpawn pkgs.screenshot_persistent "" {once = true;};
+    };
 
-      # River compositor control.
-      "x" = {
-        "q" = ["exit"];
-        "l" = mkSpawn pkgs.lock "";
-      };
+    # Client changes
+    "c" = {
+      "f" = ["toggle-fullscreen"];
+      "c" = ["close"];
+      " " = ["toggle-float"];
+      "<ENTER>" = ["zoom"];
+      "o" = ["send-to-output" "next"];
+      "t" = ["swap" "next"];
+      "n" = ["swap" "previous"];
+    };
 
-      # Media control
-      "m" = {
-        "r" = mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%+";
-        "l" = mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%-";
-        "m" = mkSpawn pkgs.mpp "toggle";
-      };
+    # This is a fill in for <Super-L>, as that is otherwise impossible to input.
+    "l" = coreKeymap.x.l;
 
-      # Select tags to view.
-      "v" = {
-        "0" = ["set-view-tags" (builtins.toString ((libraries.base.pow 2 32) - 1))];
-        "p" = ["send-to-previous-tags"];
-
-        "1" = mkTagCommand "set-view-tags" 1;
-        "2" = mkTagCommand "set-view-tags" 2;
-        "3" = mkTagCommand "set-view-tags" 3;
-        "4" = mkTagCommand "set-view-tags" 4;
-        "5" = mkTagCommand "set-view-tags" 5;
-        "6" = mkTagCommand "set-view-tags" 6;
-        "7" = mkTagCommand "set-view-tags" 7;
-        "8" = mkTagCommand "set-view-tags" 8;
-        "9" = mkTagCommand "set-view-tags" 9;
-
-        # Add tags to view.
-        "a" = {
-          "1" = mkTagCommand "toggle-view-tags" 1;
-          "2" = mkTagCommand "toggle-view-tags" 2;
-          "3" = mkTagCommand "toggle-view-tags" 3;
-          "4" = mkTagCommand "toggle-view-tags" 4;
-          "5" = mkTagCommand "toggle-view-tags" 5;
-          "6" = mkTagCommand "toggle-view-tags" 6;
-          "7" = mkTagCommand "toggle-view-tags" 7;
-          "8" = mkTagCommand "toggle-view-tags" 8;
-          "9" = mkTagCommand "toggle-view-tags" 9;
-        };
-      };
+    # River compositor control.
+    "x" = {
+      "q" = ["exit"];
+      "l" = mkSpawn pkgs.lock "" {once = true;};
+    };
 
-      # Select tags to focus.
-      "f" = {
-        "0" = ["set-focused-tags" (builtins.toString ((libraries.base.pow 2 32) - 1))];
-        "p" = ["focus-previous-tags"];
-
-        "1" = mkTagCommand "set-focused-tags" 1;
-        "2" = mkTagCommand "set-focused-tags" 2;
-        "3" = mkTagCommand "set-focused-tags" 3;
-        "4" = mkTagCommand "set-focused-tags" 4;
-        "5" = mkTagCommand "set-focused-tags" 5;
-        "6" = mkTagCommand "set-focused-tags" 6;
-        "7" = mkTagCommand "set-focused-tags" 7;
-        "8" = mkTagCommand "set-focused-tags" 8;
-        "9" = mkTagCommand "set-focused-tags" 9;
+    # Media control
+    "m" = {
+      "r" = mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%+" {};
+      "l" = mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%-" {};
+      "m" = mkSpawn pkgs.mpp "toggle" {};
+    };
+
+    # Select tags to view.
+    "v" = {
+      "0" = ["set-view-tags" (builtins.toString ((libraries.base.pow 2 32) - 1))];
+      "p" = ["send-to-previous-tags"];
+
+      "1" = mkTagCommand "set-view-tags" 1;
+      "2" = mkTagCommand "set-view-tags" 2;
+      "3" = mkTagCommand "set-view-tags" 3;
+      "4" = mkTagCommand "set-view-tags" 4;
+      "5" = mkTagCommand "set-view-tags" 5;
+      "6" = mkTagCommand "set-view-tags" 6;
+      "7" = mkTagCommand "set-view-tags" 7;
+      "8" = mkTagCommand "set-view-tags" 8;
+      "9" = mkTagCommand "set-view-tags" 9;
+
+      # Add tags to view.
+      "a" = {
+        "1" = mkTagCommand "toggle-view-tags" 1;
+        "2" = mkTagCommand "toggle-view-tags" 2;
+        "3" = mkTagCommand "toggle-view-tags" 3;
+        "4" = mkTagCommand "toggle-view-tags" 4;
+        "5" = mkTagCommand "toggle-view-tags" 5;
+        "6" = mkTagCommand "toggle-view-tags" 6;
+        "7" = mkTagCommand "toggle-view-tags" 7;
+        "8" = mkTagCommand "toggle-view-tags" 8;
+        "9" = mkTagCommand "toggle-view-tags" 9;
       };
     };
 
+    # Select tags to focus.
+    "f" = {
+      "0" = ["set-focused-tags" (builtins.toString ((libraries.base.pow 2 32) - 1))];
+      "p" = ["focus-previous-tags"];
+
+      "1" = mkTagCommand "set-focused-tags" 1;
+      "2" = mkTagCommand "set-focused-tags" 2;
+      "3" = mkTagCommand "set-focused-tags" 3;
+      "4" = mkTagCommand "set-focused-tags" 4;
+      "5" = mkTagCommand "set-focused-tags" 5;
+      "6" = mkTagCommand "set-focused-tags" 6;
+      "7" = mkTagCommand "set-focused-tags" 7;
+      "8" = mkTagCommand "set-focused-tags" 8;
+      "9" = mkTagCommand "set-focused-tags" 9;
+    };
+  };
+in {
+  soispha.programs.river.init.mappings.keymap = lib.mkIf cfg.enable {
+    "<LEFT_SUPER>" = coreKeymap;
+
     # Audio
     "<MEDIA_RAISEVOLUME>" =
-      (mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%+")
+      coreKeymap.m.r
       // {
         allow_locked = true;
       };
     "<MEDIA_LOWERVOLUME>" =
-      (mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%-")
+      coreKeymap.m.l
       // {
         allow_locked = true;
       };
     "<MEDIA_MUTEVOLUME>" =
-      (mkSpawn pkgs.mpp "toggle")
+      coreKeymap.m.m
       // {
         allow_locked = true;
       };
@@ -130,10 +137,7 @@ in {
     "<Meta-<MOUSE_LEFT>>" = ["move-view"];
     "<Meta-<MOUSE_RIGHT>>" = ["resize-view"];
 
-    # Lock screen.
-    "<Meta-L>" = mkSpawn pkgs.lock "";
-
     # Screenshot
-    "<PRINTSCREEN>" = mkSpawn pkgs.screenshot_persistent "";
+    "<PRINTSCREEN>" = coreKeymap.r.p;
   };
 }
diff --git a/modules/by-name/ri/river/module.nix b/modules/by-name/ri/river/module.nix
index 4b446934..8be77777 100644
--- a/modules/by-name/ri/river/module.nix
+++ b/modules/by-name/ri/river/module.nix
@@ -51,7 +51,7 @@
 
   keymappings = ''
     err_fail ${riverctl} keyboard-layout ${esa cfg.init.mappings.layout}
-    err_fail ${lib.getExe pkgs.river-mk-keymap} ${keymapGenerate "keys.json" cfg.init.mappings.keymap}
+    err_fail ${lib.getExe pkgs.river-mk-keymap} --keymap ${keymapGenerate "keys.json" cfg.init.mappings.keymap} init
   '';
 
   mkRule = {
diff --git a/pkgs/by-name/fu/fupdate/flake.lock b/pkgs/by-name/fu/fupdate/flake.lock
index a267d6fb..175494e6 100644
--- a/pkgs/by-name/fu/fupdate/flake.lock
+++ b/pkgs/by-name/fu/fupdate/flake.lock
@@ -2,11 +2,11 @@
   "nodes": {
     "nixpkgs": {
       "locked": {
-        "lastModified": 1750731501,
-        "narHash": "sha256-Ah4qq+SbwMaGkuXCibyg+Fwn00el4KmI3XFX6htfDuk=",
+        "lastModified": 1751285371,
+        "narHash": "sha256-/hDU+2AUeFFu5qGHO/UyFMc4UG/x5Cw5uXO36KGTk6c=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "69dfebb3d175bde602f612915c5576a41b18486b",
+        "rev": "b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b",
         "type": "github"
       },
       "original": {
diff --git a/pkgs/by-name/lf/lf-make-map/Cargo.lock b/pkgs/by-name/lf/lf-make-map/Cargo.lock
index 3cf20840..05d59f92 100644
--- a/pkgs/by-name/lf/lf-make-map/Cargo.lock
+++ b/pkgs/by-name/lf/lf-make-map/Cargo.lock
@@ -90,9 +90,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
 
 [[package]]
 name = "bumpalo"
-version = "3.18.1"
+version = "3.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee"
+checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
 
 [[package]]
 name = "cc"
@@ -240,9 +240,9 @@ dependencies = [
 
 [[package]]
 name = "keymaps"
-version = "1.1.1"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a522bbaa39bddd54945580e369ed37113ea96f4cb8f0322be0d5e04aa4d7293"
+checksum = "ea59e8e461942cf1d6a7ad938848d6fd2e40eb43799c21192c09226ecc86710f"
 dependencies = [
  "thiserror",
 ]
diff --git a/pkgs/by-name/lf/lf-make-map/Cargo.toml b/pkgs/by-name/lf/lf-make-map/Cargo.toml
index 31a08dde..57dc61a5 100644
--- a/pkgs/by-name/lf/lf-make-map/Cargo.toml
+++ b/pkgs/by-name/lf/lf-make-map/Cargo.toml
@@ -19,7 +19,7 @@ edition = "2024"
 [dependencies]
 anyhow = "1.0.98"
 clap = { version = "4.5.40", features = ["derive", "env"] }
-keymaps = "1.1.1"
+keymaps = "1.2.0"
 log = "0.4.27"
 stderrlog = "0.6.0"
 walkdir = "2.5.0"
diff --git a/pkgs/by-name/lf/lf-make-map/flake.lock b/pkgs/by-name/lf/lf-make-map/flake.lock
index a267d6fb..175494e6 100644
--- a/pkgs/by-name/lf/lf-make-map/flake.lock
+++ b/pkgs/by-name/lf/lf-make-map/flake.lock
@@ -2,11 +2,11 @@
   "nodes": {
     "nixpkgs": {
       "locked": {
-        "lastModified": 1750731501,
-        "narHash": "sha256-Ah4qq+SbwMaGkuXCibyg+Fwn00el4KmI3XFX6htfDuk=",
+        "lastModified": 1751285371,
+        "narHash": "sha256-/hDU+2AUeFFu5qGHO/UyFMc4UG/x5Cw5uXO36KGTk6c=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "69dfebb3d175bde602f612915c5576a41b18486b",
+        "rev": "b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b",
         "type": "github"
       },
       "original": {
diff --git a/pkgs/by-name/ri/river-mk-keymap/Cargo.lock b/pkgs/by-name/ri/river-mk-keymap/Cargo.lock
index 725c02d7..5640dc9b 100644
--- a/pkgs/by-name/ri/river-mk-keymap/Cargo.lock
+++ b/pkgs/by-name/ri/river-mk-keymap/Cargo.lock
@@ -13,9 +13,9 @@ version = 4
 
 [[package]]
 name = "ab_glyph"
-version = "0.2.29"
+version = "0.2.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0"
+checksum = "1e0f4f6fbdc5ee39f2ede9f5f3ec79477271a6d6a2baff22310d51736bda6cea"
 dependencies = [
  "ab_glyph_rasterizer",
  "owned_ttf_parser",
@@ -23,9 +23,9 @@ dependencies = [
 
 [[package]]
 name = "ab_glyph_rasterizer"
-version = "0.1.8"
+version = "0.1.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
+checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169"
 
 [[package]]
 name = "anstream"
@@ -410,9 +410,9 @@ dependencies = [
 
 [[package]]
 name = "libredox"
-version = "0.1.3"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
+checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638"
 dependencies = [
  "bitflags 2.9.1",
  "libc",
diff --git a/pkgs/by-name/ri/river-mk-keymap/Cargo.toml b/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
index 8198738a..9d8d2bba 100644
--- a/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
+++ b/pkgs/by-name/ri/river-mk-keymap/Cargo.toml
@@ -16,7 +16,7 @@ edition = "2021"
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-ab_glyph = "0.2.29"
+ab_glyph = "0.2.30"
 anyhow = "1.0.98"
 clap = { version = "4.5.40", features = ["derive"] }
 font-kit = "0.14.3"
diff --git a/pkgs/by-name/ri/river-mk-keymap/flake.lock b/pkgs/by-name/ri/river-mk-keymap/flake.lock
index a267d6fb..175494e6 100644
--- a/pkgs/by-name/ri/river-mk-keymap/flake.lock
+++ b/pkgs/by-name/ri/river-mk-keymap/flake.lock
@@ -2,11 +2,11 @@
   "nodes": {
     "nixpkgs": {
       "locked": {
-        "lastModified": 1750731501,
-        "narHash": "sha256-Ah4qq+SbwMaGkuXCibyg+Fwn00el4KmI3XFX6htfDuk=",
+        "lastModified": 1751285371,
+        "narHash": "sha256-/hDU+2AUeFFu5qGHO/UyFMc4UG/x5Cw5uXO36KGTk6c=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "69dfebb3d175bde602f612915c5576a41b18486b",
+        "rev": "b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b",
         "type": "github"
       },
       "original": {
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 058606c9..52a6ba8a 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
@@ -145,9 +145,23 @@ impl KeyMap {
                             (Some(mode_name), acc_vec)
                         });
 
+                let command = if value.once {
+                    vec![
+                        "spawn".to_owned(),
+                        format!(
+                            "riverctl {} && {}",
+                            shlex::try_join(value.command.iter().map(String::as_str))
+                                .expect("Should work"),
+                            shlex::try_join(["riverctl", "enter-mode", "normal"])
+                                .expect("Should work"),
+                        ),
+                    ]
+                } else {
+                    value.command
+                };
                 base.extend(key_to_command(
                     mapping[0],
-                    &value.command,
+                    &command,
                     final_mode.as_ref().map_or("normal", |v| v.as_str()),
                     value.allow_locked,
                 ));
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 5c89c2e2..16dc02f4 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
@@ -30,6 +30,10 @@ pub struct KeyConfig {
     #[serde(default)]
     allow_locked: bool,
 
+    /// Whether to go back to the normal mode, after running this command.
+    #[serde(default)]
+    once: bool,
+
     /// Use a different description to display this command, instead of the `command`.
     description: Option<String>,
 }
@@ -51,6 +55,7 @@ impl FromStr for KeyMap {
                         .collect::<Option<_>>()
                         .ok_or(anyhow!("A array contained a non-string value: {value:#?}"))?,
                     allow_locked: false,
+                    once: false,
                     description: None,
                 }
             } else if let Some(object) = value.as_object() {
diff --git a/pkgs/by-name/ts/tskm/Cargo.lock b/pkgs/by-name/ts/tskm/Cargo.lock
index 26ccc3d1..a7395090 100644
--- a/pkgs/by-name/ts/tskm/Cargo.lock
+++ b/pkgs/by-name/ts/tskm/Cargo.lock
@@ -120,9 +120,9 @@ checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
 
 [[package]]
 name = "bumpalo"
-version = "3.18.1"
+version = "3.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee"
+checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
 
 [[package]]
 name = "byteorder"
@@ -563,9 +563,9 @@ checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
 
 [[package]]
 name = "libredox"
-version = "0.1.3"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
+checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638"
 dependencies = [
  "bitflags",
  "libc",
diff --git a/pkgs/by-name/ts/tskm/flake.lock b/pkgs/by-name/ts/tskm/flake.lock
index a267d6fb..175494e6 100644
--- a/pkgs/by-name/ts/tskm/flake.lock
+++ b/pkgs/by-name/ts/tskm/flake.lock
@@ -2,11 +2,11 @@
   "nodes": {
     "nixpkgs": {
       "locked": {
-        "lastModified": 1750731501,
-        "narHash": "sha256-Ah4qq+SbwMaGkuXCibyg+Fwn00el4KmI3XFX6htfDuk=",
+        "lastModified": 1751285371,
+        "narHash": "sha256-/hDU+2AUeFFu5qGHO/UyFMc4UG/x5Cw5uXO36KGTk6c=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "69dfebb3d175bde602f612915c5576a41b18486b",
+        "rev": "b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b",
         "type": "github"
       },
       "original": {