Introduction
Introduction Statistics Contact Development Disclaimer Help
Title: Using a game engine to write a graphical interface to the
OpenBSD package manager
Author: Solène
Date: 05 May 2022
Tags: openbsd godot opensource
Description: In this blog entry I'm explaining why I ended using a game
engine to write a GUI program for OpenBSD and how well it turned.
# Introduction
I'm really trying hard to lower the barrier entry to OpenBSD, I realize
most of my efforts are toward making OpenBSD easier.
One thing I often mumbled about on OpenBSD was the lack of a user
interface to browse packages and install them, there was a console
program named pkg_mgr, but I never got it to work. Of course, I'm
totally able to install packages using the command line, but I like to
stroll looking for packages I wouldn't know about, a GUI is perfect for
doing so, and is also useful for people less comfortable with the
command line.
So, today, I made a graphical user interface (GUI) using OpenBSD, using
a game engine. Don't worry, all the packages operations are delegated
to pkg_add and pkg_delete because they are doing they job fine.
OpenBSD AppManager project website
AppManager main menu
AppManager giving a summary of changes
# What is it doing?
The purpose of this program is simple, display the list of available
packages, highlight in yellow the one you have installed on your
system, and let you select new packages to install or installed
packages to remove.
It features a search input instead of displaying a blunt list of a
dozen of thousands of entries. The development was made on my Thinkpad
T400 (core 2 duo), performance are excellent.
One simple feature I'm proud of is the automatic classification of
packages into three categories: GUI programs, terminal/console user
interface programs and others. While this is not perfect because we
don't have this metadata anywhere, I'm reusing the dependencies'
information to guess in which category each package belongs, so far
it's giving great results.
# About the engine
I rarely write GUI application because it's often very tedious and give
poor results, so the ratio time/result is very bad. I've been playing
with the Godot game engine for a week now, and I was astonished when
I've been told the engine editor is done using the engine itself. As
it was blazing fast and easy to make small games, I wondered if this
would be suitable for a simple program like a package manager
interface.
First thing I checked was if it was supporting sqlite or json data
natively without much work. This was important as the data used to
query the package list is originally found in a sqlite database
provided by the sqlports package, however the sqlite support was only
available through 3rd party code while JSON was natively supported.
When writing then simple script converting data from the sqlite
database into a json, I took the opportunity to add the logic to
determine if it's a GUI or a TUI (Terminal UI) and make the data format
very easy to reuse.
Finally, I got a proof of concept within 2h, it was able to install
packages from a list. Then I added support for displaying already
installed packages and then to delete packages. The polishing of the
interfaces took the most time, but the whole project didn't take more
than 8h which is unbelievable for me.
# Conclusion
From today, I'll seriously think about using Godot for writing GUI
application, did I say it's cross platform? AppManager can be run on
Linux or Windows (given you have pkg.json), except it will just fail at
installing packages, but the whole UI works.
Thinking about it, it could be easy to reuse it for another package
manager.
You are viewing proxied material from dataswamp.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.