A collection of heavily opinionated terminal configurations for personalized development environment. These settings reflect my preferred tools and workflows. Feel free to explore, use, and adapt them to your own needs.
This setup is designed for macOS and is not intended for use on other operating systems.
The current configuration of dotfiles employs a variety of tools, each contributing to a sophisticated development environment. Some of the tools included:
- Oh-My-Zsh: A community-driven framework for managing Zsh configuration, which includes helpful features such as plugin and theme support.
- Tmux: A terminal multiplexer that enables multiple terminal sessions within a single window.
- Vim: A highly configurable text editor built to facilitate efficient text editing.
- Git: A distributed version control system used to track changes in source code during software development.
- Atuin: A replacement for shell's history that syncs across multiple machines and provides advanced features like search and analytics.
The setup is flexible and can easily accommodate the integration of additional plugins as per the user's requirements.
- Clone the repository and navigate into the directory
git clone https://github.com/janezlapajne/dotfiles.git ~/.dotfiles
cd ~/.dotfiles- Setup environment variables
The configuration is driven by environment variables. Create a .env file from the template:
tail -n +7 .env.example > .envEdit the .env file with your values. For detailed guidance, refer to the Configuration section.
- Run the setup script
./setup.shThis script will:
- Install uv (fast Python package manager) if not already available
- Install the
dotCLI tool viauv tool install - Run the full bootstrap (
dot --setup): install Homebrew packages, run all modules, and create symlinks
After the initial setup, the dot command is available globally:
dot # Update: git pull, install packages, run module installs
dot --setup # Full bootstrap: install, setup, and symlink everything
dot --symlink-only # Only create dotfile symlinks
dot -e/--edit # Open dotfiles config directory in your editor
dot --env-update # Regenerate .env.example from current .envTo ensure correct configuration, define the environment variables in your .env file.
GIT_NAME: Name to appear in Git commits.GIT_EMAIL: Email to appear in Git commits.GIT_CREDENTIAL_HELPER: The path to the Git credential helper executable. This is used by Git to remember the credentials.
Example:
GIT_NAME=name
GIT_EMAIL=email@example.com
GIT_CREDENTIAL_HELPER=osxkeychain
ATUIN_USERNAME: Atuin username.ATUIN_EMAIL: The email address associated with Atuin account.ATUIN_PASSWORD: The password for Atuin account.ATUIN_KEY: (Optional) Atuin key, used for syncing shell history across devices.
Example:
ATUIN_USERNAME=name
ATUIN_EMAIL=email@example.com
ATUIN_PASSWORD=password
ATUIN_KEY=
If you encounter issues logging in to Atuin during setup, you can manually authenticate by following the steps on the Atuin docs page.
SSH_EMAIL: The email address used when generating SSH key.SSH_PASSPHRASE: (Optional) The passphrase for SSH key.
Example:
SSH_EMAIL=email@example.com
SSH_PASSPHRASE=
Alternatively, if you already have an SSH key, you can copy your private key to ~/.ssh/id_rsa and your public key to ~/.ssh/id_rsa.pub.
TERMINAL_THEME_STARSHIP: (Optional) Bool value whether to use starship theme.
Example:
TERMINAL_THEME_STARSHIP=true
β Note: For optimal usage of the
starshiptheme in both the terminal and Visual Studio Code, it is recommended to install theFiraCode Nerd Font(installed automatically via Homebrew cask during setup).To use the font in Visual Studio Code:
- Open the settings (File > Preferences > Settings or
Ctrl + ,).- Search for
terminal.integrated.fontFamily.- Set the value to
FiraCode Nerd Font.
.dotfiles/
β
βββ setup.sh -> Bootstrap script (installs uv + dot CLI)
βββ pyproject.toml -> Python project config (dependencies, CLI entry point)
βββ uv.lock -> Dependency lock file
βββ .env -> Configuration variables (user-specific, not committed)
βββ .env.example -> Template for .env
βββ .python-version -> Python version specification
β
βββ src/ -> Python source code
β βββ cli/ -> CLI application
β β βββ app.py -> Main entry point (dot command)
β β βββ config.py -> Configuration management
β β βββ symlinks.py -> Symlink creation with conflict resolution
β β βββ packages.py -> Homebrew package management
β β βββ env.py -> .env.example generation
β β βββ runner.py -> Subprocess runner utilities
β β βββ log.py -> Rich-based logging
β β
β βββ modules/ -> Pluggable installation modules
β β βββ base.py -> Abstract base class (DotfileModule)
β β βββ ... -> Modules for other tools
β β
β βββ main.py -> Entry point
β
βββ conf/ -> Configuration and dotfiles
β βββ packages.toml -> Homebrew packages and casks to install
β βββ symlinks.toml -> Symlink mappings (source -> $HOME)
β β
β βββ bin/ -> Utility scripts (added to $PATH)
β β βββ ...
β β
β βββ functions/ -> Zsh functions (added to $PATH)
β β βββ ...
β β
β βββ dotfiles/ -> Files symlinked to $HOME
β βββ zsh/ -> .zshrc, config, OMZ init
β βββ .../
β
βββ docs/ -> Documentation and images
Each tool is managed by a self-contained Python module in src/modules/. Modules inherit from DotfileModule and implement:
install()β installation logic (run on both setup and update)setup()β interactive configuration (run only during full setup)
Modules are executed in the following order (Zsh first as a dependency, then alphabetical)
- conf/bin/: Executable scripts added to
$PATH, accessible from anywhere. - conf/functions/: Zsh functions added to
$PATH, usable globally. - conf/dotfiles/**/*.zsh: Files with a
.zshextension are loaded into the shell environment. - conf/dotfiles/**/path.zsh: Loaded first β expected to set up
$PATHor similar environment variables. - conf/dotfiles/**/completion.zsh: Loaded last β expected to set up autocomplete.
- conf/packages.toml: Homebrew packages and casks to install.
- conf/symlinks.toml: Declares which dotfiles are symlinked to
$HOME(or custom targets).
This work was inspired by the dotfiles project by Zach Holman. Moreover, this project directly incorporates certain code snippets and design patterns for enhanced functionality.
