authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2025-05-06 17:20:37-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2025-05-06 23:31:44-07:00
log8bd9e070d076cb96c0c404b4ec3371f2696f7089
treec0d47a6364bda49bbb8c95ded34a310935012c37
parentc0cfb69f27c9caf3e3dd21e3a0d530fa27898f95

fix natalie config so it builds successfully


21 files changed, 210 insertions(+), 152 deletions(-)

flake.nix+13-22
...@@ -2,7 +2,6 @@...@@ -2,7 +2,6 @@
2 description = "New Modular flake!";2 description = "New Modular flake!";
3 inputs = {3 inputs = {
4 nixpkgs.url = "nixpkgs/nixos-unstable";4 nixpkgs.url = "nixpkgs/nixos-unstable";
5 # nixpkgs.url = "github:NixOS/nixpkgs/master";
6 nixpkgs-stable.url = "nixpkgs/nixos-23.11";5 nixpkgs-stable.url = "nixpkgs/nixos-23.11";
76
8 home-manager.url = "github:nix-community/home-manager/master";7 home-manager.url = "github:nix-community/home-manager/master";
...@@ -77,35 +76,19 @@...@@ -77,35 +76,19 @@
77 )76 )
78 ];77 ];
7978
80 # ----- USER SETTINGS ----- #
81 users.nmarks = rec {
82 #enable if you want to use a tiling wm on macos
83 darwinTiling = true;
84
85 username = "nmarks"; # username
86 name = "Natalie"; # name/identifier
87 email = "nmarks413@gmail.com"; # email (used for certain configurations)
88 dotfilesDir = "~/.dotfiles"; # absolute path of the local repo
89 theme = "catppuccin-mocha"; #name of theme that stylix will use
90 browser = "firefox"; # Default browser; must select one from ./user/app/browser/
91 term = "ghostty"; # Default terminal command;
92 font = "iosevka"; # Selected font
93 editor = "neovim"; # Default editor;
94 spawnEditor = "exec" + term + " -e " + editor;
95 timeZone = "America/Los_Angeles";
96 sexuality = "bisexual";
97 };
98 mkSystem = import ./lib/mkSystem.nix {79 mkSystem = import ./lib/mkSystem.nix {
99 inherit overlays nixpkgs inputs;80 inherit overlays nixpkgs inputs;
100 };81 };
101 in {82 in rec {
83 # "nix run .#darwin-rebuild"
102 packages.aarch64-darwin.darwin-rebuild = darwin.packages.aarch64-darwin.darwin-rebuild;84 packages.aarch64-darwin.darwin-rebuild = darwin.packages.aarch64-darwin.darwin-rebuild;
85 # "nix fmt ."
103 formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;86 formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
104 formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.alejandra;87 formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.alejandra;
10588
106 # natalie's desktop computer89 # natalie's desktop computer
107 nixosConfigurations.nixos = mkSystem "nixos" {90 nixosConfigurations.nixos = mkSystem "nixos" {
108 user = "nmarks";91 user = "natalie";
109 host = "desktop";92 host = "desktop";
110 system = "x86_64-linux";93 system = "x86_64-linux";
111 extraModules = [94 extraModules = [
...@@ -114,7 +97,7 @@...@@ -114,7 +97,7 @@
114 };97 };
115 # natalie's laptop98 # natalie's laptop
116 darwinConfigurations."Natalies-MacBook-Air" = mkSystem "Natalies-MacBook-Air" {99 darwinConfigurations."Natalies-MacBook-Air" = mkSystem "Natalies-MacBook-Air" {
117 user = "nmarks";100 user = "natalie";
118 host = "laptop";101 host = "laptop";
119 system = "aarch64-darwin";102 system = "aarch64-darwin";
120 };103 };
...@@ -131,5 +114,13 @@...@@ -131,5 +114,13 @@
131 host = "paperback";114 host = "paperback";
132 system = "aarch64-darwin";115 system = "aarch64-darwin";
133 };116 };
117
118 # generate checks for "nix flake check --all-systems --no-build"
119 checks.aarch64-darwin = builtins.listToAttrs (builtins.map (name: let
120 d = darwinConfigurations.${name}.system;
121 in {
122 name = "darwinConfiguration-" + d.name;
123 value = d;
124 }) (builtins.attrNames darwinConfigurations));
134 };125 };
135}126}
lib/mkSystem.nix+17-16
...@@ -44,24 +44,25 @@...@@ -44,24 +44,25 @@
44 currentSystem = system;44 currentSystem = system;
45 # Details about the host machine45 # Details about the host machine
46 host = {46 host = {
47 inherit darwin;47 inherit darwin name;
48 };48 };
49 user = ({49 user = ({
50 # This acts as formal documentation for what is allowed in user.nix50 # This acts as formal documentation for what is allowed in user.nix
51 username, # unix username51 username, # unix username
52 name, # your display name52 name, # your display name
53 email, # for identity in programs such as git53 email, # for identity in programs such as git
54 dotfilesDir, # location to `../.`54 dotfilesDir, # location to `../.`
55 timeZone ? "America/Los_Angeles",55 timeZone ? "America/Los_Angeles",
5656 # Stylix/Theming
57 # Stylix/Theming57 theme ? null, # theme name for stylix
58 theme ? null, # theme name for stylix58 sexuality ? null, # pride flag for hyfetch
59 sexuality ? null, # pride flag for hyfetch59 font ? null, # font to use
6060 term, # preferred $TERM
61 term, # preferred $TERM61 editor, # preferred $EDITOR
62 editor, # preferred $EDITOR62 browser ? null, # preferred $BROWSER
63 browser ? null, # preferred $BROWSER63 } @ user:
64 }@user: user) userConfig;64 user)
65 userConfig;
65 };66 };
66 systemSettings = rec {67 systemSettings = rec {
67 inherit darwin;68 inherit darwin;
modules/home-manager.nix+2-1
...@@ -69,7 +69,8 @@ in {...@@ -69,7 +69,8 @@ in {
69 }69 }
70 ];70 ];
71 shellAliases =71 shellAliases =
72 { } // lib.optionalAttrs (!host.darwin) {72 {}
73 // lib.optionalAttrs (!host.darwin) {
73 reboot-windows = "sudo efibootmgr --bootnext 0000; sudo reboot -h now";74 reboot-windows = "sudo efibootmgr --bootnext 0000; sudo reboot -h now";
74 };75 };
75 shellInit = ''76 shellInit = ''
modules/macos/default.nix+7
...@@ -8,6 +8,13 @@...@@ -8,6 +8,13 @@
8 ./mac-app-store.nix8 ./mac-app-store.nix
9 ./system.nix9 ./system.nix
10 ./icons.nix10 ./icons.nix
11 ./tiling
11 # sort-lines: end12 # sort-lines: end
12 ];13 ];
14 # make 'shared.linux' not an error to define.
15 options.shared.linux = lib.mkOption {
16 type = lib.types.anything;
17 default = {};
18 description = "no-op on darwin";
19 };
13}20}
modules/macos/system.nix+5-3
...@@ -3,7 +3,9 @@...@@ -3,7 +3,9 @@
3 pkgs,3 pkgs,
4 lib,4 lib,
5 ...5 ...
6}: {6}: let
7 tiling = config.shared.darwin.tiling.enable;
8in {
7 # Use touchid or watch to activate sudo9 # Use touchid or watch to activate sudo
8 security.pam.services.sudo_local = {10 security.pam.services.sudo_local = {
9 enable = true;11 enable = true;
...@@ -51,8 +53,8 @@...@@ -51,8 +53,8 @@
51 NSDocumentSaveNewDocumentsToCloud = false;53 NSDocumentSaveNewDocumentsToCloud = false;
52 AppleICUForce24HourTime = true;54 AppleICUForce24HourTime = true;
5355
54 #Autohide menu bar56 # Autohide menu bar for tiling window manager
55 #_HIHideMenuBar = config.shared.darwin.tiling;57 _HIHideMenuBar = tiling;
56 };58 };
57 # minimal dock59 # minimal dock
58 dock = {60 dock = {
modules/macos/tiling/aerospace.nix+2-2
...@@ -1,6 +1,6 @@...@@ -1,6 +1,6 @@
1{pkgs, ...}: {1{config,pkgs, ...}: {
2 services.aerospace = {2 services.aerospace = {
3 enable = true;3 enable = config.shared.darwin.tiling.enable;
4 settings = {4 settings = {
5 # Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization5 # Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
6 enable-normalization-flatten-containers = true;6 enable-normalization-flatten-containers = true;
modules/macos/tiling/default.nix+15-1
...@@ -1,2 +1,16 @@...@@ -1,2 +1,16 @@
1{pkgs, ...}: {1{ lib, ... }: let
2 inherit (lib) types;
3in {
4 imports = [
5 ./sketchybar.nix
6 ./aerospace.nix
7 ];
8 options = {
9 shared.darwin.tiling.enable = lib.mkOption {
10 type = types.bool;
11 default = false;
12 example = true;
13 description = "Enable tiling window management.";
14 };
15 };
2}16}
modules/macos/tiling/sketchybar.nix+2-2
...@@ -1,6 +1,6 @@...@@ -1,6 +1,6 @@
1{pkgs, ...}: {1{config,pkgs, ...}: {
2 services.sketchybar = {2 services.sketchybar = {
3 enable = true;3 enable = config.shared.darwin.tiling.enable;
4 config = ''4 config = ''
5 # This is a demo config to showcase some of the most important commands.5 # This is a demo config to showcase some of the most important commands.
6 # It is meant to be changed and configured, as it is intentionally kept sparse.6 # It is meant to be changed and configured, as it is intentionally kept sparse.
modules/nixos/default.nix+7-1
...@@ -1,8 +1,14 @@...@@ -1,8 +1,14 @@
1{pkgs, ...}: {1{ lib, pkgs, ... }: {
2 imports = [2 imports = [
3 ./boot.nix3 ./boot.nix
4 ./ld.nix4 ./ld.nix
5 ./nvidia.nix5 ./nvidia.nix
6 ./services.nix6 ./services.nix
7 ];7 ];
8 # make 'shared.darwin' not an error to define.
9 options.shared.darwin = lib.mkOption {
10 type = lib.types.anything;
11 default = {};
12 description = "no-op on linux";
13 };
8}14}
modules/shared/user-system-settings.nix+14-7
...@@ -1,14 +1,21 @@...@@ -1,14 +1,21 @@
1# applies user settings for the system1# applies user settings for the system
2{ pkgs, user, lib, ... }: {2{
3 pkgs,
4 user,
5 lib,
6 ...
7}: {
3 # Set your time zone.8 # Set your time zone.
4 time.timeZone = user.timeZone;9 time.timeZone = user.timeZone;
510
6 home-manager.users.${user.username}.home.sessionVariables = {11 home-manager.users.${user.username}.home.sessionVariables =
7 EDITOR = user.editor;12 {
8 TERMINAL = user.term;13 EDITOR = user.editor;
9 } // lib.optionalAttrs (user ? "browser") {14 TERMINAL = user.term;
10 BROWSER = user.browser;15 }
11 };16 // lib.optionalAttrs (user ? "browser") {
17 BROWSER = user.browser;
18 };
1219
13 stylix = {20 stylix = {
14 enable = false;21 enable = false;
readme.md+27-2
...@@ -1,10 +1,35 @@...@@ -1,10 +1,35 @@
1# nix config1# nix config
22
3meow.3this setup allows natalie and chloe to share common configuration between their machines, but also share useful modules between each other.
4
5```
6lib/ # reusable functions
7modules/ # reusable modules
8 +-- macos/ # nix-darwin configurations
9 +-- nixos/ # linux configurations
10 +-- nixvim/ # neovim configurations
11 +-- shared/ # shared between nixos-rebuild & nixos-rebuild
12 +-- home-manager.nix # home program presets
13users/
14 +-- chloe/
15 | +-- user.nix # info about her
16 | +-- configuration.nix # for all hosts
17 | +-- home.nix # for all hosts
18 | +-- sandwich/
19 | | +-- configuration.nix # per host
20 | | +-- home.nix
21 | +-- paperback/
22 | ...
23 +-- natalie/
24 +-- user.nix # info about her
25 ...
26```
27
28A new machine can be added by adding a new definition in `flake.nix`. Note that the user and host `configuration.nix` and `home.nix` files are
429
5## macOS installation instructions30## macOS installation instructions
631
7Install Nix using the upstream nix (Pick "no" then "yes):32Install Nix using the upstream Nix (Pick "no" then "yes):
833
9```34```
10curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | \35curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | \
users/chloe/configuration.nix+5-5
...@@ -1,18 +1,18 @@...@@ -1,18 +1,18 @@
1# Configuration applied to all of chloe's machines1# Configuration applied to all of chloe's machines
2{2{ pkgs, ... }: {
3 pkgs,3 # packages for all machines
4 userSettings,
5 ...
6}: {
7 environment.systemPackages = with pkgs; [4 environment.systemPackages = with pkgs; [
8 neovim5 neovim
9 ];6 ];
7 # configuration for shared modules.
8 # all custom options in 'shared' for clarity.
10 shared.darwin = {9 shared.darwin = {
11 macAppStoreApps = [10 macAppStoreApps = [
12 "adguard"11 "adguard"
13 "magnet"12 "magnet"
14 ];13 ];
15 };14 };
15 # system preferences
16 system.defaults = {16 system.defaults = {
17 NSGlobalDomain = {17 NSGlobalDomain = {
18 KeyRepeat = 1;18 KeyRepeat = 1;
users/chloe/user.nix+1-1
...@@ -14,5 +14,5 @@...@@ -14,5 +14,5 @@
1414
15 # Default terminal command. NOTE: ghostty is not installed for you15 # Default terminal command. NOTE: ghostty is not installed for you
16 term = "ghostty"; # preferred $TERMINAL16 term = "ghostty"; # preferred $TERMINAL
17 editor = "nvim"; # preferred $EDITOR17 editor = "nvim"; # preferred $EDITOR
18}18}
users/natalie/configuration.nix+17-1
...@@ -1 +1,17 @@...@@ -1 +1,17 @@
1services.tailscale.enable = true;1# Applied to all systems
2{pkgs, ...}: {
3 services.tailscale.enable = true;
4 fonts.packages = with pkgs; [
5 nerd-fonts.fira-code
6 nerd-fonts.iosevka
7 iosevka
8 nerd-fonts.symbols-only
9 nerd-fonts.iosevka
10 ];
11
12 # configuration for shared modules.
13 # all custom options in 'shared' for clarity.
14 shared.darwin = {
15 tiling.enable = true; # use tiling window manager
16 };
17}
users/natalie/desktop/configuration.nix+7-7
...@@ -1,7 +1,7 @@...@@ -1,7 +1,7 @@
1{1{
2 pkgs,2 pkgs,
3 userSettings,3 user,
4 systemSettings,4 host,
5 ...5 ...
6}: {6}: {
7 imports = [7 imports = [
...@@ -16,7 +16,7 @@...@@ -16,7 +16,7 @@
16 enable = true;16 enable = true;
17 # Certain features, including CLI integration and system authentication support,17 # Certain features, including CLI integration and system authentication support,
18 # require enabling PolKit integration on some desktop environments (e.g. Plasma).18 # require enabling PolKit integration on some desktop environments (e.g. Plasma).
19 polkitPolicyOwners = [userSettings.username];19 polkitPolicyOwners = [user.username];
20 };20 };
2121
22 noisetorch.enable = true;22 noisetorch.enable = true;
...@@ -75,7 +75,7 @@...@@ -75,7 +75,7 @@
75 libvirtd.enable = true;75 libvirtd.enable = true;
76 };76 };
7777
78 nix.settings.trusted-users = ["root" userSettings.username];78 nix.settings.trusted-users = ["root" user.username];
79 systemd = {79 systemd = {
80 targets = {80 targets = {
81 sleep.enable = false;81 sleep.enable = false;
...@@ -129,10 +129,10 @@...@@ -129,10 +129,10 @@
129129
130 # Define a user account. Don't forget to set a password with ‘passwd’.130 # Define a user account. Don't forget to set a password with ‘passwd’.
131 # users.defaultUserShell = pkgs.fish;131 # users.defaultUserShell = pkgs.fish;
132 users.users.${userSettings.username} = {132 users.users.${user.username} = {
133 shell = pkgs.fish;133 shell = pkgs.fish;
134 isNormalUser = true;134 isNormalUser = true;
135 description = "Natalie Marks";135 description = user.name;
136 extraGroups = ["networkmanager" "wheel" "docker"];136 extraGroups = ["networkmanager" "wheel" "docker"];
137 # openssh.authorizedKeys.keyFiles = ["~/.ssh/id_ed25519.pub"];137 # openssh.authorizedKeys.keyFiles = ["~/.ssh/id_ed25519.pub"];
138 packages = with pkgs; [138 packages = with pkgs; [
...@@ -153,7 +153,7 @@...@@ -153,7 +153,7 @@
153 };153 };
154154
155 networking = {155 networking = {
156 hostName = systemSettings.host; # Define your hostname.156 hostName = host.name; # Define your hostname.
157 # wireless.enable = true; # Enables wireless support via wpa_supplicant.157 # wireless.enable = true; # Enables wireless support via wpa_supplicant.
158 networkmanager.enable = true;158 networkmanager.enable = true;
159 firewall = {159 firewall = {
users/natalie/desktop/home.nix+39-49
...@@ -6,9 +6,7 @@...@@ -6,9 +6,7 @@
6 userSettings,6 userSettings,
7 systemSettings,7 systemSettings,
8 ...8 ...
9}: let9}: {
10 shared-programs = import ../../modules/shared/homeManagerPrograms.nix {inherit inputs config pkgs lib userSettings systemSettings;};
11in {
12 imports = [10 imports = [
13 inputs.nixvim.homeManagerModules.nixvim11 inputs.nixvim.homeManagerModules.nixvim
14 #set up nixvim12 #set up nixvim
...@@ -17,56 +15,48 @@ in {...@@ -17,56 +15,48 @@ in {
17 home = {15 home = {
18 stateVersion = "23.05"; # Please read the comment before changing.16 stateVersion = "23.05"; # Please read the comment before changing.
1917
20 packages = with pkgs; let18 packages = with pkgs; [
21 shared-packages = import ../../modules/shared/packages.nix {inherit pkgs systemSettings;};19 #building macos apps hard :(
22 in20 ghostty
23 shared-packages21 stremio
24 ++ [22 julia
25 #building macos apps hard :(23 qbittorrent
26 ghostty
27 stremio
28 julia
29 qbittorrent
3024
31 #gaming25 #gaming
32 bottles26 bottles
33 lutris27 lutris
34 mangohud28 mangohud
35 dxvk_229 dxvk_2
36 steam-run30 steam-run
37 vulkan-tools31 vulkan-tools
38 path-of-building32 path-of-building
39 wineWowPackages.stable33 wineWowPackages.stable
40 winetricks34 winetricks
41 (prismlauncher.override {gamemodeSupport = true;})35 (prismlauncher.override {gamemodeSupport = true;})
4236
43 #window manager stuff37 #window manager stuff
44 wofi38 wofi
45 xorg.xauth39 xorg.xauth
46 #linux tools40 #linux tools
47 legcord41 legcord
48 pavucontrol42 pavucontrol
49 ethtool43 ethtool
50 grub244 grub2
51 efibootmgr45 efibootmgr
52 distrobox46 distrobox
53 xdg-desktop-portal-gtk47 xdg-desktop-portal-gtk
54 xclip48 xclip
55 kdePackages.dolphin49 kdePackages.dolphin
56 #broken on macos50 #broken on macos
57 calibre51 calibre
58 mpv52 mpv
59 wireguard-tools53 wireguard-tools
60 signal-desktop54 signal-desktop
61 ]55 inputs.zls.packages.x86_64-linux.zls
62 ++ [56 rust-bin.stable.latest.default
63 inputs.zls.packages.x86_64-linux.zls57 ];
64 rust-bin.stable.latest.default
65 ];
66 # programs.mangohud.enable = true;58 # programs.mangohud.enable = true;
67 };59 };
6860
69 programs = shared-programs;
70
71 # xdg.mimeApps.defaultApplications."inode/directory" = "dolphin.desktop";61 # xdg.mimeApps.defaultApplications."inode/directory" = "dolphin.desktop";
72}62}
users/natalie/home.nix+11-14
...@@ -1,19 +1,16 @@...@@ -1,19 +1,16 @@
1{1{
2 pkgs,2 pkgs,
3 lib,3 lib,
4}: {4 ...
5 # sort-lines:start5} @ args: {
6 atuin.enable = true;6 programs = {
7 bat.enable = true;7 # sort-lines:start
8 hyfetch.enable = true;8 atuin.enable = true;
9 direnv.enable = true;9 bat.enable = true;
10 # sort-lines:end10 hyfetch.enable = true;
11 direnv.enable = true;
12 # sort-lines:end
13 };
1114
12 fonts.packages = with pkgs; [15 home.packages = import ./packages.nix args;
13 nerd-fonts.fira-code
14 nerd-fonts.iosevka
15 iosevka
16 nerd-fonts.symbols-only
17 nerd-fonts.iosevka
18 ];
19}16}
users/natalie/laptop/configuration.nix+1-5
...@@ -1,8 +1,4 @@...@@ -1,8 +1,4 @@
1{1{pkgs, ...}: {
2 pkgs,
3 userSettings,
4 ...
5}: {
6 environment.systemPackages = with pkgs; [2 environment.systemPackages = with pkgs; [
7 neovim3 neovim
8 pinentry_mac4 pinentry_mac
users/natalie/laptop/home.nix+3-8
...@@ -3,8 +3,8 @@...@@ -3,8 +3,8 @@
3 config,3 config,
4 pkgs,4 pkgs,
5 lib,5 lib,
6 userSettings,6 user,
7 systemSettings,7 host,
8 ...8 ...
9} @ args: {9} @ args: {
10 imports = [10 imports = [
...@@ -12,14 +12,9 @@...@@ -12,14 +12,9 @@
12 #set up nixvim12 #set up nixvim
13 # ../../modules/nixvim13 # ../../modules/nixvim
14 ];14 ];
15 programs = import ./home-programs.nix args;
16
17 home = {15 home = {
18 inherit (userSettings) username;
19 # shell = pkgs.fish;
20 stateVersion = "23.05"; # Please read the comment before changing.16 stateVersion = "23.05"; # Please read the comment before changing.
2117 # shell = pkgs.fish;
22 packages = pkgs.callPackage ../../modules/shared/packages.nix {inherit systemSettings;};
2318
24 sessionPath = [19 sessionPath = [
25 "$HOME/.emacs.d/bin"20 "$HOME/.emacs.d/bin"
users/natalie/packages.nix+2-5
...@@ -1,8 +1,5 @@...@@ -1,8 +1,5 @@
1{1# Packages installed with home-manager
2 pkgs,2{pkgs, ...}:
3 systemSettings,
4 ...
5}:
6with pkgs; [3with pkgs; [
7 #general development4 #general development
8 just5 just
users/natalie/user.nix created+13
...@@ -0,0 +1,13 @@
1rec {
2 username = "nmarks"; # username
3 name = "Natalie"; # name/identifier
4 email = "nmarks413@gmail.com"; # email (used for certain configurations)
5 dotfilesDir = "~/.dotfiles"; # absolute path of the local repo
6 theme = "catppuccin-mocha"; #name of theme that stylix will use
7 browser = "firefox"; # Default browser; must select one from ./user/app/browser/
8 term = "ghostty"; # Default terminal command;
9 font = "iosevka"; # Selected font
10 editor = "neovim"; # Default editor;
11 timeZone = "America/Los_Angeles";
12 sexuality = "bisexual";
13}