Setup-Terminal is a PowerShell_5-based setup project for applying a consistent Windows Terminal configuration on a developer workstation.
The project currently focuses on detecting common developer runtimes, creating Windows Terminal profiles for them, and optionally configuring an Oh My Posh prompt for PowerShell.
This script only reaches web in order to download:
- Oh My Posh through
winget - FiraCode Nerd Font ZIP from a tagged official Nerd Fonts GitHub release
- Oh My Posh
themes.ziparchive from the current GitHub release
Direct file downloads are verified with SHA-256 before the downloaded file is used. The Nerd Font archive is downloaded from a tagged release and checked against the checksum file published with the same Nerd Fonts release. The Oh My Posh themes archive is downloaded from the current release, checked against the SHA-256 digest exposed by the GitHub release asset, and only the selected theme file is extracted.
- Windows Terminal
settings.json - Developer profiles for detected tools:
- Git Bash
- Python
- Node.js
- Java (only detection)
- Profile icons for supported developer tools
- Selected Windows Terminal dynamic profile sources
- Terminal color schemes
- Additional Windows Terminal profile settings
- Oh My Posh setup for PowerShell
- FiraCode Nerd Font installation from the official Nerd Fonts ZIP archive
- Oh My Posh theme setup from the verified release themes archive
- Basic terminal behavior settings, such as tab width mode and web search URL
Windows
Windows Terminal
PowerShell
Git, Python, and Node.js, Java installed if you want matching profiles to be generated
- best to install using: official installer, Python version manager, Node version manager, Java JDK Adoptium Temurin
wingetif you want the setup to install or upgrade Oh My Posh
Download the latest release package:
Extract the ZIP, open PowerShell in the extracted Setup-Terminal directory, and run:
.\Setup-Terminal.ps1The ZIP is the minimal runtime package. It contains Setup-Terminal.ps1 and the required modules directory, so the full repository does not need to be cloned.
If Windows blocks the downloaded script because it came from the internet, unblock the extracted files first:
Get-ChildItem-Path .-Recurse |Unblock-File
.\Setup-Terminal.ps1Alternatively, run the setup with an execution policy override for this PowerShell process only:
powershell.exe-ExecutionPolicy Bypass -File .\Setup-Terminal.ps1To create release:
- commit and push changes to remote repository
- create a new tag (e.g. git tag v1.0.0)
- push the tag to remote (e.g. git push origin v1.0.0)
Run the setup script from the repository root:
.\Setup-Terminal.ps1The script detects installed developer tools, updates Windows Terminal profiles, applies additional settings, and saves the configuration back to the active Windows Terminal settings.json.
If the interactive TUI cannot use the current host, the script falls back to text input mode. In that mode select profiles by typing combined numbers:
1Git2Python3Node.js4Java
Then select setup steps by typing combined letters:
aUpdate Windows Terminal profiles (+ profile icons)bRemove profiles outside Windows PowerShell and Command PromptcDisable selected dynamic profile sources (Azure, SSH)dApply profiles color schemeseApply additional profile settingsfApply additional terminal settingsgInstall/configure Oh My Posh
For example, 134 selects Git, Node.js, and Java profiles, and abc selects the first three setup steps.
The script will download files from the web only after asking for permission with reference to the source URL.
Direct downloaded files are written to a temporary location first and verified before use:
FiraCode.zipfrom the tagged Nerd Fonts GitHub release is verified againstSHA-256.txtfrom the same release.themes.zipfrom the current Oh My Posh GitHub release is verified against the SHA-256 digest exposed by the release asset metadata. The setup extracts onlymarcduiker.omp.jsonfrom that archive.
Oh My Posh itself is installed or upgraded through winget, which uses the configured winget package source.
Additionally the script modifies the files in system locations as follows:
echo "$HOME\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\icons" echo "$HOME\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\marcduiker.omp.json" echo "$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1" echo "$HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1" echo "$HOME\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
Setup-Terminal.ps1 Main setup script
modules/ PowerShell modules used by the setup script
resources/ Shared icons and other project assets
This project includes resources/ps_fluent_design_384.svg for README branding.
The icon is not my original asset. It comes from the official PowerShell repository:
The upstream PowerShell repository is licensed under the MIT License.
Project license is not defined yet.
✅ Windows Terminal profile icons copied/updated in: C:\Users\`${USER}`\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\icons
✅ Windows Terminal profiles outside Windows PowerShell and Command Prompt removed before selected profiles were added.
✅ Oh My Posh theme copied/updated at: C:\Users\`${USER}`\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\marcduiker.omp.json
✅ PowerShell profile updated: C:\Users\`${USER}`\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
✅ PowerShell profile updated: C:\Users\`${USER}`\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
✅ Windows Terminal configuration saved to: C:\Users\`${USER}`\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
