me like nix
1{ pkgs, ... }:
2
3let
4 berkeley-mono-typeface = pkgs.callPackage ../../berkely-mono/berkeley.nix { };
5in
6{
7
8 nix.settings.experimental-features = [
9 "nix-command"
10 "flakes"
11 ];
12 nix.settings.download-buffer-size = 268435456;
13
14 hardware.bluetooth.enable = true;
15 hardware.bluetooth.powerOnBoot = true;
16 services.blueman.enable = true;
17
18 # Bootloader.
19 boot.loader.systemd-boot.enable = true;
20 boot.loader.efi.canTouchEfiVariables = true;
21
22 services.fwupd.enable = true;
23 # Use latest kernel.
24 boot.kernelPackages = pkgs.linuxPackages_latest;
25
26 # Fix USB disconnection issues with Dell U4025QW Thunderbolt dock
27 # Disables autosuspend and LPM for Dell hub (vendor ID: 1d5c, product ID: 5801)
28 # boot.kernelParams = [ "usbcore.quirks=1d5c:5801:gk" ];
29 # If USB disconnects persist, try disabling UCSI ACPI instead:
30 # boot.kernelParams = [ "module_blacklist=ucsi_acpi" ];
31
32 # Enable networking
33 networking.networkmanager.enable = true;
34
35 # Set your time zone.
36 # time.timeZone = "America/New_York";
37 time.timeZone = "America/Toronto";
38
39 # Select internationalisation properties.
40 i18n.defaultLocale = "en_US.UTF-8";
41
42 i18n.extraLocaleSettings = {
43 LC_ADDRESS = "en_US.UTF-8";
44 LC_IDENTIFICATION = "en_US.UTF-8";
45 LC_MEASUREMENT = "en_US.UTF-8";
46 LC_MONETARY = "en_US.UTF-8";
47 LC_NAME = "en_US.UTF-8";
48 LC_NUMERIC = "en_US.UTF-8";
49 LC_PAPER = "en_US.UTF-8";
50 LC_TELEPHONE = "en_US.UTF-8";
51 LC_TIME = "en_US.UTF-8";
52 };
53
54 # Font configuration
55 fonts = {
56 fontDir.enable = true;
57 fontconfig = {
58 enable = true;
59 defaultFonts = {
60 monospace = [
61 "BerkeleyMono Nerd Font"
62 "BerkeleyMono"
63 ];
64 };
65 };
66 packages = with pkgs; [
67 berkeley-mono-typeface
68 ];
69 };
70
71 programs.niri = {
72 enable = true;
73 };
74
75 catppuccin = {
76 enable = true;
77 flavor = "frappe";
78 };
79
80 programs.regreet.enable = true;
81
82 # Enable CUPS to print documents.
83 services.printing.enable = true;
84
85 security.polkit.enable = true;
86 security.rtkit.enable = true;
87 services.pipewire = {
88 enable = true;
89 alsa.enable = true;
90 alsa.support32Bit = true;
91 pulse.enable = true;
92 # If you want to use JACK applications, uncomment this
93 #jack.enable = true;
94
95 # use the example session manager (no others are packaged yet so this is enabled by default,
96 # no need to redefine it in your config for now)
97 #media-session.enable = true;
98 };
99
100 services.gnome.gnome-keyring.enable = true;
101 security.pam.services.greetd.enableGnomeKeyring = true;
102
103 services.udisks2.enable = true;
104 services.tailscale.enable = true;
105 services.pcscd.enable = true; # Smart card daemon for Yubikey
106
107 security.pam.u2f = {
108 enable = true;
109 control = "sufficient";
110 cue = true;
111 settings = {
112 origin = "pam://nixos";
113 appid = "pam://nixos";
114 };
115 };
116 security.pam.services.sudo.u2fAuth = true;
117
118 programs.yubikey-touch-detector.enable = true;
119
120 # ZSA Keyboard udev rules for Oryx web flashing and live training
121 services.udev.extraRules = ''
122 # Rules for Oryx web flashing and live training
123 KERNEL=="hidraw*", ATTRS{idVendor}=="16c0", MODE="0664", GROUP="plugdev"
124 KERNEL=="hidraw*", ATTRS{idVendor}=="3297", MODE="0664", GROUP="plugdev"
125
126 # Legacy rules for live training over webusb (Not needed for firmware v21+)
127 # Rule for all ZSA keyboards
128 SUBSYSTEM=="usb", ATTR{idVendor}=="3297", GROUP="plugdev"
129 # Rule for the Moonlander
130 SUBSYSTEM=="usb", ATTR{idVendor}=="3297", ATTR{idProduct}=="1969", GROUP="plugdev"
131 # Rule for the Ergodox EZ
132 SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="1307", GROUP="plugdev"
133 # Rule for the Planck EZ
134 SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="6060", GROUP="plugdev"
135
136 # Wally Flashing rules for the Ergodox EZ
137 ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", ENV{ID_MM_DEVICE_IGNORE}="1"
138 ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789A]?", ENV{MTP_NO_PROBE}="1"
139 SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789ABCD]?", MODE:="0666"
140 KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", MODE:="0666"
141
142 # Keymapp / Wally Flashing rules for the Moonlander and Planck EZ
143 SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666", SYMLINK+="stm32_dfu"
144 # Keymapp Flashing rules for the Voyager
145 SUBSYSTEMS=="usb", ATTRS{idVendor}=="3297", MODE:="0666", SYMLINK+="ignition_dfu"
146 # USB serial device access via Chrome/Chromium
147 KERNEL=="ttyUSB[0-9]*", MODE:="0666", GROUP="dialout"
148 KERNEL=="ttyACM[0-9]*", MODE:="0666", GROUP="dialout"
149 '';
150
151 # Define a user account. Don't forget to set a password with ‘passwd’.
152 users.groups.storage = { };
153 users.groups.plugdev = { };
154 users.users.sean = {
155 isNormalUser = true;
156 description = "Sean Aye";
157 extraGroups = [
158 "docker"
159 "networkmanager"
160 "wheel"
161 "video"
162 "disk"
163 "storage"
164 "input"
165 "plugdev"
166 "dialout"
167 ];
168 shell = pkgs.fish;
169 };
170
171 programs.steam = {
172 enable = true;
173 remotePlay.openFirewall = true;
174 gamescopeSession = {
175 enable = true;
176 args = [
177 "-r 120"
178 "-R 120"
179 ];
180 env = {
181 STEAM_DESKTOP_SESSION = "niri";
182 };
183 };
184 extraCompatPackages = with pkgs; [
185 proton-ge-bin
186 ];
187 };
188
189 programs.gamemode.enable = true;
190
191 programs.gamescope = {
192 enable = true;
193 };
194
195 programs.fish.enable = true;
196 programs._1password.enable = true;
197 programs._1password-gui = {
198 enable = true;
199 polkitPolicyOwners = [ "sean" ];
200 };
201
202 virtualisation.docker.enable = true;
203
204 # Allow unfree packages
205 nixpkgs.config.allowUnfree = true;
206
207 # List packages installed in system profile. To search, run:
208 # $ nix search wget
209 environment.systemPackages = with pkgs; [
210 wl-clipboard
211 ];
212 environment.variables = {
213 EDITOR = "hx";
214 VISUAL = "hx";
215 SUDO_EDITOR = "hx";
216 };
217}