build
Authored by
mfwolffe <wolffemf@dukes.jmu.edu>
- SHA
ea4ad0a9456245642c65edf20c5ef6d0b76a1001- Parents
-
d488fa0 - Tree
aa283f6
ea4ad0a
ea4ad0a9456245642c65edf20c5ef6d0b76a1001d488fa0
aa283f6| Status | File | + | - |
|---|---|---|---|
| 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 | +} | |