Post

zsh 설치하기

목차


Ubuntu zsh install


아래 명령어로 zsh를 설치한다.

1
apt-get install zsh

아래 명령어로 현재 쉘 상태를 확인하고

1
echo $SHELL

chsh -s $(which zsh) 명령어를 통해 쉘을 zsh로 바꿔준다.

chsh 명령어 사용 중 chsh:PAM authentication failed 오류가 뜰 시
/etc/pam.d/chsh 에서 auth_required pam_shell.so 부분을 주석처리한 후
chsh 명령어를 재실행한다.

/etc/passwd 에서 변경 진행해도 상관없다.

passwd 에서 쉘을 바꿔줄 경우 맨 마지막 부분의 쉘경로를

/bin/zsh로 변경해주면 된다.

1
2
(username):x:(uid):(gid):(comment):(home dir):(shell path)
user:x:0:0:user:/home/user:/bin/zsh

이후 터미널을 재시작한다.

echo $SHELL 명령어 출력결과로 zsh가 나오면 변경이 완료된 것이다.


Oh-My-Zsh 설치

zsh 테마 oh-my-zsh를 설치하여 관리할 수 있도록 한다.

1
curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh | /bin/bash -

필자는 $HOME/.zsh/ 에 zsh 관련 설정 파일을 관리하므로 해당 디렉토리로 .oh-my-zsh를 옮긴다.

1
2
test ! -d $HOME/.zsh && mkdir $HOME/.zsh
mv $HOME/.oh-my-zsh $HOME/.zsh/

powerlevel10k 설치

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

powerlevel10k저장소에서 클론한다.

클론 시 ~/.oh-my-zsh/custom/themes/powerlevel10k 에 저장시켜 .oh-my-zsh가 powerlevel10k 테마를 인식할 수 있도록 한다.

~/.zshrc 에서 ZSH_THEME 변수를 아래 값과 같이 변경하여 zsh의 테마를 지정해준다.

ZSH_THEME="powerlevel10k/powerlevel10k"

또한 256 컬러를 지원하는 터미널에서만 사용할 수 있기에

~/.zshrc 를 열어 export TERM=xterm-256color 값을 설정해준다.

이후 아이콘을 출력시킬 폰트를 설치해야 한다.

폰트의 경우 p10k에서 MesloLGS NF 를 공식 지원하고 있으니 왠만하면 해당 폰트를 설치할 수 있도록 하자. (아래 링크에서 폰트를 다운받을 수 있다.)

https://github.com/romkatv/powerlevel10k/#user-content-fonts

또는 Nerd-Font라고 아이콘 글꼴, 세로폭 등이 커스텀된 글꼴을 만드는 프로젝트가 존재한다. Nerd-Font 사이트에서 자신이 사용하는 또는 자신에게 가장 취향에 맞는 폰트를 설치하면 된다.

https://github.com/ryanoasis/nerd-fonts

https://www.nerdfonts.com/

필자는 현재 “Fantasque Sans” 폰트가 마음에 들어 Nerd-Font에서 해당 폰트를 다운받아 사용하고 있다. Fantasque Sans 폰트 외에도 Hack, Mononoki, Fira Code 등 기타 유명한 코딩 폰트들이 존재하니 찾아보면 좋을 것이다.

https://github.com/ryanoasis/nerd-fonts/tree/master/src/unpatched-fonts/FantasqueSansMono

Untitled

https://www.programmingfonts.org/

프로그래밍 폰트를 체험할 수 있는 사이트이다.

이후 터미널을 다시 실행시키거나 p10k configure 명령어를 통해 p10k 테마를 설정한다.

필자의 사용 설정은 다음과 같다.

zsh 및 p10k가 업데이트되면서 해당 설정은 바뀔 수 있다.

one-line 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
Prompt Style : (3) Rainbow Character
Set : (1) Unicode
Show current time? : (2) 24-hour format
Prompt Separators : (1) Angled Prompt
Heads : (1) Sharp Prompt
Tails : (1) Flat
Prompt Height : (1) One line
Prompt Spacing : (1) Compact
Icons : (2) Many icons   [ (1) Few icons 사용해도 무방 ]
Prompt Flow : (1) Concise
Enable Transient Prompt? : (n) No
Instant Prompt Mode : (1) Verbose (recommended)
Apply changes to ~/.zshrc? : (y) Yes (recommended)

multi-line 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Does this look like a diamond (rotated square)? (y) Yes.
Does this look like a lock? (y) Yes.
Does this look like a Debian logo (swirl/spiral)? (y) Yes.
Do all these icons fit between the crosses? (y) Yes. Icons...

Prompt Style : (3) Rainbow Character
Set : (1) Unicode
Show current time? : (2) 24-hour format
Prompt Separators : (1) Angled Prompt
Heads : (1) Sharp Prompt
Tails : (1) Flat
Prompt Height : (2) Two lines
Prompt Connection : (3) Solid     (아무거나 상관 없음.)
Prompt Frame : (1) No frame
Connection Color : (1) Lightest.  (4) Darkest (아무거나 상관 없음)

