RFD 0004Document view
Catalog
RFD 0004
publishedmdx0004.mdx

Windows Workflows and Setup

Consolidated Windows, WSL, and virtualization notes for productivity and development workflows.

Authors
Ian Cleary
Updated
Apr 21, 2026, 12:00 AM

Overview

Welcome to the Windows section of the documentation.

Here, you'll find a curated list of applications, keyboard shortcuts, and workflows designed to enhance your productivity and streamline your experience on Windows.

Whether you are a developer, designer, or everyday user, these references cover common setup patterns for Windows, WSL, and virtualization.

For Git Bash-oriented GitHub SSH configuration and harness reliability guidance on Windows, see 0005. For a dedicated Alacritty + Git Bash terminal baseline on Windows, see 0006. For a prototype plan for a lightweight Alacritty sidebar wrapper on Windows, see 0007.

If you use a Corporate VPN, I recommend avoiding WSL due to potential network friction. A VirtualBox + Ubuntu Server workflow with port forwarding is often more reliable in that case.

Recommended Software

VS Code

https://code.visualstudio.com/

Disable AI Chat on startup

JSON
"terminal.integrated.commandsToSkipShell": [
"aichat.newchataction"
],

GitHub Desktop

https://desktop.github.com/download/

sqlite

https://github.com/sqlitebrowser/sqlitebrowser/releases/

PowerToys

https://learn.microsoft.com/en-us/windows/powertoys/install

Use your Company Portal if version is up to date.

Greenshot

https://getgreenshot.org/downloads/

Used to make animated screen captures (.GIF), and also includes LICEcap-like workflows.

View Mate

https://downloads.pentalogix.com/

LibreCAD 2D CAD Editor

LibreCAD is a cross-platform 2D CAD program written in C++17. It can read DXF/DWG files and write DXF/PDF/SVG files. It supports point/line/circle/ellipse/spline/parabola primitives. UI is highly customizable with many translations.

http://librecad.org/

https://github.com/LibreCAD/LibreCAD/releases/

https://github.com/LibreCAD/LibreCAD/releases/download/v2.2.1.1/LibreCAD-v2.2.1.1-win64.exe

Zen Browser

https://zen-browser.app/download/

Keyboard and System Productivity

Keyboard Shortcuts

Shift+Del (Shift+Delete) in File Explorer deletes directly, avoiding Recycle Bin.

In terms of file system semantics, deleting to Recycle Bin is a metadata move. Shift+Del removes the file entry directly.

Source: Stack Exchange

Startup Apps

  • Open Run (Windows + R), enter shell:startup, and add startup items via New > Shortcut.
  • If missing in that list, use shell:appsfolder, drag desired apps into Startup folder.

Command Line Interface

Tools I recommend you install on Windows (listed in the sections below).

Node Version Manager: Node, NPM, and Bun

Tip

Learn how to install node with nvm-windows.

BASH
nvm on
nvm install stable
nvm use stable
node --version
npm --version
npm # to see if there is a version to upgrade to
npm install -g bun
# npm install -g bun@1.2.4 # (to upgrade or use a specific version of `bun`)
npm install -g pnpm
# npm install -g pnpm@9.0.0 # (to upgrade or use a specific version of `pnpm`)
bun --version
pnpm --version

Rust

Rust on Windows requires MSVC tooling first.

BASH
rustup default stable-msvc
rustup update

Rust Tools

BASH
cargo install just
cargo install eza

Oh My Bash

Tip

Oh My Bash is an open source framework for managing Bash configuration.

Install and Configure

BASH
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"
BASH
# Set your theme (see ~/.oh-my-bash/themes/)
OSH_THEME="powerline"

# Enable plugins
plugins=(git bashmarks progress)

# Enable completions
completions=(git composer ssh)
Tip

Run bash in Windows Terminal's Git Bash profile to use Oh My Bash alongside other shells.

Dotfiles

I manage shell configuration with a dotfiles repo that syncs across machines. On Windows, this covers .bashrc, .bash_profile, shared aliases, and AI agent configuration.

BASH
git clone git@github.com:iancleary/dotfiles.git ~/dotfiles
cd ~/dotfiles
./sync-dotfiles.sh push # Install configs from repo
./sync-dotfiles.sh pull # Backup current configs to repo
./sync-dotfiles.sh status # Check for differences

The utility installs OS-appropriate files: bash configs on Windows, zsh on macOS/Linux, plus shared utilities across platforms.

What Gets Synced (Windows)

  • .bashrc — Oh My Bash configuration
  • .bash_profile — Bash profile
  • .common/aliases.sh — Shell aliases (eza, git, docker, cargo, just)
  • .common/agents-git-trees.sh — Git worktree helpers (ga/gd)
  • .claude/ — Claude Code settings, skills, principles
  • .codex/ — Codex CLI rules and MCP servers

AI Tools

OpenAI Codex CLI

BASH
npm i -g @openai/codex

Claude Code CLI

