From aa46b1ec0ecb498716813549fe4de479b8f5e893 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 10 Jun 2018 23:08:50 +0200 Subject: nixos/autosuggestions: add module (#41397) The `zsh-autosuggestions` package provides several configuration options such as a different highlight style (like `fg=cyan` which is easier to read). With `rename.nix` the old `programs.zsh.enableAutosuggestions` is still functional, but yields the following warning like this during evaluation: ``` trace: warning: The option `programs.zsh.enableAutosuggestions' defined in `' has been renamed to `programs.zsh.autosuggestions.enable'. ``` The module provides the most common `zsh-autosuggestions` (highlight style and strategy) as options that will be written into the interactive shell init (`/etc/zshrc` by default). Further configuration options can be declared using the `extraConfig` attr set: ``` { programs.zsh.autosuggestions.extraConfig = { "ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" = "buffer_size"; }; } ``` A full list of available configuration options for `zsh-autosuggestions` can be viewed here: https://github.com/zsh-users/zsh-autosuggestions/blob/v0.4.3/README.md --- nixos/modules/module-list.nix | 1 + nixos/modules/programs/zsh/zsh-autosuggestions.nix | 60 ++++++++++++++++++++++ nixos/modules/programs/zsh/zsh.nix | 11 ---- nixos/modules/rename.nix | 2 + 4 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 nixos/modules/programs/zsh/zsh-autosuggestions.nix (limited to 'nixos') diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index da4c21296ffd..71e0bf1461f3 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -127,6 +127,7 @@ ./programs/zsh/oh-my-zsh.nix ./programs/zsh/zsh.nix ./programs/zsh/zsh-autoenv.nix + ./programs/zsh/zsh-autosuggestions.nix ./programs/zsh/zsh-syntax-highlighting.nix ./rename.nix ./security/acme.nix diff --git a/nixos/modules/programs/zsh/zsh-autosuggestions.nix b/nixos/modules/programs/zsh/zsh-autosuggestions.nix new file mode 100644 index 000000000000..416f4c9c6751 --- /dev/null +++ b/nixos/modules/programs/zsh/zsh-autosuggestions.nix @@ -0,0 +1,60 @@ +{ config, pkgs, lib, ... }: + +with lib; + +let + cfg = config.programs.zsh.autosuggestions; +in +{ + options.programs.zsh.autosuggestions = { + + enable = mkEnableOption "zsh-autosuggestions"; + + highlightStyle = mkOption { + type = types.str; + default = "fg=8"; # https://github.com/zsh-users/zsh-autosuggestions/tree/v0.4.3#suggestion-highlight-style + description = "Highlight style for suggestions ({fore,back}ground color)"; + example = "fg=cyan"; + }; + + strategy = mkOption { + type = types.enum [ "default" "match_prev_cmd" ]; + default = "default"; + description = '' + Set ZSH_AUTOSUGGEST_STRATEGY to choose the strategy for generating suggestions. + There are currently two to choose from: + + * default: Chooses the most recent match. + * match_prev_cmd: Chooses the most recent match whose preceding history item matches + the most recently executed command (more info). Note that this strategy won't work as + expected with ZSH options that don't preserve the history order such as + HIST_IGNORE_ALL_DUPS or HIST_EXPIRE_DUPS_FIRST. + ''; + }; + + extraConfig = mkOption { + type = with types; attrsOf str; + default = {}; + description = "Attribute set with additional configuration values"; + example = literalExample '' + { + "ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" = "20"; + } + ''; + }; + + }; + + config = mkIf cfg.enable { + + programs.zsh.interactiveShellInit = '' + source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh + + export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="${cfg.highlightStyle}" + export ZSH_AUTOSUGGEST_STRATEGY="${cfg.strategy}" + + ${concatStringsSep "\n" (mapAttrsToList (key: value: ''export ${key}="${value}"'') cfg.extraConfig)} + ''; + + }; +} diff --git a/nixos/modules/programs/zsh/zsh.nix b/nixos/modules/programs/zsh/zsh.nix index 662b463d572e..42d4e1d4ada0 100644 --- a/nixos/modules/programs/zsh/zsh.nix +++ b/nixos/modules/programs/zsh/zsh.nix @@ -87,13 +87,6 @@ in type = types.bool; }; - enableAutosuggestions = mkOption { - default = false; - description = '' - Enable zsh-autosuggestions - ''; - type = types.bool; - }; }; }; @@ -168,10 +161,6 @@ in ${optionalString cfg.enableCompletion "autoload -U compinit && compinit"} - ${optionalString (cfg.enableAutosuggestions) - "source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh" - } - ${cfge.interactiveShellInit} ${cfg.interactiveShellInit} diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix index b15dd84999a9..9b9e9e7109de 100644 --- a/nixos/modules/rename.nix +++ b/nixos/modules/rename.nix @@ -247,6 +247,8 @@ with lib; (mkRenamedOptionModule [ "programs" "zsh" "oh-my-zsh" "custom" ] [ "programs" "zsh" "ohMyZsh" "custom" ]) (mkRenamedOptionModule [ "programs" "zsh" "oh-my-zsh" "plugins" ] [ "programs" "zsh" "ohMyZsh" "plugins" ]) + (mkRenamedOptionModule [ "programs" "zsh" "enableAutosuggestions" ] [ "programs" "zsh" "autosuggestions" "enable" ]) + # Xen (mkRenamedOptionModule [ "virtualisation" "xen" "qemu-package" ] [ "virtualisation" "xen" "package-qemu" ]) -- cgit 1.4.1