Skip to content

iamnewton/dotfiles

🛠 dotfiles(1)

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.

🚀 Installation

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)"

Manual Installation

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.

🔐 Environment Variables

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 install

🐳 Run in Docker

To test the installation in a sandbox:

make docker

This builds a container, runs the installer inside it, and prints results. Useful for local testing before pushing.

📁 Output Logs

All logs are written to:

$HOME/.local/state/dotfiles/install.log

Use make logs to inspect them.

🧪 Testing

To test your changes before submitting a PR:

make docker
make test

Acknowledgements

Inspiration and code was taken from many sources, including (in lexicographical order):

About

UNIX-based system configuration for software development

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Contributors 2

  •  
  •