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 in your 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 source projects, 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
The contents are machine specific
Within your home dir, choose "business names" , e.g. for my personal work
stellar, open source is
src and then a directory each for businesses
Sources get huge, so archive them with
tar -czf archive/repo1.tgz repo1 && rm -rf repo1
Syncing Files Across Hosts
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)/
as you design your layout, think of keeping it consistent over time and across machines. That way, wherever you are working, you'll have all of the files you need
What's your layout look like?