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       emacs = "emacsclient --create-frame";
 
  13       grep = "grep --color";
 
  14       j = "sudo journalctl -u";
 
  15       jb = "sudo journalctl -b";
 
  16       ju = "sudo journalctl --user -u";
 
  19       ls = "ls --color=tty";
 
  20       md-toc = "grep '^#\\+' --color";
 
  21       mem = "ps -e -orss=,user=,args= | sort -b -k1,1n";
 
  22       mem-top = "smem --sort rss --autosize";
 
  24       nf = "sudo nft list ruleset | less";
 
  25       nix-du-svg = "nix-du | dot -Tsvg >nix-du.svg";
 
  26       nixos-clean = "sudo nix-collect-garbage -d";
 
  27       nixos-history = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system";
 
  28       nixos-rollback = "sudo nixos-rebuild switch --rollback";
 
  29       pass-gen = "tr -d -C A-Za-z0-9_- </dev/urandom | head -c";
 
  31       rot13 = "tr A-Za-z N-ZA-Mn-za-m";
 
  32       rot135 = "tr A-Za-z0-9 N-ZA-Mn-za-m5-90-4";
 
  33       rsync = "rsync --no-inc-recursive --info=progress2 --inplace --partial";
 
  35       st = "sudo systemctl status";
 
  40       theme-black-on-white = "echo -e '\\033]10;black\\007\\033]11;white\\007'";
 
  41       theme-white-on-black = "echo -e '\\033]10;white\\007\\033]11;black\\007'";
 
  42       u = "systemctl --user";
 
  43       ut = "systemctl --user status";
 
  44       w = "watch --color --differences";
 
  45       w1 = "watch --color --differences --interval 1";
 
  46       w10 = "watch --color --differences --interval 10";
 
  47       w5zs = "w5 zpool status";
 
  48       w5 = "watch --color --differences --interval 5";
 
  49       watch = "watch --color --differences";
 
  51       ze = "sudo zpool export";
 
  52       zfs-umount = "zfs-unmount";
 
  53       zi = "sudo zpool import";
 
  55       zlb = "zfs list -t bookmarks";
 
  56       zls = "zfs list -t snap";
 
  62     historyControl = [ "erasedups" "ignorespace" ];
 
  69       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)\$ '';
 
  73       . ${pkgs.complete-alias}/bin/complete_alias
 
  74       complete -F _complete_alias "''${!BASH_ALIASES[@]}"
 
  80       # Disable ctrl-s/ctrl-q flow control
 
  85           ffmpeg -i "$i" -vn -map 0:a -acodec copy "''${i%.*}".audio-only.mkv
 
  90           ffmpeg -i "$i" -vn -map 0:a -c:a libopus -b:a 64k -application voip "''${i%.*}".opus
 
  94         find "$@" -depth -type f -print0 | sort -n -z |
 
  95         xargs -0 -P "$(lscpu --online -p | grep -v "#" | wc -l)" -I {} bash -c '
 
  96             test -e "''${0%.*}".opus ||
 
  97             nice -n 19 ffmpeg -y -i "$0" -map 0:a -b:a 32k -application voip "''${0%.*}".opus
 
 102         then sudo tee /proc/acpi/ibm/fan <<<"level $1"
 
 103         else grep '^\(level\|speed\):' /proc/acpi/ibm/fan
 
 112         tr -d -C 'A-Za-z0-9' </dev/urandom | head -c 25 | xclip
 
 115         device=''${1:-/dev/sda}
 
 116         sudo smartctl -A $device |
 
 118           $0 ~ /Power_On_Hours/ {
 
 120             printf "%s / %d hours / %d days / %.2f years\n",  $2, $10, $10 / 24, $10 / 24 / 365.25
 
 122           $0 ~ /Total_LBAs_Written/ {
 
 128             printf "%s / %s  / %d mb / %.1f gb / %.3f tb\n", $2, $10, mb, gb, tb
 
 129             printf "mean writes per hour / %.2f",  mb/poh
 
 131           $0 ~ /Airflow_Temperature_Cel/ { print $2 " / " $10}
 
 132           $0 ~ /Wear_Leveling_Count/ { printf "%s / %d (%% health)\n", $2, int($4) }
 
 133           $0 ~ /Percentage Used:/ { printf "Percentage_Used / %d\n", int($3) }
 
 136         sed -e "s\$^\$$device @ \$" |
 
 139       stress-mem() { fac="$1"; stress-ng --vm 1 --vm-keep --vm-bytes $(awk "/MemAvailable/{ printf \"%d\n\", \$2 * $fac; }" </proc/meminfo)k; }
 
 140       sysenter() { srv="$1"; shift; nsenter -a -t "$(systemctl show --property MainPID --value "$srv")" "$@"; }
 
 141       systrace() { srv="$1"; shift; strace -f -p "$(systemctl show --property MainPID --value "$srv")" "$@"; }
 
 145         sudo grep -H '^Swap:' /proc/*/smaps 2>/dev/null |
 
 146         while IFS=: read -r file x size x
 
 152           if test "$pid" = "$lastpid"
 
 153           then swap=$(( swap + size ))
 
 155             if test "$swap" -gt 0
 
 156             then printf "%u pid=%u cmd=%s\n" "$swap" "$lastpid" "$(tr '\000' ' ' </proc/"$lastpid"/cmdline)"
 
 158             if test "$pid" = self
 
 169       # Recursively mount not-mounted dataset,
 
 170       # loading their keys if needed.
 
 175         for d in $(zfs list -rH -o name "$@"); do
 
 176           mountpoint /mnt/"$d" 2>/dev/null ||
 
 177           sudo zfs mount -l "$d"
 
 180       # Recursively unmount dataset,
 
 181       # unloading their keys.
 
 182       zfs-unmount () { sudo zfs unmount -u "$@"; }
 
 184       # Create bookmarks for all the snapshots of the given datasets.
 
 185       # Bookmarks are only useful on source datasets
 
 186       # But syncoid --create-bookmark only creates
 
 187       # a bookmark for the latest snapshot,
 
 188       # possibly leaving the *_daily or *_monthly snapshots without a bookmark.
 
 189       zfs-fix-bookmarks () {
 
 194           for s in $(zfs list -Hrpt snapshot -o name "$d"); do
 
 195             zfs bookmark "$s" "''${s//@/#}"
 
 200       # Restore the inheritance of encryptionroot,
 
 201       # usually broken by zfs send --raw.
 
 202       # Note that it needs to decrypt the datasets.
 
 203       zfs-fix-encryptionroot () {
 
 206         for d in $(zfs list -rHo name "$1" | tail -n +2); do
 
 208           test "$(zfs get -Ho value encryptionroot $d)" = "$1" ||
 
 209           zfs change-key -li "$d"
 
 213       # Recursively remove all the snapshots of given datasets
 
 214       zfs-destroy-snapshots () {
 
 217           zfs list -t snapshot -rHo name "$d" |
 
 218           xargs --no-run-if-empty -L1 zfs destroy
 
 225   programs.direnv.enableBashIntegration = true;
 
 226   #programs.broot.enableBashIntegration = true;
 
 227   programs.readline = {
 
 228     enable = mkDefault true;
 
 229     includeSystemConfig = true;
 
 232       "\\e[A" = "history-search-backward";
 
 233       "\\e[B" = "history-search-forward";
 
 234       "\\eOA" = "history-search-backward";
 
 235       "\\eOB" = "history-search-forward";
 
 237       # Ctrl-Left/Ctrl-Right
 
 238       "\\e[1;5C" = "forward-word";
 
 239       "\\e[1;5D" = "backward-word";
 
 240       "\\e[5C" = "forward-word";
 
 241       "\\e[5D" = "backward-word";
 
 242       "\\e\\e[C" = "forward-word";
 
 243       "\\e\\e[D" = "backward-word";
 
 246       "\\e[1~" = "beginning-of-line";
 
 247       "\\e[4~" = "end-of-line";
 
 250       "\\e[3~" = "delete-char";
 
 251       "\\e[2~" = "quoted-insert";
 
 253       # For non RH/Debian xterm, can't hurt for RH/Debian xterm
 
 254       "\\eOF" = "end-of-line";
 
 255       "\\eOH" = "beginning-of-line";
 
 257       # For freebsd console
 
 258       "\\e[F" = "end-of-line";
 
 259       "\\e[H" = "beginning-of-line";
 
 262       "\\e[7~" = "beginning-of-line";
 
 263       "\\e[8~" = "end-of-line";
 
 264       "\\eOc" = "forward-word";
 
 265       "\\eOd" = "backward-word";
 
 270       input-meta = mkDefault true;
 
 271       output-meta = mkDefault true;
 
 272       colored-completion-prefix = mkDefault true;
 
 273       colored-stats = mkDefault true; # Note that this may cause completion text blink in some terminals (e.g. xterm).
 
 274       echo-control-characters = mkDefault true;
 
 275       mark-symlinked-directories = mkDefault true;
 
 276       menu-complete-display-prefix = mkDefault true;
 
 277       show-all-if-ambiguous = mkDefault true;
 
 278       show-all-if-unmodified = mkDefault true;
 
 279       visible-stats = mkDefault false; # Append char to indicate type
 
 280       enable-bracketed-paste = mkDefault true;