dotfiles/home/modules/zsh.nix

141 lines
8 KiB
Nix

{ config, pkgs, ... }:
{
programs.zsh = {
enable = true;
# zsh-autosuggestions
enableAutosuggestions = true;
# zsh-syntax-highlighting
syntaxHighlighting.enable = true;
defaultKeymap = "viins";
dotDir = ".config/zsh";
history.ignoreDups = true;
history.path = "${config.xdg.dataHome}/zsh/zsh_history";
# I dont want to remap the up key, so only map this, setting ATUIN_NOBIND to true
initExtra = ''
up-line-or-local-history() {
zle set-local-history 1
zle up-line-or-history
zle set-local-history 0
}
zle -N up-line-or-local-history
down-line-or-local-history() {
zle set-local-history 1
zle down-line-or-history
zle set-local-history 0
}
zle -N down-line-or-local-history
bindkey '^[[A' up-line-or-local-history
bindkey '^[OA' up-line-or-local-history
bindkey '^[[B' down-line-or-local-history
bindkey '^[OB' down-line-or-local-history
bindkey '^r' _atuin_search_widget
'';
localVariables = {
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS = [
# "os_icon" # os identifier
"dir" # current directory
"vcs" # git status
"prompt_char" # prompt symbol
];
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS = [
"status" # exit code of the last command
"command_execution_time" # duration of the last command
"background_jobs" # presence of background jobs
# "direnv" # direnv status (https://direnv.net/)
# "asdf" # asdf version manager (https://github.com/asdf-vm/asdf)
# "virtualenv" # python virtual environment (https://docs.python.org/3/library/venv.html)
# "anaconda" # conda environment (https://conda.io/)
# "pyenv" # python environment (https://github.com/pyenv/pyenv)
# "goenv" # go environment (https://github.com/syndbg/goenv)
# "nodenv" # node.js version from nodenv (https://github.com/nodenv/nodenv)
# "nvm" # node.js version from nvm (https://github.com/nvm-sh/nvm)
# "nodeenv" # node.js environment (https://github.com/ekalinin/nodeenv)
# "node_version" # node.js version
# "go_version" # go version (https://golang.org)
# "rust_version" # rustc version (https://www.rust-lang.org)
# "dotnet_version" # .NET version (https://dotnet.microsoft.com)
# "php_version" # php version (https://www.php.net/)
# "laravel_version" # laravel php framework version (https://laravel.com/)
# "java_version" # java version (https://www.java.com/)
# "package" # name@version from package.json (https://docs.npmjs.com/files/package.json)
# "rbenv" # ruby version from rbenv (https://github.com/rbenv/rbenv)
# "rvm" # ruby version from rvm (https://rvm.io)
# "fvm" # flutter version management (https://github.com/leoafarias/fvm)
# "luaenv" # lua version from luaenv (https://github.com/cehoffman/luaenv)
# "jenv" # java version from jenv (https://github.com/jenv/jenv)
# "plenv" # perl version from plenv (https://github.com/tokuhirom/plenv)
# "phpenv" # php version from phpenv (https://github.com/phpenv/phpenv)
# "scalaenv" # scala version from scalaenv (https://github.com/scalaenv/scalaenv)
# "haskell_stack" # haskell version from stack (https://haskellstack.org/)
# "kubecontext" # current kubernetes context (https://kubernetes.io/)
# "terraform" # terraform workspace (https://www.terraform.io)
# "terraform_version # terraform version (https://www.terraform.io)
# "aws" # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
# "aws_eb_env" # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/)
# "azure" # azure account name (https://docs.microsoft.com/en-us/cli/azure)
# "gcloud" # google cloud cli account and project (https://cloud.google.com/)
# "google_app_cred" # google application credentials (https://cloud.google.com/docs/authentication/production)
# "toolbox" # toolbox name (https://github.com/containers/toolbox)
# "context" # user@hostname
# "nordvpn" # nordvpn connection status, linux only (https://nordvpn.com/)
# "ranger" # ranger shell (https://github.com/ranger/ranger)
"nnn" # nnn shell (https://github.com/jarun/nnn)
# "xplr" # xplr shell (https://github.com/sayanarijit/xplr)
"vim_shell" # vim shell indicator (:sh)
# "midnight_commander" # midnight commander shell (https://midnight-commander.org/)
"nix_shell" # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
# "vi_mode" # vi mode (you don't need this if you've enabled prompt_char)
# "vpn_ip" # virtual private network indicator
# "load" # CPU load
# "disk_usage" # disk usage
# "ram" # free RAM
# "swap" # used swap
# "todo" # todo items (https://github.com/todotxt/todo.txt-cli)
# "timewarrior" # timewarrior tracking status (https://timewarrior.net/)
# "taskwarrior" # taskwarrior task count (https://taskwarrior.org/)
# "time" # current time
# "ip" # ip address and bandwidth usage for a specified network interface
# "public_ip" # public IP address
# "proxy" # system-wide http/https/ftp proxy
# "battery" # internal battery
# "wifi" # wifi speed
# "example" # example user-defined segment (see prompt_example function below)
];
POWERLEVEL9K_MODE = "nerdfont-complete";
POWERLEVEL9K_ICON_PADDING = "none";
POWERLEVEL9K_PROMPT_ADD_NEWLINE = "true";
POWERLEVEL9K_TRANSIENT_PROMPT = "same-dir";
POWERLEVEL9K_INSTANT_PROMPT = "verbose";
POWERLEVEL9K_DIR_FOREGROUND = "254";
POWERLEVEL9K_SHORTEN_STRATEGY = "truncate_to_unique";
POWERLEVEL9K_DIR_ANCHOR_BOLD = "true";
POWERLEVEL9K_SHORTEN_FOLDER_MARKER = "(.bzr|.citc|.git|.hg|.node-version|.python-version|.go-version|.ruby-version|.lua-version|.java-version|.perl-version|.php-version|.tool-version|.shorten_folder_marker|.svn|.terraform|CVS|Cargo.toml|composer.json|flake.nix|go.mod|package.json|stack.yaml)";
# POWERLEVEL9K_PROMPT_CHAR_LEFT_LEFT_WHITESPACE = "";
# POWERLEVEL9K_PROMPT_CHAR_LEFT_RIGHT_WHITESPACE = "";
POWERLEVEL9K_STATUS_ERROR_FOREGROUND = "15";
POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND = "15";
POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND = "15";
POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND = "0";
POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND = "3";
POWERLEVEL9K_NIX_SHELL_FOREGROUND = "15";
SHELL = "zsh";
ATUIN_NOBIND = "true";
# to allow rebinding ^r
ZVM_INIT_MODE = "sourcing";
};
plugins = with pkgs; [
{ name = "zsh-vi-mode";
inherit (zsh-vi-mode) src; }
{ name = "fzf-tab";
inherit (zsh-fzf-tab) src; }
{ name = "nix-shell";
inherit (zsh-nix-shell) src; }
{ name = "powerlevel10k";
inherit (zsh-powerlevel10k) src;
file = "powerlevel10k.zsh-theme"; }
{ name = "you-should-use";
inherit (zsh-you-should-use) src; }
];
};
}