pivoshenko.dotfiles
May 31, 2026 · View on GitHub
Overview
Personal dotfiles focused on minimalism, consistency, and cross-tool theming, bundling:
- Brew dependencies — apps, fonts, LSPs, extensions — in
Brewfile - Apps and tools config — in
dotfiles/.config/ - Claude Code setup — global
CLAUDE.md,settings.json, statusline — indotfiles/.claude/ - Git, SSH, GPG —
.gitconfig,.ssh/,.gnupg/
Main principles
- Minimalism, consistency, simplicity
- Unified style via pivoshenko.theme — currently running Popil (warm ash, muted terracotta). Morok (pitch black, cool accents) and Vatra (Carpathian hearth, gruvbox-warm) are also vendored
- Typography: JetBrains Mono everywhere
Swap flavors with just set-flavor <morok|popil|vatra> followed by just dotfiles.
Installation
Dotfiles are managed via dotdrop and driven through just.
- Fork and clone this repository
- Install everything:
just install
This runs brew bundle and deploys both dotdrop profiles. Use just brew or just dotfiles to run halves separately; just lists every recipe.
Note
A few apps still need a manual step — currently Telegram and Discord (theme install through each app's own UI). Each section below documents what to do.
Terminal — Ghostty
Ghostty — fast, GPU-accelerated, native macOS terminal from Mitchell Hashimoto. The first terminal in years that feels like it was designed end-to-end rather than evolved by accretion; zero perceptible latency and a config format that doesn't insult the reader. Config: dotfiles/.config/ghostty.
Shell — Fish
Fish ships batteries-included — autosuggestions, syntax highlighting, and sane scripting without the bash compatibility tax. Plugins are managed via Fisher — only a few installed. Config: dotfiles/.config/fish.
Prompt: Starship — single binary, single TOML, works in every shell; fast enough that I forget it's there. Config: dotfiles/.config/starship.toml.
CLI Tools
Daily-driver CLI tools (all configured under .config/):
- Bat —
catwith syntax highlighting and git gutters; the drop-in I never want to live without - Bottom —
htopreimagined: keyboard-driven, themable, and actually readable on a wide monitor - Delta — turns
git diffinto something I read for fun instead of squinting at - Eza — modern
lswith icons, git status, and tree mode that doesn't choke on big repositories - Fastfetch — the only fetch tool worth the screen real estate; fast, configurable, JSONC-driven
- Fd —
findwith sane defaults and an order of magnitude less typing - Fzf — the single CLI tool I'd save from a fire; fuzzy-finds everything, integrates everywhere
- Ripgrep — fastest grep on the planet, respects
.gitignoreby default - K9s — the only Kubernetes UI that keeps me out of
kubectl get pods | greppurgatory - LazyGit — interactive staging, rebases, and cherry-picks at TUI speed; replaced every GUI client for me
- LazyDocker — same magic as LazyGit, applied to containers and compose stacks
- Zellij —
tmuxwith a discoverable UI and sane defaults out of the box - Zoxide — smarter
cdthat learns where you actually live;z fooand you're there
Editors
Editor — Helix
Helix — primary CLI editor; gradually moving day-to-day work to it. The selection-first modal model (selection → action, à la Kakoune) is, in my opinion, a real step up from Vim's verb-object grammar — multiple cursors and tree-sitter selections feel native instead of bolted on, and the batteries-included LSP setup means zero plugin yak-shaving. Config: dotfiles/.config/helix.
Editor — Zed
Zed — daily editor. Rust-native, GPU-accelerated, collaborative — and unlike most "modern" editors it actually ships Vim, Helix, and Whichkey modes out of the box instead of leaving them to flaky plugins. Config: dotfiles/.config/zed/settings.json.
Agentic Coding — Claude Code
Claude Code is my coding assistant. Config (settings.json + custom statusline): dotfiles/.claude.
Skills and MCPs are distributed across hosts via Kasetto. The Kasetto config lives in pivoshenko/pivoshenko.ai — personal and external skills/MCPs both included.
Global CLAUDE.md structure was inspired by Andrej Karpathy's CLAUDE.md.
macOS
Hotkeys Daemon — Karabiner
I drive everything from the keyboard via Vi/Kakoune motions. Where macOS or the window manager doesn't support that, Karabiner fills the gap — built around home row mode following this guide.
Config: dotfiles/.config/karabiner/karabiner.json.
Tiling Window Manager — Rectangle
Rectangle replicates i3-style tiling on macOS. Tried yabai and Aerospace; Rectangle wins on the "just works after every macOS update, no SIP gymnastics" axis. Config: dotfiles/.config/rectangle/config.json.
Browser — Zen
Zen — a Firefox fork that finally gives the browser the keyboard-driven, vertical-tabs, minimal-chrome UX I've been bolting on with userChrome hacks for years. Extensions:
- Custom New Tab — points new tabs at my own startpage instead of Mozilla's noisy default
- DuckDuckGo — default search; Google's results just aren't worth the tracking anymore
- NordPass — password manager I've stuck with for years; the autofill genuinely stays out of the way
- NordVPN — same family, same story; never had to think about it, which is the highest praise I give a VPN
- Privacy Badger — EFF's heuristic tracker blocker; pairs nicely with uBlock without overlapping
- RaindropIo — bookmarks that don't feel like bookmarks; tags, collections, and a UI I actually want to revisit
- Stylus — userstyles without the abandoned-extension drama of Stylish
- uBlock — the only ad blocker; the rest are noise. Thank you, Raymond Hill
- Vimium — keyboard navigation everywhere; once you've used
fto follow a link, the mouse feels broken
userChrome.css / userContent.css live in dotfiles/.config/zen and deploy into the active profile's chrome/ subfolder.
Per-site styling uses Stylus — userstyles export at dotfiles/.config/stylus, imported via the extension's preferences.
Notes — Obsidian
Obsidian for notes — local-first, plain Markdown on disk, no lock-in, and the plugin ecosystem covers anything Notion does without the SaaS tax. Vault synced through iCloud. Vendored themes + snippets in dotfiles/.config/obsidian deploy via the me profile into <vault>/.obsidian/{themes,snippets}/ — the vault path is machine-specific (set in dotdrop.config.yaml). Active theme is picked inside Obsidian's appearance settings.
Plugins:
- Obsidian Advanced Tables — makes Markdown tables tolerable; auto-formats columns as you type
- Obsidian Images in-editor — inline image previews in source mode so I don't have to keep flipping to preview
- Obsidian Tag Wrangler — rename and merge tags without grep-and-replace across the vault
- Obsidian Outliner — bullet handling that finally behaves like Workflowy / Roam
- Obsidian Style Settings — exposes theme variables in the UI so I'm not editing CSS every time I want a different accent
Music — Spotify
Spotify is customised via Spicetify. Themes live in dotfiles/.config/spicetify/Themes — activate a flavor with just spicetify <morok|popil|vatra>.
Messengers
Messenger — Telegram
Telegram with my Popil theme — installed via t.me/addtheme/pivoshenko_theme_popil.
Messenger — Discord
The official Discord client lacks functionality, so I run Vesktop instead. Install the Popil theme via Themes → Online Themes:
@dark https://raw.githubusercontent.com/pivoshenko/pivoshenko.theme/refs/heads/main/dist/discord/popil.theme.css
Other Apps
- f.lux — warms the display after sunset; my eyes notice immediately when I'm on a machine without it
- NordPass / NordVPN — boring, reliable, and that's exactly what I want from a password manager and a VPN. Been on both for years
- DBeaver — one client for every database I touch; ugly Eclipse bones, but it's the only tool that handles Postgres, MySQL, SQLite, and Mongo without me hunting for vendor GUIs
- Tailscale — WireGuard with the UX problem solved; my home NAS, work boxes, and phone are all on one flat network and I haven't thought about VPN config in years