- Moved image.fileName to top-level (not under isoImage.image) - Fixed syntax error that prevented ISO build
421 lines
12 KiB
Nix
421 lines
12 KiB
Nix
# 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
|
||
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;
|
||
|
||
# ISO image filename
|
||
image.fileName = "omnixy-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}.iso";
|
||
|
||
# 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"
|
||
# Remove any conflicting password settings
|
||
users.users.nixos = {
|
||
initialPassword = lib.mkForce ""; # Empty password for live session
|
||
password = lib.mkForce null;
|
||
hashedPassword = lib.mkForce null;
|
||
hashedPasswordFile = lib.mkForce null;
|
||
initialHashedPassword = lib.mkForce null;
|
||
};
|
||
|
||
# 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;
|
||
};
|
||
};
|
||
|
||
# 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";
|
||
};
|
||
} |