Title: Managing OpenBSD installed packages declaratively
Author: Solène
Date: 05 May 2022
Tags: openbsd
Description: I wrote a simple utility to manage my packages using a
configuration file, installed missing packages and removing the extra
ones

# Introduction

I wrote a simple utility to manage OpenBSD packages on a system using a
declarative way.
pkgset git repository
Instead of running many pkg_add or pkg_delete commands to manage my
packages, now I can use a configuration file (allowing includes) to
define which package should be installed, and the installed but not
listed packages should be removed.

After using NixOS too long, it's a must have for me to manage packages
this way.

# How does it work?

pkgset works by marking extra packages as "auto installed" (the
opposite is manually installed, see pkg_info -m), and by installing
missing packages.  After those steps, pkgset runs "pkg_delete -a" to
remove unused packages (the one marked as auto installed) if they are
not a dependency of another required package.

# How to install?

The installation is easy, download the sources and run make install as
root, it will install pkgset and its man page on your system.

```shell commands
$ git clone https://tildegit.org/solene/pkgset.git
$ cd pkgset
$ doas make install
```

# Configuration file example

Here is the /etc/pkgset.conf file on my laptop.

```configuration file
borgbackup--%1.2
bwm-ng
fish
fzf
git
git-annex
gnupg
godot
kakoune
musikcube
ncdu
rlwrap
sbcl
vim--no_x11
vlc
xclip
xfce
xfce-extras
yacreader
```

# Limitations

The only "issue" with pkgset is that for some packages that "pkg_add"
may find ambiguous due to multiples versions or favors available
without a default one, you must define the exact package version/flavor
you want to install.

# Risks

If you use it incorrectly, running pkgset doesn't have more risks than
losing some or all installed packages.

# Why not use pkg_add -l ?

I know pkg_add as an option to install packages from a list, but it
won't remove the extra packages.  I may look at adding the "pkgset"
feature to pkg_add one day maybe.