Zine
Neovim Tooling Setup
Warning
This guide is not battle tested. Corrections and improvements from experienced Neovim users are welcome.
1. Clone all three repositories
While it is possible to depend directly on remote repositories, cloning locally helps both with the initial setup, and also helps you stay up to date with the latest changes made to the tooling for each language.
shell
git clone https://github.com/kristoff-it/ziggy
git clone https://github.com/kristoff-it/supermd
git clone https://github.com/kristoff-it/superhtml
Note
If and when Neovim will have builtin support for Zine file formats none of these steps will be necessary anymore.
2. Link all queries
In your Neovim config directory (usually ~/.config/neovim/
), create a symbolic link to all the Tree Sitter queries from our parsers.
From the directory where you cloned all repos, run the following commands:
shell
ln -s ziggy/tree-sitter-ziggy/queries ~/.config/neovim/queries/ziggy
ln -s ziggy/tree-sitter-ziggy-schema/queries ~/.config/neovim/queries/ziggy_schema
ln -s supermd/editors/neovim/queries/supermd ~/.config/neovim/queries/supermd
ln -s supermd/editors/neovim/queries/supermd_inline ~/.config/neovim/queries/supermd_inline
ln -s superhtml/tree-sitter-superhtml/queries ~/.config/neovim/queries/superhtml
3. Setup your init scripts
Warning
This guide assumes you're using nvim-lspconfig
, conform.nvim
, and nvim-treesitter
.
If you're using different plugins, the specific steps to setup everything will be different.
The following code blocks are snippets that should be placed wherever you are initializing the corresponding plugin.
nvim-lspconfig
vim.api.nvim_create_autocmd('FileType', {
group = vim.api.nvim_create_augroup('ziggy', {}),
pattern = 'ziggy',
callback = function()
vim.lsp.start {
name = 'Ziggy LSP',
cmd = { 'ziggy', 'lsp' },
root_dir = vim.loop.cwd(),
flags = { exit_timeout = 1000 },
}
end,
})
vim.api.nvim_create_autocmd('FileType', {
group = vim.api.nvim_create_augroup('ziggy_schema', {}),
pattern = 'ziggy_schema',
callback = function()
vim.lsp.start {
name = 'Ziggy LSP',
cmd = { 'ziggy', 'lsp', '--schema' },
root_dir = vim.loop.cwd(),
flags = { exit_timeout = 1000 },
}
end,
})
vim.api.nvim_create_autocmd('FileType', {
group = vim.api.nvim_create_augroup('superhtml', {}),
pattern = 'superhtml',
callback = function()
vim.lsp.start {
name = 'SuperHTML LSP',
cmd = { 'superhtml', 'lsp' },
root_dir = vim.loop.cwd(),
flags = { exit_timeout = 1000 },
}
end,
})
conform.nvim
formatters = {
superhtml = {
inherit = false,
command = 'superhtml',
stdin = true,
args = { 'fmt', '--stdin' },
},
ziggy = {
inherit = false,
command = 'ziggy',
stdin = true,
args = { 'fmt', '--stdin' },
},
ziggy_schema = {
inherit = false,
command = 'ziggy',
stdin = true,
args = { 'fmt', '--stdin-schema' },
},
},
formatters_by_ft = {
shtml = { 'superhtml' },
ziggy = { 'ziggy' },
ziggy_schema = { 'ziggy_schema' },
},
nvim-treesitter
local parser_config = require(
'nvim-treesitter.parsers'
).get_parser_configs()
parser_config.ziggy = {
install_info = {
url = 'https://github.com/kristoff-it/ziggy',
includes = { 'tree-sitter-ziggy/src' },
files = { 'tree-sitter-ziggy/src/parser.c' },
branch = 'main',
generate_requires_npm = false,
requires_generate_from_grammar = false,
},
filetype = 'ziggy',
}
parser_config.ziggy_schema = {
install_info = {
url = 'https://github.com/kristoff-it/ziggy',
files = { 'tree-sitter-ziggy-schema/src/parser.c' },
branch = 'main',
generate_requires_npm = false,
requires_generate_from_grammar = false,
},
filetype = 'ziggy-schema',
}
parser_config.supermd = {
install_info = {
url = 'https://github.com/kristoff-it/supermd',
includes = { 'tree-sitter/supermd/src' },
files = {
'tree-sitter/supermd/src/parser.c',
'tree-sitter/supermd/src/scanner.c'
},
branch = 'main',
generate_requires_npm = false,
requires_generate_from_grammar = false,
},
filetype = 'supermd',
}
parser_config.supermd_inline = {
install_info = {
url = 'https://github.com/kristoff-it/supermd',
includes = { 'tree-sitter/supermd-inline/src' },
files = {
'tree-sitter/supermd-inline/src/parser.c',
'tree-sitter/supermd-inline/src/scanner.c'
},
branch = 'main',
generate_requires_npm = false,
requires_generate_from_grammar = false,
},
filetype = 'supermd_inline',
}
parser_config.superhtml = {
install_info = {
url = 'https://github.com/kristoff-it/superhtml',
includes = { 'tree-sitter-superhtml/src' },
files = {
'tree-sitter-superhtml/src/parser.c',
'tree-sitter-superhtml/src/scanner.c'
},
branch = 'main',
generate_requires_npm = false,
requires_generate_from_grammar = false,
},
filetype = 'superhtml',
}
vim.filetype.add {
extension = {
smd = 'supermd',
shtml = 'superhtml',
ziggy = 'ziggy',
['ziggy-schema'] = 'ziggy_schema',
},
}
4. Get all CLI tools
Get all CLI tools from the releases of each repository (or build them yourself), make sure to make them available in PATH
, and at that point you should be fully setup!