fant0men

My .bashrc

Oct 18th, 2019 (edited)
582
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 20.86 KB | None | 0 0
  1. # /home/user/.bashrc
  2.  
  3. PATH="${HOME}/.local/bin:${HOME}/bin:${PATH}"
  4.  
  5. # Some variables that change how ~/.bash_history works.
  6. PROMPT_COMMAND='history -a'
  7. HISTCONTROL="ignoredups:erasedups"
  8. HISTSIZE=10000
  9.  
  10. LD_LOADER_PATH="/usr/local/lib:${LD_LOADER_PATH}"
  11.  
  12. # Creates a backup of the $IFS variable.
  13. IFS_bak="$IFS"
  14.  
  15. # Creates a pause message, for read / sudo prompts.
  16. pause_msg='Press Enter to continue...'
  17.  
  18. # Declaring some aliases...
  19.  
  20. alias dnf_files='dnf repoquery -l'
  21. alias dnf_groups_all='dnf group list --available'
  22. alias dnf_groups='dnf group list --installed'
  23. alias dnf_list='rpm -qa | sort'
  24. alias which_pkg='rpm -qf'
  25. alias cue_verify='whipper image verify'
  26. alias burn_img='cdrdao write --device /dev/sr0 --speed 2'
  27. alias read_img='cdrdao read-cd --device /dev/sr0 --read-raw --datafile'
  28. alias shellcheck='shellcheck -s bash'
  29. alias mate_restart='killall -15 mate-panel'
  30. alias kill_wine='wineserver --kill'
  31. alias temp='watch -n 2 sensors'
  32. alias temp_config='sudo sensors-detect'
  33. alias cpu_clock='watch -n.1 "grep \"^[c]pu MHz\" /proc/cpuinfo"'
  34. alias ps_handbrake='ps -C HandBrakeCLI -o pid,tty,stat,etime,cmd'
  35. alias tribler="${HOME}/bin/tribler/src/tribler.sh"
  36. alias freenet="${HOME}/freenet/run.sh"
  37. alias ipredator="${HOME}/bin/ipredator.sh"
  38. alias io_stats='sudo iotop -a -o -P'
  39. alias frag_level_xfs='xfs_db -c frag -r'
  40.  
  41. alias pulse_reset='pactl set-sink-volume 0 100%'
  42. alias pipewire_reset='systemctl --user restart pipewire pipewire-pulse'
  43.  
  44. alias irc_logs="cd ${HOME}/.local/share/konversation/logs"
  45.  
  46. alias import_flac="sudo ${HOME}/bin/import.pl ${HOME}/Music/FLAC"
  47. alias fix_flac_tags="sudo ${HOME}/bin/replaygain.pl ${HOME}/Music/FLAC"
  48.  
  49. alias check_smart='sudo smartctl -a'
  50. alias drop_cache='sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"'
  51.  
  52. alias discord='${HOME}/bin/Discord/Discord'
  53. alias tor-browser='${HOME}/bin/tor-browser/Browser/start-tor-browser'
  54. alias jdownloader='${HOME}/bin/jd2/JDownloader2'
  55. alias read_log='journalctl -r'
  56. alias read_log2='dmesg -H'
  57. alias list_services='systemctl --all list-units'
  58. alias gedit='gnome-text-editor'
  59. alias su_gedit='sudo gnome-text-editor'
  60. alias irssi="irssi -c EFnet --config=${HOME}/.irssi2/config --home=~/.irssi2"
  61. alias is_wayland="echo $XDG_SESSION_TYPE"
  62.  
  63. alias arch_pack='packer.sh a'
  64. alias arch_unpack='packer.sh x'
  65. alias arch_test='packer.sh t'
  66. alias arch_list='packer.sh l'
  67. alias stop_handbrake='stop_handbrake.sh'
  68. alias start_handbrake='start_handbrake.sh'
  69. alias stop_ffmpeg='sudo killall -20 ffmpeg'
  70. alias start_ffmpeg='sudo killall -18 ffmpeg'
  71. alias lower_volume='lower_volume_pw.sh'
  72.  
  73. alias wine32="WINEPREFIX=${HOME}/.wine32 wine start /unix"
  74. alias wine32cfg="WINEARCH=win32 WINEPREFIX=${HOME}/.wine32 winecfg"
  75.  
  76. alias redshift='redshift -l 57.70:11.97'
  77.  
  78. alias wolf3d='wolf4sdl-registered-id --res 1600 1000'
  79. alias sod='wolf4sdl-spear --res 1600 1000'
  80.  
  81. # alias quake='darkplaces-sdl -game quake15'
  82. alias quake='darkplaces-sdl'
  83.  
  84. # alias prboom-plus='/usr/local/games/prboom-plus'
  85.  
  86. alias rott='rott-registered fullscreen resolution 800x600'
  87.  
  88. alias red_eclipse="${HOME}/SSD/redeclipse-1.6.0/redeclipse.sh"
  89.  
  90. alias daikatana="${HOME}/SSD/Daikatana/start"
  91.  
  92. alias doom64ex="${HOME}/SSD/doom64ex/doom64ex"
  93.  
  94. # Declaring some regexes...
  95.  
  96. declare no_ext ext
  97. declare -A regex
  98.  
  99. regex[blank]='^[[:blank:]]*(.*)[[:blank:]]*$'
  100. regex[du]='^([[:digit:]]+)M([[:blank:]]+)(.*)$'
  101. regex[path]='^(.*[\\\/])(.*)$'
  102. regex[fn]='^(.*)\.([^.]*)$'
  103. regex[tar]='^\.tar\.[^.]*$'
  104. regex[dar]='^\.[0-9]+\.dar$'
  105.  
  106. regex[num]='^[0-9]+$'
  107.  
  108. regex[720p]='\(([0-9]{3,4})p_h\.264-aac\)'
  109. regex[1080p]='\(([0-9]{3,4})p_([0-9]{1,2})fps_(h264|av1)-([0-9]{2,3})kbit_(aac|opus)\)'
  110.  
  111. regex[bin_backup]='bin_[0-9]{4}-[0-9]{2}-[0-9]{2}\.tar\.xz'
  112. regex[opensub]='.*[[:alpha:]]{3}.[[:digit:]]cd.\([[:digit:]]+\)( \([[:digit:]]+\))*.zip'
  113.  
  114. # Declaring some functions...
  115.  
  116. mame () {
  117.     declare cwd
  118.  
  119.     cwd="$PWD"
  120.  
  121.     cd "${HOME}/.mame"
  122.  
  123.     /usr/bin/mame
  124.  
  125.     cd "$cwd"
  126. }
  127.  
  128. # Creates a function, called 'gzdoom', which will run the GZDoom
  129. # Flatpak (with arguments).
  130. gzdoom () {
  131.     flatpak run org.zdoom.GZDoom "$@"
  132. }
  133.  
  134. duke3d () {
  135.     declare cwd
  136.  
  137.     cwd="$PWD"
  138.  
  139.     cd "${HOME}/SSD/eduke32/bin"
  140.     ./eduke32
  141.  
  142.     cd "$cwd"
  143. }
  144.  
  145. ignition () {
  146.     declare cwd
  147.  
  148.     cwd="$PWD"
  149.  
  150.     cd "${HOME}/SSD/ignition"
  151. # wine 'ign_3dfx.exe'
  152. # ./start.sh
  153.     dosbox -userconf -conf "dosbox_single.conf"
  154.  
  155.     cd "$cwd"
  156. }
  157.  
  158. tmnt_palooza () {
  159.     declare cwd
  160.  
  161.     cwd="$PWD"
  162.  
  163.     cd "${HOME}/SSD/TMNT Rescue-Palooza 1.1.1"
  164.     wine 'TMNT_Rescue_Palooza.exe'
  165.  
  166.     cd "$cwd"
  167. }
  168.  
  169. cube2 () {
  170.     cd "${HOME}/SSD/sauerbraten"
  171.  
  172.     ./sauerbraten_unix
  173. }
  174.  
  175. doom1 () {
  176. # sed --in-place 's/doom.*\.wad/doom.wad/'
  177. # ${HOME}/.prboom-plus/prboom-plus.cfg
  178.     prboom-plus -iwad "${HOME}/Documents/DOOM/doom.wad"
  179. }
  180.  
  181. doom2 () {
  182. # sed --in-place 's/doom.*\.wad/doom2.wad/'
  183. # ${HOME}/.prboom-plus/prboom-plus.cfg
  184.     prboom-plus -iwad "${HOME}/Documents/DOOM/doom2.wad"
  185. }
  186.  
  187. allupgrade () {
  188.     sudo bash <<UPGRADE
  189. dnf --assumeyes --best --allowerasing upgrade
  190. dnf --assumeyes --best --allowerasing distro-sync
  191. dnf --assumeyes autoremove
  192. dnf --assumeyes clean all
  193. flatpak update
  194. UPGRADE
  195. }
  196.  
  197. no_reboot () {
  198.     sudo bash <<UPGRADE
  199. dnf --assumeyes --best --allowerasing --exclude="kernel*" --exclude="systemd*" upgrade
  200. dnf --assumeyes autoremove
  201. dnf --assumeyes clean all
  202. flatpak update
  203. systemctl daemon-reload
  204. UPGRADE
  205. }
  206.  
  207. renice_pid () {
  208.     declare pid
  209.  
  210.     if [[ ! $1 =~ ${regex[num]} ]]; then
  211.         return
  212.     fi
  213.  
  214.     pid="$1"
  215.  
  216.     sudo bash <<RENICE
  217. renice -n -20 -p "$pid"
  218. RENICE
  219. }
  220.  
  221. brktext () {
  222.     tr "[[:punct:]]" " " <"$1" | tr "\n" " " | sed 's/  */ /g'
  223. }
  224.  
  225. clntext () {
  226.     tr -d "[[:digit:]]" <"$1" | sed -e 's/  */ /g' -e 's/^ *//g' -e 's/ *$//g'
  227. }
  228.  
  229. searchtxt () {
  230.     find "${HOME}/Documents" -iname "*.txt" | while read txt; do grep -iH "$1" "$txt"; done
  231. }
  232.  
  233. searchodt () {
  234.     find "${HOME}/Documents" -iname "*.rtf" | while read txt; do grep -iH "$1" "$txt"; done
  235.     find "${HOME}/Documents" -iname "*.doc" | while read txt; do grep -iH "$1" "$txt"; done
  236.     find "${HOME}/Documents" -iname "*.odt" | while read txt; do grep -iH "$1" "$txt"; done
  237. }
  238.  
  239. find_cfg () {
  240.     declare dn
  241.     declare -a names dirs files
  242.  
  243.     mapfile -t names < <(printf '%s\n' "${@,,}" | sort -u)
  244.  
  245.     mapfile -t dirs < <(find "$HOME" -mindepth 1 -maxdepth 1 -type d -iname ".*")
  246.  
  247.     for (( i = 0; i < ${#dirs[@]}; i++ )); do
  248.         dn="${dirs[${i}]}"
  249.  
  250.         for name in "${names[@]}"; do
  251.             mapfile -t files < <(find "$dn" -iname "*${name}*")
  252.  
  253.             if [[ ${#files[@]} -gt 0 ]]; then
  254.                 printf '%s\n' "${files[@]}"
  255.             fi
  256.         done
  257.     done | sort -u
  258. }
  259.  
  260. find_old_cfg () {
  261.     declare date_limit date_fn dn fn
  262.     declare -a dirs files old
  263.  
  264.     date_limit=$(date --date=2020-01-01 '+%s')
  265.  
  266.     mapfile -t dirs < <(find "$HOME" -mindepth 1 -maxdepth 1 -type d -iname ".*")
  267.  
  268.     for (( i = 0; i < ${#dirs[@]}; i++ )); do
  269.         dn="${dirs[${i}]}"
  270.  
  271.         mapfile -t files < <(find "$dn" -type f)
  272.  
  273.         for (( j = 0; j < ${#files[@]}; j++ )); do
  274.             fn="${files[${j}]}"
  275.  
  276.             date_fn=$(stat -c '%Y' "$fn")
  277.  
  278.             if [[ $date_fn -lt $date_limit ]]; then
  279.                 old+=("$fn")
  280.             fi
  281.         done
  282.     done
  283.  
  284.     printf '%s\n' "${old[@]}"
  285. }
  286.  
  287. find_double () {
  288.     declare fn bn
  289.  
  290.     if [[ $# -ne 2 ]]; then
  291.         return
  292.     fi
  293.  
  294.     ls -1 "$1" | while read fn; do
  295.         bn=$(basename "$fn")
  296.         find "$2" -maxdepth 1 -name "$bn"
  297.     done
  298. }
  299.  
  300. find_all () {
  301.     if [[ $# -eq 0 ]]; then
  302.         return
  303.     fi
  304.  
  305.     declare cmd names_str
  306.     declare -a names
  307.  
  308.     for name in "$@"; do
  309.         names+=( "\"$(sed -E 's/([[:blank:]])/\\\1/g' <<<"$name")\"" )
  310.     done
  311.  
  312.     find_all_tmp () {
  313.         for name in "$@"; do
  314.             cmd=$(printf '%s\n' "find '/home' '/run/media' -iname \"${name}\"")
  315.             eval "$cmd" 2>&-
  316.         done
  317.     }
  318.  
  319.     names_str="${names[@]}"
  320.     sudo bash -c "$(declare -f find_all_tmp); find_all_tmp ${names_str}"
  321. }
  322.  
  323. find_all_size () {
  324.     declare line size fn
  325.     declare -a files files_size
  326.  
  327.     mapfile -t files < <(find_all "$@")
  328.  
  329.     get_size () {
  330.         for (( i = 0; i < ${#files[@]}; i++ )); do
  331.             line="${files[${i}]}"
  332.             du -BM -s "$line"
  333.         done | sed -E "s/${regex[du]}/\1 \3/" | sort -rn
  334.     }
  335.  
  336.     mapfile -t files_size < <(get_size)
  337.  
  338.     for (( i = 0; i < ${#files_size[@]}; i++ )); do
  339.         line="${files_size[${i}]}"
  340.         size="${line%% *}"
  341.         fn="${line#* }"
  342.         printf '%s\n' "$fn"
  343.     done
  344. }
  345.  
  346. find_list () {
  347.     if [[ ! -f $1 ]]; then
  348.         return
  349.     fi
  350.  
  351.     while read line; do
  352.         read -p "$pause_msg"
  353.         find_all "$line"
  354.     done <"$1"
  355. }
  356.  
  357. find_meta () {
  358.     find_all '.ds_store' 'thumbs.db'
  359. }
  360.  
  361. find_trash () {
  362.     sudo find '/home' '/run/media/' -maxdepth 3 -type d -iname ".trash*"
  363. }
  364.  
  365. find_root () {
  366.     sudo find / \( -path '/home' -o -path '/run/media' -o -path '/proc' -o -path '/sys' \) -prune -o -iname "$1" -print 2>&-
  367. }
  368.  
  369. find_root_recent () {
  370.     declare session of_bn of_list of_size
  371.     declare -a files
  372.  
  373.     session="${RANDOM}-${RANDOM}"
  374.     of_bn="${HOME}/find_recent_files"
  375.     of_list="${of_bn}_list-${session}.txt"
  376.     of_size="${of_bn}_size-${session}.txt"
  377.  
  378.     sudo find / \( -path '/home' -o -path '/run/media' -o -path '/proc' -o -path '/sys' \) -prune -o -type f -printf "%T@ %Tc %p\n" 2>&- | sort -n | cut -d' ' -f9- | tee "$of_list"
  379.  
  380.     mapfile -t files <"$of_list"
  381.  
  382.     touch "$of_size"
  383.  
  384.     for (( i = 0; i < ${#files[@]}; i++ )); do
  385.         sudo du -h "${files[${i}]}" 2>&- | tee --append "$of_size"
  386.     done
  387. }
  388.  
  389. find_movie_dups () {
  390.     "${HOME}/bin/find_movie_dups.sh" "${HOME}" "/run/media/${USER}"
  391. }
  392.  
  393. find_movie_dups_imdb () {
  394.     "${HOME}/bin/find_movie_dups.sh" -imdb "${HOME}" "/run/media/${USER}"
  395. }
  396.  
  397. find_shitrips () {
  398.     declare fn bn bn_lc of line size
  399.     declare -a files files_size
  400.  
  401.     of="${HOME}/shitrips.txt"
  402.  
  403.     mapfile -t files < <(find_all "*720p*" "*dvd*rip*" "*dvdscr*" "*screener*" "*divx*" "*xvid*")
  404.  
  405.     get_size () {
  406.         for (( i = 0; i < ${#files[@]}; i++ )); do
  407.             line="${files[${i}]}"
  408.             du -BM -s "$line"
  409.         done | sed -E "s/${regex[du]}/\1 \3/" | sort -rn
  410.     }
  411.  
  412.     mapfile -t files_size < <(get_size)
  413.  
  414.     for (( i = 0; i < ${#files_size[@]}; i++ )); do
  415.         line="${files_size[${i}]}"
  416.         size="${line%% *}"
  417.         fn="${line#* }"
  418.         bn=$(basename "$fn")
  419.         bn_lc="${bn,,}"
  420.  
  421.         if [[ $bn_lc =~ ${regex[720p]} || $bn_lc =~ ${regex[1080p]} ]]; then
  422.             continue
  423.         fi
  424.  
  425.         printf '%s\n' "$fn"
  426.     done | tee "$of"
  427. }
  428.  
  429. find_mkv_dups () {
  430.     declare fn fn_mkv md5 hash_ref
  431.     declare -a files_array
  432.     declare -A files_hash
  433.  
  434.     mapfile -t files_array < <(find_all "*.mkv" "*.mp4" "*.avi" "*.mpg" "*.mpeg")
  435.  
  436.     for (( i = 0; i < ${#files_array[@]}; i++ )); do
  437.         fn="${files_array[${i}]}"
  438.  
  439.         get_ext "$fn" 1
  440.  
  441.         fn_mkv="${no_ext}.mkv"
  442.         md5=$(md5sum -b <<<"$fn_mkv")
  443.         md5="${md5%% *}"
  444.         hash_ref="files_hash[${md5}]"
  445.  
  446.         if [[ $ext != 'mkv' && -n ${!hash_ref} ]]; then
  447.             printf '%s\n' '***'
  448.             printf '%s\n' "${!hash_ref}"
  449.             printf '%s\n' "$fn"
  450.         fi
  451.  
  452.         if [[ $ext == 'mkv' && -z ${!hash_ref} ]]; then
  453.             files_hash["${md5}"]="$fn"
  454.         fi
  455.     done
  456. }
  457.  
  458. no_blank () {
  459.     xset s off
  460.     xset -dpms
  461. }
  462.  
  463. run_wow () {
  464.     WINEPREFIX="${HOME}/prefix32"
  465.     WINEARCH=win32
  466.     cd "/run/media/${USER}/0d6b70fa-0c49-47d6-84c1-3f8509d52b58/wow/WOW Wotlk 3.3.5a"
  467.     wine 'Wow.exe'
  468. }
  469.  
  470. restart_kde () {
  471.     kquitapp5 plasmashell &&
  472.     kstart5 plasmashell
  473.  
  474. # sleep 10
  475.  
  476. # kwin_x11 --replace &
  477. }
  478.  
  479. compare_txt () {
  480.     if [[ ! -f $1 || ! -f $2 ]]; then
  481.         return
  482.     fi
  483.  
  484.     while read line; do grep -Fq "$line" "$2" || printf '%s\n' "$line"; done <"$1"
  485. }
  486.  
  487. update_dir () {
  488.     declare in out
  489.  
  490.     in="$1"
  491.     out="$2"
  492.  
  493.     if [[ ! -d $in || ! -d $out ]]; then
  494.         return
  495.     fi
  496.  
  497.     sudo rsync -Lacv --delete "${in}"/* "${out}"
  498. }
  499.  
  500. update_flac () {
  501.     declare in out
  502.  
  503.     in="${HOME}/Music/FLAC"
  504.     out="/run/media/${USER}/SD_BTRFS/SD_BTRFS/Music/FLAC"
  505.  
  506.     update_dir "$in" "$out"
  507. }
  508.  
  509. update_ps1 () {
  510.     declare in out
  511.  
  512.     in="${HOME}/playstation"
  513.     out="/run/media/${USER}/SD_BTRFS/SD_BTRFS/playstation"
  514.  
  515.     update_dir "$in" "$out"
  516. }
  517.  
  518. arch_test_tree () {
  519.     if [[ ! -d $1 ]]; then
  520.         return
  521.     fi
  522.  
  523.     declare if_dn fn
  524.     declare -a ext_list_tmp files
  525.  
  526.     if_dn=$(readlink -f "$1")
  527.  
  528.     ext_list_tmp=('.dar' '.tar' '.z' '.gz' '.tgz' '.bz2' '.tbz' '.tbz2' '.txz' '.xz' '.zip' '.7z' '.rar' '.cab' '.lzh' '.lha' '.arj' '.iso')
  529.  
  530.     mapfile -t files < <(find "$if_dn" -type f)
  531.  
  532.     for (( i = 0; i < ${#files[@]}; i++ )); do
  533.         fn="${files[${i}]}"
  534.  
  535.         get_ext "$fn" 1
  536.  
  537.         for ext_tmp in "${ext_list_tmp[@]}"; do
  538.             if [[ $ext != "$ext_tmp" ]]; then
  539.                 continue
  540.             fi
  541.  
  542.             arch_test "$fn"
  543.             break
  544.         done
  545.     done
  546. }
  547.  
  548. zip_2_7z () {
  549.     declare cwd if of
  550.     declare -a files
  551.  
  552.     cwd="$PWD"
  553.  
  554.     mapfile -t files < <(compgen -G "*.zip")
  555.  
  556.     for (( i = 0; i < ${#files[@]}; i++ )); do
  557.         if="${files[${i}]}"
  558.         of="${if%.*}"
  559.         mkdir "$of"
  560.         cd "$of"
  561.         arch_unpack ../"${if}" && rm ../"${if}"
  562.         cd "$cwd"
  563.         arch_pack "${of}.7z" "$of" && rm -rf "$of"
  564.     done
  565. }
  566.  
  567. dnf_perl_install () {
  568.     for module in "$@"; do
  569.         sudo dnf install "perl(${module})"
  570.     done
  571. }
  572.  
  573. sort_filetypes () {
  574.     if [[ ! -d $1 ]]; then
  575.         return
  576.     fi
  577.  
  578.     declare if_dn dn_types dn_opensub dn fn
  579.     declare -a types archives documents images media packages categories files
  580.  
  581.     if_dn=$(readlink -f "$1")
  582.  
  583.     dn_types="${if_dn}/Filetypes"
  584.     dn_opensub="${dn_types}/zip/opensubtitles"
  585.  
  586.     types=('7z' 'apk' 'avi' 'bz2' 'deb' 'doc' 'exe' 'flac' 'flv' 'gif' 'gz' 'img' 'iso' 'jpg' 'jpeg' 'mkv' 'mpg' 'mpeg' 'm3u' 'mov' 'mp3' 'mp4' 'odt' 'ogg' 'pdf' 'pls' 'png' 'rar' 'rpm' 'rtf' 'srt' 'svg' 'tar' 'torrent' 'txt' 'wav' 'webm' 'xcf' 'zip' 'xspf' 'xz')
  587.     archives=('7z' 'bz2' 'gz' 'rar' 'tar' 'zip' 'xz')
  588.     documents=('doc' 'odt' 'pdf' 'rtf' 'txt')
  589.     images=('gif' 'jpg' 'jpeg' 'png' 'svg' 'xcf')
  590.     media=('avi' 'flac' 'flv' 'mkv' 'mpg' 'mpeg' 'mov' 'mp3' 'mp4' 'ogg' 'wav' 'webm')
  591.     packages=('apk' 'deb' 'rpm')
  592.     categories=('archives' 'documents' 'images' 'media' 'packages')
  593.  
  594.     categorize () {
  595.         dn="${dn_types}/${category}/${type}"
  596.  
  597.         mapfile -t files < <(find "${dn_types}/${type}" -maxdepth 1 -type f 2>&-)
  598.  
  599.         for (( i = 0; i < ${#files[@]}; i++ )); do
  600.             fn="${files[${i}]}"
  601.  
  602.             mkdir -p "$dn"
  603.             mv -n "$fn" "$dn"
  604.         done
  605.     }
  606.  
  607.     mkdir -p "$if_dn"
  608.  
  609.     mapfile -t files < <(find "$if_dn" -maxdepth 1 -type f 2>&-)
  610.  
  611.     for (( i = 0; i < ${#files[@]}; i++ )); do
  612.         fn="${files[${i}]}"
  613.  
  614.         get_ext "$fn" 1
  615.  
  616.         for type in "${types[@]}"; do
  617.             if [[ $ext != ".${type}" ]]; then
  618.                 continue
  619.             fi
  620.  
  621.             dn="${dn_types}/${type}"
  622.  
  623.             mkdir -p "$dn"
  624.             mv -n "$fn" "$dn"
  625.  
  626.             break
  627.         done
  628.     done
  629.  
  630.     mkdir -p "${dn_types}/jpg" "${dn_types}/mpg"
  631.  
  632.     mv -n "${dn_types}/jpeg"/* "${dn_types}/jpg" 2>&-
  633.     mv -n "${dn_types}/mpeg"/* "${dn_types}/mpg" 2>&-
  634.  
  635.     for category in "${categories[@]}"; do
  636.         mkdir -p "${dn_types}/${category}"
  637.  
  638.         case $category in
  639.             'archives')
  640.                 for type in "${archives[@]}"; do
  641.                     categorize
  642.                 done
  643.             ;;
  644.             'documents')
  645.                 for type in "${documents[@]}"; do
  646.                     categorize
  647.                 done
  648.             ;;
  649.             'images')
  650.                 for type in "${images[@]}"; do
  651.                     categorize
  652.                 done
  653.             ;;
  654.             'media')
  655.                 for type in "${media[@]}"; do
  656.                     categorize
  657.                 done
  658.             ;;
  659.             'packages')
  660.                 for type in "${packages[@]}"; do
  661.                     categorize
  662.                 done
  663.             ;;
  664.         esac
  665.     done
  666.  
  667.     mapfile -t files < <(find "${dn_types}/archives/zip" -maxdepth 1 -type f 2>&-)
  668.  
  669.     for (( i = 0; i < ${#files[@]}; i++ )); do
  670.         fn="${files[${i}]}"
  671.  
  672.         if [[ ! $fn =~ ${regex[opensub]} ]]; then
  673.             continue
  674.         fi
  675.  
  676.         mkdir -p "$dn_opensub"
  677.         mv -n "$fn" "$dn_opensub"
  678.     done
  679.  
  680.     rm_empty_dirs "$dn_types"
  681. }
  682.  
  683. # Creates a function, called 'get_ext', which will separate file names
  684. # and extensions.
  685. get_ext () {
  686.     declare ext no_ext
  687.     declare -a ext_list
  688.  
  689.     no_ext="$1"
  690.  
  691.     while [[ $no_ext =~ ${regex[fn]} ]]; do
  692.         no_ext="${BASH_REMATCH[1]}"
  693.         ext_list=("${BASH_REMATCH[2],,}" "${ext_list[@]}")
  694.  
  695.         if [[ ${#ext_list[@]} -eq $2 ]]; then
  696.             break
  697.         fi
  698.     done
  699.  
  700.     ext=$(printf '.%s' "${ext_list[@]}")
  701. }
  702.  
  703. recursive_extract () {
  704.     if [[ ! -d $1 ]]; then
  705.         return
  706.     fi
  707.  
  708.     declare if_dn of_dn fn bn
  709.     declare -a ext_list_tmp files
  710.  
  711.     if_dn=$(readlink -f "$1")
  712.  
  713.     cd "$if_dn"
  714.  
  715.     ext_list_tmp=('.dar' '.tar' '.z' '.gz' '.tgz' '.bz2' '.tbz' '.tbz2' '.txz' '.xz' '.zip' '.7z' '.rar' '.cab' '.lzh' '.lha' '.arj')
  716.  
  717.     mapfile -t files < <(find "$if_dn" -type f)
  718.  
  719.     for (( i = 0; i < ${#files[@]}; i++ )); do
  720.         fn="${files[${i}]}"
  721.         bn=$(basename "$fn")
  722.  
  723.         get_ext "$fn" 1
  724.  
  725.         for ext_tmp in "${ext_list_tmp[@]}"; do
  726.             if [[ $ext != "$ext_tmp" ]]; then
  727.                 continue
  728.             fi
  729.  
  730.             of_dn="${no_ext}-${RANDOM}-${RANDOM}"
  731.  
  732.             mkdir -p "$of_dn"
  733.             mv "$fn" "$of_dn"
  734.  
  735.             cd "$of_dn"
  736.             arch_unpack "$bn"
  737.  
  738.             if [[ $? -eq 0 && -f $bn ]]; then
  739.                 rm -f "$bn"
  740.             fi
  741.  
  742.             cd "$if_dn"
  743.  
  744.             break
  745.         done
  746.     done
  747. }
  748.  
  749. rm_empty_dirs () {
  750.     if [[ ! -d $1 ]]; then
  751.         return
  752.     fi
  753.  
  754.     declare if_dn dn
  755.     declare -a dirs
  756.  
  757.     if_dn=$(readlink -f "$1")
  758.  
  759.     mapfile -t dirs < <(find "$if_dn" -type d -empty 2>&-)
  760.  
  761.     until [[ ${#dirs[@]} -eq 0 ]]; do
  762.         for (( i = 0; i < ${#dirs[@]}; i++ )); do
  763.             dn="${dirs[${i}]}"
  764.  
  765.             rm -rf "$dn"
  766.         done
  767.  
  768.         mapfile -t dirs < <(find "$if_dn" -type d -empty 2>&-)
  769.     done
  770. }
  771.  
  772. rm_empty_files () {
  773.     if [[ ! -d $1 ]]; then
  774.         return
  775.     fi
  776.  
  777.     declare if_dn fn size
  778.     declare -a files
  779.  
  780.     if_dn=$(readlink -f "$1")
  781.  
  782.     mapfile -t files < <(find "$if_dn" -type f 2>&-)
  783.  
  784.     for (( i = 0; i < ${#files[@]}; i++ )); do
  785.         fn="${files[${i}]}"
  786.         size=$(stat -c '%s' "$fn")
  787.  
  788.         if [[ $size -eq 0 ]]; then
  789.             rm -f "$fn"
  790.         fi
  791.     done
  792. }
  793.  
  794. flatten_dn () {
  795.     if [[ ! -d $1 ]]; then
  796.         return
  797.     fi
  798.  
  799.     declare if_dn fn
  800.     declare -a files
  801.  
  802.     if_dn=$(readlink -f "$1")
  803.  
  804.     mapfile -t files < <(find "$if_dn" -type f 2>&-)
  805.  
  806.     for (( i = 0; i < ${#files[@]}; i++ )); do
  807.         fn="${files[${i}]}"
  808.  
  809.         mv -n "$fn" "$if_dn"
  810.     done
  811.  
  812.     rm_empty_dirs "$if_dn"
  813. }
  814.  
  815. unique_ext () {
  816.     if [[ ! -d $1 ]]; then
  817.         return
  818.     fi
  819.  
  820.     declare if_dn fn
  821.     declare -a files
  822.  
  823.     if_dn=$(readlink -f "$1")
  824.  
  825.     mapfile -t files < <(find "$if_dn" -maxdepth 1 -type f 2>&-)
  826.  
  827.     for (( i = 0; i < ${#files[@]}; i++ )); do
  828.         fn="${files[${i}]}"
  829.  
  830.         if [[ $fn =~ ${regex[fn]} ]]; then
  831.             printf '%s\n' "${BASH_REMATCH[2]}"
  832.         fi
  833.     done | sort -u
  834. }
  835.  
  836. unique_type () {
  837.     if [[ ! -d $1 ]]; then
  838.         return
  839.     fi
  840.  
  841.     declare if_dn fn info
  842.     declare -a files
  843.  
  844.     if_dn=$(readlink -f "$1")
  845.  
  846.     mapfile -t files < <(find "$if_dn" -maxdepth 1 -type f 2>&-)
  847.  
  848.     for (( i = 0; i < ${#files[@]}; i++ )); do
  849.         fn="${files[${i}]}"
  850.  
  851.         info=$(file -b "$fn")
  852.         printf '%s\n' "${info%%:*}"
  853.     done | sort -u
  854. }
  855.  
  856. lc_ext () {
  857.     if [[ ! -d $1 ]]; then
  858.         return
  859.     fi
  860.  
  861.     declare if_dn if of
  862.     declare -a files
  863.  
  864.     if_dn=$(readlink -f "$1")
  865.  
  866.     mapfile -t files < <(find "$if_dn" -maxdepth 1 -type f 2>&-)
  867.  
  868.     for (( i = 0; i < ${#files[@]}; i++ )); do
  869.         if="${files[${i}]}"
  870.  
  871.         get_ext "$if" 1
  872.  
  873.         of="${no_ext}.${ext}"
  874.  
  875.         if [[ $if != "$of" ]]; then
  876.             mv -n "$if" "$of"
  877.         fi
  878.     done
  879. }
  880.  
  881. fn2md5 () {
  882.     if [[ ! -d $1 ]]; then
  883.         return
  884.     fi
  885.  
  886.     declare if_dn fn md5
  887.     declare -a files
  888.  
  889.     if_dn=$(readlink -f "$1")
  890.  
  891.     mapfile -t files < <(find "$if_dn" -maxdepth 1 -type f 2>&-)
  892.  
  893.     for (( i = 0; i < ${#files[@]}; i++ )); do
  894.         fn="${files[${i}]}"
  895.  
  896.         get_ext "$fn" 1
  897.  
  898.         md5=$(md5sum -b <<<"$fn")
  899.         md5="${md5%% *}"
  900.  
  901.         mv -n "$fn" "${md5}.${ext}"
  902.     done
  903. }
  904.  
  905. git_link () {
  906.     declare cwd local_bin git_repo script
  907.  
  908.     cwd="$PWD"
  909.  
  910.     local_bin="${HOME}/bin"
  911.     git_repo="${local_bin}/git_repo"
  912.  
  913.     cd "${local_bin}/git_repo"
  914.  
  915.     while [[ $@ ]]; do
  916.         script="${local_bin}/${1}"
  917.  
  918.         if [[ -f $script && ! -f $1 && ! -L $1 ]]; then
  919.             printf '%s\n' "Link created: ${script}"
  920.             ln ../"${1}" "${1}"
  921.         fi
  922.  
  923.         shift
  924.     done
  925.  
  926.     cd "$cwd"
  927. }
  928.  
  929. git_push () {
  930.     declare cwd local_bin git_repo
  931.  
  932.     cwd="$PWD"
  933.  
  934.     local_bin="${HOME}/bin"
  935.     git_repo="${local_bin}/git_repo"
  936.  
  937.     cd "${local_bin}/git_repo"
  938.  
  939.     git add . && git commit -m "${1}"
  940.  
  941.     git push origin main
  942.  
  943.     cd "$cwd"
  944. }
  945.  
  946. bin_backup () {
  947.     declare of of_dn fn bn date
  948.     declare -a files
  949.  
  950.     date=$(date '+%F')
  951.     of="bin_${date}.tar.xz"
  952.     of_dn="/run/media/${USER}/0d6b70fa-0c49-47d6-84c1-3f8509d52b58"
  953.  
  954.     rm_old () {
  955.         declare dn
  956.  
  957.         dn="$1"
  958.  
  959.         mapfile -t files < <(find "$dn" -maxdepth 1 -type f -iname "bin_*.tar.xz*" 2>&-)
  960.  
  961.         for (( i = 0; i < ${#files[@]}; i++ )); do
  962.             fn="${files[${i}]}"
  963.             bn=$(basename "$fn")
  964.  
  965.             if [[ $bn =~ ${regex[bin_backup]} ]]; then
  966.                 rm -f "$fn"
  967.             fi
  968.         done
  969.     }
  970.  
  971.     rm_old "$HOME"
  972.     rm_old "$of_dn"
  973.  
  974.     cd "$HOME"
  975.  
  976.     arch_pack "$of" bin
  977.     md5sum -b "$of" | tee "${of}.md5"
  978.     cp -p "${of}"* "$of_dn"
  979.  
  980.     sync
  981. }
  982.  
  983. sort_bin_archive () {
  984.     declare local_bin if_dn if of date
  985.     declare -a files
  986.  
  987.     local_bin="${HOME}/bin"
  988.     if_dn="${local_bin}/archive"
  989.  
  990.     if [[ ! -d $if_dn ]]; then
  991.         return
  992.     fi
  993.  
  994.     rm_md5sum.sh "$if_dn"
  995.  
  996.     mapfile -t files < <(find "$if_dn" -type f -iname "*.sh" -o -iname "*.pl" -o -iname "*.php" 2>&-)
  997.  
  998.     for (( i = 0; i < ${#files[@]}; i++ )); do
  999.         if="${files[${i}]}"
  1000.         date=$(stat -c '%y' "$if")
  1001.         date="${date%% *}"
  1002.         of="${if}.${date}"
  1003.  
  1004.         sudo "${local_bin}/reformat_script.sh" "$if"
  1005.         sudo "${local_bin}/reformat_script.sh" "$if"
  1006.  
  1007.         printf '%s\n' "$of"
  1008.         mv -n "$if" "$of"
  1009.     done
  1010.  
  1011. #   flatten_dn "$if_dn"
  1012. }
  1013.  
  1014. kill_gnome () {
  1015.     declare comm pid
  1016.     declare -a pids
  1017.  
  1018.     comm='/usr/libexec/xdg-desktop-portal-gnome'
  1019.  
  1020.     mapfile -t pids < <(pgrep -xf "$comm")
  1021.  
  1022.     for (( i = 0; i < ${#pids[@]}; i++ )); do
  1023.         pid="${pids[${i}]}"
  1024.  
  1025.         sudo kill -15 "$pid"
  1026.     done
  1027.  
  1028.     sleep 1
  1029.  
  1030.     killall -15 'gnome-shell'
  1031. }
  1032.  
Add Comment
Please, Sign In to add comment