I love Flatpaks, the programs are nicely separated so they don’t interfere with each other. They also don’t have flaws like Snap’s low performance or Nix’s complexity.
But being limited to only graphical apps seems like a real drawback. If one wants to use Flatpaks as their primary package manager there have to be some awkward workarounds for cli programs.
E.g., the prime Flatpak experiene is supposed to be on immutable distros like Silverblue. But to install regular cli programs you are expected to spin up a distrobox (or toolbox) and install those programs there.
Having one arch distrobox where I get my cli programs from will not work, as the package entropy over time will get me the very dependency issues that Flatpak wants to solve.
So what is the solution here? Have multiple distroboxes and install packages in those in alternation and hope the boxes don’t break? Use Nix alongside Flatpak? Use Snaps?
Flatpak can do CLI apps it’s just mildly unwieldy because of the whole
flatpak run ...
.If you want reproducible dev environments, yeah you’re pushed to container solutions be it distrobox, Podman or Docker. Or something like nix as a user.
If you install a Debian distrobox it’ll be as reliable as Debian itself is. It’s only an issue when you’re after 100% reproducible systems, which Docker can help somewhat with, or again, nix. Or NixOS if you really want it all system-wide.
flatpak run org.gimp.Gimp image.png
vs.gimp image.png
or evenxdg-open image.png
. “Mildly unwieldy” I suppose but a massive pain in the ass in practice. I can’t believe they thought that it was a good idea to require all that and provide no way to create a script in /usr/local/bin or even .local/bin.echo 'alias gimp="flatpak run org.gimp.Gimp"' >> ~/.bash_profile
Oh my God I never thought of that! /s
What a pain in the ass to require me to maintain a set of aliases for everything I install. Great user experience.
And the other 125 flatpaks I have?
Flatpak should export mimetypes so xdg-open should work if there isn’t another handler registered
You mean it already does. (“should” can be vague)
I believe so. (Depending on how your OS packages flatpak)
deleted by creator
That’s a pain in the ass. Why not automate it with the install? They already create .desktop files FFS.
It is actually. Add /var/lib/flatpak/exports/bin to PATH.
This is the answer! Next question is why doesn’t the flatpack install do this for you?
deleted by creator
They are only aliases too. People will be disappointed if they expect it to behave like the unsandboxed command.
Flatpak should not be adding directories to $PATH. That is for the distribution or user to do
Really? That’s a thing? I don’t mind a one-time PATH modification and was excited to see this but… I don’t see that path on my system. Maybe it’s optional and none of my applications are using it?
I also don’t see any mention of that in the flatpak.org setup steps. And almost nobody replying here even knows about it. And all of the examples of running a flatpak from the CLI on flatpak.org and flathub.org use the
flatpak run org.gimp.Gimp
version.So it seems like it’s a feature, but it’s poorly documented, poorly advertised, and not used… :-(
Edit: So I did find that directory on another system of mine. No idea why it’s there on one and not the other. Maybe a version thing. And gimp is symlinked as “org.gimp.Gimp”. What a failure… 🤦
I wrote a nice little CLI tool that lets you browse the flatpak store in the terminal and has an option to link all your flatpaks to their short names. Its really just a wrapper bash script that runs flatpak, but I like it because it goes from com.Blender.Blender to just “blender” and it works on the command line.
deleted by creator
Cool, where can we find it?
You mean I can stop filling up my .local/bin with bash scripts that just run the flatpak?
the package entropy over time will get me the very dependency issues that Flatpak wants to solve.
You can declare your distroboxes so that they get created regularly from scratch instead of upgrading in place: https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md
That way the entropy never hits you. Then use the Prompt terminal https://gitlab.gnome.org/chergert/prompt to make it just part of your terminal ootb.
Would Homebrew work for this? I use it in WSL for all my CLI programs.
VPN apps don’t seem to work with it and Proton said their Drive app won’t either. So for whatever reasons those might be.
I think Nix is great for installing CLI apps, it’s not that complicated, in fact, it can make many things in your life easier.
This.
Also, @[email protected] - you not be aware but you can use Nix in an imperative way (as opposed to declarative), which doesn’t require learning the Nix language or editing config files etc.
Eg: say you wanted to install
tealdeer
, all you need to do is run:nix profile install nixpkgs
There are similar one-liners to search, upgrade, rollback etc.
I use Fedora uBlue (Bazzite), and use Nix to install all my CLI apps, and Flatpak for all my GUI apps. Been running this setup for a few months on and it’s been great experience (bit of a learning curve doing this way of course, but I’m pretty happy with my setup now).
Thanks, I will try that out. I want to use uBlue as well, but cli program installation has been holding me back.
uBlue also makes nix available via fleek, but the way you describe it it seems easier to just use nix directly
ublue contributor here. We’re set up so you can install any cli program from any distro transparently. Should we outline that more in our docs?
If we are talking Silverblue then podman is your pick for everything Flatpack “can’t”
there is no big push for cli flatpack since this already a solved cause with containers for podman/docker/kuberneteshowever no matter how you approach this you will always have dependency security issues
unless you built every flatpack/container yourself you are at the whim of the creator of it to keep every dependecy updated
this is already a known vulnerability factor in the container sphere on topbl of the threat of 0-day exploitsI’m sure you know what you’re talking about. But your comment becomes a techno babble word salad when you throw in a typo or two, skip essential words and forego practically all correct use of punctuation and capitalization. I know this makes me sound old, dumb, and maybe a little mean. I know I’m old and dumb, but I’m really trying to not be mean.
deleted by creator
I’d agree with you
If I could actually find cli app in there
deleted by creator
The point is that you can not find most cli programs on Flathub, de facto making Flatpaks unsuitable for cli programs. Snapcraft on the other hand hosts neofetch, dust, youtube-dl etc.
deleted by creator
Flatpaks are disk and memory hogs, and they start slowly. That’s because they’re like little selt-contained full-fledged operating systems.
Flatpaks, like snaps, applimages, dockers, Electron apps, React apps or Flutter apps are the lazy 21st century developer’s way of achieving cross-compatibility without any effort.
I always like comments like this that don’t offer the “real” solution
That’s not true and misleading. Docker and flatpak base images mostly contain shared libraries and even these get automatically deduplicated. Your flatpak calculator doesn’t ship systemd or any other init system nor does it ship system drivers lol
And yeah if you are working in a restrained env and care about those few mbs taken by shared libraries then containarization is not for you.
Containerization is not perfect and it will never be, but that was never the goal. Making apps and services independent of the base system and easily restrictable like mounting volumes, restricting network, etc… was.
deleted by creator
I didn’t say they were the same thing. I said they’re what people do today to avoid having to port their code to different platforms and manage shared library versions, performances be damned.