Commit Graph

99 Commits

Author SHA1 Message Date
nocode 3cb4132727 feat(secureboot): add fws-secureboot-setup script for secure boot configuration
Add a new script that prepares FWS to boot signed under Secure Boot without enabling kernel lockdown, preserving hibernation capability.

The script:
- Checks UEFI firmware availability
- Installs sbctl if needed
- Locates ESP and GRUB EFI binary
- Reinstalls GRUB with SBAT section if missing
- Creates and enrolls sbctl keys while preserving Microsoft keys
- Signs GRUB and available kernel images
- Provides instructions for manual firmware setup steps
- Enables automatic re-signing after kernel/GRUB updates via pacman hooks

This allows FWS to meet Vanguard's Secure Boot requirement without sacrificing hibernation support.
2026-07-08 02:39:17 +02:00
nocode 367233eae5 feat(gameboot): add fws-gameboot-bootfix systemd oneshot service
Add boot fix script that executes at every FWS startup to reassert BootOrder[0] = FWS.

This serves as a permanent safety net to handle cases where Windows Update or system crashes might reorder the EFI boot options, ensuring the system always boots into FWS when no explicit BootNext is set, preventing the system from becoming stuck in Windows.

The script is inactive on live systems via ConditionPathExists check.
2026-07-08 02:39:10 +02:00
nocode 3d91ef3ac5 feat(gameboot): add fws-gameboot dual-boot hibernation orchestrator script
Implement fws-gameboot, an orchestrator for seamless dual-boot between FWS and Windows
bare-metal using hibernate-swap mechanism. Enables playing kernel anticheat games
(e.g., Valorant/Vanguard) without persistent virtualization by hibernating FWS
to swap, setting BootNext to Windows UEFI one-shot, and rebooting. Upon Windows
shutdown, the kernel resumes the FWS session via resume= parameter.

Features:
- doctor/status subcommand: validates hibernation readiness (swap size, resume=
  parameter, VRAM usage, Secure Boot status)
- to-windows subcommand: hibernates FWS, unmounts NTFS filesystems, arms BootNext,
  and initiates hibernation; resumes FWS session on return from Windows
- Safety mechanisms: BootOrder[0] fallback to FWS via fws-gameboot-bootfix,
  permanent BootNext cleanup on resume, optional simple reboot fallback
- Configuration via /etc/fws/gameboot.conf (Windows boot entry number, swap margin,
  hibernation fallback mode)
- User notification via D-Bus notify-send for graphical feedback
- Comprehensive error handling and preflight validation

Requires validated hardware support for NVIDIA GPU hibernation/resume and firmware
BootNext semantics.
2026-07-08 02:39:04 +02:00
nocode bc84731290 feat(systemd): add fws-gameboot-bootfix service unit
Add a new systemd service that reasserts BootOrder=FWS and the Windows boot marker on gameboot systems. This service runs only on installed UEFI systems (not on live media) and is designed to be best-effort without delaying boot. It handles unavailable efivars gracefully by not failing the boot process.
2026-07-08 02:38:55 +02:00
nocode e5b36d6c07 feat(gameboot): add gameboot configuration file for hibernate-swap dual-boot
Add gameboot.conf configuration file for the FWS orchestrator. This file defines settings for dual-boot hibernation-swap mode including:
- Windows boot entry detection
- Hibernation preflight failure behavior (reboot or abort)
- Swap margin for hibernation image sizing

See docs/hibernate-swap-dualboot.md for details.
2026-07-08 02:38:51 +02:00
nocode ae8140ccff fix(anaconda): use firmware-dependent disklabel for bootable installs
Replace hardcoded msdos disklabel with firmware-aware configuration:
- UEFI systems now use GPT, allowing ESP creation for grub-install EFI
- BIOS systems continue using MBR/msdos where core.img fits in post-MBR space

This fixes the bug where forcing msdos on UEFI prevented ESP creation,
resulting in non-bootable installations. The disklabel is now dynamically
generated by a %pre script that detects firmware type and writes the
appropriate clearpart command to /tmp/fws-clearpart.ks for inclusion.

