all repos — dotfiles @ df4f1038a6a0e9e406776296665d816e8285acac

my *nix dotfiles

hosts/wyndle/configuration.nix (view raw)

  1{ self, config, pkgs, lib, ... }:
  2
  3{
  4  imports =
  5    [
  6      ./hardware-configuration.nix
  7    ];
  8
  9  boot = {
 10    loader.systemd-boot.enable = true;
 11    loader.systemd-boot.consoleMode = "max";
 12    loader.efi.canTouchEfiVariables = true;
 13    kernel.sysctl."net.ipv4.ip_forward" = 1;
 14    resumeDevice = "/dev/nvme0n1p2";
 15    kernelPackages = pkgs.linuxPackages;
 16    kernelModules = [ "i2c-dev" ];
 17  };
 18
 19  networking = {
 20    nameservers = [ "8.8.8.8" "8.8.4.4" ];
 21    networkmanager.enable = true;
 22    hostName = "wyndle";
 23    useDHCP = false;
 24    interfaces.wlp6s0.useDHCP = true;
 25    firewall.checkReversePath = "loose";
 26  };
 27
 28  i18n.defaultLocale = "en_US.UTF-8";
 29  i18n.inputMethod = {
 30    enabled = "ibus";
 31  };
 32  time.timeZone = "Europe/Helsinki";
 33
 34  nixpkgs.config = {
 35    allowUnfree = true;
 36    allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
 37      "steam"
 38      "steam-original"
 39      "steam-runtime"
 40    ];
 41    st = {
 42      conf = builtins.readFile ../../programs/st/config.h;
 43      extraLibs = with pkgs; [ harfbuzz ];
 44      patches = [
 45        ../../patches/st/xres.diff
 46        ../../patches/st/bright.diff
 47        ../../patches/st/ligatures.diff
 48      ];
 49    };
 50    chromium = {
 51      commandLineArgs = "--ozone-platform=wayland";
 52    };
 53    firefox.enablePlasmaBrowserIntegration = true;
 54  };
 55
 56  nixpkgs.overlays = with self.overlays; [
 57    prompt
 58  ];
 59
 60  environment = {
 61    etc = {
 62      "supergfxd.conf" = {
 63        mode = "0644";
 64        source = (pkgs.formats.json { }).generate "supergfxd.conf" {
 65          mode = "hybrid";
 66          vfio_enable = false;
 67          vfio_save = false;
 68          always_reboot = false;
 69          no_logind = false;
 70          logout_timeout_s = 180;
 71        };
 72      };
 73    };
 74    sessionVariables = rec {
 75      NIXOS_OZONE_WL = "1";
 76    };
 77    variables = {
 78      MOZ_USE_XINPUT2 = "1";
 79      GDK_SCALE = "2";
 80      GDK_DPI_SCALE = "1";
 81    };
 82    systemPackages = with pkgs; [
 83      man-pages
 84      git
 85      man-pages-posix
 86      (lib.hiPrio pkgs.bashInteractive_5)
 87    ];
 88    gnome.excludePackages = (with pkgs; [
 89      gnome-photos
 90      gnome-tour
 91    ]) ++ (with pkgs.gnome; [
 92      cheese
 93      epiphany
 94      geary
 95      totem
 96    ]);
 97  };
 98
 99  documentation = {
100    dev.enable = true;
101    man.generateCaches = true;
102  };
103
104  users.motd = with config; ''
105    Host       ${networking.hostName}
106    OS         NixOS ${system.nixos.release} (${system.nixos.codeName})
107    Version    ${system.nixos.version}
108    Kernel     ${boot.kernelPackages.kernel.version}
109  '';
110
111  console = {
112    font = "${pkgs.terminus_font}/share/consolefonts/ter-u28n.psf.gz";
113    keyMap = "us";
114  };
115
116  sound.enable = true;
117  hardware = {
118    opengl.driSupport = true;
119    bluetooth = {
120      enable = true;
121      powerOnBoot = true;
122      disabledPlugins = [ "sap" ];
123    };
124    nvidia.prime = {
125      offload.enable = true;
126      amdgpuBusId = "PCI:8:0:0";
127      nvidiaBusId = "PCI:1:0:0";
128    };
129    logitech.wireless = {
130      enable = true;
131      enableGraphical = true;
132    };
133  };
134
135  services = {
136    pipewire.wireplumber.enable = true;
137    asusd = {
138      enable = true;
139      enableUserService = true;
140    };
141    supergfxd = {
142      enable = true;
143    };
144    pipewire = {
145      enable = true;
146      alsa.enable = true;
147      alsa.support32Bit = true;
148      pulse.enable = true;
149    };
150    xserver = {
151      enable = true;
152      xkb.layout = "us";
153      desktopManager.gnome.enable = true;
154      displayManager.gdm.enable = true;
155      dpi = 192;
156      videoDrivers = [ "nvidia" ];
157      screenSection = ''
158        Option         "metamodes" "nvidia-auto-select +0+0 {ForceFullCompositionPipeline=On}"
159        Option         "AllowIndirectGLXProtocol" "off"
160        Option         "TripleBuffer" "on"
161      '';
162      libinput = {
163        enable = true;
164        mouse = {
165          scrollButton = 8;
166          scrollMethod = "button";
167        };
168      };
169    };
170    tailscale.enable = true;
171    auto-cpufreq.enable = true;
172    # 1. chmod for rootless backligh1t
173    # 2. lotus58 bootloader mode for rootless qmk flashing
174    udev = {
175      extraRules = ''
176        ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="amdgpu_bl1", MODE="0666", RUN+="${pkgs.coreutils}/bin/chmod a+w /sys/class/backlight/%k/brightness"
177        ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
178        KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660"
179      '';
180      extraHwdb = ''
181        evdev:input:b0003v0B05p19B6*
182          KEYBOARD_KEY_ff31007c=f20 # x11 mic-mute
183      '';
184      path = [
185        pkgs.coreutils
186      ];
187    };
188    logind.extraConfig = ''
189      HandlePowerKey=hibernate
190    '';
191
192    keyd = {
193      enable = true;
194      keyboards.default.settings = {
195        "meta" = {
196          h = "left";
197          j = "down";
198          k = "up";
199          l = "right";
200        };
201      };
202    };
203    pcscd.enable = true;
204  };
205
206  virtualisation.docker = {
207    enable = true;
208    logDriver = "json-file";
209  };
210
211  security = {
212    doas.enable = true;
213    sudo.enable = true;
214    doas.extraConfig = ''
215      permit nopass :wheel
216    '';
217    doas.extraRules = [{
218      users = [ "icy" ];
219    }];
220  };
221
222  powerManagement = {
223    enable = true;
224    powertop.enable = true;
225  };
226
227  users.users.icy = {
228    isNormalUser = true;
229    extraGroups = [ "wheel" "docker" "audio" "video" "dialout" "i2c" ];
230  };
231
232  programs = {
233    steam.enable = true;
234    gamemode.enable = true;
235  };
236
237  nix = {
238    package = pkgs.nixVersions.stable;
239    extraOptions = ''
240      experimental-features = nix-command flakes ca-derivations
241      warn-dirty = false
242      keep-outputs = false
243    '';
244    settings = {
245      trusted-users = [
246        "root"
247        "icy"
248      ];
249    };
250  };
251
252  # https://github.com/NixOS/nixpkgs/issues/180175
253  systemd.services.systemd-udevd.restartIfChanged = false;
254  systemd.services.NetworkManager-wait-online.enable = lib.mkForce
255    false;
256
257
258  # This value determines the NixOS release from which the default
259  # settings for stateful data, like file locations and database versions
260  # on your system were taken. It‘s perfectly fine and recommended to leave
261  # this value at the release version of the first install of this system.
262  # Before changing this value read the documentation for this option
263  # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
264  system.stateVersion = "21.11"; # Did you read the comment?
265
266}
267