This repository contains the configurations for various tools and applications I use on a daily basis. It also contains a setup automation that can be used for both fresh installations and subsequent updates, either for all tools or specific ones.
Key features of this setup include:
- Bash-powered: The setup is entirely automated using Bash scripts, ensuring a dependency-free start.
- Idempotence: Running the setup multiple times only installs or applies available updates.
- Symbolic links: By creating symbolic links, the dotfiles repository serves as the single source of truth for all configurations.
- Automatic cleanup: When a configuration is removed from the repository, the setup automatically deletes the corresponding symbolic link, keeping the system clean and error-free.
- Exclusion of ephemeral/sensitive config and data: If a file in the configuration directory is not a symbolic link, it remains untouched during cleanup. This allows maintaining files that are not tracked by version control.
- XDG Base Directory Specification: Configurations and data are stored consistently and predictably according to this standard, where applicable.
- GOPATH:
GOPATH
is used as the base directory for all projects, even non-Go ones, to keep the development environment well organized and ensure easy interoperability. - Homebrew Bundle: Manage system-wide packages using a single file.
- asdf: Handle multiple runtime versions with one tool.
- fish: The shell used for everyday tasks.
- Starship: A prompt for the shell, configured to use plain texts instead of icons.
- tmux: Provides terminal multiplexing and persistent session management.
- Alacritty: The terminal emulator, whose icon is replaced with the default terminal icon in this setup, to keep the visual consistency.
- Native-input-like terminal key bindings: Effective navigation and editing in the terminal with key bindings similar to those found in normal text inputs (e.g., CMD/Option + Arrow/Backspace/Delete).
- Automatic dark/light mode for terminal applications: The terminal appearance adapts automatically based on the system's current theme.
- GNU gls: A replacement for
ls
for consistent outputs across different systems. - Neovim: A lightweight code editor that supports LSP for static analysis and code navigation, allowing me to avoid resource-heavy Electron apps. I have a great respect for Emacs and a kind of sympathy for Helix as well.
- Visual Studio Code: Occasionally used with Neovim integration and zen mode.
- Zen Browser: Offers a calmer web experience, with scalable vertical tabs instead of horizontal ones.
- Jetbrains Mono: The chosen font for the terminal and development tools, with ligatures disabled for improved readability.
- Gruvbox-based color scheme: Although I once favored a monochrome look (similar to Apex UI), I switched to a solarized palette to ease eye strain. Blending it within a botanical-inspired theme, Gruvbox's natural colors makes me feel comfortable.
- yabai: A tiling window manager for macOS, similar to i3 on Linux.
- skhd: Provides effective hotkey management.
- JankyBorders: Adds window borders to yabai. Configured for enhancing the botanical feel.
- SketchyBar: A customizable status bar for macOS. In this setup it is designed to be a minimal menu bar that stays hidden until activated via a key binding.
- No Spotlight: Spotlight indexing is disabled due to privacy concerns as it wasn't clear for me whether the data would be uploaded to the cloud even with Siri turned off (which is the case).
- AltTab: A vertically arranged application switcher that is more scalable than the default horizontal layout and supports multiple windows of the same application.
- A wild, yet, elegant wallpaper from Unsplash.
Additional screenshots can be found in the
screenshots
directory.
The scripts
directory contains all the setup scripts, organized
by the tools they correspond to. The execution process is as follows:
- Loop through numbers 0 to 100, which allows for easy prioritization of scripts.
- For each number, iterate over the subdirectories within the
scripts
folder. - Check if a subdirectory within a
script
folder matches the current iteration number. - If a subdirectory matches the current number, check for and execute the following scripts in order (if they exist):
prepare.sh
pre-configure.sh
configure.sh
post-configure.sh
- After completing the iterations from 0 to 100, repeat the process by
iterating over the
script
subdirectories again and executing any of the above scripts that remain.
The setup will install or update the necessary tools and applications as needed. No manual intervention is required, except for entering the password when prompted (e.g., changing the default shell on fresh installations).
The following command will run the full setup:
bash entrypoint.sh
After the setup completes, a shortcut is created to run the command from any directory:
dotfiles_reload
It is also possible to run the setup for specific tools by passing their names as arguments to the entrypoint script. This is especially useful for updating only certain tools or configurations:
bash entrypoint.sh fish tmux
Alternatively, the shortcut command can be used for this purpose as well:
dotfiles_reload fish tmux
After setup, several commands become available. The most relevant ones are:
brew_bundle
: Install packages listed in theBrewfile
.brew_update
: Update all installed packages, including those in theBrewfile
.dotfiles_reload
: Reload the dotfiles configurations.setenv_prefers_color_scheme
: Set the preferred color scheme (dark or light) for terminal applications.
Many environment variables will be set after running the setup. The most relevant ones are:
DOTFILES
: The path to the dotfiles repository.PREFERS_COLOR_SCHEME
: The user's preferred color scheme (dark or light), which is automatically updated based on the system appearance.