/snippets-ls

A simple language server to just insert snippets into Helix (and other text editor, IDE)

Primary LanguageGoMIT LicenseMIT

snippets-ls

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

Installation

You can download the latest binary from the release page.

Install via homebrew

brew install quantonganh/tap/snippets-ls

Install via go

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
];

Usage

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.