nixcfg/hwModules/lenovo/legion/go/default.nix
Aly Raffauf 5b97e3daf1
Some checks are pending
git-mirror / gitlab-sync (push) Waiting to run
nix-build / adjustor-build (push) Waiting to run
nix-build / clean-install-build (push) Waiting to run
nix-build / hhd-ui-build (push) Waiting to run
nix-build / rofi-bluetooth-build (push) Waiting to run
nix-build / fallarbor-build (push) Waiting to run
nix-build / lavaridge-build (push) Waiting to run
nix-build / mauville-build (push) Waiting to run
nix-build / pacifidlog-build (push) Waiting to run
nix-build / rustboro-build (push) Waiting to run
nix-build / slateport-build (push) Waiting to run
nix-check / fmt-check (push) Waiting to run
nix-check / eval-check (push) Waiting to run
hwModules/legion/go: add udev rules and kernelParams from bazzite (#137)
* hwModules/legion/go: disable monitoring in kernelParams

* hwModules/legion/go: add bazzite storage udev rules

* hwModules/legion/go: add bazzite udev rules

* hwModules/legion/go: add bazzite sysctl settings

* hwModules/legion/go: mkForce conflicting sysctl definitions

* hwModules/legion/go: document
2024-10-20 15:19:21 -04:00

161 lines
5.2 KiB
Nix

{
config,
lib,
pkgs,
self,
...
}: let
legion-go-tricks = pkgs.fetchFromGitHub {
owner = "aarron-lee";
repo = "legion-go-tricks";
rev = "773f4dfa217989213ab2678d63a84dc306e8f8d4";
sha256 = "sha256-d5TB4kvNR7bwF5VyO1hxe8n9/PubtzWlBgvSmpUgDQc=";
};
convolverPath = "${legion-go-tricks}/experimental_sound_fix/multiwayCor48.wav";
in {
imports = [
self.nixosModules.hw-common-amd-cpu
self.nixosModules.hw-common-amd-gpu
self.nixosModules.hw-common-bluetooth
self.nixosModules.hw-common-ssd
];
boot = {
initrd = {
availableKernelModules = [
"amdgpu"
"nvme"
"rtsx_pci_sdmmc"
"sd_mod"
"sdhci_pci"
"thunderbolt"
"usb_storage"
"usbhid"
"xhci_pci"
];
kernelModules = ["amdgpu"];
};
blacklistedKernelModules = ["k10temp"]; # Conflicts with zenpower
extraModulePackages = with config.boot.kernelPackages; [acpi_call zenpower];
kernel.sysctl = {
# Improved file monitoring
"fs.inotify.max_user_instances" = 8192;
"fs.inotify.max_user_watches" = 524288;
# Disable wtachdogs for maximum performance at the cost of resiliency
"kernel.nmi_watchdog" = 0;
"kernel.soft_watchdog" = 0;
"kernel.split_lock_mitigate" = 0;
"kernel.watchdog" = 0;
# Network optimizations
"net.core.default_qdisc" = "fq";
"net.ipv4.tcp_congestion_control" = "bbr";
"net.ipv4.tcp_mtu_probing" = lib.mkForce 1;
# Memory management
"vm.dirty_background_bytes" = 134217728;
"vm.dirty_bytes" = 268435456;
"vm.max_map_count" = lib.mkForce 2147483642;
"vm.page-cluster" = 0;
"vm.swappiness" = 180;
"vm.watermark_boost_factor" = 0;
"vm.watermark_scale_factor" = 125;
};
kernelModules = ["zenpower"]; # Improved temperature monitoring
# Xanmod seems more responsive under load
kernelPackages = lib.mkDefault pkgs.linuxPackages_xanmod_latest;
};
hardware = {
enableAllFirmware = true;
sensor.iio.enable = true;
};
services = {
pipewire.wireplumber.configPackages = [
(pkgs.writeTextDir "share/pipewire/pipewire.conf.d/10-legion-go-convolver.conf" ''
# Convolver Configuration for Pipewire
#
# This configuration applies separate left and right convolver effects using the corresponding impulse response files
# to the entire system audio output.
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "Legion Go"
media.name = "Legion Go"
filter.graph = {
nodes = [
{
type = builtin
label = convolver
name = convFL
config = {
filename = "${convolverPath}"
channel = 0
}
}
{
type = builtin
label = convolver
name = convFR
config = {
filename = "${convolverPath}"
channel = 1
}
}
]
inputs = [ "convFL:In" "convFR:In" ]
outputs = [ "convFL:Out" "convFR:Out" ]
}
capture.props = {
node.name = "Legion Go"
node.autoconnect = true
media.class = "Audio/Sink"
priority.driver = 1000
priority.session = 2000
audio.channels = 2
audio.position = [ FL FR ]
}
playback.props = {
node.name = "Legion Go corrected"
node.passive = true
audio.channels = 2
audio.position = [ FL FR ]
node.target = "alsa_output.pci-0000_c2_00.6.analog-stereo"
}
}
}
]
'')
];
udev.extraRules = ''
# Lenovo Legion Go Controller
ACTION=="add", ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="${pkgs.kmod}/bin/modprobe xpad" RUN+="/bin/sh -c 'echo 17ef 6182 > /sys/bus/usb/drivers/xpad/new_id'"
# Significantly improved I/O performance
## SSD
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="kyber"
## NVME
ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="kyber"
## MicroSD
ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="bfq"
## HDD
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"
'';
upower.enable = true;
};
}