1#!/usr/bin/env sh
2set -eu
3
4# Downloads the latest tarball from https://zed.dev/releases and unpacks it
5# into ~/.local/. If you'd prefer to do this manually, instructions are at
6# https://zed.dev/docs/linux.
7
8main() {
9 platform="$(uname -s)"
10 arch="$(uname -m)"
11 channel="${ZED_CHANNEL:-stable}"
12 temp="$(mktemp -d "/tmp/zed-XXXXXX")"
13
14 if [ "$platform" = "Darwin" ]; then
15 platform="macos"
16 elif [ "$platform" = "Linux" ]; then
17 platform="linux"
18 else
19 echo "Unsupported platform $platform"
20 exit 1
21 fi
22
23 case "$platform-$arch" in
24 macos-arm64* | linux-arm64* | linux-armhf | linux-aarch64)
25 arch="aarch64"
26 ;;
27 macos-x86* | linux-x86* | linux-i686*)
28 arch="x86_64"
29 ;;
30 *)
31 echo "Unsupported platform or architecture"
32 exit 1
33 ;;
34 esac
35
36 if command -v curl >/dev/null 2>&1; then
37 curl () {
38 command curl -fL "$@"
39 }
40 elif command -v wget >/dev/null 2>&1; then
41 curl () {
42 wget -O- "$@"
43 }
44 else
45 echo "Could not find 'curl' or 'wget' in your path"
46 exit 1
47 fi
48
49 "$platform" "$@"
50
51 if [ "$(command -v zed)" = "$HOME/.local/bin/zed" ]; then
52 echo "Zed has been installed. Run with 'zed'"
53 else
54 echo "To run Zed from your terminal, you must add ~/.local/bin to your PATH"
55 echo "Run:"
56
57 case "$SHELL" in
58 *zsh)
59 echo " echo 'export PATH=\$HOME/.local/bin:\$PATH' >> ~/.zshrc"
60 echo " source ~/.zshrc"
61 ;;
62 *fish)
63 echo " fish_add_path -U $HOME/.local/bin"
64 ;;
65 *)
66 echo " echo 'export PATH=\$HOME/.local/bin:\$PATH' >> ~/.bashrc"
67 echo " source ~/.bashrc"
68 ;;
69 esac
70
71 echo "To run Zed now, '~/.local/bin/zed'"
72 fi
73}
74
75linux() {
76 if [ -n "${ZED_BUNDLE_PATH:-}" ]; then
77 cp "$ZED_BUNDLE_PATH" "$temp/zed-linux-$arch.tar.gz"
78 else
79 echo "Downloading Zed"
80 curl "https://zed.dev/api/releases/$channel/latest/zed-linux-$arch.tar.gz" > "$temp/zed-linux-$arch.tar.gz"
81 fi
82
83 suffix=""
84 if [ "$channel" != "stable" ]; then
85 suffix="-$channel"
86 fi
87
88 appid=""
89 case "$channel" in
90 stable)
91 appid="dev.zed.Zed"
92 ;;
93 nightly)
94 appid="dev.zed.Zed-Nightly"
95 ;;
96 preview)
97 appid="dev.zed.Zed-Preview"
98 ;;
99 dev)
100 appid="dev.zed.Zed-Dev"
101 ;;
102 *)
103 echo "Unknown release channel: ${channel}. Using stable app ID."
104 appid="dev.zed.Zed"
105 ;;
106 esac
107
108 # Unpack
109 rm -rf "$HOME/.local/zed$suffix.app"
110 mkdir -p "$HOME/.local/zed$suffix.app"
111 tar -xzf "$temp/zed-linux-$arch.tar.gz" -C "$HOME/.local/"
112
113 # Setup ~/.local directories
114 mkdir -p "$HOME/.local/bin" "$HOME/.local/share/applications"
115
116 # Link the binary
117 if [ -f "$HOME/.local/zed$suffix.app/bin/zed" ]; then
118 ln -sf "$HOME/.local/zed$suffix.app/bin/zed" "$HOME/.local/bin/zed"
119 else
120 # support for versions before 0.139.x.
121 ln -sf "$HOME/.local/zed$suffix.app/bin/cli" "$HOME/.local/bin/zed"
122 fi
123
124 # Copy .desktop file
125 desktop_file_path="$HOME/.local/share/applications/${appid}.desktop"
126 cp "$HOME/.local/zed$suffix.app/share/applications/zed$suffix.desktop" "${desktop_file_path}"
127 sed -i "s|Icon=zed|Icon=$HOME/.local/zed$suffix.app/share/icons/hicolor/512x512/apps/zed.png|g" "${desktop_file_path}"
128 sed -i "s|Exec=zed|Exec=$HOME/.local/zed$suffix.app/bin/zed|g" "${desktop_file_path}"
129}
130
131macos() {
132 echo "Downloading Zed"
133 curl "https://zed.dev/api/releases/$channel/latest/Zed-$arch.dmg" > "$temp/Zed-$arch.dmg"
134 hdiutil attach -quiet "$temp/Zed-$arch.dmg" -mountpoint "$temp/mount"
135 app="$(cd "$temp/mount/"; echo *.app)"
136 echo "Installing $app"
137 if [ -d "/Applications/$app" ]; then
138 echo "Removing existing $app"
139 rm -rf "/Applications/$app"
140 fi
141 ditto "$temp/mount/$app" "/Applications/$app"
142 hdiutil detach -quiet "$temp/mount"
143
144 mkdir -p "$HOME/.local/bin"
145 # Link the binary
146 ln -sf "/Applications/$app/Contents/MacOS/cli" "$HOME/.local/bin/zed"
147}
148
149main "$@"