5     enable = mkDefault true;
 
   6     enableCompletion = mkDefault true;
 
   8       afk = "xset s activate dpms force off";
 
   9       black-on-white = "echo -e '\\033]11;black\\007\\033]10;white\\007'";
 
  12       d = "sudo resolvectl";
 
  13       dust = "dust --bars-on-right --full-paths";
 
  14       emacs = "emacsclient --create-frame";
 
  15       grep = "grep --color";
 
  16       du = "du --apparent-size"; # ExplanationNote: shows the size __before__ ZFS' compression.
 
  18       jnl-b = "sudo journalctl -b";
 
  19       jnl-f = "sudo journalctl -f -u";
 
  20       jnl-f200 = "sudo journalctl -f -n 200 -u";
 
  21       jnl-ftoday = "sudo journalctl -f --since today -u";
 
  22       lu = "journalctl --user -u";
 
  25       ls = "ls --color=tty";
 
  26       lst = "ls --sort=time --reverse -1";
 
  27       md-toc = "grep '^#\\+' --color";
 
  28       mem = "ps -e -orss=,user=,args= | sort -b -k1,1n";
 
  29       mem-top = "smem --sort rss --autosize";
 
  31       n = "sudo networkctl";
 
  32       nf = "sudo nft list ruleset | less";
 
  33       nix-du-svg = "nix-du | dot -Tsvg >nix-du.svg";
 
  34       nixos-clean = "sudo nix-collect-garbage -d";
 
  35       nixos-history = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system";
 
  36       nixos-rollback = "sudo nixos-rebuild switch --rollback";
 
  37       nt = "sudo networkctl status";
 
  38       pass-gen = "tr -d -C A-Za-z0-9_- </dev/urandom | head -c";
 
  40       rot13 = "tr A-Za-z N-ZA-Mn-za-m";
 
  41       rot135 = "tr A-Za-z0-9 N-ZA-Mn-za-m5-90-4";
 
  42       rsync = "rsync --no-inc-recursive --info=progress2 --inplace --partial";
 
  44       sr = "sudo systemctl restart";
 
  45       ssh-unknown = "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null";
 
  46       st = "sudo systemctl status";
 
  47       smt-on = "echo on | sudo tee /sys/devices/system/cpu/smt/control";
 
  48       smt-off = "echo off | sudo tee /sys/devices/system/cpu/smt/control";
 
  53       theme-black-on-white = "echo -e '\\033]10;black\\007\\033]11;white\\007'";
 
  54       theme-white-on-black = "echo -e '\\033]10;white\\007\\033]11;black\\007'";
 
  55       u = "systemctl --user";
 
  57       ur = "systemctl --user restart";
 
  58       ut = "systemctl --user status";
 
  59       w = "watch --color --differences";
 
  60       w1 = "watch --color --differences --interval 1";
 
  61       w10 = "watch --color --differences --interval 10";
 
  62       w5 = "watch --color --differences --interval 5";
 
  63       watch = "watch --color --differences";
 
  65       ze = "sudo zpool export";
 
  66       zfs-umount = "zfs-unmount";
 
  67       zi = "sudo zpool import";
 
  69       zlb = "zfs list -t bookmarks";
 
  70       zls = "zfs list -t snap";
 
  74       zs5 = "w5 zpool status";
 
  87       PS1 = ''\[\033[1;32m\]\[\e]0;\u@\h: \w\a\]\W\[\033[0m\] \$(e=\$?; if [ \$e != 0 ]; then echo '\[\e[0;91m\]'\$e'\[\e[0m\]'; fi)\$ '';
 
  88       # More throughput than chacha20-poly1305@openssh.com
 
  89       # on hardware with AES acceleration.
 
  90       RSYNC_RSH = "ssh -c aes128-gcm@openssh.com,chacha20-poly1305@openssh.com";
 
  94       . ${pkgs.complete-alias}/bin/complete_alias
 
  95       complete -F _complete_alias "''${!BASH_ALIASES[@]}"
 
 101       # Disable ctrl-s/ctrl-q flow control
 
 106           ffmpeg -i "$i" -vn -map 0:a -acodec copy "''${i%.*}".audio-only.mkv
 
 111           ffmpeg -i "$i" -vn -map 0:a -c:a libmp3lame -qscale:a 3 "''${i%.*}".mp3
 
 116           ffmpeg -i "$i" -vn -map 0:a -c:a libopus -b:a 64k -application voip "''${i%.*}".opus
 
 120         find "$@" -depth -type f -print0 | sort -n -z |
 
 121         xargs -0 -P "$(lscpu --online -p | grep -v "#" | wc -l)" -I {} bash -c '
 
 122             test -e "''${0%.*}".opus ||
 
 123             nice -n 19 ffmpeg -y -i "$0" -map 0:a -b:a 32k -application voip "''${0%.*}".opus
 
 128         then sudo tee /proc/acpi/ibm/fan <<<"level $1"
 
 129         else grep '^\(level\|speed\):' /proc/acpi/ibm/fan
 
 138         tr -d -C 'A-Za-z0-9' </dev/urandom | head -c 25 | xclip
 
 141         device=''${1:-/dev/sda}
 
 142         sudo smartctl -A $device |
 
 144           $0 ~ /Power_On_Hours/ {
 
 146             printf "%s / %d hours / %d days / %.2f years\n",  $2, $10, $10 / 24, $10 / 24 / 365.25
 
 148           $0 ~ /Total_LBAs_Written/ {
 
 154             printf "%s / %s  / %d mb / %.1f gb / %.3f tb\n", $2, $10, mb, gb, tb
 
 155             printf "mean writes per hour / %.2f",  mb/poh
 
 157           $0 ~ /Airflow_Temperature_Cel/ { print $2 " / " $10}
 
 158           $0 ~ /Wear_Leveling_Count/ { printf "%s / %d (%% health)\n", $2, int($4) }
 
 159           $0 ~ /Percentage Used:/ { printf "Percentage_Used / %d\n", int($3) }
 
 162         sed -e "s\$^\$$device @ \$" |
 
 165       stress-mem() { fac="$1"; stress-ng --vm 1 --vm-keep --vm-bytes $(awk "/MemAvailable/{ printf \"%d\n\", \$2 * $fac; }" </proc/meminfo)k; }
 
 166       sysenter() { srv="$1"; shift; nsenter -a -t "$(systemctl show --property MainPID --value "$srv")" "$@"; }
 
 167       systrace() { srv="$1"; shift; strace -f -p "$(systemctl show --property MainPID --value "$srv")" "$@"; }
 
 171         sudo grep -H '^Swap:' /proc/*/smaps 2>/dev/null |
 
 172         while IFS=: read -r file x size x
 
 178           if test "$pid" = "$lastpid"
 
 179           then swap=$(( swap + size ))
 
 181             if test "$swap" -gt 0
 
 182             then printf "%u pid=%u cmd=%s\n" "$swap" "$lastpid" "$(tr '\000' ' ' </proc/"$lastpid"/cmdline)"
 
 184             if test "$pid" = self
 
 195       # Recursively mount not-mounted dataset,
 
 196       # loading their keys if needed.
 
 200         for d in $(zfs list -rH -o name "$@"); do
 
 201           mountpoint /mnt/"$d" 2>/dev/null ||
 
 202           sudo zfs mount -l "$d"
 
 206       # Recursively unmount dataset,
 
 207       # unloading their keys.
 
 208       zfs-unmount () { sudo zfs unmount -u "$@"; }
 
 210       # Create bookmarks for all the snapshots of the given datasets.
 
 211       # Bookmarks are only useful on source datasets
 
 212       # But syncoid --create-bookmark only creates
 
 213       # a bookmark for the latest snapshot,
 
 214       # possibly leaving the *_daily or *_monthly snapshots without a bookmark.
 
 215       zfs-fix-bookmarks () {
 
 220           for s in $(zfs list -Hrpt snapshot -o name "$d"); do
 
 221             sudo zfs bookmark "$s" "''${s//@/#}"
 
 226       # Restore the inheritance of encryptionroot,
 
 227       # usually broken by zfs send --raw.
 
 228       # Note that it needs to decrypt the datasets.
 
 229       zfs-fix-encryptionroot () {
 
 232         for d in $(zfs list -rHo name "$1" | tail -n +2); do
 
 234           test "$(zfs get -Ho value encryptionroot $d)" = "$1" ||
 
 235           sudo zfs change-key -li "$d"
 
 239       # Recursively remove all the snapshots of given datasets
 
 240       zfs-destroy-snapshots () {
 
 243           zfs list -t snapshot -rHo name "$d" |
 
 244           sudo xargs --no-run-if-empty -L1 zfs destroy
 
 251     (pkgs.writeShellScriptBin "ffmpeg-split" (lib.readFile bash/ffmpeg-split.sh))
 
 253   #programs.broot.enableBashIntegration = true;
 
 254   programs.readline = {
 
 255     enable = mkDefault true;
 
 256     includeSystemConfig = true;
 
 259       "\\e[A" = "history-search-backward";
 
 260       "\\e[B" = "history-search-forward";
 
 261       "\\eOA" = "history-search-backward";
 
 262       "\\eOB" = "history-search-forward";
 
 264       # Ctrl-Left/Ctrl-Right
 
 265       "\\e[1;5C" = "forward-word";
 
 266       "\\e[1;5D" = "backward-word";
 
 267       "\\e[5C" = "forward-word";
 
 268       "\\e[5D" = "backward-word";
 
 269       "\\e\\e[C" = "forward-word";
 
 270       "\\e\\e[D" = "backward-word";
 
 273       "\\e[1~" = "beginning-of-line";
 
 274       "\\e[4~" = "end-of-line";
 
 277       "\\e[3~" = "delete-char";
 
 278       "\\e[2~" = "quoted-insert";
 
 280       # For non RH/Debian xterm, can't hurt for RH/Debian xterm
 
 281       "\\eOF" = "end-of-line";
 
 282       "\\eOH" = "beginning-of-line";
 
 284       # For freebsd console
 
 285       "\\e[F" = "end-of-line";
 
 286       "\\e[H" = "beginning-of-line";
 
 289       "\\e[7~" = "beginning-of-line";
 
 290       "\\e[8~" = "end-of-line";
 
 291       "\\eOc" = "forward-word";
 
 292       "\\eOd" = "backward-word";
 
 297       input-meta = mkDefault true;
 
 298       output-meta = mkDefault true;
 
 299       colored-completion-prefix = mkDefault true;
 
 300       colored-stats = mkDefault true; # Note that this may cause completion text blink in some terminals (e.g. xterm).
 
 301       echo-control-characters = mkDefault true;
 
 302       mark-symlinked-directories = mkDefault true;
 
 303       menu-complete-display-prefix = mkDefault true;
 
 304       show-all-if-ambiguous = mkDefault true;
 
 305       show-all-if-unmodified = mkDefault true;
 
 306       visible-stats = mkDefault false; # Append char to indicate type
 
 307       enable-bracketed-paste = mkDefault true;