Skip to content

tahfizhabib/niriha

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

97 Commits
 
 
 
 

Repository files navigation

niriha

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.

Preview

Features

Implemented

  • Status Bar
    Always-on bar with workspace indicators, clock, and quick controls. Right-click anywhere on the bar to open the Control Center.
  • Workspace Layout
    Visual overview of all active Niri workspaces.
  • Application Launcher
    Keyboard-driven app search and launch.
  • Wallpaper Picker
    Browse and apply wallpapers from ~/Wallpapers/ powered by swww.
  • Status Monitor
    CPU, RAM, and temperature readouts. Reads directly from /proc, no extra tools needed.
  • Calendar
    Date display with a toggleable calendar popup.
  • Control Center
    Volume, brightness, network, Bluetooth, power profile, and media controls in one panel. The media card only shows when an active MPRIS player is running.

Planned

  • Power Menu
    Shutdown, reboot, suspend, and logout actions.
  • Shaders
    Post-processing visual effects layer.
  • Wifi / Bluetooth Panel
    Dedicated network and connection management panel.
  • Lockscreen
    Integrated lock screen styled to match the rest of the config.
  • File Search and Emoji Picker
    System-wide file search and a searchable emoji selection popup.
  • Clipboard Viewer
    Clipboard history panel.
  • Multi-theme Support
    A custom lightweight theming engine to replace the hardcoded Gruvbox palette.

Installation

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.

1. Install Dependencies

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 Papirus

2. Clone and Copy

This 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.

3. Launch

Run it directly from the terminal:

quickshell -c niriha

To start it automatically on login, add this to ~/.config/niri/config.kdl:

spawn-at-startup "quickshell" "-c" "niriha"

Keybinds

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 Structure

~/.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

Notes

  • Resolution. The bar is built and tested at 1080p. For other resolutions, tweak the margins in ActionBar.qml.
  • Bar exclusion zone. The included config.kdl sets struts { 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 /proc directly. No monitoring tools needed.

FAQ

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.

Credits

@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.

About

lightweight Quickshell configuration for Niri Wayland compositor.

Topics

Resources

Stars

19 stars

Watchers

0 watching

Forks

Contributors