diff --git a/.bashrc b/.bashrc index f3ac851..94c7898 100644 --- a/.bashrc +++ b/.bashrc @@ -15,4 +15,4 @@ function bashrc() { } # Export all functions. -export -f $(find_functions | tr '\n' ' ') +export -f $(find_function | tr '\n' ' ') diff --git a/.config/bash/module/doc.sh b/.config/bash/module/doc.sh index 7df9c86..0780027 100644 --- a/.config/bash/module/doc.sh +++ b/.config/bash/module/doc.sh @@ -20,23 +20,31 @@ function doc_bash() { echo '```' >> "${file}" echo >> "${file}" - # Print table title. - echo "Command|Description" >> "${file}" - echo "---|---" >> "${file}" - # Fill with data. - for fun in $(find_functions); do - # Skip private functions. - [[ "${fun}" =~ ^_.* ]] && continue + for module in $(find_module); do + # Print module title. + echo "## ${module^}." >> "${file}" + echo >> "${file}" - # Parse help info. - local desc="$(help ${fun} | grep -v Usage\: | tr '\n' ' ')" - local usage="$(help ${fun} | grep Usage\: | sed -e s\/Usage\:\ \/\/)" + # Print table title. + echo "Command|Description" >> "${file}" + echo "---|---" >> "${file}" - # Use function name if no usage info available. - [[ "${usage}" = "" ]] && usage="${fun}" + for fun in $(find_function ${module}); do + # Skip private functions. + [[ "${fun}" =~ ^_.* ]] && continue - # Write to file. - [[ "${desc}" != "" ]] && echo "${usage}|${desc}" >> "${file}" + # Parse help info. + local desc="$(help ${fun} | grep -v Usage\: | tr '\n' ' ')" + local usage="$(help ${fun} | grep Usage\: | sed -e s\/Usage\:\ \/\/)" + + # Use function name if no usage info available. + [[ "${usage}" = "" ]] && usage="${fun}" + + # Write to file. + [[ "${desc}" != "" ]] && echo "${usage}|${desc}" >> "${file}" + done + + echo >> "${file}" done } diff --git a/.config/bash/module/find.sh b/.config/bash/module/find.sh index 0805308..863a3a1 100644 --- a/.config/bash/module/find.sh +++ b/.config/bash/module/find.sh @@ -4,7 +4,16 @@ function find_ext() { echo "${types[@]}" | tr ' ' '\n' | sort -u } -# Find all module functions. -function find_functions() { - cat "${BASH_MODULE_PATH}"/* | grep "^function.*()" | sed -e "s/^function //" -e "s/().*//" +# Find all modules. +function find_module() { + ls "${BASH_MODULE_PATH}" | sed -e "s/.sh$//" +} + +# Find all module functions. +# Functions from all modules by default. +# Usage: find_function [MODULE] +function find_function() { + local module="${1}" + [[ "${module}" = "" ]] && module="*" + cat "${BASH_MODULE_PATH}"/${module}.sh | grep "^function.*()" | sed -e "s/^function //" -e "s/().*//" } diff --git a/.config/bash/module/help.sh b/.config/bash/module/help.sh index 1bc5ef7..ceb98df 100644 --- a/.config/bash/module/help.sh +++ b/.config/bash/module/help.sh @@ -3,7 +3,7 @@ function help() { local fun="${1}" - if [[ "${fun}" = "" ]] || [[ "$(find_functions | grep ${fun})" = "" ]]; then + if [[ "${fun}" = "" ]] || [[ "$(find_function | grep ${fun})" = "" ]]; then help help return 2 fi @@ -19,7 +19,7 @@ function h() { # Autocomplete with available functions. function _help_functions() { - _autocomplete_first $(find_functions) + _autocomplete_first $(find_function) } complete -F _help_functions help h diff --git a/.doc/bash.md b/.doc/bash.md index 21e7c5a..fa864cd 100644 --- a/.doc/bash.md +++ b/.doc/bash.md @@ -10,9 +10,16 @@ or $ h ``` +## Android. + Command|Description ---|--- emulator [NAME]|Start an Android emulator. Default name is "default". + +## Archive. + +Command|Description +---|--- archive [DIRS]|Archive directories. All directories by default. archive_fast [DIRS]|Archive directories with fast compression. All directories by default. archive_check [FILES]|Check archives integrity. Checks all archives by default. @@ -20,31 +27,95 @@ archive_prune [NAME]|Delete old versions of archives. All archives by default. unarchive [FILES]|Extract previously created archive with checksum validation. archive_name [ARCHIVE] [NAME]|Rename archives. If no name specified, it simplifies archive's name. If no archives specified, apply to all archives. archive_convert|Convert old archives to a new format. TODO: remove me after some time when there won't be any old archives. + +## Autocomplete. + +Command|Description +---|--- + +## Battery. + +Command|Description +---|--- battery_level|Print current battery level. + +## Bootstrap. + +Command|Description +---|--- bootstrap_rust|Install Cargo/Rust. bootstrap_texlive|Install TeXLive. bootstrap_grub|Install grub theme. bootstrap_ffmpeg|Install ffmpeg. + +## Cd. + +Command|Description +---|--- cdd |CD (back) to directory. Finds first directory that matches the input (case-insensitive). + +## Checksum. + +Command|Description +---|--- checksum_create [FILES]|Save file checksums. For file with a name "file" it will create a new file called ".file.sha1" with hash in it. All files by default. checksum_check [FILES]|Check stored values against actual files. All files by default. checksum|Calculate hashes for all files recursively and store in a file called "checksum.sha1". + +## Chmod. + +Command|Description +---|--- x |Add executable flag to file. + +## Color. + +Command|Description +---|--- color_test|Print all available colors with their names colored in corresponding color. + +## Copypaste. + +Command|Description +---|--- copy|Copy stdin to system clipboard. Example: echo hi | copy paste|Paste system clipboard to stdout. Example: paste > file.txt + +## Cp. + +Command|Description +---|--- cp |Replaces default cp with rsync. cp_merge |Copy and also merge all changes (delete dst files that do not exist in src). cp_link |Copy by creating hardlinks. Works for directories, too. bcp|Default cp, a.k.a builtin cp. When you don't need rsync. cp_test |Print output of cp_merge without writing anything. + +## Date. + +Command|Description +---|--- today|Print today date in yyyyMMdd format. dow|Current day of week number. + +## Dconf. + +Command|Description +---|--- dconf_load|Load Gnome settings. dconf_save [FILE]|Dump Gnome settings into the file. Default name is gnome.dconf. Do this before changing settings and after, an then run diff to find out what to add to main gnome.dconf. + +## Disk. + +Command|Description +---|--- df|Show only physical drives info. du [DIRS]|Show combined size in SI. Current dir by default. -doc_bash|Generate a markdown file with all the help info. Outputs to ~/.doc/bash.md + +## Docker. + +Command|Description +---|--- docker_volumes |Show container's volumes. docker_health|Check if any container exited. docker_prune|Prune everything. @@ -60,14 +131,51 @@ dcpu [SERVICES]|Docker compose pull & up specified services. dcul [SERVICES]|Docker compose up & attach to logs for specified services. docker_up |Find out container's IP address. docker_update|Update all docker images. + +## Doc. + +Command|Description +---|--- +doc_bash|Generate a markdown file with all the help info. Outputs to ~/.doc/bash.md + +## Export. + +Command|Description +---|--- + +## Ffmpeg. + +Command|Description +---|--- ffmpeg_mux_audio |Mux audio into containers. File names in sound and current dirrectories must match. Tmp usage for anime downloads. ffmpeg_mux_cover |Mux cover into music file. ffmpeg_music_meta |Generate music metadata from directory structure. Top dir is the Artist name like this: The_Beatles. Next are albums like this: 2010_My_love. Inside are songs like this: 01_sample.flac. + +## File. + +Command|Description +---|--- o |Open file/dir in GUI. + +## Find. + +Command|Description +---|--- find_ext|Find all file extensions. -find_functions|Find all module functions. +find_module|Find all modules. +find_function [MODULE]|Find all module functions. Functions from all modules by default. + +## Fix. + +Command|Description +---|--- fix_ethernet_speed |Fix when ethernet mistakenly detects 100 Mb instead of 1000 Mb. SPEED is one of 10/100/1000 etc. fix_files_sftp|Fix nautilus after typing wrong sftp password. + +## Git. + +Command|Description +---|--- gps|Git push. gpsf|Git force push. gpl|Git pull. @@ -92,14 +200,29 @@ gr [COMMIT COUNT]|Rebase by X commits or from root. When COUNT is 0 - rebase fro gu [EMAIL]|Specify git user as Dmitry Voronin with provided email. gg |Get my git repo. gdc |See diff for a specific commit. + +## Help. + +Command|Description +---|--- help |Get help about dotfiles bash function. h |Short for help. + +## Ls. + +Command|Description +---|--- l [DIRS]|List files in dirs. Current dir by default. ll [DIRS]|List last modified files first. Current dir by default. lll [DEPTH] [DIRS]|List files in tree structure. Current dir by default. Depth can be omitted by passing - (dash). llll [DIRS]|List files recursively. Current dir by default. la [DIRS]|List all files in dirs, incl. hidden files. Current dir by default. lla [DIRS]|List all files in dirs, incl. hidden files, sorted by mtime. Current dir by default. + +## Name. + +Command|Description +---|--- name [FILES]|Rename files to strip all special characters. All files by default. name_hash [FILES]|Rename all files to their hashes while keeping extensions. All files by default. name_hash_check [FILES]|Check hashes for previously renamed files. All files by default. @@ -109,24 +232,99 @@ name_ext [FILES]|Rename files with new extension. All files by defau name_prefix [FILES]|Change file name prefix. All matching files by default. name_postfix [FILES]|Change file name postfix. All matching files by default. name_replace [FILES]|Replace part of the name. All matching files by default. + +## Ncdu. + +Command|Description +---|--- ncdu [DIRS]|Search only on current filesystem. Current dir by default. + +## Notify. + +Command|Description +---|--- notify |Send Telegram notification. notify_silent |Send silent Telegram notification. + +## Own. + +Command|Description +---|--- own [USER] [FILES]|Change file ownership to specified user id and restrict access to him. Root user by default. This directory recursively by default. + +## Pack. + +Command|Description +---|--- pack [FILES]|Pack files into desired format. All files and directories by default. unpack [FILES]|Attempt to unpack. All supported formats by default. + +## Parse. + +Command|Description +---|--- parse_simplify |Parse data and output simplified format. parse_camel |Parse to CamelCase. parse_alnum |Parse data keeping only alphanumeric characters. + +## Permissions. + +Command|Description +---|--- perm_share|Recursively change permissions to allow read sharing with group and others. perm|Recursively change permissions to restrict access for group and others. + +## Ps1. + +Command|Description +---|--- + +## Ps. + +Command|Description +---|--- ps |Find process and filter. + +## Recursive. + +Command|Description +---|--- recursive |Run something recursively over all directories. recursive1 |Run something recursively over directories of 1 depth (excluding current dir). + +## Rust. + +Command|Description +---|--- rust_book|Open Rust book. + +## Shopt. + +Command|Description +---|--- + +## Su. + +Command|Description +---|--- s [USER]|Su shortcut for lazy me. Root by default. + +## Terminal. + +Command|Description +---|--- tsize|Get terminal size. + +## Tmp. + +Command|Description +---|--- tmp|CD into host's primary tmp dir. + +## Tmux. + +Command|Description +---|--- ta [NAME]|Create/attach to named session. By default uses name "main". td|Detach from running session. tl|List running sessions. @@ -134,17 +332,68 @@ trn [NAME]|Rename current session. Uses current dir name by default. tn [NAME]|Assign name to window. Uses current dir name by default. tk [NAME]|Kill specified session. By default it kills "main" session. tka|Kill all sessions. + +## Todo. + +Command|Description +---|--- todo|Open ~/.todo.md file. + +## Toolbx. + +Command|Description +---|--- tba [NAME]|Attach/create toolbx container with specified name. By default uses "main" name. tbk [NAME]|Remove toolbx container with specified name. By default uses "main" name. tb_rpmfusion [NAME]|Install rpm-fusion repository into container with specified name. By default uses "main" name. tbl|List all available containers. + +## Transcode. + +Command|Description +---|--- transcode [FILES]|Convert between different formats. By default tries to convert all files. + +## Try. + +Command|Description +---|--- try |Retry command every 2 sec until it completes successfully. + +## Umask. + +Command|Description +---|--- + +## Util. + +Command|Description +---|--- + +## Vdl. + +Command|Description +---|--- vdl [LINK]|Download video from URL. When no [LINK] specified, it tries to update previously downloaded link. vdl_vk |Temporary fix for vk downloads. vdl_file |Download all videos from file with links. + +## Vi. + +Command|Description +---|--- v|Neovim shortcut. + +## Wallpaper. + +Command|Description +---|--- wallpaper |Set specified file as a wallpaper. + +## Watch. + +Command|Description +---|--- w |Watch command output with 2 seconds interval. ww |Watch command output with minimal interval. +