-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflake.nix
More file actions
158 lines (157 loc) · 5.06 KB
/
flake.nix
File metadata and controls
158 lines (157 loc) · 5.06 KB
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
{
description = "Samw's home environment, as managed by nix/home-manager.";
inputs = {
# Nixpkgs
nixpkgs = {
# N.B. we use the nixos-x branch as this is updated *after* successful hydra builds
# rather than release-x. See https://wiki.nixos.org/wiki/Channel_branches
url = "github:nixos/nixpkgs/nixos-25.11";
};
nixpkgs-unstable = {
url = "github:nixos/nixpkgs";
};
# Other modules
home-manager = {
url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-utils.url = "github:numtide/flake-utils";
devshell = {
url = "github:numtide/devshell";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
inputs:
let
overlays = [
# Add our own local packages
(final: prev: {
# Make my local packages available as pkgs.mypkgs.<foo>
mypkgs = prev.callPackage ./pkgs { };
})
# more up to date ssh-tpm-agent. Can probably ditch this post-24.05
(final: prev: {
ssh-tpm-agent = (import inputs.nixpkgs-unstable { system = prev.system; }).ssh-tpm-agent;
})
];
in
(
rec {
profiles = import ./home/profiles.nix;
lib = {
mkHome =
{
profiles,
system,
username ? "samw",
}:
inputs.home-manager.lib.homeManagerConfiguration {
pkgs = (
import inputs.nixpkgs {
inherit system;
config.allowUnfree = true; # Yes I know it's bad for me
}
);
modules = [
{
home = {
inherit username;
homeDirectory =
if (inputs.nixpkgs.lib.systems.elaborate system).isDarwin then
"/Users/${username}"
else
"/home/${username}";
stateVersion = "21.11";
};
}
]
++ profiles
++ [
{ nixpkgs.overlays = overlays; }
# See comment in home/default.nix.
(
{ pkgs, ... }:
{
nix = {
enable = true;
package = pkgs.nix;
settings.experimental-features = "nix-command flakes";
settings.max-jobs = "auto"; # Gotta go fast (build derivations in parallel)
# Pin the nixpkgs registry to our locked nixpkgs. This means that we
# get the same packages via e.g. nix shell as we have at the system
# level, so less duplication overall and no more fetching that 30MB src
# every time you run nix shell.
registry.nixpkgs.flake = inputs.nixpkgs;
registry.nixpkgs-unstable.to = {
owner = "nixos";
repo = "nixpkgs";
type = "github";
};
};
}
)
];
extraSpecialArgs = { inherit system; };
};
};
# Standalone home-manager configurations
homeConfigurations = {
zinc = lib.mkHome {
system = "aarch64-darwin";
profiles = with profiles; [
default
dev
dev-gui
sensitive
mac
];
};
luroy = lib.mkHome {
system = "x86_64-linux";
profiles = with profiles; [
default
dev
];
};
phosphorus = lib.mkHome {
system = "aarch64-darwin";
profiles = with profiles; [
default
dev
sensitive
mac
];
};
};
}
# Per-system things
// (inputs.flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import inputs.nixpkgs {
inherit system;
overlays = overlays ++ [ inputs.devshell.overlays.default ];
};
platform = pkgs.lib.systems.elaborate system;
in
{
# Flake interface to my local packages.
# - `callPackage` puts some junk in mypkgs (`override` and
# `overrideDerivation`) so we filter out anything that isn't a derivation
# - We also filter out any packages that aren't supported on the current
# platform.
packages =
with pkgs.lib;
(filterAttrs (_: v: (isDerivation v && meta.availableOn platform v)) pkgs.mypkgs);
formatter = pkgs.nixfmt-tree;
# A devshell with useful utils
devShells.default = pkgs.devshell.mkShell {
packages = [
inputs.home-manager.packages.${system}.default
];
};
}
))
);
}