dots/README.md

3.8 KiB

Build Status Dependency Status security

dots

My dot files and a tool to deploy them, and the programs that use them, to various OS's. Some additional tools that I consider part of my baseline setup are also installed and, if possible, configured by dots.

Dots is written in ruby and utilizes bundler to keep all its dependancies as self-contained as possible. Installation of programs and management of git repositories is handled by way of the Puppet gem.

Everything about dots macOS assumes you are running it as a normal user, not as root. Strange and unexpected things could well happen if you run any part of it as root or via sudo while on macOS. That said, sudo is required on Debian due to there not being an equivalent to homebrew as you need sudo to use apt.

Initial Setup

git clone git@github.com:genebean/dots.git ~/.dotfiles
cd ~/.dotfiles
bin/bootstrap.sh
This script takes care of getting dots ready to use
Enter the number of the task you want to perform:
1) Mac setup
2) EL setup
3) Mint setup
4) Quit
Task:

After you run the setup for your OS you will want to make sure that puppet/production/hieradata/nodes/ contains a file matching the hostname of your machine. That file needs to contain at least the following:

---
homedir: '/Users/johndoe'

Naturally, you will want to adjust the entry to match the real path to your home directory. On a Mac this is generally in /Users/ or /home/ on Linux.

Running dots

The primary way to interact with dots is via bundle exec rake dots. This will run an interactive cli program like so:

$ bundle exec rake dots
/usr/local/Cellar/ruby/2.4.1_1/bin/ruby bin/dots.rb
It seems you are on macOS 10.12.5
What would you like to do? (Use arrow keys, press Enter to select)
‣ copy
  link
  install

If not on macOS then you will need to use sudo for the install step:

$ sudo bundle exec rake dots

Additional tasks are available in the dots namespace. You can see all the available tasks via bundle exec rake -T.

Notes

Running Puppet

# Any of these will work:
bundle exec rake dots:run_puppet
bundle exec rake dots:run_puppet_noop
bundle exec puppet apply --environmentpath ~/.dotfiles/puppet ~/.dotfiles/puppet/production/manifests/site.pp

As mentioned above, when not on macOS you will need to prefix bundle with sudo.

Installed Homebrew packages

To see what has been installed (not the deps) run brew leaves

Project structure

  • bin/: this is where the "application" bits live
  • bin/bootstrap: platform specific helpers called by bin/bootstrap.sh
  • copy/: files directly in this directory are copied to all hosts
  • copy/mac/: files in here get copied to Macs
  • copy/nix/: files in here get copied to all Posix systems
  • link/: files directly in this directory are symlinked on all hosts.
    • all symlinks are prefixed with a dot. Ex: link/gemrc becomes ~/.gemrc
  • link/linux/: files in here get symlinked on all Linux distros
  • link/mac/: files in here get symlinked on all Macs
  • link/nix/: files in here get symlinked on all Posix systems
  • link/ssh/: these files get symlinked under ~/.ssh/ on all Posix systems
  • puppet/: this is basically a control repo modified to suit this setup
  • puppet/production/: items from an environment's branch in a control repo
    • this setup assumes Puppet 4 and Hiera 5. Hiera's config is parsed as part of the environment rather than from a global config file.
  • spec/: unit tests go here