catsridingCATSRIDING|OCEANWAVES
Developer Tools

모노 폰트에 Nerd Fonts 적용하기

jynn@catsriding.com
Nov 02, 2023
Published byJynn
999
모노 폰트에 Nerd Fonts 적용하기

Enable Nerd Fonts with Nerd Font Patcher

터미널에서 Powerlevel10k 또는 Oh My Zsh와 같은 도구를 사용할 때, 아이콘이나 Powerline 심볼이 제대로 표시되지 않는 경우가 있습니다. 이러한 문제를 해결하고 다양한 아이콘을 활용하기 위해서는 Nerd Fonts의 사용을 권장합니다.

nerd-fonts-patcher-1.png

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 라이브러리도 필요합니다.

  1. macOS에는 기본적으로 Python이 설치되어 있습니다. 설치 여부를 확인하려면 아래 명령어를 실행합니다. 버전 정보가 출력되지 않으면 Python 설치가 필요합니다:
Terminal
# Python 버전 확인
$ python --version
Python 3.12.4
  1. Python이 설치되어 있지 않다면, Homebrew를 사용하여 쉽게 설치할 수 있습니다:
Terminal
# Python 설치
$ brew install python@3.12
  1. 설치된 Python 3.x 버전을 기본 python 명령어로 사용할 수 있도록 설정합니다. Python 3.x는 기본적으로 python3 명령어로 실행되지만, 일부 스크립트나 도구는 여전히 python이라는 명령어를 기대할 수 있습니다. 이를 해결하기 위해 심볼릭 링크를 생성하여 python3 명령어를 python 명령어로 사용할 수 있도록 설정할 수 있습니다:
Terminal
# Python 3.x를 기본 `python` 명령어로 사용하기 위한 심볼릭 링크 생성
$ ln -s "$(brew --prefix)/bin/python3" /usr/local/bin/python
  1. 다음은 Nerd Fonts Patcher를 사용하기 위해 Font Forge 라이브러리를 설치해야 합니다. Homebrew를 사용하여 Font Forge를 설치할 수 있습니다:
Terminal
# Font Forge 설치
$ brew install fontforge
  1. Nerd Fonts 공식 웹사이트에서 Nerd Fonts Patcher를 다운로드합니다.

nerd-fonts-patcher-2.png

  1. 다운로드한 파일의 압축을 풀고, 터미널에서 해당 폴더로 이동합니다:
Terminal
# 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/
  1. 아래 명령어를 통해 Nerd Font Patcher의 실행 가능 여부 및 다양한 옵션을 확인할 수 있습니다:
Terminal
# 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 아이콘을 적용해보겠습니다. 필요한 옵션을 선택하여 명령어를 작성한 후, 아래와 같이 실행합니다:

Terminal
./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 옵션으로 지정한 디렉토리에서 확인할 수 있습니다. 해당 디렉토리로 이동하여 성공적으로 패치된 폰트들을 확인할 수 있습니다.

Terminal
$ 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에 설치하여 다양한 애플리케이션에서 활용할 수 있습니다. 새로운 패치된 폰트를 설치하기 전에 기존에 설치된 폰트를 삭제하여 폰트 충돌을 방지하는 것이 중요합니다. 이렇게 하면 시스템이 새로운 폰트를 원활하게 인식하고 사용할 수 있습니다.

nerd-fonts-patcher_03.png

폰트 설치를 완료하고 터미널에서 적용해보면, 아이콘들이 올바르게 표시되는 것을 확인할 수 있습니다.

nerd-fonts-patcher_04.png

현재 블로그에도 이렇게 패치된 폰트를 적용하여  󰨇   󰬷   󰸏   아이콘들이 정상적으로 표시되도록 설정해두었습니다. ☺️

Terminal
$ 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