feat: add arch-updater plugin (#121)

* feat: add arch-updater plugin

* fix(arch-updater): declare shelled-out commands, close Flatpak ignore gap, surface real check failures

Address PR review: plugin.toml only listed pacman-contrib despite invoking
awk, sed, test, uname, pacman, sh, sudo, flatpak, xdg-open, yay and paru;
the Flatpak ignore list was enforced in the panel but not in the actual
`flatpak update`; and checkupdates/AUR/Flatpak checks piped through
awk/sed in a way that swallowed real command failures as an empty/clean
result instead of an error.

* fix(arch-updater): fix Luau long-string that broke service.luau parsing

The Flatpak ignore-filter awk snippet used a [[ ]] long bracket string,
but its own content ("skip[arr[i]] = 1") contains a literal ]] that
closed the string early, corrupting everything after it and failing
the whole file's parse (not just the Flatpak path). Switched to a
[=[ ]=] long bracket, which isn't terminated by a bare ]].
This commit is contained in:
Yuuto
2026-07-27 23:23:15 -04:00
committed by GitHub
parent d9d2217841
commit 3878d83c33
9 changed files with 2015 additions and 0 deletions
+141
View File
@@ -0,0 +1,141 @@
{
"title": "Arch Updater",
"action_check": "Updates prüfen",
"action_dismiss": "Verwerfen",
"action_update": "Aktualisieren",
"action_open_news": "News öffnen",
"status_idle": "Noch nicht geprüft",
"status_checking": "Prüfe auf Updates…",
"status_checking_step": "Prüfe {step}…",
"status_running": "Update läuft in einem Terminal…",
"status_clean": "System ist aktuell",
"status_error": "Prüfung fehlgeschlagen",
"status_missing": "checkupdates fehlt, pacman-contrib installieren",
"status_ready": {
"one": "1 Paket zu aktualisieren",
"other": "{count} Pakete zu aktualisieren"
},
"err_no_checkupdates": "checkupdates nicht gefunden, pacman-contrib installieren und PATH prüfen",
"err_check_timeout": "Zeitüberschreitung beim Prüfen auf Updates",
"err_spawn": "checkupdates konnte nicht gestartet werden",
"err_no_terminal": "Kein Terminal-Emulator gefunden, in den Plugin-Einstellungen festlegen",
"err_no_xdg_open": "xdg-open nicht gefunden, Paketseite kann nicht geöffnet werden",
"source": {
"pacman": "Pacman",
"aur": "AUR",
"aur_named": "AUR ({helper})",
"flatpak": "Flatpak"
},
"notify_updates": {
"one": "1 Paket zu aktualisieren",
"other": "{count} Pakete zu aktualisieren"
},
"run": {
"press_key": "Beliebige Taste zum Schließen drücken"
},
"more_packages": "+{count} weitere",
"hover_hint": "Zeigt beim Überfahren eines Pakets die vollständigen Versionen",
"up_to_date": "Aktuell: {sources}",
"caption_checked": "geprüft {time}",
"caption_ignored": {
"one": "1 Paket ignoriert",
"other": "{count} Pakete ignoriert"
},
"size_mib": "≈ {value} MiB Downloadgröße",
"size_gib": "≈ {value} GiB Downloadgröße",
"reboot_recommended": "Neustart empfohlen, der laufende Kernel ist nicht mehr installiert",
"news_unread": {
"one": "1 ungelesener Arch-News-Beitrag: „{title}“",
"other": "{count} ungelesene Arch-News-Beiträge, zuletzt: „{title}“"
},
"tip_check": "Jetzt auf Updates prüfen",
"tip_close": "Schließen",
"tip_update": "Update in einem Terminal-Fenster ausführen",
"tip_copy": "Name und Versionen kopieren",
"tip_open_page": "Paketseite öffnen",
"tooltip_status": "Status",
"tooltip_pending": "Ausstehend",
"tooltip_checked": "Geprüft",
"tooltip_reboot_key": "Neustart",
"tooltip_reboot_value": "empfohlen",
"tooltip_news": "Arch News",
"tooltip_news_value": {
"one": "1 ungelesen",
"other": "{count} ungelesen"
},
"tooltip_hints": "Klick: Panel · rechts: jetzt prüfen",
"launcher": {
"check_subtitle": "Pacman, AUR und Flatpak auf Updates prüfen",
"update_subtitle": "Terminal öffnen und Update ausführen",
"news_subtitle": "Arch-Linux-News-Seite öffnen"
},
"settings": {
"aur_helper": {
"label": "AUR-Helfer",
"description": "Welcher AUR-Helfer AUR-Pakete prüft und aktualisiert. „Automatisch erkennen“ versucht zuerst yay, dann paru. „Eigener Befehl“ verwendet den unten angegebenen Prüfbefehl.",
"options": {
"auto": "Automatisch erkennen (yay, dann paru)",
"yay": "yay",
"paru": "paru",
"custom": "Eigener Befehl",
"off": "Aus, nur Pacman"
}
},
"aur_check_cmd": {
"label": "Eigener AUR-Prüfbefehl",
"description": "Wird nur verwendet, wenn oben „Eigener Befehl“ gewählt ist. Muss pro Paket eine Zeile im Format 'name oldver -> newver' ausgeben, wie 'yay -Qua' es tut."
},
"flatpak_enabled": {
"label": "Flatpak einbeziehen",
"description": "Prüft zusätzlich (und führt beim Aktualisieren) 'flatpak update' aus. Wird automatisch übersprungen, wenn Flatpak nicht installiert ist."
},
"ignore_packages": {
"label": "Pakete ignorieren",
"description": "Paketnamen, die aus der Zählung ausgeschlossen und beim Update zusätzlich als --ignore übergeben werden, ergänzend zu pacman.confs eigenem IgnorePkg."
},
"auto_check_hours": {
"label": "Intervall für automatische Prüfung (Stunden)",
"description": "Prüft automatisch alle N Stunden auf Updates. 0 (Standard) prüft nie von selbst."
},
"notify_on_updates": {
"label": "Bei gefundenen Updates benachrichtigen",
"description": "Sendet eine Desktop-Benachrichtigung, wenn eine Prüfung aktualisierbare Pakete findet."
},
"show_download_size": {
"label": "Downloadgröße anzeigen",
"description": "Schätzt die gesamte Downloadgröße der ausstehenden Pacman-Pakete mit 'pacman -Si'. AUR- und Flatpak-Größen sind nicht enthalten."
},
"check_arch_news": {
"label": "Arch-Linux-News prüfen",
"description": "Ruft den Arch-Linux-News-Feed ab und markiert ungelesene Beiträge im Panel."
},
"check_reboot_needed": {
"label": "Auf nötigen Neustart prüfen",
"description": "Prüft, ob die Dateien des aktuell laufenden Kernels noch vorhanden sind. Fehlen sie, wurde ein neuerer Kernel installiert, und erst ein Neustart wechselt darauf."
},
"terminal": {
"label": "Terminal",
"description": "Terminal-Befehl für den Update-Lauf, z. B. kitty oder ghostty. Leer (Standard) verwendet Noctalias eigene Terminal-Erkennung ($TERMINAL, dann die gängigen Emulatoren)."
},
"assume_yes": {
"label": "Automatisch mit Ja bestätigen",
"description": "Übergibt --noconfirm / -y, damit Paketmanager nicht nach Bestätigung fragen. Aus bedeutet, du bestätigst jedes Paket im Terminal-Fenster selbst."
},
"update_cmd": {
"label": "Eigener Update-Befehl",
"description": "Vollständige Überschreibung des im Terminal ausgeführten Befehls beim Aktualisieren. Leer (Standard) baut ihn aus AUR-Helfer, Ignorierliste, Flatpak und „Automatisch mit Ja bestätigen“ oben zusammen."
},
"glyph": {
"label": "Bar-Symbol",
"description": "Das für das Widget in der Bar angezeigte Symbol."
},
"show_count": {
"label": "Anzahl der Updates anzeigen",
"description": "Zeigt die Anzahl ausstehender Updates neben dem Bar-Symbol."
},
"hide_on_empty": {
"label": "Ausblenden, wenn nichts anliegt",
"description": "Blendet das Widget vollständig aus, wenn keine Updates ausstehen und kein Neustart empfohlen wird. Aus (Standard) zeigt das Symbol immer."
}
}
}
+144
View File
@@ -0,0 +1,144 @@
{
"title": "Arch Updater",
"action_check": "Check Updates",
"action_dismiss": "Dismiss",
"action_update": "Update",
"action_open_news": "Open news",
"status_idle": "Not checked yet",
"status_checking": "Checking for updates…",
"status_checking_step": "Checking {step}…",
"status_running": "Update running in a terminal…",
"status_clean": "System is up to date",
"status_error": "Update check failed",
"status_missing": "checkupdates not found, install pacman-contrib",
"status_ready": {
"one": "1 package to upgrade",
"other": "{count} packages to upgrade"
},
"err_no_checkupdates": "checkupdates not found, install pacman-contrib and check your PATH",
"err_check_timeout": "Timed out while checking for updates",
"err_check_failed": "checkupdates failed, see the system log for details",
"err_aur_failed": "AUR check failed, see the system log for details",
"err_flatpak_failed": "Flatpak check failed, see the system log for details",
"err_spawn": "Could not run checkupdates",
"err_no_terminal": "No terminal emulator found, set one in the plugin settings",
"err_no_xdg_open": "xdg-open not found, cannot open the package page",
"source": {
"pacman": "Pacman",
"aur": "AUR",
"aur_named": "AUR ({helper})",
"flatpak": "Flatpak"
},
"notify_updates": {
"one": "1 package to upgrade",
"other": "{count} packages to upgrade"
},
"run": {
"press_key": "Press any key to close"
},
"more_packages": "+{count} more",
"hover_hint": "Hover a package for its full versions",
"up_to_date": "Up to date: {sources}",
"caption_checked": "checked {time}",
"caption_ignored": {
"one": "1 package ignored",
"other": "{count} packages ignored"
},
"size_mib": "≈ {value} MiB to download",
"size_gib": "≈ {value} GiB to download",
"reboot_recommended": "Reboot recommended, the running kernel is no longer installed",
"news_unread": {
"one": "1 unread Arch news post: \"{title}\"",
"other": "{count} unread Arch news posts, latest: \"{title}\""
},
"tip_check": "Check for updates now",
"tip_close": "Close",
"tip_update": "Run the update in a terminal window",
"tip_copy": "Copy name and versions",
"tip_open_page": "Open package page",
"tooltip_status": "Status",
"tooltip_pending": "Pending",
"tooltip_checked": "Checked",
"tooltip_reboot_key": "Reboot",
"tooltip_reboot_value": "recommended",
"tooltip_news": "Arch news",
"tooltip_news_value": {
"one": "1 unread",
"other": "{count} unread"
},
"tooltip_hints": "click: panel · right: check now",
"launcher": {
"check_subtitle": "Check pacman, AUR and Flatpak for updates",
"update_subtitle": "Open a terminal and run the update",
"news_subtitle": "Open the Arch Linux news page"
},
"settings": {
"aur_helper": {
"label": "AUR helper",
"description": "Which AUR helper checks and upgrades AUR packages. 'Auto-detect' tries yay, then paru. 'Custom command' lets you supply your own check command below.",
"options": {
"auto": "Auto-detect (yay, then paru)",
"yay": "yay",
"paru": "paru",
"custom": "Custom command",
"off": "Off, pacman only"
}
},
"aur_check_cmd": {
"label": "Custom AUR check command",
"description": "Only used when the AUR helper above is 'Custom command'. Must print one 'name oldver -> newver' line per package, like 'yay -Qua' does."
},
"flatpak_enabled": {
"label": "Include Flatpak",
"description": "Also check (and, on Update, run) 'flatpak update'. Ignored automatically when flatpak is not installed."
},
"ignore_packages": {
"label": "Ignore packages",
"description": "Package names to leave out of the count and pass as --ignore to the update itself, in addition to pacman.conf's own IgnorePkg."
},
"auto_check_hours": {
"label": "Auto-check interval (hours)",
"description": "Check for updates automatically every N hours. 0 (default) never checks on its own."
},
"notify_on_updates": {
"label": "Notify when updates are found",
"description": "Send a desktop notification when a check finds packages to upgrade."
},
"show_download_size": {
"label": "Show download size",
"description": "Estimate the total download size for the pending pacman packages with 'pacman -Si'. AUR and Flatpak sizes are not included."
},
"check_arch_news": {
"label": "Check Arch Linux news",
"description": "Fetch the Arch Linux news feed and flag unread posts in the panel."
},
"check_reboot_needed": {
"label": "Check if a reboot is needed",
"description": "Detect whether the currently running kernel's files are still on disk. When they are gone, a newer kernel was installed and a reboot is what switches you to it."
},
"terminal": {
"label": "Terminal",
"description": "Terminal command used for the update run, e.g. kitty or ghostty. Empty (default) uses Noctalia's terminal detection ($TERMINAL, then the common emulators)."
},
"assume_yes": {
"label": "Answer yes automatically",
"description": "Pass --noconfirm / -y so package managers do not ask for confirmation. Off means you confirm each one in the terminal window."
},
"update_cmd": {
"label": "Custom update command",
"description": "Full override for the command run in the terminal on Update. Empty (default) builds it from the AUR helper, ignore list, Flatpak and 'Answer yes' settings above."
},
"glyph": {
"label": "Bar glyph",
"description": "The glyph shown for the widget on the bar."
},
"show_count": {
"label": "Show the update count",
"description": "Show the number of pending updates next to the bar glyph."
},
"hide_on_empty": {
"label": "Hide when there is nothing to show",
"description": "Hide the widget entirely when there are no pending updates and no reboot recommendation. Off (default) always shows the glyph."
}
}
}