Starship으로 터미널 프롬프트 꾸미기
터미널을 열 때마다 보이는 프롬프트가 밋밋하다고 느끼신 적 있으신가요?
기본 프롬프트는 현재 디렉터리 정도만 보여주다 보니 Git 브랜치를 확인하려면 git branch를 치고, Node.js 버전이 궁금하면 node -v를 입력해야 하죠.
Starship은 이런 불편을 해결해주는 크로스 쉘 프롬프트입니다. Rust로 만들어져서 빠르고, Bash부터 Zsh, Fish, PowerShell까지 거의 모든 쉘에서 동작합니다. 이 글에서는 Starship을 설치하고 나만의 프롬프트를 설정하는 방법을 알아보겠습니다.
Starship이란?
Starship은 “The minimal, blazing-fast, and infinitely customizable prompt for any shell”이라는 슬로건을 내걸고 있는 오픈소스 프로젝트입니다. 핵심 특징을 정리해보면 이렇습니다.
Rust로 작성되어 있어서 속도가 빠릅니다. 쉘을 열거나 명령어를 실행한 뒤 프롬프트가 뜨기까지 거의 지연이 없어요. Bash, Zsh, Fish, PowerShell 등 거의 모든 쉘을 지원해서 어떤 환경에서든 똑같은 프롬프트를 쓸 수 있고요. Git 브랜치와 상태, 프로그래밍 언어 버전, Docker 컨텍스트, 클라우드 프로필 같은 정보도 프롬프트에 자동으로 표시해줍니다. 현재 디렉터리에 어떤 프로젝트 파일이 있느냐에 따라 관련 정보만 똑똑하게 보여주는 거죠.
설치하기
Starship을 사용하려면 먼저 터미널에 Nerd Font가 설치되어 있어야 합니다. Nerd Font는 개발용 아이콘이 포함된 폰트로, Starship이 아이콘을 표시하는 데 사용합니다. FiraCode Nerd Font나 JetBrainsMono Nerd Font 같은 폰트를 하나 골라서 설치해주세요.
Nerd Font가 준비되었다면 Starship을 설치합니다.
macOS에서는 Homebrew로 간편하게 설치할 수 있습니다.
brew install starship
Linux에서는 설치 스크립트를 사용하거나 패키지 매니저를 통해 설치할 수 있습니다.
curl -sS https://starship.rs/install.sh | sh
Ubuntu 25.04 이상이라면 apt로도 설치 가능합니다.
sudo apt install starship
Arch Linux 사용자라면 pacman을 사용하면 됩니다.
sudo pacman -S starship
Windows에서는 Scoop이나 Winget을 사용할 수 있습니다.
scoop install starship
winget install --id Starship.Starship
Rust 개발 환경이 있다면 Cargo로 직접 빌드해서 설치하는 방법도 있습니다.
cargo install starship --locked
쉘 설정하기
Starship을 설치했으면 사용하는 쉘의 설정 파일에 초기화 코드를 추가해야 합니다.
Bash라면 ~/.bashrc 맨 끝에 다음을 넣어주세요.
eval "$(starship init bash)"
Zsh는 ~/.zshrc에 추가합니다.
eval "$(starship init zsh)"
Fish 쉘이라면 ~/.config/fish/config.fish에 넣으면 됩니다.
starship init fish | source
PowerShell은 프로필 파일에 추가하면 됩니다. 프로필 파일 경로는 $PROFILE 명령어로 확인할 수 있어요.
Invoke-Expression (&starship init powershell)
설정 파일을 수정한 뒤에 터미널을 다시 열면 Starship 프롬프트가 적용된 것을 확인할 수 있습니다.
설정 파일 만들기
Starship의 설정은 TOML 형식의 파일로 관리됩니다.
기본 경로는 ~/.config/starship.toml이고, 없으면 새로 만들어주면 됩니다.
mkdir -p ~/.config && touch ~/.config/starship.toml
설정 파일의 위치를 바꾸고 싶다면 STARSHIP_CONFIG 환경변수를 설정하면 됩니다.
export STARSHIP_CONFIG=~/dotfiles/starship.toml
에디터에서 자동 완성 지원을 받으려면 설정 파일 맨 위에 스키마를 지정해두는 것이 좋습니다.
"$schema" = 'https://starship.rs/config-schema.json'
기본 설정 살펴보기
간단한 설정 예제를 살펴보겠습니다.
"$schema" = 'https://starship.rs/config-schema.json'
# 프롬프트 앞에 빈 줄 추가
add_newline = true
# 성공/실패에 따라 프롬프트 기호 변경
[character]
success_symbol = '[➜](bold green)'
error_symbol = '[✗](bold red)'
# 패키지 버전 표시 끄기
[package]
disabled = true
add_newline을 true로 설정하면 명령어 결과와 다음 프롬프트 사이에 빈 줄이 들어가서 가독성이 좋아집니다.
[character] 모듈은 프롬프트에서 커서 바로 앞에 표시되는 기호를 설정합니다. 이전 명령어가 성공했으면 초록색 화살표가, 실패했으면 빨간색 X 표시가 나타나도록 한 건데요. 명령어를 잘못 입력했을 때 바로 알아챌 수 있어서 편리합니다.
[package] 모듈처럼 필요 없는 정보는 disabled = true로 숨길 수 있습니다.
Git 모듈 설정
터미널에서 작업할 때 가장 자주 확인하는 정보 중 하나가 Git 상태입니다.
Starship은 Git 관련 정보를 여러 모듈로 나누어 보여주는데요, 대표적인 것이 git_branch와 git_status 모듈입니다.
[git_branch]
symbol = '🌱 '
truncation_length = 20
[git_status]
ahead = '⇡${count}'
behind = '⇣${count}'
diverged = '⇕⇡${ahead_count}⇣${behind_count}'
untracked = '?${count}'
stashed = '📦'
modified = '!${count}'
staged = '+${count}'
git_branch 모듈에서는 브랜치 이름 앞에 표시할 아이콘을 바꾸거나, 긴 브랜치 이름을 잘라서 보여줄 수 있습니다.
git_status 모듈에서는 원격 브랜치보다 앞서 있는 커밋 수(ahead), 뒤처진 커밋 수(behind), 추적되지 않는 파일 수(untracked), 수정된 파일 수(modified) 같은 정보를 어떤 형식으로 표시할지 세세하게 조절할 수 있습니다.
프로그래밍 언어 모듈
Starship은 현재 디렉터리에 있는 프로젝트 파일을 감지해서 관련 프로그래밍 언어의 버전을 자동으로 보여줍니다.
예를 들어 package.json이 있으면 Node.js 버전을, requirements.txt가 있으면 Python 버전을, Cargo.toml이 있으면 Rust 버전을 표시하죠.
[nodejs]
format = 'via [$symbol($version )]($style)'
symbol = '⬢ '
[python]
symbol = '🐍 '
format = 'via [${symbol}${pyenv_prefix}(${version} )]($style)'
[rust]
symbol = '🦀 '
format = 'via [$symbol($version )]($style)'
각 모듈의 format 속성을 통해 표시 형식을 자유롭게 바꿀 수 있습니다.
$symbol은 아이콘, $version은 버전 번호, $style은 색상과 스타일을 나타내는 변수입니다.
대괄호 []로 감싼 부분이 실제로 화면에 표시되는 텍스트이고, 소괄호 ()로 감싸면 해당 변수에 값이 있을 때만 표시됩니다.
이 모듈들은 디렉터리에 해당 프로젝트 파일이 없으면 자동으로 숨겨지기 때문에 프롬프트가 쓸데없이 길어지지 않습니다.
클라우드/컨테이너 모듈
DevOps 작업을 많이 하시는 분이라면 클라우드와 컨테이너 관련 모듈이 유용합니다.
[aws]
format = 'on [$symbol($profile)(@$region)]($style) '
symbol = '☁️ '
[docker_context]
format = 'via [$symbol$context]($style) '
[kubernetes]
disabled = false
format = 'on [$symbol$context( \($namespace\))]($style) '
AWS 프로필과 리전, Docker 컨텍스트, Kubernetes 클러스터 이름을 프롬프트에서 바로 확인할 수 있습니다. 실수로 프로덕션 환경에서 명령어를 실행하는 걸 막아줍니다.
참고로 kubernetes 모듈은 기본적으로 비활성화되어 있어서 disabled = false로 명시적으로 켜줘야 합니다.
프롬프트 형식 커스터마이징
전체 프롬프트의 레이아웃을 바꾸고 싶다면 최상위 format 속성을 수정합니다.
한 줄짜리 미니멀 프롬프트를 만들어볼까요?
format = '$directory$git_branch$character '
add_newline = false
[directory]
truncation_length = 1
디렉터리, Git 브랜치, 커서 기호만 한 줄에 표시하는 깔끔한 프롬프트입니다.
반대로 정보를 두 줄에 걸쳐 보여주는 프롬프트도 만들 수 있습니다.
format = '''
[┌─](bold green)$directory$git_branch$git_status$nodejs$python$rust
[└─>](bold green) '''
첫 줄에 디렉터리, Git, 언어 버전 같은 컨텍스트 정보를 표시하고, 둘째 줄에 실제 명령어를 입력하는 구조입니다. 정보가 많아도 입력 부분이 항상 같은 위치에 있어서 타이핑하기 편합니다.
스타일 문자열
Starship의 스타일 문자열은 텍스트의 색상과 포맷을 지정하는 방법입니다.
색상은 이름으로 지정하거나 ANSI 코드, hex 코드를 사용할 수 있습니다.
# 이름으로 지정
style = 'bold green'
# ANSI 256 색상
style = 'fg:27'
# hex 색상 코드
style = 'bg:#bf5700'
# 여러 스타일 조합
style = 'bold italic fg:purple'
bold, italic, underline, dimmed, inverted 같은 텍스트 수식어도 자유롭게 조합할 수 있습니다.
fg:는 글자색, bg:는 배경색을 나타냅니다.
프리셋 활용하기
설정을 처음부터 직접 만들기 부담스럽다면 Starship이 제공하는 프리셋을 활용해보세요. 잘 다듬어진 프리셋을 기반으로 마음에 드는 부분만 수정하면 훨씬 편합니다.
대표적인 프리셋 몇 가지를 소개하면 다음과 같습니다.
- Pastel Powerline — 파스텔 톤의 Powerline 스타일 프롬프트로, 컬러풀하면서도 눈이 편안합니다
- Tokyo Night — VS Code의 인기 테마 Tokyo Night에서 영감을 받은 프리셋입니다
- Gruvbox Rainbow — Gruvbox 컬러 팔레트를 사용한 무지개빛 프롬프트입니다
- Catppuccin Powerline — Catppuccin 컬러 테마를 Powerline 스타일에 적용한 프리셋입니다
- Pure Prompt — 인기 있는 Pure 프롬프트의 모습과 동작을 재현한 프리셋입니다
- No Nerd Fonts — Nerd Font 없이도 사용할 수 있도록 일반 문자로 대체한 프리셋입니다
- No Runtime Versions — Node.js, Python, Rust 같은 언어 런타임 버전을 숨겨서 프롬프트를 간결하게 만드는 프리셋입니다
- Plain Text Symbols — 유니코드 없이 순수 텍스트 기호만 사용하는 프리셋입니다
프리셋은 다음 명령어로 적용할 수 있습니다.
starship preset tokyo-night -o ~/.config/starship.toml
이 명령어를 실행하면 기존 설정 파일이 프리셋으로 덮어쓰이니 백업해두는 게 좋습니다.
커스텀 컬러 팔레트
프리셋의 색상이 마음에 들지 않는다면 자신만의 컬러 팔레트를 정의할 수도 있습니다.
palette = 'my_theme'
[palettes.my_theme]
blue = '#89b4fa'
green = '#a6e3a1'
red = '#f38ba8'
yellow = '#f9e2af'
purple = '#cba6f7'
팔레트를 정의해두면 설정 전체에서 색상 이름만으로 일관된 테마를 유지할 수 있어서 나중에 색상을 변경하고 싶을 때 한 곳만 수정하면 됩니다.
성능 관련 설정
Starship은 기본적으로 빠르지만 시스템 환경에 따라 프롬프트 표시가 느려질 수 있습니다. 네트워크 드라이브에 있는 디렉터리나 매우 큰 Git 저장소에서 작업할 때가 대표적인 경우입니다.
# 파일 스캔 타임아웃 (밀리초)
scan_timeout = 10
# 외부 명령어 실행 타임아웃 (밀리초)
command_timeout = 500
scan_timeout은 Starship이 디렉터리를 스캔하는 제한 시간이고, command_timeout은 외부 명령어(예: git status)의 제한 시간입니다. 프롬프트가 느리게 느껴진다면 이 값들을 줄여보세요.
네트워크 파일시스템에서 작업한다면 심볼릭 링크 추적을 끄는 것도 도움이 됩니다.
follow_symlinks = false
실전 설정 예시
지금까지 살펴본 내용을 종합해서 웹 개발자용 설정을 하나 만들어 보겠습니다.
"$schema" = 'https://starship.rs/config-schema.json'
add_newline = true
format = '''
$directory$git_branch$git_status$nodejs$python$docker_context$aws
$character'''
[character]
success_symbol = '[❯](bold green)'
error_symbol = '[❯](bold red)'
[directory]
truncation_length = 3
truncate_to_repo = true
[git_branch]
symbol = ' '
truncation_length = 20
[git_status]
ahead = '⇡${count}'
behind = '⇣${count}'
modified = '!${count}'
untracked = '?${count}'
staged = '+${count}'
[nodejs]
format = 'via [$symbol($version )]($style)'
[python]
format = 'via [${symbol}(${version} )]($style)'
[docker_context]
format = 'via [$symbol$context]($style) '
[aws]
format = 'on [$symbol($profile)]($style) '
[package]
disabled = true
두 줄 프롬프트로 구성해서 첫 줄에는 디렉터리, Git 상태, 개발 환경 정보를 표시하고, 둘째 줄에서 명령어를 입력합니다. 패키지 버전 같이 자주 안 보는 정보는 꺼두었고, Git 상태는 숫자로 표시해서 변경 사항을 한눈에 파악할 수 있도록 했습니다.
마치며
Starship을 사용하면 밋밋한 기본 터미널 프롬프트를 유용하고 예쁜 프롬프트로 바꿀 수 있습니다. Rust 기반이라 빠르고, TOML 파일 하나로 설정할 수 있으며, 어떤 쉘에서든 똑같이 동작하는 게 좋습니다.
처음에는 프리셋 중 하나를 골라서 시작하고, 쓰다 보면서 필요한 모듈을 켜거나 끄고, 색상이나 아이콘을 나만의 취향에 맞게 조금씩 바꿔나가는 것을 추천합니다. 쉘 커맨드에 익숙하다면 Starship과 함께 터미널 작업이 훨씬 즐거워질 거예요. Zsh를 쓰고 계신다면 Oh My Zsh로 터미널 생산성 높이기도 함께 읽어보세요.
Starship 공식 문서에서 더 다양한 모듈과 설정 옵션을 확인할 수 있으니 참고해보세요.
This work is licensed under
CC BY 4.0