summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-04-07 13:38:23 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-04-07 13:38:23 +1000
commit4a1a3a6d8915474c2e25f2f1f5e3ec8c84543081 (patch)
tree192042cf1a8066d340a7b9a14071a9cf6d02c7b9
parentthumbnailer: fix exact sizing creating background (diff)
downloadcaelestia-shell-4a1a3a6d8915474c2e25f2f1f5e3ec8c84543081.tar.gz
caelestia-shell-4a1a3a6d8915474c2e25f2f1f5e3ec8c84543081.tar.bz2
caelestia-shell-4a1a3a6d8915474c2e25f2f1f5e3ec8c84543081.zip
bar: add optional labels for workspaces
Also can customise labels
-rw-r--r--scss/bar.scss75
-rw-r--r--src/config/defaults.ts3
-rw-r--r--src/config/types.ts3
-rw-r--r--src/modules/bar.tsx51
4 files changed, 97 insertions, 35 deletions
diff --git a/scss/bar.scss b/scss/bar.scss
index 9003ce6..a01e8ee 100644
--- a/scss/bar.scss
+++ b/scss/bar.scss
@@ -40,20 +40,43 @@
}
}
- .workspaces > * {
- @include lib.rounded(100);
- @include lib.element-decel;
+ .workspaces {
+ & > button {
+ @include lib.rounded(100);
+ @include lib.element-decel;
+
+ font-size: lib.s(13);
+ font-weight: bold;
+
+ &.focused {
+ background-color: scheme.$mauve;
+ }
+ }
+
+ &:not(.labels-shown) > button {
+ min-width: lib.s(8);
+ min-height: lib.s(8);
+ background-color: scheme.$surface1;
- min-width: lib.s(8);
- min-height: lib.s(8);
- background-color: scheme.$surface1;
+ &.occupied {
+ background-color: scheme.$overlay1;
+ }
- &.occupied {
- background-color: scheme.$overlay1;
+ &.focused {
+ background-color: scheme.$mauve;
+ }
}
- &.focused {
- background-color: scheme.$mauve;
+ &.labels-shown > button {
+ color: color.change(scheme.$overlay1, $alpha: 1);
+
+ &.occupied {
+ color: color.mix(scheme.$text, scheme.$mauve, 50%);
+ }
+
+ &.focused {
+ color: color.change(scheme.$base, $alpha: 1);
+ }
}
}
@@ -126,13 +149,21 @@
}
.workspaces {
- padding: lib.s(3) lib.s(18);
-
@include lib.spacing(10);
& > .focused {
min-width: lib.s(30);
}
+
+ &.labels-shown > button {
+ padding: lib.s(3) lib.s(8);
+
+ &.focused {
+ min-width: 0;
+ padding-left: lib.s(20);
+ padding-right: lib.s(20);
+ }
+ }
}
.tray {
@@ -167,13 +198,21 @@
}
.workspaces {
- padding: lib.s(18) lib.s(3);
-
@include lib.spacing(10, true);
& > .focused {
min-height: lib.s(30);
}
+
+ &.labels-shown > button {
+ padding: lib.s(3) lib.s(8);
+
+ &.focused {
+ min-height: 0;
+ padding-top: lib.s(15);
+ padding-bottom: lib.s(15);
+ }
+ }
}
.tray {
@@ -222,10 +261,18 @@
&.horizontal {
@include bar-spacing;
+
+ .workspaces {
+ padding: lib.s(6) lib.s(15);
+ }
}
&.vertical {
@include bar-spacing(true);
+
+ .workspaces {
+ padding: lib.s(15) lib.s(6);
+ }
}
}
diff --git a/src/config/defaults.ts b/src/config/defaults.ts
index f375620..7532d7f 100644
--- a/src/config/defaults.ts
+++ b/src/config/defaults.ts
@@ -46,6 +46,9 @@ export default {
modules: {
workspaces: {
shown: 5,
+ showLabels: false,
+ labels: ["󰮯", "󰮯", "󰮯", "󰮯", "󰮯"],
+ xalign: -1,
},
dateTime: {
format: "%d/%m/%y %R",
diff --git a/src/config/types.ts b/src/config/types.ts
index 226b2dd..0a30145 100644
--- a/src/config/types.ts
+++ b/src/config/types.ts
@@ -34,6 +34,9 @@ export default {
"bar.layout.centerbox.end": ARR(barModules),
"bar.layout.flowbox": ARR(barModules),
"bar.modules.workspaces.shown": NUM,
+ "bar.modules.workspaces.showLabels": BOOL,
+ "bar.modules.workspaces.labels": ARR(STR),
+ "bar.modules.workspaces.xalign": NUM,
"bar.modules.dateTime.format": STR,
"bar.modules.dateTime.detailedFormat": STR,
// Launcher
diff --git a/src/modules/bar.tsx b/src/modules/bar.tsx
index 998a442..97ce4d5 100644
--- a/src/modules/bar.tsx
+++ b/src/modules/bar.tsx
@@ -209,6 +209,7 @@ const Workspace = ({ idx }: { idx: number }) => {
config.modules.workspaces.shown.get() +
idx
: idx;
+
return (
<button
halign={Gtk.Align.CENTER}
@@ -239,31 +240,39 @@ const Workspace = ({ idx }: { idx: number }) => {
self.toggleClassName("focused", hyprland.focusedWorkspace?.id === wsId);
update();
}}
- />
+ >
+ <label
+ visible={bind(config.modules.workspaces.showLabels)}
+ css={bind(config.modules.workspaces.xalign).as(a => `margin-left: ${a}px; margin-right: ${-a}px;`)}
+ label={bind(config.modules.workspaces.labels).as(l => l[idx - 1] ?? String(idx))}
+ />
+ </button>
);
};
-const Workspaces = ({ monitor, ...props }: ModuleProps) => (
- <eventbox
- onScroll={(_, event) => {
- const activeWs = hyprland.focusedClient?.workspace.name;
- if (activeWs?.startsWith("special:")) hyprland.dispatch("togglespecialworkspace", activeWs.slice(8));
- else if (event.delta_y > 0 || hyprland.focusedWorkspace?.id > 1)
- hyprland.dispatch("workspace", (event.delta_y < 0 ? "-" : "+") + 1);
- }}
- >
- <box
- vertical={bind(config.vertical)}
- className={bind(config.modules.workspaces.shown).as(
- s => `module workspaces ${s % 2 === 0 ? "even" : "odd"} ${getClassName(props)}`
- )}
+const Workspaces = ({ monitor, ...props }: ModuleProps) => {
+ const className = Variable.derive(
+ [config.modules.workspaces.shown, config.modules.workspaces.showLabels],
+ (s, l) => `module workspaces ${s % 2 === 0 ? "even" : "odd"} ${l ? "labels-shown" : ""} ${getClassName(props)}`
+ );
+
+ return (
+ <eventbox
+ onScroll={(_, event) => {
+ const activeWs = hyprland.focusedClient?.workspace.name;
+ if (activeWs?.startsWith("special:")) hyprland.dispatch("togglespecialworkspace", activeWs.slice(8));
+ else if (event.delta_y > 0 || hyprland.focusedWorkspace?.id > 1)
+ hyprland.dispatch("workspace", (event.delta_y < 0 ? "-" : "+") + 1);
+ }}
>
- {bind(config.modules.workspaces.shown).as(
- n => Array.from({ length: n }).map((_, idx) => <Workspace idx={idx + 1} />) // Start from 1
- )}
- </box>
- </eventbox>
-);
+ <box vertical={bind(config.vertical)} className={bind(className)} onDestroy={() => className.drop()}>
+ {bind(config.modules.workspaces.shown).as(
+ n => Array.from({ length: n }).map((_, idx) => <Workspace idx={idx + 1} />) // Start from 1
+ )}
+ </box>
+ </eventbox>
+ );
+};
const TrayItem = (item: AstalTray.TrayItem) => (
<menubutton