Prompt Spacing : (1) Compact
Icons : (2) Many icons   [ (1) Few icons 사용해도 무방 ]
Prompt Flow : (1) Concise
Enable Transient Prompt? : (y) Yes
Enable Transient Prompt? : (n) No
Instant Prompt Mode : (1) Verbose (recommended)
Apply changes to ~/.zshrc? : (y) Yes (recommended)
Apply changes to ~/.zshrc? : (n) No

p10k 테마 커스텀하기

이후 디폴트 테마 설정이 마음에 들지 않아 ~/.p10k.zsh 파일을 추가로 수정하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS 변수의
# load 주석 제거

디렉토리를 보여주는 설정을 해당 설정값으로 세팅
typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=0
typeset -g POWERLEVEL9K_SHORTEN_DELIMITER=""
typeset -g POWERLEVEL9K_SHORTEN_STRATEGY="truncate_absolute_chars"

디렉토리 배경색, 폰트 색, 스타일 지정
typeset -g POWERLEVEL9K_DIR_BACKGROUND=27
typeset -g POWERLEVEL9K_DIR_FOREGROUND=0
typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=232
typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=232
typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true

깃 관련 배경색, 폰트 색, 스타일 지정
typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=35
typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=84
typeset -g POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=28
typeset -g POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=9
typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=8

xterm-256 의 색 설정 값을 preview로 보려면 아래 명령어를 통해 알 수 있다.

for i in {0..255}; do print -Pn “%K{$i} %k%F{$i}${(l:3::0:)i}%f “ ${${(M)$((i%6)):#3}:+$’\n’}; done

해당 명령어를 외우는 것이 귀찮아서 alias 로 지정시켰다.

alias colorpreview='for i in {0..255}; do print -Pn “%K{$i} %k%F{$i}${(l:3::0:)i}%f “ ${${(M)$((i%6)):#3}:+$’\n’}; done'

alias 지정 후 colorpreview를 진행하면 256 색상에 대한 값들을 확인할 수 있다.

Untitled


번외 : full_icon에서 none_icon 으로 바꾸는 법

해당 방법은 NerdFont와 같이 아이콘을 지원하는 폰트를 사용할 경우 따로 작업을 해주지 않아도 된다.

코딩을 하다보면 폰트 호환성 등의 문제로 아이콘이 깨져 보이는 현상이 있을 수 있다.

이때 .p10k.zsh 파일을 수정하는 것으로 아이콘을 보이지 않게끔 설정할 수 있다.

  1. .p10k.zsh 파일을 연다.
  2. POWERLEVEL9K_MODE 변수를 찾는다.
    1. 해당 변수는 아래와 같이 세팅이 되어 있을 것이다.

      1
      
       typeset -g POWERLEVEL9K_MODE=nerdfont-complete
      
    2. 아래 변수의 값을 바꾸어준다.

      1
      
       typeset -g POWERLEVEL9K_MODE=powerline
      
  3. 더이상 아이콘이 보이지 않는다.
    그러나 추가적인 문제를 발견하였다.
    .git path가 있는 디렉토리에 접근 시 아이콘 한개가 깨져 보이는 것을 추가로 확인…

    Untitled

    1. 마찬가지로 .p10k.zsh 파일을 열어 POWERLEVEL9K_VCS_BRANCH_ICON 변수를 찾는다. 해당 변수는 아래와 같이 세팅이 되어 있을 것이다.

      1
      
       typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 '
      
    2. 아래 변수의 값을 바꾸어준다.

      1
      
       typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=
      

최종결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you.
  # full icon
  # typeset -g POWERLEVEL9K_MODE=nerdfont-complete
  # none icon
  typeset -g POWERLEVEL9K_MODE=powerline

  # GIT BRANCH ICON ============================================================
  # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon.
  # full icon
  # typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 '
  # none icon
  typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=

  # Untracked files icon. It's really a question mark, your font isn't broken.
  # Change the value of this parameter to show a different icon.
  typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?'

zshrc 파일 수정

vscode ssh 등으로 접속 시도 시 zsh 쉘을 새로 열때마다 .zshrc 를 자동으로 실행시키지 않아
.oh-my-zsh, p10k테마 등 여러 설정이 적용되지 않는 문제가 발생하였다.

/etc/zshrc 또는 /etc/zsh/zshrc 와 같이 /etc 경로에 zsh 실행 시 동작하는 zshrc 파일이 존재한다.

해당 파일을 찾아 맨 밑 줄에 아래 코드를 추가한다.

1
2
3
4
5
6
# Useful support for interacting with Terminal.app or other terminal programs
if [ -r "/etc/zshrc_$TERM_PROGRAM" ]; then
	. "/etc/zshrc_$TERM_PROGRAM"
else
	. "/etc/zshrc_default"
fi

만약 경로가 /etc/zshrc 가 아니라 /etc/zsh/zshrc 인 경우에는 아래 vi 명령어로 경로를 수정한다.

1
:%s#/etc/zshrc_#/etc/zsh/zshrc_#g

이후 /etc/zshrc_default 파일을 만들어 (경로가 /etc/zsh/zshrc인 경우에는 /etc/zsh/zshrc_default) 파일을 만들면 되시겠다.

/etc/zshrc_default 파일에는 아래 코드를 추가한다.

1
. $HOME/.zshrc
This post is licensed under CC BY 4.0 by the author.