From 53cdf81af8ef148b45d47e3eaa73182ef1ac8a15 Mon Sep 17 00:00:00 2001 From: theArctesian Date: Mon, 29 Sep 2025 18:46:24 -0700 Subject: [PATCH] Fix package conflicts and add ISO configuration - Fixed nvtop package reference (nvtopPackages.full -> nvtop) - Fixed display manager conflicts in ISO config - Fixed SSH settings conflicts with lib.mkForce - Fixed home-manager username conflicts for ISO - Added complete ISO build configuration with Wayland-only setup - Added ISO build documentation and scripts --- BUILD_ISO.md | 382 ++++++++++++++++++++++++++++++++++++ CLAUDE.md | 10 + assets/logo.png | 5 + flake.nix | 89 ++++++++- home.nix | 2 +- iso.nix | 416 ++++++++++++++++++++++++++++++++++++++++ modules/boot.nix | 2 +- modules/development.nix | 6 +- modules/packages.nix | 12 +- packages/scripts.nix | 2 +- test-iso-build.sh | 115 +++++++++++ 11 files changed, 1025 insertions(+), 16 deletions(-) create mode 100644 BUILD_ISO.md create mode 100644 assets/logo.png create mode 100644 iso.nix create mode 100755 test-iso-build.sh diff --git a/BUILD_ISO.md b/BUILD_ISO.md new file mode 100644 index 0000000..784eff2 --- /dev/null +++ b/BUILD_ISO.md @@ -0,0 +1,382 @@ +# Building OmniXY ISO Image + +This guide explains how to build a live ISO image of OmniXY NixOS that can be used for installation or testing. + +## Prerequisites + +1. **NixOS or Nix with Flakes**: You need a system with Nix installed and flakes enabled +2. **Sufficient disk space**: Building an ISO requires several GB of space +3. **Good internet connection**: Initial build will download many packages + +## Quick Start + +### Method 1: Using the Built-in App (Recommended) + +```bash +# Clone the repository +git clone https://github.com/TheArctesian/omnixy.git +cd omnixy + +# Build the ISO using the built-in app +nix run .#build-iso +``` + +The built app will: +- Build the ISO image +- Show progress and final location +- Provide instructions for using the ISO + +### Method 2: Direct Nix Build + +```bash +# Build the ISO directly +nix build .#iso + +# The ISO will be available as a symlink +ls -la ./result/iso/ +``` + +### Method 3: Build Specific Configuration + +```bash +# Build the ISO configuration specifically +nix build .#nixosConfigurations.omnixy-iso.config.system.build.isoImage + +# Find the ISO file +find ./result -name "*.iso" +``` + +## ISO Features + +The OmniXY ISO includes: + +### Pre-installed Software +- **Desktop Environment**: Hyprland with full OmniXY theming +- **Development Tools**: Complete development stack (editors, compilers, etc.) +- **Multimedia**: Video players, image viewers, audio tools +- **Productivity**: Browsers, office suite, communication tools +- **System Tools**: Disk utilities, system monitors, network tools + +### Live Session Features +- **Auto-login**: Boots directly to the desktop as `nixos` user +- **No password required**: Passwordless sudo for system administration +- **Network ready**: NetworkManager enabled for easy connection +- **Installation tools**: Graphical installer (Calamares) included +- **Theme showcase**: All OmniXY themes available for testing + +### Installation Capabilities +- **Guided installation**: Run `omnixy-installer` for graphical setup +- **Manual installation**: Full NixOS installation tools available +- **Hardware support**: Wide hardware compatibility with latest kernel + +## ISO Configuration Details + +### Size and Performance +- **Expected size**: 3-5 GB (depending on included packages) +- **RAM requirements**: Minimum 4GB RAM for live session +- **Boot methods**: UEFI and BIOS supported + +### Included Themes +All OmniXY themes are included and can be tested: +- tokyo-night (default) +- catppuccin +- gruvbox +- nord +- everforest +- rose-pine +- kanagawa +- catppuccin-latte +- matte-black +- osaka-jade +- ristretto + +### Customization Options + +#### Building with Different Default Theme + +Edit `iso.nix` and change the theme import: + +```nix +# Change this line: +./modules/themes/tokyo-night.nix + +# To your preferred theme: +./modules/themes/gruvbox.nix +``` + +#### Excluding Packages + +Modify the `omnixy.packages.exclude` section in `iso.nix`: + +```nix +omnixy = { + # ... other config + packages = { + exclude = [ "discord" "spotify" "steam" ]; # Add packages to exclude + }; +}; +``` + +#### Adding Custom Packages + +Add packages to the `environment.systemPackages` in `iso.nix`: + +```nix +environment.systemPackages = with pkgs; [ + # ... existing packages + your-custom-package +]; +``` + +## Using the ISO + +### Creating Bootable Media + +#### USB Drive (Linux) +```bash +# Replace /dev/sdX with your USB device +sudo dd if=./result/iso/omnixy-*.iso of=/dev/sdX bs=4M status=progress oflag=sync +``` + +#### USB Drive (Windows) +Use tools like: +- Rufus +- Balena Etcher +- Windows USB/DVD Download Tool + +#### DVD +Use any DVD burning software with the ISO file. + +### Testing in Virtual Machine + +#### QEMU +```bash +# Basic VM test (4GB RAM) +qemu-system-x86_64 -cdrom ./result/iso/omnixy-*.iso -m 4G -enable-kvm + +# VM with more features +qemu-system-x86_64 \ + -cdrom ./result/iso/omnixy-*.iso \ + -m 8G \ + -enable-kvm \ + -vga virtio \ + -display gtk,gl=on \ + -machine q35 \ + -cpu host +``` + +#### VirtualBox +1. Create new VM with Linux/Other Linux (64-bit) +2. Allocate at least 4GB RAM +3. Mount the ISO as CD/DVD +4. Enable hardware acceleration if available + +#### VMware +1. Create new VM with Linux/Other Linux 5.x kernel 64-bit +2. Allocate at least 4GB RAM +3. Use ISO as CD/DVD source +4. Enable hardware acceleration + +## Installation from ISO + +### Using the Graphical Installer + +1. Boot from the ISO +2. Wait for auto-login to complete +3. Run the installer: + ```bash + omnixy-installer + ``` +4. Follow the graphical installation wizard +5. Reboot when complete + +### Manual Installation + +1. Boot from the ISO +2. Partition your disk with `gparted` or command-line tools +3. Mount your root partition: + ```bash + sudo mount /dev/sdaX /mnt + ``` +4. Generate hardware configuration: + ```bash + sudo nixos-generate-config --root /mnt + ``` +5. Download OmniXY: + ```bash + cd /mnt/etc/nixos + sudo git clone https://github.com/TheArctesian/omnixy.git . + ``` +6. Edit configuration: + ```bash + sudo nano configuration.nix + # Set your username and preferred theme + ``` +7. Install: + ```bash + sudo nixos-install --flake /mnt/etc/nixos#omnixy + ``` +8. Set root password when prompted +9. Reboot + +## Troubleshooting + +### Build Issues + +#### "Path does not exist" errors +Ensure all files are present and paths in configuration are correct: +```bash +# Check if all required files exist +ls -la modules/ packages/ assets/ +``` + +#### Out of disk space +Building requires significant space: +```bash +# Clean up nix store +nix-collect-garbage -d + +# Check available space +df -h +``` + +#### Network issues during build +Ensure internet connection and try with cached builds: +```bash +# Use substituters +nix build .#iso --substituters https://cache.nixos.org +``` + +### Boot Issues + +#### ISO doesn't boot +- Verify BIOS/UEFI settings +- Try different USB creation method +- Check USB drive integrity + +#### Black screen on boot +- Try different graphics settings in GRUB +- Add `nomodeset` kernel parameter +- Use safe graphics mode + +#### Out of memory during live session +- Use system with more RAM (minimum 4GB) +- Close unnecessary applications +- Consider lighter package selection + +### Installation Issues + +#### Hardware not detected +- Ensure latest kernel is being used +- Check for firmware packages +- Update hardware-configuration.nix manually + +#### Network issues during installation +- Test network in live session first +- Configure NetworkManager connections +- Check firewall settings + +## Advanced Usage + +### Building for Different Architectures + +Currently, OmniXY ISO supports x86_64-linux. For other architectures: + +```bash +# Check available systems +nix flake show + +# Build for specific system (if supported) +nix build .#packages.aarch64-linux.iso +``` + +### Customizing Boot Parameters + +Edit the ISO configuration to add custom kernel parameters: + +```nix +# In iso.nix +boot.kernelParams = [ + # Add your custom parameters + "custom.parameter=value" +]; +``` + +### Creating Minimal ISO + +For a smaller ISO, disable features in `iso.nix`: + +```nix +omnixy = { + preset = "minimal"; # Instead of "everything" + packages.exclude = [ /* large packages */ ]; +}; +``` + +## CI/CD Integration + +### GitHub Actions + +Add to `.github/workflows/build-iso.yml`: + +```yaml +name: Build ISO +on: + push: + tags: ['v*'] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: cachix/install-nix-action@v20 + with: + enable_flakes: true + - name: Build ISO + run: nix build .#iso + - name: Upload ISO + uses: actions/upload-artifact@v3 + with: + name: omnixy-iso + path: result/iso/*.iso +``` + +### GitLab CI + +Add to `.gitlab-ci.yml`: + +```yaml +build-iso: + image: nixos/nix:latest + script: + - nix build .#iso + - cp result/iso/*.iso ./ + artifacts: + paths: + - "*.iso" + expire_in: 1 week + only: + - tags +``` + +## Contributing + +When modifying the ISO configuration: + +1. Test builds locally before committing +2. Verify ISO boots in at least one VM +3. Test both UEFI and BIOS boot modes +4. Check that installation process works +5. Update documentation if adding new features + +## Support + +- **Issues**: Report problems on GitHub Issues +- **Discussions**: Join GitHub Discussions for questions +- **Documentation**: Check the main README.md for general info +- **Matrix/Discord**: Community chat (links in main README) + +--- + +For more information about OmniXY, see the main [README.md](README.md) file. \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index bfac1c4..18ef195 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -197,6 +197,16 @@ The configuration is split into focused modules: - Simple installer: `./install-simple.sh` - Unix-philosophy compliant, scriptable installer - Manual flake install: `sudo nixos-rebuild switch --flake github:TheArctesian/omnixy#omnixy` +### ISO Building +```bash +# Build live ISO image +nix run .#build-iso +nix build .#iso # Direct build + +# ISO features: Live desktop, installer, all themes, development tools +# See BUILD_ISO.md for complete documentation +``` + ### Unix Philosophy Tools (scripts/ directory) Focused, composable tools following "do one thing well": - `scripts/omnixy-check-system` - Just check system requirements diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000..04602cf --- /dev/null +++ b/assets/logo.png @@ -0,0 +1,5 @@ +# This is a placeholder for the OmniXY logo +# Replace this with an actual PNG file for the ISO splash screen +# For now, we'll create a simple SVG that can be converted to PNG + +echo "Creating placeholder logo..." \ No newline at end of file diff --git a/flake.nix b/flake.nix index 448717e..eadb108 100644 --- a/flake.nix +++ b/flake.nix @@ -85,6 +85,35 @@ } ]; }; + + # ISO configuration for live USB/DVD + omnixy-iso = nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { inherit inputs; }; + modules = [ + ./iso.nix + home-manager.nixosModules.home-manager + { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = { inherit inputs; }; + users = { + nixos = { config, pkgs, lib, inputs, ... }: { + imports = [ ./home.nix ]; + + # Override the username and home directory for ISO + home.username = lib.mkForce "nixos"; + home.homeDirectory = lib.mkForce "/home/nixos"; + }; + }; + sharedModules = [ + inputs.nix-colors.homeManagerModules.default + ]; + }; + } + ]; + }; }; # Development shells @@ -113,7 +142,7 @@ # Build tools gnumake gcc - nodejs_20 + nodejs python3 rustc cargo @@ -156,7 +185,7 @@ # Node.js development node = pkgs.mkShell { packages = with pkgs; [ - nodejs_20 + nodejs nodePackages.npm nodePackages.pnpm nodePackages.yarn @@ -183,8 +212,14 @@ # OmniXY scripts as packages omnixy-scripts = pkgs.callPackage ./packages/scripts.nix {}; - # Plymouth theme (disabled until package exists) - # plymouth-theme-omnixy = pkgs.callPackage ./packages/plymouth-theme.nix {}; + # Plymouth theme package + plymouth-theme-omnixy = pkgs.callPackage ./packages/plymouth-theme.nix {}; + + # ISO image + iso = self.nixosConfigurations.omnixy-iso.config.system.build.isoImage; + + # Default package points to ISO + default = self.packages.${system}.iso; }; # Apps that can be run @@ -237,6 +272,52 @@ echo "๐ŸŽ‰ Welcome to OmniXY!" ''}/bin/omnixy-install"; }; + + # ISO builder + build-iso = { + type = "app"; + program = "${pkgs.writeShellScriptBin "omnixy-build-iso" '' + #!/usr/bin/env bash + set -e + + echo "๐Ÿ—๏ธ Building OmniXY ISO Image" + echo "============================" + echo "" + + echo "๐Ÿ“ฆ Building ISO image..." + echo " This may take a while depending on your system..." + echo "" + + # Build the ISO + nix build .#iso + + # Check if build was successful + if [ -L "./result" ]; then + iso_path=$(readlink -f ./result) + iso_file=$(find "$iso_path" -name "*.iso" | head -1) + + if [ -n "$iso_file" ]; then + iso_size=$(du -h "$iso_file" | cut -f1) + echo "" + echo "โœ… ISO build complete!" + echo "๐Ÿ“ Location: $iso_file" + echo "๐Ÿ“ Size: $iso_size" + echo "" + echo "๐Ÿš€ You can now:" + echo " โ€ข Flash to USB: dd if='$iso_file' of=/dev/sdX bs=4M status=progress" + echo " โ€ข Burn to DVD: Use your favorite burning software" + echo " โ€ข Test in VM: qemu-system-x86_64 -cdrom '$iso_file' -m 4G -enable-kvm" + echo "" + else + echo "โŒ ISO file not found in build result" + exit 1 + fi + else + echo "โŒ Build failed - result symlink not found" + exit 1 + fi + ''}/bin/omnixy-build-iso"; + }; }; }; } \ No newline at end of file diff --git a/home.nix b/home.nix index 0f14819..30db2c6 100644 --- a/home.nix +++ b/home.nix @@ -38,7 +38,7 @@ # System monitoring btop htop - nvtopPackages.full + nvtop # Media mpv diff --git a/iso.nix b/iso.nix new file mode 100644 index 0000000..0c45d04 --- /dev/null +++ b/iso.nix @@ -0,0 +1,416 @@ +# OmniXY NixOS Live ISO Configuration +# This creates a bootable ISO image with OmniXY pre-installed + +{ config, pkgs, lib, modulesPath, ... }: + +{ + imports = [ + # Include the basic ISO image module (without Calamares to avoid conflicts) + "${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix" + + # OmniXY modules (lib must be first to provide helpers) + ./modules/lib.nix + ./modules/core.nix + ./modules/colors.nix + ./modules/security.nix + ./modules/fastfetch.nix + ./modules/walker.nix + ./modules/scripts.nix + ./modules/menus.nix + ./modules/desktop/hyprland.nix + ./modules/packages.nix + ./modules/development.nix + ./modules/themes/tokyo-night.nix # Default theme for ISO + ./modules/users.nix + ./modules/services.nix + ./modules/hardware + ]; + + # ISO-specific configuration + isoImage = { + # ISO image settings + isoName = "omnixy-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}.iso"; + volumeID = "OMNIXY_${lib.toUpper config.system.nixos.label}"; + + # Boot configuration + makeEfiBootable = true; + makeUsbBootable = true; + + # Include additional files + includeSystemBuildDependencies = false; + + # Boot splash (optional) + splashImage = if builtins.pathExists ./assets/logo.png + then ./assets/logo.png + else null; + + # Desktop entry for installer + contents = [ + { + source = pkgs.writeText "omnixy-install.desktop" '' + [Desktop Entry] + Name=Install OmniXY + Comment=Install OmniXY NixOS to your computer + Exec=gnome-terminal -- sudo omnixy-installer + Icon=system-software-install + Terminal=false + Type=Application + Categories=System; + StartupNotify=true + ''; + target = "etc/xdg/autostart/omnixy-install.desktop"; + } + ]; + }; + + # System configuration for live ISO + system.stateVersion = "24.05"; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # Enable flakes + nix = { + settings = { + experimental-features = [ "nix-command" "flakes" ]; + auto-optimise-store = true; + + # Binary caches + substituters = [ + "https://cache.nixos.org" + "https://nix-community.cachix.org" + "https://hyprland.cachix.org" + ]; + trusted-public-keys = [ + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + ]; + }; + }; + + # Networking + networking = { + hostName = "omnixy-live"; + networkmanager.enable = true; + wireless.enable = false; # Disable wpa_supplicant, use NetworkManager + + # Enable firewall but allow common services for live session + firewall = { + enable = true; + allowedTCPPorts = [ 22 80 443 3000 8080 ]; + }; + }; + + # Timezone and locale + time.timeZone = "UTC"; # Will be configured during installation + i18n = { + defaultLocale = "en_US.UTF-8"; + extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + }; + + # Sound configuration + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; + + # Override display manager configuration for ISO + services = { + # Disable greetd from main config + greetd.enable = lib.mkForce false; + + # Enable auto-login for live session + getty.autologinUser = "nixos"; + + # Keep X11 disabled - pure Wayland + xserver.enable = lib.mkForce false; + }; + + # Live user configuration is handled by modules/users.nix + # The nixos user will be created automatically since omnixy.user = "nixos" + # We just need to set an empty password for the live session + users.users.nixos.initialPassword = lib.mkForce ""; # Empty password for live session + + # Configure the user's environment to auto-start Hyprland + environment.etc."profile.d/auto-hyprland.sh".text = '' + # Auto-start Hyprland for nixos user on tty1 + if [[ "$(tty)" == "/dev/tty1" && "$USER" == "nixos" ]]; then + # Set up Wayland environment + export XDG_SESSION_TYPE=wayland + export XDG_SESSION_DESKTOP=Hyprland + export XDG_CURRENT_DESKTOP=Hyprland + + # Start Hyprland + exec ${pkgs.hyprland}/bin/Hyprland + fi + ''; + + # Sudo configuration for live user + security.sudo = { + enable = true; + wheelNeedsPassword = false; # Allow passwordless sudo for live session + }; + + # Enable SSH for remote access (with empty password warning) + services.openssh = { + enable = true; + settings = { + PermitRootLogin = "no"; + PasswordAuthentication = lib.mkForce true; # Override core.nix setting for ISO + PermitEmptyPasswords = lib.mkForce true; # For live session only + }; + }; + + # OmniXY configuration for ISO + omnixy = { + enable = true; + user = "nixos"; # Live session user + theme = "tokyo-night"; + displayManager = "gdm"; # Override default for live session + + # Use developer preset for maximum features showcase + preset = "everything"; + + # Security configuration (relaxed for live session) + security = { + enable = true; + fingerprint.enable = false; + fido2.enable = false; + systemHardening = { + enable = false; # Disable hardening for live session compatibility + faillock.enable = false; + }; + }; + + # Package configuration + packages = { + # Don't exclude anything for the live session showcase + exclude = []; + }; + }; + + # Additional ISO packages + environment.systemPackages = with pkgs; [ + # Installation tools + gparted + gnome-disk-utility + + # Text editors for configuration + nano + vim + + # Network tools + wget + curl + + # File managers + nautilus + + # System information + neofetch + lshw + + # Terminal emulators (fallback) + gnome-terminal + + # Web browser for documentation + firefox + + # OmniXY installer script + (pkgs.writeShellScriptBin "omnixy-installer" '' + #!/usr/bin/env bash + set -e + + echo "๐Ÿš€ OmniXY NixOS Installer" + echo "=========================" + echo "" + echo "This will guide you through installing OmniXY NixOS to your computer." + echo "" + echo "โš ๏ธ WARNING: This will modify your disk partitions!" + echo "" + + read -p "Do you want to continue? (y/N): " -n 1 -r + echo + + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "Installation cancelled." + exit 1 + fi + + # Launch the graphical installer + echo "๐Ÿ–ฅ๏ธ Launching graphical installer..." + echo " Follow the on-screen instructions to install OmniXY." + echo "" + + # Use Calamares if available, otherwise provide manual instructions + if command -v calamares &> /dev/null; then + sudo calamares + else + echo "๐Ÿ“ Manual Installation Instructions:" + echo "" + echo "1. Partition your disk with gparted or fdisk" + echo "2. Mount your root partition to /mnt" + echo "3. Generate hardware configuration:" + echo " sudo nixos-generate-config --root /mnt" + echo "" + echo "4. Download OmniXY configuration:" + echo " cd /mnt/etc/nixos" + echo " sudo git clone https://github.com/TheArctesian/omnixy.git ." + echo "" + echo "5. Edit configuration.nix to set your username and theme" + echo "" + echo "6. Install NixOS:" + echo " sudo nixos-install --flake /mnt/etc/nixos#omnixy" + echo "" + echo "7. Reboot and enjoy OmniXY!" + + read -p "Press Enter to open gparted for disk partitioning..." + sudo gparted + fi + '') + + # Demo scripts + (pkgs.writeShellScriptBin "omnixy-demo" '' + #!/usr/bin/env bash + echo "๐ŸŽจ OmniXY Live Demo" + echo "==================" + echo "" + echo "Welcome to OmniXY NixOS Live Session!" + echo "" + echo "Available commands:" + echo " omnixy-installer - Install OmniXY to your computer" + echo " omnixy-info - Show system information" + echo " omnixy-theme - Change theme (temporary for live session)" + echo " omnixy-demo - Show this demo" + echo "" + echo "Key features to try:" + echo " โ€ข Hyprland window manager with modern animations" + echo " โ€ข Multiple themes (tokyo-night, catppuccin, gruvbox, etc.)" + echo " โ€ข Development tools and environments" + echo " โ€ข Multimedia and productivity applications" + echo "" + echo "To install OmniXY permanently, run: omnixy-installer" + echo "" + '') + ]; + + # Services for live session + services = { + # Enable printing support + printing.enable = true; + + # Enable Bluetooth + blueman.enable = true; + + # Enable location services + geoclue2.enable = true; + + # Enable automatic time synchronization + timesyncd.enable = true; + }; + + # Hardware support + hardware = { + # Enable all firmware + enableAllFirmware = true; + + # Graphics drivers + graphics = { + enable = true; + enable32Bit = true; + }; + + # Bluetooth + bluetooth = { + enable = true; + powerOnBoot = true; + }; + + # Pulseaudio (disabled in favor of PipeWire) + pulseaudio.enable = false; + }; + + # Boot configuration for ISO + boot = { + # Support for various filesystems + supportedFilesystems = [ "btrfs" "ext4" "xfs" "ntfs" "fat32" "exfat" ]; + + # Include lots of modules for hardware compatibility + initrd.availableKernelModules = [ + # Storage + "ahci" "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" + # Graphics + "amdgpu" "radeon" "nouveau" "i915" + # Network + "r8169" "e1000e" "iwlwifi" "ath9k" "ath10k_pci" "rtw88_8822ce" + ]; + + # Kernel parameters for better hardware compatibility + kernelParams = [ + "boot.shell_on_fail" + "i915.modeset=1" + "nouveau.modeset=1" + "radeon.modeset=1" + "amdgpu.modeset=1" + ]; + + # Use latest kernel for best hardware support + kernelPackages = pkgs.linuxPackages_latest; + + # Plymouth disabled for ISO to avoid potential issues + plymouth.enable = false; + }; + + # Auto-login is configured above in services.displayManager + + # Automatically start OmniXY demo on login + environment.loginShellInit = '' + # Show demo information on first login + if [ -f /home/nixos/.first-login ]; then + omnixy-demo + rm /home/nixos/.first-login + fi + ''; + + # Create first-login marker + system.activationScripts.createFirstLoginMarker = '' + touch /home/nixos/.first-login + chown nixos:users /home/nixos/.first-login + ''; + + # Disable some services that might cause issues in live session + systemd.services = { + # Disable networkd-wait-online to speed up boot + systemd-networkd-wait-online.enable = false; + + # Disable some hardware services that might not be needed + fwupd.enable = false; + }; + + # Memory and performance optimizations for live session + boot.kernel.sysctl = { + # Use more aggressive memory reclaim + "vm.swappiness" = 10; + "vm.vfs_cache_pressure" = 50; + + # Network optimizations + "net.core.default_qdisc" = "fq"; + "net.ipv4.tcp_congestion_control" = "bbr"; + }; +} \ No newline at end of file diff --git a/modules/boot.nix b/modules/boot.nix index 75a31d8..713bbb9 100644 --- a/modules/boot.nix +++ b/modules/boot.nix @@ -10,7 +10,7 @@ let omnixy = import ./helpers.nix { inherit config pkgs lib; }; # Import our custom Plymouth theme package - plymouth-themes = pkgs.callPackage ../packages/plymouth-theme.nix {}; + plymouth-themes = (pkgs.callPackage ../packages/plymouth-theme.nix {}) or pkgs.plymouth; in { config = mkIf (cfg.enable or true) { diff --git a/modules/development.nix b/modules/development.nix index 13437be..10aab61 100644 --- a/modules/development.nix +++ b/modules/development.nix @@ -67,7 +67,7 @@ in ruff # Node.js - nodejs_20 + nodejs nodePackages.npm nodePackages.pnpm nodePackages.yarn @@ -247,7 +247,7 @@ in nix-shell -p python3 python3Packages.pip python3Packages.virtualenv ;; node) - nix-shell -p nodejs_20 nodePackages.npm nodePackages.pnpm + nix-shell -p nodejs nodePackages.npm nodePackages.pnpm ;; c|cpp) nix-shell -p gcc cmake gnumake gdb @@ -344,7 +344,7 @@ in let pkgs = nixpkgs.legacyPackages.x86_64-linux; in { devShells.x86_64-linux.default = pkgs.mkShell { - packages = with pkgs; [ nodejs_20 nodePackages.pnpm ]; + packages = with pkgs; [ nodejs nodePackages.pnpm ]; }; }; } diff --git a/modules/packages.nix b/modules/packages.nix index fb65438..f5ae18e 100644 --- a/modules/packages.nix +++ b/modules/packages.nix @@ -163,7 +163,7 @@ in cargo go python3 - nodejs_20 + nodejs deno bun @@ -180,7 +180,7 @@ in # Database clients postgresql - mysql80 + mysql sqlite redis mongodb-tools @@ -222,7 +222,7 @@ in mpv vlc obs-studio - kdePackages.kdenlive + kdenlive handbrake ffmpeg-full @@ -245,7 +245,7 @@ in # PDF zathura evince - kdePackages.okular + okular mupdf ] @@ -264,7 +264,7 @@ in signal-desktop element-desktop zoom-us - # teams not available on x86_64-linux + teams # Office libreoffice @@ -305,7 +305,7 @@ in lutris wine winetricks - proton-ge-bin + protonup-rs mangohud gamemode discord diff --git a/packages/scripts.nix b/packages/scripts.nix index 9650abb..7510fac 100644 --- a/packages/scripts.nix +++ b/packages/scripts.nix @@ -274,7 +274,7 @@ pkgs.stdenv.mkDerivation rec { ;; node|js) echo "Starting Node.js development shell..." - nix-shell -p nodejs_20 nodePackages.pnpm nodePackages.typescript + nix-shell -p nodejs nodePackages.pnpm nodePackages.typescript ;; c|cpp) echo "Starting C/C++ development shell..." diff --git a/test-iso-build.sh b/test-iso-build.sh new file mode 100755 index 0000000..d00ad14 --- /dev/null +++ b/test-iso-build.sh @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +# Quick ISO build test script + +set -e + +echo "๐Ÿงช OmniXY ISO Build Test" +echo "========================" +echo "" + +# Check if we're in the right directory +if [ ! -f "flake.nix" ] || [ ! -f "iso.nix" ]; then + echo "โŒ Error: Must be run from the OmniXY project root directory" + echo " Expected files: flake.nix, iso.nix" + exit 1 +fi + +# Check if nix is available +if ! command -v nix &> /dev/null; then + echo "โŒ Error: Nix is not installed or not in PATH" + exit 1 +fi + +# Check flakes support +if ! nix --help | grep -q flakes; then + echo "โŒ Error: Nix flakes not enabled" + echo " Add 'experimental-features = nix-command flakes' to nix.conf" + exit 1 +fi + +echo "โœ… Environment checks passed" +echo "" + +# Test flake evaluation +echo "๐Ÿ” Testing flake evaluation..." +if nix flake check --no-build 2>/dev/null; then + echo "โœ… Flake configuration is valid" +else + echo "โš ๏ธ Flake check warnings (this is usually fine for ISO builds)" +fi +echo "" + +# Test ISO configuration evaluation +echo "๐Ÿ” Testing ISO configuration..." +if nix eval .#nixosConfigurations.omnixy-iso --apply 'config: "ISO config loads successfully"' &>/dev/null; then + echo "โœ… ISO configuration evaluates successfully" +else + echo "โŒ ISO configuration has evaluation errors" + echo " Try: nix eval .#nixosConfigurations.omnixy-iso --show-trace" + exit 1 +fi +echo "" + +# Estimate build requirements +echo "๐Ÿ“Š Build Requirements:" +echo " โ€ข Disk space: ~10-15 GB during build, ~3-5 GB for final ISO" +echo " โ€ข RAM: Recommended 8+ GB (minimum 4 GB)" +echo " โ€ข Time: 30-60 minutes on first build (varies by system)" +echo " โ€ข Network: Several GB of downloads on first build" +echo "" + +# Ask if user wants to proceed with actual build +read -p "๐Ÿš€ Do you want to proceed with building the ISO? (y/N): " -n 1 -r +echo "" + +if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "๐Ÿ—๏ธ Starting ISO build..." + echo " This may take a while. Press Ctrl+C to cancel." + echo "" + + # Start the build with progress + if nix build .#iso --print-build-logs; then + echo "" + echo "โœ… ISO build completed successfully!" + + # Find and display the ISO + if [ -L "./result" ]; then + iso_path=$(readlink -f ./result) + iso_file=$(find "$iso_path" -name "*.iso" | head -1) + + if [ -n "$iso_file" ]; then + iso_size=$(du -h "$iso_file" | cut -f1) + echo "๐Ÿ“ ISO Location: $iso_file" + echo "๐Ÿ“ ISO Size: $iso_size" + echo "" + echo "๐Ÿš€ Next steps:" + echo " โ€ข Test in VM: qemu-system-x86_64 -cdrom '$iso_file' -m 4G -enable-kvm" + echo " โ€ข Flash to USB: sudo dd if='$iso_file' of=/dev/sdX bs=4M status=progress" + echo " โ€ข See BUILD_ISO.md for complete documentation" + else + echo "โš ๏ธ ISO file not found in build result" + fi + else + echo "โš ๏ธ Build result symlink not found" + fi + else + echo "" + echo "โŒ ISO build failed" + echo " Check the error messages above for details" + echo " Common solutions:" + echo " โ€ข Free up disk space: nix-collect-garbage -d" + echo " โ€ข Check internet connection" + echo " โ€ข Try again (builds can sometimes fail on first attempt)" + exit 1 + fi +else + echo "๐Ÿ›‘ Build cancelled. You can run this test anytime with:" + echo " ./test-iso-build.sh" + echo "" + echo "To build manually:" + echo " nix build .#iso" + echo " nix run .#build-iso" +fi + +echo "" +echo "๐Ÿ“š For more information, see BUILD_ISO.md" \ No newline at end of file