Post

oh my zsh custom theme

개요

oh my zsh을 사용하고 있었는데 기본 테마인 robbyrussell를 사용했을 때 지금 실행하고 있는 터미널이 docker인지 host인지 utm 인지 구분이 되지 않아서 이를 해결할 수 있는 theme를 제작했습니다. 완성된 theme는 아래 링크에 있습니다.

0결과 1

1결과 2

robbyrussell

oh my zsh을 설치하면 바로 적용되는 기본 테마로 다음과 같이 구현되어 있습니다.

1
2
3
4
5
6
7
PROMPT="%(?:%{$fg_bold[green]%}%1{➜%} :%{$fg_bold[red]%}%1{➜%} ) %{$fg[cyan]%}%c%{$reset_color%}"
PROMPT+=' $(git_prompt_info)'

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}git:(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}%1{✗%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"

정말 간단하게 구현이 되어 있고 만약 git 환경이면 해당 환경에 맞게 PROMPT에 출력하고 있습니다.

custom robbyrussell

여기서 오른쪽 공간이 여유가 있기 때문에 아래와 같이 수정하여 PROMPT의 오른쪽을 활용하여 구분할 수 있게 코드를 작성했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
PROMPT="%(?:%{$fg_bold[green]%}%1{➜%} :%{$fg_bold[red]%}%1{➜%} ) %{$fg[cyan]%}%c%{$reset_color%}"
PROMPT+=' $(git_prompt_info)'

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}git:(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}%1{✗%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"

get_host() {
  local _remote="$REMOTE_HOST"
  local _remote_local="%{$fg_bold[$REMOTE_LOCAL_COLOR]%}local%{$reset_color%}"
  local _remote_remote="%{$fg_bold[$REMOTE_REMOTE_COLOR]%}$_remote%{$reset_color%}"
  local _remote_status="$_remote_remote"

  if [[ -z "$_remote" ]]; then
    _remote_status="$_remote_local"
  fi
  echo "($REMOTE_THEME_PROMPT : $_remote_status)"
}

REMOTE_LOCAL_COLOR="green"
REMOTE_REMOTE_COLOR="red"

if [[ -n "$ZSH_REMOTE" ]]; then
  REMOTE_THEME_PROMPT="%{$fg_bold[blue]%}"
  REMOTE_THEME_PROMPT+=$ZSH_REMOTE
  REMOTE_THEME_PROMPT+="%{$reset_color%}"
else
  REMOTE_THEME_PROMPT="%{$fg_bold[blue]%}Docker%{$reset_color%}"
fi

RPROMPT='$(get_host)'

기본 테마인 robbyrussell 코드를 이용해서 PROMPT의 오른쪽을 설정할 수 있는 RPROMPT를 선언했습니다.

💡 RPROMPT는 oh my zsh에 선언되어 있어서 해당 변수를 수정하면 PROMPT의 오른쪽에 출력을 할 수 있습니다!

여기서, 어떤 환경을 사용하고 있는지 모르기 때문에 REMOTE_HOST, ZSH_REMOTE 환경변수를 이용했습니다. 그 결과 아래와 같이 환경변수의 값을 출력했습니다.

1
(ZSH_REMOTE : REMOTE_HOST)

속도개선

만약 zsh을 하고 git 디렉토리에 들어갈 때 너무 느리다면 다음의 명령어를 입력하면 됩니다.

1
2
$ git config --global oh-my-zsh.hide-status 1
$ git config --global oh-my-zsh.hide-dirty 1
This post is licensed under CC BY 4.0 by the author.