%global uuid cor@corai %global gsdir %{_datadir}/gnome-shell %global brandir %{_datadir}/cor-ai/branding Name: gnome-shell-extension-cor-ai Version: 0.4 Release: 1%{?dist} Summary: The cor-ai top bar, dock, and full desktop/GDM branding for GNOME Shell License: MIT URL: https://github.com/corron34/cor-ai-shell-rpm Source0: %{url}/archive/v%{version}/cor-ai-shell-rpm-%{version}.tar.gz BuildArch: noarch BuildRequires: glib2 Requires: gnome-shell >= 47 Requires: dconf %description Replaces the stock GNOME Shell panel with the cor-ai top bar (Activities, clock, mic and resident-model status, power) and adds the cor-ai dock, a notifications panel, a Quick Action modal (Super+E), and dictation (mic pill / Super+D). Also restyles the GDM login screen to match cor-ai's own design: the rings wallpaper, the cor-ai mark as the login logo, the orange accent color, and a matching login-box/password-field/button theme. Part of the cor-ai project (https://github.com/corron34/cor-ai). %prep %autosetup -n cor-ai-shell-rpm-%{version} %build # Pure GJS/CSS/JSON -- nothing to compile except the extension's own # GSettings schema (needed for Main.wm.addKeybinding's Super+E/Super+D # keybindings, which require a real Gio.Settings-backed key). glib-compile-schemas schemas/ %install extdir=%{buildroot}%{_datadir}/gnome-shell/extensions/%{uuid} install -d "$extdir" "$extdir/schemas" install -m644 extension.js topbar.js dock.js notify.js notifications.js \ quickAction.js dictation.js powerMenu.js stylesheet.css metadata.json "$extdir"/ install -m644 schemas/org.gnome.shell.extensions.cor-ai.gschema.xml \ schemas/gschemas.compiled "$extdir/schemas"/ # cor-ai's own dock replaces GNOME's default window-list taskbar -- both # render a persistent bottom bar, and having both enabled visually competes # (confirmed live: two docks on screen at once). Ship a dconf override # (not a lock) that changes the shipped DEFAULT away from window-list on # fresh/never-customized systems, without forcing it off for anyone who's # deliberately re-enabled it themselves -- the post-install and post-remove # scriptlets below run `dconf update` to recompile the local db from these # override files, matching how Fedora's own vendor default for window-list # is itself shipped. install -d %{buildroot}%{_sysconfdir}/dconf/db/local.d cat > %{buildroot}%{_sysconfdir}/dconf/db/local.d/00-cor-ai-shell << EOF [org/gnome/shell] disabled-extensions=['window-list@gnome-shell-extensions.gcampax.github.com'] EOF # GDM branding: background + login logo + accent colour, via GDM's own # dconf profile (/etc/dconf/db/gdm.d/ -- confirmed real and consulted, per # /usr/share/dconf/profile/gdm's own "system-db:gdm" line, distinct from # the regular user/local profile above). Real values, verified live on the # Fedora 44 test VM's actual GDM greeter via QEMU screendump. install -d %{buildroot}%{_sysconfdir}/dconf/db/gdm.d cat > %{buildroot}%{_sysconfdir}/dconf/db/gdm.d/01-cor-ai << EOF [org/gnome/desktop/background] picture-uri='file://%{_datadir}/backgrounds/cor-ai/cor-ai-rings.png' picture-uri-dark='file://%{_datadir}/backgrounds/cor-ai/cor-ai-rings.png' picture-options='zoom' [org/gnome/login-screen] logo='%{_datadir}/pixmaps/cor-ai-logo.png' [org/gnome/desktop/interface] accent-color='orange' EOF # Wallpaper + logo: plain package-owned files, no conflict with any other # package. install -d %{buildroot}%{_datadir}/backgrounds/cor-ai install -m644 branding/cor-ai-rings.png \ %{buildroot}%{_datadir}/backgrounds/cor-ai/cor-ai-rings.png install -d %{buildroot}%{_datadir}/pixmaps install -m644 branding/cor-ai-logo.png \ %{buildroot}%{_datadir}/pixmaps/cor-ai-logo.png # The login-box/password-field/button theme (gnome-shell-theme.gresource) # is a different case: GNOME 50's core org.gnome.shell schema has NO # "theme" key at all (that only exists via the separate, not-installed # "User Themes" extension's own schema) -- confirmed directly against the # installed schema on the test VM. The only real way to restyle GDM's own # chrome without depending on that extra extension is to replace the # actual compiled theme resource gnome-shell itself loads. That file is # owned by the base gnome-shell package, so it can't be listed in %%files # directly without conflicting -- instead we ship our compiled replacement # under our own path and swap it in via %%post/%%postun, keeping a real # backup of the stock file so uninstall genuinely restores the original # rather than leaving a patched system behind. install -d %{buildroot}%{brandir} install -m644 branding/gnome-shell-theme.gresource \ %{buildroot}%{brandir}/gnome-shell-theme.gresource %files %license LICENSE %{_datadir}/gnome-shell/extensions/%{uuid}/ %{_datadir}/backgrounds/cor-ai/cor-ai-rings.png %{_datadir}/pixmaps/cor-ai-logo.png %{brandir}/gnome-shell-theme.gresource %config(noreplace) %{_sysconfdir}/dconf/db/local.d/00-cor-ai-shell %config(noreplace) %{_sysconfdir}/dconf/db/gdm.d/01-cor-ai %post # Swap in the cor-ai GDM theme, keeping the real stock file as a backup # (only taken once -- an upgrade must not overwrite a good backup with an # already-patched file from the previous version). if [ ! -f %{brandir}/gnome-shell-theme.gresource.orig-backup ]; then cp -a %{gsdir}/gnome-shell-theme.gresource \ %{brandir}/gnome-shell-theme.gresource.orig-backup fi cp -a %{brandir}/gnome-shell-theme.gresource \ %{gsdir}/gnome-shell-theme.gresource dconf update || : %postun # Only restore stock GNOME theming on a real uninstall, not on the # intermediate erase of an upgrade ($1 == 0 is RPM's own convention for # "final removal"). if [ $1 -eq 0 ] && [ -f %{brandir}/gnome-shell-theme.gresource.orig-backup ]; then cp -a %{brandir}/gnome-shell-theme.gresource.orig-backup \ %{gsdir}/gnome-shell-theme.gresource rm -f %{brandir}/gnome-shell-theme.gresource.orig-backup fi dconf update || : %changelog * Mon Aug 31 2026 corron - 0.4-1 - Suppress GNOME Shell's automatic Activities-overview-on-login: this project's tty1-autostart session never autostarts any app, so stock GNOME's "no windows -> show overview" startup behavior fired on every login instead of landing on the plain desktop. extension.js now hides the overview if it opens while Main.layoutManager is still starting up, then stops watching once startup completes so Activities/Super still work normally afterward. - Fix a real packaging gap found while testing the above: this package's topbar.js and stylesheet.css had gone stale (still shipping the workspace pips removed from the canonical source earlier), and powerMenu.js was missing from both the repo and this spec's install list entirely -- the power menu only ever worked in prior live testing because of leftover manually-copied files on the test VM, not because the RPM actually shipped it. A truly fresh install of 0.2/0.3 would have crashed on import and lost the whole top bar. All four files are now synced from the canonical source and powerMenu.js is installed; verified via a full extension-directory wipe + clean install (not relying on any leftover files) before reboot-testing. * Mon Aug 31 2026 corron - 0.3-1 - Restyle the GDM login screen to match cor-ai's own design: rings wallpaper, cor-ai mark as the login logo, orange accent color, and a full login-box/password-field/button theme swapped into GNOME Shell's own compiled theme resource (the only real mechanism on stock GNOME 50, which has no org.gnome.shell "theme" key without the separate, not-installed User Themes extension). Verified live via QEMU screendump against the real Fedora 44 test VM's GDM greeter; %%postun restores the original stock theme file on full removal. * Mon Aug 31 2026 corron - 0.2-1 - Add the notifications panel (clock/date pill), Quick Action modal (Super+E), and dictation (mic pill / Super+D), ported from the design's own prototype. Verified live: zero JS errors, all three surfaces open and respond correctly on real Fedora 44 / GNOME Shell 50. * Sun Aug 30 2026 corron - 0.1-1 - Initial package: cor-ai top bar and dock, ported to GNOME Shell 47-50. - Ship a dconf override disabling GNOME's default window-list extension, which visually competed with cor-ai's own dock (confirmed live).