Documentation Index
Fetch the complete documentation index at: https://mintlify.com/heyitsiveen/windows-11/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Before setting up the PowerShell configuration, you need a fresh Windows 11 installation with updated system and drivers.
Update Windows 11
Open Settings → Windows Update and install all available updates.# Verify Windows version
winver
After updates complete, restart your PC. Update drivers
Download and install Driver Booster to update system drivers.Repeat Windows Update after driver updates to catch any additional patches.
Clean up pre-installed apps
Remove unnecessary bloatware:
- Open Settings → Apps → Installed apps
- Uninstall apps you don’t need (games, promotional software, etc.)
- Update remaining apps via Microsoft Store
Package managers
Verify Winget
Winget comes pre-installed on Windows 11. Verify it’s available:Update sources: Install Scoop
Scoop handles CLI tools better than Winget. Install it:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
Add essential buckets:scoop bucket add extras
scoop bucket add nerd-fonts
scoop update
Terminal and fonts
Install WezTerm
WezTerm is a GPU-accelerated terminal with excellent font rendering:winget install wez.wezterm
Create the config directory:New-Item -ItemType Directory -Path "$HOME\.config\wezterm" -Force
Install Nerd Font
Nerd Fonts provide icons for the terminal:scoop install nerd-fonts/JetBrainsMono-NF
After installation, configure WezTerm to use “JetBrainsMono Nerd Font” in your wezterm.lua config file.
Install Oh My Posh
Oh My Posh provides beautiful, informative prompts:winget install JanDeDobbeleer.OhMyPosh -s winget
Create the theme directory:New-Item -ItemType Directory -Path "$HOME\.config\oh-my-posh" -Force
Download your custom theme (optional):curl -o $HOME\.config\oh-my-posh\heyitsiveen.omp.json https://raw.githubusercontent.com/vntbln/ubuntu/main/.config/oh-my-posh/heyitsiveen.omp.json
Install all CLI tools
Install modern replacements for Unix tools in one command:scoop install fzf bat eza zoxide ripgrep fd delta lazygit fastfetch btop jq
Install HTTPie separately via Winget:winget install HTTPie.HTTPie
Verify installations
Check that all tools are available:fzf --version
bat --version
eza --version
zoxide --version
rg --version
fd --version
delta --version
lazygit --version
fastfetch --version
btop --version
jq --version
http --version
If any command is not found, restart your terminal or run:$env:PATH = [System.Environment]::GetEnvironmentVariable("PATH", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("PATH", "User")
PowerShell modules
Install required modules
Install PowerShell modules from the gallery:Install-Module -Name PSReadLine -Force -SkipPublisherCheck
Install-Module -Name PSFzf -Force
Install-Module -Name Terminal-Icons -Force
Verify modules
Check installations:Get-Module -ListAvailable -Name PSReadLine, PSFzf, Terminal-Icons
Set up PowerShell configuration
Create directory structure
Create the config directories:New-Item -ItemType Directory -Path "$HOME\.config\powershell\conf.d" -Force
New-Item -ItemType Directory -Path "$HOME\.config\powershell\functions" -Force
Create profile entry point
Create the main profile file at $HOME\.config\powershell\Microsoft.PowerShell_profile.ps1:@'
# ============================================================
# POWERSHELL CONFIGURATION
# ============================================================
# Lean entry point - modular configs live in conf.d/
# Functions are loaded from functions/
# ============================================================
$ConfigRoot = "$HOME\.config\powershell"
# Source all conf.d files in order
$confDir = Join-Path $ConfigRoot "conf.d"
if (Test-Path $confDir) {
Get-ChildItem -Path $confDir -Filter "*.ps1" |
Sort-Object Name |
ForEach-Object {
. $_.FullName
}
}
'@ | Out-File -FilePath "$HOME\.config\powershell\Microsoft.PowerShell_profile.ps1" -Encoding UTF8
Create symlink
Link PowerShell’s $PROFILE to your config:# Create profile directory if it doesn't exist
$profileDir = Split-Path $PROFILE -Parent
if (!(Test-Path $profileDir)) {
New-Item -ItemType Directory -Path $profileDir -Force
}
# Remove existing profile
if (Test-Path $PROFILE) {
Remove-Item $PROFILE -Force
}
# Create symbolic link
New-Item -ItemType SymbolicLink -Path $PROFILE -Target "$HOME\.config\powershell\Microsoft.PowerShell_profile.ps1"
Creating symbolic links requires either:
- Windows Developer Mode enabled (Settings → Privacy & Security → For developers)
- Running PowerShell as Administrator
Clone or download configuration files
If you’re using this as a template, you’ll need to create the configuration files in conf.d/ and functions/.The minimum files needed are:
conf.d/00-init.ps1 - Core settings and PSReadLine
conf.d/10-environment.ps1 - Environment variables and editor chain
conf.d/20-aliases.ps1 - Git and tool aliases
conf.d/30-tools.ps1 - Tool integrations (bat, eza, zoxide, fzf)
conf.d/60-prompt.ps1 - Oh My Posh initialization
See the PowerShell profile structure documentation for complete details.
Verify the setup
Restart terminal
Close and reopen WezTerm to load the new configuration.
Test core functionality
Verify key features work:# Press Ctrl+R and start typing to search command history
Check Oh My Posh prompt
Your prompt should display:
- Current directory
- Git branch and status (if in a repo)
- Execution time for long commands
- Custom theme styling
If you don’t see a themed prompt, check that your Oh My Posh theme file exists:Test-Path "$HOME\.config\oh-my-posh\*.omp.json"
Quick command reference
Here are the most useful commands to get started:
| Command | Description |
|---|
gs | Git status |
ga <file> | Git add |
gcm "msg" | Git commit with message |
ll | Long list with icons and git status |
lt | Tree view (2 levels) |
cat <file> | View file with syntax highlighting |
Ctrl+R | Search command history |
Ctrl+T | Fuzzy find files |
Alt+C | Fuzzy find directories |
mkcd <name> | Create directory and cd into it |
reload | Reload PowerShell configuration |
~ | Go to home directory |
.. | Go up one directory |
- | Go to previous directory |
Troubleshooting
If you see “running scripts is disabled on this system”:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
- Install a Nerd Font:
scoop install nerd-fonts/JetBrainsMono-NF
- Configure WezTerm to use the Nerd Font in
~/.config/wezterm/wezterm.lua:
config.font = wezterm.font("JetBrainsMono Nerd Font")
Refresh your PATH:$env:PATH = [System.Environment]::GetEnvironmentVariable("PATH", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("PATH", "User")
Then restart your terminal.
FZF keybindings not working
Ensure PSFzf is installed and imported:Install-Module PSFzf -Force
Import-Module PSFzf
Then restart PowerShell.
Next steps
- Customize the Vesper color theme in
conf.d/30-tools.ps1
- Add your own aliases in
conf.d/20-aliases.ps1
- Create custom functions in
functions/
- Add machine-specific settings to
conf.d/99-local.ps1 (gitignored)
- Explore the PowerShell configuration and custom functions for advanced features