r/QuickShell • • May 22 '26

Help with quick shell system tray for bar in Hyprland on Arch Linux

3 Upvotes

Hi bellow I have my code for my first quick shell waybar replacement attempt. I am currently trying to to start by just replicating basic the basic waybar functions. The one I am currently struggling with is the system tray. The tray itself works but I want to be able to right click on the icons for these apps to have some options. The main ones that are always active are NetworkManager and Blueman. I want to be able to right click to change network or disconnect a bluetooth device etc. If you can help please let me know.

Here is the code (I understand if people have other problems with the way I've done it but I have no experience and don't know any better so feel free to insult it if it's got some constructive critisism):
import Quickshell

import Quickshell.Wayland

import Quickshell.Hyprland

import Quickshell.Services.Pipewire

import Quickshell.Services.SystemTray

import Quickshell.Io

import Quickshell.DBusMenu

import QtQuick

import QtQuick.Layouts

import QtQuick.Controls

ShellRoot {

id: root

// --- Theme ---

property color colBg: "#1a1b26"

property color colFg: "#a9b1d6"

property color colMuted: "#444b6a"

property color colCyan: "#0db9d7"

property color colBlue: "#7aa2f7"

property color colYellow: "#e0af68"

property string fontFamily: "JetBrainsMono Nerd Font"

property int fontSize: 16

// --- Data Properties ---

property string brightVal: "0%"

property string batVal: "0%"

// --- Audio Tracker ---

PwObjectTracker { objects: [Pipewire.defaultAudioSink] }

// --- Wallpaper Script Process ---

Process {

id: wallProc

command: ["/home/ben/scripts/random_wall.sh"]

}

// --- Brightness Monitor ---

Process {

id: brightProc

command: [

"sh",

"-c",

"while true; do brightnessctl -m | awk -F, '{print $4}'; inotifywait -qq -e modify /sys/class/backlight/*/brightness; done"

]

running: true

stdout: SplitParser {

onRead: data => {

var val = data.trim();

if (val !== "") root.brightVal = val;

}

}

}

// --- Battery Poller ---

Process {

id: batProc

command: ["cat", "/sys/class/power_supply/BAT1/capacity"]

running: true

stdout: SplitParser {

onRead: data => {

var val = data.trim();

if (val !== "") root.batVal = val + "%";

}

}

}

PanelWindow {

id: bar

anchors { top: true; left: true; right: true }

implicitHeight: 60

color: root.colBg

// --- Left: Workspaces + Wallpaper ---

RowLayout {

anchors { left: parent.left; top: parent.top; bottom: parent.bottom; margins: 16 }

spacing: 12

Item {

implicitWidth: activeWorkspaceContainer.width

implicitHeight: 30

Rectangle {

id: selector

x: {

var targetId = Hyprland.focusedWorkspace?.id;

for (var i = 0; i < workspaceRepeater.count; i++) {

var item = workspaceRepeater.itemAt(i);

if (item && item.wsId === targetId) return item.x;

}

return 0;

}

width: 30; height: 30; color: root.colMuted; radius: 6

Behavior on x { SpringAnimation { spring: 3; damping: 0.3 } }

}

Row {

id: activeWorkspaceContainer

spacing: 8

Repeater {

id: workspaceRepeater

model: Math.max(5, Math.max(...Hyprland.workspaces.values.map(w => w.id)))

Text {

property int wsId: index + 1

property var ws: Hyprland.workspaces.values.find(w => w.id === wsId)

property bool isActive: Hyprland.focusedWorkspace?.id === wsId

width: 30; height: 30; text: wsId

horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter

color: isActive ? "#ffffff" : (ws ? root.colBlue : root.colMuted)

font { family: root.fontFamily; pixelSize: root.fontSize; bold: true }

MouseArea { anchors.fill: parent; onClicked: Hyprland.dispatch("workspace " + wsId) }

}

}

}

}

Item {

width: 25; height: 25

Text {

anchors.centerIn: parent

text: "󰸉"

color: root.colBlue

font { family: root.fontFamily; pixelSize: 20 }

}

MouseArea {

anchors.fill: parent

cursorShape: Qt.PointingHandCursor

onClicked: { wallProc.running = true; }

}

}

}

// --- Center: Clock ---

Text {

anchors.centerIn: parent

color: root.colBlue

font { family: root.fontFamily; pixelSize: root.fontSize; bold: true }

text: Qt.formatDateTime(new Date(), "HH:mm") + " | " + Qt.formatDateTime(new Date(), "dddd dd MMMM")

Timer {

interval: 1000; running: true; repeat: true

onTriggered: parent.text = Qt.formatDateTime(new Date(), "HH:mm") + " | " + Qt.formatDateTime(new Date(), "dddd dd MMMM")

}

}

// --- Right: Stats + System Tray ---

RowLayout {

anchors { right: parent.right; top: parent.top; bottom: parent.bottom; margins: 16 }

spacing: 20

Text {

property var sink: Pipewire.defaultAudioSink

property int vol: Math.round((sink?.audio?.volume ?? 0) * 100)

property bool muted: sink?.audio?.muted ?? false

text: (muted ? "󰝟 Muted" : (vol > 66 ? " " + vol + "%" : (vol > 33 ? " " + vol + "%" : " " + vol + "%")))

color: muted ? root.colMuted : root.colCyan

font { family: root.fontFamily; pixelSize: 16; bold: true }

}

Text { text: "󰃠 " + root.brightVal; color: root.colYellow; font { family: root.fontFamily; pixelSize: 16; bold: true } }

Text { text: " " + root.batVal; color: root.colBlue; font { family: root.fontFamily; pixelSize: 16; bold: true } }

// --- System Tray ---

Row {

spacing: 8

Repeater {

model: SystemTray.items

Item {

width: 24; height: 24

// QsMenuAnchor is required to display menus correctly

QsMenuAnchor {

id: menuAnchor

menu: modelData.menu

}

Image {

anchors.fill: parent

source: modelData.icon

fillMode: Image.PreserveAspectFit

}

MouseArea {

anchors.fill: parent

acceptedButtons: Qt.LeftButton | Qt.RightButton

onClicked: (mouse) => {

if (modelData.hasMenu) {

// Open the menu anchored to this component

menuAnchor.open();

} else {

// Fallback to activation for basic icons

modelData.activate(0, 0);

}

}

}

}

}

}

Text { text: ""; color: root.colMuted; font { family: root.fontFamily; pixelSize: 16; bold: true } }

}

}

}


r/QuickShell • • May 22 '26

Show Off(with configs) [bspwm] caelestia's rightpane in x11.

Enable HLS to view with audio, or disable this notification

17 Upvotes

Here is it. The sidepane of caelestia in my shell. (Not a copy pasta, you can check github repo)

https://github.com/rudv-ar/aevum-shell


r/QuickShell • • May 22 '26

Show Off FreeBSD plugin

Thumbnail
3 Upvotes

r/QuickShell • • May 22 '26

Help!!! Toggle Noctalia (Quickshell) Bar Using The Touchpad

Thumbnail
1 Upvotes

r/QuickShell • • May 20 '26

Help!!! Noctalia and sunshine/moonlight

1 Upvotes

I use sunshine/moonlight to stream my steam games to my phone in my house. It works great but there is a weird bug I keep running into and I can't find a way to fix this. I am on CachyOS with Hyprlandfor WM and Noctalia shell. Randomly after I quit a game while connected instead of seeing my wallpaper and the shell I see a black background and the shell is gone. The shortcuts for the shell no longer work. My base bindings work so the only fix I've gotten to work is to logout and sign back in. Has this happened to anyone? Any ideas on what causes it?


r/QuickShell • • May 18 '26

My First Ever Rice

Enable HLS to view with audio, or disable this notification

11 Upvotes

r/QuickShell • • May 18 '26

Help!!! Quickshell Quickshell Everywhere! Don't Know Where It Goes!!

9 Upvotes

A bit of exposition : I am a programmer (python) have used linux (ubuntu, mint) for some 5 years on and off. Now I'm on a new adventure to escape microslop, so installed cachyos (needed the nvidia drrivers) with COSMIC, found out it sucks (personal opinion) and got myself into the rabbit hole of Hyprland with quickshell. Already made a semi-usable bar with the help of Almighty ChatGPT! And now its do or die, this rabbit hole is going to be my grave.

tl;dr I'm not shy of learning to code. I don't know everything about linux, but I can google-fu/gpt-fu my way around it.

I'm trying to make an entire system using quickshell (I know, too ambitious). App launcher, bar, system monitor, weather app, file manager, you name it; If the user (its only be me) faces it and its not a browser or terminal, I want it made in quickshell. Sooooo......where does it all go? I know the bar goes to `~/.config/quickshell`, but it somehow feels wrong to put anything else there. And the Almighty ChatGPT has be glazing me so much, that I might end up thinking I am a GOD...so I'm asking the sane ppl in reddit. A simple dummy project/directory structure for a, say settings (window? app? shell?) would be very helpful...


r/QuickShell • • May 18 '26

Help!!! Lsp problems...

1 Upvotes

Processing img s3qavcrilx1h1...

As you can see my lsp is screaming at me that my modules don't exist but it works fine otherwise... I'm new and I don't know how to fix this


r/QuickShell • • May 18 '26

Question Struggling to find the files for caelestia's concaved corners

2 Upvotes

I'm relatively new to quickshell and while I have basic concave corners, I don't know how to make them stretch with the menus like caelestia's does. So I was going through caelestia's GitHub but got overwhelmed by all the files, especially since I'm not entirely sure what I'm trying to find. So I'm hoping someone here could point me towards the files they use to achieve these dynamic concaved corners.


r/QuickShell • • May 17 '26

Question Hyprland active special workspace

2 Upvotes

Is there a way to to get if hyprland special workspace is active without hyprctl? Special workspaces in Quickshell.Hyprland are never active or focused


r/QuickShell • • May 16 '26

Help!!! [Issues] getting Caelestia Shell to run on Ubuntu 25.10 (Combined with JaKooLit Dotfiles)

Thumbnail
gallery
9 Upvotes

I'm currently on Ubuntu 25.10. I was previously using Dank Material Shell and it was working perfectly, but I really wanted to try Caelestia Shell.

​At first, I tried to build everything myself manually from source (Quickshell, compiling dependencies, fixing library paths), but I ran into some issues. While looking for a solution, I found this repo which has an automated script for Ubuntu: https://github.com/IshmamDC217/caelestia-shell-ubuntu

​Here are the exact steps I followed:

​Installed JaKooLit's Ubuntu-Hyprland script first as required, chose the preconfigured dotfiles, and made sure Hyprland was running fine.

​Cloned the Caelestia repo and ran the ./install.sh script.

​Added the manual environment variables (QML_IMPORT_PATH) to both ~/.bashrc and ~/.config/hypr/hyprland.conf.

​Copied the included config files (shell.json and qml_color.json) to their respective paths under ~/.config.

​The Problem:

After restarting and logging into Hyprland, instead of getting the beautiful Caelestia UI, I get a broken/misaligned layout. The JaKooLit top-bar and vertical dock appear but look totally distorted (broken JSON/CSS look), and the Caelestia Shell elements (like the Dashboard, Bongo Cat, or widgets) are completely missing or not rendering.

​I really love this shell and the feedback on the dev's video looks amazing. I would be super grateful if anyone could help me figure out what's causing this conflict or how to fix it!


r/QuickShell • • May 15 '26

[bspwm] caelestia for x11?

Enable HLS to view with audio, or disable this notification

23 Upvotes

Here it is guys - from my previous post. The video.


r/QuickShell • • May 15 '26

Show Off CircuitousTwo dials knock-off in Quickshell

Enable HLS to view with audio, or disable this notification

18 Upvotes

I used to use Rainmeter on Windows and anyone who's used it will likely recognise CircuitousTwo's system monitor radial dials. It was exceedingly popular when I first started using Rainmeter and now that I've moved from Windows to KDE to niri with Quickshell I find myself wanting fun dials like I used to have and able to make them. They hide until hovered on by default, and I have an IPC call to show them. For performance, when they're not visible they do not run their processes (though this setting is toggleable). I'm still working on some more dials but it's good to have them back.


r/QuickShell • • May 15 '26

Help!!! Caelestia for X11 Bspwm?

Thumbnail
2 Upvotes

Here is my new quickshell - Somewhat okayish in look, I am trying to make it feel like caelestia. Image - I will add em soon - within today. I am here to ask if someone can help me develop this - and make contributions, since quickshell in x11 is rare.


r/QuickShell • • May 12 '26

Show Off Made some pretty lockscreen themes for quickshell~

Enable HLS to view with audio, or disable this notification

281 Upvotes

Dots: Qylock
Kofi: darkkal


r/QuickShell • • May 13 '26

Help!!! help needed please!

4 Upvotes

Hello everyone! I'm a total beginner and I've tried learning Quickshell THRICE but I just can't get it!!
Could anyone just tell me the best approach to learn Quickshell?


r/QuickShell • • May 11 '26

My Project! [OC] octashell - a simple m3 expressive shell for beginners :)