Clarifies that clearpart --all only affects GUI-selected disks, addressing
multi-disk scenarios where users may not want all disks wiped.
2026-07-08 02:03:54 +02:00
nocode b7bf497cd6 feat(releng): enable systemd-timesyncd ntp synchronization
Add explicit activation of systemd-timesyncd service to ensure proper clock synchronization on installed systems. This prevents clock drift issues that can affect TLS and pacman operations, and meets user expectations for accurate system time.

The service is already present in the image but inherited symlinks from the live environment may be ordinary files that systemd ignores, so explicit enablement ensures correct behavior on all installations.
2026-07-07 13:57:04 +02:00
nocode ae70926ed1 chore(release): bump version to 0.6.0 2026-07-07 13:56:58 +02:00
nocode 260547f6b6 chore(releng): convert systemd service files to symlinks
Convert three systemd service configuration files from regular files to symlinks pointing to their respective system libraries. This ensures that the services reference the actual systemd unit files from /usr/lib/systemd/system rather than maintaining duplicate copies.
2026-07-07 13:56:43 +02:00
nocode de05361b28 feat(releng): add polkit policy for fws-recovery privileged operations
Add PolicyKit authorization policy file to allow fws-recovery-gui to execute fws-recovery engine via pkexec with administrative privileges. The policy uses auth_admin_keep to require authentication only once per session.
2026-07-07 02:48:03 +02:00
nocode 9e3a02d96d feat(icons): add fws-recovery scalable application icon
Add a new scalable SVG icon for FWS recovery application featuring a medical cross symbol in FWS brand colors (blues) on a dark background. Icon is placed in the standard hicolor scalable apps directory.
2026-07-07 02:47:59 +02:00
nocode 881f771ed1 feat(releng): add fws-recovery desktop application launcher
Add desktop entry file for FWS Recovery application launcher in the installed OS. Provides bilingual (French/English) interface for system repair operations including GRUB, initramfs, and pacman restoration. The application runs as a regular user with privilege escalation handled via pkexec.
2026-07-07 02:47:54 +02:00
nocode bc08f59e74 feat(releng): add fws-recovery-session script for recovery mode
Add a new script that launches an X session with Openbox and the fws-recovery-gui application. This script is executed by startx during the FWS repair boot entry, providing a minimal graphical environment with Openbox as a fallback if the GUI crashes.
2026-07-07 02:47:48 +02:00
nocode e35b352a2a feat(recovery): add fws-recovery-gui GTK3 application for system repair
Implement a graphical interface for the FWS system recovery tool using GTK3.

Features:
- Scans for FWS installations on disk
- Provides action buttons for common repairs: GRUB reinstall, initramfs
  regeneration, pacman repair, and full system repair
- Displays real-time engine output in a log viewer
- Supports both root session (live mode) and regular user (pkexec elevation)
- Includes terminal access (chroot) for manual diagnostics
- Offers system reboot/poweroff controls

The GUI replaces Arch Linux branding with FWS in output for consistency
while preserving technical identifiers (package names, file paths) for
accurate diagnostics.
2026-07-07 02:47:43 +02:00
nocode 44b476e1d0 feat(zram): add zram-generator configuration for live environment
Enable compressed swap in RAM (zram) for the live environment to prevent memory saturation issues on systems with limited RAM. This configuration provides necessary headroom during Anaconda installation by leveraging zram's ~3:1 compression ratio on Python heaps. The configuration is automatically copied to installed systems via LiveOS payload, maintaining this safety net post-installation on modest hardware.
2026-07-07 02:47:35 +02:00
nocode f3feff4dc2 feat(systemd): add fws-recovery.target unit
Add new systemd target unit for FWS system recovery mode. This target is invoked via GRUB boot menu entry "Reparer FWS" and provides a multi-user environment with network access plus recovery session. The service includes proper dependency management to ensure getty@tty1 is properly handled.
2026-07-07 02:47:30 +02:00
nocode d00bcd4144 feat(releng): add fws-recovery-boot systemd service
Add systemd service unit for FWS system recovery boot mode. This service handles recovery session initialization on tty1 with fallback from GUI (via startx/openbox) to console assistant if graphical startup fails. The service is only activated via fws-recovery.target kernel command line parameter and does not interfere with normal boot processes.
2026-07-07 02:47:24 +02:00
nocode 34bf7909ad chore(releng): add issue file to airootfs
Add /etc/issue file to the releng airootfs configuration. This file provides pre-login banner information displayed to users connecting to the system.
2026-07-07 02:47:19 +02:00
nocode 50773635e8 feat(grub): add fws-recovery boot menu entry script
Add a new GRUB menu entry script that provides system recovery functionality.

