zeroed-some/wanda / ea4ad0a

Browse files

build

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
ea4ad0a9456245642c65edf20c5ef6d0b76a1001
Parents
d488fa0
Tree
aa283f6

3 changed files

StatusFile+-
A Cargo.toml 51 0
A flake.nix 93 0
A shell.nix 169 0
Cargo.tomladded
@@ -0,0 +1,51 @@
1
+[workspace]
2
+resolver = "2"
3
+members = [
4
+    "crates/wanda-core",
5
+    "crates/wanda-cli",
6
+    "crates/wanda-gui",
7
+]
8
+
9
+[workspace.package]
10
+version = "0.1.0"
11
+edition = "2021"
12
+license = "GPL-3.0"
13
+authors = ["WANDA Contributors"]
14
+repository = "https://github.com/zeroed-some/wanda"
15
+
16
+[workspace.dependencies]
17
+# Async runtime
18
+tokio = { version = "1", features = ["full"] }
19
+
20
+# Serialization
21
+serde = { version = "1", features = ["derive"] }
22
+serde_json = "1"
23
+toml = "0.8"
24
+
25
+# Error handling
26
+thiserror = "2"
27
+anyhow = "1"
28
+
29
+# Logging
30
+tracing = "0.1"
31
+tracing-subscriber = { version = "0.3", features = ["env-filter"] }
32
+
33
+# HTTP client (using rustls to avoid OpenSSL dependency)
34
+reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls"] }
35
+
36
+# File system / paths
37
+dirs = "6"
38
+walkdir = "2"
39
+
40
+# CLI
41
+clap = { version = "4", features = ["derive", "env"] }
42
+indicatif = "0.17"
43
+console = "0.15"
44
+
45
+# Async utilities
46
+futures = "0.3"
47
+
48
+# Tauri
49
+tauri = { version = "2", features = [] }
50
+tauri-build = { version = "2", features = [] }
51
+tauri-plugin-shell = "2"
flake.nixadded
@@ -0,0 +1,93 @@
1
+{
2
+  description = "WANDA - WeMod launcher for Linux";
3
+
4
+  inputs = {
5
+    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
6
+    flake-utils.url = "github:numtide/flake-utils";
7
+    rust-overlay = {
8
+      url = "github:oxalica/rust-overlay";
9
+      inputs.nixpkgs.follows = "nixpkgs";
10
+    };
11
+  };
12
+
13
+  outputs = { self, nixpkgs, flake-utils, rust-overlay }:
14
+    flake-utils.lib.eachDefaultSystem (system:
15
+      let
16
+        overlays = [ (import rust-overlay) ];
17
+        pkgs = import nixpkgs {
18
+          inherit system overlays;
19
+        };
20
+
21
+        # Rust toolchain
22
+        rustToolchain = pkgs.rust-bin.stable.latest.default.override {
23
+          extensions = [ "rust-src" "rust-analyzer" ];
24
+        };
25
+
26
+        # Common build inputs for Tauri
27
+        tauriBuildInputs = with pkgs; [
28
+          pkg-config
29
+          gtk3
30
+          webkitgtk_4_1
31
+          libappindicator-gtk3
32
+          librsvg
33
+          openssl
34
+          glib
35
+          cairo
36
+          pango
37
+          gdk-pixbuf
38
+          atk
39
+          libsoup_3
40
+        ];
41
+
42
+        # Development tools
43
+        devTools = with pkgs; [
44
+          rustToolchain
45
+          nodejs_20
46
+          nodePackages.npm
47
+          cargo-tauri
48
+        ];
49
+
50
+      in {
51
+        devShells.default = pkgs.mkShell {
52
+          buildInputs = tauriBuildInputs ++ devTools;
53
+
54
+          PKG_CONFIG_PATH = with pkgs; lib.makeSearchPath "lib/pkgconfig" [
55
+            gtk3.dev
56
+            webkitgtk_4_1.dev
57
+            libappindicator-gtk3.dev
58
+            openssl.dev
59
+            glib.dev
60
+            cairo.dev
61
+            pango.dev
62
+            gdk-pixbuf.dev
63
+            atk.dev
64
+            libsoup_3.dev
65
+          ];
66
+
67
+          RUST_SRC_PATH = "${rustToolchain}/lib/rustlib/src/rust/library";
68
+
69
+          shellHook = ''
70
+            echo "🪄 WANDA development environment"
71
+            echo ""
72
+            echo "Commands:"
73
+            echo "  cargo build -p wanda-cli     # Build CLI only"
74
+            echo "  cargo build -p wanda-gui     # Build GUI"
75
+            echo "  cargo tauri dev              # Run GUI in dev mode"
76
+            echo ""
77
+          '';
78
+        };
79
+
80
+        packages.default = pkgs.rustPlatform.buildRustPackage {
81
+          pname = "wanda-cli";
82
+          version = "0.1.0";
83
+          src = ./.;
84
+          cargoLock.lockFile = ./Cargo.lock;
85
+          buildInputs = tauriBuildInputs;
86
+          nativeBuildInputs = [ pkgs.pkg-config ];
87
+
88
+          # Only build CLI for now
89
+          cargoBuildFlags = [ "-p" "wanda-cli" ];
90
+        };
91
+      }
92
+    );
93
+}
shell.nixadded
@@ -0,0 +1,169 @@
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
+}