1
0
Fork 0
dotfiles/home/programs/zsh/default.nix

185 lines
5.3 KiB
Nix

{ pkgs, lib, config, ... }:
let
inherit (pkgs) fetchFromGitHub;
inherit (pkgs.stdenv) isDarwin;
inherit (lib) optionals;
inherit (lib.attrsets) optionalAttrs;
in
{
programs.zsh = {
enable = true;
enableCompletion = true;
enableVteIntegration = !config.programs.wezterm.enable;
autosuggestion.enable = false;
syntaxHighlighting = {
enable = true;
};
plugins = [
{
# https://github.com/Aloxaf/fzf-tab
name = "fzf-tab";
src = fetchFromGitHub {
owner = "Aloxaf";
repo = "fzf-tab";
rev = "6aced3f35def61c5edf9d790e945e8bb4fe7b305";
hash = "sha256-EWMeslDgs/DWVaDdI9oAS46hfZtp4LHTRY8TclKTNK8=";
};
}
{
# https://github.com/zsh-users/zsh-autosuggestions
name = "zsh-autosuggestions";
src = fetchFromGitHub {
owner = "zsh-users";
repo = "zsh-autosuggestions";
rev = "0e810e5afa27acbd074398eefbe28d13005dbc15";
hash = "sha256-85aw9OM2pQPsWklXjuNOzp9El1MsNb+cIiZQVHUzBnk=";
};
}
{
# https://github.com/hlissner/zsh-autopair
name = "zsh-autopair";
src = fetchFromGitHub {
owner = "hlissner";
repo = "zsh-autopair";
rev = "449a7c3d095bc8f3d78cf37b9549f8bb4c383f3d";
hash = "sha256-3zvOgIi+q7+sTXrT+r/4v98qjeiEL4Wh64rxBYnwJvQ=";
};
}
{
# https://github.com/trystan2k/zsh-tab-title
name = "zsh-tab-title";
src = fetchFromGitHub {
owner = "trystan2k";
repo = "zsh-tab-title";
rev = "9c36ac968fe675edcc181a41b0b8959024a8b6c1";
hash = "sha256-ZEhbQ+yIfCz+vmua7XYBQ4kSVgwoNR8Y4zJyKNypsz0=";
};
}
{
# https://github.com/Freed-Wu/zsh-colorize-functions
name = "zsh-colorize-functions";
src = fetchFromGitHub {
owner = "Freed-Wu";
repo = "zsh-colorize-functions";
rev = "46a299f8f8b1c71867679eaf4f67e30fd2746820";
hash = "sha256-DvqhWgox8v3Km1Rzkg7tEDqJ2zF62K6ILAzlOhUbuCc=";
};
}
{
# https://github.com/Freed-Wu/zsh-help
name = "zsh-help";
src = fetchFromGitHub {
owner = "Freed-Wu";
repo = "zsh-help";
rev = "95cbc114078d8209730e38c72a6fa5859ca0773d";
hash = "sha256-ij+ooXQxV3CmsCN/CrJMicTWvS+9GYHA/1Kuqh5zXIY=";
};
}
{
# https://github.com/dracula/zsh-syntax-highlighting
name = "dracula-zsh-syntax-highlighting";
file = "zsh-syntax-highlighting.sh";
src = fetchFromGitHub {
owner = "dracula";
repo = "zsh-syntax-highlighting";
rev = "09c89b657ad8a27ddfe1d6f2162e99e5cce0d5b3";
hash = "sha256-JrSKx8qHGAF0DnSJiuKWvn6ItQHvWpJ5pKo4yNbrHno=";
};
}
] ++ optionals isDarwin [
{
# https://github.com/MichaelAquilina/zsh-auto-notify
name = "zsh-auto-notify";
src = fetchFromGitHub {
owner = "MichaelAquilina";
repo = "zsh-auto-notify";
rev = "27c07dddb42f05b199319a9b66473c8de7935856";
hash = "sha256-ScBwky33leI8mFMpAz3Ng2Z0Gbou4EWMOAhkcMZAWIc=";
};
}
];
shellAliases =
let
ezaExe = lib.getExe pkgs.eza;
in
{
upa = "nix flake update ~/.config/nixpkgs -v && upn";
ngc = "nix-collect-garbage -d && sudo nix-collect-garbage -d";
nsr = "sudo nix-store --verify --check-contents --repair";
la = "${ezaExe} --long --all --group --header --group-directories-first --sort=type --icons";
lg = "${ezaExe} --long --all --group --header --git";
lt = "${ezaExe} --long --all --group --header --tree --level ";
} // optionalAttrs isDarwin {
tailscale = "/Applications/Tailscale.app/Contents/MacOS/Tailscale";
};
initExtra = /* sh */ ''
# Options
setopt AUTO_CD
setopt AUTO_PUSHD
setopt INTERACTIVE_COMMENTS
# Keymaps
bindkey '^[[1;3C' forward-word # Alt+Right
bindkey '^[[1;3D' backward-word # Alt+Left
# Plugins
zstyle ':completion:*:git-checkout:*' sort false
zstyle ':completion:*:descriptions' format '[%d]'
zstyle ':completion:*' menu no
zstyle ':fzf-tab:*' use-fzf-default-opts yes
ZSH_AUTOSUGGEST_STRATEGY=(completion)
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets cursor)
typeset -gA ZSH_HIGHLIGHT_STYLES
ZSH_TAB_TITLE_ENABLE_FULL_COMMAND=true
ZSH_TAB_TITLE_DEFAULT_DISABLE_PREFIX=true
ZSH_TAB_TITLE_ADDITIONAL_TERMS='wezterm'
AUTO_NOTIFY_THRESHOLD=10
# Path configuration
if [[ -d "$HOME/.bin" ]]; then
path=("$HOME/.bin" $path)
export PATH
fi
() {
local user_functions="$HOME/.zsh/user_functions"
if [[ -d $user_functions ]]; then
typeset -TUg +x FPATH=$user_functions:$FPATH fpath
autoload ''${=$(cd "$user_functions" && echo *)}
fi
local server_functions="$HOME/.zsh/server_functions"
if [[ -d $server_functions ]]; then
typeset -TUg +x FPATH=$server_functions:$FPATH fpath
autoload ''${=$(cd "$server_functions" && echo *)}
fi
}
'';
};
home.file.".zsh/user_functions" = {
source = ./functions;
recursive = true;
};
# Plugin dependencies
programs.bat.enable = true;
}