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/
- 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.
Dotfiles are managed via dotdrop and driven through just.
- Fork and clone this repository
- Install everything:
just installThis 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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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
Spotify is customised via Spicetify. Themes live in dotfiles/.config/spicetify/Themes β activate a flavor with just spicetify <morok|popil|vatra>.
Telegram with my Popil theme β installed via t.me/addtheme/pivoshenko_theme_popil.
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- 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