1. 라이브러리 개요 및 핵심 모듈 위치
TokyoNight 는 Lua 기반으로 작성된 Neovim 에디터용 다크 모드로, LSP(언어 서버 프로토콜) 와 Tree-sitter 파싱 등을 고려하여 최적화되었습니다. 프로젝트의 주요 로직은 lua 디렉토리 내에 배치되어 있으며, 이를 통해 사용자가 테마를 효율적으로 로드하고 변형할 수 있습니다.
주요 파일 체계
- lua/tokyonight/: 테마 엔진이 작동하는 핵심 영역입니다.
- extra/: Kitty 나 Alacritty 같은 외부 터미널을 위한 색상 템플릿이 저장됩니다.
- config.lua: 기본값 관리 및 사용자 입력 설정 인터페이스 역할을 수행합니다.
- highlights.lua: 실제 화면에 적용되는 문법 강조 규칙을 정의합니다.
- theme.lua와 colors.lua: 색상 팔레트와 테마 스타일 (day, night, storm 등) 을 생성하는 로직을 담당합니다.
2. 초기화 과정 이해하기
테마가 활성화되려면 메인 진입점인 init.lua 파일을 통해 모듈이 로드되어야 합니다. 이 단계에서 사용자는 필요한 옵션을 주입할 수 있으며, 기본적으로는 tokyonight.setup() 함수 호출로 처리됩니다. 이 함수는 내부적으로 스타일을 결정하고 색상 변수들을 전역 상태로 등록하게 됩니다.
-- 모듈 불러오기
local theme_loader = require("tokyonight")
-- 간단한 초기화 실행
theme_loader.setup()
3. 커스터마이징 전략 및 설정 파일 활용
기본 제공된 시각적 요소를 수정하거나 특정 플러그인에 대한 호환성을 높이기 위해서는 설정 모듈(config.lua)에 정의된 콜백 함수를 사용할 수 있습니다. 주로 on_colors와 on_highlights 두 가지 후크를 통해 세부적인 조정이 가능합니다.
설정 파라미터 변경 예시
다음 코드는 테마의 스타일을 night로 고정하고, 색상 팔레트의 일부 값을 덮어쓰는 방법입니다. 또한 Telescope 플러그인과 같은 외부 도구에도 테마 색상을 일관성 있게 적용하기 위한 하이라이트 그룹을 재정의합니다.
require("tokyonight").setup({
style = "midnight",
-- 색상 팔레트 직접 수정 (호스트 변수명 변경)
on_colors = function(scheme)
scheme.warning_signal = scheme.amber
scheme.critical_alert = "#ff3333"
end,
-- 하이라이트 그룹 오버라이드
on_highlights = function(groups, palette)
local custom_prompt_bg = "#2f334d"
-- 검색 관련 창 색상 맞춤 설정
groups.SearchInput = { bg = palette.dimmed_background, fg = palette.soft_text }
groups.ResultPane = { bg = custom_prompt_bg }
groups.PreviewArea = { bg = palette.main_bg, fg = palette.light_text }
-- 제목바 및 구분선 처리
groups.WindowHeader = { bg = custom_prompt_bg, fg = palette.accent_blue }
groups.DividerLine = { bg = custom_prompt_bg }
end
})
이러한 접근 방식을 활용하면 원본 테마의 무결성을 해치지 않으면서도 개인의 작업 환경에 맞춰 UI 를 세밀하게 조정할 수 있습니다. 각 콜백 함수 내에서는 현재 로드된 색상 데이터와 하이라이트 객체를 인자로 받아 실시간으로 계산된 스타일을 반환합니다.