255 Commits
Author SHA1 Message Date
andreas ad17b67774 add better wallpaper engine gui 2026-10-20 22:25:24 +02:00
andreas 6b8778c6be code server 2026-10-20 22:24:54 +02:00
andreas d2b4e9d1f1 WIP 2026-10-17 11:43:55 +02:00
andreas 36fbaf137e Harden RTL8125 recovery checks and reapply EEE settings 2026-10-17 10:04:48 +02:00
andreas 8c2dbe4775 Update RTL8125 driver to 9.018.00 2026-10-17 07:01:38 +02:00
andreas 7c00c133ab transition to nixos stable 2026-10-17 06:50:58 +02:00
andreas 3062ef1608 update millennium 2026-10-15 15:08:12 +02:00
andreas ac7a47c26a module for recovering shitty realtek controller when it gets stuck in bugged power state 2026-10-15 10:48:08 +02:00
andreas 74d3d6870d WIP 2026-10-15 08:52:31 +02:00
andreas ac9eeb1f1c enable millennium for steam 2026-09-30 19:54:22 +02:00
andreas 666b7ab737 move comment to appropriate block 2026-09-30 19:53:54 +02:00
andreas bcfada020b enable distrobox 2026-09-30 19:53:42 +02:00
andreas d79713972e don't disable power saving 2026-09-30 17:53:28 +02:00
andreas 441d029eb6 enable ptyxis terminal on gnome 2026-09-30 17:53:08 +02:00
andreas 17933af881 fix log spam 2026-09-30 15:40:46 +02:00
andreas c4693f0ee6 fix url handlers for steam 2026-09-30 02:27:58 +02:00
andreas 813e474bc1 add wp engine gui 2026-09-28 01:04:34 +02:00
andreas 333bed459d updated config for fresh install 2026-09-19 07:04:41 +02:00
andreas cd454434d7 add gnome compatible wallpaperengine 2026-09-18 12:25:28 +02:00
andreas e89ee3c559 patch low contrast icons 2026-09-18 12:24:49 +02:00
andreas 0dad448f97 WIP 2026-09-16 08:11:52 +02:00
andreas cc0cc15ee5 WIP 2026-09-16 08:11:41 +02:00
andreas 5596fb8a9c remove verbose messaging 2026-09-05 10:14:11 +02:00
andreas dce21780ac cursor patch 2026-09-05 10:12:37 +02:00
andreas 310fc047b2 verbose debug logging 2026-09-04 01:35:39 +02:00
andreas c9725d3b78 mutter tearing patches 2026-09-03 10:10:52 +02:00
andreas 777acf7503 plan 2026-09-03 06:43:34 +02:00
andreas e6fd27f8ee bump and remove GOL 2026-09-03 06:42:53 +02:00
andreas f14680dfbf delete hello test package 2026-09-03 06:19:21 +02:00
andreas ca050d08d3 update package hash 2026-09-03 06:17:32 +02:00
andreas d0f23a0e7f update package hash 2026-09-03 06:17:05 +02:00
andreas 1cdedee438 formatting 2026-09-03 06:16:57 +02:00
andreas eac6e5ca97 fix mullvad on latest nixpkgs 2026-09-03 06:16:41 +02:00
andreas 819cbd3606 fix deprecation warning 2026-09-03 06:16:01 +02:00
andreas 65e6e7f747 enable cinnamon 2026-08-29 00:22:16 +02:00
andreas 36dbc3229d add tigervnc import 2026-08-29 00:22:10 +02:00
andreas 2f3e8c14f2 shader compiler 2026-08-29 00:21:53 +02:00
andreas 14b6e989f6 gnome extensions 2026-08-29 00:21:40 +02:00
andreas 64324ab150 add vscode-modernized 2026-08-29 00:21:23 +02:00
andreas c56a82c0b1 delete mesa-gcc overlay 2026-08-29 00:21:10 +02:00
andreas 9e686b3f8d faugus 2026-08-29 00:20:57 +02:00
andreas a512855fa9 add cinnamon 2026-08-29 00:20:49 +02:00
andreas 4dbe74854f Merge branch 'stableconfig' into trunk 2026-05-30 09:47:56 +02:00
andreas 2a543c6e93 Switch to sddm to fix gdm regression causing plasma x11 to not work properly 2026-05-30 09:47:17 +02:00
andreas 3f68e02f6a add freecad 2026-05-30 09:42:27 +02:00
andreas 89e04df44a update lock 2026-05-28 17:36:07 +02:00
andreas d0546b20ea remove trilium-next-pr 2026-05-28 17:35:20 +02:00
andreas a652234c7c update flake lock 2026-05-28 17:18:18 +02:00
andreas b867dd12c4 remove unneeded triliumnext flake input 2026-05-28 17:18:12 +02:00
andreas 2fc09a965a upgraded mesa-gcc 2026-05-28 17:17:49 +02:00
andreas e3d7538fa3 "mbedtls" now points to "mbedtls_2", and mbedtls_2 has been removed. Removing overlay. 2026-05-28 17:17:12 +02:00
andreas d64b2f8d6d upgraded mesa with upstream libdrm 2026-05-28 17:16:11 +02:00
andreas 093623dad7 fonts 2026-05-12 23:56:20 +02:00
andreas f6c2c48c7d fonts 2026-05-12 23:56:13 +02:00
andreas b7c6a2fce5 WIP stuff 2026-05-12 23:56:04 +02:00
andreas a692c1353d bump flake and fix problems 2026-05-07 16:58:02 +02:00
andreas 589eefd527 upgrade mesa 2026-05-07 16:57:48 +02:00
andreas 981d351744 add blender 2026-04-29 11:31:04 +02:00
andreas 0fae6cfc06 update lockfile 2026-04-29 11:30:34 +02:00
andreas 0b47961483 add ; 2026-04-22 03:35:28 +02:00
andreas 01a512e3fd fix broken syntax 2026-04-22 03:35:15 +02:00
andreas 631b28d399 add ; 2026-04-22 03:34:35 +02:00
andreas 96045f57c4 migrate predevicecommands to initrd systemd service 2026-04-22 03:34:10 +02:00
andreas 86d717fad1 bump flake lock 2026-04-02 05:26:42 +02:00
andreas a7392b3c30 remove gcc 14 dependency 2026-04-02 05:25:32 +02:00
andreas e72154ab65 delete libvirt python fix and downgraded qemu-full to prevent recompilation every time 2026-04-02 05:25:13 +02:00
andreas 47acfb12ff specify mesa-git-unstable to specific rev rather than main 2026-04-02 04:26:41 +02:00
andreas 8a7229cea8 update nixpkgs 2026-04-02 04:21:35 +02:00
andreas 123b55cdf1 mullvad and firewall 2026-04-02 04:19:47 +02:00
andreas e4cd967f06 update steam package 2026-04-02 04:19:31 +02:00
andreas 715c3c07b5 gnome file sharing shit 2026-04-02 04:19:05 +02:00
andreas 64a464af49 fix realtek eee disablement 2026-03-26 04:16:20 +01:00
andreas 5c710e0cb6 enable hyprland option 2026-03-26 04:13:16 +01:00
andreas 26554b8261 remove vulkan icd hardcode and enable tearing 2026-03-26 04:11:20 +01:00
andreas 75cecb0386 override DP out on motherboard too 2026-03-22 05:27:48 +01:00
andreas 3d8f717c7a new edid 2026-03-22 05:27:25 +01:00
andreas 5807e0076a update mesa-git 2026-03-22 05:26:45 +01:00
andreas f80b6295ac wip - buildable state 2026-03-22 03:13:47 +01:00
andreas eb90b797df bump kernel 2026-03-22 03:12:26 +01:00
andreas ed06b07960 wip - buildable state 2026-03-22 03:10:21 +01:00
andreas bf7f6a1218 wip - buildable state 2026-03-22 03:04:07 +01:00
andreas 6d0f92fad6 switch out neofetch for hyfetch because it has been deprecated 2026-03-16 16:12:40 +01:00
andreas 164ed80931 firewall rules 2026-03-16 16:07:32 +01:00
andreas 4a9a71bad1 commit working state 2026-02-28 16:35:41 +01:00
andreas b9da82b956 attempt making pytorch work 2026-02-28 16:34:56 +01:00
andreas bb596a794e attempt making pytorch work 2026-02-28 16:34:38 +01:00
andreas 476cab8c9d forward 9090 to vm 2026-02-28 16:34:11 +01:00
andreas d57aeb9ef3 working passthrough support 2026-02-28 16:33:52 +01:00
andreas aaba57ee2f add nv gpu passthrough vm setup 2026-02-26 02:47:09 +01:00
andreas 2332cc1e9d fix linux-wallpaperengine launch params 2026-02-18 02:59:22 +01:00
andreas df06c641c2 add rivalcfg udev rules. 2026-02-18 02:59:08 +01:00
andreas 2880272e2a add rivalcfg 2026-02-18 02:57:50 +01:00
andreas d3896b5817 enable cs-tools 2026-02-18 02:57:41 +01:00
andreas 522d87f51d add cs-demo-manager appimage package, and group with postgresql for cs-tools module. 2026-02-18 02:57:25 +01:00
andreas 578f246519 working mesa-git 2026-02-12 23:54:34 +01:00
andreas 271658bf4d further tweaks 2026-02-12 20:16:32 +01:00
andreas fbe9f8b3ec attempt tweaks 2026-02-12 20:16:19 +01:00
andreas 149641c87b fix override 2026-02-12 20:16:08 +01:00
andreas 21782c109e revert intel 2026-02-12 20:15:59 +01:00
andreas 8ee971cbf8 add mpv as home package 2026-02-12 20:14:42 +01:00
andreas 1ed2b9c130 clean up 2026-02-12 20:14:32 +01:00
andreas 31102ae362 change to i915 2026-02-12 19:29:42 +01:00
andreas 33893cafd8 Move gamescope stuff to steam module 2026-02-12 19:28:53 +01:00
andreas 61e41fca0a add lact 2026-02-12 19:28:04 +01:00
andreas b90bfdaed8 merge disable efficient energy mode for dogshit realtek chipset 2026-02-12 19:27:47 +01:00
andreas 9eff6a3a6a add i915 based intel hardware module 2026-02-12 19:26:54 +01:00
andreas fbbd74bfae commit mesa overlay 2026-02-09 23:25:56 +01:00
andreas fcf8efe577 add reaper 2026-02-04 03:33:15 +01:00
andreas ec3d963494 add discord and betterdiscordctl 2026-02-04 03:33:02 +01:00
andreas 82b9b48493 split up to multiline inputs for better diffing 2026-02-04 03:31:04 +01:00
andreas e03b3d229d update file-organization module 2026-02-04 03:30:34 +01:00
andreas 06a3b10079 delete homes belonging to deleted system configs 2026-02-04 03:29:52 +01:00
andreas 613a9c5540 add file organizaiton module 2026-02-04 00:03:30 +01:00
andreas 0c754590f1 enable JACK support 2026-02-02 23:52:49 +01:00
andreas 5474251a64 fix typo 2026-02-02 10:01:09 +01:00
andreas dd1aa0957e add samsung monitor edid kernel param config 2026-02-02 09:59:55 +01:00
andreas ddce79071d add samsung monitor edid 2026-02-02 09:50:19 +01:00
andreas fd8f18eeec undo accidental closing bracket removal 2026-01-27 07:26:10 +01:00
andreas 501e35ae45 remove non-functional controller fix 2026-01-27 07:25:42 +01:00
andreas 65fc0ace0e cachy kernel 2026-01-27 07:24:24 +01:00
andreas dc8f70b344 bump flake inputs 2026-01-27 01:49:45 +01:00
andreas 5cc90d85f7 supposedly working 360 wireless controller fix 2026-01-27 01:49:31 +01:00
andreas 75491e90e7 enable performance tuning 2026-01-27 01:24:33 +01:00
andreas 819b81d8d2 fix mistake from copypasting boilerplate 2026-01-27 01:23:30 +01:00
andreas fe4f291ef8 fix typo in dir name 2026-01-27 01:23:07 +01:00
andreas da46fc7eca allow touching efi vars 2026-01-27 01:20:49 +01:00
andreas 58206b4c80 add performance tuning stuff 2026-01-27 01:20:40 +01:00
andreas 1e02adf3cf update vesktop appimage 2026-01-27 01:20:15 +01:00
andreas 15b75b0010 override framerate 2026-01-27 01:20:05 +01:00
andreas 6d34c7dbd0 update boot partition to new drive 2026-01-26 23:04:10 +01:00
andreas 8681424692 fix renamed warning 2026-01-23 20:05:07 +01:00
andreas 0956fccdc6 fix moved to top-level warning 2026-01-23 20:03:58 +01:00
andreas 1e187a7cee removed doubled services keyword 2026-01-23 20:03:04 +01:00
andreas 9dab3f0608 fix semicolon 2026-01-23 20:02:07 +01:00
andreas 26d59c7ca6 reference local linux-wallpaperengine package 2026-01-23 20:00:47 +01:00
andreas 9bc5922e49 remove per-home gamescope declaration 2026-01-23 20:00:29 +01:00
andreas 2e3ef5fd47 add global gamemode support 2026-01-23 19:59:54 +01:00
andreas 415f3bb057 add kitty as required for default hyprland config 2026-01-23 19:59:42 +01:00
andreas bcc2ca5cf0 fixed another omitted semicolon 2026-01-23 19:58:54 +01:00
andreas c202dbcdec add htop 2026-01-23 19:58:38 +01:00
andreas f3b6a5cddd housekeeping 2026-01-23 19:58:32 +01:00
andreas 191733ec51 trying steam fixes 2026-01-23 19:57:11 +01:00
andreas 881a047c75 linux-wallpaperengine version upgrade 2026-01-23 19:56:52 +01:00
andreas 95c1b53699 fix omitted semicolon 2026-01-23 19:55:38 +01:00
andreas aecc12a945 fix korganizer 2026-01-23 19:54:57 +01:00
andreas b5afdc5817 use desktop-environment module 2026-01-23 19:54:23 +01:00
andreas ab9acedf49 working desktop environment config 2026-01-23 19:53:43 +01:00
andreas 0e31504687 use cosmic greeter 2026-01-23 19:53:22 +01:00
andreas 85147137b0 intel x11 fixes 2026-01-22 09:30:51 +01:00
andreas 914b88ac82 deprecate old hardware config files 2026-01-22 09:30:27 +01:00
andreas 646f35e5d4 add more up to date wallpaperengine 2026-01-22 09:25:26 +01:00
andreas 3ed8d601a2 desktop-environment 2026-01-22 09:18:56 +01:00
andreas 02a99d31fa change to multiline for better diffs 2026-01-20 16:45:43 +01:00
andreas 2be93bd323 try to fix akonadi 2026-01-18 18:45:29 +01:00
andreas 6a43859425 use zen kernel 2026-01-18 18:45:23 +01:00
andreas 439cb8200f enable intel gpu tools 2026-01-15 18:15:45 +01:00
andreas a812e53f06 remove nixpkgs.follows 2026-01-15 17:37:06 +01:00
andreas 8ccc4d65a9 patch problems 2026-01-15 17:36:12 +01:00
andreas 581a701151 add thunderbird and aagl 2026-01-15 16:24:35 +01:00
andreas 5fc4b9e0f3 solved I guess 2025-12-24 07:05:26 +01:00
andreas 80e89c531d resolve deprecation warning 2025-12-24 06:26:39 +01:00
andreas f607c99ec4 remove typo 2025-12-24 06:23:40 +01:00
andreas c92ea31991 update flake lock 2025-12-24 06:22:04 +01:00
andreas e60e6bc8c0 changes 2025-12-24 06:21:23 +01:00
andreas 3ca9b0533b update flake 2025-12-23 06:32:02 +01:00
andreas 55b5521518 remove wallpaper engine kde plugin 2025-12-23 06:30:42 +01:00
andreas 39f1253900 anikki 2025-12-23 06:27:54 +01:00
andreas 4ff1acc318 fix gnome-keyring 2025-12-23 02:13:27 +01:00
andreas 261b704d31 enable docker 2025-12-23 02:02:28 +01:00
andreas 48b7079b32 autolaunch wallpaperengine 2025-12-23 02:02:17 +01:00
andreas 480a1598a6 update gnome keyring config 2025-12-23 02:02:07 +01:00
andreas beb1c9eb75 update ethernet driver config 2025-12-23 02:00:32 +01:00
andreas 12fccea34f gnome-keyring configuration 2025-12-23 01:59:50 +01:00
andreas c0c37d5fca unsuccessful attempt to make droidcam-obs work despite dependency issues 2025-12-17 18:17:46 +01:00
andreas df73e98b85 updated flake lock 2025-12-16 00:16:10 +01:00
andreas e95ab8bd3e gaming packages 2025-12-15 23:30:12 +01:00
andreas c6104a7a9e keychron fixes 2025-12-15 23:30:05 +01:00
andreas f9b40222a0 add plugdev for keychron launcher 2025-12-15 23:29:43 +01:00
andreas 866efb4718 fixed redundant line 2025-12-14 19:51:26 +01:00
andreas 6463a9e869 intel only 2025-12-14 19:47:03 +01:00
andreas 105c9737f6 clean up formatting 2025-12-14 19:46:50 +01:00
andreas 089bf927e0 gamescope session related tweaks 2025-12-14 19:44:19 +01:00
andreas b4bc7490fc add ntfs3g 2025-12-14 19:43:22 +01:00
andreas 0dd087f4b8 steam related packages 2025-12-14 19:43:14 +01:00
andreas f60718619f remove vesktop 2025-12-14 19:42:37 +01:00
andreas c47509ef99 fix whitespace 2025-12-14 19:42:13 +01:00
andreas c5767b775b enable vesktop appimage 2025-12-14 19:41:06 +01:00
andreas ef4869d2cc add localsend package 2025-12-14 19:40:35 +01:00
andreas 0207f790ef add libreoffice package 2025-12-14 19:40:19 +01:00
andreas b4500a59c1 add hyfetch package 2025-12-14 19:40:07 +01:00
andreas e6f20d1d69 remove broken vesktop package 2025-12-14 19:39:31 +01:00
andreas 51e5e00ab6 add keychron keyboard config 2025-12-14 19:38:08 +01:00
andreas 31e86618c3 improved/ fixed 2025-12-14 19:37:52 +01:00
andreas e28a22ec11 moved 2025-12-14 19:36:06 +01:00
andreas 93c3ae48c5 add keychron keyboard config module 2025-12-14 19:31:40 +01:00
andreas 1abec387cd fixes 2025-12-14 17:25:47 +01:00
andreas 081ffed1e1 vesktop appimage instead of nixpkgs 2025-12-14 17:25:31 +01:00
andreas 583a1a1905 add nvidia only config 2025-12-08 18:43:36 +01:00
andreas 48e9ae18ef remove unused patch file 2025-11-30 04:22:45 +01:00
andreas 793b7e1a30 fixed wallpaper engine 2025-11-30 04:22:20 +01:00
andreas 051b48d3ba changes 2025-11-30 03:48:54 +01:00
andreas 47ff5618e9 changes 2025-11-30 03:48:43 +01:00
andreas ad7fb01791 remove remaining cosmic references 2025-11-30 00:32:38 +01:00
andreas 1e6daa09f6 updates 2025-11-30 00:32:11 +01:00
andreas 1557caba8b add intel nvidia hybrid graphics 2025-11-29 23:12:09 +01:00
andreas 47d716c2de disable edid on DP-4 2025-07-15 11:27:06 +02:00
andreas d3ebbadc27 add qtwebengine 2025-07-15 10:13:39 +02:00
andreas 02aa649bb1 fix2 2025-07-15 10:06:49 +02:00
andreas 41321a5364 fix 2025-07-15 10:04:49 +02:00
andreas 95388efbc8 fix derivation 2025-07-15 10:00:30 +02:00
andreas 5e0036e591 added mpv dependencies 2025-07-15 09:44:33 +02:00
andreas 37309cd66e bla 2025-07-15 09:19:01 +02:00
andreas 1354042094 bla 2025-07-15 03:49:00 +02:00
andreas bd75aecb14 bla 2025-07-15 03:45:46 +02:00
andreas 3a59ef19f6 changes 2025-07-15 03:19:01 +02:00
andreas 499260d83f Remove shit 2025-07-15 02:43:16 +02:00
andreas b78ba76cd3 changes 2025-07-15 02:42:32 +02:00
andreas 093feba49d changes 2025-07-15 01:30:58 +02:00
andreas afd823c23e disable powermanagement 2025-06-06 02:33:34 +02:00
andreas b1e3fa601d bla 2025-06-06 02:21:15 +02:00
andreas 2f07912f1b bla 2025-06-06 02:16:42 +02:00
andreas 8701b72258 bla 2025-06-06 01:57:13 +02:00
andreas 8c305e3703 bla 2025-06-06 01:51:26 +02:00
andreas 86f61e9547 bla 2025-06-06 01:46:48 +02:00
andreas ce387ab5db bla 2025-06-06 01:36:55 +02:00
andreas 7d07de663d add qemu 2025-05-31 23:15:36 +02:00
andreas f19a3d129c use nvidia again 2025-05-31 23:15:12 +02:00
andreas 89fde794b8 rdp and lanzaboot 2025-04-20 23:20:04 +02:00
andreas f451095a92 enable xrdp 2024-12-31 17:59:42 +01:00
andreas 3fad8fcf16 try to fix x11 on amd only 2024-12-31 17:58:35 +01:00
andreas 415ea15ea0 commit changes 2024-12-31 17:58:22 +01:00
andreas 48f1d774c9 add amd-igpu only config 2024-12-31 17:52:10 +01:00
andreas b4e3457721 clean up redundant lines 2024-12-10 09:22:22 +01:00
andreas 21f5a618fa move steam to shared module 2024-12-10 09:21:33 +01:00
andreas 99b30e124a add triliumnext 2024-12-10 09:18:29 +01:00
andreas b891969c7e add remmina 2024-12-10 09:18:17 +01:00
andreas 1cb2a609a8 add shell 2024-12-10 09:18:02 +01:00
andreas 4ff075bce4 add trilium-next 2024-12-10 09:17:50 +01:00
andreas a496d0451b add another sops master key 2024-12-10 05:16:09 +01:00
andreas c606f39f8f ignore vscode settings json 2024-12-10 03:58:50 +01:00
andreas b779b84242 try to bring back gnome remote desktop (bugged upstream, no bueno, wait for fix) 2024-12-10 03:58:32 +01:00
andreas 8c0ecd90e8 clean up formatting 2024-12-10 03:57:00 +01:00
andreas 092691c665 list all inputs 2024-12-10 03:56:20 +01:00
andreas 718ca864e3 Add shared system config module 2024-12-10 03:53:46 +01:00
andreas 4454eb84fb whatever, still sorta works 2024-12-09 23:35:27 +01:00
andreas f7823d9ad3 stable x11 config 2024-12-09 22:25:47 +01:00
andreas 72cac1e8c6 working x11 prime config 2024-12-07 21:05:09 +01:00
andreas cf95749f84 Add synergy ports to firewall config 2024-12-07 21:04:07 +01:00
andreas 9ca20b8e24 bla 2024-12-07 18:03:00 +01:00
andreas 2f5a44b112 fix error 2024-12-07 18:02:49 +01:00
andreas c29cae486e fix warning 2024-12-07 18:02:43 +01:00
andreas 769e1c166a try to fix modesetting 2024-12-07 18:02:36 +01:00
andreas 5a36dbc083 enable new config 2024-12-07 17:47:05 +01:00
andreas b8d94f015f add new graphics config for testing 2024-12-07 17:46:30 +01:00
andreas 0aa885e2e4 synergy 2024-12-07 17:46:18 +01:00
61 changed files with 3337 additions and 742 deletions
+1
View File
@@ -0,0 +1 @@
.vscode/settings.json
+2
View File
@@ -3,9 +3,11 @@ keys:
- &andreas age19j24x89dfh4f7v58c8k64yupqas4f7qkkyper7yj9dd7vqwvvq0qkyvhxk # generated using cli - &andreas age19j24x89dfh4f7v58c8k64yupqas4f7qkkyper7yj9dd7vqwvvq0qkyvhxk # generated using cli
- hosts: - hosts:
- &th0nkpad-nixos age1ma8x6wugvc40mkst33mejq0m6r44jk6zwjjun3znyer5nztgn9vs0nwjx4 # derived from ssh host key - &th0nkpad-nixos age1ma8x6wugvc40mkst33mejq0m6r44jk6zwjjun3znyer5nztgn9vs0nwjx4 # derived from ssh host key
- &drivebystation-nix age1s5qwsuc3e4m3c4w5hl6tyja70w273gr60j9j9dcpc6mz69lemg3qpwud3h #derived from ssh host key
creation_rules: creation_rules:
- path_regex: secrets.yaml$ - path_regex: secrets.yaml$
key_groups: key_groups:
- age: - age:
- *andreas - *andreas
- *th0nkpad-nixos - *th0nkpad-nixos
- *drivebystation-nix
+102
View File
@@ -0,0 +1,102 @@
## CODE GENERATION INSTRUCTIONS
You are tasked with integrating patches into my kernel to make the tearing protocol work on Wayland with my intel B580.
## THINGS TO DO:
Plan out how you're going to do the following. I will inspect your plan and then authorize it.
- Custom build this MR: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3797
- Fix KDE tearing on Intel Graphics using kernel patches for libdrm. Use these resources to research:
- https://bugs.kde.org/show_bug.cgi?id=520549
- https://gitlab.freedesktop.org/drm/xe/kernel/-/work_items/8597#note_3567675
- https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/13834 (this one has patches that supposedly fix the problem.)
# Plan here:
- [ ] 1. Record the current package and kernel baselines.
- Evaluate the locked versions of Mutter, GNOME Shell, libdrm, and the selected CachyOS kernel.
- Confirm that the Intel Arc B580 (`8086:e20b`) is using the `xe` driver.
- Save the current working kernel and NixOS generation as the rollback baseline.
- [ ] 2. Pin all experimental upstream sources.
- Pin Mutter merge request !3797 to a specific commit instead of following its branch.
- Record the MR base commit and verify whether it is compatible with the Mutter version in the locked nixpkgs input.
- Identify the exact revisions of the Intel async-flip and `IN_FORMATS_ASYNC` kernel patches referenced by the i915 and Xe work items.
- Use fixed-output hashes for every fetched patch or source archive.
- [ ] 3. Determine which Intel DRM patches are still required.
- Inspect the selected CachyOS kernel source for patches that have already been merged or backported.
- Select only the missing patches needed to expose async-capable formats and prevent unchanged or disabled planes from incorrectly rejecting an async atomic commit.
- Confirm that the selected changes affect the Intel display code shared by `xe` and `i915`, and therefore apply to the B580 even when the original report is filed under i915.
- Document the required patch order and each patch's upstream URL and revision.
- [ ] 4. Add a dedicated, reversible Wayland-tearing overlay or module.
- Keep the experimental Mutter and kernel overrides together in a new, clearly named repository file.
- Scope the override to `drivebystation-nix` where practical.
- Provide a single enable switch or isolated import so the experiment can be disabled without editing generated hardware configuration.
- Preserve all unrelated existing worktree changes.
- [ ] 5. Override Mutter with merge request !3797.
- Prefer applying the pinned MR commits to the nixpkgs Mutter derivation so nixpkgs build flags and dependency wiring are retained.
- If the patch series is incompatible, use the pinned MR source only after confirming its Mutter ABI matches the installed GNOME Shell.
- Verify that libdrm is at least version 2.4.120.
- Ensure GNOME Shell and the display-manager session reference the overridden Mutter rather than merely installing it alongside the stock package.
- Enable the experimental feature with `MUTTER_DEBUG_EXPERIMENTAL_FEATURES=tearing` in the session environment.
- [ ] 6. Override the CachyOS kernel with the selected Intel DRM patches.
- Extend the existing `pkgs.cachyosKernels.linuxPackages-cachyos-latest` kernel derivation rather than replacing it with an unrelated kernel package set.
- Apply the pinned patches in their upstream dependency order.
- Verify that every patch applies cleanly to the exact CachyOS kernel source.
- Keep `boot.extraModulePackages` tied to the patched kernel package set so `r8125` and `v4l2loopback` are rebuilt against the correct kernel.
- Do not modify the generated `hardware-configuration.nix` beyond any unavoidable existing kernel selection; place the override in a maintained host module.
- [ ] 7. Validate the Nix expressions without activating the system.
- Run formatting and syntax checks on every changed Nix file.
- Evaluate the complete `drivebystation-nix` configuration.
- Run `nix flake check` and resolve evaluation failures attributable to these changes.
- Confirm that all sources are pinned and reproducible and that no mutable branch names remain.
- [ ] 8. Build each risky component independently.
- Build the overridden Mutter derivation.
- Build the patched kernel derivation.
- Build the matching `r8125` and `v4l2loopback` modules.
- Inspect the build logs for rejected patches, warnings related to async flips, and ABI mismatches.
- [ ] 9. Build the complete NixOS system before switching.
- Build the `drivebystation-nix` toplevel without activating it.
- Verify that the closure contains the pinned patched Mutter and patched CachyOS kernel.
- Confirm that a previous known-good boot generation remains available.
- [ ] 10. Activate the result safely.
- Use `nixos-rebuild boot` first so the new system is selected only after reboot.
- Reboot into the patched generation and verify the running kernel version and `xe` driver binding.
- If the display fails or the system is unstable, boot the previous generation and disable the experimental module.
- [ ] 11. Verify the kernel DRM capabilities.
- Run `drm_info` and confirm atomic async-page-flip capability is reported.
- Confirm `IN_FORMATS_ASYNC` is populated for supported primary planes.
- Confirm its absence on the cursor plane is handled as expected rather than causing the entire commit to fail.
- Capture a DRM debug log while submitting tearing-enabled fullscreen frames.
- [ ] 12. Test KDE Plasma tearing.
- Enable Plasma's "Allow in fullscreen windows" tearing setting.
- Run a fullscreen tearing-aware game or test client with frame rate above the monitor refresh rate.
- Confirm that KWin's async atomic commits no longer fail with `-EINVAL`.
- Confirm that the previous `cursor A: async flip not supported` and `plane 2A: async flip not supported` errors no longer occur for disabled or unchanged planes.
- Check cursor movement, fullscreen entry and exit, direct scanout, VRR enabled and disabled, and all connected monitors.
- [ ] 13. Test GNOME Mutter tearing.
- Start a GNOME Wayland session and confirm the tearing-control protocol is advertised.
- Run `weston-simple-egl -v -f -t` or an equivalent tearing-aware client.
- Confirm that requested asynchronous flips are accepted and visibly tear when the frame rate exceeds the refresh rate.
- Confirm unsupported async commits fall back to synchronized presentation without breaking the session.
- Test cursor movement, fullscreen transitions, VRR, multiple monitors, and suspend/resume.
- [ ] 14. Document results and removal criteria.
- Record the tested hardware, kernel, Mutter, GNOME Shell, Plasma, and libdrm versions.
- Record the exact patches used and the outcome of both compositor tests.
- Document how to disable the overrides and roll back to the previous generation.
- Note which upstream merge or kernel release will allow each local override to be removed.
+61
View File
@@ -0,0 +1,61 @@
# NixOS configuration
The default package set is NixOS 26.05. Home Manager and AAGL use their
matching 26.05 release branches. `drivebystation-nix` uses the standard
`pkgs.linuxPackages` kernel from stable, including matching external modules.
## Packages from unstable
`inputs.nixpkgs-unstable` is a separate package set, pinned in `flake.lock`.
Select individual applications explicitly, as with Trilium and JetBrains
Toolbox in the desktop host:
```nix
unstablePkgs.trilium-desktop
```
The host defines `unstablePkgs` by importing the separate input with
`allowUnfree = true`. Use `pkgs.<name>` for stable packages. Unstable
applications retain their own dependencies; the system package set stays on
stable.
Update the stable inputs and the application exceptions independently:
```sh
nix flake update nixpkgs home-manager aagl
nix flake update nixpkgs-unstable
```
The existing Mutter tearing override remains experimental. Its compatibility
and B580 graphics behavior require testing when changing the desktop stack.
## Validate and boot
```sh
nix build .#nixosConfigurations.drivebystation-nix.config.system.build.toplevel --no-link
sudo nixos-rebuild boot --flake .#drivebystation-nix
```
Only run the boot command after the build succeeds. Keep the previous working
generation available in the boot menu, then test networking, graphics, and
the webcam loopback after reboot. Git restores configuration sources; booting
the previous generation restores the previous system closure.
Whole-flake checks currently also evaluate an unfinished WSL host referencing
the disabled `nixos-wsl` input. Validate the desktop target directly until that
separate host configuration is repaired.
## Migration validation (2026-10-17)
The complete `drivebystation-nix` system built successfully without activation.
Its closure contains Linux 6.18.56, patched Mutter 50.5, GNOME Shell 50.5,
libdrm 2.4.133, r8125 9.016.01, and v4l2loopback 0.15.3. The explicit unstable
applications are Trilium 0.106.0 and JetBrains Toolbox 3.8.1.88030.
Nix syntax and Git whitespace checks pass. `nix flake check --no-build` stops
at the existing WSL input error described above. The edited Nix files retain
the repository's existing formatting; `nixpkgs-fmt --check` reports formatting
differences, including on the original flake before migration.
Boot, networking, B580 graphics, and tearing behavior still require runtime
testing. The migration does not add Intel tearing kernel patches.
Generated
+657 -132
View File
File diff suppressed because it is too large Load Diff
+74 -8
View File
@@ -3,23 +3,63 @@
inputs = { inputs = {
# nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; # nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
nixos-wsl.url = "github:nix-community/NixOS-WSL/main"; # Application exceptions; keep the system and graphics stack on stable.
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
# nixos-wsl = {
# url = "github:nix-community/NixOS-WSL/main";
# inputs.nixpkgs.follows = "nixpkgs";
# };
# Snowfallorg's Flake utility # Snowfallorg's Flake utility
snowfall-lib = { snowfall-lib = {
url = "github:snowfallorg/lib"; url = "github:snowfallorg/lib";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
game-of-life.url = "github:local-interloper/game-of-life"; # game-of-life = {
nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic"; # url = "github:local-interloper/game-of-life";
# inputs.nixpkgs.follows = "nixpkgs";
# };
# Add sops-nix for secrets management # Add sops-nix for secrets management
sops-nix = { sops-nix = {
url = "github:mic92/sops-nix"; url = "github:mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
zen-browser.url = "github:MarceColl/zen-browser-flake"; zen-browser = {
url = "github:0xc000022070/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager/release-26.05";
inputs.nixpkgs.follows = "nixpkgs";
};
# anikki = {
# url = "github:Hion-V/Anikki-flake";
# inputs.nixpkgs.follows = "nixpkgs";
# };
lanzaboote = {
url = "github:nix-community/lanzaboote/v1.1.0";
inputs.nixpkgs.follows = "nixpkgs";
};
# kwin-effects-forceblur = { Archived.
# url = "github:taj-ny/kwin-effects-forceblur";
# inputs.nixpkgs.follows = "nixpkgs";
# };
aagl = {
url = "github:ezKEa/aagl-gtk-on-nix/release-26.05";
inputs.nixpkgs.follows = "nixpkgs";
};
wallpaperengine.url = "github:Hion-V/linux-wallpaperengine/Hion-V/prod";
simple-wallpaper-engine = {
url = "github:Maxnights/simple-linux-wallpaperengine-gui";
inputs.nixpkgs.follows = "nixpkgs";
};
linux-wallpaper-engine.url = "github:jagrat7/linux-wallpaper-engine";
millennium = {
url = "github:SteamClientHomebrew/Millennium?dir=packages/nix";
inputs.nixpkgs.follows = "nixpkgs";
};
codex-desktop = {
url = "github:ilysenko/codex-desktop-linux";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
}; };
@@ -61,13 +101,18 @@
inherit inputs; inherit inputs;
src = ./.; src = ./.;
overlays = with inputs; [
inputs.millennium.overlays.default
];
nixos = with inputs; [ nixos = with inputs; [
# disko.nixosModules.disko # disko.nixosModules.disko
# impermanence.nixosModules.impermanence # impermanence.nixosModules.impermanence
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
{ {
home-manager = { home-manager = {
useGlobalPkgs = true; useGlobalPkgs = false; # Disabled to allow system-level overlays to work
useUserPackages = true; useUserPackages = true;
}; };
} }
@@ -78,6 +123,25 @@
systems.modules.nixos = with inputs; [ systems.modules.nixos = with inputs; [
# my-input.nixosModules.my-module # my-input.nixosModules.my-module
lanzaboote.nixosModules.lanzaboote ({ pkgs, lib, ... }: {
environment.systemPackages = [
# For debugging and troubleshooting Secure Boot.
pkgs.sbctl
];
boot.loader.systemd-boot.configurationLimit = 4;
# Lanzaboote currently replaces the systemd-boot module.
# This setting is usually set to true in configuration.nix
# generated at installation time. So we force it to false
# for now.
boot.loader.systemd-boot.enable = lib.mkForce false;
boot.lanzaboote = {
enable = true;
pkiBundle = "/var/lib/sbctl";
};
})
]; ];
# The attribute set specified here will be passed directly to NixPkgs when # The attribute set specified here will be passed directly to NixPkgs when
@@ -85,7 +149,9 @@
channels-config = { channels-config = {
# Allow unfree packages. # Allow unfree packages.
allowUnfree = true; allowUnfree = true;
permittedInsecurePackages = [
"mbedtls-2.28.10" # needed for haxe 4.3.6
];
# # Allow certain insecure packages # # Allow certain insecure packages
# permittedInsecurePackages = [ # permittedInsecurePackages = [
# "firefox-100.0.0" # "firefox-100.0.0"
@@ -6,6 +6,26 @@
}: }:
let let
inherit (lib.my-namespace) enabled; inherit (lib.my-namespace) enabled;
system = pkgs.stdenv.hostPlatform.system;
jagratWallpaperEngine =
(inputs.linux-wallpaper-engine.packages.${system}.default.override {
linux-wallpaperengine = inputs.wallpaperengine.packages.${system}.default;
}).overrideAttrs (old: {
# Forge 7 expects a default export, but the bundled Vite exposes named exports.
preBuild = (old.preBuild or "") + ''
substituteInPlace node_modules/@electron-forge/plugin-vite/dist/VitePlugin.js \
--replace-fail 'const vite_1 = __importDefault(require("vite"));' \
'const vite_1 = { default: require("vite") };'
'';
});
simpleWallpaperEngine =
inputs.simple-wallpaper-engine.packages.${system}.default.override {
# The upstream GUI package otherwise puts nixpkgs' unmodified
# linux-wallpaperengine in its wrapped PATH.
pkgs = pkgs // {
linux-wallpaperengine = inputs.wallpaperengine.packages.${system}.default;
};
};
in in
{ {
imports = [ imports = [
@@ -14,6 +34,7 @@ in
my-namespace.home = { my-namespace.home = {
stream-tools = enabled; stream-tools = enabled;
gnome-customizations = enabled; gnome-customizations = enabled;
vesktop-appimage = enabled;
# networking = enabled; # networking = enabled;
# personal-apps = enabled; # personal-apps = enabled;
# suites.laptop = enabled; # suites.laptop = enabled;
@@ -21,13 +42,35 @@ in
home = { home = {
packages = [ packages = [
pkgs.nil pkgs.nil
pkgs.steam
pkgs.gamemode
pkgs.beeper pkgs.beeper
pkgs.mpv
pkgs.my-namespace.udev-steelseries pkgs.my-namespace.udev-steelseries
pkgs.qbittorrent pkgs.qbittorrent
pkgs.vesktop pkgs.hyfetch
pkgs.libreoffice
pkgs.localsend
simpleWallpaperEngine
# Separate GUI for manual testing; keep the existing GUI's autostart.
jagratWallpaperEngine
# pkgs.vesktop
pkgs.obsidian pkgs.obsidian
inputs.zen-browser.packages.x86_64-linux.default ]; inputs.zen-browser.packages.x86_64-linux.default
# inputs.kwin-effects-forceblur.packages.${pkgs.stdenv.hostPlatform.system}.default # Archived.
];
}; };
xdg.autostart = {
enable = true;
entries = [
"${simpleWallpaperEngine}/share/applications/simple-wallpaper-engine-autostart.desktop"
];
};
# Auto-start linux-wallpaperengine for dual monitors via XDG autostart
# xdg.configFile."autostart/linux-wallpaperengine.desktop".text = ''
# [Desktop Entry]
# Type=Application
# Name=Wallpaper Engine
# Exec=${pkgs.my-namespace.linux-wallpaperengine}/bin/linux-wallpaperengine --screen-root DP-1 --bg 2935872330 --screen-root DP-2 --bg 2935872330 -f 12
# X-KDE-autostart-after=panel
# X-KDE-StartupNotify=false
# '';
} }
@@ -1,25 +0,0 @@
{ config
, lib
, pkgs
, ...
}:
let
inherit (lib.my-namespace) enabled;
in
{
imports = [
# ../modules.nix
];
my-namespace.home = {
stream-tools = enabled;
# networking = enabled;
# personal-apps = enabled;
# suites.laptop = enabled;
};
home = {
packages = [
pkgs.nil
pkgs.beeper
];
};
}
@@ -20,12 +20,10 @@ in
home = { home = {
packages = [ packages = [
pkgs.nil pkgs.nil
pkgs.steam
pkgs.gamemode
pkgs.beeper pkgs.beeper
pkgs.my-namespace.udev-steelseries pkgs.my-namespace.udev-steelseries
pkgs.qbittorrent pkgs.qbittorrent
pkgs.vesktop #pkgs.vesktop
]; ];
}; };
} }
@@ -1,5 +1,4 @@
{ pkgs { config
, config
, lib , lib
, ... , ...
}: }:
+31 -12
View File
@@ -1,28 +1,49 @@
{ {
config, # Snowfall Lib provides a customized `lib` instance with access to your flake's library
lib, # as well as the libraries available from your flake's inputs.
pkgs, lib
... , # An instance of `pkgs` with your overlays and packages applied is also available.
}: let pkgs
, # You also have access to your flake's inputs.
inputs
, # Additional metadata is provided by Snowfall Lib.
namespace
, # The namespace used for your flake, defaulting to "internal" if not set.
system
, # The system architecture for this host (eg. `x86_64-linux`).
target
, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
format
, # A normalized name for the system target (eg. `iso`).
virtual
, # A boolean to determine whether this system is a virtual target using nixos-generators.
systems
, # An attribute map of your defined hosts.
# All other arguments come from the module system.
config
, ...
}:
let
inherit (lib) mkIf; inherit (lib) mkIf;
inherit (lib.my-namespace) enabled; inherit (lib.my-namespace) enabled;
imp = config.my-namespace.home.impermanence.enable; imp = config.my-namespace.home.impermanence.enable;
in { in
{
config = { config = {
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
inetutils inetutils
neofetch hyfetch
tmux tmux
nerdfonts # nerdfonts
p7zip p7zip
rclone rclone
ripgrep ripgrep
unzip unzip
zip zip
]; ];
sessionPath = ["$HOME/bin" "$HOME/.local/bin"]; sessionPath = [ "$HOME/bin" "$HOME/.local/bin" ];
shellAliases = { shellAliases = {
# "df" = "duf -only local"; # "df" = "duf -only local";
# "du" = "dust -xd1 --skip-total"; # "du" = "dust -xd1 --skip-total";
@@ -52,8 +73,6 @@ in {
}; };
home-manager = enabled; home-manager = enabled;
}; };
services = { services = { };
};
}; };
} }
+10 -2
View File
@@ -16,11 +16,19 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.obs-studio = { programs.obs-studio = {
enable = true; enable = true;
plugins = [ pkgs.obs-studio-plugins.droidcam-obs ]; plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
obs-vaapi #optional AMD hardware acceleration
obs-gstreamer
obs-vkcapture
pkgs.my-namespace.droidcam-obs # Custom override with FFmpeg 6
];
}; };
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
# obs-studio config.programs.obs-studio.finalPackage
droidcam droidcam
]; ];
}; };
+49
View File
@@ -0,0 +1,49 @@
{ config, pkgs, lib, ... }:
let
inherit (lib) mkEnableOption mkIf;
cfg = config.my-namespace.home.vesktop-appimage;
vesktopVersion = "1.6.4";
vesktopAppImage = pkgs.runCommand "vesktop-appimage" { } ''
cp ${pkgs.fetchurl {
url = "https://github.com/Vencord/Vesktop/releases/download/v${vesktopVersion}/Vesktop-${vesktopVersion}.AppImage";
sha256 = "sha256-o7A8DBQyutONeLp5rstq9hQko2xxbvYZvGGM8/YOQ8s=";
}} $out
chmod +x $out
'';
vesktopWrapped = pkgs.writeShellScriptBin "vesktop" ''
exec ${pkgs.appimage-run}/bin/appimage-run ${vesktopAppImage} "$@"
'';
vesktopIcon = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/Vencord/Vesktop/main/build/icon.svg";
sha256 = "sha256-fQ+dvbPIb4AFd9f7JqIt7+twJdEMQF9jTTwrk5p1vn8=";
};
in
{
options.my-namespace.home.vesktop-appimage = {
enable = mkEnableOption "Install Vesktop (AppImage) with Vencord support";
};
config = mkIf cfg.enable {
xdg.dataFile."icons/hicolor/scalable/apps/vesktop.svg".source = vesktopIcon;
home.packages = [
pkgs.appimage-run
vesktopWrapped
];
xdg.desktopEntries.vesktop = {
name = "Vesktop";
comment = "Discord client with Vencord (AppImage)";
exec = "${vesktopWrapped}/bin/vesktop";
icon = "vesktop";
terminal = false;
type = "Application";
categories = [ "Network" "Chat" ];
};
};
}
-32
View File
@@ -1,32 +0,0 @@
{ config
, lib
, inputs
, pkgs
, ...
}:
let
inherit (lib) mkEnableOption mkIf;
inherit (lib.my-namespace) disabled enabled;
cfg = config.my-namespace.cosmic-desktop;
# moduleImports = {
# "enabled" = [inputs.nixos-cosmic.nixosModules.default];
# "disabled" = [];
# };
# optionalImports = { imports = []; };
in
{
options.my-namespace.cosmic-desktop = {
enable = mkEnableOption "Enable nvidia";
};
imports = [ inputs.nixos-cosmic.nixosModules.default ];
config = mkIf cfg.enable {
nix.settings = {
substituters = [ "https://cosmic.cachix.org/" ];
trusted-public-keys = [ "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" ];
};
services.desktopManager.cosmic.enable = true;
services.displayManager.cosmic-greeter.enable = true;
};
}
+24
View File
@@ -0,0 +1,24 @@
{ lib, pkgs, config, namespace, ... }:
let
cfg = config.${namespace}.cs-tools;
in
{
options.${namespace}.cs-tools = {
enable = lib.mkEnableOption "CS tools including CS Demo Manager and PostgreSQL";
};
config = lib.mkIf cfg.enable {
services.postgresql = {
enable = true;
ensureDatabases = [ "csdm" ];
ensureUsers = [{
name = "csdm";
}];
};
environment.systemPackages = with pkgs; [
my-namespace.cs-demo-manager
postgresql
];
};
}
@@ -0,0 +1,160 @@
{ config, lib, pkgs, namespace, ... }:
let
cfg = config.${namespace}.desktop-environment;
in {
options.${namespace}.desktop-environment = {
cinnamon = {
enable = lib.mkEnableOption "Cinnamon desktop environment";
};
xfce = {
enable = lib.mkEnableOption "XFCE desktop environment";
};
gnome = {
enable = lib.mkEnableOption "GNOME desktop environment";
};
kde = {
enable = lib.mkEnableOption "KDE Plasma desktop environment";
};
cosmic = {
enable = lib.mkEnableOption "Cosmic desktop environment";
};
hyprland = {
enable = lib.mkEnableOption "hyprland Wayland shell";
};
};
config = lib.mkMerge [
(lib.mkIf cfg.xfce.enable {
services.xserver = {
enable = true;
desktopManager = {
cinnamon.enable = true;
};
};
environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR =
lib.mkForce "${pkgs.gnome.nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
})
(lib.mkIf cfg.xfce.enable {
services.xserver = {
enable = true;
desktopManager = {
xfce.enable = true;
};
};
environment.systemPackages = with pkgs; [
xfce4-pulseaudio-plugin
xfce4-clipman-plugin
xfce4-screenshooter
xfce4-whiskermenu-plugin
thunar-archive-plugin
thunar-volman
gvfs
gnome-keyring
libgnome-keyring
];
})
(lib.mkIf cfg.gnome.enable {
services.xserver = {
enable = true;
};
services.desktopManager.gnome.enable = true;
services.gnome.gnome-remote-desktop.enable = true;
systemd.services.gnome-remote-desktop = {
wantedBy = [ "graphical.target" ]; # for starting the unit automatically at boot
};
services.displayManager.autoLogin.enable = false;
networking.firewall.allowedTCPPorts = [
3389
3390
];
# users.users.andreas.extraGroups = [ "sambashare" ];
# Enable Avahi (mDNS/DNS-SD) for discovery
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
# Enable GNOME sharing services
services.gnome.gnome-user-share.enable = true;
environment.systemPackages = with pkgs; [
gnome-tweaks
ptyxis
gnome-software
gnomeExtensions.pop-shell
gnome-remote-desktop
dconf-editor
glib-networking # Required gnome-remote-desktop dependency
];
systemd.user.services.gnome-remote-desktop.environment = {
VK_ICD_FILENAMES = "/dev/null";
LIBGL_ALWAYS_SOFTWARE = "1";
};
systemd.services.gnome-remote-desktop.environment = {
VK_ICD_FILENAMES = "/dev/null";
LIBGL_ALWAYS_SOFTWARE = "1";
};
environment.sessionVariables.XDG_DATA_DIRS = lib.mkAfter [
"${pkgs.gnome-remote-desktop}/share"
];
environment.pathsToLink = [
"/share/gsettings-schemas"
"/share"
];
})
(lib.mkIf cfg.kde.enable {
services.xserver.enable = true;
services.desktopManager.plasma6.enable = true;
environment.sessionVariables = {
# Forces KWin to use the legacy DRM interface so "Allow Tearing" actually works
# KWIN_DRM_NO_AMS = "1";
# Disables the new triple buffering in Plasma 6.1+ to reduce latency
# KWIN_DRM_DISABLE_TRIPLE_BUFFERING = "1";
# KWIN_USE_HWCURSOR = "0";
# KWIN_DRM_USE_EGL_STREAMS = "0";
# MESA_VK_WSI_PRESENT_MODE = "immediate";
# vblank_mode = "0";
};
environment.systemPackages = with pkgs; [
kdePackages.qtwebsockets
kdePackages.qtwebchannel
kdePackages.korganizer
kdePackages.akonadi
kdePackages.akonadi-calendar
kdePackages.akonadi-contacts
kdePackages.kaddressbook
kdePackages.kmail
kdePackages.kdepim-runtime
kdePackages.kontact
kdePackages.kidentitymanagement
kdePackages.libkdepim
kdePackages.kwin
kdePackages.plasma-workspace
gnome-keyring
libgnome-keyring
];
})
(lib.mkIf cfg.cosmic.enable {
services.desktopManager.cosmic.enable = true;
services.desktopManager.cosmic.xwayland.enable = true;
environment.systemPackages = with pkgs; [
gnome-keyring
libgnome-keyring
];
})
(lib.mkIf cfg.hyprland.enable {
programs.hyprland.enable = true; # enable Hyprland
environment.systemPackages = with pkgs; [
pkgs.kitty # required for the default Hyprland config
];
})
];
}
+21
View File
@@ -0,0 +1,21 @@
{
config,
lib,
pkgs,
namespace,
...
}:
let
cfg = config.${namespace}.distrobox;
in
{
options.${namespace}.distrobox = {
enable = lib.mkEnableOption "Distrobox with a Podman container backend";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.distrobox ];
virtualisation.podman.enable = true;
};
}
@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
namespace,
...
}:
let
cfg = config.${namespace}.file-organization;
in
{
options.${namespace}.file-organization = {
enable = lib.mkEnableOption "file organization software";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
ranger
fsearch
qdirstat
veracrypt
];
};
}
+30
View File
@@ -0,0 +1,30 @@
{ config, lib, pkgs, namespace, options, ... }:
let
cfg = config.${namespace}.gnome-keyring;
in {
options.${namespace}.gnome-keyring = {
enable = lib.mkEnableOption "Enable GNOME Keyring integration";
};
config = lib.mkIf cfg.enable {
services.gnome.gnome-keyring.enable = true;
# PAM configuration for automatic keyring unlock
security.pam.services.sddm.enableGnomeKeyring = true;
security.pam.services.login.enableGnomeKeyring = true;
security.pam.services.gdm.enableGnomeKeyring = true;
# Make KDE apps use GNOME Keyring as the Secret Service backend
environment.variables = {
# Set GNOME Keyring as the SSH agent
SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/keyring/ssh";
};
environment.systemPackages = with pkgs; [
seahorse # GUI for managing the keyring
gcr # Keyring integration
libsecret # Secret Service API library for KDE apps
];
};
}
@@ -1,131 +0,0 @@
{ config
, lib
, pkgs
, ...
}:
let
inherit (lib) mkEnableOption mkIf;
inherit (lib.my-namespace) disabled enabled;
cfg = config.my-namespace.hardware.graphics-nvidia-prime-amd;
in
{
options.my-namespace.hardware.graphics-nvidia-prime-amd = {
enable = mkEnableOption "Enable nvidia";
};
config = mkIf cfg.enable {
# Enable NVIDIA driver for X11 and Wayland
services.xserver.videoDrivers = [ "amdgpu" "nvidia" ];
# Enable OpenGL
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [ nvidia-vaapi-driver ];
};
# Use Beta Driver Package
boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11_beta ];
boot.loader.systemd-boot.consoleMode = "max";
# Enable required Kernel Modules
boot.initrd.kernelModules = [
"amdgpu"
"nvidia"
# "nvidia-drm"
"nvidiafb"
# "nvidia-uvm"
# "nvidia-modeset"
# "i2c-nvidia_gpu"
];
boot.kernelParams = [
"amdgpu.modeset=1"
"nvidia-drm.fbdev=1"
"nvidia-drm.modeset=0"
# "nvidia.NVreg_PreserveVideoMemoryAllocations=0"
"amd_iommu=on"
# "vfio-pci.ids=\"10de:2489,10de:228b\""
# "nomodeset"
# "nvidia_drm.modeset=1"
];
# Blacklist intel and nouveau
boot.blacklistedKernelModules = [
"i915"
"nouveau"
# "nvidia"
# "nvidia-drm"
# "nvidia-uvm"
# "nvidiafb"
# "nvidia_drm"
# "nvidia_modeset"
];
# Extra blacklist nouveau
boot.extraModprobeConfig = ''
blacklist nouveau
options nouveau modeset=0
'';
# Configure NVIDIA driver
hardware.nvidia = {
# Modesetting is required.
modesetting.enable = true;
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
# Enable this if you have graphical corruption issues or application crashes after waking
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
# of just the bare essentials.
powerManagement.enable = true;
# Fine-grained power management. Turns off GPU when not in use.
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
powerManagement.finegrained = false;
# Use the NVidia open source kernel module (not to be confused with the
# independent third-party "nouveau" open source driver).
# Support is limited to the Turing and later architectures. Full list of
# supported GPUs is at:
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
# Only available from driver 515.43.04+
# Currently alpha-quality/buggy, so false is currently the recommended setting.
open = false;
# Enable the Nvidia settings menu,
# accessible via `nvidia-settings`.
nvidiaSettings = true;
# Optionally, you may need to select the appropriate driver version for your specific GPU.
package = config.boot.kernelPackages.nvidiaPackages.beta;
# package = config.boot.kernelPackages.nvidiaPackages.none;
# package = config.boot.kernelPackages.nvidiaPackages.production;
forceFullCompositionPipeline = false;
prime = {
offload = {
enable = true;
enableOffloadCmd = true;
};
reverseSync.enable = false;
# Make sure to use the correct Bus ID values for your system!
# intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:01:0:0";
amdgpuBusId = "PCI:50:0:0"; #For AMD GPU
};
};
# Add user to extra groups
users.users.andreas = {
extraGroups = [ "video" "render" ];
};
};
}
+120
View File
@@ -0,0 +1,120 @@
{ config, lib, pkgs, namespace, ... }:
let
cfg = config.${namespace}.keychron-keyboard;
in {
options.${namespace}.keychron-keyboard = {
enable = lib.mkEnableOption "Enable Keychron keyboard configuration";
# Add additional options here, e.g. vendor/product IDs, keymaps, etc.
};
config = lib.mkIf cfg.enable {
# Create the plugdev group and ensure users can access HID devices
users.groups.plugdev = {};
hardware.keyboard.qmk.keychronSupport = true;
services.udev.packages = with pkgs; [ qmk qmk-udev-rules ];
# Example udev rule or keychron-specific settings
services.udev.extraRules = ''
# Atmel DFU
### ATmega16U2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2fef", TAG+="uaccess"
### ATmega32U2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", TAG+="uaccess"
### ATmega16U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff3", TAG+="uaccess"
### ATmega32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", TAG+="uaccess"
### AT90USB64
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff9", TAG+="uaccess"
### AT90USB162
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffa", TAG+="uaccess"
### AT90USB128
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", TAG+="uaccess"
# Input Club
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b007", TAG+="uaccess"
# STM32duino
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", TAG+="uaccess"
# STM32 DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", TAG+="uaccess"
# BootloadHID
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", TAG+="uaccess"
# USBAspLoader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", TAG+="uaccess"
# USBtinyISP
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1782", ATTRS{idProduct}=="0c9f", TAG+="uaccess"
# ModemManager should ignore the following devices
# Atmel SAM-BA (Massdrop)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
# Caterina (Pro Micro)
## pid.codes shared PID
### Keyboardio Atreus 2 Bootloader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2302", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Spark Fun Electronics
### Pro Micro 3V3/8MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9203", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### Pro Micro 5V/16MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9205", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### LilyPad 3V3/8MHz (and some Pro Micro clones)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9207", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Pololu Electronics
### A-Star 32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1ffb", ATTRS{idProduct}=="0101", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Arduino SA
### Leonardo
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### Micro
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0037", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Adafruit Industries LLC
### Feather 32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000c", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### ItsyBitsy 32U4 3V3/8MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000d", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### ItsyBitsy 32U4 5V/16MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000e", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## dog hunter AG
### Leonardo
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0036", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### Micro
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0037", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
# hid_listen
KERNEL=="hidraw*", MODE="0666", TAG+="uaccess", TAG+="udev-acl"
# hidraw devices for WebHID (Keychron Launcher, VIA)
SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"
# hid bootloaders
## QMK HID
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2067", TAG+="uaccess"
## PJRC's HalfKay
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="0478", TAG+="uaccess"
# APM32 DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="314b", ATTRS{idProduct}=="0106", TAG+="uaccess"
# GD32V DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="28e9", ATTRS{idProduct}=="0189", TAG+="uaccess"
# WB32 DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="342d", ATTRS{idProduct}=="dfa0", TAG+="uaccess"
# AT32 DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", TAG+="uaccess"
'';
#
# home.file.".config/some-config".text = ''
# # keyboard-related configuration
# '';
};
}
+53
View File
@@ -0,0 +1,53 @@
############################################
#
# Shared System Configuration module that's always enabled by default courtesy of snowfall lib
#
############################################
{
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
# as well as the libraries available from your flake's inputs.
lib
, # An instance of `pkgs` with your overlays and packages applied is also available.
pkgs
, # You also have access to your flake's inputs.
inputs
, # Additional metadata is provided by Snowfall Lib.
namespace
, # The namespace used for your flake, defaulting to "internal" if not set.
system
, # The system architecture for this host (eg. `x86_64-linux`).
target
, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
format
, # A normalized name for the system target (eg. `iso`).
virtual
, # A boolean to determine whether this system is a virtual target using nixos-generators.
systems
, # An attribute map of your defined hosts.
# All other arguments come from the module system.
config
, ...
}:
let
inherit (lib) mkIf;
inherit (lib.my-namespace) enabled;
in
{
config = {
boot = { };
console = { };
environment = {
systemPackages =
(with pkgs; [
age
wget
sops
bitwarden-desktop #replaced bitwarden
bitwarden-cli
cowsay
remmina
]);
};
};
}
@@ -0,0 +1,23 @@
{ config, lib, pkgs, namespace, ... }:
let
cfg = config.${namespace}.performance-tuning;
in {
options.${namespace}.performance-tuning.enable = lib.mkEnableOption "performance tuning settings for gaming and general use";
config = lib.mkIf cfg.enable {
boot.kernelParams = [
"nvme_core.default_ps_max_latency_us=0"
];
boot.kernel.sysctl = {
"vm.swappiness" = 10;
"vm.dirty_ratio" = 10;
"vm.dirty_background_ratio" = 5;
};
services.pipewire.extraConfig.pipewire."context.properties" = {
"default.clock.quantum" = 256;
"default.clock.min-quantum" = 128;
};
};
}
@@ -0,0 +1,58 @@
{ config, lib, pkgs, namespace, ... }:
let
cfg = config.${namespace}.rtl8125-recovery;
recovery = pkgs.writeShellApplication {
name = "rtl8125-recover";
runtimeInputs = with pkgs; [ coreutils gnugrep pciutils ethtool systemd ];
text = builtins.readFile ./recover.sh;
};
in {
options.${namespace}.rtl8125-recovery = {
enable = lib.mkEnableOption "RTL8125 PCI recovery after boot and resume";
pciAddress = lib.mkOption {
type = lib.types.str;
default = "0000:0a:00.0";
description = "PCI address of the onboard RTL8125 controller.";
};
bridgeAddress = lib.mkOption {
type = lib.types.str;
default = "0000:06:03.0";
description = "Immediate parent PCI bridge of the controller.";
};
};
config = lib.mkIf cfg.enable {
systemd.services.rtl8125-recovery = {
description = "Recover RTL8125 from failed PCI power restoration";
wantedBy = [ "multi-user.target" ];
after = [ "NetworkManager.service" ];
environment = {
NIC_PCI = cfg.pciAddress;
NIC_BRIDGE = cfg.bridgeAddress;
};
serviceConfig = {
Type = "oneshot";
ExecStart = lib.getExe recovery;
TimeoutStartSec = "90s";
StateDirectory = "rtl8125-recovery";
StateDirectoryMode = "0700";
UMask = "0077";
};
};
# sleep.target is stopped after resume. Queue recovery separately so its
# grace period does not hold up the sleep transaction or user sessions.
systemd.services.rtl8125-resume = {
description = "Queue RTL8125 recovery after waking";
wantedBy = [ "sleep.target" ];
before = [ "sleep.target" ];
unitConfig.StopWhenUnneeded = true;
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = "${pkgs.coreutils}/bin/true";
ExecStop = "${pkgs.systemd}/bin/systemctl --no-block start rtl8125-recovery.service";
};
};
};
}
+98
View File
@@ -0,0 +1,98 @@
# Called once after boot or resume. No network access is required.
set -euo pipefail
nic="/sys/bus/pci/devices/$NIC_PCI"
bridge="/sys/bus/pci/devices/$NIC_BRIDGE"
log() { echo "rtl8125-recovery: $*"; }
disable_eee() {
local netdir
for netdir in "$nic"/net/*; do
[[ -e "$netdir/ifindex" ]] || continue
ethtool --set-eee "$(basename "$netdir")" eee off
done
}
# Let normal PCI and network resume finish before diagnosing anything.
sleep 10
if [[ ! -d "$bridge" ]]; then
log "Parent bridge $NIC_BRIDGE is absent; refusing recovery."
exit 1
fi
if [[ $(cat "$bridge/vendor") != 0x1022 || $(cat "$bridge/device") != 0x43f5 ]]; then
log "Parent bridge identity changed; refusing recovery."
exit 1
fi
if [[ -d "$nic" ]]; then
if [[ $(cat "$nic/vendor") != 0x10ec || $(cat "$nic/device") != 0x8125 ]]; then
log "Device at $NIC_PCI is not an RTL8125; refusing recovery."
exit 1
fi
if [[ $(dirname "$(readlink -f "$nic")") != "$(readlink -f "$bridge")" ]]; then
log "NIC is no longer directly below the configured bridge; refusing recovery."
exit 1
fi
power=$(cat "$nic/power_state")
command=$(timeout 5 setpci -s "$NIC_PCI" COMMAND 2>/dev/null || true)
# Both memory decoding and bus mastering should be enabled on this host.
# Disconnected cables do not disable these PCI command bits.
if [[ "$power" == D0 && "$command" =~ ^[[:xdigit:]]{4}$ && "${command,,}" != ffff ]] &&
(( (16#$command & 6) == 6 )); then
log "PCI state healthy ($power, COMMAND=$command); no recovery needed."
disable_eee
exit 0
fi
# An administratively disabled NIC should not be automatically reset.
netdirs=("$nic"/net/*)
if [[ -e "${netdirs[0]}/flags" ]]; then
flags=$(cat "${netdirs[0]}/flags")
if (( (flags & 1) == 0 )); then
log "Interface is administratively down; leaving it alone."
exit 0
fi
fi
log "Failed PCI state: power=$power COMMAND=$command."
else
log "NIC missing; attempting one rescan of its known bridge."
fi
# Retain evidence from the latest failure without accumulating unlimited logs.
evidence="${STATE_DIRECTORY:-/var/lib/rtl8125-recovery}/last-failure.log"
mkdir -p "$(dirname "$evidence")"
{
date -Is
timeout 5 lspci -s "$NIC_PCI" -vv || true
timeout 5 lspci -s "$NIC_BRIDGE" -vv || true
journalctl -b -k --since '10 minutes ago' -n 250 --no-pager || true
} > "$evidence" 2>&1
# This is the remove/rescan recovery that worked on this machine. Never reset
# or remove the parent bridge, which could affect other hardware.
if [[ -d "$nic" ]]; then
echo 1 > "$nic/remove"
fi
echo 1 > "$bridge/rescan"
for ((attempt=0; attempt<20; attempt++)); do
netdirs=("$nic"/net/*)
if [[ -e "${netdirs[0]}/ifindex" ]]; then
iface=$(basename "${netdirs[0]}")
power=$(cat "$nic/power_state")
command=$(timeout 5 setpci -s "$NIC_PCI" COMMAND 2>/dev/null || true)
if [[ "$power" == D0 && "$command" =~ ^[[:xdigit:]]{4}$ && "${command,,}" != ffff ]] &&
(( (16#$command & 6) == 6 )); then
# NetworkManager also reapplies the saved profile. Explicitly
# restore WoL here so recovery does not depend on its timing.
ethtool -s "$iface" wol g
disable_eee
if ! ethtool "$iface" | grep -Eq '^[[:space:]]*Wake-on: g$'; then
log "PCI recovered, but magic-packet WoL could not be confirmed."
exit 1
fi
log "Recovered $iface in D0; magic-packet WoL enabled. Evidence: $evidence"
exit 0
fi
fi
sleep 1
done
log "Recovery did not restore operational PCI state; no further attempt this invocation."
exit 1
+92
View File
@@ -0,0 +1,92 @@
{
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
# as well as the libraries available from your flake's inputs.
lib,
# An instance of `pkgs` with your overlays and packages applied is also available.
pkgs,
# You also have access to your flake's inputs.
inputs,
# Additional metadata is provided by Snowfall Lib.
# The namespace used for your flake, defaulting to "internal" if not set.
namespace,
# The system architecture for this host (eg. `x86_64-linux`).
system,
# The Snowfall Lib target for this system (eg. `x86_64-iso`).
target,
# A normalized name for the system target (eg. `iso`).
format,
# A boolean to determine whether this system is a virtual target using nixos-generators.
virtual,
# An attribute map of your defined hosts.
systems,
# All other arguments come from the system system.
config
, ...
}:{
config = {
# programs.gamescope = {
# enable = true;
# capSysNice = true;
# };
environment.systemPackages = with pkgs; [
protonup-ng # Tool to install and manage Proton-GE
lutris
faugus-launcher
vkd3d
dxvk
protontricks
mangohud
vkbasalt
gamescope
corefonts
];
hardware.uinput.enable = true;
users.users.andreas.extraGroups = [ "input" ];
# Explicitly register the desktop MIME scheme handler
xdg.mime = {
enable = true;
defaultApplications = {
"x-scheme-handler/steam" = [ "steam.desktop" ];
"x-scheme-handler/steamlink" = [ "steam.desktop" ];
};
};
programs.gamescope.enable = true;
programs.steam.gamescopeSession = {
enable = true;
args = [
"-w" "1920"
"-h" "1080"
"-r" "172"
"-e" # Enable steam integration
"--steam"
"--prefer-outpout DP-4"
"--prefer-vk-device 8086:e20b" # lspci -nn | grep VGA
];
env = {
# WLR_RENDERER = "vulkan";
# DXVK_HDR = "0 ";
# ENABLE_GAMESCOPE_WSI = "0";
# WINE_FULLSCREEN_FSR = "1";
# SDL_VIDEODRIVER = "wayland,x11"; # Games allegedly prefer X11
};
};
programs.steam = {
enable = true;
package = pkgs.millennium-steam.override {
extraPkgs = pkgs: with pkgs; [
gamemode
noto-fonts-color-emoji
];
extraEnv = {
# SDL_VIDEODRIVER = "wayland,x11";
# SDL_VIDEODRIVER = "x11,wayland";
};
};
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
};
}
@@ -0,0 +1,71 @@
{ lib, pkgs, inputs, config, namespace, ... }:
let
# Import the plugin as a package derivation from your local repo
# Pass the 'inputs' parameter explicitly to make wallpaper-engine-plugin-src available
wallpaperEnginePkg = pkgs.callPackage ../../../packages/wallpaper-engine-kde-plugin/default.nix { inherit inputs; };
in {
options.${namespace}.wallpaper-engine-kde-plugin.enable =
lib.mkEnableOption "Enable Wallpaper Engine KDE plugin";
config = lib.mkIf config.${namespace}.wallpaper-engine-kde-plugin.enable {
# Add the imported package and helper script to systemPackages
environment.systemPackages = [
wallpaperEnginePkg
(pkgs.writeShellScriptBin "wallpaper-engine-kde-setup" ''
#!/usr/bin/env bash
set -e
STEAM_DIR="$HOME/.local/share/Steam"
WORKSHOP_PATH="$STEAM_DIR/steamapps/workshop/content/431960"
echo "Wallpaper Engine KDE Plugin Setup Helper"
echo "========================================"
# Check if Steam directory exists
if [ -d "$STEAM_DIR" ]; then
echo "✅ Steam directory found at: $STEAM_DIR"
if [ -d "$WORKSHOP_PATH" ]; then
echo "✅ Workshop content directory found at: $WORKSHOP_PATH"
echo " You can use this path in the wallpaper settings."
else
echo "⚠️ Workshop content directory not found at the expected location."
echo " Please locate your Steam workshop content for Wallpaper Engine (app ID 431960)"
fi
else
echo "⚠️ Steam directory not found at: $STEAM_DIR"
echo " Please install Steam and Wallpaper Engine first."
fi
# Check symlinks
if [ -L "$HOME/.local/share/plasma/wallpapers/com.github.catsout.wallpaperEngineKde" ]; then
echo "✅ Plugin symlink is correctly set up"
else
echo "⚠️ Plugin symlink not found, attempting to create it..."
mkdir -p "$HOME/.local/share/plasma/wallpapers"
ln -sf /run/current-system/sw/share/plasma/wallpapers/com.github.catsout.wallpaperEngineKde \
"$HOME/.local/share/plasma/wallpapers/com.github.catsout.wallpaperEngineKde"
echo " Done! Symlink created."
fi
echo ""
echo "To use Wallpaper Engine wallpapers in KDE:"
echo "1. Right-click on desktop → Configure Desktop and Wallpaper"
echo "2. Select 'Wallpaper Engine' from the wallpaper type list"
echo "3. Set the path to your workshop content directory"
'')
];
systemd.user.services.wallpaperEngineSymlink = {
description = "Symlink Wallpaper Engine plugin for Plasma";
wantedBy = [ "graphical-session.target" ];
serviceConfig = {
Type = "oneshot";
ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p %h/.local/share/plasma/wallpapers";
ExecStart = "${pkgs.coreutils}/bin/ln -sfn /run/current-system/sw/share/plasma/wallpapers/com.github.catsout.wallpaperEngineKde %h/.local/share/plasma/wallpapers/com.github.catsout.wallpaperEngineKde";
RemainAfterExit = true;
};
};
};
}
@@ -0,0 +1,7 @@
{ ... }:
final: prev: {
openldap = prev.openldap.overrideAttrs {
doCheck = !prev.stdenv.hostPlatform.isi686;
};
}
+105
View File
@@ -0,0 +1,105 @@
# overlays/vscode-modernized/default.nix
{ ... }:
final: prev:
let
modernized = prev.fetchFromGitHub {
owner = "Sukarth";
repo = "VS-Code-Modernized";
# Pin this once working.
rev = "main";
hash = "sha256-QSmdmCoF2L42ZUxYpJXq6REOdNObK9DBI6c0GEQ32rQ=";
};
injectModernized = vscodePkg:
vscodePkg.overrideAttrs (old: {
postInstall = (old.postInstall or "") + ''
(
set -euo pipefail
candidates=(
"$out/lib/vscode/resources/app/out/vs/code/electron-sandbox/workbench/workbench.html"
"$out/lib/vscode/resources/app/out/vs/code/electron-sandbox/workbench/workbench.esm.html"
"$out/lib/vscode/resources/app/out/vs/code/electron-browser/workbench/workbench.html"
"$out/lib/vscode/resources/app/out/vs/code/electron-browser/workbench/workbench.esm.html"
)
workbench=""
for candidate in "''${candidates[@]}"; do
if [ -f "$candidate" ]; then
workbench="$candidate"
break
fi
done
if [ -z "$workbench" ]; then
echo "VS Code Modernized: could not find workbench.html" >&2
find "$out/lib/vscode/resources/app/out/vs" -name 'workbench*.html' -print >&2 || true
exit 1
fi
# Build one self-contained CSS file.
cat > /tmp/vscode-modernized-inline.css <<'EOF'
/* VS Code Modernized dynamic settings */
:root {
--vscode-modernized-spacing: 0.35rem;
--vscode-modernized-border-radius: 0.5rem;
--vscode-modernized-tab-spacing: 0.2rem;
}
EOF
cat "${modernized}/styles/styles.css" >> /tmp/vscode-modernized-inline.css
# Smoke-test styles. Remove later if you want.
cat >> /tmp/vscode-modernized-inline.css <<'EOF'
/* Modernized dims inactive icons to 20%; let the theme control contrast instead. */
.monaco-workbench .part.activitybar .monaco-action-bar .action-item.icon:not(.disabled) {
opacity: 1;
}
/* Nix smoke test: these should be very visible */
.monaco-workbench .part.sidebar,
.monaco-workbench .part.auxiliarybar,
.monaco-workbench .part.panel,
.monaco-workbench .editor-group-container,
.monaco-workbench .tabs-container,
.monaco-workbench .tab,
.monaco-workbench .monaco-list-row,
.monaco-workbench .quick-input-widget {
border-radius: var(--vscode-modernized-border-radius) !important;
overflow: hidden !important;
}
.monaco-workbench .part.sidebar,
.monaco-workbench .part.panel,
.monaco-workbench .editor-group-container {
margin: var(--vscode-modernized-spacing) !important;
}
EOF
css="$(sed \
-e 's/&/\&amp;/g' \
-e 's/</\&lt;/g' \
-e 's/>/\&gt;/g' \
/tmp/vscode-modernized-inline.css)"
inject="
<!-- VS Code Modernized - Nix injected -->
<style id=\"vscode-modernized-nix\">
$css
</style>
<!-- /VS Code Modernized - Nix injected -->
"
substituteInPlace "$workbench" \
--replace-fail '</html>' "$inject
</html>"
)
'';
});
in
{
vscode-modernized = injectModernized prev.vscode;
}
+43
View File
@@ -0,0 +1,43 @@
{ lib
, stdenv
, fetchurl
, appimageTools
, postgresql
, procps
, ...
}:
let
pname = "cs-demo-manager";
version = "3.18.2";
src = fetchurl {
url = "https://github.com/akiver/cs-demo-manager/releases/download/v${version}/CS-Demo-Manager-${version}.AppImage";
hash = "sha256-REEhqvfYSKD7EyIYJVlbkQu0h5FZcofc8X7Zhu1xZnA="; # You need to add the hash after first build attempt
};
appimageContents = appimageTools.extract {
inherit pname version src;
};
in
appimageTools.wrapType2 {
inherit pname version src;
extraPkgs = pkgs: [ postgresql procps ];
extraInstallCommands = ''
install -m 444 -D ${appimageContents}/cs-demo-manager.desktop $out/share/applications/cs-demo-manager.desktop
install -m 444 -D ${appimageContents}/cs-demo-manager.png $out/share/icons/hicolor/512x512/apps/cs-demo-manager.png
substituteInPlace $out/share/applications/cs-demo-manager.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
'';
meta = with lib; {
description = "An application to manage Counter-Strike demos";
homepage = "https://github.com/akiver/cs-demo-manager";
license = licenses.gpl2Plus;
platforms = [ "x86_64-linux" ];
maintainers = [ ];
};
}
+46
View File
@@ -0,0 +1,46 @@
{
lib,
pkgs,
stdenv,
fetchurl,
autoPatchelfHook,
namespace,
...
}:
stdenv.mkDerivation rec {
pname = "droidcam-obs";
version = "2.4.1";
src = fetchurl {
url = "https://github.com/dev47apps/droidcam-obs-plugin/releases/download/${version}/droidcam_obs_${version}_linux_x86_64.zip";
sha256 = "sha256-18IjC3+WR5XLo464RuwAtWRNSpQcsnarXu56CrxCMhM=";
};
nativeBuildInputs = [ pkgs.unzip autoPatchelfHook ];
buildInputs = with pkgs; [
stdenv.cc.cc.lib
obs-studio
];
dontBuild = true;
installPhase = ''
runHook preInstall
mkdir -p $out/lib/obs-plugins
mkdir -p $out/share/obs/obs-plugins/droidcam-obs
cp bin/64bit/*.so $out/lib/obs-plugins/
cp -r data/* $out/share/obs/obs-plugins/droidcam-obs/
runHook postInstall
'';
meta = with lib; {
description = "DroidCam OBS Plugin - Use your phone as a camera in OBS (FFmpeg 7 compatible)";
homepage = "https://www.dev47apps.com/obs/";
license = licenses.unfree;
platforms = platforms.linux;
};
}
-69
View File
@@ -1,69 +0,0 @@
{
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
# as well as the libraries available from your flake's inputs.
lib,
# You also have access to your flake's inputs.
inputs,
# The namespace used for your flake, defaulting to "internal" if not set.
namespace,
# All other arguments come from NixPkgs. You can use `pkgs` to pull packages or helpers
# programmatically or you may add the named attributes as arguments here.
stdenv,
fetchurl,
nixos,
callPackage,
testers,
versionCheckHook,
hello,
...
}:
stdenv.mkDerivation (finalAttrs: {
pname = "hello";
version = "2.12.1";
src = fetchurl {
url = "mirror://gnu/hello/hello-${finalAttrs.version}.tar.gz";
hash = "sha256-jZkUKv2SV28wsM18tCqNxoCZmLxdYH2Idh9RLibH2yA=";
};
# The GNU Hello `configure` script detects how to link libiconv but fails to actually make use of that.
# Unfortunately, this cannot be a patch to `Makefile.am` because `autoreconfHook` causes a gettext
# infrastructure mismatch error when trying to build `hello`.
env = lib.optionalAttrs stdenv.hostPlatform.isDarwin {
NIX_LDFLAGS = "-liconv";
};
doCheck = true;
doInstallCheck = true;
nativeInstallCheckInputs = [
versionCheckHook
];
# Give hello some install checks for testing purpose.
postInstallCheck = ''
stat "''${!outputBin}/bin/${finalAttrs.meta.mainProgram}"
'';
passthru.tests = {
version = testers.testVersion { package = hello; };
};
passthru.tests.run = callPackage ./test.nix { hello = finalAttrs.finalPackage; };
meta = {
description = "Program that produces a familiar, friendly greeting";
longDescription = ''
GNU Hello is a program that prints "Hello, world!" when you run it.
It is fully customizable.
'';
homepage = "https://www.gnu.org/software/hello/manual/";
changelog = "https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${finalAttrs.version}";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ stv0g ];
mainProgram = "hello";
platforms = lib.platforms.all;
};
})
-8
View File
@@ -1,8 +0,0 @@
{ runCommand, hello }:
runCommand "hello-test-run" {
nativeBuildInputs = [ hello ];
} ''
diff -U3 --color=auto <(hello) <(echo 'Hello, world!')
touch $out
''
+135
View File
@@ -0,0 +1,135 @@
{
lib,
stdenv,
fetchFromGitHub,
autoPatchelfHook,
cmake,
file,
pkg-config,
python3,
SDL2,
SDL2_mixer,
cef-binary,
egl-wayland,
ffmpeg,
fftw,
glew,
glfw,
glm,
gmp,
kissfftFloat,
libxau,
libxdmcp,
libxpm,
libxrandr,
libxxf86vm,
libdecor,
libffi,
libglut,
libpng,
libpulseaudio,
lz4,
mpv,
wayland,
wayland-protocols,
wayland-scanner,
zlib,
nix-update-script,
inputs,
namespace, ...
}:
let
cef = cef-binary.override {
version = "135.0.17"; # follow upstream. https://github.com/Almamu/linux-wallpaperengine/blob/b39f12757908eda9f4c1039613b914606568bb84/CMakeLists.txt#L47
gitRevision = "cbc1c5b";
chromiumVersion = "135.0.7049.52";
srcHashes = {
aarch64-linux = "sha256-LK5JvtcmuwCavK7LnWmMF2UDpM5iIZOmsuZS/t9koDs=";
x86_64-linux = "sha256-JKwZgOYr57GuosM31r1Lx3DczYs35HxtuUs5fxPsTcY=";
};
};
in
stdenv.mkDerivation (finalAttrs: {
pname = "linux-wallpaperengine";
version = "0-unstable-2025-12-19";
src = fetchFromGitHub {
owner = "Almamu";
repo = "linux-wallpaperengine";
rev = "f79c29f067b2613895419e351033582464577154";
fetchSubmodules = true;
hash = "sha256-AISdouVqMXTYErQoT7oM5H+vlrw03NtpI9FqDwZ0J9A=";
};
nativeBuildInputs = [
autoPatchelfHook
cmake
file
pkg-config
python3
];
buildInputs = [
SDL2
SDL2_mixer
egl-wayland
ffmpeg
fftw
glew
glfw
glm
gmp
kissfftFloat
libxau
libxdmcp
libxpm
libxrandr
libxxf86vm
libdecor
libffi
libglut
libpng
libpulseaudio
lz4
mpv
wayland
wayland-protocols
wayland-scanner
zlib
];
cmakeFlags = [
"-DCEF_ROOT=${cef}"
"-DCMAKE_INSTALL_PREFIX=${placeholder "out"}/share/linux-wallpaperengine"
];
postInstall = ''
rm -rf $out/bin $out/lib $out/include
chmod 755 $out/share/linux-wallpaperengine/linux-wallpaperengine
mkdir $out/bin
ln -s $out/share/linux-wallpaperengine/linux-wallpaperengine $out/bin/linux-wallpaperengine
'';
preFixup = ''
find $out/share/linux-wallpaperengine -type f -exec file {} \; | grep 'ELF' | cut -d: -f1 | while read -r elf_file; do
patchelf --shrink-rpath --allowed-rpath-prefixes "$NIX_STORE" "$elf_file"
done
'';
passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; };
meta = {
description = "Wallpaper Engine backgrounds for Linux";
homepage = "https://github.com/Almamu/linux-wallpaperengine";
license = lib.licenses.gpl3Plus;
mainProgram = "linux-wallpaperengine";
maintainers = [ ];
platforms = [
"x86_64-linux"
"aarch64-linux"
];
hydraPlatforms = [ "x86_64-linux" ]; # Hydra "aarch64-linux" fails with "Output limit exceeded"
};
})
+89
View File
@@ -0,0 +1,89 @@
{
lib,
stdenv,
fetchFromGitHub,
meson,
ninja,
pkg-config,
gobject-introspection,
glib,
gnome,
mutter,
cairo,
gsettings-desktop-schemas,
wayland,
libglvnd,
libxfixes,
libxi,
atk,
libxkbcommon,
clutter,
cmake,
gnome-shell,
lcms2,
}:
stdenv.mkDerivation {
pname = "gnome-rounded-blur";
version = "unstable-2026-06-11";
src = fetchFromGitHub {
owner = "kancko";
repo = "gnome-rounded-blur";
# Replace this with a fixed commit.
rev = "master";
# Run once with lib.fakeHash, then replace with the real hash.
hash = "sha256-MBeb0/Drt0UQ/K8UaW93ae9OaV3L5nhFZB2tPwj47co=";
};
nativeBuildInputs = [
meson
ninja
pkg-config
gobject-introspection
cmake
];
buildInputs = [
glib
mutter
cairo
gsettings-desktop-schemas
wayland
libglvnd
libxfixes
libxi
atk
libxkbcommon
clutter
(lib.getDev mutter)
(lib.getLib mutter)
(lib.getDev gnome-shell)
(lib.getLib gnome-shell)
lcms2 # required by mutter-clutter
];
postFixup = ''
for libfile in $out/lib/libblur-effect-1.0.so*; do
if [ -f "$libfile" ] && [ ! -L "$libfile" ]; then
patchelf --set-rpath "${
lib.makeLibraryPath [
glib
wayland
(lib.getLib mutter)
]
}:$out/lib" "$libfile"
fi
done
'';
# The upstream meson file installs:
# - libblur-effect-1.0.so*
# - Blur-1.0.gir
# - Blur-1.0.typelib
# See src/meson.build.
meta = {
description = "Rounded blur GObject library for GNOME Shell extensions";
homepage = "https://github.com/kancko/gnome-rounded-blur";
license = lib.licenses.gpl3Plus;
platforms = lib.platforms.linux;
};
}
+53
View File
@@ -0,0 +1,53 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
glib,
}:
stdenvNoCC.mkDerivation rec {
pname = "rounded-windows-bms";
version = "2.2.0-bms-fix";
src = fetchFromGitHub {
owner = "MeguMario";
repo = "rounded-windows";
rev = "bms-fix";
# Put a fake hash first; Nix will tell you the real one.
hash = "sha256-5llnqW1dK3jsMRfvxb1VrSkZ/DSXsfU3PiNmpbb5CLw=";
};
nativeBuildInputs = [
glib
];
installPhase = ''
runHook preInstall
uuid="rounded-windows@marcosgt.github.io"
extension_dir="$out/share/gnome-shell/extensions/$uuid"
mkdir -p "$extension_dir"
cp metadata.json extension.js effect.js prefs.js stylesheet.css "$extension_dir/"
mkdir -p "$extension_dir/schemas"
cp schemas/*.xml "$extension_dir/schemas/"
glib-compile-schemas "$extension_dir/schemas"
runHook postInstall
'';
passthru = {
extensionUuid = "rounded-windows@marcosgt.github.io";
};
meta = {
description = "Rounded Window Corners GNOME extension with Blur-My-Shell compatibility fix";
homepage = "https://github.com/MeguMario/rounded-windows/tree/bms-fix";
license = lib.licenses.gpl3Only;
platforms = lib.platforms.linux;
};
}
+21 -12
View File
@@ -20,23 +20,32 @@ sops:
- recipient: age19j24x89dfh4f7v58c8k64yupqas4f7qkkyper7yj9dd7vqwvvq0qkyvhxk - recipient: age19j24x89dfh4f7v58c8k64yupqas4f7qkkyper7yj9dd7vqwvvq0qkyvhxk
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBdGZlV3R4eW5FYS9HZGYr YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4U204eXIyaDJFMXIweXp1
N3VSR0tIbzUrL0RsUEw2NkZtUWcxVG55bEIwCjQ5U0Ztd1luUEQ2SEg4RHA2RWRK NEhoYU5qa3B5Q1VpODNsSEpuT0txRWpuVDM0CmptVHNFQkpWTkJ2M3B4dWpWN0s4
K3dhN2liMDYyZElhbkZEUC9namhrc2MKLS0tIEhYTEYwQWduNkdKbGJQcTBRUWVG ZjRuc3BhckVLSzFuOGJ3WTB0YnRRRDgKLS0tIHlaSUxITUlGU3VaRWZFbENUTVY2
aDMwR1I5NG13dUhwRXg1TXI4dG9nWXMKti+hv0+7/Rz0W22bToYs1/DFzoMllHpB SWVwUGVxcGJscG5PalphZFVIS1ZjY2MKi4VvrNW1AH+fJaI/rzOltPylSiY1z3nS
7uuVpUFDuC2D40ize0UX4rJ8Yo63lhJrRpsxIhzkP/vq+wMAFrKKLg== ebrYdpyM5KKQ46uezvU4J3Qau/Inv8CkZ72vHlQ6EK2kmmZZLszwJg==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age1ma8x6wugvc40mkst33mejq0m6r44jk6zwjjun3znyer5nztgn9vs0nwjx4 - recipient: age1ma8x6wugvc40mkst33mejq0m6r44jk6zwjjun3znyer5nztgn9vs0nwjx4
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnK0dSTTVJWmt3aS91UmFm YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyVHVwMEZjVk8xMTNIekF1
Ui9zT3VpMlBybWJXOVdKdU5mTkprdU5WRm00CktHd2g4M1VldHhTQyszRTVTOUtt ZFlZbFhvOTJSbVN4ZmorSmFCbkxBUUxOOERJCjBjMkdxQ0V4OXEwdGF2Sno4VTh2
Mld4a3lYSHF2SytIc0RjQ1RoODQvaE0KLS0tIGN3SlpMeTEvNktNSm5oT0dXRVFr MURQMUhQV083M3lpREFRM2Qza3JLN0kKLS0tIEFoeUVsL3poajljMDEwTCtWcXRD
UmZrTXhyM2hYWW1kY05xa01PM1MzUDAK67AkP1XE445RXbVxcksRXL7MYHFjLPLV Y3NHNmVDZFZuNjlUUDdMa3N3ZVNTWkUKeO4sT0ZyTAyrMKj27fbFhQZ+bDMru6Bk
ITL404AabakBeOX9yixwymzkD1BbUYEdW6N28ntqdH5cZZfVteYdMA== j4Im41l9ClpIVQt8iz61mwKrm+QmBA9r1aL34u3lGQyKBOk4vq/m9A==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2024-11-07T10:47:23Z" - recipient: age1s5qwsuc3e4m3c4w5hl6tyja70w273gr60j9j9dcpc6mz69lemg3qpwud3h
mac: ENC[AES256_GCM,data:zqkbmx7XIHQnOVkozPLiBzsNhACbGwvWiFcFlEHhlyEeQ7rvltLlUlgivb7aawwG1RuxCwshHwLfuKRQ/iGJcXjFO4UM5VER6CAA/88UrpgXW8VBw8iuchr+Y58lu0s+98fj7VffcuWjhJ1AYvBxFaTZA6DjxFjv3l1Gyxtw6kM=,iv:XG9Qb61INy1OJZjI3cDbY9fswLqf8+QvcUMrmtKGtuQ=,tag:+JacTF/+qU+j/cm8Wn1c8g==,type:str] enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUT3dKNk4rSVZUck5LZ2t1
eUhPSXBURUFGbnU4NUtjMVVpeGI5eVI1SVc4CkdTY25jTy91VFhLS1F3V3ZzM1A4
OGMxWmtWd1lVU3dZcG8xWlRwYkorSU0KLS0tIE12WlFyUWZ0dHYvTEd0N0tPWUt1
bldpMnp5cnpXN2J5MEc5cC9DZktEekUKC6sei7v252fZyW8sd1xuZDjwoJFCKGot
t9f+jUDOx5wGlH53Fd2jCRArKZkQ850sFj79Lh2Rx6wbDj1Ks5XcVA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-12-10T04:12:19Z"
mac: ENC[AES256_GCM,data:AcuCxKGm9xLgn/gnk0XDVtLM5PWQvgGd+qXusuvwCUV4ln1//Lpwpp3TL0mEMdwEcFOdCasW4A10rGpCoBqKsckroiUSEB0G2p0vrD3b3Vmo804JYcKmSZ85InZCXUWenfOTEzx/A1ruqSBSkRYro+NdyZ/+JXQVXnTLCPesgwE=,iv:UPRNsfeUKnml9OFkkqrI0fI4f/RWN2ovTsaItwT8Y0c=,tag:75NEPjeAXUwlCPGbLPhPFg==,type:str]
pgp: [] pgp: []
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.9.1 version: 3.9.1
+29
View File
@@ -0,0 +1,29 @@
let
nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-24.05";
pkgs = import nixpkgs { config = { }; overlays = [ ]; };
in
pkgs.mkShellNoCC {
packages = with pkgs; [
cowsay
lolcat
# bitwarden-desktop #replaced bitwarden
bitwarden-cli
sops
];
GREETING = "Hello, Nix!";
shellHook = ''
echo $GREETING | cowsay | lolcat
bw config server https://vault.subsonics.nl
echo "please enter bitwarden email"
read BW_USER
echo "please enter bitwarden password"
read -s BW_PASSWORD
bw login $BW_USER $BW_PASSWORD
BW_SESSION="$(bw unlock $BW_PASSWORD --raw)"
mkdir -p ~/.config/sops/age
bw get attachment keys.txt --itemid ee6a90b0-4120-46f7-a1c6-9648316e43d5 --output ~/.config/sops/age/keys.txt
'';
}
@@ -0,0 +1,17 @@
{ ... }:
{
services.code-server = {
enable = true;
user = "andreas";
group = "users";
host = "0.0.0.0";
port = 1337;
auth = "password";
hashedPassword = "$argon2i$v=19$m=4096,t=3,p=1$Njl5em15cVdqMVluSWJneWp4OUhObGgxZ0tnPQ$1AAVNLuuKv5qyno40QAxFVPeAydY+8XkEVovKYrkJN0";
disableTelemetry = true;
disableUpdateCheck = true;
};
networking.firewall.allowedTCPPorts = [ 1337 ];
}
@@ -2,16 +2,23 @@
# your system. Help is available in the configuration.nix(5) man page # your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’). # and in the NixOS manual (accessible by running ‘nixos-help’).
{ config, pkgs, ... }: {
# config,
pkgs,
...
}:
{ {
imports = imports = [
[ ./code-server.nix
./tigervnc.nix
./hardware/hardware-configuration.nix ./hardware/hardware-configuration.nix
./hardware/realtek-r8125.nix
]; ];
# Bootloader. # Bootloader.
boot.loader.systemd-boot.enable = true; # boot.loader.systemd-boot.enable = true; # managed by lanzaboote
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
nix.settings.experimental-features = [ "nix-command" "flakes" ]; nix.settings.experimental-features = [ "nix-command" "flakes" ];
networking.hostName = "drivebystation-nix"; # Define your hostname. networking.hostName = "drivebystation-nix"; # Define your hostname.
@@ -41,30 +48,65 @@
LC_TELEPHONE = "nl_NL.UTF-8"; LC_TELEPHONE = "nl_NL.UTF-8";
LC_TIME = "nl_NL.UTF-8"; LC_TIME = "nl_NL.UTF-8";
}; };
system.activationScripts."stremio-mpv-flatpak-patch" = {
text = ''
# 1. Provide the symlink where Stremio's player engine queries
mkdir -p /usr/bin
ln -sf /run/current-system/sw/bin/mpv /usr/bin/mpv
# Enable the X11 windowing system. # 2. Locate and patch the runtime server.js file inside the active Flatpak installation
services.xserver.enable = true; TARGET_FILE="/var/lib/flatpak/app/com.stremio.Stremio/current/active/files/opt/stremio/server.js"
# Enable the GNOME Desktop Environment. if [ -f "$TARGET_FILE" ]; then
services.xserver.displayManager.gdm.enable = true; # Make sure the file is writable momentarily for the patch
services.xserver.displayManager.defaultSession = "gnome"; chmod +w "$TARGET_FILE"
# services.xserver.displayManager.lightdm.enable = true;
# services.xserver.displayManager.autoLogin.enable = true; # Inject the flatpak-spawn sequence into the linux player profile
sed -i 's|linux:{path:\["\/usr\/bin\/mpv"\]|linux:{path:["/usr/bin/flatpak-spawn"],args:["--host","/usr/bin/mpv"]|g' "$TARGET_FILE"
sed -i 's|linux:{path:\["mpv"\]|linux:{path:["/usr/bin/flatpak-spawn"],args:["--host","/usr/bin/mpv"]|g' "$TARGET_FILE"
# Restore permissions
chmod -w "$TARGET_FILE"
fi
'';
};
services = {
# Enable Gnome Session
displayManager.gdm.enable = true;
displayManager.sddm.enable = false;
# displayManager.sddm.wayland.enable = true;
displayManager.autoLogin = {
enable = false;
user = "andreas";
};
displayManager.cosmic-greeter.enable = false;
displayManager.defaultSession = "gnome";
# Clear the sandbox restriction dynamically
xserver = {
enable = true; # Enable the deprecated X11 teletype terminal connection system.
# Configure Display Manager
displayManager = {
lightdm.enable = false;
};
# Configure keymap in X11
xkb = {
layout = "us";
variant = "intl";
};
# Specify first device section to use nvidia GPU
};
};
# services.xserver.displayManager.defaultSession = "gnome-x11"; # services.xserver.displayManager.autoLogin.enable = true;
# services.xserver.displayManager.autoLogin.user = "andreas"; # services.xserver.displayManager.autoLogin.user = "andreas";
# systemd.services."getty@tty1".enable = false; # systemd.services."getty@tty1".enable = false;
# systemd.services."autovt@tty1".enable = false; # systemd.services."autovt@tty1".enable = false;
services.xserver.desktopManager.gnome.enable = true;
services.desktopManager.plasma6.enable = true;
programs.ssh.askPassword = "${pkgs.x11_ssh_askpass}/libexec/x11-ssh-askpass"; programs.ssh.askPassword = "${pkgs.x11_ssh_askpass}/libexec/x11-ssh-askpass";
# Configure keymap in X11
services.xserver.xkb = {
layout = "us";
variant = "intl";
};
# Configure console keymap # Configure console keymap
console.keyMap = "us-acentos"; console.keyMap = "us-acentos";
@@ -72,7 +114,7 @@
services.printing.enable = true; services.printing.enable = true;
# Enable sound with pipewire. # Enable sound with pipewire.
hardware.pulseaudio.enable = false; services.pulseaudio.enable = false;
security.rtkit.enable = true; security.rtkit.enable = true;
services.pipewire = { services.pipewire = {
enable = true; enable = true;
@@ -80,30 +122,97 @@
alsa.support32Bit = true; alsa.support32Bit = true;
pulse.enable = true; pulse.enable = true;
# If you want to use JACK applications, uncomment this # If you want to use JACK applications, uncomment this
#jack.enable = true; jack.enable = true;
# use the example session manager (no others are packaged yet so this is enabled by default, # use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now) # no need to redefine it in your config for now)
#media-session.enable = true; #media-session.enable = true;
}; };
# Enable gamemode for game optimization
programs.gamemode.enable = true;
# Enable touchpad support (enabled default in most desktopManager). # Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true; # services.xserver.libinput.enable = true;
# Install firefox. # Install firefox.
programs.firefox.enable = true; programs.firefox.enable = true;
# Enable XWayland for X11 application compatibility
programs.xwayland.enable = true;
# docker
virtualisation.docker = {
enable = true;
};
# Allow unfree packages # Allow unfree packages
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
# Enable --Akonadi--/ kde-pim for calendar backend
programs.kde-pim.enable = true;
services.dbus.enable = true;
# List packages installed in system profile. To search, run: # List packages installed in system profile. To search, run:
# $ nix search wget # $ nix search wget
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
# wget # wget
pkgs.gnome3.gnome-tweaks (python3.withPackages (ps: with ps; [ websockets ]))
sqlite
javaPackages.compiler.openjdk25
javaPackages.compiler.openjdk21
qt6.qtwebengine
qemu
mpv
krita
ntfs3g
htop
rivalcfg
blender
freecad
reaper
discord
betterdiscordctl
]; ];
environment.etc."xdg/autostart/xwaylandvideobridge.desktop".text = ''
[Desktop Entry]
Hidden=true
'';
services.udisks2.settings = { # Should fix mounting ntfs system partition - Did not work
"udisks2.conf" = {
defaults = {
allow_mount_internal = true;
allow_mount_system = true;
};
};
};
services.gvfs.enable = true; # For file manager integration
# Enable udev rules for SteelSeries devices (rivalcfg)
services.udev.packages = [ pkgs.rivalcfg ];
# Disable iBus (not needed unless using Asian input methods)
i18n.inputMethod = {
enable = false;
};
virtualisation.libvirtd = {
enable = true;
qemu = {
package = pkgs.qemu;
runAsRoot = true;
swtpm.enable = true;
vhostUserPackages = [ pkgs.virtiofsd ];
};
};
systemd.tmpfiles.rules = [ "L+ /var/lib/qemu/firmware - - - - ${pkgs.qemu}/share/qemu/firmware" ];
# Some programs need SUID wrappers, can be configured further or are # Some programs need SUID wrappers, can be configured further or are
# started in user sessions. # started in user sessions.
# programs.mtr.enable = true; # programs.mtr.enable = true;
@@ -115,13 +224,88 @@
# List services that you want to enable: # List services that you want to enable:
# Enable the OpenSSH daemon. # Enable the OpenSSH daemon.
# services.openssh.enable = true; services.openssh.enable = true;
# Open ports in the firewall. # Open ports in the .
# networking.firewall.allowedTCPPorts = [ ... ]; networking.firewall.allowedTCPPorts = [
# networking.firewall.allowedUDPPorts = [ ... ]; 24800 #Synergy
# Or disable the firewall altogether. 53317 #localsend
# networking.firewall.enable = false; 3390 #rdp
9090
8000
40122
];
networking.firewall.allowedUDPPorts = [
24800 #Synergy
53317 #localsend
3390 #rdp
9090
8000
40122
];
networking.firewall.trustedInterfaces = [ "virbr0" ];
networking.nat = {
enable = true;
internalInterfaces = [ "virbr0" ];
externalInterface = "enp75s0";
extraCommands = ''
# MASQUERADE forwarded traffic to VM so it knows how to route back
iptables -t nat -A nixos-nat-post -o virbr0 -j MASQUERADE
'';
forwardPorts = [
{
sourcePort = 9090;
proto = "tcp";
destination = "192.168.122.113:9090";
}
{
sourcePort = 9090;
proto = "udp";
destination = "192.168.122.113:9090";
}
];
};
services.mullvad-vpn = {
enable = true;
package = pkgs.mullvad-vpn;
};
fonts = {
packages = with pkgs; [
noto-fonts
noto-fonts-color-emoji
];
fontconfig = {
enable = true;
defaultFonts = {
sansSerif = [ "DejaVu Sans" "Noto Color Emoji" ];
serif = [ "DejaVu Serif" "Noto Color Emoji" ];
monospace = [ "DejaVu Sans Mono" "Noto Color Emoji" ];
emoji = [ "Noto Color Emoji" ];
};
};
};
# services.xrdp = {
# enable = true;
# openFirewall = true;
# defaultWindowManager = "cinnamon-session";
# };
### tigervnc
services.tigervnc = {
enable = false;
users = {
andreas = {
localhost = false; # true for SSH-only
};
};
};
### tigervnc END
# This value determines the NixOS release from which the default # This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions # settings for stateful data, like file locations and database versions
@@ -129,6 +313,6 @@
# this value at the release version of the first install of this system. # this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option # Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.05"; # Did you read the comment? system.stateVersion = "26.05"; # Did you read the comment?
} }
@@ -10,106 +10,205 @@
inputs, inputs,
# Additional metadata is provided by Snowfall Lib. # Additional metadata is provided by Snowfall Lib.
# The namespace used for your flake, defaulting to "internal" if not set. # The namespace used for your flake, defaulting to "internal" if not set.
namespace, # namespace,
# The system architecture for this host (eg. `x86_64-linux`). # The system architecture for this host (eg. `x86_64-linux`).
system, # system,
# The Snowfall Lib target for this system (eg. `x86_64-iso`). # The Snowfall Lib target for this system (eg. `x86_64-iso`).
target, # target,
# A normalized name for the system target (eg. `iso`). # A normalized name for the system target (eg. `iso`).
format, # format,
# A boolean to determine whether this system is a virtual target using nixos-generators. # A boolean to determine whether this system is a virtual target using nixos-generators.
virtual, # virtual,
# An attribute map of your defined hosts. # An attribute map of your defined hosts.
systems, # systems,
# All other arguments come from the system system. # All other arguments come from the system system.
config # config,
, ... ...
}: }:
let let
inherit (lib.my-namespace) enabled; # inherit (lib.my-namespace) systemPackages;
inherit pkgs; inherit pkgs;
installedPackages = lib.my-namespace.mkPackages pkgs; installedPackages = lib.my-namespace.mkPackages pkgs;
# Explicit application exceptions; all other packages use stable pkgs.
unstablePkgs = import inputs.nixpkgs-unstable {
system = pkgs.stdenv.hostPlatform.system;
config.allowUnfree = true;
};
in in
{ {
# inherit system; # inherit system;
imports = [ imports = [
./configuration.nix ./configuration.nix
./steam.nix ./mutter-tearing.nix
./video.nix ./video.nix
inputs.wallpaperengine.nixosModules.default
inputs.aagl.nixosModules.default
]; ];
config = { config = {
system.stateVersion = "24.05"; programs.linux-wallpaperengine.enable = true;
system.stateVersion = "26.05";
nix.settings.experimental-features = [ "nix-command" "flakes" ]; nix.settings.experimental-features = [ "nix-command" "flakes" ];
# Distrobox
my-namespace.distrobox.enable = true;
# Desktops
my-namespace.desktop-environment.cinnamon.enable = true;
my-namespace.desktop-environment.xfce.enable = false;
my-namespace.desktop-environment.gnome.enable = true;
my-namespace.desktop-environment.kde.enable = false;
my-namespace.desktop-environment.hyprland.enable = false;
my-namespace.desktop-environment.cosmic.enable = false;
my-namespace.performance-tuning.enable = true;
my-namespace.rtl8125-recovery.enable = true;
my-namespace.file-organization.enable = true;
# GNOME-keyring
my-namespace.gnome-keyring.enable = true;
# CS Tools
my-namespace.cs-tools.enable = true;
# Define a user account. Don't forget to set a password with ‘passwd’. # Define a user account. Don't forget to set a password with ‘passwd’.
users.users.andreas = { users.users.andreas = {
isNormalUser = true; isNormalUser = true;
description = "Andreas Schaafsma"; description = "Andreas Schaafsma";
extraGroups = [ "networkmanager" "wheel" ] ; extraGroups = [
"networkmanager"
"wheel"
"libvirtd"
"plugdev"
"docker"
"gamemode"
];
packages = with pkgs; [ packages = with pkgs; [
# Packages from inputs # Packages from inputsq
inputs.game-of-life.packages.x86_64-linux.default # inputs.game-of-life.packages.x86_64-linux.default
inputs.zen-browser.packages.x86_64-linux.default inputs.zen-browser.packages.x86_64-linux.default
inputs.nixos-cosmic # inputs.anikki.packages.x86_64-linux.default
# We want flatpak support
flatpak flatpak
gnome-software # GNOME shit
gnomeExtensions.pop-shell thunderbird
soundwireserver soundwireserver
vscode # vscode
# discord
spotify spotify
appimage-run appimage-run
minecraft prismlauncher #replaces broken minecraft package
trilium-desktop unstablePkgs.trilium-desktop
terraform terraform
virt-manager
nil
codex
inputs.codex-desktop.packages.${pkgs.stdenv.hostPlatform.system}.codex-desktop
# thunderbird # thunderbird
]; ];
}; };
my-namespace.cosmic-desktop.enable = false; programs.appimage = {
enable = true;
binfmt = true;
};
programs.anime-game-launcher.enable = true; # Adds launcher and /etc/hosts rules
programs.anime-games-launcher.enable = true;
services.gnome.gnome-remote-desktop.enable = true;
my-namespace.keychron-keyboard.enable = true;
# lib.my-namespace.home.stream-tools.enable = true; # lib.my-namespace.home.stream-tools.enable = true;
# Open ports in the firewall. # Open ports in the firewall.
networking.firewall.allowedTCPPorts = [ networking.firewall.allowedTCPPorts = [
59010 #SoundWireServer 59010 #SoundWireServer
5901
5001
11434
3389 #RDP 3389 #RDP
22 #ssh
]; ];
networking.firewall.allowedUDPPorts = [ networking.firewall.allowedUDPPorts = [
59010 #SoundWireServer 59010 #SoundWireServer
5901
5001
11434
3389 #RDP 3389 #RDP
22 #ssh
]; ];
# Or disable the firewall altogether. # Or disable the firewall altogether.
# networking.firewall.enable = false; networking.firewall.enable = false;
# Install firefox. # Install firefox.
programs.firefox.enable = true; programs.firefox.enable = true;
nixpkgs.config.allowBroken = true; nixpkgs.config.allowBroken = true;
powerManagement.cpuFreqGovernor = "performance";
# Set up system Packages # Set up system Packages
environment.sessionVariables.GI_TYPELIB_PATH =
lib.makeSearchPath "lib/girepository-1.0" [
pkgs.my-namespace.rounded-blur
];
environment.sessionVariables = {
# If you are using Hyprland, labwc, or Sway (wlroots-based):
WLR_DRM_NO_ATOMIC = "1";
KWIN_DRM_DISABLE_TRIPLE_BUFFERING="1";
# If you are using KDE Plasma (KWin):
KWIN_FORCE_SW_CURSOR = "1";
# For modern wlroots (and Aquamarine in Hyprland) to force software cursors:
WLR_NO_HARDWARE_CURSORS = "1";
};
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
git git
wine wine
bottles # bottles
gparted gparted
ntfs3g ntfs3g
ntfsprogs ntfsprogs
synergy
mangohud
my-namespace.udev-steelseries my-namespace.udev-steelseries
my-namespace.hello my-namespace.linux-wallpaperengine
# stuff I installed to try to get gamescope to work to no avail Gamescope is just broken it seems. my-namespace.rounded-blur
# pkgs.mesa my-namespace.rounded-windows-bms
# pkgs.vulkan-loader my-namespace.cs-demo-manager
# pkgs.vulkan-validation-layers vscode-modernized
# pkgs.vulkan-extension-layer zed-editor
# pkgs.vulkan-tools unstablePkgs.jetbrains-toolbox
# pkgs.libva
# pkgs.libva-utils (pkgs.writeShellScriptBin "switch-to-desktop" ''
#!/bin/sh
# Kill Steam and return to display manager
pkill steam || true
pkill gamescope || true
# End the session cleanly
loginctl terminate-session "$XDG_SESSION_ID"
'')
(pkgs.writeShellScriptBin "steamos-session-select" ''
#!/bin/sh
exec switch-to-desktop
'')
# Vulkan packages for Steam
mesa
vulkan-loader
vulkan-validation-layers
vulkan-extension-layer
vulkan-tools
libva
libva-utils
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
# wget # wget
] ]
++ installedPackages.packages; ++ installedPackages.packages;
programs.nix-ld = { programs.nix-ld = {
enable = true; enable = true;
package = pkgs.nix-ld-rs; package = pkgs.nix-ld; #replaces nix-ld-rs
}; };
services.flatpak.enable = true; services.flatpak.enable = true;
systemd.services.flatpak-repo = { systemd.services.flatpak-repo = {
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
@@ -130,14 +229,17 @@ in
# services.xrdp.enable = true; # services.xrdp.enable = true;
# services.xrdp.defaultWindowManager = "${pkgs.gnome-session}/bin/gnome-session"; # services.xrdp.defaultWindowManager = "${pkgs.gnome-session}/bin/gnome-session";
# services.xrdp.defaultWindowManager = "startxfce4";
# services.xrdp.openFirewall = true; # services.xrdp.openFirewall = true;
# services.xrdp.audio.enable = false;
# Disable the GNOME3/GDM auto-suspend feature that cannot be disabled in GUI! # Disable the GNOME3/GDM auto-suspend feature that cannot be disabled in GUI!
# If no user is logged in, the machine will power down after 20 minutes. # If no user is logged in, the machine will power down after 20 minutes.
systemd.targets.sleep.enable = true;
systemd.targets.suspend.enable = true; # systemd.targets.sleep.enable = false;
systemd.targets.hibernate.enable = true; # systemd.targets.suspend.enable = false;
systemd.targets.hybrid-sleep.enable = true; # systemd.targets.hibernate.enable = false;
# systemd.targets.hybrid-sleep.enable = false;
}; };
} }
@@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
{ {
boot.kernelParams = [ "drm.edid_firmware=DP-6:edid/edid.bin" ]; # boot.kernelParams = [ "drm.edid_firmware=DP-1:edid/edid.bin,DP-2:edid/edid.bin,DP-3:edid/edid.bin,DP-4:edid/edid.bin" ];
boot.kernelParams = [
"drm.edid_firmware=DP-2:edid/edid.bin,DP-4:edid/edid.bin"
];
hardware.firmware = [ hardware.firmware = [
( (
@@ -0,0 +1,141 @@
{ config, lib, pkgs, ... }:
{
############################
## Display + Mesa Settings
############################
# hardware.enableRedistributableFirmware = true;
hardware.firmware = [
pkgs.linux-firmware
# pkgs.firmwareLinuxNonfree
# pkgs.firmwareLinuxStrict
# pkgs.firmwareLinuxLatest
];
# boot.kernelPackages = pkgs.linuxPackages_latest;
boot.kernelParams = [
"console=tty0"
# "efifb=off"
"xe.force_probe=e20b"
# Xe stability improvements for B580
"xe.guc_log_level=0" # Reduce GuC logging overhead
"xe.enable_display=1" # Ensure display is enabled
# Memory/performance parameters
"mitigations=off" # Disable CPU mitigations for better performance
"module_blacklist=nouveau,nvidia,nvidia_drm,nvidia_modeset,nvidia_uvm"
];
services.switcherooControl.enable = true;
# environment.variables.VK_ICD_FILENAMES = "/run/opengl-driver/share/vulkan/icd.d/intel_icd.x86_64.json";
hardware.intel-gpu-tools.enable = true;
hardware.graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [
intel-media-driver # Intel VAAPI
vpl-gpu-rt # oneVPL runtime
intel-vaapi-driver # fallback
intel-compute-runtime # OpenCL/Level Zero
level-zero # Level Zero API for compute
intel-graphics-compiler # Shader compiler for Arc GPUs allgedly needed for XPU
];
};
# Ensure Arc driver is available (usually auto-loaded)
boot.kernelModules = [ "xe" "i915" ];
# Blacklist everything for nvidia
boot.blacklistedKernelModules = [
"nouveau"
"nvidia"
"nvidia_drm"
"nvidia_modeset"
"nvidia_uvm"
];
# Mark Arc B580 as a discrete Intel GPU for switcheroo-control and
# keep runtime PCI power management enabled for the device.
services.udev.extraRules = ''
ACTION=="add|bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x8086", ATTR{device}=="0xe20b", TEST=="power/control", ATTR{power/control}="auto"
SUBSYSTEM=="drm", DRIVERS=="xe", ATTRS{vendor}=="0x8086", ATTRS{device}=="0xe20b", TAG+="switcheroo-discrete-gpu"
'';
environment.variables = {
# Force Intel GPU for all graphics operations
KWIN_DRM_DEVICES = "/dev/dri/card0";
# Vulkan/DXVK optimizations for B580
ANV_ENABLE_PIPELINE_CACHE = "1";
# Shader cache settings
MESA_SHADER_CACHE_DISABLE = "false";
MESA_SHADER_CACHE_MAX_SIZE = "10G";
# DXVK optimizations
DXVK_HUD = "compiler"; # Monitor shader compilation
# DXVK_ASYNC = "1"; # Enable if you want async shader compilation (may cause issues)
# Intel IPEX / PyTorch settings
ZE_ENABLE_ALT_DRIVERS = "libze_intel_gpu.so.1"; # Enable Intel GPU driver for Level Zero
SYCL_CACHE_PERSISTENT = "1"; # Enable persistent SYCL cache
SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS = "1"; # Performance optimization
};
############################
## LACT Settings for Overclocking
############################
services.lact.enable = true;
############################
## X / Wayland GPU Drivers
############################
# Enable modesetting driver for X11 (required for Intel Xe)
services.xserver.videoDrivers = [
"modesetting"
#"intel"
];
services.xserver.enable = true;
services.xserver.autorun = false;
services.xserver.displayManager.startx.enable = true;
# Xorg configuration for Intel Arc Battlemage (xe driver)
# Based on: https://www.reddit.com/r/crtgaming/comments/1knom2t/guide_intel_arc_b580_arch_linux_xorg/
# Intel Arc B-series at PCI 0000:03:00.0
#services.xserver.deviceSection = ''
# Option "AccelMethod" "glamor"
# BusID "PCI:3:0:0"
#'';
############################
## User Access
############################
users.users.andreas.extraGroups = [ "video" "render" ];
############################
## System Packages for AI/ML
############################
environment.systemPackages = with pkgs; [
intel-compute-runtime
level-zero
# For checking GPU compute capabilities
clinfo
vulkan-tools
];
services.xserver.config = ''
Section "Device"
Identifier "AMD"
Driver "amdgpu"
Option "TearFree" "false"
EndSection
'';
services.xserver.deviceSection = ''
Option "TearFree" "false"
'';
}
@@ -0,0 +1,90 @@
{ config, lib, pkgs, ... }:
{
############################
## Display + Mesa Settings
############################
# hardware.enableRedistributableFirmware = true;
hardware.firmware = [
pkgs.linux-firmware
# pkgs.firmwareLinuxNonfree
# pkgs.firmwareLinuxStrict
# pkgs.firmwareLinuxLatest
];
# boot.kernelPackages = pkgs.linuxPackages_latest;
boot.kernelParams = [
"console=tty0"
# "efifb=off"
# "xe.force_probe=*"
"module_blacklist=nouveau,nvidia,nvidia_drm,nvidia_modeset,nvidia_uvm"
];
# environment.variables.VK_ICD_FILENAMES = "/run/opengl-driver/share/vulkan/icd.d/intel_icd.x86_64.json";
hardware.intel-gpu-tools.enable = true;
hardware.graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [
intel-media-driver # Intel VAAPI
vpl-gpu-rt # oneVPL runtime
intel-vaapi-driver # fallback
intel-compute-runtime # OpenCL/Level Zero
];
};
# Ensure Arc driver is available (usually auto-loaded)
boot.kernelModules = [ "i915" ];
# Blacklist everything for nvidia
boot.blacklistedKernelModules = [
"nouveau"
"nvidia"
"nvidia_drm"
"nvidia_modeset"
"nvidia_uvm"
"xe"
];
environment.variables = {
KWIN_DRM_DEVICES = "/dev/dri/card0";
};
############################
## LACT Settings for Overclocking
############################
services.lact.enable = true;
############################
## X / Wayland GPU Drivers
############################
# Enable modesetting driver for X11 (required for Intel Xe)
services.xserver.videoDrivers = [
"modesetting"
#"intel"
];
services.xserver.enable = true;
services.xserver.autorun = false;
services.xserver.displayManager.startx.enable = true;
# Xorg configuration for Intel Arc Battlemage (xe driver)
# Based on: https://www.reddit.com/r/crtgaming/comments/1knom2t/guide_intel_arc_b580_arch_linux_xorg/
# Intel Arc B-series at PCI 0000:03:00.0
#services.xserver.deviceSection = ''
# Option "AccelMethod" "glamor"
# BusID "PCI:3:0:0"
#'';
############################
## User Access
############################
users.users.andreas.extraGroups = [ "video" "render" ];
}
@@ -0,0 +1,74 @@
{ config, lib, pkgs, ... }:
{
############################
## Display + Mesa Settings
############################
# hardware.enableRedistributableFirmware = true;
hardware.firmware = [
pkgs.linux-firmware
# pkgs.firmwareLinuxNonfree
# pkgs.firmwareLinuxStrict
# pkgs.firmwareLinuxLatest
];
# boot.kernelPackages = pkgs.linuxPackages_latest;
boot.kernelParams = [
"console=tty0"
"efifb=off"
"xe.force_probe=*"
"nvidia-drm.modeset=1"
];
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
intel-media-driver # Intel VAAPI
vpl-gpu-rt # oneVPL runtime
intel-vaapi-driver # fallback
];
};
# Ensure Arc driver is available (usually auto-loaded)
boot.kernelModules = [ "xe" ];
boot.blacklistedKernelModules = [ "nouveau" ];
############################
## X / Wayland GPU Drivers
############################
# Only specify NVIDIA. Intel Arc uses the modesetting driver automatically.
services.xserver.videoDrivers = [ "nvidia" ];
############################
## NVIDIA Configuration
############################
hardware.nvidia = {
modesetting.enable = true; # REQUIRED if any displays are on NVIDIA
open = false; # GTX 1070 → must be the proprietary driver
nvidiaSettings = true;
powerManagement.enable = false;
powerManagement.finegrained = false;
prime = {
offload.enable = false; # not a laptop, must be disabled
sync.enable = false;
};
# Correct way to pick the driver
package = config.boot.kernelPackages.nvidiaPackages.production;
};
# Remove → hardware.nvidia handles module packages
# boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ];
############################
## User Access
############################
users.users.andreas.extraGroups = [ "video" "render" ];
}
@@ -1,9 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib.my-namespace) enabled;
in
{
my-namespace.hardware = {
graphics-nvidia-prime-amd = enabled;
};
}
@@ -1,126 +0,0 @@
{ config, lib, pkgs, ... }:
{
# Enable OpenGL
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [ nvidia-vaapi-driver ];
};
# Load nvidia driver for Xorg and Wayland
# boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ];
boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11_beta ];
# boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ];
boot.loader.systemd-boot.consoleMode = "max";
boot.kernelParams = [
"amdgpu.modeset=1"
"nvidia-drm.fbdev=1"
"nvidia-drm.modeset=0"
# "nvidia.NVreg_PreserveVideoMemoryAllocations=0"
"amd_iommu=on"
# "vfio-pci.ids=\"10de:2489,10de:228b\""
# "nomodeset"
# "nvidia_drm.modeset=1"
];
boot.blacklistedKernelModules = [
"i915"
"nouveau"
# "nvidia"
# "nvidia-drm"
# "nvidia-uvm"
# "nvidiafb"
# "nvidia_drm"
# "nvidia_modeset"
];
# boot.extraModprobeConfig = ''
# blacklist nvidia
# blacklist nvidia-drm
# blacklist nvidia_drm
# blacklist nvidia-uvm
# blacklist nvidia_uvm
# blacklist nvidia_modeset
# blacklist nvidiafb
# blacklist nouveau
# options nouveau modeset=0
# '';
boot.extraModprobeConfig = ''
blacklist nouveau
options nouveau modeset=0
'';
# services.xserver.videoDrivers = [ "nvidia" ];
services.xserver.videoDrivers = [ "amdgpu" "nvidia" ];
# services.udev.extraRules = ''
# # Remove NVIDIA USB xHCI Host Controller devices, if present
# ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1"
# # Remove NVIDIA USB Type-C UCSI devices, if present
# ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1"
# # Remove NVIDIA Audio devices, if present
# ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1"
# # Remove NVIDIA VGA/3D controller devices
# ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"
# '';
boot.initrd.kernelModules = [
"amdgpu"
"nvidia"
# "nvidia-drm"
"nvidiafb"
# "nvidia-uvm"
# "nvidia-modeset"
# "i2c-nvidia_gpu"
];
hardware.nvidia = {
# Modesetting is required.
modesetting.enable = true;
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
# Enable this if you have graphical corruption issues or application crashes after waking
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
# of just the bare essentials.
powerManagement.enable = true;
# Fine-grained power management. Turns off GPU when not in use.
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
powerManagement.finegrained = false;
# Use the NVidia open source kernel module (not to be confused with the
# independent third-party "nouveau" open source driver).
# Support is limited to the Turing and later architectures. Full list of
# supported GPUs is at:
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
# Only available from driver 515.43.04+
# Currently alpha-quality/buggy, so false is currently the recommended setting.
open = false;
# Enable the Nvidia settings menu,
# accessible via `nvidia-settings`.
nvidiaSettings = true;
# Optionally, you may need to select the appropriate driver version for your specific GPU.
package = config.boot.kernelPackages.nvidiaPackages.beta;
# package = config.boot.kernelPackages.nvidiaPackages.none;
# package = config.boot.kernelPackages.nvidiaPackages.production;
forceFullCompositionPipeline = false;
prime = {
offload = {
enable = true;
enableOffloadCmd = true;
};
reverseSync.enable = false;
# Make sure to use the correct Bus ID values for your system!
# intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:01:0:0";
amdgpuBusId = "PCI:50:0:0"; #For AMD GPU
};
};
users.users.andreas = {
extraGroups = [ "video" "render" ];
};
}
@@ -0,0 +1,51 @@
{ config, lib, system, pkgs, ... }:
{
boot.kernelModules = [
"vfio"
"vfio-pci"
"vfio_iommu_type1"
];
boot.kernelParams = [
"amd_iommu=on"
"iommu=pt"
];
# Make sure vfio is available inside initrd
boot.initrd.availableKernelModules = [
"vfio_pci"
];
# Bind by IDs (cleaner via modprobe instead of kernel param)
boot.extraModprobeConfig = ''
options vfio-pci ids=10de:1b81,10de:10f0
'';
boot.initrd.systemd = {
enable = true;
services.initrd-vfio-pci-nvidia = {
description = "vfio-pci predevice init";
wantedBy = [ "initrd.target" ];
# Match 'preDeviceCommands' by running early
before = [ "sysroot.mount" ];
unitConfig.DefaultDependencies = "no";
serviceConfig.Type = "oneshot";
# Place your original shell commands here
script = ''
modprobe vfio-pci
'';
};
};
# # EARLY and deterministic binding
# boot.initrd.preDeviceCommands = ''
# echo 0000:05:00.0 > /sys/bus/pci/drivers/vfio-pci/bind
# echo 0000:05:00.1 > /sys/bus/pci/drivers/vfio-pci/bind
# '';
environment.systemPackages = with pkgs; [
pciutils
virtiofsd
config.virtualisation.libvirtd.qemu.package
looking-glass-client
virt-manager
libguestfs-with-appliance
];
users.extraUsers.andreas.extraGroups = [ "libvirtd" ];
}
@@ -7,30 +7,60 @@
imports = imports =
[ [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
./graphics/nvidia-stable.nix ./graphics/intel.nix
./graphics/passthrough_nvidia.nix
# ./graphics/intel_i915.nix
# ./graphics/nvidia.nix # ./graphics/nvidia.nix
./acer-monitor-edid.nix ./acer-monitor-edid.nix
./samsung-monitor-edid.nix
]; ];
#boot.kernelPackages = pkgs.linuxPackages_latest; hardware.enableRedistributableFirmware = true;
# boot.kernelPackages = pkgs.linuxKernel.packages.linux_xanmod_latest; boot.loader.efi.canTouchEfiVariables = true;
boot.kernelPackages = pkgs.linuxPackages;
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
boot.kernelModules = [ "kvm-amd" "4vl2loopback" ]; boot.kernelModules = [ "kvm-amd" "r8125" "4vl2loopback" ];
boot.extraModulePackages = [ pkgs.linuxPackages.v4l2loopback ]; boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback r8125 ];
boot.supportedFilesystems = [ "ntfs" ];
boot.blacklistedKernelModules = [ "r8169" ];
boot.blacklistedKernelModules = [ ];
fileSystems."/" = fileSystems."/" =
{ device = "/dev/disk/by-uuid/563805a1-5277-4488-bbdd-c1a7ed37be76"; { device = "/dev/disk/by-uuid/31fe479a-f4ef-4ee5-9cd9-d43ed1a3c88b";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/E846-D998"; { device = "/dev/disk/by-uuid/646A-D107";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ]; options = [ "fmask=0077" "dmask=0077" ];
}; };
fileSystems."/home" =
{ device = "/dev/disk/by-uuid/6ac4f42b-09e3-43b3-8215-8ff9a3c0695e";
fsType = "ext4";
};
# Mount ntfs partition
# fileSystems."/run/media/627C3BDF7C3BAD23" = {
# device = "/dev/disk/by-uuid/627C3BDF7C3BAD23";
# fsType = "ntfs-3g";
# options = [ "rw" "uid=1000"];
# };
# # Mount ntfs oldfiles drive partition
# fileSystems."/run/media/oldfiles" = {
# device = "/dev/disk/by-uuid/E2E26FFFE26FD677";
# fsType = "ntfs-3g";
# options = [ "rw" "uid=1000"];
# };
# # Mount The Vault
# fileSystems."/run/media/vault" = {
# device = "/dev/disk/by-uuid/3470646370642DB4";
# fsType = "ntfs-3g";
# options = [ "rw" "uid=1000"];
# };
# Try to fix hibernation # Try to fix hibernation
@@ -39,10 +69,11 @@
swapDevices = [ { swapDevices = [ {
device = "/var/lib/swapfile"; device = "/var/lib/swapfile";
size = 32*1024; size = 32*1024;
} ]; #resume-offset = 78399488 } ]; #resume-offset = 195323904
boot.resumeDevice = "/dev/disk/by-uuid/563805a1-5277-4488-bbdd-c1a7ed37be76"; # the unlocked drive mapping boot.resumeDevice = "/dev/disk/by-uuid/31fe479a-f4ef-4ee5-9cd9-d43ed1a3c88b"; # the unlocked drive mapping
boot.kernelParams = [ boot.kernelParams = [
"resume_offset=78399488" #sudo filefrag -v /var/lib/swapfile|awk 'NR==4{gsub(/\./,"");print $4;}' "resume_offset=195323904" #sudo filefrag -v /var/lib/swapfile|awk 'NR==4{gsub(/\./,"");print $4;}'
"r8125.aspm=0" # realtek network adapter fix
]; ];
security.protectKernelImage = false; security.protectKernelImage = false;
@@ -0,0 +1,22 @@
{ pkgs, ... }:
{
# Keep the vendor driver tied to this host's selected kernel, including its
# build dependencies and module installation path supplied by nixpkgs.
boot.kernelPackages = pkgs.linuxPackages.extend (_final: prev: {
r8125 = prev.r8125.overrideAttrs {
version = "9.018.00";
# The mirror's top-level wrapper overrides BASEDIR with /lib/modules.
# Build in src directly so nixpkgs' kernel path reaches kbuild.
buildFlags = [ "-C" "src" "modules" ];
# Realtek's release mirrored by the DKMS maintainer. Pin the source rather
# than running the vendor installer or following a mutable branch.
src = pkgs.fetchFromGitHub {
owner = "awesometic";
repo = "realtek-r8125-dkms";
rev = "9a152bf920334aead090d2fb4d91f67a84923123"; # 9.018.00-1
hash = "sha256-yeQsyraNrms1Txm7ZAKeiPfF0tfN6WSHUo5DnvfFosw=";
};
};
});
}
@@ -0,0 +1,14 @@
{ config, lib, pkgs, ... }:
{
# boot.kernelParams = [ "drm.edid_firmware=DP-1:edid/edid.bin,DP-2:edid/edid.bin,DP-3:edid/edid.bin,DP-4:edid/edid.bin" ];
boot.kernelParams = [ "drm.edid_firmware=DP-1:edid/edid2.bin" ];
hardware.firmware = [
(
pkgs.runCommand "edid2.bin" { } ''
mkdir -p $out/lib/firmware/edid
cp ${./firmware/U32J59x-edid.bin} $out/lib/firmware/edid/edid2.bin
''
)];
}
@@ -0,0 +1,36 @@
diff --git a/src/meson.build b/src/meson.build
--- a/src/meson.build
+++ b/src/meson.build
@@ -1077,5 +1077,6 @@ wayland_protocols = [
['single-pixel-buffer', 'staging', 1, ],
['tablet', 'stable', 2, ],
+ ['tearing-control', 'staging', 1, ],
['text-input-unstable-v3', 'private', ],
['viewporter', 'stable', ],
['xdg-activation', 'staging', 1, ],
diff --git a/src/wayland/meta-wayland-dma-buf.c b/src/wayland/meta-wayland-dma-buf.c
--- a/src/wayland/meta-wayland-dma-buf.c
+++ b/src/wayland/meta-wayland-dma-buf.c
@@ -630,11 +630,22 @@ has_modifier (GArray *modifiers,
}
#ifdef HAVE_NATIVE_BACKEND
+static gboolean
+async_supports_modifier (MetaKmsPlane *plane,
+ uint32_t drm_format,
+ uint64_t drm_modifier)
+{
+ GArray *async_modifiers =
+ meta_kms_plane_get_async_modifiers_for_format (plane, drm_format);
+ return async_modifiers && has_modifier (async_modifiers, drm_modifier);
+}
+
static gboolean
crtc_supports_modifier (MetaCrtcKms *crtc_kms,
uint32_t drm_format,
- uint64_t drm_modifier)
+ uint64_t drm_modifier,
+ gboolean is_async)
{
MetaKmsPlane *plane = meta_crtc_kms_get_assigned_primary_plane (crtc_kms);
GArray *crtc_modifiers;
@@ -0,0 +1,59 @@
{ lib, pkgs, ... }:
let
# GNOME/mutter!3797, pinned because the MR is still under development.
mutterTearingRevision = "a8d56d423edde9e6d76f6b9cab663d82c65cf1a2";
mutterTearingPatch = pkgs.fetchurl {
url = "https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3797.diff";
hash = "sha256-3up5PsHX+BSQRKb9JS5bnJLPaTGmvV55M18tKkepIng=";
};
in
{
nixpkgs.overlays = [
(final: prev: {
mutter = prev.mutter.overrideAttrs (old: {
pname = "mutter-tearing";
# nixpkgs leaves Mutter's verbose topics compiled out by default.
# This is required for MUTTER_DEBUG=kms to emit the async commit flags.
mesonFlags = (old.mesonFlags or [ ]) ++ [ ];
# The MR currently targets Mutter 51. Apply it to the packaged Mutter
# 50 source, then resolve the four small context conflicts separately.
prePatch = ''
${old.prePatch or ""}
set +e
patch --batch -p1 --forward < ${mutterTearingPatch}
mr_status=$?
set -e
if [ "$mr_status" -ne 0 ]; then
reject_count="$(find . -name '*.rej' -type f | wc -l)"
if [ "$reject_count" -ne 3 ]; then
echo "Unexpected number of Mutter !3797 rejects: $reject_count" >&2
exit 1
fi
fi
patch --batch -p1 --forward < ${./mutter-50-tearing-compat.patch}
find . -name '*.rej' -type f -delete
'';
passthru = (old.passthru or { }) // {
tearingMr = 3797;
tearingRevision = mutterTearingRevision;
};
});
})
];
environment.sessionVariables = {
# Mutter keeps tearing support behind an experimental runtime switch.
MUTTER_DEBUG_EXPERIMENTAL_FEATURES = lib.mkDefault "tearing";
# Temporarily expose whether async atomic commits reach KMS or fall back
# to synchronized presentation. Remove this after collecting the log.
# MUTTER_DEBUG = lib.mkDefault "kms";
};
}
@@ -1,75 +0,0 @@
{
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
# as well as the libraries available from your flake's inputs.
lib,
# An instance of `pkgs` with your overlays and packages applied is also available.
pkgs,
# You also have access to your flake's inputs.
inputs,
# Additional metadata is provided by Snowfall Lib.
# The namespace used for your flake, defaulting to "internal" if not set.
namespace,
# The system architecture for this host (eg. `x86_64-linux`).
system,
# The Snowfall Lib target for this system (eg. `x86_64-iso`).
target,
# A normalized name for the system target (eg. `iso`).
format,
# A boolean to determine whether this system is a virtual target using nixos-generators.
virtual,
# An attribute map of your defined hosts.
systems,
# All other arguments come from the system system.
config
, ...
}:{
config = {
# programs.gamescope = {
# enable = true;
# capSysNice = true;
# };
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
# gamescopeSession = {
# enable = true;
# env = {
# WLR_RENDERER = "vulkan";
# DXVK_HDR = "0 ";
# ENABLE_GAMESCOPE_WSI = "0";
# WINE_FULLSCREEN_FSR = "1";
# # Games allegedly prefer X11
# SDL_VIDEODRIVER = "x11";
# };
# args = [
# "--xwayland-count 1"
# "--expose-wayland"
# "-e" # Enable steam integration
# "--steam"
# # "--adaptive-sync"
# # "--hdr-enabled"
# # "--hdr-itm-enable"
# # External monitor
# "--prefer-output DP-3"
# "--output-width 1920"
# "--output-height 1080"
# "-r 172"
# # Laptop display
# # "--prefer-output eDP-1"
# # "--output-width 2560"
# # "--output-height 1600"
# # "-r 120"
# # "--prefer-vk-device 10de:1b81" # lspci -nn | grep VGA
# ];
# };
};
};
}
@@ -0,0 +1,83 @@
{ config, pkgs, lib, ... }:
let
cfg = config.services.tigervnc;
in
{
options.services.tigervnc = {
enable = lib.mkEnableOption "TigerVNC x0vncserver (mirrors :0)";
users = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule ({ name, config, ... }: {
options = {
enableSharing = lib.mkOption { type = lib.types.bool; default = true; };
port = lib.mkOption { type = lib.types.int; default = 5901; };
localhost = lib.mkOption { type = lib.types.bool; default = false; };
#geometry = lib.mkOption { type = lib.types.str; default = ""; };
};
}));
default = { };
};
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.tigervnc pkgs.xhost pkgs.xauth ];
systemd.user.services = lib.mapAttrs' (user: opts:
let svcName = "tigervnc-x0vncserver-${user}";
in {
name = svcName;
value = lib.mkIf opts.enableSharing {
description = "TigerVNC x0vncserver sharing :0 for ${user}";
after = [ "graphical-session.target" ];
partOf = [ "graphical-session.target" ];
wantedBy = [ "graphical-session.target" ];
path = [ pkgs.tigervnc pkgs.xhost pkgs.xauth pkgs.coreutils ];
script = let
# Build args array to avoid shell escaping hell
vncArgs = [
"-display :0"
"-rfbport ${toString opts.port}"
"-rfbauth $HOME/.vnc/passwd"
"-AcceptSetDesktopSize=0"
"-AlwaysShared"
] #++ lib.optionals (opts.geometry != "") [ "-Geometry ${opts.geometry}" ]
++ lib.optionals opts.localhost [ "-localhost" ];
in ''
set -euxo pipefail
# Password check
mkdir -p "$HOME/.vnc"
if [ ! -r "$HOME/.vnc/passwd" ]; then
echo "ERROR: Run: vncpasswd ~/.vnc/passwd" >&2
### CHANGE THE &gt; in the above line TO A GREATER THAN SIGN! ###
exit 1
fi
# X authority
xhost +local:
# Clean x0vncserver args
${pkgs.tigervnc}/bin/x0vncserver ${lib.concatStringsSep " " (map (arg: "${arg}") vncArgs)}
'';
preStop = ''
xhost -local:
pkill -f "x0vncserver.*${toString opts.port}"
'';
serviceConfig = {
Type = "simple";
Restart = "always";
RestartSec = "5s";
RuntimeDirectory = "vnc-${user}";
};
};
}
) cfg.users;
networking.firewall.allowedTCPPorts =
lib.mapAttrsToList (_: opts: opts.port) cfg.users;
};
}
@@ -5,7 +5,7 @@
]; ];
boot.extraModulePackages = [ boot.extraModulePackages = [
pkgs.linuxPackages.v4l2loopback # Webcam loopback config.boot.kernelPackages.v4l2loopback # Webcam loopback
]; ];
boot.extraModprobeConfig = '' boot.extraModprobeConfig = ''