Skip to content

apple/pkl-neovim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

e8e41d6 · Mar 14, 2025

History

13 Commits
Mar 14, 2025
Feb 2, 2024
Mar 14, 2025
Mar 14, 2025
Mar 14, 2025
Mar 14, 2025
Mar 14, 2025
Mar 14, 2025
Mar 14, 2025
Mar 14, 2025
Feb 2, 2024
Feb 2, 2024
Feb 2, 2024
Feb 2, 2024
Feb 2, 2024
Mar 14, 2025
Feb 2, 2024
Feb 2, 2024
Mar 14, 2025

Repository files navigation

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

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.

This config is compatible with LazyVim.

{
  "apple/pkl-neovim",
  lazy = true,
  ft = "pkl",
  dependencies = {
    {
      "nvim-treesitter/nvim-treesitter",
      build = function(_)
        vim.cmd("TSUpdate")
      end,
    },
    "L3MON4D3/LuaSnip",
  },
  build = function()
    require('pkl-neovim.internal').init()

    -- Set up syntax highlighting.
    vim.cmd("TSInstall! pkl")
  end,
  config = function()
    -- Set up snippets.
    require("luasnip.loaders.from_snipmate").lazy_load()
  end,
}

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
  }
}

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.