This commit is contained in:
2026-10-30 06:48:49 -06:00
6 changed files with 50 additions and 8 deletions
+2
View File
@@ -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. 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 ### 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. 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.
+10
View File
@@ -68,9 +68,14 @@ if [ ! -f "packages.conf" ]; then
exit 1 exit 1
fi fi
source packages.conf source packages.conf
source remove-packages.conf
echo "Starting full system setup..." 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 # Bring the system fully up to date before installing anything new
echo "Updating system..." echo "Updating system..."
sudo pacman -Sy --needed --noconfirm archlinux-keyring sudo pacman -Sy --needed --noconfirm archlinux-keyring
@@ -97,6 +102,11 @@ else
echo "yay is already installed." echo "yay is already installed."
fi 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 # Install packages grouped by category as defined in packages.conf
echo "Installing system utilities..." echo "Installing system utilities..."
install_packages "${SYSTEM_UTILS[@]}" install_packages "${SYSTEM_UTILS[@]}"
+8 -7
View File
@@ -81,12 +81,9 @@ DEV_TOOLS=(
git git
gnome-video-effects gnome-video-effects
go go
herdr # The source-built herdr pins an exact zig version that Arch rarely ships
herdr-bin
hugo 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 neovim
nodejs nodejs
npm npm
@@ -107,6 +104,7 @@ DEV_TOOLS=(
uv uv
vim vim
yazi yazi
zig
zsh zsh
) )
@@ -122,15 +120,18 @@ MAINTENANCE=(
DESKTOP=( DESKTOP=(
bitwarden bitwarden
cliamp 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 element-desktop
federated-calendar
gnome gnome
gnome-tweaks gnome-tweaks
helium-browser-bin helium-browser-bin
kitty kitty
libreoffice-fresh libreoffice-fresh
sonarr-bin sonarr-bin
voxtype voxtype-bin
winboat-bin winboat-bin
) )
+5
View File
@@ -4,10 +4,15 @@
# Pacman / AUR packages to remove (works for both pacman and yay packages) # Pacman / AUR packages to remove (works for both pacman and yay packages)
REMOVE_PACMAN=( REMOVE_PACMAN=(
alpaca-ai alpaca-ai
# Replaced by cline-desktop-bin, herdr-bin and voxtype-bin, which conflict
# with them
cline-desktop
conky-cli conky-cli
herdr
lmstudio-bin lmstudio-bin
neofetch neofetch
steghide steghide
voxtype
) )
# Flatpak applications to remove # Flatpak applications to remove
+5
View File
@@ -12,6 +12,11 @@ echo "Removing unwanted packages..."
remove_packages "${REMOVE_PACMAN[@]}" remove_packages "${REMOVE_PACMAN[@]}"
remove_flatpaks "${REMOVE_FLATPAKS[@]}" 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 # 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. # the new packages. Update it first; the -Su below completes this -Sy.
echo "Updating Arch keyring..." echo "Updating Arch keyring..."
+20 -1
View File
@@ -36,6 +36,23 @@ install_packages() {
fi 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 # Function to install pipx applications if not already installed
install_pipx_apps() { install_pipx_apps() {
local installed app status=0 local installed app status=0
@@ -64,8 +81,10 @@ remove_packages() {
local packages=("$@") local packages=("$@")
local to_remove=() 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 for pkg in "${packages[@]}"; do
if is_installed "$pkg"; then if [ "$(pacman -Qq "$pkg" 2> /dev/null)" = "$pkg" ]; then
to_remove+=("$pkg") to_remove+=("$pkg")
fi fi
done done