Important
The below screenshots are taken on my main monitor, which has the resolution of 3440x1440. Configurations in this repository are compatible with wide screen monitors and have been tested on sizes ranging from 1920x1080 to 3440x1440, but should work for any monitor size.
Note: The glassit VSCode extension was present in the original repository but has been removed from this fork as it did not work properly with my setup.
π Previewβ
βββ β
π· Installβ
βββ β
π§± Extrasβ
βββ β
β¨ Featuresβ
βββ β
πβCreditsβ
βββ β
π€ Authorβ
βββ
Note
This is a fork of the original windots repository by @jacquindev. This fork has been customized for personal use and may differ from the original repository.
- Original Repository: Created by @jacquindev (Jacquin Moon) - View Original Repo
- Original Author's Last Contribution (to original repo): ~7 months ago (approximately May 2025)
- Fork Maintained By: @XcluEzy7 (Erik Garcia) - Independent changes began November 21, 2025
This repository contains configurations and dotfiles that have been adapted to fit personal preferences. Some apps or packages may have been added / removed / reconfigured from the original setup.
Highly Recommended:
- Transparent File Explorer
- Simply clone this repo to
your_location
git clone https://github.com/XcluEzy7/windots.git your_location
cd `your_location`- In your elevated PowerShell Terminal, run:
.\Setup.ps1
. .\Setup.ps1Important
PowerShell Module Installation: PowerShell modules from the PowerShell Gallery must be installed in PowerShell 5.1 (Windows PowerShell), not PowerShell 7.x. The Setup.ps1 script automatically handles this by delegating module installation to PowerShell 5.1 (powershell.exe) even when the script itself runs in PowerShell 7.x. This ensures modules are installed in the correct location and are available to both PowerShell versions.
After the initial setup, Setup.ps1 is automatically added to your PATH, allowing you to run it from anywhere in your terminal. The script also includes:
- Function wrapper: Call
w11dot-setupfrom anywhere (e.g.,w11dot-setup -Environment -Force) - Tab completion: Press Tab after
w11dot-setup -to see all available parameters with descriptions - Case-insensitive parameters:
-Environment,-environment, and-ENVIRONMENTall work the same - Always available: Once the initial setup completes, the
w11dot-setupcommand andSetup.ps1script are permanently available from any directory, allowing you to run specific installation sections whenever needed - Selective execution: Run individual sections of the installer independently (e.g.,
w11dot-setup -Packages,w11dot-setup -Git) without running the full installation process - Automatic privilege escalation: When running
w11dot-setupcommands, the function automatically usesgsudoto elevate privileges. A UAC prompt will appear - simply click "Yes" and the script will run with admin privileges. No need to manually open an elevated terminal!
Environment variables in appList.json now automatically expand to user-specific paths. No need to manually edit hardcoded paths - use placeholders like %USERPROFILE% or %ProgramFiles% and they will be automatically resolved to the correct paths for each user during setup.
PowerShell experimental features are now properly enabled with improved error handling and validation. The script correctly identifies feature names (e.g., PSSubsystemPluginModel), validates their existence before enabling, and provides clear warnings about PowerShell restart requirements. When PSSubsystemPluginModel is enabled, the script automatically attempts to install the CompletionPredictor module, with helpful guidance if a restart is required first.
The WSL setup section now includes interactive .wslconfig file configuration. When running w11dot-setup -Wsl, the script will:
- Copy the
.wslconfigtemplate fromconfig/home/.wslconfigto your user profile - Prompt you to configure the file with your system's resources (memory, processors, swap size, etc.)
- Open the file in a terminal editor (nvim or micro, if available) for editing before copying to the destination
- Wait for you to save and exit the editor, then automatically copy the configured file to
$env:USERPROFILE\.wslconfig - Allow you to skip configuration if you prefer to configure it later
The setup script supports skip parameters to run only specific sections of the installation. This is useful for:
- Reinstalling missing packages after issues
- Updating specific configurations
- Testing individual sections
- Force overwriting existing configurations
Available Skip Parameters:
-Packages- Install/reinstall WinGet, Chocolatey, and Scoop packages-PowerShell- Setup PowerShell modules and experimental features-Git- Configure Git settings-Symlinks- Create symbolic links for dotfiles-Environment- Set environment variables-Addons- Install package addons/plugins-VSCode- Install VSCode extensions-Themes- Install Catppuccin themes-Miscellaneous- Run miscellaneous tasks (yazi plugins, bat themes)-Komorebi- Setup Komorebi & YASB engines-NerdFonts- Install Nerd Fonts-WSL- Install Windows Subsystem for Linux-Updates- Update all installed applications from appList.json
Force Mode:
Use the -Force parameter with any skip parameter to overwrite existing configurations or force reinstall packages.
Examples:
# From the repository directory (first time setup)
. .\Setup.ps1 -Packages
# From anywhere after initial setup (Setup.ps1 is in PATH)
w11dot-setup -Packages -Force
Setup.ps1 -Environment -Force
w11dot-setup -Git
# Force reinstall all packages even if already installed
w11dot-setup -Packages -Force
# Only setup environment variables, overwrite existing
w11dot-setup -Environment -Force
# Only setup symlinks, overwrite existing files
w11dot-setup -Symlinks -Force
# Only install VSCode extensions, reinstall even if exists
w11dot-setup -VSCode -Force
# Update all installed applications from appList.json
w11dot-setup -UpdatesNote
- Only one skip parameter can be used at a time. If no skip parameter is provided, the script runs the full installation as normal.
- After the initial setup,
Setup.ps1is added to PATH automatically. You may need to restart PowerShell or reload your profile for PATH changes to take effect. - Use
w11dot-setup(function) orSetup.ps1(script) - both work from anywhere once PATH is configured. - Tab completion works for all parameter names - just type
w11dot-setup -and press Tab to see available options.
Tip
Privilege Escalation: The w11dot-setup function automatically uses gsudo to elevate privileges when needed. If gsudo is not installed, you'll see a warning and can install it with winget install gerardog.gsudo. The function will attempt to run without elevation as a fallback, but most setup operations require admin privileges.
π Application Update Management (v0.10)
The -Updates parameter allows you to update all installed applications listed in appList.json using their respective package managers. This feature intelligently manages updates across Winget, Chocolatey, and Scoop packages.
Usage:
# Update all installed applications
w11dot-setup -Updates
# Update only specific package managers (for testing)
.\updateApps.ps1 -Winget
.\updateApps.ps1 -Choco
.\updateApps.ps1 -Scoop
.\updateApps.ps1 -Choco -Scoop # Multiple managersHow It Works:
-
Smart Detection: The script checks which package manager installed each application and uses the correct update command for that manager.
-
Pre-Update Checks: Before attempting to update, the script verifies if an update is actually available:
- Winget: Compares installed version with available version using
winget list - Chocolatey: Uses
choco outdatedto check for available updates - Scoop: Parses
scoop updateoutput to detect "latest version" status
- Winget: Compares installed version with available version using
-
Privilege Management:
- Winget & Chocolatey: Can run with admin privileges (automatically elevated if needed)
- Scoop: MUST run as non-privileged user to prevent package corruption. The script automatically spawns a non-admin process when running as admin.
-
PowerShell Module Packages: Packages ending in
*psmodule(e.g.,burnttoast-psmodule) are automatically handled in PowerShell 5.1 context withPowerShellGetmodule imported, as required by Chocolatey's module installation process. -
Output & Logging:
- Success Logs: Saved to
%USERPROFILE%\w11dot_logs\apps\appUpdate_{timestamp}_success.log- Concise entries showing package manager, package name, and version changes
- Format:
β manager | package | version (or old -> new)
- Error Logs: Saved to
%USERPROFILE%\w11dot_logs\apps\appUpdate_{timestamp}_error.log- Verbose error details for troubleshooting failed updates
- Console Output: Clean, color-coded status messages:
(up to date)- Package is already at the latest version(success)- Package was successfully updated(failed)- Update encountered an error(skipped)- Package is not installed
- Success Logs: Saved to
-
Update Status Detection:
- Packages are marked as "up to date" if:
- No newer version is available
- Installed version matches available version
- Package manager reports "already up to date" or "latest version"
- Only packages that actually need updating will show "Updating..." message
- Packages are marked as "up to date" if:
Best Practices:
- Run
w11dot-setup -Updatesregularly to keep your applications current - Check the success log to see which packages were updated and their version changes
- Review error logs if any packages fail to update
- Use individual package manager switches (
-Winget,-Choco,-Scoop) for testing or selective updates
Note: The update process respects the autoInstall setting in appList.json. Only packages from package managers with autoInstall: true will be processed.
β¨οΈ Terminal Shortcuts Cheatsheet Module (v0.11)
The TerminalHelpers.psm1 module provides comprehensive cheat sheets for terminal shortcuts with unified keybindings across Windows Terminal and WezTerm.
Usage:
# Display WezTerm shortcuts
wezhelp
Show-WezTermHelp
# Display Windows Terminal shortcuts
wthelp
Show-WTHelpFeatures:
- Unified Shortcuts: Common shortcuts are identical across both terminals for consistency
- Color-Coded Display: Uses PowerShell native colors (Green for common, Yellow for terminal-specific)
- Organized Categories: Shortcuts grouped by function (Tabs, Panes, Edit, Scrolling, etc.)
- Justifications: Explains why 3-modifier-key shortcuts are used for advanced features
- GlazeWM Compatible: All shortcuts use
Ctrl+Shiftto avoid conflicts with GlazeWM window manager - Auto-Loaded: Module is automatically loaded via PowerShell profiles, available globally
Shortcut Categories:
- Tabs: New/close tabs, navigation between tabs
- Panes: Split (vertical/horizontal), navigation, management, advanced features
- Edit: Copy/paste, find/search, mark mode
- Font Size: Increase/decrease/reset font size
- Scrolling: Scroll up/down, jump to top/bottom
- Settings: Open settings, command palette, reload configuration
- Special Features: Terminal-specific features (WezTerm: copy mode, launcher menu, etc.)
Key Design Principles:
- Avoid 3-modifier keys (
Ctrl+Shift+Alt) unless justified for advanced features - Prefer
Ctrl + action keyorCtrl + Shift + action keyfor common operations - Visual shortcuts:
Ctrl+|for vertical split,Ctrl+\for horizontal split - Terminal-specific features clearly marked (e.g., "WT Only", "WezTerm Only")
Module Location:
dotposh/Modules/TerminalHelpers.psm1- Automatically loaded via PowerShell profiles (
Profile.ps1,WindowsProfile.ps1)
Important
Before running the Setup.ps1 script, please check the appList.json file to ADD/REMOVE the apps you would like to install.
VSCode Extensions:
Edit the VSCode's extensions list to ADD/REMOVE the extensions you would like to install.
PowerShell Profile:
The Profile.ps1 is symbolically linked to this repository. Be sure to overwrite the Profile.ps1 if you do not want its settings and configuration, as these settings are specifically tailored for my workflow.
π Clink Setup
-
In your
Command Promptconsole, type:clink installscripts "your_location\clink\clink-custom" clink installscripts "your_location\clink\clink-completions" clink installscripts "your_location\clink\clink-gizmos" clink installscripts "your_location\clink\more-clink-completions"
-
Replace
your_locationwith full path to where you cloned this repository.
Note
The clink-custom directory contains Lua scripts to extend clink based on the programs you use. If you do not have the programs define in the scripts, they will not be activated.
- custom prompt β
clink/clink-custom/prompt.lua. (Only one of the following should be set totrue, otherwisefalse)oh-my-posh: to enable, setlocal ohmyposh_enabled = true.starship: to enable, setlocal starship_enabled = true.
vfoxβclink/clink-custom/vfox.luazoxideβclink/clink-custom/zoxide.lua
π€¦ Note to Self(Git-Noob): The Submodule That Lives Its Own Life
[!WARNING] Dear Future Me (and anyone else who stumbles upon this):
Yes, that
dotposh/Config/powershell-completions-collectionthing is a submodule. No, it's not broken. Yes, it will show as "modified content" ingit statuswhen it's in detached HEAD state (which is like 90% of the time because submodules are drama queens).The Prayer Point to Fix Your Sanity:
git submodule update --remote dotposh/Config/powershell-completions-collectionThis updates the submodule to the latest commit from its remote repository. Think of it as giving the submodule a reality check and telling it "hey, you should probably sync with your remote friends."
When Things Go Sideways (Because They Will):
- Submodule is in detached HEAD? (You'll know because
git statuswill yell at you)cd dotposh/Config/powershell-completions-collection git checkout main # or maste 6DB6 r, whatever branch it uses cd ../../.. git add dotposh/Config/powershell-completions-collection git commit -m "update submodule because it was being difficult again"
- Want to update it to the latest?
git submodule update --remote dotposh/Config/powershell-completions-collection git add dotposh/Config/powershell-completions-collection git commit -m "update powershell-completions-collection submodule"
- Cloned the repo and submodule is empty?
git submodule update --init --recursiveRemember: Submodules track specific commits, not branches. They're like that friend who always shows up at the exact commit you told them to, even if the world has moved on. You have to explicitly tell them to update. They won't do it themselves because they're too busy being... submodules.
TL;DR: If
git statusshows the submodule as modified and you didn't change anything, just rungit submodule update --remote dotposh/Config/powershell-completions-collectionand commit the update. Your future self will thank you. Probably.
β Setup Development Tools with MISE (mise-en-place)
Ensure that mise command available on your system (using scoop install mise)
# Enable experimental features:
mise settings experimental trueThe below command with install latest LTS version of NodeJS, and also automatically install NPM global packages define in .default-npm-packages
# Install latest NodeJS LTS
mise use -g node@ltsFor further information please visit: https://mise.jdx.dev.
π Bootstrap WSL
WSL setup can be done automatically by using Ansible. Any details can be found here: https://github.com/jacquindev/automated-wsl2-setup.
β WSL dotfiles are maintained in this repository: https://github.com/jacquindev/dotfiles.
Follow the below links to download and learn to how to setup:
πΈ Spicetify Setup π§
[!NOTE] I do not use Spicetify personally. For setup and configuration details, please refer to the original repository.
- π« All packages to install are listed in appList.json file - Easy to maintain!
- π§ Selective installation - Run only specific sections with skip parameters (e.g.,
-Packages,-Environment,-Symlinks) for targeted updates and troubleshooting - π Global access -
Setup.ps1is added to PATH automatically, callw11dot-setuporSetup.ps1from anywhere with full tab completion support - π¨ Main theme Catppuccin for everything!
- π Minimal Yasb status bar
- π Beautiful wallpapers, and live wallpapers for Lively Wallpapers
- πͺ Komorebi config
- πΈ All-In-One VSCode setup (extensions list)
- βοΈ Rainmeter setup
- >_ Sleek Windows Terminal config
- π Oh-My-Posh minimal theme
- π¦ Super fast PowerShell startup time (load asynchronously) + custom configurations & modules
- β¨οΈ Terminal Shortcuts Cheatsheet - Unified shortcuts for Windows Terminal and WezTerm with
wezhelpandwthelpcommands - π Simple fastfetch configuration, which I copied from scottmckendry's config
- π₯ Many addons for Git!
- π± Use MISE (mise-en-place) to manage development tools. Learn more about
misehere: https://mise.jdx.dev/
Details
π₯οΈ CLI/TUI Apps
| Entry | App |
|---|---|
| Terminal Emulator | Windows Terminal βοΈ |
| File Explorer | yazi βοΈ |
| Fuzzy File Finder | fzf |
| System Monitor | btop |
| System Fetch | fastfetch βοΈ |
| Git TUI | lazygit βοΈ |
Details
π±οΈ GUI Apps
| Entry | App |
|---|---|
| App Launcher | PowerToys Run (PowerToys) |
| Git Clients | GitHub Desktop, GitKraken |
| IDEs | IntelliJ IDEA Community, Visual Studio Code |
| Text Editors | Notepad++, Obsidian |
| Development | DevPod (Client-Only Codespaces), Postman |
| Containerization | Podman Desktop, VirtualBox |
| Security | Kleopatra (GPG Key Manager) |
| System Tools | PowerToys, Start11 |
| Networking | ProtonVPN, Synergy |
| Customization | Rainmeter, Lively Wallpaper |
Details
π Git Addons
| Installer | Link | Description |
|---|---|---|
| winget | GitHub Desktop | Simple collaboration from your desktop. |
| winget | GitKraken Desktop | Dev Tools that simplify & supercharge Git. |
| scoop | gh | Bring GitHub to the command line. |
| scoop | git-aliases | Oh My Zsh's Git aliases for PowerShell. |
| scoop | git-crypt | Transparent file encryption in Git. |
| scoop | git-filter-repo | Quickly rewrite git repository history (filter-branch replacement). |
| scoop | git-lfs | Improve then handling of large files. |
| scoop | git-sizer | Compute various size metrics for a Git repository. |
| scoop | gitleaks | Detect secrets like passwords, API keys, and tokens. |
| npm | commitizen + cz-git | Write better Git commits. |
| npm | git-open | Open the GitHub page or website for a repository in your browser. |
| npm | git-recent | See your latest local git branches, formatted real fancy. |
| git aliases | Include git aliases for git command for faster version control. |
Big thanks for those inspirations:
- scottmckendry's Windots
- ashish0kumar's windots
- MattFTW's Dotfiles - Most of my wallpapers are from here.
- DevDrive PowerShell's Scripts - I copied most of DevDrive's functions for PowerShell here.
- Name: Jacquin Moon
- Github: @jacquindev
- Email: jacquindev@outlook.com
- Original Repository: jacquindev/windots
- Last Contribution (to original repo): ~7 months ago (approximately May 2025)
- Name: Erik Garcia
- Github: @XcluEzy7
- Email: eagarcia@techforexcellence.org
- Fork Repository: XcluEzy7/windots
- Independent Changes Began: November 21, 2025
This repository is released under the MIT License.
Feel free to use and modify these dotfiles to suit your needs.
Please give a βοΈ if this project helped you!