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}