diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/config/defaults.ts | 3 | ||||
| -rw-r--r-- | src/config/types.ts | 3 | ||||
| -rw-r--r-- | src/modules/bar.tsx | 51 |
3 files changed, 36 insertions, 21 deletions
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 |