# Hardware Directory - Hardware Support Modules The `modules/hardware/` directory contains specialized modules for hardware detection, configuration, and optimization. These modules automatically detect available hardware and configure appropriate drivers, settings, and optimizations. ## Hardware Architecture The hardware system uses conditional configuration based on detected hardware: ```nix config = lib.mkIf cfg.hardware.nvidia.enable { # NVIDIA-specific configuration only when NVIDIA hardware is present }; ``` ## Core Hardware Module ### `default.nix` **Purpose**: Main hardware detection and coordination module **What it does**: - Detects available hardware components - Enables appropriate hardware-specific modules - Coordinates between different hardware configurations - Provides common hardware configuration options **Detection Logic**: - GPU detection (Intel, AMD, NVIDIA) - Audio hardware identification - Input device configuration - Network hardware setup **Module Coordination**: ```nix imports = [ ./audio.nix ./bluetooth.nix ./intel.nix ./amd.nix ./nvidia.nix ./touchpad.nix ]; ``` ## Graphics Hardware ### `intel.nix` **Purpose**: Intel integrated graphics configuration **Hardware Support**: - Intel HD Graphics (all generations) - Intel Iris Graphics - Intel Arc discrete graphics **What it configures**: - Intel graphics drivers (i915) - Hardware acceleration (VA-API) - Power management optimizations - Display output configuration **Features**: - Vulkan support for gaming - Hardware video decoding - Power-efficient graphics scaling - Multi-monitor support **Configuration Options**: ```nix omnixy.hardware.intel = { enable = true; powerSaving = true; # Enable power optimizations vulkan = true; # Enable Vulkan API support }; ``` ### `amd.nix` **Purpose**: AMD graphics card configuration **Hardware Support**: - AMD Radeon RX series - AMD Radeon Pro series - AMD APU integrated graphics **What it configures**: - AMDGPU drivers (open-source) - RADV Vulkan drivers - Hardware acceleration (VA-API/VDPAU) - OpenCL compute support **Features**: - Gaming optimizations - Content creation acceleration - Multi-GPU configurations - FreeSync support **Performance Tuning**: - Dynamic frequency scaling - Power management profiles - Thermal management - Memory clock optimization ### `nvidia.nix` **Purpose**: NVIDIA graphics card configuration **Hardware Support**: - NVIDIA GeForce RTX/GTX series - NVIDIA Quadro professional cards - NVIDIA Tesla compute cards **What it configures**: - Proprietary NVIDIA drivers - CUDA toolkit integration - Hardware acceleration - Power management **Features**: - Game-ready drivers - NVENC/NVDEC hardware encoding - CUDA development support - G-Sync compatibility - Optimus laptop support **Special Considerations**: - Wayland compatibility configuration - Hybrid graphics laptop support - Multiple monitor setup - Custom kernel parameters ## Audio Hardware ### `audio.nix` **Purpose**: Audio system configuration and optimization **Audio Stack**: PipeWire with ALSA/PulseAudio compatibility **What it configures**: - PipeWire audio server - Low-latency audio for content creation - Multiple audio device management - Bluetooth audio support **Supported Hardware**: - Built-in laptop audio - USB audio interfaces - Professional audio equipment - Bluetooth headphones and speakers **Features**: - Real-time audio processing - Multi-channel audio support - Audio routing and mixing - Professional audio plugin support **Optimizations**: - Low-latency configuration - Buffer size optimization - Audio priority scheduling - Hardware-specific tweaks ## Input Devices ### `touchpad.nix` **Purpose**: Laptop touchpad configuration and gestures **What it configures**: - Touchpad sensitivity and acceleration - Multi-touch gesture support - Palm rejection - Scrolling behavior **Gesture Support**: - Two-finger scrolling - Pinch-to-zoom - Three-finger swipe navigation - Four-finger workspace switching **Customization Options**: - Sensitivity adjustment - Acceleration curves - Gesture threshold tuning - Disable-while-typing settings ## Connectivity ### `bluetooth.nix` **Purpose**: Bluetooth hardware and device management **What it configures**: - BlueZ Bluetooth stack - Device pairing and authentication - Audio codec support (A2DP, aptX) - Power management **Supported Devices**: - Bluetooth headphones/speakers - Keyboards and mice - Game controllers - File transfer devices **Features**: - Automatic device reconnection - Multiple device management - Profile switching - Battery level monitoring ## Hardware Detection Logic ### Automatic Detection The hardware system automatically detects: ```nix # GPU Detection gpu = if builtins.pathExists "/sys/class/drm/card0" then # Detect GPU vendor from driver information # Enable appropriate GPU module else null; # Audio Detection audio = if config.sound.enable then # Configure audio hardware else null; ``` ### Manual Override Users can override automatic detection: ```nix # Force NVIDIA configuration even if not detected omnixy.hardware.nvidia.enable = true; omnixy.hardware.nvidia.prime = { enable = true; intelBusId = "PCI:0:2:0"; nvidiaBusId = "PCI:1:0:0"; }; ``` ## Power Management ### Laptop Optimization - Battery life optimization - CPU frequency scaling - GPU power states - Display brightness control ### Desktop Performance - Maximum performance profiles - Gaming optimizations - Content creation acceleration - Thermal management ## Multi-GPU Systems ### Hybrid Graphics (Optimus/Prime) - Automatic GPU switching - Application-specific GPU assignment - Power saving when not gaming - External display routing ### Multi-GPU Rendering - SLI/CrossFire support where applicable - Compute workload distribution - Mining/AI acceleration setup ## Hardware-Specific Optimizations ### Gaming Configuration ```nix omnixy.hardware.gaming = { enable = true; performance = "high"; gpu = "nvidia"; # or "amd" or "intel" }; ``` ### Content Creation ```nix omnixy.hardware.creation = { enable = true; audio.lowLatency = true; gpu.acceleration = true; }; ``` ### Development Workstation ```nix omnixy.hardware.development = { enable = true; containers = true; virtualization = true; }; ``` ## Troubleshooting ### Hardware Detection Issues - Check `lspci` output for hardware presence - Verify kernel module loading - Check hardware compatibility lists ### Driver Problems - Use hardware-specific logs - Check driver version compatibility - Verify configuration syntax ### Performance Issues - Monitor hardware utilization - Check thermal throttling - Verify power management settings ## Adding New Hardware Support ### Creating Hardware Modules 1. **Create Module File**: ```nix # modules/hardware/my-hardware.nix { config, lib, pkgs, ... }: with lib; let cfg = config.omnixy.hardware.myHardware; in { options.omnixy.hardware.myHardware = { enable = mkEnableOption "My Hardware support"; # Additional options... }; config = mkIf cfg.enable { # Hardware configuration }; } ``` 2. **Add to Hardware Module**: ```nix # In modules/hardware/default.nix imports = [ # ... existing imports ./my-hardware.nix ]; ``` 3. **Implement Detection**: ```nix # Add automatic detection logic config.omnixy.hardware.myHardware.enable = mkDefault ( # Detection logic here ); ``` ### Hardware Module Guidelines - Use conditional configuration (`mkIf`) - Provide sensible defaults - Include performance optimizations - Document hardware requirements - Test on multiple hardware configurations This comprehensive hardware support system ensures OmniXY works optimally across a wide variety of hardware configurations while providing easy customization for specific needs.