59 lines
2.3 KiB
Markdown
59 lines
2.3 KiB
Markdown
# My $HOME
|
|
|
|
*2018-09-03*
|
|
|
|
Recently, I came across a blog posting titled "[$HOME, sweet $HOME](https://morr.cc/home-sweet-home/)", where [@blinry](https://morr.cc/) advocates for structuring your `$HOME` directory based on projects and their activity.
|
|
After reading this I felt inspired to finally have a look at the mess I made of my `$HOME` in the last years.
|
|
|
|
A few things about my old `$HOME`:
|
|
- ``Documents`` contained basically everything I had accumulated during the last years besides music, videos, pictures and source code.
|
|
- ``projects`` just contained one gigantic folder of all projects that I ever worked on.
|
|
- the rest was based on the default [xdg-user-dirs](https://freedesktop.org/wiki/Software/xdg-user-dirs/)
|
|
|
|
If you sorted the files by file type like the default XDG directories suggest, files from one project may be scattered across many different directories.
|
|
|
|
So my goal for the new `$HOME` was to have a clean directory structure where:
|
|
- it is obvious where to place new files
|
|
- paths do not become too long to type out
|
|
- the directory structure relates to how I work
|
|
|
|
A quick tour of my new `$HOME`:
|
|
|
|
- `lib` for immutable files
|
|
- `src` for mutable files
|
|
- `tag` stores links to projects
|
|
- `tmp` for unsorted files and downloads
|
|
|
|
## The project directory
|
|
|
|
All of my projects are stored in `src`.
|
|
I use a flat directory structure, where every project has its own subdirectory based on its name.
|
|
Projects can become part of one or more larger contexts through the use of tags.
|
|
|
|
## Tags
|
|
|
|
Tag directories are stored in `tag`.
|
|
Each directory stores symbolic links to parts of a project that can be distributed around `lib` and `src`.
|
|
One possible use for the tag directories is creating workbenches.
|
|
If I use some directories in `lib` or `src` in different contexts, `tag` can be used to include them in multiple workbenches.
|
|
|
|
An example workflow
|
|
```sh
|
|
$ cd tag
|
|
$ mkdir -p course1/examples
|
|
$ ln -s ~/src/example1 course1/examples/
|
|
$ ln -s ~/lib/courses/course1 course1/material
|
|
$ rm -r course1
|
|
```
|
|
|
|
I create new tags for various reasons, but mostly one for each larger context (e.g. work, hobbies, admin foo, thesis, courseXY) and some more for tracking project activity.
|
|
There are four different tags in `tag` directory right now for tracking project activity:
|
|
|
|
- permanent
|
|
- active
|
|
- hold
|
|
- dead
|
|
|
|
## Workflow
|
|
|
|

|