diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 857fc54d..e27f30a5 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1125,6 +1125,14 @@ in can control it by using the `qt5ct` and `qt6ct` applications; - `qt.style.name = "kvantum"`: override the style by using themes written in SVG. Supports many popular themes. + ''; + } + + { + time = "2023-06-17T22:18:22+00:00"; + condition = config.programs.zsh.enable; + message = '' + A new modules is available: 'programs.zsh.antidote' ''; } ]; diff --git a/modules/modules.nix b/modules/modules.nix index bb80c618..bf8f9d62 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -51,6 +51,7 @@ let ./programs/afew.nix ./programs/alacritty.nix ./programs/alot.nix + ./programs/antidote.nix ./programs/aria2.nix ./programs/astroid.nix ./programs/atuin.nix diff --git a/modules/programs/antidote.nix b/modules/programs/antidote.nix new file mode 100644 index 00000000..0120f4e8 --- /dev/null +++ b/modules/programs/antidote.nix @@ -0,0 +1,53 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + cfg = config.programs.zsh.antidote; + + relToDotDir = file: + (optionalString (config.programs.zsh.dotDir != null) + (config.programs.zsh.dotDir + "/")) + file; + + zPluginStr = with lib; + (pluginNames: + optionalString (pluginNames != [ ]) "${concatStrings (map (name: '' + ${name} + '') pluginNames)}"); +in { + meta.maintainers = [ maintainers.hitsmaxft ]; + + options.programs.zsh.antidote = { + enable = mkEnableOption "antidote - a zsh plugin manager"; + + plugins = mkOption { + type = types.listOf types.str; + default = [ ]; + example = [ "zsh-users/zsh-autosuggestions" ]; + description = "List of antidote plugins."; + }; + + useFriendlyNames = mkEnableOption "friendly names"; + + package = mkPackageOption pkgs "antidote" { }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + home.file."${relToDotDir ".zsh_plugins.txt"}".text = zPluginStr cfg.plugins; + + ### move zsh_plugins.txt + programs.zsh.initExtraBeforeCompInit = '' + ## home-manager/antidote begin : + source ${cfg.package}/antidote.zsh + ${optionalString cfg.useFriendlyNames + "zstyle ':antidote:bundle' use-friendly-names 'yes'"} + bundlefile=${relToDotDir ".zsh_plugins.txt"} + zstyle ':antidote:bundle' file $bundlefile + staticfile=${relToDotDir ".zsh_plugins.zsh"} + zstyle ':antidote:static' file $staticfile + antidote load $bundlefile $staticfile + ## home-manager/antidote end + ''; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 0f2443ec..c04de313 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -57,6 +57,7 @@ import nmt { ./modules/programs/aerc ./modules/programs/alacritty ./modules/programs/alot + ./modules/programs/antidote ./modules/programs/aria2 ./modules/programs/atuin ./modules/programs/autojump diff --git a/tests/modules/programs/antidote/antidote.nix b/tests/modules/programs/antidote/antidote.nix new file mode 100644 index 00000000..826ffe5a --- /dev/null +++ b/tests/modules/programs/antidote/antidote.nix @@ -0,0 +1,31 @@ +{ ... }: + +let relToDotDirCustom = ".zshplugins"; + +in { + programs.zsh = { + enable = true; + dotDir = relToDotDirCustom; + antidote = { + enable = true; + useFriendlyNames = true; + plugins = [ "zsh-users/zsh-autosuggestions" ]; + }; + }; + + test.stubs = { + antidote = { }; + zsh = { }; + }; + + nmt.script = '' + assertFileContains home-files/${relToDotDirCustom}/.zshrc \ + 'source @antidote@/antidote.zsh' + assertFileContains home-files/${relToDotDirCustom}/.zshrc \ + 'antidote load' + assertFileContains home-files/${relToDotDirCustom}/.zshrc \ + "zstyle ':antidote:bundle' use-friendly-names 'yes'" + assertFileContains home-files/${relToDotDirCustom}/.zsh_plugins.txt \ + 'zsh-users/zsh-autosuggestions' + ''; +} diff --git a/tests/modules/programs/antidote/default.nix b/tests/modules/programs/antidote/default.nix new file mode 100644 index 00000000..24f19dd9 --- /dev/null +++ b/tests/modules/programs/antidote/default.nix @@ -0,0 +1 @@ +{ antidote-program = ./antidote.nix; }