Packagemanager-LFS-PackageUser-System git · main
Package-user based package manager for LFS/BLFS
Shell 63.7% Markdown 35.8%git clone https://git.christianimmanuel.de/linux-from-scratch/Packagemanager-LFS-PackageUser-System.gitwget https://git.christianimmanuel.de/linux-from-scratch/Packagemanager-LFS-PackageUser-System/archive/Packagemanager-LFS-PackageUser-System.tar.gzstacks/apps.stack raw
# apps.stack -- desktop applications: a document viewer, an image viewer and
# a partition editor.
# stack-version: 1.14.334
#
# WHAT THIS MACHINE NEVER BUILDS is in avoid.stack, included by every stack
# here: the exclusions are a property of the machine, not of one stack.
include avoid
# packagemanager stack apps --run
#
# Programs you open, not the desktop they open on. Run it AFTER sway.stack:
# they need GTK and wayland from it, and nothing there needs them. They
# were the tail of sway.stack until 1.14.320.
# VIEWERS: a document one and an image one. Neither is in the BLFS book.
#
# CHECKED with git ls-remote, all four at once: girara, zathura and
# zathura-pdf-poppler share the release tag **2026.07.18** (they are one
# project, released together -- mixing tags is the usual way to get a
# zathura that cannot open a PDF), and imv's newest is **v4.3.0**.
# imv's repo answers on both github.com/exec64/imv and .../eXeC64/imv; the
# lowercase spelling is used here.
#
# zathura is THREE packages: girara is its widget library, the core opens no
# file formats at all, and the backend is a separate plugin. A zathura with
# no plugin starts, shows a grey window and says nothing -- which is what
# the expect= below is for: it looks for the PLUGIN, not the binary.
#
# poppler (the backend's dependency) is a book page. It was in avoid.stack
# as libcupsfilters' child; it is wanted now. mupdf stays avoided -- it is
# the other backend and one is enough.
book poppler
# girara installs **girara.pc**, not girara-gtk3.pc: its meson.build says
# `pkg.generate(name: 'girara', ...)`. The old guess made the stack refuse
# to record a girara that had installed perfectly -- "finished, but
# /usr/lib/pkgconfig/girara-gtk3.pc is still missing", which is the have=
# check doing its job on a wrong have=.
git girara url=https://github.com/pwmt/girara.git ref=2026.07.18 \
have=/usr/lib/pkgconfig/girara.pc \
build="meson setup build --prefix=/usr --buildtype=release; ninja -C build" \
install="ninja -C build install"
# xxHash, BEFORE zathura. Mentioned eight times in the BLFS book and given
# no page of its own, so this entry is ours.
#
# zathura 2026.07.18 takes it as a hard dependency:
# Run-time dependency libxxhash found: NO (tried pkgconfig and cmake)
# meson.build:57:9: ERROR: Dependency "libxxhash" not found
#
# CHECKED in the checkout: newest tag v0.8.3; it ships libxxhash.pc.in, so
# the pkg-config module really is `libxxhash` -- the name meson asks for --
# and `make install` runs install_libxxhash.pc among its targets. A plain
# Makefile, no cmake or meson: PREFIX and LIBDIR are what it takes.
git xxhash url=https://github.com/Cyan4973/xxHash.git ref=v0.8.3 \
have=/usr/lib/pkgconfig/libxxhash.pc \
build="make PREFIX=/usr LIBDIR=/usr/lib" \
install="make PREFIX=/usr LIBDIR=/usr/lib install" \
expect="pkg-config --exists libxxhash"
# NO -Dsqlite: zathura has no such option. Its meson.build takes sqlite as
# an unconditional dependency -- `dependency('sqlite3', version: '>=3.35.0')`
# -- and its only options are synctex, seccomp, landlock, manpages,
# tests-x11, tests-wayland and convert-icon. `-Dsqlite=enabled` stopped
# meson dead with `Unknown option: "sqlite"`, which is what guessing an
# option name earns. sqlite3 is already installed here (p_sqlite).
git zathura url=https://github.com/pwmt/zathura.git ref=2026.07.18 \
prog=zathura \
build="meson setup build --prefix=/usr --buildtype=release; ninja -C build" \
install="ninja -C build install"
git zathura-pdf-poppler url=https://github.com/pwmt/zathura-pdf-poppler.git \
ref=2026.07.18 \
have=/usr/lib/zathura/libpdf-poppler.so \
build="meson setup build --prefix=/usr --buildtype=release; ninja -C build" \
install="ninja -C build install" \
expect="test -e /usr/lib/zathura/libpdf-poppler.so"
# imv: wayland image viewer. The binary is `imv`, which dispatches to
# imv-wayland or imv-x11 -- so the probe wants the wayland one, or on this
# machine it would pass on an imv that can only open windows under X.
# -licuuc: imv links libicuio and CALLS libicuuc (ubrk_close), and its
# link line carries -Wl,--no-undefined, so the indirect dependency is an
# error rather than a warning:
# undefined reference to symbol 'ubrk_close_78'
# /lib/libicuuc.so.78: error adding symbols: DSO missing from command line
# icu splits its API across libicuuc (common), libicui18n and libicuio;
# imv's meson names only the one it uses directly. Naming the other on the
# link line is the whole fix -- nothing is patched.
git imv url=https://github.com/exec64/imv.git ref=v4.3.0 \
prog=imv \
build="meson setup build --prefix=/usr --buildtype=release -D c_link_args=-licuuc; ninja -C build" \
install="ninja -C build install" \
expect="command -v imv-wayland >/dev/null 2>&1 || ldd /usr/bin/imv 2>/dev/null | grep -q wayland"
# GPARTED -- partitions, with a window. It is a BLFS page (Gparted-1.7.0),
# so the planner brings gtkmm3 and parted with it; both are C++/GTK builds
# and this is not a five-minute entry.
#
# IT RUNS AS ROOT, FROM A TERMINAL. The book's page uses polkit for the
# graphical "type your password" step, and polkit is in avoid.stack (it
# arrives only through colord and systemd, which this machine does not
# have). Without it there is no menu entry that can ask: start it from a
# root shell. `gparted` alone then works; it needs $DISPLAY/$WAYLAND_DISPLAY,
# so run it from a terminal inside the session.
#
# The partition TOOLS it drives are separate packages -- exfatprogs and
# btrfs-progs are in services.stack; what is missing shows up greyed out in
# gparted's filesystem menu, not as an error.
# LVM2 IS NOT PART OF A PARTITION EDITOR. The book RECOMMENDS it for
# parted, so the planner pulls it in -- and on this machine, which has no
# logical volumes, it is an hour of build and a package whose install wants
# root (13.0's page puts `mount -o remount,dev /tmp` in the middle of it).
# ignore= keeps it out of this entry's plan only; install it deliberately
# the day this laptop grows an LVM volume:
# packagemanager install lvm2 --run --recursive
book gparted \
ignore=lvm2 \
expect="command -v gparted >/dev/null"