Skip to content
/ dotfiles Public

My personal setup: A minimal design with a botanical-inspired theme.

License

Notifications You must be signed in to change notification settings

ertgl/dotfiles

Repository files navigation

dotfiles

Terminal


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.

Features

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.

Scripts

The scripts directory contains all the setup scripts, organized by the tools they correspond to. The execution process is as follows:

  1. Loop through numbers 0 to 100, which allows for easy prioritization of scripts.
  2. For each number, iterate over the subdirectories within the scripts folder.
  3. Check if a subdirectory within a script folder matches the current iteration number.
  4. 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
  1. 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.

Running the setup

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

Partial setup

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

Commands

After setup, several commands become available. The most relevant ones are:

  • brew_bundle: Install packages listed in the Brewfile.
  • brew_update: Update all installed packages, including those in the Brewfile.
  • dotfiles_reload: Reload the dotfiles configurations.
  • setenv_prefers_color_scheme: Set the preferred color scheme (dark or light) for terminal applications.

Environment variables

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.

Resources