quick start
start here!
Installing
Download the installer or the zip file from the Releases page and install/unzip it anywhere you like.
Alternatively, workspacer is available via these package managers:
winget install workspacer
choco install workspacer
scoop bucket add extras
scoop install workspacer
Workspacer automatically checks for updates. However, if you are using a package manager, you should uncomment/add this line in your workspacer configuration file to disable automatic updates:
context.Branch = Branch.None;
Configuring
Workspacer loads a default configuration with almost everything you’d need, but you will likely want to modify things like key bindings, widgets on the bar, workspaces, layouts, plugins or otherwise the default behavior of workspacer.
A configuration file can be generated by right clicking the workspacer
system tray icon, and selecting the option to create an example configuration in:
The file gets created in one of the two following places
C:\Users\<username>\.config\workspacer\workspacer.config.csx
C:\Users\<username>\.workspacer\workspacer.config.csx
Workspacer is configured in the C# language, using types and interfaces provided by workspacer itself. This means that while workspacer requires knowledge of programming to use, its configuration is extremely powerful, and allows you to modify or even replace most functionality that drives workspacer. For example, a common use case is to implement a custom layout engine (just define a class that satisfies the interface ILayoutEngine
) entirely inside the config file, and then use it to define the desired custom layout behavior, without needing to modify workspacer itself.
Workspacer’s configuration file allows for type checking and intellisense! Currently, only Visual Studio Code with the C# extension is supported. Opening the .workspacer
folder in your home directory inside Visual Studio Code with the C# extension installed will provide syntax highlighting, type checking, and autocompletion automatically because of the #r
directives at the top of the config file (so don’t remove those, or else this won’t work!).
The config page lists a few examples and tips & tricks on how to customize workspacer to your liking.
Configuring in F#
Workspacer can also be configured in F#, either by extending an existing C# configuration or replacing C# configuration entirely. F# script files (.fsx
) are supported with autocompletion in Visual Studio and Rider, as well as Visual Studio Code (using the iodine plugin). All configuration options available in C# configuration are also available for F# configuration.
To get started with F# configuration, replace the C# configuration file with the following:
#r "C:\Program Files\workspacer\workspacer.Shared.dll"
#r C:\Program Files\workspacer\plugins\workspacer.FSharpConfig\workspacer.FSharpConfig.dll"
using System;
using workspacer;
using workspacer.FSharpConfig;
return FSharpConfig.Use();
C:\Users\<username>\.config\workspacer\workspacer.config.csx
With this configuration, workspacer is configured in the setupContext
function in the F# configuration script:
C:\Users\<username>\.config\workspacer\Workspacer.Config.fsx
An example configuration, equivalent to the default C# configuration is available on github. In the F# configuration, it is important to use #r @".."
directives instead of #r ".."
. Furthermore, a function setupContext
is used instead of the returned action in the C# configuration. These differences are due to the F# configuration being compiled to a dll
library, rather than running as a script directly.
The config page contains a reference of the available configuration options, as well as C# examples.
Learning
Workspacer’s default configuration makes it behave like other tiling window managers, but deviates where not possible due to limitations of the Win32
API which prevents from freely controlling windows in the same way as an X11 tiling window manager.
The keybindings page shows the default set of keybindings.
Submit feedback!
If you run into any bugs, or want to suggest a feature, please feel free to open an issue!