tangled
alpha
login
or
join now
pluie.me
/
flake
2
fork
atom
All my system configs and packages in one repo
2
fork
atom
overview
issues
pulls
pipelines
hjemify
pluie.me
10 months ago
dfde4c0a
29fd919c
verified
This commit was signed with the committer's
known signature
.
pluie.me
SSH Key Fingerprint:
SHA256:YtI1D7vlcZ4obaiJ4tQihtswcMhHKdfYZuc4whOX2y8=
+991
-2378
68 changed files
expand all
collapse all
unified
split
.envrc
.gitignore
flake.lock
flake.nix
hm-modules
ctp-plus
default.nix
default.nix
hm-plus
default.nix
programs
1password.nix
default.nix
discord.nix
fcitx5
default.nix
rime.nix
git.nix
modules
hjem-ctp
plasma.nix
vencord.nix
hjem-ext
README.md
programs
direnv.nix
git.nix
hyfetch.nix
jujutsu.nix
moar.nix
vesktop.nix
packages
catppuccin-fcitx5
package.nix
catppuccin-fish
package.nix
roles
audio
default.nix
nixos.nix
base
default.nix
nixos.nix
boot
default.nix
lanzaboote
default.nix
nixos.nix
darwin.nix
default.nix
email
default.nix
fish
default.nix
nixos.nix
fonts
darwin.nix
default.nix
nixos.nix
mirrors
default.nix
networking
default.nix
nixos.nix
nix
default.nix
nixos.nix
nixos.nix
plasma
default.nix
nixos.nix
rust
default.nix
systems
common.nix
default.nix
fettuccine
default.nix
users
leah
appearance.nix
default.nix
presets
plasma
default.nix
settings
default.nix
programs
1password.nix
default.nix
discord
default.nix
fcitx5
default.nix
fcitx5.nix
firefox
default.nix
fish.nix
ghostty.nix
helix
default.nix
helix.nix
jj
default.nix
steam.nix
vcs.nix
+1
.envrc
···
0
···
1
+
has nix && use flake
+2
-1
.gitignore
···
1
-
result
0
···
1
+
result/
2
+
.direnv/
+14
-456
flake.lock
···
1
{
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
"flake-compat": {
138
"flake": false,
139
"locked": {
···
150
"type": "github"
151
}
152
},
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
"flake-parts": {
170
"inputs": {
171
"nixpkgs-lib": [
···
204
"type": "github"
205
}
206
},
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
"ghostty": {
226
"inputs": {
227
"flake-compat": "flake-compat",
228
-
"flake-utils": "flake-utils_2",
229
"nixpkgs-stable": [
230
"nixpkgs"
231
],
···
250
"type": "github"
251
}
252
},
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
"hjem": {
276
"inputs": {
277
"nixpkgs": [
···
299
]
300
},
301
"locked": {
302
-
"lastModified": 1745861051,
303
-
"narHash": "sha256-L1B2KkvbNHCtNbmYNli/DqCwEhshcwrt/p904iIYPNs=",
304
"owner": "snugnug",
305
"repo": "hjem-rum",
306
-
"rev": "1ad4898417031a6b280894f80f041118b6964432",
307
"type": "github"
308
},
309
"original": {
···
312
"type": "github"
313
}
314
},
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
"nix-index-database": {
403
"inputs": {
404
"nixpkgs": [
···
406
]
407
},
408
"locked": {
409
-
"lastModified": 1744518957,
410
-
"narHash": "sha256-RLBSWQfTL0v+7uyskC5kP6slLK1jvIuhaAh8QvB75m4=",
411
"owner": "nix-community",
412
"repo": "nix-index-database",
413
-
"rev": "4fc9ea78c962904f4ea11046f3db37c62e8a02fd",
414
"type": "github"
415
},
416
"original": {
···
421
},
422
"nixos-hardware": {
423
"locked": {
424
-
"lastModified": 1744366945,
425
-
"narHash": "sha256-OuLhysErPHl53BBifhesrRumJNhrlSgQDfYOTXfgIMg=",
426
"owner": "NixOS",
427
"repo": "nixos-hardware",
428
-
"rev": "1fe3cc2bc5d2dc9c81cb4e63d2f67c1543340df1",
429
"type": "github"
430
},
431
"original": {
···
437
},
438
"nixpkgs": {
439
"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=",
458
"owner": "NixOS",
459
"repo": "nixpkgs",
460
-
"rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650",
461
"type": "github"
462
},
463
"original": {
···
467
"type": "github"
468
}
469
},
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
"root": {
536
"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
"flake-parts": "flake-parts",
544
-
"flake-utils": "flake-utils",
545
"ghostty": "ghostty",
546
"hjem": "hjem",
547
"hjem-rum": "hjem-rum",
548
-
"home-manager": "home-manager",
549
-
"krunner-nix": "krunner-nix",
550
-
"lanzaboote": "lanzaboote",
551
-
"nix-darwin": "nix-darwin",
552
"nix-index-database": "nix-index-database",
553
"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"
595
}
596
},
597
"systems": {
···
606
"original": {
607
"owner": "nix-systems",
608
"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
"type": "github"
643
}
644
},
···
1
{
2
"nodes": {
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
3
"flake-compat": {
4
"flake": false,
5
"locked": {
···
16
"type": "github"
17
}
18
},
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
19
"flake-parts": {
20
"inputs": {
21
"nixpkgs-lib": [
···
54
"type": "github"
55
}
56
},
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
57
"ghostty": {
58
"inputs": {
59
"flake-compat": "flake-compat",
60
+
"flake-utils": "flake-utils",
61
"nixpkgs-stable": [
62
"nixpkgs"
63
],
···
82
"type": "github"
83
}
84
},
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
85
"hjem": {
86
"inputs": {
87
"nixpkgs": [
···
109
]
110
},
111
"locked": {
112
+
"lastModified": 1745973953,
113
+
"narHash": "sha256-s1ZHPUq9mi0VHVLI927tFdsMQqB5ClEBrYCwI8C7BMA=",
114
"owner": "snugnug",
115
"repo": "hjem-rum",
116
+
"rev": "d152f54bcd38dff8badc9449f6aa8f44944e1b17",
117
"type": "github"
118
},
119
"original": {
···
122
"type": "github"
123
}
124
},
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
125
"nix-index-database": {
126
"inputs": {
127
"nixpkgs": [
···
129
]
130
},
131
"locked": {
132
+
"lastModified": 1745725746,
133
+
"narHash": "sha256-iR+idGZJ191cY6NBXyVjh9QH8GVWTkvZw/w+1Igy45A=",
134
"owner": "nix-community",
135
"repo": "nix-index-database",
136
+
"rev": "187524713d0d9b2d2c6f688b81835114d4c2a7c6",
137
"type": "github"
138
},
139
"original": {
···
144
},
145
"nixos-hardware": {
146
"locked": {
147
+
"lastModified": 1745955289,
148
+
"narHash": "sha256-mmV2oPhQN+YF2wmnJzXX8tqgYmUYXUj3uUUBSTmYN5o=",
149
"owner": "NixOS",
150
"repo": "nixos-hardware",
151
+
"rev": "72081c9fbbef63765ae82bff9727ea79cc86bd5b",
152
"type": "github"
153
},
154
"original": {
···
160
},
161
"nixpkgs": {
162
"locked": {
163
+
"lastModified": 1745930157,
164
+
"narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=",
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
165
"owner": "NixOS",
166
"repo": "nixpkgs",
167
+
"rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae",
168
"type": "github"
169
},
170
"original": {
···
174
"type": "github"
175
}
176
},
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
177
"root": {
178
"inputs": {
0
0
0
0
0
0
179
"flake-parts": "flake-parts",
0
180
"ghostty": "ghostty",
181
"hjem": "hjem",
182
"hjem-rum": "hjem-rum",
0
0
0
0
183
"nix-index-database": "nix-index-database",
184
"nixos-hardware": "nixos-hardware",
185
+
"nixpkgs": "nixpkgs"
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
186
}
187
},
188
"systems": {
···
197
"original": {
198
"owner": "nix-systems",
199
"repo": "default",
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
200
"type": "github"
201
}
202
},
+51
-85
flake.nix
···
6
7
# NOTE: please keep this in alphabetical order.
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
-
};
30
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
-
};
38
39
flake-parts = {
40
url = "github:hercules-ci/flake-parts";
41
inputs.nixpkgs-lib.follows = "nixpkgs";
42
};
43
-
44
-
# Only for input deduplication
45
-
flake-utils.url = "github:numtide/flake-utils";
46
47
ghostty = {
48
url = "github:pluiedev/ghostty/edge";
···
53
};
54
55
hjem = {
56
-
url = "github:feel-co/hjem";
57
-
inputs.nixpkgs.follows = "nixpkgs";
58
};
59
60
hjem-rum = {
61
-
url = "github:snugnug/hjem-rum";
62
-
inputs.nixpkgs.follows = "nixpkgs";
63
-
};
64
-
65
-
krunner-nix = {
66
-
url = "github:pluiedev/krunner-nix";
67
inputs.nixpkgs.follows = "nixpkgs";
68
};
69
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
-
};
82
83
-
nix-darwin = {
84
-
url = "github:LnL7/nix-darwin";
85
-
inputs.nixpkgs.follows = "nixpkgs";
86
-
};
87
88
nix-index-database = {
89
url = "github:nix-community/nix-index-database";
···
92
93
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
94
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";
104
};
105
106
outputs =
107
inputs:
108
let
0
109
packages' =
110
pkgs':
111
pkgs'.lib.packagesFromDirectoryRecursive {
···
114
};
115
in
116
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
-
];
125
126
-
flake.overlays.default = _: packages';
0
0
0
0
0
0
0
0
0
0
0
0
127
128
perSystem =
129
{ pkgs, ... }:
130
{
131
packages = packages' pkgs;
132
-
};
133
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
-
# };
145
};
146
}
···
6
7
# NOTE: please keep this in alphabetical order.
8
9
+
# ctp-discord-compiled = {
10
+
# url = "github:catppuccin/discord/gh-pages";
11
+
# flake = false;
12
+
# };
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
13
14
+
# ctp-vscode-compiled = {
15
+
# url = "github:catppuccin/vscode/catppuccin-vsc-v3.14.0";
16
+
# flake = false;
17
+
# };
0
0
0
18
19
flake-parts = {
20
url = "github:hercules-ci/flake-parts";
21
inputs.nixpkgs-lib.follows = "nixpkgs";
22
};
0
0
0
23
24
ghostty = {
25
url = "github:pluiedev/ghostty/edge";
···
30
};
31
32
hjem = {
33
+
url = "github:feel-co/hjem";
34
+
inputs.nixpkgs.follows = "nixpkgs";
35
};
36
37
hjem-rum = {
38
+
url = "github:snugnug/hjem-rum";
0
0
0
0
0
39
inputs.nixpkgs.follows = "nixpkgs";
40
};
41
42
+
# lanzaboote = {
43
+
# url = "github:nix-community/lanzaboote";
44
+
# inputs = {
45
+
# flake-parts.follows = "flake-parts";
46
+
# nixpkgs.follows = "nixpkgs";
47
+
# };
48
+
# };
0
0
0
0
0
49
50
+
# home-manager = {
51
+
# url = "github:nix-community/home-manager";
52
+
# inputs.nixpkgs.follows = "nixpkgs";
53
+
# };
54
55
nix-index-database = {
56
url = "github:nix-community/nix-index-database";
···
59
60
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
61
62
+
# plasma-manager = {
63
+
# url = "github:nix-community/plasma-manager";
64
+
# inputs = {
65
+
# home-manager.follows = "home-manager";
66
+
# nixpkgs.follows = "nixpkgs";
67
+
# };
68
+
# };
0
0
69
};
70
71
outputs =
72
inputs:
73
let
74
+
inherit (inputs.nixpkgs) lib;
75
packages' =
76
pkgs':
77
pkgs'.lib.packagesFromDirectoryRecursive {
···
80
};
81
in
82
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
83
+
imports = [ ./systems ];
0
0
0
0
0
0
0
84
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
+
};
98
99
perSystem =
100
{ pkgs, ... }:
101
{
102
packages = packages' pkgs;
0
103
104
+
devShells.default = pkgs.mkShell {
105
+
packages = with pkgs; [
106
+
nil
107
+
nixfmt-rfc-style
108
+
];
109
+
};
110
+
};
0
0
0
0
111
};
112
}
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
hm-modules/ctp-plus/plasma.nix
modules/hjem-ctp/plasma.nix
hm-modules/ctp-plus/vencord.nix
modules/hjem-ctp/vencord.nix
-10
hm-modules/default.nix
···
1
-
{ flake-parts-lib, moduleWithSystem, inputs, ... }:
2
-
let
3
-
inherit (flake-parts-lib) importApply;
4
-
in
5
-
{
6
-
flake.hmModules = {
7
-
ctp-plus = importApply ./ctp-plus { inherit inputs; };
8
-
hm-plus = moduleWithSystem (import ./hm-plus);
9
-
};
10
-
}
···
0
0
0
0
0
0
0
0
0
0
hm-modules/hm-plus/README.md
modules/hjem-ext/README.md
-6
hm-modules/hm-plus/default.nix
···
1
-
{ inputs' }: {
2
-
imports = [
3
-
./programs
4
-
];
5
-
_module.args = { inherit inputs'; };
6
-
}
···
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-10
hm-modules/hm-plus/programs/default.nix
···
1
-
{
2
-
imports = [
3
-
./1password.nix
4
-
./discord.nix
5
-
./fcitx5
6
-
./git.nix
7
-
./moar.nix
8
-
./vesktop.nix
9
-
];
10
-
}
···
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+5
-4
hm-modules/hm-plus/programs/moar.nix
modules/hjem-ext/programs/moar.nix
···
5
...
6
}:
7
let
8
-
cfg = config.programs.moar;
9
10
toFlag = k: v: if lib.isBool v then
11
lib.optionalString (v) "-${k}"
···
16
17
in
18
{
19
-
options.programs.moar = {
20
enable = lib.mkEnableOption "Moar";
21
22
package = lib.mkPackageOption pkgs "moar" {};
···
32
};
33
};
34
35
-
config = lib.mkIf (cfg.enable) {
36
-
home.sessionVariables = {
0
37
PAGER = "moar";
38
MOAR = lib.concatStringsSep " " (lib.mapAttrsToList toFlag cfg.settings);
39
};
···
5
...
6
}:
7
let
8
+
cfg = config.ext.programs.moar;
9
10
toFlag = k: v: if lib.isBool v then
11
lib.optionalString (v) "-${k}"
···
16
17
in
18
{
19
+
options.ext.programs.moar = {
20
enable = lib.mkEnableOption "Moar";
21
22
package = lib.mkPackageOption pkgs "moar" {};
···
32
};
33
};
34
35
+
config = lib.mkIf cfg.enable {
36
+
packages = [ cfg.package ];
37
+
environment.sessionVariables = {
38
PAGER = "moar";
39
MOAR = lib.concatStringsSep " " (lib.mapAttrsToList toFlag cfg.settings);
40
};
+17
-9
hm-modules/hm-plus/programs/vesktop.nix
modules/hjem-ext/programs/vesktop.nix
···
13
types
14
optionalAttrs
15
;
16
-
cfg = config.programs.vesktop;
17
format = pkgs.formats.json { };
18
in
19
{
20
-
options.programs.vesktop = {
21
enable = mkEnableOption "Vesktop";
22
23
package = mkPackageOption pkgs "Vesktop" { default = [ "vesktop" ]; };
···
58
};
59
60
config = mkIf cfg.enable {
61
-
home.packages = [ (cfg.package.override { withSystemVencord = cfg.vencord.useSystemPackage; }) ];
0
0
0
0
62
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
-
};
0
0
0
0
69
};
70
}
···
13
types
14
optionalAttrs
15
;
16
+
cfg = config.ext.programs.vesktop;
17
format = pkgs.formats.json { };
18
in
19
{
20
+
options.ext.programs.vesktop = {
21
enable = mkEnableOption "Vesktop";
22
23
package = mkPackageOption pkgs "Vesktop" { default = [ "vesktop" ]; };
···
58
};
59
60
config = mkIf cfg.enable {
61
+
packages = [
62
+
(cfg.package.override {
63
+
withSystemVencord = cfg.vencord.useSystemPackage;
64
+
})
65
+
];
66
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
+
};
77
};
78
}
+31
modules/hjem-ext/programs/direnv.nix
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+22
packages/catppuccin-fish/package.nix
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
1
-
{ lib, ... }:
2
-
let
3
-
inherit (lib) mkEnableOption;
4
-
in
5
-
{
6
-
options.roles.audio.enable = mkEnableOption "audio support" // {
7
-
default = true;
8
-
};
9
-
}
···
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-13
roles/boot/default.nix
···
1
-
{ lib, ... }:
2
-
let
3
-
inherit (lib) mkEnableOption;
4
-
in
5
-
{
6
-
imports = [ ./lanzaboote ];
7
-
8
-
options.roles.boot = {
9
-
enable = mkEnableOption "boot settings" // {
10
-
default = true;
11
-
};
12
-
};
13
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-11
roles/darwin.nix
···
1
-
inputs@{ lib, ... }:
2
-
{
3
-
imports =
4
-
[ ./. ]
5
-
++ (lib.pipe (import ./. inputs).imports [
6
-
(map (s: /${s}/darwin.nix))
7
-
(builtins.filter builtins.pathExists)
8
-
]);
9
-
10
-
system.stateVersion = 4;
11
-
}
···
0
0
0
0
0
0
0
0
0
0
0
-8
roles/default.nix
···
1
-
{ lib, ... }:
2
-
{
3
-
imports = lib.pipe ./. [
4
-
builtins.readDir
5
-
(lib.filterAttrs (n: ty: ty == "directory" && builtins.pathExists ./${n}/default.nix))
6
-
(lib.mapAttrsToList (n: _: ./${n}))
7
-
];
8
-
}
···
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-7
roles/fish/default.nix
···
1
-
{ lib, ... }:
2
-
{
3
-
options.roles.fish = {
4
-
enable = lib.mkEnableOption "Fish shell";
5
-
defaultShell = lib.mkEnableOption "Fish shell as the user's default shell";
6
-
};
7
-
}
···
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-8
roles/fonts/darwin.nix
···
1
-
{ config, lib, ... }:
2
-
let
3
-
cfg = config.roles.fonts;
4
-
inherit (lib) mkIf;
5
-
in
6
-
{
7
-
config = mkIf cfg.enable { fonts.fonts = cfg.packages; };
8
-
}
···
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-11
roles/networking/default.nix
···
1
-
{ lib, ... }:
2
-
let
3
-
inherit (lib) mkEnableOption;
4
-
in
5
-
{
6
-
options.roles.networking = {
7
-
enable = mkEnableOption "Networking" // {
8
-
default = true;
9
-
};
10
-
};
11
-
}
···
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-11
roles/nixos.nix
···
1
-
inputs@{ lib, ... }:
2
-
{
3
-
imports =
4
-
[ ./. ]
5
-
++ (lib.pipe (import ./. inputs).imports [
6
-
(map (s: /${s}/nixos.nix))
7
-
(builtins.filter builtins.pathExists)
8
-
]);
9
-
10
-
system.stateVersion = "24.05";
11
-
}
···
0
0
0
0
0
0
0
0
0
0
0
-7
roles/plasma/default.nix
···
1
-
{ lib, ... }:
2
-
{
3
-
options.roles.plasma = {
4
-
enable = lib.mkEnableOption "Plasma";
5
-
krunner-nix.enable = lib.mkEnableOption "krunner-nix, a KRunner plugin that suggests Nix programs to run";
6
-
};
7
-
}
···
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+129
systems/common.nix
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
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
40
{
41
-
flake = {
42
-
nixosConfigurations = mkMachines {
43
-
fettuccine = nixos-pc;
44
-
tagliatelle = nixos-pc;
45
-
};
46
-
darwinConfigurations = mkMachines {
47
-
fromage = darwin-pc;
0
0
0
48
};
49
};
50
}
···
1
+
{
2
+
inputs,
3
+
self,
4
+
...
5
+
}:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
6
{
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
+
};
17
};
18
};
19
}
+42
-19
systems/fettuccine/default.nix
···
1
{
2
-
lib,
3
pkgs,
0
4
inputs,
5
-
config,
6
...
7
}:
8
{
9
imports = with inputs.nixos-hardware.nixosModules; [
0
10
./hardware-configuration.nix
11
12
common-hidpi
13
asus-zephyrus-gu603h
14
];
15
16
-
roles = {
17
-
# boot.lanzaboote.enable = true;
18
-
# nvidia.enable = true;
0
0
0
19
};
20
21
-
hardware.bluetooth.enable = true;
0
0
0
0
0
0
0
0
0
22
23
-
# Other Nvidia settings are set via nixos-hardware
0
0
0
24
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" ];
29
0
30
services.asusd.enable = true;
31
32
-
specialisation.china.configuration = {
33
-
roles.mirrors.chinese.enable = true;
34
-
environment.variables.NIXOS_SPECIALISATION = "china";
35
36
-
environment.systemPackages = [ pkgs.nekoray ];
0
0
37
38
-
nix.settings = {
39
-
experimental-features = [ "configurable-impure-env" ];
40
-
impure-env = [ "all_proxy=http://127.0.0.1:2080" ];
41
-
};
0
0
0
0
0
42
};
43
}
···
1
{
2
+
config,
3
pkgs,
4
+
lib,
5
inputs,
0
6
...
7
}:
8
{
9
imports = with inputs.nixos-hardware.nixosModules; [
10
+
../common.nix
11
./hardware-configuration.nix
12
13
common-hidpi
14
asus-zephyrus-gu603h
15
];
16
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;
23
};
24
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;
35
36
+
# Beta can sometimes be more stable than, well, stable
37
+
package = config.boot.kernelPackages.nvidiaPackages.beta;
38
+
};
39
+
};
40
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";
45
46
+
# This is an ASUS computer after all
47
services.asusd.enable = true;
48
49
+
networking.firewall = {
50
+
enable = true;
0
51
52
+
# Allow previewing local Vite builds on other devices via LAN
53
+
allowedTCPPorts = [ 5173 ];
54
+
};
55
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
+
];
65
};
66
}
+43
-58
users/leah/appearance.nix
···
1
{
2
-
self,
3
-
inputs,
4
pkgs,
5
lib,
6
...
···
8
let
9
flavor = "mocha";
10
accent = "maroon";
0
0
0
11
in
12
{
13
-
imports = [ inputs.catppuccin.nixosModules.catppuccin ];
14
-
catppuccin = {
15
-
enable = true;
16
-
inherit flavor accent;
17
};
18
19
-
catppuccin.plymouth.enable = false;
20
-
boot.plymouth.themePackages = [ pkgs.plymouth-blahaj-theme ];
21
-
boot.plymouth.theme = "blahaj";
0
0
0
22
23
-
hm.imports = [
24
-
inputs.catppuccin.homeModules.catppuccin
25
-
self.hmModules.ctp-plus
26
-
];
0
27
28
-
hm.catppuccin = {
29
-
enable = true;
30
-
inherit flavor accent;
31
-
};
32
33
-
hm.programs.fish.interactiveShellInit = ''
34
-
set -x LS_COLORS (${lib.getExe pkgs.vivid} generate catppuccin-${flavor})
35
-
'';
0
36
37
-
hm.programs.moar.settings.style = "catppuccin-${flavor}";
0
38
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
-
};
61
62
-
roles.fonts = {
63
-
enable = true;
64
packages = with pkgs; [
65
iosevka
66
noto-fonts-color-emoji
···
70
dm-sans-unstable
71
];
72
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
-
];
0
0
86
};
87
};
88
}
···
1
{
0
0
2
pkgs,
3
lib,
4
...
···
6
let
7
flavor = "mocha";
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 { };
12
in
13
{
14
+
boot.plymouth = {
15
+
themePackages = [ pkgs.plymouth-blahaj-theme ];
16
+
theme = "blahaj";
0
17
};
18
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}";
25
26
+
".config/fcitx5/conf/classicui.conf".source = fcitx5ini.generate "fcitx5-classicui.conf" {
27
+
globalSection = {
28
+
Theme = "catppuccin-${flavor}-${accent}";
29
+
};
30
+
};
31
32
+
".config/fish/themes/Catppuccin ${mkUpper flavor}.theme".source =
33
+
"${pkgs.catppuccin-fish}/share/fish/themes/Catppuccin ${mkUpper flavor}.theme";
34
+
};
0
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
+
'';
40
41
+
ext.programs.moar.settings.style = "catppuccin-${flavor}";
42
+
};
43
44
+
fonts = {
45
+
enableDefaultPackages = true;
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
46
0
0
47
packages = with pkgs; [
48
iosevka
49
noto-fonts-color-emoji
···
53
dm-sans-unstable
54
];
55
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
+
};
71
};
72
};
73
}
+20
-66
users/leah/default.nix
···
1
{
2
config,
3
-
pkgs,
4
-
self,
5
...
6
}:
7
{
8
imports = [
9
./appearance.nix
10
-
./presets/plasma
11
./programs
0
0
0
12
];
13
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
-
};
26
27
i18n.supportedLocales = [ "all" ];
28
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;
68
};
69
70
-
environment.variables = {
71
-
NIXOS_OZONE_WL = "1";
72
-
SDL_VIDEODRIVER = "wayland";
73
-
};
74
75
-
networking.firewall = {
76
-
enable = true;
77
-
allowedTCPPorts = [
78
-
80
79
-
443
80
-
5173
81
-
];
82
-
};
83
}
···
1
{
2
config,
3
+
inputs,
0
4
...
5
}:
6
{
7
imports = [
8
./appearance.nix
9
+
# ./presets/plasma
10
./programs
11
+
12
+
inputs.hjem.nixosModules.hjem
13
+
inputs.nix-index-database.nixosModules.nix-index
14
];
15
16
+
hjem.extraModules = [
17
+
inputs.hjem-rum.hjemModules.default
18
+
];
0
0
0
0
0
0
0
0
0
19
20
i18n.supportedLocales = [ "all" ];
21
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";
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
31
};
32
33
+
# Name and directory should be populated by users.users
34
+
hjem.users.leah.enable = true;
0
0
35
36
+
hjem.clobberByDefault = true;
0
0
0
0
0
0
0
37
}
-13
users/leah/presets/plasma/default.nix
···
4
./sddm.nix
5
./settings
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
}
···
4
./sddm.nix
5
./settings
6
];
0
0
0
0
0
0
0
0
0
0
0
0
0
7
}
-2
users/leah/presets/plasma/settings/default.nix
···
2
{
3
imports = [ ./panels.nix ];
4
5
-
hm.programs.konsole.enable = true;
6
-
7
hm.programs.plasma = {
8
enable = true;
9
···
2
{
3
imports = [ ./panels.nix ];
4
0
0
5
hm.programs.plasma = {
6
enable = true;
7
+29
users/leah/programs/1password.nix
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
1
{
2
-
config,
3
pkgs,
4
-
lib,
5
-
inputs,
6
-
inputs',
7
...
8
}:
9
{
10
imports = [
0
11
./discord
12
-
./fcitx5
13
./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
47
];
48
-
49
-
services.flatpak.enable = true;
50
51
programs = {
52
-
appimage.enable = true;
53
gamemode.enable = true;
54
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;
65
};
66
0
0
0
0
0
0
0
0
67
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
-
];
84
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";
116
117
-
signing.key = config.roles.base.publicKey;
118
-
signingFormat = "ssh";
119
120
-
extraConfig = {
121
-
init.defaultBranch = "main";
122
-
push.autoSetupRemote = true;
123
-
url."https://github.com/".insteadOf = "gh:";
124
};
125
-
};
126
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";
0
135
};
136
-
};
137
138
-
moar = {
139
-
enable = true;
140
-
settings = {
141
-
style = "catppuccin-mocha";
142
-
no-statusbar = true;
143
-
wrap = true;
144
};
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
};
156
};
157
}
···
1
{
0
2
pkgs,
0
0
0
3
...
4
}:
5
{
6
imports = [
7
+
./1password.nix
8
./discord
9
+
./fcitx5.nix
10
./firefox
11
+
./fish.nix
12
+
./ghostty.nix
13
+
./helix.nix
14
+
./vcs.nix
15
+
./steam.nix
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
16
];
0
0
17
18
programs = {
0
19
gamemode.enable = true;
20
localsend.enable = true;
21
+
nix-index-database.comma.enable = true;
0
0
0
0
0
0
0
0
0
22
};
23
24
+
hjem.users.leah = {
25
+
packages = with pkgs; [
26
+
# Apps
27
+
nekoray
28
+
prismlauncher
29
+
vlc
30
+
thunderbird
31
+
telegram-desktop
32
33
+
# Command-line apps
34
+
just
35
+
nix-output-monitor
36
+
ripgrep
37
+
starship
38
+
wl-clipboard
39
+
eza
40
+
];
0
0
0
0
0
0
0
0
41
42
+
files.".config/starship.toml".source = ./starship.toml;
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
43
44
+
rum.programs.obs-studio.enable = true;
0
45
46
+
ext.programs = {
47
+
direnv = {
48
+
enable = true;
49
+
nix-direnv.enable = true;
50
};
0
51
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
+
};
61
};
0
62
63
+
moar = {
64
+
enable = true;
65
+
settings = {
66
+
no-statusbar = true;
67
+
wrap = true;
68
+
};
69
};
0
0
0
0
0
0
0
0
0
0
70
};
71
};
72
}
+2
-2
users/leah/programs/discord/default.nix
···
1
{
2
-
hm.catppuccin.vesktop.splashTheming = true;
3
4
-
hm.programs.vesktop = {
5
enable = true;
6
7
settings = {
···
1
{
2
+
# hm.catppuccin.vesktop.splashTheming = true;
3
4
+
hjem.users.leah.ext.programs.vesktop = {
5
enable = true;
6
7
settings = {
+41
users/leah/programs/fcitx5.nix
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+47
-135
users/leah/programs/firefox/default.nix
···
1
{
2
-
config,
3
lib,
4
pkgs,
5
-
inputs',
6
...
7
}:
8
-
{
9
-
hm.programs.firefox = {
10
-
enable = true;
0
0
11
12
-
profiles.${config.roles.base.username} = {
13
-
isDefault = true;
14
-
name = config.roles.base.realName;
0
0
0
0
0
15
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
29
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
-
];
83
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
-
};
0
0
0
0
93
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
-
};
146
};
0
0
0
0
0
0
147
}
···
1
{
0
2
lib,
3
pkgs,
0
4
...
5
}:
6
+
let
7
+
json = pkgs.formats.json { };
8
+
wrappedFirefox = pkgs.firefox.override {
9
+
extraPoliciesFiles = [(json.generate "firefox-policies.json" policies)];
10
+
};
11
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
20
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
0
0
0
0
0
0
0
27
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
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
31
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
+
];
45
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);
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
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 ];
59
}
+23
users/leah/programs/fish.nix
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
1
{
2
-
inputs',
0
3
...
4
}:
5
{
6
-
hm.programs.ghostty = {
7
enable = true;
8
-
9
-
package = inputs'.ghostty.packages.default;
10
-
11
-
enableFishIntegration = true;
12
13
settings = {
14
font-family = "Iosevka";
···
1
{
2
+
inputs,
3
+
pkgs,
4
...
5
}:
6
{
7
+
hjem.users.leah.rum.programs.ghostty = {
8
enable = true;
9
+
package = inputs.ghostty.packages.${pkgs.system}.default;
0
0
0
10
11
settings = {
12
font-family = "Iosevka";
+185
users/leah/programs/helix.nix
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+40
users/leah/programs/steam.nix
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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
+
}