this post was submitted on 03 Nov 2024
74 points (100.0% liked)

Linux

47993 readers
1194 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

For most of college, I’ve kept it simple: I’d create a directory in my home folder for each project, then eventually move older or inactive ones into ~/programming/. When I change devices or hit file size limits, I’ll compress and send things to my NAS.

This setup has worked pretty well so far. But now that I’m graduating and my projects keep stacking up, I’m starting to wonder if there’s a more efficient system out there.

Curious—how do you all organize and store your projects? Any tips or methodologies that have made your lives easier over time?

The only person I’ve talked to about this is my mentor who’s been programming since the 60s (started on the IBM 1620 and Bendix G15) and he just mostly keeps projects in directories in his home directory and uses his godly regular expressions skills to find things that way. Makes me wonder if I’m overthinking it…

top 40 comments
sorted by: hot top controversial new old
[–] eatham@aussie.zone 14 points 1 day ago* (last edited 1 day ago) (1 children)

I put stuff in places, then immediately forget where I put them.

[–] MachineFab812@discuss.tchncs.de 1 points 23 hours ago

"... and God said, let us make man in our own image."

[–] AA5B@lemmy.world 5 points 23 hours ago* (last edited 23 hours ago)

Everything is in git, and I tend to use IntelliJ as an IDE. So my projects are all in ~/Ideaprojects/[PROJECTNAME]

[–] stewi1914@sh.itjust.works 2 points 1 day ago* (last edited 1 day ago) (1 children)

Devs who don't use git and devops properly are infuriating to work with. I'd recommend getting started with that ASAP.

[–] digdilem@lemmy.ml 1 points 1 day ago (1 children)

I think your reply would have been more useful if you'd given some pointers about how, instead of just "do it right".

[–] MachineFab812@discuss.tchncs.de 2 points 23 hours ago

No one should be basing their "how to do it right" on a single forum comment. Talk about scope-creep for the offering of advice.

[–] vinnymac@lemmy.world 17 points 1 day ago* (last edited 1 day ago) (1 children)

Similar question was recently asked here

Generally what I’ve seen work well in my career and is consistent across thousands of devs I’ve worked with: ~/[whateverFolderNameYouWillRemember]/[organization]/[project]

I recommend when it comes to finding things to just use a fuzzy finder, such as fzf.

[–] fool@programming.dev 7 points 1 day ago

Building on this, I recommend zoxide instead of only fzfing or regexping.

For people who like to keep everything they ever create, like college students, you can use z 18.04/1 to get to a directory like ~/hw/random-school/fresh-1/analysis-18.04/pset1.

Lets you nest without fear.

