Compare commits

...

2 commits

Author SHA1 Message Date
82adb655f1
feat: add Zed extension release artifact with WSL2 support
All checks were successful
Continuous Integration / Build Package (push) Successful in 30s
Continuous Integration / Lint, Check & Test (push) Successful in 1m9s
Release / Build and Release (push) Successful in 7m10s
The Zed extension now detects Windows via current_platform() and
automatically uses `wsl streamd lsp` instead of `streamd lsp`,
enabling seamless LSP support when Zed runs on Windows with streamd
installed in WSL2.

A pre-built zip (extension.toml + extension.wasm) is now built as
`zed-extension-zip` and published to every release. The README gains
a step-by-step WSL2 installation guide.
2026-04-19 21:16:04 +02:00
ec978590c0
feat: add clippy and cargo test as dev pre-commit hooks
Splits git hooks into two configurations: a sandbox-safe set for
`nix flake check` (rustfmt + commitizen) and a full dev set installed
via `nix develop` that also runs clippy (deny warnings) and cargo test.
2026-04-19 21:15:51 +02:00
4 changed files with 103 additions and 8 deletions

View file

@ -53,6 +53,10 @@ jobs:
if: steps.version.outputs.SKIP != 'true' if: steps.version.outputs.SKIP != 'true'
run: nix build .#streamd-windows -o result-windows run: nix build .#streamd-windows -o result-windows
- name: Build Zed extension
if: steps.version.outputs.SKIP != 'true'
run: nix build .#zed-extension-zip -o result-zed-extension-zip
- name: Prepare release artifacts - name: Prepare release artifacts
if: steps.version.outputs.SKIP != 'true' if: steps.version.outputs.SKIP != 'true'
run: | run: |
@ -60,6 +64,7 @@ jobs:
cp result-deb release/streamd_${{ steps.version.outputs.VERSION }}_amd64.deb cp result-deb release/streamd_${{ steps.version.outputs.VERSION }}_amd64.deb
cp result-musl/bin/streamd release/streamd-${{ steps.version.outputs.VERSION }}-linux-x86_64 cp result-musl/bin/streamd release/streamd-${{ steps.version.outputs.VERSION }}-linux-x86_64
cp result-windows/bin/streamd.exe release/streamd-${{ steps.version.outputs.VERSION }}-windows-x86_64.exe cp result-windows/bin/streamd.exe release/streamd-${{ steps.version.outputs.VERSION }}-windows-x86_64.exe
cp result-zed-extension-zip release/streamd-zed-extension-${{ steps.version.outputs.VERSION }}.zip
- name: Create release - name: Create release
if: steps.version.outputs.SKIP != 'true' if: steps.version.outputs.SKIP != 'true'

View file

@ -153,6 +153,41 @@ Add to `~/.config/zed/settings.json`:
The `"..."` keeps Zed's default Markdown servers (e.g. `marksman`) active alongside streamd. The `"..."` keeps Zed's default Markdown servers (e.g. `marksman`) active alongside streamd.
#### Zed Extension (WSL2)
If you run Zed on Windows with streamd installed inside WSL2, use the pre-built Zed extension instead of the manual config above. The extension auto-detects Windows and routes LSP communication through WSL2.
**1. Install streamd in WSL2** (e.g. via the `.deb` package):
```bash
wget https://git.konstantinfickel.de/kfickel/streamd/releases/download/vX.Y.Z/streamd_X.Y.Z_amd64.deb
sudo dpkg -i streamd_X.Y.Z_amd64.deb
```
**2. Download the extension** from the same release page:
```
streamd-zed-extension-X.Y.Z.zip
```
**3. Extract the zip** to a permanent folder on your Windows machine, e.g.:
```
C:\Users\<you>\zed-extensions\streamd-zed-extension\
```
The folder must contain `extension.toml` and `extension.wasm`.
**4. Install the extension in Zed** via the command palette (`Ctrl+Shift+P`):
```
zed: install dev extension
```
Point Zed to the extracted folder.
**5. Verify** by opening a Markdown file inside a directory that contains `.streamd.toml``@` completions and diagnostics should become active.
### Neovim (nvim-lspconfig) ### Neovim (nvim-lspconfig)
**1. Register the server** — add to your Neovim config (e.g. `~/.config/nvim/init.lua` or a plugin file): **1. Register the server** — add to your Neovim config (e.g. `~/.config/nvim/init.lua` or a plugin file):

View file

@ -141,6 +141,36 @@
}; };
}; };
mkGitHooksDev =
system:
let
pkgs = mkPkgs system;
toolchain = pkgs.rust-bin.stable.latest.default;
in
git-hooks.lib.${system}.run {
src = ./.;
hooks = {
rustfmt = {
enable = true;
package = toolchain;
};
clippy = {
enable = true;
package = toolchain;
settings.denyWarnings = true;
};
cargo-test = {
enable = true;
name = "cargo test";
entry = "${toolchain}/bin/cargo test";
pass_filenames = false;
language = "system";
files = "\\.(rs|toml)$";
};
commitizen.enable = true;
};
};
mkMuslCraneLib = mkMuslCraneLib =
system: system:
let let
@ -199,6 +229,21 @@
in in
craneLib.buildPackage (commonArgs // { inherit cargoArtifacts; }); craneLib.buildPackage (commonArgs // { inherit cargoArtifacts; });
mkZedExtensionZip =
system:
let
pkgs = mkPkgs system;
zed-extension = mkZedExtension system;
in
pkgs.runCommand "streamd-zed-extension-${version}.zip" {
nativeBuildInputs = [ pkgs.zip ];
} ''
mkdir -p streamd-zed-extension
cp ${zed-extension}/extension.toml streamd-zed-extension/
cp ${zed-extension}/extension.wasm streamd-zed-extension/
zip -r $out streamd-zed-extension
'';
mkStreamdDeb = mkStreamdDeb =
system: system:
let let
@ -250,9 +295,10 @@
streamd-deb = mkStreamdDeb system; streamd-deb = mkStreamdDeb system;
streamd-windows = mkStreamdWindows system; streamd-windows = mkStreamdWindows system;
zed-extension = mkZedExtension system; zed-extension = mkZedExtension system;
zed-extension-zip = mkZedExtensionZip system;
in in
{ {
inherit streamd streamd-musl streamd-deb streamd-windows zed-extension; inherit streamd streamd-musl streamd-deb streamd-windows zed-extension zed-extension-zip;
default = streamd; default = streamd;
} }
); );
@ -339,7 +385,7 @@
]; ];
shellHook = '' shellHook = ''
${(mkGitHooksCheck system).shellHook} ${(mkGitHooksDev system).shellHook}
''; '';
}; };
} }

View file

@ -1,4 +1,4 @@
use zed_extension_api::{self as zed, Command, LanguageServerId, Result, Worktree}; use zed_extension_api::{self as zed, Command, LanguageServerId, Os, Result, Worktree, current_platform};
struct StreamdExtension; struct StreamdExtension;
@ -12,11 +12,20 @@ impl zed::Extension for StreamdExtension {
_language_server_id: &LanguageServerId, _language_server_id: &LanguageServerId,
_worktree: &Worktree, _worktree: &Worktree,
) -> Result<Command> { ) -> Result<Command> {
Ok(Command { let (os, _) = current_platform();
command: "streamd".into(), if os == Os::Windows {
args: vec!["lsp".into()], Ok(Command {
env: vec![], command: "wsl".into(),
}) args: vec!["streamd".into(), "lsp".into()],
env: vec![],
})
} else {
Ok(Command {
command: "streamd".into(),
args: vec!["lsp".into()],
env: vec![],
})
}
} }
} }