1{ nixpkgs, darwin, home-manager, ... } @ inputs:
2
3{
4 mkSystem = { system, hostname, user ? "phil", modules ? [], overlays ? [] }: let
5 inherit (lib.systems.elaborate { inherit system; }) isDarwin;
6
7 homeDir = if isDarwin then "/Users/${user}" else "/home/${user}";
8 rootDir = if isDarwin then "/var/root" else "/root";
9
10 lib = (import nixpkgs { inherit overlays system; }).lib;
11
12 age = {
13 identityPaths = [ "/usr/local/persistent/agenix" "/var/lib/persistent/agenix" ];
14 };
15
16 systemModules = modules ++ [
17 ../machines/common.nix
18 ../machines/${hostname}/configuration.nix
19 ../modules/default.nix
20 ({ ... }: {
21 inherit age;
22
23 nixpkgs = {
24 inherit overlays;
25 config.allowUnfree = true;
26 hostPlatform = system;
27 };
28
29 networking.hostName = hostname;
30 nix.extraOptions = "extra-experimental-features = nix-command flakes";
31 })
32 ];
33
34 home = { ... }: {
35 inherit age;
36
37 manual.manpages.enable = false;
38 xdg.enable = true;
39 home = {
40 stateVersion = "25.05";
41 enableNixpkgsReleaseCheck = false;
42 };
43
44 imports = [
45 inputs.agenix.homeManagerModules.default
46 inputs.android-sdk.hmModules.android
47 ../home/default.nix
48 ../machines/${hostname}/home.nix
49 ];
50 };
51
52 specialArgs = {
53 inherit hostname user inputs;
54 helpers = (import ./helpers.nix {
55 inherit lib system;
56 });
57 };
58
59 in if isDarwin then (
60 darwin.lib.darwinSystem {
61 inherit system specialArgs lib;
62 modules = systemModules ++ [
63 inputs.agenix.darwinModules.default
64 home-manager.darwinModules.home-manager {
65 home-manager.extraSpecialArgs = specialArgs;
66 home-manager.useGlobalPkgs = true;
67 home-manager.useUserPackages = true;
68 home-manager.users."${user}" = home;
69 }
70 ({ pkgs, ... }: {
71 environment.shells = [pkgs.zsh];
72 users.users."${user}".home = homeDir;
73 })
74 ];
75 }
76 ) else (
77 nixpkgs.lib.nixosSystem {
78 inherit system specialArgs lib;
79 modules = systemModules ++ [
80 inputs.tangled.nixosModules.knot
81 inputs.yeetmouse.nixosModules.default
82 inputs.agenix.nixosModules.default
83 home-manager.nixosModules.home-manager {
84 home-manager.extraSpecialArgs = specialArgs;
85 home-manager.useGlobalPkgs = true;
86 home-manager.useUserPackages = true;
87 home-manager.users."${user}" = home;
88 }
89 ({ pkgs, ... }: {
90 users.defaultUserShell = pkgs.zsh;
91 users.mutableUsers = false;
92 users.users."${user}".home = homeDir;
93 })
94 ];
95 }
96 );
97}