| 
19 | 19 |     config.boot.kernelPackages.nvidia_x11  | 
20 | 20 |   ];  | 
21 | 21 | 
 
  | 
 | 22 | +  # Comprehensive audio fixes for Legion Pro 7 16IRX8H  | 
 | 23 | +  # This model has both Realtek ALC287 and TAS2781 audio components  | 
 | 24 | +  # The TAS2781 I2C codec binds to the HDA subsystem and requires special handling  | 
 | 25 | +  boot.kernelParams = [  | 
 | 26 | +    # Audio configuration  | 
 | 27 | +    "snd_hda_intel.enable_msi=1"  | 
 | 28 | +    # Legion-specific audio model (required until kernel quirk is upstreamed)  | 
 | 29 | +    "snd_hda_intel.model=lenovo-legion-7i"  | 
 | 30 | +    # TAS2781 calibration reset to handle CRC errors in factory calibration data  | 
 | 31 | +    # This is a known issue on Legion laptops where the TAS2781 firmware has corrupted  | 
 | 32 | +    # calibration values; resetting allows the codec to initialize with defaults  | 
 | 33 | +    "snd_soc_tas2781.reset_calib=1"  | 
 | 34 | +    # More aggressive TAS2781 fixes for Legion  | 
 | 35 | +    "snd_soc_tas2781.tas2781_dev_id=0x6a"  | 
 | 36 | +    "snd_hda_intel.single_cmd=1"  | 
 | 37 | +    # Hardware fixes  | 
 | 38 | +    "tsc=reliable" # Fix TSC ADJUST firmware bugs common on Legion laptops  | 
 | 39 | +    # ACPI thermal management fixes for Legion BIOS issues  | 
 | 40 | +    "acpi.debug_layer=0x2"  | 
 | 41 | +    "acpi.debug_level=0x2"  | 
 | 42 | +    "processor.ignore_ppc=1"  | 
 | 43 | +  ];  | 
 | 44 | + | 
 | 45 | +  # Additional audio configuration for Legion Pro 7  | 
 | 46 | +  boot.extraModprobeConfig = ''  | 
 | 47 | +    # Force specific Legion audio model for proper speaker routing  | 
 | 48 | +    options snd-hda-intel model=lenovo-legion-7i single_cmd=1 probe_mask=1  | 
 | 49 | +    # TAS2781 specific options  | 
 | 50 | +    options snd-soc-tas2781-comlib reset_calib=1  | 
 | 51 | +    options snd-hda-scodec-tas2781-i2c reset_calib=1  | 
 | 52 | +  '';  | 
 | 53 | + | 
 | 54 | +  # Hardware firmware support for Legion audio  | 
 | 55 | +  hardware.enableRedistributableFirmware = lib.mkDefault true;  | 
 | 56 | + | 
 | 57 | +  # Enable Bluetooth modules  | 
 | 58 | +  boot.kernelModules = [  | 
 | 59 | +    "bluetooth"  | 
 | 60 | +    "btusb"  | 
 | 61 | +  ];  | 
 | 62 | + | 
22 | 63 |   hardware = {  | 
23 | 64 |     nvidia = {  | 
24 | 65 |       modesetting.enable = lib.mkDefault true;  | 
25 | 66 |       powerManagement.enable = lib.mkDefault true;  | 
26 |  | -      #  | 
27 | 67 |       prime = {  | 
28 | 68 |         intelBusId = "PCI:00:02:0";  | 
29 | 69 |         nvidiaBusId = "PCI:01:00:0";  | 
30 | 70 |       };  | 
31 | 71 |     };  | 
 | 72 | + | 
 | 73 | +    # Enable Bluetooth with Legion-optimized settings  | 
 | 74 | +    bluetooth = {  | 
 | 75 | +      enable = lib.mkDefault true;  | 
 | 76 | +      powerOnBoot = lib.mkDefault false; # Save battery  | 
 | 77 | +      settings = {  | 
 | 78 | +        General = {  | 
 | 79 | +          ControllerMode = "dual";  | 
 | 80 | +          FastConnectable = "true";  | 
 | 81 | +          Experimental = "true"; # Enable LE Audio features  | 
 | 82 | +          KernelExperimental = "true"; # Enable ISO socket support  | 
 | 83 | +        };  | 
 | 84 | +      };  | 
 | 85 | +    };  | 
32 | 86 |   };  | 
33 | 87 | 
 
  | 
34 |  | -  # Cooling management  | 
 | 88 | +  # Cooling management for Legion laptops  | 
35 | 89 |   services.thermald.enable = lib.mkDefault true;  | 
36 | 90 | 
 
  | 
 | 91 | +  # Audio group permissions  | 
 | 92 | +  users.groups.audio = { };  | 
 | 93 | + | 
37 | 94 |   # √(2560² + 1600²) px / 16 in ≃ 189 dpi  | 
38 | 95 |   services.xserver.dpi = 189;  | 
39 | 96 | }  | 
0 commit comments