My personal OSX setup.
The setup contains configurations for various tools and applications that I use mostly on a daily basis. These are the key features of the setup:
- Run the automation for either the entire setup or specific tools.
- Idempotent scripts. Suitable for both initial setup and updates.
- Configurations are applied using symbolic links.
- Unused configurations (broken symlinks) are removed automatically.
- XDG Base Directory Specification for user directories.
- Ephemeral/sensitive config/data can be enabled without being tracked by Git.
- Homebrew Bundle for managing system-wide packages.
- asdf for managing runtime versions.
- Bash scripts for the entire setup automation.
- fish shell for daily use.
- Starship as the shell prompt, without icons.
- tmux for terminal multiplexing.
- Alacritty as the terminal emulator.
- Native input like key bindings and motions for the terminal (e.g. CMD/Option + Arrow/Backspace/Delete).
- Automatic dark/light mode for terminal applications.
- GNU gls as the
ls
replacement, for directory listing with consistent speed. - Neovim as the code editor.
- Visual Studio Code with Neovim integration as the IDE.
- Zen Browser for a calmer experience on the web.
- Jetbrains Mono as the font, with ligatures disabled.
- Gruvbox based color scheme. I used to use monochrome color scheme like Apex UI for a long time, but I switched to a solarized one for my eyes. Although I miss the monochrome look a lot, blending it within a botanical theme, Gruvbox makes me feel comfortable with its natural colors.
- yabai as the tiling window manager.
- skhd for hotkey management.
- JankyBorders for window borders.
- SketchyBar for a minimal menu. In this setup it's mostly hidden and only appears when needed, with a key binding.
- No spotlight due to some privacy concerns.
- AltTab for a better application switching experience.
- A wild, yet, elegant wallpaper from Unsplash.
- Screenshots available in the
assets/screenshots
directory.
The scripts
directory contains all the scripts used during
setup, organized based on the tools they correspond to. The execution process
follows these steps:
- Loop through numbers from 0 to 100, this allows for easy prioritization of scripts.
- Iterate over the subdirectories within the
scripts
directory. - Check if a subdirectory matches the current iteration number.
- If a matching subdirectory is found, check for the following scripts and execute them in order if they exist:
prepare.sh
pre-configure.sh
configure.sh
post-configure.sh
- After completing 100 iterations, iterate over the subdirectories again and check for the following scripts and execute them in order if they exist:
prepare.sh
pre-configure.sh
configure.sh
post-configure.sh
No prerequisites are required, except having an internet connection and cloning the repository. The setup will install the necessary tools and applications or update them if they are already installed and outdated.
The following command will run the entire setup.
bash entrypoint.sh
Once the setup is complete, a shortcut will be created for the command above to make it accessible from any working directory.
dotfiles_reload
The setup can be run partially for specific tools by passing the tool names as arguments to the entrypoint script. This is useful for updating specific tools or configurations.
bash entrypoint.sh fish tmux
The shortcut can also be used for partial setups.
dotfiles_reload fish tmux
These are some of the commands available after the setup:
brew_bundle
: Install packages from theBrewfile
.brew_update
: Update all installed packages, including the ones from theBrewfile
.dotfiles_reload
: Reload the dotfiles setup.pgrep_kill
: Send a signal to a process by name.
After running the setup, many environment variables will be set. The full list
can be observed in the config/fish/conf.d
directory.
The most relevant ones are:
DOTFILES
: The path to the dotfiles repository.PREFERS_COLOR_SCHEME
: The user's preferred color scheme (dark/light). This is set based on the system appearance and gets updated automatically when the system appearance changes.