Fast, minimal Neovim plugin to automatically add or update copyright and license headers in any programming language.
LICENCE
file from git repository, see herewith packer.nvim
use({ "attilarepka/header.nvim", config = function() require("header").setup() end})
with lazy.nvim
{"attilarepka/header.nvim", config = true}
The script comes with the following defaults:
{
file_name = true,
author = nil,
project = nil,
date_created = true,
date_created_fmt = "%Y-%m-%d %H:%M:%S",
date_modified = true,
date_modified_fmt = "%Y-%m-%d %H:%M:%S",
line_separator = "------",
copyright_text = nil,
license_from_file = false,
}
To override the custom configuration, call:
require("header").setup({
-- your override config
})
Example:
require("header").setup({
file_name = true,
author = "Foo",
project = "header.nvim",
date_created = true,
date_created_fmt = "%Y-%m-%d %H:%M:%S",
date_modified = true,
date_modified_fmt = "%Y-%m-%d %H:%M:%S",
line_separator = "------",
copyright_text = "Copyright 2023",
license_from_file = false,
})
To automatically include a license header from a LICENSE
-style file from your Git repository, set license_from_file
to true
:
require("header").setup({
...
license_from_file = true
})
When enabled, the plugin will scan your project root for license-related files. If multiple candidates are found, you will be prompted to select one. The selected file will be cached for the duration of your current Neovim session to avoid repeated prompts.
Supported File Patterns
The following file names are recognized:
LICENSE
, LICENSE.md
, LICENSE-*
LICENCE
, LICENCE.md
, LICENCE-*
(British spelling)COPYING
, COPYING.md
UNLICENSE
, UNLICENSE.md
NOTICE
, NOTICE.md
LEGAL
, LEGAL.md
⚠️ Matching is case-sensitive by default and limited to the top-level directory.
Notes:
The default configuration can be overwritten by a local project .header.nvim
file with the following format:
{
"file_name": true,
"author": "Your Name",
"project": "Your Project",
"date_created": true,
"date_created_fmt": "%Y-%m-%d %H:%M:%S",
"date_modified": true,
"date_modified_fmt": "%Y-%m-%d %H:%M:%S",
"line_separator": "------",
"copyright_text": "Copyright (c) 2023 Your Name"
}
To setup custom keybindings:
local header = require("header")
vim.keymap.set("n", "<leader>hh", function() header.add_headers() end)
-- see supported licenses below, method handles case-insensitively
vim.keymap.set("n", "<leader>hm", function() header.add_license_header("mit") end)
:AddHeader
Adds brief copyright information:AddLicenseAGPL3
Adds AGPL3 License:AddLicenseAPACHE
Adds Apache License:AddLicenseBSD2
Adds BSD2 License:AddLicenseBSD3
Adds BSD3 License:AddLicenseCC0
Adds CC0 License:AddLicenseGPL3
Adds GPL3 License:AddLicenseISC
Adds ISC License:AddLicenseMIT
Adds MIT License:AddLicenseMPL
Adds MPL License:AddLicenseUNLICENSE
Adds Unlicense License:AddLicenseWTFPL
Adds WTFPL License:AddLicenseX11
Adds X11 License:AddLicenseZLIB
Adds ZLIB Licenselocal augroup = vim.api.nvim_create_augroup
local autocmd = vim.api.nvim_create_autocmd
augroup("mygroup", { clear = true })
autocmd("BufWritePre", {
pattern = "*",
callback = function()
local header = require("header")
if header and header.update_date_modified then
header.update_date_modified()
else
vim.notify_once("header.update_date_modified is not available", vim.log.levels.WARN)
end
end,
group = "mygroup",
desc = "Update header's date modified",
})
Contributions are welcome! Open a GitHub Issue or Pull request.
This project is licensed under the MIT license