상세 컨텐츠

본문 제목

[Mac OS] zsh 테마 프롬프트 (cmd prompt) 변경

IT 이야기/IT 상식

by 리치윈드 - windFlex 2023. 2. 15. 17:08

본문

반응형

ZSH 테마 커스터마이징

 

필자는 Mac/Linux 환경에서 `iTerm2 + ZSH + Oh-my-zsh` 조합으로 Terminal을 커스터마이징 하여 사용중이다. 이제는 맥북에서 기본 shell을 ZSH을 사용하기 때문에, 아마도 많은 유저가 필자와 유사한 환경으로 사용중일것 으로 추정하고 있다. 

일단, 기본 터미널 세팅을 사용하면, 터미널이 너무 밋밋할 뿐만 아니라 이로 인하여 가독성이 떨어진다. 개발 IDE와 터미널 사용 시간이 거의 비슷한 필자 입장에서, 터미널의 가독성은 생산성과도 직결된다 할 수 있다. 따라서, 터미널의 환경 설정 또한 상당히 예민한 편이다.  필자가 사용하는 터미널 (Terminal) 환경과 테마 적용에 대한 내용은 아래 포스팅을 참조하면 된다. 

[관련글]

2020.06.01 - [IT 이야기/IT 상식] - [맥북] 맥북 터미널을 이쁘게 - ZSH 초간단 설치와 커스터마이징 (zhs + iTerm2)

2022.10.20 - [IT 이야기/IT 상식] - [MacOS - ZSH] 유용한 플러그인 2종 - 자동완성/하이라이트

 

ZSH 테마 (agnoster) 적용 결과 불편한 점 - 프롬프트가 너무 길어..

이번 포스팅의 내용은, "기본 테마 설정의 불편함"을 거론하고자 한다. 개인의 취향을 모두 마쳐줄 수 없기 때문에, 그 중에서 가장 일반화를 한 것일 것이다. 그러나, 그 중에서 계속 방해되는 것이 있는데, 바로 터미널 (Terminal)에서 "프롬프트 (Prompt) " 표기에 관한 부분은 너무 영향이 크다.  테마는 좋은데 프롬프트가 너무 길다. 

물론 Minimal 에 충실한 테마들도 많이 존재한다. 

먼저 ZSH 테마가 적용된 결과를 살펴 보도록 하자.

Oh-my-zsh의 테마 (agnoster)가 적용된 iTerm2의 터미널 결과

어떤 느낌이 드는가?

우선 기본 터미널 대비 가독성이 뛰어나다. 필요한 한 정보가 눈에 쏙 들어오고, 명령어/문자열이 속성에 따라 카테고리가 나뉘어서 매우 보기에 편하다.  그 중에서 프롬프트는 다음과 같이 구성되어 있다.  (agnoster 테마를 적용했다. 다른 테마도 비슷할 것이다.)

(가상환경 이름) 사용자명@사용자PC이름 > 현재 Directory Path > Git Branch

명령어 프롬프트 한중에 많은 정보들이 같이 출력 되어 있기 때문에, 현재 상태를 한 눈에 알아보기 좋다. 그러나, 위 이미지에도 표기한 것과 같이 필자에게는 "개.인.적."으로 불편한 점들이 있다. 

  • 1) 혼자 사용하는 Mac Book에  "사용자@PC이름"이 모든 명령어 줄에 들어가 있을 필요가 있나?
    • 서버 환경이라면 이 또한 매우 중요할 것이다. 만약 `su -` 등을 사용하여 현재 root권한 이라면 큰 문제가 발생할 수도 있으니까.
  • 2) 정보를 주는 것은 좋은데, 명령어 줄에 입력할 공간이 이제 너무 부족한거 아닌가?
    • git 까지 사용하면 그 뒤에 공간은 더욱 줄어들게 된다. 
    • 필자는, 명령어 줄이 다음줄로 넘어가는 것을 싫어한다. 다음줄로 넘어가면 혼동될 수도 있고, 스페이스/엔터 등의 차이로 중대한 오류를 발생할 수도 있다. 
    • directory Path 경로를 모두 표기할 필요가 있을까?하는 생각도 들기도 한다. 

