+1
.envrc
+1
.envrc
···
1
+
has nix && use flake
+14
-456
flake.lock
+14
-456
flake.lock
···
1
1
{
2
2
"nodes": {
3
-
"blender-bin": {
4
-
"inputs": {
5
-
"nixpkgs": [
6
-
"nixpkgs"
7
-
]
8
-
},
9
-
"locked": {
10
-
"dir": "blender",
11
-
"lastModified": 1742939360,
12
-
"narHash": "sha256-YeM/A4SWHlz2trSNjriPi4QR5zsYMC8vkQawSlRw2+w=",
13
-
"owner": "edolstra",
14
-
"repo": "nix-warez",
15
-
"rev": "c9d2d5c61a37f2217e9241ccfa6c394ed2f3e52b",
16
-
"type": "github"
17
-
},
18
-
"original": {
19
-
"id": "blender-bin",
20
-
"type": "indirect"
21
-
}
22
-
},
23
-
"catppuccin": {
24
-
"inputs": {
25
-
"nixpkgs": "nixpkgs"
26
-
},
27
-
"locked": {
28
-
"lastModified": 1744447794,
29
-
"narHash": "sha256-z5uK5BDmFg0L/0EW2XYLGr39FbQeXyNVnIEhkZrG8+Q=",
30
-
"owner": "catppuccin",
31
-
"repo": "nix",
32
-
"rev": "c44fe73ed8e5d5809eded7cc6156ca9c40044e42",
33
-
"type": "github"
34
-
},
35
-
"original": {
36
-
"owner": "catppuccin",
37
-
"repo": "nix",
38
-
"type": "github"
39
-
}
40
-
},
41
-
"crane": {
42
-
"locked": {
43
-
"lastModified": 1741148495,
44
-
"narHash": "sha256-EV8KUaIZ2/CdBXlutXrHoZYbWPeB65p5kKZk71gvDRI=",
45
-
"owner": "ipetkov",
46
-
"repo": "crane",
47
-
"rev": "75390a36cd0c2cdd5f1aafd8a9f827d7107f2e53",
48
-
"type": "github"
49
-
},
50
-
"original": {
51
-
"owner": "ipetkov",
52
-
"repo": "crane",
53
-
"type": "github"
54
-
}
55
-
},
56
-
"ctp-discord-compiled": {
57
-
"flake": false,
58
-
"locked": {
59
-
"lastModified": 1740810360,
60
-
"narHash": "sha256-Y1HDjEiw/MP+t2oqkdZT7mUvm09YmRUPQ9FFi1Hk26U=",
61
-
"owner": "catppuccin",
62
-
"repo": "discord",
63
-
"rev": "075f4e53795e336a77f922a61680d32d57b424f5",
64
-
"type": "github"
65
-
},
66
-
"original": {
67
-
"owner": "catppuccin",
68
-
"ref": "gh-pages",
69
-
"repo": "discord",
70
-
"type": "github"
71
-
}
72
-
},
73
-
"ctp-vscode-compiled": {
74
-
"flake": false,
75
-
"locked": {
76
-
"lastModified": 1713966373,
77
-
"narHash": "sha256-ODqdy+17MxSRLFzj2TYYSvG7xUXDYEDZfjW5SkzRGyA=",
78
-
"owner": "catppuccin",
79
-
"repo": "vscode",
80
-
"rev": "4b857d9b86cbb393e121f0f2544a6efb549dbbf4",
81
-
"type": "github"
82
-
},
83
-
"original": {
84
-
"owner": "catppuccin",
85
-
"ref": "catppuccin-vsc-v3.14.0",
86
-
"repo": "vscode",
87
-
"type": "github"
88
-
}
89
-
},
90
-
"fenix": {
91
-
"inputs": {
92
-
"nixpkgs": [
93
-
"nixpkgs"
94
-
],
95
-
"rust-analyzer-src": "rust-analyzer-src"
96
-
},
97
-
"locked": {
98
-
"lastModified": 1742452566,
99
-
"narHash": "sha256-sVuLDQ2UIWfXUBbctzrZrXM2X05YjX08K7XHMztt36E=",
100
-
"owner": "nix-community",
101
-
"repo": "fenix",
102
-
"rev": "7d9ba794daf5e8cc7ee728859bc688d8e26d5f06",
103
-
"type": "github"
104
-
},
105
-
"original": {
106
-
"owner": "nix-community",
107
-
"ref": "monthly",
108
-
"repo": "fenix",
109
-
"type": "github"
110
-
}
111
-
},
112
-
"firefox-addons": {
113
-
"inputs": {
114
-
"flake-utils": [
115
-
"flake-utils"
116
-
],
117
-
"nixpkgs": [
118
-
"nixpkgs"
119
-
]
120
-
},
121
-
"locked": {
122
-
"dir": "pkgs/firefox-addons",
123
-
"lastModified": 1742025179,
124
-
"narHash": "sha256-gxfMDCQeGZk3wZjqdl2boaGGm+yiAkaNFNp3x5vhuYg=",
125
-
"owner": "~rycee",
126
-
"repo": "nur-expressions",
127
-
"rev": "9b8d2f4a1e3a199878d1eb14d7e0f176052a8038",
128
-
"type": "sourcehut"
129
-
},
130
-
"original": {
131
-
"dir": "pkgs/firefox-addons",
132
-
"owner": "~rycee",
133
-
"repo": "nur-expressions",
134
-
"type": "sourcehut"
135
-
}
136
-
},
137
3
"flake-compat": {
138
4
"flake": false,
139
5
"locked": {
···
150
16
"type": "github"
151
17
}
152
18
},
153
-
"flake-compat_2": {
154
-
"flake": false,
155
-
"locked": {
156
-
"lastModified": 1733328505,
157
-
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
158
-
"owner": "edolstra",
159
-
"repo": "flake-compat",
160
-
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
161
-
"type": "github"
162
-
},
163
-
"original": {
164
-
"owner": "edolstra",
165
-
"repo": "flake-compat",
166
-
"type": "github"
167
-
}
168
-
},
169
19
"flake-parts": {
170
20
"inputs": {
171
21
"nixpkgs-lib": [
···
204
54
"type": "github"
205
55
}
206
56
},
207
-
"flake-utils_2": {
208
-
"inputs": {
209
-
"systems": "systems_2"
210
-
},
211
-
"locked": {
212
-
"lastModified": 1731533236,
213
-
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
214
-
"owner": "numtide",
215
-
"repo": "flake-utils",
216
-
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
217
-
"type": "github"
218
-
},
219
-
"original": {
220
-
"owner": "numtide",
221
-
"repo": "flake-utils",
222
-
"type": "github"
223
-
}
224
-
},
225
57
"ghostty": {
226
58
"inputs": {
227
59
"flake-compat": "flake-compat",
228
-
"flake-utils": "flake-utils_2",
60
+
"flake-utils": "flake-utils",
229
61
"nixpkgs-stable": [
230
62
"nixpkgs"
231
63
],
···
250
82
"type": "github"
251
83
}
252
84
},
253
-
"gitignore": {
254
-
"inputs": {
255
-
"nixpkgs": [
256
-
"lanzaboote",
257
-
"pre-commit-hooks-nix",
258
-
"nixpkgs"
259
-
]
260
-
},
261
-
"locked": {
262
-
"lastModified": 1709087332,
263
-
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
264
-
"owner": "hercules-ci",
265
-
"repo": "gitignore.nix",
266
-
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
267
-
"type": "github"
268
-
},
269
-
"original": {
270
-
"owner": "hercules-ci",
271
-
"repo": "gitignore.nix",
272
-
"type": "github"
273
-
}
274
-
},
275
85
"hjem": {
276
86
"inputs": {
277
87
"nixpkgs": [
···
299
109
]
300
110
},
301
111
"locked": {
302
-
"lastModified": 1745861051,
303
-
"narHash": "sha256-L1B2KkvbNHCtNbmYNli/DqCwEhshcwrt/p904iIYPNs=",
112
+
"lastModified": 1745973953,
113
+
"narHash": "sha256-s1ZHPUq9mi0VHVLI927tFdsMQqB5ClEBrYCwI8C7BMA=",
304
114
"owner": "snugnug",
305
115
"repo": "hjem-rum",
306
-
"rev": "1ad4898417031a6b280894f80f041118b6964432",
116
+
"rev": "d152f54bcd38dff8badc9449f6aa8f44944e1b17",
307
117
"type": "github"
308
118
},
309
119
"original": {
···
312
122
"type": "github"
313
123
}
314
124
},
315
-
"home-manager": {
316
-
"inputs": {
317
-
"nixpkgs": [
318
-
"nixpkgs"
319
-
]
320
-
},
321
-
"locked": {
322
-
"lastModified": 1744618730,
323
-
"narHash": "sha256-n3gN7aHwVRnnBZI64EDoKyJnWidNYJ0xezhqQtdjH2Q=",
324
-
"owner": "nix-community",
325
-
"repo": "home-manager",
326
-
"rev": "85dd758c703ffbf9d97f34adcef3a898b54b4014",
327
-
"type": "github"
328
-
},
329
-
"original": {
330
-
"owner": "nix-community",
331
-
"repo": "home-manager",
332
-
"type": "github"
333
-
}
334
-
},
335
-
"krunner-nix": {
336
-
"inputs": {
337
-
"nixpkgs": [
338
-
"nixpkgs"
339
-
]
340
-
},
341
-
"locked": {
342
-
"lastModified": 1696278906,
343
-
"narHash": "sha256-z2tbFXMC+nSN7vhn2WSoMVdViolucLeoDSfOfnRcmCE=",
344
-
"owner": "pluiedev",
345
-
"repo": "krunner-nix",
346
-
"rev": "8a819944620db8eab35e7dbb14d1916c9e7a478d",
347
-
"type": "github"
348
-
},
349
-
"original": {
350
-
"owner": "pluiedev",
351
-
"repo": "krunner-nix",
352
-
"type": "github"
353
-
}
354
-
},
355
-
"lanzaboote": {
356
-
"inputs": {
357
-
"crane": "crane",
358
-
"flake-compat": "flake-compat_2",
359
-
"flake-parts": [
360
-
"flake-parts"
361
-
],
362
-
"nixpkgs": [
363
-
"nixpkgs"
364
-
],
365
-
"pre-commit-hooks-nix": "pre-commit-hooks-nix",
366
-
"rust-overlay": "rust-overlay"
367
-
},
368
-
"locked": {
369
-
"lastModified": 1741442524,
370
-
"narHash": "sha256-tVcxLDLLho8dWcO81Xj/3/ANLdVs0bGyCPyKjp70JWk=",
371
-
"owner": "nix-community",
372
-
"repo": "lanzaboote",
373
-
"rev": "d8099586d9a84308ffedac07880e7f07a0180ff4",
374
-
"type": "github"
375
-
},
376
-
"original": {
377
-
"owner": "nix-community",
378
-
"repo": "lanzaboote",
379
-
"type": "github"
380
-
}
381
-
},
382
-
"nix-darwin": {
383
-
"inputs": {
384
-
"nixpkgs": [
385
-
"nixpkgs"
386
-
]
387
-
},
388
-
"locked": {
389
-
"lastModified": 1744478979,
390
-
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
391
-
"owner": "LnL7",
392
-
"repo": "nix-darwin",
393
-
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
394
-
"type": "github"
395
-
},
396
-
"original": {
397
-
"owner": "LnL7",
398
-
"repo": "nix-darwin",
399
-
"type": "github"
400
-
}
401
-
},
402
125
"nix-index-database": {
403
126
"inputs": {
404
127
"nixpkgs": [
···
406
129
]
407
130
},
408
131
"locked": {
409
-
"lastModified": 1744518957,
410
-
"narHash": "sha256-RLBSWQfTL0v+7uyskC5kP6slLK1jvIuhaAh8QvB75m4=",
132
+
"lastModified": 1745725746,
133
+
"narHash": "sha256-iR+idGZJ191cY6NBXyVjh9QH8GVWTkvZw/w+1Igy45A=",
411
134
"owner": "nix-community",
412
135
"repo": "nix-index-database",
413
-
"rev": "4fc9ea78c962904f4ea11046f3db37c62e8a02fd",
136
+
"rev": "187524713d0d9b2d2c6f688b81835114d4c2a7c6",
414
137
"type": "github"
415
138
},
416
139
"original": {
···
421
144
},
422
145
"nixos-hardware": {
423
146
"locked": {
424
-
"lastModified": 1744366945,
425
-
"narHash": "sha256-OuLhysErPHl53BBifhesrRumJNhrlSgQDfYOTXfgIMg=",
147
+
"lastModified": 1745955289,
148
+
"narHash": "sha256-mmV2oPhQN+YF2wmnJzXX8tqgYmUYXUj3uUUBSTmYN5o=",
426
149
"owner": "NixOS",
427
150
"repo": "nixos-hardware",
428
-
"rev": "1fe3cc2bc5d2dc9c81cb4e63d2f67c1543340df1",
151
+
"rev": "72081c9fbbef63765ae82bff9727ea79cc86bd5b",
429
152
"type": "github"
430
153
},
431
154
"original": {
···
437
160
},
438
161
"nixpkgs": {
439
162
"locked": {
440
-
"lastModified": 1744098102,
441
-
"narHash": "sha256-tzCdyIJj9AjysC3OuKA+tMD/kDEDAF9mICPDU7ix0JA=",
442
-
"owner": "NixOS",
443
-
"repo": "nixpkgs",
444
-
"rev": "c8cd81426f45942bb2906d5ed2fe21d2f19d95b7",
445
-
"type": "github"
446
-
},
447
-
"original": {
448
-
"owner": "NixOS",
449
-
"ref": "nixos-unstable",
450
-
"repo": "nixpkgs",
451
-
"type": "github"
452
-
}
453
-
},
454
-
"nixpkgs_2": {
455
-
"locked": {
456
-
"lastModified": 1744463964,
457
-
"narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=",
163
+
"lastModified": 1745930157,
164
+
"narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=",
458
165
"owner": "NixOS",
459
166
"repo": "nixpkgs",
460
-
"rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650",
167
+
"rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae",
461
168
"type": "github"
462
169
},
463
170
"original": {
···
467
174
"type": "github"
468
175
}
469
176
},
470
-
"nixpkgs_3": {
471
-
"locked": {
472
-
"lastModified": 1735554305,
473
-
"narHash": "sha256-zExSA1i/b+1NMRhGGLtNfFGXgLtgo+dcuzHzaWA6w3Q=",
474
-
"owner": "nixos",
475
-
"repo": "nixpkgs",
476
-
"rev": "0e82ab234249d8eee3e8c91437802b32c74bb3fd",
477
-
"type": "github"
478
-
},
479
-
"original": {
480
-
"owner": "nixos",
481
-
"ref": "nixpkgs-unstable",
482
-
"repo": "nixpkgs",
483
-
"type": "github"
484
-
}
485
-
},
486
-
"plasma-manager": {
487
-
"inputs": {
488
-
"home-manager": [
489
-
"home-manager"
490
-
],
491
-
"nixpkgs": [
492
-
"nixpkgs"
493
-
]
494
-
},
495
-
"locked": {
496
-
"lastModified": 1742765550,
497
-
"narHash": "sha256-2vVIh2JrL6GAGfgCeY9e6iNKrBjs0Hw3bGQEAbwVs68=",
498
-
"owner": "nix-community",
499
-
"repo": "plasma-manager",
500
-
"rev": "b70be387276e632fe51232887f9e04e2b6ef8c16",
501
-
"type": "github"
502
-
},
503
-
"original": {
504
-
"owner": "nix-community",
505
-
"repo": "plasma-manager",
506
-
"type": "github"
507
-
}
508
-
},
509
-
"pre-commit-hooks-nix": {
510
-
"inputs": {
511
-
"flake-compat": [
512
-
"lanzaboote",
513
-
"flake-compat"
514
-
],
515
-
"gitignore": "gitignore",
516
-
"nixpkgs": [
517
-
"lanzaboote",
518
-
"nixpkgs"
519
-
]
520
-
},
521
-
"locked": {
522
-
"lastModified": 1740915799,
523
-
"narHash": "sha256-JvQvtaphZNmeeV+IpHgNdiNePsIpHD5U/7QN5AeY44A=",
524
-
"owner": "cachix",
525
-
"repo": "pre-commit-hooks.nix",
526
-
"rev": "42b1ba089d2034d910566bf6b40830af6b8ec732",
527
-
"type": "github"
528
-
},
529
-
"original": {
530
-
"owner": "cachix",
531
-
"repo": "pre-commit-hooks.nix",
532
-
"type": "github"
533
-
}
534
-
},
535
177
"root": {
536
178
"inputs": {
537
-
"blender-bin": "blender-bin",
538
-
"catppuccin": "catppuccin",
539
-
"ctp-discord-compiled": "ctp-discord-compiled",
540
-
"ctp-vscode-compiled": "ctp-vscode-compiled",
541
-
"fenix": "fenix",
542
-
"firefox-addons": "firefox-addons",
543
179
"flake-parts": "flake-parts",
544
-
"flake-utils": "flake-utils",
545
180
"ghostty": "ghostty",
546
181
"hjem": "hjem",
547
182
"hjem-rum": "hjem-rum",
548
-
"home-manager": "home-manager",
549
-
"krunner-nix": "krunner-nix",
550
-
"lanzaboote": "lanzaboote",
551
-
"nix-darwin": "nix-darwin",
552
183
"nix-index-database": "nix-index-database",
553
184
"nixos-hardware": "nixos-hardware",
554
-
"nixpkgs": "nixpkgs_2",
555
-
"plasma-manager": "plasma-manager",
556
-
"treefmt-nix": "treefmt-nix"
557
-
}
558
-
},
559
-
"rust-analyzer-src": {
560
-
"flake": false,
561
-
"locked": {
562
-
"lastModified": 1742296961,
563
-
"narHash": "sha256-gCpvEQOrugHWLimD1wTFOJHagnSEP6VYBDspq96Idu0=",
564
-
"owner": "rust-lang",
565
-
"repo": "rust-analyzer",
566
-
"rev": "15d87419f1a123d8f888d608129c3ce3ff8f13d4",
567
-
"type": "github"
568
-
},
569
-
"original": {
570
-
"owner": "rust-lang",
571
-
"ref": "nightly",
572
-
"repo": "rust-analyzer",
573
-
"type": "github"
574
-
}
575
-
},
576
-
"rust-overlay": {
577
-
"inputs": {
578
-
"nixpkgs": [
579
-
"lanzaboote",
580
-
"nixpkgs"
581
-
]
582
-
},
583
-
"locked": {
584
-
"lastModified": 1741228283,
585
-
"narHash": "sha256-VzqI+k/eoijLQ5am6rDFDAtFAbw8nltXfLBC6SIEJAE=",
586
-
"owner": "oxalica",
587
-
"repo": "rust-overlay",
588
-
"rev": "38e9826bc4296c9daf18bc1e6aa299f3e932a403",
589
-
"type": "github"
590
-
},
591
-
"original": {
592
-
"owner": "oxalica",
593
-
"repo": "rust-overlay",
594
-
"type": "github"
185
+
"nixpkgs": "nixpkgs"
595
186
}
596
187
},
597
188
"systems": {
···
606
197
"original": {
607
198
"owner": "nix-systems",
608
199
"repo": "default",
609
-
"type": "github"
610
-
}
611
-
},
612
-
"systems_2": {
613
-
"locked": {
614
-
"lastModified": 1681028828,
615
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
616
-
"owner": "nix-systems",
617
-
"repo": "default",
618
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
619
-
"type": "github"
620
-
},
621
-
"original": {
622
-
"owner": "nix-systems",
623
-
"repo": "default",
624
-
"type": "github"
625
-
}
626
-
},
627
-
"treefmt-nix": {
628
-
"inputs": {
629
-
"nixpkgs": "nixpkgs_3"
630
-
},
631
-
"locked": {
632
-
"lastModified": 1743748085,
633
-
"narHash": "sha256-uhjnlaVTWo5iD3LXics1rp9gaKgDRQj6660+gbUU3cE=",
634
-
"owner": "numtide",
635
-
"repo": "treefmt-nix",
636
-
"rev": "815e4121d6a5d504c0f96e5be2dd7f871e4fd99d",
637
-
"type": "github"
638
-
},
639
-
"original": {
640
-
"owner": "numtide",
641
-
"repo": "treefmt-nix",
642
200
"type": "github"
643
201
}
644
202
},
+51
-85
flake.nix
+51
-85
flake.nix
···
6
6
7
7
# NOTE: please keep this in alphabetical order.
8
8
9
-
blender-bin = {
10
-
url = "blender-bin";
11
-
inputs.nixpkgs.follows = "nixpkgs";
12
-
};
13
-
14
-
catppuccin.url = "github:catppuccin/nix";
15
-
16
-
ctp-discord-compiled = {
17
-
url = "github:catppuccin/discord/gh-pages";
18
-
flake = false;
19
-
};
20
-
21
-
ctp-vscode-compiled = {
22
-
url = "github:catppuccin/vscode/catppuccin-vsc-v3.14.0";
23
-
flake = false;
24
-
};
25
-
26
-
fenix = {
27
-
url = "github:nix-community/fenix/monthly";
28
-
inputs.nixpkgs.follows = "nixpkgs";
29
-
};
9
+
# ctp-discord-compiled = {
10
+
# url = "github:catppuccin/discord/gh-pages";
11
+
# flake = false;
12
+
# };
30
13
31
-
firefox-addons = {
32
-
url = "sourcehut:~rycee/nur-expressions?dir=pkgs/firefox-addons";
33
-
inputs = {
34
-
nixpkgs.follows = "nixpkgs";
35
-
flake-utils.follows = "flake-utils";
36
-
};
37
-
};
14
+
# ctp-vscode-compiled = {
15
+
# url = "github:catppuccin/vscode/catppuccin-vsc-v3.14.0";
16
+
# flake = false;
17
+
# };
38
18
39
19
flake-parts = {
40
20
url = "github:hercules-ci/flake-parts";
41
21
inputs.nixpkgs-lib.follows = "nixpkgs";
42
22
};
43
-
44
-
# Only for input deduplication
45
-
flake-utils.url = "github:numtide/flake-utils";
46
23
47
24
ghostty = {
48
25
url = "github:pluiedev/ghostty/edge";
···
53
30
};
54
31
55
32
hjem = {
56
-
url = "github:feel-co/hjem";
57
-
inputs.nixpkgs.follows = "nixpkgs";
33
+
url = "github:feel-co/hjem";
34
+
inputs.nixpkgs.follows = "nixpkgs";
58
35
};
59
36
60
37
hjem-rum = {
61
-
url = "github:snugnug/hjem-rum";
62
-
inputs.nixpkgs.follows = "nixpkgs";
63
-
};
64
-
65
-
krunner-nix = {
66
-
url = "github:pluiedev/krunner-nix";
38
+
url = "github:snugnug/hjem-rum";
67
39
inputs.nixpkgs.follows = "nixpkgs";
68
40
};
69
41
70
-
lanzaboote = {
71
-
url = "github:nix-community/lanzaboote";
72
-
inputs = {
73
-
flake-parts.follows = "flake-parts";
74
-
nixpkgs.follows = "nixpkgs";
75
-
};
76
-
};
77
-
78
-
home-manager = {
79
-
url = "github:nix-community/home-manager";
80
-
inputs.nixpkgs.follows = "nixpkgs";
81
-
};
42
+
# lanzaboote = {
43
+
# url = "github:nix-community/lanzaboote";
44
+
# inputs = {
45
+
# flake-parts.follows = "flake-parts";
46
+
# nixpkgs.follows = "nixpkgs";
47
+
# };
48
+
# };
82
49
83
-
nix-darwin = {
84
-
url = "github:LnL7/nix-darwin";
85
-
inputs.nixpkgs.follows = "nixpkgs";
86
-
};
50
+
# home-manager = {
51
+
# url = "github:nix-community/home-manager";
52
+
# inputs.nixpkgs.follows = "nixpkgs";
53
+
# };
87
54
88
55
nix-index-database = {
89
56
url = "github:nix-community/nix-index-database";
···
92
59
93
60
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
94
61
95
-
plasma-manager = {
96
-
url = "github:nix-community/plasma-manager";
97
-
inputs = {
98
-
home-manager.follows = "home-manager";
99
-
nixpkgs.follows = "nixpkgs";
100
-
};
101
-
};
102
-
103
-
treefmt-nix.url = "github:numtide/treefmt-nix";
62
+
# plasma-manager = {
63
+
# url = "github:nix-community/plasma-manager";
64
+
# inputs = {
65
+
# home-manager.follows = "home-manager";
66
+
# nixpkgs.follows = "nixpkgs";
67
+
# };
68
+
# };
104
69
};
105
70
106
71
outputs =
107
72
inputs:
108
73
let
74
+
inherit (inputs.nixpkgs) lib;
109
75
packages' =
110
76
pkgs':
111
77
pkgs'.lib.packagesFromDirectoryRecursive {
···
114
80
};
115
81
in
116
82
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
117
-
imports = [
118
-
./hm-modules
119
-
./systems
120
-
];
121
-
systems = [
122
-
"x86_64-linux"
123
-
"x86_64-darwin"
124
-
];
83
+
imports = [ ./systems ];
125
84
126
-
flake.overlays.default = _: packages';
85
+
systems = lib.systems.flakeExposed;
86
+
87
+
flake = {
88
+
overlays.default = _: packages';
89
+
hjemModules = {
90
+
hjem-ext.imports = lib.fileset.toList (
91
+
lib.fileset.fileFilter (file: file.hasExt "nix") ./modules/hjem-ext
92
+
);
93
+
hjem-ctp.imports = lib.fileset.toList (
94
+
lib.fileset.fileFilter (file: file.hasExt "nix") ./modules/hjem-ctp
95
+
);
96
+
};
97
+
};
127
98
128
99
perSystem =
129
100
{ pkgs, ... }:
130
101
{
131
102
packages = packages' pkgs;
132
-
};
133
103
134
-
# perSystem =
135
-
# { pkgs, ... }:
136
-
# let
137
-
# treefmt = inputs.treefmt-nix.lib.evalModule pkgs ./treefmt.nix;
138
-
# formatter = treefmt.config.build.wrapper;
139
-
# in
140
-
# {
141
-
# inherit formatter;
142
-
# devShells.default = pkgs.mkShell { packages = [ formatter ]; };
143
-
# checks.formatting = treefmt.config.build.check inputs.self;
144
-
# };
104
+
devShells.default = pkgs.mkShell {
105
+
packages = with pkgs; [
106
+
nil
107
+
nixfmt-rfc-style
108
+
];
109
+
};
110
+
};
145
111
};
146
112
}
-19
hm-modules/ctp-plus/default.nix
-19
hm-modules/ctp-plus/default.nix
···
1
-
{ inputs, ... }:
2
-
{
3
-
config,
4
-
lib,
5
-
pkgs,
6
-
...
7
-
}@args:
8
-
let
9
-
args' = args // {
10
-
inherit inputs;
11
-
ctpLib = import "${inputs.catppuccin}/modules/lib" { inherit config lib pkgs; };
12
-
};
13
-
in
14
-
{
15
-
imports = map (p: import p args') [
16
-
./plasma.nix
17
-
./vencord.nix
18
-
];
19
-
}
hm-modules/ctp-plus/plasma.nix
modules/hjem-ctp/plasma.nix
hm-modules/ctp-plus/plasma.nix
modules/hjem-ctp/plasma.nix
hm-modules/ctp-plus/vencord.nix
modules/hjem-ctp/vencord.nix
hm-modules/ctp-plus/vencord.nix
modules/hjem-ctp/vencord.nix
-10
hm-modules/default.nix
-10
hm-modules/default.nix
hm-modules/hm-plus/README.md
modules/hjem-ext/README.md
hm-modules/hm-plus/README.md
modules/hjem-ext/README.md
-6
hm-modules/hm-plus/default.nix
-6
hm-modules/hm-plus/default.nix
-48
hm-modules/hm-plus/programs/1password.nix
-48
hm-modules/hm-plus/programs/1password.nix
···
1
-
{
2
-
lib,
3
-
pkgs,
4
-
config,
5
-
...
6
-
}:
7
-
let
8
-
inherit (lib)
9
-
mkDefault
10
-
mkIf
11
-
mkEnableOption
12
-
mkPackageOption
13
-
optional
14
-
getExe'
15
-
;
16
-
17
-
cfg = config.programs._1password;
18
-
in
19
-
{
20
-
options.programs._1password = {
21
-
enable = mkEnableOption "1Password";
22
-
23
-
package = mkPackageOption pkgs "1Password" { default = [ "_1password-gui" ]; };
24
-
25
-
autostart = mkEnableOption "autostarting 1Password";
26
-
27
-
enableSshAgent = mkEnableOption "1Password's SSH agent";
28
-
};
29
-
config = mkIf cfg.enable {
30
-
home.packages =
31
-
[ cfg.package ]
32
-
++ optional cfg.autostart (
33
-
pkgs.makeAutostartItem {
34
-
name = "1password";
35
-
inherit (cfg) package;
36
-
}
37
-
);
38
-
39
-
programs = mkIf cfg.enableSshAgent {
40
-
git.signer = getExe' cfg.package "op-ssh-sign";
41
-
ssh.enable = mkDefault true;
42
-
ssh.extraConfig = "IdentityAgent ${config.home.homeDirectory}/.1password/agent.sock";
43
-
};
44
-
45
-
# Some tools like Jujutsu don't care about ~/.ssh/config, so we have to set this manually
46
-
home.sessionVariables.SSH_AUTH_SOCK = mkIf cfg.enableSshAgent "${config.home.homeDirectory}/.1password/agent.sock";
47
-
};
48
-
}
-10
hm-modules/hm-plus/programs/default.nix
-10
hm-modules/hm-plus/programs/default.nix
-73
hm-modules/hm-plus/programs/discord.nix
-73
hm-modules/hm-plus/programs/discord.nix
···
1
-
{
2
-
config,
3
-
lib,
4
-
pkgs,
5
-
...
6
-
}:
7
-
let
8
-
inherit (lib)
9
-
mkEnableOption
10
-
mkPackageOption
11
-
mkOption
12
-
mkIf
13
-
optionalAttrs
14
-
types
15
-
;
16
-
cfg = config.programs.discord;
17
-
format = pkgs.formats.json { };
18
-
in
19
-
{
20
-
options.programs.discord = {
21
-
enable = mkEnableOption "Discord";
22
-
23
-
package = mkPackageOption pkgs "Discord" { default = [ "discord" ]; };
24
-
25
-
settings = mkOption {
26
-
inherit (format) type;
27
-
description = ''
28
-
Configuration written to {file}`$XDG_CONFIG_HOME/discord/settings.json`.
29
-
'';
30
-
default = { };
31
-
};
32
-
33
-
openAsar.enable = mkEnableOption "OpenASAR";
34
-
35
-
vencord = {
36
-
enable = mkEnableOption "Vencord";
37
-
38
-
settings = mkOption {
39
-
inherit (format) type;
40
-
description = ''
41
-
Configuration written to {file}`$XDG_CONFIG_HOME/Vencord/settings/settings.json`.
42
-
'';
43
-
default = { };
44
-
};
45
-
46
-
css = mkOption {
47
-
type = types.lines;
48
-
description = ''
49
-
Style sheet written to {file}`$XDG_CONFIG_HOME/Vencord/settings/quickCss.css`.
50
-
'';
51
-
default = "";
52
-
};
53
-
};
54
-
};
55
-
56
-
config = mkIf cfg.enable {
57
-
home.packages = [
58
-
(cfg.package.override {
59
-
withOpenASAR = cfg.openAsar.enable;
60
-
withVencord = cfg.vencord.enable;
61
-
})
62
-
];
63
-
64
-
xdg.configFile =
65
-
{
66
-
"discord/settings.json".source = format.generate "discord-settings.json" cfg.settings;
67
-
}
68
-
// optionalAttrs cfg.vencord.enable {
69
-
"Vencord/settings/settings.json".source = format.generate "vencord-settings.json" cfg.vencord.settings;
70
-
"Vencord/settings/quickCss.css".text = cfg.vencord.css;
71
-
};
72
-
};
73
-
}
-137
hm-modules/hm-plus/programs/fcitx5/default.nix
-137
hm-modules/hm-plus/programs/fcitx5/default.nix
···
1
-
{
2
-
config,
3
-
osConfig,
4
-
lib,
5
-
pkgs,
6
-
...
7
-
}:
8
-
let
9
-
inherit (lib)
10
-
mkMerge
11
-
mkIf
12
-
mkOption
13
-
types
14
-
literalExpression
15
-
;
16
-
im = config.i18n.inputMethod;
17
-
cfg = im.fcitx5;
18
-
19
-
fcitx5Package =
20
-
if cfg.plasma6Support then
21
-
pkgs.qt6Packages.fcitx5-with-addons.override { inherit (cfg) addons; }
22
-
else
23
-
pkgs.libsForQt5.fcitx5-with-addons;
24
-
25
-
fcitx5Package' = fcitx5Package.override { inherit (cfg) addons; };
26
-
27
-
format = pkgs.formats.ini { };
28
-
formatWithGlobalSection = pkgs.formats.iniWithGlobalSection { };
29
-
in
30
-
{
31
-
imports = [ ./rime.nix ];
32
-
33
-
options.i18n.inputMethod.fcitx5 = {
34
-
plasma6Support = mkOption {
35
-
type = types.bool;
36
-
default = osConfig.services.desktopManager.plasma6.enable;
37
-
defaultText = literalExpression "config.services.desktopManager.plasma6.enable";
38
-
description = ''
39
-
Use qt6 versions of fcitx5 packages.
40
-
Required for configuring fcitx5 in KDE System Settings.
41
-
'';
42
-
};
43
-
quickPhrase = mkOption {
44
-
type = with types; attrsOf str;
45
-
default = { };
46
-
example = literalExpression ''
47
-
{
48
-
smile = "(・∀・)";
49
-
angry = "( ̄ー ̄)";
50
-
}
51
-
'';
52
-
description = "Quick phrases.";
53
-
};
54
-
quickPhraseFiles = mkOption {
55
-
type = with types; attrsOf path;
56
-
default = { };
57
-
example = literalExpression ''
58
-
{
59
-
words = ./words.mb;
60
-
numbers = ./numbers.mb;
61
-
}
62
-
'';
63
-
description = "Quick phrase files.";
64
-
};
65
-
settings = {
66
-
globalOptions = mkOption {
67
-
type = types.submodule { freeformType = format.type; };
68
-
default = { };
69
-
description = ''
70
-
The global options in `config` file in ini format.
71
-
'';
72
-
};
73
-
inputMethod = mkOption {
74
-
type = types.submodule { freeformType = format.type; };
75
-
default = { };
76
-
description = ''
77
-
The input method configure in `profile` file in ini format.
78
-
'';
79
-
};
80
-
addons = mkOption {
81
-
type = with types; (attrsOf anything);
82
-
default = { };
83
-
description = ''
84
-
The addon configures in `conf` folder in ini format with global sections.
85
-
Each item is written to the corresponding file.
86
-
'';
87
-
example = literalExpression "{ pinyin.globalSection.EmojiEnabled = \"True\"; }";
88
-
};
89
-
};
90
-
ignoreUserConfig = lib.mkOption {
91
-
type = lib.types.bool;
92
-
default = false;
93
-
description = ''
94
-
Ignore the user configures. **Warning**: When this is enabled, the
95
-
user config files are totally ignored and the user dict can't be saved
96
-
and loaded.
97
-
'';
98
-
};
99
-
};
100
-
101
-
config = mkIf (im.enabled == "fcitx5") {
102
-
# override HM defaults
103
-
i18n.inputMethod.package = lib.mkForce fcitx5Package';
104
-
105
-
i18n.inputMethod.fcitx5.addons =
106
-
lib.optionals (cfg.quickPhrase != { }) [
107
-
(pkgs.writeTextDir "share/fcitx5/data/QuickPhrase.mb" (
108
-
lib.concatStringsSep "\n" (lib.mapAttrsToList (name: value: "${name} ${value}") cfg.quickPhrase)
109
-
))
110
-
]
111
-
++ lib.optionals (cfg.quickPhraseFiles != { }) [
112
-
(pkgs.linkFarm "quickPhraseFiles" (
113
-
lib.mapAttrs' (
114
-
name: value: lib.nameValuePair "share/fcitx5/data/quickphrase.d/${name}.mb" value
115
-
) cfg.quickPhraseFiles
116
-
))
117
-
];
118
-
119
-
xdg.configFile =
120
-
let
121
-
optionalFile =
122
-
p: f: v:
123
-
lib.optionalAttrs (v != { }) { "fcitx5/${p}".source = f p v; };
124
-
in
125
-
lib.attrsets.mergeAttrsList [
126
-
(optionalFile "config" format cfg.settings.globalOptions)
127
-
(optionalFile "profile" format cfg.settings.inputMethod)
128
-
(lib.concatMapAttrs (
129
-
name: value: optionalFile "conf/${name}.conf" formatWithGlobalSection value
130
-
) cfg.settings.addons)
131
-
];
132
-
133
-
home.sessionVariables = mkMerge [
134
-
(mkIf cfg.ignoreUserConfig { SKIP_FCITX_USER_PATH = "1"; })
135
-
];
136
-
};
137
-
}
-46
hm-modules/hm-plus/programs/fcitx5/rime.nix
-46
hm-modules/hm-plus/programs/fcitx5/rime.nix
···
1
-
{
2
-
config,
3
-
lib,
4
-
pkgs,
5
-
...
6
-
}:
7
-
let
8
-
inherit (lib)
9
-
mkIf
10
-
mkEnableOption
11
-
mkOption
12
-
mapAttrs'
13
-
nameValuePair
14
-
types
15
-
;
16
-
cfg = config.i18n.inputMethod.fcitx5.rime;
17
-
format = pkgs.formats.yaml { };
18
-
in
19
-
{
20
-
options.i18n.inputMethod.fcitx5.rime = {
21
-
enable = mkEnableOption "the Rime input engine for Fcitx5";
22
-
23
-
dataPkgs = mkOption {
24
-
type = types.listOf types.package;
25
-
default = [ pkgs.rime-data ];
26
-
};
27
-
28
-
settings = mkOption {
29
-
inherit (format) type;
30
-
default = { };
31
-
example = {
32
-
default.patch.schema_list = [
33
-
{ schema = "luna_pinyin_simp"; }
34
-
{ schema = "luna_pinyin"; }
35
-
];
36
-
};
37
-
};
38
-
};
39
-
40
-
config = mkIf cfg.enable {
41
-
i18n.inputMethod.fcitx5.addons = [ (pkgs.fcitx5-rime.override { rimeDataPkgs = cfg.dataPkgs; }) ];
42
-
xdg.dataFile = mapAttrs' (
43
-
n: v: nameValuePair "fcitx5/rime/${n}.custom.yaml" { source = format.generate n v; }
44
-
) cfg.settings;
45
-
};
46
-
}
-45
hm-modules/hm-plus/programs/git.nix
-45
hm-modules/hm-plus/programs/git.nix
···
1
-
{
2
-
lib,
3
-
pkgs,
4
-
config,
5
-
...
6
-
}:
7
-
let
8
-
inherit (lib)
9
-
getExe
10
-
getExe'
11
-
mkIf
12
-
mkOption
13
-
types
14
-
;
15
-
cfg = config.programs.git;
16
-
in
17
-
{
18
-
options.programs.git = {
19
-
signingFormat = mkOption {
20
-
type = types.enum [
21
-
"openpgp"
22
-
"ssh"
23
-
"x509"
24
-
];
25
-
default = "openpgp";
26
-
};
27
-
28
-
signer = mkOption {
29
-
type = types.path;
30
-
default =
31
-
{
32
-
openpgp = getExe' pkgs.gnupg "gpg2";
33
-
ssh = getExe pkgs.openssh;
34
-
x509 = getExe' pkgs.gnupg "gpgsm";
35
-
}
36
-
.${cfg.signingFormat};
37
-
};
38
-
};
39
-
config = mkIf cfg.enable {
40
-
programs.git.extraConfig.gpg = {
41
-
format = cfg.signingFormat;
42
-
${cfg.signingFormat}.program = cfg.signer;
43
-
};
44
-
};
45
-
}
+5
-4
hm-modules/hm-plus/programs/moar.nix
modules/hjem-ext/programs/moar.nix
+5
-4
hm-modules/hm-plus/programs/moar.nix
modules/hjem-ext/programs/moar.nix
···
5
5
...
6
6
}:
7
7
let
8
-
cfg = config.programs.moar;
8
+
cfg = config.ext.programs.moar;
9
9
10
10
toFlag = k: v: if lib.isBool v then
11
11
lib.optionalString (v) "-${k}"
···
16
16
17
17
in
18
18
{
19
-
options.programs.moar = {
19
+
options.ext.programs.moar = {
20
20
enable = lib.mkEnableOption "Moar";
21
21
22
22
package = lib.mkPackageOption pkgs "moar" {};
···
32
32
};
33
33
};
34
34
35
-
config = lib.mkIf (cfg.enable) {
36
-
home.sessionVariables = {
35
+
config = lib.mkIf cfg.enable {
36
+
packages = [ cfg.package ];
37
+
environment.sessionVariables = {
37
38
PAGER = "moar";
38
39
MOAR = lib.concatStringsSep " " (lib.mapAttrsToList toFlag cfg.settings);
39
40
};
+17
-9
hm-modules/hm-plus/programs/vesktop.nix
modules/hjem-ext/programs/vesktop.nix
+17
-9
hm-modules/hm-plus/programs/vesktop.nix
modules/hjem-ext/programs/vesktop.nix
···
13
13
types
14
14
optionalAttrs
15
15
;
16
-
cfg = config.programs.vesktop;
16
+
cfg = config.ext.programs.vesktop;
17
17
format = pkgs.formats.json { };
18
18
in
19
19
{
20
-
options.programs.vesktop = {
20
+
options.ext.programs.vesktop = {
21
21
enable = mkEnableOption "Vesktop";
22
22
23
23
package = mkPackageOption pkgs "Vesktop" { default = [ "vesktop" ]; };
···
58
58
};
59
59
60
60
config = mkIf cfg.enable {
61
-
home.packages = [ (cfg.package.override { withSystemVencord = cfg.vencord.useSystemPackage; }) ];
61
+
packages = [
62
+
(cfg.package.override {
63
+
withSystemVencord = cfg.vencord.useSystemPackage;
64
+
})
65
+
];
62
66
63
-
xdg.configFile = {
64
-
"vesktop/settings.json".source = format.generate "vesktop-settings.json" cfg.settings;
65
-
} // optionalAttrs cfg.vencord.enable {
66
-
"vesktop/settings/settings.json".source = format.generate "vencord-settings.json" cfg.vencord.settings;
67
-
"vesktop/settings/quickCss.css".text = cfg.vencord.css;
68
-
};
67
+
files =
68
+
{
69
+
".config/vesktop/settings.json".source = format.generate "vesktop-settings.json" cfg.settings;
70
+
}
71
+
// optionalAttrs cfg.vencord.enable {
72
+
".config/vesktop/settings/settings.json".source =
73
+
format.generate "vencord-settings.json" cfg.vencord.settings;
74
+
75
+
".config/vesktop/settings/quickCss.css".text = cfg.vencord.css;
76
+
};
69
77
};
70
78
}
+31
modules/hjem-ext/programs/direnv.nix
+31
modules/hjem-ext/programs/direnv.nix
···
1
+
{
2
+
config,
3
+
pkgs,
4
+
lib,
5
+
...
6
+
}:
7
+
let
8
+
cfg = config.ext.programs.direnv;
9
+
in
10
+
{
11
+
options.ext.programs.direnv = {
12
+
enable = lib.mkEnableOption "direnv";
13
+
package = lib.mkPackageOption pkgs "direnv" { };
14
+
15
+
nix-direnv = {
16
+
enable = lib.mkEnableOption "nix-direnv";
17
+
package = lib.mkPackageOption pkgs "nix-direnv" { };
18
+
};
19
+
};
20
+
21
+
config = lib.mkIf cfg.enable {
22
+
packages = [ cfg.package ];
23
+
24
+
rum.programs.fish.earlyConfigFiles.direnv = ''
25
+
${lib.getExe cfg.package} hook fish | source
26
+
'';
27
+
28
+
files.".config/direnv/lib/hm-nix-direnv.sh".source =
29
+
lib.mkIf cfg.nix-direnv.enable "${cfg.nix-direnv.package}/share/nix-direnv/direnvrc";
30
+
};
31
+
}
+29
modules/hjem-ext/programs/git.nix
+29
modules/hjem-ext/programs/git.nix
···
1
+
{
2
+
config,
3
+
pkgs,
4
+
lib,
5
+
...
6
+
}:
7
+
let
8
+
cfg = config.ext.programs.git;
9
+
format = pkgs.formats.gitIni { };
10
+
in
11
+
{
12
+
options.ext.programs.git = {
13
+
enable = lib.mkEnableOption "Git";
14
+
package = lib.mkPackageOption pkgs "git" { };
15
+
16
+
settings = lib.mkOption {
17
+
type = lib.types.submodule {
18
+
freeformType = format.type;
19
+
};
20
+
default = { };
21
+
};
22
+
};
23
+
24
+
config = lib.mkIf cfg.enable {
25
+
packages = [ cfg.package ];
26
+
files.".config/git/config".source = lib.mkIf (cfg.settings != { })
27
+
(format.generate "git-config" cfg.settings);
28
+
};
29
+
}
+44
modules/hjem-ext/programs/hyfetch.nix
+44
modules/hjem-ext/programs/hyfetch.nix
···
1
+
{
2
+
config,
3
+
pkgs,
4
+
lib,
5
+
...
6
+
}:
7
+
let
8
+
cfg = config.ext.programs.hyfetch;
9
+
format = pkgs.formats.json { };
10
+
configFile = format.generate "hyfetch.json" cfg.settings;
11
+
in
12
+
{
13
+
options.ext.programs.hyfetch = {
14
+
enable = lib.mkEnableOption "Hyfetch";
15
+
package = lib.mkPackageOption pkgs "hyfetch" { };
16
+
17
+
settings = lib.mkOption {
18
+
type = lib.types.submodule {
19
+
freeformType = format.type;
20
+
21
+
options = {
22
+
backend = lib.mkOption {
23
+
type = lib.types.enum [
24
+
"neofetch"
25
+
"fastfetch"
26
+
"qwqfetch"
27
+
];
28
+
};
29
+
};
30
+
};
31
+
default = { };
32
+
};
33
+
};
34
+
35
+
config = lib.mkIf cfg.enable {
36
+
packages =
37
+
[ cfg.package ]
38
+
++ lib.optional (cfg.settings.backend == "fastfetch") pkgs.fastfetch
39
+
++ lib.optional (cfg.settings.backend == "neofetch") pkgs.neofetch;
40
+
# TODO: add qwqfetch when it's added to nixpkgs
41
+
42
+
files.".config/hyfetch.json".source = lib.mkIf (cfg.settings != { }) configFile;
43
+
};
44
+
}
+29
modules/hjem-ext/programs/jujutsu.nix
+29
modules/hjem-ext/programs/jujutsu.nix
···
1
+
{
2
+
config,
3
+
pkgs,
4
+
lib,
5
+
...
6
+
}:
7
+
let
8
+
cfg = config.ext.programs.jujutsu;
9
+
format = pkgs.formats.toml { };
10
+
in
11
+
{
12
+
options.ext.programs.jujutsu = {
13
+
enable = lib.mkEnableOption "Jujutsu";
14
+
package = lib.mkPackageOption pkgs "jujutsu" { };
15
+
16
+
settings = lib.mkOption {
17
+
type = lib.types.submodule {
18
+
freeformType = format.type;
19
+
};
20
+
default = { };
21
+
};
22
+
};
23
+
24
+
config = lib.mkIf cfg.enable {
25
+
packages = [ cfg.package ];
26
+
files.".config/jj/config.toml".source = lib.mkIf (cfg.settings != { })
27
+
(format.generate "jj-config.toml" cfg.settings);
28
+
};
29
+
}
-19
packages/catppuccin-fcitx5/package.nix
-19
packages/catppuccin-fcitx5/package.nix
···
1
-
{ stdenvNoCC, fetchFromGitHub }:
2
-
stdenvNoCC.mkDerivation {
3
-
pname = "catppuccin-fcitx5";
4
-
version = "2022-10-05";
5
-
6
-
src = fetchFromGitHub {
7
-
owner = "catppuccin";
8
-
repo = "fcitx5";
9
-
rev = "ce244cfdf43a648d984719fdfd1d60aab09f5c97";
10
-
hash = "sha256-uFaCbyrEjv4oiKUzLVFzw+UY54/h7wh2cntqeyYwGps=";
11
-
};
12
-
13
-
installPhase = ''
14
-
runHook preInstall
15
-
mkdir -p $out/share/fcitx5
16
-
cp -r src $out/share/fcitx5/themes
17
-
runHook postInstall
18
-
'';
19
-
}
+22
packages/catppuccin-fish/package.nix
+22
packages/catppuccin-fish/package.nix
···
1
+
{
2
+
stdenvNoCC,
3
+
fetchFromGitHub,
4
+
}:
5
+
stdenvNoCC.mkDerivation {
6
+
pname = "catppuccin-fish";
7
+
version = "0-unstable-2025-03-01";
8
+
9
+
src = fetchFromGitHub {
10
+
owner = "catppuccin";
11
+
repo = "fish";
12
+
rev = "6a85af2ff722ad0f9fbc8424ea0a5c454661dfed";
13
+
hash = "sha256-Oc0emnIUI4LV7QJLs4B2/FQtCFewRFVp7EDv8GawFsA=";
14
+
};
15
+
16
+
installPhase = ''
17
+
runHook preInstall
18
+
mkdir -p $out/share/fish
19
+
cp -r themes $out/share/fish/themes
20
+
runHook postInstall
21
+
'';
22
+
}
-9
roles/audio/default.nix
-9
roles/audio/default.nix
-21
roles/audio/nixos.nix
-21
roles/audio/nixos.nix
···
1
-
{ config, lib, ... }:
2
-
let
3
-
cfg = config.roles.audio;
4
-
inherit (lib) mkIf;
5
-
in
6
-
{
7
-
config = mkIf cfg.enable {
8
-
services.pulseaudio.enable = false;
9
-
security.rtkit.enable = true;
10
-
11
-
roles.base.user.extraGroups = [ "rtkit" ];
12
-
13
-
services.pipewire = {
14
-
enable = true;
15
-
wireplumber.enable = true;
16
-
alsa.enable = true;
17
-
jack.enable = true;
18
-
pulse.enable = true;
19
-
};
20
-
};
21
-
}
-86
roles/base/default.nix
-86
roles/base/default.nix
···
1
-
{ config, lib, ... }:
2
-
let
3
-
inherit (lib)
4
-
mkAliasOptionModule
5
-
mkEnableOption
6
-
mkOption
7
-
types
8
-
optional
9
-
;
10
-
11
-
cfg = config.roles.base;
12
-
in
13
-
{
14
-
options.roles.base = {
15
-
username = mkOption {
16
-
type = types.str;
17
-
example = "cavej";
18
-
description = "The primary user's internal user name.";
19
-
};
20
-
realName = mkOption {
21
-
type = types.nullOr types.str;
22
-
default = null;
23
-
example = "Cave";
24
-
description = "The primary user's real name.";
25
-
};
26
-
fullName = mkOption {
27
-
type = types.nullOr types.str;
28
-
default = null;
29
-
example = "Cave Johnson";
30
-
description = "The primary user's full name.";
31
-
};
32
-
publicKey = mkOption {
33
-
type = types.nullOr types.str;
34
-
default = null;
35
-
description = "The primary user's public key.";
36
-
};
37
-
38
-
canSudo = mkEnableOption "admin permissions for the primary user";
39
-
};
40
-
41
-
imports = [
42
-
(mkAliasOptionModule [ "hm" ] [
43
-
"home-manager"
44
-
"users"
45
-
cfg.username
46
-
])
47
-
(mkAliasOptionModule
48
-
[
49
-
"roles"
50
-
"base"
51
-
"user"
52
-
]
53
-
[
54
-
"users"
55
-
"users"
56
-
cfg.username
57
-
]
58
-
)
59
-
];
60
-
61
-
config = {
62
-
assertions = [
63
-
{
64
-
assertion = builtins.hasAttr "username" cfg;
65
-
message = "base role username has to be set";
66
-
}
67
-
];
68
-
69
-
nix.settings.trusted-users = optional cfg.canSudo cfg.username;
70
-
71
-
home-manager = {
72
-
backupFileExtension = "backup";
73
-
useGlobalPkgs = true;
74
-
useUserPackages = true;
75
-
};
76
-
77
-
hm = {
78
-
home = {
79
-
inherit (cfg) username;
80
-
homeDirectory = config.roles.base.user.home;
81
-
};
82
-
83
-
programs.home-manager.enable = true;
84
-
};
85
-
};
86
-
}
-18
roles/base/nixos.nix
-18
roles/base/nixos.nix
···
1
-
{ config, lib, ... }:
2
-
let
3
-
inherit (lib.lists) optional;
4
-
5
-
cfg = config.roles.base;
6
-
in
7
-
{
8
-
config = {
9
-
roles.base.user = {
10
-
isNormalUser = true;
11
-
description = cfg.realName;
12
-
extraGroups = optional cfg.canSudo "wheel";
13
-
home = "/home/${cfg.username}";
14
-
};
15
-
16
-
hm.home.stateVersion = config.system.stateVersion;
17
-
};
18
-
}
-13
roles/boot/default.nix
-13
roles/boot/default.nix
-20
roles/boot/lanzaboote/default.nix
-20
roles/boot/lanzaboote/default.nix
···
1
-
{
2
-
config,
3
-
lib,
4
-
inputs,
5
-
...
6
-
}:
7
-
{
8
-
imports = [ inputs.lanzaboote.nixosModules.lanzaboote ];
9
-
10
-
options.roles.boot.lanzaboote.enable = lib.mkEnableOption "Lanzaboote, a secure boot implementation for NixOS";
11
-
12
-
config = lib.mkIf config.roles.boot.lanzaboote.enable {
13
-
boot.lanzaboote = {
14
-
enable = true;
15
-
pkiBundle = "/etc/secureboot";
16
-
};
17
-
18
-
boot.loader.systemd-boot.enable = lib.mkForce false;
19
-
};
20
-
}
-17
roles/boot/nixos.nix
-17
roles/boot/nixos.nix
···
1
-
{ config, lib, ... }:
2
-
let
3
-
cfg = config.roles.boot;
4
-
in
5
-
{
6
-
config = lib.mkIf cfg.enable {
7
-
boot.loader = {
8
-
systemd-boot = {
9
-
enable = true;
10
-
editor = false;
11
-
consoleMode = "2";
12
-
configurationLimit = 10;
13
-
};
14
-
efi.canTouchEfiVariables = true;
15
-
};
16
-
};
17
-
}
-11
roles/darwin.nix
-11
roles/darwin.nix
-8
roles/default.nix
-8
roles/default.nix
-71
roles/email/default.nix
-71
roles/email/default.nix
···
1
-
{ config, lib, ... }:
2
-
let
3
-
cfg = config.roles.email;
4
-
inherit (lib)
5
-
mkEnableOption
6
-
mkIf
7
-
mkOption
8
-
types
9
-
;
10
-
11
-
serverModule.options = {
12
-
host = mkOption {
13
-
type = types.str;
14
-
example = "imap.migadu.com";
15
-
};
16
-
port = mkOption {
17
-
type = types.port;
18
-
example = 143;
19
-
};
20
-
};
21
-
hostModule.options = {
22
-
imap = mkOption {
23
-
type = types.submodule serverModule;
24
-
example = {
25
-
host = "imap.migadu.com";
26
-
port = 993;
27
-
};
28
-
};
29
-
smtp = mkOption {
30
-
type = types.submodule serverModule;
31
-
example = {
32
-
host = "smtp.migadu.com";
33
-
port = 465;
34
-
};
35
-
};
36
-
};
37
-
emailModule.options = {
38
-
primary = mkOption {
39
-
type = types.bool;
40
-
default = false;
41
-
example = true;
42
-
};
43
-
realName = mkOption {
44
-
type = types.str;
45
-
example = "Leah";
46
-
};
47
-
host = mkOption { type = types.submodule hostModule; };
48
-
};
49
-
in
50
-
{
51
-
options.roles.email = {
52
-
enable = mkEnableOption "E-Mail configurations";
53
-
54
-
accounts = mkOption {
55
-
type = types.attrsOf (types.submodule emailModule);
56
-
default = { };
57
-
};
58
-
};
59
-
60
-
config.hm.accounts.email =
61
-
let
62
-
accounts = builtins.mapAttrs (address: account: rec {
63
-
inherit (account) primary realName;
64
-
inherit (account.host) imap smtp;
65
-
inherit address;
66
-
userName = address; # Use the address as the IMAP/SMTP username by default
67
-
thunderbird.enable = true;
68
-
}) cfg.accounts;
69
-
in
70
-
mkIf cfg.enable { inherit accounts; };
71
-
}
-7
roles/fish/default.nix
-7
roles/fish/default.nix
-18
roles/fish/nixos.nix
-18
roles/fish/nixos.nix
···
1
-
{
2
-
config,
3
-
lib,
4
-
pkgs,
5
-
...
6
-
}:
7
-
let
8
-
inherit (lib) mkIf;
9
-
cfg = config.roles.fish;
10
-
in
11
-
{
12
-
config = mkIf cfg.enable {
13
-
programs.fish.enable = true;
14
-
hm.programs.fish.enable = true;
15
-
16
-
roles.base.user.shell = mkIf cfg.defaultShell pkgs.fish;
17
-
};
18
-
}
-8
roles/fonts/darwin.nix
-8
roles/fonts/darwin.nix
-17
roles/fonts/default.nix
-17
roles/fonts/default.nix
···
1
-
{ lib, ... }:
2
-
let
3
-
inherit (lib) mkEnableOption mkOption types;
4
-
in
5
-
{
6
-
options.roles.fonts = {
7
-
enable = mkEnableOption "default fonts";
8
-
packages = mkOption {
9
-
type = types.listOf types.package;
10
-
default = [ ];
11
-
};
12
-
defaults = mkOption {
13
-
type = types.attrsOf (types.listOf types.str);
14
-
default = { };
15
-
};
16
-
};
17
-
}
-18
roles/fonts/nixos.nix
-18
roles/fonts/nixos.nix
···
1
-
{ config, lib, ... }:
2
-
let
3
-
cfg = config.roles.fonts;
4
-
inherit (lib) mkIf;
5
-
in
6
-
{
7
-
config = mkIf cfg.enable {
8
-
fonts = {
9
-
inherit (cfg) packages;
10
-
enableDefaultPackages = true;
11
-
12
-
fontconfig = {
13
-
enable = true;
14
-
defaultFonts = cfg.defaults;
15
-
};
16
-
};
17
-
};
18
-
}
-37
roles/mirrors/default.nix
-37
roles/mirrors/default.nix
···
1
-
{
2
-
config,
3
-
lib,
4
-
...
5
-
}:
6
-
let
7
-
inherit (lib)
8
-
mkEnableOption
9
-
mkIf
10
-
mkOption
11
-
types
12
-
;
13
-
14
-
cfg = config.roles.mirrors;
15
-
in
16
-
{
17
-
options.roles.mirrors.chinese = {
18
-
enable = mkEnableOption "Chinese mirror sites to speed up downloads in Mainland China";
19
-
20
-
sites = mkOption {
21
-
description = "A list of Chinese mirror sites to use.";
22
-
type = types.listOf types.str;
23
-
default = [
24
-
"https://mirrors.ustc.edu.cn"
25
-
"https://mirrors6.tuna.tsinghua.edu.cn"
26
-
"https://mirrors.tuna.tsinghua.edu.cn"
27
-
# "https://mirror.sjtu.edu.cn"
28
-
];
29
-
};
30
-
};
31
-
32
-
config = mkIf cfg.chinese.enable {
33
-
# cache.nixos.org is *unbearably* slow when accessed from Mainland China.
34
-
# Fortunately, mirror sites exist... Hooray(?)
35
-
nix.settings.substituters = map (url: "${url}/nix-channels/store") cfg.chinese.sites;
36
-
};
37
-
}
-11
roles/networking/default.nix
-11
roles/networking/default.nix
-18
roles/networking/nixos.nix
-18
roles/networking/nixos.nix
···
1
-
{
2
-
config,
3
-
lib,
4
-
pkgs,
5
-
...
6
-
}:
7
-
let
8
-
inherit (lib) mkIf getExe;
9
-
cfg = config.roles.networking;
10
-
in
11
-
{
12
-
config = mkIf cfg.enable {
13
-
networking.networkmanager.enable = true;
14
-
roles.base.user.extraGroups = mkIf config.roles.base.canSudo [ "networkmanager" ];
15
-
16
-
hm.home.packages = [ pkgs.networkmanagerapplet ];
17
-
};
18
-
}
-39
roles/nix/default.nix
-39
roles/nix/default.nix
···
1
-
{ lib, inputs, self, ... }:
2
-
let
3
-
inherit (lib) mkDefault;
4
-
in
5
-
{
6
-
nix = {
7
-
registry = {
8
-
nixpkgs.flake = inputs.nixpkgs;
9
-
n.flake = inputs.nixpkgs;
10
-
};
11
-
nixPath =
12
-
let
13
-
toNixPath = input: "${input}=${inputs.${input}.outPath}";
14
-
in
15
-
[ (toNixPath "nixpkgs") ];
16
-
17
-
gc = {
18
-
automatic = mkDefault true;
19
-
dates = mkDefault "weekly";
20
-
options = mkDefault "--delete-older-than 7d";
21
-
};
22
-
23
-
settings = {
24
-
auto-optimise-store = true;
25
-
experimental-features = [
26
-
"nix-command"
27
-
"flakes"
28
-
"auto-allocate-uids"
29
-
];
30
-
trusted-users = [ "@wheel" ];
31
-
};
32
-
};
33
-
nixpkgs = {
34
-
# I'm not part of the FSF and I don't care
35
-
config.allowUnfree = true;
36
-
37
-
overlays = [ self.overlays.default ];
38
-
};
39
-
}
-28
roles/nix/nixos.nix
-28
roles/nix/nixos.nix
···
1
-
{
2
-
config,
3
-
pkgs,
4
-
lib,
5
-
self,
6
-
...
7
-
}:
8
-
{
9
-
system = {
10
-
# Thank @luishfonseca for this
11
-
# https://github.com/luishfonseca/dotfiles/blob/ab7625ec406b48493eda701911ad1cd017ce5bc1/modules/upgrade-diff.nix
12
-
activationScripts.diff = {
13
-
supportsDryActivation = true;
14
-
text = ''
15
-
${lib.getExe pkgs.nvd} --nix-bin-dir=${pkgs.nix}/bin diff /run/current-system "$systemConfig"
16
-
'';
17
-
};
18
-
19
-
# thanks to @getchoo
20
-
autoUpgrade = {
21
-
enable = true;
22
-
flake = "github:pluiedev/flake#${config.networking.hostName}";
23
-
flags = [ "--refresh" ];
24
-
};
25
-
26
-
configurationRevision = self.rev or self.dirtyRev or "unknown-dirty";
27
-
};
28
-
}
-11
roles/nixos.nix
-11
roles/nixos.nix
-7
roles/plasma/default.nix
-7
roles/plasma/default.nix
-42
roles/plasma/nixos.nix
-42
roles/plasma/nixos.nix
···
1
-
{
2
-
config,
3
-
lib,
4
-
pkgs,
5
-
inputs,
6
-
inputs',
7
-
...
8
-
}:
9
-
let
10
-
cfg = config.roles.plasma;
11
-
inherit (lib) mkIf;
12
-
in
13
-
{
14
-
config = mkIf cfg.enable {
15
-
services = {
16
-
desktopManager.plasma6.enable = true;
17
-
displayManager = {
18
-
defaultSession = "plasma";
19
-
sddm = {
20
-
enable = true;
21
-
wayland.enable = true;
22
-
};
23
-
};
24
-
};
25
-
26
-
xdg.portal.extraPortals = [ pkgs.kdePackages.xdg-desktop-portal-kde ];
27
-
28
-
hm = {
29
-
imports = [ inputs.plasma-manager.homeManagerModules.plasma-manager ];
30
-
31
-
home.packages = lib.optional cfg.krunner-nix.enable inputs'.krunner-nix.packages.default;
32
-
33
-
# Janky workaround
34
-
# https://github.com/nix-community/home-manager/issues/1586
35
-
programs.firefox.package = pkgs.firefox.override {
36
-
cfg.nativeMessagingHosts.packages = [ pkgs.plasma6Packages.plasma-browser-integration ];
37
-
};
38
-
39
-
programs.plasma.enable = true;
40
-
};
41
-
};
42
-
}
-79
roles/rust/default.nix
-79
roles/rust/default.nix
···
1
-
{
2
-
lib,
3
-
pkgs,
4
-
config,
5
-
inputs',
6
-
...
7
-
}:
8
-
let
9
-
cfg = config.roles.rust;
10
-
inherit (lib)
11
-
mkIf
12
-
mkOption
13
-
mkEnableOption
14
-
types
15
-
;
16
-
in
17
-
{
18
-
options.roles.rust = {
19
-
enable = mkEnableOption "Rust";
20
-
21
-
package = mkOption {
22
-
type = types.package;
23
-
default =
24
-
let
25
-
fenix = inputs'.fenix.packages;
26
-
in
27
-
fenix.combine [
28
-
fenix.default.toolchain
29
-
fenix.rust-analyzer
30
-
];
31
-
description = "Version of Rust to install. Defaults to nightly with rust-analyzer";
32
-
};
33
-
34
-
linker = mkOption {
35
-
type = types.nullOr types.pathInStore;
36
-
default = lib.getExe' pkgs.mold "mold";
37
-
example = "lib.getExe' pkgs.lld \"lld\"";
38
-
description = "Linker to use when linking compiled Rust code";
39
-
};
40
-
41
-
settings = mkOption {
42
-
type = types.nullOr (types.attrsOf types.anything);
43
-
default = { };
44
-
};
45
-
46
-
rustfmt.settings = mkOption {
47
-
type = types.nullOr (types.attrsOf types.anything);
48
-
default = null;
49
-
example = {
50
-
hard_tabs = true;
51
-
tab_spaces = 4;
52
-
newline_style = "Unix";
53
-
};
54
-
};
55
-
};
56
-
57
-
config.hm =
58
-
let
59
-
toml = pkgs.formats.toml { };
60
-
linkerSettings = lib.optionalAttrs (cfg.linker != null) {
61
-
target.${pkgs.hostPlatform.rust.rustcTarget} = {
62
-
linker = "${lib.getExe pkgs.clang_16}";
63
-
rustflags = [
64
-
"-C"
65
-
"link-arg=-fuse-ld=${cfg.linker}"
66
-
];
67
-
};
68
-
};
69
-
in
70
-
mkIf cfg.enable {
71
-
home.packages = [ cfg.package ];
72
-
73
-
xdg.configFile."rustfmt/rustfmt.toml".source = mkIf (cfg.rustfmt.settings != null)
74
-
(toml.generate "rustfmt.toml" cfg.rustfmt.settings);
75
-
76
-
home.file.".cargo/config.toml".source = mkIf (cfg.settings != null)
77
-
(toml.generate "config.toml" (linkerSettings // cfg.settings));
78
-
};
79
-
}
+129
systems/common.nix
+129
systems/common.nix
···
1
+
{
2
+
config,
3
+
self,
4
+
pkgs,
5
+
lib,
6
+
inputs,
7
+
...
8
+
}:
9
+
{
10
+
imports = [
11
+
inputs.hjem.nixosModules.hjem
12
+
];
13
+
14
+
hjem.extraModules = [
15
+
inputs.hjem-rum.hjemModules.default
16
+
self.hjemModules.hjem-ext
17
+
];
18
+
19
+
system.stateVersion = "24.11";
20
+
21
+
nix = {
22
+
# Add `n` as an alias of `nixpkgs`
23
+
registry.n.to = {
24
+
type = "path";
25
+
path = config.nixpkgs.flake.source;
26
+
};
27
+
28
+
gc = {
29
+
automatic = true;
30
+
dates = "weekly";
31
+
options = "--delete-older-than 7d";
32
+
};
33
+
34
+
settings = {
35
+
auto-optimise-store = true;
36
+
experimental-features = [
37
+
"nix-command"
38
+
"flakes"
39
+
"auto-allocate-uids"
40
+
"configurable-impure-env"
41
+
];
42
+
trusted-users = [ "@wheel" ];
43
+
impure-env = [ "all_proxy=http://127.0.0.1:2080" ];
44
+
};
45
+
};
46
+
47
+
nixpkgs = {
48
+
# I'm not part of the FSF and I don't care
49
+
config.allowUnfree = true;
50
+
flake.setNixPath = true;
51
+
52
+
overlays = [ self.overlays.default ];
53
+
};
54
+
55
+
boot = {
56
+
loader = {
57
+
systemd-boot = {
58
+
enable = true;
59
+
editor = false;
60
+
consoleMode = "2";
61
+
configurationLimit = 10;
62
+
};
63
+
efi.canTouchEfiVariables = true;
64
+
};
65
+
66
+
# Silence NixOS Stage 1 logs, jump straight into plymouth
67
+
consoleLogLevel = 0;
68
+
initrd.verbose = false;
69
+
plymouth.enable = true;
70
+
kernelParams = [
71
+
"quiet"
72
+
"splash"
73
+
"plymouth.use-simpledrm"
74
+
"i915.fastboot=1"
75
+
];
76
+
};
77
+
78
+
# Use native Wayland when possible
79
+
environment.variables = {
80
+
NIXOS_OZONE_WL = "1";
81
+
SDL_VIDEODRIVER = "wayland";
82
+
};
83
+
84
+
services = {
85
+
flatpak.enable = true;
86
+
87
+
desktopManager.plasma6.enable = true;
88
+
displayManager = {
89
+
defaultSession = "plasma";
90
+
sddm = {
91
+
enable = true;
92
+
wayland.enable = true;
93
+
};
94
+
};
95
+
96
+
pulseaudio.enable = false;
97
+
pipewire = {
98
+
enable = true;
99
+
wireplumber.enable = true;
100
+
alsa.enable = true;
101
+
jack.enable = true;
102
+
pulse.enable = true;
103
+
};
104
+
};
105
+
106
+
security.rtkit.enable = true;
107
+
108
+
networking.networkmanager.enable = true;
109
+
110
+
system = {
111
+
# Thank @luishfonseca for this
112
+
# https://github.com/luishfonseca/dotfiles/blob/ab7625ec406b48493eda701911ad1cd017ce5bc1/modules/upgrade-diff.nix
113
+
activationScripts.diff = {
114
+
supportsDryActivation = true;
115
+
text = ''
116
+
${lib.getExe pkgs.nvd} --nix-bin-dir=${pkgs.nix}/bin diff /run/current-system "$systemConfig"
117
+
'';
118
+
};
119
+
120
+
# thanks to @getchoo
121
+
autoUpgrade = {
122
+
enable = true;
123
+
flake = "github:pluiedev/flake#${config.networking.hostName}";
124
+
flags = [ "--refresh" ];
125
+
};
126
+
127
+
configurationRevision = self.rev or self.dirtyRev or "unknown-dirty";
128
+
};
129
+
}
+15
-46
systems/default.nix
+15
-46
systems/default.nix
···
1
-
{ withSystem, inputs, self, ... }:
2
-
let
3
-
mkMachine =
4
-
name: { system, modules, builder }:
5
-
withSystem system ({ inputs', self', ... }:
6
-
builder {
7
-
specialArgs = { inherit inputs inputs' self self'; };
8
-
modules = modules ++ [
9
-
./${name}
10
-
{
11
-
networking.hostName = name;
12
-
nixpkgs.hostPlatform = system;
13
-
}
14
-
];
15
-
}
16
-
);
17
-
18
-
mkMachines = builtins.mapAttrs mkMachine;
19
-
20
-
# Composable parts
21
-
personal = [
22
-
inputs.home-manager.nixosModules.home-manager
23
-
../users/personal.nix
24
-
];
25
-
nixos = [ ../roles/nixos.nix ];
26
-
darwin = [ ../roles/darwin.nix ];
27
-
28
-
# Presets
29
-
nixos-pc = {
30
-
system = "x86_64-linux";
31
-
modules = nixos ++ personal;
32
-
builder = inputs.nixpkgs.lib.nixosSystem;
33
-
};
34
-
darwin-pc = {
35
-
system = "x86_64-darwin";
36
-
modules = darwin ++ personal;
37
-
builder = inputs.nix-darwin.lib.darwinSystem;
38
-
};
39
-
in
1
+
{
2
+
inputs,
3
+
self,
4
+
...
5
+
}:
40
6
{
41
-
flake = {
42
-
nixosConfigurations = mkMachines {
43
-
fettuccine = nixos-pc;
44
-
tagliatelle = nixos-pc;
45
-
};
46
-
darwinConfigurations = mkMachines {
47
-
fromage = darwin-pc;
7
+
flake.nixosConfigurations = {
8
+
fettuccine = inputs.nixpkgs.lib.nixosSystem {
9
+
system = "x86_64-linux";
10
+
modules = [
11
+
./fettuccine
12
+
../users/leah
13
+
];
14
+
specialArgs = {
15
+
inherit inputs self;
16
+
};
48
17
};
49
18
};
50
19
}
+42
-19
systems/fettuccine/default.nix
+42
-19
systems/fettuccine/default.nix
···
1
1
{
2
-
lib,
2
+
config,
3
3
pkgs,
4
+
lib,
4
5
inputs,
5
-
config,
6
6
...
7
7
}:
8
8
{
9
9
imports = with inputs.nixos-hardware.nixosModules; [
10
+
../common.nix
10
11
./hardware-configuration.nix
11
12
12
13
common-hidpi
13
14
asus-zephyrus-gu603h
14
15
];
15
16
16
-
roles = {
17
-
# boot.lanzaboote.enable = true;
18
-
# nvidia.enable = true;
17
+
networking.hostName = "fettuccine";
18
+
19
+
boot = {
20
+
# Disable Nvidia's HDMI audio
21
+
blacklistedKernelModules = [ "snd_hda_codec_hdmi" ];
22
+
kernelPackages = pkgs.linuxPackages_xanmod_latest;
19
23
};
20
24
21
-
hardware.bluetooth.enable = true;
25
+
# Enable building and testing aarch64 packages for Nixpkgs dev
26
+
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
27
+
nix.settings.extra-platforms = [ "aarch64-linux" ];
28
+
29
+
hardware = {
30
+
bluetooth.enable = true;
31
+
32
+
nvidia = {
33
+
# PCI bus IDs are already conveniently set by nixos-hardware
34
+
prime.offload.enable = lib.mkForce true;
22
35
23
-
# Other Nvidia settings are set via nixos-hardware
36
+
# Beta can sometimes be more stable than, well, stable
37
+
package = config.boot.kernelPackages.nvidiaPackages.beta;
38
+
};
39
+
};
24
40
25
-
hardware.nvidia.prime.offload.enable = lib.mkForce true;
26
-
hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.beta;
27
-
# Disable Nvidia's HDMI audio
28
-
boot.blacklistedKernelModules = [ "snd_hda_codec_hdmi" ];
41
+
# Nix can sometimes overload my poor, poor laptop CPU
42
+
# so much that it can freeze my entire system. Amazing.
43
+
# Please don't do that.
44
+
nix.daemonCPUSchedPolicy = "idle";
29
45
46
+
# This is an ASUS computer after all
30
47
services.asusd.enable = true;
31
48
32
-
specialisation.china.configuration = {
33
-
roles.mirrors.chinese.enable = true;
34
-
environment.variables.NIXOS_SPECIALISATION = "china";
49
+
networking.firewall = {
50
+
enable = true;
35
51
36
-
environment.systemPackages = [ pkgs.nekoray ];
52
+
# Allow previewing local Vite builds on other devices via LAN
53
+
allowedTCPPorts = [ 5173 ];
54
+
};
37
55
38
-
nix.settings = {
39
-
experimental-features = [ "configurable-impure-env" ];
40
-
impure-env = [ "all_proxy=http://127.0.0.1:2080" ];
41
-
};
56
+
specialisation.china.configuration = {
57
+
# cache.nixos.org is *unbearably* slow when accessed from Mainland China.
58
+
# Fortunately, mirror sites exist... Hooray(?)
59
+
nix.settings.substituters = map (url: "${url}/nix-channels/store") [
60
+
"https://mirrors.ustc.edu.cn"
61
+
"https://mirrors6.tuna.tsinghua.edu.cn"
62
+
"https://mirrors.tuna.tsinghua.edu.cn"
63
+
# "https://mirror.sjtu.edu.cn" # FIXME: buggy?
64
+
];
42
65
};
43
66
}
+43
-58
users/leah/appearance.nix
+43
-58
users/leah/appearance.nix
···
1
1
{
2
-
self,
3
-
inputs,
4
2
pkgs,
5
3
lib,
6
4
...
···
8
6
let
9
7
flavor = "mocha";
10
8
accent = "maroon";
9
+
10
+
mkUpper = str: (lib.toUpper (lib.substring 0 1 str)) + (lib.substring 1 (lib.stringLength str) str);
11
+
fcitx5ini = pkgs.formats.iniWithGlobalSection { };
11
12
in
12
13
{
13
-
imports = [ inputs.catppuccin.nixosModules.catppuccin ];
14
-
catppuccin = {
15
-
enable = true;
16
-
inherit flavor accent;
14
+
boot.plymouth = {
15
+
themePackages = [ pkgs.plymouth-blahaj-theme ];
16
+
theme = "blahaj";
17
17
};
18
18
19
-
catppuccin.plymouth.enable = false;
20
-
boot.plymouth.themePackages = [ pkgs.plymouth-blahaj-theme ];
21
-
boot.plymouth.theme = "blahaj";
19
+
hjem.users.leah = {
20
+
packages = [ pkgs.breezex-cursor ];
21
+
22
+
files = {
23
+
".local/share/fcitx5/themes/catppuccin-${flavor}-${accent}".source =
24
+
"${pkgs.catppuccin-fcitx5}/share/fcitx5/themes/catppuccin-${flavor}-${accent}";
22
25
23
-
hm.imports = [
24
-
inputs.catppuccin.homeModules.catppuccin
25
-
self.hmModules.ctp-plus
26
-
];
26
+
".config/fcitx5/conf/classicui.conf".source = fcitx5ini.generate "fcitx5-classicui.conf" {
27
+
globalSection = {
28
+
Theme = "catppuccin-${flavor}-${accent}";
29
+
};
30
+
};
27
31
28
-
hm.catppuccin = {
29
-
enable = true;
30
-
inherit flavor accent;
31
-
};
32
+
".config/fish/themes/Catppuccin ${mkUpper flavor}.theme".source =
33
+
"${pkgs.catppuccin-fish}/share/fish/themes/Catppuccin ${mkUpper flavor}.theme";
34
+
};
32
35
33
-
hm.programs.fish.interactiveShellInit = ''
34
-
set -x LS_COLORS (${lib.getExe pkgs.vivid} generate catppuccin-${flavor})
35
-
'';
36
+
rum.programs.fish.earlyConfigFiles.theme = ''
37
+
fish_config theme choose "Catppuccin ${mkUpper flavor}"
38
+
set -x LS_COLORS (${lib.getExe pkgs.vivid} generate catppuccin-${flavor})
39
+
'';
36
40
37
-
hm.programs.moar.settings.style = "catppuccin-${flavor}";
41
+
ext.programs.moar.settings.style = "catppuccin-${flavor}";
42
+
};
38
43
39
-
hm.programs.plasma.fonts =
40
-
let
41
-
rethink = {
42
-
family = "Rethink Sans";
43
-
pointSize = 12;
44
-
};
45
-
in
46
-
{
47
-
general = rethink // {
48
-
pointSize = 14;
49
-
};
50
-
fixedWidth = {
51
-
family = "Iosevka";
52
-
pointSize = 14;
53
-
};
54
-
small = rethink // {
55
-
pointSize = 11;
56
-
};
57
-
toolbar = rethink;
58
-
menu = rethink;
59
-
windowTitle = rethink;
60
-
};
44
+
fonts = {
45
+
enableDefaultPackages = true;
61
46
62
-
roles.fonts = {
63
-
enable = true;
64
47
packages = with pkgs; [
65
48
iosevka
66
49
noto-fonts-color-emoji
···
70
53
dm-sans-unstable
71
54
];
72
55
73
-
defaults = {
74
-
serif = [
75
-
"I.Ming"
76
-
];
77
-
sansSerif = [
78
-
"DM Sans"
79
-
"LXGW Neo XiHei"
80
-
];
81
-
emoji = [ "Noto Color Emoji" ];
82
-
monospace = [
83
-
"Iosevka"
84
-
"LXGW Neo XiHei"
85
-
];
56
+
fontconfig = {
57
+
defaultFonts = {
58
+
serif = [
59
+
"I.Ming"
60
+
];
61
+
sansSerif = [
62
+
"DM Sans"
63
+
"LXGW Neo XiHei"
64
+
];
65
+
emoji = [ "Noto Color Emoji" ];
66
+
monospace = [
67
+
"Iosevka"
68
+
"LXGW Neo XiHei"
69
+
];
70
+
};
86
71
};
87
72
};
88
73
}
+20
-66
users/leah/default.nix
+20
-66
users/leah/default.nix
···
1
1
{
2
2
config,
3
-
pkgs,
4
-
self,
3
+
inputs,
5
4
...
6
5
}:
7
6
{
8
7
imports = [
9
8
./appearance.nix
10
-
./presets/plasma
9
+
# ./presets/plasma
11
10
./programs
11
+
12
+
inputs.hjem.nixosModules.hjem
13
+
inputs.nix-index-database.nixosModules.nix-index
12
14
];
13
15
14
-
hm.imports = [ self.hmModules.hm-plus ];
15
-
16
-
boot = {
17
-
binfmt.emulatedSystems = [ "aarch64-linux" ];
18
-
kernelParams = [ "plymouth.use-simpledrm" ];
19
-
kernelPackages = pkgs.linuxPackages_xanmod_latest;
20
-
};
21
-
22
-
nix = {
23
-
settings.extra-platforms = [ "aarch64-linux" ];
24
-
daemonCPUSchedPolicy = "idle";
25
-
};
16
+
hjem.extraModules = [
17
+
inputs.hjem-rum.hjemModules.default
18
+
];
26
19
27
20
i18n.supportedLocales = [ "all" ];
28
21
29
-
roles.base = {
30
-
username = "leah";
31
-
realName = "Leah";
32
-
fullName = "Leah Amelia Chen";
33
-
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC7uJGE2/25M4a3DIVxtnTA5INqWsFGw+49qHXaN/kqy";
34
-
canSudo = true;
35
-
};
36
-
37
-
roles.email =
38
-
let
39
-
realName = config.roles.base.fullName;
40
-
host = {
41
-
imap = {
42
-
host = "imap.migadu.com";
43
-
port = 993;
44
-
};
45
-
smtp = {
46
-
host = "smtp.migadu.com";
47
-
port = 465;
48
-
};
49
-
};
50
-
in
51
-
{
52
-
enable = true;
53
-
accounts = {
54
-
"hi@pluie.me" = {
55
-
inherit realName host;
56
-
primary = true;
57
-
};
58
-
"acc@pluie.me" = {
59
-
inherit host;
60
-
realName = "${realName} [accounts]";
61
-
};
62
-
};
63
-
};
64
-
65
-
roles.fish = {
66
-
enable = true;
67
-
defaultShell = true;
22
+
users.users.leah = {
23
+
isNormalUser = true;
24
+
description = "Leah C";
25
+
extraGroups = [
26
+
"wheel" # 1984 powers
27
+
"rtkit" # Some apps may need to adjust audio priority at runtime
28
+
"networkmanager" # Manage networks
29
+
];
30
+
home = "/home/leah";
68
31
};
69
32
70
-
environment.variables = {
71
-
NIXOS_OZONE_WL = "1";
72
-
SDL_VIDEODRIVER = "wayland";
73
-
};
33
+
# Name and directory should be populated by users.users
34
+
hjem.users.leah.enable = true;
74
35
75
-
networking.firewall = {
76
-
enable = true;
77
-
allowedTCPPorts = [
78
-
80
79
-
443
80
-
5173
81
-
];
82
-
};
36
+
hjem.clobberByDefault = true;
83
37
}
-13
users/leah/presets/plasma/default.nix
-13
users/leah/presets/plasma/default.nix
···
4
4
./sddm.nix
5
5
./settings
6
6
];
7
-
8
-
boot.plymouth.enable = true;
9
-
roles.plasma = {
10
-
enable = true;
11
-
krunner-nix.enable = true;
12
-
};
13
-
14
-
# KDE manages GTK stuff by itself
15
-
#hm.gtk.enable = lib.mkForce false;
16
-
17
-
hm.home.packages = with pkgs; [
18
-
wl-clipboard
19
-
];
20
7
}
-2
users/leah/presets/plasma/settings/default.nix
-2
users/leah/presets/plasma/settings/default.nix
+29
users/leah/programs/1password.nix
+29
users/leah/programs/1password.nix
···
1
+
{
2
+
config,
3
+
pkgs,
4
+
lib,
5
+
...
6
+
}:
7
+
{
8
+
programs = {
9
+
_1password.enable = true;
10
+
_1password-gui = {
11
+
enable = true;
12
+
package = pkgs._1password-gui-beta;
13
+
14
+
# Unlock 1Pass via PolKit
15
+
polkitPolicyOwners = [ "leah" ];
16
+
};
17
+
};
18
+
19
+
# Add 1Pass as SSH agent
20
+
hjem.users.leah = {
21
+
files.".ssh/config".text = ''
22
+
Host *
23
+
IdentityAgent ${config.hjem.users.leah.directory}/.1password/agent.sock
24
+
'';
25
+
26
+
ext.programs.git.settings.gpg.ssh.program =
27
+
lib.getExe' config.programs._1password-gui.package "op-ssh-sign";
28
+
};
29
+
}
+45
-130
users/leah/programs/default.nix
+45
-130
users/leah/programs/default.nix
···
1
1
{
2
-
config,
3
2
pkgs,
4
-
lib,
5
-
inputs,
6
-
inputs',
7
3
...
8
4
}:
9
5
{
10
6
imports = [
7
+
./1password.nix
11
8
./discord
12
-
./fcitx5
9
+
./fcitx5.nix
13
10
./firefox
14
-
./ghostty
15
-
./helix
16
-
./jj
17
-
./rust
18
-
];
19
-
20
-
hm.imports = [ inputs.nix-index-database.hmModules.nix-index ];
21
-
22
-
hm.home.packages = with pkgs; [
23
-
# Apps
24
-
inputs'.blender-bin.packages.default
25
-
chromium
26
-
gimp
27
-
inkscape-with-extensions
28
-
vlc
29
-
30
-
# Command-line apps
31
-
just
32
-
fastfetch
33
-
nix-output-monitor
34
-
nurl
35
-
xclip
36
-
moar
37
-
38
-
(inputs.treefmt-nix.lib.evalModule pkgs ./treefmt.nix).config.build.wrapper
39
-
];
40
-
41
-
services.touchegg.enable = true;
42
-
43
-
xdg.icons.enable = true;
44
-
environment.systemPackages = [
45
-
pkgs.nekoray
46
-
pkgs.adwaita-icon-theme
11
+
./fish.nix
12
+
./ghostty.nix
13
+
./helix.nix
14
+
./vcs.nix
15
+
./steam.nix
47
16
];
48
-
49
-
services.flatpak.enable = true;
50
17
51
18
programs = {
52
-
appimage.enable = true;
53
19
gamemode.enable = true;
54
20
localsend.enable = true;
55
-
56
-
steam = {
57
-
enable = true;
58
-
extraCompatPackages = [ pkgs.proton-ge-bin ];
59
-
extraPackages = [
60
-
pkgs.ncurses6 # Crusader Kings III
61
-
];
62
-
remotePlay.openFirewall = true;
63
-
};
64
-
nix-ld.enable = true;
21
+
nix-index-database.comma.enable = true;
65
22
};
66
23
24
+
hjem.users.leah = {
25
+
packages = with pkgs; [
26
+
# Apps
27
+
nekoray
28
+
prismlauncher
29
+
vlc
30
+
thunderbird
31
+
telegram-desktop
67
32
68
-
hm.programs = {
69
-
bat = {
70
-
enable = true;
71
-
config = {
72
-
map-syntax = [ "flake.lock:JSON" ];
73
-
};
74
-
syntaxes = {
75
-
just = {
76
-
src = lib.cleanSourceWith {
77
-
filter =
78
-
name: type:
79
-
lib.cleanSourceFilter name type
80
-
&& !builtins.elem (baseNameOf name) [
81
-
"ShellScript (for Just).sublime-syntax"
82
-
"Python (for Just).sublime-syntax"
83
-
];
33
+
# Command-line apps
34
+
just
35
+
nix-output-monitor
36
+
ripgrep
37
+
starship
38
+
wl-clipboard
39
+
eza
40
+
];
84
41
85
-
src = pkgs.fetchFromGitHub {
86
-
owner = "nk9";
87
-
repo = "just_sublime";
88
-
rev = "352bae277961d41e2a1795a834dbf22661c8910f";
89
-
hash = "sha256-QCp6ypSBhgGZG4T7fNiFfCgZIVJoDSoJBkpcdw3aiuQ=";
90
-
};
91
-
};
92
-
file = "Syntax/Just.sublime-syntax";
93
-
};
94
-
};
95
-
};
96
-
97
-
eza = {
98
-
enable = true;
99
-
git = true;
100
-
icons = "auto";
101
-
};
102
-
direnv = {
103
-
enable = true;
104
-
nix-direnv.enable = true;
105
-
};
106
-
107
-
gh = {
108
-
enable = true;
109
-
settings.git_protocol = "ssh";
110
-
};
111
-
112
-
git = {
113
-
enable = true;
114
-
userName = config.roles.base.fullName;
115
-
userEmail = "hi@pluie.me";
42
+
files.".config/starship.toml".source = ./starship.toml;
116
43
117
-
signing.key = config.roles.base.publicKey;
118
-
signingFormat = "ssh";
44
+
rum.programs.obs-studio.enable = true;
119
45
120
-
extraConfig = {
121
-
init.defaultBranch = "main";
122
-
push.autoSetupRemote = true;
123
-
url."https://github.com/".insteadOf = "gh:";
46
+
ext.programs = {
47
+
direnv = {
48
+
enable = true;
49
+
nix-direnv.enable = true;
124
50
};
125
-
};
126
51
127
-
hyfetch = {
128
-
enable = true;
129
-
settings = {
130
-
preset = "lesbian";
131
-
mode = "rgb";
132
-
lightness = 0.6;
133
-
color_align.mode = "horizontal";
134
-
backend = "fastfetch";
52
+
hyfetch = {
53
+
enable = true;
54
+
settings = {
55
+
preset = "lesbian";
56
+
mode = "rgb";
57
+
lightness = 0.6;
58
+
color_align.mode = "horizontal";
59
+
backend = "fastfetch";
60
+
};
135
61
};
136
-
};
137
62
138
-
moar = {
139
-
enable = true;
140
-
settings = {
141
-
style = "catppuccin-mocha";
142
-
no-statusbar = true;
143
-
wrap = true;
63
+
moar = {
64
+
enable = true;
65
+
settings = {
66
+
no-statusbar = true;
67
+
wrap = true;
68
+
};
144
69
};
145
-
};
146
-
147
-
nix-index-database.comma.enable = true;
148
-
149
-
obs-studio.enable = true;
150
-
ripgrep.enable = true;
151
-
152
-
starship = {
153
-
enable = true;
154
-
settings = builtins.fromTOML (builtins.readFile ./starship.toml);
155
70
};
156
71
};
157
72
}
+2
-2
users/leah/programs/discord/default.nix
+2
-2
users/leah/programs/discord/default.nix
+41
users/leah/programs/fcitx5.nix
+41
users/leah/programs/fcitx5.nix
···
1
+
{ pkgs, ... }:
2
+
let
3
+
luna_pinyin = yaml.generate "luna_pinyin.yaml" {
4
+
patch."speller/algebra" = [
5
+
"erase/^xx$/"
6
+
"derive/in$/ing/" # in/ing 不分
7
+
"derive/ing$/in/"
8
+
9
+
# 非标拼写就
10
+
"derive/^([nl])ve$/$1ue/" # nve = nue, lve = lue
11
+
"derive/^([jqxy])v/$1u/" # ju = jv
12
+
"derive/uen$/un/" # gun = guen
13
+
"derive/uei$/ui/" # gui = guei
14
+
"derive/iou$/iu/" # jiu = jiou
15
+
];
16
+
};
17
+
18
+
yaml = pkgs.formats.yaml { };
19
+
in
20
+
{
21
+
i18n.inputMethod = {
22
+
enable = true;
23
+
type = "fcitx5";
24
+
fcitx5.addons = with pkgs; [
25
+
fcitx5-mozc
26
+
fcitx5-rime
27
+
];
28
+
};
29
+
30
+
hjem.users.leah.files = {
31
+
".local/share/fcitx5/rime/default.custom.yaml".source = yaml.generate "default.yaml" {
32
+
patch.schema_list = [
33
+
{ schema = "luna_pinyin_simp"; }
34
+
{ schema = "luna_pinyin"; }
35
+
];
36
+
};
37
+
".local/share/fcitx5/rime/luna_pinyin.custom.yaml".source = luna_pinyin;
38
+
".local/share/fcitx5/rime/luna_pinyin_simp.custom.yaml".source = luna_pinyin;
39
+
};
40
+
41
+
}
-48
users/leah/programs/fcitx5/default.nix
-48
users/leah/programs/fcitx5/default.nix
···
1
-
{ pkgs, ... }:
2
-
{
3
-
hm.catppuccin.fcitx5.enable = false; # TODO
4
-
5
-
hm.i18n.inputMethod = {
6
-
enabled = "fcitx5";
7
-
fcitx5 = {
8
-
addons = [ pkgs.fcitx5-mozc ];
9
-
10
-
# settings.groups = [
11
-
# {
12
-
# name = "Default";
13
-
# defaultLayout = "us";
14
-
# defaultIM = "keyboard-us";
15
-
# items = map (name: {inherit name;}) ["keyboard-us" "rime" "mozc"];
16
-
# }
17
-
# ];
18
-
19
-
rime = {
20
-
enable = true;
21
-
22
-
settings =
23
-
let
24
-
luna_pinyin.patch."speller/algebra" = [
25
-
"erase/^xx$/"
26
-
"derive/in$/ing/" # in/ing 不分
27
-
"derive/ing$/in/"
28
-
29
-
# 非标拼写
30
-
"derive/^([nl])ve$/$1ue/" # nve = nue, lve = lue
31
-
"derive/^([jqxy])v/$1u/" # ju = jv
32
-
"derive/uen$/un/" # gun = guen
33
-
"derive/uei$/ui/" # gui = guei
34
-
"derive/iou$/iu/" # jiu = jiou
35
-
];
36
-
in
37
-
{
38
-
default.patch.schema_list = [
39
-
{ schema = "luna_pinyin_simp"; }
40
-
{ schema = "luna_pinyin"; }
41
-
];
42
-
inherit luna_pinyin;
43
-
luna_pinyin_simp = luna_pinyin;
44
-
};
45
-
};
46
-
};
47
-
};
48
-
}
+47
-135
users/leah/programs/firefox/default.nix
+47
-135
users/leah/programs/firefox/default.nix
···
1
1
{
2
-
config,
3
2
lib,
4
3
pkgs,
5
-
inputs',
6
4
...
7
5
}:
8
-
{
9
-
hm.programs.firefox = {
10
-
enable = true;
6
+
let
7
+
json = pkgs.formats.json { };
8
+
wrappedFirefox = pkgs.firefox.override {
9
+
extraPoliciesFiles = [(json.generate "firefox-policies.json" policies)];
10
+
};
11
11
12
-
profiles.${config.roles.base.username} = {
13
-
isDefault = true;
14
-
name = config.roles.base.realName;
12
+
addons = [
13
+
# Styling
14
+
"addon@darkreader.org" # Dark Reader
15
+
"{85860b32-02a8-431a-b2b1-40fbd64c9c69}" # File Icons for Git{Hub,Lab}
16
+
"FirefoxColor@mozilla.com" # Firefox Color
17
+
"{7a7a4a92-a2a0-41d1-9fd7-1e92480d612d}" # Stylus
18
+
"{a4c4eda4-fb84-4a84-b4a1-f7c1cbf2a1ad}" # Refined GitHub
19
+
"{72742915-c83b-4485-9023-b55dc5a1e730}" # Wide GitHub
15
20
16
-
extensions.packages =
17
-
let
18
-
# FIXME: firefox-addons currently receives free-only nixpkgs,
19
-
# and so unfree plugins are blocked from evaluation.
20
-
# Use this one dirty trick to make the FSF mad! :trolley:
21
-
gaslight = pkgs: pkgs.overrideAttrs { meta.license.free = true; };
22
-
in
23
-
with inputs'.firefox-addons.packages;
24
-
map gaslight [
25
-
# Essentials
26
-
auto-tab-discard
27
-
onepassword-password-manager
28
-
ublock-origin
21
+
# Privacy
22
+
"gdpr@cavi.au.dk" # Consent-O-Matic
23
+
"addon@fastforward.team" # FastForward
24
+
"{6d96bb5e-1175-4ebf-8ab5-5f56f1c79f65}" # Google Analytics Opt-out
25
+
"{6d85dea2-0fb4-4de3-9f8c-264bce9a2296}" # Link Cleaner
26
+
"uBlock0@raymondhill.net" # uBlock Origin
29
27
30
-
# Avoid annoyances
31
-
consent-o-matic
32
-
don-t-fuck-with-paste
33
-
enhanced-h264ify
34
-
fastforwardteam
35
-
faststream
36
-
gaoptout
37
-
istilldontcareaboutcookies
38
-
link-cleaner
39
-
musescore-downloader
40
-
native-mathml
41
-
privacy-possum
42
-
re-enable-right-click
43
-
sponsorblock
44
-
terms-of-service-didnt-read
45
-
youtube-nonstop
46
-
47
-
# Redirectors
48
-
indie-wiki-buddy
49
-
libredirect
50
-
localcdn
51
-
modrinthify
52
-
53
-
# Augmentations
54
-
augmented-steam
55
-
github-file-icons
56
-
octolinker
57
-
protondb-for-steam
58
-
refined-github
59
-
widegithub
60
-
wikiwand-wikipedia-modernized
61
-
62
-
# Language
63
-
furiganaize
64
-
immersive-translate
65
-
languagetool
66
-
67
-
# Styling
68
-
darkreader
69
-
firefox-color
70
-
stylus
71
-
72
-
# Dev
73
-
a11ycss
74
-
header-editor
75
-
rust-search-extension
76
-
77
-
disconnect
78
-
pronoundb
79
-
search-by-image
80
-
unpaywall
81
-
wayback-machine
82
-
];
28
+
# "Stop Websites from Doing Stupid Things I Don't Want"
29
+
"{278b0ae0-da9d-4cc6-be81-5aa7f3202672}" # Allow Right Click
30
+
"DontFuckWithPaste@raim.ist" # Don't Fuck With Paste
83
31
84
-
search =
85
-
let
86
-
mkParams = lib.mapAttrsToList lib.nameValuePair;
87
-
nixIcon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
88
-
nixosSearch = path: aliases: {
89
-
urls = [ { template = "https://nixpkgs.dev${path}/{searchTerms}"; } ];
90
-
icon = nixIcon;
91
-
definedAliases = aliases;
92
-
};
32
+
# YouTube
33
+
"{9a41dee2-b924-4161-a971-7fb35c053a4a}" # enhanced-h264ify
34
+
"sponsorBlocker@ajay.app" # SponsorBlock for YouTube
35
+
"{0d7cafdd-501c-49ca-8ebb-e3341caaa55e}" # YouTube NonStop
36
+
37
+
# Utilities
38
+
"{d634138d-c276-4fc8-924b-40a0ea21d284}" # 1Password
39
+
"{c2c003ee-bd69-42a2-b0e9-6f34222cb046}" # Auto Tab Discard
40
+
"{cb31ec5d-c49a-4e5a-b240-16c767444f62}" # Indie Wiki Buddy
41
+
"octolinker@stefanbuck.com" # OctoLinker
42
+
"firefox-addon@pronoundb.org" # PronounDB
43
+
"wayback_machine@mozilla.org" # Wayback Machine
44
+
];
93
45
94
-
search = path: queryKey: {
95
-
template = path;
96
-
params = mkParams { ${queryKey} = "{searchTerms}"; };
97
-
};
98
-
in
99
-
{
100
-
default = "ddg";
101
-
force = true;
102
-
engines = {
103
-
"Nixpkgs" = nixosSearch "" [ "@np" ];
104
-
"NixOS Options" = nixosSearch "/option" [
105
-
"@ns"
106
-
"@no"
107
-
];
108
-
"NixOS Wiki" = {
109
-
urls = [ (search "https://wiki.nixos.org/index.php" "search") ];
110
-
icon = nixIcon;
111
-
definedAliases = [ "@nw" ];
112
-
};
113
-
"Nixpkgs PR Tracker" = {
114
-
urls = [ (search "https://nixpk.gs/pr-tracker.html" "pr") ];
115
-
icon = nixIcon;
116
-
definedAliases = [ "@npr" ];
117
-
};
118
-
"Home Manager Settings" = {
119
-
urls = [ (search "https://home-manager-options.extranix.com" "query") ];
120
-
icon = nixIcon;
121
-
definedAliases = [ "@hm" ];
122
-
};
123
-
"Wiktionary" = {
124
-
urls = [ (search "https://en.wiktionary.org/wiki/Special:Search" "search") ];
125
-
icon = "https://en.wiktionary.org/favicon.ico";
126
-
definedAliases = [ "@wkt" ];
127
-
};
128
-
"GitHub" = {
129
-
urls = [ (search "https://github.com/search" "q") ];
130
-
icon = "https://github.com/favicon.ico";
131
-
definedAliases = [ "@gh" ];
132
-
};
133
-
"docs.rs" = {
134
-
urls = [ (search "https://docs.rs/releases/search" "query") ];
135
-
icon = "https://docs.rs/-/static/favicon.ico";
136
-
definedAliases = [ "@rs" ];
137
-
};
138
-
"lib.rs" = {
139
-
urls = [ (search "https://lib.rs/search" "q") ];
140
-
icon = "https://lib.rs/favicon.ico";
141
-
definedAliases = [ "@lrs" ];
142
-
};
143
-
};
144
-
};
145
-
};
46
+
policies = {
47
+
ExtensionSettings = lib.listToAttrs (
48
+
map (id: lib.nameValuePair id {
49
+
installation_mode = "normal_installed";
50
+
install_url = "https://addons.mozilla.org/firefox/downloads/latest/${id}/latest.xpi";
51
+
}) addons);
146
52
};
53
+
54
+
# TODO: Specifying custom search engines is *very* cursed.
55
+
# I've seen how HM does it, and I don't think it's worth it at all...
56
+
in
57
+
{
58
+
hjem.users.leah.packages = [ wrappedFirefox ];
147
59
}
+23
users/leah/programs/fish.nix
+23
users/leah/programs/fish.nix
···
1
+
{
2
+
config,
3
+
...
4
+
}:
5
+
{
6
+
7
+
programs.fish.enable = true;
8
+
users.users.leah.shell = config.programs.fish.package;
9
+
10
+
hjem.users.leah.rum.programs.fish = {
11
+
enable = true;
12
+
inherit (config.programs.fish) package;
13
+
14
+
functions.eza = "eza --git --icons=auto";
15
+
abbrs = {
16
+
ls = "eza";
17
+
ll = "eza -l";
18
+
la = "eza -a";
19
+
lt = "eza --tree";
20
+
lla = "eza -la";
21
+
};
22
+
};
23
+
}
+4
-6
users/leah/programs/ghostty/default.nix
users/leah/programs/ghostty.nix
+4
-6
users/leah/programs/ghostty/default.nix
users/leah/programs/ghostty.nix
···
1
1
{
2
-
inputs',
2
+
inputs,
3
+
pkgs,
3
4
...
4
5
}:
5
6
{
6
-
hm.programs.ghostty = {
7
+
hjem.users.leah.rum.programs.ghostty = {
7
8
enable = true;
8
-
9
-
package = inputs'.ghostty.packages.default;
10
-
11
-
enableFishIntegration = true;
9
+
package = inputs.ghostty.packages.${pkgs.system}.default;
12
10
13
11
settings = {
14
12
font-family = "Iosevka";
+185
users/leah/programs/helix.nix
+185
users/leah/programs/helix.nix
···
1
+
{
2
+
hjem.users.leah = {
3
+
environment.sessionVariables.EDITOR = "hx";
4
+
5
+
# TODO: upstream this
6
+
files.".config/helix/ignore".text = ''
7
+
flake.lock
8
+
'';
9
+
10
+
rum.programs.helix = {
11
+
enable = true;
12
+
13
+
settings = {
14
+
theme = "catppuccin_mocha_plus";
15
+
16
+
editor = {
17
+
line-number = "relative";
18
+
bufferline = "multiple";
19
+
cursorline = true;
20
+
color-modes = true;
21
+
text-width = 100;
22
+
popup-border = "all";
23
+
rulers = [ 100 ];
24
+
25
+
end-of-line-diagnostics = "hint";
26
+
inline-diagnostics = {
27
+
cursor-line = "info";
28
+
other-lines = "error";
29
+
};
30
+
31
+
soft-wrap.enable = true;
32
+
33
+
cursor-shape = {
34
+
insert = "bar";
35
+
normal = "block";
36
+
select = "underline";
37
+
};
38
+
39
+
statusline = {
40
+
left = [
41
+
"mode"
42
+
"spacer"
43
+
"spinner"
44
+
];
45
+
right = [
46
+
"read-only-indicator"
47
+
"file-modification-indicator"
48
+
"file-name"
49
+
"separator"
50
+
"file-type"
51
+
"position-percentage"
52
+
"spacer"
53
+
"separator"
54
+
"position"
55
+
];
56
+
mode = {
57
+
normal = "NORMAL";
58
+
insert = "INSERT";
59
+
select = "VISUAL";
60
+
};
61
+
};
62
+
63
+
lsp = {
64
+
display-messages = true;
65
+
display-progress-messages = true;
66
+
display-inlay-hints = true;
67
+
};
68
+
69
+
auto-save = {
70
+
focus-lost = true; # Ghostty supports it :)
71
+
after-delay.enable = true;
72
+
};
73
+
74
+
whitespace.render = {
75
+
space = "none";
76
+
tab = "all";
77
+
};
78
+
79
+
indent-guides.render = true;
80
+
81
+
gutters.layout = [
82
+
"diff"
83
+
"diagnostics"
84
+
"line-numbers"
85
+
"spacer"
86
+
];
87
+
};
88
+
keys = {
89
+
normal = {
90
+
"C-s" = ":w";
91
+
"tab" = "move_parent_node_end";
92
+
"S-tab" = "move_parent_node_start";
93
+
"A-h" = "goto_previous_buffer";
94
+
"A-l" = "goto_next_buffer";
95
+
};
96
+
insert = {
97
+
"S-tab" = "move_parent_node_start";
98
+
};
99
+
select = {
100
+
"tab" = "move_parent_node_end";
101
+
"S-tab" = "move_parent_node_start";
102
+
};
103
+
};
104
+
};
105
+
themes.catppuccin_mocha_plus = {
106
+
inherits = "catppuccin_mocha";
107
+
108
+
"ui.statusline" = {
109
+
fg = "subtext0";
110
+
bg = "mantle";
111
+
};
112
+
"ui.statusline.normal" = {
113
+
fg = "mantle";
114
+
bg = "rosewater";
115
+
modifiers = [ "bold" ];
116
+
};
117
+
"ui.statusline.insert" = {
118
+
fg = "mantle";
119
+
bg = "maroon";
120
+
modifiers = [ "bold" ];
121
+
};
122
+
"ui.statusline.select" = {
123
+
fg = "mantle";
124
+
bg = "mauve";
125
+
modifiers = [ "bold" ];
126
+
};
127
+
128
+
"ui.cursor.primary.normal" = {
129
+
fg = "base";
130
+
bg = "rosewater";
131
+
};
132
+
"ui.cursor.primary.insert" = {
133
+
fg = "base";
134
+
bg = "maroon";
135
+
};
136
+
"ui.cursor.primary.select" = {
137
+
fg = "base";
138
+
bg = "mauve";
139
+
};
140
+
141
+
# Underlines are gross
142
+
"ui.bufferline" = {
143
+
fg = "subtext0";
144
+
bg = "mantle";
145
+
modifiers = [ "dim" ];
146
+
};
147
+
"ui.bufferline.active" = {
148
+
fg = "text";
149
+
bg = "base";
150
+
modifiers = [ "bold" ];
151
+
};
152
+
153
+
# Mimick VS Code
154
+
"ui.virtual.inlay-hint" = {
155
+
fg = "overlay0";
156
+
bg = "base";
157
+
};
158
+
159
+
"ui.popup".fg = "rosewater";
160
+
"ui.popup.info".fg = "maroon";
161
+
"ui.help".fg = "maroon";
162
+
"ui.menu".fg = "text";
163
+
"ui.menu.selected" = {
164
+
fg = "maroon";
165
+
modifiers = [ "bold" ];
166
+
};
167
+
"ui.menu.scroll".fg = "maroon";
168
+
"ui.background".bg = ""; # Transparent
169
+
170
+
# Why the heck is it *blue*?;
171
+
"diff.delta" = "yellow";
172
+
173
+
# Maroon itself is already eye-catching enough, no need to italicize
174
+
"variable.parameter" = "maroon";
175
+
# Teal is wayyyyyy too obtrusive in Nix
176
+
"variable.other.member" = "subtext1";
177
+
"variable.builtin" = "peach";
178
+
179
+
# Fix ${} in Nix
180
+
"punctuation.special" = "maroon";
181
+
"operator" = "maroon";
182
+
};
183
+
};
184
+
};
185
+
}
-210
users/leah/programs/helix/default.nix
-210
users/leah/programs/helix/default.nix
···
1
-
{
2
-
pkgs,
3
-
...
4
-
}:
5
-
{
6
-
hm.catppuccin.helix.enable = false;
7
-
8
-
hm.programs.helix = {
9
-
enable = true;
10
-
defaultEditor = true;
11
-
12
-
ignores = [
13
-
"flake.lock"
14
-
];
15
-
settings = {
16
-
theme = "catppuccin_mocha_plus";
17
-
18
-
editor = {
19
-
line-number = "relative";
20
-
bufferline = "multiple";
21
-
cursorline = true;
22
-
color-modes = true;
23
-
text-width = 100;
24
-
popup-border = "all";
25
-
rulers = [ 100 ];
26
-
27
-
end-of-line-diagnostics = "hint";
28
-
inline-diagnostics = {
29
-
cursor-line = "info";
30
-
other-lines = "error";
31
-
};
32
-
33
-
soft-wrap.enable = true;
34
-
35
-
cursor-shape = {
36
-
insert = "bar";
37
-
normal = "block";
38
-
select = "underline";
39
-
};
40
-
41
-
statusline = {
42
-
left = [
43
-
"mode"
44
-
"spacer"
45
-
"spinner"
46
-
];
47
-
right = [
48
-
"read-only-indicator"
49
-
"file-modification-indicator"
50
-
"file-name"
51
-
"separator"
52
-
"file-type"
53
-
"position-percentage"
54
-
"spacer"
55
-
"separator"
56
-
"position"
57
-
];
58
-
mode = {
59
-
normal = "NORMAL";
60
-
insert = "INSERT";
61
-
select = "VISUAL";
62
-
};
63
-
};
64
-
65
-
lsp = {
66
-
display-messages = true;
67
-
display-progress-messages = true;
68
-
display-inlay-hints = true;
69
-
};
70
-
71
-
auto-save = {
72
-
focus-lost = true; # Ghostty supports it :)
73
-
after-delay.enable = true;
74
-
};
75
-
76
-
whitespace.render = {
77
-
space = "none";
78
-
tab = "all";
79
-
};
80
-
81
-
indent-guides.render = true;
82
-
83
-
gutters.layout = [
84
-
"diff"
85
-
"diagnostics"
86
-
"line-numbers"
87
-
"spacer"
88
-
];
89
-
};
90
-
keys = {
91
-
normal = {
92
-
"C-s" = ":w";
93
-
"tab" = "move_parent_node_end";
94
-
"S-tab" = "move_parent_node_start";
95
-
"A-h" = "goto_previous_buffer";
96
-
"A-l" = "goto_next_buffer";
97
-
};
98
-
insert = {
99
-
"S-tab" = "move_parent_node_start";
100
-
};
101
-
select = {
102
-
"tab" = "move_parent_node_end";
103
-
"S-tab" = "move_parent_node_start";
104
-
};
105
-
};
106
-
};
107
-
themes.catppuccin_mocha_plus = {
108
-
inherits = "catppuccin_mocha";
109
-
110
-
"ui.statusline" = {
111
-
fg = "subtext0";
112
-
bg = "mantle";
113
-
};
114
-
"ui.statusline.normal" = {
115
-
fg = "mantle";
116
-
bg = "rosewater";
117
-
modifiers = [ "bold" ];
118
-
};
119
-
"ui.statusline.insert" = {
120
-
fg = "mantle";
121
-
bg = "maroon";
122
-
modifiers = [ "bold" ];
123
-
};
124
-
"ui.statusline.select" = {
125
-
fg = "mantle";
126
-
bg = "mauve";
127
-
modifiers = [ "bold" ];
128
-
};
129
-
130
-
"ui.cursor.primary.normal" = {
131
-
fg = "base";
132
-
bg = "rosewater";
133
-
};
134
-
"ui.cursor.primary.insert" = {
135
-
fg = "base";
136
-
bg = "maroon";
137
-
};
138
-
"ui.cursor.primary.select" = {
139
-
fg = "base";
140
-
bg = "mauve";
141
-
};
142
-
143
-
# Underlines are gross
144
-
"ui.bufferline" = {
145
-
fg = "subtext0";
146
-
bg = "mantle";
147
-
modifiers = [ "dim" ];
148
-
};
149
-
"ui.bufferline.active" = {
150
-
fg = "text";
151
-
bg = "base";
152
-
modifiers = [ "bold" ];
153
-
};
154
-
155
-
# Mimick VS Code
156
-
"ui.virtual.inlay-hint" = {
157
-
fg = "overlay0";
158
-
bg = "base";
159
-
};
160
-
161
-
"ui.popup".fg = "rosewater";
162
-
"ui.popup.info".fg = "maroon";
163
-
"ui.help".fg = "maroon";
164
-
"ui.menu".fg = "text";
165
-
"ui.menu.selected" = {
166
-
fg = "maroon";
167
-
modifiers = [ "bold" ];
168
-
};
169
-
"ui.menu.scroll".fg = "maroon";
170
-
"ui.background".bg = ""; # Transparent
171
-
172
-
# Why the heck is it *blue*?;
173
-
"diff.delta" = "yellow";
174
-
175
-
# Maroon itself is already eye-catching enough, no need to italicize
176
-
"variable.parameter" = "maroon";
177
-
# Teal is wayyyyyy too obtrusive in Nix
178
-
"variable.other.member" = "subtext1";
179
-
"variable.builtin" = "peach";
180
-
181
-
# Fix ${} in Nix
182
-
"punctuation.special" = "maroon";
183
-
"operator" = "maroon";
184
-
};
185
-
};
186
-
187
-
hm.home.packages = with pkgs; [
188
-
# Language servers
189
-
lua-language-server
190
-
nil
191
-
basedpyright
192
-
oxlint
193
-
ruff-lsp
194
-
typescript-language-server
195
-
vscode-langservers-extracted
196
-
zls
197
-
198
-
# Formatters
199
-
black
200
-
nixfmt-rfc-style
201
-
prettierd
202
-
shfmt
203
-
stylua
204
-
205
-
tree-sitter
206
-
];
207
-
# ++ (with pkgs.nodePackages_latest; [
208
-
# svelte-language-server
209
-
# ]);
210
-
}
-61
users/leah/programs/jj/default.nix
-61
users/leah/programs/jj/default.nix
···
1
-
{ pkgs, config, ... }:
2
-
{
3
-
hm.programs.git.difftastic.enable = true;
4
-
5
-
hm.home.packages = with pkgs; [
6
-
watchman
7
-
meld
8
-
];
9
-
10
-
hm.programs.jujutsu = {
11
-
enable = true;
12
-
settings = {
13
-
user = {
14
-
name = config.roles.base.fullName;
15
-
email = "hi@pluie.me";
16
-
};
17
-
ui = {
18
-
default-command = ["log"];
19
-
diff.tool = [
20
-
"difft"
21
-
"--color=always"
22
-
"$left"
23
-
"$right"
24
-
];
25
-
pager = "moar -no-linenumbers";
26
-
diff-editor = "meld";
27
-
merge-editor = "meld";
28
-
log-word-wrap = true;
29
-
editor = "hx";
30
-
};
31
-
template-aliases = {
32
-
"format_short_id(id)" = ''id.shortest(12).prefix() ++ "[" ++ id.shortest(12).rest() ++ "]"'';
33
-
"format_timestamp(timestamp)" = "timestamp.ago()";
34
-
"format_short_signature(signature)" = "signature";
35
-
};
36
-
37
-
fix.tools = {
38
-
nixfmt = {
39
-
command = [ "nixfmt" ];
40
-
patterns = [ "glob:'**/*.nix'" ];
41
-
};
42
-
};
43
-
44
-
signing = {
45
-
behavior = "drop";
46
-
backend = "ssh";
47
-
key = config.roles.base.publicKey;
48
-
};
49
-
50
-
git = {
51
-
sign-on-push = true;
52
-
private-commits = "description(glob:'wip:*')";
53
-
};
54
-
55
-
core = {
56
-
fsmonitor = "watchman";
57
-
watchman.register-snapshot-trigger = true;
58
-
};
59
-
};
60
-
};
61
-
}
+40
users/leah/programs/steam.nix
+40
users/leah/programs/steam.nix
···
1
+
{
2
+
config,
3
+
pkgs,
4
+
lib,
5
+
...
6
+
}:
7
+
let
8
+
# Helper script for running Steam games with
9
+
# a *reasonable* preset
10
+
steam-assist =
11
+
lib.optionalString config.hardware.nvidia.prime.offload.enable ''
12
+
export __NV_PRIME_RENDER_OFFLOAD=1
13
+
export __GLX_VENDOR_LIBRARY_NAME=nvidia
14
+
'' + ''
15
+
${lib.getExe' pkgs.gamemode "gamemoderun"} $@
16
+
'';
17
+
in
18
+
{
19
+
programs.gamemode.enable = true;
20
+
21
+
programs.steam = {
22
+
enable = true;
23
+
24
+
# Install Proton GE by default
25
+
extraCompatPackages = [ pkgs.proton-ge-bin ];
26
+
27
+
# Some native Linux games *assume* the distro has
28
+
# certain packages that may not be present on NixOS.
29
+
extraPackages = [
30
+
pkgs.ncurses6 # Crusader Kings III
31
+
];
32
+
33
+
protontricks.enable = true;
34
+
remotePlay.openFirewall = true;
35
+
};
36
+
37
+
hjem.users.leah.packages = [
38
+
(pkgs.writeShellScriptBin "steam-assist" steam-assist)
39
+
];
40
+
}
+81
users/leah/programs/vcs.nix
+81
users/leah/programs/vcs.nix
···
1
+
{
2
+
pkgs,
3
+
lib,
4
+
...
5
+
}:
6
+
{
7
+
hjem.users.leah.packages = with pkgs; [
8
+
jujutsu
9
+
difftastic
10
+
watchman
11
+
];
12
+
13
+
hjem.users.leah.ext.programs = {
14
+
git = {
15
+
enable = true;
16
+
settings = {
17
+
diff.external = "${lib.getExe pkgs.difftastic} --color auto --background light --display side-by-side";
18
+
19
+
init.defaultBranch = "main";
20
+
push.autoSetupRemote = true;
21
+
url."https://github.com/".insteadOf = "gh:";
22
+
gpg.format = "ssh";
23
+
24
+
user = {
25
+
name = "Leah Amelia Chen";
26
+
email = "hi@pluie.me";
27
+
signingKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC7uJGE2/25M4a3DIVxtnTA5INqWsFGw+49qHXaN/kqy";
28
+
};
29
+
};
30
+
};
31
+
32
+
jujutsu = {
33
+
enable = true;
34
+
settings = {
35
+
user = {
36
+
name = "Leah Amelia Chen";
37
+
email = "hi@pluie.me";
38
+
};
39
+
ui = {
40
+
default-command = [ "log" ];
41
+
diff.tool = [
42
+
"${lib.getExe pkgs.difftastic}"
43
+
"--color=always"
44
+
"$left"
45
+
"$right"
46
+
];
47
+
pager = "${lib.getExe pkgs.moar} -no-linenumbers";
48
+
log-word-wrap = true;
49
+
};
50
+
template-aliases = {
51
+
"format_short_id(id)" = ''id.shortest(12).prefix() ++ "[" ++ id.shortest(12).rest() ++ "]"'';
52
+
"format_timestamp(timestamp)" = "timestamp.ago()";
53
+
"format_short_signature(signature)" = "signature";
54
+
};
55
+
56
+
fix.tools = {
57
+
nixfmt = {
58
+
command = [ "nixfmt" ];
59
+
patterns = [ "glob:'**/*.nix'" ];
60
+
};
61
+
};
62
+
63
+
signing = {
64
+
behavior = "drop";
65
+
backend = "ssh";
66
+
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC7uJGE2/25M4a3DIVxtnTA5INqWsFGw+49qHXaN/kqy";
67
+
};
68
+
69
+
git = {
70
+
sign-on-push = true;
71
+
private-commits = "description(glob:'wip:*')";
72
+
};
73
+
74
+
core = {
75
+
fsmonitor = "watchman";
76
+
watchman.register-snapshot-trigger = true;
77
+
};
78
+
};
79
+
};
80
+
};
81
+
}