Software Engineer's Blog

Obsidian Nord: wider content and fonts for Korean notes

Obsidian Nord: wider content and fonts for Korean notes

I take notes in Obsidian with Korean and English mixed together, and two things bugged me.

The content column is too narrow. I have a wide monitor but the text stays in a thin strip down the middle. And the default fonts aren’t great for Korean. Code blocks and plain-text tables stop lining up once Korean shows up.

I run the Obsidian Nord theme on Linux. I fixed both with a CSS snippet and a few fonts, without touching the theme. Here’s what I did.

Widening the content

Obsidian turns on “Readable line length” by default. Long lines are tiring, so it caps the width. Good for reading, cramped on a wide screen.

The quick fix is to turn it off: Settings → Editor → Readable line length. The text fills the window. But on a wide screen the lines get too long, which is its own problem.

I’d rather keep readable line length on and just set the width. Use a CSS snippet.

  1. Settings → Appearance → CSS snippets, click the folder icon to open .obsidian/snippets/.
  2. Make a file wide-content.css:
body {
  --file-line-width: 1000px;  /* 800–1200px works well */
}
  1. Back in Obsidian, refresh the snippet list and enable it.

The default is 700px. I tried a few values and settled on 1000px.

(Some themes like Minimal give you a slider through Style Settings. Nord doesn’t, so the snippet is the way.)

Fonts

By default Obsidian uses system fonts:

  • Body: Inter
  • Code: system monospace, usually DejaVu Sans Mono on Linux

The issue is Korean. The default monospace isn’t fixed-width for Korean, so Korean inside a code block or a plain-text table breaks the alignment. I set the fonts explicitly:

UseFont
BodyPretendard
Code (Latin)JetBrains Mono
Code (Korean)D2Coding

Pretendard reads well in both scripts. JetBrains Mono keeps l/1/I and 0/O distinct, but it has no Korean glyphs, so Korean set to it falls back to whatever font your system picks. D2Coding is fixed-width for Korean.

You don’t have to pick one. Obsidian’s font setting takes more than one font as a fallback chain. Set the monospace font to JetBrains Mono first, D2Coding second: Latin and symbols use JetBrains Mono, and Korean, which JetBrains Mono lacks, falls back to D2Coding. Code blocks and plain-text tables that mix both stay aligned. All three fonts are free.

Installing on Linux

Download from the GitHub releases, drop into ~/.local/share/fonts/, refresh the cache. Pretendard:

mkdir -p ~/.local/share/fonts/Pretendard
cd /tmp
curl -sL -o pretendard.zip \
  "$(curl -sL https://api.github.com/repos/orioncactus/pretendard/releases/latest \
     | grep -oE 'https[^\"]*Pretendard-[0-9.]+\.zip' | head -1)"
unzip -o -j pretendard.zip 'public/static/*.otf' -d ~/.local/share/fonts/Pretendard/
fc-cache -f ~/.local/share/fonts
fc-list | grep -i pretendard

Same for the others:

  • JetBrains Mono: fonts/ttf/*.ttf from JetBrains/JetBrainsMono
  • D2Coding: *.ttf / *.ttc from naver/d2codingfont

Delete the zip when you’re done.

Setting them in Obsidian

Settings → Appearance → Font. Set the body font to Pretendard, and add the monospace fonts in order: JetBrains Mono, then D2Coding. Obsidian stores this in .obsidian/appearance.json, roughly like:

{
  "textFontFamily": "Pretendard",
  "monospaceFontFamily": "JetBrains Mono, D2Coding"
}

If nothing changes

Edited the config from outside Obsidian? A running instance may not notice. Run Ctrl/Cmd + P → Reload app without saving, or restart. If it still looks wrong, check Settings → Appearance to see if the values took.

Summary

  • Width: --file-line-width: 1000px in a snippet, readable line length left on
  • Body: Pretendard
  • Monospace: JetBrains Mono, with D2Coding as a fallback for Korean

Nord stays as-is. A snippet and a few fonts, and the mixed notes are much easier to read.