NoSignal shell — soft-fork of caelestia-dots/shell. Backup mirror of github.com/28allday/nosignal-shell.
Find a file
Soramane 81aa5324f4 dev: better direnv
Move rebuild logic to direnv instead of nix
2025-08-29 23:38:28 +10:00
.github ci: no cpack 2025-08-29 01:00:43 +10:00
.vscode hyprland: use qs hyprland service 2025-04-28 00:17:39 +10:00
assets nix: fix + expose lib stuff 2025-08-29 15:30:09 +10:00
components plugin/cim: update on size change 2025-08-29 23:37:50 +10:00
config config: disable visualiser by default 2025-08-27 23:09:10 +10:00
modules osd: fix scroll sens 2025-08-28 15:47:24 +10:00
nix cmake: better modules enable/disable 2025-08-29 19:41:26 +10:00
plugin plugin/cim: update on size change 2025-08-29 23:37:50 +10:00
services lock: show keyboard layout 2025-08-28 15:27:20 +10:00
utils internal: move notif icon lower 2025-08-27 18:02:51 +10:00
.envrc dev: better direnv 2025-08-29 23:38:28 +10:00
.gitignore plugin: add saveItem 2025-08-26 20:39:26 +10:00
CMakeLists.txt cmake: better modules enable/disable 2025-08-29 19:41:26 +10:00
flake.lock [CI] chore: update flake 2025-08-24 01:20:23 +00:00
flake.nix dev: better direnv 2025-08-29 23:38:28 +10:00
LICENSE Create LICENSE 2025-05-27 01:28:12 +10:00
README.md readme: add local changes example 2025-08-29 00:43:57 +10:00
shell.qml internal: scroll fix part 2 2025-07-10 00:27:18 +10:00

caelestia-shell

GitHub last commit GitHub Repo stars GitHub repo size Ko-Fi donate

https://github.com/user-attachments/assets/0840f496-575c-4ca6-83a8-87bb01a85c5f

Components

Installation

Note

This repo is for the desktop shell of the caelestia dots. If you want installation instructions for the entire dots, head to the main repo instead.

Package manager

Note

If you want to make your own changes/tweaks to the shell do NOT edit the files installed by the AUR package. Instead, follow the instructions in the manual installation section.

The shell is available from the AUR as caelestia-shell-git. You can install it with an AUR helper like yay or manually downloading the PKGBUILD and running makepkg -si.

Nix

You can run the shell directly via nix run:

nix run github:caelestia-dots/shell

Or add it to your system configuration:

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

    caelestia-shell = {
      url = "github:caelestia-dots/shell";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };
}

The package is available as caelestia-shell.packages.<system>.default, which can be added to your environment.systemPackages, users.users.<username>.packages, home.packages if using home-manager, or a devshell. The shell can then be run via caelestia-shell.

Tip

The default package does not have the CLI enabled by default, which is required for full funcionality. To enable the CLI, use the with-cli package.

Manual installation

Dependencies:

Build dependencies:

To install the shell manually, install all dependencies and clone this repo to $XDG_CONFIG_HOME/quickshell/caelestia. Then simply build and install using cmake.

cd $XDG_CONFIG_HOME/quickshell
git clone https://github.com/caelestia-dots/shell.git caelestia

cd caelestia
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/
cmake --build build
sudo cmake --install build

Tip

You can customise the installation location via the cmake flags INSTALL_LIBDIR, INSTALL_QMLDIR and INSTALL_QSCONFDIR for the libraries (the beat detector), QML plugin and Quickshell config directories respectively. If changing the library directory, remember to set the CAELESTIA_LIB_DIR environment variable to the custom directory when launching the shell.

e.g. installing to ~/.config/quickshell/caelestia for easy local changes:

mkdir -p ~/.config/quickshell/caelestia
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/ -DINSTALL_QSCONFDIR=~/.config/quickshell/caelestia
cmake --build build
sudo cmake --install build
sudo chown -R $USER ~/.config/quickshell/caelestia

Usage

The shell can be started via the caelestia shell -d command or qs -c caelestia. If the entire caelestia dots are installed, the shell will be autostarted on login via an exec-once in the hyprland config.

Shortcuts/IPC

All keybinds are accessible via Hyprland global shortcuts. If using the entire caelestia dots, the keybinds are already configured for you. Otherwise, this file contains an example on how to use global shortcuts.

All IPC commands can be accessed via caelestia shell .... For example

caelestia shell mpris getActive trackTitle

The list of IPC commands can be shown via caelestia shell -s:

$ caelestia shell -s
target drawers
  function toggle(drawer: string): void
  function list(): string
