How vasily-sviridov/dotfiles works
This repository is a personal dotfiles system centered on a single install pipeline: ./install bootstraps the machine, and Dotbot applies the selected setup steps to place config files, run installers, and wire everything together.
The main architectural boundary is between orchestration and payload. Orchestration lives in the install script, Dotbot, and the step files under steps/. The payload is the actual configuration content in config/, shell/, nvim/, and dependencies/.
dotbot/ is vendored in the repo and used as the configuration engine. The README notes that installation is step-based: the user can enable or disable pieces by commenting out run_dotbot 'steps/...' entries. That means the setup is intentionally modular rather than a monolithic “install everything” flow.
steps/terminal.yaml is the visible Dotbot step definition in the tree. It is likely the top-level wiring for terminal-related symlinks or commands, while the rest of the repo provides the files those steps install or source.
The config/ directory contains host-level configuration artifacts that are typically linked into standard locations: editor formatting, Git behavior, shell startup, and plugin manager settings. The presence of editorconfig, gitattributes, gitconfig, zplugrc, and zshrc suggests this repo configures the developer environment across editor, VCS, and shell layers.
The shell/ directory is a shell-profile composition layer. Files like .exports, .aliases, .external, .std, and .wsl imply the shell environment is split into reusable fragments rather than one large profile. This allows the Zsh startup config to source common definitions while keeping platform-specific behavior isolated.
The dependencies/ subtree is a separate bootstrap subsystem for software installation. dependencies/install is the entry point, and dependencies/lib/*.sh breaks the logic into shared helpers plus OS/runtime-specific installers for macOS, Ubuntu, Go, Rust, NVM, and uv. That makes dependency provisioning a distinct phase from dotfile linking.
The nvim/ directory is a complete Neovim configuration boundary. It has its own init.lua, plugin lock files, and Lua modules under lua/config and lua/plugins. This is not just a single plugin file; it is a structured editor stack with options, keymaps, autocommands, and plugin registration separated into layers.
Neovim plugin management appears to be based on LazyVim/Lazy.nvim conventions. nvim/lazy-lock.json and nvim/lazyvim.json indicate pinned plugin state and a preset/configuration baseline. The plugin modules (blink.lua, gitsigns.lua, snacks.lua, theme.lua, cyrillic.lua) define the editor’s functional pieces and UI behavior.
The repo also contains automation for keeping editor dependencies current. .github/workflows/update-lazy-plugins.yml likely updates the Neovim plugin lockfile, and Dependabot is configured to monitor dependencies. That means the repo has an explicit maintenance path for both system packages and editor plugins.
Overall, the architecture is: Dotbot-driven bootstrap at the center, OS/runtime installers for dependencies, shell and Git/editor configs as installable artifacts, and Neovim as a self-contained subplatform with its own dependency tracking and update automation.
Main entry points: dependencies/install Deps install · terminal.yaml Terminal step · nvim Neovim · install install
Components 19
Orchestration
Bootstrap entrypoints and step-based install flow.
- install · Top-level machine bootstrap entrypoint.
install - Dotbot · Vendored configuration engine that executes install steps.
dotbot - Terminal step · Visible Dotbot step that wires terminal-related setup.
steps/terminal.yaml - Deps install · Entry script for dependency provisioning.
dependencies/install
Payload
Installable configuration and runtime content.
- Host config · Host-level config artifacts for editor, VCS, and shell integration.
config - Shell env · Composable shell startup fragments and platform-specific behavior.
shell - Neovim · Self-contained Neovim configuration boundary.
nvim - init.lua · Neovim startup entry that loads the editor stack.
nvim/init.lua - Config layer · Core options, mappings, autocommands, and lazy loader setup.
nvim/lua/config - Plugins · Plugin registrations and editor behavior modules.
nvim/lua/plugins - Common lib · Shared shell helpers for dependency installation.
dependencies/lib/common.sh - macOS · macOS-specific dependency installation logic.
dependencies/lib/macos.sh - Ubuntu · Ubuntu-specific dependency installation logic.
dependencies/lib/ubuntu.sh - Go · Go toolchain provisioning logic.
dependencies/lib/go.sh - Rust · Rust toolchain provisioning logic.
dependencies/lib/rust.sh - NVM · Node version manager provisioning logic.
dependencies/lib/nvm.sh - uv · Python package/runtime tool provisioning logic.
dependencies/lib/uv.sh
Automation
Update and dependency maintenance tooling.
- Plugin update · Automated refresh of Neovim plugin lock state.
.github/workflows/update-lazy-plugins.yml - Dependabot · Automated dependency monitoring and updates.
.github/dependabot.yml
Connections 21
- install → Dotbot: boots · Bootstrap hands off to the Dotbot engine.
- install → Terminal step: enables · Install script selects which step files to run.
- Dotbot → Terminal step: applies · Dotbot executes the terminal setup step.
- Terminal step → Host config: links · Step consumes host config artifacts for installation.
- Terminal step → Shell env: sources · Step wires shell fragments into the login shell.
- Terminal step → Neovim: installs · Step wires the editor configuration boundary.
- install → Deps install: can run · Dependency provisioning is a separate bootstrap phase.
- Deps install → Common lib: uses · Installer entrypoint relies on shared helpers.
- Deps install → macOS: dispatches · Selects macOS-specific installation path when needed.
- Deps install → Ubuntu: dispatches · Selects Ubuntu-specific installation path when needed.
- Deps install → Go: installs · Provisioning can install the Go toolchain.
- Deps install → Rust: installs · Provisioning can install the Rust toolchain.
- Deps install → NVM: installs · Provisioning can install Node version management.
- Deps install → uv: installs · Provisioning can install the uv toolchain.
- Neovim → init.lua: starts with · Neovim loads its init entrypoint first.
- init.lua → Config layer: loads · Startup delegates core setup to config modules.
- init.lua → Plugins: loads · Startup delegates plugin definitions to plugin modules.
- Config layer → Plugins: coordinates · Core config and plugins work together through lazy loading.
- Plugin update → Neovim: updates · Workflow refreshes pinned Neovim plugin state.
- Dependabot → Deps install: monitors · Automation watches repository dependency surfaces.
- Dependabot → Neovim: monitors · Automation also watches the editor stack and lock files.