From 97f315356db3491fc332d6308855df92a97c2d92 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Mon, 8 Jul 2024 16:29:28 -0600 Subject: [PATCH] Linux docs (#13945) Release Notes: - N/A --------- Co-authored-by: Mikayla Maki Co-authored-by: Marshall Bowers --- .github/ISSUE_TEMPLATE/1_bug_report.yml | 5 +- docs/src/SUMMARY.md | 1 + docs/src/development/linux.md | 32 ++++----- docs/src/getting-started.md | 31 ++++++++- docs/src/linux.md | 90 +++++++++++++++++++++++++ docs/src/system-requirements.md | 2 +- 6 files changed, 135 insertions(+), 26 deletions(-) create mode 100644 docs/src/linux.md diff --git a/.github/ISSUE_TEMPLATE/1_bug_report.yml b/.github/ISSUE_TEMPLATE/1_bug_report.yml index db88ddd3d6..a4c1e5aa6e 100644 --- a/.github/ISSUE_TEMPLATE/1_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/1_bug_report.yml @@ -32,9 +32,10 @@ body: required: false - type: textarea attributes: - label: If applicable, attach your `~/Library/Logs/Zed/Zed.log` file to this issue. + label: If applicable, attach your Zed.log file to this issue. description: | - Drag Zed.log into the text input below. + macOS: `~/Library/Logs/Zed/Zed.log` + Linux: `~/.local/share/zed/logs/Zed.log` or $XDG_DATA_HOME If you only need the most recent lines, you can run the `zed: open log` command palette action to see the last 1000. value: |
Zed.log
diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md
index c43e78abbb..91fc796d8c 100644
--- a/docs/src/SUMMARY.md
+++ b/docs/src/SUMMARY.md
@@ -4,6 +4,7 @@
 
 - [Getting Started](./getting-started.md)
   - [System Requirements](./system-requirements.md)
+  - [Linux](./linux.md)
   - [Telemetry](./telemetry.md)
   - [Additional Learning Materials](./additional-learning-materials.md)
 
diff --git a/docs/src/development/linux.md b/docs/src/development/linux.md
index 3c8bfb089e..485ae94ce5 100644
--- a/docs/src/development/linux.md
+++ b/docs/src/development/linux.md
@@ -38,7 +38,7 @@ docker compose up -d
 
 ## Building from source
 
-Once you have the dependencies installed, you can build Zed using [Cargo](https://doc.rust-lang.org/cargo/).
+Once the dependencies are installed, you can build Zed using [Cargo](https://doc.rust-lang.org/cargo/).
 
 For a debug build of the editor:
 
@@ -68,17 +68,9 @@ You can install a local build on your machine with:
 
 This will build zed and the cli in release mode and make them available at `~/.local/bin/zed`, installing .desktop files to `~/.local/share`.
 
-If you'd like to install things to a different prefix you can use:
-
-```
-./script/install-linux /usr/
-```
-
-In this case the binary will be `/usr/bin/zed` and the `.desktop` file in `/usr/share`. The script should prompt for sudo as required so that the rust build runs as the current user.
-
 ## Wayland & X11
 
-Zed has basic support for both modes. The mode is selected at runtime. If you're on wayland and want to run in X11 mode, you can set `WAYLAND_DISPLAY='' cargo run` to do so.
+Zed supports both X11 and Wayland. By default, we pick whichever we can find at runtime. If you're on Wayland and want to run in X11 mode,  use the environment variable `WAYLAND_DISPLAY=''`.
 
 ## Notes for packaging Zed
 
@@ -90,10 +82,10 @@ Zed has two main binaries:
 
 * You will need to build `crates/cli` and make it's binary available in `$PATH` with the name `zed`.
 * You will need to build `crates/zed` and put it at `$PATH/to/cli/../../libexec/zed-editor`. For example, if you are going to put the cli at `~/.local/bin/zed` put zed at `~/.local/libexec/zed-editor`. As some linux distributions (notably Arch) discourage the use of `libexec`, you can also put this binary at `$PATH/to/cli/../../lib/zed/zed-editor` (e.g. `~/.local/lib/zed/zed-editor`) instead.
-* If you are going to provide a `.desktop` file you can find a template in `crates/zed/resources/zed.desktop.in`, and use `envsubst` to populate it with the values required. This file should also be renamed to `$APP_ID.desktop`, so that the file [follows the FreeDesktop standards](https://github.com/zed-industries/zed/issues/12707#issuecomment-2168742761).
+* If you are going to provide a `.desktop` file you can find a template in `crates/zed/resources/zed.desktop.in`, and use `envsubst` to populate it with the values required. This file should also be renamed to `$APP_ID.desktop` so that the file [follows the FreeDesktop standards](https://github.com/zed-industries/zed/issues/12707#issuecomment-2168742761).
 * You will need to ensure that the necessary libraries are installed. You can get the current list by [inspecting the built binary](https://github.com/zed-industries/zed/blob/059a4141b756cf4afac4c977afc488539aec6470/script/bundle-linux#L65-L70) on your system.
 * For an example of a complete build script, see [script/bundle-linux](https://github.com/zed-industries/zed/blob/main/script/bundle-linux).
-* You can disable Zed's auto updates and provide instructions for users who try to Update zed manually by building (or running) Zed with the environment variable `ZED_UPDATE_EXPLANATION`. For example: `ZED_UPDATE_EXPLANATION="Please use flatpak to update zed."`.
+* You can disable Zed's auto updates and provide instructions for users who try to update Zed manually by building (or running) Zed with the environment variable `ZED_UPDATE_EXPLANATION`. For example: `ZED_UPDATE_EXPLANATION="Please use flatpak to update zed."`.
 * Make sure to update the contents of the `crates/zed/RELEASE_CHANNEL` file to 'nightly', 'preview', or 'stable', with no newline. This will cause Zed to use the credentials manager to remember a user's login.
 
 ### Other things to note
@@ -102,17 +94,17 @@ At Zed, our priority has been to move fast and bring the latest technology to ou
 
 However, we realize that many distros have other priorities. We want to work with everyone to bring Zed to their favorite platforms. But there is a long way to go:
 
-* Zed is a fast moving early-phase project. We typically release 2-3 builds a week to fix user-reported issues and release major features.
-* There are a couple of other `zed` binaries that may be present on linux systems ([1](https://openzfs.github.io/openzfs-docs/man/v2.2/8/zed.8.html), [2](https://zed.brimdata.io/docs/commands/zed)). If you want to rename our CLI binary because of these issues, we suggest `zedit`, `zeditor`, or `zed-cli`.
-* Zed automatically installs the correct version of common developer tools in the same way as rustup/rbenv/pyenv, etc. We understand that this is contentious, [see here](https://github.com/zed-industries/zed/issues/12589).
-* We allow users to install extensions on their own and from [zed-industries/extensions](https://github.com/zed-industries/extensions). These extensions may install further tooling as needed, such as language servers. In the long run we would like to make this safer, [see here](https://github.com/zed-industries/zed/issues/12358).
-* Zed connects to a number of online services by default (AI, telemetry, collaboration). AI and our telemetry can be disabled by your users with their own zed settings or by patching our [default settings file](https://github.com/zed-industries/zed/blob/main/assets/settings/default.json).
-* As a result of the above, zed currently does not play nice with sandboxes, [see here](https://github.com/zed-industries/zed/pull/12006#issuecomment-2130421220)
+* Zed is a fast-moving early-phase project. We typically release 2-3 builds per week to fix user-reported issues and release major features.
+* There are a couple of other `zed` binaries that may be present on Linux systems ([1](https://openzfs.github.io/openzfs-docs/man/v2.2/8/zed.8.html), [2](https://zed.brimdata.io/docs/commands/zed)). If you want to rename our CLI binary because of these issues, we suggest `zedit`, `zeditor`, or `zed-cli`.
+* Zed automatically installs the correct version of common developer tools in the same way as rustup/rbenv/pyenv, etc. We understand this is contentious, [see here](https://github.com/zed-industries/zed/issues/12589).
+* We allow users to install extensions locally and from [zed-industries/extensions](https://github.com/zed-industries/extensions). These extensions may install further tooling as needed, such as language servers. In the long run, we would like to make this safer, [see here](https://github.com/zed-industries/zed/issues/12358).
+* Zed connects to several online services by default (AI, telemetry, collaboration). AI and our telemetry can be disabled by your users with their zed settings or by patching our [default settings file](https://github.com/zed-industries/zed/blob/main/assets/settings/default.json).
+* As a result of the above issues, zed currently does not play nice with sandboxes, [see here](https://github.com/zed-industries/zed/pull/12006#issuecomment-2130421220)
 
 ## Flatpak
 
 > [!WARNING]
-> Zed's current Flatpak integration simply exits the sandbox on startup. Workflows that rely on Flatpak's sandboxing may not work as expected.
+> Zed's current Flatpak integration exits the sandbox on startup. Workflows that rely on Flatpak's sandboxing may not work as expected.
 
 To build & install the Flatpak package locally follow the steps below:
 
@@ -123,7 +115,7 @@ To build & install the Flatpak package locally follow the steps below:
 
 ## Troubleshooting
 
-### Can't compile zed
+### Can't compile Zed
 
 Before reporting the issue, make sure that you have the latest rustc version with `rustup update`.
 
diff --git a/docs/src/getting-started.md b/docs/src/getting-started.md
index dcdaec06f8..68d3f88079 100644
--- a/docs/src/getting-started.md
+++ b/docs/src/getting-started.md
@@ -4,12 +4,37 @@ Welcome to Zed! We are excited to have you. Here is a jumping-off point to getti
 
 ## Download Zed
 
-You can obtain the release build via the [download page](https://zed.dev/download). After the first manual installation, Zed will periodically check for and install updates automatically for you.
+### MacOS
+
+You can obtain the stable builds via the [download page](https://zed.dev/download). If you want to download our preview build, you can find it on its [releases page](https://zed.dev/releases/preview) After the first manual installation, Zed will periodically check for and install updates automatically for you.
+
+### Linux
+
+For most people, the easiest way to install Zed is through our installation script:
+
+```sh
+curl https://zed.dev/install.sh | sh
+```
+
+If you'd like to help us test our new features, you can also install our preview build:
+
+```sh
+curl https://zed.dev/install.sh | ZED_CHANNEL=preview sh
+```
+
+This script supports `x86_64` and `AArch64`, as well as common Linux distributions: Ubuntu, Arch, Debian, RedHat, CentOS, and Fedora.
+
+The install script does not work on systems that:
+* have no system-wide glibc (for example on NixOS or Alpine)
+* have a glibc older than version 2.29 (for example Amazon Linux 2 or Ubuntu 18 and earlier)
+* use an architecture other than 64-bit Intel or 64-bit ARM (for example a 32-bit or RISC-V machine)
+
+If this script is insufficient for your use case or you run into problems running Zed, please see our [linux-specific documentation](./linux.md)
 
 ## Configure Zed
 
-Use `⌘` + `,` to open your custom settings to set things like fonts, formatting settings, per-language settings and more. You can access the default configuration using the `Zed > Settings > Open Default Settings` menu item. See [Configuring Zed](./configuring-zed.md) for all available settings.
+Use `⌘` + `,` to open your custom settings to set things like fonts, formatting settings, per-language settings, and more. You can access the default configuration using the `Zed > Settings > Open Default Settings` menu item. See [Configuring Zed](./configuring-zed.md) for all available settings.
 
 ## Set up your key bindings
 
-You can access the default key binding set using the `Zed > Settings > Open Default Key Bindings` menu item. Use `⌘` + `K`, `⌘` + `S` to open your custom keymap to add your own key bindings. See Key Bindings for more info.
+You can access the default key binding set using the `Zed > Settings > Open Default Key Bindings` menu item. Use `⌘` + `K`, `⌘` + `S` to open your custom keymap to add your key bindings. See Key Bindings for more info.
diff --git a/docs/src/linux.md b/docs/src/linux.md
new file mode 100644
index 0000000000..03cc67c047
--- /dev/null
+++ b/docs/src/linux.md
@@ -0,0 +1,90 @@
+# Other ways to install Zed on Linux
+
+## Installing from source
+
+Zed is open source, and [you can install from source](./development/linux.md).
+
+## Installing via a package manager
+
+Several people have created third-party Zed packages for various Linux package managers. You may be able to install Zed using these packages.
+
+* [Alpine](https://pkgs.alpinelinux.org/package/edge/testing/x86_64/zed)
+* [Nix](https://search.nixos.org/packages?show=zed-editor)
+* [Arch](https://archlinux.org/packages/extra/x86_64/zed/)
+* [Fedora](https://fedora.pkgs.org/40/terra/zed-preview-0:0.142.1-pre1.fc40.aarch64.rpm.html)
+* Please add others to this list!
+
+When installing a third-party package please be aware that it may not be completely up to date and may be slightly different from the Zed we package (a common change is to rename the binary to `zedit` to avoid conflicting with other packages).
+
+We'd love your help making Zed available for everyone. If Zed is not yet available for your package manager, and you would like to fix that, we have some notes on [how to do it](./development/linux.md#notes-for-packaging-zed).
+
+## Downloading manually.
+
+If you'd prefer, you can install Zed by downloading our pre-built .tar.gz. This is the same artifact that our install script uses, but you can customize the location of your installation by modifying the instructions below:
+
+Download the `.tar.gz` file:
+
+* [zed-linux-x86_64.tar.gz](https://zed.dev/api/releases/stable/latest/zed-linux-x86_64.tar.gz) ([preview](https://zed.dev/api/releases/preview/latest/zed-linux-x86_64.tar.gz))
+* [zed-linux-aarch64.tar.gz](https://zed.dev/api/releases/stable/latest/zed-linux-x86_64.tar.gz)
+ ([preview](https://zed.dev/api/releases/preview/latest/zed-linux-x86_64.tar.gz))
+
+Then ensure that the `zed` binary in the tarball is on your path. The easiest way is to unpack the tarball and create a symlink:
+
+```sh
+mkdir -p ~/.local
+# extract zed to ~/.local/zed.app/
+tar -xvf .tar.gz -C ~/.local
+# link the zed binary to ~/.local/bin (or another directory in your $PATH)
+ln -sf ~/.local/bin/zed ~/.local/zed.app/bin/zed
+```
+
+If you'd like integration with an XDG-compatible desktop environment, you will also need to install the `.desktop` file:
+
+```sh
+cp ~/.local/zed.app/share/applications/zed.desktop ~/.local/share/applications/zed.desktop
+sed -i "s|Icon=zed|Icon=$HOME/.local/zed.app/share/icons/hicolor/512x512/apps/zed.png|g" ~/.local/share/applications/zed.desktop
+sed -i "s|Exec=zed|Exec=$HOME/.local/zed.app/libexec/zed-editor|g" ~/.local/share/applications/zed.desktop
+```
+
+# Troubleshooting
+
+Linux works on a large variety of systems configured in many different ways. We primarily test Zed on a vanilla Ubuntu setup, as it is the most common distribution our users use, that said we do expect it to work on a wide variety of machines.
+
+## Zed fails to start
+
+If you see an error like "/lib64/libc.so.6: version 'GLIBC_2.29' not found" it means that your distribution's version of glibc is too old. You can either upgrade your system, or [install Zed from source](./development/linux.md).
+
+## Zed fails to open windows
+
+Zed requires a GPU to run effectively. Under the hood, we use [Vulkan](https://www.vulkan.org/) to communicate with your GPU. If you are seeing problems with performance, or Zed fails to load, it is possible that Vulkan is the culprit.
+
+If you're using an AMD GPU, you might get a 'Broken Pipe' error. try using the RADV or Mesa drivers. See: [#13880](https://github.com/zed-industries/zed/issues/13880)
+
+Otherwise, if you see error messages like: "Zed failed to open a window: NoSupportedDeviceFound" or "called `Result::unwrap()` on an `Err` value: ERROR_INITIALIZATION_FAILED", you can begin troubleshooting Vulkan, by installing the `vulkan-tools` package, and running:
+
+```sh
+vkcube
+```
+
+This should output a line describing your current graphics setup. If it contains `llvmpipe` then Vulkan is not using a GPU, which will make Zed run very slowly.
+
+In most cases this can be fixed by configuring Vulkan and installing compatible GPU drivers, however in some cases (for example running Linux on an Arm-based MacBook) there is no Vulkan support yet.
+
+For more information, the [Arch guide to Vulkan](https://wiki.archlinux.org/title/Vulkan) has some good steps.
+
+
+## Zed is very slow
+
+If you're on relatively modern hardware Zed should feel fast to use. That said, we do rely on the GPU to make rendering quick.
+
+If you install the `vulkan-tools` package and run `vkcube` and you see `llvmpipe` in the output, you need to make sure your GPU is configured correctly.
+
+For more information, the [Arch guide to Vulkan](https://wiki.archlinux.org/title/Vulkan) has some good troubleshooting steps.
+
+If Vulkan is configured correctly, and Zed is still slow for you, please [file an issue](https://github.com/zed-industries/zed) with as much information as possible.
+
+## Opening files does not work
+
+If opening new files or projects is not working, the likely problem is that your XDG desktop does not provide a file picker.
+
+If you are using a distribution that lets you configure your XDG provider or a window manager that does not provide one, you must make sure you have a backup provider configured. See [this list](https://wiki.archlinux.org/title/XDG_Desktop_Portal#List_of_backends_and_interfaces) as a starting point.
diff --git a/docs/src/system-requirements.md b/docs/src/system-requirements.md
index 5d7731af75..bcaf1e81b5 100644
--- a/docs/src/system-requirements.md
+++ b/docs/src/system-requirements.md
@@ -8,7 +8,7 @@ Supported versions: Catalina (10.15) - Sonoma (14.x).
 
 ## Linux
 
-Not yet available as an official download. Can be built [from source](./development/linux.md).
+Zed requires a physical GPU with a Vulkan 1.3 driver.
 
 ## Windows