first pass of merging in warp (doesn't build)

This commit is contained in:
Ryan Ward
2026-07-01 16:08:58 -05:00
parent 2f64909469
commit 4770ac06b5
3662 changed files with 414574 additions and 89772 deletions
+317
View File
@@ -0,0 +1,317 @@
{
description = "Warp is an agentic development environment, born out of the terminal (Experimental Nix Support, Linux-only).";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
crane.url = "github:ipetkov/crane";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
crane,
rust-overlay,
...
}:
let
systems = [
"x86_64-linux"
"aarch64-linux"
];
forAllSystems = nixpkgs.lib.genAttrs systems;
in
{
packages = forAllSystems (
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ rust-overlay.overlays.default ];
};
lib = pkgs.lib;
rustToolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
rustPlatform = pkgs.makeRustPlatform {
cargo = rustToolchain;
rustc = rustToolchain;
};
craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
appCargoToml = builtins.fromTOML (builtins.readFile ./app/Cargo.toml);
version = "${appCargoToml.package.version}+${self.shortRev or "dirty"}";
src = self;
cargoLock = ./Cargo.lock;
# Match Zed's approach: derive the main app vendor directory from
# Cargo.lock instead of maintaining a top-level cargoVendorHash.
cargoVendorDir =
let
craneVendorDir = craneLib.vendorCargoDeps {
inherit src cargoLock;
overrideVendorGitCheckout =
crates: drv:
let
hasCrate = crateName: builtins.any (crate: crate.name == crateName) crates;
in
drv.overrideAttrs (old: {
postPatch = (old.postPatch or "") + ''
find . -name 'Cargo.toml.orig' -delete
${lib.optionalString (hasCrate "warp_multi_agent_api") ''
mkdir -p apis/multi_agent/v1/gen/rust/nix-vendored-protos
cp apis/multi_agent/v1/*.proto \
apis/multi_agent/v1/gen/rust/nix-vendored-protos/
substituteInPlace apis/multi_agent/v1/gen/rust/build.rs \
--replace-fail \
'let proto_path = manifest_dir.parent().unwrap().parent().unwrap();' \
'let proto_path = manifest_dir.join("nix-vendored-protos");'
''}
${lib.optionalString (hasCrate "warp-workflows") ''
mkdir -p workflows/nix-vendored-specs
cp -R specs/. workflows/nix-vendored-specs/
substituteInPlace workflows/build.rs \
--replace-fail \
'println!("cargo:rerun-if-changed=../specs");' \
'println!("cargo:rerun-if-changed=nix-vendored-specs");' \
--replace-fail \
'for entry in WalkDir::new("../specs") {' \
'for entry in WalkDir::new("nix-vendored-specs") {'
''}
'';
});
};
in
# crane writes a root config.toml; buildRustPackage expects the
# cargoDeps layout to include .cargo/config.toml and Cargo.lock.
pkgs.runCommand "warp-terminal-experimental-${version}-cargo-vendor" { } ''
cp -R ${craneVendorDir}/. "$out"
chmod u+w "$out"
mkdir -p "$out/.cargo"
sed 's|${craneVendorDir}|@vendor@|g' \
"$out/config.toml" > "$out/.cargo/config.toml"
rm "$out/config.toml"
cp ${cargoLock} "$out/Cargo.lock"
'';
linuxRuntimeLibraries = with pkgs; [
alsa-lib
curl
dbus
expat
fontconfig
freetype
libGL
libgit2
libxkbcommon
openssl
stdenv.cc.cc.lib
udev
vulkan-loader
wayland
libx11
libxscrnsaver
libxcursor
libxext
libxfixes
libxi
libxrandr
libxrender
libxcb
zlib
];
buildFeatures = [
"release_bundle"
"gui"
];
warp-terminal-experimental = rustPlatform.buildRustPackage {
pname = "warp-terminal-experimental";
inherit version;
inherit src;
cargoDeps = cargoVendorDir;
nativeBuildInputs = with pkgs; [
brotli
cargo-about
clang
cmake
jq
makeWrapper
patchelf
pkg-config
protobuf
python3
];
buildInputs = linuxRuntimeLibraries;
cargoBuildFlags = [
"-p"
"warp"
"--bin"
"warp-oss"
"--bin"
"generate_settings_schema"
];
inherit buildFeatures;
# The application test suite is large and GUI/integration-heavy; this
# flake's package check is the Nix build plus a launch smoke test.
doCheck = false;
env = {
APPIMAGE_NAME = "WarpOss-${pkgs.stdenv.hostPlatform.parsed.cpu.name}.AppImage";
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
PROTOC = "${pkgs.protobuf}/bin/protoc";
PROTOC_INCLUDE = "${pkgs.protobuf}/include";
CARGO_PROFILE_RELEASE_DEBUG = "false";
};
postInstall =
let
installDir = "$out/opt/warpdotdev/warp-terminal-experimental";
resourcesDir = "${installDir}/resources";
releaseChannel = "stable";
libraryPath = lib.makeLibraryPath linuxRuntimeLibraries;
executablePath = lib.makeBinPath (with pkgs; [ xdg-utils ]);
in
''
install -Dm755 "$out/bin/warp-oss" "${installDir}/warp-oss"
rm -f "$out/bin/warp-oss"
patchShebangs \
./script/prepare_bundled_resources \
./script/copy_conditional_skills
SKIP_SETTINGS_SCHEMA=1 ./script/prepare_bundled_resources \
"${resourcesDir}" \
"${releaseChannel}" \
release
"$out/bin/generate_settings_schema" \
--channel "${releaseChannel}" \
"${resourcesDir}/settings_schema.json"
rm -f "$out/bin/generate_settings_schema"
install -Dm644 \
"${resourcesDir}/THIRD_PARTY_LICENSES.txt" \
"$out/share/licenses/warp-terminal-experimental/THIRD_PARTY_LICENSES.txt"
install -Dm644 LICENSE-AGPL "$out/share/licenses/warp-terminal-experimental/LICENSE-AGPL"
install -Dm644 LICENSE-MIT "$out/share/licenses/warp-terminal-experimental/LICENSE-MIT"
install -Dm644 app/channels/oss/dev.warp.WarpOss.desktop \
"$out/share/applications/dev.warp.WarpOss.desktop"
substituteInPlace "$out/share/applications/dev.warp.WarpOss.desktop" \
--replace-fail "Exec=warp-terminal-oss %U" "Exec=warp-terminal-experimental %U"
for size in 16x16 32x32 64x64 128x128 256x256 512x512; do
icon="app/channels/oss/icon/no-padding/$size.png"
if [ -f "$icon" ]; then
install -Dm644 "$icon" \
"$out/share/icons/hicolor/$size/apps/dev.warp.WarpOss.png"
fi
done
wrapProgram "${installDir}/warp-oss" \
--prefix LD_LIBRARY_PATH : "${libraryPath}" \
--prefix PATH : "${executablePath}"
mkdir -p "$out/bin"
ln -s "${installDir}/warp-oss" "$out/bin/warp-oss"
ln -s "${installDir}/warp-oss" "$out/bin/warp-terminal-experimental"
'';
postFixup = lib.optionalString pkgs.stdenv.isLinux ''
wrapped="/opt/warpdotdev/warp-terminal-experimental/.warp-oss-wrapped"
if [ -e "$out$wrapped" ] && ! patchelf --print-needed "$out$wrapped" | grep -q '^libfontconfig\.so\.1$'; then
patchelf --add-needed libfontconfig.so.1 "$out$wrapped"
fi
'';
meta = {
description = "Warp is an agentic development environment, born out of the terminal (Experimental Nix Support, Linux-only).";
homepage = "https://www.warp.dev";
license = lib.licenses.agpl3Only;
mainProgram = "warp-terminal-experimental";
platforms = systems;
sourceProvenance = with lib.sourceTypes; [ fromSource ];
};
};
in
{
inherit warp-terminal-experimental;
}
);
devShells = forAllSystems (
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ rust-overlay.overlays.default ];
};
lib = pkgs.lib;
rustToolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
nativeBuildInputs = with pkgs; [
brotli
cargo-about
cargo-nextest
clang
cmake
jq
lld
makeWrapper
patchelf
pkg-config
protobuf
python3
rustToolchain
rust-analyzer
];
buildInputs = with pkgs; [
alsa-lib
curl
dbus
expat
fontconfig
freetype
libGL
libgit2
libxkbcommon
openssl
stdenv.cc.cc.lib
udev
vulkan-loader
wayland
libx11
libxscrnsaver
libxcursor
libxext
libxfixes
libxi
libxrandr
libxrender
libxcb
zlib
];
in
{
default = pkgs.mkShell {
inherit nativeBuildInputs buildInputs;
APPIMAGE_NAME = "WarpOss-${pkgs.stdenv.hostPlatform.parsed.cpu.name}.AppImage";
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
PROTOC = "${pkgs.protobuf}/bin/protoc";
PROTOC_INCLUDE = "${pkgs.protobuf}/include";
LD_LIBRARY_PATH = lib.makeLibraryPath buildInputs;
};
}
);
formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixfmt);
};
}