aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorRobin Stumm <serverkorken@gmail.com>2017-09-07 23:57:13 +0200
committerNikita Uvarov <uv.nikita@gmail.com>2017-09-12 14:52:04 +0200
commit29d5f5d7601b0a3ae84ca7a214c9cd90137f4e16 (patch)
treeb409862a236576a3aa3c3d935049e40bfc7dbb3b /modules
parent258bc85b9ce191bb32d551b1a5391ddb6dad7ba3 (diff)
zsh: fix double compinit slowdown with oh-my-zsh
Integrate oh-my-zsh into zsh module to be able to control invocation order.
Diffstat (limited to 'modules')
-rw-r--r--modules/default.nix1
-rw-r--r--modules/programs/oh-my-zsh.nix66
-rw-r--r--modules/programs/zsh.nix68
3 files changed, 66 insertions, 69 deletions
diff --git a/modules/default.nix b/modules/default.nix
index c5fc9bcbc38..67e855a36b9 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -29,7 +29,6 @@ let
./programs/htop.nix
./programs/info.nix
./programs/lesspipe.nix
- ./programs/oh-my-zsh.nix
./programs/ssh.nix
./programs/termite.nix
./programs/texlive.nix
diff --git a/modules/programs/oh-my-zsh.nix b/modules/programs/oh-my-zsh.nix
deleted file mode 100644
index fc2692a3246..00000000000
--- a/modules/programs/oh-my-zsh.nix
+++ /dev/null
@@ -1,66 +0,0 @@
-{ config, lib, pkgs, ... }:
-
-with lib;
-
-let
-
- cfg = config.programs.zsh.oh-my-zsh;
-
-in
-
-{
- options = {
- programs.zsh.oh-my-zsh = {
- enable = mkEnableOption "oh-my-zsh";
-
- plugins = mkOption {
- default = [];
- example = [ "git" "sudo" ];
- type = types.listOf types.str;
- description = ''
- List of oh-my-zsh plugins
- '';
- };
-
- custom = mkOption {
- default = "";
- type = types.str;
- example = "$HOME/my_customizations";
- description = ''
- Path to a custom oh-my-zsh package to override config of oh-my-zsh.
- See: https://github.com/robbyrussell/oh-my-zsh/wiki/Customization
- '';
- };
-
- theme = mkOption {
- default = "";
- example = "robbyrussell";
- type = types.str;
- description = ''
- Name of the theme to be used by oh-my-zsh.
- '';
- };
- };
- };
-
- config = mkIf cfg.enable {
- home.packages = [ pkgs.oh-my-zsh ];
-
- programs.zsh.initExtra = with pkgs; ''
- # oh-my-zsh configuration generated by NixOS
- export ZSH=${oh-my-zsh}/share/oh-my-zsh
- export ZSH_CACHE_DIR=''${XDG_CACHE_HOME:-$HOME/.cache}/oh-my-zsh
-
- ${optionalString (cfg.plugins != [])
- "plugins=(${concatStringsSep " " cfg.plugins})"
- }
- ${optionalString (cfg.custom != "")
- "ZSH_CUSTOM=\"${cfg.custom}\""
- }
- ${optionalString (cfg.theme != "")
- "ZSH_THEME=\"${cfg.theme}\""
- }
- source $ZSH/oh-my-zsh.sh
- '';
- };
-}
diff --git a/modules/programs/zsh.nix b/modules/programs/zsh.nix
index 26de2b44972..ab9d226b4a4 100644
--- a/modules/programs/zsh.nix
+++ b/modules/programs/zsh.nix
@@ -67,6 +67,40 @@ let
config.file = mkDefault "${config.name}.plugin.zsh";
});
+ ohMyZshModule = types.submodule {
+ options = {
+ enable = mkEnableOption "oh-my-zsh";
+
+ plugins = mkOption {
+ default = [];
+ example = [ "git" "sudo" ];
+ type = types.listOf types.str;
+ description = ''
+ List of oh-my-zsh plugins
+ '';
+ };
+
+ custom = mkOption {
+ default = "";
+ type = types.str;
+ example = "$HOME/my_customizations";
+ description = ''
+ Path to a custom oh-my-zsh package to override config of oh-my-zsh.
+ See: https://github.com/robbyrussell/oh-my-zsh/wiki/Customization
+ '';
+ };
+
+ theme = mkOption {
+ default = "";
+ example = "robbyrussell";
+ type = types.str;
+ description = ''
+ Name of the theme to be used by oh-my-zsh.
+ '';
+ };
+ };
+ };
+
in
{
@@ -136,6 +170,12 @@ in
'';
description = "Plugins to source in <filename>.zshrc</filename>.";
};
+
+ oh-my-zsh = mkOption {
+ type = ohMyZshModule;
+ default = {};
+ description = "Options to configure oh-my-zsh.";
+ };
};
};
@@ -151,8 +191,9 @@ in
mapAttrsToList export config.home.sessionVariables
);
in mkIf cfg.enable {
- home.packages = [ pkgs.zsh ]
- ++ optional cfg.enableCompletion pkgs.nix-zsh-completions;
+ home.packages = with pkgs; [ zsh ]
+ ++ optional cfg.enableCompletion nix-zsh-completions
+ ++ optional cfg.oh-my-zsh.enable oh-my-zsh;
home.file.".zshenv".text = ''
${optionalString (config.home.sessionVariableSetter == "zsh")
@@ -179,6 +220,23 @@ in
"source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh"
}
+ ${optionalString cfg.oh-my-zsh.enable ''
+ # oh-my-zsh configuration generated by NixOS
+ export ZSH=${pkgs.oh-my-zsh}/share/oh-my-zsh
+ export ZSH_CACHE_DIR=''${XDG_CACHE_HOME:-$HOME/.cache}/oh-my-zsh
+
+ ${optionalString (cfg.oh-my-zsh.plugins != [])
+ "plugins=(${concatStringsSep " " cfg.oh-my-zsh.plugins})"
+ }
+ ${optionalString (cfg.oh-my-zsh.custom != "")
+ "ZSH_CUSTOM=\"${cfg.oh-my-zsh.custom}\""
+ }
+ ${optionalString (cfg.oh-my-zsh.theme != "")
+ "ZSH_THEME=\"${cfg.oh-my-zsh.theme}\""
+ }
+ source $ZSH/oh-my-zsh.sh
+ ''}
+
${concatStrings (map (plugin: ''
source "$HOME/.zsh/plugins/${plugin.name}/${plugin.file}"
'') cfg.plugins)}
@@ -188,6 +246,12 @@ in
${cfg.initExtra}
'';
})
+ (mkIf cfg.oh-my-zsh.enable {
+ # Oh-My-Zsh calls compinit during initialization,
+ # calling it twice causes sight start up slowdown
+ # as all $fpath entries will be traversed again.
+ programs.zsh.enableCompletion = mkForce false;
+ })
(mkIf (cfg.plugins != []) {
# Many plugins require compinit to be called
# but allow the user to opt out.