Windows Development Environment Setup
Categories:
This guide documents the current maintained Windows contributor workflow for Indexly.
It replaces the old Windows Terminal customization page and aligns with the actual implementation in:
dotfiles-windowsfor shell, terminal, package manager, and editor setupproject-indexly/setup.ps1for repo-specific dependencies and virtual environment setup
Use this page when your goal is: “I want a Windows workstation that matches the maintained Indexly development flow.”
If you only want to install Indexly as a user, start with Install Indexly instead.
What This Setup Covers
| Layer | Source of truth | Purpose |
|---|---|---|
| Shell and workstation bootstrap | dotfiles-windows/bootstrap.ps1 |
Installs PowerShell 7, Windows Terminal support tools, Scoop packages, fonts, modules, and profile wiring |
| Day-to-day shell workflow | dotfiles-windows/profile.ps1 and modules/functions.ps1 |
Loads prompt, helper commands, updater commands, and project setup helpers |
| Repo-specific onboarding | project-indexly/setup.ps1 |
Installs repo system packages from winget.yaml, creates .venv, and installs Python dependencies |
| Product installation docs | Install Indexly | End-user install and verification guidance |
Recommended Windows Flow
1. Start With Official Base Components
Recommended before you bootstrap:
You can run the bootstrap from Windows PowerShell, but the bootstrap now attempts to install PowerShell 7 first and then relaunch itself under pwsh when available.
2. Get The Dotfiles Repo
Clone the dotfiles repository:
git clone https://github.com/kimsgent/dotfiles.git "$HOME\dotfiles"
Copy-Item -Recurse -Force "$HOME\dotfiles\dotfiles-windows" "$HOME\dotfiles-windows"
Set-Location "$HOME\dotfiles-windows"
If git is not installed yet, install it first with an official source such as winget:
winget install --id Git.Git -e
3. Run The Maintained Windows Bootstrap
.\bootstrap.ps1
The current bootstrap flow does all of the following:
- Ensures PowerShell 7 is available.
- Relaunches the bootstrap under
pwshwhen possible. - Installs base Windows packages with
winget. - Installs Scoop if missing.
- Ensures Scoop Git support before adding buckets.
- Adds and refreshes the
extrasandnerd-fontsbuckets when available. - Installs core CLI tools such as
neovim,ripgrep,fd,fzf,bat,eza,zoxide,jq, anddelta. - Installs Nerd Fonts when the
nerd-fontsbucket is available. - Ensures Python and Node.js are available.
- Installs maintained PowerShell modules such as
PSReadLine,PSFzf,Terminal-Icons,PSWindowsUpdate, andImportExcel. - Copies the maintained PowerShell profile and links Starship and Neovim config.
4. Restart The Shell And Verify
Close the current shell and open a new PowerShell 7 session.
Run these checks:
pwsh --version
git --version
python --version
nvim --version
rg --version
fd --version
If the profile loaded correctly, you should also have helper commands such as:
usp
update-powershell
setup-env
dev-mode
minimal-mode
What The Windows Bootstrap Installs
Managed By winget
The current bootstrap uses winget for Windows-native packages such as:
Microsoft.PowerShellMicrosoft.WindowsTerminalJanDeDobbeleer.OhMyPoshStarship.StarshipMicrosoft.PowerToysOpenJS.NodeJS- Python when no working Python runtime is already present
Managed By Scoop
The current bootstrap uses Scoop for CLI-focused tools and buckets. It currently installs or manages:
gitneovimripgrepfdfzfbatezazoxidejqdeltafastfetchmingw
When the nerd-fonts bucket is available, it also installs:
Hack-NFMeslo-NF
Managed By PowerShell Gallery
The bootstrap also installs or updates PowerShell modules that improve the contributor shell experience:
PackageManagementPSReadLinePSFzfTerminal-IconsPSWindowsUpdateImportExcel
Onboard The project-indexly Repository
After your workstation bootstrap is complete, move to the repo itself:
Set-Location D:\project-indexly
The repo contains its own onboarding script:
.\setup.ps1 -CheckOnly
.\setup.ps1
What setup.ps1 does today:
- validates
winget, Python, and repo files - applies system packages from
winget.yaml - creates or reuses
.venv - upgrades
pip,setuptools, andwheel - installs
requirements.txt - installs
requirements-dev.txt
Supported modes:
.\setup.ps1 -CheckOnly
.\setup.ps1 -UpdateOnly
.\setup.ps1 -FreshInstall
.\setup.ps1 -Purge
If your dotfiles profile is already loaded, the same repo-native flow is also available through the helper command:
setup-env indexly -check
setup-env indexly
Recommended Validation For Contributors
After bootstrap and repo setup, verify the environment that actually matters for Indexly work:
Set-Location D:\project-indexly
.venv\Scripts\Activate.ps1
python -m indexly --help
indexly --version
indexly show-help
indexly doctor
pytest -q
If you are working on optional features, install the matching extra groups described in Install Indexly and Indexly Developer Guide.
Optional Quality-Of-Life Commands
The maintained Windows profile adds several useful commands for contributors:
| Command | Purpose |
|---|---|
usp |
Run the logged package-manager update flow |
uspf |
Run the fuller update variant |
usd |
Preview updates without making changes |
upd |
View the latest structured update log |
update-powershell |
Update the PowerShell 7 runtime using winget first, then the official MSI fallback |
fdg / rgg |
Fuzzy file search and ripgrep-driven code search |
dev-mode / minimal-mode |
Switch Starship prompt mode |
Troubleshooting
Bootstrap Started In Windows PowerShell Instead Of PowerShell 7
This is expected on a clean machine.
The current bootstrap attempts to install PowerShell 7 first, then relaunches itself under pwsh. If it cannot, it continues with a warning and you can verify later with:
pwsh --version
update-powershell
Scoop Says Git Is Required For Buckets
The maintained bootstrap now installs or detects Scoop Git support before adding buckets.
If you still see bucket-related Git errors:
git --version
scoop update
usp
If git is still missing in the current session, restart PowerShell and rerun the bootstrap.
Scoop Cannot Find Hack-NF Or Meslo-NF
This usually means the nerd-fonts bucket is unavailable or stale, not that the fonts are universally unsupported.
Use this order:
scoop bucket list
scoop update
usp
If the nerd-fonts bucket is still missing, rerun the bootstrap after Git and Scoop are healthy.
Bootstrap Runs Without Administrator Rights
A non-elevated run is acceptable for most of the environment.
Current behavior:
- file symlinks may fall back to hard links or file copies
- Neovim directory linking may fall back to a junction
- some Windows Update or package operations may still require an elevated shell
Typical admin-sensitive areas:
PSWindowsUpdateoperations- some
wingetinstalls or configuration changes - symbolic links when Developer Mode is not enabled
setup.ps1 Fails During winget configure
project-indexly/setup.ps1 applies winget.yaml, and some packages may prompt, fail, or require elevation depending on machine policy.
Start with:
.\setup.ps1 -CheckOnly
Then rerun the full setup in an elevated shell if winget or package policy blocks the import.
Script Execution Is Blocked
If PowerShell blocks local scripts, use a per-user policy:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned