A simple language server to just insert snippets into Helix (and other text editor, IDE)
https://quantonganh.com/2023/07/31/create-snippets-in-helix
You can download the latest binary from the release page.
brew install quantonganh/tap/snippets-ls
Due to the presence of a replace
directive in the go.mod file, go install
cannot be used. You have to clone and build the package manually:
$ git clone git@github.com:quantonganh/snippets-ls.git
$ cd snippets-ls
$ go build -o ~/go/bin/snippets-ls main.go
Don't forget to append ~/go/bin
to your $PATH
.
Install via nix flake with home-manager
Include the following in the inputs
of flake.nix
for home-manager
:
inputs = {
# load compatible nixpkgs and home-mananger repos; they need not be 23.05
nixpkgs = { url = "github:nixos/nixpkgs/nixos-23.05"; };
home-manager = {
url = "github:nix-community/home-manager/release-23.05";
inputs.nixpkgs.follows = "nixpkgs";
};
# ...
snippets-ls = {
url = "github:quantonganh/snippets-ls";
inputs.nixpkgs.follows = "nixpkgs";
};
};
There are in turn many suitable ways to configure the outputs
of flake.nix
. One option is to use an overlay with something like
outputs = inputs:
with inputs;
let
system = "x86_64-linux"; # or other system as applicable (such as "x86_64-darwin")
pkgs = import nixpkgs {
inherit system;
overlays = [ pkgs_overlay ];
};
# ...
pkgs_overlay = final: prev: {
# ...
external.snippets-ls = snippets-ls.packages.${prev.system}.snippets-ls;
};
in {
homeConfigurations.YOUR-USER-NAME-HERE = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [ ./home.nix ];
};
};
};
The use of this overlay allows you to call this packages with pkgs.external.snippets-ls
, such the list of packages in home.nix
can look something like
home.packages = with pkgs; [
# ...
external.snippets-ls
];
Create your own snippets follow VSCode syntax. Alternatively, you can make use of pre-existing sample for various programming languages.
Update your configuration file located at ~/.config/helix/languages.toml
:
[[language]]
name = "go"
formatter = { command = "goimports"}
language-servers = ["gopls", "snippets-ls"]
[language-server.snippets-ls]
command = "snippets-ls"
args = ["-config", "/Users/quantong/.config/helix/go-snippets.json"]
Subsequently, as you start working on your file, input a snippet prefix to observe the suggestion.
If it does not work, take a look at ~/.cache/helix/helix.log
for additional insights.