Some IDEs allocate config directories in your homedir: .idea, .vscode, .vim
Some of them do it under .config.
Some systems write to /usr/local
Some things scope to the project you're working in. Python venv, node_modules, etc.
Build systems, such as Cargo, Maven, and Pants each do their own thing.
Make, autotools...
Have you looked at an Android filesystem? I don't even know how to describe it.
Everything everywhere is horribly inconsistent.
I'm thinking in terms of workloads, of which building and linking are merely types of work that produce artifacts. There are many types: server workloads, jobs, userland software.
If you semantically declare what a workload needs, what dependencies it has, where those dependencies must exist, and what outputs it produces, everything can be wired together logically and hermetically.
I'm hoping the immutable containers of the Docker/microservice world make their way onto the desktop.
If I can reduce my entire desktop environment into a single config file and have it reliably reconstruct itself, it would be magical. I would freeze and wipe my machine constantly.
Of course writable, mutable volumes will exist for humans, but software can't play in that realm or it will lose hermeticity.
I've sort of gotten off track and am no longer speaking about package managers / build systems. I think there's a more general solution to all of these problems.
> If I can reduce my entire desktop environment into a single config file and have it reliably reconstruct itself, it would be magical. I would freeze and wipe my machine constantly.
You can do this with Nix. I do this with Nix even on non-NixOS machines. The thing is that Nix has a certain "path of enlightenment" that one needs to walk until it becomes a tool that adds certain capabilities[0] to your mental model.
All the software is inconsistent, but we can wrap it consistently by whichever means are necessary for that particular thing. Anything from flags setting paths to dynamically patching the source (and describing that operation as code) is possible.
Some of them do it under .config.
Some systems write to /usr/local
Some things scope to the project you're working in. Python venv, node_modules, etc.
Build systems, such as Cargo, Maven, and Pants each do their own thing.
Make, autotools...
Have you looked at an Android filesystem? I don't even know how to describe it.
Everything everywhere is horribly inconsistent.
I'm thinking in terms of workloads, of which building and linking are merely types of work that produce artifacts. There are many types: server workloads, jobs, userland software.
If you semantically declare what a workload needs, what dependencies it has, where those dependencies must exist, and what outputs it produces, everything can be wired together logically and hermetically.
I'm hoping the immutable containers of the Docker/microservice world make their way onto the desktop.
If I can reduce my entire desktop environment into a single config file and have it reliably reconstruct itself, it would be magical. I would freeze and wipe my machine constantly.
Of course writable, mutable volumes will exist for humans, but software can't play in that realm or it will lose hermeticity.
I've sort of gotten off track and am no longer speaking about package managers / build systems. I think there's a more general solution to all of these problems.