이것 때문에 개뻘짓을 했었다. 그건 그대로 의미있는 경험으로 냅두고..
여기는 간단히 설치법만 정리한다. 물론, 공식 문서를 따랐고, zsh 를 기준으로 했다. (그래봐야, .zshrc 냐 .bashrc 냐 차이만 있을 뿐.)
전제조건
이걸 제대로 사용하려면, 터미널에 Nord 테마가 적용돼 있어야 한다. 그렇지 않다면 색상이 제대로 표시되지 않을 수도 있다고 한다.
또, ‘설정’이란게 결국 환경변수 LS_COLORS
에 값을 할당해줄 뿐이므로, 이 변수에 영향을 받는 프로그램에만 색상이 적용된다. ls, tree 정도에 효과가 있고, find 대체재인 fd 에도 쓸 수 있다.
설치 및 설정
먼저, 색상 파일을 내려받는다.
$ wget -O ~/.dir_colors https://github.com/nordtheme/dircolors/raw/develop/src/dir_colors
사용자 디렉토리($HOME)에 설치하라고 돼 있지만, 다른 곳으로 바꿔도 된다.
이제, dircolors
로 이 파일을 LS_COLORS
에 할당해준다. .zshrc
에 다음 행을 추가해주면 원하는 결과를 얻을 수 있다.
test -r "$HOME/.dir_colors" && eval $(dircolors ~/.dir_colors)
여기서 단편 지식 몇가지.
첫째: 따옴표 안에 위치한 물결표??
test -r “~/.dir_colors” 이렇게 넣으면 제대로 작동하지 않는다. zsh 는 물론 bash 에서도, 따옴표(겹/홑 모두) 안에 있는 Tilde 문자(∼)는 $HOME 으로 인식하지 못한다. 공식 문서엔 저렇게 돼 있어서 개뻘짓을 했었다.
따라서, 위에 쓴 대로 $HOME 변수를 쓰든가, 아니면 따옴표를 없애면 된다.
두번째, dircolors 명령, 그리고 eval.
dircolors 명령은 LS_COLORS 환경변수를 설정해주진 못한다. 설정할 수 있는 문자열을 출력해줄 뿐이다.
$ dircolors ~/.dir_colors LS_COLORS='no=00:rs=0:fi=00:di=01;34:ln=36:mh=04;36:pi=04;01;36:so=04;33:do=04;01;36:bd=01;33:cd=33:or=31:mi=01;37;41:ex=01;36:su=01;04;37:sg=01;04;37:ca=01;37:tw=01;37;44:ow=01;04;34:st=04;37;44:*.7z=01;32:*.ace=01;32:*.alz=01;32:*.arc=01;32:*.arj=01;32:*.bz=01;32:*.bz2=01;32:*.cab=01;32:*.cpio=01;32:*.deb=01;32:*.dz=01;32:*.ear=01;32:*.gz=01;32:*.jar=01;32:*.lha=01;32:*.lrz=01;32:*.lz=01;32:*.lz4=01;32:*.lzh=01;32:*.lzma=01;32:*.lzo=01;32:*.rar=01;32:*.rpm=01;32:*.rz=01;32:*.sar=01;32:*.t7z=01;32:*.tar=01;32:*.taz=01;32:*.tbz=01;32:*.tbz2=01;32:*.tgz=01;32:*.tlz=01;32:*.txz=01;32:*.tz=01;32:*.tzo=01;32:*.tzst=01;32:*.war=01;32:*.xz=01;32:*.z=01;32:*.Z=01;32:*.zip=01;32:*.zoo=01;32:*.zst=01;32:*.aac=32:*.au=32:*.flac=32:*.m4a=32:*.mid=32:*.midi=32:*.mka=32:*.mp3=32:*.mpa=32:*.mpeg=32:*.mpg=32:*.ogg=32:*.opus=32:*.ra=32:*.wav=32:*.3des=01;35:*.aes=01;35:*.gpg=01;35:*.pgp=01;35:*.doc=32:*.docx=32:*.dot=32:*.odg=32:*.odp=32:*.ods=32:*.odt=32:*.otg=32:*.otp=32:*.ots=32:*.ott=32:*.pdf=32:*.ppt=32:*.pptx=32:*.xls=32:*.xlsx=32:*.app=01;36:*.bat=01;36:*.btm=01;36:*.cmd=01;36:*.com=01;36:*.exe=01;36:*.reg=01;36:*~=02;37:*.bak=02;37:*.BAK=02;37:*.log=02;37:*.log=02;37:*.old=02;37:*.OLD=02;37:*.orig=02;37:*.ORIG=02;37:*.swo=02;37:*.swp=02;37:*.bmp=32:*.cgm=32:*.dl=32:*.dvi=32:*.emf=32:*.eps=32:*.gif=32:*.jpeg=32:*.jpg=32:*.JPG=32:*.mng=32:*.pbm=32:*.pcx=32:*.pgm=32:*.png=32:*.PNG=32:*.ppm=32:*.pps=32:*.ppsx=32:*.ps=32:*.svg=32:*.svgz=32:*.tga=32:*.tif=32:*.tiff=32:*.xbm=32:*.xcf=32:*.xpm=32:*.xwd=32:*.xwd=32:*.yuv=32:*.anx=32:*.asf=32:*.avi=32:*.axv=32:*.flc=32:*.fli=32:*.flv=32:*.gl=32:*.m2v=32:*.m4v=32:*.mkv=32:*.mov=32:*.MOV=32:*.mp4=32:*.mpeg=32:*.mpg=32:*.nuv=32:*.ogm=32:*.ogv=32:*.ogx=32:*.qt=32:*.rm=32:*.rmvb=32:*.swf=32:*.vob=32:*.webm=32:*.wmv=32:'; export LS_COLORS
명령의 결과는, LS_COLORS=’…..’ 와 export LS_COLORS 를 출력해줄 뿐이다. 그냥 단순 출력일 뿐, 이게 명령으로 인식되지는 않는다.
그렇다면 이 문자열을 실제 명령처럼 바꿔 주려면?eval
이 그 역할을 해준다.
eval 은 stdin 을 받아, 행별로, 터미널에 실제로 입력하고 엔터를 친 듯한 효과를 내준다.
즉, 어떤 프로그램의 결과가 ‘문자열’ 이고, 그 문자열이 터미널에서 입력할 수 있는 ‘명령어’ 형식일 때, eval 로 써서 문자열을 명령행으로 바꿔줄 수 있다.
ls 설정
tree
나, fd(Ubuntu:fd-find, ArchLinux: fd, macOS:fd(Homebrew))
는 그냥 색깔이 적용되어 결과값이 출력된다. 그러나 ls 는 옵션을 줘야 한다.
ls --color=auto
auto 또는 always.
매번 붙여줄 수는 없으므로, alias 를 만들면 편하다.