The Ultimate Windows Terminal Setup: Starship, Autocomplete, and Pure Aesthetics
Let’s be honest: if you are a developer, sysadmin, or just a power user, you spend a massive chunk of your day staring at a terminal. Out of the box, the default Windows command line is... well, it gets the job done, but it’s neither smart nor particularly pretty.
Today, we are going to completely transform your Windows Terminal. We’ll take it from a boring black box to a gorgeous, highly productive workspace complete with Starship prompts, Neofetch greetings, custom fonts with ligatures, and a massive productivity boost using PSReadLine and the Ultimate Completer. We’ll even add Linux-like sudo and text editing capabilities.
Let's dive in!
Step 1: The Preparations (Installing the Core Tools)
We are going to use PowerShell 7 as our modern base. To make things incredibly fast, we will use winget (Windows Package Manager) to install everything in one go.
Open your current terminal and run this command:
[code]
winget install Microsoft.PowerShell nepnep.neofetch-win Starship.Starship gerardog.gsudo GNU.Nano
[/code]
What are we installing here?
PowerShell 7: The modern, cross-platform version of PowerShell.
Neofetch: The classic, beautiful system information script that will greet us every time we open a new tab.
Starship: A blazing-fast, infinitely customizable prompt for any shell.
gsudo & Nano (Optional but highly recommended): I love bringing my Linux muscle memory to Windows.
gsudogives you that sweetsudocapability to elevate permissions, andnanogives us a quick, terminal-based text editor so we don't have to open Notepad for quick config edits.
Step 2: Terminal Settings, Fonts, and That Clean Look
First, we need to make PowerShell 7 our default and get rid of the annoying Microsoft copyright text that appears on every launch. We want a clean slate for Neofetch and Starship.
Open Windows Terminal Settings (click the downward arrow in the tab bar -> Settings).
Set the Default Profile to PowerShell (the new PS7 one, usually just named "PowerShell" with a black icon, not "Windows PowerShell").
Go to the Windows PowerShell profile (the old blue one) and toggle Hide profile from dropdown to
On.Now, select your new PowerShell profile, find the Command line setting, and change it to:
[code] "C:\Program Files\PowerShell\7\pwsh.exe" -nologo [/code]
-nologo flag is the magic trick that hides the copyright text!)The Font: Cascadia Code To render all the cool Git symbols, arrows, and icons that Starship uses, we need a "Nerd Font". Microsoft’s Cascadia Code is perfect.
Download it from
.Google Fonts: Cascadia Code Extract the ZIP, select all the font files, right-click, and choose "Install for all users".
The UI Tweaks Back in the Windows Terminal Settings, under your default Terminal profile:
Appearance -> Color scheme: Select
One Half Dark(or your preferred dark theme).Appearance -> Font face: Choose
Cascadia Code NF(the 'NF' stands for Nerd Font, which contains the icons!).Appearance -> Background opacity: Set it to
80%.Appearance -> Enable acrylic material: Toggle to
On.
Step 3: Supercharging Autocompletion with Modules
A pretty terminal is nothing if it isn't smart. We are going to install modules that give us menu-based tabbing, Git aliases, and the Ultimate Completer (for dynamic JSON-based autocomplete). We’ll also add a plugin that mimics Ubuntu’s helpful "command not found" feature.
Run these commands one by one to install the modules:
[code]
Install-Module -Name git-aliases
Install-Module -Name Microsoft.WinGet.Client
Install-Module -Name Microsoft.WinGet.CommandNotFound
Install-Module -Name UltimateCompleter
[/code]
Step 4: Tying It All Together in Your Profile
Now we need to tell PowerShell to load all these amazing tools every time it starts. Since we installed nano earlier, editing our profile is a breeze.
Run this in your terminal:
[code] nano $PROFILE [/code]
(If it asks to create the file, type Y for yes).
Paste the following master-configuration script into the editor:
[code]
# 1. Enable Menu-Style Autocompletion
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
# 2. Custom Argument Completer for Winget
Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
[Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new()
$Local:word = $wordToComplete.Replace('"', '""')
$Local:ast = $commandAst.ToString().Replace('"', '""')
winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
# 3. The Welcome Screen
neofetch
# 4. Load the Smart Modules
Import-Module UltimateCompleter -DisableNameChecking
Import-Module -Name Microsoft.WinGet.CommandNotFound
Import-Module git-aliases -DisableNameChecking
# 5. Initialize Starship Prompt
Invoke-Expression (&starship init powershell)
[/code]
Press Ctrl+O to save, Enter to confirm, and Ctrl+X to exit nano.
What did we just do?Tab will now open a beautiful, navigable menu instead of just aggressively pasting the first match. You havwinget, deep tooltip support via Ultimate Completer, and an Ubuntu-style helpe
Step 5: T he Final Touch (Custom Starship Theme)
Eve
Let's open the Starship configuration file:
[code] nano ~\.config\starship.toml [/code]
(If the .config folder doesn't exist yet, you might need to run mkdir ~\.config first).
Paste your custom theme configuration here:
[code]
## FIRST LINE/ROW: Info & Status
# First param ─┌
[username]
format = " [╭─$user]($style)@"
show_always = true
style_root = "bold red"
style_user = "bold red"
# Second param
[hostname]
disabled = false
format = "[$hostname]($style) in "
ssh_only = false
style = "bold dimmed red"
trim_at = "-"
# Third param
[directory]
style = "purple"
truncate_to_repo = true
truncation_length = 0
truncation_symbol = "repo: "
# Fourth param
[sudo]
disabled = false
# Before all the version info (python, nodejs, php, etc.)
[git_status]
ahead = "⇡${count}"
behind = "⇣${count}"
deleted = "x"
diverged = "⇕⇡${ahead_count}⇣${behind_count}"
style = "white"
# Last param in the first line/row
[cmd_duration]
disabled = false
format = "took [$duration]($style)"
min_time = 1
## SECOND LINE/ROW: Prompt
# Somethere at the beginning
[battery]
charging_symbol = ""
disabled = true
discharging_symbol = ""
full_symbol = ""
[[battery.display]] # "bold red" style when capacity is between 0% and 15%
disabled = false
style = "bold red"
threshold = 15
[[battery.display]] # "bold yellow" style when capacity is between 15% and 50%
disabled = true
style = "bold yellow"
threshold = 50
[[battery.display]] # "bold green" style when capacity is between 50% and 80%
disabled = true
style = "bold green"
threshold = 80
# Prompt: optional param 1
[time]
disabled = true
format = " 🕙 $time($style)\n"
style = "bright-white"
time_format = "%T"
# Prompt: param 2
[character]
error_symbol = " [×](bold red)"
success_symbol = " [╰─λ](bold red)"
# SYMBOLS
[status]
disabled = false
format = '[\[$symbol$status_common_meaning$status_signal_name$status_maybe_int\]]($style)'
map_symbol = true
pipestatus = true
symbol = "🔴"
[aws]
symbol = " "
[conda]
symbol = " "
[dart]
symbol = " "
[docker_context]
symbol = " "
[elixir]
symbol = " "
[elm]
symbol = " "
[git_branch]
symbol = " "
[golang]
symbol = " "
[hg_branch]
symbol = " "
[java]
symbol = " "
[julia]
symbol = " "
[nim]
symbol = " "
[nix_shell]
symbol = " "
[nodejs]
symbol = " "
[package]
symbol = " "
[perl]
symbol = " "
[php]
symbol = " "
[python]
symbol = " "
[ruby]
symbol = " "
[rust]
symbol = " "
[swift]
symbol = "ﯣ "
Save (Ctrl+O, Enter) and exit (Ctrl+X).
The Result



Close your Windows Terminal and open a fresh tab.
You should now be greeted by a gorgeous translucent background, a sleek Neofetch system summary, and a highly informative, symbol-rich Starship prompt. Start typing a command like winget install or git checkout and hit Tab to experience the lightning-fast, menu-driven autocomplete.