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