
Dotfiles are your Digital Backpack - jpzk
http://www.madewithtea.com/dotfiles-are-your-digital-backpack.html
======
fps
Many programs (like git) respect the environment variable $XDG_CONFIG_HOME,
which allows you to set the location of your 'dotfiles' to a different
directory session-wide. This means you don't need to make your entire home
directory a single git repo.

My dotfiles repo
([https://github.com/fredsmith/dotfiles/](https://github.com/fredsmith/dotfiles/))
uses this to maintain a clean, readable configuration directory that doesn't
mess up my homedir with a bunch of symlinks, and the only installation I have
to do is: "ln -s ~/dotfiles/bashrc .bashrc"

~~~
eikenberry
What do you do to deal with programs (like vim) that don't respect XDG?

~~~
Tiksi
For my "traveling" config, I have this in my .zshrc, it'll work in .bashrc
too:

    
    
      export VIMRUNTIME=$HOME/.local/vim/
      alias vim="vim -u $HOME/.local/vim/vimrc"

------
olalonde
I've been using rcm
([https://github.com/thoughtbot/rcm](https://github.com/thoughtbot/rcm)) for
managing my dotfiles and strongly recommend it. It works by symlinking
everything from your dotfiles directory to your home directory and gets out of
the way. You can also do more advanced stuff like run "hook" scripts at first
install or only install a subset of dotfiles using tags. Here's my rcm repo in
case anyone is curious:
[https://github.com/olalonde/dotfiles](https://github.com/olalonde/dotfiles)

~~~
Doches
A different solution, that's a little more embedded in the Github and Ruby
world: homesick
([https://github.com/technicalpickles/homesick](https://github.com/technicalpickles/homesick)).

~~~
alphapapa
I use the Bash version, homeshick. Works great.
[https://github.com/andsens/homeshick](https://github.com/andsens/homeshick)

------
clessg
Even better: place your dotfiles in a public repo on GitHub with an open
license, so that everybody can learn from it and contribute
improvements/fixes. I've seen immense value from this approach.

~~~
JadeNB
> everybody can … contribute improvements/fixes.

I've never worked with a public GitHub repository, so I probably just don't
understand; but how do you prevent disaster when allowing other people to
modify your configuration? Setting aside malicious modifications, no-one else
knows your set-up like you do, and it seems like it would be easy
inadvertently to get yourself into a non-recoverable state.

~~~
Karunamon
Just because you're posting the code publicly doesn't mean anyone can change
your copy willy-nilly. There's a pull request process to go through, something
that requires positive consent to do.

------
leni536
An other idea: use GNU stow to put your dotfiles in the right places instead
of having .git in your $HOME.

~~~
ekimekim
I have a seperate folder with the git checkout, then use symlinks to connect
the actual dotfile locations. I think the author may have alluded to the same
thing:

> I can quickly clone the git repository and fire up my bootstrap script to
> wire all the symlinks, aliases and scripts

Though personally I don't use symlinks for my scripts (only my dotfiles) - for
my scripts I simply add my git checkout to my $PATH

------
dcreemer
Like others, I wrote a tool to manage "layers" of configuration and
personalization files
([https://github.com/dcreemer/wsup](https://github.com/dcreemer/wsup)). "wsup"
lets me compose various work configurations, personal dotfiles
([https://github.com/dcreemer/dotfiles](https://github.com/dcreemer/dotfiles)),
dot-emacs files
([https://github.com/dcreemer/dotemacs](https://github.com/dcreemer/dotemacs))
and others from multiple git repositories. The project was born from my need
to manage multiple changing personal and work environments. Now I can go from
zero to full environment with a couple of commands.

------
nkuttler
Nowadays I simply rsync my dotfiles to wherever I need them. I have multiple
trees in a repository, one for secure boxes, one for client boxes, one for
boxes with an xserver, etc. This gives me the most flexibility, and I can
install everything I need if I simply have ssh access. If I don't, I can
create a zip file of the trees I want.

~~~
jakeogh
I like unison since it's bidirectional.

~~~
nkuttler
That proved too complex over time for me, because of heterogenous systems.
Unison is just too pedantic about matching versions.

------
graystevens
There's a collection of dotfiles up on GitHub:
[https://dotfiles.github.io/](https://dotfiles.github.io/)

------
ezanmoto
I wrote a bare bones "store-and-fetch" [dotfile tool][1] that's been working
well for me, mainly because it's easy to set up on a new device and it
delegates a lot of functionality to GitHub. It's more or less equivalent to
the "Git repo in home" approach, it just streamlines the `git commit`, `git
push`, `git pull` workflow.

[1]:
[https://news.ycombinator.com/item?id=9989185](https://news.ycombinator.com/item?id=9989185)

------
frou_dh
The situation can be a bit shakier with GUI programs. I like it when they
offer an explicit way to export & import configuration (Since what's findable
on disk just by searching is not always reliably portable IME). E.g. for
Terminal.app on OS X, which I have configured fairly extensively, I manually
export a .plist file and put that in my git repo for safe keeping.

------
LukeHoersten
I've been going a step further than this. Not only revision controlling my
dotfiles but also using Ansible to automate the process of installing all the
apps I want, getting the environment in order, etc. Emacs and Mercurial have
both changed my programming life and I think Ansible is a new addition to that
group.

------
dfc
The linked article is bizarre[1], but brings up an important topic. It seems
like most people are using this as a platform to plug/suggest their favorite
way to manage dotfiles so I will follow suit. I m a big fan of vcsh and mr:

[https://github.com/RichiH/vcsh](https://github.com/RichiH/vcsh)

[https://github.com/joeyh/myrepos](https://github.com/joeyh/myrepos)

[1]: You could deck me out with a Klein Tools bag full of their wares and I
would still have no business being in front of your breaker panel. A craftsman
is so much more than his collection of physical things. Is SEO the answer to:
What the connection is between the craftsman and the streamlined factory link?
Or why every tenth word needed to be emphasized?

~~~
falcolas
A craftsman is absolutely more than their tools, but on the other hand, they
can't do their craft without their tools. Also, having their tools laid out
efficiently greatly improves their ability to do work efficiently.

An interesting example of this is provided by Adam Savage - look up anything
he's written or said about "first order availability", and about his toolboxes
he created and maintained while working at ILM.

------
buster
Just wanted to say, i manage my dotfiles with GNU Stow
([https://www.gnu.org/software/stow/](https://www.gnu.org/software/stow/)) and
a private git repository. Works great!

------
stullig
If anyone has resources or is willing to share his knowledge of OS X System
Daemons and Agents - spotting and unloading the unnecessary ones is the main
aspect of my dotfiles[1], but resources are often elusive, outdated or plain
inaccurate guesswork, the whole process usually takes a lot of reading binary
metadata and sometimes plain trial & error (and consequent occassional
frustration).

But then I managed to saved around 2 GB of Ram just by unloading Daemons.

If anyone is interested to chip in, thankful for any link or suggestion:

[1] [https://github.com/stullig/dotfiles](https://github.com/stullig/dotfiles)

------
digitalzombie
I put my dotfiles on github and have a vagrant file that download the dotfile
to my new vagrant box instance.

Everytime I start a new instance of vagrant it just download the dot file from
github.

It's a pretty neat combo.

------
dgellow
I wrote my own solution[0] in emacs-lisp. If you have a recent version of
emacs you can use it to run scripts via `emacs --script myscript.el`.

It's simple, it just installs some packages and copy dotfiles where they have
to be but I had fun working on it.

[0] [https://github.com/dgellow/home-
bootstrapping](https://github.com/dgellow/home-bootstrapping)

------
jpzk
[https://github.com/webpro/awesome-
dotfiles](https://github.com/webpro/awesome-dotfiles)