(Also, about your question: I've personally used ~/git/<projname>/ and ~/git/<org>/<projname> at the same time -- e.g. ~/git/aur/fuzzel-git)

[–] qaz@lemmy.world 5 points 1 day ago* (last edited 1 day ago)

I used to be put everything in ~/Programming at the top level. I later started grouping projects by type (JVM, Web etc.) in subfolders because it was getting hard to find things. This was synced with Nextcloud. However, I then at some point passed 2 million files (200GB) in said folder and decided to search for a better solution.

I ended up using a selfhosted Forgejo instance. It allows for easy code searching across all projects, tagging projects by topic and language, LFS, and has useful project management tools built-in.

[–] nous@programming.dev 45 points 1 day ago (1 children)

When I change devices or hit file size limits, I’ll compress and send things to my NAS.

Whaaatt!?!!? That sounds like you don't use git? You should use git. It is a requirement for basically any job and there is no reason to not use it on every project. Then you can keep your projects on a server somewhere, on your NAS if you want else something like github/gitlab/bitbucket etc. That way it does not really matter about your local projects, only what is on the remote and with decent backups of that you don't need to constantly archive things from your local machine.

[–] crimsonpoodle@pawb.social 3 points 23 hours ago (1 children)

Yeah I think a local Git server would be good, will try our forgejo since people seem to like it— I’ve been using git for a lot of projects but not so much for large files and HW stuff since when using GitHub there are size limitations. Does seem like it would be freeing to be able to delete whatever I want from my workstation without worrying about losing stuff

[–] deathmetal27@lemmy.world 8 points 21 hours ago

Size limitations? In git?

What is the average size of your source code files?

Normally you'd never run out of space in git unless you're committing large binary files.

[–] Dragonish@lemmy.dbzer0.com 7 points 1 day ago (2 children)

Hosting my own git server on my NAS made my life easier and better due to the new freedoms it offers. Backups are centralized, and I have all the space i need to keep any interesting code safe. I am using forgjeo now and highly recommend it. You can also use other front ends (or none and just ssh/filesystem) but forgjeo gives me artifacts (ie docker registry), code search, LFS, and more. With my own git server, my local filesystem only has what I am working on recently (or as my workstation space allows). My home folder has a folder for each version control system (git, pijul, svn). Inside of these i have 2 sub folders: /

Some examples of different domains are: open, work, personal, dragonish. I do not separate what forge or remote service in the filesystem, this is a persona boundary.

I use git remote names and branches in each repo to handle what software forge and any upstream/maintainers i need to work with. As an example my work repos only get pushed to my work server (ie, only 1 git remote named origin set to my work's server), but my open ones will go to forgjeo and github (i setup 2 git remotes, origin and github. origin in this domain goes to my forgjeo). If i have a need i go into some more git branching strategy which I do find has helped me over my life, but I think I am overthinking this post now! keep it all simple enough for what your needs are.

[–] JTheFox@lemmy.world 3 points 1 day ago

I also use a NAS as my primary git server, although I’ve never heard of Forgejo before, but it sounds really interesting and definitely something that I may look into. It sounds really handy to have on hand, especially with code search and LFS. So thanks for introducing that!

[–] crimsonpoodle@pawb.social 1 points 23 hours ago (1 children)

Def going to check this out— I think it will solve my biggest problem with GitHub which is just the number of large files I have to deal with— overthought comments are the best comments- thanks!

[–] 0x0@programming.dev 1 points 10 hours ago

Try forgejo, it's the forge Codeberg uses.

[–] faultypidgeon@programming.dev 6 points 1 day ago (1 children)

I push every project I work on right away to my gitea instance. If I expect not to work on something for some time I just delete the local copy.

When I change devices or hit file size limits, I’ll compress and send things to my NAS.

Well, that sounds inconvenient.

[–] crimsonpoodle@pawb.social 3 points 23 hours ago (1 children)

Yeah, I really should start using Git for everything, but I’ve been working with a lot of large datasets recently (mostly EEG data). A big part of improving accuracy comes from cleaning the data, which is huge and takes a while to process. I could set up a local Git server to keep track of everything or just save the base data files and regenerate as needed, but on my current setup, that process can take anywhere from 2-6 hours depending on the task. So for now, I’ve just been managing everything locally to save time.

[–] faultypidgeon@programming.dev 2 points 17 hours ago

git LFS might be for you. If the data takes so long to reprocess I think it is fine to check it in (possibly using LFS).

[–] moreeni@lemm.ee 5 points 18 hours ago

I have a dedicated directory with subdirectories for each project and that's it

[–] linearchaos@lemmy.world 4 points 23 hours ago

I keep a root folder. On Windows it's in c:\something on Linux it's in /something

Under there I've got projects organized by language. This helps me organize nix shells and venvs.

Syncthing keeps the code bases and synced between multiple computers

I don't separate work from home because they don't live in the same realm.

Only home stuff in the syncthing.

[–] TimeSquirrel@kbin.melroy.org 4 points 1 day ago

As an addition to your post, I'm also in the process of learning C/C++, and I'm curious also how others arrange their actual project files and include directories. Like, for example, if there's a bunch of classes having to do with UI elements, do you just group them each under their own file all in their own directory? I've also seen projects where everything was just thrown into the top level directory, both headers and implementation files together in a giant pile of source files.

[–] fruitycoder@sh.itjust.works 4 points 1 day ago

${HOME}/Projects/(Personal|Work)/

If either folder gets to busy I start to create projects Meta folders that normally corospond with a gitlab group.

I just blow out the folders with a good ol rm -rf ./ And git pull if I want to mess with it again.

[–] quilan@lemmy.world 4 points 1 day ago (1 children)

projects/[rust|cpp|python|..]/proj-name

I used to do this, but imho the used language is hardly a useful index. When does it happen that you want to see everything written python? For me that's never.

Also where do you put multi-language projects? Like, go backend with typescript frontend or whatever.

[–] DieserTypMatthias@lemmy.ml 3 points 17 hours ago (1 children)

Whatever Cargo generates for me. If I use workspaces, then I put the subprojects to the root of the directory.

[–] BatmanAoD@lemmy.world 3 points 16 hours ago (1 children)

I think this is asking about where to keep projects, not how to organize them internally.

[–] DieserTypMatthias@lemmy.ml 2 points 16 hours ago (1 children)

Ah, OK. I keep them in the Documents directory.

[–] danielquinn@lemmy.ca 3 points 1 day ago* (last edited 1 day ago) (2 children)
  • Keep everything in git. You can use third party services like Codeberg, GitLab, or GitHub, or host your own on your NAS.
  • When you're not working on a project and don't think you'll need to reference it for a while, just delete it from your laptop. The code always lives in git anyway.

In terms of local storage, I usually have everything in ~/projects/project-name, and I don't have tiny file size limits because I don't use FAT32 filesystems — that's the default filesystem you usually get on USB sticks and external hard drives you buy. You have to format those drives to something like EXT4 (Linux) or NTFS (Windows) or you get stuck with FAT32 which has 2gb file sizes.

[–] N0x0n@lemmy.ml 3 points 1 day ago* (last edited 1 day ago) (1 children)

What about exFAT? It overcomes FAT32's limitation and is nearly readable on every OS and has way higher file size limits.

Edit: In case of external storage like USB/hard drive.

[–] danielquinn@lemmy.ca 5 points 1 day ago

ExFAT is good for portable devices, but if you're working with something internally, there's no reason not to use EXT4 or NTFS.

[–] stewi1914@sh.itjust.works 3 points 1 day ago (1 children)

You've forgotten about exFAT my dude. Nothing uses FAT32 anymore. All your usb drives will be exFAT.

[–] danielquinn@lemmy.ca 3 points 1 day ago

That's not been my experience. Lots of drives I've bought have been FAT32 out of the box.

i use coding/languagename/project, where most if not all projects are git repos. so, coding/python/shira, coding/java/datetime examples i have some wildcards for the languages, most of my serverside js stuff lives in coding/node-deno and most of my fullstack webdev stuff lives in coding/webdev

i used to have the coding directory on a hdd, but moving it to an ssd helped a lot when installing things made with node, among other things.

[–] scratchandgame@lemmy.ml 2 points 1 day ago* (last edited 1 day ago)

~/real ~/real/cprac ~/real/git

[–] Nibodhika@lemmy.world 2 points 15 hours ago

On my personal computer ~/Projects/<name>, you need to remember that real-life is not like college, you won't be working on a new project every week. If you have more stuff than you can manage like this, you've bitten more than you can chew.

On my work computer it's a bit more complex, because I have to work with other people's projects as well, so I have a ~/Work folder and in it several folders by type of stuff, e.g. ops for operational stuff such as scripts to deploy stuff or grant permissions, code for servers (and client) code, etc. Also if I'm working on something specific that requires multiple repos I create a folder for that project with the repos inside.

[–] Katzenmann@feddit.org 1 points 2 hours ago

I just have all my active projects under $HOME/projects/ and projects from other people in $HOME/bin/

[–] communism@lemmy.ml 1 points 1 day ago

I don't have many so I just put them all in ~/own_repos (as opposes to another directory I have for other people's git repos). Maybe if/when I have more projects I'll have a more elaborate system.

[–] MXX53@programming.dev 1 points 2 hours ago

I have a folder for my projects on root and within those projects I have my GitHub repos all contained within their own directory named the same as the project.

If I am learning something, I have a folder for the topic I am learning, and a logseq file with all of my notes. Then I have folders for my book references, one for video or audio references, and then a folder for my practice projects.