63 lines
2.2 KiB
Nix
63 lines
2.2 KiB
Nix
{ lib, ... }:
|
|
|
|
{
|
|
# configure z-shell to use omz with some plugins
|
|
programs.zsh = {
|
|
enable = true;
|
|
autosuggestion.enable = true;
|
|
syntaxHighlighting.enable = true;
|
|
oh-my-zsh = {
|
|
enable = true;
|
|
# add git and agents as plugins
|
|
plugins = [ "git" "ssh-agent" "gpg-agent" ];
|
|
# everything here lands before `source $ZSH/oh-my-zsh.sh`
|
|
extraConfig = ''
|
|
# make omz faster on large repositories
|
|
DISABLE_UNTRACKED_FILES_DIRTY=true
|
|
|
|
# only display a fancy theme when glyphs are rendered
|
|
if [[ "$TERM" == "linux" || "$TERM" == "screen" ]]; then
|
|
ZSH_THEME="gentoo"
|
|
else
|
|
ZSH_THEME="agnoster"
|
|
fi
|
|
'';
|
|
};
|
|
|
|
# Unlike oh-my-zsh.extraConfig above, this lands *after*
|
|
# `source $ZSH/oh-my-zsh.sh`, which is where the theme's prompt functions
|
|
# come into existence.
|
|
initContent = lib.mkAfter ''
|
|
# Keep the prompt on one line in deeply nested trees.
|
|
#
|
|
# Both themes render the working directory as `%~`, the full path with
|
|
# $HOME collapsed to `~`. Somewhere like
|
|
# ~/git/bfh/cas-pml-sem/documents/bericht that is 39 columns on its own,
|
|
# and together with user@host and a long branch name the line wraps.
|
|
#
|
|
# `%(4~|…/%2~|%~)` is a prompt ternary: at four or more components show
|
|
# an ellipsis and the last two, otherwise show the path whole. Short
|
|
# paths like ~/git/nixconfig are left alone.
|
|
if [[ "$ZSH_THEME" == "agnoster" ]]; then
|
|
# agnoster calls prompt_dir on every render, so redefining it is
|
|
# enough. AGNOSTER_DIR_* keep the segment's own colours.
|
|
prompt_dir() {
|
|
prompt_segment "$AGNOSTER_DIR_BG" "$AGNOSTER_DIR_FG" '%(4~|…/%2~|%~)'
|
|
}
|
|
else
|
|
# gentoo builds PROMPT once at load time, so patch the string. Its
|
|
# `%~` is the non-root branch of `%(!.%1~.%~)`, and it is the first
|
|
# literal `%~` in there, so the root branch is untouched. ASCII `...`
|
|
# because this branch is the Linux console, whose font may lack U+2026.
|
|
PROMPT="''${PROMPT/\%~/%(4~|.../%2~|%~)}"
|
|
fi
|
|
'';
|
|
};
|
|
|
|
# set important env vars
|
|
home.sessionVariables = {
|
|
EDITOR = "vim";
|
|
NH_FLAKE = "/home/aaron/git/nixconfig";
|
|
};
|
|
}
|