From 0c0ddf56c682734853feedaa8faac2bc31bdf6a4 Mon Sep 17 00:00:00 2001 From: David Young Date: Thu, 29 Oct 2026 09:41:43 -0600 Subject: [PATCH 1/5] Add Federated Calendar --- README.md | 2 ++ install.sh | 4 ++++ packages.conf | 1 + updates.d/10-pacman.sh | 5 +++++ utils.sh | 17 +++++++++++++++++ 5 files changed, 29 insertions(+) diff --git a/README.md b/README.md index 388ff82..c9c223e 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,8 @@ The scripts install lots of useful software. There are (4) main ways software is Pacman installs software from the "packages.conf" file. It installs software such as neovim, tmux, Go, Rust, Docker, Tailscale, Element, LibreOffice, etc. Tell me if you want other tools or submit a pull request. +Federated Computer's own packages, such as Federated Calendar, come from the `[federated]` repository on Federated Computer's Gitea. CoreDesktop adds it to /etc/pacman.conf and trusts its signing key (fingerprint `6AB7C080D87C74BEE3925A026329376994F18B4E`), so they install and update like any other pacman package. Federated Calendar is installed alongside GNOME Calendar and can invite people to events on your Core's Nextcloud calendars. + ### AUR Yay is installed as is the way AUR packages are installed and maintained. Examples include the Helium Browser and Winboat. Helium is made the default browser once; you can choose another in Settings > Apps > Default Apps. diff --git a/install.sh b/install.sh index 8ae971a..42b60e2 100755 --- a/install.sh +++ b/install.sh @@ -71,6 +71,10 @@ source packages.conf echo "Starting full system setup..." +# Federated Computer's own packages (Federated Calendar, ...) +echo "Adding the Federated Computer package repo..." +ensure_federated_repo + # Bring the system fully up to date before installing anything new echo "Updating system..." sudo pacman -Sy --needed --noconfirm archlinux-keyring diff --git a/packages.conf b/packages.conf index a670754..f28267c 100644 --- a/packages.conf +++ b/packages.conf @@ -124,6 +124,7 @@ DESKTOP=( cliamp cline-desktop element-desktop + federated-calendar gnome gnome-tweaks helium-browser-bin diff --git a/updates.d/10-pacman.sh b/updates.d/10-pacman.sh index ad87e09..ef19b6d 100644 --- a/updates.d/10-pacman.sh +++ b/updates.d/10-pacman.sh @@ -12,6 +12,11 @@ echo "Removing unwanted packages..." remove_packages "${REMOVE_PACMAN[@]}" remove_flatpaks "${REMOVE_FLATPAKS[@]}" +# Machines installed before Federated Calendar need the repo before the -Sy +# below and install_packages, so this can't wait for a migration +echo "Checking the Federated Computer package repo..." +ensure_federated_repo || STATUS=1 + # A machine that hasn't updated in a while can have a keyring too old to verify # the new packages. Update it first; the -Su below completes this -Sy. echo "Updating Arch keyring..." diff --git a/utils.sh b/utils.sh index 1d6c702..b595aa9 100755 --- a/utils.sh +++ b/utils.sh @@ -36,6 +36,23 @@ install_packages() { fi } +FEDERATED_REPO_URL="https://gitea.federated.computer/api/packages/Federated_Computer/arch" +FEDERATED_REPO_KEY="6AB7C080D87C74BEE3925A026329376994F18B4E" + +# Add Federated Computer's pacman repo, which Gitea serves and signs, and trust +# its key. Does nothing if both are already set up. +ensure_federated_repo() { + if ! sudo pacman-key --list-keys "$FEDERATED_REPO_KEY" &> /dev/null; then + curl -fsSL "$FEDERATED_REPO_URL/repository.key" | sudo pacman-key --add - || return 1 + sudo pacman-key --lsign-key "$FEDERATED_REPO_KEY" > /dev/null || return 1 + fi + + if ! grep -q '^\[federated\]' /etc/pacman.conf; then + printf '\n[federated]\nSigLevel = Required DatabaseRequired\nServer = %s/$repo/$arch\n' \ + "$FEDERATED_REPO_URL" | sudo tee -a /etc/pacman.conf > /dev/null || return 1 + fi +} + # Function to install pipx applications if not already installed install_pipx_apps() { local installed app status=0 From 32f91b373d6553d31c3f8a0f6d7a1e387b1099c3 Mon Sep 17 00:00:00 2001 From: David Young Date: Thu, 29 Oct 2026 12:38:55 -0600 Subject: [PATCH 2/5] Add zig --- packages.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/packages.conf b/packages.conf index f28267c..50e6280 100644 --- a/packages.conf +++ b/packages.conf @@ -107,6 +107,7 @@ DEV_TOOLS=( uv vim yazi + zig zsh ) From b81413f15ba21f3b4c14bfaeff0e7fea1d26bf30 Mon Sep 17 00:00:00 2001 From: David Young Date: Thu, 29 Oct 2026 12:47:04 -0600 Subject: [PATCH 3/5] fix herdr --- packages.conf | 3 ++- remove-packages.conf | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages.conf b/packages.conf index 50e6280..0353b61 100644 --- a/packages.conf +++ b/packages.conf @@ -81,7 +81,8 @@ DEV_TOOLS=( git gnome-video-effects go - herdr + # The source-built herdr pins an exact zig version that Arch rarely ships + herdr-bin hugo # cline-desktop's build aborts without an appindicator library (its PKGBUILD # only lists one as optional); also its tray icon. Here so it's installed diff --git a/remove-packages.conf b/remove-packages.conf index c9ba896..3b49c6d 100644 --- a/remove-packages.conf +++ b/remove-packages.conf @@ -5,6 +5,8 @@ REMOVE_PACMAN=( alpaca-ai conky-cli + # Replaced by herdr-bin, which conflicts with it + herdr lmstudio-bin neofetch steghide From eeeef3f61b06790ceaf2adcb24bba69916d7b56e Mon Sep 17 00:00:00 2001 From: David Young Date: Thu, 29 Oct 2026 13:00:55 -0600 Subject: [PATCH 4/5] fix cline-desktop and voxtype --- install.sh | 6 ++++++ packages.conf | 10 ++++------ remove-packages.conf | 5 ++++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/install.sh b/install.sh index 42b60e2..5f2850d 100755 --- a/install.sh +++ b/install.sh @@ -68,6 +68,7 @@ if [ ! -f "packages.conf" ]; then exit 1 fi source packages.conf +source remove-packages.conf echo "Starting full system setup..." @@ -101,6 +102,11 @@ else echo "yay is already installed." fi +# Remove replaced packages first, so their replacements don't conflict with them +echo "Removing unwanted packages..." +remove_packages "${REMOVE_PACMAN[@]}" +remove_flatpaks "${REMOVE_FLATPAKS[@]}" + # Install packages grouped by category as defined in packages.conf echo "Installing system utilities..." install_packages "${SYSTEM_UTILS[@]}" diff --git a/packages.conf b/packages.conf index 0353b61..2872d9b 100644 --- a/packages.conf +++ b/packages.conf @@ -84,10 +84,6 @@ DEV_TOOLS=( # The source-built herdr pins an exact zig version that Arch rarely ships herdr-bin hugo - # cline-desktop's build aborts without an appindicator library (its PKGBUILD - # only lists one as optional); also its tray icon. Here so it's installed - # before DESKTOP builds cline-desktop. - libayatana-appindicator neovim nodejs npm @@ -124,7 +120,9 @@ MAINTENANCE=( DESKTOP=( bitwarden cliamp - cline-desktop + # Prebuilt: the source builds of cline-desktop and voxtype break whenever + # Arch updates rust or the libraries they compile against + cline-desktop-bin element-desktop federated-calendar gnome @@ -133,7 +131,7 @@ DESKTOP=( kitty libreoffice-fresh sonarr-bin - voxtype + voxtype-bin winboat-bin ) diff --git a/remove-packages.conf b/remove-packages.conf index 3b49c6d..6e33910 100644 --- a/remove-packages.conf +++ b/remove-packages.conf @@ -4,12 +4,15 @@ # Pacman / AUR packages to remove (works for both pacman and yay packages) REMOVE_PACMAN=( alpaca-ai + # Replaced by cline-desktop-bin, herdr-bin and voxtype-bin, which conflict + # with them + cline-desktop conky-cli - # Replaced by herdr-bin, which conflicts with it herdr lmstudio-bin neofetch steghide + voxtype ) # Flatpak applications to remove From f1d30535746be89cf1f76d13ce466cd35c18efce Mon Sep 17 00:00:00 2001 From: David Young Date: Thu, 29 Oct 2026 13:04:02 -0600 Subject: [PATCH 5/5] fix utils.sh remove --- utils.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utils.sh b/utils.sh index b595aa9..ce42c8e 100755 --- a/utils.sh +++ b/utils.sh @@ -81,8 +81,10 @@ remove_packages() { local packages=("$@") local to_remove=() + # Match the exact name: pacman -Q also finds a package that provides it, such + # as herdr-bin for herdr, which pacman -R won't remove by that name for pkg in "${packages[@]}"; do - if is_installed "$pkg"; then + if [ "$(pacman -Qq "$pkg" 2> /dev/null)" = "$pkg" ]; then to_remove+=("$pkg") fi done