nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
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 ];
47 mainProgram = pname;
48 };
49 }
50 // args
51 );
52in
53{
54 sshx = mkSshxPackage {
55 pname = "sshx";
56 cargoHash = "sha256-QftBUGDQvCSHoOBLnEzNOe1dMTpVTvMDXNp5qZr0C2M=";
57 };
58
59 sshx-server = mkSshxPackage rec {
60 pname = "sshx-server";
61 cargoHash = "sha256-QftBUGDQvCSHoOBLnEzNOe1dMTpVTvMDXNp5qZr0C2M=";
62
63 postPatch = ''
64 substituteInPlace crates/sshx-server/src/web.rs \
65 --replace-fail 'ServeDir::new("build")' 'ServeDir::new("${passthru.web.outPath}")' \
66 --replace-fail 'ServeFile::new("build/spa.html")' 'ServeFile::new("${passthru.web.outPath}/spa.html")'
67 '';
68
69 passthru.web = buildNpmPackage {
70 pname = "sshx-web";
71
72 inherit
73 version
74 src
75 ;
76
77 postPatch = ''
78 substituteInPlace vite.config.ts \
79 --replace-fail 'execSync("git rev-parse --short HEAD").toString().trim()' '"${src.rev}"'
80 '';
81
82 npmDepsHash = "sha256-QdgNtQMjK229QzB5LbCry1hKVPon8IWUnj+v5L7ydfI=";
83
84 installPhase = ''
85 cp -r build $out
86 '';
87 };
88 };
89}