Deterministic; Textfile based Package Manager. Primarily for Arch pacman or yay.
Install & remove packages using a user-friendly package list file.
# CORE
base linux linux-firmware
sudo make gcc
# GUI
sway swayidle swaylock dmenu
# APPS
xterm
firefox vlc
Packages are simply whitespace separated. #
are comments.
: System
base linux linux-firmware
: GUI
: Sway # Cuz sway is the best!
sway swayidle swaylock
xorg-xwayland
dmenu
xorg-xrdb qt5ct
xterm
: Audio
# Modern pipewire instead of pulseaudio!
pipewire pipewire-alsa pipewire-pulse
alsa-utils pavucontrol
helvum easyeffects
: Internet
wpa_supplicant dhcpcd
: Tools
: Core
zip unzip wget
patch
sudo inotify-tools
nano nano-syntax-highlighting
: Dev
git make gcc
dmd dub clang
: Pkgs
yay-git
fakeroot
: Media
vlc mpv
: Games
steam
: Dev
textadept vscode
: Terminal
!xterm
kitty
: Web
firefox
!chromium
vivaldi
Lines which begin with :
are groups. Groups are merely symbolic help in organizing the packages. Groups use tab indentation and are nestable.
When running as a root daemon. Your install process is: sudo nano /etc/pacman.txt
, add a package name, and save. Pactxtman will automagially install the added package. (todo: implement pactxtman -S [package(s)]
which will add the packages to the end of pacman.txt
to be organized later.)
When running as a daemon, saving the file will automagically trigger pactxtman to install missing packages.
Run as root: pactxtman --daemon --removeExtras
. (todo: implement as a SystemD service!)
--daemon
|-d
tells pactxtman to watch the file for changes and run pacman with --noconfirm
. --removeExtras
|-e
will have pactxtman remove installed packages which are not listed (The alternative is to explicitly mark for removal with !
, for example !xterm
|!chromium
.).
When running as a root daemon pacman.txt
should only have root write permitions!
Not tecnically a daemon... if you run pactxtman in a terminal, then anytime you edit pacman.txt
you can go the that terminal to enter your password.
Run with pactxtman --daemon --file ~/.config/pactxtman/pactxtman.txt --pacman "sudo pacman --noconfirm
(todo: When running as a user --file
should default to ~/.config
and pacman should use sudo by default.)
Whenever you change pacman.txt
run pactxtman explicitly.
When pactxt man is executed or when pacman.txt
changes (if -w
) it runs its process.
- It gets a list of explicitly installed packages by running
pacman -Qe
(Command can be configure with--query
|-q
.) - It parses the
pacman.txt
file (Configured with--file
|-f
.) - It calculates packages which should be installed or removed.
- It prints a the
pacman.txt
with colored highlighting of packages which need to be installed/removed. - It executes
pacman -S
(oryay
) for packages which need installed allowing pacman to request confirmation (unless running as a daemon or with--noconfirm
). - It executes
pacman -R
for packages which are marked explicitly for removal (!
, see above). - It executes
pacman -R
for packages which are installed but not listed (implicit removal). If running as a daemon it will skip this step unless--removeExtras
|-e
is specified. - If
--watch
|-w
or--daemon
|-d
it will watch for changes and repeat.
(Install & remove commands can be specified with --pacman
|-m
or --install
|i
and --remove
|r
.)
I am developing pactxtman because I wished to use it. I am already using it now on my computer. It should be noted that it is still in development and will have bugs, especially in areas I do not use directly myself. The "More Elaborate Example" above is very close to what I am using myself.
The project source is super small, abiding by the UNIX philosofy (do one thing, and do it well).
If you want to add a feature, have at it! Feel free to submit a pull request!
I hope to have an AUR package shortly.