diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/clock.jsonc | 35 | ||||
| -rw-r--r-- | modules/custom/launcher.jsonc | 13 | ||||
| -rw-r--r-- | modules/custom/privacy_dots.jsonc | 12 | ||||
| -rw-r--r-- | modules/custom/vmdot.jsonc | 10 | ||||
| -rw-r--r-- | modules/extras/taskbar.jsonc | 18 | ||||
| -rw-r--r-- | modules/extras/tray.jsonc | 8 | ||||
| -rw-r--r-- | modules/hyprland/workspaces.jsonc | 26 | ||||
| -rw-r--r-- | modules/image/idle_inhibitor.jsonc | 15 | ||||
| -rw-r--r-- | modules/image/language.jsonc | 18 | ||||
| -rw-r--r-- | modules/image/volume.jsonc | 44 |
10 files changed, 199 insertions, 0 deletions
diff --git a/modules/clock.jsonc b/modules/clock.jsonc new file mode 100644 index 0000000..1c99b9a --- /dev/null +++ b/modules/clock.jsonc @@ -0,0 +1,35 @@ +// Date and time. The one pair that stays text: an icon cannot say 14:32. +// The icon sits before the text as a CSS background, which is what makes +// these two match the icon-only pills around them. +{ + "clock#date": { + "format": "{:%a %d/%m}", + "min-length": 9, + "tooltip-format": "<tt>{calendar}</tt>", + "calendar": { + "mode": "year", + "mode-mon-col": 3, + "weeks-pos": "right", + "on-scroll": 1, + // Colours here are Pango markup inside a tooltip, which CSS + // cannot reach, so they are the only colours in this repo that + // do not come from the palette. + "format": { + "months": "<span color='#7dc4e4'><b>{}</b></span>", + "days": "<span color='#8aadf4'><b>{}</b></span>", + "weeks": "<span color='#99ffdd'><b>W{}</b></span>", + "weekdays": "<span color='#b7bdf8'><b>{}</b></span>", + "today": "<span color='#f0c6c6'><b><u>{}</u></b></span>" + } + }, + "actions": { + "on-click": "mode" + } + }, + + "clock#time": { + "format": "{:%H:%M}", + "min-length": 5, + "tooltip-format": "Standard Time: {:%I:%M %p}" + } +} diff --git a/modules/custom/launcher.jsonc b/modules/custom/launcher.jsonc new file mode 100644 index 0000000..56f61fb --- /dev/null +++ b/modules/custom/launcher.jsonc @@ -0,0 +1,13 @@ +// Opens the quickshell desktop drawer. A static button: no "exec", so it +// cannot show whether the drawer is open, which would need the shell to feed +// waybar. +// +// The Slackware mark is a CSS background image, tinted with the udt accent at +// install time. It is the one always-coloured pill on the bar. +{ + "custom/launcher": { + "format": "", + "tooltip": false, + "on-click": "qs -p $HOME/Programming/GIT/quickshell/desktop ipc call drawer toggle" + } +} diff --git a/modules/custom/privacy_dots.jsonc b/modules/custom/privacy_dots.jsonc new file mode 100644 index 0000000..30d86b3 --- /dev/null +++ b/modules/custom/privacy_dots.jsonc @@ -0,0 +1,12 @@ +// A dot per active capture: microphone, camera, location, screen sharing. +// Shows nothing when everything is off, which is the point. The script is in +// this repo and symlinked into ~/bin, so the colours follow the palette. +{ + "custom/privacy_dots": { + "exec": "$HOME/bin/privacy_dots.sh", + "interval": 3, + "return-type": "json", + "format": "{}", + "tooltip": true + } +} diff --git a/modules/custom/vmdot.jsonc b/modules/custom/vmdot.jsonc new file mode 100644 index 0000000..1955a6e --- /dev/null +++ b/modules/custom/vmdot.jsonc @@ -0,0 +1,10 @@ +// One dot per defined VM, coloured by state. The script is in this repo and +// symlinked into ~/bin, so the colours follow the palette. +{ + "custom/vmdot": { + "exec": "$HOME/bin/vms_dots.sh", + "interval": 2, + "return-type": "json", + "tooltip": true + } +} diff --git a/modules/extras/taskbar.jsonc b/modules/extras/taskbar.jsonc new file mode 100644 index 0000000..8c9afde --- /dev/null +++ b/modules/extras/taskbar.jsonc @@ -0,0 +1,18 @@ +// Open applications, drawn with each application's own icon. +// +// icon-theme used to name Papirus, which is not installed on this machine, so +// GTK fell back silently. It now names the theme the rest of the desktop uses. +{ + "wlr/taskbar": { + "all-outputs": false, + "format": "{icon}", + "icon-theme": "Material-Black-Plum-Suru", + "icon-size": 20, + "tooltip": true, + "tooltip-format": "{title}", + "on-click": "activate", + "on-click-middle": "close", + "ignore-list": ["kitty-scratchpad"], + "cursor": true + } +} diff --git a/modules/extras/tray.jsonc b/modules/extras/tray.jsonc new file mode 100644 index 0000000..32ec0bf --- /dev/null +++ b/modules/extras/tray.jsonc @@ -0,0 +1,8 @@ +// System tray. Icons come from the applications themselves. +{ + "tray": { + "icon-size": 16, + "spacing": 12, + "cursor": true + } +} diff --git a/modules/hyprland/workspaces.jsonc b/modules/hyprland/workspaces.jsonc new file mode 100644 index 0000000..f32d497 --- /dev/null +++ b/modules/hyprland/workspaces.jsonc @@ -0,0 +1,26 @@ +// Workspaces. +// +// The icons are NOT here. waybar's format-icons takes text, not paths, so +// eight themed icons can only arrive as CSS background images; see +// styles/modules.css. The label is emptied rather than removed, because an +// empty label still gives each button its box to draw the icon in. +// +// Faking this with eight custom modules would have put the icons in config, +// at the cost of click-to-switch and the active/urgent states. Keeping the +// real module and moving the icons to CSS keeps the behaviour. +{ + "hyprland/workspaces": { + "format": "{icon}", + "format-icons": { + "1": "", "2": "", "3": "", "4": "", + "5": "", "6": "", "7": "", "8": "", + "urgent": "", "focused": "", "default": "" + }, + "persistent-workspaces": { + "*": [1, 2, 3, 4, 5, 6, 7, 8] + }, + "on-scroll-up": "hyprctl dispatch workspace +1", + "on-scroll-down": "hyprctl dispatch workspace -1", + "cursor": true + } +} diff --git a/modules/image/idle_inhibitor.jsonc b/modules/image/idle_inhibitor.jsonc new file mode 100644 index 0000000..e026be8 --- /dev/null +++ b/modules/image/idle_inhibitor.jsonc @@ -0,0 +1,15 @@ +// Presentation mode. +// +// waybar's own idle_inhibitor module draws its state with format-icons, which +// is text, so this is an `image` module driving the same inhibitor through +// hyprland. The state lives in a file because the icon has to be resolved by +// a separate process from the one that toggles it. +{ + "image#idle": { + "exec": "$HOME/bin/wb-idle status", + "size": 22, + "interval": 5, + "signal": 9, + "on-click": "$HOME/bin/wb-idle toggle" + } +} diff --git a/modules/image/language.jsonc b/modules/image/language.jsonc new file mode 100644 index 0000000..48343b7 --- /dev/null +++ b/modules/image/language.jsonc @@ -0,0 +1,18 @@ +// Keyboard layout, drawn as a flag. +// +// This is an `image` module rather than hyprland/language, because that module +// styles as #language and nothing else: it has no per-language CSS class, so a +// flag cannot be picked by a selector, and its format-<lang> takes text rather +// than a path. wb-lang reads the layout from hyprctl and prints the flag. +// +// The two flags are shipped by this repo: the icon theme has 13 and neither +// Italian nor British is among them. +{ + "image#lang": { + "exec": "$HOME/bin/wb-lang", + "size": 20, + "interval": 2, + "signal": 10, + "tooltip": true + } +} diff --git a/modules/image/volume.jsonc b/modules/image/volume.jsonc new file mode 100644 index 0000000..1788643 --- /dev/null +++ b/modules/image/volume.jsonc @@ -0,0 +1,44 @@ +// Volume, as a drawer: the output icon is always visible and the microphone +// slides out on hover, the same shape as the current bar's wireplumber group. +// +// These are `image` modules rather than wireplumber ones because wireplumber +// draws its state with format-icons, which is text. `image` runs a command and +// reads a path, so wb-icon resolves the state to a themed icon instead. The +// cost is that the percentage is in the tooltip rather than on the bar, which +// is the trade an icons-only bar makes. +// +// signal 8 is raised by volume.sh after every change, so the icon updates on +// the keypress rather than up to two seconds later. +{ + "group/volume": { + "orientation": "horizontal", + "modules": [ + "image#volume", + "image#mic" + ], + "drawer": { + "transition-left-to-right": false + } + }, + + "image#volume": { + "exec": "$HOME/bin/wb-icon volume", + "size": 22, + "interval": 2, + "signal": 8, + "on-click": "$HOME/.config/waybar/scripts/volume.sh output mute", + "on-click-right": "pavucontrol-qt", + "on-scroll-up": "$HOME/.config/waybar/scripts/volume.sh output raise", + "on-scroll-down": "$HOME/.config/waybar/scripts/volume.sh output lower" + }, + + "image#mic": { + "exec": "$HOME/bin/wb-icon mic", + "size": 22, + "interval": 2, + "signal": 8, + "on-click": "$HOME/.config/waybar/scripts/volume.sh input mute", + "on-scroll-up": "$HOME/.config/waybar/scripts/volume.sh input raise", + "on-scroll-down": "$HOME/.config/waybar/scripts/volume.sh input lower" + } +} |
