Introduction

Void Linux is

I reviewed version 20171007 of Void in 2018 in target.

I decided to try Void now because while browsing the Internet for X11 replacements, I came across a video on installing Xlibre on Void. About the same time I saw that there are now an increasing number of Void Linux derivatives created with its ISO and live system creation tools. I first installed Void on my secondary laptop, the Dell G5. I was so impressed with its speed, I installed it on my primary laptop, the Lenovo Legion.

Review Summary

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.

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.

  • The xf86-input-synaptics touchpad driver was installed by default, causing conflicts such that the Plasma System Settings touchpad settings could not be modified. This required uninstalling the conflicting driver and modifying the X configuration by creating a file, /etc/X11/xorg.conf.d/30-touchpad.conf, and adding:
    Section "InputClass"
    Identifier "touchpad"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    Driver "libinput"
    Option "Tapping" "on"
    EndSection
  • The first time I moved to a new wireless network after installation, NetworkManager would not update the nameserver settings in its /run/NetworkManager/resolv.conf file, which is linked to /etc/resolv.conf. This required manually modifying the settings in this file to connect, then tinkering with nmcli, disabling the wpa_supplicant service, installing iwd, enabling its service, and more tinkering with one of its command line program, iwctl. Somehow, after reestablishing the link between /run/NetworkManager/resolv.conf and /etc/resolv.conf.

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.

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.

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.

Performance

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)
.

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.

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

Fixes and Enhancements

Install Plasma Applications

Replace wpa_supplicant

Touchpad Confuguration

References