diff --git a/hosts/nb/configuration.nix b/hosts/nb/configuration.nix index 070cf9d..e1b6db5 100644 --- a/hosts/nb/configuration.nix +++ b/hosts/nb/configuration.nix @@ -72,6 +72,14 @@ in { theme = "steeef"; # Set theme plugins = [ "git" ]; # Add plugins }; + interactiveShellInit = '' + # Bind Shift+Return to insert newline (foot terminal sends \e[27;2;13~) + insert-newline() { + LBUFFER="''${LBUFFER}"$'\n' + } + zle -N insert-newline + bindkey '^[[27;2;13~' insert-newline + ''; }; users.defaultUserShell = pkgs.zsh; @@ -93,8 +101,8 @@ in { # Battery optimization - increase dirty writeback time to batch writes "vm.dirty_writeback_centisecs" = 3000; # 30 seconds (default: 500 = 5s) "vm.dirty_expire_centisecs" = 3000; # 30 seconds (default: 3000) - # Enable laptop mode for aggressive disk power management - "vm.laptop_mode" = 5; + # Enable laptop mode for disk power management (2 = balanced, less aggressive than 5) + "vm.laptop_mode" = 2; }; # nixos cross building qemu diff --git a/hosts/nb/hardware-configuration.nix b/hosts/nb/hardware-configuration.nix index a287335..e9fc49d 100644 --- a/hosts/nb/hardware-configuration.nix +++ b/hosts/nb/hardware-configuration.nix @@ -28,7 +28,6 @@ "snd_hda_intel.power_save=1" "transparent_hugepage=madvise" "pcie_aspm=force" - "nvme.noacpi=1" ]; fileSystems."/" = { diff --git a/hosts/nb/modules/suspend-fixes.nix b/hosts/nb/modules/suspend-fixes.nix index 430890d..c6bb147 100644 --- a/hosts/nb/modules/suspend-fixes.nix +++ b/hosts/nb/modules/suspend-fixes.nix @@ -4,29 +4,21 @@ # Add i2c_hid_acpi kernel module for proper input device support boot.kernelModules = [ "i2c_hid_acpi" ]; - # Systemd service to reload i2c_hid_acpi module after resume - # This fixes keyboard and touchpad not working after suspend - systemd.services.reload-i2c-hid-after-resume = { - description = "Reload i2c_hid_acpi module after resume to fix keyboard/touchpad"; - after = [ "suspend.target" "hibernate.target" "hybrid-sleep.target" ]; - wantedBy = [ "suspend.target" "hibernate.target" "hybrid-sleep.target" ]; - serviceConfig = { - Type = "oneshot"; - ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.kmod}/bin/rmmod i2c_hid_acpi; ${pkgs.kmod}/bin/modprobe i2c_hid_acpi'"; - }; - }; + # Commands to run after resume from suspend/hibernate + # This is the NixOS-native way to ensure proper execution timing + powerManagement.resumeCommands = '' + # Reload i2c_hid_acpi module to fix keyboard/touchpad after suspend + ${pkgs.kmod}/bin/rmmod i2c_hid_acpi || true + ${pkgs.kmod}/bin/modprobe i2c_hid_acpi - # Systemd service to remount /nix/persist if it becomes read-only after resume - # This fixes the btrfs read-only issue that can occur with LUKS + btrfs on suspend/resume - systemd.services.remount-persist-after-resume = { - description = "Remount /nix/persist read-write if needed after resume"; - after = [ "suspend.target" "hibernate.target" "hybrid-sleep.target" ]; - wantedBy = [ "suspend.target" "hibernate.target" "hybrid-sleep.target" ]; - serviceConfig = { - Type = "oneshot"; - ExecStart = "${pkgs.util-linux}/bin/mount -o remount,rw /nix/persist"; - # Don't fail if already mounted rw - SuccessExitStatus = [ 0 32 ]; - }; - }; + # Sync filesystem to ensure all pending writes are committed + ${pkgs.util-linux}/bin/sync + + # Remount all btrfs subvolumes read-write if they became read-only + # This fixes the issue where LUKS + btrfs can remount read-only after suspend + ${pkgs.util-linux}/bin/mount -o remount,rw /nix || true + ${pkgs.util-linux}/bin/mount -o remount,rw /nix/store || true + ${pkgs.util-linux}/bin/mount -o remount,rw /nix/persist || true + ${pkgs.util-linux}/bin/mount -o remount,rw /swap || true + ''; }