Work, personal stuff, side-husle, dotfiles, notes... multitasking is fun and games until each project starts having multiple windows (editor, browser, explorer, terminal, Windows apps, AI agent), creating an Alt+Tabbing hell.
wProjectDesktop is a light and open-source solution that displays each project in its own (Windows Native) Virtual Desktop, and provides a project-aware command palette.
[VIDEO coming soon]
Coming soon.
- Install AutoHotkey v2
-
git clone https://github.com/GTonehour/wProjectDesktop.git .\wProjectDesktop\Install.ps1 # -ConfigPath path\to\config
Projects are the directories you configured, for instance %USERPROFILE%\projects subfolders.
Call the command palette with the hotkey, chose "Open project" and pick one of them with fuzzy-finding.
wProjectDesktop opens a virtual desktop dedicated to that project, and:
- directly opens sites and apps you configured for that project (emails, instant messages and Jira for work ; Whatsapp and emails for personal stuff ; music player...)
- displays the command palette for you to pick the next program run.
Commands are configurable, they run located in your project directory: no need to cd anywhere! Examples: code .
(VS Code), explorer .
(Windows explorer), wt
(Windows terminal), lazygit
, yazi
, git commands...
Modern editors (VS Code, Cursor) tend to be all-included: git, explorer, terminal... If your editor is good for you, then you solved multitasking : by alt+tab between editors of your different projects.
That works, until your editor ends up:
- missing features, that you'll need other apps for.
- or bloated by that excess of functionality (VS Code typically uses ten times much RAM than Neovide, for instance); which makes you want to replace it by a lighter text editor + a terminal + a git GUI, and so on.
In both cases, you end up having multiple windows per project, all in the same desktop, which becomes a pain to navigate.
WM (GlazeWM, Komorebi, workspacer...) often implement "workspaces", which are sort of a reimplementation of Windows' native Virtual Desktops.
They're generally not compatible in any way with Windows Virtual Desktop:
- Komorebi explicitely doesn't try to support compatibility with Windows VD: LGUG2Z/komorebi#15 (comment)
- GlazeWM makes Tasks View unusable: glzr-io/glazewm#1142
- Whim doesn't persist layout on switching virtual desktop
This have advantages:
- The WM developers are free to add all the features they want, not limited by the lack of a proper API for Windows Virtual Desktop.
But also drawbacks:
- Lacks the nice integration the native VD has with Windows:
- Alt+Tab being limited to the current desktop, according to the multitasking Windows settings. (I raised that issue to Komorebi, which likely won't implement that feature: LGUG2Z/komorebi#505 (comment))
- The nice Tasks view (Win+Tab) UI, which allows to nicely move windows between desktops, show a window on all desktops, etc.
- Each WM implements its own thing
- Limited adoption means limited compatibility with other apps
Some WM are compatible with native Virtual Desktops (hence with wProjectDesktop):
- FancyWM
- Workspacer: workspacer/workspacer#277
- Jwno?
- LightWM?
- Alt+Tab focuses Windows related only to your current project.
- Hotkey (F1 by default) to call the command palette from everywhere.
- Opens a dedicated desktop for each project.
Configuration folder will be in %LocalAppData%\wProjectDesktop\config
by default. You can replace it by a custom one using the -customConfig
parameter during installation (e.g., .\Install.ps1 -customConfig "C:\MyCustomConfig"
), or by setting the wPD_Config_Path
environment variable.
Config/ ├─ projects.json ├─ settings.json ├─ Palette/
project.json
In addition to the default commands, you can add scripts to the Palette
configuration's subfolder. See [Adding commands to the palette](#Adding commands to the palette) for supported scripts.
Coming soon.
Coming soon.
Coming soon
An optional "Spawn = false" setting can be set in comment-based help's "NOTES", to run the command in the main wProjectDesktop terminal instance.
- Open Windows explorer in the current project
<#
.NOTES
Spawn = false
#>
param($project, $projectPath)
explorer .
- Open VS Code in the current project
param($project, $projectPath)
code .
Will run in a new terminal instance.
- Can be installed and used without admin rights
- Uses natives Windows terminal, Virtual Desktops...
What if I want a dedicated desktop for something with apps but no files, for instance a music player?
Just create an empty "music" directory, as if it was a project. It might sound like a hack, but wProjectDesktop tries to rely on existing OS features instead of introducing specific settings, to be as [thin] as possible.
Install-Module -Name Pester -Force -SkipPublisherCheck -Scope CurrentUser
- Install AutoHotkey v2
git clone https://github.com/GTonehour/wProjectDesktop.git
Set-Location wProjectDesktop
[Environment]::SetEnvironmentVariable("ahk_wPD", ..., "User") # Path to the (AutoHotkey v2)[www.autohotkey.com/about] executable (or run Install.ps1)
[Environment]::SetEnvironmentVariable("wPD_VirtualDesktop_exe", ..., "User") # Path to (VirtualDesktop.exe)[https://github.com/MScholtes/VirtualDesktop/releases/download/V1.20/VirtualDesktop11-24H2.exe].
Run once:
.\dev\DevMode.ps1
Or if you want to test only the terminal without the initial Destkop initialization:
.\src\Start-Term.ps1
Or schedule for startup:
.\dev\DevModeSchedule.ps1