Nix · 3786 bytes Raw Blame History
1 { pkgs ? import <nixpkgs> {} }:
2
3 let
4 # FHS environment for running Wine/Proton binaries
5 fhs = pkgs.buildFHSEnv {
6 name = "wanda-fhs";
7 targetPkgs = pkgs: with pkgs; [
8 # Wine and winetricks
9 wineWowPackages.stable
10 winetricks
11
12 # 64-bit libraries Wine needs
13 # NOTE: libGL and vulkan-loader are NOT included here - we use the system's
14 # NVIDIA drivers via /run/opengl-driver to avoid Mesa/NVIDIA conflicts
15 freetype
16 fontconfig
17 libpng
18 libjpeg
19 xorg.libX11
20 xorg.libXcursor
21 xorg.libXrandr
22 xorg.libXi
23 xorg.libXinerama
24 xorg.libXext
25 xorg.libXxf86vm
26 xorg.libXrender
27 xorg.libXcomposite
28 xorg.libXfixes
29
30 # Audio
31 alsa-lib
32 libpulseaudio
33
34 # Networking
35 openssl
36 gnutls
37
38 # Misc
39 zlib
40 ncurses
41 libxkbcommon
42 ];
43
44 multiPkgs = pkgs: with pkgs; [
45 # 32-bit libraries (multilib)
46 # NOTE: libGL and vulkan-loader removed - using system NVIDIA drivers
47 freetype
48 fontconfig
49 libpng
50 libjpeg
51 xorg.libX11
52 xorg.libXcursor
53 xorg.libXrandr
54 xorg.libXi
55 xorg.libXinerama
56 xorg.libXext
57 xorg.libXxf86vm
58 xorg.libXrender
59 xorg.libXcomposite
60 xorg.libXfixes
61 alsa-lib
62 libpulseaudio
63 openssl
64 gnutls
65 zlib
66 ncurses
67 ];
68
69 runScript = "bash";
70
71 profile = ''
72 export WINEPREFIX="$HOME/.local/share/wanda/prefix"
73
74 # Use system's NVIDIA drivers instead of Mesa to avoid driver conflicts
75 # This is critical for stability - mixing Mesa userspace with NVIDIA kernel driver causes crashes
76 export LD_LIBRARY_PATH="/run/opengl-driver/lib:/run/opengl-driver-32/lib''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
77 export __GLX_VENDOR_LIBRARY_NAME=nvidia
78 export LIBVA_DRIVER_NAME=nvidia
79
80 # Vulkan ICD - use NVIDIA's
81 export VK_ICD_FILENAMES=/run/opengl-driver/share/vulkan/icd.d/nvidia_icd.x86_64.json:/run/opengl-driver-32/share/vulkan/icd.d/nvidia_icd.i686.json
82 '';
83 };
84 in
85 pkgs.mkShell {
86 name = "wanda-dev";
87
88 buildInputs = with pkgs; [
89 # Rust toolchain
90 rustc
91 cargo
92 rustfmt
93 clippy
94 rust-analyzer
95
96 # Tauri system dependencies
97 pkg-config
98 gtk3
99 webkitgtk_4_1
100 libappindicator-gtk3
101 librsvg
102
103 # Additional Tauri deps
104 openssl
105 glib
106 cairo
107 pango
108 gdk-pixbuf
109 atk
110 libsoup_3
111
112 # Node.js for frontend
113 nodejs_22
114 nodePackages.npm
115
116 # FHS environment for Wine/Proton
117 fhs
118 ];
119
120 # Set up pkg-config path
121 PKG_CONFIG_PATH = with pkgs; lib.makeSearchPath "lib/pkgconfig" [
122 gtk3.dev
123 webkitgtk_4_1.dev
124 openssl.dev
125 glib.dev
126 cairo.dev
127 pango.dev
128 gdk-pixbuf.dev
129 atk.dev
130 libsoup_3.dev
131 ];
132
133 # Library paths for Tauri linking
134 LD_LIBRARY_PATH = with pkgs; lib.makeLibraryPath [
135 gtk3
136 webkitgtk_4_1
137 libappindicator-gtk3
138 librsvg
139 libsoup_3
140 glib
141 cairo
142 pango
143 gdk-pixbuf
144 atk
145 openssl
146 ];
147
148 shellHook = ''
149 echo ""
150 echo "=== WANDA Development Shell ==="
151 echo ""
152 echo "Build commands:"
153 echo " cargo build -p wanda-cli # Build CLI"
154 echo " cargo build -p wanda-gui # Build GUI"
155 echo " cargo build --release # Release build"
156 echo ""
157 echo "Run WANDA:"
158 echo " ./target/release/wanda -v init # Initialize with verbose output"
159 echo ""
160 echo "For Wine/Proton operations (FHS environment):"
161 echo " wanda-fhs # Enter FHS shell for Wine"
162 echo " wanda-fhs -c 'wine --version' # Run wine command"
163 echo ""
164 echo "GUI development:"
165 echo " cd crates/wanda-gui/frontend && npm install"
166 echo " cargo tauri dev"
167 echo ""
168 '';
169 }