This commit is contained in:
pika 2025-02-17 21:34:54 +01:00
parent 07a64c5aa3
commit c80e2b1272
8 changed files with 0 additions and 359 deletions

View file

@ -0,0 +1,257 @@
general:
# Commands to run when the WM has started (e.g. to run a script or launch
# another application). Here we are running a batch script to start Zebar.
startup_commands: ['shell-exec --command %userprofile%/.glzr/zebar/start.bat']
# Whether to automatically focus windows underneath the cursor.
focus_follows_cursor: false
# Whether to switch back and forth between the previously focused
# workspace when focusing the current workspace.
toggle_workspace_on_refocus: false
cursor_jump:
# Whether to automatically move the cursor on the specified trigger.
enabled: true
# Trigger for cursor jump:
# - 'monitor_focus': Jump when focus changes between monitors.
# - 'window_focus': Jump when focus changes between windows.
trigger: 'monitor_focus'
gaps:
# Gap between adjacent windows.
inner_gap: '2px'
# # Gap between windows and the screen edge.
outer_gap:
top: '32px'
right: '4px'
bottom: '4px'
left: '4px'
window_effects:
# Visual effects to apply to the focused window.
focused_window:
# Highlight the window with a colored border.
# ** Exclusive to Windows 11 due to API limitations.
border:
enabled: false
color: '#0000ff'
# Visual effects to apply to non-focused windows.
other_windows:
border:
enabled: false
window_behavior:
# New windows are created in this state whenever possible.
# Allowed values: 'tiling', 'floating'.
initial_state: 'tiling'
# Sets the default options for when a new window is created. This also
# changes the defaults for when the state change commands, like
# `set-floating`, are used without any flags.
state_defaults:
floating:
# Whether to center floating windows by default.
centered: true
# Whether to show floating windows as always on top.
shown_on_top: true
fullscreen:
# Maximize the window if possible. If the window doesn't have a
# maximize button, then it'll be fullscreen'ed normally instead.
maximized: false
workspaces:
- name: "0"
display_name: " "
bind_to_monitor: 1
keep_alive: true
- name: "1"
display_name: " "
bind_to_monitor: 2
keep_alive: true
- name: "2"
display_name: " "
bind_to_monitor: 1
keep_alive: true
- name: "3"
display_name: "󱜠 "
bind_to_monitor: 2
keep_alive: true
- name: "4"
display_name: "󰴢 "
bind_to_monitor: 2
keep_alive: true
- name: "5"
display_name: "󰊻 "
bind_to_monitor: 2
- name: "6"
bind_to_monitor: 2
- name: "7"
- name: "8"
- name: "9"
window_rules:
- commands: ['ignore']
match:
# Ignores any Zebar windows.
- window_process: { equals: 'zebar' }
# Ignores picture-in-picture windows for browsers.
- window_title: { regex: '[Pp]icture.in.[Pp]icture' }
window_class: { regex: 'Chrome_WidgetWin_1|MozillaDialogClass' }
binding_modes:
# When enabled, the focused window can be resized via arrow keys or HJKL.
- name: 'resize'
keybindings:
- commands: ['resize --width -2%']
bindings: ['h', 'left']
- commands: ['resize --width +2%']
bindings: ['l', 'right']
- commands: ['resize --height +2%']
bindings: ['k', 'up']
- commands: ['resize --height -2%']
bindings: ['j', 'down']
# Press enter/escape to return to default keybindings.
- commands: ['wm-disable-binding-mode --name resize']
bindings: ['escape', 'enter']
# When enabled, all keybindings are disabled except for alt+shift+p which
# returns to default keybindings.
- name: 'pause'
keybindings:
- commands: ['wm-disable-binding-mode --name pause']
bindings: ['alt+shift+p']
keybindings:
# Shift focus in a given direction.
- commands: ['focus --direction left']
bindings: ['alt+h', 'alt+left']
- commands: ['focus --direction right']
bindings: ['alt+l', 'alt+right']
- commands: ['focus --direction up']
bindings: ['alt+k', 'alt+up']
- commands: ['focus --direction down']
bindings: ['alt+j', 'alt+down']
# Move focused window in a given direction.
- commands: ['move --direction left']
bindings: ['alt+ctrl+h', 'alt+ctrl+left']
- commands: ['move --direction right']
bindings: ['alt+ctrl+l', 'alt+ctrl+right']
- commands: ['move --direction up']
bindings: ['alt+ctrl+k', 'alt+ctrl+up']
- commands: ['move --direction down']
bindings: ['alt+ctrl+j', 'alt+ctrl+down']
# Resize focused window by a percentage or pixel amount.
- commands: ['resize --width -2%']
bindings: ['alt+shift+h']
- commands: ['resize --width +2%']
bindings: ['alt+shift+l']
- commands: ['resize --height +2%']
bindings: ['alt+shift+k']
- commands: ['resize --height -2%']
bindings: ['alt+shift+j']
# ─< Change tiling direction. This determines where new tiling windows will >─────────────
# ─< be inserted. >───────────────────────────────────────────────────────────────────────
- commands: ['toggle-tiling-direction']
bindings: ['alt+v']
# ─< Change focus from tiling windows -> floating -> fullscreen. >────────────────────────
- commands: ['wm-cycle-focus']
bindings: ['alt+space']
# ─< Change the focused window to be tiling. >────────────────────────────────────────────
- commands: ['toggle-tiling']
bindings: ['alt+f']
# ─< Change the focused window to be fullscreen. >────────────────────────────────────────
- commands: ['toggle-fullscreen']
bindings: ['alt+shift+f']
# ─< Close focused window. >──────────────────────────────────────────────────────────────
- commands: ['close']
bindings: ['alt+q']
# ─< Kill GlazeWM process safely. >───────────────────────────────────────────────────────
- commands: ['wm-exit']
bindings: ['alt+shift+m']
# ─< Re-evaluate configuration file. >────────────────────────────────────────────────────
- commands: ['wm-reload-config']
bindings: ['alt+shift+r']
# ─< Redraw all windows. >────────────────────────────────────────────────────────────────
- commands: ['wm-redraw']
bindings: ['alt+shift+w']
# ─────────< Launch CMD terminal. Alternatively, use `shell-exec --command wt` or >─────────
# ────────< shell-exec --command %ProgramFiles%/Git/git-bash.exe` to start Windows >────────
# ─< Terminal and Git Bash respectively. >────────────────────────────────────────────────
- commands: ['shell-exec --command wt powershell']
bindings: ['alt+enter']
# ─< Ubuntu shortcut >────────────────────────────────────────────────────────────────────
- commands: ['shell-exec --command wt ubuntu2404.exe']
bindings: ['alt+t']
# ─< Explorer shortcut >──────────────────────────────────────────────────────────────────
- commands: ['shell-exec --command explorer.exe']
bindings: ['alt+e']
- commands: ['shell-exec --command files.exe']
bindings: ['alt+shift+e']
# ─< Thorium shortcut >───────────────────────────────────────────────────────────────────
- commands: ['shell-exec --command C:\Users\piecka\AppData\Local\Thorium\Application\thorium.exe']
bindings: ['alt+c']
# ─< Obsidian shortcut >──────────────────────────────────────────────────────────────────
- commands: ['shell-exec --command C:\Users\piecka\AppData\Local\Programs\obsidian\Obsidian.exe']
bindings: ['alt+o']
# Change focus to a workspace defined in `workspaces` config.
- commands: ['focus --workspace 1']
bindings: ['alt+1']
- commands: ['focus --workspace 2']
bindings: ['alt+2']
- commands: ['focus --workspace 3']
bindings: ['alt+3']
- commands: ['focus --workspace 4']
bindings: ['alt+4']
- commands: ['focus --workspace 5']
bindings: ['alt+5']
- commands: ['focus --workspace 6']
bindings: ['alt+6']
- commands: ['focus --workspace 7']
bindings: ['alt+7']
- commands: ['focus --workspace 8']
bindings: ['alt+8']
- commands: ['focus --workspace 9']
bindings: ['alt+9']
- commands: ['focus --workspace 0']
bindings: ['alt+0']
# Move focused window to a workspace defined in `workspaces` config.
- commands: ['move --workspace 1', 'focus --workspace 1']
bindings: ['alt+shift+1']
- commands: ['move --workspace 2', 'focus --workspace 2']
bindings: ['alt+shift+2']
- commands: ['move --workspace 3', 'focus --workspace 3']
bindings: ['alt+shift+3']
- commands: ['move --workspace 4', 'focus --workspace 4']
bindings: ['alt+shift+4']
- commands: ['move --workspace 5', 'focus --workspace 5']
bindings: ['alt+shift+5']
- commands: ['move --workspace 6', 'focus --workspace 6']
bindings: ['alt+shift+6']
- commands: ['move --workspace 7', 'focus --workspace 7']
bindings: ['alt+shift+7']
- commands: ['move --workspace 8', 'focus --workspace 8']
bindings: ['alt+shift+8']
- commands: ['move --workspace 9', 'focus --workspace 9']
bindings: ['alt+shift+9']
- commands: ['move --workspace 0', 'focus --workspace 0']
bindings: ['alt+shift+0']

