From 2af32bbcfe1ac7dcecf40dfb7d7f8ca747308755 Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Mon, 12 Dec 2016 23:01:07 +0100 Subject: add shell options for zsh --- modules/programs/zsh.nix | 84 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) (limited to 'modules/programs') diff --git a/modules/programs/zsh.nix b/modules/programs/zsh.nix index ff39d4b..608f5d6 100644 --- a/modules/programs/zsh.nix +++ b/modules/programs/zsh.nix @@ -6,6 +6,15 @@ let cfg = config.programs.zsh; + zsh = pkgs.runCommand pkgs.zsh.name + { buildInputs = [ pkgs.makeWrapper ]; } + '' + source $stdenv/setup + + mkdir -p $out/bin + makeWrapper ${pkgs.zsh}/bin/zsh $out/bin/zsh + ''; + in { @@ -21,17 +30,90 @@ in programs.zsh.shell = mkOption { type = types.path; - default = "${pkgs.zsh}/bin/zsh"; + default = "${zsh}/bin/zsh"; description = '' Zsh shell to use. ''; }; + programs.zsh.shellInit = mkOption { + default = ""; + description = '' + Shell script code called during zsh shell initialisation. + ''; + type = types.lines; + }; + + programs.zsh.loginShellInit = mkOption { + default = ""; + description = '' + Shell script code called during zsh login shell initialisation. + ''; + type = types.lines; + }; + + programs.zsh.interactiveShellInit = mkOption { + default = ""; + description = '' + Shell script code called during interactive zsh shell initialisation. + ''; + type = types.lines; + }; + }; config = mkIf cfg.enable { environment.variables.SHELL = "${cfg.shell}"; + 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. + # But don't clobber the environment of interactive non-login children! + if [ -n "$__ETC_ZSHENV_SOURCED" ]; then return; fi + export __ETC_ZSHENV_SOURCED=1 + + ${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 + + ${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 + + ${cfg.interactiveShellInit} + + # Read system-wide modifications. + if test -f /etc/zshrc.local; then + . /etc/zshrc.local + fi + ''; + }; } -- cgit v1.2.3