Skip to content
abereghiciPublic

About

Bereghici Dark and Light for terminals, editors, command-line tools and apps, generated from the Bereghici Design System tokens.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Bereghici Themes

Bereghici Dark and Light for terminals, editors, command-line tools and apps, generated from the Bereghici Design System tokens.

CI MIT license

Install

git clone https://github.com/abereghici/themes ~/.local/share/bereghici
~/.local/share/bereghici/install.sh

install.sh is for macOS: it reads the appearance with defaults and puts the font in ~/Library/Fonts. The theme files themselves work on any system, from each port's themes/. Each port's README lists what install.sh does for it and what to add to the tool's config.

install.sh:

  • links each theme where its tool reads it, so a git pull updates those tools without installing again. VS Code and the font keep a copy: run install.sh again after pulling.
  • replaces only its own links and broken ones, never a file or link of yours, and replaces the font file in ~/Library/Fonts when it differs from the repository's.
  • reports a step that fails, installs the rest, and then exits non-zero.
  • links a clone kept elsewhere at ~/.local/share/bereghici, the one path every port's usage names.

pnpm test runs it in an empty home folder to check each of these (outputs.test.ts).

Claude Code and Codex take one theme rather than one per appearance: run install.sh sync dark or install.sh sync light from whatever switches the appearance.

