- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
{ config
, lib
, pkgs
, ...
}:
let
cfg = config.features.basics.zsh;
in
{
options = {
features.basics.zsh.theme = {
text = lib.mkOption {
type = lib.types.nonEmptyStr;
default = "%f";
};
vi.insert = lib.mkOption {
type = lib.types.nonEmptyStr;
default = "%{$fg[blue]%}";
};
vi.normal = lib.mkOption {
type = lib.types.nonEmptyStr;
default = "%{$fg[green]%}";
};
vcs = {
info = lib.mkOption {
type = lib.types.nonEmptyStr;
default = "%{$fg[white]%}";
};
staged = lib.mkOption {
type = lib.types.nonEmptyStr;
default = "%{$fg[green]%}";
};
unstaged = lib.mkOption {
type = lib.types.nonEmptyStr;
default = "%{$fg[red]%}";
};
};
symbol = lib.mkOption {
type = lib.types.nonEmptyStr;
default = "%F{8}";
};
};
};
config = {
programs = {
zsh = {
enable = true;
# The default base keymap to use.
defaultKeymap = "viins";
# Enable zsh completion. Don’t forget to add
enableCompletion = true;
# Options related to commands history configuration.
history = {
# Do not enter command lines into the history list if they are duplicates of the previous event.
ignoreDups = true;
# Save timestamp into the history file.
extended = true;
# Number of history lines to keep.
size = 1000;
# Share command history between zsh sessions.
share = false;
};
sessionVariables = {
# Insert space between completed string and ampersand or pipe
ZLE_SPACE_SUFFIX_CHARS = "&|";
};
initExtra = with cfg.theme; ''
# Activate colors module in order to colourise prompt
autoload -Uz colors
colors
# Branch character (for readability)
CH_BRANCH=$'\ue0a0'
function custom-prompt() {
echo -e "
%f%k%b''${1}%1d ''${vcs_info_msg_0_}%k%f%b
${symbol}%# ${text}"
}
# VCS
autoload -Uz vcs_info
precmd () { vcs_info }
zstyle ":vcs_info:git:*" check-for-changes true
zstyle ":vcs_info:git:*" stagedstr "${vcs.staged}*"
zstyle ":vcs_info:git:*" unstagedstr "${vcs.unstaged}*"
zstyle ":vcs_info:*" formats "${vcs.info}''${CH_BRANCH} %b%c%u${text}"
zstyle ":vcs_info:*" actionformats "[%b|%a]"
zstyle ":completion:*" ignored-patterns "dpipe|exiv2"
function zle-line-init zle-keymap-select {
case $KEYMAP in
vicmd)
PROMPT=$(custom-prompt "${vi.normal}")
;;
main|viins)
PROMPT=$(custom-prompt "${vi.insert}")
;;
esac
zle reset-prompt
}
zle -N zle-line-init
zle -N zle-keymap-select
'';
};
};
};
}