-
Notifications
You must be signed in to change notification settings - Fork 1
/
flake.nix
163 lines (137 loc) · 5.59 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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
{
description = "A highly structured configuration database.";
nixConfig = {
extra-experimental-features = "nix-command flakes";
extra-substituters =
[ "https://nrdxp.cachix.org" "https://nix-community.cachix.org" ];
extra-trusted-public-keys = [
"nrdxp.cachix.org-1:Fc5PSqY2Jm1TrWfm88l6cvGWwz3s93c6IOifQWnhNW4="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
};
inputs = {
nix-doom-emacs = {
# This is where you get it
url = "github:nix-community/nix-doom-emacs";
# We're overriding one of the inputs of their flake
inputs.nixpkgs.follows = "nixpkgs";
};
# Track channels with commits tested and built by hydra
nixos.url = "github:nixos/nixpkgs/nixos-23.11";
latest.url = "github:nixos/nixpkgs/nixos-unstable";
# For darwin hosts: it can be helpful to track this darwin-specific stable
# channel equivalent to the `nixos-*` channels for NixOS. For one, these
# channels are more likely to provide cached binaries for darwin systems.
# But, perhaps even more usefully, it provides a place for adding
# darwin-specific overlays and packages which could otherwise cause build
# failures on Linux systems.
#nixpkgs-darwin-stable.url = "github:NixOS/nixpkgs/nixpkgs-22.11-darwin";
digga.url = "github:divnix/digga";
digga.inputs.nixpkgs.follows = "nixos";
digga.inputs.nixlib.follows = "nixos";
digga.inputs.home-manager.follows = "home";
digga.inputs.deploy.follows = "deploy";
# remove this when this PR is merged https://github.com/gytis-ivaskevicius/flake-utils-plus/pull/144
digga.inputs."flake-utils-plus".follows = "flake-utils-plus-fix";
"flake-utils-plus-fix".url =
"github:lordkekz/flake-utils-plus/b09bd64c0cfd54608f06d060c1a467a14cce2e85";
home.url = "github:nix-community/home-manager/release-23.11";
home.inputs.nixpkgs.follows = "nixos";
#darwin.url = "github:LnL7/nix-darwin";
#darwin.inputs.nixpkgs.follows = "nixpkgs-darwin-stable";
deploy.url = "github:serokell/deploy-rs";
deploy.inputs.nixpkgs.follows = "nixos";
agenix.url = "github:ryantm/agenix";
agenix.inputs.nixpkgs.follows = "nixos";
nvfetcher.url = "github:berberman/nvfetcher";
nvfetcher.inputs.nixpkgs.follows = "nixos";
nixos-hardware.url = "github:nixos/nixos-hardware";
};
outputs = { self, digga, nixos, home, nixos-hardware, nur, agenix, nvfetcher
, deploy, nixpkgs, nix-doom-emacs, ... }@inputs:
digga.lib.mkFlake {
inherit self inputs;
channelsConfig = { allowUnfree = true; };
channels = {
nixos = {
imports = [ (digga.lib.importOverlays ./overlays) ];
overlays = [ ];
};
latest = { };
};
lib = import ./lib { lib = digga.lib // nixos.lib; };
sharedOverlays = [
(final: prev: {
__dontExport = true;
lib = prev.lib.extend (lfinal: lprev: { our = self.lib; });
})
nur.overlay
agenix.overlays.default
nvfetcher.overlays.default
(import ./pkgs)
];
nixos = {
hostDefaults = {
system = "x86_64-linux";
channelName = "nixos";
imports = [ (digga.lib.importExportableModules ./modules) ];
modules = [
{ lib.our = self.lib; }
digga.nixosModules.nixConfig
home.nixosModules.home-manager
agenix.nixosModules.age
];
};
imports = [ (digga.lib.importHosts ./hosts) ];
hosts = {
# set host-specific properties here
NixOS = { };
};
importables = rec {
profiles = digga.lib.rakeLeaves ./profiles // {
users = digga.lib.rakeLeaves ./users;
};
suites = with profiles; rec {
base = [ core.nixos users.liquidzulu users.root ];
};
};
};
home = {
imports = [ (digga.lib.importExportableModules ./users/modules) ];
modules = [ nix-doom-emacs.hmModule ];
importables = rec {
profiles = digga.lib.rakeLeaves ./users/profiles;
suites = with profiles; rec { base = [ direnv git ]; };
};
users = {
# TODO: does this naming convention still make sense with darwin support?
#
# - it doesn't make sense to make a 'nixos' user available on
# darwin, and vice versa
#
# - the 'nixos' user might have special significance as the default
# user for fresh systems
#
# - perhaps a system-agnostic home-manager user is more appropriate?
# something like 'primaryuser'?
#
# all that said, these only exist within the `hmUsers` attrset, so
# it could just be left to the developer to determine what's
# appropriate. after all, configuring these hm users is one of the
# first steps in customizing the template.
liquidzulu = { suites, profiles, ... }: {
imports = suites.base ++ (let inherit (profiles) doom; in [ doom ]);
home.stateVersion = "22.11";
};
}; # digga.lib.importers.rakeLeaves ./users/hm;
};
devshell = ./shell;
# TODO: similar to the above note: does it make sense to make all of
# these users available on all systems?
homeConfigurations =
digga.lib.mkHomeConfigurations self.nixosConfigurations;
# digga.lib.mergeAny
# (digga.lib.mkHomeConfigurations self.nixosConfigurations);
deploy.nodes = digga.lib.mkDeployNodes self.nixosConfigurations { };
};
}