@@ -4,12 +4,59 @@ with builtins; with lib;
44
55let
66 cfg = config . wsl ;
7+
8+ defaultLinks = [
9+ "/usr/lib/wsl/lib/libcudadebugger.so.1"
10+ "/usr/lib/wsl/lib/libcuda.so"
11+ "/usr/lib/wsl/lib/libcuda.so.1"
12+ "/usr/lib/wsl/lib/libcuda.so.1.1"
13+ "/usr/lib/wsl/lib/libd3d12core.so"
14+ "/usr/lib/wsl/lib/libd3d12.so"
15+ "/usr/lib/wsl/lib/libdxcore.so"
16+ "/usr/lib/wsl/lib/libnvcuvid.so"
17+ "/usr/lib/wsl/lib/libnvcuvid.so.1"
18+ "/usr/lib/wsl/lib/libnvdxdlkernels.so"
19+ "/usr/lib/wsl/lib/libnvidia-encode.so"
20+ "/usr/lib/wsl/lib/libnvidia-encode.so.1"
21+ "/usr/lib/wsl/lib/libnvidia-gpucomp.so"
22+ "/usr/lib/wsl/lib/libnvidia-ml.so.1"
23+ "/usr/lib/wsl/lib/libnvidia-ngx.so.1"
24+ "/usr/lib/wsl/lib/libnvidia-opticalflow.so"
25+ "/usr/lib/wsl/lib/libnvidia-opticalflow.so.1"
26+ "/usr/lib/wsl/lib/libnvoptix.so.1"
27+ "/usr/lib/wsl/lib/libnvwgf2umx.so"
28+ "/usr/lib/wsl/lib/nvidia-ngx-updater"
29+ "/usr/lib/wsl/lib/nvidia-smi"
30+ ] ;
31+
32+ mkWslLib = extraLinks :
33+ assert cfg . useWindowsDriver ;
34+ pkgs . runCommand "wsl-lib" { } ''
35+ mkdir -p "$out/lib"
36+
37+ ${ concatMapStrings ( path : ''
38+ ln -s ${ escapeShellArg path } "$out/lib"
39+ '' ) ( defaultLinks ++ extraLinks ) }
40+ '' ;
741in
842{
9-
1043 options . wsl = with types ; {
1144 enable = mkEnableOption "support for running NixOS as a WSL distribution" ;
1245 useWindowsDriver = mkEnableOption "OpenGL driver from the Windows host" ;
46+
47+ wslLibExtraLinks = mkOption {
48+ type = listOf str ;
49+ default = [ ] ;
50+ description = "Additional /usr/lib/wsl/lib/ paths to symlink into wsl-lib" ;
51+ } ;
52+
53+ wslLib = mkOption {
54+ type = package ;
55+ default = mkWslLib cfg . wslLibExtraLinks ;
56+ defaultText = literalExpression "mkWslLib config.wsl.wslLibExtraLinks" ;
57+ description = "WSL GPU driver library package with symlinks to Windows host drivers" ;
58+ } ;
59+
1360 binShPkg = mkOption {
1461 type = package ;
1562 internal = true ;
80127 hardware . graphics = {
81128 enable = true ; # Enable GPU acceleration
82129
83- extraPackages = mkIf cfg . useWindowsDriver [
84- ( pkgs . runCommand "wsl-lib" { } ''
85- mkdir -p "$out/lib"
86- # # we cannot just symlink the lib directory because it breaks merging with other drivers that provide the same directory
87- ln -s /usr/lib/wsl/lib/libcudadebugger.so.1 "$out/lib"
88- ln -s /usr/lib/wsl/lib/libcuda.so "$out/lib"
89- ln -s /usr/lib/wsl/lib/libcuda.so.1 "$out/lib"
90- ln -s /usr/lib/wsl/lib/libcuda.so.1.1 "$out/lib"
91- ln -s /usr/lib/wsl/lib/libd3d12core.so "$out/lib"
92- ln -s /usr/lib/wsl/lib/libd3d12.so "$out/lib"
93- ln -s /usr/lib/wsl/lib/libdxcore.so "$out/lib"
94- ln -s /usr/lib/wsl/lib/libnvcuvid.so "$out/lib"
95- ln -s /usr/lib/wsl/lib/libnvcuvid.so.1 "$out/lib"
96- ln -s /usr/lib/wsl/lib/libnvdxdlkernels.so "$out/lib"
97- ln -s /usr/lib/wsl/lib/libnvidia-encode.so "$out/lib"
98- ln -s /usr/lib/wsl/lib/libnvidia-encode.so.1 "$out/lib"
99- ln -s /usr/lib/wsl/lib/libnvidia-ml.so.1 "$out/lib"
100- ln -s /usr/lib/wsl/lib/libnvidia-opticalflow.so "$out/lib"
101- ln -s /usr/lib/wsl/lib/libnvidia-opticalflow.so.1 "$out/lib"
102- ln -s /usr/lib/wsl/lib/libnvoptix.so.1 "$out/lib"
103- ln -s /usr/lib/wsl/lib/libnvwgf2umx.so "$out/lib"
104- ln -s /usr/lib/wsl/lib/nvidia-smi "$out/lib"
105- '' )
106- ] ;
130+ extraPackages = mkIf cfg . useWindowsDriver [ cfg . wslLib ] ;
107131 } ;
108132
109133 environment = {
0 commit comments