Skip to content

A no-nonsense template for making high-quality Neovim plugins. It has all the best opinions, pinky promise

License

Notifications You must be signed in to change notification settings

ColinKennedy/nvim-best-practices-plugin-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚧 Under Construction 🚧

This repository doesn't have all GitHub CI actions working yet but is available as an early preview. We will update docs/news.txt once it's ready.

Add https://github.com/ColinKennedy/nvim-best-practices-plugin-template/commits/main/doc/news.txt.atom to your RSS feed so you don't miss it!

A Neovim Plugin Template

GitHub Workflow Status Lua

A template repository for Neovim plugins.

Features

  • Follows nvim-best-practices
  • Fast start-up (the plugin is defer-loaded)
  • Auto-release to luarocks
  • Automated documentation + Vimtags generation
  • Built-in Vim commands
  • A high quality command mode parser
  • A (experimental) auto-completion API
  • No external dependencies
  • LuaCATS annotations and type-hints, everywhere
  • RSS feed support
  • Built-in logging to stdout / files
  • Unittests use the full power of native busted
  • 100% Lua
  • Uses Semantic Versioning
  • Integrations
  • Github actions for:
    • StyLua - Auto-formats Lua code
    • llscheck - Checks for Lua type mismatches
    • luacheck - Checks for Lua code issues
    • luarocks auto-release (LUAROCKS_API_KEY secret configuration required)
    • panvimdoc - Documentation auto-generator
    • PR reviews - Reminds users to update doc/news.txt

Using This Template

  1. Follow the Wiki instructions
  2. Once you're done, remove this section (the rest of this README.md file should be kept)

Installation

{
    "ColinKennedy/nvim-best-practices-plugin-template",
    -- TODO: (you) - Make sure your first release matches v1.0.0 so it auto-releases!
    version = "v1.*",
}

Configuration

(These are default values)

{
    "ColinKennedy/nvim-best-practices-plugin-template",
    config = function()
        vim.g.plugin_template_configuration = {
            commands = {
                goodnight_moon = { read = { phrase = "A good book" } },
                hello_world = {
                    say = { ["repeat"] = 1, style = "lowercase" },
                },
            },
            logging = {
                level = "info",
                use_console = false,
                use_file = false,
            },
            tools = {
                lualine = {
                    arbitrary_thing = {
                        color = "Visual",
                        text = "ï…„ Arbitrary Thing",
                    },
                    copy_logs = {
                        color = "Comment",
                        text = "󰈔 Copy Logs",
                    },
                    goodnight_moon = {
                        color = "Question",
                        text = "ï“® Goodnight moon",
                    },
                    hello_world = {
                        color = "Title",
                        text = " Hello, World!",
                    },
                },
                telescope = {
                    goodnight_moon = {
                        { "Foo Book", "Author A" },
                        { "Bar Book Title", "John Doe" },
                        { "Fizz Drink", "Some Name" },
                        { "Buzz Bee", "Cool Person" },
                    },
                    hello_world = { "Hi there!", "Hello, Sailor!", "What's up, doc?" },
                },
            },
        }
    end
}

Lualine

Note: You can customize lualine colors here or using vim.g.plugin_template_configuration.

lualine.nvim

require("lualine").setup {
    sections = {
        lualine_y = {
            -- ... Your other configuration ...
            {
                "plugin_template",
                -- NOTE: These will override default values
                -- display = {
                --     goodnight_moon = {color={fg="#FFFFFF"}, text="Custom message 1"}},
                --     hello_world = {color={fg="#333333"}, text="Custom message 2"},
                -- },
            },
        }
    }
}

Telescope

Note: You can customize telescope colors here or using vim.g.plugin_template_configuration.

telescope.nvim

{
    "nvim-telescope/telescope.nvim",
    cmd = "Telescope",
    config = function()
        -- ... Your other configuration ...
        require("telescope").load_extension("plugin_template")
    end,
    dependencies = {
        "ColinKennedy/nvim-best-practices-plugin-template",
        "nvim-lua/plenary.nvim",
    },
    version = "0.1.*",
},

Colors

This plugin provides two default highlights

  • PluginTemplateTelescopeEntry
  • PluginTemplateTelescopeSecondary

Both come with default colors that should look nice. If you want to change them, here's how:

vim.api.nvim_set_hl(0, "PluginTemplateTelescopeEntry", {link="Statement"})
vim.api.nvim_set_hl(0, "PluginTemplateTelescopeSecondary", {link="Question"})

Commands

Here are some example commands:

" A typical subcommand
:PluginTemplate hello-world say phrase "Hello, World!" " How are you?"
:PluginTemplate hello-world say phrase "Hello, World!" --repeat=2 --style=lowercase

" An example of a flag this repeatable and 3 flags, -a, -b, -c, as one dash
:PluginTemplate hello-world arbitrary-thing -vvv -abc -f

" Separate commands with completely separate, flexible APIs
:PluginTemplate goodnight-moon count-sheep 42
:PluginTemplate goodnight-moon read "a book"
:PluginTemplate goodnight-moon sleep -zzz

Tests

Initialization

Run this line once before calling any busted command

eval $(luarocks path --lua-version 5.1 --bin)

Running

Run all tests

busted .

Run test based on tags

busted . --tags=simple

Tracking Updates

See doc/news.txt for updates.

You can add changes to this plugin by adding this URL to your RSS feed:

https://github.com/ColinKennedy/nvim-best-practices-plugin-template/commits/main/doc/news.txt.atom

Other Plugins

This template is full of various features. But if your plugin is only meant to be a simple plugin and you don't want the bells and whistles that this template provides, consider instead using nvim-plugin-template

About

A no-nonsense template for making high-quality Neovim plugins. It has all the best opinions, pinky promise

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published