A fast, keyboard-driven app & web-app installer for Arch Linux — omarchy-style, built for caelestia / Hyprland.
One graphical menu (via fuzzel) organised by source — official repos, the AUR, and web apps. Install from a curated catalog, search the full repos/AUR when you need something else, turn any URL into a desktop web app, or uninstall things — all without leaving the keyboard. Installs run fully unattended (no confirmation or build menus).
The menu UI is available in English or Spanish, chosen at install time (stored in
~/.config/pzget/lang). Code, config keys and this README are in English.
Demo GIF goes here.
pzget »
📦 Arch (oficial) programas del repositorio oficial
📥 AUR programas de la comunidad
🌐 Apps web YouTube, ChatGPT…
➕ Crear app web convierte un sitio web en app
🗑️ Eliminar app desinstala programas o webapps
Picking a package source drops you straight into an fzf picker over
everything in it, with your curated favourites merged at the top (*) and
installed packages checked:
> reproductor
┌───────────────────────────────────────────────────────────┐
│ * ✓ mpv a free, open source, and cross-platform… │
│ * vlc multi-platform MPEG, DVD, and DivX player│
│ audacious lightweight, advanced audio player │
└───────────────────────────────────────────────────────────┘
Typing reproductor finds mpv. That is the point of the whole thing.
Arch package descriptions are English-only, so a Spanish speaker searching their own language finds nothing — and a name-only picker means you can only find a package if you already know what it's called. pzget fixes both:
- Descriptions are searchable, not just names.
expac -Sdumps all ~23k repo packages with their descriptions in ~0.2 s, so the list is built once andfzffilters locally. - Spanish keywords are attached invisibly.
share/synonyms-es.tsvmaps Spanish terms onto packages whose English description matches. They're searchable but hidden from the display (fzf --nthvs--with-nth), so the list stays clean. - The AUR is searched live through its RPC rather than listing ~90k bare names. The RPC returns descriptions and vote counts — and votes are what let you tell a real package from its near-identical forks.
- Organised by source — the top-level menu is the sources (📦 Arch / 📥 AUR / 🌐 web apps), so you always know where an app comes from. Installed catalog items are marked with a check.
- One picker, everything in it — choosing a source opens an omarchy-style
fzfpicker over every package it has, searchable by description and by Spanish keyword, with your favourites merged at the top, info preview and multi-select. - Unattended installs — pacman/AUR packages install with no prompts
(
--noconfirmplus--answerdiff/clean=None); only your sudo password is asked once. - Web apps — turn any URL into a Chromium
--appdesktop entry with a high-quality icon (auto-fetched from unavatar/clearbit/icon.horse and always converted to PNG so launchers render it). - Uninstall anything — “🗑️ Eliminar app” opens an
fzfpicker of installed packages and your pzget web apps; removes packages withpacman -Rnsand web apps by deleting their.desktop/icon (and theirwebapps.tomlentry).
| Tool | Used for |
|---|---|
fuzzel |
the graphical menu |
fzf |
the “search / uninstall” pickers |
expac |
listing repo packages with their descriptions (~0.2 s for ~23k) |
yay |
installing from official repos and the AUR |
python3 (≥ 3.11) |
reading the TOML catalog (tomllib) |
a chromium-family browser (chromium, brave, …) |
web apps |
curl + imagemagick (or python-pillow) |
fetching/converting web-app icons |
a terminal: kitty, foot, or any xdg-terminal-exec provider |
install/search windows |
git clone https://github.com/Daf3r/pzget ~/.local/share/pzget
~/.local/share/pzget/install.shinstall.sh symlinks the binaries into ~/.local/bin (make sure that's on your
PATH) and asks for your UI language (English or Spanish). You can change it
later by editing ~/.config/pzget/lang (en or es) or re-running the script.
Bind a key to launch it, and make its terminal windows float nicely
(~/.config/hypr/... or, on caelestia, ~/.config/caelestia/hypr-user.conf):
# launch pzget
bind = Super, I, exec, /home/youruser/.local/share/pzget/bin/pzget
# pzget's install/search terminal: floating, centred (the size is set by the
# terminal itself — see pzget's term_run; Hyprland's `size` rule is ignored by
# terminals)
windowrule = float true, match:class ^pzget$
windowrule = center true, match:class ^pzget$Tip: use the absolute path in the bind — Hyprland doesn't always inherit your shell
PATH.
Edit catalog.toml (or copy it to ~/.config/pzget/catalog.toml to override
without touching the repo). Apps are grouped by topic for easy editing; the menu
re-groups them by source automatically.
[[categories]]
id = "dev"
name = "Desarrollo"
icon = "🛠️"
blurb = "editores, git, terminales"
[[categories.apps]]
name = "Neovim"
source = "repo" # repo | aur | webapp
pkg = "neovim" # package name (repo / aur)
desc = "editor de texto basado en Vim" # default / fallback
desc_en = "Vim-based text editor" # used when language = en
[[categories.apps]]
name = "YouTube"
source = "webapp"
url = "https://youtube.com"
desc = "vídeos"Web apps you create from the menu are stored separately in
~/.config/pzget/webapps.toml and shown under Mis webapps — you never
hand-edit those.
| Binary | Role |
|---|---|
pzget |
Bash orchestrator — the fuzzel menu and router |
pzget-i18n |
Bash — sourced translation table (en/es) + t() helper |
pzget-catalog |
Python — the only piece that parses TOML; emits menu lines (lang-aware desc) |
pzget-pkg-list |
Python — builds the searchable list via expac, merging favourites and Spanish keywords |
pzget-pkg-pick |
Bash — omarchy-style fzf package picker, scoped to one source |
pzget-aur-search |
Bash — live AUR RPC search (descriptions + vote counts) |
pzget-theme |
Bash — fuzzel styling derived from the desktop's live colour scheme, so the menu never clashes with your theme |
pzget-pkg-remove |
Bash — fzf uninstaller for packages + pzget web apps |
pzget-preview |
Bash — shell-agnostic fzf preview helper for the uninstaller |
pzget-webapp-add |
Bash — creates a web-app .desktop + icon |
Design note: Bash never parses TOML — it always asks pzget-catalog and reads
back plain tab-separated lines, so the catalog format can change without
touching the menu.
Web-app or app icons show as broken/pink squares.
-
pzget web apps: make sure
imagemagick(orpython-pillow) is installed so icons get converted to PNG — many launchers can't render.webp/.ico. -
Qt apps in general, on caelestia: caelestia renders its bar/launcher with a Qt shell, so it needs the
qtengineQt platform theme (it setsQT_QPA_PLATFORMTHEME=qtengine). If that package is missing, Qt can't resolve any icon theme and everything shows broken. Install it and re-login:yay -S qtengine-git # or: qtengineIts icon theme is read from
~/.config/qtengine/config.json("iconTheme": "Papirus-Dark"by default on caelestia).
MIT © Polarzero Dev / Daf3r — see LICENSE.