I use macOS, Visual Studio Code, Codex, Ghostty, Fish, and mise.
home/.config/mise/config.toml— global tools, environment, packages, dotfiles, macOS defaults, and sync tasksbin— reusable commandshome— files linked into$HOMEhome/Library/Application Support/Code (VS Code)home/.config/git
Once this version is checked out at ~/code/gh/vrslev/dotfiles, migrate the existing installation with:
mise bootstrap --yesBootstrap is the migration. It installs anything missing, replaces the old linker with mise-managed symlinks, applies macOS defaults, configures Fish, and verifies the resulting state. It is safe to re-run.
Restart the Mac after the first successful migration so applications reload the managed defaults.
Install Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Clone this repository:
mkdir -p ~/code/gh/vrslev
git clone https://github.com/vrslev/dotfiles ~/code/gh/vrslev/dotfiles
cd ~/code/gh/vrslev/dotfilesInstall mise:
eval "$(/opt/homebrew/bin/brew shellenv)"
brew install miseBootstrap from the global config source before it has been linked into place:
MISE_GLOBAL_CONFIG_FILE="$PWD/home/.config/mise/config.toml" \
mise bootstrap --yesThe config is global once ~/.config/mise points to home/.config/mise; there is no project-local mise.toml. Restart the computer after the first bootstrap.
The routine command to remember is:
mise run dotfiles:syncIt fast-forwards the repository, re-applies links, and synchronizes tools and packages.
It then checks Fish startup and the essential commands. Run the check separately with
mise run dotfiles:check-shell-tools.
Available tasks and read-only bootstrap status are discoverable:
mise tasks
mise bootstrap statusUse mise directly to manage dotfiles:
mise bootstrap dotfiles add --global ~/.example
mise bootstrap dotfiles apply --yesdotfiles:syncusesgit pull --ff-only; it stops instead of rebasing a divergent checkout.- Removing a package from
[bootstrap.packages]does not uninstall it. Prune packages only when removal is intentional. - Removing a
[dotfiles]entry does not remove its existing target. Delete obsolete targets explicitly. - Mise refuses conflicting dotfile targets by default. Inspect the conflict instead of reaching for
--force. - The config assumes this repository lives at
~/code/gh/vrslev/dotfiles, and most versions arelatest, so a fresh bootstrap can resolve newer software. - Safari defaults and VS Code extensions are intentionally unmanaged.
- The official ChatGPT cask currently owns the same
/Applications/ChatGPT.appused by Codex. An identical existing bundle can be adopted; a different bundle at that path blocks installation rather than being overwritten.
open-mail-mrs groups browser tabs by the first Jira key found in each MR title or branch name, with unlinked MRs grouped together. MRs assigned to your authenticated GitLab user open in a separate Safari window; reviewer assignments and authorship alone do not count. Existing draft and notification filters still apply. Each MR opens with its diff and linked Jira issues. Tabs load one at a time in the background window, selecting each once instead of repeatedly cycling through pending tabs. Notifications are cleared only after all windows finish loading, allowing up to 15 minutes per window. Offscreen lazy-loading spinners do not block already rendered diffs. Unavailable GitLab pages are reported with MR labels and URLs, combining duplicate overview/diff failures, while the remaining pages and windows continue loading; any loading failure preserves all mail notifications. Use --dry-run to preview the groups without opening windows or clearing mail, or --keep-mail to open and check the pages without marking or moving notifications.
After loading, a macOS notification reports whether the tabs are ready or any pages failed. In a terminal, the script then follows Safari’s selected tab, replacing the display with that MR’s mail summary; diff and discussion tabs share the MR summary, and Jira tabs show all related MRs. Press Ctrl-C to stop following. Redirected output prints the selected tab’s summary once.
Set OPEN_MAIL_MRS_IGNORED_PROJECTS to a space-separated list of repository paths in the ignored ~/.config/mise/.env file. For those repositories, open-mail-mrs skips threads containing only opening, reviewer assignment, approval, or merge notifications, except for your own MRs. When unset, all repositories are included.
See project reconciliation for product folders, separate package projects, and automatic additions after repository sync.
writing-style guides drafts in my voice, with Russian and English examples and notes on its evidence. Mise installs it at ~/.agents/skills/writing-style. Invoke it with $writing-style, or ask Codex to write in my style. Refinements use my own corrections and human-authored prose, excluding generated or assisted drafts.