- bunch of random files in ~/Desktop/
- more random files in ~/Desktop/old/
- more more random files in ~/Desktop/old/old/...
- real stuff in ~/dev and ~/Site/
- a mix of important and unimportant files in ~/Downloads/
- Desktop has the same fate this ^. Have a CLI tool that takes everything from the desktop and puts it in ~/Desktop/cleaned/
- ~tools/dotfiles/ hosts all dotfiles with a Makefile that sets everything up
- ~tools/<randomTools> - contains mostly useful utilities and scripts like fonts, vpn configs, terminal color schemes, config patches to apply to `/etc/` after fresh install etc.
- ~Projects/<client|company>/<project_name> for paid work projects
- ~Projects/<projectName> for personal projects
- ~Playground/<experiment> for experiments, prototypes or building software from github out of curiosity
- ~Applications/<appName> for apps I build from source and copy/link binaries to `~/bin`. I'm on Linux so this is non-standard.
- ~GoogleDrive/<accountName> for Google drive sync with Insync
- ~Vaults/<vaultName> for mounting cryfs encrypted directories from the Google Drive directories. (some times use plasma vault for this)
To be consistent, I treat myself as a client and follow all the same rules. But I also give the important ones their own "brand" name. It's a pseudo "exit" plan. That is, I could "sell" to someone else.
The gist is, doing my own projects differently took away more then it helped.
One thing I really liked in the old MacOS was that the Desktop wasn't really a location for files, it was just a place where you could move them to keep them handy to work on, and then use the "put away" command to send them back to wherever they came from. (They really needed some session management for different kinds of tasks, though.
I'm in a similar boat, and I'll mention one "weird trick" that has helped me.
What used to happen was I'd download, say, an Ubuntu image, use it, and then say "... I might need this again" and leave it there. Then a week goes by, I've forgotten its there. Sorting by Date Added its now piled under 10 other items. The empire of dirt grows...
The trick? A Trash that automatically empties items older than 30 days. MacOS has this, at least. (Note, this is a rolling empty; not an "empty everything every month" kind of deal). Now I just delete those "I might need this..." files. I know I can grab it from the Trash if I need it again, which I've done a few times. Most of the time, I didn't need it, and so it gets thrown out as it should.
The effect is two fold. Obviously there's less junk in ~/Downloads in general. But that has the knock-on effect that it is now less daunting to go through and sweep up ~/Downloads.
Empirically, my ~/Downloads, ~/old.Downloads, etc. used to be filled with easily 400 files and folders each. Now? My current ~/Downloads is at 76 items after two years. And that's currently at my peak; I'm about to go through and clear out about 20 of those things. Which is easy to do, compared to trying to face a mound of 400 files with names like "TEST.txt"...
This is similar to /tmp/ on Linux (well, Debian at least). On each reboot it gets emptied which means I put there everything that I will probably not use after this session. Suspend / wake cycle doesn't empty /tmp/ directory, but just knowing it will get emptied sooner or later is enough.
Win10 makes it easy to automatically empty the Recycle Bin and Downloads (but sadly, not other locations). One major PITA is that Firefox does not use the standard Downloads folder/directory, but has its own. It's configurable, of course, but I never remember until I've already got a zillion things in it, and I try to run everything with a minimum of customization.
I use Classifier to manage file in my Ubuntu Downloads directory; it moves files into subdirectories by extension. I run it daily from cron, and my backup script runs it before backing up.
Screenshots are a big part of my workflow too, and this made things feel a lot cleaner for me. This will automatically put all your screenshots into a specific folder (assuming you're on OSX).
This used to be me until I started using screenshot shortcuts that put images in the clipboard instead of files. You can paste directly into jira, slack, hangouts, whatsapp web, and many other places.
Doing exactly this but from time to time I move my old desktop folders in a backup folder with a date. But now I have so many in there with duplicate files. I'm sure I'd win a lot of disk space by merging/deduping those folders.
Pretty much what the xkcd says. I basically never delete files, they just get moved to deeper layers as time goes by. I roughly know where to find my elementary school presentations, first websites, university assignments and emails, rotated irclogs.. The mental map will take me there if curiosity awakens, better not to mess it up by organising.
I’m Johnny. Feedback much appreciated, I’m working like a busy little bee on the site as we speak. Should have a show HN app ready in a couple of months, but I’m learning JS/React as I go so it’s taking time. :-)
I'm actually using Johnny decimal now, except that I ended up using 100 buckets instead of 10 because some of the categories simply had too many items in them and they would have overflowed or had no room to grow in them otherwise.
It's so nice to have a good system and never doubt where to find something and where to put a new thing.
I switched from our previous mess to Johnny decimal by using a python script that processed a table in an emacs org mode file. The script filled the rows in the table with the file and directory names and I could then assign a category to each file or directory and say what the script should do to them. Then the script showed the outline of my Johnny decimal system so I could check that's what I wanted. This made it easy to play around with possible categories for all my existing stuff until I was satisfied. In the end it copied all the files to their new home.
One issue that I see arising is the interaction with emails between your system and other Johnny Decimal systems. Say I’m running a team at the company I work at and my team uses this system jointly. Another team also uses it. I email them with an email labeled with a decimal number, and suddenly their system has items out of order.
A good question. I have an idea for handling multiple projects in an overlapping environment, but it involves typing more characters of course which you’re not going to want to do every time. (The idea is to assign each project a 3-letter prefix. So 72.02 becomes PRJ.72.02.)
I use MS outlook at work and you can actually open incoming emails, edit the subject line and save it, used this a few times as a quick way to tag my emails on what needs to be done with them, e.g.:
The problem I'd have with that is that I'd never be able to commit to a fixed set of areas or categories since the type of work I do is constantly evolving. Plus I've always had trouble creating mutually exclusive categories.
What works well for me is to keep all things I'll need soon in the top level of my documents folder and when I'm done with it I move it into an archive folder.
This way my documents folder has few files and folders in an easily accessible flat heirarchy. While old files can be easily searched for in the archive folder.
That can certainly be an issue, yes. It's not one I personally have come across yet as I tend to have quite distinct 'domains' that don't change much.
At work, I'm a contractor and I typically spend 1-3 years on a project. Each gets its own system, nice and simple.
My home system has 10-19 capturing all of my 'personal, daily life' which leaves plenty of areas for my personal projects. For instance, 50-59 is Johnny.Decimal itself.
So far I've implemented JD:
- Managing a 2 year contemporary dance production, multiple locations, staff, ticketing, marketing, etc.
- Consolidating 200+ data centres in to 7; I did basically all of the hardware from procurement to having a green light on a NIC.
- Running an infrastructure upgrade project for a major bank.
- Running 2nd level desktop support for an international packaging company.
- My personal life, including managing the limited company that I contract through.
I plan on anonymising and documenting as many of these cases as I can on the site. I just need to find the time.
This is why we need tags and other metadata in the filesystem. (Windows actually supports this via alternate data streams, but very few apps and tools use it) Used to have an overview of this here: (archive.org might have a copy) http://developeriq.in/articles/2013/aug/19/alternate-data-st...
Chunking stuff into sets of ten is a good idea, memorizing the arbitrary numbers I’m not so sure about, but...
“An important restriction of the system is that you’re not allowed to create any folders inside a Johnny.Decimal folder.”
WHAT WHY
Like let’s say I’m using your example structure and I am working on a new marketing campaign. With a ton of moving parts to it - new logos to make, contracts to sign and save, websites to design, ads to put together, brochures to design and print, etc, etc. Potentially hundreds of files for each campaign. I just throw all this stuff into the same directory as all the other marketing campaigns? This sounds absolutely insane to me.
I guess alternatively I make a new JD folder - 30.04 Rumplestilskin campaign, 30.05 Butterscotch campaign, etc, but what happens once I’ve filled up the name space and have a new project?
Your use-case needs a bit more thought, and doesn't fit the simple "marketing" example on the website. But that's the beauty of my system – it forces you to actually think about your business, about how you arrange things. It makes you deconstruct it in your mind in order to create that model. I personally find that very instructive in and of itself.
"Hundreds of files for each campaign" is clearly something that needs to be managed. If you're interested in exploring a JD solution for it, I'd be very happy to help. This is all great experience for me, and the more I know about how other people use this system, the better I can make it overall.
How do you handle old files, if you don't mind me asking? My document directory has the year at the root level, i.e. ~/Documents/2018/billing/projectname which is nice in so far that you don't have to scan through files and folders that stopped being relevant.
Because the ID is incremental, old stuff naturally sorts itself.
For example, I have '16 Travel' as a category. I make a new JD number for each trip I take and create Finder & email folders. Order details and PDFs tend to live there.
16.01 was, let me look ... a trip to Perth in 2012. And my latest, 16.31, just happened. But of course my '16 Travel' folder sorts like:
16.01 Trip to Perth to see Bart
16.02 <name of trip>
16.03 <name of trip>
...
16.29
16.30
16.31 Hunter Valley, Xmas '18
- so those old trips just kind of hide themselves away. My eye only ever looks at the most recent stuff, and all of the recent things sit near each other. It just works.
This also has the advantage in that you don't need to remember which year a thing was in. They're all there, visible.
Damn. This might works for my bookmarks folder. I have ton of bookmarks on Firefox and it becomes a disorganized mess. Definitely will try it and see how it goes. Thanks for sharing it.
One thing that changed my life is z, a utility to navigate easily to arbitrary directories based on frecency. Makes dir structure a bit less relevant; with z the distance between any two dirs is effectively constant.
Frecency is a portmanteau of "frequency" and "recentness."
I don't know the exact scoring mechanism but potential matches are scored by both frequency of access and recentness of access. Firefox uses this for matches in the URL bar, and I think other browsers do as well.
For `z`, as an example, suppose I have two paths:
~/projects/fun_stuff_1
~/projects/fun_stuff_2
`fun_stuff_1` has been accessed 100 times, but all of those accesses were over two years ago.
`fun_stuff_2` has been accessed only once, but it was five minutes ago.
So if I type `$ z fun_stuff` or even `$z fun` it's going to rank `fun_stuff_2` ahead of `fun_stuff_1` in the possibilities. In practice, while obviously not perfect, frecency tends to match the user's intent a surprisingly high amount of the time... a good frecency implementation is a delight for the user, honestly.
z works a bit like a web browser does when autocompleting URLs from history rather than a file system search tool like find. z “learns” the file system paths as you traverse them in a terminal.
A bit off topic: I have a large collection of videos, but organizing them was exceptionally annoying, so I built a tool: Video Hub App with advanced search features and instant previews of screen-captures from each videos. Think of it like YouTube for videos on your computer: https://videohubapp.com/
I have a fairly specific system that I've developed, mostly due to my being fairly anal about not wanting to leave random files lying around after I'm done with them and wanting to keep as little as possible in my home directory. I tend to try to keep most things in my directory that's sync'd to cloud storage (previously Dropbox, now Nextcloud since Dropbox doesn't support non-ext4 on Linux); ~/Documents and ~/Pictures are both symlinks into that folder so that I don't have to keep track of which machine something is on. I try to keep my ~/Downloads directory fairly clean, and move things to the trash liberally (through trashcli) once my initial use is finished so that I can still access them later if I need to. The only other two (non-hidden) directories I keep in my home directory are ~/dotfiles (which is a private GitHub repo that I symlink my dotfiles from) and ~/code, which has subdirectories for various categories (`forks`, `scripts`, `projects`, `scratch`, and maybe a few others I'm forgetting). Finally, I have a ~/.scratch directory where I put text files I use to take notes, short scripts I write to test something, and other files I only need for a short time.
I am in the process of testing out transitioning from dropbox over to nextcloud. It has only been a couple of months, but so far, really working out great! Kudos to the devs/contributers of nextcloud!
I ditched for the same reason - I run btrfs on my workhorse machine. I'm very happy with nextcloud (though it leaves something to be desired as a developer who wants to contribute). The biggest difference though, is that now I have a product that beats the hell out of any cloud storage provider. 6TB of space (drives I had lying around, basically), integrated with Plex and my Roku, encrypted off-site backups (free azure allotment from my work, but pennies anyway), and better use of my internet connection. If I need more space, I can buy it very very cheap as a one time expense. I never have to go back to Dropbox again. Feels good, man.
My personal laptop and desktop are on btrfs and my work laptop and desktop are still on extra; I haven't noticed any difference between how well it syncs between those sets of machines. In fact, after the initial setup of it on a Digital Ocean VPS (20 GB is enough for my uses), it's been virtually the exact same experience as Dropbox for me; the initial sync on each my my machines too roughly the same amount of time as the Dropbox sync did, and every change since then has been essentially instantaneous to my other devices. As an Arch user, it's actually easier to install than Dropbox (nextcloud-client is in the main repos, whereas Dropbox is only in the AUR), and the Android app has also worked perfectly for me. Assuming you're okay with a bit of upfront cost to get the server set up (I basically just followed the Arch wikis and then used Let's Encrypt for the TLS certificate) and the cost of a VPS, I'd highly recommend it for people who want filesystem sync'ing for non-ext4 on Linux.
Hierarchy starts in Documents. $name is employer name
- .{$name}
- {$name} Administrative = my personal corporate footprint. W-2s, onboarding, perf reviews, etc
- {name} Projects
- PMO Projects
- Leadership Projects
- Team Projects = internal initiatives
- Administrative Projects = stuff like, we need to update our service catalog portfolio or create a new RACI
- Application Projects = stuff like, “migrate the Fruitbasket database’s nonclustered indexes and staging tables to new filegroups”. Small technical projects, surfaced by our team
- {$name} Troubleshooting
- YYYYMMDD-$app-problem-desc = all the documents and data for a specific issue. Log dumps, AARs, executive summaries
- {$name} Management
- Vendors
- Budgeting + Forecasting
- Expenses
- Technical Portfolio
- Team Members
- SLAs / OLAs
- Audits
- Onboarding
- {$name} Documentation
- {$name} Forms and Templates
- {$name} Meetings = all meeting agendas and write ups. Each is a txt file named as YYYYMMDD-stakeholder/app-topic. Can be a tossup whether a meeting write up goes here or in a project folder.
- {$name} Change Management = docs and data for each change I’m either submitting or implementing. Each sub folder named by the Servicenow ID and a description.
- {$name} Operations = heat maps, log dumps, baselines, WIP documentation. Much of this is getting moved to github.
I have a few folders under home I've used regularly for many years:
docs
projects
build
bin
crap
docs contains documents organized into subcategories like biz and personal.
projects contains all my various paid and personal programming and hardware projects; each in their own subdirectory.
build is a playground for building and trying out new software.
bin contains non-packaged executables. I find /usr/local/bin to be a poor alternative because it has to be moved separately when I install a new OS.
crap contains subdirectories in the format YYYYmmdd. E.g. 20190105. Whenever I accumulate too much crap in my home directory, I move it all to ~/crap/$(today)/. today is an alias for date +%Ymd.
- ~tools/dotfiles/ hosts all dotfiles with a Makefile that sets everything up
- ~tools/<randomTools> - contains mostly useful utilities and scripts like fonts, vpn configs, terminal color schemes, config patches to apply to `/etc/` after fresh install etc.
- ~Projects/<client|company>/<project_name> for paid work projects
- ~Projects/<projectName> for personal projects
- ~Playground/<experiment> for experiments, prototypes or building software from github out of curiosity
- ~Applications/<appName> for apps I build from source and copy/link binaries to `~/bin`. I'm on Linux so this is non-standard.
- ~GoogleDrive/<accountName> for Google drive sync with Insync
- ~Vaults/<vaultName> for mounting cryfs encrypted directories from the Google Drive directories. (some times use plasma vault for this)
The gist is, doing my own projects differently took away more then it helped.
What used to happen was I'd download, say, an Ubuntu image, use it, and then say "... I might need this again" and leave it there. Then a week goes by, I've forgotten its there. Sorting by Date Added its now piled under 10 other items. The empire of dirt grows...
The trick? A Trash that automatically empties items older than 30 days. MacOS has this, at least. (Note, this is a rolling empty; not an "empty everything every month" kind of deal). Now I just delete those "I might need this..." files. I know I can grab it from the Trash if I need it again, which I've done a few times. Most of the time, I didn't need it, and so it gets thrown out as it should.
The effect is two fold. Obviously there's less junk in ~/Downloads in general. But that has the knock-on effect that it is now less daunting to go through and sweep up ~/Downloads.
Empirically, my ~/Downloads, ~/old.Downloads, etc. used to be filled with easily 400 files and folders each. Now? My current ~/Downloads is at 76 items after two years. And that's currently at my peak; I'm about to go through and clear out about 20 of those things. Which is easy to do, compared to trying to face a mound of 400 files with names like "TEST.txt"...
https://github.com/bhrigu123/classifier
But yeah, that's exactly me.
These end up accumulating on my desktop over the years until I can be bothered to delete them
I need a tool that will look for duplicate directory structures.
My only addition would be
- random documents of dubious value in “my documents”
https://xkcd.com/1360/
I once found some x86 assembly code I'd written decades ago and buried real deep (the folder names were in ALLCAPS and no more than 8 characters.
Close! Johnny.Decimal. https://johnnydecimal.com
I’m Johnny. Feedback much appreciated, I’m working like a busy little bee on the site as we speak. Should have a show HN app ready in a couple of months, but I’m learning JS/React as I go so it’s taking time. :-)
It's so nice to have a good system and never doubt where to find something and where to put a new thing.
I switched from our previous mess to Johnny decimal by using a python script that processed a table in an emacs org mode file. The script filled the rows in the table with the file and directory names and I could then assign a category to each file or directory and say what the script should do to them. Then the script showed the outline of my Johnny decimal system so I could check that's what I wanted. This made it easy to play around with possible categories for all my existing stuff until I was satisfied. In the end it copied all the files to their new home.
Thanks for creating Johnny Decimal.
I have come across situations where you need more than 10, yes. I plan on addressing it in a future post on the site.
If you’re able to share, I’d love to know more about your case. If not, no stress. hello@johnnydecimal.com.
I’ll think on this.
- [FOLLOW UP] Lorem ipsum dolor...
- [ASK MICHAEL] Lorem ipsum dolor...
- [INCLUDE IN PROPOSAL] Lorem ipsum dolor...
What works well for me is to keep all things I'll need soon in the top level of my documents folder and when I'm done with it I move it into an archive folder.
This way my documents folder has few files and folders in an easily accessible flat heirarchy. While old files can be easily searched for in the archive folder.
At work, I'm a contractor and I typically spend 1-3 years on a project. Each gets its own system, nice and simple.
My home system has 10-19 capturing all of my 'personal, daily life' which leaves plenty of areas for my personal projects. For instance, 50-59 is Johnny.Decimal itself.
So far I've implemented JD:
- Managing a 2 year contemporary dance production, multiple locations, staff, ticketing, marketing, etc.
- Consolidating 200+ data centres in to 7; I did basically all of the hardware from procurement to having a green light on a NIC.
- Running an infrastructure upgrade project for a major bank.
- Running 2nd level desktop support for an international packaging company.
- My personal life, including managing the limited company that I contract through.
I plan on anonymising and documenting as many of these cases as I can on the site. I just need to find the time.
“An important restriction of the system is that you’re not allowed to create any folders inside a Johnny.Decimal folder.”
WHAT WHY
Like let’s say I’m using your example structure and I am working on a new marketing campaign. With a ton of moving parts to it - new logos to make, contracts to sign and save, websites to design, ads to put together, brochures to design and print, etc, etc. Potentially hundreds of files for each campaign. I just throw all this stuff into the same directory as all the other marketing campaigns? This sounds absolutely insane to me.
I guess alternatively I make a new JD folder - 30.04 Rumplestilskin campaign, 30.05 Butterscotch campaign, etc, but what happens once I’ve filled up the name space and have a new project?
Your use-case needs a bit more thought, and doesn't fit the simple "marketing" example on the website. But that's the beauty of my system – it forces you to actually think about your business, about how you arrange things. It makes you deconstruct it in your mind in order to create that model. I personally find that very instructive in and of itself.
"Hundreds of files for each campaign" is clearly something that needs to be managed. If you're interested in exploring a JD solution for it, I'd be very happy to help. This is all great experience for me, and the more I know about how other people use this system, the better I can make it overall.
Deleted Comment
For example, I have '16 Travel' as a category. I make a new JD number for each trip I take and create Finder & email folders. Order details and PDFs tend to live there.
16.01 was, let me look ... a trip to Perth in 2012. And my latest, 16.31, just happened. But of course my '16 Travel' folder sorts like:
- so those old trips just kind of hide themselves away. My eye only ever looks at the most recent stuff, and all of the recent things sit near each other. It just works.This also has the advantage in that you don't need to remember which year a thing was in. They're all there, visible.
https://github.com/rupa/z
~/proj ---> all my current projects and stuff i've pulled down from GitHub so I can examine it. usually 20 or so. subdirs for employer, etc~/Dropbox/personal ---> scanned documents, receipts, etc
~/Dropbox/work ---> subdirs per client/employer
~/Dropbox/ebooks ---> organized into subdirs by topic
~/Dropbox/pdfs ---> web pages i've "printed" to pdf for archiving/reference. organized into subdirs by topic
~/Desktop/old ---> the "junk drawer" i occasionally clean out. doesn't get too big
~/Music ---> mostly just iTunes doing its thing
I also have a truckload of media (games, movies, music) stored on external hard drives since there's not much room for it on the internal SSD.
Could you maybe give a few examples of how you might find something eg. using find(1), and then how you could find it using z?
I don't know the exact scoring mechanism but potential matches are scored by both frequency of access and recentness of access. Firefox uses this for matches in the URL bar, and I think other browsers do as well.
For `z`, as an example, suppose I have two paths:
~/projects/fun_stuff_1
~/projects/fun_stuff_2
`fun_stuff_1` has been accessed 100 times, but all of those accesses were over two years ago.
`fun_stuff_2` has been accessed only once, but it was five minutes ago.
So if I type `$ z fun_stuff` or even `$z fun` it's going to rank `fun_stuff_2` ahead of `fun_stuff_1` in the possibilities. In practice, while obviously not perfect, frecency tends to match the user's intent a surprisingly high amount of the time... a good frecency implementation is a delight for the user, honestly.
And it's now open-source: https://github.com/whyboris/Video-Hub-App
- .{$name}
projects contains all my various paid and personal programming and hardware projects; each in their own subdirectory.
build is a playground for building and trying out new software.
bin contains non-packaged executables. I find /usr/local/bin to be a poor alternative because it has to be moved separately when I install a new OS.
crap contains subdirectories in the format YYYYmmdd. E.g. 20190105. Whenever I accumulate too much crap in my home directory, I move it all to ~/crap/$(today)/. today is an alias for date +%Ymd.