My dotfiles in $HOME
automatically managed by chezmoi.
Once you have Xcode installed, open a terminal and run the following to install the required command line developer tools:
xcode-select --install
Homebrew is a package manager for macOS that can be used to install packages that aren't included by Apple.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Install the latest version of Git from Homebrew:
brew install git gpg
Install 1Password password manager from Homebrew:
brew install --cask 1password
After installing, go to "Settings…" → "Developer" → "Set Up SSH Agent…" and make sure the SSH agent and CLI are enabled:
With 1Password CLI, you can automate administrative tasks and load secrets straight from your command line and in your scripts.
brew install --cask 1password/tap/1password-cli
The older bash 3.2 provided by Apple with macOS is not compatible with modern bash completion (e.g. homebrew's bash-completion@2 requires bash 4.2+ and Click requires bash 4.4+). Instead, use a more recent bash + bash completion from home-brew.
brew install bash bash-completion@2
In addition, optionally install the bash language server to enable editor extensions like Bash IDE for VSCode.
# Optional
brew install bash-language-server
On macOS, if you're using a custom shell installed via Homebrew or MacPorts, remember to configure the shell in your terminal preferences.
-
Change the Command preference to the full path of your shell:
-
Add your shell to
/etc/shells
:# List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/dash /bin/ksh /bin/sh /bin/tcsh /bin/zsh /opt/homebrew/bin/bash <-- Add your shell here
-
To use the Terminal.app profile, just double click the
cdwilson.terminal
file in Finder.
Install the dotfiles from this repository using chezmoi.
Important
Make sure to change cdwilson
to your GitHub username!
sh -c "$(curl -fsLS git.io/chezmoi)" -- init --apply cdwilson
Starship is the minimal, blazing-fast, and infinitely customizable prompt for any shell!
Install starship:
# via Homebrew for Mac
brew install starship
Tip
To configure Starship, add your changes to dot_config/starship.toml
.
To install the Monaspace font:
brew install --cask font-monaspace
brew install --cask font-symbols-only-nerd-font
Note
Although Monaspace added nerd fonts in the v1.200
release, it does not contain some of the symbols that the font-symbols-only-nerd-font
font does. In addition, the nerd fonts bundled with with Monaspace are scaled so they fit within the monospaced "box", resulting in smaller icons.
To avoid these issues, the Monaspace Neon Frozen
is used (which does not contain any Nerd Fonts) and Symbols Nerd Font
is configured as a fallback font which provides the Nerd Font icons. Terminals that do not provide a fallback font configuration option (e.g. macOS Terminal.app & GNOME Terminal) are configured to use a simplified prompt which does not use Nerd Fonts.
Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.
brew install --cask ghostty
Tip
To configure Ghostty, add your changes to dot_config/ghostty/config.tmpl
.
iTerm2 is a replacement for Terminal and the successor to iTerm.
-
Install iTerm2 via Homebrew:
brew install --cask iterm2
-
Install Homebrew Bash (ARM) profile from
macOS/iTerm2/profiles/Homebrew Bash (ARM).json
: -
Install the
base16-tomorrow-night
color profile frommacOS/iTerm2/color_presets/base16-tomorrow-night.itermcolors
:
uv is an extremely fast Python package and project manager, written in Rust.
curl -LsSf https://astral.sh/uv/install.sh | sh
direnv lets you easily load and unload environment variables depending on the current directory.
brew install direnv
rbenv is a version manager that lets you easily install and switch between multiple versions of Ruby.
-
Install dependencies for building Ruby:
brew install openssl readline
-
Install
rbenv
using the Basic GitHub Checkout instructions (I'm not using rbenv-installer because I don't want rbenv installed via Homebrew on macOS):git clone https://github.com/rbenv/rbenv.git ~/.rbenv
-
Optionally, try to compile dynamic bash extension to speed up rbenv. Don't worry if it fails; rbenv will still work normally:
cd ~/.rbenv && src/configure && make -C src
-
Install ruby-build plugin that lets you easily install Ruby versions:
mkdir -p "$(rbenv root)"/plugins git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
-
Verify the state of your rbenv installation:
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor | bash
eza is a modern, maintained replacement for ls.
brew install eza
ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern.
brew install ripgrep
bat is a cat(1) clone with syntax highlighting and Git integration.
brew install bat
fzf is a general-purpose command-line fuzzy finder.
brew install fzf
fastfetch is a maintained, feature-rich and performance oriented, neofetch like system information tool.
brew install fastfetch
Update package information from the package repository and install dependencies:
sudo apt update
sudo apt upgrade
sudo apt install curl
sudo locale-gen en_US.UTF-8
# Optional: install a GUI desktop on a server image
sudo apt install ubuntu-desktop
sudo apt install gnome-software
Install the latest version of Git from the package repository:
sudo apt install git gpg
curl -sS https://downloads.1password.com/linux/keys/1password.asc | sudo gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] https://downloads.1password.com/linux/debian/$(dpkg --print-architecture) stable main" | sudo tee /etc/apt/sources.list.d/1password.list
sudo mkdir -p /etc/debsig/policies/AC2D62742012EA22/
curl -sS https://downloads.1password.com/linux/debian/debsig/1password.pol | sudo tee /etc/debsig/policies/AC2D62742012EA22/1password.pol
sudo mkdir -p /usr/share/debsig/keyrings/AC2D62742012EA22
curl -sS https://downloads.1password.com/linux/keys/1password.asc | sudo gpg --dearmor --output /usr/share/debsig/keyrings/AC2D62742012EA22/debsig.gpg
sudo apt update && sudo apt install 1password
cd ~/Downloads
curl -sSO https://downloads.1password.com/linux/tar/stable/aarch64/1password-latest.tar.gz
tar -xf 1password-latest.tar.gz
sudo mkdir -p /opt/1Password
sudo mv 1password-*/* /opt/1Password
sudo /opt/1Password/after-install.sh
cd ~
mkdir ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/config
cd /usr/share/applications/
sudo ln -s /opt/1Password/resources/1password.desktop 1password.desktop
cd /usr/share/icons/hicolor/256x256/apps/
sudo ln -s /opt/1Password/resources/icons/hicolor/256x256/apps/1password.png 1password.png
cd /usr/share/icons/hicolor/32x32/apps/
sudo ln -s /opt/1Password/resources/icons/hicolor/32x32/apps/1password.png 1password.png
cd /usr/share/icons/hicolor/512x512/apps/
sudo ln -s /opt/1Password/resources/icons/hicolor/512x512/apps/1password.png 1password.png
cd /usr/share/icons/hicolor/64x64/apps/
sudo ln -s /opt/1Password/resources/icons/hicolor/64x64/apps/1password.png 1password.png
sudo gtk-update-icon-cache /usr/share/icons/hicolor
After installing, go to "Settings…" → "Developer" → "Set Up SSH Agent…" and make sure the SSH agent and CLI are enabled:
With 1Password CLI, you can automate administrative tasks and load secrets straight from your command line and in your scripts.
curl -sS https://downloads.1password.com/linux/keys/1password.asc | sudo gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] https://downloads.1password.com/linux/debian/$(dpkg --print-architecture) stable main" | sudo tee /etc/apt/sources.list.d/1password.list
sudo mkdir -p /etc/debsig/policies/AC2D62742012EA22/
curl -sS https://downloads.1password.com/linux/debian/debsig/1password.pol | sudo tee /etc/debsig/policies/AC2D62742012EA22/1password.pol
sudo mkdir -p /usr/share/debsig/keyrings/AC2D62742012EA22
curl -sS https://downloads.1password.com/linux/keys/1password.asc | sudo gpg --dearmor --output /usr/share/debsig/keyrings/AC2D62742012EA22/debsig.gpg
sudo apt update && sudo apt install 1password-cli
op --version
Install the dotfiles from this repository using chezmoi.
Important
Make sure to change cdwilson
to your GitHub username!
sh -c "$(curl -fsLS git.io/chezmoi)" -- init --apply cdwilson
Starship is the minimal, blazing-fast, and infinitely customizable prompt for any shell!
Install starship:
curl -sS https://starship.rs/install.sh | sh
Tip
To configure Starship, add your changes to dot_config/starship.toml
.
To install the Monaspace font:
cd ~/Downloads
wget https://github.com/githubnext/monaspace/releases/download/v1.200/monaspace-v1.200.zip
mkdir -p ~/.local/share/fonts
unzip monaspace-v1.200.zip
cd monaspace-v1.200/
bash util/install_linux.sh
cd -
rm -rf monaspace-v1.200/
fc-cache -fv
To install the Symbols Nerd Font
font from Nerd Fonts:
cd ~/Downloads
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.3.0/NerdFontsSymbolsOnly.zip
mkdir -p ~/.local/share/fonts
unzip NerdFontsSymbolsOnly.zip -d ~/.local/share/fonts/
fc-cache -fv
Note
Although Monaspace added nerd fonts in the v1.200
release, it does not contain some of the symbols that the font-symbols-only-nerd-font
font does. In addition, the nerd fonts bundled with with Monaspace are scaled so they fit within the monospaced "box", resulting in smaller icons.
To avoid these issues, the Monaspace Neon Frozen
is used (which does not contain any Nerd Fonts) and Symbols Nerd Font
is configured as a fallback font which provides the Nerd Font icons. Terminals that do not provide a fallback font configuration option (e.g. macOS Terminal.app & GNOME Terminal) are configured to use a simplified prompt which does not use Nerd Fonts.
-
To use the Monaspace font:
-
To use the Base16 Tomorrow Night color scheme, install https://github.com/aarowill/base16-gnome-terminal:
sudo apt install gconf2 uuid-runtime git clone https://github.com/aaron-williamson/base16-gnome-terminal.git ~/.config/base16-gnome-terminal # a new profile needs to be created in the terminal preferences UI before running the next command, otherwise it will appear to do nothing (it can be deleted afterwards) ~/.config/base16-gnome-terminal/color-scripts/base16-tomorrow-night.sh
-
Make sure the "Run command as a login shell" is checked to ensure that
.bash_profile
is sourced:
Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.
sudo apt install libonig5
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/mkasberg/ghostty-ubuntu/HEAD/install.sh)"
Tip
To configure Ghostty, add your changes to dot_config/ghostty/config.tmpl
.
uv is an extremely fast Python package and project manager, written in Rust.
curl -LsSf https://astral.sh/uv/install.sh | sh
direnv lets you easily load and unload environment variables depending on the current directory.
sudo apt install direnv
rbenv is a version manager that lets you easily install and switch between multiple versions of Ruby.
-
Install dependencies for building Ruby:
# Depending on your version of Ubuntu, libgdbm6 won't be available. # In that case, try an earlier version such as libgdbm5. sudo apt install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev
-
Install
rbenv
using the Basic GitHub Checkout instructions (I'm not using rbenv-installer because I don't want rbenv installed via Homebrew on macOS):git clone https://github.com/rbenv/rbenv.git ~/.rbenv
-
Optionally, try to compile dynamic bash extension to speed up rbenv. Don't worry if it fails; rbenv will still work normally:
cd ~/.rbenv && src/configure && make -C src
-
Restart the shell to make sure
rbenv
is availablerbenv --version
-
Install ruby-build plugin that lets you easily install Ruby versions:
mkdir -p "$(rbenv root)"/plugins git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
-
Verify the state of your rbenv installation:
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor | bash
eza is a modern, maintained replacement for ls.
First make sure you have the gpg
command, and otherwise install it via:
sudo apt update
sudo apt install -y gpg
Then install eza
via:
sudo mkdir -p /etc/apt/keyrings
wget -qO- https://raw.githubusercontent.com/eza-community/eza/main/deb.asc | sudo gpg --dearmor -o /etc/apt/keyrings/gierens.gpg
echo "deb [signed-by=/etc/apt/keyrings/gierens.gpg] http://deb.gierens.de stable main" | sudo tee /etc/apt/sources.list.d/gierens.list
sudo chmod 644 /etc/apt/keyrings/gierens.gpg /etc/apt/sources.list.d/gierens.list
sudo apt update
sudo apt install -y eza
ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern.
sudo apt install ripgrep
bat is a cat(1) clone with syntax highlighting and Git integration.
sudo apt install bat
Important
Note that the executable may be installed as batcat
instead of bat
(due to a name clash with another package). You can set up a bat
-> batcat
symlink or alias to prevent any issues that may come up because of this and to be consistent with other distributions:
mkdir -p ~/.local/bin
ln -s /usr/bin/batcat ~/.local/bin/bat
fzf is a general-purpose command-line fuzzy finder.
# Installing via apt currently installs fzf < 0.48.0 which is needed for the --bash option
# sudo apt install fzf
# Instead, install the latest version from GitHub via go install
# TODO: switch back to the apt method once the Ubuntu fzf package is updated >= 0.48.0
sudo apt install golang-go
go install github.com/junegunn/fzf@latest
fastfetch is a maintained, feature-rich and performance oriented, neofetch like system information tool.
sudo add-apt-repository ppa:zhangsongcui3371/fastfetch
sudo apt update
sudo apt install fastfetch
This allows git commits made via the GitHub web UI to be verified locally (e.g. git verify-commit <commit>
:
curl https://github.com/web-flow.gpg | gpg --import
gpg --edit-key [email protected] trust quit # choose option 5 = I trust ultimately
pre-commit is a framework for managing git pre-commit hooks.
uv tool install pre-commit
# automatically enabling pre-commit on repositories
# https://pre-commit.com/#automatically-enabling-pre-commit-on-repositories
pre-commit init-templatedir ~/.git-template
This repository is compliant with version 3.2 of the REUSE Specification.
License files are contained in the LICENSES/ directory and additional copyright & license information can be found in REUSE.toml.
Install the reuse tool and run the following commands for detailed copyright & license information on individual files:
reuse spdx