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 | +} | ||