configuration.nix 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. { config, pkgs, lib, ... }:
  2. let
  3. unstable = import <nixos-unstable> { };
  4. in
  5. {
  6. imports =
  7. [
  8. ./hardware-configuration.nix
  9. ];
  10. boot.loader.systemd-boot.enable = true;
  11. boot.loader.efi.canTouchEfiVariables = true;
  12. boot.kernelParams = ["intel_pstate=enable"];
  13. powerManagement = {
  14. enable = true;
  15. #cpuFreqGovernor = "powersave";
  16. powertop.enable = true;
  17. };
  18. services.thermald.enable = true;
  19. services.power-profiles-daemon.enable = false;
  20. services.tlp = {
  21. enable = true;
  22. settings = {
  23. TLP_ENABLE = 1;
  24. TLP_DEFAULT_MODE = "BAT";
  25. MAX_LOST_WORK_SECS_ON_AC = 15;
  26. MAX_LOST_WORK_SECS_ON_BAT = 60;
  27. CPU_HWP_ON_AC = "balance_performance";
  28. CPU_HWP_ON_BAT = "power";
  29. CPU_MAX_PERF_ON_BAT = 40;
  30. CPU_BOOST_ON_BAT = 0;
  31. SCHED_POWERSAVE_ON_AC = 0;
  32. SCHED_POWERSAVE_ON_BAT = 1;
  33. ENERGY_PERF_POLICY_ON_AC = "balance-performance";
  34. ENERGY_PERF_POLICY_ON_BAT = "power";
  35. DISK_DEVICES = "nvme0n1 sda";
  36. DISK_APM_LEVEL_ON_AC = "254 254";
  37. DISK_APM_LEVEL_ON_BAT = "128 128";
  38. SATA_LINKPWR_ON_AC = "med_power_with_dipm max_performance";
  39. SATA_LINKPWR_ON_BAT = "med_power_with_dipm min_power";
  40. PCIE_ASPM_ON_BAT = "powersave";
  41. WIFI_PWR_ON_AC = "off";
  42. WIFI_PWR_ON_BAT = "on";
  43. WOL_DISABLE = "Y";
  44. SOUND_POWER_SAVE_ON_AC = 0;
  45. SOUND_POWER_SAVE_ON_BAT = 1;
  46. RUNTIME_PM_ON_AC = "on";
  47. RUNTIME_PM_ON_BAT = "auto";
  48. USB_AUTOSUSPEND = 1;
  49. USB_BLACKLIST = "0bda:8153";
  50. RESTORE_DEVICE_STATE_ON_STARTUP = 1;
  51. };
  52. };
  53. hardware.opengl.enable = true;
  54. hardware.opengl.driSupport = true;
  55. networking.hostName = "egalmoth"; # Define your hostname.
  56. networking.networkmanager.enable = true;
  57. time.timeZone = "Europe/London";
  58. networking.useDHCP = false;
  59. networking.interfaces.enp45s0.useDHCP = true;
  60. networking.interfaces.wlp46s0.useDHCP = true;
  61. services.xserver.enable = true;
  62. services.xserver.exportConfiguration = true;
  63. services.xserver.displayManager.gdm.enable = true;
  64. services.xserver.desktopManager.gnome.enable = true;
  65. services.xserver.displayManager.sessionPackages = [ pkgs.sway ];
  66. #services.xserver.displayManager.defaultSession = "none+i3";
  67. services.xserver.displayManager.defaultSession = "sway";
  68. services.xserver.windowManager.i3.enable = true;
  69. services.upower.enable = true;
  70. services.xserver.layout = "gb";
  71. services.printing.enable = true;
  72. services.printing.drivers = [ pkgs.gutenprint pkgs.hplipWithPlugin ];
  73. nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
  74. "hplip"
  75. ];
  76. hardware.sane.enable = true;
  77. services.udev.packages = [
  78. (pkgs.writeTextFile {
  79. name = "epson_udev";
  80. text = ''
  81. ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="084a", MODE="0664", GROUP="lp", ENV{libsane_matched}="yes"
  82. '';
  83. destination = "/etc/udev/rules.d/99-printer.rules";
  84. })
  85. ];
  86. services.xserver.libinput = {
  87. enable = true;
  88. touchpad = {
  89. clickMethod = "clickfinger";
  90. naturalScrolling = true;
  91. #tappingButtonMap = "lrm";
  92. #tappingButtonMap = "lmr";
  93. };
  94. };
  95. services.dbus.enable = true;
  96. users.users.djm =
  97. { isNormalUser = true;
  98. description = "David Morgan";
  99. extraGroups = [ "wheel" "networkmanager" "scanner" "lp" "plocate" "cdrom" ];
  100. shell = pkgs.zsh;
  101. openssh.authorizedKeys.keys = [
  102. "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCurCpxZCHtByB5wXzsjTXwMyDSB4+B8rq5XY6EGss58NwD8jc5cII4i+QUbCOGTiAggSZUSC9YIP24hjpOeNT/IYs5m7Qn1B9MtBAiUSrIYew8eDwnMLlPzN+k2x9zCrJeCHIvGJaFHPXTh1Lf5Jt2fPVGW9lksE/XUVOe6ht4N/b+nqqszXFhc8Ug6le2bC1YeTCVEf8pjlh/I7DkDBl6IB8uEXc3X2vxxbV0Z4vlBrFkkAywcD3j5VlS/QYfBr4BICNmq/sO3fMkbMbtAPwuFxeL4+h6426AARQZiSS0qVEc8OoFRBVx3GEH5fqVAWfB1geyLzei22HbjUcT9+xN davidmo@gendros"
  103. "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK9UDTaVnUOU/JknrNdihlhhGOk53LmHq9I1ASri3aga djm@gaius"
  104. ];
  105. };
  106. security.sudo.extraConfig = ''
  107. djm ALL=(ALL) NOPASSWD: ALL
  108. '';
  109. security.doas = {
  110. enable = true;
  111. extraRules = [ { users = [ "djm" ]; noPass = true; keepEnv = true; } ];
  112. };
  113. services.locate = {
  114. enable = true;
  115. locate = pkgs.plocate;
  116. localuser = null;
  117. };
  118. environment.systemPackages = with pkgs; [
  119. acpi
  120. acpitool
  121. bemenu
  122. #dbus-sway-environment
  123. firefox
  124. foot
  125. ghostscript
  126. git
  127. i3
  128. imagemagick
  129. lm_sensors
  130. playerctl
  131. rofi
  132. st
  133. sway
  134. vim
  135. wayland
  136. wayst
  137. wezterm
  138. wl-clipboard
  139. wget
  140. xclip
  141. xurls
  142. xst
  143. ];
  144. fonts.fonts = with pkgs; [
  145. unstable.iosevka-comfy.comfy
  146. iosevka-bin
  147. jetbrains-mono
  148. meslo-lgs-nf
  149. ];
  150. programs.sway = {
  151. enable = true;
  152. wrapperFeatures.gtk = true;
  153. };
  154. programs.gnupg.agent = {
  155. enable = true;
  156. enableSSHSupport = true;
  157. };
  158. programs.vim.defaultEditor = true;
  159. services.openssh.enable = true;
  160. i18n.defaultLocale = "en_GB.UTF-8";
  161. system.stateVersion = "21.05"; # Did you read the comment?
  162. }