Directory layouts are like log cabins that start from a basic shed, gradually adding a room at a time.When you start out on UNIX, everything gets thrown inyour home directory. Over time you start to develop a structure for your sources, binaries,projects, data files (like CSV, images, tar files), config, etc
My layout is called TDL -- because it allows me to juggle open sourceprojects, partnerships and jobs in a consistent structure across machines and time.
~/ │── .cfg # bare git repo with my dotfiles │── local # e.g. make install --prefix=~/local │ - lib, bin, man │── .trash # files to delete │ # VARIOUS DIRECTORIES WITH REPOS │── src # clone public open source repos, e.g. for contribution, research or debugging │── stellar # personal repositories │ - archive # hold tgz of repos to save space and indexing │ - repo1 │ - repo2 │── apple # contains repos for a previous company │── microsoft. # repos from another company , consulting project, charity effort
Store your dotfiles using the git bare repo technique. this way your config travels with you. If you have host-specific config, either test for the hostname e.g. in your .bashrc, or
git checkout -b $(hostname)
make --prefix=~/local -- install binaries, libs, man pages into your home directory. Add
$HOME/local/bin to your path with
export PATH=$PATH:$HOME/local/binThe contents are machine specific
Within your home dir, choose "business names" , e.g. for my personal workit's
stellar, open source is
src and then a directory each for businesseslike
Sources get huge, so archive them with
tar -czf archive/repo1.tgz repo1 && rm -rf repo1
most sources will be synced via your git repo, but for large files (e.g. a 5gb csv), generally you'll rsync
Add the alias to your
.ssh/config so you can quickly send files among machines. Naturally commit that into your
cat ~/.ssh/config Host cloud9-env1 User ec2-user IdentityFile ~/.ssh/id_rsa Hostname cloud9-env1.tonymet.com
Then you can easily sync with
rsync myfile cloud9-env1:$(pwd)/
Keeping things consistent over time, across projects and machines is key.
What's your layout look like?