Themes focused on minimalism, simplicity and cross-tool consistency, shipped in three flavors:
Morokβ pitch black, neutral greys on a true-black floor, cool Catppuccin-frappe-style accents.Popilβ warm ash. Near-neutral warm-grey base with neutral warm-grey subtext and muted terracotta accents. The "house" flavor for brand surfaces.Vatraβ Carpathian hearth fire. Same warm#1f1f1ebase as popil but with golden-tan subtext and gruvbox-material-warm accents (orange primary). Punchier, more saturated take on the warm flavor.
All three flavors share the same 14 named color slots and every port template β only the values in those slots diverge. Pick morok for maximum contrast, popil for restrained warm minimalism, vatra for the gruvbox-coded sibling.
Preview the palette, compare both flavors, and browse the ports live at theme.pivoshenko.dev.
About the names
Morok (pronounced [mo-rok]) is a Ukrainian word that means "darkness" or "gloom". It is often used to describe a state of melancholy, sadness, or despair, or a dark and gloomy atmosphere.
Popil (pronounced [po-pil]) is a Ukrainian word that means "ash". It evokes the warm grey embers smouldering after a fire has burned down β a faint, lingering heat in the dark. It carries a sense of quiet aftermath: of what remains, still warm, once the flame is gone β mirroring this flavor's warm off-black ramp.
Vatra (pronounced [va-tra]) is a Ukrainian word that means "Carpathian hearth fire" or "bonfire" β the open flame around which highland shepherds gather. Where popil is the ash, vatra is the fire still burning: warmer, more saturated, alive with orange and ember-yellow. The two flavors are the same scene at different moments.
Repository contains ports for various terminal applications and userstyles for popular websites. All ports are generated from the source palettes (themes/palettes/morok.json, themes/palettes/popil.json, themes/palettes/vatra.json) against shared templates, ensuring a cohesive look across different tools and platforms. Every port below ships as themes/dist/<tool>/morok.<ext>, themes/dist/<tool>/popil.<ext>, and themes/dist/<tool>/vatra.<ext>.
Install steps below use <flavor> as a placeholder β substitute morok, popil, or vatra in both the source filename and any in-tool identifier the step sets (theme = "<flavor>", palette = "<flavor>", --theme="<flavor>", skin: <flavor>, etc.). Telegram is the one exception: it ships per-flavor deep links.
See pivoshenko.dotfiles for a real-world setup consuming the theme across fish, starship, helix, ghostty, zed, k9s, bottom, lazygit, zellij, bat, spicetify, stylus, tmux, and agent-of-empires.
- Copy
themes/dist/aoe/<flavor>.tomlto~/.agent-of-empires/themes/<flavor>.toml. - Set
[theme] name = "<flavor>"in your Agent of Empires config.
- Copy
themes/dist/bat/<flavor>.tmThemeto~/.config/bat/themes/. - Run
bat cache --build. - Set
--theme="<flavor>"in~/.config/bat/config.
- Copy
themes/dist/bottom/<flavor>.tomlto~/.config/bottom/bottom.toml. - Start
btm.
- Copy
themes/dist/delta/<flavor>.gitconfigto~/.config/delta/themes/<flavor>.gitconfig. - Add
include = ~/.config/delta/themes/<flavor>.gitconfigunder[include]in~/.gitconfig. - Set
features = <flavor>under[delta]in~/.gitconfig.
-
In your Discord client (Vesktop / BetterDiscord), open Themes settings and switch to the Online Themes tab.
-
Add the raw URL for the flavor you want, prefixed with
@dark:@dark https://raw.githubusercontent.com/pivoshenko/pivoshenko.theme/refs/heads/main/themes/dist/discord/<flavor>.theme.cssSubstitute
<flavor>withmorok,popil, orvatra. -
Enable the theme in the client.
- Copy
themes/dist/fastfetch/<flavor>.jsoncto~/.config/fastfetch/config.jsonc(the dist file is a fullconfig.jsonc). - Run
fastfetch.
- Copy
themes/dist/fish/<flavor>.themeto~/.config/fish/themes/. - Run
fish_config theme save <flavor>.
- Copy
themes/dist/fzf/<flavor>.fishto~/.config/fish/conf.d/. - Start a new Fish session, or source the file manually.
- Set
FZF_DEFAULT_OPTS="$FZF_<FLAVOR>"(uppercase:$FZF_MOROK,$FZF_POPIL,$FZF_VATRA) or append it to your existingFZF_DEFAULT_OPTS.
- Copy
themes/dist/ghostty/<flavor>.confto~/.config/ghostty/themes/<flavor>. - Set
theme = <flavor>in~/.config/ghostty/config.
- Copy
themes/dist/helix/<flavor>.tomlto~/.config/helix/themes/<flavor>.toml. - Set
theme = "<flavor>"in~/.config/helix/config.toml.
- Copy
themes/dist/k9s/<flavor>.yamlto~/.config/k9s/skins/<flavor>.yaml. - Set
skin: <flavor>in~/.config/k9s/config.yaml.
- Copy
themes/dist/lazygit/<flavor>.ymlto~/.config/lazygit/config.yml. - Or merge only the
theme:section into your existing config.
- Copy
themes/dist/obsidian/<flavor>.cssto your Obsidian theme folder and rename it totheme.css. - Optionally copy
themes/dist/obsidian/<flavor>.manifest.jsonand rename it tomanifest.json. - Enable the theme in Obsidian Appearance settings.
- Copy
themes/dist/spicetify/<flavor>.color.inito~/.config/spicetify/Themes/<flavor>/color.ini. - Set
current_theme = <flavor>in your Spicetify config. - Run
spicetify apply.
- Copy the palette from
themes/dist/starship/<flavor>.tomlto your Starship configuration file. - Set
palette = "<flavor>", preferably near the top of your config. - Save and reload your prompt.
- Open the theme deep link in Telegram:
pivoshenko_theme_morokorpivoshenko_theme_popil. - Tap "Apply Theme".
Platform-specific source files for all three flavors live in themes/dist/telegram/ as <flavor>-desktop, <flavor>-ios, and <flavor>-macos β use these directly if no deep link is hosted for your flavor.
- Copy
themes/dist/tmux/<flavor>.confto~/.config/tmux/themes/<flavor>.conf. - Add
source-file ~/.config/tmux/themes/<flavor>.confto~/.config/tmux/tmux.conf. - Reload with
tmux source-file ~/.config/tmux/tmux.conf.
- Install a Catppuccin VSCode theme (for example
Catppuccin Mocha). - Open the generated override snippet
themes/dist/vscode/<flavor>.json. - Merge its
catppuccin.colorOverridesblock into your VSCodesettings.json.
- Copy
themes/dist/zed/<flavor>.jsonto a stable location, for example~/.config/zed/themes/<flavor>.json. - Open Zed and choose the theme from
Theme Selector(or set it in your Zed settings).
- Copy
themes/dist/zen/<flavor>.userChrome.cssandthemes/dist/zen/<flavor>.userContent.cssinto your Zen profilechrome/directory asuserChrome.cssanduserContent.css. - Restart Zen Browser.
- Copy the theme block from
themes/dist/zellij/<flavor>.kdlinto your Zellij config, or place it in a sourced theme file. - Set the active theme to
<flavor>.
For Next.js / Tailwind 3 sites in the pivoshenko.* ecosystem.
// tailwind.config.ts
import type { Config } from 'tailwindcss'
import flavor from './path/to/themes/dist/tailwind/<flavor>.js' // morok | popil | vatra
export default {
presets: [flavor],
content: ['./app/**/*.{ts,tsx}', './components/**/*.{ts,tsx}'],
} satisfies ConfigExposes colors.<flavor>.<token> (e.g. bg-morok-base, text-popil-peach) plus a JetBrains Mono font stack and darkMode: 'class'. Consumed in production via pivoshenko.ui under the pivoshenko.ui/tailwind-preset subpath (vendored on release).
For plain-CSS surfaces and design-system docs.
@import url('/path/to/themes/dist/css-vars/<flavor>.css'); /* morok | popil | vatra */
.button { background: var(--morok-blue); color: var(--morok-text); }Every palette token becomes a --<flavor>-<token> custom property on :root.
For Next.js / shadcn / any frontend stack that needs a runtime flavor switcher. Tokens are flavor-agnostic semantic names (--bg-canvas, --fg-default, --accent-primary) scoped to [data-flavor="<flavor>"]. Values are space-separated R G B triples for <alpha-value> support.
// globals.css
@import url('/path/to/themes/dist/tokens/morok.css');
@import url('/path/to/themes/dist/tokens/popil.css');
@import url('/path/to/themes/dist/tokens/vatra.css');
// tailwind.config.ts β preset is flavor-agnostic, any flavor file works
import type { Config } from 'tailwindcss'
import preset from './path/to/themes/dist/tailwind-tokens/morok.js'
export default {
presets: [preset],
content: ['./app/**/*.{ts,tsx}'],
} satisfies Config<html data-flavor="morok"> {/* or "popil" / "vatra" */}
<body className="bg-canvas text-fg-default">
<button className="bg-accent-primary text-bg-canvas">Click</button>
</body>
</html>Flip flavor at runtime by setting document.documentElement.dataset.flavor.
- Install the Stylus browser extension.
- In Stylus, open the extension popup, go to
Manage, thenImport. - Select
themes/dist/stylus/<flavor>.jsonβmorok,popil, orvatra.
Default accent color is blue for morok and peach/terracotta for popil / vatra.
Browse the available styles under themes/userstyles/styles/.
Palette structure and token naming inspired by Catppuccin.