Skip to content

hyprland-community/hyprls

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HyprLS

A LSP server for Hyprland configuration files.

Features

Not checked means planned / work in progress.

  • Auto-complete
  • Hover
    • TODO: Documentation on hover of categories?
  • Go to definition
  • Color pickers
  • Document symbols
  • Diagnostics
  • Formatting
  • Semantic highlighting

Installation

Linux packages

hyprls has packages for various distributions, kindly maintained by other people

Packaging status

With go install

go install github.com/hyprland-community/hyprls/cmd/hyprls@latest

Pre-built binaries

Binaries for linux are available in Releases

From source

  • Required: Just (paru -S just on Arch Linux (btw))
git clone --recurse-submodules https://github.com/hyprland-community/hyprls
cd hyprls
# installs the binary to ~/.local/bin.
# Make sure that directory exists and is in your PATH
just install

Usage

With Neovim

Combine with The tree-sitter grammar for Hyprlang for syntax highlighting.

Add this to your init.lua:

-- Hyprlang LSP
vim.api.nvim_create_autocmd({'BufEnter', 'BufWinEnter'}, {
		pattern = {"*.hl", "hypr*.conf"},
		callback = function(event)
				print(string.format("starting hyprls for %s", vim.inspect(event)))
				vim.lsp.start {
						name = "hyprlang",
						cmd = {"hyprls"},
						root_dir = vim.fn.getcwd(),
						settings = {
							hyprls = {
								preferIgnoreFile = true, -- set to false to prefer `hyprls.ignore`
								ignore = {"hyprlock.conf", "hypridle.conf"}
							}
						}
					}
		end
})

You can control whether HyprLS prefers a workspace .hyprlsignore file or the editor settings with the hyprls.preferIgnoreFile option. Example configurations:

  • Using vim.lsp.start (example above) — set settings.hyprls.preferIgnoreFile to false to force the server to use settings.hyprls.ignore.

  • Using nvim-lspconfig:

local lspconfig = require('lspconfig')
lspconfig.hyprlang.setup{
	cmd = {"hyprls"},
	settings = {
		hyprls = {
			preferIgnoreFile = false,
			ignore = {"hyprlock.conf", "hypridle.conf"}
		}
	}
}

When preferIgnoreFile is true (the default), HyprLS will read .hyprlsignore from your workspace root. When it's false, it will use the hyprls.ignore array from your editor configuration instead.

Example .hyprlsignore (create this file at the workspace root):

# ignore session-specific files
hyprlock.conf
hypridle.conf
# ignore any file named workspace-specific.ignore
workspace-specific.ignore

Notes for Neovim users:

  • If you set preferIgnoreFile = true, HyprLS will use the workspace .hyprlsignore file and ignore any settings.hyprls.ignore values passed from Neovim.
  • If you set preferIgnoreFile = false, HyprLS will use the ignore list you provide in settings.hyprls (see nvim-lspconfig example above).

With Emacs

Language server support is provided by the lsp-bridge.

Just install lsp-bridge in Emacs, that's all, no need to do any configuration.

VSCode

Official Marketplace (VisualStudio Marketplace)

Install it from the marketplace.

Tip

You can use the Hyprland extension pack to also get syntax highlighting.

Open VSX (for VSCodium & others)

Install it on OpenVSX

Zed

Language server support is provided by the Hyprlang extension. Detailed installation and setup instructions can be found in the extension repository [maintainer = @WhySoBad].

Configuration

Ignoring some files

Thanks to @sansmoraxz for this feature ^^

By default, HyprLS ignores hyprlock.conf and hypridle.conf files, since they aren't supported yet.

You can create a .hyprlsignore file that lists filenames HyprLS should not run on. Files are relative to the workspace root, which is determined by your IDE (for example, for VSCode, it's the folder you opened it with)

Packages

No packages published

Contributors 10