# $DOTFILES/platforms/win/glzr/glazewm/config.yaml
# Date: 2025-01-05
# Author: js0ny

# Location:
# - %UserProfile%\.glzr\glazewm\config.yaml
# Linking: Link to whole directory
# New-Item -ItemType SymbolicLink -Path $Env:UserProfile\.glzr -Target $DOTFILES\platforms\win\glzr -Force

general:
  # Commands to run when the WM has started. This is useful for running a
  # script or launching another application.
  # Example: The below command launches Zebar.
  startup_commands: ["shell-exec zebar"]

  # Commands to run just before the WM is shutdown.
  # Example: The below command kills Zebar.
  shutdown_commands: ["shell-exec taskkill /IM zebar.exe /F"]

  # Commands to run after the WM config is reloaded.
  config_reload_commands: []

  # 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"

  # How windows should be hidden when switching workspaces.
  # - 'cloak': Recommended. Hides windows with no animation.
  # - 'hide': Legacy method (v3.5 and earlier) that has a brief animation,
  # but has stability issues with some apps.
  hide_method: "cloak"

  # Affects which windows get shown in the native Windows taskbar. Has no
  # effect if `hide_method: 'hide'`.
  # - 'true': Show all windows (regardless of workspace).
  # - 'false': Only show windows from the currently shown workspaces.
  show_all_in_taskbar: false

gaps:
  # Whether to scale the gaps with the DPI of the monitor.
  scale_with_dpi: true

  # Gap between adjacent windows.
  inner_gap: "5px"

  # Gap between windows and the screen edge.
  outer_gap:
    top: "50px"
    right: "5px"
    bottom: "5px"
    left: "5px"

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: true
      color: "#f6a7ba"

    # Remove the title bar from the window's frame. Note that this can
    # cause rendering issues for some applications.
    hide_title_bar:
      enabled: false

    # Change the corner style of the window's frame.
    # ** Exclusive to Windows 11 due to API limitations.
    corner_style:
      enabled: false
      # Allowed values: 'square', 'rounded', 'small_rounded'.
      style: "square"

  # Visual effects to apply to non-focused windows.
  other_windows:
    border:
      enabled: false
      color: "#a1a1a1"
    hide_title_bar:
      enabled: false
    corner_style:
      enabled: false
      style: "square"

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: false

    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

      # Whether to show fullscreen windows as always on top.
      shown_on_top: false

workspaces:
  - name: "1"
  - name: "2"
  - name: "3"
  - name: "4"
  - name: "5"
  - name: "6"
  - name: "7"
  - name: "8"
  - name: "9"

window_rules:
  - commands: ["ignore"]
    match:
      # Ignores any Zebar windows.
      - window_process: { equals: "zebar" }
      - window_process: { equals: "WindowsTerminal" }

      # Ignores picture-in-picture windows for browsers.
      - window_title: { regex: "[Pp]icture.in.[Pp]icture" }
        window_class: { regex: "Chrome_WidgetWin_1|MozillaDialogClass" }

      # Ignore rules for various 3rd-party apps.
      - window_process: { equals: "PowerToys" }
        window_class: { regex: 'HwndWrapper\[PowerToys\.PowerAccent.*?\]' }
      - window_process: { equals: "PowerToys" }
        window_title: { regex: ".*? - Peek" }
      - window_process: { equals: "Lively" }
        window_class: { regex: "HwndWrapper" }

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: ["i", "right"]
      - commands: ["resize --height +2%"]
        bindings: ["e", "up"]
      - commands: ["resize --height -2%"]
        bindings: ["n", "down"]
      # Press enter/escape to return to default keybindings.
      - commands: ["wm-disable-binding-mode --name resize"]
        bindings: ["escape", "enter"]

