Naton is a customizable Wayland desktop shell built with Quickshell, QML, and Go for Hyprland and Niri.
- Bar placement at the top, bottom, left, or right edge with configurable margins.
- Workspace switcher, focused application indicator, clock, weather, media, tray, and system widgets on the bar, each independently toggleable.
- Popups for calendar, media, power, and settings, anchored to the bar so they follow its position. Wi-Fi, Bluetooth, audio, battery, and brightness are in their own settings sections.
- Compact control center with pill quick actions (Wi-Fi, Bluetooth, Do Not Disturb, keep screen on), a screenshot button, brightness and volume sliders, CPU/RAM/disk stats, power profiles, theme, and media controls with track switching.
- Separate speaker and microphone volume controls with PipeWire device selection.
- Shared MPRIS controller with album artwork, live playback progress, bar metadata, and a media popup with a blurred artwork backdrop.
- Notification toasts and notification center with per-app muting and optional sound; the list follows the bar position (top to bottom when the bar is on top and bottom to top when it is on the bottom).
- Searchable launcher with application, window, shell-command, and calculator providers; clipboard history; dock/taskbar; calendar agenda from khal.
- Wallpaper picker with extracted color palettes and a dynamic theme that colors shell surfaces from the current wallpaper. Seven palette schemes (
vibrant,faithful,dysfunctional,muted,soft,material,monochrome) with animated color transitions between wallpapers. - Video wallpapers via
mpvpaperwith a static first-frame fallback throughawwwand settings for audio, hardware decoding, scaling, and pausing in Niri's overview. - Persistent settings for the theme, bar, typography (separate sans and mono families with independent scaling), notifications, OSD, wallpaper behavior, and shell appearance.
- Remappable global keyboard shortcuts for opening popups (launcher, settings, clipboard, notifications, power, control center, calendar, media, Wi-Fi, Bluetooth, brightness, keyboard layout, system monitor), edited from Settings and applied to live per-compositor bind overrides.
- Idle policy that locks the session or suspends after a configurable timeout via
swayidle.
.
├── quickshell/ # Quickshell configuration
│ ├── shell.qml # Quickshell entry point
│ ├── Common/ # Shared configuration and singleton services
│ ├── Modules/ # Bar, popups, and settings
│ ├── Widgets/ # Reusable QML components
│ ├── Services/ # QML services
│ ├── keybinds/ # Per-compositor keybind snippets (installed to naton config folders)
│ └── translations/ # UI translations
├── core/ # Go module for natonctl
│ ├── cmd/natonctl/ # natonctl command entry point
│ ├── internal/natonctl/ # Shell-specific command implementation
│ ├── pkg/ # Public Go packages
│ ├── go.mod
│ └── go.sum
└── install.sh # Arch Linux installer
From the repository root:
quickshell --path quickshellTo start the shell automatically, create a symbolic link to the project directory:
ln -s "$(pwd)/quickshell" ~/.config/quickshellThe included installer targets Arch Linux. It installs repository and AUR dependencies, builds natonctl, and links this repository to ~/.config/quickshell without replacing an existing configuration.
./install.shFor Niri, install the event-driven qml-niri integration as a required dependency:
./install.sh --compositor niriyay or paru is required when Vicinae or mpvpaper is not installed because they are installed from the AUR.
| Package | Description |
|---|---|
quickshell |
the shell runtime |
curl |
weather, holidays, and the About section |
awww |
wallpaper daemon |
mpv |
video wallpaper playback |
imagemagick |
palette extraction, thumbnails, wallpaper tiling |
ffmpeg |
video wallpaper thumbnails and first-frame extraction |
brightnessctl |
brightness control |
power-profiles-daemon |
power profiles |
pipewire, pipewire-pulse, wireplumber |
audio |
networkmanager |
Wi-Fi and network status |
bluez, bluez-utils, blueman |
Bluetooth |
qt6-declarative, qt6-svg, qt6-multimedia |
Qt runtime |
ttf-jetbrains-mono-nerd |
icon glyphs |
fontconfig |
selected font lookup for the color picker |
zenity or kdialog |
folder picker |
pavucontrol |
volume control GUI |
wl-clipboard |
clipboard history |
slurp, grim |
region screenshots |
wlsunset |
night light |
khal |
calendar agenda |
swayidle |
configured idle lock or suspend policy |
go1.25+
One of:
- Hyprland —
hyprland,hyprlock,xdg-desktop-portal-hyprland - Niri —
niri, plusbase-devel,cmake,gitto build theqml-nirimodule
vicinae(AUR) — optional external app launcher (the shell ships a built-in launcher)mpvpaper(AUR) — video wallpaper daemoncava— bar music visualizer
Quickshell handles notifications itself — disable any other notification daemon (such as Dunst) so toasts are not duplicated.
natonctl is used by QML components for system operations including brightness, audio, weather, and wallpaper control.
go build -C core -o ../quickshell/natonctl ./cmd/natonctlRebuild the utility and restart Quickshell after changing files under core/.
- Shared configuration is in
quickshell/Common/Config.qml. - User settings are persisted by
quickshell/Common/SettingsStore.qmlinquickshell/settings.json. - Appearance settings: blur, borders, shadows, palette, typography (sans/mono family and scale), bar geometry and margins, per-widget bar toggles, popup positioning, notifications, OSD, and wallpaper rotation are available from the Settings popup.
- Settings sections cover Appearance, Bar, Desktop (Wallpapers), Time/Location, Notifications/OSD, System, Advanced, Battery, Sound, Wi-Fi, Bluetooth, and About. Wi-Fi, Bluetooth, sound, battery, and brightness controls were moved from separate popups into these settings sections; brightness remains on the control center main page.
- Video wallpaper settings (audio, volume, hardware decoding, and pausing in Niri's overview) live in Settings → Wallpapers.
- Region screenshots use
slurpandgrim; clipboard history is available throughqs ipc call clipboard toggle. - Global keyboard shortcuts are edited in Settings → System → Keyboard shortcuts. They persist to
settings.jsonand are written to per-compositor bind overrides: defaults are installed fromquickshell/keybinds/into~/.config/niri/naton/keybinds.kdl(Niri) or~/.config/hypr/naton/keybinds.lua(Hyprland), user overrides under~/.config/niri/naton/binds.kdl(Niri) or~/.config/hypr/naton/binds.lua(Hyprland), and the compositor reloads them automatically. - Dynamic theme stores the extracted wallpaper palette in
dynamicPaletteand applies it to shell surfaces, controls, borders, tracks, and workspace indicators.
git diff --check
quickshell --path quickshell