Skip to content

Latest commit

Β 

History

803 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

pivoshenko.dotfiles

StandWithUkraine

Overview

My personal dotfiles. The whole thing leans on three ideas: keep it minimal, keep it consistent, and make every tool look like it belongs to the same family. What's here:

Main Principles

  • Minimalism, consistency, simplicity
  • One unified look via pivoshenko.theme. Right now I'm running Popil (warm ash, muted terracotta). Morok (pitch black, cool accents) and Vatra (Carpathian hearth, gruvbox-warm) are vendored alongside it
  • JetBrains Mono, everywhere

To switch flavors: just set-flavor <morok|popil|vatra>, then just dotfiles.

Installation

Everything is managed with dotdrop and driven through just.

  1. Fork and clone this repository
  2. Install everything:
just install

That runs brew bundle, deploys both dotdrop profiles, bootstraps Fisher and the fish plugins, builds the bat theme cache, links the vault, and reinstalls the herdr hook and plugins. Need only one part? Every step is its own recipe - run just on its own to see them.

Three files stay untracked and have to be created by hand on a new machine:

  • ~/.gitconfig.local - your [user] block. .gitconfig sets useConfigOnly = true, so git refuses to commit until this exists. Commits are GPG-signed, so it also needs signingkey = <your key id>
  • ~/.config/fish/local.fish - anything shell-related that is specific to this machine
  • ~/.config/fish/.secrets.fish - tokens and keys

Note