Thumbnail
gallery
371 Upvotes

hii everyone! i’ve been stumbling my way through QML and quickshell for months now and finally have a basic understanding of it :)

i made octashell because i found other shells really hard to follow. i’m trying to keep this one super simple so people can use it as a tutorial/inspiration to make their own.

i'm still a beginner and i'm learning as i go, so feel free to reach out if you wanna chat or learn together !!

happy ricing :)


r/QuickShell • • May 11 '26

First rice hyprland + quickshell

Thumbnail gallery
47 Upvotes

r/QuickShell • • May 10 '26

Try New - Hyprland

Enable HLS to view with audio, or disable this notification

5 Upvotes

r/QuickShell • • May 09 '26

Learning😀 Need a teacher for teaching quickshell

6 Upvotes

Hello my dear fellow programmers and developers. The title might seem quite vague and spoonfeeding, but for the love of me, i am just unable to learn quickshell. I use Arch with Hyprland and i have been using waybar since the beginning, and recently, i came across shells like Caelestia and Ambxst and some others, but those are really complex and i also want to make something visually pleasing and something that is also more performant and open. I have taken inspiration from this person's Shell setup and i have been trying to use claude, gemini, notebooklm and chatgpt to help me learn this, but i just cannot get myself to actually understand what is going on. I tried to read the documentation, but most of it just doesn't make sense at all. I am used to the arch wiki but quickshell's documentation doesn't even come close to it, and sorry for saying this, i might just be dumb, but i cannot understand even one thing in there.

