diff --git a/modules/home-manager/shell/zsh/.zshrc b/modules/home-manager/shell/zsh/.zshrc deleted file mode 100644 index 271c341..0000000 --- a/modules/home-manager/shell/zsh/.zshrc +++ /dev/null @@ -1,34 +0,0 @@ -source $ZDOTDIR/config.zsh - -if [ ! -d "$ZGEN_DIR" ]; then - echo "Installing jandamm/zgenom" - git clone https://github.com/jandamm/zgenom "$ZGEN_DIR" -fi -source $ZGEN_DIR/zgenom.zsh - -zgenom autoupdate - -if ! zgenom saved; then - echo "Initializing zgenom" - rm -f $ZDOTDIR/*.zwc(N) \ - $XDG_CACHE_HOME/zsh/*(N) \ - $ZGEN_INIT.zwc - - zgenom load junegunn/fzf shell - zgenom load zdharma-continuum/fast-syntax-highlighting - zgenom load zsh-users/zsh-completions src - zgenom load zsh-users/zsh-history-substring-search - zgenom load softmoth/zsh-vim-mode - - zgenom save - zgenom compile $ZDOTDIR -fi - -## Bootstrap interactive sessions -if [[ $TERM != dumb ]]; then - autoload -Uz compinit && compinit -u -d $ZSH_CACHE/zcompdump - - source $ZDOTDIR/keybinds.zsh - source $ZDOTDIR/completion.zsh - source $ZDOTDIR/aliases.zsh -fi diff --git a/modules/home-manager/shell/zsh/aliases.zsh b/modules/home-manager/shell/zsh/aliases.zsh deleted file mode 100644 index a9cb32b..0000000 --- a/modules/home-manager/shell/zsh/aliases.zsh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -# Verbose file operations -alias \ - cp="cp -iv" \ - mv="mv -iv" \ - rm="rm -v" \ - mkdir="mkdir -v" - -# Colorize commands -alias \ - ls="ls -h --color=auto --group-directories-first" - -# Abbreviations -alias \ - e="$EDITOR" \ - f="$FILE" \ - g="git" \ - m="neomutt" \ - n="$FILE" \ - v="$EDITOR" - -# XDG fixes -alias \ - mbsync="mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc -a" diff --git a/modules/home-manager/shell/zsh/completion.zsh b/modules/home-manager/shell/zsh/completion.zsh deleted file mode 100644 index 1915bf8..0000000 --- a/modules/home-manager/shell/zsh/completion.zsh +++ /dev/null @@ -1,6 +0,0 @@ -fpath+=( $ZDOTDIR/completions ) - -# Don't offer history completion; we have fzf, C-r, and -# zsh-history-substring-search for that. -ZSH_AUTOSUGGEST_STRATEGY=(completion) -ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=30 diff --git a/modules/home-manager/shell/zsh/config.zsh b/modules/home-manager/shell/zsh/config.zsh deleted file mode 100644 index 08835d1..0000000 --- a/modules/home-manager/shell/zsh/config.zsh +++ /dev/null @@ -1,99 +0,0 @@ -#### -## zsh configuration -#### - -## Colors -autoload -U colors && colors - -## Completion -setopt HASH_LIST_ALL -unsetopt AUTO_NAME_DIRS -autoload -Uz compinit -zstyle ':completion:*' menu select -zmodload zsh/complist -compinit -_comp_options+=(globdots) # Include hidden files - -## Directories -setopt AUTO_PUSHD -setopt CDABLE_VARS -setopt PUSHD_IGNORE_DUPS -setopt PUSHD_SILENT -setopt PUSHD_TO_HOME -unsetopt AUTO_CD - -## Expansion and globbing -setopt EXTENDED_GLOB -unsetopt GLOB_DOTS -unsetopt NOMATCH - -## History -HISTFILE="${XDG_DATA_HOME:-${HOME}/.local/share}/zsh/history" -HISTSIZE=1000000 -SAVEHIST=1000000 -[[ !( -f "${HISTFILE}" ) ]] && mkdir -p $(dirname ${HISTFILE}) - -setopt APPEND_HISTORY -setopt BANG_HIST -setopt EXTENDED_HISTORY -setopt HIST_IGNORE_ALL_DUPS -setopt HIST_IGNORE_DUPS -setopt HIST_IGNORE_SPACE -setopt HIST_SAVE_NO_DUPS -setopt HIST_VERIFY -setopt INC_APPEND_HISTORY_TIME -setopt SHARE_HISTORY - -## I/O -setopt INTERACTIVE_COMMENTS -setopt MULTIOS -unsetopt CLOBBER - -## Jobs -setopt LONG_LIST_JOBS -setopt AUTO_RESUME -unsetopt BG_NICE -unsetopt NOTIFY -unsetopt HUP -unsetopt CHECK_JOBS - -## Shell emulation -setopt APPEND_CREATE - -## Prompt -PS1="%B%{$fg[magenta]%}%~%{$reset_color%} $%b " - -## Window title -precmd () { print -Pn "\e]0;%n@%m: %~\a" } -preexec () { print -Pn "\e]0;%n@%m: $1\a" } - -## Vi mode -bindkey -v -export KEYTIMEOUT=1 - -## Zsh line editor -unsetopt BEEP - - -#### -## Plugins -#### - -export ZGEN_AUTOLOAD_COMPINIT=0 - -# zsh-vim-mode -export MODE_INDICATOR="" -export MODE_CURSOR_VIINS="#b77ee0 blinking bar" -export MODE_CURSOR_REPLACE="$MODE_CURSOR_VIINS #ff3334" -export MODE_CURSOR_VICMD="#b77ee0 block" -export MODE_CURSOR_SEARCH="#e7c547 steady underline" -export MODE_CURSOR_VISUAL="$MODE_CURSOR_VICMD steady bar" -export MODE_CURSOR_VLINE="$MODE_CURSOR_VISUAL #54ced6" - -# fzf -if (( $+commands[fd] )); then - export FZF_DEFAULT_OPTS="--reverse --ansi" - export FZF_DEFAULT_COMMAND="fd ." - export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" - export FZF_ALT_C_COMMAND="fd -t d . $HOME" -fi diff --git a/modules/home-manager/shell/zsh/default.nix b/modules/home-manager/shell/zsh/default.nix index 91fc46f..c393d46 100644 --- a/modules/home-manager/shell/zsh/default.nix +++ b/modules/home-manager/shell/zsh/default.nix @@ -19,42 +19,137 @@ in config = lib.mkIf cfg.enable { users.defaultUserShell = pkgs.zsh; - programs.zsh = { - enable = true; - enableCompletion = true; - enableGlobalCompInit = false; - promptInit = ""; + home.programs = { + zsh = { + enable = true; + autocd = true; + autosuggestion = { + enable = true; + strategy = [ "completion" ]; + }; + dotDir = ".config/zsh"; + enableCompletion = true; + enableVteIntegration = true; + + history = { + append = true; + extended = true; + ignoreAllDups = true; + ignoreDups = true; + ignoreSpace = true; + save = 1000000; + size = 1000000; + }; + + historySubstringSearch = { + enable = true; + }; + + initExtra = '' + ## Directories + setopt AUTO_PUSHD + setopt CDABLE_VARS + setopt PUSHD_IGNORE_DUPS + setopt PUSHD_SILENT + setopt PUSHD_TO_HOME + + ## Expansion and globbing + setopt EXTENDED_GLOB + unsetopt GLOB_DOTS + unsetopt NOMATCH + + ## History + setopt BANG_HIST + setopt HIST_VERIFY + setopt INC_APPEND_HISTORY_TIME + + ## I/O + setopt INTERACTIVE_COMMENTS + setopt MULTIOS + unsetopt CLOBBER + + ## Jobs + setopt LONG_LIST_JOBS + setopt AUTO_RESUME + unsetopt BG_NICE + unsetopt NOTIFY + unsetopt HUP + unsetopt CHECK_JOBS + + ## Shell emulation + setopt APPEND_CREATE + + ## Prompt + PS1="%B%{$fg[magenta]%}%~%{$reset_color%} $%b " + + ## Vi mode + bindkey -v + export KEYTIMEOUT=1 + + ## Zsh line editor + unsetopt BEEP + ''; + + initExtraBeforeCompInit = '' + setopt HASH_LIST_ALL + ''; + + plugins = with pkgs; [ + { + name = "fast-syntax-highlighting"; + src = zsh-fast-syntax-highlighting; + file = "share/zsh/site-functions/fast-syntax-highlighting.plugin.zsh"; + } + { + name = "zsh-vi-mode"; + src = zsh-vi-mode; + file = "share/zsh-vi-mode/zsh-vi-mode.plugin.zsh"; + } + ]; + + sessionVariables = { + MODE_INDICATOR = ""; + MODE_CURSOR_VIINS = "#b77ee0 blinking bar"; + MODE_CURSOR_REPLACE = "$MODE_CURSOR_VIINS #ff3334"; + MODE_CURSOR_VICMD = "#b77ee0 block"; + MODE_CURSOR_SEARCH = "#e7c547 steady underline"; + MODE_CURSOR_VISUAL = "$MODE_CURSOR_VICMD steady bar"; + MODE_CURSOR_VLINE = "$MODE_CURSOR_VISUAL #54ced6"; + }; + + shellAliases = { + # Verbose file operations + cp = "cp -iv"; + mv = "mv -iv"; + rm = "rm -v"; + mkdir = "mkdir -v"; + + # Colorize commands + ls = "ls -h --collor=auto --group-directories-first"; + + # Abbreviations + e = "$EDITOR"; + f = "$FILE"; + g = "git"; + m = "neomutt"; + n = "$FILE"; + v = "$EDITOR"; + }; + }; + + fzf = { + enable = true; + enableZshIntegration = true; + package = pkgs.unstable.fzf; + }; }; user.packages = with pkgs; [ fd - unstable.fzf jq nix-zsh-completions nnn ripgrep - zsh ]; - - env = { - ZDOTDIR = "$XDG_CONFIG_HOME/zsh"; - ZSH_CACHE = "$XDG_CACHE_HOME/zsh"; - ZGEN_DIR = "$XDG_DATA_HOME/zgenom"; - }; - - home.configFile = { - "zsh/.zshrc".source = ./.zshrc; - "zsh/aliases.zsh".source = ./aliases.zsh; - "zsh/completion.zsh".source = ./completion.zsh; - "zsh/config.zsh".source = ./config.zsh; - "zsh/keybinds.zsh".source = ./keybinds.zsh; - }; - - system.userActivationScripts.cleanupZgen = '' - rm -rf $ZDOTDIR/.*.zwc - rm -f $ZDOTDIR/.zcompdump - rm -rf $ZSH_CACHE - rm -fv $ZGEN_DIR/init.zsh{,.zwc} - ''; }; } diff --git a/modules/home-manager/shell/zsh/keybinds.zsh b/modules/home-manager/shell/zsh/keybinds.zsh deleted file mode 100644 index 7617fe4..0000000 --- a/modules/home-manager/shell/zsh/keybinds.zsh +++ /dev/null @@ -1,12 +0,0 @@ -#### -## Keybindings -#### -stty stop undef -bindkey -s '^f' 'cd "$(dirname "$(fzf)")"\n' - -bindkey -M vicmd 'k' history-substring-search-up -bindkey -M vicmd 'j' history-substring-search-down - -if (( $+commands[fzf] )); then - bindkey '^R' fzf-history-widget -fi