Designing a Shortcut-Oriented, SSOT Personalized File System for Simplicity, Security & Version Control
Everyone is producing and consuming lots of digital information nowadays. You need a place to store them just like you need a bookshelf for your books. Having a centralized file system makes finding documents faster, easier for making backups and reduce the attack surface when your sensitive files are not scattered everywhere in your computer.
A good file organization system is timeless and can serve you for years once you have it in place. It can save you from FOMO by outliving the fancy tools out there and make your digital life much easier.
Table of Contents
I. Motivation
Personally, here are the actual problems I encountered before having an organized file system:
- Struggled to find my latest resume when applying for jobs
- Wanted to have a SSOT (single source of truth) file system to store all my stuff for personal and work use
- Easier for backups and migrating to other devices (I don’t like the feeling of being restricted to only one device)
- Most online tutorials are overwhelming and don’t focus enough on security
Therefore, I’ve designed my own file organization system that is SSOT, secure, and simple. And here are the advantages of adopting my system and you can make your own tailored to your needs:
- File separation: clear separation between work and personal files
- Shared folders: use shortcuts if multiple folders have mutual topics*
- Simple naming rules: no numbers, use
@to pin important folders - Secure: all sensitive data is stored in a single folder, easy for encryption if needed
- Version control (optional): clear separation between text and binary files, easy for Git and GitHub integration**
* e.g. use a shortcut to reference your ID card file path in a “work” folder as ID card is considered as sensitive and is stored in the centralized vault
** e.g. you can use Git to track how your resume evolves and a private GitHub repo as a free cloud storage to store less sensitive text files.
II. The file system
Example setup:
$ . tree.sh
|-- .
|-- @personal
| |-- creative.lnk
| |-- cred.lnk
| |-- media.lnk
| |-- obsidian.lnk
|
|-- @work
| |-- work-archive.lnk # job contracts or stuff
| |-- resume.lnk # shortcut of the latest resume
|
|-- archive # stuff you don't use but wanna keep
|
|-- temp # stuff you use but don't wanna keep
|
|-- cred # your credentials aka the vault
| |-- academic
| |-- certs
| |-- personal
| |-- resume
|
|-- dotfiles # software configs
| |-- _chrome-theme
| |-- _fonts
| |-- _software
| |-- _vscode
| |-- _wallpaper
| |-- _zsh
|
|-- creative # your hobbies (mine is art)
| |-- behance.lnk # link to the binary files
|
|-- media # binary files but mostly images
| |-- videos
| |-- img
| | |-- _behance
|
|-- _obsidian # my markdown obsidian vault with the git plugin
Breakdown of my design philosophy:
1. Work/life separation
There must be a clear border between files for work and personal use. I don’t like mixing up my stuff with work.
2. Shortcut/symlink-oriented
Use shortcuts to reference shared folder path. Windows shortcuts can handle name changes and synchronize file data updates across folders.
3. Modularity
With the idea of creating shortcuts, all the “second-level” folders should be created at the root. The “personal” and “work” folders should act as logical separators and only consist of second-level folder shortcuts.
4. Centralized vault
Centralize all the sensitive documents in one folder for the ease of encryption. Other folders can reference them by creating shortcuts or symlinks in Unix-like systems.
5. Avoid number-indexed folder names
Using number-indexed folder names overwhelms me where I should place my new folder at. Name your files with semantic meaning and searching the file name is always faster than scanning or memorizing the numbers.
Use special characters like @ to pin important folders. In my opinion, you should consider opening a new folder if you pin more than 3 folders.
6. Web dev naming convention
Always use lowercase and kebab case (use - instead of whitespaces) because Windows is not case-sensitive and purely my preference on using the web dev naming convention.
7. Folder tree visualization
Include a way to visualize the whole file system, e.g. I use a bash script to print out the folder tree (exclude files and items inside folders name start with _)
8. Binary/text file separation
Do your best to separate non-binary (text files) and binary (any Microsoft Office files or images) assets if you want to integrate Git for version tracking.
III. Folder tree visualization scripts
Example folder tree visualization script in Bash:
echo "."
find . \
\( -type d -name ".git" -prune \) \
-o \( -type f -name ".gitignore" -prune \) \
-o \( -type d -name "_*" -print -prune \) \
-o \( -type f -name "*.lnk" -print \) \
-o \( -type d -print \) \
| awk '
BEGIN {
FS="/";
}
NR > 1 {
current_depth = NF - 1;
for (i = 1; i < current_depth; i++) {
printf("| ");
}
printf("|-- %s\n", $NF);
}'