02/02/2020: This week in KISS (#9)
The package manager now includes an "alternatives system". This feature allows you to change the provider of a specific file or set of files.
For example, a user can now swap from busybox to the GNU coreutils by running a simple command.
This works in an entirely dynamic way and required zero changes to the package format or the repository files themselves! 
When a conflict is detected between another package during installation, the conflicting files become "choices" in the alternatives system.
kiss a or
kiss alternatives will list all available choices that can be made.
-> kiss a -> Alternatives: ncurses /usr/bin/clear ncurses /usr/bin/reset
The above command tells me that I have two available choices from the
ncurses package. To find out which package owns the current "choice", the
kiss-owns utility from
kiss-utils can be used (a simple
grep in your installed db also works).
-> kiss a ncurses /usr/bin/clear -> Swapping '/usr/bin/clear' from 'busybox' to 'ncurses'
My system now uses
/usr/bin/clear from the
ncurses package. Running
kiss a again will now show the following output.
-> kiss a -> Alternatives: busybox /usr/bin/clear ncurses /usr/bin/reset
Here's a more complex example showing the swap between a large bulk of choices.
-> kiss a -> Alternatives: busybox /usr/bin/clear coreutils /usr/bin/[ coreutils /usr/bin/base64 coreutils /usr/bin/basename coreutils /usr/bin/cat coreutils /usr/bin/chgrp coreutils /usr/bin/chmod # Lots of 'coreutils *' lines here. coreutils /usr/bin/whoami coreutils /usr/bin/yes ncurses /usr/bin/reset
The output of
kiss a can be directly used as input to
kiss a. Each line is a valid set of arguments! Here's how you'd swap to GNU coreutils in a single command.
# The package manager will read each line from stdin. kiss a | grep ^coreutils | kiss a - # Running 'kiss a' will show the inverse of the above listing, # a long output of 'busybox *'.
My system is now using the GNU coreutils!
This system works for any files across the entire filesystem and as it is entirely dynamic (requiring no changes to the repositories or the package format ) it is backwards compatible.
The feature allows the user to swap their
coreutils and really anything they desire. Very complex setups are now easily possible when this is paired with the repository system.
The package manager, init scripts and package files are written in POSIX shell allowing any POSIX compatible shell or coreutils to be used in place of the defaults (one exception is made for
sed -i which is too useful to let go of ).
With this change, the user now has the choice between, init, device manager, coreutils, shell and anything they desire!
: Some minor changes were made to where some packages install their files. coreutils was installed to /usr/local/bin due to the absence of this alternatives feature. This was still not a change to the format of the package system itself though!
: Utilities like
tar which have no standard command-line interface may be incompatible when swapped out. There's nothing that can really be done about this.
- Dylan Araps:
72be609falkon: Added optional open-in-mpv extension
15f1d9bsowm: bump to 1.2
8a25531mpv: bump to 0.32.0
f8658f1pkgconf: Swap to http source for now. Closes #139
154f4a3qt5-*: bump to 5.14.1
6549391falkon: Remove unneeded sed calls
6043ae3falkon: fix version
0e47e11sqlite: bump to 3.31.1
f961652dhcpcd: bump to 8.1.6
37177efopenresolv: bump to 3.10.0
85b261clibva-utils: Fix depends
209bea7mesa: bump to 19.3.3
f1aa593kiss: bump to 1.0.0
cf5a975kiss-utils: bump to 1.0.0
796550ekiss: bump to 1.0.1
6149f07kiss-utils: bump to 1.0.1
a42e25dncurses: Allow conflicts
e949836baseinit: bump to 0.3
8004986kiss: bump to 1.0.2
db53c47kiss-utils: bump to 1.0.2
2b52c35kiss: bump to 1.0.3
eee548bkiss-utils: bump to 1.0.3
587f8cakiss: bump to 1.0.4
e30562ckiss-utils: bump to 1.0.4
c28cb6fkiss: bump to 1.0.5
876afd4kiss-utils: bump to 1.0.5
fa42f5ekiss: bump to 1.0.6
ff42d39kiss-utils: bump to 1.0.6
bcf681bkiss-utils: Fix build with suckless install
8a6f5cexinit: remove sed -i
d3ae5d1st: Remove sed -i
b314878mesa: remove sed -i
df36110libxcb: Remove sed -i
2217317intel-media-driver: Remove sed -i
d8efedbrepo: Revert sed changes
3dcf2e3mtdev: bump to 1.1.6
33d6106kiss: bump to 1.1.1
877a99ekiss-utils: bump to 1.1.1
a8262d4kiss: bump to 1.1.2
a07695akiss-utils: bump to 1.1.2
6c693fdkiss: bump to 1.1.3
b177fc8kiss-utils: bump to 1.1.3
e2f5025kiss: bump to 1.1.4
db27e9ekiss-utils: bump to 1.1.4
04571c5kiss: bump to 1.1.6
f8b28bekiss-utils: bump to 1.1.6
806c863opendoas: Move to extra
2dd7b91kiss: bump to 1.1.7
0e275d5kiss-utils: bump to 1.1.7
5593f35rust [testing]: Added rust 1.41.0
0f3103fsudo: bump to 1.8.31
f6e43e1cbindgen [testing]: bump to 0.13.0
24a5463rust: Use xz
6549c1ecbindgen: Bump to 0.13.0
ebbb23brust: bump to 1.41.0
1d4b4a8util-linux: bump to 2.35.1
b3db27bxkeyboard-config: bump to 2.29
b93e8acbinutils: bump to 2.34
- Adam Schaefers:
f735f0eNew Package: sinit 1.1 (#200)
96a061esinit: revert to 1.0 (#270)
c6029b2sbase: use official git sources (#271)
88278aaubase: use official sources (#272)
358a6b1nawk: update build for alternatives (#288)
57f66e4patch: update build for alternatives (#286)
6df5604gnugrep: update build for alternatives (#285)
cf9d490findutils: update build for alternatives (#283)
66487d0diffutils: update build for alternatives (#282)
9b4cc92dash: update build for alternatives (#281)
5cb9a66gawk: update build for alternatives (#280)
cb3b96fcoreutils: remove 'g' prefix from build (#279)
a02560bgtar: update build for alternatives (#287)
766c1ccnew package: psproc-ng (#289)
71ab4defix name: proccps-ng (#291)
7ab9583procps-ng: bump to latest (#293)
f107694aerc: Track latest git instead (#266)
- Cem Keylan:
- Dylan Araps:
f008149imagemagick: bump to 7.0.9-18
2f9a3a8imagemagick: bump to 7.0.9-19
85b1197go: bump to 1.13.7
185b79eimagemagick: bump to 7.0.9-20
5b41b93spotifyd: drop package
96f8dbaubase: Drop su
8af78efsbase: Drop tar
c32880fsbase: Use unlink
abc34fbubase: Use unlink
383d6d9sbase: Remove sed
42bfd0bopendoas: Move to extra
f1d59d0mc: bump to 4.8.24
f710b64psproc-ng: Drop package
f14992eimagemagick: bump to 7.0.9-21
fec9e16pciutils: new package at 3.6.2. Closes #296
3c335d8nettle: bump to latest commit to fix gnutls build issues.
5919df8gnutls: bump to 3.6.12
94b8c8cpciutils: bump to 3.6.4
- Jonathan Dahan:
6ae6436osh: bump to 0.7.0 (#269)
- Will Eccles:
a55704b* Add xtrlock build (#268)