-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflake.nix
143 lines (125 loc) · 4.48 KB
/
flake.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
{
description = "Nix for macOS configuration";
inputs = {
# nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-unstable";
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-24.05-darwin";
nixvim = {
url = "github:nix-community/nixvim/nixos-24.05";
inputs.nixpkgs.follows = "nixpkgs";
};
# home-manager, used for managing user configuration
home-manager = {
url = "github:nix-community/home-manager/release-24.05";
# The `follows` keyword in inputs is used for inheritance.
# Here, `inputs.nixpkgs` of home-manager is kept consistent with the `inputs.nixpkgs` of the current flake,
# to avoid problems caused by different versions of nixpkgs dependencies.
inputs.nixpkgs.follows = "nixpkgs-darwin";
};
darwin = {
url = "github:lnl7/nix-darwin";
inputs.nixpkgs.follows = "nixpkgs-darwin";
};
nix-homebrew.url = "github:zhaofengli-wip/nix-homebrew";
mac-app-util.url = "github:hraban/mac-app-util";
# Optional: Declarative tap management
homebrew-core = {
url = "github:homebrew/homebrew-core";
flake = false;
};
homebrew-cask = {
url = "github:homebrew/homebrew-cask";
flake = false;
};
homebrew-bundle = {
url = "github:homebrew/homebrew-bundle";
flake = false;
};
# homebrew-services = {
# url = "github:homebrew/homebrew-services";
# flake = false;
# };
};
###################################################
################### OUTPUTS #######################
###################################################
outputs = {self,
nixpkgs,
darwin,
home-manager,
mac-app-util,
nixvim,
nix-homebrew,
homebrew-core,
homebrew-cask,
homebrew-bundle,
# homebrew-services,
... }@inputs:
let
username = "ben";
useremail = "[email protected]";
system = "aarch64-darwin"; # aarch64-darwin or x86_64-darwin
getHostConfig = hostname: let
hostConfigPath = ./hosts/${hostname}.nix;
in
if builtins.pathExists hostConfigPath
then import hostConfigPath { pkgs = nixpkgs.legacyPackages.${system}; }
else { pkgs = []; casks = []; };
hostnames = [ "kenobi" "windu" ];
in {
darwinConfigurations = builtins.listToAttrs (map (hostname: {
name = hostname;
value = darwin.lib.darwinSystem {
inherit system;
specialArgs = inputs // {
inherit username useremail hostname;
hostConfig = getHostConfig hostname;
};
modules = [
./modules/system.nix
./modules/apps.nix
./modules/host-users.nix
./modules/nix-core.nix
mac-app-util.darwinModules.default
# home manager
home-manager.darwinModules.home-manager {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit username useremail hostname;
hostConfig = getHostConfig hostname;
};
home-manager.users.${username} = import ./home;
home-manager.sharedModules = [
mac-app-util.homeManagerModules.default
nixvim.homeManagerModules.nixvim
];
}
nix-homebrew.darwinModules.nix-homebrew {
nix-homebrew = {
# Install Homebrew under the default prefix
enable = true;
# Apple Silicon Only: Also install Homebrew under the default Intel prefix for Rosetta 2
enableRosetta = true;
# User owning the Homebrew prefix
user = username;
# Optional: Declarative tap management
taps = {
"homebrew/homebrew-core" = homebrew-core;
"homebrew/homebrew-cask" = homebrew-cask;
"homebrew/homebrew-bundle" = homebrew-bundle;
# "homebrew/homebrew-services" = homebrew-services;
};
# Optional: Enable fully-declarative tap management
#
# With mutableTaps disabled, taps can no longer be added imperatively with `brew tap`.
mutableTaps = false;
autoMigrate = true;
};
}
];
};
}) hostnames);
# nix code formatter
formatter.${system} = nixpkgs.legacyPackages.${system}.alejandra;
};
}