dotfiles/nixcfgs/users/js0ny/programs/shell/zsh.nix
2025-11-29 23:40:48 +00:00

129 lines
3.3 KiB
Nix

{
pkgs,
config,
lib,
...
}: let
aliasCfg = import ./aliases.nix {inherit pkgs config lib;};
in {
home.packages = with pkgs; [
zsh-fzf-tab
zsh-nix-shell
];
programs.zsh = {
enable = true;
autocd = true;
# oh-my-zsh.enable = true;
autosuggestion.enable = true;
historySubstringSearch.enable = true;
enableCompletion = true;
dotDir = "${config.xdg.configHome}/zsh";
shellAliases = aliasCfg.aliases;
defaultKeymap = "emacs";
# zsh-abbr = {
# enable = true;
# abbreviations = aliases;
# };
syntaxHighlighting = {
enable = true;
patterns = {
"rm -rf *" = "fg=blue,bold,bg=red";
};
highlighters = [
"main"
"pattern"
"brackets"
"root"
];
};
history = {
ignorePatterns = [
''tmp''
''Authorization:''
];
};
initContent = ''
${aliasCfg.posixFx}
# Misc
# ==========
# Remove / from word characters, for easier path navigation (using backward-word, forward-word, etc)
export WORDCHARS=''${WORDCHARS//\//}
export WORDCHARS=''${WORDCHARS//\#/}
# Options
# ==========
setopt INTERACTIVE_COMMENTS # Allow comments in interactive mode
# Globbing
setopt EXTENDED_GLOB # Extended globbing
# setopt GLOB_DOTS # Include dotfiles in globbing
# Error correction
# setopt CORRECT # Suggest corrections for commands
# setopt CORRECT_ALL # Suggest corrections for arguments
# edit command line
autoload -Uz edit-command-line
zle -N edit-command-line
### completion
### =================
# use tab to select
zstyle ':completion:*' menu select
# substring matching
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
# use cache
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path "$XDG_CACHE_HOME/zsh/.zcompcache"
# Colours in completion
zstyle ':completion:*' list-colors ''${(s.:.)LS_COLORS}
# Complete . and .. special directories
zstyle ':completion:*' special-dirs true
# Key bindings (Emacs with modern enhancement)
# ===============================================
bindkey '^H' backward-kill-word # Ctrl-Backspace
bindkey '^[^?' backward-kill-line # Alt-Backspace
bindkey '^[[1;5D' backward-word # Ctrl-Left
bindkey '^[[1;5C' forward-word # Ctrl-Right
bindkey '^[[1;3D' beginning-of-line # Alt-Left
bindkey '^[[1;3C' end-of-line # Alt-Right
bindkey '^[[H' beginning-of-line # Home
bindkey '^[[F' end-of-line # End
bindkey '^[[3~' delete-char # Delete
bindkey '^[[3;5~' kill-word # Ctrl-Delete
bindkey '^[[3;3~' kill-line # Alt-Delete
bindkey '^X^E' edit-command-line
bindkey '^[e' edit-command-line
bindkey '^[v' edit-command-line
bindkey '^[[Z' reverse-menu-complete # Shift-Tab
# bindkey -M menuselect '^[[Z' reverse-menu-complete # Shift-Tab in menu select mode
bindkey '^[#' pound-insert # Alt-# to comment line
bindkey '^]' vi-find-next-char
bindkey '^[^]' vi-find-prev-char
# Misc
# ========
# source ${pkgs.zsh-fzf-tab}/share/fzf-tab/fzf-tab.plugin.zsh
'';
};
}