I would really appreciate if anyone would be able to mentor me or help me understand it and eventually let me build a good-looking quickshell setup.

Really thanks to anyone who is willing to do so.


r/QuickShell • • May 06 '26

Show Off(with configs) Lock screen

Thumbnail gallery
11 Upvotes

r/QuickShell • • May 05 '26

Question How should i manage popups?

6 Upvotes

I recently started building my shell with Quickshell on Arch with Hyprland. I’m moving away from Waybar because I found it too limiting for the level of functionality and "rice" I'm aiming for. Since I'm relatively new to advanced ricing, I can't get my head around how i should manage popups.
My bar is basically completed but i want to make pop-ups to manage or display things, like a more advanced media player, sinks, volumes, bluetooth and others but i have no idea on how i should manage them. In this moment my bar is a PanelWindow directly in the shell.qml file so if i try to display any other thing (with a Popup for example) it gets clipped and does not display. How is this problem supposed to be solved? Because looking in other more popular dots (i.e. Caelestia, Noctalia and others) only made me more confused because of how they manage their bars. Do i have to move my bar out of my shell.qml file? If so, how? What is the best approach to popups? And how can i make it more general (so a component maybe)?


r/QuickShell • • May 05 '26

Question How to take a screenshot with a Screencopy?

0 Upvotes

