Commit Graph

203 Commits

Author SHA1 Message Date
nocode 3b47ef30e7 feat(releng): add gameboot packages for windows gaming deployment
Add packages required for offline Windows gaming dual-boot deployment with Secure Boot support:
- wimlib: for applying Windows install.wim/.esd images
- hivex: for offline BCD and anti-BitLocker modifications
- sbctl/sbsigntools/mokutil: for Secure Boot management
- binutils: for objdump (.sbat) inspection

Note: nvidia driver is conditional and managed separately via fws-setup-hardware.
2026-07-08 23:56:00 +02:00
nocode e5bc082049 fix(fws-gameboot-bootfix): remove residual fws winpe boot entries
Clean up residual 'FWS WinPE' boot entries left over from Windows deployment fallback (bcdboot one-shot already consumed). These entries were cluttering the boot menu and needed to be removed during the boot fix process.
2026-07-08 23:55:48 +02:00
nocode 8d1b6bf23b fix(fws-gameboot): improve windows not found error messaging
Replace terse die message with user-friendly notification before the error.

When Windows Boot Manager entry is not found, first notify the user with
clear instructions about installing gaming Windows and checking UEFI boot
entries before terminating with the technical error message.
2026-07-08 23:55:41 +02:00
nocode 3f6fb08af6 chore(packages): add gameboot and secure boot related packages
Add wimlib, hivex, sbctl, sbsigntools, mokutil, and binutils packages required for dual-boot Windows gaming support and Secure Boot setup. These are universal tools used by fws-windows-deploy and fws-secureboot-setup scripts.
2026-07-08 23:55:21 +02:00
nocode c90e48f14f feat(gameboot-windows): add game installers configuration with valorant and lol
Add installers.json configuration file with official installation sources for Valorant and League of Legends. This file specifies download URLs from Riot's CDN and installation parameters for the game installer script.

Note: URLs are region-specific (EU default) and may require periodic verification as Riot frequently updates these resources.
2026-07-08 03:38:19 +02:00
nocode 226af87379 feat(gameboot-windows): add powershell script to install games from official sources
Add Install-Games.ps1 script that downloads and launches official game installers marked with autoinstall=true in installers.json.

The script:
- Downloads installers from official Riot servers (not redistributed by FWS)
- Supports silent installation via configurable arguments
- Handles TLS 1.2 compatibility for older .NET stacks
- Provides user feedback and error handling for download/launch failures
- Note: Valorant installation requires manual confirmation due to Vanguard kernel driver and mandatory restart
2026-07-08 03:38:12 +02:00
nocode 8e3bd2b53c feat(gameboot-windows): add FirstBoot-FwsGameboot orchestrator script
Add PowerShell script to orchestrate first-boot initialization on Windows gaming system.

The script executes on first boot only:
1. Install-FwsGameboot.ps1 for gaming account setup and auto-login
2. Install-Games.ps1 to download and install configured games from official sources

A marker file prevents re-execution on subsequent boots. Idempotent and safe to re-run.
2026-07-08 03:38:04 +02:00
nocode af7ed4e469 docs(gameboot-windows): expand README with first boot automation and game installer details
- Add FirstBoot-FwsGameboot.ps1 script for automated first boot setup
- Document Install-Games.ps1 for downloading official Riot game installers
- Add installers.json for managing Riot installer URLs
- Explain why games cannot be pre-bundled (licensing and Vanguard constraints)
- Provide two methods for triggering first boot: autounattend.xml integration and manual execution
- Clarify prerequisites: local admin account, no password, Secure Boot/TPM/VBS-HVCI
- Expand complete flow documentation with first boot step
- Add security reminders about BitLocker and physical access implications
- Reorganize sections for better clarity and structure
2026-07-08 03:37:44 +02:00
nocode a1be0e6d49 feat(gameboot-windows): add support for installers.json and Install-Games.ps1 deployment
Extend the file deployment loop to include installers.json and Install-Games.ps1 files. Add conditional path validation before copying to gracefully handle missing files instead of failing on non-existent paths.
2026-07-08 03:37:31 +02:00
nocode afe884b9e4 feat(gameboot-windows): add games configuration for fws gameboot
Add games.json configuration file with support for Riot client games (Valorant and League of Legends). This file defines launchable games with their process names and patchline information for fws-gameboot to-windows command.
2026-07-08 03:21:36 +02:00
nocode 2bee8ed359 docs(hibernate-swap-dualboot): add hibernation performance optimization tips
Add recommended GRUB parameters for faster hibernation and resume:
- hibernation.compressor=lz4 for faster compression with lower CPU overhead
- GRUB_TIMEOUT and GRUB_TIMEOUT_STYLE settings for faster boot experience

