From b97ac0276c3ebc35a1a952ba9bb2aeaba6c2c49c Mon Sep 17 00:00:00 2001 From: lucy Date: Sun, 21 Dec 2025 20:59:33 +0100 Subject: [PATCH] initial commit --- .qmlls.ini | 1 + icons/audio-volume-headphones-symbolic.svg | 8 ++ icons/audio-volume-high-danger-symbolic.svg | 10 +++ icons/audio-volume-high-symbolic.svg | 8 ++ icons/audio-volume-high-warning-symbolic.svg | 10 +++ icons/audio-volume-low-symbolic.svg | 9 ++ icons/audio-volume-medium-symbolic.svg | 9 ++ ...ume-muted-blocking-headphones-symbolic.svg | 8 ++ .../audio-volume-muted-blocking-symbolic.svg | 8 ++ ...audio-volume-muted-headphones-symbolic.svg | 8 ++ icons/audio-volume-muted-symbolic.svg | 8 ++ icons/audio-volume-overamplified-symbolic.svg | 8 ++ icons/battery-000-charging-symbolic.svg | 8 ++ icons/battery-000-symbolic.svg | 9 ++ icons/battery-010-charging-symbolic.svg | 9 ++ icons/battery-010-symbolic.svg | 10 +++ icons/battery-020-charging-symbolic.svg | 9 ++ icons/battery-020-symbolic.svg | 9 ++ icons/battery-030-charging-symbolic.svg | 9 ++ icons/battery-030-symbolic.svg | 9 ++ icons/battery-040-charging-symbolic.svg | 9 ++ icons/battery-040-symbolic.svg | 9 ++ icons/battery-050-charging-symbolic.svg | 9 ++ icons/battery-050-symbolic.svg | 9 ++ icons/battery-060-charging-symbolic.svg | 9 ++ icons/battery-060-symbolic.svg | 9 ++ icons/battery-070-charging-symbolic.svg | 9 ++ icons/battery-070-symbolic.svg | 9 ++ icons/battery-080-charging-symbolic.svg | 9 ++ icons/battery-080-symbolic.svg | 9 ++ icons/battery-090-charging-symbolic.svg | 9 ++ icons/battery-090-symbolic.svg | 9 ++ icons/battery-100-charging-symbolic.svg | 8 ++ icons/battery-100-symbolic.svg | 8 ++ icons/battery-ac-adapter-symbolic.svg | 8 ++ icons/battery-caution-charging-symbolic.svg | 8 ++ icons/battery-caution-symbolic.svg | 9 ++ icons/battery-empty-charging-symbolic.svg | 8 ++ icons/battery-empty-symbolic.svg | 9 ++ icons/battery-full-charged-symbolic.svg | 8 ++ icons/battery-full-charging-symbolic.svg | 8 ++ icons/battery-full-symbolic.svg | 8 ++ icons/battery-good-charging-symbolic.svg | 9 ++ icons/battery-good-symbolic.svg | 9 ++ icons/battery-level-0-charging-symbolic.svg | 8 ++ icons/battery-level-0-symbolic.svg | 9 ++ icons/battery-level-10-charging-symbolic.svg | 9 ++ icons/battery-level-10-symbolic.svg | 10 +++ icons/battery-level-100-charged-symbolic.svg | 8 ++ icons/battery-level-100-symbolic.svg | 8 ++ icons/battery-level-20-charging-symbolic.svg | 9 ++ icons/battery-level-20-symbolic.svg | 9 ++ icons/battery-level-30-charging-symbolic.svg | 9 ++ icons/battery-level-30-symbolic.svg | 9 ++ icons/battery-level-40-charging-symbolic.svg | 9 ++ icons/battery-level-40-symbolic.svg | 9 ++ icons/battery-level-50-charging-symbolic.svg | 9 ++ icons/battery-level-50-symbolic.svg | 9 ++ icons/battery-level-60-charging-symbolic.svg | 9 ++ icons/battery-level-60-symbolic.svg | 9 ++ icons/battery-level-70-charging-symbolic.svg | 9 ++ icons/battery-level-70-symbolic.svg | 9 ++ icons/battery-level-80-charging-symbolic.svg | 9 ++ icons/battery-level-80-symbolic.svg | 9 ++ icons/battery-level-90-charging-symbolic.svg | 9 ++ icons/battery-level-90-symbolic.svg | 9 ++ icons/battery-low-charging-symbolic.svg | 9 ++ icons/battery-low-symbolic.svg | 9 ++ icons/battery-medium-charging-symbolic.svg | 9 ++ icons/battery-medium-symbolic.svg | 9 ++ icons/battery-missing-symbolic.svg | 9 ++ .../battery-profile-performance-symbolic.svg | 6 ++ icons/battery-profile-powersave-symbolic.svg | 6 ++ modules/bar/Appearance.qml | 7 ++ modules/bar/Bar.qml | 39 +++++++++ modules/bar/BarContent.qml | 8 ++ modules/bar/Battery.qml | 26 ++++++ modules/bar/Clock.qml | 12 +++ modules/bar/Colors.qml | 29 +++++++ modules/bar/SystemTray.qml | 25 ++++++ modules/bar/TrayItem.qml | 38 +++++++++ modules/bar/Volume.qml | 82 +++++++++++++++++++ modules/bar/Workspaces.qml | 38 +++++++++ shell.qml | 4 + 84 files changed, 936 insertions(+) create mode 120000 .qmlls.ini create mode 100644 icons/audio-volume-headphones-symbolic.svg create mode 100644 icons/audio-volume-high-danger-symbolic.svg create mode 100644 icons/audio-volume-high-symbolic.svg create mode 100644 icons/audio-volume-high-warning-symbolic.svg create mode 100644 icons/audio-volume-low-symbolic.svg create mode 100644 icons/audio-volume-medium-symbolic.svg create mode 100644 icons/audio-volume-muted-blocking-headphones-symbolic.svg create mode 100644 icons/audio-volume-muted-blocking-symbolic.svg create mode 100644 icons/audio-volume-muted-headphones-symbolic.svg create mode 100644 icons/audio-volume-muted-symbolic.svg create mode 100644 icons/audio-volume-overamplified-symbolic.svg create mode 100644 icons/battery-000-charging-symbolic.svg create mode 100644 icons/battery-000-symbolic.svg create mode 100644 icons/battery-010-charging-symbolic.svg create mode 100644 icons/battery-010-symbolic.svg create mode 100644 icons/battery-020-charging-symbolic.svg create mode 100644 icons/battery-020-symbolic.svg create mode 100644 icons/battery-030-charging-symbolic.svg create mode 100644 icons/battery-030-symbolic.svg create mode 100644 icons/battery-040-charging-symbolic.svg create mode 100644 icons/battery-040-symbolic.svg create mode 100644 icons/battery-050-charging-symbolic.svg create mode 100644 icons/battery-050-symbolic.svg create mode 100644 icons/battery-060-charging-symbolic.svg create mode 100644 icons/battery-060-symbolic.svg create mode 100644 icons/battery-070-charging-symbolic.svg create mode 100644 icons/battery-070-symbolic.svg create mode 100644 icons/battery-080-charging-symbolic.svg create mode 100644 icons/battery-080-symbolic.svg create mode 100644 icons/battery-090-charging-symbolic.svg create mode 100644 icons/battery-090-symbolic.svg create mode 100644 icons/battery-100-charging-symbolic.svg create mode 100644 icons/battery-100-symbolic.svg create mode 100644 icons/battery-ac-adapter-symbolic.svg create mode 100644 icons/battery-caution-charging-symbolic.svg create mode 100644 icons/battery-caution-symbolic.svg create mode 100644 icons/battery-empty-charging-symbolic.svg create mode 100644 icons/battery-empty-symbolic.svg create mode 100644 icons/battery-full-charged-symbolic.svg create mode 100644 icons/battery-full-charging-symbolic.svg create mode 100644 icons/battery-full-symbolic.svg create mode 100644 icons/battery-good-charging-symbolic.svg create mode 100644 icons/battery-good-symbolic.svg create mode 100644 icons/battery-level-0-charging-symbolic.svg create mode 100644 icons/battery-level-0-symbolic.svg create mode 100644 icons/battery-level-10-charging-symbolic.svg create mode 100644 icons/battery-level-10-symbolic.svg create mode 100644 icons/battery-level-100-charged-symbolic.svg create mode 100644 icons/battery-level-100-symbolic.svg create mode 100644 icons/battery-level-20-charging-symbolic.svg create mode 100644 icons/battery-level-20-symbolic.svg create mode 100644 icons/battery-level-30-charging-symbolic.svg create mode 100644 icons/battery-level-30-symbolic.svg create mode 100644 icons/battery-level-40-charging-symbolic.svg create mode 100644 icons/battery-level-40-symbolic.svg create mode 100644 icons/battery-level-50-charging-symbolic.svg create mode 100644 icons/battery-level-50-symbolic.svg create mode 100644 icons/battery-level-60-charging-symbolic.svg create mode 100644 icons/battery-level-60-symbolic.svg create mode 100644 icons/battery-level-70-charging-symbolic.svg create mode 100644 icons/battery-level-70-symbolic.svg create mode 100644 icons/battery-level-80-charging-symbolic.svg create mode 100644 icons/battery-level-80-symbolic.svg create mode 100644 icons/battery-level-90-charging-symbolic.svg create mode 100644 icons/battery-level-90-symbolic.svg create mode 100644 icons/battery-low-charging-symbolic.svg create mode 100644 icons/battery-low-symbolic.svg create mode 100644 icons/battery-medium-charging-symbolic.svg create mode 100644 icons/battery-medium-symbolic.svg create mode 100644 icons/battery-missing-symbolic.svg create mode 100644 icons/battery-profile-performance-symbolic.svg create mode 100644 icons/battery-profile-powersave-symbolic.svg create mode 100644 modules/bar/Appearance.qml create mode 100644 modules/bar/Bar.qml create mode 100644 modules/bar/BarContent.qml create mode 100644 modules/bar/Battery.qml create mode 100644 modules/bar/Clock.qml create mode 100644 modules/bar/Colors.qml create mode 100644 modules/bar/SystemTray.qml create mode 100644 modules/bar/TrayItem.qml create mode 100644 modules/bar/Volume.qml create mode 100644 modules/bar/Workspaces.qml create mode 100644 shell.qml diff --git a/.qmlls.ini b/.qmlls.ini new file mode 120000 index 0000000..2d149fd --- /dev/null +++ b/.qmlls.ini @@ -0,0 +1 @@ +/run/user/1000/quickshell/vfs/1b52f593d70d8ccef6fc467cf768a2ef/.qmlls.ini \ No newline at end of file diff --git a/icons/audio-volume-headphones-symbolic.svg b/icons/audio-volume-headphones-symbolic.svg new file mode 100644 index 0000000..19c7faa --- /dev/null +++ b/icons/audio-volume-headphones-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/audio-volume-high-danger-symbolic.svg b/icons/audio-volume-high-danger-symbolic.svg new file mode 100644 index 0000000..aec691d --- /dev/null +++ b/icons/audio-volume-high-danger-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/icons/audio-volume-high-symbolic.svg b/icons/audio-volume-high-symbolic.svg new file mode 100644 index 0000000..681f942 --- /dev/null +++ b/icons/audio-volume-high-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/audio-volume-high-warning-symbolic.svg b/icons/audio-volume-high-warning-symbolic.svg new file mode 100644 index 0000000..7a909c6 --- /dev/null +++ b/icons/audio-volume-high-warning-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/icons/audio-volume-low-symbolic.svg b/icons/audio-volume-low-symbolic.svg new file mode 100644 index 0000000..b29db89 --- /dev/null +++ b/icons/audio-volume-low-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/audio-volume-medium-symbolic.svg b/icons/audio-volume-medium-symbolic.svg new file mode 100644 index 0000000..e36b90e --- /dev/null +++ b/icons/audio-volume-medium-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/audio-volume-muted-blocking-headphones-symbolic.svg b/icons/audio-volume-muted-blocking-headphones-symbolic.svg new file mode 100644 index 0000000..805c2da --- /dev/null +++ b/icons/audio-volume-muted-blocking-headphones-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/audio-volume-muted-blocking-symbolic.svg b/icons/audio-volume-muted-blocking-symbolic.svg new file mode 100644 index 0000000..252f442 --- /dev/null +++ b/icons/audio-volume-muted-blocking-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/audio-volume-muted-headphones-symbolic.svg b/icons/audio-volume-muted-headphones-symbolic.svg new file mode 100644 index 0000000..805c2da --- /dev/null +++ b/icons/audio-volume-muted-headphones-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/audio-volume-muted-symbolic.svg b/icons/audio-volume-muted-symbolic.svg new file mode 100644 index 0000000..252f442 --- /dev/null +++ b/icons/audio-volume-muted-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/audio-volume-overamplified-symbolic.svg b/icons/audio-volume-overamplified-symbolic.svg new file mode 100644 index 0000000..757d05f --- /dev/null +++ b/icons/audio-volume-overamplified-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-000-charging-symbolic.svg b/icons/battery-000-charging-symbolic.svg new file mode 100644 index 0000000..a29fd59 --- /dev/null +++ b/icons/battery-000-charging-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-000-symbolic.svg b/icons/battery-000-symbolic.svg new file mode 100644 index 0000000..338cc80 --- /dev/null +++ b/icons/battery-000-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-010-charging-symbolic.svg b/icons/battery-010-charging-symbolic.svg new file mode 100644 index 0000000..7de2cea --- /dev/null +++ b/icons/battery-010-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-010-symbolic.svg b/icons/battery-010-symbolic.svg new file mode 100644 index 0000000..e74281d --- /dev/null +++ b/icons/battery-010-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/icons/battery-020-charging-symbolic.svg b/icons/battery-020-charging-symbolic.svg new file mode 100644 index 0000000..ef64cbb --- /dev/null +++ b/icons/battery-020-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-020-symbolic.svg b/icons/battery-020-symbolic.svg new file mode 100644 index 0000000..9d7fa5b --- /dev/null +++ b/icons/battery-020-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-030-charging-symbolic.svg b/icons/battery-030-charging-symbolic.svg new file mode 100644 index 0000000..9cccd3d --- /dev/null +++ b/icons/battery-030-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-030-symbolic.svg b/icons/battery-030-symbolic.svg new file mode 100644 index 0000000..724eb02 --- /dev/null +++ b/icons/battery-030-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-040-charging-symbolic.svg b/icons/battery-040-charging-symbolic.svg new file mode 100644 index 0000000..a0635bf --- /dev/null +++ b/icons/battery-040-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-040-symbolic.svg b/icons/battery-040-symbolic.svg new file mode 100644 index 0000000..659d5fe --- /dev/null +++ b/icons/battery-040-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-050-charging-symbolic.svg b/icons/battery-050-charging-symbolic.svg new file mode 100644 index 0000000..52ade2a --- /dev/null +++ b/icons/battery-050-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-050-symbolic.svg b/icons/battery-050-symbolic.svg new file mode 100644 index 0000000..870c759 --- /dev/null +++ b/icons/battery-050-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-060-charging-symbolic.svg b/icons/battery-060-charging-symbolic.svg new file mode 100644 index 0000000..bc4b098 --- /dev/null +++ b/icons/battery-060-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-060-symbolic.svg b/icons/battery-060-symbolic.svg new file mode 100644 index 0000000..a7df9fc --- /dev/null +++ b/icons/battery-060-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-070-charging-symbolic.svg b/icons/battery-070-charging-symbolic.svg new file mode 100644 index 0000000..82e7527 --- /dev/null +++ b/icons/battery-070-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-070-symbolic.svg b/icons/battery-070-symbolic.svg new file mode 100644 index 0000000..6ec3774 --- /dev/null +++ b/icons/battery-070-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-080-charging-symbolic.svg b/icons/battery-080-charging-symbolic.svg new file mode 100644 index 0000000..60ea72c --- /dev/null +++ b/icons/battery-080-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-080-symbolic.svg b/icons/battery-080-symbolic.svg new file mode 100644 index 0000000..97d75cf --- /dev/null +++ b/icons/battery-080-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-090-charging-symbolic.svg b/icons/battery-090-charging-symbolic.svg new file mode 100644 index 0000000..e1547d7 --- /dev/null +++ b/icons/battery-090-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-090-symbolic.svg b/icons/battery-090-symbolic.svg new file mode 100644 index 0000000..fc844ea --- /dev/null +++ b/icons/battery-090-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-100-charging-symbolic.svg b/icons/battery-100-charging-symbolic.svg new file mode 100644 index 0000000..1043108 --- /dev/null +++ b/icons/battery-100-charging-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-100-symbolic.svg b/icons/battery-100-symbolic.svg new file mode 100644 index 0000000..5b5d3d7 --- /dev/null +++ b/icons/battery-100-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-ac-adapter-symbolic.svg b/icons/battery-ac-adapter-symbolic.svg new file mode 100644 index 0000000..dba0a9b --- /dev/null +++ b/icons/battery-ac-adapter-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-caution-charging-symbolic.svg b/icons/battery-caution-charging-symbolic.svg new file mode 100644 index 0000000..a29fd59 --- /dev/null +++ b/icons/battery-caution-charging-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-caution-symbolic.svg b/icons/battery-caution-symbolic.svg new file mode 100644 index 0000000..338cc80 --- /dev/null +++ b/icons/battery-caution-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-empty-charging-symbolic.svg b/icons/battery-empty-charging-symbolic.svg new file mode 100644 index 0000000..a29fd59 --- /dev/null +++ b/icons/battery-empty-charging-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-empty-symbolic.svg b/icons/battery-empty-symbolic.svg new file mode 100644 index 0000000..338cc80 --- /dev/null +++ b/icons/battery-empty-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-full-charged-symbolic.svg b/icons/battery-full-charged-symbolic.svg new file mode 100644 index 0000000..1043108 --- /dev/null +++ b/icons/battery-full-charged-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-full-charging-symbolic.svg b/icons/battery-full-charging-symbolic.svg new file mode 100644 index 0000000..1043108 --- /dev/null +++ b/icons/battery-full-charging-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-full-symbolic.svg b/icons/battery-full-symbolic.svg new file mode 100644 index 0000000..5b5d3d7 --- /dev/null +++ b/icons/battery-full-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-good-charging-symbolic.svg b/icons/battery-good-charging-symbolic.svg new file mode 100644 index 0000000..60ea72c --- /dev/null +++ b/icons/battery-good-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-good-symbolic.svg b/icons/battery-good-symbolic.svg new file mode 100644 index 0000000..97d75cf --- /dev/null +++ b/icons/battery-good-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-0-charging-symbolic.svg b/icons/battery-level-0-charging-symbolic.svg new file mode 100644 index 0000000..a29fd59 --- /dev/null +++ b/icons/battery-level-0-charging-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-level-0-symbolic.svg b/icons/battery-level-0-symbolic.svg new file mode 100644 index 0000000..338cc80 --- /dev/null +++ b/icons/battery-level-0-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-10-charging-symbolic.svg b/icons/battery-level-10-charging-symbolic.svg new file mode 100644 index 0000000..7de2cea --- /dev/null +++ b/icons/battery-level-10-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-10-symbolic.svg b/icons/battery-level-10-symbolic.svg new file mode 100644 index 0000000..e74281d --- /dev/null +++ b/icons/battery-level-10-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/icons/battery-level-100-charged-symbolic.svg b/icons/battery-level-100-charged-symbolic.svg new file mode 100644 index 0000000..1043108 --- /dev/null +++ b/icons/battery-level-100-charged-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-level-100-symbolic.svg b/icons/battery-level-100-symbolic.svg new file mode 100644 index 0000000..5b5d3d7 --- /dev/null +++ b/icons/battery-level-100-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/icons/battery-level-20-charging-symbolic.svg b/icons/battery-level-20-charging-symbolic.svg new file mode 100644 index 0000000..ef64cbb --- /dev/null +++ b/icons/battery-level-20-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-20-symbolic.svg b/icons/battery-level-20-symbolic.svg new file mode 100644 index 0000000..9d7fa5b --- /dev/null +++ b/icons/battery-level-20-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-30-charging-symbolic.svg b/icons/battery-level-30-charging-symbolic.svg new file mode 100644 index 0000000..9cccd3d --- /dev/null +++ b/icons/battery-level-30-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-30-symbolic.svg b/icons/battery-level-30-symbolic.svg new file mode 100644 index 0000000..724eb02 --- /dev/null +++ b/icons/battery-level-30-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-40-charging-symbolic.svg b/icons/battery-level-40-charging-symbolic.svg new file mode 100644 index 0000000..a0635bf --- /dev/null +++ b/icons/battery-level-40-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-40-symbolic.svg b/icons/battery-level-40-symbolic.svg new file mode 100644 index 0000000..659d5fe --- /dev/null +++ b/icons/battery-level-40-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-50-charging-symbolic.svg b/icons/battery-level-50-charging-symbolic.svg new file mode 100644 index 0000000..52ade2a --- /dev/null +++ b/icons/battery-level-50-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-50-symbolic.svg b/icons/battery-level-50-symbolic.svg new file mode 100644 index 0000000..870c759 --- /dev/null +++ b/icons/battery-level-50-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-60-charging-symbolic.svg b/icons/battery-level-60-charging-symbolic.svg new file mode 100644 index 0000000..bc4b098 --- /dev/null +++ b/icons/battery-level-60-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-60-symbolic.svg b/icons/battery-level-60-symbolic.svg new file mode 100644 index 0000000..a7df9fc --- /dev/null +++ b/icons/battery-level-60-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-70-charging-symbolic.svg b/icons/battery-level-70-charging-symbolic.svg new file mode 100644 index 0000000..82e7527 --- /dev/null +++ b/icons/battery-level-70-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-70-symbolic.svg b/icons/battery-level-70-symbolic.svg new file mode 100644 index 0000000..6ec3774 --- /dev/null +++ b/icons/battery-level-70-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-80-charging-symbolic.svg b/icons/battery-level-80-charging-symbolic.svg new file mode 100644 index 0000000..60ea72c --- /dev/null +++ b/icons/battery-level-80-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-80-symbolic.svg b/icons/battery-level-80-symbolic.svg new file mode 100644 index 0000000..97d75cf --- /dev/null +++ b/icons/battery-level-80-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-90-charging-symbolic.svg b/icons/battery-level-90-charging-symbolic.svg new file mode 100644 index 0000000..e1547d7 --- /dev/null +++ b/icons/battery-level-90-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-level-90-symbolic.svg b/icons/battery-level-90-symbolic.svg new file mode 100644 index 0000000..fc844ea --- /dev/null +++ b/icons/battery-level-90-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-low-charging-symbolic.svg b/icons/battery-low-charging-symbolic.svg new file mode 100644 index 0000000..ef64cbb --- /dev/null +++ b/icons/battery-low-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-low-symbolic.svg b/icons/battery-low-symbolic.svg new file mode 100644 index 0000000..9d7fa5b --- /dev/null +++ b/icons/battery-low-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-medium-charging-symbolic.svg b/icons/battery-medium-charging-symbolic.svg new file mode 100644 index 0000000..52ade2a --- /dev/null +++ b/icons/battery-medium-charging-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-medium-symbolic.svg b/icons/battery-medium-symbolic.svg new file mode 100644 index 0000000..870c759 --- /dev/null +++ b/icons/battery-medium-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-missing-symbolic.svg b/icons/battery-missing-symbolic.svg new file mode 100644 index 0000000..073a144 --- /dev/null +++ b/icons/battery-missing-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/icons/battery-profile-performance-symbolic.svg b/icons/battery-profile-performance-symbolic.svg new file mode 100644 index 0000000..d90fc19 --- /dev/null +++ b/icons/battery-profile-performance-symbolic.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/icons/battery-profile-powersave-symbolic.svg b/icons/battery-profile-powersave-symbolic.svg new file mode 100644 index 0000000..e77335f --- /dev/null +++ b/icons/battery-profile-powersave-symbolic.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/modules/bar/Appearance.qml b/modules/bar/Appearance.qml new file mode 100644 index 0000000..1a7c411 --- /dev/null +++ b/modules/bar/Appearance.qml @@ -0,0 +1,7 @@ +pragma Singleton +import QtQuick + +QtObject { + readonly property string font: "JetBrainsMono Nerd Font" + readonly property real fontSize: 14 +} diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml new file mode 100644 index 0000000..c8502d3 --- /dev/null +++ b/modules/bar/Bar.qml @@ -0,0 +1,39 @@ +import Quickshell +import QtQuick +import qs.modules.bar +import QtQuick.Layouts + +PanelWindow { + id: root + implicitHeight: 30 + color: Colors.background + anchors { + top: true + left: true + right: true + } + + RowLayout { + id: leftLayout + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + Workspaces {} + } + + RowLayout { + id: centerLayout + anchors.centerIn: parent + } + + RowLayout { + id: rightLayout + spacing: 0 + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + Volume {} + Battery {} + SystemTray { + Layout.rightMargin: 10 + } + } +} diff --git a/modules/bar/BarContent.qml b/modules/bar/BarContent.qml new file mode 100644 index 0000000..e3e9738 --- /dev/null +++ b/modules/bar/BarContent.qml @@ -0,0 +1,8 @@ +import Quickshell +import QtQuick +import QtQuick.Layouts + +RowLayout { + id: leftLayout + anchors.left: parent.left +} diff --git a/modules/bar/Battery.qml b/modules/bar/Battery.qml new file mode 100644 index 0000000..bc9a20c --- /dev/null +++ b/modules/bar/Battery.qml @@ -0,0 +1,26 @@ +import Quickshell.Services.UPower +import QtQuick +import Quickshell.Widgets + +Item { + id: root + implicitWidth: batRow.implicitWidth + 10 + implicitHeight: batRow.implicitHeight + Row { + id: batRow + anchors.centerIn: parent + spacing: 0 + IconImage { + source: "root:/icons/" + UPower.displayDevice.iconName + ".svg" + implicitWidth: 16 + implicitHeight: 16 + } + Text { + id: batteryText + font.family: Appearance.font + font.pixelSize: Appearance.fontSize + color: Colors.foreground + text: Math.round(UPower.displayDevice.percentage * 100) + "%" + } + } +} diff --git a/modules/bar/Clock.qml b/modules/bar/Clock.qml new file mode 100644 index 0000000..4f278c7 --- /dev/null +++ b/modules/bar/Clock.qml @@ -0,0 +1,12 @@ +import QtQuick +import Quickshell + +Item { + id: root + implicitWidth: clockText.text.length + 10 + Text { + id: clockText + anchors.centerIn: parent + text: "sigma balls" + } +} diff --git a/modules/bar/Colors.qml b/modules/bar/Colors.qml new file mode 100644 index 0000000..9ff2046 --- /dev/null +++ b/modules/bar/Colors.qml @@ -0,0 +1,29 @@ +pragma Singleton +import QtQuick +import Quickshell + +Singleton { + id: customColors + // Core Backgrounds + readonly property color background: "#1F1F28" + readonly property color foreground: "#DCD7BA" + readonly property color cursor: "#DCD7BA" + + // The 16 Colors of the Apocalypse + readonly property color color0: "#090618" + readonly property color color1: "#C34043" + readonly property color color2: "#76946A" + readonly property color color3: "#C0A36E" + readonly property color color4: "#7E9CD8" + readonly property color color5: "#957FB8" + readonly property color color6: "#6A9589" + readonly property color color7: "#C8C093" + readonly property color color8: "#727169" + readonly property color color9: "#E82424" + readonly property color color10: "#98BB6C" + readonly property color color11: "#E6C384" + readonly property color color12: "#7FB4CA" + readonly property color color13: "#938AA9" + readonly property color color14: "#7AA89F" + readonly property color color15: "#DCD7BA" +} diff --git a/modules/bar/SystemTray.qml b/modules/bar/SystemTray.qml new file mode 100644 index 0000000..6993ec4 --- /dev/null +++ b/modules/bar/SystemTray.qml @@ -0,0 +1,25 @@ +import Quickshell.Services.SystemTray +import QtQuick + +Item { + id: root + clip: true + + // This was already correct in your last file, but keep it this way! + implicitWidth: layout.implicitWidth + 10 + implicitHeight: 30 + + // Hide if empty so we don't have a 50px gap for nothing + visible: layout.children.length > 0 + + Row { + id: layout + anchors.centerIn: parent + spacing: 10 // Spacing between icons + + Repeater { + model: SystemTray.items + delegate: TrayItem {} + } + } +} diff --git a/modules/bar/TrayItem.qml b/modules/bar/TrayItem.qml new file mode 100644 index 0000000..5096b70 --- /dev/null +++ b/modules/bar/TrayItem.qml @@ -0,0 +1,38 @@ +pragma ComponentBehavior: Bound + +import QtQuick +import Quickshell +import Quickshell.Services.SystemTray +import Quickshell.Widgets + +MouseArea { + id: root + property var bar: root.QsWindow.window + required property SystemTrayItem modelData + + acceptedButtons: Qt.LeftButton | Qt.RightButton + implicitWidth: 16 + implicitHeight: 16 + + onClicked: event => { + if (event.button === Qt.LeftButton) { + modelData.activate(); + } else if (modelData.hasMenu) { + menu.open(); + } + } + + QsMenuAnchor { + id: menu + menu: root.modelData.menu + anchor.item: root + } + + IconImage { + id: trayIcon + width: parent.implicitWidth + height: parent.implicitHeight + source: root.modelData.icon + anchors.centerIn: parent + } +} diff --git a/modules/bar/Volume.qml b/modules/bar/Volume.qml new file mode 100644 index 0000000..903296a --- /dev/null +++ b/modules/bar/Volume.qml @@ -0,0 +1,82 @@ +import QtQuick +import Quickshell.Services.Pipewire +import Quickshell.Widgets + +Item { + id: root + implicitWidth: volRow.implicitWidth + 10 + implicitHeight: volRow.implicitHeight + // grab the default speaker (Sink) + property var sink: Pipewire.defaultAudioSink + + // Logic to pick the correct icon name + function getVolumeIcon() { + // Safety check: if Pipewire is dead or sink is missing + if (!sink) + return "audio-volume-muted-blocking"; + + // If muted, show the hush icon + if (sink.audio.muted) + return "audio-volume-muted"; + + // Volume is usually 0.0 to 1.0 (0% to 100%) + const vol = sink.audio.volume; + + if (vol <= 0.0) + return "audio-volume-low"; + if (vol < 0.33) + return "audio-volume-low"; + if (vol < 0.66) + return "audio-volume-medium"; + + // If it's loud, prepare the ears! + return "audio-volume-high"; + } + + Row { + id: volRow + anchors.centerIn: parent + spacing: 5 + + IconImage { + width: 16 + height: 16 + + // The magic: 'image://theme/' pulls from your system icon theme (Papirus, Adwaita, etc.) + source: "root:/icons/" + root.getVolumeIcon() + "-symbolic.svg" + + // Optional: Tint the icon if your theme needs it + // sourceSize: Qt.size(24, 24) + } + + Text { + PwObjectTracker { + objects: Pipewire.defaultAudioSink + } + color: Colors.foreground + font.family: Appearance.font + font.pixelSize: Appearance.fontSize + text: Math.round(Pipewire.defaultAudioSink.audio.volume * 100) + "%" + MouseArea { + anchors.fill: parent + onClicked: { + if (root.sink) { + root.sink.audio.muted = !root.sink.audio.muted; + } + } + // Scroll to change volume (The fancy stuff!) + onWheel: wheel => { + if (root.sink) { + if (wheel.angleDelta.y > 0) { + root.sink.audio.volume += 0.05; // Up 5% + } else { + root.sink.audio.volume -= 0.05; // Down 5% + } + } + } + } + } + + // Click to toggle mute! (Bonus feature) + } +} diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml new file mode 100644 index 0000000..dd38a80 --- /dev/null +++ b/modules/bar/Workspaces.qml @@ -0,0 +1,38 @@ + + +import Quickshell.Hyprland +import QtQuick +import QtQuick.Layouts + +Item { + id: root + implicitWidth: workspaceRepeater.count * 30 + height: 30 + Row { + anchors.centerIn: parent + spacing: 10 // Slightly increase spacing between workspace buttons + + Repeater { + id: workspaceRepeater + model: Hyprland.workspaces + + Rectangle { + width: 20 + height: 20 + radius: 20 + //color: modelData.active ? myPallete.accent : myPallete.window + color: modelData.active ? Colors.foreground : "transparent" + + Text { + id: workspaceNumber + font.weight: 900 + font.family: Appearance.font + font.pixelSize: Appearance.fontSize + anchors.centerIn: parent + text: modelData.id + color: modelData.active ? Colors.background : Colors.foreground // Set contrasting color for workspace number + } + } + } + } +} diff --git a/shell.qml b/shell.qml new file mode 100644 index 0000000..5aff166 --- /dev/null +++ b/shell.qml @@ -0,0 +1,4 @@ +//@ pragma UseQApplication +import qs.modules.bar + +Bar {}