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