These optimizations are particularly beneficial for large swap images (60-90 GB).
2026-07-08 03:21:30 +02:00
nocode e6c0224db9 feat(gameboot-windows): implement automatic game launch with consume-once token mechanism
Replace hardcoded Valorant launch with flexible game resolution system:

- Add Get-RequestedGame() to read and consume launch.json tokens from all ESP partitions (dual-disk support)
- Add Resolve-RiotClient() to locate Riot Client via RiotClientInstalls.json canonical source instead of hardcoded paths
- Add Start-Game() to support multiple game types (riot, uri, exe) via games.json configuration
- Implement token consume-once pattern to prevent replay of stale launch requests
- Remove scheduled task management (FWS-Return-OnStart) - now handled purely via BootNext assertions
- Add re-assertion of BootNext=Windows after 25s delay to win race against ONSTART task
- Validate requested game against games.json with fallback to valorant
- Improve robustness: handle dual disks, missing tokens, unreadable tokens, and missing processes gracefully
- Update documentation to reflect new auto-launch architecture and admin requirement
2026-07-08 03:21:21 +02:00
nocode 057898524a docs(gameboot-windows): clarify workflow and add game registration documentation
Update README to reflect the complete automated game launch flow:
- Clarify that fws-play reads the requested game from launch.json on ESP
- Add games.json registration system allowing users to add custom games
- Document auto-login setup and password handling in installer
- Update workflow steps with auto-login and logon task details
- Add section explaining how to register new games
- Improve clarity on security considerations and boot fallback mechanism
- Refine status notes and technical details for better accuracy
2026-07-08 03:21:10 +02:00
nocode 11a531003e feat(gameboot-windows): add auto-login and game launch task to fws gameboot installer
Enhance Install-FwsGameboot.ps1 with automatic login and game launch capabilities:

- Add -Password parameter for optional auto-login password configuration
- Verify prerequisites: local admin account and password requirements
- Deploy games.json configuration file alongside scripts
- Implement auto-login via Windows registry (AutoAdminLogon settings)
- Add scheduled task for auto-launching fws-play at user logon
- Tighten file ACLs on deployment directory (SYSTEM/Admins full, Users read-only)
- Replace hibernation note with full reboot explanation
- Enhance documentation with parameter descriptions and prerequisite validation details
- Update user warnings to reflect auto-login kiosk security implications

Workflow: boot → auto-login → fws-play launch → game execution → return to FWS.
2026-07-08 03:21:02 +02:00
nocode 9b80effc77 feat(fws-gameboot): add game selection support for windows boot with --game option
Add ability to specify which game to launch on Windows via --game CLI argument.

- Introduce FWS_DEFAULT_GAME environment variable (defaults to 'valorant')
- Parse --game option in to-windows command to override default
- Sanitize game identifiers using lowercase and allowed chars [a-z0-9_-]
- Write atomic game token (launch.json) to ESP FAT partition for Windows to consume
- Purge stale tokens on write failure to prevent replay of old choices
- Update help text with new option and game identifier constraints
2026-07-08 03:20:50 +02:00
nocode 810a98fc34 chore(gameboot): add default game configuration option
Add FWS_DEFAULT_GAME configuration parameter to specify the default game launched when fws-gameboot to-windows is called without the --game argument. The game identifier must exist in the Windows games.json file (e.g., valorant, lol).
2026-07-08 03:20:28 +02:00
nocode 96da52f0e1 feat(releng): add pacman hook for secure boot signing after kernel updates
Add a new libalpm hook that automatically re-signs bootloader binaries with sbctl after kernel or GRUB updates. This ensures that Secure Boot remains functional after system updates that modify unsigned binaries.

