No description
  • QML 98.2%
  • Python 1.8%
Find a file
Reinier Ladan 7d1d7fbd6f update
2026-06-03 22:03:15 +02:00
backlog update 2026-06-03 22:03:15 +02:00
plugin Update 2026-05-21 22:15:12 +02:00
.gitignore Create .gitignore 2026-04-07 21:18:50 +02:00
config.toml update 2026-06-03 22:03:15 +02:00
CONTRIBUTING.md Add menu grid, command execution, submenu navigation, and docs 2026-04-06 21:36:43 +02:00
dms-whichkey-plugin-plan.md Add plugin scaffold, backlog, and build plan 2026-04-06 20:59:18 +02:00
README.md update 2026-06-03 22:03:15 +02:00

Dank Lader

Leader-key triggered command launcher for DankMaterialShell. Press a hotkey to open a floating menu with keybinding hints, press a single key to launch an app or run a command.

Port of Lader (GNOME Shell) to DMS/Quickshell/Niri.

How it works

  1. Press Ctrl+Mod+Space (configurable in Niri)
  2. A grid of keybinding hints appears
  3. Press a key to execute the mapped command
  4. Press a submenu key to drill into a group
  5. Press Backspace to go back, Escape to close

Features

  • Single-key command execution
  • Nested submenus (indicated with )
  • keep_open items stay visible after firing (indicated with ·)
  • Case-sensitive keys — i and Shift+i can trigger different actions
  • DMS Material 3 theming — colors and fonts follow your wallpaper-derived theme
  • Exclusive keyboard grab — no key leakthrough to compositor
  • Click-outside-to-dismiss backdrop
  • TOML config file with hot-reload on save
  • Configurable popup position, padding, margin, and column layout
  • Unix socket IPC for external triggering

Installation

git clone https://forge.personalos.nl/reinierladan/lader-dank.git
ln -s /path/to/lader-dank/plugin ~/.config/DankMaterialShell/plugins/dank-lader

2. Enable the plugin

Open DMS Settings -> Plugins -> Scan for Plugins, then toggle on Dank Lader.

Restart DMS if needed:

systemctl --user restart dms

3. Add Niri keybind

Add to ~/.config/niri/config.kdl inside the binds block:

Ctrl+Mod+Space { spawn "dank-lader-ctl" "toggle"; }

Symlink the helper script into your PATH:

ln -s /path/to/lader-dank/plugin/dank-lader-ctl ~/.local/bin/dank-lader-ctl

CLI

dank-lader-ctl toggle    # Toggle the overlay
dank-lader-ctl open      # Open the overlay
dank-lader-ctl close     # Close the overlay
dank-lader-ctl reload    # Reload config from disk

Requirements

  • DankMaterialShell >= 1.4.0
  • Niri compositor
  • Python 3 (for dank-lader-ctl and TOML config parsing)

Configuration

Copy or symlink config.toml to ~/.config/dank-lader/config.toml:

mkdir -p ~/.config/dank-lader
ln -s /path/to/dotfiles/config.toml ~/.config/dank-lader/config.toml

Changes are picked up automatically on save — no plugin reload needed.

UI settings

[ui]
max_per_column = 5        # items per column before wrapping
position = "center"       # center, top, bottom, left, right
padding = 20              # padding inside the popup card
margin = 0                # margin from screen edge (non-center positions)

Menu items

[[menu]]
key = "."
desc = "Ghostty"
cmd = 'launch-or-focus "com.mitchellh.ghostty" "ghostty"'

[[menu]]
key = "s"
desc = "Window Mgmt"

  [[menu.submenu]]
  key = "i"
  desc = "Move window up"
  cmd = "niri msg action move-window-up"
  keep_open = true

Capitalised key variants

Keys are case-sensitive, so a lowercase letter and its Shift-capitalised form can map to two different actions at the same level. Define a second entry with an uppercase key:

[[menu]]
key = "i"
desc = "Files"
app_id = "org.gnome.Nautilus"
launch_cmd = "nautilus"

[[menu]]
key = "I"
desc = "Files (new window)"
cmd = "nautilus --new-window"

Now i launch-or-focuses Files, while Shift+i always opens a new window. Capitalised entries render as their own row, with the uppercase letter shown on the badge. Capitalisation is always explicit — pressing Shift+i with no key = "I" entry does nothing rather than falling through to the lowercase action.