BASH
curl -fsSL https://claude.ai/install.sh | bash

Git for Windows

https://git-scm.com/downloads/win

Windows Terminal

This disables git for windows "white screen" flashing when tab completion is rendered in some paths.

Git for Windows includes /etc/inputrc with set bell-style visible in some setups.

BASH
cat /etc/inputrc > .inputrc
# before
set bell-style visible
# after
set bell-style none

Miscellaneous Tips

Turn Off Windows Search Web Suggestions

This controls whether Bing web results show when opening Start search.

Windows + Rregedit

Computer\HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Explorer

Set DWORD DisableSearchBoxSuggestions to 1 (hexadecimal).

Disable Control Zoom on Mouse Wheel

Download and install AutoHotkey V2.0

TEXT
#Requires AutoHotkey >=2.0- <2.1
A_MaxHotkeysPerInterval := 200
^WheelDown::Return
^WheelUp::Return

Remove Logitech Options+ Popup at Startup

Use REGEDIT to remove autostart DLL:

Windows+RregeditComputer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Name = Logitech Download Assistant

Data = C:\Windows\system32\rundll32.exe C:\Windows\System32\LogiLDA.dll,LogiFetch

Source: Reddit Comment

WSL - Arch Linux

Install and initialize Arch in WSL

BASH
wsl --update
wsl --list --online
wsl --install -d archlinux
passwd
pacman -Syu
wsl.exe --terminate archlinux

Configure user and sudo

BASH
pacman -S sudo
useradd -m -G wheel iancleary
passwd iancleary
usermod -aG wheel iancleary
sudo pacman -S nano
EDITOR=nano visudo
# Uncomment near bottom:
# %wheel ALL=(ALL) ALL
wsl.exe --terminate archlinux

Configure wsl.conf and terminal profile

BASH
sudo nano /etc/wsl.conf

Add:

INI
...
[user]
default=iancleary
BASH
wsl.exe --terminate archlinux
JSON
{
"colorScheme": "Tango Dark",
"font": {
"face": "MesloLGS NF"
},
"hidden": false,
"name": "Arch Linux",
"source": "Microsoft.WSL"
}

Locale and system configuration

BASH
sudo nano /etc/locale.conf
wsl.exe --terminate archlinux
locale-gen
wsl.exe --terminate archlinux

Set up Nix and shell toolchain

BASH
# Install git/curl/xz dependencies
sudo pacman -S git xz curl less

git clone https://github.com/iancleary/wsl-config.git
cd wsl-config
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
nix-shell
nix-env -e nix
home-manager switch --flake .#windows-tower
home-manager switch --flake .#framework
exit
BASH
echo ~/.nix-profile/bin/zsh | sudo tee -a /etc/shells
sudo usermod -s ~/.nix-profile/bin/zsh $USER

sudo pacman -S gcc
rustup default stable

# Install python and make
sudo pacman -S python make

Install SSH tools and finish setup

BASH
sudo pacman -S openssh

Follow GitHub guidance:

BASH
wsl --set-default archlinux
wsl --list --verbose

VirtualBox on Windows

Why this path

  • Stable path handling (no WSL filesystem surprises)
  • Reliable port forwarding model for dev SSH
  • Consistent DNS path that mirrors host tooling

Note: these are my operational notes from 2023 and may drift over time.

Hyper-V and Docker vs VirtualBox in practice

  • Docker Desktop may be slower for local iteration due to restart/setup overhead.
  • Hyper-V gave unstable re-IP behavior.
  • WSL is convenient but can be brittle with corporate DNS/VPN.

VirtualBox baseline

  • Keep host apps available while using a Linux guest.
  • Use port forwarding for SSH access (example below).
  • Use headless VM startup where practical.

SSH Port Forwarding

In VirtualBox, forward TCP host 3022 to guest 22.

VirtualBox port forwarding selection form {cap: "Port Forwarding" }

NameProtocolHost IPHost PortGuest IPGuest Port
SSHTCP302222

Host 0.0.0.0 means any interface that can reach the host on that port can tunnel to guest SSH.

Test and standardize SSH

BASH
ssh -p 3022 iancleary@127.0.0.1
INI
# ~/.ssh/config
Host development.local
HostName 127.0.0.1
Port 3022
User username
IdentityFile ~/.ssh/development_local_id_ed25519
BASH
ssh development.local
Tip

If you are using Ubuntu, you may need to adjust the firewall.

Guest-specific SSH includes

INI
# ~/.ssh/config
Include config.d/*
INI
# ~/.ssh/config.d/myvirtualboxguest
Host development.local
HostName 127.0.0.1
Port 3022
User iancleary
IdentityFile ~/.ssh/development.local.pub
BASH
ssh development.local

Fixed VDI for performance

BASH
/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe list hdds
/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe clonemedium disk DevelopmentDynamic.vdi Development.vdi -variant Fixed

Start VM headless by default

Tip
BASH
/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe setproperty defaultfrontend headless

External References

RFD 0004 · Windows Workflows and Setup