The script generates a 'Réparer FWS (récupération du système)' menu entry that boots the system into fws-recovery.target with the fws.recovery=1 marker. This allows the recovery application to launch and perform system repairs via GUI or console fallback.

The script uses the fallback initramfs for maximum hardware compatibility during recovery operations, matching the UUID-based root detection logic of the standard 10_linux script.
2026-07-07 02:47:14 +02:00
nocode 3a437a8bfe docs(anaconda): add comment about fws-recovery boot entry and service
Document the FWS recovery boot entry generated by GRUB configuration and explain how the fws-recovery.target and fws-recovery-boot.service work together. Clarify that no explicit activation is needed as the service has no [Install] section and is pulled by the target through Requires, while the desktop launcher provides an alternative way to invoke recovery.
2026-07-07 02:46:43 +02:00
nocode 8e2fc2ec6a refactor(fws-recovery): restructure recovery script with subcommands and GUI support
Split monolithic script into modular functions and add subcommand interface:

- Add scan subcommand to list FWS installations
- Add repair subcommand with actions: grub, initramfs, pacman, pacman-update, all
- Add shell subcommand for chroot terminal access
- Implement support for operating on running system (no mount/chroot needed)
- Extract detection and mounting logic into reusable functions
- Add in_target() helper to execute commands in target (chroot or direct)
- Improve mkinitcpio warning documentation
- Maintain backward-compatible TUI mode when no args provided
- Enable GUI (fws-recovery-gui) to pilot repairs via subcommands
2026-07-07 02:46:30 +02:00
nocode c7221247f2 fix(fws-about): update distribution description to be more generic
Change the description from "Une distribution Arch Linux" to "Une distribution Linux" to better reflect the project's identity and avoid limiting it to Arch Linux specifically.
2026-07-07 02:46:20 +02:00
nocode 9e62cedff0 feat(anaconda): add desktop installation retry mechanism for network failures
Implement a robust desktop installation retry system that handles transient network issues during the Arch installation process.

Changes:
- Create fws-desktop-retry script in /usr/local/bin for manual recovery after installation
- Add DNS resolution wait loop (up to 10 attempts with 3-second intervals)
- Implement pacman retry logic with up to 3 attempts (15-second delay between retries)
- Generate /var/lib/fws/desktop-failed marker file on installation failure
- Create informative MOTD message guiding users to retry desktop installation
- Preserve FWS-specific MOTD when it contains retry instructions

This allows users to recover from network/mirror failures without reinstalling the entire system.
2026-07-06 18:40:37 +02:00
nocode d65f08cfad fix(i3-config): disable picom in virtual machines to prevent rendering artifacts
picom's GPU compositing causes GTK window repaint issues in virtual environments (vmwgfx/llvmpipe), resulting in black content and visual artifacts. Use systemd-detect-virt to skip picom execution on VMs while keeping it enabled on real hardware.

The rounded corners feature is sacrificed in VM environments to maintain stable window rendering.
2026-07-04 14:10:27 +02:00
nocode d4bef2fe91 chore(releng): add fws-about desktop entry file
Add desktop entry file for the FWS About application with localized names and metadata for system integration.
2026-07-04 13:43:54 +02:00
nocode a1255eb5c6 build(releng): hide xfce4-about application from menus
Add desktop entry file to hide the xfce4-about application from application menus. Since xfce4-about is a dependency of Thunar through libxfce4ui and does not require a full XFCE session, this entry prevents it from appearing in application launchers by leveraging XDG_DATA_DIRS priority where /usr/local/share takes precedence over /usr/share.
2026-07-04 13:43:50 +02:00
nocode cbdb386ba0 feat(powermenu): add fws-powermenu universal power menu utility
Add a Python-based power menu script that works with both Hyprland (Wayland) and i3 (X11) desktop environments. Supports lock, logout, suspend, reboot, and poweroff actions with appropriate display server backends (wofi for Hyprland, rofi for i3).
2026-07-04 13:43:45 +02:00
nocode 4df4b2bff3 feat(fws-about): add fws-about dialog application for system information
Add a new GTK3-based Python application that displays an "About FWS" dialog with two tabs:

