모노 폰트에 Nerd Fonts 적용하기
Enable Nerd Fonts with Nerd Font Patcher
터미널에서 Powerlevel10k 또는 Oh My Zsh와 같은 도구를 사용할 때, 아이콘이나 Powerline 심볼이 제대로 표시되지 않는 경우가 있습니다. 이러한 문제를 해결하고 다양한 아이콘을 활용하기 위해서는 Nerd Fonts의 사용을 권장합니다.
Nerd Fonts 공식 웹사이트에서는 이미 패치된 다양한 폰트를 제공하고 있습니다. 하지만, 만약 원하는 폰트가 목록에 없다면, Nerd Fonts Patcher를 사용해 직접 폰트를 패치할 수 있습니다.
Nerd Font Patcher
Nerd Fonts Patcher는 기존 폰트에 프로그래밍 및 개발 관련 글리프를 추가하여 터미널과 개발 환경에서 필요한 아이콘을 쉽게 사용할 수 있도록 해주는 도구입니다. Powerlevel10k나 Oh My Zsh와 같은 도구와 함께 사용할 때, 폰트에 Nerd Fonts를 적용하면 Powerline 심볼, Devicons 아이콘 등 다양한 아이콘을 제대로 표시할 수 있습니다. 이 도구는 특정 폰트를 원하는 대로 패치하여 사용할 수 있는 강력한 기능을 제공합니다.
Setting Up Nerd Font Patcher
Nerd Fonts Patcher를 사용하려면 macOS에 Python이 설치되어 있어야 하며, Font Forge 라이브러리도 필요합니다.
- macOS에는 기본적으로 Python이 설치되어 있습니다. 설치 여부를 확인하려면 아래 명령어를 실행합니다. 버전 정보가 출력되지 않으면 Python 설치가 필요합니다:
# Python 버전 확인
$ python --version
Python 3.12.4
- Python이 설치되어 있지 않다면, Homebrew를 사용하여 쉽게 설치할 수 있습니다:
# Python 설치
$ brew install python@3.12
- 설치된 Python 3.x 버전을 기본
python
명령어로 사용할 수 있도록 설정합니다. Python 3.x는 기본적으로python3
명령어로 실행되지만, 일부 스크립트나 도구는 여전히python
이라는 명령어를 기대할 수 있습니다. 이를 해결하기 위해 심볼릭 링크를 생성하여python3
명령어를python
명령어로 사용할 수 있도록 설정할 수 있습니다:
# Python 3.x를 기본 `python` 명령어로 사용하기 위한 심볼릭 링크 생성
$ ln -s "$(brew --prefix)/bin/python3" /usr/local/bin/python
- 다음은 Nerd Fonts Patcher를 사용하기 위해 Font Forge 라이브러리를 설치해야 합니다. Homebrew를 사용하여 Font Forge를 설치할 수 있습니다:
# Font Forge 설치
$ brew install fontforge
- Nerd Fonts 공식 웹사이트에서 Nerd Fonts Patcher를 다운로드합니다.
- 다운로드한 파일의 압축을 풀고, 터미널에서 해당 폴더로 이동합니다:
# FontPatcher 압축 해제
$ unzip ~/Downloads/FontPatcher.zip -d ~/Downloads/FontPatcher/
# FontPatcher 압축 해제 디렉토리 이동
$ cd ~/Downloads/FontPatcher
# FontPatcher 파일 확인
$ exa -alh
Permissions Size User Date Modified Name
drwxr-xr-x@ - catsriding 10 Aug 13:27 bin/
.rwxr-xr-x@ 117k catsriding 12 Apr 23:28 font-patcher*
.rw-r--r--@ 422 catsriding 12 Apr 23:28 readme.md
drwxr-xr-x@ - catsriding 10 Aug 13:27 src/
- 아래 명령어를 통해 Nerd Font Patcher의 실행 가능 여부 및 다양한 옵션을 확인할 수 있습니다:
# Font Patcher CLI 출력
$ ./font-patcher -h
Nerd Fonts Patcher v3.0.2 (4.4.0) (ff 20230101)
usage: font-patcher [-h] [-v] [-s] [-l] [-q] [-c] [--careful] [--removeligs] [--postprocess [POSTPROCESS]] [--configfile [CONFIGFILE]] [--custom [CUSTOM]]
[-ext [EXTENSION]] [-out [OUTPUTDIR]] [--glyphdir [GLYPHDIR]] [--makegroups [{-1,0,1,2,3,4,5,6}]] [--variable-width-glyphs]
[--has-no-italic] [--progressbars | --no-progressbars] [--debug [{0,1,2,3}]] [--dry] [--xavgcharwidth [XAVGWIDTH]] [--fontawesome]
[--fontawesomeextension] [--fontlogos] [--octicons] [--codicons] [--powersymbols] [--pomicons] [--powerline] [--powerlineextra]
[--material] [--weather]
font
Nerd Fonts Font Patcher: patches a given font with programming and development related glyphs
* Website: https://www.nerdfonts.com
* Version: 3.0.2
* Development Website: https://github.com/ryanoasis/nerd-fonts
* Changelog: https://github.com/ryanoasis/nerd-fonts/blob/-/changelog.md
positional arguments:
font The path to the font to patch (e.g., Inconsolata.otf)
options:
-h, --help show this help message and exit
-v, --version show program's version number and exit
-s, --mono, --use-single-width-glyphs
Whether to generate the glyphs as single-width not double-width (default is double-width)
-l, --adjust-line-height
Whether to adjust line heights (attempt to center powerline separators more evenly)
-q, --quiet, --shutup
Do not generate verbose output
-c, --complete Add all available Glyphs
--careful Do not overwrite existing glyphs if detected
--removeligs, --removeligatures
Removes ligatures specificed in JSON configuration file
--postprocess [POSTPROCESS]
Specify a Script for Post Processing
--configfile [CONFIGFILE]
Specify a file path for JSON configuration file (see sample: src/config.sample.json)
--custom [CUSTOM] Specify a custom symbol font, all glyphs will be copied; absolute path suggested
-ext [EXTENSION], --extension [EXTENSION]
Change font file type to create (e.g., ttf, otf)
-out [OUTPUTDIR], --outputdir [OUTPUTDIR]
The directory to output the patched font file to
--glyphdir [GLYPHDIR]
Path to glyphs to be used for patching
--makegroups [{-1,0,1,2,3,4,5,6}]
Use alternative method to name patched fonts (recommended)
--variable-width-glyphs
Do not adjust advance width (no "overhang")
--has-no-italic Font family does not have Italic (but Oblique)
--progressbars Show percentage completion progress bars per Glyph Set (default)
--no-progressbars Don't show percentage completion progress bars per Glyph Set
--debug [{0,1,2,3}] Verbose mode (optional: 1=just to file; 2*=just to terminal; 3=display and file)
--dry Do neither patch nor store the font, to check naming
--xavgcharwidth [XAVGWIDTH]
Adjust xAvgCharWidth (optional: concrete value)
Symbol Fonts:
--fontawesome Add Font Awesome Glyphs (http://fontawesome.io/)
--fontawesomeextension
Add Font Awesome Extension Glyphs (https://andrelzgava.github.io/font-awesome-extension/)
--fontlogos, --fontlinux
Add Font Logos Glyphs (https://github.com/Lukas-W/font-logos)
--octicons Add Octicons Glyphs (https://octicons.github.com)
--codicons Add Codicons Glyphs (https://github.com/microsoft/vscode-codicons)
--powersymbols Add IEC Power Symbols (https://unicodepowersymbol.com/)
--pomicons Add Pomicon Glyphs (https://github.com/gabrielelana/pomicons)
--powerline Add Powerline Glyphs
--powerlineextra Add Powerline Glyphs (https://github.com/ryanoasis/powerline-extra-symbols)
--material, --materialdesignicons, --mdi
Add Material Design Icons (https://github.com/templarian/MaterialDesign)
--weather, --weathericons
Add Weather Icons (https://github.com/erikflowers/weather-icons)
Patching Nerd Fonts
이제, 제가 선호하는 MonoLisa 폰트에 Nerd Fonts 아이콘을 적용해보겠습니다. 필요한 옵션을 선택하여 명령어를 작성한 후, 아래와 같이 실행합니다:
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-Black' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-Black.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-BlackItalic' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-BlackItalic.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-Bold' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-Bold.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-BoldItalic' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-BoldItalic.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-ExtraBold' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-ExtraBold.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-ExtraBoldItalic' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-ExtraBoldItalic.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-ExtraLight' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-ExtraLight.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-ExtraLightItalic' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-ExtraLightItalic.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-Light' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-Light.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-LightItalic' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-LightItalic.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-Medium' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-Medium.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-MediumItalic' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-MediumItalic.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-Regular' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-Regular.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-RegularItalic' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-RegularItalic.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-SemiBold' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-SemiBold.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-SemiBoldItalic' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-SemiBoldItalic.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-Thin' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-Thin.ttf &
./font-patcher -c --makegroups 1 --name 'MonoLisaNerds-ThinItalic' -out ~/Downloads/MonoLisaNerds ~/Downloads/MonoLisa/MonoLisa-ThinItalic.ttf
위 명령어와 옵션에 대한 설명은 다음과 같습니다:
./font-patcher
: Nerd Fonts Patcher 스크립트를 실행합니다. 현재 작업 디렉토리는font-patcher
스크립트가 위치한 곳입니다. 다른 위치에서 실행하는 경우, 경로를 명시해야 합니다.-c
: 이 옵션은 폰트에 모든 가능한 글리프를 추가하여 패치합니다.--makegroups [-1~6]
: 패치된 폰트 파일의 Font Family와 이름을 그룹화 합니다. 기본값은1
이며,--name
속성이 우선 적용됩니다.-1
: 폰트 이름과 버전을 그대로 유지합니다. 폰트 패치 후에도 원래의 폰트 이름과 버전 정보를 유지하고자 할 때 사용합니다.0
: 폰트 이름 변경 기능을 비활성화하고, 이전 네이밍 방식을 사용합니다. 이 모드는 패치 이전의 이름을 최대한 유지하면서도 약간의 수정이 있을 수 있습니다.1
: 원래 폰트 이름에 "Nerd Font"를 추가합니다. 스타일 정보는 그대로 유지됩니다.2
: 폰트 이름과 스타일 정보가 축약됩니다.3
: 매우 짧고 간결한 폰트 이름이 생성되며, 시스템 내에서 이름이 길어지는 문제를 방지할 수 있습니다.4
: 원래 폰트 이름에 "NF"를 추가하고, 스타일 정보는 원래대로 유지됩니다.5
: 원래 폰트 이름에 "NF"를 추가하고, 축약된 스타일 정보를 포함합니다.6
: 폰트 이름과 스타일 정보를 모두 축약하여, 가장 간단하고 짧은 형태의 폰트 이름을 제공합니다.
--name [STRING]
: 이 옵션을 사용하여 폰트의 이름을 지정할 수 있습니다.폰트명-스타일
과 같은 패턴을 통해 스타일 정보를 명확히 나타낼 수 있으며, 이 이름은 폰트 패밀리에도 반영됩니다. 이 옵션을 사용하면,--makegroups
옵션에서 설정된 네이밍 규칙을 덮어쓰게 됩니다. 이를 통해 사용자 정의 이름을 적용할 수 있으며, 폰트 관리와 구분이 용이해집니다.-out [OUTPUTDIR]
: 패치된 폰트 파일이 저장될 디렉토리를 지정합니다. 여기서는~/Downloads/MonoLized
로 지정하였습니다.- 명령어의 마지막 인자는 Nerd Fonts를 적용할 원본 폰트의 위치를 지정합니다.
패치가 완료된 폰트는 -out
옵션으로 지정한 디렉토리에서 확인할 수 있습니다. 해당 디렉토리로 이동하여 성공적으로 패치된 폰트들을 확인할 수 있습니다.
$ cd ~/Downloads/MonoLisaNerds
$ exa -alhF
Permissions Size User Date Modified Name
.rw-r--r--@ 6.1k catsriding 10 Aug 15:21 .DS_Store
.rw-r--r--@ 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-Black.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-BlackItalic.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-Bold.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-BoldItalic.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-ExtraBold.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-ExtraBoldItalic.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-ExtraLight.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-ExtraLightItalic.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-Italic.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-Light.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-LightItalic.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-Medium.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-MediumItalic.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-Regular.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-SemiBold.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-SemiBoldItalic.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-Thin.ttf
.rw-r--r-- 2.2M catsriding 10 Aug 15:22 MonoLisaNerds-ThinItalic.ttf
이렇게 패치된 폰트는 macOS에 설치하여 다양한 애플리케이션에서 활용할 수 있습니다. 새로운 패치된 폰트를 설치하기 전에 기존에 설치된 폰트를 삭제하여 폰트 충돌을 방지하는 것이 중요합니다. 이렇게 하면 시스템이 새로운 폰트를 원활하게 인식하고 사용할 수 있습니다.
폰트 설치를 완료하고 터미널에서 적용해보면, 아이콘들이 올바르게 표시되는 것을 확인할 수 있습니다.
현재 블로그에도 이렇게 패치된 폰트를 적용하여 아이콘들이 정상적으로 표시되도록 설정해두었습니다. ☺️
$ eza -alhF --icons
Permissions Size User Date Modified Name
.rw-r--r--@ 8.2k catsriding 30 Jan 13:08 .DS_Store
drwxr-xr-x@ - catsriding 1 May 11:31 .git/
drwxr-xr-x - catsriding 25 Jan 13:12 .github/
.rw-r--r-- 482 catsriding 4 Dec 2023 .gitignore
drwxr-xr-x@ - catsriding 28 Apr 21:55 .gradle/
drwxr-xr-x@ - catsriding 1 May 11:15 .idea/
drwxr-xr-x@ - catsriding 8 Oct 2023 .jpb/
drwxr-xr-x - catsriding 28 Apr 22:49 build/
.rw-r--r-- 3.3k catsriding 6 Mar 02:18 build.gradle
.rw-r--r-- 416 catsriding 29 Apr 23:45 Dockerfile
drwxr-xr-x@ - catsriding 7 Oct 2023 gradle/
.rwxr-xr-x@ 8.5k catsriding 7 Oct 2023 gradlew*
.rw-r--r--@ 2.9k catsriding 7 Oct 2023 gradlew.bat
.rw-r--r--@ 0 catsriding 30 Jan 13:08 Icon\r
drwxr-xr-x - catsriding 1 May 01:22 logs/
.rw-r--r-- 49 catsriding 6 Mar 02:20 README.md
.rw-r--r-- 34 catsriding 2 Feb 20:21 settings.gradle
drwxr-xr-x@ - catsriding 19 Feb 13:14 src/
- macOS
- Shell