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 ###########################
##########################################################

tap "homebrew/bundle"
tap "homebrew/services"
tap "hashicorp/tap"
tap "juftin/terraform-docs-recursive", "https://github.com/juftin/terraform-docs-recursive"

##########################################################
####################### 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"
brew "grep"
brew "hashicorp/tap/terraform"
brew "helm"
brew "htop"
brew "hugo"
brew "juftin/terraform-docs-recursive/terraform-docs-recursive"
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 "terraform-docs"
brew "terragrunt"
brew "thefuck"
brew "tree"
brew "wget"
brew "yq"

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

cask "1password", greedy: true
cask "amazon-q", greedy: true
cask "caffeine", greedy: true
cask "cyberduck", greedy: true
cask "docker", 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 "ollama", greedy: true
cask "slack", greedy: true
cask "sourcetree", greedy: true
cask "spotify", greedy: true
cask "syntax-highlight", greedy: true, args: { no_quarantine: true }
cask "visual-studio-code", 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