The hook triggers on updates to kernel, GRUB, and EFI files, and runs sbctl sign-all to maintain signature consistency. This is idempotent and harmless if sbctl has no enrolled keys.
2026-07-08 02:39:31 +02:00
nocode beec38a899 feat(gameboot-windows): add Windows dual-boot orchestration scripts for FWS gaming
Add PowerShell scripts to manage dual-boot transitions between FWS and Windows 11 for gaming sessions with Valorant.

Includes:
- fws-return.ps1: Arms firmware boot-next (one-shot) to target OS via bcdedit
- fws-play.ps1: Orchestrates Valorant session with robust crash recovery
- Install-FwsGameboot.ps1: Deploys scripts, disables hibernation, creates ONSTART task
- README.md: Documentation on dual-boot workflow and prerequisites

Design principles:
- Minimal footprint, no Vanguard interference (no injection/kernel hooks)
- Permanent fallback: BootOrder[0]=FWS catches unmanaged reboots
- Robust locale-independent bcdedit parsing via EFI paths and GUIDs
- Crash-proof game session: ONSTART task disabled during play to prevent mid-match boot changes
2026-07-08 02:39:27 +02:00
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 585c4691a1 docs(hibernate-swap-dualboot): clarify row 6 mitigation for systemctl hibernate hang
expand explanation of why timeout/watchdog approaches fail for S4 hangs since the process is frozen. document the actual viable mitigations: strict preflight validation, auto-recovery via reset, and BootOrder fallback. add note about testing and post-hang recovery documentation.
2026-07-08 02:38:46 +02:00
nocode 732082144a chore(releng): add file permissions for fws-gameboot and fws-secureboot-setup scripts
Add permission entries for three new executable scripts:
- fws-gameboot
- fws-gameboot-bootfix
- fws-secureboot-setup

All scripts are set with 0:0:755 permissions (owner:group:mode).
2026-07-08 02:38:30 +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 f3ffcb62b8 docs: add hibernation and dual-boot setup guide for valorant with windows
Adds comprehensive documentation for FWS Hibernate-Swap Dual-Boot feature, enabling seamless switching between Arch Linux and Windows 11 bare-metal for Valorant gameplay.

Covers:
- System architecture and boot flow with UEFI BootNext
- Hardware prerequisites (RTX 5090, NVMe, TPM 2.0)
- Phased implementation roadmap from disk reconnaissance to end-to-end testing
- Secure Boot integration with sbctl while maintaining hibernation capability
- UEFI boot orchestration and failsafe mechanisms
- Installer integration for both new installations and existing systems
- GPU NVIDIA-specific hibernation handling
- Windows integration via PowerShell scripts for automatic boot target management
- Vanguard anti-cheat compatibility constraints
2026-07-08 02:03:36 +02:00
nocode 7730ac7b00 feat(build): add preflight package resolution and fws-dnd package
Add preflight package resolution step in build-offi.sh to validate all profile
packages against pacman repositories before mkarchiso execution. This prevents
'target not found' errors during ISO creation by catching missing packages early
with helpful error messages and recovery instructions.

Introduce fws-dnd package (D&D 5e manager for FWS with GTK4 interface) to the
local package build process in setup-aur.sh. Include PKGBUILD definition and
source tarball.

