dotfiles/programs/zsh/default.nix
2024-11-15 22:19:26 +01:00

127 lines
3.8 KiB
Nix

{ pkgs, lib, ... }:
with builtins;
with lib.attrsets;
let
scripts = (import ./scripts.nix) pkgs;
aliases = with scripts;
{
"cp-mov" = cp-media "mov" "movies";
"cp-ser" = cp-media "ser" "shows";
"cp-ani" = cp-media "ani" "anime";
"p" = calc;
"s" = "systemctl";
"j" = "journalctl";
"ju" = "journalctl -u";
"jfu" = "journalctl -fu";
"ls" = "${pkgs.eza}/bin/eza --git";
"ll" = "${pkgs.eza}/bin/eza --git";
"lt" = "${pkgs.eza}/bin/eza --long --tree -L 3";
"open" = "${pkgs.xdg-utils}/bin/xdg-open";
"cb" = "${pkgs.wl-clipboard-rs}/wl-copy";
"pull" = "${pkgs.git}/bin/git pull";
"push" = "${pkgs.git}/bin/git push";
"commit" = "${pkgs.git}/bin/git commit";
"add" = "${pkgs.git}/bin/git add";
"patch" = "${pkgs.git}/bin/git add -p";
"amend" = "${pkgs.git}/bin/git commit --amend";
"log" = "${pkgs.git}/bin/git log --all --graph --decorate";
"status" = "${pkgs.git}/bin/git status";
"checkout" = "${pkgs.git}/bin/git checkout";
"rebase" = "${pkgs.git}/bin/git rebase";
"stash" = "${pkgs.git}/bin/git stash";
};
# extracting any compressed format
extract = ''
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) ${pkgs.gnutar}/bin/tar xjf $1 ;;
*.tar.zst) ${pkgs.gnutar}/bin/tar --zstd xf $1 ;;
*.tar.gz) ${pkgs.gnutar}/bin/tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) ${pkgs.gnutar}/bin/tar xf $1 ;;
*.tbz2) ${pkgs.gnutar}/bin/tar xjf $1 ;;
*.tgz) ${pkgs.gnutar}/bin/tar xzf $1 ;;
*.zip) ${pkgs.unzip}/bin/unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*.tar.xz) ${pkgs.gnutar}/bin/tar xJf $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
'';
in
{
programs.zsh = {
enable = true;
enableCompletion = true;
syntaxHighlighting.enable = true;
dotDir = ".config/zsh";
completionInit = ''
autoload -Uz compinit
if [[ -n ''${ZDOTDIR}/.zcompdump(#qN.mh+24) ]]; then
compinit;
else
compinit -C;
fi;
'';
initExtra = ''
source "${pkgs.grml-zsh-config}/etc/zsh/zshrc"
export FZF_DEFAULT_COMMAND="${pkgs.ripgrep}/bin/rg --files --follow"
source "${pkgs.fzf}/share/fzf/key-bindings.zsh"
source "${pkgs.fzf}/share/fzf/completion.zsh"
eval "$(${pkgs.zoxide}/bin/zoxide init zsh)"
eval "$(${pkgs.atuin}/bin/atuin init zsh)"
eval "$(${pkgs.direnv}/bin/direnv hook zsh)"
function zvm_config() {
ZVM_READKEY_ENGINE=$ZVM_READKEY_ENGINE_NEX
ZVM_LINE_INIT_MODE=$ZVM_MODE_INSERT
ZVM_ESCAPE_KEYTIMEOUT=0.03
}
source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh
${extract}
${foldl' (a: b: a + "\n" + b) ""
(mapAttrsToList (name: value: ''alias ${name}="${value}"'') aliases)}
function t() {
cd "$(${pkgs.custom.t}/bin/t-rs $@ | tail -n 1)"
}
function temp() {
t $@
}
function rs() {
cd "$(${pkgs.custom.t}/bin/t-rs $@ | tail -n 1)"
cargo init . --bin --name $(basename "$PWD")
vim src/main.rs
}
# path
path() {
export PATH="$1:$PATH"
}
path "$HOME/.cargo/bin"
path "$HOME/.local/bin"
path "$HOME/Documents/scripts"
path "$HOME/.local/share/JetBrains/Toolbox/scripts"
# http://bewatermyfriend.org/p/2013/001/
# export NEWLINE=$'\n'
# zstyle ':prompt:grml:*:items:percent' pre "''${NEWLINE}"
'';
};
}