at master 2.1 kB view raw
1{ 2 lib, 3 callPackage, 4 rustPlatform, 5 fetchFromGitHub, 6 protobuf, 7 buildNpmPackage, 8}: 9let 10 version = "0.4.1"; 11 12 src = fetchFromGitHub { 13 owner = "ekzhang"; 14 repo = "sshx"; 15 tag = "v${version}"; 16 hash = "sha256-+IHV+dJb/j1/tmdqDXo6bqhvj3nBQ7i4AsUeHFA3+NU="; 17 }; 18 19 mkSshxPackage = 20 { pname, cargoHash, ... }@args: 21 rustPlatform.buildRustPackage ( 22 rec { 23 inherit 24 pname 25 version 26 src 27 cargoHash 28 ; 29 30 nativeBuildInputs = [ protobuf ]; 31 32 cargoBuildFlags = [ 33 "--package" 34 pname 35 ]; 36 37 cargoTestFlags = cargoBuildFlags; 38 39 meta = { 40 description = "Fast, collaborative live terminal sharing over the web"; 41 homepage = "https://github.com/ekzhang/sshx"; 42 changelog = "https://github.com/ekzhang/sshx/releases/tag/v${version}"; 43 license = lib.licenses.mit; 44 maintainers = with lib.maintainers; [ 45 pinpox 46 kranzes 47 ]; 48 mainProgram = pname; 49 }; 50 } 51 // args 52 ); 53in 54{ 55 sshx = mkSshxPackage { 56 pname = "sshx"; 57 cargoHash = "sha256-QftBUGDQvCSHoOBLnEzNOe1dMTpVTvMDXNp5qZr0C2M="; 58 }; 59 60 sshx-server = mkSshxPackage rec { 61 pname = "sshx-server"; 62 cargoHash = "sha256-QftBUGDQvCSHoOBLnEzNOe1dMTpVTvMDXNp5qZr0C2M="; 63 64 postPatch = '' 65 substituteInPlace crates/sshx-server/src/web.rs \ 66 --replace-fail 'ServeDir::new("build")' 'ServeDir::new("${passthru.web.outPath}")' \ 67 --replace-fail 'ServeFile::new("build/spa.html")' 'ServeFile::new("${passthru.web.outPath}/spa.html")' 68 ''; 69 70 passthru.web = buildNpmPackage { 71 pname = "sshx-web"; 72 73 inherit 74 version 75 src 76 ; 77 78 postPatch = '' 79 substituteInPlace vite.config.ts \ 80 --replace-fail 'execSync("git rev-parse --short HEAD").toString().trim()' '"${src.rev}"' 81 ''; 82 83 npmDepsHash = "sha256-QdgNtQMjK229QzB5LbCry1hKVPon8IWUnj+v5L7ydfI="; 84 85 installPhase = '' 86 cp -r build $out 87 ''; 88 }; 89 }; 90}