universe/modules/global/shell.nix

234 lines
5.3 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
ifSudo = lib.mkIf config.security.sudo.enable;
ifSudo' = text: if config.security.sudo.enable then "sudo ${text}" else text;
in
{
programs = {
fish.enable = true;
zsh.enable = true;
};
universe.shellAliases = {
uni = "universe-cli";
# quick cd
".." = "cd ..";
"..." = "cd ../..";
"...." = "cd ../../..";
"....." = "cd ../../../..";
# ls
ls = "${lib.getExe pkgs.eza}"; # HACK: Bypasses PATH so it works in nix develop shell
la = "ls --long --no-filesize --no-permissions --no-user --icons --git";
lat = "la --tree -I .git";
l = "la --all";
lt = "l --tree -I .git";
le = "l --extended";
lg = "l --git-ignore";
lgt = "lt --git-ignore";
ll = "ls --long --all --icons --group";
llt = "ll --tree -I .git";
lle = "ll --extended";
llg = "ll --git-ignore";
llgt = "llt --git-ignore";
# erdtree
erd = "erd --human --hidden --no-git";
et = "erd";
tree = "erd --suppress-size --layout inverted --sort name";
# git
g = "git";
gcd = "cd $(git root || echo \".\")";
ucd = "cd $(uni cd || echo \".\")";
# grep
grep = "rg";
gi = "grep -i";
# TODO: Investigate psgrep
psg = "ps x | head -n -2 | gi -e 'PID\\s+TTY\\s+STAT\\s+TIME\\s+COMMAND' -e ";
psag = "ps ax | head -n -2 | gi -e 'PID\\s+TTY\\s+STAT\\s+TIME\\s+COMMAND' -e ";
# internet ip
myip = "echo $(curl -s ipecho.net/plain)";
# systemd
ctl = "systemctl";
stl = ifSudo' "systemctl";
utl = "systemctl --user";
ut = "utl start";
un = "utl stop";
ur = "utl restart";
up = "stl start";
dn = "stl stop";
rt = "stl restart";
jtl = "journalctl";
# Miscellaneous
mnt = ifSudo' "mount";
umnt = ifSudo' "umount";
bmnt = ifSudo "mnt -o bind,X-mount.mkdir";
ts = ifSudo' "tailscale";
dd = "dd status=progress";
du = "du -h";
cat = "bat --paging=never";
catp = "bat --paging=always";
jh = "cd ~ && j";
gj = "gcd && j";
edit = "$EDITOR";
e = "edit";
ei = "editi";
watch = "watch -n 0.5 ";
lpath = "echo \"$PATH\" | tr \":\" \"\n\"";
timestamp = "date +%s -d";
neofetch = "neowofetch";
};
universe.packages = [
(pkgs.writeScriptBin "editi" ''
if [[ $# -eq 0 ]] then
fd -H -t f | fzf --filepath-word --multi | xargs $EDITOR
else
fd -H -t f | fzf --filepath-word --multi -1 -q "$*" | xargs $EDITOR
fi
'')
];
universe.variables = {
FZF_DEFAULT_OPTS = "--extended";
};
environment.variables = config.universe.variables;
environment.interactiveShellInit = ''
if [[ "$(basename "$(readlink "/proc/$PPID/exe")")" == ".kitty-wrapped" ]]; then
PATH=$(echo "$PATH" | sed 's/\/nix\/store\/[a-zA-Z._0-9+-]\+\/bin:\?//g' | sed 's/:$//')
fi
j() {
if [[ $# -eq 0 ]] then
\builtin cd -- "$(fd -H -t d | fzf --filepath-word)"
else
\builtin cd -- "$(fd -H -t d | fzf --filepath-word -1 -q "$*")"
fi
}
mktmp() {
if [ "$1" != "" ]; then
dirspec="$1.XXX"
else
dirspec="tmp.XXX"
fi
\builtin cd $(mktemp -t -d "$dirspec")
}
mktmpunzip() {
dir=$(mktemp -t -d unzip.XXX)
if ! file=$(realpath -e "$1"); then
echo "error: file does not exist"
return 1
fi
shift 1
unzip "$file" "$@" -d "$dir"
\builtin cd $dir
mv $file .
}
mktmpclone() {
location="$1"
if [ "$2" != "" ]; then
dirspec="$2.XXX"
shift 2
else
dirspec="clone.XXX"
shift 1
fi
if ! dir=$(mktemp -t -d "$dirspec"); then
echo "error: couldn't create temp directory"
return 1
fi
git clone "$location" "$dir" "$@"
\builtin cd "$dir"
}
censor-audio() {
file="$1"
shift 1
if [ 2 -gt $# ]; then
echo "Not enough arguments"
exit 1
fi
filters=""
while [[ "$1" =~ ^"[0-9]+\.?[0-9]*-[0-9]+\.?[0-9]*"$ ]]; do
if [ "$filters" != "" ]; then
filters+=", "
fi
filters+="volume=enable='between(t,''${1/-/,})':volume=0"
shift 1
done
ffmpeg -i "$file" -vcodec copy -af "$filters" "$@"
}
disget() {
curl "$1" --output ''${$(basename "$1")%%\?*}
}
disgetconv() {
url="$1"
tmpFileName="''${$(basename "$url")%%\?*}.XXX"
tmpFile=$(mktemp -t $tmpFileName)
curl "$url" --output "$tmpFile"
shift 1
magick "$tmpFile" "$@"
}
disgetconvv() {
url="$1"
tmpFileName="''${$(basename "$url")%%\?*}.XXX"
tmpFile=$(mktemp -t $tmpFileName)
curl "$url" --output "$tmpFile"
shift 1
ffmpeg -i "$tmpFile" "$@"
}
'';
environment.shellAliases = config.universe.shellAliases // {
# sudo
sudo = ifSudo "sudo -E ";
s = ifSudo "sudo ";
si = ifSudo "sudo -i";
se = ifSudo "sudoedit";
# Miscellaneous
acat = "mpv --no-audio-display";
vcat = "mpv";
lsdisk = "lsblk -o name,size,mountpoints,fstype,label,fsavail,fsuse%";
lsdisks = "lsblk -o name,size,fstype,label,uuid,fsavail,fsuse%";
# yt-dlp
yt-m4a = ''yt-dlp -f "bestaudio[ext=m4a]" -o "%(title)s.%(ext)s"'';
yt-mp4 = ''yt-dlp -f "best[ext=mp4]" -o "%(title)s.%(ext)s"'';
};
}