My dot files and a tooling to deploy them to various OS's
Find a file
dependabot-preview[bot] d250ca98e9
Bump tty-file from 0.8.0 to 0.9.0
Bumps [tty-file](https://github.com/piotrmurach/tty-file) from 0.8.0 to 0.9.0.
- [Release notes](https://github.com/piotrmurach/tty-file/releases)
- [Changelog](https://github.com/piotrmurach/tty-file/blob/master/CHANGELOG.md)
- [Commits](https://github.com/piotrmurach/tty-file/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 10:29:58 +00:00
.bundle Reworked to use Ruby since its needed for Puppet 2017-05-07 09:01:12 -07:00
.dependabot Add Dependabot config 2019-12-26 21:24:26 -05:00
bin Rubocop "fixes" 2019-12-26 20:40:20 -05:00
copy Added Araxis integration to sample .gitconfig 2019-05-03 23:26:18 -04:00
link Add user config for ssh'ing to beanbag 2019-12-27 09:00:23 -05:00
puppet/production Updated based on puppet-lint gem update 2019-12-26 21:17:16 -05:00
.gitignore Ignore more config files 2019-12-27 09:00:20 -05:00
.puppet-lint.rc Tests work better when a Rakefile is present... 2017-05-07 09:09:25 -07:00
.rspec Tests work better when a Rakefile is present... 2017-05-07 09:09:25 -07:00
.rubocop.yml Rubocop "fixes" 2019-12-26 20:40:20 -05:00
.ruby-version Reworked to use Ruby since its needed for Puppet 2017-05-07 09:01:12 -07:00
.travis.yml Update ruby version and gems 2019-12-26 19:42:56 -05:00
DevelopmentPlan.md Lots of updates :) 2017-06-04 23:56:56 -07:00
Gemfile Bump tty-file from 0.8.0 to 0.9.0 2020-04-29 10:29:58 +00:00
Gemfile.lock Bump tty-file from 0.8.0 to 0.9.0 2020-04-29 10:29:58 +00:00
LICENSE Initial commit 2017-05-05 22:38:42 -07:00
r10k.yaml Reworked to use Ruby since its needed for Puppet 2017-05-07 09:01:12 -07:00
Rakefile Rubocop "fixes" 2019-12-26 20:40:20 -05:00
README.md Update badges 2020-01-06 22:58:47 -05:00
Vagrantfile Rubocop "fixes" 2019-12-26 20:40:20 -05:00

dots

Build Status Dependency Status security

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.

Currently Supported OS's

  • macOS
  • Linux Mint 18.2

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

Adding Packages

To add additional pacakages to be installed and managed by dots you will need to edit the associated Puppet manifest. Currently, this consists of the following:

puppet/production/site/profile/manifests/
├── base.pp
├── linux
│   └── debian.pp
├── linux.pp
└── mac.pp

On macOS you can easily install packages and casks from homebrew or Python modules from pip. On Linux Mint you can easily use any package provider that supports Debian or Ubuntu since all installs are done via sudo. On both platforms you can also use custom exec's to to work around limitations. For example, an exec is used on Mint to set the shell to zsh and on both platforms to install or update the powerline fonts.

Puppet Customizations

This repo also contains some custom facts and functions under puppet/production/site/custom_libs:

Facts

  • os_release: this creates a structured fact out of the contents of /etc/os-release on Linux systems. This info is needed on Mint to determine what version of Ubuntu it is based on.

Functions

  • find_group: returns the owning group's GID as a string for the file or folder at a given path
  • find_owner: returns the owning user's UID as a string for the file or folder at a given path