fant0men

My .bashrc

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