1{
2 lib,
3 channel ? "stable",
4 fetchurl,
5 installShellFiles,
6 makeBinaryWrapper,
7 terraform,
8 stdenvNoCC,
9 unzip,
10 nixosTests,
11}:
12
13let
14 inherit (stdenvNoCC.hostPlatform) system;
15
16 channels = {
17 stable = {
18 version = "2.23.4";
19 hash = {
20 x86_64-linux = "sha256-tpU26+3NrfOUWgd4Wav1fhTMtErh2CXt3Nr8BTIUdbc=";
21 x86_64-darwin = "sha256-07pSXm++a9VWcnc4AgrR7OaaDw2ki2XMtr8PZkWW2Vw=";
22 aarch64-linux = "sha256-Rm1CIVK7qPLizK+0H3Eb2qwPEj1TjHtIqdBr+Z+21eA=";
23 aarch64-darwin = "sha256-H5MLnRokC5Wb3FrotprunG+kx0qwT8/Ou6ScO7N2h+E=";
24 };
25 };
26 mainline = {
27 version = "2.24.2";
28 hash = {
29 x86_64-linux = "sha256-Al3bvIsSnU0vdNAkZknpP/rxJIP6UGUIeIZ6kw84SuM=";
30 x86_64-darwin = "sha256-0+n69BWKIgKFUCQzW4AMRW4QdRQcZkK5Ioiu4d4RvnE=";
31 aarch64-linux = "sha256-2JkEO7hhLY9e22OTYLhzv+Zb0aP6PRVG8ZX5r686o0Q=";
32 aarch64-darwin = "sha256-7CJQEj7VA3SwaZeimng6BPDtw14LXt7+1E7HxVs8kYM=";
33 };
34 };
35 };
36in
37stdenvNoCC.mkDerivation (finalAttrs: {
38 pname = "coder";
39 version = channels.${channel}.version;
40 src = fetchurl {
41 hash = (channels.${channel}.hash).${system};
42
43 url =
44 let
45 systemName =
46 {
47 x86_64-linux = "linux_amd64";
48 aarch64-linux = "linux_arm64";
49 x86_64-darwin = "darwin_amd64";
50 aarch64-darwin = "darwin_arm64";
51 }
52 .${system};
53
54 ext =
55 {
56 x86_64-linux = "tar.gz";
57 aarch64-linux = "tar.gz";
58 x86_64-darwin = "zip";
59 aarch64-darwin = "zip";
60 }
61 .${system};
62 in
63 "https://github.com/coder/coder/releases/download/v${finalAttrs.version}/coder_${finalAttrs.version}_${systemName}.${ext}";
64 };
65
66 nativeBuildInputs = [
67 installShellFiles
68 makeBinaryWrapper
69 unzip
70 ];
71
72 unpackPhase = ''
73 runHook preUnpack
74
75 case $src in
76 *.tar.gz) tar -xz -f "$src" ;;
77 *.zip) unzip "$src" ;;
78 esac
79
80 runHook postUnpack
81 '';
82
83 installPhase = ''
84 runHook preInstall
85
86 install -D -m755 coder $out/bin/coder
87
88 runHook postInstall
89 '';
90
91 postInstall = ''
92 wrapProgram $out/bin/coder \
93 --prefix PATH : ${lib.makeBinPath [ terraform ]}
94 '';
95
96 # integration tests require network access
97 doCheck = false;
98
99 meta = {
100 description = "Provision remote development environments via Terraform";
101 homepage = "https://coder.com";
102 license = lib.licenses.agpl3Only;
103 mainProgram = "coder";
104 maintainers = with lib.maintainers; [
105 ghuntley
106 kylecarbs
107 urandom
108 ];
109 };
110
111 passthru = {
112 updateScript = ./update.sh;
113 tests = {
114 inherit (nixosTests) coder;
115 };
116 };
117})