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…

  • vinnymac@lemmy.world
    link
    fedilink
    arrow-up
    16
    ·
    edit-2
    4 months ago

    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.

  • Dragonish@lemmy.dbzer0.com
    link
    fedilink
    arrow-up
    7
    ·
    4 months ago

    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: <domain>/<repo name>

    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.

    • Jay@lemmy.world
      link
      fedilink
      English
      arrow-up
      3
      ·
      4 months 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.socialOP
      link
      fedilink
      arrow-up
      2
      ·
      4 months ago

      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!

  • moreeni@lemm.ee
    link
    fedilink
    arrow-up
    6
    ·
    4 months ago

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

  • TimeSquirrel@kbin.melroy.org
    link
    fedilink
    arrow-up
    5
    ·
    4 months 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.

  • AA5B@lemmy.world
    link
    fedilink
    arrow-up
    5
    ·
    edit-2
    4 months ago

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

  • qaz@lemmy.world
    link
    fedilink
    English
    arrow-up
    4
    ·
    edit-2
    4 months 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.

    • UnRelatedBurner@sh.itjust.works
      link
      fedilink
      arrow-up
      2
      ·
      4 months ago

      I’ve seen a lot of talk about large file sizes. How can you realistically reach 200GB in text? That’s around 2*10^11 characters. Or do you guys store something else as well, like sqls of data or pictures/textures/models?

      • qaz@lemmy.world
        link
        fedilink
        English
        arrow-up
        2
        ·
        edit-2
        4 months ago

        It consisted of tensors weights, datasets (which can reach several gigabytes), images, 3d models, and roughly 250+ programming projects with binaries, git without LFS and also a lot build files.

        Nextcloud was able to sync it all, but syncing was getting so slow that I had to keep my new laptop running for almost an entire day to get all synced to it. It also wasn’t that great at excluding certain folders (like build cache folders or NPM package files), you would have to set up exclusions on each device separately. Another problem with Nextcloud sync was that it would sometimes duplicate projects after had been moved in a subfolder.

  • linearchaos@lemmy.world
    link
    fedilink
    English
    arrow-up
    4
    ·
    4 months 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.

  • fruitycoder@sh.itjust.works
    link
    fedilink
    arrow-up
    4
    ·
    4 months ago

    ${HOME}/Projects/(Personal|Work)/<project name>

    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.

  • Matt@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    4 months ago

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

  • Daniel Quinn@lemmy.ca
    link
    fedilink
    English
    arrow-up
    4
    arrow-down
    1
    ·
    edit-2
    4 months ago
    • Keep everything in an external git service. 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.

    • stewi@sh.itjust.works
      link
      fedilink
      arrow-up
      3
      ·
      4 months ago

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

      • Daniel Quinn@lemmy.ca
        link
        fedilink
        English
        arrow-up
        3
        ·
        4 months ago

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

    • N0x0n@lemmy.ml
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      4 months ago

      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.

      • Daniel Quinn@lemmy.ca
        link
        fedilink
        English
        arrow-up
        5
        ·
        4 months 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.

  • telepresence@discuss.tchncs.de
    link
    fedilink
    arrow-up
    3
    ·
    4 months ago

    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.

  • stewi@sh.itjust.works
    link
    fedilink
    arrow-up
    5
    arrow-down
    3
    ·
    edit-2
    4 months ago

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

    • DigitalDilemma@lemmy.ml
      link
      fedilink
      English
      arrow-up
      2
      arrow-down
      1
      ·
      4 months ago

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