Personal terminal dotfiles for Windows 10 — WezTerm + Oh My Posh, tuned for PowerShell 7 on Intel hardware.
dotfiles-koo/
├── wezterm/ # WezTerm terminal config
│ ├── wezterm.lua # Entry point
│ ├── config/
│ │ ├── appearance.lua # Colors, background, tab bar, Acrylic
│ │ ├── bindings.lua # Key bindings (Ctrl+T, Ctrl+W, ALT combos)
│ │ ├── domains.lua # Domain definitions
│ │ ├── fonts.lua # JetBrainsMono NF, size 11
│ │ ├── general.lua # Workspace name, scroll, hyperlinks
│ │ ├── init.lua # Config builder
│ │ └── launch.lua # Default shell (pwsh)
│ ├── events/
│ │ ├── focus-dim.lua # Dims window when unfocused
│ │ ├── left-status.lua # Workspace label (left of tab bar)
│ │ ├── new-tab-button.lua
│ │ ├── right-status.lua # Date · time · battery (right of tab bar)
│ │ └── tab-title.lua # Powerline tab style with process name
│ ├── utils/
│ │ ├── backdrops.lua # Background image cycle/random/select
│ │ ├── gpu_adapter.lua # GPU adapter picker (OpenGL fallback)
│ │ ├── math.lua # Clamp/round helpers
│ │ └── platform.lua # OS detection
│ ├── colors/
│ │ └── custom.lua # Catppuccin Mocha variant
│ └── backdrops/ # Drop your own wallpapers here (.jpg/.png)
├── ohmyposh/
│ └── .poshconfig.json # Oh My Posh prompt theme
├── .github/
│ └── workflows/
│ └── ci.yml # Lua lint + JSON validation + ESLint
├── bootstrap.ps1 # One-shot Windows setup script
├── package.json # ESLint deps for preview.jsx
├── eslint.config.js # ESLint config (flat config, JSX)
├── .luacheckrc # luacheck config (wezterm globals)
├── preview.jsx # Interactive React preview
├── README.md
└── LICENSE
- Catppuccin Mocha color scheme (custom variant)
- Acrylic window blur (
win32_system_backdrop) - Custom background — point to any image, brightness-boosted via
hsb - Focus dimming — window dims to 55% opacity when unfocused, 95% when active
- Powerline tab bar with process name, admin badge, and unseen-output dot
- Right status bar — live date, time, and battery with Nerd Font icons
- Workspace label — hardcoded
koo@raldiskon left of tab bar - Key bindings —
Ctrl+Tnew tab,Ctrl+Wclose tab,ALTcombos for splits/panes/backdrops - OpenGL frontend — stable on Intel Pentium / integrated graphics
- 60 FPS animations
| Segment | Color | Shows |
|---|---|---|
session |
#c386f1 |
koo@raldisk (hardcoded) |
path |
#3B7390 |
Current folder |
git |
#82D4BB |
Branch, dirty state, stash count |
python |
#D8C878 |
Python version (files mode) |
exit |
plain | ✔ / ✘ exit code |
npm (right) |
#917295 |
npm version |
node (right) |
#5f4a62 |
Node version |
| Tool | Minimum |
|---|---|
| WezTerm | nightly / 20240127+ |
| Oh My Posh | v3+ |
| PowerShell | 7 (pwsh) |
| JetBrainsMono Nerd Font | any version |
1. Back up your existing config (if any)
Rename-Item "$env:USERPROFILE\.wezterm.lua" "$env:USERPROFILE\.wezterm.lua.bak" -ErrorAction SilentlyContinue2. Clone the repo
git clone https://github.com/raldisk/dotfiles-koo.git3. Copy the wezterm folder to your config directory
$dest = "$env:USERPROFILE\.config\wezterm"
New-Item -ItemType Directory -Force -Path $dest | Out-Null
Copy-Item -Recurse -Force .\dotfiles-koo\wezterm\* $dest4. Set your background image
Open wezterm/config/appearance.lua and update the path:
source = {File = 'C:\\Users\\YourName\\path\\to\\your-image.jpg'},5. Add backdrop images (optional — for the random/cycle keybinds)
Drop .jpg / .png files into wezterm/backdrops/.
6. Fully close and reopen WezTerm
Config reload (Ctrl+Shift+R) is not sufficient for the workspace rename — a cold start is required.
1. Install Oh My Posh
winget install JanDeDobbeleer.OhMyPosh -s winget2. Copy the theme
Copy-Item .\dotfiles-koo\ohmyposh\.poshconfig.json "$env:USERPROFILE\Downloads\Video\temp-ytdlp\.poshconfig.json"Or place it wherever you prefer.
3. Load in your PowerShell profile
notepad $PROFILEAdd:
oh-my-posh init pwsh --config "C:\path\to\.poshconfig.json" | Invoke-Expression4. Reload
. $PROFILE| Key | Action |
|---|---|
Ctrl+T |
New tab |
Ctrl+W |
Close tab |
ALT+T |
New tab (DefaultDomain) |
ALT+CTRL+T |
New tab (WSL:Ubuntu) |
ALT+[ / ALT+] |
Previous / next tab |
ALT+\ |
Split vertical |
ALT+CTRL+\ |
Split horizontal |
ALT+CTRL+H/J/K/L |
Navigate panes |
ALT+/ |
Random background |
ALT+, / ALT+. |
Cycle backgrounds |
ALT+CTRL+/ |
Pick background (fuzzy) |
F1 |
Copy mode |
F2 |
Command palette |
F11 |
Toggle fullscreen |
F12 |
Debug overlay |
WezTerm workspace (wezterm/config/general.lua):
default_workspace = 'your-name',Oh My Posh session (ohmyposh/.poshconfig.json):
"template": " your-name "In wezterm/config/appearance.lua, adjust brightness (1.0 = original, 1.4 = current):
hsb = { brightness = 1.4, saturation = 1.0, hue = 1.0 },In wezterm/events/focus-dim.lua:
overrides.window_background_opacity = 0.95 -- focused
overrides.window_background_opacity = 0.55 -- unfocusedWorkspace still shows machine hostname instead of koo@raldisk
Config reload (Ctrl+Shift+R) does not re-fire gui-startup. Do a full close — check Task Manager for lingering wezterm-gui.exe and end it before reopening.
Background image not loading
Verify the path in wezterm/config/appearance.lua uses double backslashes:
source = {File = 'C:\\Users\\YourName\\path\\to\\image.jpg'},If using the backdrop cycle system, drop images into wezterm/backdrops/ — the folder must contain at least one .jpg or .png file.
Battery indicator missing from right status bar Expected on desktops — the battery segment is skipped silently when no battery is present.
Oh My Posh prompt shows wrong username
The theme hardcodes koo@raldisk in the session segment template. If you want a different label, open ohmyposh/.poshconfig.json and change "template": " koo@raldisk ".
WezTerm won't start after copying config
Check the WezTerm debug overlay (F12) or run wezterm --config-file wezterm.lua from the config directory. Common causes: font not installed, Lua syntax error from a local edit.
Preview JSX won't lint
Run npm install first, then npm run lint. Requires Node 18+.
MIT — see LICENSE.
