Perhaps because I am such a stickler for standards, or perhaps simply because I like to remain consistent when moving from one box to another, I have begun to piece together a standard that I use for my $HOME directory on my Linux boxes. Of course, the LSB does follow the FHS maintained by freestandards.org, but the only advice that document provides for the home directory is in dealing with "dot files." This advice is not really helpful to those people that aren’t even aware of the presence of these files.

So, I threw together my own standard which seems to work quite well. Take it or leave it.

The Home Directory Tree

$HOME
    .bash/
    bin/
    docs/
    opt/
    media/
        gfx/
        music/
        pics/
        shots/
        vids/
    tmp/
        build/
        incoming/
        outgoing/
        testing/
    vault/
        rpms/
        tarballs/

.bash/

Similar to how "/etc/profile.d/" contains and manages login scripts, this directory splits up a lengthly .bashrc file into more managable files. I then call these scripts from the main .bashrc file on login.

bin/

Any program which is specific to only the current user should go here. This directory may also include symlinks to programs, custom scripts (such as backup scripts), as well as program aliases (though BASH aliases are better for this task). User’s should ensure that the $HOME/bin folder is added to the $PATH variable in the login scripts so that these files can be searched for program execution.

docs/

Mostly self describing, this folder contains the user’s documents, specifically office documents. Note the drastic difference in name length compared to Window’s "My Documents" folder. Following the unix principles, shorter is better. This folder should have many custom subdirectories that catagorize the documents into either subject or type.

opt/

Personally, I object mostly to the "/usr/local" target for custom programs. If a program is not going to be installed into the main system tree, likely it is intended for use by a single user and must be customized (requiring write permissions) by that user. The name "opt" is short for optional and contains programs which can standalone anywhere within the system (examples include Limewire, Eclipse, Firefox and JEdit). Often times people work too hard to find packages for programs that should be so simple to install. I like the concept of "opt" because to me, it represents programs which do not rely on shared libraries. Think of this folder as the equivalent to the mac "applications" directory, which is just a repository for standalone programs.

media/

Basically, anything related to multimedia goes in this directory, with subdirectories for each type, respectively. I subdivide images pretty heavily since their usage varies widely. "pics" are usually pictures taken from a digital camera or scanned. "shots" are screenshots. "gfx" are typically related to graphical art, most notably web graphics.

tmp/

Obviously, this directory stores temporary files. However, I discovered, after using Linux for many years, that the most commonly used folder is the "dump" folder. It could contain downloaded files, partial builds, working files, stashed files. Any file that is ephemeral was ending up in this folder until I couldn’t reasonable browse it. As a result, I created subdirectories for the different purposes of temporary files, where the "incoming" folder is the default download directory. Any program that needs to be archived should be elevated to the vault.

vault/

After moving it around a while, I finally settled on the term "vault" to store archived versions of programs and packages. Differening from the "incoming" folder under "tmp", the vault is where accepted versions of compressed software is stored, most of which correlates with the software installed on the system.