filetype: Add a module to wrap vim.filetype.add (#277)

This commit is contained in:
traxys 2023-03-24 11:14:12 +01:00 committed by GitHub
parent 58b6c74e2f
commit cbae935d89
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 81 additions and 0 deletions

40
modules/filetype.nix Normal file
View file

@ -0,0 +1,40 @@
{
config,
lib,
...
} @ args:
with lib; let
helpers = import ../lib/helpers.nix args;
filetypeDefinition = helpers.mkNullOrOption (types.attrsOf (
types.oneOf [
# Raw filetype
types.str
# Function to set the filetype
helpers.rawType
# ["filetype" {priority = xx;}]
(types.listOf (types.either types.str (types.submodule {
options = {
priority = mkOption {
type = types.int;
};
};
})))
]
));
in {
options.filetype =
helpers.mkCompositeOption ''
Define additional filetypes. The values can either be a literal filetype or a function
taking the filepath and the buffer number.
For more information check `:h vim.filetype.add()`
'' {
extension = filetypeDefinition "set filetypes matching the file extension";
filename = filetypeDefinition "set filetypes matching the file name (or path)";
pattern = filetypeDefinition "set filetypes matching the specified pattern";
};
config.extraConfigLua = helpers.mkIfNonNull' config.filetype ''
vim.filetype.add(${helpers.toLuaObject config.filetype})
'';
}

View file

@ -0,0 +1,41 @@
{
example = {
filetype = {
extension = {
foo = "fooscript";
bar.__raw = ''
function(path, bufnr)
if some_condition() then
return 'barscript', function(bufnr)
-- Set a buffer variable
vim.b[bufnr].barscript_version = 2
end
end
return 'bar'
end
'';
};
filename = {
".foorc" = "toml";
"/etc/foo/config" = "toml";
};
pattern = {
".*/etc/foo.*" = "fooscript";
".*/etc/foo.*%.conf" = [
"dosini"
{priority = 10;}
];
"\${XDG_CONFIG_HOME}/foo/git" = "git";
"README.(a+)$".__raw = ''
function(path, bufnr, ext)
if ext == 'md' then
return 'markdown'
elseif ext == 'rst' then
return 'rst'
end
end
'';
};
};
};
}