The XBPS alternatives framework ------------------------------- ------------------------------------------------- Package metadata stored in packages (props.plist) ------------------------------------------------- The 'nvi' pkg declares an alternative group named 'vi': ... alternatives vi /usr/bin/ex:/usr/bin/nvi /usr/bin/vi:/usr/bin/nvi /usr/share/man/man1/ex.1:/usr/share/man/man1/nvi.1 /usr/share/man/man1/vi.1:/usr/share/man/man1/nvi.1 ... ... The strings need to follow the : convention, delimited by the ':' character. -------------------------------------------------------------------- Package metadata stored in metadir (metadir/alternatives-0.48.plist) -------------------------------------------------------------------- /var/db/xbps/alternatives-0.48.plist (dict): 3 packages can provide the 'vi' alternative group: ex-vi, nvi or vim. The entry order determines the priority (first entry always wins). After running `xbps-install -Sy nvi ex-vi vim' the order is the following: ... vi nvi ex-vi vim ... ... If the 'nvi' pkg is removed, and there's no alternative set for `vi', the 'ex-vi' pkg now becomes the default alternative: ... vi ex-vi vim ... ... The user now decides that 'vi' should be provided by the 'vim' pkg, so that the matching entry is put into the head: ... vi vim ex-vi ... ... When no packages provide an alternative group, the alternative group and its associated symlinks will be completely removed. -------------------- xbps-alternatives(1) -------------------- - Listing all available alternatives and current state: $ xbps-alternatives -l libGL - libGL (current) - /usr/lib/libGL.so -> /usr/lib/libGL-mesa.so - /usr/lib/libGL.so.1 -> /usr/lib/libGL-mesa.so.1 - /usr/lib/xorg/modules/extensions/libglx.so -> /usr/lib/xorg/modules/extensions/libglx-xorg.so - nvidia-libs - /usr/lib/libGL.so -> /usr/lib/libGL-nvidia.so.1 - /usr/lib/libGL.so.1 -> /usr/lib/libGL-nvidia.so.1 - /usr/lib/xorg/modules/extensions/libglx.so -> /usr/lib/xorg/modules/extensions/libglx-nvidia.so - catalyst-libs - /usr/lib/libGL.so -> /usr/lib/libGL-fglrx.so.1 - /usr/lib/libGL.so.1 -> /usr/lib/libGL-fglrx.so.1 - /usr/lib/xorg/modules/extensions/libglx.so -> /usr/lib/xorg/modules/extensions/libglx-fglrx.so ntpd - openntpd (current) - /etc/sv/ntpd -> /etc/sv/openntpd - /usr/bin/ntpd -> /usr/bin/openntpd - /usr/share/man/man1/ntpd.1 -> /usr/share/man/man1/openntpd.1 - ntp - /etc/sv/ntpd -> /etc/sv/isc-ntpd - /usr/bin/ntpd -> /usr/bin/isc-ntpd - /usr/share/man/man1/ntpd.1 -> /usr/share/man/man1/isc-ntpd.1 - busybox - /etc/sv/ntpd -> /etc/sv/busybox-ntpd - /usr/bin/ntpd -> /usr/bin/busybox sort - coreutils (current) - /usr/bin/sort -> /usr/bin/coreutils-sort - /usr/share/man/man1/sort.1 -> /usr/share/man/man1/coreutils-sort.1 - busybox - /usr/bin/sort -> /usr/bin/busybox vi - nvi (current) - /usr/bin/ex -> /usr/bin/nvi - /usr/bin/vi -> /usr/bin/nvi - /usr/share/man/man1/ex.1 -> /usr/share/man/man1/nvi.1 - /usr/share/man/man1/vi.1 -> /usr/share/man/man1/nvi.1 - vim - /usr/bin/ex -> /usr/bin/vim-ex - /usr/bin/vi -> /usr/bin/vim - /usr/share/man/man1/ex.1 -> /usr/share/man/man1/vim-ex.1 - /usr/share/man/man1/vi.1 -> /usr/share/man/man1/vim.1 ... - Listing available alternative groups of a package: $ xbps-alternatives -l busybox ntpd - /etc/sv/ntpd -> /etc/sv/busybox-ntpd - /usr/bin/ntpd -> /usr/bin/busybox sort - /usr/bin/sort -> /usr/bin/busybox ... - Apply all alternative groups specified by the 'nvi' package (declares one group: vi): $ xbps-alternatives -s nvi Switched 'vi' alternatives group to 'nvi'. Creating 'vi' alternatives group symlink: /usr/bin/ex -> /usr/bin/nvi Creating 'vi' alternatives group symlink: /usr/bin/vi -> /usr/bin/nvi Creating 'vi' alternatives group symlink: /usr/share/man/man1/ex.1 -> /usr/share/man/man1/nvi.1 Creating 'vi' alternatives group symlink: /usr/share/man/man1/vi.1 -> /usr/share/man/man1/nvi.1 $ - Creating a specific alternative group of a package containing multiple groups: $ xbps-alternatives -s busybox -g ntpd Switched 'ntpd' alternatives group to 'busybox'. Creating 'ntpd' alternatives group symlink: /etc/sv/ntpd -> /etc/sv/busybox-ntpd Creating 'ntpd' alternatives group symlink: /usr/bin/ntpd -> /usr/bin/busybox $ --------------- xbps-install(1) --------------- Installing a package with an alternatives group for the first time: $ xbps-install -Syv vim Name Action Version New version Download size vim install - 1.0_1 - Free space on disk: 49GB [*] Downloading binary packages [*] Verifying package integrity vim-1.0_1: verifying SHA256 hash... [*] Running transaction tasks vim-1.0_1: unpacking ... vim-1.0_1: unpacked file `./usr/bin/vim' (0 bytes) vim-1.0_1: unpacked file `./usr/share/man/man1/vim.1' (0 bytes) vim-1.0_1: registered 'vi' alternatives group Creating 'vi' alternatives group symlink: /usr/bin/vi -> /usr/bin/vim Creating 'vi' alternatives group symlink: /usr/bin/ex -> /usr/bin/vim Creating 'vi' alternatives group symlink: /usr/bin/view -> /usr/bin/vim Creating 'vi' alternatives group symlink: /usr/share/man/man1/ex.1 -> /usr/share/man/man1/vim.1 Creating 'vi' alternatives group symlink: /usr/share/man/man1/vi.1 -> /usr/share/man/man1/vim.1 Creating 'vi' alternatives group symlink: /usr/share/man/man1/view.1 -> /usr/share/man/man1/vim.1 [*] Configuring unpacked packages vim-1.0_1: configuring ... vim-1.0_1: installed successfully. 0 downloaded, 1 installed, 0 updated, 1 configured, 0 removed. $ Installing a package that provides a 'vi' alternatives group (nvi): $ xbps-install -Syv nvi Name Action Version New version Download size nvi install - 1.0_1 - Free space on disk: 49GB [*] Downloading binary packages [*] Verifying package integrity nvi-1.0_1: verifying SHA256 hash... [*] Running transaction tasks nvi-1.0_1: unpacking ... nvi-1.0_1: unpacked file `./usr/bin/nvi' (0 bytes) nvi-1.0_1: unpacked file `./usr/share/man/man1/nvi.1' (0 bytes) nvi-1.0_1: registered 'vi' alternatives group [*] Configuring unpacked packages nvi-1.0_1: configuring ... nvi-1.0_1: installed successfully. 0 downloaded, 1 installed, 0 updated, 1 configured, 0 removed. $ Removing a package that was the default provider of the 'vi' alternatives group (vim): $ xbps-remove -yv vim Name Action Version New version Download size vim remove 1.0_1 - - Free space on disk: 49GB Removing `vim-1.0_1' ... Removing 'vi' alternatives group symlink: /usr/bin/vi Removing 'vi' alternatives group symlink: /usr/bin/ex Removing 'vi' alternatives group symlink: /usr/bin/view Removing 'vi' alternatives group symlink: /usr/share/man/man1/ex.1 Removing 'vi' alternatives group symlink: /usr/share/man/man1/vi.1 Removing 'vi' alternatives group symlink: /usr/share/man/man1/view.1 vim-1.0_1: unregistered 'vi' alternatives group Switched 'vi' alternatives group to 'nvi' Creating 'vi' alternatives group symlink: /usr/bin/vi -> /usr/bin/nvi Creating 'vi' alternatives group symlink: /usr/bin/ex -> /usr/bin/nvi Creating 'vi' alternatives group symlink: /usr/bin/view -> /usr/bin/nvi Creating 'vi' alternatives group symlink: /usr/share/man/man1/ex.1 -> /usr/share/man/man1/nvi.1 Creating 'vi' alternatives group symlink: /usr/share/man/man1/vi.1 -> /usr/share/man/man1/nvi.1 Creating 'vi' alternatives group symlink: /usr/share/man/man1/view.1 -> /usr/share/man/man1/nvi.1 Removed file `/usr/share/man/man1/vim.1' Removed file `/usr/bin/vim' Removed `vim-1.0_1' successfully. 0 downloaded, 0 installed, 0 updated, 0 configured, 1 removed. $