A personal Quickshell setup for the Niri Wayland compositor.
Minimal, fast, and built to stay out of the way. Gruvbox only for now, more themes coming later.
Warning
This is a personal config built for a specific machine and workflow. It is not designed to work out of the box on every system. Use only as a reference.
|
|
The whole config is around 150kb. No frameworks, no plugin managers. Just Quickshell and the packages listed below, most of which are already on a standard Niri system.
| Package | Purpose |
|---|---|
quickshell |
Shell framework |
niri |
Wayland compositor |
swww |
Wallpaper daemon |
pipewire + wireplumber + wpctl |
Audio and volume control |
brightnessctl |
Display brightness control |
playerctl |
MPRIS media player control |
networkmanager (nmcli) |
WiFi management |
bluez + bluetoothctl |
Bluetooth |
power-profiles-daemon |
Power profile switching |
qt6-svg |
Qt6 SVG rendering |
qt6-imageformats |
PNG and WebP icon rendering in Quickshell |
imagemagick |
Image processing for certain Quickshell builds |
foot |
Terminal (any terminal works) |
Font: Google Sans is used throughout the bar and UI. Install it before launching.
Icon Theme: Any XDG-compliant theme works. Papirus is recommended. After installing, set it at the top of shell.qml:
//@ pragma IconTheme PapirusThis repo ships the complete ~/.config/ layout. Niri, Foot, and Quickshell configs all sit in their expected locations. Clone and drop everything in:
git clone https://github.com/yourusername/niriha
cp -r niriha/.config/* ~/.config/Note
Back up your existing Niri and Foot configs before running the copy command. It will overwrite whatever is already there.
Run it directly from the terminal:
quickshell -c nirihaTo start it automatically on login, add this to ~/.config/niri/config.kdl:
spawn-at-startup "quickshell" "-c" "niriha"All components are exposed over Quickshell IPC. The included config.kdl already has these wired up. If you are using your own existing Niri config, add the binds manually:
binds {
Mod+Space { spawn "sh" "-c" "qs ipc -c niriha call launcher toggle"; }
Mod+C { spawn "sh" "-c" "qs ipc -c niriha call controlcenter toggle"; }
Mod+W { spawn "sh" "-c" "qs ipc -c niriha call wallpaper toggle"; }
Mod+A { spawn "sh" "-c" "qs ipc -c niriha call calendar toggle"; }
Mod+S { spawn "sh" "-c" "qs ipc -c niriha call stats toggle"; }
}You can also call any component from the terminal directly without touching the config:
qs ipc -c niriha call launcher toggle
qs ipc -c niriha call controlcenter toggle
qs ipc -c niriha call wallpaper toggle
qs ipc -c niriha call calendar toggle
qs ipc -c niriha call stats toggle~/.config/
├── quickshell/
│ └── niriha/ # Quickshell config (this repo)
├── niri/
│ └── config.kdl # Niri config with IPC keybinds and bar exclusion zone
└── foot/
└── foot.ini # Foot terminal config
- Resolution. The bar is built and tested at 1080p. For other resolutions, tweak the margins in
ActionBar.qml. - Bar exclusion zone. The included
config.kdlsetsstruts { top 30; }so windows do not go under the bar. If you are using your own Niri config, add this manually. - Wallpapers. Drop wallpapers into
~/Wallpapers/. That is the directory the picker reads from. - Media card. The Control Center media card only shows when an MPRIS player such as mpv, Spotify, or Firefox is actively running.
- Right-click. Right-clicking anywhere on the status bar opens the Control Center, same as the IPC keybind.
- System stats. CPU, RAM, and temperature data is read from
/procdirectly. No monitoring tools needed.
Why Quickshell?
Most shell options for Wayland either pull in a heavy runtime or require learning a new config format. Quickshell keeps the whole thing at around 150kb. The dependencies it needs are packages any Niri setup will already have. No plugin manager, no daemon, no extra steps. Copy the folder, run the command.
Why no theming support yet?
Getting theming right means every color has to map correctly across every component. matugen, HeroUI, and pywal were all tested. None of them were accurate enough in practice. The palette values came out technically valid but visually wrong in ways that mattered. The plan is to write a small purpose-built theming layer that handles this properly. Gruvbox stays hardcoded until that exists.
Why is the status bar not modular?
This is a daily-use personal config, not a general-purpose framework. Only things that actually get used are here. Building out modularity and plugin support is a different kind of project with different maintenance requirements. The code is readable if you want to adapt something from it.
Will this work on my machine?
If you already run Niri, dropping this into ~/.config/ and running quickshell -c niriha should be enough to get it going. The keybinds are in config.kdl and the bar exclusion zone is already set. If you have your own Niri config, copy the binds block over and add struts { top 30; }. If you are setting up Niri from scratch, this gives you a working starting point.
|
@tahfizhabib FOSS enthusiast. Builds things out of daily use and a preference for software that does its job without getting in the way. niriha started as a scratch-built replacement for everything that felt too heavy or too generic on Niri. |
Built on top of Quickshell and Niri.