Name: henzai Version: 0.1.0 Release: 1%{?dist} Summary: Native conversational AI for GNOME Shell using local LLMs License: MIT URL: https://github.com/csoriano2718/henzai Source0: %{name}-%{version}.tar.gz BuildArch: noarch # Python dependencies for the daemon Requires: python3 Requires: python3-requests Requires: python3-dasbus Requires: python3-pygobject # GNOME Shell for the extension Requires: gnome-shell >= 45 # Ramalama for LLM inference (required) Requires: ramalama # Systemd for service management Requires: systemd BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: systemd-rpm-macros %description henzai is a native conversational AI integrated into GNOME Shell, providing seamless access to local LLMs through Ramalama. Features include streaming responses, reasoning mode, model switching, and generation cancellation. Assisted-by: Generated (vibe-coded) by Cursor AI with Claude Sonnet 4.5 %prep %autosetup -n %{name}-%{version} %build # Build Python daemon cd henzai-daemon %py3_build %install # Install Python daemon cd henzai-daemon %py3_install # Install GNOME Shell extension mkdir -p %{buildroot}%{_datadir}/gnome-shell/extensions/henzai@csoriano cp -r ../henzai-extension/* %{buildroot}%{_datadir}/gnome-shell/extensions/henzai@csoriano/ # Install systemd user services mkdir -p %{buildroot}%{_userunitdir} install -m 644 ../henzai-daemon/systemd/henzai-daemon.service %{buildroot}%{_userunitdir}/ install -m 644 ../henzai-daemon/systemd/ramalama.service %{buildroot}%{_userunitdir}/ # Install D-Bus service activation file mkdir -p %{buildroot}%{_datadir}/dbus-1/services install -m 644 ../henzai-daemon/dbus/org.gnome.henzai.service %{buildroot}%{_datadir}/dbus-1/services/ # Install documentation mkdir -p %{buildroot}%{_docdir}/%{name} install -m 644 ../README.md %{buildroot}%{_docdir}/%{name}/ install -m 644 ../LICENSE %{buildroot}%{_docdir}/%{name}/ %post # Use systemd macros to enable user services # These will be enabled for users who install the package %systemd_user_post ramalama.service %systemd_user_post henzai-daemon.service # Enable GNOME Shell extension for the user running the install # This works when user installs via 'dnf install' (not during sudo dnf) if [ -n "$SUDO_USER" ] && [ "$SUDO_USER" != "root" ]; then # Get the actual user's runtime directory USER_HOME=$(getent passwd "$SUDO_USER" | cut -d: -f6) # Enable the extension using gnome-extensions sudo -u "$SUDO_USER" DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u $SUDO_USER)/bus" \ gnome-extensions enable henzai@csoriano 2>/dev/null || true fi echo "" echo "╔════════════════════════════════════════════════════════════╗" echo "║ henzai installed successfully! ║" echo "╚════════════════════════════════════════════════════════════╝" echo "" echo "Services have been enabled and will auto-start on login." echo "" echo "To start immediately (run as your user):" echo " systemctl --user start ramalama.service" echo " systemctl --user start henzai-daemon.service" echo "" echo "Extension enabled! Restart GNOME Shell:" echo " • Wayland: Log out and back in" echo " • X11: Press Alt+F2, type 'r', Enter" echo "" echo "Access henzai with Super+H" echo "" %preun %systemd_user_preun ramalama.service %systemd_user_preun henzai-daemon.service %postun %systemd_user_postun ramalama.service %systemd_user_postun henzai-daemon.service %files # Python daemon %{python3_sitelib}/henzai/ %{python3_sitelib}/henzai-*.egg-info/ # GNOME Shell extension %{_datadir}/gnome-shell/extensions/henzai@csoriano/ # Systemd services %{_userunitdir}/henzai-daemon.service %{_userunitdir}/ramalama.service # D-Bus service %{_datadir}/dbus-1/services/org.gnome.henzai.service # Documentation %{_docdir}/%{name}/ %changelog * Sun Nov 09 2025 Carlos Soriano - 0.1.0-1 - Initial package for Fedora 42 and 43 - Native conversational AI with local LLMs - Streaming responses with reasoning mode - Model switching and generation control - Warm, polished UI with system font integration - Generation IDs for race-free rapid succession - Assisted-by: Generated (vibe-coded) by Cursor AI with Claude Sonnet 4.5