NixOS configuration 🪄

🔥 start of a new configuration

Signed-off-by: Xaiya Schumin <d.schumin@proton.me>

+56 -4881
-18
1
··· 1 - { lib, ... }: 2 - let 3 - inherit (builtins) 4 - fromTOML 5 - readFile 6 - in 7 - { 8 - programs.starship = { 9 - enable = true; 10 - 11 - settings = fromTOML ( 12 - readFile (fetchurl { 13 - url = "https://starship.rs/presets/toml/bracketed-segments.toml"; 14 - sha256 = "sha256-FQHzfWYEcllLCmH2nx52J31Jw8Yy6aDAoOVdxWxhcAU="; # TODO: make this auto update? (versioned) 15 - }) 16 - ); 17 - }; 18 - }
+28 -502
flake.lock
··· 1 1 { 2 2 "nodes": { 3 - "aagl": { 4 - "inputs": { 5 - "flake-compat": "flake-compat", 6 - "nixpkgs": [ 7 - "nixpkgs" 8 - ], 9 - "rust-overlay": "rust-overlay" 10 - }, 11 - "locked": { 12 - "lastModified": 1767520119, 13 - "narHash": "sha256-+OmNQLA9Fv5WBaxYHlPghS9XmnYWDaLt+AatCGhG+hc=", 14 - "owner": "ezKEa", 15 - "repo": "aagl-gtk-on-nix", 16 - "rev": "5720d3282844b6b23b26dfac075a5f1f58ea8844", 17 - "type": "github" 18 - }, 19 - "original": { 20 - "owner": "ezKEa", 21 - "repo": "aagl-gtk-on-nix", 22 - "type": "github" 23 - } 24 - }, 25 3 "actor-typeahead-src": { 26 4 "flake": false, 27 5 "locked": { ··· 87 65 }, 88 66 "catppuccin": { 89 67 "inputs": { 90 - "nixpkgs": "nixpkgs_2" 68 + "nixpkgs": "nixpkgs" 91 69 }, 92 70 "locked": { 93 71 "lastModified": 1769164550, ··· 164 142 "flake-compat": { 165 143 "flake": false, 166 144 "locked": { 167 - "lastModified": 1761588595, 168 - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", 169 - "owner": "edolstra", 170 - "repo": "flake-compat", 171 - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", 172 - "type": "github" 173 - }, 174 - "original": { 175 - "owner": "edolstra", 176 - "repo": "flake-compat", 177 - "type": "github" 178 - } 179 - }, 180 - "flake-compat_2": { 181 - "flake": false, 182 - "locked": { 183 145 "lastModified": 1696426674, 184 146 "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 185 147 "owner": "edolstra", ··· 193 155 "type": "github" 194 156 } 195 157 }, 196 - "flake-compat_3": { 158 + "flake-compat_2": { 197 159 "flake": false, 198 160 "locked": { 199 161 "lastModified": 1751685974, ··· 207 169 "url": "https://git.lix.systems/lix-project/flake-compat/archive/main.tar.gz" 208 170 } 209 171 }, 210 - "flake-compat_4": { 172 + "flake-compat_3": { 211 173 "locked": { 212 174 "lastModified": 1733328505, 213 175 "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", ··· 221 183 "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" 222 184 } 223 185 }, 224 - "flake-compat_5": { 186 + "flake-compat_4": { 225 187 "flake": false, 226 188 "locked": { 227 189 "lastModified": 1751685974, ··· 294 256 "type": "github" 295 257 } 296 258 }, 297 - "flake-parts_4": { 298 - "inputs": { 299 - "nixpkgs-lib": "nixpkgs-lib_2" 300 - }, 301 - "locked": { 302 - "lastModified": 1768135262, 303 - "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", 304 - "owner": "hercules-ci", 305 - "repo": "flake-parts", 306 - "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", 307 - "type": "github" 308 - }, 309 - "original": { 310 - "owner": "hercules-ci", 311 - "repo": "flake-parts", 312 - "type": "github" 313 - } 314 - }, 315 - "flake-parts_5": { 316 - "inputs": { 317 - "nixpkgs-lib": [ 318 - "nixvim", 319 - "nixpkgs" 320 - ] 321 - }, 322 - "locked": { 323 - "lastModified": 1768135262, 324 - "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", 325 - "owner": "hercules-ci", 326 - "repo": "flake-parts", 327 - "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", 328 - "type": "github" 329 - }, 330 - "original": { 331 - "owner": "hercules-ci", 332 - "repo": "flake-parts", 333 - "type": "github" 334 - } 335 - }, 336 259 "flake-utils": { 337 260 "inputs": { 338 - "systems": "systems_2" 339 - }, 340 - "locked": { 341 - "lastModified": 1731533236, 342 - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 343 - "owner": "numtide", 344 - "repo": "flake-utils", 345 - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 346 - "type": "github" 347 - }, 348 - "original": { 349 - "owner": "numtide", 350 - "repo": "flake-utils", 351 - "type": "github" 352 - } 353 - }, 354 - "flake-utils_2": { 355 - "inputs": { 356 261 "systems": "systems_3" 357 262 }, 358 263 "locked": { ··· 369 274 "type": "github" 370 275 } 371 276 }, 372 - "flake-utils_3": { 373 - "inputs": { 374 - "systems": "systems_6" 375 - }, 376 - "locked": { 377 - "lastModified": 1731533236, 378 - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 379 - "owner": "numtide", 380 - "repo": "flake-utils", 381 - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 382 - "type": "github" 383 - }, 384 - "original": { 385 - "owner": "numtide", 386 - "repo": "flake-utils", 387 - "type": "github" 388 - } 389 - }, 390 277 "gitignore": { 391 278 "inputs": { 392 279 "nixpkgs": [ ··· 411 298 }, 412 299 "gomod2nix": { 413 300 "inputs": { 414 - "flake-utils": "flake-utils_3", 301 + "flake-utils": "flake-utils", 415 302 "nixpkgs": [ 416 303 "tangled", 417 304 "nixpkgs" ··· 454 341 }, 455 342 "home-manager_2": { 456 343 "inputs": { 457 - "nixpkgs": "nixpkgs_3" 344 + "nixpkgs": [ 345 + "nixpkgs" 346 + ] 458 347 }, 459 348 "locked": { 460 349 "lastModified": 1769397130, ··· 538 427 }, 539 428 "lix": { 540 429 "inputs": { 541 - "flake-compat": "flake-compat_3", 430 + "flake-compat": "flake-compat_2", 542 431 "nix2container": "nix2container", 543 432 "nix_2_18": "nix_2_18", 544 433 "nixpkgs": [ ··· 587 476 "url": "https://github.com/lucide-icons/lucide/releases/download/0.536.0/lucide-icons-0.536.0.zip" 588 477 } 589 478 }, 590 - "nix-gaming": { 591 - "inputs": { 592 - "flake-parts": "flake-parts_3", 593 - "nixpkgs": [ 594 - "nixpkgs" 595 - ] 596 - }, 597 - "locked": { 598 - "lastModified": 1769394251, 599 - "narHash": "sha256-IkL7t/k1kbCG3LHPhZD32c80m4QHFgCZ8bVTqN79kEM=", 600 - "owner": "fufexan", 601 - "repo": "nix-gaming", 602 - "rev": "2805bc370151d38eba406f5e3bfd111b02a13bcd", 603 - "type": "github" 604 - }, 605 - "original": { 606 - "owner": "fufexan", 607 - "repo": "nix-gaming", 608 - "type": "github" 609 - } 610 - }, 611 - "nix-jetbrains-plugins": { 612 - "inputs": { 613 - "flake-utils": "flake-utils", 614 - "nix-rust-wrangler": "nix-rust-wrangler", 615 - "nixpkgs": "nixpkgs_5", 616 - "rust-overlay": "rust-overlay_3" 617 - }, 618 - "locked": { 619 - "lastModified": 1769401626, 620 - "narHash": "sha256-ZCE59GxN844Zly0g8USVMb0PajqG0EDT0Lbtca71yPk=", 621 - "owner": "Janrupf", 622 - "repo": "nix-jetbrains-plugin-repository", 623 - "rev": "c29b7cbfb0f514e1591a43725ad649d2385fdfd4", 624 - "type": "github" 625 - }, 626 - "original": { 627 - "owner": "Janrupf", 628 - "repo": "nix-jetbrains-plugin-repository", 629 - "type": "github" 630 - } 631 - }, 632 - "nix-rust-wrangler": { 633 - "inputs": { 634 - "flake-utils": "flake-utils_2", 635 - "nixpkgs": [ 636 - "nix-jetbrains-plugins", 637 - "nixpkgs" 638 - ], 639 - "rust-overlay": "rust-overlay_2" 640 - }, 641 - "locked": { 642 - "lastModified": 1764906652, 643 - "narHash": "sha256-4eY+9dKYhTWx1X7AGVNfwxNlruR0Pjx16Anrm6ifnVo=", 644 - "owner": "Janrupf", 645 - "repo": "nix-rust-wrangler", 646 - "rev": "ab6b5ea4d654a05fea9e1ea53359a9be16777800", 647 - "type": "github" 648 - }, 649 - "original": { 650 - "owner": "Janrupf", 651 - "repo": "nix-rust-wrangler", 652 - "type": "github" 653 - } 654 - }, 655 479 "nix2container": { 656 480 "flake": false, 657 481 "locked": { ··· 675 499 "flake-compat" 676 500 ], 677 501 "lowdown-src": "lowdown-src", 678 - "nixpkgs": "nixpkgs_4", 502 + "nixpkgs": "nixpkgs_2", 679 503 "nixpkgs-regression": [ 680 504 "lix", 681 505 "nixpkgs-regression" ··· 698 522 }, 699 523 "nixcord": { 700 524 "inputs": { 701 - "flake-compat": "flake-compat_4", 702 - "flake-parts": "flake-parts_4", 525 + "flake-compat": "flake-compat_3", 526 + "flake-parts": "flake-parts_3", 703 527 "nixpkgs": [ 704 528 "nixpkgs" 705 529 ] ··· 736 560 }, 737 561 "nixpkgs": { 738 562 "locked": { 739 - "lastModified": 1744536153, 740 - "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", 563 + "lastModified": 1769018530, 564 + "narHash": "sha256-MJ27Cy2NtBEV5tsK+YraYr2g851f3Fl1LpNHDzDX15c=", 741 565 "owner": "NixOS", 742 566 "repo": "nixpkgs", 743 - "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", 567 + "rev": "88d3861acdd3d2f0e361767018218e51810df8a1", 744 568 "type": "github" 745 569 }, 746 570 "original": { 747 571 "owner": "NixOS", 748 - "ref": "nixpkgs-unstable", 572 + "ref": "nixos-unstable", 749 573 "repo": "nixpkgs", 750 574 "type": "github" 751 575 } ··· 765 589 "type": "github" 766 590 } 767 591 }, 768 - "nixpkgs-lib_2": { 769 - "locked": { 770 - "lastModified": 1765674936, 771 - "narHash": "sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo=", 772 - "owner": "nix-community", 773 - "repo": "nixpkgs.lib", 774 - "rev": "2075416fcb47225d9b68ac469a5c4801a9c4dd85", 775 - "type": "github" 776 - }, 777 - "original": { 778 - "owner": "nix-community", 779 - "repo": "nixpkgs.lib", 780 - "type": "github" 781 - } 782 - }, 783 592 "nixpkgs-regression": { 784 593 "locked": { 785 594 "lastModified": 1643052045, ··· 798 607 }, 799 608 "nixpkgs_2": { 800 609 "locked": { 801 - "lastModified": 1769018530, 802 - "narHash": "sha256-MJ27Cy2NtBEV5tsK+YraYr2g851f3Fl1LpNHDzDX15c=", 803 - "owner": "NixOS", 804 - "repo": "nixpkgs", 805 - "rev": "88d3861acdd3d2f0e361767018218e51810df8a1", 806 - "type": "github" 807 - }, 808 - "original": { 809 - "owner": "NixOS", 810 - "ref": "nixos-unstable", 811 - "repo": "nixpkgs", 812 - "type": "github" 813 - } 814 - }, 815 - "nixpkgs_3": { 816 - "locked": { 817 - "lastModified": 1769018530, 818 - "narHash": "sha256-MJ27Cy2NtBEV5tsK+YraYr2g851f3Fl1LpNHDzDX15c=", 819 - "owner": "NixOS", 820 - "repo": "nixpkgs", 821 - "rev": "88d3861acdd3d2f0e361767018218e51810df8a1", 822 - "type": "github" 823 - }, 824 - "original": { 825 - "owner": "NixOS", 826 - "ref": "nixos-unstable", 827 - "repo": "nixpkgs", 828 - "type": "github" 829 - } 830 - }, 831 - "nixpkgs_4": { 832 - "locked": { 833 610 "lastModified": 1705033721, 834 611 "narHash": "sha256-K5eJHmL1/kev6WuqyqqbS1cdNnSidIZ3jeqJ7GbrYnQ=", 835 612 "owner": "NixOS", ··· 844 621 "type": "github" 845 622 } 846 623 }, 847 - "nixpkgs_5": { 848 - "locked": { 849 - "lastModified": 1764667669, 850 - "narHash": "sha256-7WUCZfmqLAssbDqwg9cUDAXrSoXN79eEEq17qhTNM/Y=", 851 - "owner": "NixOS", 852 - "repo": "nixpkgs", 853 - "rev": "418468ac9527e799809c900eda37cbff999199b6", 854 - "type": "github" 855 - }, 856 - "original": { 857 - "owner": "NixOS", 858 - "ref": "nixos-unstable", 859 - "repo": "nixpkgs", 860 - "type": "github" 861 - } 862 - }, 863 - "nixpkgs_6": { 864 - "locked": { 865 - "lastModified": 1769330179, 866 - "narHash": "sha256-yxgb4AmkVHY5OOBrC79Vv6EVd4QZEotqv+6jcvA212M=", 867 - "owner": "NixOS", 868 - "repo": "nixpkgs", 869 - "rev": "48698d12cc10555a4f3e3222d9c669b884a49dfe", 870 - "type": "github" 871 - }, 872 - "original": { 873 - "owner": "NixOS", 874 - "ref": "nixpkgs-unstable", 875 - "repo": "nixpkgs", 876 - "type": "github" 877 - } 878 - }, 879 - "nixpkgs_7": { 624 + "nixpkgs_3": { 880 625 "locked": { 881 - "lastModified": 1768875095, 882 - "narHash": "sha256-dYP3DjiL7oIiiq3H65tGIXXIT1Waiadmv93JS0sS+8A=", 883 - "owner": "NixOS", 884 - "repo": "nixpkgs", 885 - "rev": "ed142ab1b3a092c4d149245d0c4126a5d7ea00b0", 886 - "type": "github" 887 - }, 888 - "original": { 889 - "owner": "NixOS", 890 - "ref": "nixpkgs-unstable", 891 - "repo": "nixpkgs", 892 - "type": "github" 893 - } 894 - }, 895 - "nixpkgs_8": { 896 - "locked": { 897 - "lastModified": 1769330179, 898 - "narHash": "sha256-YpOjLmOGokqTiFjxFu0ioMpMbxHGP6CckfgmqV5OAck=", 899 - "rev": "48698d12cc10555a4f3e3222d9c669b884a49dfe", 626 + "lastModified": 1770141374, 627 + "narHash": "sha256-maAcidx6pHsZx2x8tpi/hQs+pGySAZF074Z+aZW+Hxw=", 628 + "rev": "41965737c1797c1d83cfb0b644ed0840a6220bd1", 900 629 "type": "tarball", 901 - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre934390.48698d12cc10/nixexprs.tar.xz?lastModified=1769330179&rev=48698d12cc10555a4f3e3222d9c669b884a49dfe" 630 + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre939860.41965737c179/nixexprs.tar.xz?lastModified=1770141374&rev=41965737c1797c1d83cfb0b644ed0840a6220bd1" 902 631 }, 903 632 "original": { 904 633 "type": "tarball", 905 634 "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" 906 635 } 907 636 }, 908 - "nixpkgs_9": { 637 + "nixpkgs_4": { 909 638 "locked": { 910 639 "lastModified": 1768875095, 911 640 "narHash": "sha256-dYP3DjiL7oIiiq3H65tGIXXIT1Waiadmv93JS0sS+8A=", ··· 921 650 "type": "github" 922 651 } 923 652 }, 924 - "nixvim": { 925 - "inputs": { 926 - "flake-parts": "flake-parts_5", 927 - "nixpkgs": "nixpkgs_7", 928 - "systems": "systems_4" 929 - }, 930 - "locked": { 931 - "lastModified": 1769418848, 932 - "narHash": "sha256-jLSg9IkglcIw64kU1utXxsxXhiVdD45dkh9ZJKaFQ7U=", 933 - "owner": "nix-community", 934 - "repo": "nixvim", 935 - "rev": "c19a0517ddeed4c1548611e42e187048fc2e5dcf", 936 - "type": "github" 937 - }, 938 - "original": { 939 - "owner": "nix-community", 940 - "repo": "nixvim", 941 - "type": "github" 942 - } 943 - }, 944 653 "pre-commit-hooks": { 945 654 "inputs": { 946 - "flake-compat": "flake-compat_2", 655 + "flake-compat": "flake-compat", 947 656 "gitignore": "gitignore", 948 657 "nixpkgs": [ 949 658 "agenix-rekey", ··· 982 691 }, 983 692 "root": { 984 693 "inputs": { 985 - "aagl": "aagl", 986 694 "agenix": "agenix", 987 695 "agenix-rekey": "agenix-rekey", 988 696 "catppuccin": "catppuccin", ··· 990 698 "flake-parts": "flake-parts_2", 991 699 "home-manager": "home-manager_2", 992 700 "lix": "lix", 993 - "nix-gaming": "nix-gaming", 994 - "nix-jetbrains-plugins": "nix-jetbrains-plugins", 995 701 "nixcord": "nixcord", 996 702 "nixos-hardware": "nixos-hardware", 997 - "nixpkgs": "nixpkgs_6", 998 - "nixvim": "nixvim", 999 - "systems": "systems_5", 703 + "nixpkgs": "nixpkgs_3", 704 + "systems": "systems_2", 1000 705 "tangled": "tangled", 1001 - "tgirlpkgs": "tgirlpkgs", 1002 - "tidaLuna": "tidaLuna", 1003 - "tinted-theming-schemes": "tinted-theming-schemes", 1004 - "vicinae": "vicinae" 1005 - } 1006 - }, 1007 - "rust-overlay": { 1008 - "inputs": { 1009 - "nixpkgs": "nixpkgs" 1010 - }, 1011 - "locked": { 1012 - "lastModified": 1764470739, 1013 - "narHash": "sha256-sa9f81B1dWO16QtgDTWHX8DQbiHKzHndpaunY5EQtwE=", 1014 - "owner": "oxalica", 1015 - "repo": "rust-overlay", 1016 - "rev": "3bfa664055e1a09c6aedab5533c5fc8d6ca5741a", 1017 - "type": "github" 1018 - }, 1019 - "original": { 1020 - "owner": "oxalica", 1021 - "repo": "rust-overlay", 1022 - "type": "github" 1023 - } 1024 - }, 1025 - "rust-overlay_2": { 1026 - "inputs": { 1027 - "nixpkgs": [ 1028 - "nix-jetbrains-plugins", 1029 - "nix-rust-wrangler", 1030 - "nixpkgs" 1031 - ] 1032 - }, 1033 - "locked": { 1034 - "lastModified": 1764902447, 1035 - "narHash": "sha256-wNqkDBj+tjK619sTHPEA7uhjr7DHHEY8OsFou31dxy0=", 1036 - "owner": "oxalica", 1037 - "repo": "rust-overlay", 1038 - "rev": "d914a744a83098eeb28125d2848ad383b209223f", 1039 - "type": "github" 1040 - }, 1041 - "original": { 1042 - "owner": "oxalica", 1043 - "repo": "rust-overlay", 1044 - "type": "github" 1045 - } 1046 - }, 1047 - "rust-overlay_3": { 1048 - "inputs": { 1049 - "nixpkgs": [ 1050 - "nix-jetbrains-plugins", 1051 - "nixpkgs" 1052 - ] 1053 - }, 1054 - "locked": { 1055 - "lastModified": 1764902447, 1056 - "narHash": "sha256-wNqkDBj+tjK619sTHPEA7uhjr7DHHEY8OsFou31dxy0=", 1057 - "owner": "oxalica", 1058 - "repo": "rust-overlay", 1059 - "rev": "d914a744a83098eeb28125d2848ad383b209223f", 1060 - "type": "github" 1061 - }, 1062 - "original": { 1063 - "owner": "oxalica", 1064 - "repo": "rust-overlay", 1065 - "type": "github" 706 + "tidaLuna": "tidaLuna" 1066 707 } 1067 708 }, 1068 709 "sqlite-lib-src": { ··· 1123 764 "type": "github" 1124 765 } 1125 766 }, 1126 - "systems_4": { 1127 - "locked": { 1128 - "lastModified": 1681028828, 1129 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1130 - "owner": "nix-systems", 1131 - "repo": "default", 1132 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1133 - "type": "github" 1134 - }, 1135 - "original": { 1136 - "owner": "nix-systems", 1137 - "repo": "default", 1138 - "type": "github" 1139 - } 1140 - }, 1141 - "systems_5": { 1142 - "locked": { 1143 - "lastModified": 1681028828, 1144 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1145 - "owner": "nix-systems", 1146 - "repo": "default", 1147 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1148 - "type": "github" 1149 - }, 1150 - "original": { 1151 - "owner": "nix-systems", 1152 - "repo": "default", 1153 - "type": "github" 1154 - } 1155 - }, 1156 - "systems_6": { 1157 - "locked": { 1158 - "lastModified": 1681028828, 1159 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1160 - "owner": "nix-systems", 1161 - "repo": "default", 1162 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1163 - "type": "github" 1164 - }, 1165 - "original": { 1166 - "owner": "nix-systems", 1167 - "repo": "default", 1168 - "type": "github" 1169 - } 1170 - }, 1171 - "systems_7": { 1172 - "locked": { 1173 - "lastModified": 1681028828, 1174 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1175 - "owner": "nix-systems", 1176 - "repo": "default", 1177 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1178 - "type": "github" 1179 - }, 1180 - "original": { 1181 - "owner": "nix-systems", 1182 - "repo": "default", 1183 - "type": "github" 1184 - } 1185 - }, 1186 767 "tangled": { 1187 768 "inputs": { 1188 769 "actor-typeahead-src": "actor-typeahead-src", 1189 - "flake-compat": "flake-compat_5", 770 + "flake-compat": "flake-compat_4", 1190 771 "gomod2nix": "gomod2nix", 1191 772 "htmx-src": "htmx-src", 1192 773 "htmx-ws-src": "htmx-ws-src", ··· 1213 794 "url": "https://tangled.org/@tangled.org/core" 1214 795 } 1215 796 }, 1216 - "tgirlpkgs": { 1217 - "inputs": { 1218 - "nixpkgs": "nixpkgs_8" 1219 - }, 1220 - "locked": { 1221 - "lastModified": 1769421526, 1222 - "narHash": "sha256-JAp7dONxe3N49BrhXdN0sKpuEIc7/yw6W5NKQYhnnqU=", 1223 - "owner": "tgirlcloud", 1224 - "repo": "pkgs", 1225 - "rev": "1c7ff0a37d24bd22d566b9b322d1a8b22c8df8a6", 1226 - "type": "github" 1227 - }, 1228 - "original": { 1229 - "owner": "tgirlcloud", 1230 - "repo": "pkgs", 1231 - "type": "github" 1232 - } 1233 - }, 1234 797 "tidaLuna": { 1235 798 "inputs": { 1236 - "nixpkgs": "nixpkgs_9" 799 + "nixpkgs": "nixpkgs_4" 1237 800 }, 1238 801 "locked": { 1239 802 "lastModified": 1769366775, ··· 1249 812 "type": "github" 1250 813 } 1251 814 }, 1252 - "tinted-theming-schemes": { 1253 - "flake": false, 1254 - "locked": { 1255 - "lastModified": 1768516483, 1256 - "narHash": "sha256-AWTIYZ1tZab0YwAQwgt5yO4ucqZoc4iXX002Byy7pRY=", 1257 - "owner": "tinted-theming", 1258 - "repo": "schemes", 1259 - "rev": "43dd14f6466a782bd57419fdfb5f398c74d6ac53", 1260 - "type": "github" 1261 - }, 1262 - "original": { 1263 - "owner": "tinted-theming", 1264 - "repo": "schemes", 1265 - "type": "github" 1266 - } 1267 - }, 1268 815 "treefmt-nix": { 1269 816 "inputs": { 1270 817 "nixpkgs": [ ··· 1283 830 "original": { 1284 831 "owner": "numtide", 1285 832 "repo": "treefmt-nix", 1286 - "type": "github" 1287 - } 1288 - }, 1289 - "vicinae": { 1290 - "inputs": { 1291 - "nixpkgs": [ 1292 - "nixpkgs" 1293 - ], 1294 - "systems": "systems_7" 1295 - }, 1296 - "locked": { 1297 - "lastModified": 1769366024, 1298 - "narHash": "sha256-DgL0rrfJE2EcSQAWWfuJ3T9tddIAYm19O308amPDqWM=", 1299 - "owner": "vicinaehq", 1300 - "repo": "vicinae", 1301 - "rev": "ca063a1fdfb6cb8b6bd36b69b77d5602ac7f14d1", 1302 - "type": "github" 1303 - }, 1304 - "original": { 1305 - "owner": "vicinaehq", 1306 - "repo": "vicinae", 1307 833 "type": "github" 1308 834 } 1309 835 }
+20 -63
flake.nix
··· 6 6 7 7 inputs = { 8 8 9 - nixpkgs = { 10 - type = "github"; 11 - owner = "NixOS"; 12 - repo = "nixpkgs"; 13 - ref = "nixpkgs-unstable"; 14 - }; 9 + # main-repository 10 + # Also important note: 11 + # https://deer.social/profile/did:plc:mojgntlezho4qt7uvcfkdndg/post/3loogwsoqok2w 12 + nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"; 15 13 16 14 # Forked and better version of nix :> 17 15 lix = { ··· 19 17 inputs.nixpkgs.follows = "nixpkgs"; 20 18 }; 21 19 22 - nix-jetbrains-plugins = { 23 - type = "github"; 24 - owner = "Janrupf"; 25 - repo = "nix-jetbrains-plugin-repository"; 26 - }; 27 - 20 + # declarative theme manager; The one I use the most currently !! 28 21 catppuccin = { 29 22 type = "github"; 30 23 owner = "catppuccin"; 31 24 repo = "nix"; 32 25 }; 33 26 34 - # Tangled knots 27 + # ATProtocol git platform 35 28 tangled = { 36 29 url = "git+https://tangled.org/@tangled.org/core"; 37 - 38 30 inputs.nixpkgs.follows = "nixpkgs"; 39 31 }; 40 32 41 - # Package collection 42 - tgirlpkgs = { 43 - type = "github"; 44 - owner = "tgirlcloud"; 45 - repo = "pkgs"; 46 - }; 47 - 48 - nixvim = { 49 - type = "github"; 50 - owner = "nix-community"; 51 - repo = "nixvim"; 52 - }; 53 - 33 + # TODO: change once at hardware part of this configuration? 34 + # uses an entire repository with lots of configuration for just one (framework) module 35 + # could write it into an own module 54 36 nixos-hardware = { 55 37 type = "github"; 56 38 owner = "NixOS"; ··· 62 44 type = "github"; 63 45 owner = "nix-community"; 64 46 repo = "home-manager"; 47 + inputs.nixpkgs.follows = "nixpkgs"; 65 48 }; 66 49 67 - # Make passwords go puff 50 + # secret manager based on age encryption 51 + # the original agenix is needed for agenix-rekey, so dont mind them two being there 68 52 agenix = { 69 53 type = "github"; 70 54 owner = "ryantm"; 71 55 repo = "agenix"; 72 - 73 56 inputs.nixpkgs.follows = "nixpkgs"; 74 57 }; 75 58 76 - # Make password go puff (with the help of keys) 59 + # secret manager based on age encryption 60 + # this adds security key and system based encryption support !! 77 61 agenix-rekey = { 78 62 type = "github"; 79 63 owner = "oddlama"; ··· 82 66 inputs.nixpkgs.follows = "nixpkgs"; 83 67 }; 84 68 85 - # bring all the mess together with flake-parts 69 + # Flake management tool, keeping all together nicely 86 70 flake-parts = { 87 71 type = "github"; 88 72 owner = "hercules-ci"; ··· 91 75 inputs.nixpkgs-lib.follows = "nixpkgs"; 92 76 }; 93 77 78 + # easily manage our hosts devices 94 79 easy-hosts = { 95 80 type = "github"; 96 81 owner = "tgirlcloud"; ··· 98 83 }; 99 84 100 85 # Nix systems list 86 + # TODO: needed? 101 87 systems = { 102 88 type = "github"; 103 89 owner = "nix-systems"; 104 90 repo = "default"; 105 91 }; 106 92 107 - # Injected TIDAL 93 + # TIDAL (music client) 94 + # injection for features like plugins and themes 108 95 tidaLuna = { 109 96 type = "github"; 110 97 owner = "Inrixia"; 111 98 repo = "TidaLuna"; 112 99 }; 113 100 114 - tinted-theming-schemes = { 115 - type = "github"; 116 - owner = "tinted-theming"; 117 - repo = "schemes"; 118 - flake = false; 119 - }; 120 - 101 + # TODO: other solution? 121 102 nixcord = { 122 103 type = "github"; 123 104 owner = "KaylorBen"; 124 105 repo = "nixcord"; 125 - 126 - inputs.nixpkgs.follows = "nixpkgs"; 127 - }; 128 - 129 - nix-gaming = { 130 - type = "github"; 131 - owner = "fufexan"; 132 - repo = "nix-gaming"; 133 - 134 - inputs.nixpkgs.follows = "nixpkgs"; 135 - }; 136 - 137 - aagl = { 138 - type = "github"; 139 - owner = "ezKEa"; 140 - repo = "aagl-gtk-on-nix"; 141 - 142 - inputs.nixpkgs.follows = "nixpkgs"; 143 - }; 144 - 145 - vicinae = { 146 - type = "github"; 147 - owner = "vicinaehq"; 148 - repo = "vicinae"; 149 106 150 107 inputs.nixpkgs.follows = "nixpkgs"; 151 108 };
-6
modules/base/default.nix
··· 1 - # Basic variables and configurations 2 - { 3 - imports = [ 4 - ./profiles.nix 5 - ]; 6 - }
-19
modules/base/profiles.nix
··· 1 - { self, lib, ... }: 2 - let 3 - inherit (lib.types) bool; 4 - 5 - inherit (self.lib.modules) mkOpt; 6 - in 7 - { 8 - options.sylveon.profiles = { 9 - 10 - graphical.enable = mkOpt bool false "Enable configurations for graphical systems"; 11 - laptop.enable = mkOpt bool false "Enable configurations for laptops"; 12 - server.enable = mkOpt bool false "Enable configurations for servers"; 13 - 14 - gaming.enable = mkOpt bool false "Configure the system for gaming"; 15 - 16 - development.enable = mkOpt bool false "Configure the system for development purposes"; 17 - 18 - }; 19 - }
-18
modules/flake/args.nix
··· 1 - { inputs, ... }: 2 - { 3 - systems = import inputs.systems; 4 - 5 - perSystem = 6 - { system, pkgs, ... }: 7 - { 8 - # configure how packages are built 9 - _module.args.pkgs = import inputs.nixpkgs { 10 - inherit system; 11 - 12 - config.allowUnfree = true; 13 - overlays = [ ]; 14 - }; 15 - 16 - formatter = pkgs.nixfmt-tree; 17 - }; 18 - }
+2 -9
modules/flake/default.nix
··· 1 - { inputs, ... }: 2 1 { 3 2 imports = [ 4 - inputs.agenix-rekey.flakeModule 5 - 6 3 ../../systems 7 4 8 - ./modules.nix # Inject modules into flake 9 - ./lib # add my own library 10 - ./args.nix # Pass arguments used by the flake 11 - ./shell.nix # A development environment for this system 12 - 5 + ./lib # The library used by our configuration 13 6 ]; 14 - } 7 + }
+4 -18
modules/flake/lib/default.nix
··· 1 - { lib, config, inputs, ... }: 2 - let 3 - sylveonLib = lib.fixedPoints.makeExtensible (final: { 4 - modules = import ./modules.nix { inherit lib inputs; }; 5 - users = import ./users.nix { inherit lib; }; 6 - validation = import ./validation.nix { inherit lib config; }; 7 - 8 - inherit (final.modules) mkOpt; 9 - inherit (final.users) hasGroup; 10 - inherit (final.validation) anyHomeModuleActive; 11 - }); 12 - 13 - in 14 1 { 15 - # How do I call lib? 16 - # self.lib - calling my new cool library 17 - # lib - call nixos default library 18 - flake.lib = sylveonLib; 19 - } 2 + ... 3 + }: { 4 + # TODO: add more based on need 5 + }
-35
modules/flake/lib/modules.nix
··· 1 - { lib, inputs, }: 2 - let 3 - inherit (lib.options) mkOption; 4 - inherit (lib.types) bool str int; 5 - 6 - # Simplified one lining mkOption 7 - # example: ``mkOpt str "" "Example Option"`` 8 - mkOpt = 9 - type: default: description: 10 - mkOption { inherit type default description; }; 11 - 12 - # Creating options for my services 13 - # Inspired from: isabelroses 14 - # example: ``mkServiceOpt "service" { port = 3000; host = "127.0.0.1"; domain = "xaiya.dev"; extraConfig = { //// }; } 15 - mkServiceOpt = 16 - name: 17 - { 18 - port ? 0, 19 - host ? "[::1]", 20 - domain ? "xaiya.dev", # Change if new domains/other devices? 21 - extraConfig ? {} 22 - }: { 23 - enable = mkOpt bool false ''Enable the "${name}" service''; 24 - port = mkOpt int port ''On what port ${name} runs on''; 25 - host = mkOpt str host ''On what host ${name} runs on''; 26 - domain = mkOpt str domain ''What domain should be used for ${name}''; 27 - } // extraConfig ; 28 - 29 - in 30 - { 31 - inherit 32 - mkOpt 33 - mkServiceOpt 34 - ; 35 - }
-21
modules/flake/lib/users.nix
··· 1 - { lib, ... }: 2 - let 3 - inherit (lib.lists) any; 4 - inherit (lib) optionals forEach; 5 - 6 - # Search in a list of users, who of these users are in a specific group 7 - # If the user has at least one of these groups, return true 8 - # inGroup :: array -> string -> bool 9 - hasGroup = groups: user: any (group: builtins.elem group user.extraGroups) groups; 10 - 11 - # Filters an array of usernames, leaving only the ones with root access 12 - # Uses the from above created "hasGroup" 13 - # filterTrustedUsers :: array -> array 14 - filterTrustedUsers = 15 - users: config: 16 - forEach users (user: optionals (hasGroup [ "wheel" ] config.users.users.${user}) user); 17 - 18 - in 19 - { 20 - inherit hasGroup filterTrustedUsers; 21 - }
-29
modules/flake/lib/validation.nix
··· 1 - { lib, ... }: 2 - let 3 - inherit (lib) 4 - any 5 - getAttr 6 - forEach 7 - ; 8 - 9 - inherit (lib.attrsets) 10 - getAttrFromPath 11 - attrByPath 12 - ; 13 - 14 - # Search through every home-module configuration and check if this module is anywhere activated 15 - anyHomeModuleActive = 16 - config: modulePath: 17 - let 18 - modulesList = ( 19 - forEach config.sylveon.system.users ( 20 - name: getAttrFromPath modulePath config.home-manager.users.${name} 21 - ) 22 - ); 23 - in 24 - any (x: x) modulesList; 25 - 26 - in 27 - { 28 - inherit anyHomeModuleActive; 29 - }
-38
modules/flake/modules.nix
··· 1 - { self, ... }: 2 - let 3 - 4 - mkModule = 5 - { 6 - name ? "sylveon", 7 - class, 8 - modules, 9 - }: 10 - { 11 - _class = class; 12 - _file = "${self.outPath}/flake.nix#${class}Modules.${name}"; 13 - 14 - imports = modules; 15 - }; 16 - 17 - in 18 - { 19 - flake = { 20 - nixosModules = { 21 - sylveon = mkModule { 22 - class = "nixos"; 23 - modules = [ 24 - "${self}/modules/nixos/default.nix" 25 - "${self}/modules/base/default.nix" 26 - 27 - ]; 28 - }; 29 - }; 30 - 31 - homeManagerModules = { 32 - sylveon = mkModule { 33 - class = "homeManager"; 34 - modules = [ "${self}/modules/home/default.nix" ]; 35 - }; 36 - }; 37 - }; 38 - }
-23
modules/flake/shell.nix
··· 1 - { 2 - perSystem = 3 - { 4 - pkgs, 5 - inputs', 6 - config, 7 - ... 8 - }: 9 - { 10 - devShells = { 11 - default = pkgs.mkShell { 12 - name = "dotfiles"; 13 - meta.description = "Development environment for the repository 'dotfiles'"; 14 - 15 - packages = [ 16 - pkgs.gitMinimal # Add git when it is not already installed 17 - inputs'.agenix-rekey.packages.default # secrets management 18 - pkgs.nix-output-monitor # get clean diff between generations 19 - ]; 20 - }; 21 - }; 22 - }; 23 - }
-10
modules/home/cli/default.nix
··· 1 - { 2 - imports = [ 3 - ./ssh.nix # SSH configurations 4 - ./direnv.nix # better way to manage development environment 5 - ./git.nix # version control 6 - 7 - ./zsh.nix # unix shell 8 - ./starship.nix 9 - ]; 10 - }
-18
modules/home/cli/direnv.nix
··· 1 - { 2 - config, 3 - ... 4 - }: 5 - { 6 - 7 - config = { 8 - programs.direnv = { 9 - enable = true; 10 - 11 - enableZshIntegration = config.programs.zsh.enable; 12 - nix-direnv.enable = true; 13 - }; 14 - 15 - # Enable starship configuration for direnv 16 - programs.starship.settings.direnv.disabled = !config.programs.direnv.enable; 17 - }; 18 - }
-16
modules/home/cli/git.nix
··· 1 - { 2 - programs.git = { 3 - enable = true; 4 - 5 - # Could be moved to home (if git expands) 6 - settings = { 7 - user = { 8 - name = "Xaiya Schumin"; 9 - email = "d.schumin@proton.me"; 10 - }; 11 - 12 - push.autoSetupRemote = true; 13 - commit.gpgsign = true; 14 - }; 15 - }; 16 - }
-31
modules/home/cli/ssh.nix
··· 1 - { osConfig, ... }: 2 - { 3 - programs.ssh = { 4 - enable = true; 5 - enableDefaultConfig = false; 6 - 7 - matchBlocks = { 8 - "*" = { 9 - serverAliveCountMax = 3; 10 - 11 - hashKnownHosts = true; 12 - userKnownHostsFile = "~/.ssh/known_hosts"; 13 - 14 - controlPath = "~/.ssh/master-%r@%n:%p"; 15 - controlPersist = "no"; 16 - }; 17 - 18 - "github.com" = { 19 - user = "git"; 20 - hostname = "github.com"; 21 - identityFile = osConfig.age.secrets."ssh-gh".path; 22 - }; 23 - 24 - "apricot" = { # TODO: manage it into: knot.xaiya.dev 25 - user = "git"; 26 - hostname = "apricot"; 27 - identityFile = osConfig.age.secrets."ssh-tangled".path; 28 - }; 29 - }; 30 - }; 31 - }
-20
modules/home/cli/starship.nix
··· 1 - { lib, ... }: 2 - let 3 - inherit (builtins) 4 - fromTOML 5 - readFile 6 - fetchurl 7 - ; 8 - in 9 - { 10 - programs.starship = { 11 - enable = true; 12 - 13 - settings = fromTOML ( 14 - readFile (fetchurl { 15 - url = "https://starship.rs/presets/toml/bracketed-segments.toml"; 16 - sha256 = "sha256-FQHzfWYEcllLCmH2nx52J31Jw8Yy6aDAoOVdxWxhcAU="; # TODO: make this auto update? (versioned) 17 - }) 18 - ); 19 - }; 20 - }
-23
modules/home/cli/zsh.nix
··· 1 - { 2 - pkgs, 3 - ... 4 - }: 5 - let 6 - 7 - inherit (builtins) 8 - fetchurl 9 - readFile 10 - fromTOML 11 - ; 12 - in 13 - { 14 - home.shell.enableZshIntegration = true; 15 - 16 - programs.zsh = { 17 - enable = true; 18 - 19 - syntaxHighlighting.enable = true; 20 - autosuggestion.enable = true; 21 - 22 - }; 23 - }
-14
modules/home/default.nix
··· 1 - { osConfig, ... }: 2 - { 3 - imports = [ 4 - ./gui 5 - ./cli 6 - ./tui 7 - 8 - ./style.nix # Style configuration 9 - ]; 10 - 11 - config = { 12 - home.stateVersion = osConfig.system.stateVersion; 13 - }; 14 - }
-12
modules/home/gui/default.nix
··· 1 - { 2 - imports = [ 3 - ./sway 4 - ./vicinae 5 - 6 - ./jetbrains 7 - 8 - ./librewolf.nix # web-browser 9 - ./discord.nix # social-chatting platform 10 - ./kitty.nix # gui-terminal 11 - ]; 12 - }
-108
modules/home/gui/discord.nix
··· 1 - { 2 - inputs, 3 - lib, 4 - self, 5 - config, 6 - ... 7 - }: 8 - 9 - let 10 - inherit (lib) 11 - mkIf 12 - mkForce 13 - mkMerge 14 - forEach 15 - ; 16 - 17 - inherit (lib.strings) 18 - splitString 19 - ; 20 - 21 - inherit (lib.lists) 22 - last 23 - ; 24 - 25 - inherit (lib.types) bool; 26 - 27 - inherit (self.lib.modules) mkOpt; 28 - cfg = config.sylveon.programs.discord; 29 - nixcordcfg = config.programs.nixcord.config; 30 - in 31 - { 32 - options.sylveon.programs.discord.enable = mkOpt bool false "Whether or not to enable discord"; 33 - 34 - imports = [ inputs.nixcord.homeModules.nixcord ]; 35 - 36 - config = mkIf cfg.enable { 37 - programs.nixcord = { 38 - enable = true; 39 - discord = { 40 - vencord.enable = mkForce false; 41 - equicord.enable = true; 42 - }; 43 - 44 - config = { 45 - # Themes based on files is currently bugged with equicord (TODO) 46 - themeLinks = [ "https://catppuccin.github.io/discord/dist/catppuccin-mocha-flamingo.theme.css" ]; 47 - transparent = true; 48 - 49 - # Activate and Configure Plugins 50 - plugins = { 51 - alwaysExpandRoles.enable = true; 52 - anonymiseFileNames.enable = true; 53 - biggerStreamPreview.enable = true; 54 - betterGifPicker.enable = true; 55 - betterSessions.enable = true; 56 - betterSettings.enable = true; 57 - BlurNSFW.enable = true; 58 - callTimer.enable = true; 59 - ClearURLs.enable = true; 60 - CopyUserURLs.enable = true; 61 - disableCallIdle.enable = true; 62 - dontRoundMyTimestamps.enable = true; 63 - favoriteEmojiFirst.enable = true; 64 - favoriteGifSearch.enable = true; 65 - fixCodeblockGap.enable = true; 66 - fixImagesQuality.enable = true; 67 - friendsSince.enable = true; 68 - fullSearchContext.enable = true; 69 - 70 - memberCount = { 71 - enable = true; 72 - memberList = false; 73 - }; 74 - 75 - mentionAvatars.enable = true; 76 - # messageLogger.enable = true; 77 - noMaskedUrlPaste.enable = true; 78 - noUnblockToJump.enable = true; 79 - openInApp.enable = true; 80 - permissionFreeWill.enable = true; 81 - permissionsViewer.enable = true; 82 - plainFolderIcon.enable = true; 83 - 84 - platformIndicators = { 85 - enable = true; 86 - list = false; 87 - messages = false; 88 - }; 89 - 90 - serverInfo.enable = true; 91 - showAllMessageButtons.enable = true; 92 - showHiddenChannels.enable = true; 93 - showHiddenThings.enable = true; 94 - typingIndicator.enable = true; 95 - typingTweaks.enable = true; 96 - viewIcons.enable = true; 97 - volumeBooster.enable = true; 98 - whoReacted.enable = true; 99 - youtubeAdblock.enable = true; 100 - }; 101 - }; 102 - 103 - extraConfig = { 104 - enabledThemeLinks = nixcordcfg.themeLinks; 105 - }; 106 - }; 107 - }; 108 - }
-16
modules/home/gui/jetbrains/.ideavimrc
··· 1 - " You can find a list of commands here: https://jb.gg/h38q75 2 - " Find more examples here: https://jb.gg/share-ideavimrc 3 - 4 - source ~/.vimrc 5 - 6 - " Keymaps just for jetbrains ide 7 - map <C-N> <A>1<CR> 8 - 9 - " Move around tabs 10 - map <A-l> :tabnext<cr> 11 - map <A-h> :tabNext<cr> 12 - 13 - 14 - " Enabling Plugins 15 - Plug 'tpope/vim-commentary' " Commentary plugin 16 - Plug 'machakann/vim-highlightedyank' " Highlight copied text
-26
modules/home/gui/jetbrains/.vimrc
··· 1 - map Q gq 2 - 3 - set scrolloff=7 4 - set autoread 5 - 6 - set ignorecase 7 - set smartcase 8 - set hlsearch 9 - set incsearch 10 - 11 - set showmatch 12 - set mat=2 13 - 14 - " disable sounds 15 - set noerrorbells 16 - set novisualbell 17 - set tm=500 18 - 19 - syntax enable 20 - 21 - set expandtab 22 - set smarttab 23 - 24 - " Clipboard support 25 - set clipboard+=unnamed 26 - set clipboard+=ideaput
-74
modules/home/gui/jetbrains/default.nix
··· 1 - { 2 - config, 3 - lib, 4 - self, 5 - pkgs, 6 - inputs, 7 - osConfig, 8 - ... 9 - }: 10 - let 11 - 12 - inherit (lib) 13 - mkIf 14 - mkMerge 15 - ; 16 - 17 - inherit (lib.types) bool package; 18 - inherit (self.lib.modules) mkOpt; 19 - 20 - cfg = config.sylveon.programs.jetbrains; 21 - cfgFolder = ''.config/Jetbrains/${cfg.webstorm.package.version}''; 22 - in 23 - { 24 - 25 - options.sylveon.programs.jetbrains = { 26 - phpstorm = { 27 - enable = mkOpt bool false "Whether or not to enable the jetbrains php-editor"; 28 - package = mkOpt package pkgs.jetbrains.phpstorm "What package to use for the jetbrains php-editor"; 29 - }; 30 - 31 - webstorm = { 32 - enable = mkOpt bool false "Whether or not to enable the jetbrains web-editor"; 33 - package = mkOpt package pkgs.jetbrains.webstorm "What package to use for the jetbrains web-editor"; 34 - }; 35 - }; 36 - 37 - config = mkIf (cfg.phpstorm.enable || cfg.webstorm.enable) { 38 - 39 - home.file.".vimrc".source = ./.vimrc; # TODO: move to a new vim configuration 40 - home.file.".ideavimrc".source = ./.ideavimrc; 41 - 42 - home.packages = 43 - let 44 - defaultPlugins = with pkgs.jetbrains-plugins; [ 45 - com.github.catppuccin.jetbrains 46 - com.mallowigi # Atom material icons 47 - 48 - # com.wakatime.intellij.plugin TODO 49 - 50 - IdeaVIM 51 - 52 - nix-idea 53 - com.jetbrains.plugins.ini4idea 54 - ]; 55 - in 56 - lib.optionals cfg.phpstorm.enable [ 57 - (pkgs.jetbrains-plugins.lib.buildIdeWithPlugins 58 - cfg.phpstorm.package 59 - (with pkgs.jetbrains-plugins; [ 60 - # adrienbrault.idea.symfony2plugin Not available? 61 - ] ++ defaultPlugins) 62 - ) 63 - ] 64 - 65 - ++ lib.optionals cfg.webstorm.enable [ 66 - (pkgs.jetbrains-plugins.lib.buildIdeWithPlugins 67 - cfg.webstorm.package 68 - (with pkgs.jetbrains-plugins; [ 69 - io.github.pandier.intellijdiscordrp 70 - ] ++ defaultPlugins) 71 - ) 72 - ]; 73 - }; 74 - }
-33
modules/home/gui/kitty.nix
··· 1 - { 2 - config, 3 - osConfig, 4 - self, 5 - pkgs, 6 - lib, 7 - ... 8 - }: 9 - let 10 - inherit (lib) mkIf; 11 - inherit (lib.types) bool; 12 - inherit (self.lib.modules) mkOpt; 13 - 14 - sway = osConfig.sylveon.system.graphical.sway; 15 - cfg = config.sylveon.cli.kitty; 16 - in 17 - { 18 - options.sylveon.cli.kitty = { 19 - enable = mkOpt bool false "Enable cutest terminal like evveeerr !!"; 20 - }; 21 - 22 - config = mkIf (cfg.enable || sway.enable) { 23 - programs.kitty = { 24 - enable = true; 25 - 26 - shellIntegration.enableZshIntegration = config.programs.zsh.enable; 27 - enableGitIntegration = true; 28 - 29 - # removing annoying things 30 - settings.enable_audio_bell = false; 31 - }; 32 - }; 33 - }
-133
modules/home/gui/librewolf.nix
··· 1 - { 2 - config, 3 - lib, 4 - self, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - 10 - inherit (lib) 11 - mkIf 12 - genAttrs 13 - ; 14 - 15 - inherit (builtins) 16 - fromJSON 17 - readFile 18 - fetchurl 19 - ; 20 - 21 - inherit (lib.types) bool; 22 - 23 - inherit (self.lib.modules) mkOpt; 24 - 25 - cfg = config.sylveon.programs.librewolf; 26 - in 27 - { 28 - 29 - options.sylveon.programs.librewolf = { 30 - enable = mkOpt bool false "Enable webbrowser based on firefox"; 31 - }; 32 - 33 - config = mkIf cfg.enable { 34 - programs.librewolf = { 35 - enable = true; 36 - 37 - languagePacks = [ "en-GB" "de" ]; 38 - 39 - settings = { 40 - "browser.fullscreen.autohide" = false; 41 - 42 - "webgl.disabled" = false; 43 - "privacy.fingerprintingProtection" = false; 44 - "browser.translations.enable" = false; 45 - 46 - "media.ffmpeg.vaapi.enabled" = true; 47 - "media.rdd-ffmpeg.enabled" = true; 48 - 49 - "extensions.abuseReport.enabled" = false; 50 - "extensions.formautofill.creditCards.enabled" = false; 51 - "browser.contentblocking.report.lockwise.enabled" = false; 52 - 53 - "identity.fxaccounts.enabled" = false; 54 - "identity.fxaccounts.toolbar.enabled" = false; 55 - "identity.fxaccounts.pairing.enabled" = false; 56 - "identity.fxaccounts.commands.enabled" = false; 57 - "privacy.clearOnShutdown.history" = false; 58 - "privacy.clearOnShutdown.cookies" = false; 59 - "network.cookie.lifetimePolicy" = 0; 60 - 61 - # disable notifications 62 - "dom.push.enabled" = false; 63 - "dom.push.connection.enabled" = false; 64 - "dom.battery.enabled" = false; 65 - }; 66 - 67 - policies = { 68 - DisplayBookmarksToolbar = "never"; 69 - DisableFirefoxAccounts = true; 70 - DisableFeedbackCommands = true; 71 - 72 - ExtensionSettings = 73 - genAttrs 74 - [ 75 - "uBlock0@raymondhill.net" 76 - "sponsorBlocker@ajay.app" 77 - "FirefoxColor@mozilla.com" 78 - "firefox-enpass@enpass.io" 79 - "{7a7a4a92-a2a0-41d1-9fd7-1e92480d612d}" # Stylus 80 - "{446900e4-71c2-419f-a6a7-df9c091e268b}" # Bitwarden 81 - ] 82 - (ext: { 83 - installation_mode = "force_installed"; 84 - install_url = "https://addons.mozilla.org/firefox/downloads/latest/${ext}/latest.xpi"; 85 - }); 86 - }; 87 - 88 - profiles.default = { 89 - extensions = { 90 - force = true; # Needed for catppuccin 91 - 92 - settings = { 93 - # stylus themes need to be manually imported from now 94 - # please create and import a new style file from here: https://catppuccin-userstyles-customizer.uncenter.dev/ 95 - "{7a7a4a92-a2a0-41d1-9fd7-1e92480d612d}".settings = { 96 - dbInChromeStorage = true; # required for Stylus 97 - }; 98 - }; 99 - }; 100 - 101 - settings = { 102 - # Default page should be my homepage 103 - "browser.startup.homepage" = "https://xaiya.dev"; 104 - }; 105 - 106 - search = { 107 - force = true; 108 - default = "ddg"; 109 - 110 - engines = { 111 - MyNixOS = { 112 - name = "MyNixOS"; 113 - urls = [{ 114 - template = "https://mynixos.com/search"; 115 - params = [ { name = "q"; value = "{searchTerms}"; } ]; 116 - }]; 117 - 118 - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake-white.svg"; 119 - definedAliases = [ "@n" ]; 120 - }; 121 - 122 - google.metaData.alias = "@g"; 123 - }; 124 - }; 125 - }; 126 - }; 127 - 128 - catppuccin.librewolf = { 129 - force = true; 130 - profiles.default.force = true; 131 - }; 132 - }; 133 - }
-244
modules/home/gui/sway/default.nix
··· 1 - { 2 - osConfig, 3 - lib, 4 - pkgs, 5 - config, 6 - inputs', 7 - self, 8 - ... 9 - }: 10 - let 11 - inherit (lib) 12 - mkIf 13 - mkOptionDefault 14 - concatStringsSep 15 - getExe 16 - mkMerge 17 - forEach 18 - elemAt 19 - ; 20 - 21 - modifier = "Mod4"; 22 - sway = osConfig.sylveon.system.graphical.sway; 23 - cfg = config.wayland.windowManager.sway.config; 24 - in 25 - { 26 - imports = [ 27 - ./waybar # Title bar TODO: replace with eww? 28 - ./kanshi # Window/Output manager 29 - ]; 30 - 31 - config = mkIf sway.enable { 32 - wayland.windowManager.sway = { 33 - enable = true; 34 - 35 - # Package is set to null because it is already created in the original config 36 - package = null; 37 - 38 - systemd = { 39 - enable = true; 40 - xdgAutostart = true; 41 - }; 42 - 43 - config = { 44 - inherit modifier; 45 - terminal = "${getExe config.programs.kitty.package}"; 46 - defaultWorkspace = "1"; 47 - 48 - menu = "${getExe config.services.vicinae.package} toggle"; 49 - 50 - output."*" = { 51 - bg = "${self}/assets/wallpaper/flamingo_bkg5.png fill"; 52 - }; 53 - 54 - colors = 55 - let 56 - submodule = { 57 - childBorder = "$base"; 58 - indicator = submodule.childBorder; 59 - 60 - # Configuration needed only if using the title bar 61 - text = "$text"; 62 - border = submodule.childBorder; 63 - background = "$base"; 64 - }; 65 - in 66 - { 67 - focused = submodule // rec { 68 - childBorder = "\$${config.catppuccin.accent}"; 69 - indicator = childBorder; 70 - border = childBorder; 71 - }; 72 - 73 - urgent = submodule // rec { 74 - childBorder = "$red"; 75 - indicator = childBorder; 76 - border = childBorder; 77 - }; 78 - 79 - placeholder = submodule; 80 - focusedInactive = submodule; 81 - unfocused = submodule; 82 - }; 83 - 84 - input = { 85 - "*" = { 86 - xkb_layout = "de"; 87 - 88 - accel_profile = "flat"; 89 - pointer_accel = "-0.7"; 90 - }; 91 - 92 - # Framework 16 touchpad 93 - "2362:628:PIXA3854:00_093A:0274_Touchpad" = { 94 - pointer_accel = "-0.2"; 95 - natural_scroll = "enabled"; 96 - # Disable while typing could annoy some people while gaming 97 - dwt = "enabled"; 98 - }; 99 - }; 100 - 101 - workspaceOutputAssign = mkMerge [ 102 - # Automaticly generated configuration based on kanshi 103 - (mkIf config.services.kanshi.enable ( 104 - forEach [ 1 2 ] (x: { 105 - output = forEach config.services.kanshi.settings (y: ((elemAt y.profile.outputs (x - 1)).criteria)); 106 - 107 - # Assign the 10 workspaces we have 108 - workspace = toString x; 109 - }) 110 - )) 111 - 112 - # default assigned workspaces 113 - [ 114 - { 115 - output = [ "eDP-2" ]; 116 - workspace = "3"; 117 - } 118 - 119 - { 120 - output = [ "eDP-2" ]; 121 - workspace = "4"; 122 - } 123 - ] 124 - ]; 125 - 126 - window = { 127 - border = 3; 128 - titlebar = false; 129 - }; 130 - 131 - gaps = { 132 - inner = 8; 133 - outer = 3; 134 - }; 135 - 136 - floating = { 137 - # Windows that should be opened in floating mode 138 - criteria = [ 139 - # Configuration apps 140 - { class = "Enpass"; } 141 - { app_id = "com.yubico.yubioath"; } 142 - 143 - # Settings apps 144 - { app_id = ".blueman-manager-wrapped"; } 145 - { app_id = "org.pulseaudio.pavucontrol"; } 146 - ]; 147 - }; 148 - 149 - assigns = { 150 - # Assign social apps to workspace 4 151 - "4" = [ 152 - { class = "discord"; } 153 - { class = "teams-for-linux"; } 154 - ]; 155 - }; 156 - 157 - startup = [ 158 - # Display and configurations 159 - { 160 - command = (getExe pkgs.kanshi); 161 - always = true; 162 - } 163 - 164 - # Background Services 165 - { command = (getExe pkgs.sway-audio-idle-inhibit); } 166 - { command = "${getExe config.services.vicinae.package} server"; } 167 - ]; 168 - 169 - keybindings = mkOptionDefault { 170 - "${modifier}+Escape" = "exec ${getExe config.programs.swaylock.package}"; 171 - 172 - "${modifier}+shift+s" = 173 - ''exec ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp -d)" - | ${pkgs.wl-clipboard}/bin/wl-copy''; # Take a screenshot 174 - 175 - "${modifier}+e" = "exec ${pkgs.nemo-with-extensions}/bin/nemo"; 176 - "${modifier}+o" = "exec ${getExe pkgs.obsidian}"; 177 - 178 - "${modifier}+shift+v" = 179 - "exec ${getExe config.services.vicinae.package} deeplink vicinae://extensions/vicinae/clipboard/history"; 180 - }; 181 - }; 182 - 183 - # SwayFx specific configuration 184 - extraConfig = concatStringsSep "\n" [ 185 - # Shadows 186 - "shadows enable" 187 - "shadows_on_csd enable" 188 - 189 - "shadow_color #7c7f93" 190 - "shadow_inactive_color #7c7f93" 191 - 192 - # "shadow_offset 5 5" 193 - "shadow_blur_radius 20" 194 - 195 - # Corners 196 - "corner_radius 13" 197 - ]; 198 - }; 199 - 200 - # Extra packages needed by sway 201 - programs.swaylock = { 202 - enable = true; 203 - package = pkgs.swaylock-effects; 204 - 205 - settings = { 206 - effect-blur = "13x13"; 207 - effect-vignette = "0.4:0.4"; 208 - 209 - grace = 5; # Time until you can still exit the lock screen without a password 210 - grace-no-mouse = true; 211 - 212 - screenshots = true; 213 - 214 - clock = false; 215 - }; 216 - }; 217 - 218 - services = { 219 - swaync = { 220 - enable = true; 221 - 222 - settings = { 223 - positionX = "right"; 224 - positionY = "top"; 225 - 226 - image-visibility = "never"; 227 - }; 228 - }; 229 - 230 - swayidle = { 231 - enable = true; 232 - 233 - timeouts = [ 234 - { 235 - timeout = 300; 236 - command = "exec ${config.programs.swaylock.package}/bin/swaylock"; 237 - } 238 - ]; 239 - 240 - events."before-sleep" = "exec ${config.programs.swaylock.package}/bin/swaylock"; 241 - }; 242 - }; 243 - }; 244 - }
-21
modules/home/gui/sway/kanshi/default.nix
··· 1 - { lib, osConfig, pkgs, ... }: 2 - 3 - let 4 - inherit (lib) 5 - mkIf 6 - getExe 7 - ; 8 - 9 - sway = osConfig.sylveon.system.graphical.sway; 10 - in 11 - { 12 - 13 - imports = [ 14 - ./docked_home.nix 15 - ./docked_office.nix 16 - ]; 17 - 18 - config = mkIf sway.enable { 19 - services.kanshi.enable = true; 20 - }; 21 - }
-53
modules/home/gui/sway/kanshi/docked_home.nix
··· 1 - let 2 - name = "docked_home"; 3 - in 4 - { 5 - services.kanshi.settings = [ 6 - { 7 - profile = { 8 - inherit name; 9 - 10 - outputs = [ 11 - { 12 - criteria = "AOC 2460G4 0x0000A8E2"; 13 - 14 - mode = "1920x1080@119.982Hz"; 15 - position = "1920,80"; 16 - } 17 - 18 - { 19 - criteria = "Acer Technologies RT240Y T75EE0042411"; 20 - 21 - position = "0,0"; 22 - mode = "1920x1080@60.000Hz"; 23 - } 24 - 25 - { criteria = "eDP-2"; status = "disable"; } 26 - ]; 27 - }; 28 - } 29 - 30 - { 31 - profile = { 32 - name = "${name}--single_screen"; 33 - 34 - outputs = [ 35 - { 36 - criteria = "AOC 2460G4 0x0000A8E2"; 37 - 38 - mode = "1920x1080@119.982Hz"; 39 - position = "2560,266"; 40 - } 41 - 42 - { 43 - criteria = "eDP-2"; 44 - position = "5120,0"; 45 - 46 - mode = "2560x1600@165.000Hz"; 47 - scale = 1.3; 48 - } 49 - ]; 50 - }; 51 - } 52 - ]; 53 - }
-107
modules/home/gui/sway/kanshi/docked_office.nix
··· 1 - let 2 - name = "docked_office"; 3 - office_screen_1 = "Philips Consumer Electronics Company PHL 272B4Q"; 4 - office_screen_2 = "LG Electronics LG"; 5 - in 6 - { 7 - services.kanshi.settings = [ 8 - # TODO: generalization of desktops needed 9 - 10 - # Desk 1 (Xaiya) 11 - { 12 - profile = { 13 - inherit name; 14 - outputs = [ 15 - 16 - { 17 - criteria = "${office_screen_1} AU11531001040"; 18 - position = "2560,0"; 19 - 20 - mode = "2560x1440@59.951Hz"; 21 - } 22 - 23 - { 24 - criteria = "${office_screen_1} AU11526001821"; 25 - position = "0,81"; 26 - 27 - mode = "2560x1440@59.951Hz"; 28 - } 29 - 30 - { 31 - criteria = "eDP-2"; 32 - position = "5120,0"; 33 - 34 - mode = "2560x1600@165.000Hz"; 35 - scale = 1.3; 36 - } 37 - 38 - 39 - ]; 40 - }; 41 - } 42 - 43 - # Desk 2 (Dominik) 44 - { 45 - profile = { 46 - name = "${name}-dthoene"; 47 - outputs = [ 48 - { 49 - criteria = "${office_screen_2} ULTRAFINE 203NTXR8L890"; 50 - position = "1801,699"; 51 - 52 - scale = 1.2; 53 - mode = "3840x2160@60.000Hz"; 54 - } 55 - 56 - { 57 - criteria = "${office_screen_2} ULTRAFINE 203NTFA8L891"; 58 - position = "0,0"; 59 - transform = "90"; 60 - 61 - scale = 1.2; 62 - mode = "3840x2160@60.000Hz"; 63 - } 64 - 65 - { 66 - criteria = "eDP-2"; 67 - position = "5120,0"; 68 - 69 - mode = "2560x1600@165.000Hz"; 70 - scale = 1.3; 71 - } 72 - ]; 73 - }; 74 - } 75 - 76 - { 77 - profile = { 78 - name = "${name}-elvis"; 79 - outputs = [ 80 - { 81 - criteria = "${office_screen_2} ULTRAFINE 404NTGY9M335"; 82 - position = "2560,132"; 83 - 84 - scale = 1.2; 85 - mode = "3840x2160@60.000Hz"; 86 - } 87 - 88 - { 89 - criteria = "${office_screen_2} ULTRAFINE 404NTYT9M282"; 90 - position = "5762,132"; 91 - 92 - scale = 1.2; 93 - mode = "3840x2160@60.000Hz"; 94 - } 95 - 96 - { 97 - criteria = "eDP-2"; 98 - position = "0,99"; 99 - 100 - mode = "2560x1600@165.000Hz"; 101 - scale = 1.3; 102 - } 103 - ]; 104 - }; 105 - } 106 - ]; 107 - }
-73
modules/home/gui/sway/waybar/default.nix
··· 1 - { 2 - pkgs, 3 - osConfig, 4 - lib, 5 - config, 6 - ... 7 - }: 8 - let 9 - inherit (lib) 10 - mkIf 11 - ; 12 - 13 - sway = osConfig.sylveon.system.graphical.sway; 14 - in 15 - { 16 - 17 - imports = [ 18 - ./modules 19 - ]; 20 - 21 - config = mkIf sway.enable { 22 - # replace default bar with waybar 23 - wayland.windowManager.sway.config.bars = [ { command = "${pkgs.waybar}/bin/waybar"; } ]; 24 - 25 - catppuccin.waybar.enable = true; 26 - 27 - programs.waybar = { # TODO: replace? 28 - enable = true; 29 - 30 - settings = { 31 - mainBar = { 32 - layer = "top"; 33 - position = "top"; 34 - fixed-center = true; 35 - 36 - height = 37; 37 - margin-top = 10; 38 - margin-left = 10; 39 - margin-right = 10; 40 - 41 - margin-bottom = 10; 42 - 43 - # Enable modules in the right positions 44 - modules-left = [ 45 - # "image#nix" 46 - "sway/workspaces" 47 - "sway/window" 48 - ]; 49 - modules-center = [ 50 - # "custom/weather" 51 - "clock" 52 - ]; 53 - modules-right = [ 54 - "pulseaudio" 55 - "network" 56 - "bluetooth" 57 - "tray" 58 - "battery" 59 - ]; 60 - 61 - "image#nix" = { 62 - path = "${./lix.svg}"; 63 - size = 20; 64 - }; 65 - }; 66 - }; 67 - 68 - style = builtins.readFile ./style.css; 69 - 70 - }; 71 - }; 72 - 73 - }
-111
modules/home/gui/sway/waybar/lix.svg
··· 1 - <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 - <svg 3 - width="420" 4 - height="420" 5 - viewBox="0 0 411.363 411.363" 6 - version="1.1" 7 - xml:space="preserve" 8 - style="clip-rule:evenodd;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2" 9 - id="svg12" 10 - sodipodi:docname="lix.svg" 11 - inkscape:export-filename="../lix.png" 12 - inkscape:export-xdpi="96" 13 - inkscape:export-ydpi="96" 14 - inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)" 15 - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 16 - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 17 - xmlns="http://www.w3.org/2000/svg" 18 - xmlns:svg="http://www.w3.org/2000/svg"><defs 19 - id="defs12" /><sodipodi:namedview 20 - id="namedview12" 21 - pagecolor="#ffffff" 22 - bordercolor="#666666" 23 - borderopacity="1.0" 24 - inkscape:showpageshadow="2" 25 - inkscape:pageopacity="0.0" 26 - inkscape:pagecheckerboard="0" 27 - inkscape:deskcolor="#d1d1d1" 28 - showgrid="false" 29 - inkscape:zoom="1.203125" 30 - inkscape:cx="174.12987" 31 - inkscape:cy="174.54545" 32 - inkscape:window-width="1276" 33 - inkscape:window-height="1392" 34 - inkscape:window-x="0" 35 - inkscape:window-y="0" 36 - inkscape:window-maximized="1" 37 - inkscape:current-layer="svg12" /> 38 - 39 - 40 - 41 - 42 - 43 - <g 44 - id="Flake" 45 - transform="translate(-186.20448,-20.133533)"> 46 - <g 47 - id="path4861" 48 - transform="translate(66.1334,798.311)"> 49 - <path 50 - d="m 247.523,-568.202 97.757,169.34 -44.925,0.422 -26.099,-45.495 -26.285,45.252 -22.322,-0.009 -11.433,-19.752 37.448,-64.392 -26.583,-46.26 z" 51 - style="fill:#5277c3;stroke:#ffffff;stroke-width:10px" 52 - id="path5" /> 53 - </g> 54 - <g 55 - id="use4863" 56 - transform="translate(66.1334,798.311)"> 57 - <path 58 - d="m 282.807,-637.955 -97.774,169.331 -22.827,-38.696 26.35,-45.35 -52.332,-0.138 -11.153,-19.335 11.389,-19.777 74.489,0.235 26.771,-46.152 z" 59 - style="fill:#d52d00;stroke:#ffffff;stroke-width:10px" 60 - id="path6" /> 61 - </g> 62 - <g 63 - id="use4865" 64 - transform="translate(66.1334,798.311)"> 65 - <path 66 - d="m 290.308,-502.594 195.532,0.009 -22.098,39.118 -52.45,-0.146 26.047,45.39 -11.168,19.327 -22.822,0.025 -37.041,-64.627 -53.355,-0.108 z" 67 - style="fill:#d52d00;stroke:#ffffff;stroke-width:10px" 68 - id="path7" /> 69 - </g> 70 - <g 71 - id="use4867" 72 - transform="translate(66.1334,798.311)"> 73 - <path 74 - d="m 404.115,-576.791 -97.758,-169.34 44.926,-0.421 26.099,45.495 26.285,-45.252 22.322,0.009 11.432,19.751 -37.448,64.392 26.584,46.261 z" 75 - style="fill:#d52d00;stroke:#ffffff;stroke-width:10px" 76 - id="path8" /> 77 - </g> 78 - <g 79 - id="path4873" 80 - transform="translate(66.1334,798.311)"> 81 - <path 82 - d="m 247.523,-568.202 97.757,169.34 -44.925,0.422 -26.099,-45.495 -26.285,45.252 -22.322,-0.009 -11.433,-19.752 37.448,-64.392 -26.583,-46.26 z" 83 - style="fill:#5277c3;stroke:#ffffff;stroke-width:10px" 84 - id="path9" /> 85 - </g> 86 - <g 87 - id="use4875" 88 - transform="translate(66.1334,798.311)"> 89 - <path 90 - d="m 361.069,-642.826 -195.531,-0.01 22.097,-39.117 52.45,0.145 -26.047,-45.389 11.169,-19.327 22.822,-0.025 37.041,64.627 53.354,0.108 z" 91 - style="fill:#d362a4;stroke:#ffffff;stroke-width:10px" 92 - id="path10" /> 93 - </g> 94 - <g 95 - id="use4877" 96 - transform="translate(66.1334,798.311)"> 97 - <path 98 - d="m 368.697,-507.074 97.774,-169.33 22.828,38.696 -26.35,45.35 52.332,0.137 11.153,19.336 -11.389,19.777 -74.49,-0.235 -26.771,46.152 z" 99 - style="fill:#a30262;stroke:#ffffff;stroke-width:10px" 100 - id="path11" /> 101 - </g> 102 - <g 103 - id="path3336-6" 104 - transform="translate(66.1334,798.311)"> 105 - <path 106 - d="m 247.639,-568.311 97.758,169.341 -44.926,0.421 -26.099,-45.495 -26.285,45.252 -22.322,-0.009 -11.433,-19.752 37.449,-64.392 -26.584,-46.26 z" 107 - style="fill:#ff9a56;stroke:#ffffff;stroke-width:10px" 108 - id="path12" /> 109 - </g> 110 - </g> 111 - </svg>
-33
modules/home/gui/sway/waybar/modules/battery.nix
··· 1 - { 2 - programs.waybar.settings.mainBar = { 3 - # The Battery status will be shown 4 - "battery" = { 5 - interval = 10; 6 - full-at = 80; # Changed in BIOS for better capacity 7 - 8 - tooltip-format = "Watt usage: {power} \nCapacity: {capacity}% /time remain: {time} \nBattery cycles: {cycles}"; 9 - 10 - states = { 11 - warning = 30; 12 - critical = 20; 13 - }; 14 - 15 - format = "{icon} {capacity}%"; 16 - format-charging = "( {icon}) {capacity}%"; 17 - format-full = "󰚥"; 18 - 19 - format-icons = [ 20 - "󱟩" 21 - "󰁺" 22 - "󰁻" 23 - "󰁼" 24 - "󰁽" 25 - "󰁾" 26 - "󰁿" 27 - "󰂀" 28 - "󰂁" 29 - "󰁹" 30 - ]; 31 - }; 32 - }; 33 - }
-14
modules/home/gui/sway/waybar/modules/clock.nix
··· 1 - { pkgs, ... }: 2 - { 3 - programs.waybar.settings.mainBar = { 4 - # Show the current time (change formating here...) 5 - "clock" = { 6 - interval = 60; 7 - on-click = "${pkgs.gnome-calendar}/bin/gnome-calendar"; 8 - 9 - timezone = "Europe/Berlin"; 10 - locale = "de_DE.UTF-8"; 11 - format = "󱑅 {:%H:%M}"; 12 - }; 13 - }; 14 - }
-40
modules/home/gui/sway/waybar/modules/control_center.nix
··· 1 - { pkgs, ... }: 2 - { 3 - programs.waybar.settings.mainBar = { 4 - 5 - "bluetooth" = { 6 - interval = 3; 7 - format-on = " {status}"; 8 - format-disabled = "󰂲 {status}"; 9 - format-connected = "󰂱 {device_alias} {device_battery_percentage}%"; 10 - 11 - on-click = "exec ${pkgs.blueman}/bin/blueman-manager"; 12 - }; 13 - 14 - # Show the current audio device with icons and change the volume by scrolling 15 - "pulseaudio" = { 16 - format = "{icon} {volume}%"; 17 - on-click = "${pkgs.pavucontrol}/bin/pavucontrol"; 18 - 19 - format-icons = [ " " ]; 20 - }; 21 - 22 - # Show the current network type; If the connection is LAN, show bandwith status with IP adress 23 - "network" = { 24 - interval = 3; 25 - max-length = 30; 26 - 27 - format-wifi = "{icon} {essid}"; 28 - format-ethernet = "󰌗 "; 29 - 30 - format-icons = [ 31 - "󰤟 " 32 - "󰤢 " 33 - "󰤥 " 34 - "󰤨 " 35 - ]; 36 - 37 - }; 38 - 39 - }; 40 - }
-9
modules/home/gui/sway/waybar/modules/default.nix
··· 1 - { 2 - imports = [ 3 - ./sway.nix 4 - ./control_center.nix 5 - ./clock.nix 6 - ./battery.nix 7 - ./tray.nix 8 - ]; 9 - }
-28
modules/home/gui/sway/waybar/modules/sway.nix
··· 1 - { 2 - programs.waybar.settings.mainBar = { 3 - 4 - "sway/window".format = "{title}"; 5 - 6 - # Show the sway workspaces in your waybar 7 - "sway/workspaces" = { 8 - disable-scroll = true; 9 - all-outputs = true; 10 - 11 - format = "{icon}"; 12 - 13 - format-icons = { 14 - "1" = " "; 15 - "2" = " "; 16 - "3" = " "; 17 - "4" = "󰕘 "; 18 - "5" = "󱝁 "; 19 - "6" = " "; 20 - "7" = " "; 21 - "8" = " "; 22 - "9" = "󱕅 "; 23 - "10" = " "; 24 - sort-by-number = true; 25 - }; 26 - }; 27 - }; 28 - }
-9
modules/home/gui/sway/waybar/modules/tray.nix
··· 1 - { 2 - programs.waybar.settings.mainBar = { 3 - "tray" = { 4 - spacing = 10; 5 - icon-size = 18; 6 - show-passive-items = true; 7 - }; 8 - }; 9 - }
-71
modules/home/gui/sway/waybar/style.css
··· 1 - * { 2 - background-color: transparent; 3 - font-family: "JetBrainsMono Nerd Font", sans-serif; 4 - font-size: 14px; 5 - color: @text; 6 - 7 - min-height: 0; 8 - padding: 0; 9 - margin: 0; 10 - 11 - border-radius: unset; 12 - border: unset; 13 - } 14 - 15 - window#waybar { 16 - background-color: alpha(@mantle, 0.93); 17 - border-radius: 8px; 18 - } 19 - 20 - tooltip { background-color: @crust; } 21 - #tray menu { background-color: @crust; } 22 - 23 - .module { 24 - background-color: transparent; 25 - 26 - min-width: 20px; 27 - 28 - padding: 5px 11px; 29 - margin: 0 3px; 30 - } 31 - 32 - .module#network, 33 - .module#pulseaudio, 34 - .module#bluetooth { 35 - margin: 0; 36 - padding: 0 6px; 37 - border-radius: unset; 38 - } 39 - 40 - .module#pulseaudio { 41 - border-radius: 13px 0 0 13px; 42 - padding-left: 17px; 43 - } 44 - 45 - .module#bluetooth { 46 - border-radius: 0 13px 13px 0; 47 - padding-right: 17px; 48 - } 49 - 50 - /* Workspaces */ 51 - #workspaces button:first-child { 52 - padding: 0; 53 - } 54 - 55 - #workspaces button.focused label { 56 - font-weight: bolder; 57 - font-size: 15px; 58 - color: @flamingo; 59 - } 60 - 61 - #workspaces button.urgent label { 62 - color: @red; 63 - } 64 - 65 - .module#battery.warning label { 66 - color: @rosewater; 67 - } 68 - 69 - .module#battery.critical label { 70 - color: @red; 71 - }
-39
modules/home/gui/vicinae/default.nix
··· 1 - { 2 - config, 3 - pkgs, 4 - inputs, 5 - inputs', 6 - osConfig, 7 - lib, 8 - ... 9 - }: 10 - let 11 - inherit (lib) 12 - mkIf 13 - getExe 14 - mkForce 15 - ; 16 - 17 - sway = osConfig.sylveon.system.graphical.sway; 18 - in 19 - { 20 - 21 - imports = [ 22 - inputs.vicinae.homeManagerModules.default 23 - ]; 24 - 25 - config = mkIf sway.enable { 26 - services.vicinae = { 27 - enable = true; 28 - package = pkgs.vicinae; # Outdated but more stable version built by hydra 29 - systemd.enable = false; # Is started through sway 30 - 31 - settings = { 32 - launcher_window.opacity = 1; 33 - }; 34 - 35 - # TODO: add extensions 36 - }; 37 - }; 38 - } 39 -
-65
modules/home/style.nix
··· 1 - { 2 - osConfig, 3 - lib, 4 - inputs, 5 - pkgs, 6 - config, 7 - ... 8 - }: 9 - let 10 - inherit (lib) mkIf; 11 - cfg = config.catppuccin; 12 - in 13 - { 14 - imports = [ inputs.catppuccin.homeModules.catppuccin ]; 15 - 16 - # Use the global catppuccin configuration 17 - /* 18 - TODO: applications that need to be manaul integrated/need nix integration 19 - - TidaLuna 20 - - kitty terminal texts hard to read !! 21 - */ 22 - config = mkIf osConfig.catppuccin.enable { 23 - catppuccin = { 24 - enable = true; 25 - 26 - inherit (osConfig.catppuccin) 27 - accent 28 - flavor 29 - ; 30 - }; 31 - 32 - gtk = { 33 - enable = true; 34 - 35 - theme = { 36 - name = "catppuccin-${cfg.flavor}-${cfg.accent}-standard"; 37 - package = pkgs.catppuccin-gtk.override { 38 - size = "standard"; 39 - accents = [ cfg.accent ]; 40 - variant = cfg.flavor; 41 - }; 42 - }; 43 - 44 - gtk3.extraConfig = { 45 - gtk-application-prefer-dark-theme = true; 46 - }; 47 - 48 - gtk4.extraConfig = { 49 - # make things look nice 50 - gtk-application-prefer-dark-theme = true; 51 - }; 52 - }; 53 - 54 - home.pointerCursor = { 55 - enable = true; 56 - 57 - name = "catppuccin-mocha-flamingo-cursors"; 58 - package = pkgs.catppuccin-cursors.mochaFlamingo; 59 - size = 24; 60 - 61 - sway.enable = true; 62 - gtk.enable = true; 63 - }; 64 - }; 65 - }
-5
modules/home/tui/default.nix
··· 1 - { 2 - imports = [ 3 - ./neovim # TODO: update to work as intended again 4 - ]; 5 - }
-117
modules/home/tui/neovim/default.nix
··· 1 - { 2 - pkgs, 3 - self, 4 - lib, 5 - config, 6 - inputs, 7 - ... 8 - }: 9 - let 10 - inherit (self.lib.modules) 11 - mkOpt 12 - ; 13 - 14 - inherit (lib.types) 15 - bool 16 - ; 17 - 18 - inherit (lib) 19 - mkIf 20 - mkMerge 21 - ; 22 - 23 - cfg = config.sylveon.tui.neovim; 24 - neov-plugins = config.programs.nixvim.plugins; 25 - in 26 - { 27 - 28 - imports = [ 29 - inputs.nixvim.homeModules.nixvim 30 - 31 - ./lsp.nix 32 - ./telescope.nix 33 - ./visual.nix 34 - ./sessions.nix 35 - ./social.nix 36 - ]; 37 - 38 - # Neovim should be used as a lightweigt editor (used for small changes) 39 - options.sylveon.tui.neovim = { 40 - enable = mkOpt bool false "vim editor, only better"; 41 - anonymous = mkOpt bool false "If the file data should be anonymous to people (e.g discord rpc)"; 42 - }; 43 - 44 - config = mkIf cfg.enable { 45 - home.packages = [ 46 - pkgs.ripgrep 47 - pkgs.clang 48 - ]; 49 - 50 - programs.nixvim = { 51 - enable = true; 52 - package = pkgs.neovim-unwrapped; 53 - enableMan = false; 54 - 55 - defaultEditor = true; 56 - viAlias = true; 57 - vimAlias = true; 58 - 59 - keymaps = mkMerge [ 60 - [ 61 - { 62 - action = "<cmd>bnext<CR>"; 63 - key = "<A-l>"; 64 - options = { 65 - silent = true; 66 - }; 67 - } 68 - 69 - { 70 - action = "<cmd>bNext<CR>"; 71 - key = "<A-h>"; 72 - options = { 73 - silent = true; 74 - }; 75 - } 76 - ] 77 - 78 - (mkIf neov-plugins.nvim-tree.enable [ 79 - { 80 - action = "<cmd>NvimTreeToggle<CR>"; 81 - key = "<C-N>"; 82 - options = { 83 - silent = true; 84 - }; 85 - } 86 - ]) 87 - ]; 88 - 89 - # global options defined for all files 90 - globalOpts = { 91 - number = true; 92 - 93 - expandtab = true; 94 - shiftwidth = 4; 95 - tabstop = 4; 96 - }; 97 - 98 - # extra files that should be added to the neovim runtime 99 - files = { 100 - "ftplugin/nix.lua" = { 101 - opts = { 102 - number = true; 103 - 104 - expandtab = true; 105 - shiftwidth = 2; 106 - tabstop = 2; 107 - }; 108 - }; 109 - }; 110 - 111 - plugins = { 112 - web-devicons.enable = true; 113 - lz-n.enable = true; # Lazy loading 114 - }; 115 - }; 116 - }; 117 - }
-153
modules/home/tui/neovim/lsp.nix
··· 1 - { pkgs, ... }: 2 - { 3 - programs.nixvim.plugins = { 4 - blink-cmp = { 5 - enable = true; 6 - 7 - settings = { 8 - keymap = { 9 - "<tab>" = [ 10 - "select_and_accept" 11 - "snippet_forward" 12 - "fallback" 13 - ]; 14 - 15 - "<CR>" = [ 16 - "select_and_accept" 17 - "snippet_forward" 18 - "fallback" 19 - ]; 20 - 21 - "<C-space>" = [ 22 - "show" 23 - "show_documentation" 24 - "hide_documentation" 25 - ]; 26 - 27 - "<down>" = [ 28 - "select_next" 29 - "fallback" 30 - ]; 31 - 32 - "<up>" = [ 33 - "select_prev" 34 - "fallback" 35 - ]; 36 - }; 37 - 38 - completion = { 39 - trigger.show_on_keyboard = true; 40 - ghost_text.enabled = false; 41 - 42 - list.cycle = { 43 - from_bottom = false; 44 - from_top = false; 45 - }; 46 - 47 - menu = { 48 - scrolloff = 0; 49 - min_width = 20; 50 - max_height = 15; 51 - border = "rounded"; 52 - show_documentation = true; 53 - 54 - draw = { 55 - padding = 1; 56 - gap = 1; 57 - treesitter = [ 58 - "lsp" 59 - "buffer" 60 - ]; 61 - }; 62 - 63 - }; 64 - }; 65 - 66 - sources = { 67 - 68 - providers = { 69 - 70 - }; 71 - 72 - default = [ 73 - "lsp" 74 - "path" 75 - "snippets" 76 - "buffer" 77 - ]; 78 - }; 79 - 80 - }; 81 - }; 82 - 83 - treesitter = { 84 - enable = true; 85 - 86 - settings = { 87 - auto_install = true; 88 - 89 - folding = true; 90 - highlight.enable = true; 91 - }; 92 - }; 93 - 94 - lsp = { 95 - enable = true; 96 - 97 - servers = { 98 - dockerls.enable = true; 99 - bashls.enable = true; 100 - cssls.enable = true; 101 - 102 - twiggy_language_server = { 103 - enable = true; 104 - package = pkgs.twig-language-server; # https://github.com/nixos/nixpkgs/issues/425846 105 - cmd = [ "${pkgs.twig-language-server}/bin/twig-language-server" ]; 106 - }; 107 - 108 - emmet_language_server = { 109 - enable = true; 110 - 111 - filetypes = [ 112 - "css" 113 - "html" 114 - "javascript" 115 - "javascriptreact" 116 - "less" 117 - "sass" 118 - "scss" 119 - "typescriptreact" 120 - ]; 121 - }; 122 - 123 - ts_ls = { 124 - enable = true; 125 - filetypes = [ 126 - "ts" 127 - "js" 128 - ]; 129 - }; 130 - 131 - html.enable = true; 132 - 133 - intelephense = { 134 - enable = true; 135 - package = pkgs.intelephense; 136 - }; 137 - 138 - jqls.enable = true; 139 - jsonls.enable = true; 140 - lua_ls.enable = true; 141 - 142 - nil_ls = { 143 - enable = true; 144 - cmd = [ "${pkgs.nil}/bin/nil" ]; 145 - settings = { 146 - formatting.command = [ "nix fmt" ]; 147 - nix.maxMemoryMB = null; 148 - }; 149 - }; 150 - }; 151 - }; 152 - }; 153 - }
-12
modules/home/tui/neovim/sessions.nix
··· 1 - { 2 - programs.nixvim.plugins = { 3 - project-nvim = { 4 - enable = true; 5 - enableTelescope = true; 6 - }; 7 - 8 - auto-save.enable = true; 9 - auto-session.enable = true; 10 - direnv.enable = true; 11 - }; 12 - }
-62
modules/home/tui/neovim/social.nix
··· 1 - { lib, config, ... }: 2 - let 3 - inherit (lib) mkMerge mkIf; 4 - 5 - cfg = config.sylveon.tui.neovim; 6 - in 7 - { 8 - programs.nixvim.plugins = { 9 - cord = { 10 - enable = true; # TODO: disable for blmedia account 11 - 12 - settings = { 13 - display = { 14 - swap_fields = true; 15 - 16 - theme = "atom"; 17 - flavor = "accent"; 18 - }; 19 - 20 - timestamp.shared = true; 21 - 22 - editor = { 23 - tooltip = "NixOS managed VIM"; 24 - icon = "https://raw.githubusercontent.com/IogaMaster/neovim/main/.github/assets/nixvim-dark.webp"; 25 - }; 26 - 27 - text = ( 28 - if cfg.anonymous then 29 - { 30 - file_browser = "Browsing through ***"; 31 - workspace = "In ***"; 32 - viewing = "Viewing ***"; 33 - lsp = "Configuring LSP"; 34 - docs = "Reading ***"; 35 - vsc = "Committing changes in ***"; 36 - notes = "Taking notes in ***"; 37 - debug = "Debugging in ***"; 38 - test = "Testing in ***"; 39 - diagnostics = "Fixing problems in ***"; 40 - games = "Playing ***"; 41 - terminal = "Running commands in ***"; 42 - 43 - editing.__raw = '' 44 - function(opts) 45 - return string.format('Editing %s file', opts.filetype) 46 - end 47 - ''; 48 - 49 - } 50 - else 51 - { 52 - file_browser.__raw = '' 53 - function(opts) 54 - return string.format('Browsing through %s', opts.workspace) 55 - end 56 - ''; 57 - } 58 - ); 59 - }; 60 - }; 61 - }; 62 - }
-61
modules/home/tui/neovim/telescope.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - let 8 - inherit (lib) mkIf; 9 - in 10 - { 11 - 12 - home.packages = mkIf config.programs.nixvim.plugins.telescope.enable [ pkgs.ripgrep ]; 13 - 14 - programs.nixvim.plugins = { 15 - telescope = { 16 - enable = true; 17 - 18 - settings = { 19 - defaults = { 20 - sorting_strategy = "ascending"; 21 - layout_config = { 22 - prompt_position = "top"; 23 - # preview_width = 0.5; 24 - width = 0.40; 25 - height = 0.40; 26 - }; 27 - }; 28 - 29 - pickers = { 30 - find_files.previewer = false; 31 - live_grep.theme = "dropdown"; 32 - }; 33 - }; 34 - 35 - extensions = { 36 - file-browser = { 37 - enable = true; 38 - settings.respect_gitignore = true; 39 - }; 40 - 41 - advanced-git-search.enable = true; 42 - live-grep-args.enable = true; 43 - ui-select.enable = true; 44 - 45 - project.enable = true; 46 - }; 47 - 48 - keymaps = { 49 - "<C-F>" = { 50 - action = "find_files"; 51 - options.desc = "Search for files in telescope"; 52 - }; 53 - 54 - "<C-G>" = { 55 - action = "live_grep"; 56 - options.desc = "Search through all files for specific words"; 57 - }; 58 - }; 59 - }; 60 - }; 61 - }
-54
modules/home/tui/neovim/visual.nix
··· 1 - { 2 - programs.nixvim.plugins = { 3 - lualine.enable = true; # TODO: configuration? 4 - colorizer.enable = true; 5 - 6 - # Ghost message next to line, blaming who wrote the spaghetti 7 - gitblame = { 8 - enable = true; 9 - 10 - settings = { 11 - date_format = "%r"; 12 - message_template = " <summary> • <author> (<date>)"; 13 - }; 14 - }; 15 - 16 - # visualize currently open files 17 - bufferline = { 18 - enable = true; 19 - 20 - settings = { 21 - options = { 22 - show_close_icon = false; 23 - show_buffer_close_icons = false; 24 - show_buffer_icons = false; 25 - 26 - mode = "buffers"; 27 - modified_icon = "●"; 28 - diagnostics = "nvim_lsp"; 29 - }; 30 - }; 31 - }; 32 - 33 - nvim-tree = { 34 - enable = true; 35 - autoClose = true; 36 - 37 - settings = { 38 - diagnostics.enable = true; 39 - modified.enable = true; 40 - view.width = "20%"; 41 - 42 - actions = { 43 - open_file.quit_on_open = true; 44 - }; 45 - 46 - renderer = { 47 - full_name = true; 48 - indent_markers.enable = true; 49 - }; 50 - }; 51 - }; 52 - 53 - }; 54 - }
-18
modules/nixos/default.nix
··· 1 - { inputs, ... }: { 2 - imports = [ 3 - # General module imports 4 - inputs.tgirlpkgs.nixosModules.default 5 - 6 - # Modules import 7 - ./hardware # hardware configuration (e.g gpu, cpu, networking, etc.) 8 - ./nix # specific configuration for the nix environment 9 - ./environment # environment variables and configurations (e.g fonts, time etc.) 10 - ./security # security thingies 11 - ./system # configuration for our system 12 - ./services 13 - 14 - ./style.nix 15 - ./users.nix # load and create users 16 - ./extraPackages.nix # packages that need to be loaded but are not big enough to be an own module 17 - ]; 18 - }
-6
modules/nixos/environment/default.nix
··· 1 - { 2 - imports = [ 3 - ./fonts.nix 4 - ./locale.nix 5 - ]; 6 - }
-8
modules/nixos/environment/fonts.nix
··· 1 - { pkgs, ... }: 2 - { 3 - fonts.packages = [ 4 - # Jetbrains Mono 5 - pkgs.jetbrains-mono 6 - pkgs.nerd-fonts.jetbrains-mono 7 - ]; 8 - }
-18
modules/nixos/environment/locale.nix
··· 1 - { lib, ... }: 2 - let 3 - inherit (lib) mkForce; 4 - in 5 - { 6 - # Force german keyboard layout 7 - console.keyMap = mkForce "de"; 8 - 9 - time.timeZone = "Europe/Berlin"; 10 - 11 - i18n = { 12 - # Use english as a default language 13 - defaultLocale = "en_US.UTF-8"; 14 - 15 - # For time and date we want to use the german layout 16 - extraLocaleSettings.LC_TIME = "de_DE.UTF-8"; 17 - }; 18 - }
-41
modules/nixos/extraPackages.nix
··· 1 - # Packages that are to small to put into a config, but still important! 2 - { 3 - lib, 4 - config, 5 - self, 6 - ... 7 - }: 8 - let 9 - inherit (lib) mkIf mkMerge; 10 - 11 - inherit (self.lib.validation) anyHomeModuleActive; 12 - prof = config.sylveon.profiles; 13 - in 14 - { 15 - programs = mkMerge [ 16 - (mkIf (prof.graphical.enable) { 17 - dconf.enable = true; 18 - }) 19 - 20 - (mkIf (prof.gaming.enable) { 21 - # Setup configuration thingies for steam 22 - 23 - # needs to be enabled or the config is not loaded 24 - # this has to be enabled globaly, so steam will be on every account :( 25 - steam = { 26 - enable = true; 27 - extest.enable = true; 28 - protontricks.enable = true; 29 - 30 - dedicatedServer.openFirewall = true; 31 - localNetworkGameTransfers.openFirewall = true; 32 - remotePlay.openFirewall = true; 33 - }; 34 - }) 35 - 36 - { 37 - # TODO: should this just stand here? 38 - zsh.enable = true; 39 - } 40 - ]; 41 - }
-24
modules/nixos/hardware/audio.nix
··· 1 - { 2 - config, 3 - self, 4 - lib, 5 - ... 6 - }: 7 - let 8 - inherit (lib) mkIf; 9 - 10 - prof = config.sylveon.profiles; 11 - in 12 - { 13 - config = mkIf prof.graphical.enable { 14 - 15 - # Using pipewire as my sound backend 16 - services.pipewire = { 17 - enable = true; 18 - 19 - pulse.enable = true; 20 - alsa.enable = true; 21 - 22 - }; 23 - }; 24 - }
-43
modules/nixos/hardware/bluetooth.nix
··· 1 - { 2 - config, 3 - self, 4 - lib, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - inherit (lib.types) bool; 10 - inherit (lib) mkIf; 11 - inherit (self.lib.modules) mkOpt; 12 - 13 - cfg = config.sylveon.hardware.bluetooth; 14 - prof = config.sylveon.profiles; 15 - in 16 - { 17 - 18 - options.sylveon.hardware.bluetooth.enable = 19 - mkOpt bool prof.laptop.enable 20 - "Whether or not bluetooth should be enabled or not"; 21 - 22 - config = mkIf cfg.enable { 23 - hardware.bluetooth = { 24 - enable = true; 25 - package = pkgs.bluez; 26 - powerOnBoot = true; 27 - 28 - settings = { 29 - Policy.AutoEnable = true; 30 - 31 - General = { 32 - Privacy = "device"; 33 - 34 - MultiProfile = "multiple"; 35 - Experimental = true; 36 - }; 37 - }; 38 - }; 39 - 40 - services.blueman.enable = prof.graphical.enable; 41 - }; 42 - 43 - }
-41
modules/nixos/hardware/controller.nix
··· 1 - { 2 - config, 3 - self, 4 - lib, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - inherit (lib.types) bool; 10 - inherit (lib) mkIf; 11 - inherit (lib.modules) mkMerge; 12 - inherit (self.lib.modules) mkOpt; 13 - 14 - cfg = config.sylveon.hardware.controller; 15 - prof = config.sylveon.profiles; 16 - in 17 - { 18 - 19 - options.sylveon.hardware.controller = { 20 - xbox.enable = 21 - mkOpt bool prof.gaming.enable 22 - "Whether or not xbox controller should be enabled or not"; 23 - }; 24 - 25 - config = mkMerge [ 26 - (mkIf cfg.xbox.enable { 27 - hardware = { 28 - # Xbox controller configuration and kernel setup 29 - xpadneo.enable = true; 30 - 31 - # steam-hardware support and configuration 32 - steam-hardware.enable = true; 33 - }; 34 - 35 - boot.extraModprobeConfig = '' 36 - options bluetooth disable_ertm=Y 37 - ''; 38 - }) 39 - ]; 40 - 41 - }
-20
modules/nixos/hardware/cpu/amd.nix
··· 1 - { 2 - lib, 3 - config, 4 - ... 5 - }: 6 - let 7 - inherit (lib) mkIf; 8 - 9 - cpu = config.sylveon.device.cpu; 10 - in 11 - { 12 - config = mkIf (cpu == "amd") { 13 - hardware.cpu.amd.updateMicrocode = true; 14 - 15 - boot.kernelModules = [ 16 - "kvm-amd" 17 - "amd-pstate" 18 - ]; 19 - }; 20 - }
-18
modules/nixos/hardware/cpu/default.nix
··· 1 - { self, lib, ... }: 2 - let 3 - inherit (lib.types) enum; 4 - 5 - inherit (self.lib.modules) mkOpt; 6 - in 7 - { 8 - imports = [ 9 - ./amd.nix 10 - ./intel.nix 11 - ]; 12 - 13 - options.sylveon.device.cpu = mkOpt (enum [ 14 - "amd" 15 - "intel" 16 - ]) null "What cpu your system uses"; 17 - 18 - }
-24
modules/nixos/hardware/cpu/intel.nix
··· 1 - { 2 - lib, 3 - self, 4 - config, 5 - ... 6 - }: 7 - let 8 - inherit (lib) mkIf; 9 - 10 - cpu = config.sylveon.device.cpu; 11 - in 12 - { 13 - config = mkIf (cpu == "intel") { 14 - hardware.cpu.intel.updateMicrocode = true; 15 - 16 - boot = { 17 - kernelModules = [ "kvm-intel" ]; 18 - kernelParams = [ 19 - "i915.fastboot=1" 20 - "enable_gvt=1" 21 - ]; 22 - }; 23 - }; 24 - }
-19
modules/nixos/hardware/default.nix
··· 1 - { 2 - imports = [ 3 - ./networking 4 - ./cpu 5 - ./gpu 6 - 7 - ./audio.nix 8 - ./power.nix 9 - ./bluetooth.nix 10 - ./yubikey.nix 11 - ./controller.nix 12 - ]; 13 - 14 - config = { 15 - # Enables non-free firmware 16 - hardware.enableRedistributableFirmware = true; 17 - }; 18 - 19 - }
-27
modules/nixos/hardware/gpu/amd.nix
··· 1 - { 2 - lib, 3 - pkgs, 4 - config, 5 - ... 6 - }: 7 - let 8 - inherit (lib) mkIf; 9 - 10 - gpu = config.sylveon.device.gpu; 11 - in 12 - { 13 - config = mkIf (gpu == "amd") { 14 - boot = { 15 - kernelModules = [ "amdgpu" ]; 16 - initrd.kernelModules = [ "amdgpu" ]; 17 - }; 18 - 19 - # enables AMDVLK & OpenCL support 20 - hardware.graphics.extraPackages = [ 21 - pkgs.rocmPackages.clr 22 - pkgs.rocmPackages.clr.icd 23 - ]; 24 - 25 - services.xserver.videoDrivers = [ "amdgpu" ]; 26 - }; 27 - }
-20
modules/nixos/hardware/gpu/default.nix
··· 1 - { self, lib, ... }: 2 - let 3 - inherit (lib.types) enum nullOr; 4 - 5 - inherit (self.lib.modules) mkOpt; 6 - in 7 - { 8 - imports = [ 9 - ./amd.nix 10 - ]; 11 - 12 - options.sylveon.device.gpu = mkOpt (nullOr (enum [ "amd" ])) null "What gpu your system uses"; 13 - 14 - config = { 15 - hardware.graphics = { 16 - enable = true; 17 - enable32Bit = true; 18 - }; 19 - }; 20 - }
-61
modules/nixos/hardware/networking/default.nix
··· 1 - { 2 - lib, 3 - self, 4 - config, 5 - inputs, 6 - ... 7 - }: 8 - let 9 - inherit (lib.modules) mkForce mkIf; 10 - inherit (lib.types) bool; 11 - 12 - inherit (self.lib.modules) mkOpt; 13 - 14 - prof = config.sylveon.profiles; 15 - cfg = config.sylveon.system.networking; 16 - in 17 - { 18 - 19 - options.sylveon.system.networking = { 20 - hasWifi = mkOpt bool prof.laptop.enable "Whether or not the device has wifi"; 21 - blockMihoyoTelemetry = 22 - mkOpt bool prof.gaming.enable 23 - "If the telemetry of mihoyo games should be blocked"; 24 - 25 - tailscale.enable = mkOpt bool true "Whether or not to enable tailscale VPN"; 26 - }; 27 - 28 - imports = [ 29 - ./networkManager.nix 30 - ./tailscale.nix 31 - ./ssh.nix 32 - 33 - inputs.aagl.nixosModules.default # TODO: only if profile gamine? 34 - ]; 35 - 36 - config = { 37 - # enable wireless database, it helps keeping wifi speedy 38 - hardware.wirelessRegulatoryDatabase = true; 39 - 40 - networking = { 41 - enableIPv6 = true; 42 - 43 - # global dhcp has been deprecated upstream, so we use networkd instead 44 - # however individual interfaces are still managed through dhcp in hardware configurations 45 - useDHCP = mkForce false; 46 - useNetworkd = mkForce true; 47 - 48 - # Disable Mihoyo telemetry if neseceary 49 - mihoyo-telemetry.block = cfg.blockMihoyoTelemetry; 50 - 51 - nameservers = [ 52 - "1.1.1.1" 53 - "1.0.0.1" 54 - ]; 55 - 56 - }; 57 - 58 - # allow for the system to boot without waiting for the network interfaces are online 59 - systemd.network.wait-online.enable = false; 60 - }; 61 - }
-24
modules/nixos/hardware/networking/networkManager.nix
··· 1 - { config, lib, ... }: 2 - let 3 - inherit (lib) mkIf; 4 - 5 - cfg = config.sylveon.system.networking; 6 - in 7 - { 8 - 9 - config = { 10 - networking.networkmanager = { 11 - enable = true; 12 - dns = "systemd-resolved"; 13 - 14 - wifi = mkIf cfg.hasWifi { 15 - backend = "wpa_supplicant"; 16 - 17 - powersave = true; 18 - scanRandMacAddress = true; 19 - 20 - }; 21 - }; 22 - }; 23 - 24 - }
-42
modules/nixos/hardware/networking/ssh.nix
··· 1 - { config, self, ... }: 2 - { 3 - services.openssh = { 4 - enable = true; 5 - ports = [ 22 ]; 6 - 7 - banner = '' 8 - You have connected to ${config.networking.hostName} @ NixOS (v ${config.system.nixos.release})" 9 - This is part of the sylveon flake network! :> 10 - 11 - ''; 12 - 13 - settings = { 14 - PermitRootLogin = "no"; 15 - }; 16 - }; 17 - 18 - # Load ssh keys 19 - age.secrets = { 20 - "ssh-gh" = { 21 - # Github 22 - rekeyFile = "${self}/secrets/ssh-gh.age"; 23 - mode = "644"; 24 - group = "users"; 25 - }; 26 - 27 - "ssh-bb" = { 28 - # Bitbucket 29 - rekeyFile = "${self}/secrets/ssh-bb.age"; 30 - mode = "644"; 31 - group = "users"; 32 - }; 33 - 34 - "ssh-tangled" = { 35 - # Tangled ssh key 36 - rekeyFile = "${self}/secrets/ssh-tangled.age"; 37 - mode = "644"; 38 - group = "users"; 39 - }; 40 - 41 - }; 42 - }
-15
modules/nixos/hardware/networking/tailscale.nix
··· 1 - { lib, config, ... }: 2 - let 3 - inherit (lib) mkIf; 4 - 5 - cfg = config.sylveon.system.networking; 6 - in 7 - { 8 - config = mkIf cfg.tailscale.enable { 9 - services.tailscale = { 10 - enable = true; 11 - openFirewall = true; 12 - useRoutingFeatures = "client"; # TODO: add server support 13 - }; 14 - }; 15 - }
-72
modules/nixos/hardware/power.nix
··· 1 - { config, lib, ... }: 2 - let 3 - inherit (lib.modules) 4 - mkIf 5 - mkDefault 6 - ; 7 - 8 - MHz = x: x * 1000; 9 - prof = config.sylveon.profiles; 10 - in 11 - { 12 - 13 - config = mkIf prof.laptop.enable { 14 - # power management (very good) 15 - services = { 16 - auto-cpufreq = { 17 - enable = true; 18 - 19 - settings = { 20 - battery = { 21 - governor = "powersave"; 22 - # energy_performance_preference = "power"; 23 - 24 - scaling_min_freq = mkDefault (MHz 1200); 25 - scaling_max_freq = mkDefault (MHz 1800); 26 - 27 - turbo = "never"; 28 - 29 - # this enables charging thresholds, this means that the battery will only 30 - # charge when it's above the start_threshold and stop charging when it's 31 - # below the stop_threshold 32 - enable_thresholds = true; 33 - start_threshold = 20; 34 - stop_threshold = 80; 35 - }; 36 - 37 - charger = { 38 - governor = "performance"; 39 - energy_performance_preference = "performance"; 40 - 41 - scaling_min_freq = mkDefault (MHz 1800); 42 - scaling_max_freq = mkDefault (MHz 3800); 43 - 44 - turbo = "auto"; 45 - }; 46 - }; 47 - }; 48 - 49 - # Service that provides applications with power management support 50 - upower = { 51 - enable = true; 52 - 53 - percentageLow = 20; 54 - percentageCritical = 10; 55 - percentageAction = 5; 56 - 57 - criticalPowerAction = "Hibernate"; 58 - }; 59 - 60 - # Disable power-management services that are sometimes automatically activated 61 - power-profiles-daemon.enable = false; 62 - tlp.enable = false; 63 - 64 - # Prevent wakeup from keyboard touch if lid is close 65 - udev.extraRules = '' 66 - SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0012", ATTR{power/wakeup}="disabled", ATTR{driver/1-1.1.1.4/power/wakeup}="disabled" 67 - SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0014", ATTR{power/wakeup}="disabled", ATTR{driver/1-1.1.1.4/power/wakeup}="disabled" 68 - ''; 69 - }; 70 - 71 - }; 72 - }
-66
modules/nixos/hardware/yubikey.nix
··· 1 - { 2 - pkgs, 3 - self, 4 - lib, 5 - config, 6 - ... 7 - }: 8 - let 9 - inherit (self.lib.modules) 10 - mkOpt 11 - ; 12 - 13 - inherit (lib.types) 14 - bool 15 - ; 16 - 17 - inherit (lib) 18 - mkIf 19 - mkMerge 20 - ; 21 - 22 - cfg = config.sylveon.hardware.yubikey; 23 - prof = config.sylveon.profiles; 24 - in 25 - { 26 - 27 - options.sylveon.hardware.yubikey.enable = 28 - mkOpt bool true 29 - "Whether or not yubikey support should be enabled"; 30 - 31 - config = mkMerge [ 32 - (mkIf cfg.enable { 33 - hardware.gpgSmartcards.enable = true; 34 - 35 - # Enables support for login and authentication with the yubikey 36 - security.pam.u2f = { 37 - enable = true; 38 - settings.cue = true; 39 - }; 40 - 41 - services = { 42 - pcscd.enable = true; 43 - udev.packages = [ pkgs.yubikey-personalization ]; 44 - }; 45 - 46 - # use gpg agent instead of the ssh agent 47 - programs = { 48 - ssh.startAgent = false; 49 - 50 - gnupg.agent = { 51 - enable = true; 52 - enableSSHSupport = true; 53 - enableBrowserSocket = true; 54 - }; 55 - }; 56 - 57 - # Add yubico's official tools 58 - environment.systemPackages = [ pkgs.yubikey-manager ]; # cli 59 - }) 60 - 61 - (mkIf (cfg.enable && prof.graphical.enable) { 62 - security.pam.services.swaylock.text = "auth include login"; 63 - environment.systemPackages = [ pkgs.yubioath-flutter ]; # gui 64 - }) 65 - ]; 66 - }
-17
modules/nixos/nix/caches.nix
··· 1 - { 2 - nix.settings = { 3 - substituters = [ 4 - "https://nix-community.cachix.org" # nix-community cache 5 - "https://ezkea.cachix.org" # AAGL caches 6 - "https://nix-gaming.cachix.org" # gaming packages 7 - "https://catppuccin.cachix.org" # a cache for all catppuccin ports 8 - ]; 9 - 10 - trusted-public-keys = [ 11 - "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" 12 - "ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI=" 13 - "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4=" 14 - "catppuccin.cachix.org-1:noG/4HkbhJb+lUAdKrph6LaozJvAeEEZj4N732IysmU=" 15 - ]; 16 - }; 17 - }
-7
modules/nixos/nix/default.nix
··· 1 - { 2 - imports = [ 3 - ./caches.nix # caches that our nix environment should use 4 - ./nix.nix # configuration for the nix command/environment 5 - ./nixpkgs.nix # configuration for package management 6 - ]; 7 - }
-56
modules/nixos/nix/nix.nix
··· 1 - { 2 - self, 3 - config, 4 - pkgs, 5 - ... 6 - }: 7 - let 8 - inherit (self.lib.users) filterTrustedUsers; 9 - 10 - trustedUsers = filterTrustedUsers config.sylveon.system.users config; 11 - in 12 - { 13 - nix = { 14 - package = pkgs.lix; 15 - 16 - settings = { 17 - # Free up space if system reaches 5GB 18 - min-free = 5 * 1024 * 1024 * 1024; 19 - max-free = 20 * 1024 * 1024 * 1024; 20 - 21 - auto-optimise-store = true; 22 - 23 - # Keep building even after one derivation fails 24 - keep-going = true; 25 - 26 - # Remove annoying warnings... 27 - warn-dirty = false; 28 - 29 - # Let the system decide on its own, how many jobs should run 30 - max-jobs = "auto"; 31 - 32 - # Important to disable because of vulnerability reasons 33 - accept-flake-config = false; 34 - 35 - # Allow users with root access to work with the nix daemon/store 36 - trusted-users = trustedUsers; 37 - allowed-users = trustedUsers; 38 - 39 - experimental-features = [ 40 - # Enable Flakes 41 - "flakes" 42 - "nix-command" 43 - 44 - # Removes the unnecessary creations of users 45 - "auto-allocate-uids" 46 - ]; 47 - }; 48 - 49 - # Garbage collection. 50 - gc = { 51 - automatic = true; 52 - options = "--delete-older-than 2d"; 53 - }; 54 - 55 - }; 56 - }
-20
modules/nixos/nix/nixpkgs.nix
··· 1 - { inputs, ... }: { 2 - # TODO: evaluation warning (cant use nixpkgs.config when using home-manager.useGlobalPkgs) 3 - nixpkgs.config = { 4 - # Allowance of packages 5 - allowUnfree = true; 6 - allowBroken = false; 7 - 8 - allowUnfreePredicate = _: true; 9 - allowAliases = false; 10 - 11 - # Warn me if something has no maintainer anymore (sad >:) 12 - # Never mind, there are to many... for now! 13 - # showDerivationWarnings = [ "maintainerless" ]; 14 - }; 15 - 16 - nixpkgs.overlays = [ 17 - (import ./overlays/mpv.nix) 18 - inputs.nix-jetbrains-plugins.overlays.default 19 - ]; 20 - }
-5
modules/nixos/nix/overlays/mpv.nix
··· 1 - (self: super: { 2 - mpv = super.mpv.override { 3 - scripts = [ self.mpvScripts.mpris ]; 4 - }; 5 - })
-7
modules/nixos/security/agenix/age-yubikey.pub
··· 1 - # Serial: 30683330, Slot: 1 2 - # Name: AGE_NIXOS 3 - # Created: Wed, 11 Dec 2024 15:35:08 +0000 4 - # PIN policy: Once (A PIN is required once per session, if set) 5 - # Touch policy: Always (A physical touch is required for every decryption) 6 - # Recipient: age1yubikey1qv2su93x4hwyucgcemq900uafuctzxxtz24fx0djlrmdzkjhqka52xay5t2 7 - AGE-PLUGIN-YUBIKEY-1CGCDGQVZMH33NKC0MQX8N
-58
modules/nixos/security/agenix/default.nix
··· 1 - { 2 - lib, 3 - self, 4 - config, 5 - inputs, 6 - ... 7 - }: 8 - let 9 - inherit (lib.types) listOf path; 10 - inherit (self.lib.modules) mkOpt; 11 - 12 - cfg = config.sylveon.security.agenix; 13 - 14 - getSystemDirectory = "${self}/systems/${config.networking.hostName}"; 15 - in 16 - { 17 - 18 - options.sylveon.security.agenix = { 19 - masterIdentities = mkOpt (listOf path) [ 20 - ./age-yubikey.pub 21 - ] "A list of masterIdentities that should be used; defaults to my yubikey"; 22 - }; 23 - 24 - imports = [ 25 - inputs.agenix.nixosModules.default 26 - inputs.agenix-rekey.nixosModules.default 27 - ]; 28 - 29 - /* 30 - The default Agenix configuration, with the new age-rekey module 31 - The age.rekey.hostPubkey is located in the hosts default file 32 - All secret files can be found in the hosts folder ${hostname}/secrets/ 33 - */ 34 - config = { 35 - age = { 36 - rekey = { 37 - hostPubkey = builtins.readFile (getSystemDirectory + "/key.pub"); 38 - masterIdentities = cfg.masterIdentities; 39 - 40 - # Secrets are located in the local repository 41 - storageMode = "local"; 42 - localStorageDir = getSystemDirectory + "/secrets"; 43 - }; 44 - 45 - generators = { 46 - # Generate a random string that is encrypted as sha256 after that 47 - sha256 = { ... }: "echo tr -dc A-Za-z0-9 </dev/urandom | head -c 13 | sha256sum | cut -d ' ' -f1"; 48 - 49 - rsa = { pkgs, ... }: "${pkgs.openssl}/bin/openssl genrsa 2048"; 50 - }; 51 - 52 - identityPaths = [ 53 - "/etc/ssh/ssh_host_rsa_key" 54 - "/etc/ssh/ssh_host_ed25519_key" 55 - ]; 56 - }; 57 - }; 58 - }
-5
modules/nixos/security/default.nix
··· 1 - { 2 - imports = [ 3 - ./agenix # configuration for secrets 4 - ]; 5 - }
-20
modules/nixos/services/default.nix
··· 1 - { 2 - 3 - imports = [ 4 - ./postgres.nix 5 - ./nginx.nix 6 - ./docker.nix 7 - 8 - ./minecraft.nix 9 - ./vaultwarden.nix 10 - ./glance 11 - ./kitchenowl.nix 12 - 13 - ./tangled.nix 14 - ./piper.nix 15 - ./radicale.nix 16 - 17 - ./plex.nix 18 - ]; 19 - 20 - }
-31
modules/nixos/services/docker.nix
··· 1 - { 2 - lib, 3 - config, 4 - self, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - inherit (lib) mkIf; 10 - inherit (lib.types) bool; 11 - 12 - inherit (self.lib.modules) mkOpt; 13 - cfg = config.sylveon.services.docker; 14 - in 15 - { 16 - options.sylveon.services.docker = { 17 - enable = mkOpt bool false "Docher Service"; 18 - }; 19 - 20 - config = mkIf cfg.enable { 21 - virtualisation.docker = { 22 - enable = true; 23 - storageDriver = "overlay2"; 24 - 25 - rootless = { 26 - enable = true; 27 - setSocketVariable = true; 28 - }; 29 - }; 30 - }; 31 - }
-66
modules/nixos/services/glance/default.nix
··· 1 - { 2 - config, 3 - lib, 4 - self, 5 - ... 6 - }: 7 - let 8 - inherit (lib) mkIf; 9 - inherit (self.lib.modules) mkServiceOpt; 10 - 11 - cfg = config.sylveon.services.glance; 12 - in 13 - { 14 - 15 - options.sylveon.services.glance = 16 - mkServiceOpt "Glance dashboard" { port = 8002; domain = "xaiya.dev"; }; 17 - 18 - config = mkIf cfg.enable { 19 - age.secrets.glance-env.rekeyFile = "${self}/secrets/glance-env.age"; 20 - 21 - services = { 22 - glance = { 23 - enable = true; 24 - openFirewall = false; # Managed through nginx server 25 - 26 - environmentFile = config.age.secrets.glance-env.path; 27 - 28 - settings = { 29 - pages = [ 30 - (import ./pages/overview.nix { config = config; lib = lib; }) 31 - ]; 32 - 33 - server = { 34 - host = ""; # Needs to be an empty string, otherwise interfaces cant be found correctly 35 - port = cfg.port; 36 - proxied = true; 37 - }; 38 - 39 - # rose-pine color theme TODO 40 - theme = { 41 - constrat-multiplier = 1.3; 42 - background-color = "249 22 12"; # Base 43 - pirmary-color = "245 50 91"; # Text 44 - positive-color = "2 55 83"; # Rose 45 - negative-color = "343 76 68"; # Love 46 - }; 47 - }; 48 - }; 49 - 50 - 51 - # Enable proxy 52 - nginx.virtualHosts.${cfg.domain} = { 53 - enableACME = true; 54 - forceSSL = true; 55 - 56 - locations."/" = { 57 - proxyPass = "http://${cfg.host}:${builtins.toString cfg.port}"; 58 - proxyWebsockets = true; 59 - }; 60 - 61 - extraConfig = "proxy_ssl_server_name on;"; 62 - }; 63 - 64 - }; 65 - }; 66 - }
-58
modules/nixos/services/glance/pages/overview.nix
··· 1 - { config, lib, ... }: 2 - let 3 - hour-format = "24h"; 4 - in 5 - { 6 - name = "Overview"; 7 - hide-desktop-navigation = true; 8 - center-vertically = true; 9 - 10 - head-widgets = [ 11 - { type = "search"; autofocus = true; } 12 - ]; 13 - 14 - columns = [ 15 - { 16 - size = "small"; 17 - widgets = [ 18 - { type = "calendar"; } 19 - 20 - { 21 - type = "clock"; 22 - inherit hour-format; 23 - } 24 - 25 - { 26 - type = "weather"; 27 - location = "Berlin, Germany"; # TODO: automate based on server location 28 - 29 - inherit hour-format; 30 - } 31 - ]; 32 - } 33 - 34 - { 35 - size = "full"; 36 - widgets = [ (import ./widgets/monitor.nix { config = config; lib = lib; } ) ]; 37 - } 38 - 39 - { 40 - size = "small"; 41 - widgets = [ 42 - (import ./widgets/recentListens.nix) 43 - 44 - { 45 - type = "releases"; 46 - show-source-icon = true; 47 - repositories = [ # TODO: add a connection to this flakes knot 48 - "WillPower3309/swayfx" 49 - "Inrixia/TidaLuna" 50 - ]; 51 - } 52 - 53 - (import ./widgets/serverStats.nix { config = config; lib = lib; }) 54 - (import ./widgets/tailscaleDevices.nix) 55 - ]; 56 - } 57 - ]; 58 - }
-20
modules/nixos/services/glance/pages/widgets/monitor.nix
··· 1 - { lib, config, ... }: 2 - let 3 - inherit (lib) forEach attrsToList; 4 - in 5 - { 6 - type = "monitor"; 7 - cache = "30s"; 8 - title = "Services"; 9 - 10 - # Automaticly create the sites based on domains passing through nginx 11 - sites = 12 - forEach 13 - (attrsToList config.services.nginx.virtualHosts) 14 - (x: { 15 - title = 16 - builtins.elemAt (builtins.split "(.)xaiya.dev" x.name) 0; 17 - 18 - url = "https://${x.name}"; 19 - }); 20 - }
-34
modules/nixos/services/glance/pages/widgets/recentListens.nix
··· 1 - { 2 - type = "custom-api"; 3 - title = "Recent listens"; 4 - cache = "60s"; 5 - url = "http://ws.audioscrobbler.com/2.0/"; 6 - parameters = { 7 - method = "user.getRecentTracks"; 8 - user = "xaiyadev"; 9 - api_key = "\${LASTFM_APIKEY}"; 10 - format = "json"; 11 - limit = "5"; 12 - }; 13 - 14 - template = '' 15 - <ul class="list list-gap-10 collapsible-container" data-collapse-after="1"> 16 - {{ range .JSON.Array "recenttracks.track" }} 17 - <li class="flex items-center gap-10"> 18 - <img src={{ .String "image.2.#text" }} style="border-radius: 5px; min-width: 5rem; max-width: 5rem;" class="card"> 19 - <div class="flex-1"> 20 - <p class="color-positive size-h5">{{ .String "artist.#text" }}</p> 21 - <p class="size-h5">{{ .String "name" }}</p> 22 - <p class="size-h6"> 23 - {{ if .String "@attr.nowplaying" }} 24 - <span class="color-positive">Now playing</span> 25 - {{ else }} 26 - <span class="color-subdue" {{ .String "date.#text" | parseRelativeTime "02 Jan 2006, 15:04" }}></span> 27 - {{ end }} 28 - </p> 29 - </div> 30 - </li> 31 - {{ end }} 32 - </ul> 33 - ''; 34 - }
-18
modules/nixos/services/glance/pages/widgets/serverStats.nix
··· 1 - { lib, config, ... }: 2 - let 3 - inherit (lib) forEach attrsToList genAttrs; 4 - in 5 - { 6 - type = "server-stats"; 7 - servers = [ 8 - { 9 - type = "local"; 10 - name = config.networking.hostName; 11 - 12 - mountpoints = 13 - genAttrs 14 - (forEach (attrsToList config.fileSystems) (x: x.name)) 15 - (name: { "${name}" = { inherit name; }; }); 16 - } 17 - ]; 18 - }
-125
modules/nixos/services/glance/pages/widgets/tailscaleDevices.nix
··· 1 - { 2 - type = "custom-api"; 3 - title = "Tailscale devices"; 4 - title-url = "https://login.tailscale.com/admin/machines"; 5 - url = "https://api.tailscale.com/api/v2/tailnet/-/devices"; 6 - headers = { 7 - Authorization = "Bearer \${TAILSCALE_APIKEY}"; 8 - }; 9 - cache = "10m"; 10 - template = '' 11 - {{/* User Variables */}} 12 - {{/* Set to true if you'd like an indicator for online devices */}} 13 - {{ $enableOnlineIndicator := true }} 14 - 15 - <style> 16 - .device-info-container { 17 - position: relative; 18 - overflow: hidden; 19 - height: 1.5em; 20 - } 21 - 22 - .device-info { 23 - display: flex; 24 - transition: transform 0.2s ease, opacity 0.2s ease; 25 - } 26 - 27 - .device-ip { 28 - position: absolute; 29 - top: 0; 30 - left: 0; 31 - transform: translateY(-100%); 32 - opacity: 0; 33 - transition: transform 0.2s ease, opacity 0.2s ease; 34 - } 35 - 36 - .device-info-container:hover .device-info { 37 - transform: translateY(100%); 38 - opacity: 0; 39 - } 40 - 41 - .device-info-container:hover .device-ip { 42 - transform: translateY(0); 43 - opacity: 1; 44 - } 45 - 46 - .update-indicator { 47 - width: 8px; 48 - height: 8px; 49 - border-radius: 50%; 50 - background-color: var(--color-primary); 51 - display: inline-block; 52 - margin-left: 4px; 53 - vertical-align: middle; 54 - } 55 - 56 - .offline-indicator { 57 - width: 8px; 58 - height: 8px; 59 - border-radius: 50%; 60 - background-color: var(--color-negative); 61 - display: inline-block; 62 - margin-left: 4px; 63 - vertical-align: middle; 64 - } 65 - 66 - .online-indicator { 67 - width: 8px; 68 - height: 8px; 69 - border-radius: 50%; 70 - background-color: var(--color-positive); 71 - display: inline-block; 72 - margin-left: 4px; 73 - vertical-align: middle; 74 - } 75 - 76 - .device-name-container { 77 - display: flex; 78 - align-items: center; 79 - gap: 8px; 80 - } 81 - 82 - .indicators-container { 83 - display: flex; 84 - align-items: center; 85 - gap: 4px; 86 - } 87 - </style> 88 - <ul class="list list-gap-10 collapsible-container" data-collapse-after="4"> 89 - {{ range .JSON.Array "devices" }} 90 - <li> 91 - <div class="flex items-center gap-10"> 92 - <div class="device-name-container grow"> 93 - <span class="size-h4 block text-truncate color-primary"> 94 - {{ findMatch "^([^.]+)" (.String "name") }} 95 - </span> 96 - <div class="indicators-container"> 97 - {{ if (.Bool "updateAvailable") }} 98 - <span class="update-indicator" data-popover-type="text" data-popover-text="Update Available"></span> 99 - {{ end }} 100 - 101 - {{ $lastSeen := .String "lastSeen" | parseTime "rfc3339" }} 102 - {{ if not ($lastSeen.After (offsetNow "-10s")) }} 103 - {{ $lastSeenTimezoned := $lastSeen.In now.Location }} 104 - <span class="offline-indicator" data-popover-type="text" 105 - data-popover-text="Offline - Last seen {{ $lastSeenTimezoned.Format " Jan 2 3:04pm" }}"></span> 106 - {{ else if $enableOnlineIndicator }} 107 - <span class="online-indicator" data-popover-type="text" data-popover-text="Online"></span> 108 - {{ end }} 109 - </div> 110 - </div> 111 - </div> 112 - <div class="device-info-container"> 113 - <ul class="list-horizontal-text device-info"> 114 - <li>{{ .String "os" }}</li> 115 - <li>{{ .String "user" }}</li> 116 - </ul> 117 - <div class="device-ip"> 118 - {{ .String "addresses.0"}} 119 - </div> 120 - </div> 121 - </li> 122 - {{ end }} 123 - </ul> 124 - ''; 125 - }
-44
modules/nixos/services/kitchenowl.nix
··· 1 - { 2 - lib, 3 - config, 4 - self, 5 - inputs, 6 - ... 7 - }: 8 - let 9 - inherit (lib) mkIf; 10 - 11 - inherit (self.lib.modules) mkServiceOpt; 12 - cfg = config.sylveon.services.kitchenowl; 13 - in 14 - { 15 - options.sylveon.services.kitchenowl = 16 - mkServiceOpt "Kitchenowl" { port = 8050; domain = "kitchen.xaiya.dev"; host = "127.0.0.1"; }; 17 - 18 - config = mkIf cfg.enable { 19 - # Create secrets 20 - age.secrets.kitchenowl-env.rekeyFile = "${inputs.self}/secrets/kitchenowl.env.age"; 21 - 22 - # Enable the kitchenowl container 23 - virtualisation.oci-containers.containers.kitchenowl = { 24 - image = "tombursch/kitchenowl:latest"; 25 - ports = [ "${builtins.toString cfg.port}:8080" ]; 26 - 27 - environmentFiles = [ config.age.secrets.kitchenowl-env.path ]; 28 - volumes = [ "/mnt/raid/services/kitchenowl/data:/data" ]; 29 - }; 30 - 31 - # Enable proxy 32 - services.nginx.virtualHosts.${cfg.domain} = { 33 - enableACME = true; 34 - forceSSL = true; 35 - 36 - locations."/" = { 37 - proxyPass = "http://${cfg.host}:${builtins.toString cfg.port}"; 38 - }; 39 - 40 - extraConfig = "proxy_ssl_server_name on;"; 41 - }; 42 - 43 - }; 44 - }
-75
modules/nixos/services/minecraft.nix
··· 1 - { 2 - pkgs, 3 - config, 4 - lib, 5 - self, 6 - ... 7 - }: 8 - let 9 - inherit (self.lib.modules) mkOpt; 10 - inherit (lib.modules) mkIf; 11 - inherit (lib.types) bool package; 12 - 13 - cfg = config.sylveon.services.minecraft; 14 - in 15 - { 16 - 17 - options.sylveon.services.minecraft = { 18 - enable = mkOpt bool false "Enable a Minecraft server"; 19 - package = mkOpt package pkgs.papermcServers.papermc-1_21_9 "On what package this server should be based on"; 20 - }; 21 - 22 - config = mkIf cfg.enable { 23 - 24 - # Open Minecraft port and proximity port 25 - networking.firewall = { 26 - allowedUDPPorts = [ 24454 25565 ]; 27 - allowedTCPPorts = [ 24454 25565 ]; 28 - }; 29 - 30 - services.minecraft-server = { 31 - enable = true; 32 - inherit (cfg) package; 33 - 34 - # What world I want to use (TODO: needs some changes) 35 - dataDir = "/mnt/raid/services/minecraft/02"; 36 - 37 - eula = true; 38 - declarative = true; 39 - 40 - whitelist = { 41 - xaiyadev = "46fbfb38-95fe-4065-8391-42b33d938b15"; # me :> 42 - DerHirschGamer = "91142f92-dba4-4a3b-806a-bea7983c5f70"; # Timo 43 - _MarinoO_ = "647358b5-9d8b-443c-8287-65fef3a64862"; # Marin 44 - LeoLikesTurtles = "f605a6d7-7066-4c8b-93b7-2fa7bcf91918"; # Leo 45 - Suprice30 = "a7faf45a-0673-4be0-bb7c-2bcdfc9bbace"; # David 46 - Pallgamer48 = "5942cf47-3c62-4286-bd1e-1d58d42deed5"; # Jane 47 - ein_fish2punkt0 = "a97c9751-8458-45df-b58a-4dd1c1e027c2"; # Richie 48 - Cobbeled = "ca1baad9-2168-4a8f-bdaf-d612f7569ace"; # Cobble 49 - juijui0986 = "20a91ac9-e8fc-4032-b135-3c1550071a09"; # juijui 50 - NeyroHD = "5f4b3403-9226-40a0-897a-fc545d039a95"; # Finn 51 - m1Kaz1lla = "7bb7448c-8180-44de-bae4-bfe4b4f406bb"; # Mika 52 - mythicalel = "6c99fe8f-8565-4781-ac1d-62121e6953e5"; # Phillip 53 - M0rganite1 = "e8d654c9-6bd4-4572-b409-75e6a387f759"; # Leana 54 - RosaKanickel = "613a8b60-c834-47d7-bff8-586d7681bb4c"; # Lennard 55 - }; 56 - 57 - serverProperties = { 58 - difficulty = "hard"; 59 - spawn-protection = 0; 60 - 61 - gamemode = 0; 62 - force-gamemode = true; 63 - 64 - max-players = 10; 65 - view-dance = 18; 66 - simulation-distance = 8; 67 - 68 - white-list = true; 69 - motd = "Sylveon Network"; 70 - }; 71 - 72 - jvmOpts = "-Xms2G -Xmx8G"; 73 - }; 74 - }; 75 - }
-56
modules/nixos/services/nginx.nix
··· 1 - { 2 - lib, 3 - self, 4 - config, 5 - ... 6 - }: 7 - let 8 - inherit (lib) mkIf; 9 - inherit (lib.types) bool; 10 - 11 - inherit (self.lib.modules) mkOpt; 12 - 13 - cfg = config.sylveon.services.nginx; 14 - in 15 - { 16 - 17 - options.sylveon.services.nginx = { 18 - enable = mkOpt bool false "Enable Nginx proxy"; 19 - }; 20 - 21 - config = mkIf cfg.enable { 22 - age.secrets.cloudflare-acme.rekeyFile = "${self}/secrets/cloudflare-acme.age"; 23 - 24 - users.users.nginx.extraGroups = [ "acme" ]; 25 - 26 - # Base website ports opened for nginx 27 - networking.firewall.allowedTCPPorts = [ 28 - 80 29 - 443 30 - ]; 31 - 32 - 33 - services.nginx = { 34 - enable = true; 35 - 36 - recommendedGzipSettings = true; 37 - recommendedOptimisation = true; 38 - recommendedProxySettings = true; 39 - recommendedTlsSettings = true; 40 - }; 41 - 42 - security.acme = { 43 - acceptTerms = true; 44 - defaults.email = "d.schumin@proton.me"; 45 - certs."xaiya.dev" = { 46 - domain = "*.xaiya.dev"; 47 - 48 - dnsProvider = "cloudflare"; 49 - webroot = null; 50 - 51 - group = "nginx"; 52 - environmentFile = config.age.secrets.cloudflare-acme.path; 53 - }; 54 - }; 55 - }; 56 - }
-50
modules/nixos/services/piper.nix
··· 1 - { 2 - config, 3 - lib, 4 - self, 5 - ... 6 - }: 7 - let 8 - inherit (lib) mkIf; 9 - inherit (self.lib.modules) mkServiceOpt; 10 - 11 - cfg = config.sylveon.services.piper; 12 - in 13 - { 14 - 15 - options.sylveon.services.piper = 16 - mkServiceOpt "piper" { port = 3015; domain = "piper.xaiya.dev"; }; 17 - 18 - config = mkIf cfg.enable { 19 - # Create secrets 20 - age.secrets.piper-env.rekeyFile = "${self}/secrets/piper-env.age"; 21 - 22 - services = { 23 - piper = { 24 - enable = true; 25 - environmentFiles = [ config.age.secrets.piper-env.path ]; 26 - 27 - settings = { 28 - SERVER_PORT = cfg.port; 29 - SERVER_ROOT_URL = "https://${cfg.domain}"; 30 - 31 - ENABLE_SPOTIFY = "false"; 32 - ENABLE_LASTFM = "true"; # Only for migration purposes 33 - }; 34 - }; 35 - 36 - # Create proxy entry 37 - nginx.virtualHosts.${cfg.domain} = { 38 - enableACME = true; 39 - forceSSL = true; 40 - 41 - locations."/" = { 42 - proxyPass = "http://localhost:${builtins.toString cfg.port}"; 43 - }; 44 - 45 - extraConfig = "proxy_ssl_server_name on;"; 46 - 47 - }; 48 - }; 49 - }; 50 - }
-28
modules/nixos/services/plex.nix
··· 1 - { 2 - lib, 3 - config, 4 - self, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - inherit (lib) mkIf; 10 - inherit (lib.types) bool; 11 - 12 - inherit (self.lib.modules) mkOpt; 13 - cfg = config.sylveon.services.plex; 14 - in 15 - { 16 - options.sylveon.services.plex = { 17 - enable = mkOpt bool false "Enable a plex media server"; 18 - }; 19 - 20 - config = mkIf cfg.enable { 21 - services.plex = { 22 - enable = true; 23 - openFirewall = true; 24 - 25 - dataDir = "/mnt/raid/Publish/Plex2"; 26 - }; 27 - }; 28 - }
-37
modules/nixos/services/postgres.nix
··· 1 - { 2 - lib, 3 - config, 4 - self, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - inherit (lib) mkIf mkForce; 10 - inherit (lib.types) bool; 11 - 12 - inherit (self.lib.modules) mkOpt; 13 - cfg = config.sylveon.services.postgres; 14 - in 15 - { 16 - options.sylveon.services.postgres = { 17 - enable = mkOpt bool false "Enable postgres databases"; 18 - }; 19 - 20 - config = mkIf cfg.enable { 21 - services.postgresql = { 22 - enable = true; 23 - package = pkgs.postgresql; 24 - 25 - # Allow access to databases for users with the same username 26 - authentication = pkgs.lib.mkOverride 10 '' 27 - #type database DBuser origin-address 28 - local sameuser all peer 29 - host sameuser all ::1/128 reject 30 - ''; 31 - 32 - # MkForce because something other wants to use 'localhost' 33 - settings.listen_addresses = mkForce "*"; 34 - 35 - }; 36 - }; 37 - }
-57
modules/nixos/services/radicale.nix
··· 1 - { 2 - config, 3 - lib, 4 - self, 5 - ... 6 - }: 7 - let 8 - inherit (lib) mkIf; 9 - inherit (self.lib.modules) mkServiceOpt; 10 - 11 - cfg = config.sylveon.services.radicale; 12 - in 13 - { 14 - 15 - options.sylveon.services.radicale = 16 - mkServiceOpt "piper" { port = 5232; domain = "cal.xaiya.dev"; }; 17 - 18 - config = mkIf cfg.enable { 19 - services = { 20 - radicale = { 21 - enable = true; 22 - settings = { 23 - server.hosts = [ "0.0.0.0:${builtins.toString cfg.port}" "[::]:${builtins.toString cfg.port}" ]; 24 - auth = { 25 - type = "htpasswd"; 26 - htpasswd_filename = "/mnt/raid/services/radicale/users"; 27 - 28 - htpasswd_encryption = "bcrypt"; 29 - }; 30 - 31 - storage = { 32 - filesystem_folder = "/mnt/raid/services/radicale/collections"; 33 - }; 34 - }; 35 - }; 36 - 37 - 38 - nginx.virtualHosts.${cfg.domain} = { 39 - enableACME = true; 40 - forceSSL = true; 41 - 42 - locations."/radicale/" = { 43 - proxyPass = "http://${cfg.host}:${builtins.toString cfg.port}/"; 44 - 45 - extraConfig = '' 46 - proxy_set_header X-Script-Name /radicale; 47 - proxy_pass_header Authorization; 48 - 49 - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 50 - proxy_set_header X-Remote-User $remote_user; 51 - proxy_set_header Host $host; 52 - ''; 53 - }; 54 - }; 55 - }; 56 - }; 57 - }
-82
modules/nixos/services/tangled.nix
··· 1 - { inputs, lib, self, config, ... }: 2 - let 3 - inherit (lib) mkMerge mkIf; 4 - inherit (lib.types) str; 5 - inherit (self.lib.modules) mkServiceOpt mkOpt; 6 - 7 - cfg = config.sylveon.services.tangled; 8 - in 9 - { 10 - 11 - imports = [ 12 - inputs.tangled.nixosModules.knot 13 - inputs.tangled.nixosModules.spindle 14 - ]; 15 - 16 - options.sylveon.services.tangled = { 17 - owner = mkOpt str "did:plc:mycafjhyplj5z7a6qi5qjcil" "The owner of this tangled instance"; 18 - 19 - knot = 20 - mkServiceOpt "Tangled knot" { port = 5555; domain = "knot.xaiya.dev"; }; 21 - 22 - spindle = 23 - mkServiceOpt "Tangled spindle" { port = 6555; domain = "spindle.xaiya.dev"; }; 24 - }; 25 - 26 - config = { 27 - services = mkMerge [ 28 - (mkIf cfg.knot.enable { 29 - tangled.knot = { 30 - enable = true; 31 - 32 - server = { 33 - inherit (cfg) owner; 34 - hostname = cfg.knot.domain; 35 - }; 36 - 37 - motd = '' 38 - >> Tangled Knot !! (owned by: ${config.services.tangled.knot.server.owner}) 39 - ''; 40 - }; 41 - 42 - # Create proxy entry 43 - nginx.virtualHosts.${cfg.knot.domain} = { 44 - enableACME = true; 45 - forceSSL = true; 46 - 47 - locations."/" = { 48 - proxyPass = "http://${cfg.knot.host}:${builtins.toString cfg.knot.port}"; 49 - proxyWebsockets = true; 50 - }; 51 - 52 - extraConfig = "proxy_ssl_server_name on;"; 53 - }; 54 - }) 55 - 56 - (mkIf cfg.spindle.enable { 57 - tangled.spindle = { 58 - enable = true; 59 - 60 - server = { 61 - inherit (cfg) owner; 62 - hostname = cfg.spindle.domain; 63 - }; 64 - }; 65 - 66 - 67 - # Create proxy entry 68 - nginx.virtualHosts.${cfg.spindle.domain} = { 69 - enableACME = true; 70 - forceSSL = true; 71 - 72 - locations."/" = { 73 - proxyPass = "http://${cfg.spindle.host}:${builtins.toString cfg.spindle.port}"; 74 - proxyWebsockets = true; 75 - }; 76 - 77 - extraConfig = "proxy_ssl_server_name on;"; 78 - }; 79 - }) 80 - ]; 81 - }; 82 - }
-59
modules/nixos/services/vaultwarden.nix
··· 1 - { 2 - config, 3 - lib, 4 - self, 5 - ... 6 - }: 7 - let 8 - inherit (lib) mkIf; 9 - inherit (self.lib.modules) mkServiceOpt; 10 - 11 - cfg = config.sylveon.services.vaultwarden; 12 - in 13 - { 14 - 15 - options.sylveon.services.vaultwarden = 16 - mkServiceOpt "Vaultwarden" { port = 8222; domain = "vault.xaiya.dev"; }; 17 - 18 - config = mkIf cfg.enable { 19 - # Create secrets 20 - age.secrets.vaultwarden-env.rekeyFile = "${self}/secrets/vaultwarden-env.age"; 21 - 22 - services = { 23 - vaultwarden = { 24 - enable = true; 25 - 26 - dbBackend = "postgresql"; 27 - 28 - config = { 29 - DOMAIN = "https://${cfg.domain}"; 30 - SIGNUPS_ALLOWED = false; 31 - 32 - ROCKET_ADDRESS = "::1"; 33 - ROCKET_PORT = cfg.port; 34 - DATABASE_URL = "postgresql://vaultwarden?host=/run/postgresql"; 35 - }; 36 - 37 - environmentFile = config.age.secrets.vaultwarden-env.path; 38 - }; 39 - 40 - postgresql = { 41 - ensureDatabases = [ "vaultwarden" ]; 42 - ensureUsers = [{ name = "vaultwarden"; ensureDBOwnership = true; }]; 43 - }; 44 - 45 - # Create proxy entry 46 - nginx.virtualHosts.${cfg.domain} = { 47 - enableACME = true; 48 - forceSSL = true; 49 - 50 - locations."/" = { 51 - proxyPass = "http://${cfg.host}:${builtins.toString cfg.port}"; 52 - }; 53 - 54 - extraConfig = "proxy_ssl_server_name on;"; 55 - 56 - }; 57 - }; 58 - }; 59 - }
-45
modules/nixos/style.nix
··· 1 - { 2 - inputs, 3 - config, 4 - lib, 5 - ... 6 - }: 7 - let 8 - prof = config.sylveon.profiles; 9 - in 10 - { 11 - # Some catppuccin configuration only work on nixos 12 - # This file might be changed because the idea of theming will be renewed 13 - 14 - imports = [ inputs.catppuccin.nixosModules.catppuccin ]; 15 - 16 - config = { 17 - catppuccin = { 18 - inherit (prof.graphical) enable; 19 - cache.enable = true; 20 - 21 - accent = "flamingo"; 22 - flavor = "latte"; 23 - }; 24 - 25 - # https://github.com/isabelroses/dotfiles/blob/88d1cb29e2da4ef977b4a06fcbf9a22efbd398a7/modules/nixos/catppuccin.nix#L21 26 - console.colors = lib.mkIf config.catppuccin.enable [ 27 - "1e1e2e" 28 - "f38ba8" 29 - "a6e3a1" 30 - "f9e2af" 31 - "89b4fa" 32 - "f5c2e7" 33 - "94e2d5" 34 - "bac2de" 35 - "585b70" 36 - "f38ba8" 37 - "a6e3a1" 38 - "f9e2af" 39 - "89b4fa" 40 - "f5c2e7" 41 - "94e2d5" 42 - "a6adc8" 43 - ]; 44 - }; 45 - }
-6
modules/nixos/system/boot/default.nix
··· 1 - { 2 - imports = [ 3 - ./generic.nix # configurations for when the system boots 4 - ./loader.nix # the loader that should be used 5 - ]; 6 - }
-81
modules/nixos/system/boot/generic.nix
··· 1 - { 2 - lib, 3 - config, 4 - self, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - inherit (lib.types) raw bool; 10 - inherit (lib) 11 - mkOverride 12 - mkDefault 13 - mkForce 14 - optionals 15 - ; 16 - 17 - inherit (self.lib.modules) mkOpt; 18 - 19 - cfg = config.sylveon.system.boot; 20 - prof = config.sylveon.profiles; 21 - in 22 - { 23 - options.sylveon.system.boot = { 24 - kernel = mkOpt raw pkgs.linuxPackages_latest "The kernel for our system."; 25 - raidSupport = mkOpt bool false "If raid configuration should be supported."; 26 - tmpOnTmpfs = mkOpt bool true "Save /tmp on your ram; Dont use this if you do not have much ram!"; 27 - }; 28 - 29 - config = { 30 - boot = { 31 - # Use the latest linux kernel 32 - kernelPackages = mkOverride 500 cfg.kernel; 33 - 34 - # whether or not to enable raid array support 35 - # this throws a warning if neither MAILADDR nor PROGRAM are set 36 - swraid.enable = mkDefault cfg.raidSupport; 37 - 38 - loader = { 39 - timeout = mkForce 5; 40 - 41 - # allow installation to modify EFI variables 42 - efi.canTouchEfiVariables = true; 43 - }; 44 - 45 - tmp = { 46 - # Save /tmp on your ram 47 - useTmpfs = cfg.tmpOnTmpfs; 48 - 49 - # If not using tmpfs, which is naturally purged on reboot, we must clean 50 - # we have to clean /tmp 51 - cleanOnBoot = mkDefault (!config.boot.tmp.useTmpfs); 52 - }; 53 - 54 - kernelParams = optionals prof.laptop.enable [ 55 - # allow systemd to set and save the backlight state 56 - "acpi_backlight=native" 57 - 58 - # Fix Color accuracy in Power saving modes 59 - "amdgpu.abmlevel=0" 60 - ]; 61 - 62 - initrd = { 63 - verbose = false; 64 - systemd.enable = true; 65 - 66 - availableKernelModules = [ 67 - "nvme" 68 - "xhci_pci" 69 - "ahci" 70 - "thunderbolt" 71 - 72 - "usbhid" # supports USB keyboards, mice, gamepads, etc. 73 - "sd_mod" # For STA and NVMe drives 74 - "sr_mod" # boot from or access optical media 75 - "uas" # Better performance for USB 3.0 76 - "usb_storage" # Enables USB storage devices 77 - ]; 78 - }; 79 - }; 80 - }; 81 - }
-53
modules/nixos/system/boot/loader.nix
··· 1 - { 2 - lib, 3 - config, 4 - self, 5 - ... 6 - }: 7 - let 8 - inherit (lib) 9 - mkIf 10 - mkMerge 11 - ; 12 - 13 - inherit (lib.types) str enum; 14 - 15 - inherit (self.lib.modules) mkOpt; 16 - cfg = config.sylveon.system.boot; 17 - in 18 - { 19 - 20 - options.sylveon.system.boot = { 21 - loader = mkOpt (enum [ 22 - "grub" 23 - "systemd-boot" 24 - ]) "systemd-boot" "What boot loader should be used"; 25 - 26 - grub = { 27 - device = mkOpt str "nodev" "The device that the bootloader should be installed on."; 28 - }; 29 - }; 30 - 31 - config = mkMerge [ 32 - (mkIf (cfg.loader == "systemd-boot") { 33 - boot.loader.systemd-boot = { 34 - enable = true; 35 - configurationLimit = 3; # just show the last 3 configurations that can be loaded 36 - consoleMode = "max"; 37 - 38 - # security hole, for more see: https://mynixos.com/nixpkgs/option/boot.loader.systemd-boot.editor 39 - editor = false; 40 - }; 41 - }) 42 - 43 - (mkIf (cfg.loader == "grub") { 44 - boot.loader.grub = { 45 - enable = true; 46 - inherit (cfg.grub) device; 47 - 48 - efiSupport = true; 49 - useOSProber = true; 50 - }; 51 - }) 52 - ]; 53 - }
-7
modules/nixos/system/default.nix
··· 1 - { 2 - imports = [ 3 - ./loginManager.nix # The DisplayManager/LoginManager that should be used 4 - ./sway.nix # Sway Window Manager 5 - ./boot # Boot configuration (loader and general) 6 - ]; 7 - }
-52
modules/nixos/system/loginManager.nix
··· 1 - { 2 - lib, 3 - self, 4 - config, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - inherit (lib) 10 - mkIf 11 - concatStringsSep 12 - getExe 13 - ; 14 - 15 - inherit (lib.types) enum nullOr; 16 - inherit (self.lib.modules) mkOpt; 17 - 18 - sessionData = config.services.displayManager.sessionData.desktops; 19 - sessionPath = concatStringsSep ":" [ 20 - "${sessionData}/share/xsessions" 21 - "${sessionData}/share/wayland-sessions" 22 - ]; 23 - 24 - cfg = config.sylveon.system.loginManager; 25 - prof = config.sylveon.profiles; 26 - in 27 - { 28 - options.sylveon.system.loginManager = mkOpt (nullOr (enum [ 29 - "greetd" 30 - "gdm" 31 - ])) (if prof.graphical.enable then "greetd" else null) "The login manager used by the system"; 32 - 33 - config = { 34 - services.greetd = mkIf (cfg == "greetd") { 35 - enable = true; 36 - 37 - settings = { 38 - default_session = { 39 - user = "greeter"; 40 - command = concatStringsSep " " [ 41 - (getExe pkgs.tuigreet) 42 - "--time" 43 - "--asterisks" 44 - "--sessions '${sessionPath}'" 45 - ]; 46 - }; 47 - }; 48 - }; 49 - 50 - services.displayManager.gdm.enable = (cfg == "gdm"); 51 - }; 52 - }
-58
modules/nixos/system/sway.nix
··· 1 - { 2 - lib, 3 - config, 4 - pkgs, 5 - self, 6 - ... 7 - }: 8 - let 9 - inherit (lib) 10 - mkIf 11 - concatStringsSep 12 - ; 13 - 14 - inherit (lib.types) bool; 15 - inherit (self.lib.modules) mkOpt; 16 - 17 - cfg = config.sylveon.system.graphical.sway; 18 - prof = config.sylveon.profiles; 19 - in 20 - { 21 - 22 - options.sylveon.system.graphical.sway.enable = 23 - mkOpt bool prof.graphical.enable # Sway is currently my only windowManager, because of that if I want a graphical interface I automatically want this display manager 24 - "Whether or not to enable the sway window manager"; 25 - 26 - config = mkIf (cfg.enable) { 27 - services.displayManager.sessionPackages = [ pkgs.swayfx ]; 28 - 29 - # Enable important services to work for some applications 30 - services.gnome.evolution-data-server.enable = true; 31 - services.gnome.gnome-online-accounts.enable = true; 32 - services.gnome.gnome-keyring.enable = true; 33 - 34 - xdg.portal.wlr.enable = true; 35 - 36 - # Sway cant load in in a virtual machine :( (at least fx) 37 - programs.sway = { 38 - enable = true; 39 - package = pkgs.swayfx; 40 - wrapperFeatures.gtk = true; 41 - 42 - extraSessionCommands = '' 43 - # export QT_QPA_PLATFORM=wayland ~ Enpass can not be opened with this set TODO ! 44 - 45 - export SDL_VIDEODRIVER=wayland 46 - export MOZ_ENABLE_WAYLAND=1 47 - 48 - export XDG_SESSION_TYPE=wayland 49 - export XDG_SESSION_DESKTOP=sway 50 - export XDG_CURRENT_DESKTOP=sway 51 - 52 - export WLR_RENDERER_ALLOW_SOFTWARE=true # Enabled for testing sway in a virtual machine 53 - 54 - ''; 55 - }; 56 - }; 57 - 58 - }
-47
modules/nixos/users.nix
··· 1 - { 2 - self, 3 - lib, 4 - config, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - inherit (lib.types) listOf str; 10 - inherit (lib.attrsets) genAttrs; 11 - inherit (lib) forEach; 12 - 13 - inherit (self.lib.modules) mkOpt; 14 - inherit (self.lib.validation) hasHomeModule; 15 - 16 - users = config.sylveon.system.users; 17 - in 18 - { 19 - options.sylveon.system.users = mkOpt (listOf str) [ ] "A list of users that should be installed"; 20 - 21 - config = { 22 - # Generate random passwords for users 23 - age.secrets = genAttrs (forEach users (name: "${name}-passwd")) (name: { 24 - rekeyFile = "${self}/secrets/${name}.age"; 25 - generator.script = "sha256"; 26 - }); 27 - 28 - # Create users from list 29 - users.users = genAttrs users ( 30 - name: 31 - { 32 - hashedPasswordFile = config.age.secrets."${name}-passwd".path; 33 - isNormalUser = true; 34 - shell = config.home-manager.users.${name}.programs.zsh.package; # This might change if introducing multiple shells 35 - 36 - extraGroups = [ 37 - "wheel" 38 - "nix" 39 - "docker" 40 - 41 - "video" 42 - "audio" 43 - ]; 44 - } 45 - ); 46 - }; 47 - }
-7
secrets/blmedia-passwd.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w AuhXlnDWyICnq85Vlzt4RcLtanatOVTgb7+NlHg15gCF 3 - 6dLBo9IWuC52KtLv7iSWf+9lK0X1G/bK3486F70D8RY 4 - -> Wow('[)-grease M[dj6 yv`FvUe[ g4i 5 - dc45jG5bTiDUN8hzV6ZufiOc3IiXPb9k 6 - --- wCW9Wiz7nitB58Tml94NRWbb3M1FrPCdt5vOYVmp2Kg 7 - ���VYԪP9����x���_�b��M�F˂*y��ȽW#�}�K6�k���)��4Fd�֗x��X^����A�d�vݕ�毓�������1O�~�d
-8
secrets/cloudflare-acme.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w AtClF28AWrLu8aiiQ5EKw6IOcm0e0yHhqjFBPD84HsdO 3 - arIKXcPxc1MusRMTch6z7gq2hTHTECXzjS/n0X1HWmM 4 - -> l-grease 9>eX MEKZ^P GIe)LdbG 5 - Nif3J651/o69tyTTmOdCqg/bzHdBq7JxECghVmoBcAUVZo71VRSOO3vTDIhMvfyt 6 - yrfC 7 - --- fJnaVWnWl1LsyOvoBrChXk7JrxhOiegwrEae/iRzZdU 8 - �ʎk^����XC�ˑ�f.r�20n�|.���^�����Y�P���0D�vsI��t�1k�#���r��Gw�^O�ش�6,�I&4�/���(��mL��f&
secrets/firefly.app-key.age

This is a binary file and will not be displayed.

secrets/gitlab-database-secret.age

This is a binary file and will not be displayed.

secrets/gitlab-jws-secret.age

This is a binary file and will not be displayed.

secrets/gitlab-otp-secret.age

This is a binary file and will not be displayed.

-8
secrets/gitlab-password.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w AjZVBqix3/cce8KA1P78g4Mz/a743TDf4W1RIQp1nty3 3 - W++09sjzUbgeV4YKUV6E5zbmeB3yF41fGYrn7U/CYng 4 - -> RD`5-grease w%gEP Rene %% 5 - 5+DV+M/PBs6vFm90Q7e97zgA2b7mCi1SbEyxeipfYtNp0YgHD/AoZBh+sYnlaRnN 6 - to8 7 - --- KfeJ0pRI706zlyHjEbJHCH9TNzJe7R+id6/C7U9yNbw 8 - r�b�����w���gk�ۯ��(�8�v��I���=�n=����#V�
-9
secrets/gitlab-record-deterministic-key.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w A8GSNCzOKoExteiuWt5DQP29UNmWOIvzCGh9RXVIWrQ1 3 - Z4RMtVrAZYb8faS/ZFH9mRUN/Q5GxRQCmOWOo2j7GdU 4 - -> =86-grease 5 - Rj/PE7PiUhwhcETyd74tOjVSyGhcWHasG5TXxtKIakg3rVcs4GbIZT0oNSwZFXLJ 6 - hwSwBt/tKFFyR7ttelrIEq62YkFdfTdu2yt5BJsAORJbFg 7 - --- wVZ+PJDuBjIOS+D5FUUsszm/WC/b2RpxsnMV1PKt/Fk 8 - *�)�R�ڇQ�� 9 - hI�8芻2jƇ�������7yD�on�4��1����f� ҏ�B"�MX<���O��!�
-7
secrets/gitlab-record-primary-key.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w A2aNcfDJbmlfdBrk+uk+ZbwKX/9qzQdZh0FmGUUVJRW/ 3 - J3DDCvK0EfyD1KD7E+hJ+x2FFGSnVnZWGC2ClsN3WrA 4 - -> +_-grease -^s 7uy8t u_ 5 - LdhyUoiU+2rBJP/y47vYfdc 6 - --- 5nIxqkVozJHQ87prlhkdPUcXswBi1uagOAHnfN56tKw 7 - A�� \}#�㊍�E�R�Ay�O 9\��U�R�p`m�s����C��$��"�a���p��M�)m�r!Ee3u�djs$��
-7
secrets/gitlab-salt.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w Ahs3j2H2xrOxe9PZlmMiPNv6TTOi4/FjTUToAnYpnq6D 3 - tjk2ACaLNtBnTvT5lYVInPp78+uWV2v6emsFhhrk7Hs 4 - -> 6?f{.-grease `!| g 5 - uuBfh/QUfpucyE4 6 - --- lCOjgC7oiA5VtPxOYLljmxeUlCdBPeSVPWna9UQ4BnQ 7 - ʍ�]�~W�d���AI��|1Kڰ��.n9�%�ՎY-le��������8��6�STi�pl��t��<�/�S�g�
secrets/glance-env.age

This is a binary file and will not be displayed.

-8
secrets/kitchenowl.env.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w A5HuYneAqZcgWt/Z8zx0OOwZ7QB08UTBhPVYo99n/qH0 3 - Sk8p2C5ES6Vk4ijpdjz2z4RVtZtik5mtDD8XfFTnf8w 4 - -> Bmp-grease 5 - rj7d5im+G1S1fRTn3kCQjgCrRXh74MNkPUSQhfe2 6 - --- 53OqvQKFGtz55SoMXDZWWHWTt5F6Ard566G1wojIdfM 7 - �X t`{�\K�<ɕ�7��_�������m��?e�)qM~��#�|g��� 8 - _.Y}�$��\���TI�npU�i䚏}M:a#8,0�Z��[�p!=N���T�
-9
secrets/piper-env.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w Ayqd3HhxKkUWfKgQPMYVAubp9epHJyniP9sKb9fpTBLY 3 - aaAyZ4lqXYArnlRiunmEg869BSFXj4YbyyTnRxlpVDU 4 - -> po}y-grease ;IcPr [r|%9 {2xK,: 5 - KO+GNHYFrAOMlGhb2fwHNqovaDtox4IfDxOzom407c2gOl56lSq7e2odJYMdUvf2 6 - /aClPQoFOAGVipSrkRU 7 - --- AqUx53QjjAlOllgZzPC/3S6YmSXmqYYioxeMqmYHuds 8 - B$�P���B�a37�u�L��pa}���dN�f�J�#��.;�N�7:�n� 9 - �s׮���]o��b5�g�a-*tw�7�v�H ���* �o�\��6�����L�)��s�Fk��㡯)LѬDfқ��\J���� �I 0���!i;ya�*���ީt�Nj�g�eKr�a��&��8Z�$����:m٩
-7
secrets/semiko-passwd.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w Aj8ZB81brXfIiM22UaKols/3yzghm43U0CBRzQBvWBHE 3 - L0ZEdUaWcOb0E+4Ce1VueT8v2Sh8RtKsEDU93diduw8 4 - -> @A-grease =w XWO =m, 5 - PI22w27TX+8xl4LY6Y5cpOP1M0VllHpHg/8D7WOF1aa1K83pHhS1XEw 6 - --- 6cpZMvVESyPpMMv8pfsl1TA5w47YSLmiuNfWayIdCjY 7 - �Bv~��;��Ȭ]LVN������7��;�Ƶ>R��6o�Q=�Df��o䊀>��?Y��38�ݜ4a>����l�'��Պ1��{9t�&�+�pc�q%�m���<
secrets/ssh-bb.age

This is a binary file and will not be displayed.

secrets/ssh-gh.age

This is a binary file and will not be displayed.

secrets/ssh-gl-xy.age

This is a binary file and will not be displayed.

secrets/ssh-tangled.age

This is a binary file and will not be displayed.

secrets/ssh-xg.age

This is a binary file and will not be displayed.

-8
secrets/tailscale-apikey.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w Aq7/MZGAZgXM6DRJSECktijxA1g0BGZl5NKv+55wqsBp 3 - 5QUAEHefcW2wK7jC9ujqaaYl2qynd581TMT7Wx12ow8 4 - -> e^D`gVb-grease hb;Dq\u 5 - vo+wuXIZ4qghC8JM+9rjv4rmClv0ZHiu9fXylDajeqNwH3FQ4Bc77xsmkUG2J9OM 6 - 8tC1A5sh4UlQQK2FRAKRR9NTYg 7 - --- qEFSv4E7D7FRUvdXjp0GuRWTFqVHP/PlTKe3Nx0cvy8 8 - �Sa���!���Ļ�b,�o��'��t*[�:���Jd�9��9r<&bq�l5���u8���j~�� h�+��iB+��}������F��������9U4�Eh
-8
secrets/vaultwarden-env.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w AoDUegHJQLqotExpZJhNFjLQtojdsWHdFWntR9RSPDb2 3 - XXxRQKf6YoW6pf1xS9IkHzXuclMewDAs91FmkUnaEQA 4 - -> 2n/r0#c,-grease 5 - B8kEo547zz5C4IYuMdsRRoGbyNf59Hj1Na3RlQA4TEk6gw1x34xL51kQ+NicimV0 6 - IKRPBs53fc8iU9uL4kE8TFfmEhRoaHZgHwJ6s9dMajpUkZH7OwBl+xiiXV4NtAw 7 - --- uaMyb1l+ZpHmfrhaEPEELTAP/n8PKY2tysgHDKpY0to 8 - �.L�n�E��_�q�[N��s)��wW�c5QYo�;xC�$v�^&�������J��‰�?����ŒN4gT�ٙ--�h��������ݳ!���ܻ#��3^>$4XJŚ�������e���A�����6R��(�v����p��]�҂������IP �^���M�8�s�]TT='�
-7
secrets/xaiya-passwd.age
··· 1 - age-encryption.org/v1 2 - -> piv-p256 3eMZ2w AoouW4vys1P4dW811IHo36G9fLe5ZahlRTySpn3XEVwn 3 - MnnUG4DREH800nyUvSHZ3ojNXtTcg2+mFACDIpLBJEk 4 - -> QB-grease Dk@? 5 - VetoNyM 6 - --- 0R+AB5oQmDh9tcwwltkKFr3wPxh5kfl3xOPQY/AVLm8 7 - ��)��m��\��Mm��A$u�W:;���:ϩ��%���z 3����X �����Iܱ!-��bM"8�-�&i+��ۈ��?�C0����~[�l���
secrets/yubikey-pam_u2f.age

This is a binary file and will not be displayed.

+1 -47
systems/apricot/default.nix
··· 1 1 { 2 - pkgs, 3 - inputs, 4 - config, 5 - ... 2 + 6 3 }: 7 4 { 8 - imports = [ 9 - ./fileSystem.nix 10 - ]; 11 5 12 - networking.hostName = "apricot"; 13 - 14 - sylveon = { 15 - profiles.server.enable = true; 16 - 17 - device.cpu = "intel"; 18 - 19 - system = { 20 - users = [ "semiko" ]; 21 - }; 22 - 23 - services = { 24 - # General services 25 - postgres.enable = true; 26 - nginx.enable = true; 27 - docker.enable = true; 28 - 29 - # Docker based services 30 - kitchenowl.enable = true; 31 - 32 - # System-managed services 33 - glance.enable = true; 34 - 35 - vaultwarden.enable = true; 36 - 37 - tangled = { 38 - knot.enable = true; 39 - spindle.enable = true; 40 - }; 41 - piper.enable = true; 42 - 43 - radicale.enable = true; 44 - 45 - plex.enable = true; 46 - minecraft.enable = true; 47 - }; 48 - }; 49 - 50 - nixpkgs.hostPlatform = "x86_64-linux"; 51 - system.stateVersion = "25.05"; 52 6 }
+1 -36
systems/pineapple/default.nix
··· 1 1 { 2 - pkgs, 3 - inputs, 4 - config, 5 - ... 2 + 6 3 }: 7 4 { 8 - imports = [ 9 - inputs.nixos-hardware.nixosModules.framework-16-7040-amd 10 - ./fileSystem.nix 11 - ]; 12 5 13 - networking.hostName = "pineapple"; 14 - 15 - sylveon = { 16 - profiles = { 17 - graphical.enable = true; 18 - gaming.enable = true; 19 - laptop.enable = true; 20 - }; 21 - 22 - device = { 23 - cpu = "amd"; 24 - gpu = "amd"; 25 - }; 26 - 27 - system = { 28 - users = [ 29 - "xaiya" 30 - "blmedia" 31 - ]; 32 - }; 33 - 34 - services = { 35 - docker.enable = true; 36 - }; 37 - }; 38 - 39 - nixpkgs.hostPlatform = "x86_64-linux"; 40 - system.stateVersion = "25.05"; 41 6 }