When package resolution fails, the build now exits with clear feedback pointing
users to run setup-aur.sh to build missing dependencies like fws-dnd.
2026-07-07 21:39:29 +02:00
nocode bee59a2fb3 docs(changelog): update changelog with new features and fixes
Add entries for:
- Machine name selection at installation
- Interactive build script with versioning and naming
- systemd-timesyncd explicit activation
- Keyboard layout derivation from full locale
- DNS in build container configuration
2026-07-07 21:07:10 +02:00
nocode 00d34dfc49 merge(Multi-Desktop)!: Add Multi DE on the installer 2026-07-07 21:04:19 +02:00
nocode ac810f2ee3 docs(trademarks): correct fws version number from 1.0 to 0.6 2026-07-07 13:57:22 +02:00
nocode 5592c57642 docs(readme): update fws version from 1.0 to 0.6 in installation header 2026-07-07 13:57:17 +02:00
nocode 8f6b8e7a95 docs(licensing): update fws version from 1.0 to 0.6 in installation header example 2026-07-07 13:57:12 +02:00
nocode 1826dbfead docs(changelog): update fws version from 1.0 to 0.6 2026-07-07 13:57:08 +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 aac3c8b59e chore(.xinitrc): update anaconda default product version to 0.6 2026-07-07 13:56:54 +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 730cfd697c chore: bump version to 0.6.0 2026-07-07 02:53:18 +02:00
nocode 292e3071c6 docs(changelog): release version 0.6.0
Update changelog with version 0.6.0 release notes dated 2026-07-07.

Documents major additions including:
- Anaconda installer 45 ported to Arch with Live OS payload
- FWS tooling suite (fws-hello, fws-update, fws-keys, etc.)
- System recovery functionality (fws-recovery-gui and engine)
- zram swap support and firewalld enablement
- Hyprland and i3 desktop parity

Includes changelog entries for changed items (FWS branding, boot entries, compression), fixed issues (splash watchdog, low RAM handling, profile synchronization), and removed items (syslinux config).
2026-07-07 02:53:14 +02:00
nocode 8a90ef4794 docs(environnement): add native arch linux build reference section
Document the native Arch Linux build environment that has been the reference since July 2026. This section explains that build.sh and setup-aur.sh now detect and execute directly on Arch Linux, replacing the previous Windows 11 + WSL setup as the primary reference.

The Windows + WSL path remains functional with automatic fallback from Git Bash but is no longer the reference environment.
2026-07-07 02:48:34 +02:00
nocode 9c7f9b46c5 docs(trademarks): document branding removals and anaconda customization
Add detailed documentation of trademark and branding changes:

- BIOS boot menu: replaced archiso syslinux splash with FWS original artwork
- Login banner: uses FWS PRETTY_NAME without kernel version suffix
- User-facing text: replaced references to Arch Linux/Fedora with generic descriptions
- Anaconda installer: configured to display "FWS 1.0" via environment variables
- Splash screen filtering: removes Fedora mentions from visible logs
- Technical logs: intentionally preserve upstream component identification for diagnostics

All changes maintain nominative fair use and preserve functional upstream tool identifiers.
2026-07-07 02:48:29 +02:00
nocode bf8b29c975 docs(readme): update fws architecture and recovery system documentation
- Add FWS branding details for Anaconda installer (ANACONDA_PRODUCT* exports via .xinitrc)
- Enhance splash screen description with real-time anaconda activity monitoring and auto-diagnostic
- Document memory requirements (4 GB recommended, 2 GB minimum with zram swap)
- Clarify boot menu entries and recovery accessibility from live, GRUB, and installed system
- Add fws-recovery as GTK application with bash engine and console fallback
- Document zram swap configuration for both live and installed system
- Detail recovery system integration: GRUB entry, systemd target, polkit policy, and desktop launcher
- Update syslinux splash and DEFAULT entry documentation
- Expand merge rule warning with syslinux-linux.cfg example and BIOS boot status
- Enhance troubleshooting section with detailed recovery procedures and known issues resolutions
- Add information about splash watchdog, RAM warnings, and diagnostic auto-generation
2026-07-07 02:48:22 +02:00
nocode 9c9891d98e docs(licensing): mark anaconda branding removal as completed and update date
Update the Anaconda branding removal checklist item from incomplete to completed, documenting the implementation details:
- Product name changed to FWS via ANACONDA_PRODUCTNAME and ANACONDA_PRODUCTVERSION variables
- Variables exported by live .xinitrc and read from FWS os-release
- Installation header displays "FWS 1.0 INSTALLATION"
- BIOS boot menu visual replaced with FWS splash screen
- Modified Anaconda version documented in LICENSING.md and TRADEMARKS.md

Also update the compliance date from 2026-06-17 to 2026-07-07.
2026-07-07 02:48:09 +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