A highly-configurable, cross-platform dotfiles setup built with:
- ✅ Idempotent, modular shell scripts
- 🐳 Docker test harness
- 🧪 Bash-based assertions
- 📦 Easy packaging
- ⚙️ GitHub Actions CI ready
N.B. This project has a Code of Conduct. By interacting with this repository, organization, and/or community you agree to abide by its terms.
Typically software you buy comes with some sort of installer, why not your dotfiles? Here's a one-liner to get you up and running.
$ /bin/bash -c "$(curl -#fL https://raw.githubusercontent.com/iamnewton/dotfiles/main/bin/install)"If you prefer to download, inspect and run, you can use the following process.
Ensure that you have the following dependencies installed on your system. If you're on MacOS then you already have these, but a Linux system may not come with all.
- curl – Command-line tool for transferring data with URLs (supports HTTP, FTP, and many more)
- git – Distributed version control system
- sudo – Execute commands as another user (commonly root)
- bash – GNU Bourne Again SHell
- ca-certificates – Common CA certificates (Debian/Ubuntu package)
- software-properties-common – Manage apt repositories (Ubuntu)
- build-essential – Package with compiler and build tools for Debian/Ubuntu
- unzip – Extract .zip archives
git clone https://github.com/iamnewton/dotfiles $HOME/.local/lib/dotfiles
cd $HOME/.local/lib/dotfiles
make install;❗ N.B. If you wish to fork this project and maintain your own dotfiles, you MUST substitute my username for your own in the above command and the variable ($USERNAME) found at the top of the bin/install.sh script.
The script supports the following environment variables:
| Variable | Description |
|---|---|
DOTFILES_NONINTERACTIVE |
Set to 1 to skip all prompts |
GIT_AUTHOR_NAME |
Default Git author name |
GIT_AUTHOR_EMAIL |
Default Git author email |
DOTFILES_MACOS_APPS |
y or n to enable/disable macOS apps |
GNUPGHOME |
Override GPG key directory |
DEBUG |
Set to true for verbose output |
You can pass them inline:
DOTFILES_NONINTERACTIVE=1 DEBUG=true make installTo test the installation in a sandbox:
make dockerThis builds a container, runs the installer inside it, and prints results. Useful for local testing before pushing.
All logs are written to:
$HOME/.local/state/dotfiles/install.logUse make logs to inspect them.
To test your changes before submitting a PR:
make docker
make testInspiration and code was taken from many sources, including (in lexicographical order):
- @holman (Zach Holman) https://github.com/holman/dotfiles
- @mathiasbynens (Mathias Bynens) https://github.com/mathiasbynens/dotfiles
- @necolas (Nicolas Gallagher) https://github.com/necolas/dotfiles