Bruno BELANYI
1e4d4650e2
All checks were successful
continuous-integration/drone/push Build is passing
I know I just activated it, but I can't get used to it... I would like to have a mixture of it: * Be able to search across *all* shell histories when using Ctrl-r. * Only go up/down my session's shell history when using Ctrl-n/Ctrl-p. Enabling shared history gets me the first one, but means I can't limit my up/down history to just the one session. Disabling shared history means that I can't search across all shell histories, but keeps my up/down history tidier. All-in-all I like the second one better.
122 lines
3.1 KiB
Nix
122 lines
3.1 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
let
|
|
cfg = config.my.home.zsh;
|
|
|
|
# Have a nice relative path for XDG_CONFIG_HOME, without leading `/`
|
|
relativeXdgConfig =
|
|
let
|
|
noHome = lib.removePrefix config.home.homeDirectory;
|
|
noSlash = lib.removePrefix "/";
|
|
in
|
|
noSlash (noHome config.xdg.configHome);
|
|
in
|
|
{
|
|
options.my.home.zsh = with lib; {
|
|
enable = my.mkDisableOption "zsh configuration";
|
|
|
|
launchTmux = mkEnableOption "auto launch tmux at shell start";
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
home.packages = with pkgs; [
|
|
zsh-completions
|
|
];
|
|
|
|
programs.zsh = {
|
|
enable = true;
|
|
dotDir = "${relativeXdgConfig}/zsh"; # Don't clutter $HOME
|
|
enableCompletion = true;
|
|
|
|
history = {
|
|
size = 500000;
|
|
save = 500000;
|
|
extended = true;
|
|
expireDuplicatesFirst = true;
|
|
ignoreSpace = true;
|
|
ignoreDups = true;
|
|
share = false;
|
|
path = "${config.xdg.dataHome}/zsh/zsh_history";
|
|
};
|
|
|
|
plugins = with pkgs; [
|
|
{
|
|
name = "fast-syntax-highlighting";
|
|
file = "share/zsh/site-functions/fast-syntax-highlighting.plugin.zsh";
|
|
src = pkgs.zsh-fast-syntax-highlighting;
|
|
}
|
|
{
|
|
name = "agkozak-zsh-prompt";
|
|
file = "share/zsh/site-functions/agkozak-zsh-prompt.plugin.zsh";
|
|
src = pkgs.agkozak-zsh-prompt;
|
|
}
|
|
];
|
|
|
|
# Modal editing is life, but CLI benefits from emacs gymnastics
|
|
defaultKeymap = "emacs";
|
|
|
|
# Make those happen early to avoid doing double the work
|
|
initExtraFirst = ''
|
|
${
|
|
lib.optionalString cfg.launchTmux ''
|
|
# Launch tmux unless already inside one
|
|
if [ -z "$TMUX" ]; then
|
|
exec tmux new-session
|
|
fi
|
|
''
|
|
}
|
|
'';
|
|
|
|
initExtra = ''
|
|
source ${./completion-styles.zsh}
|
|
source ${./extra-mappings.zsh}
|
|
source ${./options.zsh}
|
|
|
|
# Source local configuration
|
|
if [ -f "$ZDOTDIR/zshrc.local" ]; then
|
|
source "$ZDOTDIR/zshrc.local"
|
|
fi
|
|
'';
|
|
|
|
localVariables = {
|
|
# I like having the full path
|
|
AGKOZAK_PROMPT_DIRTRIM = 0;
|
|
# Because I *am* from EPITA
|
|
AGKOZAK_PROMPT_CHAR = [ "42sh$" "42sh#" ":" ];
|
|
# Easy on the eyes
|
|
AGKOZAK_COLORS_BRANCH_STATUS = "magenta";
|
|
# I don't like moving my eyes
|
|
AGKOZAK_LEFT_PROMPT_ONLY = 1;
|
|
};
|
|
|
|
shellAliases = {
|
|
# I like pretty colors
|
|
diff = "diff --color=auto";
|
|
grep = "grep --color=auto";
|
|
egrep = "egrep --color=auto";
|
|
fgrep = "fgrep --color=auto";
|
|
ls = "ls --color=auto";
|
|
|
|
# Well-known ls aliases
|
|
l = "ls -alh";
|
|
ll = "ls -l";
|
|
|
|
# Sometime `gpg-agent` errors out...
|
|
reset-agent = "gpg-connect-agent updatestartuptty /bye";
|
|
};
|
|
|
|
# Enable VTE integration
|
|
enableVteIntegration = true;
|
|
};
|
|
|
|
# Fuzzy-wuzzy
|
|
programs.fzf = {
|
|
enable = true;
|
|
enableZshIntegration = true;
|
|
};
|
|
|
|
programs.dircolors = {
|
|
enable = true;
|
|
};
|
|
};
|
|
}
|