이러한 이유로, ZSH 테마의 명령어 프롬프트 변경할 필요가 있다. 

 

ZSH 테마 프롬프트 커스터마이징 - 프롬프트 표기 정보 변경 

ZSH 프롬프트 표기되는 정보를 커스터마이징 하기 위해서 다음과 같은 순서 진행이 필요하다. 

1) 어떤 테마를 사용하고 있는지 확인한다. (.zshrc 파일 확인)

2) 적용된 테마 파일(*.zsh-theme)에서 프롬프트 출력 포맷 수정


1) 적용된 테마 확인 (.zshrc) 

홈 디렉토리에 위치한 .zshrc 파일을 열어보자. 잘 모른다면, 터미널을 열고 다음 명령어중 하나를 실행 하면 된다. 

  • `open ~/.zshrc`
  • `nano ~/.zshrc`
  • `code ~/.zshrc`

가장 윗부분에서 몇라인 안쪽에 테마 설정이 있을 것이다. 나머지 회색은 전부 "주석"이다.  필자의 경우는 agnoster 테마가 적용되어 있는 것을 확인 할 수 있다. (ZSH_THEME="agnoster")

ZSH 설정 (.zshrc) 파일 - agnoster theme가 적용되어 있다. (좌), 다양한 테마 파일중 agnoster.zsh-theme 파일을 수정한다. (우)

 

2) 테마별 설정 파일 수정 ( .zsh-theme 파일 )

테마를 확인했다면, 테마에 해당하는 설정 파일을 열어서 수정한다. 테마 파일은 `~/.oh-my-zsh/themes` 위치에 테마의 이름과 동일한 파일명과 ".zsh-theme" 확장자를 가진 파일에 저장되어 있다. 예를 들어 필자는 agnoster 테마를 적용하고 있으므로, 파일의 위치는 다음과 같다. 

  • ~/.oh-my-zsh/themes/agnoster.zsh-theme

본인에 해당하는 <테마명>.zsh-theme 파일을 열어보면 매우 복잡한 구조의 shell script로 정의되어 있는 것을 확인 할 수 있다. 그러나 잘 살펴보면, 프롬프트를 구성하는 각 영역별로 함수를 나누어 두었고, 색상과 내용을 어떻게 설정할지에 대하여 반복적으로 기술된 내용이다. 앞 부분에는 각 영역들에 대하여 정의하고 가장 마지막에 가서, 각 영역을 조리하여 프롬프트를 생성하는 것을 확인 할 수 있다. 

agnoster.zsh-theme 파일의 context 수정 (좌), prompt build 라인 (우)

 

본 포스팅에서 수정하려는 부분은 명령어 프롬프트에서의 Context이다. 주석에도 표기 되어 있지만, "Context"는 "user@hostname"으로 표기된다.  여기에서 다음 표기에 집중하여 수정하면 된다. 

  • %n : 사용자 이름 (username)
  • %m: PC이름 (hostname)

필자의 경우 3가지를 테스트 해 보고 마음에 드는 것을 선택하여 사용중이다. 

  • %n@%m : 그대로 사용
  • %n : 단독사용하는 MacBook에 PC명이 뭐 중요하겠는가? hostname은 제거한다
  • 🌟 : username, hostname 모두 필요없지. 예쁜 프롬프트 표시 하나면 되지.  

위 3가지 경우중에서 실행해 보고 입맛에 맞게 선택하면 되겠다. 추가적으로 프롬프트 표시는 본인 선호에 따라서 아무거나 하면 된다. 필자는 재미삼아 별모양을 넣어 놓긴 했다. 

아무것도 넣지 않은 Minmal도 좋을 듯 하다. 이미 알겠지만, 맥북 환경에서 `Control + Command + Spacebar`를 입력하면 다양한 이모티콘을 입력할 수 있는 창이 열린다. 🌟 ✌️⭐︎☆⚡︎ 〉  아래는 별모양 프롬프트만 남긴 결과이다. 

zsh prompt - 별모양 프롬프트 Context남 남긴 결과

