diff --git a/modules/programs/fish.nix b/modules/programs/fish.nix index 006fb53d1..856fb7c3a 100644 --- a/modules/programs/fish.nix +++ b/modules/programs/fish.nix @@ -765,6 +765,30 @@ in }) cfg.plugins ); }) + ( + let + themes = lib.foldl ( + themeList: plugin: + if lib.pathIsDirectory "${plugin.src}/themes" then + themeList ++ lib.filesystem.listFilesRecursive "${plugin.src}/themes" + else + themeList + ) [ ] cfg.plugins; + in + (mkIf (lib.length themes > 0) { + xdg.configFile = lib.mkMerge ( + map ( + theme: + let + basename = lib.last (builtins.split "/" (toString theme)); + in + { + "fish/themes/${basename}".source = theme; + } + ) themes + ); + }) + ) ] ); } diff --git a/tests/modules/programs/fish/default.nix b/tests/modules/programs/fish/default.nix index ff1bc7582..c1d9e70ab 100644 --- a/tests/modules/programs/fish/default.nix +++ b/tests/modules/programs/fish/default.nix @@ -6,4 +6,5 @@ fish-plugins = ./plugins.nix; fish-manpage = ./manpage.nix; fish-binds = ./binds.nix; + fish-themes = ./themes.nix; } diff --git a/tests/modules/programs/fish/themes.nix b/tests/modules/programs/fish/themes.nix new file mode 100644 index 000000000..549054c40 --- /dev/null +++ b/tests/modules/programs/fish/themes.nix @@ -0,0 +1,38 @@ +{ lib, pkgs, ... }: +let + dummy-theme-plugin = pkgs.runCommandLocal "theme" { } '' + mkdir -p "$out"/themes + echo "fish_color_normal 575279" > "$out/themes/dummy-theme-plugin.theme" + ''; + + copied-theme = pkgs.writeText "theme.theme" '' + fish_color_normal 575279 + ''; +in +{ + config = { + programs.fish = { + enable = true; + plugins = [ + { + name = "foo"; + src = dummy-theme-plugin; + } + ]; + }; + + # Needed to avoid error with dummy fish package. + xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce ( + builtins.toFile "empty" "" + ); + + nmt = { + description = "if fish plugin contains themes directory copy the themes"; + script = '' + assertDirectoryExists home-files/.config/fish/themes + assertFileExists home-files/.config/fish/themes/dummy-theme-plugin.theme + assertFileContent home-files/.config/fish/themes/dummy-theme-plugin.theme ${copied-theme} + ''; + }; + }; +}