target notifs
  function clear(): void
target lock
  function lock(): void
  function unlock(): void
  function isLocked(): bool
target mpris
  function playPause(): void
  function getActive(prop: string): string
  function next(): void
  function stop(): void
  function play(): void
  function list(): string
  function pause(): void
  function previous(): void
target picker
  function openFreeze(): void
  function open(): void
target wallpaper
  function set(path: string): void
  function get(): string
  function list(): string

PFP/Wallpapers

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.

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 command caelestia wallpaper. Use caelestia wallpaper -h for more info about the command.

Updating

If installed via the AUR package, simply update your system (e.g. using yay).

If installed manually, you can update by running git pull in $XDG_CONFIG_HOME/quickshell/caelestia.

cd $XDG_CONFIG_HOME/quickshell/caelestia
git pull

Configuring

All configuration options should be put in ~/.config/caelestia/shell.json. This file is not created by default, you must create it manually.

For NixOS users, a home manager module is also available.

home.nix
programs.caelestia = {
  enable = true;
  settings = {
    bar.status = {
      showBattery = false;
    };
    paths.wallpaperDir = "~/Images";
  };
};

Note

The example configuration only includes recommended configuration options. For more advanced customisation such as modifying the size of individual items or changing constants in the code, there are some other options which can be found in the source files in the config directory.

Example configuration
{
    "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": false,
            "autoHide": true,
            "rounding": 1,
            "spacing": 1
        }
    },
    "bar": {
        "clock": {
            "showIcon": true
        },
        "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": true,
        "showOnHover": true,
        "status": {
            "showAudio": false,
            "showBattery": true,
            "showBluetooth": true,
            "showKbLayout": false,
            "showNetwork": true
        },
        "tray": {
            "background": false,
            "recolour": false
        },
        "workspaces": {
            "activeIndicator": true,
            "activeLabel": "󰮯",
            "activeTrail": false,
            "label": "  ",
            "occupiedBg": false,
            "occupiedLabel": "󰮯",
            "perMonitorWorkspaces": true,
            "showWindows": true,
            "shown": 5
        }
    },
    "border": {
        "rounding": 25,
        "thickness": 10
    },
    "dashboard": {
        "enabled": true,
        "dragThreshold": 50,
        "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
        }
    },
    "lock": {
        "recolourLogo": false
    },
    "notifs": {
        "actionOnClick": false,
        "clearThreshold": 0.3,
        "defaultExpireTimeout": 5000,
        "expandThreshold": 20,
        "expire": false
    },
    "osd": {
        "enabled": true,
        "enableBrightness": true,
        "enableMicrophone": false,
        "hideDelay": 2000
    },
    "paths": {
        "mediaGif": "root:/assets/bongocat.gif",
        "sessionGif": "root:/assets/kurukuru.gif",
        "wallpaperDir": "~/Pictures/Wallpapers"
    },
    "services": {
        "audioIncrement": 0.1,
        "defaultPlayer": "Spotify",
        "gpuType": "",
        "playerAliases": [
            {
                "com.github.th_ch.youtube_music": "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"]
        }
    }
}

FAQ

My screen is flickering, help pls!

Try disabling VRR in the hyprland config. You can do this by adding the following to ~/.config/caelestia/hypr-user.conf:

misc {
    vrr = 0
}

I want to make my own changes to the hyprland config!

You can add your custom hyprland configs to ~/.config/caelestia/hypr-user.conf.

I want to make my own changes to other stuff!

See the manual installation section for the corresponding repo.

I want to disable XXX feature!

Please read the configuring section in the readme. If there is no corresponding option, make feature request.

How do I make my colour scheme change with my wallpaper?

Set a wallpaper via the launcher or caelestia wallpaper and set the scheme to the dynamic scheme via the launcher or caelestia scheme set. e.g.

caelestia wallpaper -f <path/to/file>
caelestia scheme set -n dynamic

My wallpapers aren't showing up in the launcher!

The launcher pulls wallpapers from ~/Pictures/Wallpapers by default. You can change this in the config. Additionally, the launcher only shows an odd number of wallpapers at one time. If you only have 2 wallpapers, consider getting more (or just putting one).

Credits

Thanks to the Hyprland discord community (especially the homies in #rice-discussion) for all the help and suggestions for improving these dots!

A special thanks to @outfoxxed for making Quickshell and the effort put into fixing issues and implementing various feature requests.

Another special thanks to @end_4 for his config which helped me a lot with learning how to use Quickshell.

Finally another thank you to all the configs I took inspiration from (only one for now):

Stonks 📈

Star History Chart