yep, more dotfiles
1{ self 2, config 3, pkgs 4, ... 5}: 6 7let 8 inherit (self.outputs) nixosModules; 9in 10{ 11 imports = [ 12 # Replaces nixpkgs module with a custom one that support fallback static location 13 nixosModules.geoclue2 14 ]; 15 16 config = { 17 local.fragment = { 18 agenix.enable = true; 19 fonts.enable = true; 20 gaming.enable = true; 21 kanata.enable = true; 22 logiops.enable = true; 23 nix.enable = true; 24 secure-boot.enable = true; 25 security.enable = true; 26 virtualisation.enable = true; 27 wireless.enable = true; 28 }; 29 30 networking.hosts = { 31 # "127.0.0.1" = [ "www.youtube.com" ]; 32 33 "10.45.3.4" = [ "printer.epita" ]; 34 }; 35 36 hardware.graphics.enable = true; 37 38 boot = { 39 kernelParams = [ "quiet" ]; 40 41 # allow perf as user 42 kernel.sysctl."kernel.perf_event_paranoid" = -1; 43 44 kernelPackages = pkgs.linuxKernel.packages.linux_zen; 45 extraModulePackages = with config.boot.kernelPackages; [ perf xone ]; 46 47 loader = { 48 systemd-boot.enable = true; 49 systemd-boot.consoleMode = "auto"; 50 efi.canTouchEfiVariables = true; 51 }; 52 53 # This is needed to build cross platform ISOs in `apps/flash-installer.nix` 54 binfmt.emulatedSystems = [ "aarch64-linux" ]; 55 }; 56 57 # Once in a while, the session stop job hangs and lasts the full default 58 # time (1min30). I just want to shutdown my computer please. 59 systemd.extraConfig = '' 60 DefaultTimeoutStopSec = 10s 61 ''; 62 63 programs.dconf.enable = true; 64 65 time.timeZone = "Europe/Paris"; 66 67 services.ntpd-rs.enable = true; 68 69 i18n = 70 let 71 english-locale = "en_US.UTF-8"; 72 french-locale = "fr_FR.UTF-8"; 73 in 74 { 75 defaultLocale = english-locale; 76 extraLocaleSettings = { 77 LC_ADDRESS = french-locale; 78 LC_IDENTIFICATION = french-locale; 79 LC_MEASUREMENT = french-locale; 80 LC_MONETARY = french-locale; 81 LC_NAME = french-locale; 82 LC_NUMERIC = french-locale; 83 LC_PAPER = french-locale; 84 LC_TELEPHONE = french-locale; 85 LC_TIME = french-locale; 86 }; 87 }; 88 89 programs.command-not-found.enable = false; 90 91 # This is needed for services like `darkman` and `gammastep` 92 services.geoclue2 = { 93 enable = true; 94 95 # Fallback using custom geoclue2 module waitng for an alternative to MLS 96 # (Mozilla Location Services). See related module in repo. 97 # INFO: lat vvvv vvv long → Paris rough location 98 staticFile = "48.8\n2.3\n0\n0\n"; 99 }; 100 101 programs.wireshark = { 102 enable = true; 103 package = pkgs.wireshark; 104 }; 105 users.users.${config.local.user.username}.extraGroups = [ "wireshark" "plugdev" ]; 106 107 # This option is already filled with aliases that snowball and have 108 # priority on fish internal `ls` aliases 109 environment.shellAliases = { ls = null; ll = null; l = null; }; 110 programs.fish.enable = true; 111 112 services.udev.packages = with pkgs; [ 113 numworks-udev-rules 114 lpkgs.probe-rs-udev-rules 115 ]; 116 117 users.groups.plugdev.name = "plugdev"; 118 119 services.devmon.enable = true; 120 121 services.gvfs.enable = true; 122 123 services.pipewire = { 124 enable = true; 125 alsa.enable = true; 126 alsa.support32Bit = true; 127 pulse.enable = true; 128 jack.enable = true; 129 }; 130 131 services.upower.enable = true; 132 133 services.tailscale.enable = true; 134 135 services.flatpak.enable = true; 136 137 services.thermald.enable = true; 138 139 services.auto-cpufreq.enable = true; 140 services.auto-cpufreq.settings = { 141 battery = { 142 governor = "powersave"; 143 turbo = "never"; 144 }; 145 charger = { 146 governor = "powersave"; 147 turbo = "never"; 148 }; 149 }; 150 151 xdg.portal = { 152 enable = true; 153 wlr.enable = true; 154 155 extraPortals = with pkgs; [ xdg-desktop-portal-gtk ]; 156 157 config.common.default = "*"; 158 }; 159 160 programs.obs-studio = { 161 enable = true; 162 enableVirtualCamera = true; 163 164 plugins = with pkgs.obs-studio-plugins; [ 165 wlrobs 166 obs-backgroundremoval 167 obs-pipewire-audio-capture 168 ]; 169 }; 170 }; 171}