To uninstall, delete the links install.sh made (each port's README lists them), ~/Library/Fonts/BereghiciSymbols.otf, the VS Code extension (code --uninstall-extension abereghici.bereghici-theme) and the clone.

Flavors

Each port ships the flavors its tool can use, most as themes/bereghici-<flavor>.<ext> (each port's README lists its files):

  • dark and light: Bereghici Dark and Light in their own colors.
  • terminal: each role as the nearest of the 16 ANSI colors a Bereghici terminal theme defines (Ghostty's, for one). In a terminal running one, a tool in this flavor switches with the terminal, live, even when it has no light/dark setting of its own, such as fzf, Starship, eza or zsh. Its surface and surfaceRaised are the terminal's own background.

Transparency

The terminal ports leave the background to the terminal, so a translucent one (Ghostty's background-opacity) shows through. pnpm test checks the ones that would otherwise cover the screen (outputs.test.ts, editors.test.ts):

  • tmux draws its status bar, popups and menus with bg=default.
  • herdr's sidebar uses sidebar_bg = "reset".
  • fzf's terminal flavor sets bg:-1 and gutter:-1; its dark and light flavors paint Bereghici's background, for a terminal in other colors.
  • Neovim's setup({ transparent = true }) clears the editor, floats, sign column, status and tab lines, folds, inlay hints and diagnostics. The completion menu stays solid, to read over code.

Desktop apps (VS Code, Chrome, Obsidian, Raycast) draw their own windows.

Palette

The Bereghici Dark and Light swatches

Every value comes from @abereghici/tokens: the design system's primitives and semantic colors, mapped to these roles in terminal.tokens.json. The roles take the design system's names: surfaces, text, the line highlight, selection and border, accent, and the six ANSI hues with their bright pairs. The Terminal column is the ANSI color the terminal flavor uses: the same color for the hues, and the nearest one for the others. Generated by pnpm build:

Role Dark Light Terminal
surface #12150f #f3f5ee background
surfaceRaised #181b14 #eaebe3 background
surfaceNested #1e221a #e1e3dc ANSI 0
textSubtlest #858a81 #686a64 ANSI 8
textSubtle #a2a69d #535750 ANSI 7
text #eeefe9 #2e3229 ANSI 15
lineHighlight #1e221a #eaebe3 ANSI 0
selection #4b4f45 #c1c3bc ANSI 0
border #696d63 #a3a49e ANSI 8
accent #eceac9 #263316 ANSI 2
red #e99989 #a84837 ANSI 1
yellow #fabc86 #c3720f ANSI 3
green #a6d1b0 #1f7c44 ANSI 2
cyan #87c8cb #007a80 ANSI 6
blue #97bfe6 #2f6da4 ANSI 4
magenta #d4acca #8b537f ANSI 5
redBright #ffbfb2 #833426 ANSI 9
yellowBright #ffd8ac #925613 ANSI 11
greenBright #c9e7d0 #155f32 ANSI 10
cyanBright #b3e2e4 #005e63 ANSI 14
blueBright #bedbf8 #20537f ANSI 12
magentaBright #ebcde3 #6b3e62 ANSI 13

Contrast

pnpm test holds every pair below to its minimum, in both variants, with the WCAG 2.2 contrast ratio (Color.js WCAG21, the formula 2.2 keeps). 4.5 is AA for text (SC 1.4.3) and 3 is AA for large text and interface marks (SC 1.4.11).

Yellow, and the hues on panels and the selection, sit below AA by design, as in Catppuccin Latte, whose yellow is 2.31:1 on its base: a yellow dark enough for 4.5 on a light background reads as brown, and six hues can't stay apart at 4.5 on every background. Those minimums are lower in the tables, not hidden. WCAG 3 doesn't settle a successor yet: its working draft says its contrast algorithm "is yet to be determined", so these are WCAG 2 ratios. Generated by pnpm build from the same pairs the tests check:

Text on the background and panels

Foreground Background Minimum Dark Light
text surface 4.50 15.93 11.91
text surfaceRaised 4.50 15.06 10.90
textSubtle surface 4.50 7.44 6.71
textSubtle surfaceRaised 4.50 7.03 6.14
textSubtlest surface 4.50 5.22 4.98
textSubtlest surfaceRaised 4.50 4.93 4.56
accent surface 4.50 15.07 12.19
accent surfaceRaised 4.50 14.25 11.16
text surfaceNested 4.50 13.98 10.11
accent surfaceNested 4.50 13.23 10.35

Syntax and ANSI colors on the background

Foreground Background Minimum Dark Light
red surface 4.50 8.23 5.24
yellow surface 3.00 11.06 3.33
green surface 4.50 10.85 4.75
cyan surface 4.50 9.79 4.67
blue surface 4.50 9.57 4.97
magenta surface 4.50 9.26 5.25
redBright surface 4.50 11.71 7.69
yellowBright surface 4.50 13.75 5.36
greenBright surface 4.50 13.88 7.04
cyanBright surface 4.50 13.08 6.87
blueBright surface 4.50 12.88 7.33
magentaBright surface 4.50 12.61 7.67

Syntax and ANSI colors on panels

Foreground Background Minimum Dark Light
red surfaceRaised 3.00 7.78 4.80
red surfaceNested 3.00 7.22 4.45
yellow surfaceRaised 2.50 10.45 3.05
yellow surfaceNested 2.50 9.70 2.83
green surfaceRaised 3.00 10.26 4.35
green surfaceNested 3.00 9.52 4.03
cyan surfaceRaised 3.00 9.25 4.27
cyan surfaceNested 3.00 8.59 3.96
blue surfaceRaised 3.00 9.05 4.55
blue surfaceNested 3.00 8.40 4.22
magenta surfaceRaised 3.00 8.75 4.80
magenta surfaceNested 3.00 8.12 4.45
redBright surfaceRaised 3.00 11.07 7.04
redBright surfaceNested 3.00 10.28 6.53
yellowBright surfaceRaised 3.00 13.00 4.91
yellowBright surfaceNested 3.00 12.06 4.55
greenBright surfaceRaised 3.00 13.12 6.44
greenBright surfaceNested 3.00 12.18 5.98
cyanBright surfaceRaised 3.00 12.37 6.29
cyanBright surfaceNested 3.00 11.48 5.83
blueBright surfaceRaised 3.00 12.17 6.71
blueBright surfaceNested 3.00 11.30 6.23
magentaBright surfaceRaised 3.00 11.92 7.02
magentaBright surfaceNested 3.00 11.07 6.51

Text and syntax colors on the selection

Foreground Background Minimum Dark Light
text selection 4.50 7.25 7.35
red selection 2.00 3.75 3.24
yellow selection 2.00 5.03 2.06
green selection 2.00 4.94 2.93
cyan selection 2.00 4.46 2.88
blue selection 2.00 4.36 3.07
magenta selection 2.00 4.22 3.24

Text on diff and search backgrounds

Foreground Background Minimum Dark Light
text added 4.50 12.11 9.64
text addedEmphasis 4.50 8.12 7.74
text removed 4.50 12.56 9.55
text removedEmphasis 4.50 9.06 7.51
text addedStrong 4.50 5.28 6.06
text removedStrong 4.50 6.21 5.86
text changed 4.50 12.34 9.62
text changedEmphasis 4.50 8.56 7.66
text search 4.50 9.93 9.27

Ports

Port For Switches
Ghostty Terminal live
herdr Terminal live
tmux Terminal live
Neovim Editors live
VS Code Editors live
bat Command line on start
Claude Code Command line through install.sh sync
Codex Command line through install.sh sync
delta Command line on start
eza Command line live
fzf Command line live
glamour (gh, glow) Command line live
jq Command line live
lazydocker Command line live
lazygit Command line live
ripgrep Command line live
Yazi Command line on start
LS_COLORS (GNU ls, fd, eza, zsh completion) Shell live
Starship Shell live
zsh-syntax-highlighting, zsh-autosuggestions Shell live
Obsidian Apps live
Raycast Apps live
Chrome Browser by hand
Bereghici Symbols Font —

Tools that draw with the 16 ANSI colors, such as htop, take the terminal theme's.

Verification

pnpm test runs each tool below on the port's themes, at the version mise.toml pins and mise.lock checksums, and fails when the tool rejects a theme or draws a color other than the palette's (tools.test.ts, checks.ts). CI installs every tool but Ghostty and herdr, whose checks run on the maintainer's Mac only.

Port Tool Proves
bat bat 0.26.1 bat builds its cache from both themes without a warning and highlights TypeScript with them
Codex bat 0.26.1 bat, which reads TextMate themes with the same library as Codex (syntect), loads both themes and highlights TypeScript with them
Yazi bat 0.26.1 bat, which reads TextMate themes with the same library as Yazi (syntect), loads each flavor's tmtheme.xml and highlights TypeScript with it
delta delta 0.20.1 delta renders a diff with each feature, and its output carries the feature's added and removed line backgrounds
eza eza 0.23.5 eza reads each theme as its theme.yml and draws directories in the theme's blue
LS_COLORS (GNU ls, fd, eza, zsh completion) eza 0.23.5 eza reads each LS_COLORS and draws directories in the theme's blue
fzf fzf 0.74.5 fzf accepts every theme's --color (it exits with an error on an unknown color name or value)
jq jq 1.8.2 jq accepts every theme's JQ_COLORS (it warns on an invalid one) and colors object keys with the theme's blue
ripgrep ripgrep 15.2.0 ripgrep accepts every theme's --colors (it exits with an error on an invalid one) and marks matches in the theme's red
Starship starship 1.27.0 Starship draws each palette's colors by role name exactly as it draws their values (it ignores a name it doesn't know)
tmux tmux 3.8, built from source in CI tmux sources the theme without an error, and the status bar keeps the terminal's background
Ghostty Ghostty on the maintainer's Mac; CI can't install it ghostty +validate-config accepts a config that sets each theme
herdr herdr on the maintainer's Mac; CI can't install it herdr config check reports no issue with the theme as config.toml (it reports unknown keys)
VS Code @vscode/vsce 4.1.0, from pnpm-workspace.yaml vsce package packages the extension, and the package holds every theme the manifest contributes

The other tests:

  • parse every generated JSON, YAML, TOML and XML file, and run bash -n, zsh -n and git config --list on the shell and git ones (outputs.test.ts).
  • load the Neovim port in both appearances, with and without transparent, and check that every highlight link has a target and every color is a hex color (editors.test.ts).
  • compare a sample of each item of CONTRIBUTING's syntax table across Neovim, VS Code and the TextMate theme (editors.test.ts).
  • hold every contrast pair above to its minimum (palette.test.ts), and check the font's logo glyph (font.test.ts).

Wallpapers

wallpapers/ has seven dynamic macOS wallpapers in the palette, each switching between a light and a dark image with the appearance.

How it works

  • packages/palette resolves the design system's DTCG source (@abereghici/tokens/source/*.tokens.json) and the terminal roles with Style Dictionary, into the three flavors every template reads.
  • packages/build renders each port's templates/*.mustache. A template's frontmatter names its output and the flavors it renders in, as the frontmatter of Catppuccin's Whiskers templates does. A tag the view doesn't have fails the build, so a typo can't ship an empty color.
  • ports.yml registers every port: its tool, its documentation, the oldest version it supports, how it switches, where it installs and what to add to the tool's config. The ports table in this README, each port's README and install.sh are generated from it, and the build fails on an entry it can't use.
  • pnpm check renders everything without writing and fails when a committed file differs, so what's in the repository is what the tokens produce.
  • packages/font draws the Bereghici logo into a font, for prompts.

CI runs pnpm lint, pnpm format, pnpm check-types, pnpm test and pnpm check on every push to main and every pull request.

Contributing

See CONTRIBUTING.md for the repository layout, the development commands and how to add a port. Report vulnerabilities as described in SECURITY.md.

License

MIT © abereghici.

About

Bereghici Dark and Light for terminals, editors, command-line tools and apps, generated from the Bereghici Design System tokens.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages