authorgravatar for nmarks413@gmail.comNatalie Marks <nmarks413@gmail.com> 2026-02-02 17:54:22-08:00
committergravatar for nmarks413@gmail.comNatalie Marks <nmarks413@gmail.com> 2026-02-02 17:54:22-08:00
logfa74ed1f5790f39b336d899857206e47c31160cb
tree78d0cf9c94098d24a8bf844facaf447ed4a32188
parent6188561b16c8653053cf504aeae3e9411eb3050e
parent4ce547cd1090c98735622fc88e72ab9bf7e34b5a
signature Commit is signed but in an unrecognized format.

Merge branch 'main' of paperclover.dev:nix/config


43 files changed, 2791 insertions(+), 277 deletions(-)

flake.lock+675-100
......@@ -9,11 +9,11 @@
99 ]
1010 },
1111 "locked": {
12 "lastModified": 1755807717,
13 "narHash": "sha256-x/IcOa+p9VFYlwXmuNhbZ8ce9As24rqy6uABv+tKacU=",
12 "lastModified": 1767990299,
13 "narHash": "sha256-Jz+cp9Ln4++1XiKw9KvZEM2dJ9AdOvayk97ybi9g7zc=",
1414 "owner": "tadfisher",
1515 "repo": "android-nixpkgs",
16 "rev": "4316f29f7f3b34c41f2639ae190022fbed60b850",
16 "rev": "449f2cadee7cb7b665aea209a67f8ecf30176653",
1717 "type": "github"
1818 },
1919 "original": {
......@@ -38,11 +38,11 @@
3838 "sf-pro": "sf-pro"
3939 },
4040 "locked": {
41 "lastModified": 1752383772,
42 "narHash": "sha256-I5Y0gUJS85lGEuuKr+tKSRUpJWeKavE+WmiAHRcyBaU=",
41 "lastModified": 1758228441,
42 "narHash": "sha256-3mA9oFuhJ1EHyhPd17g/EuJi4jDYPGhyxkEitdh3Kmc=",
4343 "owner": "Lyndeno",
4444 "repo": "apple-fonts.nix",
45 "rev": "875c694d7f0ec2020d7511264907a1f0e3262931",
45 "rev": "aba9944f6606a69ebedf7bfb723316139eec3f72",
4646 "type": "github"
4747 },
4848 "original": {
......@@ -51,6 +51,39 @@
5151 "type": "github"
5252 }
5353 },
54 "aquamarine": {
55 "inputs": {
56 "hyprutils": [
57 "hyprland",
58 "hyprutils"
59 ],
60 "hyprwayland-scanner": [
61 "hyprland",
62 "hyprwayland-scanner"
63 ],
64 "nixpkgs": [
65 "hyprland",
66 "nixpkgs"
67 ],
68 "systems": [
69 "hyprland",
70 "systems"
71 ]
72 },
73 "locked": {
74 "lastModified": 1767024902,
75 "narHash": "sha256-sMdk6QkMDhIOnvULXKUM8WW8iyi551SWw2i6KQHbrrU=",
76 "owner": "hyprwm",
77 "repo": "aquamarine",
78 "rev": "b8a0c5ba5a9fbd2c660be7dd98bdde0ff3798556",
79 "type": "github"
80 },
81 "original": {
82 "owner": "hyprwm",
83 "repo": "aquamarine",
84 "type": "github"
85 }
86 },
5487 "darwin": {
5588 "inputs": {
5689 "nixpkgs": [
......@@ -58,11 +91,11 @@
5891 ]
5992 },
6093 "locked": {
61 "lastModified": 1755825449,
62 "narHash": "sha256-XkiN4NM9Xdy59h69Pc+Vg4PxkSm9EWl6u7k6D5FZ5cM=",
94 "lastModified": 1767718503,
95 "narHash": "sha256-V+VkFs0aSG0ca8p/N3gib7FAf4cq9jyr5Gm+ZBrHQpo=",
6396 "owner": "lnl7",
6497 "repo": "nix-darwin",
65 "rev": "8df64f819698c1fee0c2969696f54a843b2231e8",
98 "rev": "9f48ffaca1f44b3e590976b4da8666a9e86e6eb1",
6699 "type": "github"
67100 },
68101 "original": {
......@@ -80,11 +113,11 @@
80113 ]
81114 },
82115 "locked": {
83 "lastModified": 1741473158,
84 "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=",
116 "lastModified": 1764011051,
117 "narHash": "sha256-M7SZyPZiqZUR/EiiBJnmyUbOi5oE/03tCeFrTiUZchI=",
85118 "owner": "numtide",
86119 "repo": "devshell",
87 "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0",
120 "rev": "17ed8d9744ebe70424659b0ef74ad6d41fc87071",
88121 "type": "github"
89122 },
90123 "original": {
......@@ -94,6 +127,22 @@
94127 }
95128 },
96129 "flake-compat": {
130 "flake": false,
131 "locked": {
132 "lastModified": 1767039857,
133 "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
134 "owner": "NixOS",
135 "repo": "flake-compat",
136 "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
137 "type": "github"
138 },
139 "original": {
140 "owner": "NixOS",
141 "repo": "flake-compat",
142 "type": "github"
143 }
144 },
145 "flake-compat_2": {
97146 "flake": false,
98147 "locked": {
99148 "lastModified": 1751685974,
......@@ -109,7 +158,7 @@
109158 "url": "https://git.lix.systems/lix-project/flake-compat.git"
110159 }
111160 },
112 "flake-compat_2": {
161 "flake-compat_3": {
113162 "flake": false,
114163 "locked": {
115164 "lastModified": 1696426674,
......@@ -125,7 +174,7 @@
125174 "type": "github"
126175 }
127176 },
128 "flake-compat_3": {
177 "flake-compat_4": {
129178 "flake": false,
130179 "locked": {
131180 "lastModified": 1696426674,
......@@ -149,11 +198,11 @@
149198 ]
150199 },
151200 "locked": {
152 "lastModified": 1754487366,
153 "narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=",
201 "lastModified": 1760948891,
202 "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
154203 "owner": "hercules-ci",
155204 "repo": "flake-parts",
156 "rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18",
205 "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
157206 "type": "github"
158207 },
159208 "original": {
......@@ -181,24 +230,6 @@
181230 }
182231 },
183232 "flake-utils_2": {
184 "inputs": {
185 "systems": "systems_2"
186 },
187 "locked": {
188 "lastModified": 1701680307,
189 "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
190 "owner": "numtide",
191 "repo": "flake-utils",
192 "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
193 "type": "github"
194 },
195 "original": {
196 "owner": "numtide",
197 "repo": "flake-utils",
198 "type": "github"
199 }
200 },
201 "flake-utils_3": {
202233 "inputs": {
203234 "systems": "systems_3"
204235 },
......@@ -216,9 +247,9 @@
216247 "type": "github"
217248 }
218249 },
219 "flake-utils_4": {
250 "flake-utils_3": {
220251 "inputs": {
221 "systems": "systems_5"
252 "systems": "systems_6"
222253 },
223254 "locked": {
224255 "lastModified": 1705309234,
......@@ -234,9 +265,9 @@
234265 "type": "github"
235266 }
236267 },
237 "flake-utils_5": {
268 "flake-utils_4": {
238269 "inputs": {
239 "systems": "systems_6"
270 "systems": "systems_7"
240271 },
241272 "locked": {
242273 "lastModified": 1710146030,
......@@ -252,9 +283,9 @@
252283 "type": "github"
253284 }
254285 },
255 "flake-utils_6": {
286 "flake-utils_5": {
256287 "inputs": {
257 "systems": "systems_7"
288 "systems": "systems_8"
258289 },
259290 "locked": {
260291 "lastModified": 1705309234,
......@@ -271,7 +302,13 @@
271302 }
272303 },
273304 "gitignore": {
274 "flake": false,
305 "inputs": {
306 "nixpkgs": [
307 "hyprland",
308 "pre-commit-hooks",
309 "nixpkgs"
310 ]
311 },
275312 "locked": {
276313 "lastModified": 1709087332,
277314 "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
......@@ -287,6 +324,22 @@
287324 }
288325 },
289326 "gitignore_2": {
327 "flake": false,
328 "locked": {
329 "lastModified": 1762808025,
330 "narHash": "sha256-XmjITeZNMTQXGhhww6ed/Wacy2KzD6svioyCX7pkUu4=",
331 "owner": "hercules-ci",
332 "repo": "gitignore.nix",
333 "rev": "cb5e3fdca1de58ccbc3ef53de65bd372b48f567c",
334 "type": "github"
335 },
336 "original": {
337 "owner": "hercules-ci",
338 "repo": "gitignore.nix",
339 "type": "github"
340 }
341 },
342 "gitignore_3": {
290343 "inputs": {
291344 "nixpkgs": [
292345 "zls",
......@@ -314,11 +367,11 @@
314367 ]
315368 },
316369 "locked": {
317 "lastModified": 1755810213,
318 "narHash": "sha256-QdenO8f0PTg+tC6HuSvngKcbRZA5oZKmjUT+MXKOLQg=",
370 "lastModified": 1768018810,
371 "narHash": "sha256-WREj1ZQ2wSGtyPAhQJ3SX/7PJ29PNKv04h/7NgqUS+M=",
319372 "owner": "nix-community",
320373 "repo": "home-manager",
321 "rev": "6911d3e7f475f7b3558b4f5a6aba90fa86099baa",
374 "rev": "7c5d9345ad7cc38832cd4007f5cd03daad64d75b",
322375 "type": "github"
323376 },
324377 "original": {
......@@ -328,6 +381,325 @@
328381 "type": "github"
329382 }
330383 },
384 "hyprcursor": {
385 "inputs": {
386 "hyprlang": [
387 "hyprland",
388 "hyprlang"
389 ],
390 "nixpkgs": [
391 "hyprland",
392 "nixpkgs"
393 ],
394 "systems": [
395 "hyprland",
396 "systems"
397 ]
398 },
399 "locked": {
400 "lastModified": 1753964049,
401 "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
402 "owner": "hyprwm",
403 "repo": "hyprcursor",
404 "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
405 "type": "github"
406 },
407 "original": {
408 "owner": "hyprwm",
409 "repo": "hyprcursor",
410 "type": "github"
411 }
412 },
413 "hyprgraphics": {
414 "inputs": {
415 "hyprutils": [
416 "hyprland",
417 "hyprutils"
418 ],
419 "nixpkgs": [
420 "hyprland",
421 "nixpkgs"
422 ],
423 "systems": [
424 "hyprland",
425 "systems"
426 ]
427 },
428 "locked": {
429 "lastModified": 1766946335,
430 "narHash": "sha256-MRD+Jr2bY11MzNDfenENhiK6pvN+nHygxdHoHbZ1HtE=",
431 "owner": "hyprwm",
432 "repo": "hyprgraphics",
433 "rev": "4af02a3925b454deb1c36603843da528b67ded6c",
434 "type": "github"
435 },
436 "original": {
437 "owner": "hyprwm",
438 "repo": "hyprgraphics",
439 "type": "github"
440 }
441 },
442 "hyprland": {
443 "inputs": {
444 "aquamarine": "aquamarine",
445 "hyprcursor": "hyprcursor",
446 "hyprgraphics": "hyprgraphics",
447 "hyprland-guiutils": "hyprland-guiutils",
448 "hyprland-protocols": "hyprland-protocols",
449 "hyprlang": "hyprlang",
450 "hyprutils": "hyprutils",
451 "hyprwayland-scanner": "hyprwayland-scanner",
452 "hyprwire": "hyprwire",
453 "nixpkgs": "nixpkgs",
454 "pre-commit-hooks": "pre-commit-hooks",
455 "systems": "systems_2",
456 "xdph": "xdph"
457 },
458 "locked": {
459 "lastModified": 1768000181,
460 "narHash": "sha256-/E66+tcVBnvJcOFL/CjnjBfKew6A2e+28EZrcRHioBw=",
461 "owner": "hyprwm",
462 "repo": "Hyprland",
463 "rev": "81e7498ec27156ee97aabba6fe4993412d98d1ab",
464 "type": "github"
465 },
466 "original": {
467 "owner": "hyprwm",
468 "repo": "Hyprland",
469 "type": "github"
470 }
471 },
472 "hyprland-guiutils": {
473 "inputs": {
474 "aquamarine": [
475 "hyprland",
476 "aquamarine"
477 ],
478 "hyprgraphics": [
479 "hyprland",
480 "hyprgraphics"
481 ],
482 "hyprlang": [
483 "hyprland",
484 "hyprlang"
485 ],
486 "hyprtoolkit": "hyprtoolkit",
487 "hyprutils": [
488 "hyprland",
489 "hyprutils"
490 ],
491 "hyprwayland-scanner": [
492 "hyprland",
493 "hyprwayland-scanner"
494 ],
495 "nixpkgs": [
496 "hyprland",
497 "nixpkgs"
498 ],
499 "systems": [
500 "hyprland",
501 "systems"
502 ]
503 },
504 "locked": {
505 "lastModified": 1767023960,
506 "narHash": "sha256-R2HgtVS1G3KSIKAQ77aOZ+Q0HituOmPgXW9nBNkpp3Q=",
507 "owner": "hyprwm",
508 "repo": "hyprland-guiutils",
509 "rev": "c2e906261142f5dd1ee0bfc44abba23e2754c660",
510 "type": "github"
511 },
512 "original": {
513 "owner": "hyprwm",
514 "repo": "hyprland-guiutils",
515 "type": "github"
516 }
517 },
518 "hyprland-protocols": {
519 "inputs": {
520 "nixpkgs": [
521 "hyprland",
522 "nixpkgs"
523 ],
524 "systems": [
525 "hyprland",
526 "systems"
527 ]
528 },
529 "locked": {
530 "lastModified": 1765214753,
531 "narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=",
532 "owner": "hyprwm",
533 "repo": "hyprland-protocols",
534 "rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab",
535 "type": "github"
536 },
537 "original": {
538 "owner": "hyprwm",
539 "repo": "hyprland-protocols",
540 "type": "github"
541 }
542 },
543 "hyprlang": {
544 "inputs": {
545 "hyprutils": [
546 "hyprland",
547 "hyprutils"
548 ],
549 "nixpkgs": [
550 "hyprland",
551 "nixpkgs"
552 ],
553 "systems": [
554 "hyprland",
555 "systems"
556 ]
557 },
558 "locked": {
559 "lastModified": 1764612430,
560 "narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=",
561 "owner": "hyprwm",
562 "repo": "hyprlang",
563 "rev": "0d00dc118981531aa731150b6ea551ef037acddd",
564 "type": "github"
565 },
566 "original": {
567 "owner": "hyprwm",
568 "repo": "hyprlang",
569 "type": "github"
570 }
571 },
572 "hyprtoolkit": {
573 "inputs": {
574 "aquamarine": [
575 "hyprland",
576 "hyprland-guiutils",
577 "aquamarine"
578 ],
579 "hyprgraphics": [
580 "hyprland",
581 "hyprland-guiutils",
582 "hyprgraphics"
583 ],
584 "hyprlang": [
585 "hyprland",
586 "hyprland-guiutils",
587 "hyprlang"
588 ],
589 "hyprutils": [
590 "hyprland",
591 "hyprland-guiutils",
592 "hyprutils"
593 ],
594 "hyprwayland-scanner": [
595 "hyprland",
596 "hyprland-guiutils",
597 "hyprwayland-scanner"
598 ],
599 "nixpkgs": [
600 "hyprland",
601 "hyprland-guiutils",
602 "nixpkgs"
603 ],
604 "systems": [
605 "hyprland",
606 "hyprland-guiutils",
607 "systems"
608 ]
609 },
610 "locked": {
611 "lastModified": 1764592794,
612 "narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=",
613 "owner": "hyprwm",
614 "repo": "hyprtoolkit",
615 "rev": "5cfe0743f0e608e1462972303778d8a0859ee63e",
616 "type": "github"
617 },
618 "original": {
619 "owner": "hyprwm",
620 "repo": "hyprtoolkit",
621 "type": "github"
622 }
623 },
624 "hyprutils": {
625 "inputs": {
626 "nixpkgs": [
627 "hyprland",
628 "nixpkgs"
629 ],
630 "systems": [
631 "hyprland",
632 "systems"
633 ]
634 },
635 "locked": {
636 "lastModified": 1766253372,
637 "narHash": "sha256-1+p4Kw8HdtMoFSmJtfdwjxM4bPxDK9yg27SlvUMpzWA=",
638 "owner": "hyprwm",
639 "repo": "hyprutils",
640 "rev": "51a4f93ce8572e7b12b7284eb9e6e8ebf16b4be9",
641 "type": "github"
642 },
643 "original": {
644 "owner": "hyprwm",
645 "repo": "hyprutils",
646 "type": "github"
647 }
648 },
649 "hyprwayland-scanner": {
650 "inputs": {
651 "nixpkgs": [
652 "hyprland",
653 "nixpkgs"
654 ],
655 "systems": [
656 "hyprland",
657 "systems"
658 ]
659 },
660 "locked": {
661 "lastModified": 1763640274,
662 "narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=",
663 "owner": "hyprwm",
664 "repo": "hyprwayland-scanner",
665 "rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671",
666 "type": "github"
667 },
668 "original": {
669 "owner": "hyprwm",
670 "repo": "hyprwayland-scanner",
671 "type": "github"
672 }
673 },
674 "hyprwire": {
675 "inputs": {
676 "hyprutils": [
677 "hyprland",
678 "hyprutils"
679 ],
680 "nixpkgs": [
681 "hyprland",
682 "nixpkgs"
683 ],
684 "systems": [
685 "hyprland",
686 "systems"
687 ]
688 },
689 "locked": {
690 "lastModified": 1767473322,
691 "narHash": "sha256-RGOeG+wQHeJ6BKcsSB8r0ZU77g9mDvoQzoTKj2dFHwA=",
692 "owner": "hyprwm",
693 "repo": "hyprwire",
694 "rev": "d5e7d6b49fe780353c1cf9a1cf39fa8970bd9d11",
695 "type": "github"
696 },
697 "original": {
698 "owner": "hyprwm",
699 "repo": "hyprwire",
700 "type": "github"
701 }
702 },
331703 "langref": {
332704 "flake": false,
333705 "locked": {
......@@ -342,11 +714,11 @@
342714 },
343715 "mnw": {
344716 "locked": {
345 "lastModified": 1748710831,
346 "narHash": "sha256-eZu2yH3Y2eA9DD3naKWy/sTxYS5rPK2hO7vj8tvUCSU=",
717 "lastModified": 1758834834,
718 "narHash": "sha256-Y7IvY4F8vajZyp3WGf+KaiIVwondEkMFkt92Cr9NZmg=",
347719 "owner": "Gerg-L",
348720 "repo": "mnw",
349 "rev": "cff958a4e050f8d917a6ff3a5624bc4681c6187d",
721 "rev": "cfbc7d1cc832e318d0863a5fc91d940a96034001",
350722 "type": "github"
351723 },
352724 "original": {
......@@ -357,17 +729,16 @@
357729 },
358730 "moonlight": {
359731 "inputs": {
360 "flake-utils": "flake-utils_2",
361732 "nixpkgs": [
362733 "nixpkgs"
363734 ]
364735 },
365736 "locked": {
366 "lastModified": 1754439168,
367 "narHash": "sha256-NcwRidwb/ask65LE86os4RkhyoPQo5sLu0sJs/NboK4=",
737 "lastModified": 1765916709,
738 "narHash": "sha256-qc4m7v8hGOMb9BVLuiQZAbgzHoKfVwEY7HUl9fsY/hE=",
368739 "owner": "moonlight-mod",
369740 "repo": "moonlight",
370 "rev": "66b81b113afd6654a88c9adb7edb7fe92839fe84",
741 "rev": "d0ad754cf0b9c5a34d7f69595f407c8199f988ce",
371742 "type": "github"
372743 },
373744 "original": {
......@@ -376,6 +747,39 @@
376747 "type": "github"
377748 }
378749 },
750 "ndg": {
751 "inputs": {
752 "nixpkgs": "nixpkgs_4"
753 },
754 "locked": {
755 "lastModified": 1765435293,
756 "narHash": "sha256-HRp4g6qBCb8vpJ17s2FacMRXRszM73uBiR56aILMELA=",
757 "owner": "feel-co",
758 "repo": "ndg",
759 "rev": "65bf834b332d5f8b28d95ea14c7974be7c272971",
760 "type": "github"
761 },
762 "original": {
763 "owner": "feel-co",
764 "repo": "ndg",
765 "type": "github"
766 }
767 },
768 "nix-filter": {
769 "locked": {
770 "lastModified": 1693833173,
771 "narHash": "sha256-hlMABKrGbEiJD5dwUSfnw1CQ3bG7KKwDV+Nx3bEZd7U=",
772 "owner": "numtide",
773 "repo": "nix-filter",
774 "rev": "ac030bd9ba98e318e1f4c4328d60766ade8ebe8b",
775 "type": "github"
776 },
777 "original": {
778 "owner": "numtide",
779 "repo": "nix-filter",
780 "type": "github"
781 }
782 },
379783 "nix-index-database": {
380784 "inputs": {
381785 "nixpkgs": [
......@@ -383,11 +787,11 @@
383787 ]
384788 },
385789 "locked": {
386 "lastModified": 1755404379,
387 "narHash": "sha256-Q6ZxZDBmD/B988Jjbx7/NchxOKIpOKBBrx9Yb0zMzpQ=",
790 "lastModified": 1765267181,
791 "narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
388792 "owner": "nix-community",
389793 "repo": "nix-index-database",
390 "rev": "ebbc1c05f786ae39bb5e04e57bf2c10c44a649e3",
794 "rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
391795 "type": "github"
392796 },
393797 "original": {
......@@ -398,16 +802,16 @@
398802 },
399803 "nix-options-search": {
400804 "inputs": {
401 "flake-utils": "flake-utils_3",
402 "gitignore": "gitignore",
403 "nixpkgs": "nixpkgs"
805 "flake-utils": "flake-utils_2",
806 "gitignore": "gitignore_2",
807 "nixpkgs": "nixpkgs_2"
404808 },
405809 "locked": {
406 "lastModified": 1743876182,
407 "narHash": "sha256-qfiVewr5huupheLqStX60JSbjBEm9/PDncLQXE0dsXo=",
810 "lastModified": 1765642879,
811 "narHash": "sha256-LIKEZW++qgg8FSpJtAayv6yfIF3CO42GpryyeJ4pk7M=",
408812 "owner": "madsbv",
409813 "repo": "nix-options-search",
410 "rev": "f52dc6986161570a2ffffdf337c88b503e9a58fb",
814 "rev": "b91e3ad2b4f3afbf0ceadb140fb9a0d342733b2e",
411815 "type": "github"
412816 },
413817 "original": {
......@@ -418,11 +822,27 @@
418822 },
419823 "nixpkgs": {
420824 "locked": {
421 "lastModified": 1736012469,
422 "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=",
825 "lastModified": 1767379071,
826 "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=",
827 "owner": "NixOS",
828 "repo": "nixpkgs",
829 "rev": "fb7944c166a3b630f177938e478f0378e64ce108",
830 "type": "github"
831 },
832 "original": {
833 "owner": "NixOS",
834 "ref": "nixos-unstable",
835 "repo": "nixpkgs",
836 "type": "github"
837 }
838 },
839 "nixpkgs_2": {
840 "locked": {
841 "lastModified": 1762977756,
842 "narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=",
423843 "owner": "nixos",
424844 "repo": "nixpkgs",
425 "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d",
845 "rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55",
426846 "type": "github"
427847 },
428848 "original": {
......@@ -432,22 +852,54 @@
432852 "type": "github"
433853 }
434854 },
435 "nixpkgs_2": {
855 "nixpkgs_3": {
436856 "locked": {
437 "lastModified": 1755615617,
438 "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=",
857 "lastModified": 1767966113,
858 "narHash": "sha256-mSTsvXa4WveSRJexsmCbm9dY17B1fKp7NLpJxllpQw4=",
439859 "owner": "NixOS",
440860 "repo": "nixpkgs",
441 "rev": "20075955deac2583bb12f07151c2df830ef346b4",
861 "rev": "5f02c91314c8ba4afe83b256b023756412218535",
442862 "type": "github"
443863 },
444864 "original": {
445865 "id": "nixpkgs",
446 "ref": "nixos-unstable",
866 "ref": "nixpkgs-unstable",
447867 "type": "indirect"
448868 }
449869 },
450 "nixpkgs_3": {
870 "nixpkgs_4": {
871 "locked": {
872 "lastModified": 1764242076,
873 "narHash": "sha256-sKoIWfnijJ0+9e4wRvIgm/HgE27bzwQxcEmo2J/gNpI=",
874 "owner": "NixOS",
875 "repo": "nixpkgs",
876 "rev": "2fad6eac6077f03fe109c4d4eb171cf96791faa4",
877 "type": "github"
878 },
879 "original": {
880 "owner": "NixOS",
881 "ref": "nixos-unstable",
882 "repo": "nixpkgs",
883 "type": "github"
884 }
885 },
886 "nixpkgs_5": {
887 "locked": {
888 "lastModified": 1762111121,
889 "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=",
890 "owner": "NixOS",
891 "repo": "nixpkgs",
892 "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4",
893 "type": "github"
894 },
895 "original": {
896 "owner": "NixOS",
897 "ref": "nixos-unstable",
898 "repo": "nixpkgs",
899 "type": "github"
900 }
901 },
902 "nixpkgs_6": {
451903 "locked": {
452904 "lastModified": 1708161998,
453905 "narHash": "sha256-6KnemmUorCvlcAvGziFosAVkrlWZGIc6UNT9GUYr0jQ=",
......@@ -463,7 +915,7 @@
463915 "type": "github"
464916 }
465917 },
466 "nixpkgs_4": {
918 "nixpkgs_7": {
467919 "locked": {
468920 "lastModified": 1717696253,
469921 "narHash": "sha256-1+ua0ggXlYYPLTmMl3YeYYsBXDSCqT+Gw3u6l4gvMhA=",
......@@ -481,20 +933,21 @@
481933 },
482934 "nvf": {
483935 "inputs": {
484 "flake-compat": "flake-compat",
936 "flake-compat": "flake-compat_2",
485937 "flake-parts": "flake-parts",
486938 "mnw": "mnw",
939 "ndg": "ndg",
487940 "nixpkgs": [
488941 "nixpkgs"
489942 ],
490943 "systems": "systems_4"
491944 },
492945 "locked": {
493 "lastModified": 1755843058,
494 "narHash": "sha256-oAajTGcyTzuND7AAlaRXO+wF7ytAMOnrE4sYUjRonB8=",
946 "lastModified": 1765537745,
947 "narHash": "sha256-EaFYxx2aSuM2xx+l+E55YNMCJOoQBl2tJybxyF0pPqw=",
495948 "owner": "notashelf",
496949 "repo": "nvf",
497 "rev": "d36996c8ba5c8d68b5def1b660e06d281ef0a3a8",
950 "rev": "8e031476d0d7f326b63c9c5522f840e2f8b724c0",
498951 "type": "github"
499952 },
500953 "original": {
......@@ -516,18 +969,44 @@
516969 "url": "https://devimages-cdn.apple.com/design/resources/download/NY.dmg"
517970 }
518971 },
972 "pre-commit-hooks": {
973 "inputs": {
974 "flake-compat": "flake-compat",
975 "gitignore": "gitignore",
976 "nixpkgs": [
977 "hyprland",
978 "nixpkgs"
979 ]
980 },
981 "locked": {
982 "lastModified": 1767281941,
983 "narHash": "sha256-6MkqajPICgugsuZ92OMoQcgSHnD6sJHwk8AxvMcIgTE=",
984 "owner": "cachix",
985 "repo": "git-hooks.nix",
986 "rev": "f0927703b7b1c8d97511c4116eb9b4ec6645a0fa",
987 "type": "github"
988 },
989 "original": {
990 "owner": "cachix",
991 "repo": "git-hooks.nix",
992 "type": "github"
993 }
994 },
519995 "root": {
520996 "inputs": {
521997 "android-nixpkgs": "android-nixpkgs",
522998 "apple-fonts": "apple-fonts",
523999 "darwin": "darwin",
5241000 "home-manager": "home-manager",
1001 "hyprland": "hyprland",
5251002 "moonlight": "moonlight",
5261003 "nix-index-database": "nix-index-database",
5271004 "nix-options-search": "nix-options-search",
528 "nixpkgs": "nixpkgs_2",
1005 "nixpkgs": "nixpkgs_3",
5291006 "nvf": "nvf",
5301007 "rust-overlay": "rust-overlay",
1008 "split-monitor-workspaces": "split-monitor-workspaces",
1009 "vicinae": "vicinae",
5311010 "zen-browser": "zen-browser",
5321011 "zig": "zig",
5331012 "zls": "zls"
......@@ -540,11 +1019,11 @@
5401019 ]
5411020 },
5421021 "locked": {
543 "lastModified": 1755830208,
544 "narHash": "sha256-fMa/Hcg+4O2h+kl3gNPjtGSWPI8NtCl3LYMsejK6qGA=",
1022 "lastModified": 1768012928,
1023 "narHash": "sha256-HFFVQaux1JoOjEvgBT0ASk1Je+jsipyO5c91FoLMed8=",
5451024 "owner": "oxalica",
5461025 "repo": "rust-overlay",
547 "rev": "802a7b97f8ff672ba2dec70c9e354f51f844e796",
1026 "rev": "312b4371e72f644ffcff25b23615195e3b390643",
5481027 "type": "github"
5491028 },
5501029 "original": {
......@@ -580,7 +1059,7 @@
5801059 "sf-compact": {
5811060 "flake": false,
5821061 "locked": {
583 "narHash": "sha256-VMCf2Mhmx/qhLRQxlTAsQWxtonS27kPW+oTYBBRWHMg=",
1062 "narHash": "sha256-WeqT80cdK/XzTLSaJs5DHodzxoeAzwL/xTgdq0YwQbM=",
5841063 "type": "file",
5851064 "url": "https://devimages-cdn.apple.com/design/resources/download/SF-Compact.dmg"
5861065 },
......@@ -628,7 +1107,7 @@
6281107 "sf-pro": {
6291108 "flake": false,
6301109 "locked": {
631 "narHash": "sha256-RX6X2ltVE88Hp1g9tpSywMT3UfdLpRxgw92KRpiAues=",
1110 "narHash": "sha256-vprahHpCUf9O8RualBrEuLEfuLfzI/2d8AQmwlCGPPk=",
6321111 "type": "file",
6331112 "url": "https://devimages-cdn.apple.com/design/resources/download/SF-Pro.dmg"
6341113 },
......@@ -637,6 +1116,27 @@
6371116 "url": "https://devimages-cdn.apple.com/design/resources/download/SF-Pro.dmg"
6381117 }
6391118 },
1119 "split-monitor-workspaces": {
1120 "inputs": {
1121 "hyprland": [
1122 "hyprland"
1123 ],
1124 "nix-filter": "nix-filter"
1125 },
1126 "locked": {
1127 "lastModified": 1767711026,
1128 "narHash": "sha256-yTuyde8TpBR3NhNnOcK4uOGukvMCwrH3otP8E04e9X0=",
1129 "owner": "Duckonaut",
1130 "repo": "split-monitor-workspaces",
1131 "rev": "764548c3aa22c9f4cb436ec7243d21795eb6ebec",
1132 "type": "github"
1133 },
1134 "original": {
1135 "owner": "Duckonaut",
1136 "repo": "split-monitor-workspaces",
1137 "type": "github"
1138 }
1139 },
6401140 "systems": {
6411141 "locked": {
6421142 "lastModified": 1681028828,
......@@ -654,16 +1154,16 @@
6541154 },
6551155 "systems_2": {
6561156 "locked": {
657 "lastModified": 1681028828,
658 "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
1157 "lastModified": 1689347949,
1158 "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
6591159 "owner": "nix-systems",
660 "repo": "default",
661 "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
1160 "repo": "default-linux",
1161 "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
6621162 "type": "github"
6631163 },
6641164 "original": {
6651165 "owner": "nix-systems",
666 "repo": "default",
1166 "repo": "default-linux",
6671167 "type": "github"
6681168 }
6691169 },
......@@ -742,6 +1242,81 @@
7421242 "type": "github"
7431243 }
7441244 },
1245 "systems_8": {
1246 "locked": {
1247 "lastModified": 1681028828,
1248 "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
1249 "owner": "nix-systems",
1250 "repo": "default",
1251 "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
1252 "type": "github"
1253 },
1254 "original": {
1255 "owner": "nix-systems",
1256 "repo": "default",
1257 "type": "github"
1258 }
1259 },
1260 "vicinae": {
1261 "inputs": {
1262 "nixpkgs": "nixpkgs_5",
1263 "systems": "systems_5"
1264 },
1265 "locked": {
1266 "lastModified": 1767958732,
1267 "narHash": "sha256-Jy7Px8fWfZgRRWcv5d8XTddPDaHRJ1o4mG3yTlEkXTo=",
1268 "owner": "vicinaehq",
1269 "repo": "vicinae",
1270 "rev": "c80929ea3f44d540a5063ad1262799aa32a7929c",
1271 "type": "github"
1272 },
1273 "original": {
1274 "owner": "vicinaehq",
1275 "repo": "vicinae",
1276 "type": "github"
1277 }
1278 },
1279 "xdph": {
1280 "inputs": {
1281 "hyprland-protocols": [
1282 "hyprland",
1283 "hyprland-protocols"
1284 ],
1285 "hyprlang": [
1286 "hyprland",
1287 "hyprlang"
1288 ],
1289 "hyprutils": [
1290 "hyprland",
1291 "hyprutils"
1292 ],
1293 "hyprwayland-scanner": [
1294 "hyprland",
1295 "hyprwayland-scanner"
1296 ],
1297 "nixpkgs": [
1298 "hyprland",
1299 "nixpkgs"
1300 ],
1301 "systems": [
1302 "hyprland",
1303 "systems"
1304 ]
1305 },
1306 "locked": {
1307 "lastModified": 1761431178,
1308 "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=",
1309 "owner": "hyprwm",
1310 "repo": "xdg-desktop-portal-hyprland",
1311 "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9",
1312 "type": "github"
1313 },
1314 "original": {
1315 "owner": "hyprwm",
1316 "repo": "xdg-desktop-portal-hyprland",
1317 "type": "github"
1318 }
1319 },
7451320 "zen-browser": {
7461321 "inputs": {
7471322 "nixpkgs": [
......@@ -749,11 +1324,11 @@
7491324 ]
7501325 },
7511326 "locked": {
752 "lastModified": 1754886070,
753 "narHash": "sha256-MZDmxOkVKL1HY72bliN8Gxh0SYkHUa3W/1fTU2ke36I=",
1327 "lastModified": 1767618227,
1328 "narHash": "sha256-9+XVF47E9NCVs249SSsDtr7YdG/23/lCJmWAjQvOfqI=",
7541329 "owner": "youwen5",
7551330 "repo": "zen-browser-flake",
756 "rev": "e37d2b326311320c8571111b3ef89b29d26d4b64",
1331 "rev": "1586e49b3908b058e221f11d843eb46392dba17b",
7571332 "type": "github"
7581333 },
7591334 "original": {
......@@ -764,16 +1339,16 @@
7641339 },
7651340 "zig": {
7661341 "inputs": {
767 "flake-compat": "flake-compat_2",
768 "flake-utils": "flake-utils_4",
769 "nixpkgs": "nixpkgs_3"
1342 "flake-compat": "flake-compat_3",
1343 "flake-utils": "flake-utils_3",
1344 "nixpkgs": "nixpkgs_6"
7701345 },
7711346 "locked": {
772 "lastModified": 1755605615,
773 "narHash": "sha256-J0Cxren2QLeI0ZvRZw4XGcMm4q3uPIZHM+eJnaZfXX8=",
1347 "lastModified": 1767919086,
1348 "narHash": "sha256-t9Z7r8yJDbRqoAhm7vsohHAhMGF373NCWt/XeHlZAWw=",
7741349 "owner": "mitchellh",
7751350 "repo": "zig-overlay",
776 "rev": "714fae26049a263ff2e4641ce7c973f371f4b005",
1351 "rev": "d7671671de8bd3afcabffefc77c75ed9777b249b",
7771352 "type": "github"
7781353 },
7791354 "original": {
......@@ -784,8 +1359,8 @@
7841359 },
7851360 "zig-overlay": {
7861361 "inputs": {
787 "flake-compat": "flake-compat_3",
788 "flake-utils": "flake-utils_6",
1362 "flake-compat": "flake-compat_4",
1363 "flake-utils": "flake-utils_5",
7891364 "nixpkgs": [
7901365 "zls",
7911366 "nixpkgs"
......@@ -807,10 +1382,10 @@
8071382 },
8081383 "zls": {
8091384 "inputs": {
810 "flake-utils": "flake-utils_5",
811 "gitignore": "gitignore_2",
1385 "flake-utils": "flake-utils_4",
1386 "gitignore": "gitignore_3",
8121387 "langref": "langref",
813 "nixpkgs": "nixpkgs_4",
1388 "nixpkgs": "nixpkgs_7",
8141389 "zig-overlay": "zig-overlay"
8151390 },
8161391 "locked": {
flake.nix+11-1
......@@ -1,7 +1,7 @@
11{
22 description = "multi device configuration flake";
33 inputs = {
4 nixpkgs.url = "nixpkgs/nixos-unstable";
4 nixpkgs.url = "nixpkgs/nixpkgs-unstable";
55
66 home-manager.url = "github:nix-community/home-manager/master";
77 home-manager.inputs.nixpkgs.follows = "nixpkgs";
......@@ -24,6 +24,14 @@
2424 moonlight.url = "github:moonlight-mod/moonlight"; # Add `/develop` to the flake URL to use nightly.
2525 moonlight.inputs.nixpkgs.follows = "nixpkgs";
2626
27 hyprland.url = "github:hyprwm/Hyprland";
28 split-monitor-workspaces = {
29 url = "github:Duckonaut/split-monitor-workspaces";
30 inputs.hyprland.follows = "hyprland";
31 };
32
33 vicinae.url = "github:vicinaehq/vicinae";
34
2735 zen-browser = {
2836 url = "github:youwen5/zen-browser-flake";
2937 inputs.nixpkgs.follows = "nixpkgs";
......@@ -70,6 +78,8 @@
7078 # custom packages
7179 (_: pkgs: {
7280 autofmt = pkgs.callPackage ./packages/autofmt { };
81 exiled_exchange_2 = pkgs.callPackage ./packages/exiled_exchange_2 { };
82 awakened_poe_trade = pkgs.callPackage ./packages/awakened_poe_trade { };
7383 })
7484 ];
7585
lib/mkSystem.nix+1
......@@ -76,6 +76,7 @@ let
7676 )
7777 inputs.nvf.homeManagerModules.default
7878 inputs.android-nixpkgs.hmModule
79 inputs.vicinae.homeManagerModules.default
7980 ];
8081in
8182systemFunc {
modules/home/default.nix+19-15
......@@ -35,12 +35,12 @@ in
3535 sdk:
3636 with sdk;
3737 [
38 build-tools-35-0-0
38 build-tools-36-0-0
3939 cmdline-tools-latest
4040 emulator
4141 platform-tools
42 platforms-android-35
43 sources-android-35
42 platforms-android-36
43 sources-android-36
4444 ndk-27-1-12297006
4545 cmake-3-22-1
4646 ]
......@@ -49,8 +49,8 @@ in
4949 system-images-android-35-google-apis-playstore-arm64-v8a
5050 ]
5151 ++ lib.optionals host.linux [
52 system-images-android-35-google-apis-x86-64
53 system-images-android-35-google-apis-playstore-x86-64
52 system-images-android-36-google-apis-x86-64
53 system-images-android-36-google-apis-playstore-x86-64
5454 ];
5555 };
5656 xdg = {
......@@ -69,8 +69,10 @@ in
6969
7070 git = {
7171 enable = true;
72 userName = lib.mkDefault user.name;
73 userEmail = lib.mkDefault user.email;
72 settings.user = {
73 name = lib.mkDefault user.name;
74 email = lib.mkDefault user.email;
75 };
7476 ignores = [
7577 (lib.mkIf host.darwin ".DS_Store") # When using Finder
7678 (lib.mkIf host.darwin "._*") # When using non-APFS drives
......@@ -89,7 +91,7 @@ in
8991 extraPackages = with pkgs.bat-extras; [
9092 batdiff
9193 batman
92 batgrep
94 # batgrep
9395 batwatch
9496 batpipe
9597 prettybat
......@@ -138,17 +140,19 @@ in
138140 jujutsu = {
139141 settings = {
140142 user = {
141 email = config.programs.git.userEmail;
142 name = config.programs.git.userName;
143 inherit (config.programs.git.settings.user) name email;
143144 };
144 signing = {
145 behavior = "own";
146 backend = "ssh";
145 signing = lib.mkIf (config.programs.git.signing.format != null) {
146 backend = config.programs.git.signing.format;
147147 key = "~/.ssh/id_ed25519.pub";
148 # signatures are slow, compute them on push instead of on change.
149 behavior = "drop";
148150 };
149151 git = {
150 sign-on-push = true;
151 push-new-bookmarks = true;
152 sign-on-push = config.programs.git.signing.key != null;
153 };
154 remotes.origin = {
155 auto-track-bookmarks = "glob:*";
152156 };
153157 ui = {
154158 default-command = "log";
modules/neovim/default.nix+4-4
......@@ -82,7 +82,7 @@
8282 servers.nixd.init_options.autoArchive = true;
8383 };
8484 treesitter = {
85 enable = true;
85 enable = false;
8686 addDefaultGrammars = true;
8787 # this is buggy and keybind.nix overwrites its keymaps anyways
8888 incrementalSelection.enable = false;
......@@ -99,7 +99,7 @@
9999 };
100100 languages = {
101101 enableFormat = true;
102 enableTreesitter = true;
102 enableTreesitter = false;
103103 enableExtraDiagnostics = true;
104104 # enable debug adapter protocol by default
105105 enableDAP = true;
......@@ -111,13 +111,13 @@
111111 html.enable = true;
112112 nix.enable = true;
113113 python.enable = true;
114 rust.crates.enable = true;
115114 rust.enable = true;
116115 ts.enable = true;
117116 zig.enable = true;
118117 # sort-lines: off
119118
120 nix.lsp.servers = "nixd";
119 nix.lsp.servers = [ "nixd" ];
120 rust.extensions.crates-nvim.enable = true;
121121 };
122122 filetree.neo-tree = {
123123 enable = true;
modules/nixos/ld.nix+1
......@@ -6,6 +6,7 @@
66 programs.nix-ld.libraries = with pkgs; [
77 # common requirement for several games
88 stdenv.cc.cc.lib
9 libxcrypt
910
1011 # from https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/games/steam/fhsenv.nix#L72-L79
1112 xorg.libXcomposite
modules/nixos/services.nix+17
......@@ -22,6 +22,23 @@
2222 };
2323 };
2424
25 gvfs.enable = true;
26
27 gnome = {
28 tinysparql.enable = true;
29 gnome-keyring.enable = true;
30 };
31
32 fstrim.enable = true;
33
34 dbus = {
35 enable = true;
36 packages = [
37 pkgs.gcr
38 pkgs.gnome-settings-daemon
39 ];
40 };
41
2542 # Auto mount devices
2643 udisks2 = {
2744 enable = true;
modules/shared/nix.nix+4
......@@ -28,11 +28,15 @@
2828 "https://nix-community.cachix.org"
2929 # For haskell
3030 "https://cache.iog.io"
31 #vicinae
32 "https://vicinae.cachix.org"
3133 ];
3234 trusted-public-keys = [
3335 "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
3436 # For haskell
3537 "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
38 #vicinae
39 "vicinae.cachix.org-1:1kDrfienkGHPYbkpNj1mWTr7Fm1+zcenzgTizIcI3oc="
3640 ];
3741 };
3842 gc = {
packages/autofmt/default.nix+1-1
......@@ -6,7 +6,7 @@ pkgs.writeShellApplication {
66 clang-tools
77 deno
88 dprint
9 nixfmt-rfc-style
9 nixfmt
1010 prettierd # autofmt only runs on a local build of prettier
1111 rustfmt
1212 zig
packages/awakened_poe_trade/default.nix created+35
......@@ -0,0 +1,35 @@
1{ pkgs, lib, ... }:
2
3let
4 pname = "awakened-poe-trade";
5 version = "3.26.102";
6 name = "${pname}-${version}";
7
8 src = pkgs.fetchurl {
9 url = "https://github.com/SnosMe/awakened-poe-trade/releases/download/v${version}/Awakened-PoE-Trade-${version}.AppImage";
10 sha256 = "sha256-kWMRZvAZKzGFXX7QJJN7eIs88ZDGWU8sMuyQhLgPQCY=
11";
12 };
13
14 appimageContents = pkgs.appimageTools.extract { inherit pname version src; };
15in
16pkgs.appimageTools.wrapType2 rec {
17 inherit pname version src;
18
19 extraInstallCommands = ''
20 install -m 444 -D ${appimageContents}/awakened-poe-trade.desktop $out/share/applications/${pname}.desktop
21
22 install -m 444 -D ${appimageContents}/${pname}.png $out/share/icons/hicolor/512x512/apps/${pname}.png
23
24 substituteInPlace $out/share/applications/${pname}.desktop \
25 --replace 'Exec=AppRun --no-sandbox %U' 'Exec=${pname} %U'
26 '';
27
28 meta = with lib; {
29 description = "Awakened-PoE-Trade";
30 homepage = "https://github.com/SnosMe/awakened-poe-trade";
31 license = licenses.mit;
32 maintainers = [ ];
33 platforms = [ "x86_64-linux" ];
34 };
35}
packages/exiled_exchange_2/default.nix created+34
......@@ -0,0 +1,34 @@
1{ pkgs, lib, ... }:
2
3let
4 pname = "exiled-exchange-2";
5 version = "0.12.6";
6 name = "${pname}-${version}";
7
8 src = pkgs.fetchurl {
9 url = "https://github.com/Kvan7/Exiled-Exchange-2/releases/download/v${version}/Exiled-Exchange-2-${version}.AppImage";
10 sha256 = "sha256-2CBdsLQ0EHTINd05ABv8NyCYt2ipYfwmkcpw0SLZRwc==";
11 };
12
13 appimageContents = pkgs.appimageTools.extract { inherit pname version src; };
14in
15pkgs.appimageTools.wrapType2 rec {
16 inherit pname version src;
17
18 extraInstallCommands = ''
19 install -m 444 -D ${appimageContents}/exiled-exchange-2.desktop $out/share/applications/${pname}.desktop
20
21 install -m 444 -D ${appimageContents}/${pname}.png $out/share/icons/hicolor/512x512/apps/${pname}.png
22
23 substituteInPlace $out/share/applications/${pname}.desktop \
24 --replace 'Exec=AppRun --no-sandbox %U' 'Exec=${pname} %U'
25 '';
26
27 meta = with lib; {
28 description = "Exiled Exchange 2";
29 homepage = "https://kvan7.github.io/Exiled-Exchange-2/";
30 license = licenses.mit;
31 maintainers = [ ];
32 platforms = [ "x86_64-linux" ];
33 };
34}
switch+5-4
......@@ -1,16 +1,17 @@
11#!/bin/sh
2set -e
3cd "$(dirname "$0")"
24nh_subcommand="os"
35fallback_command="nixos-rebuild"
4hostname_file="$(dirname "$0")/.hostname"
56if [ -n "$1" ]; then
67 hostname="$1"
7elif [ -f "$hostname_file" ]; then
8 hostname=$(cat "$hostname_file")
8elif [ -f ".hostname" ]; then
9 hostname=$(cat .hostname)
910fi
1011if [ -z "$hostname" ]; then
1112 hostname="$(hostname)"
1213fi
13printf "%s" "$hostname" >"$hostname_file"
14printf "%s" "$hostname" >.hostname
1415if [ "$(uname -o)" = "Darwin" ]; then
1516 nh_subcommand="darwin"
1617 fallback_command="nix run .#darwin-rebuild"
users/clover/configuration.nix+8
......@@ -17,6 +17,14 @@
1717 ];
1818 };
1919
20 homebrew = {
21 enable = true;
22 casks = [
23 "db-browser-for-sqlite"
24 "alt-tab"
25 ];
26 };
27
2028 # system preferences
2129 system.defaults = {
2230 NSGlobalDomain = {
users/clover/home.nix+82-133
......@@ -1,4 +1,9 @@
1{ pkgs, host, ... }:
1{
2 config,
3 pkgs,
4 host,
5 ...
6}:
27let
38 hostServer = false;
49in
......@@ -14,23 +19,19 @@ in
1419 ripgrep
1520 uv
1621 nh
17 pkgs.autofmt
22 autofmt
23 gnupg
24 nodejs_24
1825 ];
1926 # packages to install for desktop environments (non-server)
2027 desktop = [
21 git-town
22 lazygit
23 jjui
2428 ];
2529 # packages to install on all servers
2630 server = [ ];
2731 # packages to install on macOS desktops
28 darwin = [
29 raycast
30 ];
32 darwin = [ ];
3133 # packages to install on linux desktops
3234 linux = [
33 reaper # TODO: why does this break on macOS
3435 ];
3536 in
3637 all ++ (if host.darwin then darwin else linux) ++ (if hostServer then server else desktop);
......@@ -50,23 +51,32 @@ in
5051 settings = {
5152 theme = "light:Farmhouse Light,dark:Challenger Deep";
5253 font-family = "AT Name Mono";
53 adjust-cursor-thickness = 1;
54 background-opacity = 0.9;
54 adjust-cursor-thickness = 2;
55 background-opacity = 0.95;
5556 background-blur = true;
57 unfocused-split-opacity = 1;
5658 };
5759 };
5860
5961 # zsh is the shell i use
6062 zsh = {
6163 enable = true;
64 dotDir = "${config.xdg.configHome}/zsh";
6265 shellAliases = {
6366 switch = "~/config/switch";
64 gg = "lazygit";
65 ga = "git add";
66 g = "git status";
67 gp = "git pull --rebase && git push";
67
68 # move a bookmark from the previous commit
69 jf = "jj git fetch";
70 e = "jj edit";
71 d = "jj desc";
72 bup = "jj b m --from 'heads(::@- & bookmarks())' --to '@'";
73 moveself = "jj rebase -r @ -d";
74 logall = "jj log -r 'all()'";
75 cherry = "jj git fetch && jj split -i -p -m 'SPLIT_CHANGES' && jj edit -r 'description(\"SPLIT_CHANGES\")' && jj desc -m '' --edit";
6876 };
69 profileExtra = ''
77 initContent = ''
78 export PS1="%{$(tput setaf 207)%}%m%{$(tput setaf 15)%}:%{$(tput setaf 87)%}%~ %{$(tput sgr0)%}$ "
79
7080 function python() {
7181 dirname=$(dirname $1 2>/dev/null)
7282 if [ -z "$dirname" ]; then
......@@ -74,11 +84,44 @@ in
7484 fi
7585 uv run --project "$dirname" "$@"
7686 }
87
88 function bun() {
89 if [[ "$1" = "build" ]]; then
90 command bun run "$@"
91 elif [[ "$1" = "bundle" ]]; then
92 shift
93 command bun build "$@"
94 else
95 command bun "$@"
96 fi
97 }
98
99 function jj() {
100 if [[ "$*" = "git push"* ]] && [[ "$*" != *"--dry-run"* ]]; then
101 command jj "$@" --dry-run
102 printf "Press any key to continue... "
103 read -r
104 command jj "$@"
105 else
106 command jj "$@"
107 fi
108 }
77109 '';
78110 };
79111
80 # use a git-specific email
81 git.userEmail = "git@paperclover.net";
112 git = {
113 # use a git-specific email
114 settings.user.email = "git@paperclover.net";
115 settings.gpg.ssh.allowedSignersFile = "${pkgs.writeText "allowed_signers" ''
116 git@paperclover.net ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAVa1aq1LEj/VXHJYlR5HJpK65lS/9jOL/dAB9ZS1chd
117 ''}";
118 # signing
119 signing = {
120 signByDefault = true;
121 key = "~/.ssh/id_ed25519";
122 format = "ssh";
123 };
124 };
82125
83126 jujutsu = {
84127 enable = true;
......@@ -148,133 +191,39 @@ in
148191 };
149192 # ui.graph.style = "square";
150193 revsets = {
151 log = "ancestors(description(regex:\"^(WIP:|\\\\s*$)\"), 3) | ancestors(immutable_heads(), 2) | ancestors(visible_heads(), 2)";
152194 short-prefixes = "(trunk()..@)::";
153195 };
154 templates.log = "hl_wip(self)";
155
156 template-aliases = {
157 # log template, highlighting the WIP commits by making everything else faded out
158 "hl_wip(commit)" = ''
159 if(commit.root(), format_root_commit(commit),
160 label("__commit__",
161 format_short_commit_header(commit) ++ "\n" ++
162 format_commit_description(commit)
163 )
164 )
165 '';
166
167 "format_commit_description(commit)" = ''
168 label("desc", format_commit_firstline(commit.description().first_line())) ++
169 "\n" ++ if(
170 commit.description().starts_with("WIP:") || commit.current_working_copy(),
171 commit.description().remove_prefix(commit.description().first_line()).remove_prefix("\n").trim_end() ++ "\n ",
172 if(commit.description().remove_prefix(commit.description().first_line()).trim().len() > 0,
173 label("muted", lines_collapsed(commit.description().lines().filter(|x| x.trim().len() > 0).len() - 1)),
174 " "
175 )
176 )
177 '';
178 "lines_collapsed(count)" =
179 ''("[" ++ stringify(count ++ " line" ++ if(count == 1, "", "s")) ++ " collapsed]\n")'';
180 "format_commit_firstline(line)" = ''
181 if(line.starts_with("WIP:"),
182 label("cc_wip", " WIP ") ++ " " ++ format_commit_firstline_a_wip(line.remove_prefix("WIP:").trim()),
183 format_commit_firstline_a_wip(line)
184 )
185 '';
186 "format_commit_firstline_a_wip(line)" = ''
187 if(line.starts_with("feat:") || line.starts_with("feat("),
188 label("cc_feat", "feat") ++ format_commit_firstline_a_cc_type(line.remove_prefix("feat")),
189 if(line.starts_with("fix:") || line.starts_with("fix("),
190 label("cc_fix", "fix") ++ format_commit_firstline_a_cc_type(line.remove_prefix("fix")),
191 if(line.starts_with("hotfix:") || line.starts_with("hotfix("),
192 label("cc_hotfix", "hotfix") ++ format_commit_firstline_a_cc_type(line.remove_prefix("hotfix")),
193 if(line.starts_with("chore:") || line.starts_with("chore("),
194 label("cc_chore", "chore") ++ format_commit_firstline_a_cc_type(line.remove_prefix("chore")),
195 if(line.starts_with("test:") || line.starts_with("test("),
196 label("cc_other", "test") ++ format_commit_firstline_a_cc_type(line.remove_prefix("test")),
197 if(line.starts_with("refactor:") || line.starts_with("refactor("),
198 label("cc_other", "refactor") ++ format_commit_firstline_a_cc_type(line.remove_prefix("refactor")),
199 if(line.starts_with("perf:") || line.starts_with("perf("),
200 label("cc_other", "perf") ++ format_commit_firstline_a_cc_type(line.remove_prefix("perf")),
201 if(line.starts_with("lib:") || line.starts_with("lib("),
202 label("cc_other", "lib") ++ format_commit_firstline_a_cc_type(line.remove_prefix("lib")),
203 label("cc_header", line)
204 ))))))))
205 '';
206 "format_commit_firstline_a_cc_type(rest)" = ''
207 if(rest.starts_with("(") && rest.contains(")"),
208 format_firstline_cc_scope(rest, index_of_close_paren(rest)),
209 format_firstline_a_cc(rest))
210 '';
211 "format_firstline_cc_scope(rest, index)" = ''
212 label("cc_scope", rest.substr(0, index)) ++ format_firstline_a_cc(rest.substr(index, rest.len()))
213 '';
214 "format_firstline_a_cc(rest)" = ''
215 if(rest.starts_with(":"),
216 label("muted", ":") ++ label("cc_header", rest.remove_prefix(":")),
217 label("cc_header", rest)
218 )
219 '';
220 # sorry!
221 "index_of_close_paren(line)" = ''
222 stringify(if(line.substr(1, 2) == ")", "A",
223 if(line.substr(2, 3) == ")", "AA",
224 if(line.substr(3, 4) == ")", "AAA",
225 if(line.substr(4, 5) == ")", "AAAA",
226 if(line.substr(5, 6) == ")", "AAAAA",
227 if(line.substr(6, 7) == ")", "AAAAAA",
228 if(line.substr(7, 8) == ")", "AAAAAAA",
229 if(line.substr(8, 9) == ")", "AAAAAAAA",
230 if(line.substr(9, 10) == ")","AAAAAAAAA",
231 if(line.substr(10, 11) == ")", "AAAAAAAAAA",
232 if(line.substr(11, 12) == ")", "AAAAAAAAAAA",
233 if(line.substr(12, 13) == ")", "AAAAAAAAAAAA",
234 if(line.substr(13, 14) == ")", "AAAAAAAAAAAAA",
235 if(line.substr(14, 15) == ")", "AAAAAAAAAAAAAA",
236 if(line.substr(15, 16) == ")", "AAAAAAAAAAAAAAA",
237 if(line.substr(16, 17) == ")", "AAAAAAAAAAAAAAAA",
238 if(line.substr(17, 18) == ")", "AAAAAAAAAAAAAAAAA",
239 if(line.substr(18, 19) == ")", "AAAAAAAAAAAAAAAAAA",
240 if(line.substr(19, 20) == ")", "AAAAAAAAAAAAAAAAAAA",
241 if(line.substr(20, 21) == ")", "AAAAAAAAAAAAAAAAAAAA",
242 "AAAAAAAAAAAAAAAAAAAAA"
243 ))))))))))))))))))))).len() + 1
244 '';
245
246 "format_short_signature(signature)" = "signature.name()";
247 "format_timestamp(timestamp)" = "timestamp.ago()";
248 "format_short_commit_header(commit)" = ''
249 separate(" ",
250 if(commit.current_working_copy(), label("active_marker", " ACTIVE ")),
251 if(commit.conflict(), label("conflict_marker", " CONFLICT ")),
252 format_short_change_id_with_hidden_and_divergent_info(commit),
253 format_short_signature(commit.author()),
254 label("muted", "|"),
255 if(commit.description().trim().len() > 0, label("muted", format_timestamp(commit_timestamp(commit)))),
256 commit.bookmarks(),
257 commit.tags(),
258 commit.working_copies(),
259 label("muted", "(") ++
260 format_short_commit_id(commit.commit_id()) ++
261 label("muted", ")"),
262 if(config("ui.show-cryptographic-signatures").as_boolean(),
263 format_short_cryptographic_signature(commit.signature())),
264 )
265 '';
196 aliases = {
197 "ab" = [ "abandon" ];
198 # "ai" = [
199 # "util"
200 # "exec"
201 # "--"
202 # "~/jj-ai-sync.sh"
203 # ];
266204 };
267205 };
268206 };
269207
270208 ssh = {
271209 enable = true;
210 enableDefaultConfig = false;
211 extraConfig = ''
212 Include ~/.orbstack/ssh/config*
213
214 SetEnv TERM=xterm-256color
215 '';
272216 matchBlocks = rec {
217 "*" = { };
273218 zenith = {
274219 user = "clo";
275 port = 222;
220 port = 22;
221 };
222 "git.paperclover.net" = zenith;
223 "paperclover.net" = {
224 user = "clo";
225 port = 22;
276226 };
277 "nas.paperclover.net" = zenith;
278227 };
279228 };
280229 };
users/clover/paperback/configuration.nix-6
......@@ -1,8 +1,2 @@
11_: {
2 homebrew = {
3 enable = true;
4 casks = [
5 "db-browser-for-sqlite"
6 ];
7 };
82}
users/clover/paperback/home.nix-1
......@@ -12,7 +12,6 @@
1212 };
1313 home.packages = with pkgs; [
1414 deno
15 nodejs_22
1615 rustup
1716 typescript
1817 pm2
users/clover/work/home.nix+3-3
......@@ -8,17 +8,17 @@
88 }
99 '';
1010 };
11 programs.git.signing.key = "CE485807AE4068AF8508C8DC5CBB21841C7920AD";
1112 home.packages = with pkgs; [
1213 (bun.overrideAttrs (_: rec {
13 version = "1.1.17";
14 version = "1.3.0";
1415 src = fetchurl {
1516 url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-darwin-aarch64.zip";
16 hash = "sha256-aULgRZ9evcGUhKJ6slLJOg3IEzUeNfIkJF8RDP3YUlo=";
17 hash = "sha256-hYSOP5ZIHvyr51pQD9O5S5u5VoaretCjiSl2x74VA2o=";
1718 };
1819 }))
1920 doppler
2021 deno
21 nodejs_24
2222 rustup
2323 typescript
2424 ssm-session-manager-plugin
users/natalie/desktop/configuration.nix+37-6
......@@ -10,7 +10,19 @@
1010 ./hardware-configuration.nix
1111 ];
1212 documentation.man.generateCaches = false;
13 services.displayManager = {
14 enable = true;
15 sddm = {
16 enable = true;
17 wayland.enable = true;
18 };
19 };
20
1321 programs = {
22 hyprland = {
23 enable = true;
24 withUWSM = true;
25 };
1426 gamemode.enable = true;
1527
1628 _1password.enable = true;
......@@ -35,7 +47,19 @@
3547
3648 steam = {
3749 enable = true;
38 package = with pkgs; steam.override { extraPkgs = pkgs: [ attr ]; };
50 remotePlay.openFirewall = true;
51
52 gamescopeSession.enable = true;
53 extraCompatPackages = [ pkgs.proton-ge-bin ];
54 };
55
56 gamescope = {
57 enable = true;
58 capSysNice = true;
59 args = [
60 "--rt"
61 "--expose-wayland"
62 ];
3963 };
4064
4165 git = {
......@@ -56,12 +80,23 @@
5680 };
5781
5882 hardware.bluetooth.enable = true;
83 hardware.graphics.enable = true;
5984
6085 xdg.portal = {
6186 enable = true;
87 xdgOpenUsePortal = true;
88 config = {
89 common.default = [ "gtk" ];
90 hyprland.default = [
91 "gtk"
92 "hyprland"
93 ];
94 };
95
6296 extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
6397 };
6498 virtualisation = {
99 waydroid.enable = true;
65100 containers.enable = true;
66101 podman = {
67102 enable = true;
......@@ -83,6 +118,7 @@
83118 hibernate.enable = false;
84119 hybrid-sleep.enable = false;
85120 };
121 settings.Manager.DefaultTimeoutStopSec = "10s";
86122
87123 services.monitord.wantedBy = [ "multi-user.target" ];
88124 };
......@@ -121,11 +157,6 @@
121157
122158 # Enable sound with pipewire.
123159 security.rtkit.enable = true;
124 services = {
125 desktopManager.cosmic.enable = true;
126 displayManager.cosmic-greeter.enable = true;
127 desktopManager.cosmic.xwayland.enable = true;
128 };
129160
130161 # Enable touchpad support (enabled default in most desktopManager).
131162 # services.xserver.libinput.enable = true;
users/natalie/desktop/home.nix+4-2
......@@ -15,8 +15,7 @@
1515 packages = with pkgs; [
1616 #building macos apps hard :(
1717 ghostty
18 stremio
19 julia
18 #stremio broken qtwebengine
2019 qbittorrent
2120
2221 #gaming
......@@ -34,6 +33,9 @@
3433 limo
3534 nexusmods-app-unfree
3635 protontricks
36 (pkgs.callPackage ../../../packages/exiled_exchange_2 { })
37 awakened_poe_trade
38 fuse-overlayfs
3739
3840 #window manager stuff
3941 wofi
users/natalie/home.nix+7
......@@ -5,6 +5,9 @@
55 ...
66}@args:
77{
8 imports = [
9 ./home
10 ];
811 programs = {
912 # sort-lines:start
1013 atuin.enable = true;
......@@ -28,6 +31,10 @@
2831 };
2932 };
3033 # sort-lines:end
34 ghostty = {
35 enable = true;
36 settings.theme = "Catppuccin Mocha";
37 };
3138
3239 fish = {
3340 shellAliases =
users/natalie/home/default.nix created+12
......@@ -0,0 +1,12 @@
1{ ... }:
2{
3 imports = [
4 ./tmux.nix
5 ./hyprland
6 ./vicinae.nix
7 ./swaync.nix
8 ./gtk.nix
9 ./waybar
10 ./scripts
11 ];
12}
users/natalie/home/gtk.nix created+35
......@@ -0,0 +1,35 @@
1{ pkgs, ... }:
2{
3
4 gtk = {
5 enable = true;
6
7 font = {
8 name = "Maple Mono";
9 size = 12;
10 };
11 theme = {
12 name = "Catppuccin-GTK-Dark";
13 package = pkgs.magnetic-catppuccin-gtk.override {
14 tweaks = [
15 "float"
16 ];
17 };
18 };
19 iconTheme = {
20 name = "Papirus-Dark";
21 package = pkgs.papirus-icon-theme;
22 };
23 cursorTheme = {
24 name = "Bibata-Modern-Ice";
25 package = pkgs.bibata-cursors;
26 size = 24;
27 };
28 };
29
30 home.pointerCursor = {
31 name = "Bibata-Modern-Ice";
32 package = pkgs.bibata-cursors;
33 size = 24;
34 };
35}
users/natalie/home/hyprland/binds.nix created+158
......@@ -0,0 +1,158 @@
1{ pkgs, ... }:
2{
3 wayland.windowManager.hyprland.settings = {
4 binds = {
5 movefocus_cycles_fullscreen = true;
6 };
7
8 bind = [
9 # show keybinds list
10 "$mainMod, F1, exec, show-keybinds"
11
12 # keybindings
13 "$mainMod, Return, exec, ${pkgs.ghostty}/bin/ghostty --gtk-single-instance=true"
14 "$mainMod, P, pseudo,"
15 "$mainMod, C, killactive,"
16 "$mainMod, M, exit, "
17 "$mainMod, E, exec, $fileManager"
18 "$mainMod, F, togglefloating,"
19 "$mainMod, R, exec, $menu "
20 "$mainMod, J, togglesplit "
21 "$mainMod, Space, exec, vicinae vicinae://toggle"
22 # "ALT, Return, exec, [float; size 1111 700] ghostty"
23 # "$mainMod SHIFT, Return, exec, [fullscreen] ghostty"
24 # "$mainMod, B, exec, [workspace 1 silent] zen-beta"
25 # "$mainMod, Q, killactive,"
26 # "$mainMod, F, fullscreen, 0"
27 # "$mainMod SHIFT, F, fullscreen, 1"
28 # "$mainMod, Space, exec, toggle-float"
29 # "$mainMod SHIFT, D, exec, webcord --enable-features=UseOzonePlatform --ozone-platform=wayland"
30 # "$mainMod SHIFT, S, exec, hyprctl dispatch exec '[workspace 5 silent] SoundWireServer'"
31 # "$mainMod, Escape, exec, swaylock"
32 # "ALT, Escape, exec, hyprlock"
33 # "$mainMod SHIFT, Escape, exec, power-menu"
34 # "$mainMod, X, togglesplit,"
35 # "$mainMod, T, exec, toggle-oppacity"
36 # "$mainMod, E, exec, nemo"
37 # "ALT, E, exec, hyprctl dispatch exec '[float; size 1111 700] nemo'"
38 # "$mainMod SHIFT, B, exec, toggle-waybar"
39 # "$mainMod, C ,exec, hyprpicker -a"
40 # "$mainMod, W,exec, wallpaper-picker"
41 # "$mainMod SHIFT, W,exec, hyprctl dispatch exec '[float; size 925 615] waypaper'"
42 # "$mainMod, N, exec, swaync-client -t -sw"
43 # "CTRL SHIFT, Escape, exec, hyprctl dispatch exec '[workspace 9] missioncenter'"
44 # "$mainMod, equal, exec, woomer"
45 # "$mainMod SHIFT, W, exec, vm-start"
46
47 # screenshot
48 ",Print, exec, screenshot --copy"
49 "$mainMod, Print, exec, screenshot --save"
50 "$mainMod SHIFT, Print, exec, screenshot --swappy"
51
52 # switch focus
53 "$mainMod, left, movefocus, l"
54 "$mainMod, right, movefocus, r"
55 "$mainMod, up, movefocus, u"
56 "$mainMod, down, movefocus, d"
57 "$mainMod, h, movefocus, l"
58 "$mainMod, j, movefocus, d"
59 "$mainMod, k, movefocus, u"
60 "$mainMod, l, movefocus, r"
61
62 "$mainMod, left, alterzorder, top"
63 "$mainMod, right, alterzorder, top"
64 "$mainMod, up, alterzorder, top"
65 "$mainMod, down, alterzorder, top"
66 "$mainMod, h, alterzorder, top"
67 "$mainMod, j, alterzorder, top"
68 "$mainMod, k, alterzorder, top"
69 "$mainMod, l, alterzorder, top"
70
71 "CTRL ALT, up, exec, hyprctl dispatch focuswindow floating"
72 "CTRL ALT, down, exec, hyprctl dispatch focuswindow tiled"
73
74 # switch workspace
75 "$mainMod, 1, split-workspace, 1"
76 "$mainMod, 2, split-workspace, 2"
77 "$mainMod, 3, split-workspace, 3"
78 "$mainMod, 4, split-workspace, 4"
79 "$mainMod, 5, split-workspace, 5"
80 "$mainMod, 6, split-workspace, 6"
81 "$mainMod, 7, split-workspace, 7"
82 "$mainMod, 8, split-workspace, 8"
83 "$mainMod, 9, split-workspace, 9"
84 "$mainMod, 0, split-workspace, 10"
85
86 # same as above, but switch to the workspace
87 "$mainMod SHIFT, 1, split-movetoworkspacesilent, 1" # movetoworkspacesilent
88 "$mainMod SHIFT, 2, split-movetoworkspacesilent, 2"
89 "$mainMod SHIFT, 3, split-movetoworkspacesilent, 3"
90 "$mainMod SHIFT, 4, split-movetoworkspacesilent, 4"
91 "$mainMod SHIFT, 5, split-movetoworkspacesilent, 5"
92 "$mainMod SHIFT, 6, split-movetoworkspacesilent, 6"
93 "$mainMod SHIFT, 7, split-movetoworkspacesilent, 7"
94 "$mainMod SHIFT, 8, split-movetoworkspacesilent, 8"
95 "$mainMod SHIFT, 9, split-movetoworkspacesilent, 9"
96 "$mainMod SHIFT, 0, split-movetoworkspacesilent, 10"
97 "$mainMod CTRL, c, split-movetoworkspace, empty"
98
99 # window control
100 "$mainMod SHIFT, left, movewindow, l"
101 "$mainMod SHIFT, right, movewindow, r"
102 "$mainMod SHIFT, up, movewindow, u"
103 "$mainMod SHIFT, down, movewindow, d"
104 "$mainMod SHIFT, h, movewindow, l"
105 "$mainMod SHIFT, j, movewindow, d"
106 "$mainMod SHIFT, k, movewindow, u"
107 "$mainMod SHIFT, l, movewindow, r"
108
109 "$mainMod CTRL, left, resizeactive, -80 0"
110 "$mainMod CTRL, right, resizeactive, 80 0"
111 "$mainMod CTRL, up, resizeactive, 0 -80"
112 "$mainMod CTRL, down, resizeactive, 0 80"
113 "$mainMod CTRL, h, resizeactive, -80 0"
114 "$mainMod CTRL, j, resizeactive, 0 80"
115 "$mainMod CTRL, k, resizeactive, 0 -80"
116 "$mainMod CTRL, l, resizeactive, 80 0"
117
118 "$mainMod ALT, left, moveactive, -80 0"
119 "$mainMod ALT, right, moveactive, 80 0"
120 "$mainMod ALT, up, moveactive, 0 -80"
121 "$mainMod ALT, down, moveactive, 0 80"
122 "$mainMod ALT, h, moveactive, -80 0"
123 "$mainMod ALT, j, moveactive, 0 80"
124 "$mainMod ALT, k, moveactive, 0 -80"
125 "$mainMod ALT, l, moveactive, 80 0"
126
127 # media and volume controls
128 # ",XF86AudioMute,exec, pamixer -t"
129 ",XF86AudioPlay,exec, playerctl play-pause"
130 ",XF86AudioNext,exec, playerctl next"
131 ",XF86AudioPrev,exec, playerctl previous"
132 ",XF86AudioStop,exec, playerctl stop"
133
134 "$mainMod, mouse_down, split-workspace, e-1"
135 "$mainMod, mouse_up, split-workspace, e+1"
136
137 # clipboard manager
138 "$mainMod, V, exec, vicinae vicinae://extensions/vicinae/clipboard/history"
139 #awakened-poe-trade
140 # "SHIFT,Space,pass,class:^(awakened-poe-trade)$"
141 # "CTRL,D,pass,class:^(awakened-poe-trade)$"
142 # "CTRL ALT,D,pass,class:^(awakened-poe-trade)$"
143 ];
144
145 bindel = [
146 ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"
147 ",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
148 ",XF86AudioMute, exec, pctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
149 ",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
150 ];
151
152 # mouse binding
153 bindm = [
154 "$mainMod, mouse:272, movewindow"
155 "$mainMod, mouse:273, resizewindow"
156 ];
157 };
158}
users/natalie/home/hyprland/default.nix created+14
......@@ -0,0 +1,14 @@
1{ ... }:
2{
3 imports = [
4 ./hyprland.nix
5 ./exec-once.nix
6 ./monitors.nix
7 ./settings.nix
8 ./binds.nix
9 ./windowrules.nix
10 ./hyprlock.nix
11 ./variables.nix
12 ./plugins.nix
13 ];
14}
users/natalie/home/hyprland/exec-once.nix created+31
......@@ -0,0 +1,31 @@
1{
2 pkgs,
3 inputs,
4 currentSystem,
5 ...
6}:
7{
8 wayland.windowManager.hyprland.settings.exec-once = [
9 # "hash dbus-update-activation-environment 2>/dev/null"
10 "dbus-update-activation-environment --all --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
11 "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
12
13 "${pkgs.hyprlock}/bin/hyprlock"
14
15 "${pkgs.networkmanagerapplet}/bin/nm-applet &"
16 "${pkgs.wl-clip-persist}/bin/wl-clip-persist --clipboard both &"
17 "${pkgs.wl-clipboard}/bin/wl-paste --watch cliphist store &"
18 # "${pkgs.waybar}/bin/waybar &"
19 "${pkgs.swaynotificationcenter}/bin/swaync &"
20 "${inputs.vicinae.packages.${currentSystem}.default}/bin/vicinae server &"
21 "${pkgs.udiskie}/bin/udiskie --automount --notify --smart-tray &"
22 "${pkgs.hyprland}/bin/hyprctl setcursor Bibata-Modern-Ice 24 &"
23 "${pkgs.tmux}/bin/tmux setenv -g HYPRLAND_INSTANCE_SIGNATURE '$HYPRLAND_INSTANCE_SIGNATURE'"
24 "systemctl --user start hyprpolkitagent"
25 # "init-wallpaper &"
26 #
27 # "ghostty --gtk-single-instance=true --quit-after-last-window-closed=false --initial-window=false"
28 # "[workspace 1 silent] zen-beta"
29 # "[workspace 2 silent] ghostty"
30 ];
31}
users/natalie/home/hyprland/hyprland.nix created+37
......@@ -0,0 +1,37 @@
1{ config, pkgs, ... }:
2{
3 home.packages = with pkgs; [
4 swww
5 grimblast
6 hyprpicker
7 grim
8 slurp
9 wl-clip-persist
10 wl-clipboard
11 cliphist
12 wf-recorder
13 glib
14 wayland
15 playerctl
16 waybar
17 networkmanagerapplet
18 hyprpolkitagent
19 swappy
20 ];
21 # systemd.user.targets.hyprland-session.Unit.Wants = [
22 # "xdg-desktop-autostart.target"
23 # ];
24 wayland.windowManager.hyprland = {
25 enable = true;
26 package = null;
27 portalPackage = null;
28
29 xwayland = {
30 enable = true;
31 };
32 systemd.enable = false;
33 };
34 # https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/#nixos-uwsm
35 xdg.configFile."uwsm/env".source =
36 "${config.home.sessionVariablesPackage}/etc/profile.d/hm-session-vars.sh";
37}
users/natalie/home/hyprland/hyprlock.nix created+112
......@@ -0,0 +1,112 @@
1{ ... }:
2{
3 programs.hyprlock = {
4 enable = false;
5
6 settings = {
7 general = {
8 hide_cursor = true;
9 ignore_empty_input = true;
10 fractional_scaling = 0;
11 };
12
13 background = [
14 {
15 color = "rgba(29, 32, 33, 255)";
16 blur_passes = 2;
17 vibrancy_darkness = 0.0;
18 }
19 ];
20 #
21 # shape = [
22 # # User box
23 # {
24 # size = "300, 50";
25 #
26 # rounding = 0;
27 # border_size = 2;
28 # color = "rgba(102, 92, 84, 0.33)";
29 # border_color = "rgba(168, 153, 132, 0.95)";
30 #
31 # position = "0, ${if host == "laptop" then "120" else "270"}";
32 # halign = "center";
33 # valign = "bottom";
34 # }
35 # ];
36 #
37 # label = [
38 # # Time
39 # {
40 # text = ''cmd[update:1000] echo "$(date +'%k:%M')"'';
41 #
42 # font_size = 115;
43 # font_family = "Maple Mono Bold";
44 #
45 # shadow_passes = 3;
46 # color = "rgba(235, 219, 178, 0.9)";
47 #
48 # position = "0, ${if host == "laptop" then "-25" else "-150"}";
49 # halign = "center";
50 # valign = "top";
51 # }
52 # # Date
53 # {
54 # text = ''cmd[update:1000] echo "- $(date +'%A, %B %d') -" '';
55 #
56 # font_size = 18;
57 # font_family = "Maple Mono";
58 #
59 # shadow_passes = 3;
60 # color = "rgba(235, 219, 178, 0.9)";
61 #
62 # position = "0, ${if host == "laptop" then "-225" else "-350"}";
63 # halign = "center";
64 # valign = "top";
65 # }
66 # # Username
67 # {
68 # text = " $USER";
69 #
70 # font_size = 15;
71 # font_family = "Maple Mono Bold";
72 #
73 # color = "rgba(235, 219, 178, 1)";
74 #
75 # position = "0, ${if host == "laptop" then "134" else "284"}";
76 # halign = "center";
77 # valign = "bottom";
78 # }
79 # ];
80 #
81 # input-field = [
82 # {
83 # size = "300, 50";
84 # rounding = 0;
85 # outline_thickness = 2;
86 #
87 # dots_spacing = 0.4;
88 #
89 # font_color = "rgba(235, 219, 178, 0.9)";
90 # font_family = "Maple Mono Bold";
91 #
92 # outer_color = "rgba(168, 153, 132, 0.95)";
93 # inner_color = "rgba(102, 92, 84, 0.33)";
94 # check_color = "rgba(152, 151, 26, 0.95)";
95 # fail_color = "rgba(204, 36, 29, 0.95)";
96 # capslock_color = "rgba(215, 153, 33, 0.95)";
97 # bothlock_color = "rgba(215, 153, 33, 0.95)";
98 #
99 # hide_input = false;
100 # fade_on_empty = false;
101 # placeholder_text = ''<i><span foreground="##fbf1c7">Enter Password</span></i>'';
102 #
103 # position = "0, ${if host == "laptop" then "50" else "200"}";
104 # halign = "center";
105 # valign = "bottom";
106 # }
107 # ];
108 #
109 # animation = [ "inputFieldColors, 0" ];
110 };
111 };
112}
users/natalie/home/hyprland/monitors.nix created+18
......@@ -0,0 +1,18 @@
1{ pkgs, ... }:
2{
3 wayland.windowManager.hyprland = {
4 settings.monitor = [
5 "desc:Dell Inc. S2719DGF 1LCYBY2,2560x1440@154.85,1920x0,1.0"
6 "desc:Ancor Communications Inc VN279 HALMQS156672,1920x1080@60.0,0x0,1.0"
7 ];
8
9 # extraConfig = ''
10 # # hyprlang noerror true
11 # source = ~/.config/hypr/monitors.conf
12 # source = ~/.config/hypr/workspaces.conf
13 # # hyprlang noerror false
14 # '';
15 };
16
17 home.packages = with pkgs; [ nwg-displays ];
18}
users/natalie/home/hyprland/plugins.nix created+16
......@@ -0,0 +1,16 @@
1{ pkgs, inputs, ... }:
2{
3 wayland.windowManager.hyprland = {
4 plugins = [
5 inputs.split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces
6 ];
7 settings = {
8 plugin = {
9 split-monitor-workspaces = {
10 count = 5;
11 keep_focused = 0;
12 };
13 };
14 };
15 };
16}
users/natalie/home/hyprland/settings.nix created+123
......@@ -0,0 +1,123 @@
1{ ... }:
2{
3 wayland.windowManager.hyprland.settings = {
4 # see: https://wiki.hypr.land/Configuring/Variables/#input
5 input = {
6 kb_layout = "us";
7 repeat_delay = 300;
8 follow_mouse = 1;
9 };
10 # https://wiki.hypr.land/Configuring/Variables/#general
11 general = {
12 "$mainMod" = "SUPER";
13 layout = "dwindle";
14 no_border_on_floating = false;
15
16 };
17 # https://wiki.hypr.land/Configuring/Variables/#misc
18 misc = {
19 disable_hyprland_logo = true;
20 always_follow_on_dnd = true;
21 layers_hog_keyboard_focus = true;
22 animate_manual_resizes = false;
23 enable_swallow = true;
24 swallow_regex = "^(ghostty)$";
25 focus_on_activate = true;
26 new_window_takes_over_fullscreen = 2;
27 middle_click_paste = false;
28 };
29
30 # https://wiki.hypr.land/Configuring/Dwindle-Layout/
31 dwindle = {
32 pseudotile = false;
33 force_split = 2;
34 preserve_split = true;
35 };
36 # https://wiki.hypr.land/Configuring/Variables/#decoration
37 decoration = {
38 rounding = 0;
39 rounding_power = 2.0;
40 active_opacity = 1.0;
41 inactive_opacity = 1.0;
42 fullscreen_opacity = 1.0;
43 dim_modal = true;
44 dim_inactive = false;
45 dim_strength = 0.5;
46 dim_special = 0.2;
47 dim_around = 0.4;
48 screen_shader = "";
49 border_part_of_window = true;
50 blur = {
51 enabled = true;
52 size = 8;
53 passes = 1;
54 brightness = 0.8172;
55 contrast = 0.8916;
56 ignore_opacity = true;
57 noise = 0.0117;
58 new_optimizations = true;
59 xray = true;
60 vibrancy = 0.1696;
61 vibrancy_darkness = 0.0;
62 special = false;
63 popups = false;
64 popups_ignorealpha = 0.2;
65 input_methods = false;
66 input_methods_ignorealpha = 0.2;
67 };
68
69 shadow = {
70 enabled = true;
71 range = 4;
72 render_power = 3;
73 sharp = false;
74 ignore_window = true;
75 color = "0xee1a1a1a";
76 offset = "0 2";
77 scale = 1.0;
78 };
79
80 };
81 # https://wiki.hypr.land/Configuring/Animations/
82 animations = {
83 enabled = true;
84
85 bezier = [
86 "easeOutQuint, 0.23, 1, 0.32, 1"
87 "easeInOutCubic, 0.65, 0.05, 0.36, 1"
88 "linear, 0, 0, 1, 1"
89 "almostLinear, 0.5, 0.5, 0.75, 1"
90 "quick, 0.15, 0, 0.1, 1"
91 ];
92
93 animation = [
94 "global, 1, 10, default"
95 "border, 1, 5.39, easeOutQuint"
96 "windows, 1, 4.79, easeOutQuint"
97 "windowsIn, 1, 4.1, easeOutQuint, popin 87%"
98 "windowsOut, 1, 1.49, linear, popin 87%"
99 "fadeIn, 1, 1.73, almostLinear"
100 "fadeOut, 1, 1.46, almostLinear"
101 "fade, 1, 3.03, quick"
102 "layers, 1, 3.81, easeOutQuint"
103 "layersIn, 1, 4, easeOutQuint, fade"
104 "layersOut, 1, 1.5, linear, fade"
105 "fadeLayersIn, 1, 1.79, almostLinear"
106 "fadeLayersOut, 1, 1.39, almostLinear"
107 "workspaces, 1, 1.94, almostLinear, fade"
108 "workspacesIn, 1, 1.21, almostLinear, fade"
109 "workspacesOut, 1, 1.94, almostLinear, fade"
110 "zoomFactor, 1, 7, quick"
111 ];
112
113 };
114 # https://wiki.hypr.land/Configuring/XWayland/
115 xwayland = {
116 force_zero_scaling = true;
117 };
118 debug = {
119 disable_logs = false;
120 };
121 };
122
123}
users/natalie/home/hyprland/variables.nix created+29
......@@ -0,0 +1,29 @@
1{ ... }:
2{
3 home.sessionVariables = {
4 NIXOS_OZONE_WL = 1;
5 __GL_GSYNC_ALLOWED = 0;
6 __GL_VRR_ALLOWED = 0;
7 # SSH_AUTH_SOCK = "/run/user/1000/ssh-agent";
8 DISABLE_QT5_COMPAT = 0;
9 GDK_BACKEND = "wayland";
10 # ANKI_WAYLAND = 1;
11 WLR_DRM_NO_ATOMIC = 1;
12 # QT_AUTO_SCREEN_SCALE_FACTOR = 1;
13 # QT_WAYLAND_DISABLE_WINDOWDECORATION = 1;
14 QT_QPA_PLATFORM = "wayland";
15 QT_QPA_PLATFORMTHEME = "qt5ct";
16 # QT_STYLE_OVERRIDE = "kvantum";
17 MOZ_ENABLE_WAYLAND = 1;
18 WLR_BACKEND = "vulkan";
19 WLR_RENDERER = "vulkan";
20 WLR_NO_HARDWARE_CURSORS = 1;
21 XDG_CURRENT_DESKTOP = "Hyprland";
22 XDG_SESSION_TYPE = "wayland";
23 XDG_SESSION_DESKTOP = "Hyprland";
24 SDL_VIDEODRIVER = "wayland";
25 CLUTTER_BACKEND = "wayland";
26 # GTK_THEME = "Colloid-Green-Dark-Gruvbox";
27 # GRIMBLAST_HIDE_CURSOR = 0;
28 };
29}
users/natalie/home/hyprland/windowrules.nix created+115
......@@ -0,0 +1,115 @@
1{ ... }:
2{
3 wayland.windowManager.hyprland.settings = {
4 # https://wiki.hypr.land/Configuring/Window-Rules/#layer-rules
5 windowrule = [
6 "float,class:^(mpv)$"
7 "pin,class:^(rofi)$"
8 "pin,class:^(waypaper)$"
9 "float,title:^(Volume Control)$"
10
11 #awakened-poe-trade
12 # https://github.com/SnosMe/awakened-poe-trade/issues/1137#issuecomment-2992606569
13 "tag +apt, class:^(awakened-poe-trade)$"
14 "tag +apt, title:(Awakened PoE Trade)"
15 "float, tag:apt"
16 "noblur, tag:apt"
17 "nofocus, tag:apt"
18 "noshadow, tag:apt"
19 "noborder, tag:apt"
20 "pin, tag:apt"
21 "renderunfocused, tag:apt"
22 "size 100% 100%, tag:apt"
23 "center, tag:apt"
24
25 #POE
26 "tag +poe, title:(Path of Exile)"
27 "tag +poe class:(steam_app_238960)"
28 "fullscreen, tag:poe$"
29 # https://github.com/SnosMe/awakened-poe-trade/issues/1137#issuecomment-3037816727
30 # "tag +fakefullscreen, title:(Path of Exile),class:(steam_app_238960)"
31 # "tile, tag:fakefullscreen"
32 # "noborder, tag:fakefullscreen"
33 # "float,title:^(Firefox — Sharing Indicator)$"
34 # "move 0 0,title:^(Firefox — Sharing Indicator)$"
35 # "size 700 450,title:^(Volume Control)$"
36 # "move 40 55%,title:^(Volume Control)$"
37 #"float, title:^(Picture-in-Picture)$"
38 # "opacity 1.0 override 1.0 override, title:^(Picture-in-Picture)$"
39 # "pin, title:^(Picture-in-Picture)$"
40 # "opacity 1.0 override 1.0 override, title:^(.*imv.*)$"
41 # "opacity 1.0 override 1.0 override, title:^(.*mpv.*)$"
42 # "opacity 1.0 override 1.0 override, class:(Aseprite)"
43 # "opacity 1.0 override 1.0 override, class:(Unity)"
44 # "opacity 1.0 override 1.0 override, class:(zen)"
45 # "opacity 1.0 override 1.0 override, class:(evince)"
46 # "workspace 1, class:^(zen-beta)$"
47 # "workspace 3, class:^(evince)$"
48 # "workspace 4, class:^(Gimp-2.10)$"
49 # "workspace 4, class:^(Aseprite)$"
50 # "workspace 5, class:^(Audacious)$"
51 # "workspace 5, class:^(Spotify)$"
52 # "workspace 8, class:^(com.obsproject.Studio)$"
53 # "workspace 10, class:^(discord)$"
54 # "workspace 10, class:^(WebCord)$"
55 # "idleinhibit focus, class:^(mpv)$"
56 # "idleinhibit fullscreen, class:^(firefox)$"
57 # "float,class:^(org.gnome.Calculator)$"
58 # "float,class:^(waypaper)$"
59 # "float,class:^(zenity)$"
60 # "size 850 500,class:^(zenity)$"
61 # "size 725 330,class:^(SoundWireServer)$"
62 # "float,class:^(org.gnome.FileRoller)$"
63 # "float,class:^(org.pulseaudio.pavucontrol)$"
64 # "float,class:^(SoundWireServer)$"
65 # "float,class:^(.sameboy-wrapped)$"
66 # "float,class:^(file_progress)$"
67 # "float,class:^(confirm)$"
68 # "float,class:^(dialog)$"
69 # "float,class:^(download)$"
70 # "float,class:^(notification)$"
71 # "float,class:^(error)$"
72 # "float,class:^(confirmreset)$"
73 # "float,title:^(Open File)$"
74 # "float,title:^(File Upload)$"
75 # "float,title:^(branchdialog)$"
76 # "float,title:^(Confirm to replace files)$"
77 # "float,title:^(File Operation Progress)$"
78 #
79 # "opacity 0.0 override,class:^(xwaylandvideobridge)$"
80 # "noanim,class:^(xwaylandvideobridge)$"
81 # "noinitialfocus,class:^(xwaylandvideobridge)$"
82 # "maxsize 1 1,class:^(xwaylandvideobridge)$"
83 # "noblur,class:^(xwaylandvideobridge)$"
84 #
85 # # No gaps when only
86 # "bordersize 0, floating:0, onworkspace:w[t1]"
87 # "rounding 0, floating:0, onworkspace:w[t1]"
88 # "bordersize 0, floating:0, onworkspace:w[tg1]"
89 # "rounding 0, floating:0, onworkspace:w[tg1]"
90 # "bordersize 0, floating:0, onworkspace:f[1]"
91 # "rounding 0, floating:0, onworkspace:f[1]"
92 # Remove context menu transparency in chromium based apps
93 # "opaque,class:^()$,title:^()$"
94 # "noshadow,class:^()$,title:^()$"
95 # "noblur,class:^()$,title:^()$"
96 ];
97
98 # https://wiki.hypr.land/Configuring/Window-Rules/#layer-rules
99 layerrule = [
100 "blur, vicinae"
101 "ignorealpha 0, vicinae"
102 "noanim, vicinae"
103 # "dimaround, rofi"
104 # "dimaround, swaync-control-center"
105 ];
106
107 # https://wiki.hypr.land/Configuring/Workspace-Rules/
108 # No gaps when only
109 workspace = [
110 "w[t1], gapsout:0, gapsin:0"
111 "w[tg1], gapsout:0, gapsin:0"
112 "f[1], gapsout:0, gapsin:0"
113 ];
114 };
115}
users/natalie/home/scripts/default.nix created+26
......@@ -0,0 +1,26 @@
1{ pkgs, ... }:
2let
3 scriptDir = ./scripts;
4
5 mkScript = name: {
6 inherit name;
7 value = pkgs.writeScriptBin (builtins.replaceStrings [ ".sh" ] [ "" ] name) (
8 builtins.readFile (scriptDir + "/${name}")
9 );
10 };
11
12 scriptsSet = builtins.listToAttrs (
13 map mkScript (
14 builtins.attrNames (
15 pkgs.lib.filterAttrs (n: v: v == "regular" && (pkgs.lib.hasSuffix ".sh" n)) (
16 builtins.readDir ./scripts
17 )
18 )
19 )
20 );
21 scripts = builtins.attrValues scriptsSet;
22
23in
24{
25 home.packages = scripts;
26}
users/natalie/home/scripts/scripts/fakefullscreen.sh created+44
......@@ -0,0 +1,44 @@
1#!/usr/bin/env nix-shell
2#! nix-shell -i bash -p bash socat jq killall
3# shellcheck disable=all
4
5RUNDIR=/run/user/$EUID/hypr
6WAYBAR_FILE=$RUNDIR/.waybar_is_hidden
7
8function hide {
9 if [ ! -f $WAYBAR_FILE ]; then
10 hyprctl keyword workspace , gapsout:0 >/dev/null 2>&1
11 killall -SIGUSR1 .waybar-wrapped && touch $WAYBAR_FILE
12 fi
13}
14
15function show {
16 if [ -f $WAYBAR_FILE ]; then
17 hyprctl keyword workspace , gapsout:$(hyprctl getoption general:gaps_out -j | jq -r .custom | tr \ ,) >/dev/null 2>&1
18 killall -SIGUSR1 .waybar-wrapped && rm $WAYBAR_FILE >/dev/null 2>&1
19 fi
20}
21
22function fakefullscreen() {
23 local fullscreenclients=$(hyprctl clients -j | jq -r '.[] | select(.tags | contains(["fakefullscreen"])).workspace.id')
24 [ -z "$fullscreenclients" -a ! -f $WAYBAR_FILE ] && return
25 local active=$(hyprctl activeworkspace -j | jq -r .id)
26 for id in $fullscreenclients; do
27 if [ $active -eq $id -a $(hyprctl clients -j | jq -r "[.[] | select(.workspace.id == $id) | select(.floating | not)] | length") -eq 1 ]; then
28 hide
29 return
30 fi
31 done
32 show
33}
34
35sleep 1
36fakefullscreen
37
38socat -u "UNIX-CONNECT:$RUNDIR/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" STDOUT | while read -r event; do
39 case $event in
40 workspace\>\>* | openwindow\>\>* | closewindow\>\>*) fakefullscreen ;;
41 esac
42done
43
44show
users/natalie/home/scripts/scripts/screenshot.sh created+34
......@@ -0,0 +1,34 @@
1#!/usr/bin/env bash
2
3dir="$HOME/Pictures/Screenshots"
4time=$(date +'%Y_%m_%d_at_%Hh%Mm%Ss')
5file="${dir}/Screenshot_${time}.png"
6
7copy() {
8 GRIMBLAST_HIDE_CURSOR=0 grimblast --notify --freeze copy area
9}
10
11save() {
12 GRIMBLAST_HIDE_CURSOR=0 grimblast --notify --freeze save area "$file"
13}
14
15swappy_() {
16 GRIMBLAST_HIDE_CURSOR=0 grimblast --notify --freeze save area "$file"
17 swappy -f "$file"
18}
19
20if [[ ! -d "$dir" ]]; then
21 mkdir -p "$dir"
22fi
23
24if [[ "$1" == "--copy" ]]; then
25 copy
26elif [[ "$1" == "--save" ]]; then
27 save
28elif [[ "$1" == "--swappy" ]]; then
29 swappy_
30else
31 echo -e "Available Options: --copy --save --swappy"
32fi
33
34exit 0
users/natalie/home/swaync.nix created+595
......@@ -0,0 +1,595 @@
1{ pkgs, ... }:
2{
3 services.swaync = {
4 enable = true;
5 settings = {
6 ignore-gtk-theme = true;
7 positionX = "right";
8 positionY = "top";
9 layer = "overlay";
10 control-center-layer = "top";
11 layer-shell = true;
12 layer-shell-cover-screen = true;
13 cssPriority = "user";
14 control-center-margin-top = 15;
15 control-center-margin-bottom = 15;
16 control-center-margin-right = 15;
17 control-center-margin-left = 0;
18 notification-2fa-action = true;
19 notification-inline-replies = false;
20 notification-body-image-height = 100;
21 notification-body-image-width = 200;
22 notification-icon-size = 48;
23 timeout = 8;
24 timeout-low = 6;
25 timeout-critical = 0;
26 fit-to-screen = true;
27 relative-timestamps = true;
28 control-center-width = 400;
29 control-center-height = 600;
30 notification-window-width = 350;
31 keyboard-shortcuts = true;
32 notification-grouping = true;
33 image-visibility = "when-available";
34 transition-time = 200;
35 hide-on-clear = false;
36 hide-on-action = true;
37 text-empty = "No Notifications";
38 script-fail-notify = true;
39 widgets = [
40 "dnd"
41 "mpris"
42 "notifications"
43 "volume"
44 "backlight"
45 ];
46 widget-config = {
47 inhibitors = {
48 text = "Inhibitors";
49 button-text = "Clear All";
50 clear-all-button = true;
51 };
52 title = {
53 text = "Notifications";
54 clear-all-button = true;
55 button-text = "Clear All";
56 };
57 dnd = {
58 text = "Do Not Disturb";
59 };
60 label = {
61 max-lines = 5;
62 text = "Label Text";
63 };
64 mpris = {
65 show-album-art = "always";
66 loop-carousel = false;
67 };
68 volume = {
69 label = "󰕾 ";
70 expand-button-label = "";
71 collapse-button-label = "";
72 show-per-app = true;
73 show-per-app-icon = true;
74 show-per-app-label = false;
75 };
76 backlight = {
77 label = "󰃟 ";
78 };
79 };
80 };
81 style = ''
82 :root {
83 --bg-primary: #1d2021;
84 --bg-secondary: #282828;
85 --bg-button: #4E4E4E;
86 --bg-button-hover: #5E5E5E;
87 --text-primary: #EBDBB2;
88 --text-disabled: #5C554A;
89 --border-color: #928374;
90 --priority-low: #EBDBB2;
91 --priority-normal: #83A598;
92 --priority-critical: #FB4934;
93 --transition-standard: 0.15s ease-in-out;
94 }
95
96 /* Base styles */
97 * {
98 outline: none;
99 }
100
101 *:focus {
102 outline: none;
103 box-shadow: none;
104 }
105
106 /* Scrollbar */
107 scrollbar,
108 scrollbar slider {
109 opacity: 0;
110 min-width: 0px;
111 min-height: 0px;
112 background: transparent;
113 }
114
115 /* Common button styles */
116 .close-button,
117 .widget-title>button,
118 .widget-dnd switch,
119 .widget-menubar>.menu-button-bar>.widget-menubar-container button,
120 .widget-menubar>revealer button,
121 .widget-inhibitors>button {
122 border-radius: 0px;
123 border: none;
124 box-shadow: none;
125 transition: background var(--transition-standard);
126 }
127
128 /* Close button */
129 .close-button {
130 background: var(--bg-button);
131 color: var(--text-primary);
132 text-shadow: none;
133 padding: 0;
134 border-radius: 50%;
135 margin-top: 8px;
136 margin-right: 8px;
137 min-width: 20px;
138 min-height: 20px;
139 }
140
141 .close-button:hover {
142 background: var(--bg-button-hover);
143 }
144
145 /* Notification rows */
146 .notification-row {
147 background: none;
148 }
149
150 .notification-row:focus,
151 .notification-group:focus {
152 background: var(--bg-primary);
153 }
154
155 .notification-row .notification-background {
156 margin: 0px 0px 0px 0px;
157 }
158
159 /* Base notification styles */
160 .notification-row .notification-background .notification {
161 border-radius: 0px;
162 border: 1px solid var(--border-color);
163 transition: background var(--transition-standard);
164 background: var(--bg-primary);
165 padding: 2px 4px;
166 }
167
168 /* Priority-based notification styles */
169 .notification-row .notification-background .notification.low {
170 border-left: 3px solid var(--priority-low);
171 }
172
173 .notification-row .notification-background .notification.normal {
174 border-left: 3px solid var(--priority-normal);
175 }
176
177 .notification-row .notification-background .notification.critical {
178 border-left: 3px solid var(--priority-critical);
179 }
180
181 /* Notification default action */
182 .notification-default-action {
183 padding: 4px;
184 margin: 0;
185 box-shadow: none;
186 background: transparent;
187 border: none;
188 color: var(--text-primary);
189 transition: background var(--transition-standard);
190 border-radius: 0px;
191 }
192
193 .notification-default-action:hover {
194 -gtk-icon-filter: none;
195 background: var(--bg-primary);
196 }
197
198 .notification-default-action:not(:only-child) {
199 border-bottom-left-radius: 0px;
200 border-bottom-right-radius: 0px;
201 }
202
203 /* Notification content */
204 .notification-content {
205 background: transparent;
206 border-radius: 0px;
207 padding: 0;
208 }
209
210 .notification-content .image {
211 -gtk-icon-filter: none;
212 -gtk-icon-size: 30px;
213 border-radius: 50px;
214 margin: 0px 7px 0px 0px;
215 }
216
217 .notification-content .app-icon {
218 -gtk-icon-filter: none;
219 -gtk-icon-size: calc(25px / 3);
220 -gtk-icon-shadow: 0 1px 4px black;
221 margin: 6px;
222 }
223
224 .notification-content .text-box label {
225 filter: none;
226 }
227
228 /* Text elements */
229 .notification-content .text-box .summary,
230 .notification-content .text-box .time,
231 .notification-content .text-box .body {
232 font-size: 16px;
233 background: transparent;
234 color: var(--text-primary);
235 text-shadow: none;
236 }
237
238 .notification-content .text-box .summary,
239 .notification-content .text-box .time {
240 font-weight: bold;
241 }
242
243 .notification-content .text-box .time {
244 margin-right: 30px;
245 }
246
247 .notification-content .text-box .body {
248 font-weight: normal;
249 }
250
251 /* Progress and images */
252 .notification-content progressbar {
253 margin-top: 4px;
254 }
255
256 .notification-content .body-image {
257 margin-top: 4px;
258 background-color: white;
259 -gtk-icon-filter: none;
260 }
261
262 /* Inline reply */
263 .notification-content .inline-reply {
264 margin-top: 4px;
265 }
266
267 .notification-content .inline-reply .inline-reply-entry {
268 background: var(--bg-secondary);
269 color: var(--text-primary);
270 caret-color: var(--text-primary);
271 border: 1px solid var(--border-color);
272 border-radius: 0px;
273 }
274
275 .notification-content .inline-reply .inline-reply-button {
276 margin-left: 4px;
277 background: rgb(48, 48, 48);
278 border: 1px solid var(--border-color);
279 border-radius: 0px;
280 color: var(--text-primary);
281 }
282
283 .notification-content .inline-reply .inline-reply-button:disabled {
284 background: initial;
285 color: rgb(150, 150, 150);
286 border: 1px solid var(--border-color);
287 border-color: transparent;
288 }
289
290 .notification-content .inline-reply .inline-reply-button:hover {
291 background: var(--bg-primary);
292 }
293
294 /* Alternative actions */
295 .notification-alt-actions {
296 background: none;
297 border-bottom-left-radius: 12px;
298 border-bottom-right-radius: 12px;
299 padding: 4px;
300 }
301
302 .notification-action {
303 margin: 4px;
304 padding: 0;
305 font-size: 16px;
306 }
307
308 .notification-action>button {
309 border-radius: 0px;
310 font-size: 16px;
311 padding: 1px;
312 }
313
314 /* Notification groups */
315 .notification-group {
316 transition: opacity 200ms ease-in-out;
317 }
318
319 .notification-group .notification-group-close-button .close-button {
320 margin: 12px 20px;
321 }
322
323 .notification-group .notification-group-buttons,
324 .notification-group .notification-group-headers {
325 margin: 0 16px;
326 color: var(--text-primary);
327 }
328
329 .notification-group .notification-group-headers {
330 font-size: 16px;
331 }
332
333 .notification-group .notification-group-headers .notification-group-icon {
334 color: var(--text-primary);
335 -gtk-icon-size: 20px;
336 font-size: 16px;
337 font-weight: 700;
338 margin: 5px 5px 5px 0px;
339 }
340
341 .notification-group .notification-group-headers .notification-group-header {
342 font-size: 16px;
343 font-weight: 700;
344 color: var(--text-primary);
345 }
346
347 .notification-group .notification-group-buttons {
348 margin: 5px;
349 }
350
351 .notification-group.collapsed.not-expanded {
352 opacity: 1.0;
353 }
354
355 .notification-group.collapsed .notification-row .notification {
356 background-color: var(--bg-primary);
357 }
358
359 .notification-group.collapsed .notification-row:not(:last-child) .notification-action,
360 .notification-group.collapsed .notification-row:not(:last-child) .notification-default-action {
361 opacity: 1.0;
362 }
363
364 .notification-group.collapsed:hover .notification-row:not(:only-child) .notification {
365 background-color: var(--bg-primary);
366 }
367
368 /* Control center */
369 .control-center {
370 background: var(--bg-primary);
371 color: var(--text-primary);
372 border-radius: 0px;
373 border: 2px solid var(--border-color);
374 box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
375 }
376
377 .control-center .control-center-list-placeholder {
378 opacity: 1.0;
379 }
380
381 .control-center .control-center-list {
382 background: transparent;
383 }
384
385 .control-center .control-center-list .notification .notification-default-action,
386 .control-center .control-center-list .notification .notification-action {
387 transition: opacity 400ms ease-in-out, background var(--transition-standard);
388 }
389
390 .control-center .control-center-list .notification .notification-default-action:hover,
391 .control-center .control-center-list .notification .notification-action:hover {
392 background-color: var(--bg-primary);
393 }
394
395 /* Floating notifications */
396 .blank-window,
397 .floating-notifications {
398 background: transparent;
399 }
400
401 .floating-notifications .notification {
402 box-shadow: none;
403 }
404
405 /* Widgets */
406 .widget-title>label {
407 margin: 8px;
408 font-weight: 700;
409 font-size: 16px;
410 }
411
412 .widget-title>button {
413 margin: 8px;
414 font-size: 16px;
415 background: var(--bg-primary);
416 border: 2px solid var(--text-disabled);
417 padding: 3px 10px;
418 color: var(--text-primary);
419 font-weight: 700;
420 }
421
422 /* Common widget styles */
423 .widget-dnd,
424 .widget-label,
425 .widget-volume,
426 .widget-slider,
427 .widget-backlight {
428 margin-left: 8px;
429 margin-right: 8px;
430 margin-top: 0px;
431 margin-bottom: 0px;
432 }
433
434 .widget-dnd label,
435 .widget-label>label {
436 color: var(--text-primary);
437 font-size: 18px;
438 }
439
440 .widget-dnd label {
441 margin: 8px;
442 margin-top: 16px;
443 }
444
445 .widget-dnd switch {
446 margin: 8px;
447 margin-top: 16px;
448 }
449
450 .widget-dnd switch slider {
451 border-radius: 0px;
452 }
453
454 .widget-label {
455 margin: 8px;
456 }
457
458 /* Mpris widget */
459 .widget-mpris {
460 margin: 5px;
461 }
462
463 .widget-mpris .widget-mpris-player {
464 margin: 10px 10px;
465 border-radius: 0px;
466 box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
467 border: 1px solid var(--border-color);
468 }
469
470 .widget-mpris .widget-mpris-player .mpris-background {
471 filter: blur(2px);
472 }
473
474 .widget-mpris .widget-mpris-player .mpris-overlay {
475 padding: 16px;
476 background-color: rgba(0, 0, 0, 0.55);
477 }
478
479 .widget-mpris .widget-mpris-player .mpris-overlay button:hover {
480 background: var(--bg-primary);
481 }
482
483 .widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-album-art {
484 border-radius: 0px;
485 box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
486 -gtk-icon-size: 50px;
487 }
488
489 .widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-title {
490 font-weight: bold;
491 font-size: 16px;
492 }
493
494 .widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-subtitle {
495 font-size: 16px;
496 }
497
498 .widget-mpris .widget-mpris-player .mpris-overlay>box>button {
499 margin: 2px;
500 color: var(--text-primary);
501 }
502
503 .widget-mpris .widget-mpris-player .mpris-overlay>box>button:hover {
504 background-color: rgba(0, 0, 0, 0.5);
505 }
506
507 .widget-mpris>box>button {
508 color: var(--text-primary);
509 }
510
511 .widget-mpris>box>button:disabled {
512 color: var(--text-disabled);
513 }
514
515 /* Buttons widget */
516 .widget-buttons-grid {
517 padding: 8px;
518 margin: 8px;
519 border-radius: 0px;
520 }
521
522 .widget-buttons-grid flowboxchild>button {
523 border-radius: 0px;
524 }
525
526 /* Menubar widget */
527 .widget-menubar>.menu-button-bar>.start {
528 margin-left: 8px;
529 }
530
531 .widget-menubar>.menu-button-bar>.end {
532 margin-right: 8px;
533 }
534
535 .widget-menubar>.menu-button-bar>.widget-menubar-container button {
536 margin: 0 4px;
537 }
538
539 .widget-menubar>revealer {
540 margin-top: 8px;
541 }
542
543 .widget-menubar>revealer button {
544 margin: 8px;
545 margin-top: 0;
546 }
547
548 /* Volume widget */
549 .widget-volume {
550 padding: 8px;
551 margin-bottom: 8px;
552 border-radius: 0px;
553 }
554
555 .widget-volume row image {
556 -gtk-icon-size: 24px;
557 }
558
559 .per-app-volume {
560 background-color: var(--bg-secondary);
561 padding: 8px 8px 8px 8px;
562 margin: 8px 8px 8px 8px;
563 border-radius: 0px;
564 }
565
566 /* Slider widget */
567 .widget-slider {
568 padding: 8px;
569 border-radius: 0px;
570 }
571
572 .widget-slider label {
573 font-size: inherit;
574 }
575
576 /* Backlight widget */
577 .widget-backlight {
578 padding: 8px;
579 border-radius: 0px;
580 margin-top: -8px;
581 margin-bottom: 8px;
582 }
583
584 /* Inhibitors widget */
585 .widget-inhibitors>label {
586 margin: 8px;
587 font-size: 16px;
588 }
589
590 .widget-inhibitors>button {
591 margin: 8px;
592 }
593 '';
594 };
595}
users/natalie/home/tmux.nix created+107
......@@ -0,0 +1,107 @@
1{ pkgs, config, ... }:
2let
3 tmux-nvim = pkgs.tmuxPlugins.mkTmuxPlugin {
4 pluginName = "tmux.nvim";
5 version = "unstable-2025-05-19";
6 src = pkgs.fetchFromGitHub {
7 owner = "aserowy";
8 repo = "tmux.nvim/";
9 rev = "2c1c3be0ef287073cef963f2aefa31a15c8b9cd8";
10 sha256 = "sha256-/XIjqQr9loWVTXZDaZx2bSQgco46z7yam50dCnM5p1U=";
11 };
12 };
13
14in
15{
16 programs.tmux = {
17 enable = true;
18 mouse = true;
19
20 shell = "${pkgs.fish}/bin/fish";
21
22 shortcut = "a";
23 keyMode = "vi";
24
25 plugins = with pkgs.tmuxPlugins; [
26 better-mouse-mode
27 tmux-nvim
28 tmux-thumbs
29 cpu
30 tmux-floax
31 yank
32 # must be before continuum edits right status bar
33 {
34 plugin = catppuccin;
35 extraConfig = ''
36 set -g @catppuccin_flavour "mocha"
37 set -g @catppuccin_window_status_style "rounded"
38
39 set -g status-right-length 100
40 set -g status-left-length 100
41 set -g status-left ""
42 set -g status-right "#{E:@catppuccin_status_application}"
43 set -ag status-right "#{E:@catppuccin_status_session}"
44 set -ag status-right "#{E:@catppuccin_status_uptime}"
45
46 '';
47 }
48 {
49 plugin = resurrect;
50 extraConfig = ''
51 set -g @resurrect-strategy-vim 'session'
52 set -g @resurrect-strategy-nvim 'session'
53 set -g @resurrect-capture-pane-contents 'on'
54 ''
55 + ''
56 # Taken from: https://github.com/p3t33/nixos_flake/blob/5a989e5af403b4efe296be6f39ffe6d5d440d6d6/home/modules/tmux.nix
57 resurrect_dir="$XDG_CACHE_HOME/.tmux/resurrect"
58 set -g @resurrect-dir $resurrect_dir
59
60 set -g @resurrect-hook-post-save-all 'target=$(readlink -f $resurrect_dir/last); sed "s| --cmd .*-vim-pack-dir||g; s|/etc/profiles/per-user/$USER/bin/||g; s|/home/$USER/.nix-profile/bin/||g" $target | sponge $target'
61 '';
62
63 }
64 {
65 plugin = continuum;
66 extraConfig = ''
67 set -g @continuum-restore 'on'
68 set -g @continuum-boot 'on'
69 set -g @continuum-save-interval '10'
70 set -g @continuum-systemd-start-cmd 'start-server'
71 '';
72 }
73
74 ];
75 extraConfig = ''
76 set -g default-terminal "tmux-256color"
77 set-environment -g TMUX_PLUGIN_MANAGER_PATH '~/.local/share/tmux/plugins'
78 # Easier reload of config
79 bind r source-file ~/.config/tmux/tmux.conf
80 # Quicker escape in neovim
81 set -sg escape-time 0
82 set-option -g set-titles on
83 set-option -g set-titles-string "#S / #W"
84
85 set -g allow-passthrough on
86
87 # '@pane-is-vim' is a pane-local option that is set by the plugin on load,
88 # and unset when Neovim exits or suspends; note that this means you'll probably
89 # not want to lazy-load smart-splits.nvim, as the variable won't be set until
90 # the plugin is loaded
91
92 # Smart pane switching with awareness of Neovim splits.
93 bind-key -n C-h if -F "#{@pane-is-vim}" 'send-keys C-h' 'select-pane -L'
94 bind-key -n C-j if -F "#{@pane-is-vim}" 'send-keys C-j' 'select-pane -D'
95 bind-key -n C-k if -F "#{@pane-is-vim}" 'send-keys C-k' 'select-pane -U'
96 bind-key -n C-l if -F "#{@pane-is-vim}" 'send-keys C-l' 'select-pane -R'
97
98 # Smart pane resizing with awareness of Neovim splits.
99 bind-key -n M-h if -F "#{@pane-is-vim}" 'send-keys M-h' 'resize-pane -L 3'
100 bind-key -n M-j if -F "#{@pane-is-vim}" 'send-keys M-j' 'resize-pane -D 3'
101 bind-key -n M-k if -F "#{@pane-is-vim}" 'send-keys M-k' 'resize-pane -U 3'
102 bind-key -n M-l if -F "#{@pane-is-vim}" 'send-keys M-l' 'resize-pane -R 3'
103
104 '';
105 };
106
107}
users/natalie/home/vicinae.nix created+30
......@@ -0,0 +1,30 @@
1{ inputs, pkgs, ... }:
2{
3 services.vicinae = {
4 enable = true;
5 autoStart = false;
6 settings = {
7 faviconService = "twenty"; # twenty | google | none
8 font.size = 11;
9 popToRootOnClose = false;
10 rootSearch.searchFiles = true;
11 theme.name = "catpuccin-mocha";
12 window = {
13 csd = true;
14 opacity = 0.95;
15 rounding = 10;
16 };
17
18 };
19
20 # extensions = [
21 # (inputs.vicinae.mkVicinaeExtension.${pkgs.system} {
22 # inherit pkgs;
23 # name = "nixpkgs search";
24 # src = pkgs.fetchFromGithub {
25 #
26 # };
27 # })
28 # ];
29 };
30}
users/natalie/home/waybar/default.nix created+8
......@@ -0,0 +1,8 @@
1{ ... }:
2{
3 imports = [
4 ./waybar.nix
5 ./settings.nix
6 ./style.nix
7 ];
8}
users/natalie/home/waybar/settings.nix created+181
......@@ -0,0 +1,181 @@
1{
2 pkgs,
3 inputs,
4 currentSystem,
5 ...
6}:
7let
8 custom = {
9 font = "Maple Mono";
10 font_size = "18px";
11 font_weight = "bold";
12 text_color = "#FBF1C7";
13 background_0 = "#1D2021";
14 background_1 = "#282828";
15 border_color = "#928374";
16 red = "#CC241D";
17 green = "#98971A";
18 yellow = "#FABD2F";
19 blue = "#458588";
20 magenta = "#B16286";
21 cyan = "#689D6A";
22 orange = "#D65D0E";
23 opacity = "1";
24 indicator_height = "2px";
25 };
26in
27{
28 programs.waybar.settings.mainBar = with custom; {
29 position = "top";
30 layer = "bottom";
31 height = 28;
32 margin-top = 0;
33 margin-bottom = 0;
34 margin-left = 0;
35 margin-right = 0;
36 modules-left = [
37 "custom/launcher"
38 "hyprland/workspaces"
39 ];
40 modules-center = [ "clock" ];
41 modules-right = [
42 "cpu"
43 "memory"
44 "pulseaudio"
45 "network"
46 "hyprland/language"
47 "tray"
48 "custom/notification"
49 "custom/power-menu"
50 ];
51 clock = {
52 calendar = {
53 format = {
54 today = "<span color='#98971A'><b>{}</b></span>";
55 };
56 };
57 format = " {:%H:%M}";
58 tooltip = "true";
59 tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
60 format-alt = " {:%d/%m}";
61 };
62 "hyprland/workspaces" = {
63 active-only = false;
64 disable-scroll = true;
65 format = "{icon}";
66 on-click = "activate";
67 format-icons = {
68 sort-by-number = true;
69 };
70 persistent-workspaces = {
71 "1" = [ ];
72 "2" = [ ];
73 "3" = [ ];
74 "4" = [ ];
75 "5" = [ ];
76 };
77 };
78 cpu = {
79 format = "<span foreground='${green}'> </span> {usage}%";
80 format-alt = "<span foreground='${green}'> </span> {avg_frequency} GHz";
81 interval = 2;
82 on-click-right = "${pkgs.hyprland}/bin/hyprctl dispatch exec '[float; center; size 950 650] ${pkgs.ghostty}/bin/ghostty --font-size=14 -e btop'";
83 };
84 memory = {
85 format = "<span foreground='${cyan}'>󰟜 </span>{}%";
86 format-alt = "<span foreground='${cyan}'>󰟜 </span>{used} GiB"; # 
87 interval = 2;
88 on-click-right = "${pkgs.hyprland}/bin/hyprctl dispatch exec '[float; center; size 950 650] ${pkgs.ghostty}/bin/ghostty --font-size=14 -e btop'";
89 };
90 disk = {
91 # path = "/";
92 format = "<span foreground='${orange}'>󰋊 </span>{percentage_used}%";
93 interval = 60;
94 on-click-right = "${pkgs.hyprland}/bin/hyprctl dispatch exec '[float; center; size 950 650] ${pkgs.ghostty}/bin/ghostty --font-size=14 -e btop'";
95 };
96 network = {
97 format-wifi = "<span foreground='${magenta}'> </span> {signalStrength}%";
98 format-ethernet = "<span foreground='${magenta}'>󰀂 </span>";
99 tooltip-format = "Connected to {essid} {ifname} via {gwaddr}";
100 format-linked = "{ifname} (No IP)";
101 format-disconnected = "<span foreground='${magenta}'>󰖪 </span>";
102 };
103 tray = {
104 icon-size = 20;
105 spacing = 8;
106 };
107 pulseaudio = {
108 format = "{icon} {volume}%";
109 format-muted = "<span foreground='${blue}'> </span> {volume}%";
110 format-icons = {
111 default = [ "<span foreground='${blue}'> </span>" ];
112 };
113 scroll-step = 2;
114 on-click = "${pkgs.pamixer}/bin/pamixer -t";
115 on-click-right = "${pkgs.pavucontrol}/bin/pavucontrol";
116 };
117 # battery = {
118 # format = "<span foreground='${yellow}'>{icon}</span> {capacity}%";
119 # format-icons = [
120 # " "
121 # " "
122 # " "
123 # " "
124 # " "
125 # ];
126 # format-charging = "<span foreground='${yellow}'> </span>{capacity}%";
127 # format-full = "<span foreground='${yellow}'> </span>{capacity}%";
128 # format-warning = "<span foreground='${yellow}'> </span>{capacity}%";
129 # interval = 5;
130 # states = {
131 # warning = 20;
132 # };
133 # format-time = "{H}h{M}m";
134 # tooltip = true;
135 # tooltip-format = "{time}";
136 # };
137 "hyprland/language" = {
138 tooltip = true;
139 tooltip-format = "Keyboard layout";
140 format = "<span foreground='#FABD2F'> </span> {}";
141 format-fr = "FR";
142 format-en = "US";
143 on-click = "${pkgs.hyprland}/bin/hyprctl switchxkblayout at-translated-set-2-keyboard next";
144 };
145 "custom/launcher" = {
146 format = "";
147 on-click = "random-wallpaper";
148 on-click-right = "${inputs.vicinae.packages.${currentSystem}.default}vicinae vicinae://toggle";
149 tooltip = "true";
150 tooltip-format = "Random Wallpaper";
151 };
152 "custom/notification" = {
153 tooltip = true;
154 tooltip-format = "Notifications";
155 format = "{icon}";
156 format-icons = {
157 notification = "<span foreground='red'><sup></sup></span>";
158 none = "";
159 dnd-notification = "<span foreground='red'><sup></sup></span>";
160 dnd-none = "";
161 inhibited-notification = "<span foreground='red'><sup></sup></span>";
162 inhibited-none = "";
163 dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
164 dnd-inhibited-none = "";
165 };
166 return-type = "json";
167 exec-if = "which swaync-client";
168 exec = "${pkgs.swaynotificationcenter}/bin/swaync-client -swb";
169 on-click = "${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw";
170 on-click-right = "${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw";
171 escape = true;
172 };
173 "custom/power-menu" = {
174 tooltip = true;
175 tooltip-format = "Power menu";
176 format = "<span foreground='${red}'> </span>";
177 on-click = "power-menu";
178 };
179 };
180
181}
users/natalie/home/waybar/style.nix created+107
......@@ -0,0 +1,107 @@
1{ ... }:
2let
3 custom = {
4 font = "Maple Mono";
5 font_size = "18px";
6 font_weight = "bold";
7 text_color = "#FBF1C7";
8 background_0 = "#1D2021";
9 background_1 = "#282828";
10 border_color = "#A89984";
11 red = "#CC241D";
12 green = "#98971A";
13 yellow = "#FABD2F";
14 blue = "#458588";
15 magenta = "#B16286";
16 cyan = "#689D6A";
17 orange = "#D65D0E";
18 orange_bright = "#FE8019";
19 opacity = "1";
20 indicator_height = "2px";
21 };
22in
23{
24 programs.waybar.style = with custom; ''
25 * {
26 border: none;
27 border-radius: 0px;
28 padding: 0;
29 margin: 0;
30 font-family: ${font};
31 font-weight: ${font_weight};
32 opacity: ${opacity};
33 font-size: ${font_size};
34 }
35
36 window#waybar {
37 background: ${background_1};
38 border-top: 1px solid ${border_color};
39 }
40
41 tooltip {
42 background: ${background_1};
43 border: 1px solid ${border_color};
44 }
45 tooltip label {
46 margin: 5px;
47 color: ${text_color};
48 }
49
50 #workspaces {
51 padding-left: 15px;
52 }
53 #workspaces button {
54 color: ${yellow};
55 padding-left: 5px;
56 padding-right: 5px;
57 margin-right: 10px;
58 }
59 #workspaces button.empty {
60 color: ${text_color};
61 }
62 #workspaces button.active {
63 color: ${orange_bright};
64 }
65
66 #clock {
67 color: ${text_color};
68 }
69
70 #tray {
71 margin-left: 10px;
72 color: ${text_color};
73 }
74 #tray menu {
75 background: ${background_1};
76 border: 1px solid ${border_color};
77 padding: 8px;
78 }
79 #tray menuitem {
80 padding: 1px;
81 }
82
83 #pulseaudio, #network, #cpu, #memory, #disk, #battery, #language, #custom-notification, #custom-power-menu {
84 padding-left: 5px;
85 padding-right: 5px;
86 margin-right: 10px;
87 color: ${text_color};
88 }
89
90 #pulseaudio, #language, #custom-notification {
91 margin-left: 15px;
92 }
93
94 #custom-power-menu {
95 padding-right: 2px;
96 margin-right: 5px;
97 }
98
99 #custom-launcher {
100 font-size: 20px;
101 color: ${text_color};
102 font-weight: bold;
103 margin-left: 15px;
104 padding-right: 10px;
105 }
106 '';
107}
users/natalie/home/waybar/waybar.nix created+7
......@@ -0,0 +1,7 @@
1{ ... }:
2{
3 programs.waybar = {
4 enable = true;
5 systemd.enable = true;
6 };
7}
users/natalie/packages.nix+4-1
......@@ -18,6 +18,10 @@ with pkgs;
1818 typescript-language-server
1919 deno
2020
21 #desktop shit
22 gtk3
23 gtk4
24
2125 #ides
2226
2327 #virtualization
......@@ -37,7 +41,6 @@ with pkgs;
3741
3842 #terminal stuff
3943 (btop.override { cudaSupport = true; })
40 tmux
4144 zellij
4245 lazygit
4346 fzf