| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  | # This module defines global configuration for the zshell. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   cfge = config.environment; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   cfg = config.programs.zsh; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   zshAliases = concatStringsSep "\n" ( | 
					
						
							|  |  |  |     mapAttrsFlatten (k: v: "alias ${k}='${v}'") cfg.shellAliases | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     programs.zsh = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       enable = mkOption { | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2016-09-04 16:30:07 +02:00
										 |  |  |           Whether to configure zsh as an interactive shell. To enable zsh for | 
					
						
							|  |  |  |           a particular user, use the <option>users.users.<name?>.shell</option> | 
					
						
							|  |  |  |           option for that user. To enable zsh system-wide use the | 
					
						
							|  |  |  |           <option>users.defaultUserShell</option> option. | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       shellAliases = mkOption { | 
					
						
							|  |  |  |         default = config.environment.shellAliases; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Set of aliases for zsh shell. See <option>environment.shellAliases</option> | 
					
						
							|  |  |  |           for an option format description. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         type = types.attrs; # types.attrsOf types.stringOrPath; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       shellInit = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Shell script code called during zsh shell initialisation. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         type = types.lines; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       loginShellInit = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Shell script code called during zsh login shell initialisation. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         type = types.lines; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       interactiveShellInit = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Shell script code called during interactive zsh shell initialisation. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         type = types.lines; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       promptInit = mkOption { | 
					
						
							|  |  |  |         default = ''
 | 
					
						
							|  |  |  |           autoload -U promptinit && promptinit && prompt walters | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Shell script code used to initialise the zsh prompt. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         type = types.lines; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-24 18:04:17 -05:00
										 |  |  |       enableCompletion = mkOption { | 
					
						
							|  |  |  |         default = true; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Enable zsh completion for all interactive zsh shells. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-11 07:00:48 +01:00
										 |  |  |       enableAutosuggestions = mkOption { | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Enable zsh-autosuggestions | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2016-10-03 01:07:23 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     environment.etc."zshenv".text = | 
					
						
							|  |  |  |       ''
 | 
					
						
							|  |  |  |         # /etc/zshenv: DO NOT EDIT -- this file has been generated automatically. | 
					
						
							|  |  |  |         # This file is read for all shells. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Only execute this file once per shell. | 
					
						
							| 
									
										
										
										
											2014-01-31 16:53:28 -06:00
										 |  |  |         # But don't clobber the environment of interactive non-login children! | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  |         if [ -n "$__ETC_ZSHENV_SOURCED" ]; then return; fi | 
					
						
							| 
									
										
										
										
											2014-01-31 16:53:28 -06:00
										 |  |  |         export __ETC_ZSHENV_SOURCED=1 | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 17:07:18 +02:00
										 |  |  |         . ${config.system.build.setEnvironment} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ${cfge.shellInit} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  |         ${cfg.shellInit} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Read system-wide modifications. | 
					
						
							|  |  |  |         if test -f /etc/zshenv.local; then | 
					
						
							|  |  |  |           . /etc/zshenv.local | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     environment.etc."zprofile".text = | 
					
						
							|  |  |  |       ''
 | 
					
						
							|  |  |  |         # /etc/zprofile: DO NOT EDIT -- this file has been generated automatically. | 
					
						
							|  |  |  |         # This file is read for login shells. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Only execute this file once per shell. | 
					
						
							|  |  |  |         if [ -n "$__ETC_ZPROFILE_SOURCED" ]; then return; fi | 
					
						
							|  |  |  |         __ETC_ZPROFILE_SOURCED=1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 17:07:18 +02:00
										 |  |  |         ${cfge.loginShellInit} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  |         ${cfg.loginShellInit} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Read system-wide modifications. | 
					
						
							|  |  |  |         if test -f /etc/zprofile.local; then | 
					
						
							|  |  |  |           . /etc/zprofile.local | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     environment.etc."zshrc".text = | 
					
						
							|  |  |  |       ''
 | 
					
						
							|  |  |  |         # /etc/zshrc: DO NOT EDIT -- this file has been generated automatically. | 
					
						
							|  |  |  |         # This file is read for interactive shells. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Only execute this file once per shell. | 
					
						
							|  |  |  |         if [ -n "$__ETC_ZSHRC_SOURCED" -o -n "$NOSYSZSHRC" ]; then return; fi | 
					
						
							|  |  |  |         __ETC_ZSHRC_SOURCED=1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         . /etc/zinputrc | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 17:07:18 +02:00
										 |  |  |         # history defaults | 
					
						
							|  |  |  |         SAVEHIST=2000 | 
					
						
							|  |  |  |         HISTSIZE=2000 | 
					
						
							|  |  |  |         HISTFILE=$HOME/.zsh_history | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         setopt HIST_IGNORE_DUPS SHARE_HISTORY HIST_FCNTL_LOCK | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         HELPDIR="${pkgs.zsh}/share/zsh/$ZSH_VERSION/help" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-25 11:34:21 +03:00
										 |  |  |         # Tell zsh how to find installed completions | 
					
						
							|  |  |  |         for p in ''${(z)NIX_PROFILES}; do
 | 
					
						
							|  |  |  |           fpath+=($p/share/zsh/site-functions $p/share/zsh/$ZSH_VERSION/functions $p/share/zsh/vendor-completions) | 
					
						
							|  |  |  |         done | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 17:07:18 +02:00
										 |  |  |         ${optionalString cfg.enableCompletion "autoload -U compinit && compinit"} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ${optionalString (cfg.enableAutosuggestions) | 
					
						
							|  |  |  |           "source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ${cfge.interactiveShellInit} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  |         ${cfg.interactiveShellInit} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-18 21:48:38 +02:00
										 |  |  |         ${zshAliases} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 17:07:18 +02:00
										 |  |  |         ${cfg.promptInit} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  |         # Read system-wide modifications. | 
					
						
							|  |  |  |         if test -f /etc/zshrc.local; then | 
					
						
							|  |  |  |           . /etc/zshrc.local | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     environment.etc."zinputrc".source = ./zinputrc; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-24 18:04:17 -05:00
										 |  |  |     environment.systemPackages = [ pkgs.zsh ] | 
					
						
							| 
									
										
										
										
											2017-04-23 21:17:31 +02:00
										 |  |  |       ++ optional cfg.enableCompletion pkgs.nix-zsh-completions; | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-25 19:49:10 -05:00
										 |  |  |     environment.pathsToLink = optional cfg.enableCompletion "/share/zsh"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-29 18:57:04 +02:00
										 |  |  |     #users.defaultUserShell = mkDefault "/run/current-system/sw/bin/zsh"; | 
					
						
							| 
									
										
										
										
											2013-09-18 03:35:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     environment.shells = | 
					
						
							|  |  |  |       [ "/run/current-system/sw/bin/zsh" | 
					
						
							|  |  |  |         "/var/run/current-system/sw/bin/zsh" | 
					
						
							|  |  |  |         "${pkgs.zsh}/bin/zsh" | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |