aboutsummaryrefslogtreecommitdiff
path: root/home-manager/modules/programs/zplug.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/modules/programs/zplug.nix')
-rw-r--r--home-manager/modules/programs/zplug.nix60
1 files changed, 60 insertions, 0 deletions
diff --git a/home-manager/modules/programs/zplug.nix b/home-manager/modules/programs/zplug.nix
new file mode 100644
index 00000000000..6cb5e98e313
--- /dev/null
+++ b/home-manager/modules/programs/zplug.nix
@@ -0,0 +1,60 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.programs.zsh.zplug;
+
+ pluginModule = types.submodule ({ config, ... }: {
+ options = {
+ name = mkOption {
+ type = types.str;
+ description = "The name of the plugin.";
+ };
+
+ tags = mkOption {
+ type = types.listOf types.str;
+ default = [ ];
+ description = "The plugin tags.";
+ };
+ };
+
+ });
+
+in {
+ options.programs.zsh.zplug = {
+ enable = mkEnableOption "zplug - a zsh plugin manager";
+
+ plugins = mkOption {
+ default = [ ];
+ type = types.listOf pluginModule;
+ description = "List of zplug plugins.";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ home.packages = [ pkgs.zplug ];
+
+ programs.zsh.initExtraBeforeCompInit = ''
+ source ${pkgs.zplug}/init.zsh
+
+ ${optionalString (cfg.plugins != [ ]) ''
+ ${concatStrings (map (plugin: ''
+ zplug "${plugin.name}"${
+ optionalString (plugin.tags != [ ]) ''
+ ${concatStrings (map (tag: ", ${tag}") plugin.tags)}
+ ''
+ }
+ '') cfg.plugins)}
+ ''}
+
+ if ! zplug check; then
+ zplug install
+ fi
+
+ zplug load
+ '';
+
+ };
+}