View file

@ -0,0 +1,16 @@
2024-07-29T07:39:07.906249Z ERROR glazewm: general: missing field `cursor_jump` at line 3 column 3
2024-07-29T07:40:27.885579Z ERROR glazewm: gaps.outer_gap: invalid type: string "3px 6px 6px 6px", expected struct RectDelta at line 25 column 14
2024-07-29T07:43:25.730851Z ERROR glazewm: window_rules[1]: missing field `commands` at line 108 column 5
2024-07-29T07:44:44.287926Z ERROR glazewm: window_rules[1]: missing field `commands` at line 108 column 5
2024-07-29T07:46:03.820935Z ERROR glazewm: window_rules[0].match[1]: duplicate field `window_title` at line 105 column 9
2024-07-29T07:47:52.019865Z ERROR glazewm: window_rules[1].match[0]: data did not match any variant of untagged enum MatchType at line 110 column 9
2024-07-29T08:04:07.363754Z ERROR glazewm: keybindings[21]: missing field `bindings` at line 219 column 5
2024-07-29T08:04:22.245952Z ERROR glazewm: keybindings[21].commands: unrecognized subcommand
at line 219 column 15
2024-07-29T08:08:42.877239Z ERROR glazewm: keybindings[22].commands: unrecognized subcommand
at line 221 column 15
2024-07-29T08:11:12.167944Z ERROR glazewm: keybindings[23]: missing field `bindings` at line 223 column 5
2024-07-29T08:12:45.956980Z ERROR glazewm: keybindings[23].commands: unexpected argument found
at line 223 column 15
2024-07-29T08:13:57.395544Z ERROR glazewm::common::commands::shell_exec: err_message="Failed to execute 'START /B C:\\Users\\piecka\\AppData\\Local\\Thorium\\Application\\thorium.exe'.\n\nError: Der Vorgang wurde durch den Benutzer abgebrochen. (0x800704C7)"
2024-07-30T09:16:06.604833Z ERROR glazewm: Ungültiges Fensterhandle (0x80070578)

