mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
filetype: Add a module to wrap vim.filetype.add (#277)
This commit is contained in:
parent
58b6c74e2f
commit
cbae935d89
2 changed files with 81 additions and 0 deletions
40
modules/filetype.nix
Normal file
40
modules/filetype.nix
Normal 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})
|
||||||
|
'';
|
||||||
|
}
|
41
tests/test-sources/modules/filetypes.nix
Normal file
41
tests/test-sources/modules/filetypes.nix
Normal 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
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue