1 { config, lib, pkgs, hostName, ... }:
3 hardware.cpu.intel.updateMicrocode = true;
4 hardware.opengl.extraPackages = [
5 pkgs.intel-media-driver # LIBVA_DRIVER_NAME=iHD
6 pkgs.vaapiIntel # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
10 powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
26 hardware.acpilight.enable = true;
31 event = "video/brightnessdown.*";
32 action = "${pkgs.acpilight}/bin/xbacklight -dec 5";
35 event = "video/brightnessup.*";
36 action = "${pkgs.acpilight}/bin/xbacklight -inc 5";
43 ${pkgs.linuxPackages.cpupower}/bin/cpupower frequency-set -g powersave;;
44 00000001) # plugged in
45 ${pkgs.linuxPackages.cpupower}/bin/cpupower frequency-set -g ondemand;;
50 # https://bugzilla.kernel.org/show_bug.cgi?id=110941
51 boot.kernelParams = [ "intel_pstate=no_hwp" ];
52 boot.kernelModules = [
55 boot.cleanTmpDir = true;
56 boot.tmpOnTmpfs = true;
57 boot.extraModulePackages = [
58 #config.boot.kernelPackages.exfat-nofuse
63 device = "/dev/disk/by-id/ata-Samsung_SSD_850_PRO_128GB_S1SMNSAFC36436X";
64 configurationLimit = 3;
69 canTouchEfiVariables = false;
70 efiSysMountPoint = "/boot/efi";
73 #enableCryptodisk = true;
77 { device = "/dev/disk/by-partlabel/${hostName}_ssd_boot";
80 fileSystems."/boot/efi" =
81 { device = "/dev/disk/by-partlabel/${hostName}_ssd_efi";
85 { device = "/dev/disk/by-partlabel/${hostName}_ssd_swap";
88 cipher = "aes-xts-plain64";
89 source = "/dev/urandom";
95 algorithm = lib.mkDefault "zstd";
96 # There is little point creating a zram of greater
97 # than twice the size of memory
98 # since we expect a 2:1 compression ratio.
99 # Note that zram uses about 0.1% of the size of the disk
100 # when not in use so a huge zram is wasteful.
101 memoryPercent = lib.mkDefault 150;
102 # Linux supports multithreaded compression for 1 device since 3.15.
103 # See https://lkml.org/lkml/2014/2/28/404 for details.
104 swapDevices = lib.mkDefault 1;
106 boot.kernel.sysctl = {
107 # Increase cache pressure, which increases the tendency of the kernel to
108 # reclaim memory used for caching of directory and inode objects. You will use
109 # less memory over a longer period of time. The performance hit is negated by
110 # the downside of swapping sooner.
111 "vm.vfs_cache_pressure" = lib.mkDefault 500;
113 # Increasing how aggressively the kernel will swap memory pages since we are
115 "vm.swappiness" = lib.mkDefault 100;
117 # Background processes will start writing right away when it hits the 1% limit
118 "vm.dirty_background_ratio" = lib.mkDefault 1;
120 # The system won’t force synchronous I/O until it gets to 50% dirty_ratio.
121 "vm.dirty_ratio" = lib.mkDefault 50;
124 # The 32-bit host id of the host, formatted as 8 hexadecimal characters.
125 # You should try to make this id unique among your hosts.
126 # Manually generated with : head -c4 /dev/urandom | od -A none -t x4 | cut -d ' ' -f 2
127 networking.hostId = "ce53d0c3";
129 # none is the recommended elevator with ZFS (which has its own I/O scheduler)
130 # and/or for SSD, whereas HDD could use mq-deadline.
131 services.udev.extraRules = ''
132 # set none scheduler for non-rotating disks
133 ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
136 boot.supportedFilesystems = [ "ntfs" "vfat" "zfs" ];
137 boot.initrd.supportedFilesystems = [ "zfs" ];
138 boot.initrd.availableKernelModules = [
147 boot.zfs.forceImportAll = false;
148 boot.zfs.forceImportRoot = false;
149 boot.zfs.enableUnstable = false;
150 boot.zfs.requestEncryptionCredentials = [ hostName ];
151 services.zfs.autoScrub.enable = true;
154 { device = "${hostName}/root";
158 { device = "${hostName}/nix";
162 { device = "${hostName}/var";