A Quickshell-based desktop environment forked from Caelestia Shell, adapted to run with the Niri window manager. This fork keeps the dashboard-based workflow while experimenting with new sidebar features and Niri.
out.mp4
Caution
This fork is outdated and abandoned, it does work but isn't up-to-date. Please check out other forks!
This repo is ONLY for the desktop shell of the caelestia dots. For the default caelestia dots, head to the main repo instead.
Warning
HELP REQUIRED!
I skipped unneccesary commit from original shell named: "bar/workspaces: add special ws overlay" and "bar/workspaces: better scroll" because there is no special workspace in Niri.
Unfortunately, I skipped an important commit from original shell named: "bar: per-monitor workspaces option (#394)"
- Reason: I don't have multi monitor so I'm not sure if this actually works, I might break stuff :/. I need help implementing that feature :)
Replaces Hyprland with Niri as the window manager.
-
Window switch popup
- Dashboard is now opened after clicking on the popup instead of completely popping up and taking up half the screen.
- Window decorations for pinning, hovering window, toggling fullscreen, and closing the window.
-
Experimental Niri management tab in dashboard
- Niri IPC command buttons for focused workspace
- Needs re-design
- Workspace bar refactor (WIP)
- Program Icon support instead of Material Font
- Switch to window by clicking
- Right click context menu
- Allow performing Niri IPC operations in context menu
- Reorder window in workspace by drag&drop
- Grouping windows of same program
- Layout sensitive icons
- Needs rewrite
-
- Niri event parser for Quickshell
-
- Task manager (GPU/CPU/Memory monitoring, still improving)
-
- Collapsible container UI element
-
- Application dock
-
- Searching programs in Niri overview
Note
Some Caelestia features are dropped or WIP due to Niri limitations. See known issues
You need both runtime dependencies and development headers.
- All dependencies in plain text:
quickshell-git networkmanager fish glibc qt6-declarative gcc-libs cava libcava aubio libpipewire lm-sensors ddcutil brightnessctl material-symbols caskaydia-cove-nerd grim swappy app2unit libqalculate
Note
Unlike the default shell,
caelestia-cli is not required for Niri.
Detailed info about all dependencies
| Package | Usage |
|---|---|
quickshell-git |
Must be the git version |
networkmanager |
Network management |
fish |
Terminal |
glibc |
C library (runtime dependency) |
qt6-declarative |
Qt components |
gcc-libs |
GCC runtime |
| Package | Usage |
|---|---|
cava |
Audio visualizer |
libcava |
Visualizer backend |
aubio |
Beat detector |
libpipewire |
Media backend |
lm-sensors |
System usage monitoring |
ddcutil |
Monitor brightness control |
brightnessctl |
Brightness control |
| Package | Usage |
|---|---|
material-symbols |
Icon font |
caskaydia-cove-nerd |
Monospace font |
| Package | Usage |
|---|---|
grim |
Screenshot tool |
swappy |
Screenshot annotation |
app2unit |
Launch apps |
libqalculate |
Calculator |
| Package | Usage |
|---|---|
cmake |
Build tool |
ninja |
๐ฅท |
To install the shell manually, install all dependencies and clone this repo to $XDG_CONFIG_HOME/quickshell/niri-caelestia-shell.
Then simply build and install using cmake.
Note
There is NO package manager installation support yet because... ๐ค
-
Install dependencies.
-
Clone the repo:
cd $XDG_CONFIG_HOME/quickshell git clone https://github.com/jutraim/niri-caelestia-shell
-
Build:
cd $XDG_CONFIG_HOME/quickshell/niri-caelestia-shell cmake -B build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=$HOME \ -DINSTALL_QSCONFDIR=$HOME/.config/quickshell/niri-caelestia-shell cmake --build build cmake --install build
It's trying to install into system paths (
/usr/lib/caelestia/...), so grab the necessary permissions or use sudo while installing.If you get
VERSION is not set and failed to get from giterror, that means I forgot to tag version. You can dogit tag 1.1.1to work around it :)
You can update by running git pull in $XDG_CONFIG_HOME/quickshell/niri-caelestia-shell.
cd $XDG_CONFIG_HOME/quickshell/niri-caelestia-shell
git pullThe shell can be started via the quickshell -c niri-caelestia-shell -n command or qs -c niri-caelestia-shell -n on your preferred terminal.
(
qsandquickshellare interchangable.)
-
Example line for niri
config.kdlto launch the shell at startup:spawn-at-startup "quickshell" "-c" "niri-caelestia-shell" "-n"
All keybinds are accessible via Quickshell IPC msg.
All IPC commands can be called via quickshell -c niri-caelestia-shell ipc call ...
-
For example:
qs -c niri-caelestia-shell ipc call mpris getActive <trackTitle>
-
Example shortcut in
config.kdlto toggle the launcher drawer:Mod+Space { spawn "qs" "-c" "niri-caelestia-shell" "ipc" "call" "drawers" "toggle" "launcher"; }Mod+Space hotkey-overlay-title="Caelestia app launcher" { spawn-sh "qs -c niri-caelestia-shell ipc call drawers toggle launcher"; }
The list of IPC commands can be shown via qs -c shell ipc show.
Ipc Commands
โฏ qs -c shell ipc show
target picker
function openFreeze(): void
function open(): void
target drawers
function list(): string
function toggle(drawer: string): void
target lock
function unlock(): void
function isLocked(): bool
function lock(): void
target wallpaper
function get(): string
function set(path: string): void
function list(): string
target notifs
function clear(): void
target mpris
function next(): void
function previous(): void
function getActive(prop: string): string
function playPause(): void
function pause(): void
function stop(): void
function list(): string
function play(): voidConfig lives in:
~/.config/caelestia/shell.json
Example JSON
{
"appearance": {
"anim": {
"durations": {
"scale": 1
}
},
"font": {
"family": {
"material": "Material Symbols Rounded",
"mono": "CaskaydiaCove NF",
"sans": "Rubik"
},
"size": {
"scale": 1
}
},
"padding": {
"scale": 1
},
"rounding": {
"scale": 1
},
"spacing": {
"scale": 1
},
"transparency": {
"enabled": false,
"base": 0.85,
"layers": 0.4
}
},
"general": {
"apps": {
"terminal": [
"foot"
],
"audio": [
"pavucontrol"
]
}
},
"background": {
"desktopClock": {
"enabled": false
},
"enabled": true,
"visualiser": {
"enabled": true,
"autoHide": true,
"rounding": 1,
"spacing": 1
}
},
"bar": {
"clock": {
"showIcon": false
},
"dragThreshold": 20,
"entries": [
{
"id": "logo",
"enabled": true
},
{
"id": "workspaces",
"enabled": true
},
{
"id": "spacer",
"enabled": true
},
{
"id": "activeWindow",
"enabled": true
},
{
"id": "spacer",
"enabled": true
},
{
"id": "tray",
"enabled": true
},
{
"id": "clock",
"enabled": true
},
{
"id": "statusIcons",
"enabled": true
},
{
"id": "power",
"enabled": true
},
{
"id": "idleInhibitor",
"enabled": false
}
],
"persistent": false,
"showOnHover": true,
"status": {
"showAudio": false,
"showBattery": true,
"showBluetooth": true,
"showMicrophone": false,
"showKbLayout": false,
"showNetwork": true
},
"tray": {
"background": true,
"recolour": true
},
"workspaces": {
"activeIndicator": true,
"activeLabel": "๓ฐฎฏ",
"activeTrail": false,
"groupIconsByApp": true,
"groupingRespectsLayout": true,
"windowRighClickContext": true,
"label": "โฆ",
"occupiedBg": true,
"occupiedLabel": "โ",
"showWindows": true,
"shown": 4,
"windowIconImage": true,
"focusedWindowBlob": true,
"windowIconGap": 0,
"windowIconSize": 30
}
},
"border": {
"rounding": 25,
"thickness": 10
},
"dashboard": {
"mediaUpdateInterval": 500,
"showOnHover": true
},
"launcher": {
"actionPrefix": ">",
"dragThreshold": 50,
"vimKeybinds": false,
"enableDangerousActions": false,
"maxShown": 8,
"maxWallpapers": 9,
"specialPrefix": "@",
"useFuzzy": {
"apps": false,
"actions": false,
"schemes": false,
"variants": false,
"wallpapers": false
},
"showOnHover": false
},
"lock": {
"recolourLogo": false
},
"notifs": {
"actionOnClick": false,
"clearThreshold": 0.3,
"defaultExpireTimeout": 5000,
"expandThreshold": 20,
"expire": false
},
"osd": {
"enabled": true,
"enableBrightness": true,
"enableMicrophone": true,
"hideDelay": 2000
},
"paths": {
"mediaGif": "root:/assets/bongocat.gif",
"sessionGif": "root:/assets/kurukuru.gif",
"wallpaperDir": "~/Pictures/Wallpapers"
},
"services": {
"audioIncrement": 0.1,
"defaultPlayer": "Spotify",
"gpuType": "",
"playerAliases": [
{
"from": "com.github.th_ch.youtube_music",
"to": "YT Music"
}
],
"weatherLocation": "",
"useFahrenheit": false,
"useTwelveHourClock": false,
"smartScheme": true,
"visualiserBars": 45
},
"session": {
"dragThreshold": 30,
"vimKeybinds": false,
"commands": {
"logout": [
"loginctl",
"terminate-user",
""
],
"shutdown": [
"systemctl",
"poweroff"
],
"hibernate": [
"systemctl",
"hibernate"
],
"reboot": [
"systemctl",
"reboot"
]
}
}
}
Example Nix Home Manager
I don't have nix, plz help :D
{
programs.niri-caelestia-shell = {
enable = true;
with-cli = true;
settings.theme.accent = "#ffb86c";
};
}The profile picture for the dashboard is read from the file ~/.face, so to set
it you can copy your image to there or set it via the dashboard. It's not a directory.
The wallpapers for the wallpaper switcher are read from ~/Pictures/Wallpapers
by default. To change it, change the wallpapers path in ~/.config/caelestia/shell.json.
To set the wallpaper, you can use the app launcher command > wallpaper.
- Multi-monitor support is currently hardcoded :(
- Task manager has no Intel GPU support.
- Workspace bar needs refactoring at the moment.
- Picker (screenshot tool) window grabbing is WIP due to Niri limitations.
- Focus grabbing for Quickshell windows (power menu, task manager, settings) behaves awkwardly because of Niri limitations.
- Quickshell may occasionally crash because of upstream issues (it re-opens automagically)
- I'm not happy that you have to build it to be able to use it, so I might revert.
- Some dependencies aren't actually required but I keep them because the original repo still has them.
- I haven't touched theming, be cautious.
Q: Can I theme it?
A: Yes, via shell.json (or Nix options if you use Home Manager).
Q: Why does my task manager Intel GPU messed-up? A: GPU monitoring is limited; Intel isnโt supported yet.
Q: Why does it take so long for you to update? A: Civil unrest in my country ๐ฅ
- Quickshell โ Core shell framework
- Caelestia โ Original project
- Niri โ Window manager backend
- All upstream contributors :)