mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 16:39:00 +02:00
This commit adds support for byte compiling lua configuration files. It's enabled by default (if byte compiling is enabled at all) and can be disabled with `performance.byteCompileLua.configs` toggle. To implement this feature `extraFiles.<name>.finalSource` internal read-only option is introduced. `source` option cannot be used because it's user configurable. In order to access the values of the `performance.byteCompileLua` options, parent config is added to specialArgs of extraFiles submodule. Then the usages of `source` option changed to `finalSource` in all relevant places (filesPlugin and wrappers). Added more helpers for various cases of byte compiling: * `byteCompileLuaFile` byte compiles lua file * `byteCompileLuaHook` is a setup hook that byte compiles all lua files * `byteCompileLuaDrv` overrides derivation by adding byteCompileLuaHook to it Added tests to validate that extraFiles specified by various methods are handled correctly. Added a separate home-manager test, that is intended to validate that extraFiles propagated to wrapper modules are correctly byte compiled.
104 lines
2.8 KiB
Nix
104 lines
2.8 KiB
Nix
{
|
|
nixvim,
|
|
pkgs,
|
|
home-manager,
|
|
}:
|
|
let
|
|
config = {
|
|
home = {
|
|
username = "nixvim";
|
|
homeDirectory = "/invalid/dir";
|
|
stateVersion = "24.05";
|
|
};
|
|
|
|
programs.nixvim = {
|
|
enable = true;
|
|
|
|
performance.byteCompileLua.enable = true;
|
|
|
|
extraFiles = {
|
|
"extra-files/test1.lua".text = "vim.opt.tabstop = 2";
|
|
"extra-files/test2.lua".source = builtins.toFile "file_source.lua" "vim.opt.tabstop = 2";
|
|
"extra-files/test3.lua".source = pkgs.writeText "test3.lua" "vim.opt.tabstop = 2";
|
|
"extra-files/test.vim".text = "set tabstop=2";
|
|
"extra-files/test.json".text = builtins.toJSON { a = 1; };
|
|
};
|
|
|
|
files = {
|
|
"files/test.lua".opts.tabstop = 2;
|
|
"files/test.vim".opts.tabstop = 2;
|
|
};
|
|
};
|
|
};
|
|
|
|
homeFilesByteCompilingEnabled =
|
|
(home-manager.lib.homeManagerConfiguration {
|
|
inherit pkgs;
|
|
|
|
modules = [
|
|
nixvim.homeManagerModules.nixvim
|
|
config
|
|
{ programs.nixvim.performance.byteCompileLua.configs = true; }
|
|
];
|
|
}).config.home-files;
|
|
|
|
homeFilesByteCompilingDisabled =
|
|
(home-manager.lib.homeManagerConfiguration {
|
|
inherit pkgs;
|
|
|
|
modules = [
|
|
nixvim.homeManagerModules.nixvim
|
|
config
|
|
{ programs.nixvim.performance.byteCompileLua.configs = false; }
|
|
];
|
|
}).config.home-files;
|
|
in
|
|
pkgs.runCommand "home-manager-extra-files-byte-compiling" { } ''
|
|
is_binary() {
|
|
! grep -qI . "$1"
|
|
}
|
|
test_byte_compiled() {
|
|
if ! is_binary "$home_files/.config/nvim/$1"; then
|
|
echo "File $1 is expected to be byte compiled, but it's not"
|
|
exit 1
|
|
fi
|
|
}
|
|
test_not_byte_compiled() {
|
|
if is_binary "$home_files/.config/nvim/$1"; then
|
|
echo "File $1 is not expected to be byte compiled, but it is"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Test directory with extraFiles byte compiling enabled
|
|
home_files="${homeFilesByteCompilingEnabled}"
|
|
|
|
echo "Testing home-files with extraFiles byte compiling enabled"
|
|
|
|
# extraFiles
|
|
test_byte_compiled extra-files/test1.lua
|
|
test_byte_compiled extra-files/test2.lua
|
|
test_byte_compiled extra-files/test3.lua
|
|
test_not_byte_compiled extra-files/test.vim
|
|
test_not_byte_compiled extra-files/test.json
|
|
# files
|
|
test_byte_compiled files/test.lua
|
|
test_not_byte_compiled files/test.vim
|
|
|
|
# Test directory with extraFiles byte compiling disabled
|
|
home_files="${homeFilesByteCompilingDisabled}"
|
|
|
|
echo "Testing home-files with extraFiles byte compiling disabled"
|
|
|
|
# extraFiles
|
|
test_not_byte_compiled extra-files/test1.lua
|
|
test_not_byte_compiled extra-files/test2.lua
|
|
test_not_byte_compiled extra-files/test3.lua
|
|
test_not_byte_compiled extra-files/test.vim
|
|
test_not_byte_compiled extra-files/test.json
|
|
# files
|
|
test_not_byte_compiled files/test.lua
|
|
test_not_byte_compiled files/test.vim
|
|
|
|
touch $out
|
|
''
|