Back to Blog

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. gsudo gives you that sweet sudo capability to elevate permissions, and nano gives 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.

  1. Open Windows Terminal Settings (click the downward arrow in the tab bar -> Settings).

  2. Set the Default Profile to PowerShell (the new PS7 one, usually just named "PowerShell" with a black icon, not "Windows PowerShell").

  3. Go to the Windows PowerShell profile (the old blue one) and toggle Hide profile from dropdown to On.

  4. 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]

(The -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? Hitting Tab will now open a beautiful, navigable menu instead of just aggressively pasting the first match. You have native autocomplete for winget, deep tooltip support via Ultimate Completer, and an Ubuntu-style helper if you type a command that isn't installed. Plus, Neofetch and Starship will now launch automatically!


Step 5: The Final Touch (Custom Starship Theme)

Everything is functional, but let's make that Starship prompt truly yours. I use a custom Starship configuration that perfectly balances beautiful symbols with important Git context.

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 = "ﯣ "

[/code]

Save (Ctrl+O, Enter) and exit (Ctrl+X).

The Result

[slideshow=3]
Greetings

Auto-Completion
Starship
[/slideshow]

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.