vitorpy's Dotfiles
1#!/bin/bash
2# Comprehensive system update script for Arch Linux
3# Updates official repos, AUR, and Flatpak packages
4
5set -e
6
7echo "════════════════════════════════════════════════════════════"
8echo " Arch Linux System Update"
9echo "════════════════════════════════════════════════════════════"
10echo ""
11
12# Color codes
13GREEN='\033[0;32m'
14YELLOW='\033[1;33m'
15BLUE='\033[0;34m'
16NC='\033[0m' # No Color
17
18# Check for updates first
19echo -e "${BLUE}==> Checking for updates...${NC}"
20echo ""
21
22# Official repos
23echo -e "${YELLOW}Official repositories:${NC}"
24if command -v checkupdates &>/dev/null; then
25 official=$(checkupdates 2>/dev/null || true)
26 official_count=$(echo "$official" | grep -v '^$' | wc -l)
27else
28 official=$(pacman -Qu 2>/dev/null || true)
29 official_count=$(echo "$official" | grep -v '^$' | wc -l)
30fi
31
32if [ "$official_count" -gt 0 ]; then
33 echo "$official"
34 echo ""
35else
36 echo " No updates available"
37 echo ""
38fi
39
40# AUR
41echo -e "${YELLOW}AUR packages:${NC}"
42if command -v yay &>/dev/null; then
43 aur=$(yay -Qua 2>/dev/null || true)
44 aur_count=$(echo "$aur" | grep -v '^$' | wc -l)
45 if [ "$aur_count" -gt 0 ]; then
46 echo "$aur"
47 echo ""
48 else
49 echo " No updates available"
50 echo ""
51 fi
52else
53 echo " yay not installed, skipping AUR updates"
54 echo ""
55 aur_count=0
56fi
57
58# Flatpak
59echo -e "${YELLOW}Flatpak packages:${NC}"
60if command -v flatpak &>/dev/null; then
61 flatpak=$(flatpak remote-ls --updates 2>/dev/null || true)
62 flatpak_count=$(echo "$flatpak" | grep -v '^$' | wc -l)
63 if [ "$flatpak_count" -gt 0 ]; then
64 echo "$flatpak"
65 echo ""
66 else
67 echo " No updates available"
68 echo ""
69 fi
70else
71 echo " Flatpak not installed, skipping"
72 echo ""
73 flatpak_count=0
74fi
75
76# Firmware
77echo -e "${YELLOW}Firmware updates:${NC}"
78if command -v fwupdmgr &>/dev/null; then
79 # Refresh metadata first
80 fwupdmgr refresh &>/dev/null || true
81 firmware=$(fwupdmgr get-updates 2>/dev/null | grep -E "^\s+├─" || true)
82 firmware_count=$(echo "$firmware" | grep -v '^$' | wc -l)
83 if [ "$firmware_count" -gt 0 ]; then
84 echo "$firmware"
85 echo ""
86 else
87 echo " No updates available"
88 echo ""
89 fi
90else
91 echo " fwupd not installed, skipping"
92 echo ""
93 firmware_count=0
94fi
95
96# Summary
97total=$((official_count + aur_count + flatpak_count + firmware_count))
98echo "────────────────────────────────────────────────────────────"
99echo -e "${GREEN}Total updates available: $total${NC}"
100echo " Official: $official_count | AUR: $aur_count | Flatpak: $flatpak_count | Firmware: $firmware_count"
101echo "────────────────────────────────────────────────────────────"
102echo ""
103
104if [ "$total" -eq 0 ]; then
105 echo -e "${GREEN}✓ System is up to date!${NC}"
106 exit 0
107fi
108
109# Ask for confirmation
110read -p "Proceed with updates? [Y/n] " -n 1 -r
111echo ""
112
113if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ ! -z $REPLY ]]; then
114 echo "Update cancelled."
115 exit 0
116fi
117
118echo ""
119
120# Update official repos
121if [ "$official_count" -gt 0 ]; then
122 echo -e "${BLUE}==> Updating official repositories...${NC}"
123 sudo pacman -Syu
124 echo ""
125fi
126
127# Update AUR
128if [ "$aur_count" -gt 0 ]; then
129 echo -e "${BLUE}==> Updating AUR packages...${NC}"
130 yay -Sua
131 echo ""
132fi
133
134# Update Flatpak
135if [ "$flatpak_count" -gt 0 ]; then
136 echo -e "${BLUE}==> Updating Flatpak packages...${NC}"
137 flatpak update -y
138 echo ""
139fi
140
141# Update Firmware
142if [ "$firmware_count" -gt 0 ]; then
143 echo -e "${BLUE}==> Updating firmware...${NC}"
144 sudo fwupdmgr update
145 echo ""
146fi
147
148# Clean up
149echo -e "${BLUE}==> Cleaning up...${NC}"
150echo "Removing orphaned packages..."
151orphans=$(pacman -Qtdq 2>/dev/null || true)
152if [ ! -z "$orphans" ]; then
153 echo "$orphans"
154 sudo pacman -Rns $(pacman -Qtdq) --noconfirm
155else
156 echo " No orphaned packages found"
157fi
158
159echo ""
160echo "Cleaning package cache (keeping last 3 versions)..."
161sudo paccache -rk3
162
163if command -v yay &>/dev/null; then
164 echo "Cleaning yay cache..."
165 yay -Sc --noconfirm
166fi
167
168echo ""
169echo "════════════════════════════════════════════════════════════"
170echo -e "${GREEN}✓ System update complete!${NC}"
171echo "════════════════════════════════════════════════════════════"