더 이상 zsh theme로 고통받지 마세요 - Powerlevel10k
맥북 쓰는 이유요...? 그냥 감성이죠(or 이쁘잖아요)
맥북 처음 받으면 제일 먼저하는 세팅이죠? 바로 zsh 테마(theme) 설정입니다.
정확히는 "zsh" + "oh my zsh" 이긴 하지만 대충 zsh라고 하죠 ㅎㅎ
어쨋든 카탈리나 이후부터는 기본 shell이 zsh로 설정되서 세팅할게 줄긴했지만 문제가 있습니다
터미널 꾸미는것도 일이랍니다. 근데 하루종일 이것만 하면 팀장님한테 혼나요
터미널이라는게 사실 이쁘게 꾸미는게 매우 귀찮기도 하고
회사PC의 경우엔 기존 PC를 반납하고 신규 PC를 받아야되는 경우가 있기 때문에
보통 설정파일인 `~/.zshrc` 파일을 어디에 백업해놔야하는 경우가 있는데요
하지만 `~/.zshrc` 파일만 백업했다고 완벽하게 이전 테마처럼 세팅할 순 없습니다
왜냐면 터미널에서 쓸 한글 폰트도 설치해야되고
테마도 다시 다운로드도 해야되고
해당 테마에서 스크립트 수정한 경우엔 그 코드도 찾아야되거든요
보통 newline 추가하려고 아래와 같은 스크립트를 테마에 넣으시는 경우가 많죠
prompt_end() {
if [[ -n $CURRENT_BG ]]; then
print -n "%{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
else
print -n "%{%k%}"
fi
print -n "%{%f%}"
CURRENT_BG=''
#Adds the new line and ➜ as the start character.
printf "\n ➜";
}
이런 스크립트 하나 넣으면 아래처럼 newline이 추가되서 보기도 그렇고 사용할때도 좀 더 편해집니다
어쨋든 이렇게 하나하나 세팅을 다 해놨더니
갑자기 PC를 포맷해야되거나 초기화를 해야되는 상황이 온다면 매우 난감합니다
왜냐면 겨우 테마 세팅하는걸 문서화까지 하는 경우는 잘 없으니깐요
그래서 보통 포맷해야되는 상황이 온다면 모두 난감해하지만
이제 소개시켜드릴 오픈소스라면 걱정은 없습니다!
바로 "Powerlevel10k" 입니다
Powerlevel10k 소개
https://github.com/romkatv/powerlevel10k
터미널 구성을 마법사 형태로 구성할 수 있게 도와주는 오픈소스입니다
설치도 매우 간단한데 저는 주로 manual하게 설치하는 편입니다
별다른 의미는 없고 저는 mac뿐 아니라 linux(ubuntu)에서도 zsh를 쓰다보니 그냥 통일해서 쓰는게 좋더라구요
- 설치: https://github.com/romkatv/powerlevel10k#installation
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
보시는것처럼 설치도 쉽고 놓칠 수 있는 부분도 마법사를 통해서 알려주다보니 편합니다
그럼 실제로 어떻게 설정하는지도 볼까요?
`source ~/.zshrc`를 실행하면 p10k(=powerlevel10k) configure가 실행됩니다
p10k 설정
1. 폰트 설치
위처럼 기본적으로 Apple에서 제공해주는 기본 폰트인 Menlo를 커스텀한 버전인 Meslo를 추천해줍니다
둘 다 mono폰트(고정폭)이라서 코딩할때 편하지만 Meslo의 특징은
줄 간격이 3가지로 제공되고
Nerd Fornt는 다양한 glyphs한 아이콘도 제공된다는거죠
glyphs한 아이콘이란건 아래 예시를 보시면 좋을것 같네요
- https://github.com/ryanoasis/nerd-fonts
어쨋든 특별한 취향이 있는게 아니라면 기본으로 추천해주는 Meslo Nerd Font를 추천드립니다
(+ 처음 설치하신다면 터미널을 한번 재시작해야니다)
2. 다이아몬드(UTF-8)
터미널 세팅할때 놓치는부분이죠. 바로 UTF-8 텍스트입니다
- 이미지 내 참고자료: https://graphemica.com/%E2%97%86
옛날엔 ascii만 써도 충분했지만 요즘 오픈소스들은 거의 최소 UTF-8를 쓰고 있기 때문에
사용하는 폰트가 해당 텍스트를 지원하고 있는지 확인하는겁니다
만약 현재 터미널 설정이 해당 텍스트를 지원하지 않는다면 안보일테고
그러면 p10k가 알아서 보일만한 문자로 대체해주겠죠?
저는 Meslo를 써서 그런지 잘보이네요
3. 자물쇠(유니코드 중 Private Use Area 체크)
PUA(Private Use Area)에 해당하는 글자가 보이는지 확인합니다.
PUA는 이름 그대로 사용자 정의 영역이고
UTF-8, UTF-16에서 사용자 개인이 직접 특수문자를 정의해서 쓸 수 있는 구간입니다.
(U+E000 ~ U+F8FF, U+F0000 ~ U+10FFFF)
하지만 보통 glyphs한 아이콘을 해당 영역에서 많이 다룹니다
그래서 fontawesome 의 폰트를 사용한다면 보일것이고 아니라면 2번처럼 적절한걸로 대체되겠죠?
- https://fontawesome.com/icons/lock
4. 화살표 위방향(UTF-16)
마지막 인코딩인 UTF-16 체크입니다
- https://graphemica.com/%F0%9F%A0%89
5. 겹치는지 확인
glyphs한 아이콘은 위에처럼 거의 공백이 없기 떄문에 겹치는것처럼 느낄 수 있는데요
취향에 따라서 적절하게 답하면 될거 같습니다
6. 프롬프트 스타일
저는 화려하게 쓰는걸 좋아해서 3번으로 선택했는데
이 또한 취향껏 고르시면 될거 같습니다
나중에 바꿀 수 있으니깐 첫눈에 딱 끌리는걸로 골라가시면 될거 같네요
7. 한국인이라면 1번
이건 말 안해도 되겠죠...?
1번 안하시면 이제 한글로된 폴더나 파일명이 다 xxXX 이런식으로 깨져서 보일겁니다...
한국인이라면 무조건 1번을!!!
8. 시간
이거 해서 뭐가 좋냐고 하시는분들도 계시는데
스크립트 같은거 실행할때 얼마나 걸리는지 요걸로 대충 계산해볼 수 있습니다
특히 shell, ansible, terraform 같은거 쓰신다면 도움이 되겠죠??
스크립트 실행했을때 얼마나 걸렸는지 확인할 필요가 줄어듭니다 ㅎ
대신 1,2번 골랐을때 딱 하나 단점이 있는데요.
시간이 눈에 보여서 그런지 시간이 잘 안갑니다
9. 프롬프트 스타일 ETC
중요한건 아니지만 취향이 가장 많이 갈리는 파트인데요
내용이 길어서 그냥 스크린샷으로 대체합니다
10. Instant Prompt Mode
zsh를 쓰시는 목적은 대부분 plugin 일텐데요
plugin이 많아지거나 유독 로딩이 오래 걸리는게 있다면 prompt를 새로 띄울때마다 엄청 오래 걸립니다
그런 랙(lag)을 방지해주는 모드가 바로 Instant Prompt Mode입니다
물론 이 모드가 모든 plugin 랙을 완전 최적화를 해주는건 아니지만
그냥 적용만해도 많이 빨라지더라구요
개인적으로는 추천드립니다 ㅎ
11. 마지막 apply
그냥 `source ~/.zshrc` 대신 해주는겁니다
저는 아래와 같은 취향으로 결정났습니다 ㅎㅎ
정리
글로 주절주절 써놨지만
보시는것처럼 1분만에 대부분의 상황에 고려가 필요한 내용을 마법사 형태로 제공해줍니다.
특히 인코딩 문제라든가 프롬프트 스타일 같이 매번 찾으면서 삽질해야되는걸 자동으로 정해주고
알아서 이전 설정파일을 백업까지 해주는 기능이 있는 p10k 소개였습니다