11 KiB
Packages
Leaving the Omarchy repository
Omarchy ships its own binary repository, added to /etc/pacman.conf:
[omarchy]
Server = https://pkgs.omarchy.org/stable/$arch
Thirty-one installed packages came from it. blob-repo-migrate moves off it.
Run it dry first; it changes nothing without --apply:
blob repo-migrate
blob repo-migrate --apply
It refuses to run if the stock linux package is not installed, because it
removes linux-omarchy.
What happens to each package
Removed (15)
Omarchy's own software, plus one hardware helper this machine has no use for:
omarchy, omarchy-keyring, omarchy-settings, omarchy-nvim, omacalc,
omacut, omawrite, tensaku, tobi-try, cliamp, herdr, ttfx,
linux-omarchy, linux-omarchy-headers, asdcontrol.
linux-omarchy was installed but not booted - the running kernel is stock
core/linux, so the machine is not relying on it. asdcontrol sets brightness
on Apple Studio Displays and is reachable only from
blob-brightness-display-apple.
Replaced (2)
| From | To | Where |
|---|---|---|
ttf-jetbrains-mono-nerd-basic |
ttf-jetbrains-mono-nerd |
official extra |
hyprland-preview-share-picker |
hyprland-preview-share-picker-git |
AUR |
The first is Omarchy's trimmed build of a font Arch ships in full.
Kept, from the AUR (14)
aether, limine-mkinitcpio-hook, limine-snapper-sync, localsend,
minecraft-launcher, mise-bin, spotify, ttf-ia-writer, tzupdate,
ufw-docker, visual-studio-code-bin, xdg-terminal-exec, yaru-icon-theme,
yay.
All exist in the AUR under the same name. Once the repository is gone, pacman
treats them as foreign and yay picks them up, so blob update rebuilds them
from source. The first update after migrating therefore takes noticeably longer
than usual.
Two are worth knowing about:
xdg-terminal-execused to be load-bearing: every TUI launcher, the floating launcher behind most of the menu, and$TERMINALcalled it by name, so a failed AUR build silently broke about half the menu. They all go throughblob-terminal-execnow, which prefers it and falls back tofoot, thenkitty, both from the official repositories.aetheris in the AUR at a version newer than the one the repository shipped.
quickshell never came from the Omarchy repository - it is in official extra.
Installing packages
install.sh installs what is missing before it writes any config:
packages/blob.packages 147 packages from core, extra, multilib
packages/blob-aur.packages 13 packages with no official equivalent
Only missing packages are touched, through pacman -S --needed and
yay -S --needed. An entry is treated as already installed, and skipped, when a
package of that name is installed, when an installed package provides that name,
or when the name is a group whose members are all installed - so base-devel and
packages pulled in under a different name no longer come back on every run. AUR
packages are built one at a time, so a build that fails is reported at the end
instead of stopping the install.
Repo packages go in one pacman -Syu --needed call, so the databases are
fresh and the system is upgraded in the same transaction. Refreshing the
databases without upgrading (-Sy then -S) is a partial upgrade, which Arch
does not support and which breaks libraries on a fresh install whose ISO is a
few weeks old. If that call fails the system is upgraded on its own and the
packages are installed one at a time, so one unresolvable name does not
block the other hundred - which is how a missing sddm used to turn into a
machine with no login screen. install.sh ends by naming any of sddm,
hyprland, quickshell and uwsm that are still not installed.
./install.sh --check lists what it would install without installing anything,
and --skip-packages does the directories and config only.
Validating the lists
blob-packages-check
pacman -Si and yay -Si both search every configured repository, so a
package that exists only in a third-party repo passes them and then fails on a
machine without that repo. blob-packages-check names the repositories
explicitly instead: official entries must be in core, extra or multilib, and AUR
entries must have an exact aur/ match and must not be in an official repo.
Run it after editing either list. It caught localsend and tzupdate sitting in
the official list when they only exist in the Omarchy repository, and awww,
lazydocker and woff2-font-awesome sitting in the AUR list when they are in
official extra.
Bootstrapping an AUR helper
A fresh Arch install has no AUR helper, and yay is not in the official
repositories. install.sh builds yay-bin from the AUR once with makepkg
before installing anything from the AUR list, which is why base-devel and
git are in the official list.
An entry may be written wanted|already-fine, which asks for the first name but
accepts either as satisfying the requirement. That is how
hyprland-preview-share-picker-git avoids conflicting with the non-git build
that the Omarchy repository still ships.
Three of the AUR entries are load-bearing for this fork and were not in Omarchy's own package list, because they were installed by hand on this machine:
| Package | Needed by |
|---|---|
python-pywal16 |
blob-wallpaper-set, palette extraction |
python-terminaltexteffects |
blob-screensaver, the effects it draws |
playerctl |
the quick settings media row |
playerctl is in official extra, so it sits in the repo list.
Desktop applications
The everyday apps come from the official repositories with everything else:
| Package | Opens |
|---|---|
loupe |
images (GNOME Image Viewer) |
imv |
images, keyboard-driven, for scripts and quick previews |
mpv |
video and audio |
evince |
documents: PDF, PostScript, DjVu, XPS and comic books |
guvcview |
webcam viewer and capture |
libreoffice-fresh |
documents, spreadsheets and presentations (Writer, Calc, Impress) |
kdenlive |
video editing |
gnome-text-editor |
plain text and Markdown |
file-roller |
archives (zip, 7z, rar, tar) |
gnome-calculator |
calculator |
baobab |
disk usage analyzer |
gnome-disk-utility |
drives and partitions |
gnome-system-monitor |
processes and resources |
pavucontrol |
audio mixer |
network-manager-applet |
network connections (nm-connection-editor) |
obsidian |
notes; Super + Shift + O opens or focuses it |
hunspell-en_us gives LibreOffice spell checking, and ttf-liberation gives it
metric-compatible replacements for Arial, Times New Roman and Courier New, so
Microsoft Office documents keep their layout. 7zip, unrar and zip are the
archive backends file-roller needs.
In the terminal: btop, htop and nvtop for system and GPU monitoring,
duf for free disk space, and ncdu and dua for disk usage.
NetBird comes from the AUR as netbird-bin and netbird-ui-bin. The package
ships a templated netbird@.service whose socket lives at
/var/run/netbird/<instance>.sock, while the netbird CLI and the tray app
look for /var/run/netbird.sock. install.sh adds a drop-in that moves the
socket to the default path and enables netbird@main.service, so
netbird up and the tray app work with no extra flags. The tray app starts
with the session when it is installed. The service starts on
the next boot, or now with sudo systemctl start netbird@main.
install.sh makes them the default for their file types through xdg-mime,
which writes ~/.config/mimeapps.list. A type that already has a default in
that file is left alone, so a choice you made yourself always wins, and an app
that is not installed is skipped. The file types for each group are listed once, in
default/mime/<group>.types, and read by both the installer and
blob-default-mime.
To change them later, use Setup > Defaults in the Blob menu, which has Image Viewer, Video Player and PDF Viewer next to Browser, Terminal and Editor, or:
blob default image-viewer imv
blob default video-player vlc
blob default pdf-viewer zathura
Each lists only the apps it knows, shows only the installed ones in the menu, and sets the whole group of file types at once.
The boot splash
install.sh sets the splash to branding/blob_boot.png. To change it later:
blob boot # branding/blob_boot.png
blob boot ~/some/image.png # or any other image
An installed but unconfigured plymouth is not harmless: it takes the console
at boot and never hands it back, and getty@tty1 waits on
plymouth-quit-wait.service, so the machine reaches neither the greeter nor a
TTY. install.sh therefore masks plymouth-start.service and
plymouth-quit-wait.service until the splash is configured, and blob boot
unmasks them as part of configuring everything else - the theme in
default/plymouth/, the plymouth mkinitcpio hook, and the initramfs rebuild.
Every splash update then sets GRUB up to boot the machine and everything else on it:
- With GRUB already installed, it makes sure
os-proberis installed andGRUB_DISABLE_OS_PROBER=false, adds whichever ofquiet splash vt.global_cursor_default=0is missing fromGRUB_CMDLINE_LINUX_DEFAULTwithout touching the rest of the line, and regenerates the menu. os-prober finds other systems, Windows gets an explicit chainload entry when os-prober misses it on a shared ESP, and the run stops if the menu has no Arch entry. - Without GRUB, it runs the same migration as
blob boot grub: GRUB is installed, other systems are detected, and GRUB is armed for one test boot with Limine left as the standing default. Once that boot works,blob boot cleanupretires Limine. - On a machine not booted in UEFI mode GRUB is left alone and the kernel parameters the bootloader still needs are printed instead.
blob boot detect reruns only the OS detection.
Updating
blob update
Opens with the logo from ~/.config/blob/branding/screensaver.txt (falling back
to branding/screensaver.txt), the same text the screensaver draws, so
blob branding screensaver changes both. It checks for updates first and lists every pending system and AUR package with
its old and new version, then asks once with gum confirm (--no-confirm
skips it). When nothing is pending it says so and stops. The update itself runs
as four numbered steps: refresh the keyring, pacman -Syu, yay -Sua when the
AUR is reachable, and prune orphans. It ends with a summary of what changed and
how long it took, an offer to reboot when a new kernel came in, and a
notification. A failed step is named on screen and in a critical notification. blob update-available
prints the pending count that the bar's update indicator reads. The indicator
rechecks every six hours and a few seconds after any pacman transaction, so it
clears as soon as an update, from blob update or by hand, finishes.
This replaces 27 upstream scripts of channel, migration, and version-pinning machinery. There are no release channels: there is one repository set, which is Arch plus the AUR.
After migrating
pacman -Qtdq # orphans the removals left behind
pacman -Qm # everything now AUR-managed
blob-repo-migrate backs up /etc/pacman.conf to pacman.conf.bak.<epoch>
before editing, and prints the path.