- QML 98.2%
- Python 1.8%
| backlog | ||
| plugin | ||
| .gitignore | ||
| config.toml | ||
| CONTRIBUTING.md | ||
| dms-whichkey-plugin-plan.md | ||
| README.md | ||
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
- Press
Ctrl+Mod+Space(configurable in Niri) - A grid of keybinding hints appears
- Press a key to execute the mapped command
- Press a submenu key to drill into a group
- Press
Backspaceto go back,Escapeto close
Features
- Single-key command execution
- Nested submenus (indicated with
›) keep_openitems stay visible after firing (indicated with·)- Case-sensitive keys —
iandShift+ican 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
1. Clone and symlink
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-ctland 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.