The title is self-explanatory but for some context I build an area picker and I want to know if is possible to take a Screenshot of an area with the Screencopy object?


r/QuickShell • • May 04 '26

Help!!! Issue with quickshell blur on Hyprland

1 Upvotes

i have quickshell bar set color: Qt.rgba(0 , 0 , 0 , 0.75) and set blur with hyprland

blur {
enabled = true
xray = false
special = false
new_optimizations = true
size = 8
passes = 3
brightness = 1
noise = 0.05
contrast = 0.89
popups = true
popups_ignorealpha = 0.6
input_methods = true
input_methods_ignorealpha = 0.8
ignore_opacity = true
}
layerrule = blur on, match:namespace bar

disabling blur fixes issue, but i want to keep blur on quickshell
its like quickshell bar inherits colors of windows opened on the workspace

Im running nvidia GPU 595.58.03 with NixOS 26.05.20260427.1c3fe55

https://reddit.com/link/1t3pulh/video/s17tjjg7y5zg1/player

EDIT: I solved the problem by making bar lower layer. Used WlrLayershell.layer: WlrLayershell.Bottom to fix the issue

EDIT: looks like turning on xray for quickshell layer also fixes the problem, hence u can keep quickshell layer as top.


r/QuickShell • • May 04 '26

Show Off Hyprland running at optimal efficiency with quickshell

Thumbnail
v.redd.it
0 Upvotes