glazewm

GlazeWM is a tiling window manager for Windows inspired by i3 and Polybar.

GPL-3.0 License

Stars
3.5K

Bot releases are hidden (Show)

glazewm - v2.1.1 Latest Release

Published by lars-berger 9 months ago

Come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.

🐛 Bug fixes

  • Crash when detaching monitor on display settings change (thanks @maxle5, @lars-berger in #519).

📘 Docs improvements

  • Add table of contents to readme (thanks @robertmoelker in #509).
glazewm - v2.0.3

Published by lars-berger about 1 year ago

Come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.

Bug fixes

  • Fix focus borders not being set. Use focus_borders in the config to configure the border surrounding active/inactive windows.
glazewm - v2.0.2

Published by lars-berger about 1 year ago

Come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.

Bug fixes

  • Fix background color and padding not working in volume component.
glazewm - v2.0.1

Published by lars-berger about 1 year ago

Come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.

Bug fixes

  • Fix crash with window title component.
  • Fix regression where dragging a tiling window doesn't snap it back into place.
glazewm - v2.0.0

Published by lars-berger about 1 year ago

It's been a long time coming, but a v2 release is finally ready and it's packed with new features and improvements 🎈

As always, come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.

Downloads for runnable .exe files are attached below. Winget and Scoop are coming soon.

New features

  • Restore hidden windows when the WM is killed unexpectedly (#360).
    • Introduced a new "watcher" process, which restores all windows when the main process dies.
  • Highlight the active window with a customizable border (thanks @HolbyFPV in #246). Docs
    • Exclusively on Windows 11 due to the underlying API not being available on W10.
  • Automatically focus windows underneath the cursor. Enabled via general.focus_follows_cursor (thanks @HolbyFPV in #245).
  • Cursor jumps to windows focused by the WM. Enabled via general.cursor_follows_focus (thanks @HolbyFPV in #247).
  • Introduce an IPC server and a CLI for querying GlazeWM's state and running WM commands (#350).
    • Both the IPC server and CLI support the same commands. For instance:
# Get workspaces (alternatively send 'workspaces' to IPC server).
./GlazeWM.exe workspaces

# Run a WM command (alternatively send 'command "focus workspace 1"' to IPC server).
./GlazeWM.exe command "focus workspace 1"
  • Create a JS/TS wrapper library for IPC with GlazeWM here. It's published on npm as glazewm. Example usage:
import { GwmClient } from "glazewm";

const client = new GwmClient();
const windows = await client.getWindows();
await client.runCommand("move left", windows[0]);
  • Lots of new components for the bar:
    • System tray component (thanks @HolbyFPV in #235). Docs
    • WiFi/ETH stats component (thanks @HolbyFPV in #240). Docs
    • CPU stats component (thanks @sewer56 in #297). Docs
    • GPU stats component (thanks @sewer56 in #297). Docs
    • Memory/RAM stats component (thanks @sewer56 in #297). Docs
    • Weather component (thanks @sewer56 in #297). Docs
    • Text file component (thanks @sewer56 in #297). Docs
    • Volume component (thanks @HolbyFPV, @AreamanM in #277, #241). Docs
    • Image component (thanks @HolbyFPV in #323). Docs
  • Further improvements to the bar include:
    • Customizable border radius for components and the bar window itself (thanks @jovark in #265).
    • Fully remove the bar via new bar.disabled option (thanks @ZInvoke in #260).
    • Show the bar above all other windows via new bar.always_on_top option (thanks @jayrfs in #341).
    • Support for mixing font family, font weight, font size, and foreground color within a label. This means that icons and text fonts can be used together in a label. To customize a part of the label, wrap it in an <attr> tag:
bar:
  components_left:
    - type: "cpu"
      # Change font family (ie. ff) to Comic Sans for part of the label:
      label: "<attr ff='Comic Sans'>CPU:</attr> {percent_usage}%"
      
    - type: "battery"
      # Show an icon by using an icon font:
      label_draining: "<attr ff='Material Icons'></attr> {battery_level}%"
      # Multiple attributes can be changed at once:
      label_charging: "{battery_level}% <attr ff='Arial' fg='#228B22' fw='400' fs='13px'>(charging)</attr>"
  • Add an equivalent to workspace_auto_back_and_forth from i3wm. The new option general.toggle_workspace_on_refocus allows switching back and forth between the previously focused workspace when focusing the current workspace (thanks @s-v-o in #274).
  • Add new command for setting width/height of a window to a specific value. Example usage: set height 30% or set width 200px (thanks @maxle5 in #268).
  • UWP windows now tile correctly (thanks @HolbyFPV in #257).
  • Customize individual outer gaps, eg. gaps.outer_gap: 10px 5px 10px 5px (thanks @maxle5 in #282).
  • Floating windows can now be moved and resized. The amount of movement is controlled by general.floating_window_move_amount (thanks @Pamesta in #238).
  • Window transition animations can be disabled globally via general.window_animations.
  • Ctrl can be used instead of Control when defining keybindings (thanks @JK-Flip-Flop96 in #338).

Bug fixes

  • Various improvements to stability and performance (@ZInvoke, @maxle5, @s-v-o, @groovyghoul).
  • Fix issue where logs weren't showing up when debugging on Visual Studio and Rider.

What lies ahead?

The bar has been part of the WM since initial launch and it was mainly tacked on as a way to show what workspaces are active. But now it's a big part of the project and there's a lot of things that could've been done better. There's work in progress now to completely overhaul the bar and move it to its own repository. If you're a contributor, please hold off on large feature PRs for the bar in the meantime.

And also, the repo has been moved from my personal account (@lars-berger) to a GitHub org. @HolbyFPV (formerly @notblam) and I are teaming up on the MVP of the bar rework, and it made sense to house everything under one org. The bar overhaul will be open sourced in the coming months, and we've also got a future, unannounced project that's in the works (which will make the name "glazerdesktop" a bit clearer 👀).

Shoutout to our amazing contributors

A massive thanks to @HolbyFPV, @sewer56, @maxle5, @s-v-o, @ZInvoke, @Pamesta, @AreamanM, @jayrfs, @jovark, @groovyghoul, and @JK-Flip-Flop96. It wouldn't have been possible without your fantastic support 🎉🙌

Quick heads up for contributors: there's been some changes to the repo's branching structure. Check #contributing on Discord for how to update your forks.

glazewm - v1.11.1

Published by lars-berger over 1 year ago

⚡ Check out the Discord server

Downloads for runnable .exe files are attached below.

Changelog

  • Fix issue where the WM would occasionally crash with the message Object reference not set to an instance of an object.
  • Improve error logging by including a dump of the last few command invocations.
glazewm - v1.11.0

Published by lars-berger over 1 year ago

⚡ Check out the Discord server

Downloads for runnable .exe files are attached below.

Changelog

  • Be able to specify multiple different bar styles (thanks to @notblam). For example, the below snippet lets you have a bar with a red background on monitor 1, and a green background on monitor 2. This can also be used to show different bar components across monitors.
bars:
  - &default_bar
    bind_to_monitor: 1 # The monitor's number as shown in the Windows display settings (eg. 1, 2, 3...).
    height: "30px"
    background: "red"
    
  - <<: *default_bar # Copy the properties above.
    bind_to_monitor: 2
    background: "green" # Override `background: "red"` with green.

<<: *default_bar is YAML syntax for copying all the properties from the block above labelled &default_bar. This means that height: "30px" is copied over to the 2nd bar, reducing the amount of repeated config.

  • Improvements to the bar:
    • Add a customizable separator between components in the bar (thanks to @AreamanM). Documentation on usage (see component_separator).
    • Be able to change the X and Y position of the bar from the edge of the workspace via new options offset_x and offset_y (thanks to @notblam).
    • Add a new bar component (type: "battery") for showing the battery status (thanks to @AreamanM). Documentation on usage.
    • Add a new bar component (type: "window title") for showing the title of the focused window (thanks to @notblam).
    • Be able to show calendar week via time_formatting option in the clock component (thanks to @s-v-o). Documentation on usage.
    • Be able to customize the text shown in the tiling direction component via new label_horizontal and label_vertical options (thanks to @jovark).
    • Fix issue where tiling direction component wasn't updating correctly (thanks to @notblam).
  • Add option to show floating windows above all tiling windows. This can be enabled from a new general section of the config:
general:
  # Whether to show floating windows as always on top.
  show_floating_on_top: false
  • Add new command (tiling direction toggle) for toggling between a horizontal/vertical tiling direction (thanks to @notblam). This is bound to Alt+V in the default config (replacing the separate keybindings for tiling direction <horizontal|vertical>).
  • Default to vertical tiling for workspaces on vertical monitors (thanks to @notblam).
  • Improvements to focus behavior on window close. This fixes the issue some were having with Flow Launcher.

There's been a lot of help from the community for this release. For the last 2 weeks, there's been a new PR almost every day, so thank you for the unreal amount of support lately ❤️

** There's been a number of changes to the default config file. The latest version of the default config can be viewed here. If you want to simply reset your config file with the default, you can delete your config file located at C:\Users\<YOUR_USER>\.glaze-wm\config.yaml and it'll be created on startup.

glazewm - v1.10.0

Published by lars-berger almost 2 years ago

⚡ Check out the Discord server

Downloads for runnable .exe files are attached below.

Changelog

  • Add binding modes. When a binding mode is active, only the keybindings defined for that binding mode are available (all other keybindings are disabled). Use binding mode <NAME> to activate a binding mode that has been defined in the new binding_modes section of the config. Use binding mode none to exit the binding mode and return to the default keybindings.
    • Added a binding mode to the default config for resizing windows via HJKL or arrow keys. This is bound to Alt+R in the default config.
  • Rename layout <horizontal | vertical> command to tiling direction <horizontal | vertical>. The old command naming will still work, but will eventually be removed.
  • Changes to the bar:
    • Improvements to the bar appearance in the default config.
    • Transparency can now be set for any color-related properties in the bar config by specifying an RGBA color (eg. background: #ffffff33 for white at 20% opacity).
    • Added a new bar component (type: "binding mode") for showing whether a binding mode is currently active.
    • Added a new bar component (type: "tiling direction") for showing the current tiling direction.
  • Fix crash when window rules are run after a window has been ignored.
  • Add new command set tiling for making a window tile (similar to set floating, set minimized, etc.). Can be useful for forcing a window to tile if it floats by default.
  • Changes to behavior of focus workspace recent command (thanks to @gtsherman). It will now switch back and forth between the last focused workspace, and should hopefully be more intuitive than before. It is also now mapped to Alt+Y by default instead of Alt+R.
  • Add winget installer (thanks to @afermar). After installing via winget install lars-berger.GlazeWM, GlazeWM can then launched by running glazewm in a terminal (it gets added to $PATH by Winget).
  • Add new command move workspace <DIRECTION> for moving the focused workspace to a monitor in the given direction (thanks to @kuznetsovvj). These are bound by default to Alt+<ASDF> (depending on the direction).

** There's been a number of changes to the default config file. The latest version of the default config can be viewed here. If you want to simply reset your config file with the default, you can delete your config file located at C:\Users\<YOUR_USER>\.glaze-wm\config.yaml and it'll be created on startup.

glazewm - v1.9.0

Published by lars-berger almost 2 years ago

There is now a Discord server for GlazeWM, feel free to join at discord.gg/ud6z3qjRvM 🎉

The server might be pretty dead to start out with, but at least it'll be a good way to get announcements when new releases come out.

Downloads for runnable .exe files are attached below.

Changelog

  • Fix issue where workspaces sometimes wouldn't hide properly.
  • Fix issue where windows could disappear if they were too thin when a new window is managed. Sibling windows are now resized proportionately when a new tiling window is managed.
  • Add new command "focus workspace <prev | next>" for focusing the next or previous workspaces defined in the workspaces config (thanks to @kuznetsovvj). This is bound to Alt+T / Alt+Shift+T in the new default config.
  • Add new command "focus workspace recent" for focusing the last focused workspace (thanks to @kuznetsovvj). This is bound to Alt+R in the new default config.
  • Show error message on invalid keybindings (thanks to @kuznetsovvj).
glazewm - v1.8.1

Published by lars-berger almost 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Fix crash with keybindings and window rules which ran multiple commands and changed the window type (eg. ["set floating", "resize borders 0px -7px -7px -7px"]).
  • Fix issue where the WM would sometimes keep running after a fatal exception.
glazewm - v1.8.0

Published by lars-berger about 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Fix issue where keybindings wouldn't fire if the desktop/bar was focused. Now keybindings will always fire unless a window that has explicitly been ignored (via ignore command) is focused.
  • Create new bar component for displaying text (thanks to @AgusArdizzone). Custom commands can optionally be run when the component is left/right-clicked.
bar:
  components_left:
    - type: "text"
      text: ""
      left_click_command: "exec cmd"
      right_click_command: "exec chrome"
  • Add button to reload config from system tray icon.
  • Allow ignore command to be run via keybindings. Previously the ignore command could only be used in window rules.
  • Fix inconsistencies when picking a window to focus after another window is closed, minimized, or moved out from the workspace.
glazewm - v1.7.1

Published by lars-berger about 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Fix crash when an unmanageable window has focus on startup (regression in 1.7.0).
  • Add JSON dump of application state to error logs on crashes. This should help a lot when diagnosing cryptic errors in the future.
glazewm - v1.7.0

Published by lars-berger about 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Add reload config command for reloading the user config. This means no more exiting and re-launching GlazeWM to see config changes.

https://user-images.githubusercontent.com/34844898/189518053-7d587b05-ae52-4514-ad74-d3f7d0affa70.mp4

  • Add a public project board of upcoming features here.
  • Add exec ... command for launching an arbitrary executable, like a terminal or browser window (thanks to @AreamanM). This behaves similarly to Windows Run and can be used to launch an executable via its process name (eg. exec chrome) or a file path (eg. exec %ProgramFiles%/Google/Chrome/Application/chrome.exe). To handle file paths that have spaces, surround the file path in single quotes (eg. exec 'C:/Program Files/Google/Chrome/Application/chrome.exe').
  • Prevent workspaces from being destroyed (eg. after switching focus from an empty workspace) via new keep_alive property in workspace configs (thanks to @KiLLeRRaT).
  • Be able to force a workspace on a specific monitor via new bind_to_monitor property in workspace configs (thanks to @lyze237). Use the monitor's number as shown in the Windows display settings (eg. bind_to_monitor: 2).
  • Add optional argument --config="path/to/config.yaml" when launching GlazeWM to use a different config file path than the default (thanks to @lyze237). See readme for example usage.
  • Visual fix to workspaces bar component (thanks to @lyze237).

** There have been changes to the sample config. The latest version of the sample config can be found here. If you want to simply override your config file with the sample, delete your config file at C:\Users\<YOUR_USER>\.glaze-wm\config.yaml and run the GlazeWM executable.

glazewm - v1.6.0

Published by lars-berger about 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Tiling windows can now be resized with the sizing borders. Quick demo of what that looks like:

output-resize

  • Add new commands for minimizing and maximizing windows. These are:
    • set minimized for minimizing the focused window (bound to Alt+M by default).
    • set maximized for maximizing the focused window.
    • toggle maximized for toggling maximized state of the focused window (bound to Alt+X by default).
  • Stop keybindings from firing if excess modifier keys are pressed. For example, if there's a keybinding for Alt+1, it won't fire when Control+Alt+1 is pressed (thanks to @KiLLeRRaT).
glazewm - v1.5.0

Published by lars-berger about 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Prevent WM keybindings from firing when an ignored window has focus.
    • This might be a little annoying for users who generously use the ignore command. In most cases, the more appropriate command is set floating, whereas ignore should only be used if you want the WM to fully ignore the window.
  • Upgrade project from .NET Core 3.1 to .NET 6 (thanks to @neon-sunset).
  • Be able to change font weights in bar via new font_weight property in bar config (thanks to @KiLLeRRaT).
  • Fix crash when launching Windows Terminal through Run command window (thanks to @KiLLeRRaT).
glazewm - v1.4.2

Published by lars-berger over 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Fix issue where the invisible borders of Electron apps were adjusted inconsistently.
glazewm - v1.4.1

Published by lars-berger over 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Fix crash when restoring windows that were minimized to tray.
glazewm - v1.4.0

Published by lars-berger over 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Adjust windows for "invisible borders" when tiling. This should make the height/width of windows more consistent when tiling.
    • If a window is still smaller/larger than other windows, this can be adjusted by adding a window rule using a new command, "resize borders". An example of this has been added to the sample user config.
  • Add new command "set floating" to float a window regardless of its current state. Previously, "toggle floating" was the only way to float a window.
  • Windows that are minimized when the WM is launched stay minimized.
  • Add stricter rules for whether a window should be managed. Certain apps (eg. Notepad++ and Keepass) spawned menu windows that the WM would previously try to manage. These should now be ignored.
  • Add some QOL window rules to the sample user config (thanks to @scubamount).
glazewm - v1.3.0

Published by lars-berger over 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Fix issue where the ignore command was not working.
  • Change the error log path to be in the same directory as the user config file. Previously these logs were stored in the directory of the .exe file, which was unintuitive and not future-proof if an MSI installer is added later on.
  • Improve behavior on fatal crashes.
  • Be able to position the bar along the bottom edge of the screen via new position property in bar config (thanks to @lyze237).
  • Allow the name of a workspace shown in the bar to be different than the name in the bar config via new display_name property (thanks to @lyze237).
glazewm - v1.2.0

Published by lars-berger over 2 years ago

Downloads for runnable .exe files are attached below.

Changelog

  • Resize the monitor's working area on changes to appbar windows (eg. Windows taskbar).
  • Handle monitor connections and disconnections:
    • On new monitor connections, spawn a new workspace and bar window for the monitor.
    • On monitor disconnections, kill corresponding bar window and move non-empty workspaces to a different monitor.
    • Redraw windows on updates to monitor resolution.
  • Improve error messages when deserializing user config.