Skip to content

Dependencies#

Almost all of the dependencies in this project are managed via a file themselves. For macOS, we use a Homebrew Brewfile. In Linux, an Aptfile is used.

These files are located in the dotfiles directory under macos and linux, respectively.

Installation#

The dotfiles deps command will install the right dependencies for the current operating system. See the macOS and Linux sections for the manual installation steps.

dotfiles deps

Linux#

bash ~/.dotfiles/bin/aptfile ~/.dotfiles/linux/Aptfile
📄 Aptfile

#!/usr/bin/env aptfile

update

##########################################################
########################## CORE ##########################
##########################################################

package "dialog"
package "apt-utils"
package "software-properties-common"
package "build-essential"
package "git"
package "curl"
package "wget"
package "gettext"
package "cmake"
package "unzip"
package "ninja-build"

##########################################################
####################### UTILITIES ########################
##########################################################

package "bat"
package "direnv"
package "fzf"
package "gh"
package "git-lfs"
package "grep"
package "htop"
package "jq"
package "make"
package "nano"
package "pipx"
package "ripgrep"
package "tree"

##########################################################
#################### PYTHON + PYENV ######################
##########################################################

package "libssl-dev"
package "zlib1g-dev"
package "libbz2-dev"
package "libreadline-dev"
package "libsqlite3-dev"
package "curl"
package "libncursesw5-dev"
package "xz-utils"
package "tk-dev"
package "libxml2-dev"
package "libxmlsec1-dev"
package "libffi-dev"
package "liblzma-dev"

Non-Debian Distributions

Not all Linux distributions use apt-get as their package manager. If you are using a dnf / yum based distribution, the dependencies are enumerated in different files.

📄 Yumfile
#!/usr/bin/env bash

set -e

if command -v dnf &>/dev/null; then
    PACKAGE_MANAGER="dnf"
elif command -v yum &>/dev/null; then
    PACKAGE_MANAGER="yum"
else
    echo "dnf/yum not detected, exiting ❌"
    exit 1
fi

##########################################################
########################## CORE ##########################
##########################################################

${PACKAGE_MANAGER} install --allowerasing -y \
    dialog \
    apt-utils \
    git \
    curl \
    wget \
    gettext \
    cmake \
    unzip \
    ninja-build

##########################################################
####################### UTILITIES ########################
##########################################################

${PACKAGE_MANAGER} install -y \
    bat \
    direnv \
    fzf \
    gh \
    git-lfs \
    grep \
    htop \
    jq \
    make \
    nano \
    pipx \
    ripgrep \
    tree \
    neovim

##########################################################
#################### PYTHON + PYENV ######################
##########################################################

${PACKAGE_MANAGER} install -y \
    gcc \
    make \
    patch \
    zlib-devel \
    bzip2 \
    bzip2-devel \
    readline-devel \
    sqlite \
    sqlite-devel \
    openssl-devel \
    tk-devel \
    libffi-devel \
    xz-devel
📄 AmazonLinuxfile
#!/usr/bin/env bash

set -e

if command -v dnf &>/dev/null; then
    PACKAGE_MANAGER="dnf"
elif command -v yum &>/dev/null; then
    PACKAGE_MANAGER="yum"
else
    echo "dnf/yum not detected, exiting ❌"
    exit 1
fi

##########################################################
########################## CORE ##########################
##########################################################

${PACKAGE_MANAGER} install --allowerasing -y \
    git \
    curl \
    wget \
    gettext \
    cmake \
    unzip \
    ninja-build

##########################################################
####################### UTILITIES ########################
##########################################################

${PACKAGE_MANAGER} install -y \
    gh \
    git-lfs \
    grep \
    htop \
    jq \
    make \
    nano \
    tree

# direnv
# fzf
# pipx
# ripgrep

##########################################################
#################### PYTHON + PYENV ######################
##########################################################

${PACKAGE_MANAGER} install -y \
    gcc \
    make \
    patch \
    zlib-devel \
    bzip2 \
    bzip2-devel \
    readline-devel \
    sqlite \
    sqlite-devel \
    openssl-devel \
    tk-devel \
    libffi-devel \
    xz-devel

macOS#

brew bundle --file ~/.dotfiles/macos/Brewfile
dotfiles brew-bundle
📄 Brewfile

##########################################################
######################### TAPS ###########################
##########################################################

##########################################################
####################### UTILITIES ########################
##########################################################

brew "asdf"
brew "bat"
brew "ca-certificates"
brew "checkov"
brew "coreutils"
brew "curl"
brew "direnv"
brew "ffmpeg"
brew "fzf"
brew "gh"
brew "git"
brew "git-lfs"
brew "glances"
brew "gnupg"
brew "go"
brew "go-task/tap/go-task"
brew "grep"
brew "hashicorp/tap/terraform"
brew "helm"
brew "htop"
brew "hugo"
brew "jc"
brew "jq"
brew "k9s"
brew "libomp"
brew "make"
brew "nano"
brew "neovim"
brew "node"
brew "nvm"
brew "openjdk"
brew "pipx"
brew "ripgrep"
brew "sops"
brew "starship"
brew "terraform-docs"
brew "terragrunt"
brew "thefuck"
brew "tree"
brew "wget"
brew "yq"
brew "zoxide"

##########################################################
######################### CASKS ##########################
##########################################################

cask "1password", greedy: true
cask "amazon-q", greedy: true
cask "caffeine", greedy: true
cask "cyberduck", greedy: true
cask "docker-desktop", greedy: true
cask "elgato-stream-deck", greedy: true
cask "ghostty", greedy: true
cask "github", greedy: true
cask "google-chrome", greedy: true
cask "hammerspoon", greedy: true
cask "iterm2", greedy: true
cask "jetbrains-toolbox", greedy: true
cask "lens", greedy: true
cask "logi-options+", greedy: true
cask "maccy", greedy: true
cask "ollama-app", greedy: true
cask "slack", greedy: true
cask "sourcetree", greedy: true
cask "spotify", greedy: true
cask "visual-studio-code", greedy: true
cask "vivaldi", greedy: true
cask "vlc", greedy: true
cask "zoom", greedy: true

##########################################################
######################### FONTS ##########################
##########################################################

cask "font-fontawesome", greedy: true
cask "font-meslo-lg-nerd-font", greedy: true

##########################################################
#################### PYTHON + PYENV ######################
##########################################################

brew "openssl"
brew "readline"
brew "sqlite3"
brew "tcl-tk"
brew "xz"
brew "zlib"

Cleanup#

After installing the dependencies, you can run the cleanup command to remove any non-specific dependencies. Add the --force flag to actually remove the packages.

brew bundle cleanup --file ~/.dotfiles/macos/Brewfile
dotfiles brew-cleanup
dotfiles brew-cleanup-force

x86 macOS#

This project uses x86 emulation via Rosetta 2 on Apple Silicon Macs. Any x86 specific dependencies will be installed via the XBrewfile:

xbrew bundle --file ~/.dotfiles/macos/XBrewfile
dotfiles xbrew-bundle

Python#

This project uses pipx to install Python CLI tools globally. It also includes a pipx-utils executable to help manage these tools on a single PipFile:

pipx-utils install-file ~/.dotfiles/python/PipFile
dotfiles pipx-install-all
📄 PipFile

aws-sso-util
awsume[fuzzy,console]
browsr[remote]
camply[all]
cookiecutter
dunk
dvc
elia-chat
hatch
hatch-pip-compile
httpie
jupyterlab
ipython
llm
llm-term[all]
lunchable[all]
pdm
pls
poetry
pre-commit
pyright
rich-cli
ruff
toolong