{ description = "every.channel development environment"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay.url = "github:oxalica/rust-overlay"; agenix.url = "github:ryantm/agenix"; }; outputs = { self, nixpkgs, flake-utils, rust-overlay, agenix }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [ (import rust-overlay) ]; }; rust = pkgs.rust-bin.stable.latest.default.override { targets = [ "wasm32-unknown-unknown" ]; }; agenixPkg = if pkgs ? agenix then pkgs.agenix else agenix.packages.${system}.default; webkitgtk = if pkgs ? webkitgtk_4_1 then pkgs.webkitgtk_4_1 else if pkgs ? webkitgtk_4_0 then pkgs.webkitgtk_4_0 else throw "nixpkgs is missing webkitgtk_4_1/webkitgtk_4_0 (required for tauri on Linux)"; linuxTauriDeps = with pkgs; [ gtk3 webkitgtk librsvg libappindicator libsoup_3 glib pango gdk-pixbuf ]; in { packages = { agenix = agenixPkg; fj = pkgs.forgejo-cli; }; devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ rust cargo cargo-tauri cargo-llvm-cov llvmPackages.llvm clang pkg-config openssl ffmpeg nodejs_22 nodePackages.wrangler agenixPkg forgejo-cli uv git just cargo-watch wasm-bindgen-cli trunk ] ++ lib.optionals stdenv.isLinux linuxTauriDeps; shellHook = '' export FFMPEG_INCLUDE_DIR=${pkgs.ffmpeg.dev}/include export FFMPEG_LIB_DIR=${pkgs.ffmpeg.lib}/lib export LLVM_COV=${pkgs.llvmPackages.llvm}/bin/llvm-cov export LLVM_PROFDATA=${pkgs.llvmPackages.llvm}/bin/llvm-profdata ''; }; # Minimal shell for headless publishers/relays (e.g. remote boxes). # Avoid pulling in node/wrangler/trunk/tauri deps. devShells.rust = pkgs.mkShell { buildInputs = with pkgs; [ rust cargo llvmPackages.llvm clang pkg-config openssl ffmpeg agenixPkg forgejo-cli git ]; shellHook = '' export FFMPEG_INCLUDE_DIR=${pkgs.ffmpeg.dev}/include export FFMPEG_LIB_DIR=${pkgs.ffmpeg.lib}/lib export LLVM_COV=${pkgs.llvmPackages.llvm}/bin/llvm-cov export LLVM_PROFDATA=${pkgs.llvmPackages.llvm}/bin/llvm-profdata ''; }; }); }