A compact, keyboard-first desktop shell for Niri, built with Quickshell.
Features · Gallery · Launcher · Dmenu mode · Installation
Slimshell brings my bar, notifications, and some useful menus together—replacing a collection of separate tools and increasingly complicated Bash scripts.
It is built for my own desktop: compact, opinionated, and comfortable to use from the keyboard. It isn't a desktop environment with endless customization or every bell and whistle. Borrow what you like, and adapt the rest.
Why does this exist? Because all the well-known Quickshell setups focus too much on large Material Design Menus and features that, at the end of the day, no productive user actually needs. If a widget has functions, it must also work 100% with the keyboard. Bluetooth or the Wi-Fi menus do not need to take half of your 1440p screen space. So the goal was simple = Make the most of the best features of the Quickshell in terms of usability.
| What's included | |
|---|---|
| Bar | Workspaces, Window title, Clock and Weather, Battery, Connections, Privacy indicators, Tray etc. |
| Menus | Keyboard-driven menus for Bluetooth, Wi-Fi, Audio, Power, and Notifications |
| launcher | Application launcher with: File Search, Calculator, Binary Runner, Emoji, Timers and Dmenu-mode |
| Tools | Clipboard, DeepL translation, and Screen recording |
| Session | Lock Screen, Wallpaper Picker, and Dynamic theming with Hellwal |
IPC reference
| Target | Calls | Effect |
|---|---|---|
audio |
toggle, open, close |
Show or hide the audio menu |
bar |
toggle, hide, show, isVisible |
Control or query bar visibility |
bluetooth |
toggle, open, close |
Show or hide the Bluetooth menu |
clipboard |
toggle, open, close, refresh, copySelected, deleteSelected |
Control the clipboard picker |
idle |
toggle, isDisabled, settings |
Control idle handling or open its settings |
launcher |
toggle, open, close, apps, run, emoji, timer, files, calculator |
Open, switch, or toggle launcher modes |
lock |
lock |
Lock the session |
locker |
isSecure |
Query whether the separate lock-screen process is secure |
menu |
open <name>, toggle <name>, close, packages, settings, system |
Open a user menu or close it |
network |
toggle, open, close |
Show or hide the network menu |
notificationCenter |
toggle, open, close |
Show or hide notification history |
notifications |
toggleDnd, enableDnd, disableDnd, isDnd, clear, count |
Control DND or notification history |
power |
toggle, open, close |
Control the power menu |
recorder |
toggle, open, close, fullscreen, region, stop |
Control screen recording |
theme |
refresh, usingHellwal |
Reload or query the active theme |
translator |
toggle, open, close |
Control the translator |
volume |
up, down, mute |
Adjust or mute the default audio output; shows the OSD |
wallpaper |
toggle, open, close |
Control the wallpaper picker |
weather |
toggle, open, close |
Show or hide the weather forecast |
For example, qs ipc call volume up raises the volume by one step. launcher/dmenu-runner uses the launcher's IPC internally; call the script to open a picker.
Launcher modes. Switch directly with the shortcuts below, or cycle with Ctrl+← / Ctrl+→.
| Mode | Shortcut | What it does |
|---|---|---|
| Apps | Ctrl+A |
Search and launch desktop applications |
| Run | Ctrl+B |
Run binaries, with recently used commands first |
| Emoji | Ctrl+E |
Search by name and copy the selected emoji |
| Timer | Ctrl+T |
Start timers such as 25m Focus, 45s, 1:30, or 2h |
In Apps mode, /<word> searches files and =expression calculates with qalc. Plain math works too.
For scripts that use dmenu-style pickers:
printf '%s\n' Search 'New Note' TODO Delete | ./launcher/dmenu-runner -p "Notes" -l 4 --minimal-lines- Supported options:
-p/--prompt,-l N/--lines N(default 7),--minimal-lines, and--index(return the original zero-based input index; typed text returns-1). - Enter selects, Shift+Enter returns typed text, and Esc cancels with status 1.
-l 0opens an input-only picker.
Slimshell must be running. This is a small dmenu-compatible runner, not a full dmenu/rofi replacement.
Follow the installation guide for dependencies, Niri startup,
keybindings, and optional feature setup. Install into ~/.config/quickshell, then run:
qs -p "$HOME/.config/quickshell" --no-detailed-logsEdit root-level settings.json for appearance and behavior defaults. Changes are
loaded automatically; invalid values use safe defaults, and malformed JSON keeps
the previous settings. Idle timeouts, wallpaper preferences and workspace layout
are adjusted through the UI and saved separately.
Animations can be enabled or disabled in settings; each widget owns its style and timing.
Edit menus.json to customize user-menu1 through user-menu4; the fourth is an empty placeholder.
Open one with qs ipc call menu open user-menu1.
Changes reload automatically; invalid edits keep the last working menus. Power
actions remain built in.
shell.qml Shell entrypoint and service wiring
settings.json Editable appearance and behavior defaults
menus.json Personal menu items and commands
bar/ Bar and its modules
components/ Reusable UI and popup components
services/ Shared desktop state and integrations
tests/ Offline tests and fixtures, grouped by feature
launcher/ Launcher, dmenu runner, and search helpers
menus/ System and wallpaper menus
notifications/ Notification popups and history
clipboard/ Clipboard picker and previews
lock/ Lock screen components and PAM setup
recorder/ Screen recording and region selection
translator/ DeepL translator
wallpaper/ Wallpaper helpers
weather/ Weather forecast popup and helper
osd/ Volume overlay
![]() Clipboard picker |
![]() Translator |
![]() Wallpaper picker |
![]() Audio controls |
![]() Bluetooth menu |
![]() Network menu |
![]() Notification history |
![]() Weather forecast |
This shell was developed with LLM assistance under my supervision. I direct the design, review the changes, and test them on my own desktop. These are personal dotfiles, so review and adapt them before using them on yours.
This repository is mainly for hobby and learning, so don't expect everything to work out of the box.
dmenu-runner can't display special symbols (Nerd fonts etc.)- File structure is messy and files needs to be commented better
- There are probably plenty of other things as well. Maybe you can show me how to fix them or do better :)
- Put there something









