3228f92b90
These files all have options that trip up the `nix-doc-munge` conversion tool for one reason or another (syntax that clashes with Markdown, options that were already using Markdown syntax despite not being marked that way, output that differs slightly after conversion, syntax too elaborate to convert with some cheap regular expressions, ...). Translate them manually and do a little copyediting to options in the vicinity while we're at it.
571 lines
18 KiB
Nix
571 lines
18 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
cfg = config.programs.zsh.prezto;
|
|
|
|
relToDotDir = file:
|
|
(optionalString (config.programs.zsh.dotDir != null)
|
|
(config.programs.zsh.dotDir + "/")) + file;
|
|
|
|
preztoModule = types.submodule {
|
|
options = {
|
|
enable = mkEnableOption "prezto";
|
|
|
|
caseSensitive = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description =
|
|
"Set case-sensitivity for completion, history lookup, etc.";
|
|
};
|
|
|
|
color = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = true;
|
|
example = false;
|
|
description = lib.mdDoc ''
|
|
Color output (automatically set to `false` on dumb terminals).
|
|
'';
|
|
};
|
|
|
|
pmoduleDirs = mkOption {
|
|
type = types.listOf types.path;
|
|
default = [ ];
|
|
example = [ "$HOME/.zprezto-contrib" ];
|
|
description = "Add additional directories to load prezto modules from.";
|
|
};
|
|
|
|
extraConfig = mkOption {
|
|
type = types.lines;
|
|
default = "";
|
|
description = ''
|
|
Additional configuration to add to <filename>.zpreztorc</filename>.
|
|
'';
|
|
};
|
|
|
|
extraModules = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
example = [ "attr" "stat" ];
|
|
description = lib.mdDoc ''
|
|
Set the Zsh modules to load ({manpage}`zshmodules(1)`).
|
|
'';
|
|
};
|
|
|
|
extraFunctions = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
example = [ "zargs" "zmv" ];
|
|
description = lib.mdDoc ''
|
|
Set the Zsh functions to load ({manpage}`zshcontrib(1)`).
|
|
'';
|
|
};
|
|
|
|
pmodules = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [
|
|
"environment"
|
|
"terminal"
|
|
"editor"
|
|
"history"
|
|
"directory"
|
|
"spectrum"
|
|
"utility"
|
|
"completion"
|
|
"prompt"
|
|
];
|
|
description =
|
|
"Set the Prezto modules to load (browse modules). The order matters.";
|
|
};
|
|
|
|
autosuggestions.color = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "fg=blue";
|
|
description = "Set the query found color.";
|
|
};
|
|
|
|
completions.ignoredHosts = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
example = [ "0.0.0.0" "127.0.0.1" ];
|
|
description = lib.mdDoc ''
|
|
Set the entries to ignore in static {file}`/etc/hosts` for
|
|
host completion.
|
|
'';
|
|
};
|
|
|
|
editor = {
|
|
keymap = mkOption {
|
|
type = types.nullOr (types.enum [ "emacs" "vi" ]);
|
|
default = "emacs";
|
|
example = "vi";
|
|
description = lib.mdDoc ''
|
|
Set the key mapping style to `emacs` or `vi`.
|
|
'';
|
|
};
|
|
|
|
dotExpansion = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description = lib.mdDoc ''
|
|
Automatically convert `....` to `../..`
|
|
'';
|
|
};
|
|
|
|
promptContext = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description = "Allow the Zsh prompt context to be shown.";
|
|
};
|
|
};
|
|
|
|
git.submoduleIgnore = mkOption {
|
|
type = types.nullOr (types.enum [ "dirty" "untracked" "all" "none" ]);
|
|
default = null;
|
|
example = "all";
|
|
description = lib.mdDoc ''
|
|
Ignore submodules when they are `dirty`, `untracked`, `all`,
|
|
or `none`.
|
|
'';
|
|
};
|
|
|
|
gnuUtility.prefix = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "g";
|
|
description = "Set the command prefix on non-GNU systems.";
|
|
};
|
|
|
|
historySubstring = {
|
|
foundColor = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "fg=blue";
|
|
description = "Set the query found color.";
|
|
};
|
|
|
|
notFoundColor = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "fg=red";
|
|
description = "Set the query not found color.";
|
|
};
|
|
|
|
globbingFlags = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
description = "Set the search globbing flags.";
|
|
};
|
|
};
|
|
|
|
macOS.dashKeyword = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "manpages";
|
|
description = lib.mdDoc ''
|
|
Set the keyword used by {command}`mand` to open man pages
|
|
in Dash.app.
|
|
'';
|
|
};
|
|
|
|
prompt = {
|
|
theme = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = "sorin";
|
|
example = "pure";
|
|
description = lib.mdDoc ''
|
|
Set the prompt theme to load. Setting it to `random`
|
|
loads a random theme. Automatically set to `off` on dumb
|
|
terminals.
|
|
'';
|
|
};
|
|
|
|
pwdLength = mkOption {
|
|
type = types.nullOr (types.enum [ "short" "long" "full" ]);
|
|
default = null;
|
|
example = "short";
|
|
description = lib.mdDoc ''
|
|
Set the working directory prompt display length. By
|
|
default, it is set to `short`. Set it to `long` (without `~`
|
|
expansion) for longer or `full` (with `~` expansion) for
|
|
even longer prompt display.
|
|
'';
|
|
};
|
|
|
|
showReturnVal = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description = ''
|
|
Set the prompt to display the return code along with an
|
|
indicator for non-zero return codes. This is not supported by all prompts.
|
|
'';
|
|
};
|
|
};
|
|
|
|
python = {
|
|
virtualenvAutoSwitch = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description = "Auto switch to Python virtualenv on directory change.";
|
|
};
|
|
|
|
virtualenvInitialize = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description =
|
|
"Automatically initialize virtualenvwrapper if pre-requisites are met.";
|
|
};
|
|
};
|
|
|
|
ruby.chrubyAutoSwitch = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description = "Auto switch the Ruby version on directory change.";
|
|
};
|
|
|
|
screen = {
|
|
autoStartLocal = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description =
|
|
"Auto start a session when Zsh is launched in a local terminal.";
|
|
};
|
|
|
|
autoStartRemote = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description =
|
|
"Auto start a session when Zsh is launched in a SSH connection.";
|
|
};
|
|
};
|
|
|
|
ssh.identities = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
example = [ "id_rsa" "id_rsa2" "id_github" ];
|
|
description = "Set the SSH identities to load into the agent.";
|
|
};
|
|
|
|
syntaxHighlighting = {
|
|
highlighters = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
example = [ "main" "brackets" "pattern" "line" "cursor" "root" ];
|
|
description = ''
|
|
Set syntax highlighters. By default, only the main
|
|
highlighter is enabled.
|
|
'';
|
|
};
|
|
|
|
styles = mkOption {
|
|
type = types.attrsOf types.str;
|
|
default = { };
|
|
example = {
|
|
builtin = "bg=blue";
|
|
command = "bg=blue";
|
|
function = "bg=blue";
|
|
};
|
|
description = "Set syntax highlighting styles.";
|
|
};
|
|
|
|
pattern = mkOption {
|
|
type = types.attrsOf types.str;
|
|
default = { };
|
|
example = { "rm*-rf*" = "fg=white,bold,bg=red"; };
|
|
description = "Set syntax pattern styles.";
|
|
};
|
|
};
|
|
|
|
terminal = {
|
|
autoTitle = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description = "Auto set the tab and window titles.";
|
|
};
|
|
|
|
windowTitleFormat = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "%n@%m: %s";
|
|
description = "Set the window title format.";
|
|
};
|
|
|
|
tabTitleFormat = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "%m: %s";
|
|
description = "Set the tab title format.";
|
|
};
|
|
|
|
multiplexerTitleFormat = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "%s";
|
|
description = "Set the multiplexer title format.";
|
|
};
|
|
};
|
|
|
|
tmux = {
|
|
autoStartLocal = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description =
|
|
"Auto start a session when Zsh is launched in a local terminal.";
|
|
};
|
|
|
|
autoStartRemote = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description =
|
|
"Auto start a session when Zsh is launched in a SSH connection.";
|
|
};
|
|
|
|
itermIntegration = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description = "Integrate with iTerm2.";
|
|
};
|
|
|
|
defaultSessionName = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "YOUR DEFAULT SESSION NAME";
|
|
description = "Set the default session name.";
|
|
};
|
|
};
|
|
|
|
utility.safeOps = mkOption {
|
|
type = types.nullOr types.bool;
|
|
default = null;
|
|
example = true;
|
|
description = lib.mdDoc ''
|
|
Enabled safe options. This aliases {command}`cp`,
|
|
{command}`ln`, {command}`mv` and {command}`rm` so that they
|
|
prompt before deleting or overwriting files. Set to `no` to
|
|
disable this safer behavior.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
in {
|
|
meta.maintainers = [ maintainers.nickhu ];
|
|
options = {
|
|
programs.zsh = {
|
|
prezto = mkOption {
|
|
type = preztoModule;
|
|
default = { };
|
|
description = "Options to configure prezto.";
|
|
};
|
|
};
|
|
};
|
|
config = mkIf cfg.enable (mkMerge [{
|
|
home.file."${relToDotDir ".zprofile"}".text =
|
|
builtins.readFile "${pkgs.zsh-prezto}/share/zsh-prezto/runcoms/zprofile";
|
|
home.file."${relToDotDir ".zlogin"}".text =
|
|
builtins.readFile "${pkgs.zsh-prezto}/share/zsh-prezto/runcoms/zlogin";
|
|
home.file."${relToDotDir ".zlogout"}".text =
|
|
builtins.readFile "${pkgs.zsh-prezto}/share/zsh-prezto/runcoms/zlogout";
|
|
home.packages = with pkgs; [ zsh-prezto ];
|
|
|
|
home.file."${relToDotDir ".zshenv"}".text =
|
|
builtins.readFile "${pkgs.zsh-prezto}/share/zsh-prezto/runcoms/zshenv";
|
|
home.file."${relToDotDir ".zpreztorc"}".text = ''
|
|
# Generated by Nix
|
|
${optionalString (cfg.caseSensitive != null) ''
|
|
zstyle ':prezto:*:*' case-sensitive '${
|
|
lib.hm.booleans.yesNo cfg.caseSensitive
|
|
}'
|
|
''}
|
|
${optionalString (cfg.color != null) ''
|
|
zstyle ':prezto:*:*' color '${lib.hm.booleans.yesNo cfg.color}'
|
|
''}
|
|
${optionalString (cfg.pmoduleDirs != [ ]) ''
|
|
zstyle ':prezto:load' pmodule-dirs ${
|
|
builtins.concatStringsSep " " cfg.pmoduleDirs
|
|
}
|
|
''}
|
|
${optionalString (cfg.extraModules != [ ]) ''
|
|
zstyle ':prezto:load' zmodule ${
|
|
strings.concatMapStringsSep " " strings.escapeShellArg
|
|
cfg.extraModules
|
|
}
|
|
''}
|
|
${optionalString (cfg.extraFunctions != [ ]) ''
|
|
zstyle ':prezto:load' zfunction ${
|
|
strings.concatMapStringsSep " " strings.escapeShellArg
|
|
cfg.extraFunctions
|
|
}
|
|
''}
|
|
${optionalString (cfg.pmodules != [ ]) ''
|
|
zstyle ':prezto:load' pmodule \
|
|
${
|
|
strings.concatMapStringsSep " \\\n " strings.escapeShellArg
|
|
cfg.pmodules
|
|
}
|
|
''}
|
|
${optionalString (cfg.autosuggestions.color != null) ''
|
|
zstyle ':prezto:module:autosuggestions:color' found '${cfg.autosuggestions.color}'
|
|
''}
|
|
${optionalString (cfg.completions.ignoredHosts != [ ]) ''
|
|
zstyle ':prezto:module:completion:*:hosts' etc-host-ignores \
|
|
${
|
|
strings.concatMapStringsSep " " strings.escapeShellArg
|
|
cfg.completions.ignoredHosts
|
|
}
|
|
''}
|
|
${optionalString (cfg.editor.keymap != null) ''
|
|
zstyle ':prezto:module:editor' key-bindings '${cfg.editor.keymap}'
|
|
''}
|
|
${optionalString (cfg.editor.dotExpansion != null) ''
|
|
zstyle ':prezto:module:editor' dot-expansion '${
|
|
lib.hm.booleans.yesNo cfg.editor.dotExpansion
|
|
}'
|
|
''}
|
|
${optionalString (cfg.editor.promptContext != null) ''
|
|
zstyle ':prezto:module:editor' ps-context '${
|
|
lib.hm.booleans.yesNo cfg.editor.promptContext
|
|
}'
|
|
''}
|
|
${optionalString (cfg.git.submoduleIgnore != null) ''
|
|
zstyle ':prezto:module:git:status:ignore' submodules '${cfg.git.submoduleIgnore}'
|
|
''}
|
|
${optionalString (cfg.gnuUtility.prefix != null) ''
|
|
zstyle ':prezto:module:gnu-utility' prefix '${cfg.gnuUtility.prefix}'
|
|
''}
|
|
${optionalString (cfg.historySubstring.foundColor != null) ''
|
|
zstyle ':prezto:module:history-substring-search:color' found '${cfg.historySubstring.foundColor}'
|
|
''}
|
|
${optionalString (cfg.historySubstring.notFoundColor != null) ''
|
|
zstyle ':prezto:module:history-substring-search:color' not-found '${cfg.historySubstring.notFoundColor}'
|
|
''}
|
|
${optionalString (cfg.historySubstring.globbingFlags != null) ''
|
|
zstyle ':prezto:module:history-substring-search:color' globbing-flags '${cfg.historySubstring.globbingFlags}'
|
|
''}
|
|
${optionalString (cfg.macOS.dashKeyword != null) ''
|
|
zstyle ':prezto:module:osx:man' dash-keyword '${cfg.macOS.dashKeyword}'
|
|
''}
|
|
${optionalString (cfg.prompt.theme != null) ''
|
|
zstyle ':prezto:module:prompt' theme '${cfg.prompt.theme}'
|
|
''}
|
|
${optionalString (cfg.prompt.pwdLength != null) ''
|
|
zstyle ':prezto:module:prompt' pwd-length '${cfg.prompt.pwdLength}'
|
|
''}
|
|
${optionalString (cfg.prompt.showReturnVal != null) ''
|
|
zstyle ':prezto:module:prompt' show-return-val '${
|
|
lib.hm.booleans.yesNo cfg.prompt.showReturnVal
|
|
}'
|
|
''}
|
|
${optionalString (cfg.python.virtualenvAutoSwitch != null) ''
|
|
zstyle ':prezto:module:python:virtualenv' auto-switch '${
|
|
lib.hm.booleans.yesNo cfg.python.virtualenvAutoSwitch
|
|
}'
|
|
''}
|
|
${optionalString (cfg.python.virtualenvInitialize != null) ''
|
|
zstyle ':prezto:module:python:virtualenv' initialize '${
|
|
lib.hm.booleans.yesNo cfg.python.virtualenvInitialize
|
|
}'
|
|
''}
|
|
${optionalString (cfg.ruby.chrubyAutoSwitch != null) ''
|
|
zstyle ':prezto:module:ruby:chruby' auto-switch '${
|
|
lib.hm.booleans.yesNo cfg.ruby.chrubyAutoSwitch
|
|
}'
|
|
''}
|
|
${optionalString (cfg.screen.autoStartLocal != null) ''
|
|
zstyle ':prezto:module:screen:auto-start' local '${
|
|
lib.hm.booleans.yesNo cfg.screen.autoStartLocal
|
|
}'
|
|
''}
|
|
${optionalString (cfg.screen.autoStartRemote != null) ''
|
|
zstyle ':prezto:module:screen:auto-start' remote '${
|
|
lib.hm.booleans.yesNo cfg.screen.autoStartRemote
|
|
}'
|
|
''}
|
|
${optionalString (cfg.ssh.identities != [ ]) ''
|
|
zstyle ':prezto:module:ssh:load' identities \
|
|
${
|
|
strings.concatMapStringsSep " " strings.escapeShellArg
|
|
cfg.ssh.identities
|
|
}
|
|
''}
|
|
${optionalString (cfg.syntaxHighlighting.highlighters != [ ]) ''
|
|
zstyle ':prezto:module:syntax-highlighting' highlighters \
|
|
${
|
|
strings.concatMapStringsSep " \\\n " strings.escapeShellArg
|
|
cfg.syntaxHighlighting.highlighters
|
|
}
|
|
''}
|
|
${optionalString (cfg.syntaxHighlighting.styles != { }) ''
|
|
zstyle ':prezto:module:syntax-highlighting' styles \
|
|
${
|
|
builtins.concatStringsSep " \\\n" (attrsets.mapAttrsToList
|
|
(k: v: strings.escapeShellArg k + " " + strings.escapeShellArg v)
|
|
cfg.syntaxHighlighting.styles)
|
|
}
|
|
''}
|
|
${optionalString (cfg.syntaxHighlighting.pattern != { }) ''
|
|
zstyle ':prezto:module:syntax-highlighting' pattern \
|
|
${
|
|
builtins.concatStringsSep " \\\n" (attrsets.mapAttrsToList
|
|
(k: v: strings.escapeShellArg k + " " + strings.escapeShellArg v)
|
|
cfg.syntaxHighlighting.pattern)
|
|
}
|
|
''}
|
|
${optionalString (cfg.terminal.autoTitle != null) ''
|
|
zstyle ':prezto:module:terminal' auto-title '${
|
|
lib.hm.booleans.yesNo cfg.terminal.autoTitle
|
|
}'
|
|
''}
|
|
${optionalString (cfg.terminal.windowTitleFormat != null) ''
|
|
zstyle ':prezto:module:terminal:window-title' format '${cfg.terminal.windowTitleFormat}'
|
|
''}
|
|
${optionalString (cfg.terminal.tabTitleFormat != null) ''
|
|
zstyle ':prezto:module:terminal:tab-title' format '${cfg.terminal.tabTitleFormat}'
|
|
''}
|
|
${optionalString (cfg.terminal.multiplexerTitleFormat != null) ''
|
|
zstyle ':prezto:module:terminal:multiplexer-title' format '${cfg.terminal.multiplexerTitleFormat}'
|
|
''}
|
|
${optionalString (cfg.tmux.autoStartLocal != null) ''
|
|
zstyle ':prezto:module:tmux:auto-start' local '${
|
|
lib.hm.booleans.yesNo cfg.tmux.autoStartLocal
|
|
}'
|
|
''}
|
|
${optionalString (cfg.tmux.autoStartRemote != null) ''
|
|
zstyle ':prezto:module:tmux:auto-start' remote '${
|
|
lib.hm.booleans.yesNo cfg.tmux.autoStartRemote
|
|
}'
|
|
''}
|
|
${optionalString (cfg.tmux.itermIntegration != null) ''
|
|
zstyle ':prezto:module:tmux:iterm' integrate '${
|
|
lib.hm.booleans.yesNo cfg.tmux.itermIntegration
|
|
}'
|
|
''}
|
|
${optionalString (cfg.tmux.defaultSessionName != null) ''
|
|
zstyle ':prezto:module:tmux:session' name '${cfg.tmux.defaultSessionName}'
|
|
''}
|
|
${optionalString (cfg.utility.safeOps != null) ''
|
|
zstyle ':prezto:module:utility' safe-ops '${
|
|
lib.hm.booleans.yesNo cfg.utility.safeOps
|
|
}'
|
|
''}
|
|
${cfg.extraConfig}
|
|
'';
|
|
}]);
|
|
}
|