diff --git a/tests/default.nix b/tests/default.nix index 49c272397..df69dc22a 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -29,6 +29,7 @@ import nmt { ./modules/programs/alacritty ./modules/programs/bash ./modules/programs/browserpass + ./modules/programs/fish ./modules/programs/git ./modules/programs/gpg ./modules/programs/mbsync diff --git a/tests/modules/programs/fish/default.nix b/tests/modules/programs/fish/default.nix new file mode 100644 index 000000000..99fe81367 --- /dev/null +++ b/tests/modules/programs/fish/default.nix @@ -0,0 +1,5 @@ +{ + fish-functions = ./functions.nix; + fish-no-functions = ./no-functions.nix; + fish-plugins = ./plugins.nix; +} diff --git a/tests/modules/programs/fish/functions.nix b/tests/modules/programs/fish/functions.nix new file mode 100644 index 000000000..b939a2086 --- /dev/null +++ b/tests/modules/programs/fish/functions.nix @@ -0,0 +1,32 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + func = pkgs.writeText "func.fish" '' + function func + echo "Hello" + end + ''; + +in { + config = { + programs.fish = { + enable = true; + + functions = { func = ''echo "Hello"''; }; + }; + + nmt = { + description = + "if fish.function is set, check file exists and contents match"; + script = '' + assertFileExists home-files/.config/fish/functions/func.fish + echo ${func} + assertFileContent home-files/.config/fish/functions/func.fish ${func} + ''; + + }; + }; +} diff --git a/tests/modules/programs/fish/no-functions.nix b/tests/modules/programs/fish/no-functions.nix new file mode 100644 index 000000000..c817b3889 --- /dev/null +++ b/tests/modules/programs/fish/no-functions.nix @@ -0,0 +1,22 @@ +{ config, lib, ... }: + +with lib; + +{ + config = { + programs.fish = { + enable = true; + + functions = { }; + }; + + nmt = { + description = + "if fish.functions is blank, the functions folder should not exist."; + script = '' + assertPathNotExists home-files/.config/fish/functions + ''; + + }; + }; +} diff --git a/tests/modules/programs/fish/plugins.nix b/tests/modules/programs/fish/plugins.nix new file mode 100644 index 000000000..cd675f8b0 --- /dev/null +++ b/tests/modules/programs/fish/plugins.nix @@ -0,0 +1,58 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + fooPluginSrc = pkgs.writeText "fooPluginSrc" ""; + + generatedConfdFile = pkgs.writeText "plugin-foo.fish" '' + # Plugin foo + set -l plugin_dir ${fooPluginSrc} + + # Set paths to import plugin components + if test -d $plugin_dir"/functions" + set fish_function_path $fish_function_path[1] $plugin_dir"/functions" $fish_function_path[2..-1] + end + + if test -d $plugin_dir"/completions" + set fish_complete_path $fish_function_path[1] $plugin_dir"/completions" $fish_complete_path[2..-1] + end + + # Source initialization code if it exists. + if test -d $plugin_dir"/conf.d" + source $plugin_dir"/conf.d/*.fish" + end + + if test -f $plugin_dir"/key_bindings.fish" + source $plugin_dir"/key_bindings.fish" + end + + if test -f $plugin_dir"/init.fish" + source $plugin_dir"/init.fish" + end + ''; + +in { + config = { + programs.fish = { + enable = true; + + plugins = [{ + name = "foo"; + src = fooPluginSrc; + }]; + }; + + nmt = { + description = + "if fish.plugins set, check conf.d file exists and contents match"; + script = '' + assertDirectoryExists home-files/.config/fish/conf.d + assertFileExists home-files/.config/fish/conf.d/plugin-foo.fish + assertFileContent home-files/.config/fish/conf.d/plugin-foo.fish ${generatedConfdFile} + ''; + + }; + }; +}