- "Le projet FWS" tab: shows project name, description, features, and home URL
- "Système" tab: displays system information including OS, kernel, desktop environment, hardware (CPU, memory, GPUs, disks)

The application detects system information from /proc, lsblk, lspci, and environment variables. It replaces the default Xfce About dialog with FWS branding.
2026-07-04 13:43:39 +02:00
nocode 07ff62af55 chore(anaconda): replace thunar with dolphin and gvfs with udisks2 in desktop environments
Update package lists for Hyprland and i3 desktop environments:
- Replace thunar file manager with dolphin (KDE's file manager)
- Add kio-extras for dolphin functionality
- Replace gvfs with udisks2 for USB mounting
- Update comments to reflect new mount mechanism

This change improves consistency and provides better integration for the respective desktop environments.
2026-07-04 13:43:29 +02:00
nocode 22a95badcf style(waybar): add custom power button styling
Add styling for custom power button with Catppuccin color scheme.

- Default color: #f38ba8 (rouge doux)
- Hover color: #ff6b81 (lighter red)
2026-07-04 13:42:44 +02:00
nocode a1adefe890 feat(waybar): add power menu module to waybar config
Add custom power menu module to waybar configuration with power icon and SUPER+X keyboard shortcut that launches fws-powermenu utility.
2026-07-04 13:42:41 +02:00
nocode 1f465bf647 feat(polybar): add power module to polybar configuration
Add a new power module to the polybar configuration that displays a power icon and triggers the fws-powermenu command on click. The module is styled with red foreground color and integrated into the modules-right bar.
2026-07-04 13:42:37 +02:00
nocode ba2dc4637e chore(i3-config): update file manager and add new keybindings and window rules
- Change default file manager from thunar to dolphin
- Add $mod+x keybinding for fws-powermenu (power menu)
- Add floating window rules for fws-hello and fws-about dialogs
2026-07-04 13:42:32 +02:00
nocode ccdbdf4adf chore(hyprland): update hyprland config with dolphin, powermenu binding, and window rules
Replace thunar file manager with dolphin for consistency.
Add power menu keybinding (Super+X) for shutdown/restart operations.
Add floating window rules for fws-hello and fws-about applications.
2026-07-04 13:42:28 +02:00
nocode 1c74b59459 fix(fws-hello): set window type hint to dialog and prevent resizing
Import Gdk and GLib modules to properly configure window behavior.

Set deterministic WM_CLASS using GLib.set_prgname() so that i3/Hyprland
window rules targeting "fws-hello" floating window behavior work correctly.

Set window type hint to DIALOG and disable resizing to ensure the window
remains floating with its natural size instead of being stretched across
the entire workspace, which would result in unreadable layout.
2026-07-04 13:42:24 +02:00
nocode 17f9c79983 feat(rofi): add rofi configuration for fws application menu
Add rofi configuration file with FWS styling matching the Hyprland wofi look. Includes dark background, blue borders and selection, icon support, and Catppuccin Mocha color scheme.
2026-07-04 13:15:45 +02:00
nocode 3cdfdcfaeb feat(i3-config): add rofi configuration for i3 desktop environment
Install rofi configuration file (rofi-config.rasi) for i3 desktop to provide an application menu with FWS styling, equivalent to wofi in Hyprland. Configure rofi for both skeleton and existing user home directories with proper ownership settings.
2026-07-04 13:15:33 +02:00
nocode 080a77c5e3 feat(releng): add fws-updates-check script for update notifications
Add a new shell script that checks for available package updates using checkupdates from pacman-contrib. The script outputs the number of available updates with an icon for use in waybar/polybar status bars. Silent output when no updates are available allows the bar module to hide.
2026-07-04 12:57:01 +02:00
nocode 7e40a565cc feat(fws-update): add system update utility script
Add fws-update script to provide a one-command system update solution accessible from taskbar, fws-hello menu, or terminal.

The script performs:
- System update via pacman -Syu
- Package cache cleanup (retains 2 latest versions)
- Orphaned package detection and optional removal
- Flatpak updates if available

Requires root privileges and prompts for user confirmation on orphan removal.
2026-07-04 12:56:57 +02:00
nocode 338f6b87ee feat(recovery): add fws-recovery script for system repair from live environment
Add a comprehensive system recovery tool that:
- Detects FWS installations on disks including LVM volumes
- Mounts target root filesystem with /boot and ESP partitions
- Provides interactive menu for common repair operations:
  - GRUB reinstallation (UEFI and BIOS support)
  - Initramfs regeneration via mkinitcpio
  - Pacman database repair and system updates
  - Interactive chroot shell for manual intervention

The script handles automatic LVM activation, filesystem detection via os-release, and proper cleanup on exit.
2026-07-04 12:56:51 +02:00
nocode 4f4afec6b2 feat(releng): add fws-proton-ge script for proton-ge installation
Add a user-friendly bash script that automates downloading and installing
Proton-GE (GloriousEggroll) for Steam. The script fetches the latest release
from GitHub, verifies integrity with SHA512 checksums, and installs it to the
user's Steam compatibility tools directory. Includes error handling and user
guidance for Steam configuration.
2026-07-04 12:56:44 +02:00
nocode 640aa15af8 feat(releng): add fws-hello welcome window script
Add a new GTK3-based welcome window script that displays on first boot after installation. The script provides quick access to system setup tasks including system update, multimedia codecs installation, Proton-GE setup, VR configuration, and keyboard shortcuts (on Hyprland/i3). Users can opt to hide the window on subsequent boots via a checkbox and flag file.
2026-07-04 12:56:39 +02:00
nocode 73f73ff17e feat(releng): add fws-hello desktop autostart entry
Add desktop entry file to automatically launch fws-hello welcome window on first startup. This provides a user-friendly greeting interface when the system boots.
2026-07-04 12:56:33 +02:00
nocode 87977ce8d7 build(releng): add python-gobject, pacman-contrib packages and enable firewalld
- Add python-gobject for fws-hello welcome window (GTK3 comes with Firefox)
- Add pacman-contrib for checkupdates/paccache (update indicator and fws-update)
- Enable firewalld.service by default with public zone (blocks inbound, allows outbound)
- firewalld is already in the base image and can be activated offline
- GUI included in firewall-config package; KDE has additional plasma-firewall
2026-07-04 12:56:13 +02:00
nocode b5f00d8dd2 feat(waybar): add custom updates module to waybar configuration
Add a new custom/updates module to the waybar right-side modules that displays available system updates. The module executes fws-updates-check every 30 minutes (1800 seconds) and allows users to install updates by clicking, which launches a kitty terminal running fws-update. Tooltip text is displayed in French.
2026-07-04 12:56:08 +02:00
nocode 349cc28d7d feat(polybar): add updates module to polybar configuration
Add a new custom script module to check for system updates in the polybar status bar. The module runs fws-updates-check every 30 minutes and allows users to trigger updates with a left click to open the update utility in kitty terminal.
2026-07-04 12:56:03 +02:00
nocode fc1bc218a4 feat(i3-config): add fws-hello welcome window on startup
Add execution of fws-hello with --autostart flag to display a welcome window on first boot only. The window will automatically hide after the initial startup.
2026-07-04 12:55:56 +02:00
nocode d399fc5fa6 feat(hyprland): add fws-hello welcome window on first startup
Add execution of fws-hello with --autostart flag to display a welcome window on first launch. The window will be automatically hidden on subsequent startups.
2026-07-04 12:55:50 +02:00
nocode 4d36e86f51 feat(hardware-setup): add mangohud gaming performance overlay packages
Add mangohud and lib32-mangohud packages to the desktop environment setup for gaming performance monitoring. Mangohud provides an in-game FPS and performance metrics overlay that can be used with Steam games via '%command%' prefix.
2026-07-04 12:55:45 +02:00
nocode 2c5f08330a refactor(fws-keys): make keyboard shortcuts tool universal for hyprland and i3
Rename fws-hypr-keys to fws-keys and extend it to support both Hyprland and i3 desktop environments. The tool now detects the session type and uses appropriate methods:

- Hyprland: queries hyprctl binds for real loaded bindings (wofi dmenu)
- i3: parses ~/.config/i3/config with variable resolution (rofi dmenu)

Update all references in configs and templates. Add VM detection warning in fws-vr-setup to prevent VR attempts in virtual machines where GPU/USB access is unavailable.

Add ttf-liberation font dependency for Steam UI stability on minimal installations and improve error guidance for Steam crashes.
2026-07-04 03:59:09 +02:00