Make the applications in FreeBSD downloadable
We need a way to make the applications in FreeBSD accessible to helloSystem users who do not use the command line.
(Triggered by: https://www.youtube.com/watch?v=Ol2IRmeH0qk&t=658s)
There is OctoPkg but it is not suitable: It is full of non-application packages that have no use to "mere mortals" (and are only needed as dependencies), doesn't have application names in correct capitalization and spelling, lacks application icons, and generally does not appeal to a non-technical audience used to "app stores".
Many users nowadays (unfortunately) expect something like an "app store", "app center" from an operating system. Can we make something that goes roughly into this direction but sucks less?
For example, by creating one "placeholder" .app bundle for each application in FreeBSD. Like we currently do with LibreOffice and the like. (Ideally, the "placeholder" .app bundle would convert itself into a full .app bundle when it is executed for the first time, but for the time being, it just installs the application through pkg).
For this we need:
- The application name in correct capitalization and spelling (e.g., "Qalculate!", "KTurtle", "SpeedCrunch"). Not the all-lowercase atrocity that package managers typically use. We can get this from
pkg-descrif the second word is "is", which is often the case but not always- The AppStream metainfo file at , `/usr/local/share/metainfo/*, in the "name" key in the "component" element, if the package has such a file (but for this we need to have access to the package)
- The
*.desktopfile at/usr/local/share/applications/, in theName=key in the[Desktop Entry]element (but for this we need to have access to the package)
- The application icon as an 128x128 pixels png from
/usr/local/share/icons/.*/.*/apps/.*[png|svg]. Unfortunately some packages only ship scalable versions so we need to take the svg and convert it in those cases (but for this we need to have access to the package) - The absolute path of the (main) executable for the application. We can get this from
- The AppStream metainfo file at ,
/usr/local/share/metainfo/*, in the "name" key in the "component" element, *if* the package has such a file. Also, we only get the name but not the full path there. So we would have to take that name and search in thepkg-plistfile for files at locations on the$PATH` that have the corresponding name - For applications without such a file, search in the
pkg-plistfile for files at locations on the$PATHand if there is more than one, then pick the one that is most similar to the application name (fuzzy logic)
- The AppStream metainfo file at ,
Packages that contain no *.desktop file at /usr/local/share/applications/ are likely not GUI applications and are hence not of interest to us. An exception may be GNUstep related application. (It's a shame that we have to rely on the pesky Desktop Entry Specification to tell an application package from a non-application package.)
Regarding "we need to have access to the package": Having to download 100 GB worth of packages is wasteful, slow, and expensive.
Possibly we can use a combination of https://github.com/jbd/httpfs2 or http://httpfs.sourceforge.net/ and libarchive to get packages "mounted" without downloading the entirety of them.
Or possibly we can get https://www.freshports.org/ interested enough to provide this data.
Nice to have would be:
- Whether the application is using Qt/PyQt ("native" and preferred on helloSystem)
- Whether the application is using Gtk or WxWindows
- Whether the application is using Electron
- Whether the application is drawin in GNOME components
We could use this to rank applications in roughly this order.
Note to self: FreeBSDPortsToApps.ipnynb
Looks like https://github.com/ghostbsd/software-station does also not have access to this kind of information.
Do you want a script of some sort to convert every package in the FreeBSD binary repository into an app bundle? And then store all of that on the user's system? Wouldn't that fill the Applications folder with apps somebody doesn't really need or want? Or would we have a separate folder that you download and it's full of placeholders like those in /usr/share/ports that download the meat and the vegetables when you need them to.
I'm in favour of the app shop idea. This will get messy.
Do you want a script of some sort to convert every package in the FreeBSD binary repository into an app bundle? And then store all of that on the user's system?
Exactly. Not "every binary package" but the "most popular GUI applications". And only as a placeholder application bundle that works like the one we currently ship for e.g., LibreOffice. It takes up almost no space before the user actually runs it for the first time, at which point the application is downloaded.