추가적으로, 본인이 사용하지 않는 기능이 있다면, Prompt 구성에서 아예 제외 시켜도 될것 같다. 다음은 앞서 거론한 Prompt 를 조립(build)하는 부분이다. 테마파일을 가장 마지막에 위치해 있다. 이 부분중 본인이 사용하지 않는 기능은 주석 처리하거나, 삭제하면 간편한 커스터마이징이 될것이다. 가령, 가상환경을 사용하지 않는다면, prompt_virtualenv 라인을 주석처리 해도 될것 이다. 

## Main prompt
build_prompt() {
  RETVAL=$?
  prompt_status
  prompt_virtualenv
  prompt_aws
  prompt_context
  prompt_dir
  prompt_git
  prompt_bzr
  prompt_hg
  prompt_end
}

 

취향에 맞게 테마를 사용하도록 하자. 

기타 - ZSH 추천 테마 

 

oh-my-zsh의 기본 설정으로는 "robbyrussell" 테마가 설정되어 있다. 필자는 아래와 같은 테마를 추천한다. 

기본 사용자는 agnoster를 추천한다. 이래저래 가장 기본적으로 사용하기에 좋다. 

고급 사용자는 Powerleve10k를 추천한다. 추천 사유는 테마에서 커스터마이징 자체를 지원해 준다. (config wizard) config wizard의 예시 화면은 아래와 같다. 각 모양과 포함되야할 내용 및 포맷을 설정하도록 지원한다.  다양한 정보를 제공하기 때문에 새로운 경험을 할 수 있다. 

필자는 agnoster 도 상당이 괜찮다고 생각한다. 위에서 설명한 프롬프트 길이만 조절하자.

ZSH - Powerlevel10k의 config wizard 를 사용한 커스터마이징 (customizing) (좌), 커스터마이징 적용 결과 (우)
Powerlevel10k 설정 가능한 테마 형식. 다양한 정보를 다양한 형태로 담을 수 있다. 그러나, 본인에게 맞지 않는 기능은 불필요하므로 사용해 보고 적당한 기능만 사용하자.


[ 0h-my-zsh 설치  / 삭제]

1) git clone으로 테마 프로젝트 다운로드, 2) 다운로드 완료 후 .zshrc 에서 테마 이름 변경

$ git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

 

3) 삭제 하기

$ rm -rf -- ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
테마 파일 삭제 후, ~/.zshrc 에서 `ZSH_THEME` 변수 변경

[ Homebrew 설치 ]

  • 별도 .zshrc를 변경하지 않아도 된다. 
$ brew install romkatv/powerlevel10k/powerlevel10k
$ echo "source $(brew --prefix)/opt/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc
homebrew 설치가 편리하긴 한데, 아래와 같이 ~/.zshrc 파일에 본인이 직접 수정하지 않은 이상한 라인들이 자꾸 늘어나게 된다. 
설치 후 변경된 .zshrc 파일

[ 삭제하기 ]

$ brew uninstall powerlevel10k; brew untap romkatv/powerlevel10k

 

[ Configuration Wizard  설정 / 재설정 ]

$ p10k configure

설치 후 ZSH을 다시 시작하면, configuration wizard가 실행된다. 만약 위자드가 실행되지 않으면 위 명령어를 통해서 강제 실행 하면 된다. 마찬가지로, 설정을 다시 초기화 하고 재 설정 하려면, 위 명령어 ("p10k configure")를 실행해 주자.

설정 위자드가 완료되면, 홈 디렉터리 밑에 아래와 같은 ".p10k.zsh" 폴더가 생성된다. (자꾸 뭐가 추가되네....)

위자드를 통해서 설정된 값은 해당 폴더 내부에 파일로 저장된다. 그리고, 이것은 ~/.zshrc 파일에서 다시 참조하여 shell을 설정한다. 따라서, 해당 폴더를 삭제해 버리면 설정 위자드가 초기화 되고 다시 설정하도록 할 것이다. 

powerlevel10k의 설정 위자드를 통한 설정값 저장 디렉토리 (좌), ~/.zshrc의 추가된 설정라인 (우)

 

 

 


Happy Dev.

 

 

반응형

관련글 더보기

댓글 영역