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 # Enable networking
27 networking.networkmanager.enable = true;
28
29 # Set your time zone.
30 # time.timeZone = "America/New_York";
31 time.timeZone = "America/Toronto";
32
33 # Select internationalisation properties.
34 i18n.defaultLocale = "en_US.UTF-8";
35
36 i18n.extraLocaleSettings = {
37 LC_ADDRESS = "en_US.UTF-8";
38 LC_IDENTIFICATION = "en_US.UTF-8";
39 LC_MEASUREMENT = "en_US.UTF-8";
40 LC_MONETARY = "en_US.UTF-8";
41 LC_NAME = "en_US.UTF-8";
42 LC_NUMERIC = "en_US.UTF-8";
43 LC_PAPER = "en_US.UTF-8";
44 LC_TELEPHONE = "en_US.UTF-8";
45 LC_TIME = "en_US.UTF-8";
46 };
47
48 # Font configuration
49 fonts = {
50 fontDir.enable = true;
51 fontconfig = {
52 enable = true;
53 defaultFonts = {
54 monospace = [
55 "BerkeleyMono Nerd Font"
56 "BerkeleyMono"
57 ];
58 };
59 };
60 packages = with pkgs; [
61 berkeley-mono-typeface
62 ];
63 };
64
65 programs.niri = {
66 enable = true;
67 };
68
69 services.greetd = {
70 enable = true;
71 settings = {
72 default_session = {
73 command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd niri-session";
74 user = "greeter";
75 };
76 };
77 };
78
79 # Enable CUPS to print documents.
80 services.printing.enable = true;
81
82 security.polkit.enable = true;
83 security.rtkit.enable = true;
84 services.pipewire = {
85 enable = true;
86 alsa.enable = true;
87 alsa.support32Bit = true;
88 pulse.enable = true;
89 # If you want to use JACK applications, uncomment this
90 #jack.enable = true;
91
92 # use the example session manager (no others are packaged yet so this is enabled by default,
93 # no need to redefine it in your config for now)
94 #media-session.enable = true;
95 };
96
97 services.udisks2.enable = true;
98 services.tailscale.enable = true;
99
100 # ZSA Keyboard udev rules for Oryx web flashing and live training
101 services.udev.extraRules = ''
102 # Rules for Oryx web flashing and live training
103 KERNEL=="hidraw*", ATTRS{idVendor}=="16c0", MODE="0664", GROUP="plugdev"
104 KERNEL=="hidraw*", ATTRS{idVendor}=="3297", MODE="0664", GROUP="plugdev"
105
106 # Legacy rules for live training over webusb (Not needed for firmware v21+)
107 # Rule for all ZSA keyboards
108 SUBSYSTEM=="usb", ATTR{idVendor}=="3297", GROUP="plugdev"
109 # Rule for the Moonlander
110 SUBSYSTEM=="usb", ATTR{idVendor}=="3297", ATTR{idProduct}=="1969", GROUP="plugdev"
111 # Rule for the Ergodox EZ
112 SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="1307", GROUP="plugdev"
113 # Rule for the Planck EZ
114 SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="6060", GROUP="plugdev"
115
116 # Wally Flashing rules for the Ergodox EZ
117 ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", ENV{ID_MM_DEVICE_IGNORE}="1"
118 ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789A]?", ENV{MTP_NO_PROBE}="1"
119 SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789ABCD]?", MODE:="0666"
120 KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", MODE:="0666"
121
122 # Keymapp / Wally Flashing rules for the Moonlander and Planck EZ
123 SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666", SYMLINK+="stm32_dfu"
124 # Keymapp Flashing rules for the Voyager
125 SUBSYSTEMS=="usb", ATTRS{idVendor}=="3297", MODE:="0666", SYMLINK+="ignition_dfu"
126 # USB serial device access via Chrome/Chromium
127 KERNEL=="ttyUSB[0-9]*", MODE:="0666", GROUP="dialout"
128 KERNEL=="ttyACM[0-9]*", MODE:="0666", GROUP="dialout"
129 '';
130
131 # Define a user account. Don't forget to set a password with ‘passwd’.
132 users.groups.storage = { };
133 users.groups.plugdev = { };
134 users.users.sean = {
135 isNormalUser = true;
136 description = "Sean Aye";
137 extraGroups = [
138 "docker"
139 "networkmanager"
140 "wheel"
141 "video"
142 "disk"
143 "storage"
144 "input"
145 "plugdev"
146 "dialout"
147 ];
148 shell = pkgs.fish;
149 };
150
151 programs.fish.enable = true;
152 programs._1password.enable = true;
153 programs._1password-gui = {
154 enable = true;
155 polkitPolicyOwners = [ "sean" ];
156 };
157
158 virtualisation.docker.enable = true;
159
160 # Allow unfree packages
161 nixpkgs.config.allowUnfree = true;
162
163 # List packages installed in system profile. To search, run:
164 # $ nix search wget
165 environment.systemPackages = with pkgs; [
166 wl-clipboard
167 ];
168 environment.variables = {
169 EDITOR = "hx";
170 VISUAL = "hx";
171 SUDO_EDITOR = "hx";
172 };
173}