A few things still want a manual step, because the app owns its own settings store rather than reading a file: Telegram and Discord (theme installs through the app's UI), Obsidian (theme picked in appearance settings), and Stylus and Rectangle (import the exported JSON). The relevant sections below spell out what to do.

Terminal - Ghostty

Ghostty is a fast, GPU-accelerated, native macOS terminal from Mitchell Hashimoto. It's the first terminal in years that feels designed rather than accreted. No perceptible latency, and a config format that reads cleanly. Config: dotfiles/.config/ghostty.

Shell - Fish

Fish comes with the good stuff already on: autosuggestions, syntax highlighting, and scripting that doesn't drag along bash's compatibility baggage. I run it with a handful of plugins through Fisher. Config: dotfiles/.config/fish.

Prompt is Starship: one binary, one TOML file, works in every shell, and fast enough that I stop noticing it. Config: dotfiles/.config/starship.toml.

CLI Tools

The tools I reach for every day, all configured under .config/:

  • Bat - cat with syntax highlighting and git gutters. Hard to go back once you've used it
  • Bottom - htop rethought: keyboard-driven, themable, readable on a wide monitor
  • Delta - makes git diff pleasant to read instead of a squinting exercise
  • Eza - a modern ls with icons, git status, and a tree mode that handles big repositories fine
  • Fastfetch - fast, configurable, JSONC-driven system fetch
  • Fd - find with sane defaults and far less typing
  • Fzf - fuzzy-finds everything and plugs into everything. If I could keep one CLI tool, this is it
  • Ripgrep - very fast grep that respects .gitignore out of the box
  • K9s - a Kubernetes UI that keeps me out of kubectl get pods | grep
  • LazyGit - staging, rebases, and cherry-picks at TUI speed. It replaced every GUI git client I used to run
  • LazyDocker - the same idea as LazyGit, pointed at containers and compose stacks
  • Zoxide - a smarter cd that learns the directories you actually use. Type z foo and you're there

The full list of installed CLI tools is in the Brewfile.

Editors

Editor - Helix

Helix is my primary CLI editor, and I keep moving more day-to-day work into it. Its selection-first modal model (selection then action, Γ  la Kakoune) clicked for me in a way Vim's verb-object grammar never quite did. Multiple cursors and tree-sitter selections feel native rather than bolted on, and LSP works without a plugin scavenger hunt. Config: dotfiles/.config/helix.

Editor - Zed

Zed is my daily editor. It's Rust-native, GPU-accelerated, and collaborative, and it ships Vim, Helix, and Whichkey modes in the box instead of leaving them to third-party plugins. Config: dotfiles/.config/zed/settings.json.

Agentic Coding

Agent - Claude Code

Claude Code is my coding assistant. Config (settings.json plus a custom statusline): dotfiles/.claude.

Skills, MCPs, and instructions (the global CLAUDE.md / AGENTS.md rules) are distributed across hosts with Kasetto. The Kasetto config lives in pivoshenko/pivoshenko.ai, with personal and external sources both included.

The global rules used to be a single CLAUDE.md in this repository. They now live as individual instruction files in pivoshenko.ai/instructions, with a structure loosely inspired by Andrej Karpathy's CLAUDE.md.

Agent Runtime - Herdr

Herdr is the daemon my agents run on. It keeps real terminal sessions open in the background, so a long task survives the lid closing or the network dropping and is still there when I come back. It drives several agents across workspaces at once and shows at a glance which ones are working, blocked, or idle.

Config: dotfiles/.config/herdr/config.toml. Only the config file is managed, since the rest of ~/.config/herdr holds sockets, logs, and session state.

macOS

Hotkeys Daemon - Karabiner

I drive as much as I can from the keyboard, with Vi/Kakoune motions. Where macOS or the window manager won't cooperate, Karabiner covers the gap. It's built around home row mods, following this guide.

Config: dotfiles/.config/karabiner/karabiner.json.

Tiling Window Manager - Rectangle

Rectangle gives me i3-style tiling on macOS. I tried yabai and Aerospace first; Rectangle won on the boring but decisive point of surviving every macOS update without any SIP gymnastics. Config: dotfiles/.config/rectangle/config.json. Rectangle keeps its live settings in its own preferences plist, so this file is an export - import it from Preferences -> ... -> Import, the same way the Stylus and Telegram themes go in.

Browser - Zen

Zen is a Firefox fork that ships the browser experience I'd been hand-rolling with userChrome hacks for years: keyboard-driven, vertical tabs, minimal chrome. Extensions:

  • Custom New Tab - sends new tabs to my own startpage instead of Mozilla's default
  • DuckDuckGo - my default search
  • MetaMask - Ethereum/EVM wallet, the one every dapp assumes you already have
  • NordPass - password manager I've stuck with for years; the autofill stays out of the way
  • NordVPN - same family, same story
  • Obsidian Web Clipper - clips articles straight into the vault as clean Markdown, no copy-paste dance
  • Phantom - Solana-first multichain wallet; cleaner UX than MetaMask when I'm off EVM
  • Privacy Badger - EFF's heuristic tracker blocker, which pairs well with uBlock without stepping on it
  • RaindropIo - bookmarks with tags, collections, and a UI I don't mind opening
  • Stylus - userstyles, minus the abandonware history of Stylish
  • uBlock - the ad blocker. Thank you, Raymond Hill
  • Vimium - keyboard navigation on every page; once f follows a link for you, the mouse feels slow

userChrome.css / userContent.css live in dotfiles/.config/zen and deploy into the active profile's chrome/ subfolder.

Per-site styling is handled by Stylus. The userstyles export to dotfiles/.config/stylus and get imported through the extension's preferences.

Notes - Obsidian

I keep my notes in Obsidian: local-first, plain Markdown on disk, no lock-in, and a plugin ecosystem that covers what I'd otherwise reach for Notion for. The vault syncs over iCloud. Vendored themes and snippets in dotfiles/.config/obsidian deploy via the me profile into <vault>/.obsidian/{themes,snippets}/; the vault path is machine-specific and set in dotdrop.config.yaml. The active theme is chosen inside Obsidian's appearance settings.

Plugins:

Music - Spotify

Spotify is customized through 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 from t.me/addtheme/pivoshenko_theme_popil.

Messenger - Discord

The official Discord client is missing too much for me, so I run Vesktop instead. Install the Popil theme through 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; I notice right away on a machine that doesn't have it
  • NordPass / NordVPN - a password manager and a VPN I've run for years without having to think about either. That's the whole point
  • DBeaver - one client for every database I touch. The Eclipse bones are ugly, but it handles Postgres, MySQL, SQLite, and Mongo without me hunting down a vendor GUI for each
  • Redis Insight - the one exception to DBeaver: Redis's own GUI reads streams, keyspaces, and memory in a way a generic SQL client never quite matches
  • Tailscale - WireGuard with the setup pain removed. My NAS, work boxes, and phone all sit on one flat network, and I haven't touched VPN config in years
  • Maccy - clipboard-history manager: lightweight, keyboard-driven, and out of the way until I hit the hotkey
  • Logi Options+ - per-app buttons and gestures for the Logitech mouse, which is what finally makes the extra thumb buttons worth having
  • Docker Desktop - the container runtime everything else assumes; LazyDocker just drives what it provides

About

πŸ“• pivoshenko's dotfiles focused on simplicity, modularity and developer happiness

Topics

Resources

Stars

28 stars

Watchers

1 watching

Forks

Contributors

Languages