logo
Published on

My WezTerm & Starship Setup on macOS

My WezTerm & Starship Setup on macOS

My WezTerm & Starship Setup on macOS

A concise guide to how I configure WezTerm and the Starship prompt on my new Mac.


Environment Setup on macOS

  1. Install with Homebrew

    brew install wezterm
    brew install starship
    
  2. Create configuration directories

    mkdir -p ~/.config/wezterm
    
  3. Enable Starship in your shell (e.g. in ~/.zshrc or ~/.bash_profile):

    # At the end of your shell config
    eval "$(starship init zsh)"
    

WezTerm Configuration

Put this in ~/.config/wezterm/wezterm.lua:

local wezterm = require("wezterm")

config = wezterm.config_builder()

config = {
    automatically_reload_config = true,
    color_scheme = "Nord (Gogh)",
    enable_tab_bar = false,
    -- window_decorations = "RESIZE",
    window_close_confirmation = "NeverPrompt",
    default_cursor_style = "BlinkingBar",

    background = {
        {
            source = {
                Color = "#2E3440", -- dark purple
                -- Image = "~/Pictures/wallpapers/wallhaven.png",
            },      
            width  = "100%",
            height = "100%",
            -- width = "Cover",
            -- height = "Cover",
            opacity = 0.99,
        },
    },
    window_padding = {
        left = 3,
        right = 3,
        top = 0,
        bottom = 0,
    },
    initial_rows = 50,
    initial_cols = 100,
}

return config 

Highlights

  • Auto-reload your config on save
  • Nord (Gogh) color scheme
  • Minimal UI: no tab bar, no close confirmation prompt
  • Custom background with subtle opacity
  • Comfortable padding and size defaults

Starship Prompt Configuration

Preset from here

Save this as ~/.config/starship.toml:

fformat = """\
[╭╴](fg:arrow)\
$username\
$os\
$git_branch\
(\
    at \
    $directory\
)\
$cmd_duration\
(\
    via \
    $python\
    $conda\
    $nodejs\
    $c\
    $rust\
    $java\
)
[╰─](fg:arrow)$character\
"""
# Add the modules you need

# Disable the blank line at the start of the prompt
add_newline = true


palette = "normal"


[palettes.normal]
arrow = "#333533"
os = "#16f4d0"
os_admin = "#e4ff1a"
directory = "#9ffff5"
time = "#bdfffd"
node = "#a5e6ba"
git = "#f17f29"
git_status = "#DFEBED"
python = "#edf67d"
conda = "#70e000"
java = "#F86279"
rust = "#ffdac6"
clang = "#caf0f8"
duration = "#ce4257"
text_color = "#EDF2F4"
text_light = "#26272A"

# I disabled some modules (Rust, Java...) since some things aren't installed in my machine, enable them if you need.

[username]
style_user = 'bold os'
style_root = 'bold os_admin'
format = '[  $user](fg:$style) '
disabled = false
show_always = true

[os]
format = "on [($name)]($style) "
style = "bold blue"
disabled = true

[os.symbols]
Alpine = " "
Arch = " "
Debian = " "
EndeavourOS = " "
Fedora = " "
Linux = " "
Macos = " "
Manjaro = " "
Mint = " "
NixOS = " "
openSUSE = " "
Pop = " "
SUSE = " "
Ubuntu = " "
Windows = " "

[character]
success_symbol = "[󰍟](fg:arrow)"
error_symbol = "[󰍟](fg:red)"

[directory]
format = "[$path](bold $style)[$read_only]($read_only_style) "
truncation_length = 2
style = "fg:directory"
read_only_style = "fg:directory"
before_repo_root_style = "fg:directory"
truncation_symbol = "…/"
truncate_to_repo = true
read_only ="  "

[time]
disabled = true
format = "at [󱑈 $time]($style)"
time_format = "%H:%M"
style = "bold fg:time"

[cmd_duration]
format = "took [ $duration]($style) "
style = "bold fg:duration"
min_time = 500

[git_branch]
format = "via [$symbol$branch]($style) "
style = "bold fg:git"
symbol = " "

[git_status]
format = '[ $all_status$ahead_behind ]($style)'
style = "fg:text_color bg:git"
disabled = true

[docker_context]
disabled=true
symbol = " "

[package]
disabled=true

[fill]
symbol = " "

[nodejs]
format = "[ $symbol$version ]($style)"
style = "bg:node fg:text_light"
symbol = " "
version_format = "${raw}"
disabled=false

[python]
disabled=false
format = '[ ${symbol}${pyenv_prefix}(${version})( \($virtualenv\)) ]($style)'
symbol = " "
version_format = "${raw}"
style = "bg:python fg:text_light"

[conda]
format = "[ $symbol$environment ]($style)"
style = "bg:conda fg:text_light"
ignore_base = false
disabled = false
symbol = " "

[java]
format = "[ $symbol$version ]($style)"
style = "bg:java fg:text_light"
version_format = "${raw}"
symbol = " "
disabled = true

[c]
format = "[ $symbol($version(-$name)) ]($style)"
style = "bg:clang fg:text_light"
symbol = " "
version_format = "${raw}"
disabled=true

[rust]
format ="[ $symbol$version ]($style)"
style = "bg:rust fg:text_light"
symbol = " "
version_format = "${raw}"
disabled=true