View file

@ -0,0 +1,235 @@
# Yaml is white-space sensitive (use 2 spaces to indent).
###
# Define a new window with an id of 'bar'. This window can then be opened
# via the Zebar cli by running 'zebar open bar --args <ARGS...>'.
#
# Docs regarding window: https://some-future-docs-link.com
window/bar:
providers: ['self']
# Width of the window in physical pixels.
width: '{{ self.args.MONITOR_WIDTH }}'
# Height of the window in physical pixels.
height: '32'
# X-position of the window in physical pixels.
position_x: '{{ self.args.MONITOR_X }}'
# Y-position of the window in physical pixels.
position_y: '{{ self.args.MONITOR_Y }}'
# Whether to show the window above/below all others.
# Allowed values: 'always_on_top', 'always_on_bottom', 'normal'.
z_order: 'always_on_top'
# Whether the window should be shown in the taskbar.
shown_in_taskbar: false
# Whether the window should have resize handles.
resizable: false
# Styles to apply globally within the window. For example, we can use
# this to import the Nerdfonts icon font. Ref https://www.nerdfonts.com/cheat-sheet
# for a cheatsheet of available Nerdfonts icons.
global_styles: |
@import "https://www.nerdfonts.com/assets/css/webfont.css";
# CSS styles to apply to the root element within the window. Using CSS
# nesting, we can also target nested elements (e.g. below we set the
# color and margin-right of icons).
styles: |
display: grid;
grid-template-columns: 1fr 1fr 1fr;
align-items: center;
height: 100%;
color: rgb(255 255 255 / 90%);
# font-family: ui-monospace, monospace;
font-family: "VictorMono Nerd Font";
font-weight: 800;
font-size: 0.85rem;
padding: 4px 24px;
border-bottom: 1px solid rgb(255 255 255 / 5%);;
background: linear-gradient(rgb(0 0 0 / 90%), rgb(5 2 20 / 85%));
i {
color: rgb(115 130 175 / 95%);
margin-right: 7px;
}
group/left:
styles: |
display: flex;
align-items: center;
template/logo:
styles: |
margin-right: 20px;
template: |
<i class="nf nf-fa-windows"></i>
template/glazewm_workspaces:
styles: |
display: flex;
align-items: center;
.workspace {
background: rgb(255 255 255 / 5%);
margin-right: 4px;
padding: 4px 8px;
color: rgb(255 255 255 / 90%);
border: none;
border-radius: 2px;
cursor: pointer;
&.displayed {
background: rgb(255 255 255 / 15%);
}
&.focused,
&:hover {
background: rgb(75 115 255 / 50%);
}
}
providers: ['glazewm']
events:
- type: 'click'
fn_path: 'script.js#focusWorkspace'
selector: '.workspace'
template: |
@for (workspace of glazewm.currentWorkspaces) {
<button
class="workspace {{ workspace.hasFocus ? 'focused' : '' }} {{ workspace.isDisplayed ? 'displayed' : '' }}"
id="{{ workspace.name }}"
>
{{ workspace.displayName ?? workspace.name }}
</button>
}
group/center:
styles: |
justify-self: center;
template/clock:
providers: ['date']
# Available date tokens: https://moment.github.io/luxon/#/formatting?id=table-of-tokens
template: |
{{ date.toFormat(date.now, 'EEE d MMM t:ss') }}
group/right:
styles: |
justify-self: end;
display: flex;
.template {
margin-left: 20px;
}
template/glazewm_other:
providers: ['glazewm']
styles: |
.binding-mode,
.tiling-direction {
background: rgb(255 255 255 / 15%);
color: rgb(255 255 255 / 90%);
border-radius: 2px;
padding: 4px 6px;
margin: 0;
}
template: |
@for (bindingMode of glazewm.bindingModes) {
<span class="binding-mode">
{{ bindingMode.displayName ?? bindingMode.name }}
</span>
}
@if (glazewm.tilingDirection === 'horizontal') {
<i class="tiling-direction nf nf-md-swap_horizontal"></i>
} @else {
<i class="tiling-direction nf nf-md-swap_vertical"></i>
}
template/network:
providers: ['network']
template: |
<!-- Show icon based on signal strength. -->
@if (network.defaultInterface?.type === 'ethernet') {
<i class="nf nf-md-ethernet_cable"></i>
} @else if (network.defaultInterface?.type === 'wifi') {
@if (network.defaultGateway?.signalStrength >= 80) {<i class="nf nf-md-wifi_strength_4"></i>}
@else if (network.defaultGateway?.signalStrength >= 65) {<i class="nf nf-md-wifi_strength_3"></i>}
@else if (network.defaultGateway?.signalStrength >= 40) {<i class="nf nf-md-wifi_strength_2"></i>}
@else if (network.defaultGateway?.signalStrength >= 25) {<i class="nf nf-md-wifi_strength_1"></i>}
@else {<i class="nf nf-md-wifi_strength_outline"></i>}
{{ network.defaultGateway?.ssid }}
} @else {
<i class="nf nf-md-wifi_strength_off_outline"></i>
}
# template/ip:
# providers: ['ip']
# template: |
# <i class="nf-md-ip_network"></i>
# {{address}}
template/memory:
providers: ['memory']
template: |
<i class="nf nf-fae-chip"></i>
{{ Math.round(memory.usage) }}%
template/cpu:
providers: ['cpu']
styles: |
.high-usage {
color: #900029;
}
template: |
<i class="nf nf-oct-cpu"></i>
<!-- Change the text color if the CPU usage is high. -->
@if (cpu.usage > 85) {
<span class="high-usage">{{ Math.round(cpu.usage) }}%</span>
} @else {
<span>{{ Math.round(cpu.usage) }}%</span>
}
template/battery:
providers: ['battery']
styles: |
position: relative;
color: #13a243;
font-weight: 600;
.charging-icon {
color: #13a243;
font-weight: 600;
position: absolute;
font-size: 0.8rem;
left: 7px;
top: 2px;
}
template: |
<!-- Show icon for whether battery is charging. -->
@if (battery.isCharging) {<i class="nf-md-battery_charging"></i>}
<!-- Show icon for how much of the battery is charged. -->
@if (battery.chargePercent > 90) {<i class="nf-md-battery"></i>}
@else if (battery.chargePercent > 70) {<i class="nf-md-battery_70"></i>}
@else if (battery.chargePercent > 40) {<i class="nf-md-battery_40"></i>}
@else if (battery.chargePercent > 20) {<i class="nf-md-battery_20"></i>}
@else {<i class="nf-md-battery_outline"></i>}
{{ Math.round(battery.chargePercent) }}%
template/weather:
providers: ['weather']
template: |
@switch (weather.status) {
@case ('clear_day') {<i class="nf nf-weather-day_sunny"></i>}
@case ('clear_night') {<i class="nf nf-weather-night_clear"></i>}
@case ('cloudy_day') {<i class="nf nf-weather-day_cloudy"></i>}
@case ('cloudy_night') {<i class="nf nf-weather-night_alt_cloudy"></i>}
@case ('light_rain_day') {<i class="nf nf-weather-day_sprinkle"></i>}
@case ('light_rain_night') {<i class="nf nf-weather-night_alt_sprinkle"></i>}
@case ('heavy_rain_day') {<i class="nf nf-weather-day_rain"></i>}
@case ('heavy_rain_night') {<i class="nf nf-weather-night_alt_rain"></i>}
@case ('snow_day') {<i class="nf nf-weather-day_snow"></i>}
@case ('snow_night') {<i class="nf nf-weather-night_alt_snow"></i>}
@case ('thunder_day') {<i class="nf nf-weather-day_lightning"></i>}
@case ('thunder_night') {<i class="nf nf-weather-night_alt_lightning"></i>}
}
{{ weather.celsiusTemp }}°

View file

@ -0,0 +1,5 @@
export function focusWorkspace(event, context) {
console.log('Focus button clicked!', event, context);
const id = event.target.id;
context.providers.glazewm.focusWorkspace(id);
}

View file

@ -0,0 +1,5 @@
@echo off
@REM Start hidden powershell script, which runs `zebar open bar --args ...` for every monitor.
powershell -WindowStyle hidden -Command ^
$monitors = zebar monitors; ^
foreach ($monitor in $monitors) { Start-Process -WindowStyle Hidden -FilePath \"zebar\" -ArgumentList \"open bar --args $monitor\" };