this post was submitted on 16 Jul 2025
59 points (98.4% liked)

Programming

21634 readers
495 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 2 years ago
MODERATORS
top 19 comments
sorted by: hot top controversial new old
[–] iAvicenna@lemmy.world 25 points 3 days ago (3 children)

Nowadays, most programs respect this specification

Huh?

[–] EpicStuff@lemmy.ca 2 points 12 hours ago

I tried to "fix" this using xdg-ninja but then gave up and resorted to just creating a .home in ~ then running usermod -d ~/.home. Then I just symlinked my documents and .config and etc. folders to my "real" home.

[–] ulterno@programming.dev 9 points 3 days ago* (last edited 3 days ago) (1 children)

Yeah, everyone (every-app) thinks they are special and deserve a ".place" in ~ because : .

  • ssh because "I'm SSH!", similar for gpg
  • npm because "I'm a package manager"
  • dillo because "I am old and can't be bothered to update my dirs"
    • I guess I should send them a patch. It shouldn't be too hard to make that little change.
  • fltk same as dillo maybe
  • .mozilla : "Oh but I AM special"
  • .bundle : There is literally only 1 subdir in it and it is named "cache". they could have just done "~/.cache/bundle" instead

IDK why you have a .kde in your screenshot. Debian maybe, or a dir remaining from KDE4? I had an old one remaining in Debain after I upgraded.


  • .config
  • .local
  • .cache

These are what we need to stuff everything into.

[–] Samueru_sama@programming.dev 12 points 2 days ago

.mozilla : “Oh but I AM special”

You would think that thunderbird would use ~/.mozilla as well but nope. It is ~/.thunderbird 🤣

[–] QuazarOmega@lemy.lol 4 points 3 days ago

This makes me physically uncomfortable >:(

[–] qaz@lemmy.world 23 points 3 days ago

I made a tool for this some time ago. It detects when programs write to your home directory outside the XDG spec and logs the file and the location of the binary that wrote it to an SQLite file.

[–] TehPers@beehaw.org 12 points 3 days ago (1 children)

For tool configs? I'm not really sure I follow. All my source code for the project goes in src/ or some other subdirectory, and the project root is a bunch of configs, a source directory, maybe some scripts, etc. It's never really bothered me.

What has bothered me is __pycache__ directories. Whoever decided to litter those in every source directory all over the place... let's just say I hope they learned to never do that again. I deal with enough trying to get Python to work at all (with the absolute hell it is to get imports working correctly, the random, but admittedly mostly documented, BS gotchas littered all over the standard library, packages with poor docs, no types, and every function worth calling taking **kwargs, etc). Seeing my code littered with these directories isn't something I really want to deal with as well.

A standard for build output might make sense to me. Maybe just throw cache stuff in .cache and build output to .build (with intermediate artifacts in there as well potentially). For configs, I wouldn't really complain about it all going in .config, but it also doesn't matter much to me, and sometimes you end up having nested configs anyway in nested project dirs (thinking of eslint configs, gitignores, etc).

[–] Kissaki@programming.dev 2 points 3 days ago

A standard for build output might make sense to me. Maybe just throw cache stuff in .cache and build output to .build (with intermediate artifacts in there as well potentially).

When enabled via flag, dotnet puts stuff into artifacts/obj, artifacts/bin, and artifacts/publish respectively. I like that. So much better than every proj folder having their own.

And there's really no need to make it a dot folder. For the publish you don't want to anyway. And you may want to navigate to bin as well, to run a build or inspect the output.

[–] paequ2 10 points 3 days ago

Many of them don’t even allow it to be a hidden file—they just require a fully unhidden “tool.yml” file sitting right there in the root of your project.

I love this. I hate when tools only allow hidden config files. I want to know where the config is—my teammates should be aware of where the config is. I don't want to be tricked into thinking there isn't a config file in a directory.

I actually have alias ls='ls -A' in my bashrc so I see everything.

[–] Cyberflunk@lemmy.world 6 points 3 days ago

I feel this post so hard.

[–] undefined@lemmy.hogru.ch 10 points 3 days ago

I don’t mind this problem so much but what does drive me crazy with Docker images is that oftentimes all those crazy top level files are included in the Docker image (for no reason). I’ve even seen .git/ in Docker images.

I prefer the Dockerfile itself to be at the top level but it feels like no one wants to keep their layers clean. But writing Dockerfile syntax is an art form in itself that I probably shouldn’t continue rambling about here.

[–] eager_eagle@lemmy.world 8 points 3 days ago (1 children)

yeah, I've also been noticing this in the past months. The number of dotfiles in project roots is an ever growing number, to the point where we have literally dozens of files and directories and only a handful that actually mean anything to the project. It's pure clutter.

[–] towerful@programming.dev 6 points 3 days ago* (last edited 3 days ago)

24 yaml files for config. The single src folder

[–] syklemil@discuss.tchncs.de 4 points 3 days ago* (last edited 3 days ago)

We could probably stand to have some organisation standards in repo roots, but I tend to agree that dotfiles aren't the way to go there. The project root is similar to ~/.config and the like: When you're there you should not be subjected to further hidden levels. Those config files are a significant part of the project.

State files however, like all the stuff in .git, lockfiles and the like are generally¹ fine to hide away. Those are side effects of running other tools, not ordinary editable configuration. Same goes for cache—and both cache and runtime files should likely go in the ordinary XDG dirs rather than be something every project has to set up a gitignore for.

If anything I'm more frustrated with the C projects that just plop every source file in the root directory.

¹ Just don't make it too easy to sneak unexpected crap in there. We don't need to make the next Jia Tan's job easier.

[–] Samueru_sama@programming.dev 4 points 3 days ago
[–] Corbin@programming.dev 2 points 3 days ago (1 children)

My $HOME is recreated on boot and lives in RAM. I don't care what gets written there; if I didn't know about it and intend to save it to disk, then it won't be saved. It would be nice if tools were not offenders here, but that doesn't mean that we can't defend ourselves somewhat.

[–] ulterno@programming.dev 0 points 3 days ago

I am guessing you would have separate mounts for .cache, .local and .config ?

[–] Ephera@lemmy.ml 3 points 3 days ago (1 children)

Yep, the repository root. Where everyone starts to read your code, so you put your README there and the docs-folder and the entrypoint to your source tree, oh and also all this random guff that no sane reader would ever be interested in.

I still remember how I tried to read larger repositories for the first time and this was genuinely a hurdle, because I figured these files must be highly relevant for understanding the code.

My attempt at combating that has been to move as much of the code structure to the top as possible, so that someone new will have a much higher chance of clicking on something relevant. But yeah, downside is that your code structure isn't as separated from the guff anymore...

[–] eager_eagle@lemmy.world 14 points 3 days ago* (last edited 3 days ago)

move as much of the code structure to the top as possible

I do the opposite and move all source code to a generic named src or similar, because the alternative creates even more clutter in the root dir IMO by mixing relevant and irrelevant files. And generic names like src, docs, and tests help keeping a similar structure for different repos.