keybindings:
  # Shift focus in a given direction.
  - commands: ["focus --direction left"]
    bindings: ["lwin+h", "lwin+left"]
  - commands: ["focus --direction right"]
    bindings: ["lwin+i", "lwin+right"]
  - commands: ["focus --direction up"]
    bindings: ["lwin+e", "lwin+up"]
  - commands: ["focus --direction down"]
    bindings: ["lwin+n", "lwin+down"]

  # Move focused window in a given direction.
  - commands: ["move --direction left"]
    bindings: ["lwin+shift+h", "lwin+shift+left"]
  - commands: ["move --direction right"]
    bindings: ["lwin+shift+i", "lwin+shift+right"]
  - commands: ["move --direction up"]
    bindings: ["lwin+shift+e", "lwin+shift+up"]
  - commands: ["move --direction down"]
    bindings: ["lwin+shift+n", "lwin+shift+down"]

  # Resize focused window by a percentage or pixel amount.
  - commands: ["resize --width -2%"]
    bindings: ["alt+u"]
  - commands: ["resize --width +2%"]
    bindings: ["alt+p"]
  - commands: ["resize --height +2%"]
    bindings: ["alt+o"]
  - commands: ["resize --height -2%"]
    bindings: ["alt+i"]

  # As an alternative to the resize keybindings above, resize mode enables
  # resizing via arrow keys or HJKL. The binding mode is defined above with
  # the name 'resize'.
  - commands: ["wm-enable-binding-mode --name resize"]
    bindings: ["lwin+shift+r"]

  # Disables window management and all other keybindings until alt+shift+p
  # is pressed again.
  - commands: ["wm-toggle-pause"]
    bindings: ["alt+shift+p"]

  # Change tiling direction. This determines where new tiling windows will
  # be inserted.
  - commands: ["toggle-tiling-direction"]
    bindings: ["lwin+v"]

  # Change focus from tiling windows -> floating -> fullscreen.
  # - commands: ["wm-cycle-focus"]
  #   bindings: ["alt+space"]

  # Change the focused window to be floating.
  - commands: ["toggle-floating --centered"]
    bindings: ["alt+shift+space"]

  # Change the focused window to be tiling.
  - commands: ["toggle-tiling"]
    bindings: ["lwin+t"]

  # Change the focused window to be fullscreen.
  # - commands: ["toggle-fullscreen"]
  #   bindings: ["lwin+f"]
  - commands: ["shell-exec dopus.exe"]
    bindings: ["lwin+f"]

  # Minimize focused window.
  - commands: ["toggle-minimized"]
    bindings: ["lwin+m"]

  # Close focused window.
  - commands: ["close"]
    bindings: ["lwin+q"]

  # Kill GlazeWM process safely.
  - commands: ["wm-exit"]
    bindings: ["alt+shift+e"]

  # 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 wt` or
  # `shell-exec %ProgramFiles%/Git/git-bash.exe` to start Windows
  # Terminal and Git Bash respectively.
  - commands: ["shell-exec wezterm-gui.exe start"]
    bindings: ["lwin+r"]

  # Focus the next/previous active workspace defined in `workspaces` config.
  # - commands: ["focus --next-active-workspace"]
  #   bindings: ["alt+s"]
  # - commands: ["focus --prev-active-workspace"]
  #   bindings: ["alt+a"]

  # Focus the workspace that last had focus.
  - commands: ["focus --recent-workspace"]
    bindings: ["alt+d"]

  # Change focus to a workspace defined in `workspaces` config.
  - commands: ["focus --workspace 1"]
    bindings: ["lwin+1"]
  - commands: ["focus --workspace 2"]
    bindings: ["lwin+2"]
  - commands: ["focus --workspace 3"]
    bindings: ["lwin+3"]
  - commands: ["focus --workspace 4"]
    bindings: ["lwin+4"]
  - commands: ["focus --workspace 5"]
    bindings: ["lwin+5"]
  - commands: ["focus --workspace 6"]
    bindings: ["lwin+6"]
  - commands: ["focus --workspace 7"]
    bindings: ["lwin+7"]
  - commands: ["focus --workspace 8"]
    bindings: ["lwin+8"]
  - commands: ["focus --workspace 9"]
    bindings: ["lwin+9"]

  # Move the focused window's parent workspace to a monitor in a given
  # direction.
  - commands: ["move-workspace --direction left"]
    bindings: ["alt+shift+a"]
  - commands: ["move-workspace --direction right"]
    bindings: ["alt+shift+f"]
  - commands: ["move-workspace --direction up"]
    bindings: ["alt+shift+d"]
  - commands: ["move-workspace --direction down"]
    bindings: ["alt+shift+s"]

  # Move focused window to a workspace defined in `workspaces` config.
  - commands: ["move --workspace 1", "focus --workspace 1"]
    bindings: ["lwin+shift+1"]
  - commands: ["move --workspace 2", "focus --workspace 2"]
    bindings: ["lwin+shift+2"]
  - commands: ["move --workspace 3", "focus --workspace 3"]
    bindings: ["lwin+shift+3"]
  - commands: ["move --workspace 4", "focus --workspace 4"]
    bindings: ["lwin+shift+4"]
  - commands: ["move --workspace 5", "focus --workspace 5"]
    bindings: ["lwin+shift+5"]
  - commands: ["move --workspace 6", "focus --workspace 6"]
    bindings: ["lwin+shift+6"]
  - commands: ["move --workspace 7", "focus --workspace 7"]
    bindings: ["lwin+shift+7"]
  - commands: ["move --workspace 8", "focus --workspace 8"]
    bindings: ["lwin+shift+8"]
  - commands: ["move --workspace 9", "focus --workspace 9"]
    bindings: ["lwin+shift+9"]
