Review
Default State
True to Void's minimal architecture, the default state of the AgarimOS respin of Void is also minimal in terms of applications. The only applications installed out-of-the-box are the WezTerm terminal written in Rust and configured in the Lua scripting language, Firefox Web Broser, and the OctoXBPS GUI package manager. The installation is so minimal, even standard Plasma applications such as System Monitor and Info Center are not installed.
Many Plasma Packages Are Not Installed by Default and Some Components Are Missing
Image 1: Plasma related packages in OctoXBPS. Some are not installed.
Image 2: System Monitor is not able to display GPU related information. This is not an issue in other distributions.
The other important aspect of the default installation of note regards graphics. There is no option to install proprietary graphics drivers in the installer, so only Nouveau is installed and available, by default. In the Plasma version of the distribution both X11 and Wayland sessions are available, and the X11 session is enabled by default.
Initial Issues
The numerous minor and one major problems I encountered during my previous use of Void were not present now. However, there were several minor problems and one major problems in this version. The major problem required resolution before I could use the distro reliably, and the minor ones before I could use it comfortably.
There was one major, insidious problem that I suspect was not due to any Void process, but to the AgarimOS developer's process in using the Void ISO and live system creation tools. This was that the /etc/ and /usr/ directory ownership was set to the regular user specified during installation. I didn't notice this in my initial use of AgarimOS/Void on the Dell G5, but suddenly, the system became unstable and commands would not execute successfully. I changed the ownership on these directories, using chown with the -R option. I realize the cause of the issue on the Dell G5, before I gave up on this installation, but fixed it on the Lenovo Legion, by c
AgarimOS Customizations
Agarim's customizations of Void are focused on the appearance of the desktop environment and the interactive terminal experience.
Plasma Theme
AgarimOS's appearance is largely governed by its consistent use of the Cattpuchin theme. It provides a Plasma global theme called Catppuccin Mocha Mauve and associated theme components, as well as a similarly named Kvantum theme. The theme extends to the preboot environment with a Catppucin styled GRUB theme. The appearance is inconsistent in one way, however, in that the wallpaper used on the desktop and in the SDDM greeter seems to be one created by theme designer L4K1.
AgarimOS Appearance
The Plasma edition uses Catppuccin styling for the DE as well as the GRUB.
Although Catppuccin is not my favorite of all available Plasma themes, it has the added benefit of being adapter to many user experiences. As a desktop environment theme, it has been applied to more elements of a DK. For example, there is a Yakuake skin available for this theme in contrast to other themes which neglect this terminal. Also, the theme has been adopted to user eperiences outside of DE theming, one such example being the many variants for Neovim colorschemes.
Terminal Experience
This aspect of AgarimOS's cutomization is achieved through an alternative terminal emulator, additional terminal-centric applicatinos which alter the appearance and functionality of in terminal interaction, and an alternative login shell.
AgarimOS Terminal Related Customizations
zsh is extensively customized with many utilities included in its configuration.
zsh
The login shell and the interactive shell WezTerm is zsh. Although not the typical choice, especially for a login shell, it is in my opinion, the best choice. In offers the same advanced completion, syntax highlighting, and convenience features of fish but with better compatiblility with and similar behavior and syntax to Bourne type shells like Bash, as well as incorporation of POSIX features.
The choice of zsh, and the extensive .zshrc, is one of the largest added value to the Void Linux base. The configuration uses the applications listed in the following table to alter the appearance and behavior of commands and to improve the user experience.
Applications
The utilities incorporated through aliases for common commands are listed below. The most impressive and useful, simply form a convenience perspective, is the alias of cd to z, which runs zoxide instead. This command allows changing directories by using a part of the target path. For example one can change to the directory /home/brook/DataEXT4-16ITH6/ordinatechnic.com/content/distribution-reviews from home by typing:
z revie
The other most notable addition is the use of fzf, a utility that fuzzily filters through lists, where lists can be file paths in a directory tree, possible command completions in zsh.
Utilities to Enhance Terminal Experience
| Utility |
Purpose |
In Agarim |
| bat |
syntax highlighting |
alias for cat, in |
| duf |
disk usage/free utility |
alias for df |
| dust |
du alternative |
alias for du |
| fastfetch |
system information utility |
runs on terminal open |
| fd |
alternative to find |
aliased with options to act as a default argument to fzf fzf |
| fzf |
fuzzy finder in lists |
used as finder in lists produced by aliases that pipe output to it |
| lsd |
alternative to lsd |
aliased to ls |
| procs |
ps alternative in rust |
aliased to ps aux |
| vivid |
used to generate theme colors for LC_COLORS environment variable used by various tools, e.g. tree |
|
| topgrade |
provides single command to update system with all configured package managers |
available as an alias to update system, remove orphan packages, and xlocate |
| zoxide |
alternative to cd |
aliased to cd |
WezTerm
Another unusual choice, this one probably not so useful for most users, is installing WezTerm as the only terminal emulator. This is a so-called modern emulator that is capable of directly using the GPU to render the text objects in the emulator. It uses the Kitty Terminal Protocls which improve the graphics and input capabilities of terminals which support it. It also written in Rust.
The drawback of this terminal is it is configured solely through through a Lua confiuration file, which is empty in noromal installations. AgarimOS does some configuration, but it is not nearly enough, in my opinion, for comfortable use. Users will need to go through the extensive WezTerm documentation to cutomize it to their liking. In addition, the Xterm-style formatted escape sequences are not processed properly by the terminal, so even typing special characters, for example, END, HOME, Up-Arrow, produces:
;1F;1H;1A
Because of this, instead of tinkering with WezTerm -- which is really only beneficial when interacting with AI agents which produce vast amounts of output -- configuration, I installed Konsole, KDE's own terminal, The experience is much better, and because the login shell is zsh, it becomes the interactive shell in Konsole, without any adjustment to its settings, and uses the customizations in ~/.config/zsh/.zshrc.
runit Init Program and Service Manager
The single feature that differentiates Void Linux from other distributions, and by extension AgarimOS, is the use of runit as the init program and service manager. As used in Void, runit supplies the init program that runs as PID 1, sets the runlevels -- somewhat equivalent to systemds targets concept, starts and manages the services appropriate for the runlevel, and supervises processes. (For a good introduction to runit as an init program, see the section Runit as the init system on Gentoo's Wiki page on the subject.
runit is an extremely simple program and makes administering a Void system transparent. As an example of its simplicity and transparency, consider its function in booting the system. When runit or its helper, runit-init start, themselves started probably by a kernel command line parameter included in the dracut settings, they first run the file /etc/runit/1, which is just a shell script -- thus human readable. This script in turn runs all of the -- human readable -- shell scripts in /etc/runit/core-services in shell expansion order. When /etc/runit/1 completes, the init program runs /etc/runit/2, which sets the runlevel mode (single-user or default multi-user), creating the appropriate symlinks to start the enabled services for the runlevel mode.
These scripts also access /etc/rc.conf and /etc/rc.local, shown below, which are also human readable.
Package Management and Infrastructure
XBPS
The other significant unique feature in Void is its package management system which consists of the XBPS (X Binary Package System), Void's custom developed binary package manager and its companion source package manager and build system xbps-src. XBPS is very similar to Arch's pacman, at least in the characteristics that are readily visible to the user, with succinct command options and outputs that are barely distinguishable from pacman. Unlike Arch, but like Debian, it splits its capability among different commands, among which are xbps-install for updates and installations, xbps-remove for uninstalling, and xbps-query for querying the repositories and the installed system, and even an xbps-alternatives for listing and setting alternatives for packages.
I found this binary package manager to be adequate, especially considering that it provides features that pacman doesn't provide without add-on helper scripts, such as the ability to search for a package in a remote repository that provides a particular file. This can be done with the command
xbps-query -Ro '*/filename'.
However, XBPS still requires users to be adept at various UNIX utilities for some tasks, such as uninstalling all packages that match a certain string, which are provided out of the box by some command line package managers. For example, when I wanted to uninstall Xfce, I had to pipe one xbps command output as an input to a UNIX utility program and use this result as the input to another XBPS command as in:
$ sudo xbps-remove -F $(xbps-query -s xfce | cut -d ' ' -f 2)
.
Using Bash and UNIX Utilities to Augment XBPS Capability
When uninstalling the Xfce meta package left some Xfce packages, I had to combine some XBPS commands and
UNIX utilities and Bash concepts to remove all packages matching the string "xfce".
Other features and usage examples of XBPS are given below in Package Management.
xbps-src
The complement to Void's XBPS is xbps-src, the package build system and source package manager. This is one of the standout features of Void and the feature that prompted me to try Void. Nearly all Void users will use it to build and install packages from Void's source package GitHub repository as it is the only way Void distributes some proprietary packages such as Google Chrome and Adobe Flash for NPAPI browsers.
Where xbps-src shines however is not in managing Void's own source packages, but in building packages distributed by third parties as source archives. I can't address its technical strengths as do some champion's of Void Linux, but I did appreciate xbps-src's flexibility and ease of use in building and installing third party software. Unfortunately, the success in building and installing third party apps using this Void tool depends on related aspects of Void to be working and maintained. This wasn't the case in my experiments building Firefox Developer Edition and Opera Developer as described in Void Linux: Creating Binary Packages Using xbps-src.
Some examples of basic xbps-src usage is given below in Package Management.
Void User Packages (VUP)
Issues
-
Touchpad Issues
-
On both Dell and Lenovo the touchpad was not working. Plasma settings touchpad settings could not be modified. the apply button was grayed out. Required uninstalling xf86-input-synaptics package, adding my user to the input group, modifying creating /etc/X11/xorg.conf.d/30-touchpad.conf with some x configuration to make it work.
- Plasma Keyboard Shortcuts
-
-
Permissions and Ownership Issue
-
In both the Dell and the Lenovo -- so I know it was not anything I did -- the /etc/ and /usr/ directories had user and group ownership of the created user at installation
Package Management
Package management is performed using the custom XBPS (X Binary Package Management System), a program that seems to be inspired by Arch's Pacman, but with some extended functionality. Even with some more built in functionality it is still missing some capability of more mature package managers as mentioned in the Review, above. Some examples of XBPS usage is presented in the following table.
XBPS Commands
| XBPS Command |
Function |
Examples |
| xbps-install |
install, reinstall, and update packages |
xbps-install -Syy synchronizes remote repsository
xbps-install -S kate synchronizes remote repsository and installs kate
xbps-install okular gwenviewinstalls okular and gwenview
|
| xbps-query |
query package and repository information |
xbps-query -R okularshows information for package okular in repository mode
xbps-query -R -s ffm lists packages with metadata that matches the pattern "ffm"
|
| xbps-remove |
uninstall packages |
xbps-remove -R okular uninstalls okular and recursively its dependencies
xbps-remove -o removes all orphan packages
|
| xbps-reconfigure |
configure or reconfigure packages |
xbps-reconfigure evolution configure evolution
xbps-reconfigure -f evolution force (re)configuration of evolution
|
| xbps-pkgdb |
repair and manage package database |
xbps-pkgdb -a check for errors in installed packages |
| xbps-rindex |
manage local repositories |
xbps-rindex -a /home/brook/local-repo/*.xbps create local repo at /home/brook/local-repo |
| xbps-alternatives |
manage package alternatives |
|
Some screenshots depicting XBPS in use are presented below.
Using XBPS
On the surface XBPS is very similar to Arch and derivatives' pacman, however it is very different.
Image 1: The four stages of an XBPS transaction - 1) Download all packages 2) Verify signature of each package 4) Unpack package files 4) Configure packages
Image 2: Updating - The initial output when starting an update provides information on packages to be updated.
Image 3: Using xbps-query. The first xbps-query execution is in local mode and the second is in
repository mode.
Image 4: Installing a Package - Installing ffmpegthumbnailer and ffmpegthumbs.
Void users will also need to use the Xbps-src build system to install some proprietary software that is only
distributed by Void as source packages. This can be done by, briefly:
xbps-install xtools
git clone https://github.com/voidlinux/void-packages
and installing Google Chrome:
$ cd void-packages
$ ./xbps-src pkg google-chrome
$ sudo xbps-install --repository=hostdir/binpkgs/nonfree google-chrome.
xbps-src usage for building third party software is described in Void Linux:
Creating Binary Packages Using xbps-src