How gourangadassamrat/dotfiles works
1. This repository is a personal dotfiles and workstation-bootstrap project, not an application runtime. Its job is to provision a terminal-centric developer environment across Linux and macOS, then manage the resulting configs as symlinked packages.
2. The top-level architecture splits into three layers: installer scripts under scripts/, managed configuration bundles by tool name (zsh/, tmux/, vscode/, helix/, kitty/, etc.), and documentation under docs/. The archive/ tree holds older or preserved configs that are not part of the active provisioning path.
3. Provisioning is the main data flow. scripts/install.sh and scripts/setup.sh orchestrate setup, while scripts/utils/detect.sh determines OS/package-manager/sudo capability. The installer then fans out into modular steps: base software installation, shell/plugin setup, wallpaper cloning, and dotfile symlinking.
4. Dotfile deployment is centered on GNU Stow. Each managed tool has its own directory containing a .config or equivalent root, which becomes the source of symlinks into the user’s home directory. This is the key boundary between “repository state” and “live machine state.”
5. The shell stack is the core subsystem. zsh/ contains the main .zshrc, environment setup, history behavior, color/theme settings, functions, plugins, aliases, and overrides. The README makes clear that this layer is interactive and productivity-oriented, with many shell commands implemented as custom functions and wrappers.
6. Shell behavior depends on a small set of reusable plugins and tools: fzf, pass, oh-my-zsh, autosuggestions, syntax highlighting, and fzf-tab. starship.toml defines the prompt, while bash/ provides a simpler Bash fallback via .bashrc for non-zsh sessions.
7. The terminal UI layer includes tmux/, kitty/, alacritty/, rofi/, and ytm-player/. tmux is configured for persistent sessions with resurrect/continuum support, while Kitty and Alacritty provide terminal emulators. Rofi fills the launcher role, and ytm-player is a small media-client config rather than part of the shell itself.
8. Editor and IDE configuration is split between helix/ and vscode/. Helix uses config.toml plus languages.toml to define editor behavior and language-server integration. VS Code is organized as a full user profile with settings, keybindings, and language-specific snippets, showing that the repo manages both CLI editors and a GUI IDE with distinct configuration boundaries.
9. Git and GitHub workflows are treated as first-class tooling. The git/ directory contains .gitconfig plus hook scripts for commit-message validation and pre-push checks. The gh/ directory configures GitHub CLI, and the README documents a large set of aliases for commit history, PR lookup, and repository navigation. This makes version control part of the daily shell workflow rather than an external tool.
10. Optional language-tooling installers live under scripts/sdk-tools/. These scripts extend the base environment with Go, Rust, and Python CLI tools, but remain separate from the core bootstrap so they can be run independently. That separation is mirrored in the README: core workstation setup is one path, language-specific augmentation is another.
11. Documentation is a meaningful architectural boundary. docs/ explains shell architecture, setup, editor settings, termux-specific behavior, and git usage, which suggests the repo is designed to be understandable and partially self-describing rather than purely scripted. The GitHub Actions workflows appear to validate shell behavior and releases, so CI is mainly about correctness of config/scripts, not building artifacts.
12. Overall, the repo’s architecture is “declarative configs plus procedural bootstrap.” Config directories define the desired state for each tool; scripts detect the host environment and apply that state; docs explain the intended usage; archived configs preserve prior snapshots. The result is a portable terminal workspace assembled from loosely coupled, tool-specific modules.
Main entry points: .zshrc Zsh · setup.sh Setup · .gitconfig Git · workflows Workflows
Components 23
Provisioning
Bootstrap scripts and host detection that apply the dotfiles to a machine.
- Install · Entry point for workstation provisioning.
scripts/install.sh - Setup · Coordinates install phases and environment setup.
scripts/setup.sh - Detect · Detects OS, package manager, and privilege capabilities.
scripts/utils/detect.sh - Dotfiles · Applies managed config bundles as symlinked packages.
scripts/lib/dotfiles.sh - Softwares · Installs base software needed for the workstation.
scripts/lib/softwares.sh - Plugins · Installs or wires shell plugins and extensions.
scripts/lib/plugins.sh - Wallpapers · Fetches wallpaper assets used by the desktop setup.
scripts/lib/wallpapers.sh - SDK tools · Language-specific CLI tool installers for Go, Rust, and Python.
scripts/sdk-tools
Shell
Interactive shell setup and prompt behavior.
Terminal UI
Terminal, launcher, and media-client configs.
- Tmux · Persistent terminal multiplexing with resurrect/continuum support.
archive/tmux/.tmux.conf - Kitty · Kitty terminal configuration and theme selection.
kitty/.config/kitty/kitty.conf - Alacritty · Archived terminal emulator configuration.
archive/alacritty/.config/alacritty/alacritty.toml - Rofi · Application launcher and prompt menu configuration.
rofi/.config/rofi/config.rasi - YTM Player · Terminal media-player configuration.
ytm-player/.config/ytm-player/config.toml
Editor
CLI editor and GUI IDE configuration.
Version Control
Git and GitHub workflow tooling.
- Git · Git configuration plus hook scripts for commit and push checks.
git/.gitconfig - GitHub CLI · GitHub CLI configuration.
gh/.config/gh/config.yml
Docs
Usage and architecture documentation.
- Docs · Architecture and usage documentation for setup, shell, editor, and git workflows.
docs
Archive
Preserved legacy configs outside the active path.
- Archive · Preserved historical configs not used in the active provisioning path.
archive
CI
Workflow validation and release automation.
- Workflows · Validation and release workflows for scripts and shell behavior.
.github/workflows
Connections 22
- Install → Setup: calls · Install delegates to the setup orchestrator.
- Setup → Detect: uses · Setup first determines host capabilities and package manager.
- Setup → Softwares: installs · Base software is installed as part of provisioning.
- Setup → Plugins: configures · Shell plugins and related tooling are prepared.
- Setup → Wallpapers: fetches · Desktop assets are cloned or downloaded.
- Setup → Dotfiles: stows · Managed config bundles are linked into the live home directory.
- SDK tools → Softwares: extends · Optional language tooling builds on the core workstation setup.
- Zsh → Starship: prompts · Zsh loads the shared prompt theme.
- Zsh → Plugins: loads · Interactive shell behavior depends on plugin setup.
- Zsh → Bash: fallbacks to · Bash provides a simpler non-Zsh session path.
- Tmux → Zsh: supports · Tmux complements the shell-centric workflow.
- Kitty → Zsh: hosts · Kitty is one of the main terminal environments for the shell.
- Alacritty → Zsh: hosts · Archived terminal configuration for the shell workflow.
- Rofi → Zsh: launches from · Launcher config supports the terminal-first desktop workflow.
- YTM Player → Zsh: integrates with · Media client is part of the broader terminal toolkit.
- Helix → Docs: documented by · Editor architecture and language servers are explained in docs.
- VS Code → Docs: documented by · VS Code settings and keybindings have dedicated docs.
- Git → GitHub CLI: pairs with · Git workflow is complemented by GitHub CLI configuration.
- Git → Zsh: used from · Git aliases and hooks are intended for shell-driven daily use.
- Workflows → Install: validates · Workflows check scripts and shell behavior.
- Workflows → Zsh: validates · Shell validation workflow covers interactive shell config.
- Archive → Dotfiles: preserves · Archived configs are historical snapshots rather than active targets.