my system configurations ^-^
1{
2 lib,
3 config,
4 ...
5}: let
6 inherit (lib) mkEnableOption mkOption types;
7
8 cfg = config.settings;
9in {
10 options.settings = {
11 programs = {
12 enable =
13 mkEnableOption "Enable all programs"
14 // {
15 default = true;
16 };
17
18 cli = {
19 enable =
20 mkEnableOption "Enable CLI programs"
21 // {
22 default = cfg.programs.enable;
23 };
24 };
25 gui = {
26 enable =
27 mkEnableOption "Enable GUI programs"
28 // {
29 default = cfg.desktop.enable;
30 };
31 };
32 tui = {
33 enable =
34 mkEnableOption "Enable TUI programs"
35 // {
36 default = cfg.programs.enable;
37 };
38 };
39
40 categories = {
41 enable =
42 mkEnableOption "Enable all program categories"
43 // {
44 default = cfg.programs.enable;
45 };
46 core.enable =
47 mkEnableOption "Enable core programs"
48 // {
49 default = cfg.programs.categories.enable;
50 };
51 design.enable =
52 mkEnableOption "Enable design programs"
53 // {
54 default = cfg.programs.categories.enable;
55 };
56 dev.enable =
57 mkEnableOption "Enable development programs"
58 // {
59 default = cfg.programs.categories.enable;
60 };
61 edu.enable =
62 mkEnableOption "Enable educational programs"
63 // {
64 default = cfg.programs.categories.enable;
65 };
66 fs.enable =
67 mkEnableOption "Enable file management programs"
68 // {
69 default = cfg.programs.categories.enable;
70 };
71 fun.enable =
72 mkEnableOption "Enable fun programs"
73 // {
74 default = cfg.programs.categories.enable;
75 };
76 gaming.enable =
77 mkEnableOption "Enable gaming programs"
78 // {
79 default = cfg.programs.categories.enable;
80 };
81 mail.enable =
82 mkEnableOption "Enable email programs"
83 // {
84 default = cfg.programs.categories.enable;
85 };
86 media.enable =
87 mkEnableOption "Enable multimedia programs"
88 // {
89 default = cfg.programs.categories.enable;
90 };
91 music.enable =
92 mkEnableOption "Enable music programs"
93 // {
94 default = cfg.programs.categories.enable;
95 };
96 printing.enable =
97 mkEnableOption "Enable 3D printing programs"
98 // {
99 default = cfg.programs.categories.enable;
100 };
101 privacy.enable =
102 mkEnableOption "Enable privacy programs"
103 // {
104 default = cfg.programs.categories.enable;
105 };
106 tools.enable =
107 mkEnableOption "Enable QOL programs"
108 // {
109 default = cfg.programs.categories.enable;
110 };
111 web.enable =
112 mkEnableOption "Enable browsers"
113 // {
114 default = cfg.programs.categories.enable;
115 };
116 };
117 };
118 system = {
119 user = {
120 name = mkOption {
121 type = types.str;
122 description = "The username of the main user for your system";
123 default = "willow";
124 };
125 home = mkOption {
126 type = types.path;
127 description = "The home directory of the main user for your system";
128 default = "/home/${cfg.system.user.name}";
129 };
130 group = mkOption {
131 type = types.str;
132 description = "The group of the main user for your system";
133 default = "users";
134 };
135 };
136 hostName = mkOption {
137 type = types.str;
138 description = "The hostname of your system";
139 default = "nixos";
140 };
141 services = {
142 enable =
143 mkEnableOption "Enable system services"
144 // {
145 default = true;
146 };
147 bluetooth.enable =
148 mkEnableOption "Enable Bluetooth"
149 // {
150 default = cfg.system.services.enable;
151 };
152 sound.enable =
153 mkEnableOption "Enable sound"
154 // {
155 default = cfg.system.services.enable;
156 };
157 printing.enable =
158 mkEnableOption "Enable printing"
159 // {
160 default = cfg.system.services.enable;
161 };
162 networking.enable =
163 mkEnableOption "Enable networking"
164 // {
165 default = cfg.system.services.enable;
166 };
167 security.enable =
168 mkEnableOption "Enable security"
169 // {
170 default = cfg.system.services.enable;
171 };
172 backups.enable =
173 mkEnableOption "Enable backups"
174 // {
175 default = cfg.system.services.enable;
176 };
177 };
178 };
179 desktop = {
180 enable =
181 mkEnableOption "Enable desktop environment"
182 // {
183 default = true;
184 };
185 niri.enable =
186 mkEnableOption "Enable Niri twm"
187 // {
188 default = cfg.desktop.enable;
189 };
190 hyprland.enable =
191 mkEnableOption "Enable Hyprland and its ecosystem"
192 // {
193 default = cfg.desktop.enable;
194 };
195 };
196 };
197}