/pkl-neovim

Pkl language support for Neovim

Primary LanguageSchemeApache License 2.0Apache-2.0

pkl-neovim

This repository provides language support for Pkl for neovim.

Supported features:

Installation

This plugin requires Neovim version 0.5 or higher.

Install nvim-treesitter along side this plugin using your favorite plugin manager.

vim-plug setup

Here is a sample init.vim file using vim-plug. To complete the setup, you will need to run :PlugInstall, then restart neovim.

call plug#begin()
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
Plug 'https://github.com/apple/pkl-neovim.git'
call plug#end()

" The below is required for enabling the tree-sitter syntax engine, which is used by pkl-neovim.
lua <<EOF
local hasConfigs, configs = pcall(require, "nvim-treesitter.configs")
if hasConfigs then
  configs.setup {
    ensure_installed = "pkl",
    highlight = {
      enable = true,              -- false will disable the whole extension
    },
    indent = {
      enable = true
    }
  }
end
EOF

packer.nvim setup

Here is a sample init.lua file using packer.nvim. To complete the setup, you will need to run :PackerSync, then restart neovim.

require('packer').startup(function(use)
  -- Packer can manage itself
  use 'wbthomason/packer.nvim'

  use {'nvim-treesitter/nvim-treesitter', run = ':TSUpdate'} -- Treesitter syntax highlighting.
  use {'https://github.com/apple/pkl-neovim', after = "nvim-treesitter", run = ":TSInstall! pkl"} -- Pkl syntax highlighting
end)

-- The below is required for enabling the tree-sitter syntax engine, which is used by pkl-neovim.
-- Set up Treesitter languages.
require'nvim-treesitter.configs'.setup {
  ensure_installed = "all", -- or "pkl" for just this plugin.
  highlight = {
    enable = true,              -- false will disable the whole extension
  },
  indent = {
    enable = true
  }
}

lazy.nvim setup

Here’s a sample block to add your Lazy.nvim configuration. To complete the setup, restart neovim after adding this to your setup.

{
  "nvim-treesitter/nvim-treesitter",
  build = function(_)
    vim.cmd("TSUpdate")
  end,
},
{
  "https://github.com/apple/pkl-neovim",
  lazy = true,
  event = "BufReadPre *.pkl",
  dependencies = {
    "nvim-treesitter/nvim-treesitter",
  },
  build = function()
    vim.cmd("TSInstall! pkl")
  end,
}

Troubleshooting

Some troubleshooting tips if the installation isn’t working:

  • If using neovim 0.5, ensure you are using the 0.5-compat branch of the nvim-treesitter/nvim-treesitter plugin

  • Run :TSInstall pkl to manually install the Pkl parser.

  • If syntax highlighting doesn’t work until you :edit the pkl file to reload it, ensure that the pkl-neovim plugin is configured to run after the nvim-treesitter plugin.