bash : update doc.
This commit is contained in:
parent
b2f3b228cc
commit
a800ec24c9
734
.README.md
734
.README.md
|
@ -2,17 +2,7 @@
|
||||||
|
|
||||||
This is my own custom config that I use on my GNU/Linux machines. Not meant to be used by anyone else.
|
This is my own custom config that I use on my GNU/Linux machines. Not meant to be used by anyone else.
|
||||||
|
|
||||||
# Table of contents.
|
For references, go to the [doc directory](.doc).
|
||||||
|
|
||||||
1. [Bootstrap.](#bootstrap)
|
|
||||||
2. [General info.](#general-info)
|
|
||||||
3. [Load Gnome settings.](#load-gnome-settings)
|
|
||||||
4. [Navigation.](#navigation)
|
|
||||||
5. [Nvim config.](#nvim-config)
|
|
||||||
6. [Bash commands.](#bash-commands)
|
|
||||||
7. [To-do later.](#to-do-later)
|
|
||||||
|
|
||||||
Additional references can be found in [.doc](.doc) directory.
|
|
||||||
|
|
||||||
# Bootstrap.
|
# Bootstrap.
|
||||||
|
|
||||||
|
@ -22,728 +12,6 @@ Additional references can be found in [.doc](.doc) directory.
|
||||||
curl -s https://git.voronind.com/voronind/linux/raw/branch/master/.bootstrap.sh | bash && source .bashrc
|
curl -s https://git.voronind.com/voronind/linux/raw/branch/master/.bootstrap.sh | bash && source .bashrc
|
||||||
```
|
```
|
||||||
|
|
||||||
# General info.
|
|
||||||
|
|
||||||
It includes:
|
|
||||||
1. Git config (excluding user info).
|
|
||||||
2. Bash scripts and environment.
|
|
||||||
3. Tmux config.
|
|
||||||
4. Basic directory structure as well as redefining them as default.
|
|
||||||
5. Custom bin directory.
|
|
||||||
6. Collection of Linux configs (sshd, gnome, sysctl etc).
|
|
||||||
7. GTK 3/4 configs.
|
|
||||||
8. Htop config.
|
|
||||||
9. Nvim config.
|
|
||||||
10. SSH config.
|
|
||||||
11. Custom background.
|
|
||||||
12. Flatpak overrides.
|
|
||||||
13. Custom fonts.
|
|
||||||
14. MangoHud config.
|
|
||||||
|
|
||||||
# Load Gnome settings.
|
# Load Gnome settings.
|
||||||
|
|
||||||
To load Gnome settings run `dconf_load`.
|
To load Gnome settings run `dconf_load`.
|
||||||
|
|
||||||
# Navigation.
|
|
||||||
|
|
||||||
Navigation principles are shared between Gnome, Tmux and Nvim. The only difference is the *"Leader"* key. Gnome uses *Super* key, Tmux uses *Meta (alt)* key and Nvim uses *Space*. The rest somewhat repeats itself.
|
|
||||||
|
|
||||||
## Gnome
|
|
||||||
|
|
||||||
Key|Action
|
|
||||||
---|---
|
|
||||||
`Super+Esc`|Lauch Terminal emulator.
|
|
||||||
`Super+q`|Switch to the left workspace.
|
|
||||||
`Super+e`|Switch to the right workspace.
|
|
||||||
`Super+Q`|Move window to the left workspace.
|
|
||||||
`Super+E`|Move window to the right workspace.
|
|
||||||
`Super+\|`|None.
|
|
||||||
`Super+-`|None.
|
|
||||||
`Super+w`|Toggle window maximize.
|
|
||||||
`Super+s`|Minimize window.
|
|
||||||
`Super+a`|Snap window to the left.
|
|
||||||
`Super+d`|Snap window to the right.
|
|
||||||
`Super+z`|Lock session.
|
|
||||||
`Super+x`|Close window.
|
|
||||||
`Super+c`|Minimize all windows.
|
|
||||||
`Super+v`|Take a screenshot.
|
|
||||||
`Super+f`|Toggle window fullscreen.
|
|
||||||
|
|
||||||
## Tmux.
|
|
||||||
|
|
||||||
Key|Action
|
|
||||||
---|---
|
|
||||||
`Meta+Esc`, `Meta+t`|New window. `Meta+t` is for the Termux Android app as it can't send the `Meta+Esc` combo.
|
|
||||||
`Meta+q`|Switch to the left window.
|
|
||||||
`Meta+e`|Switch to the right window.
|
|
||||||
`Meta+Q`|Move window to the left.
|
|
||||||
`Meta+E`|Move window to the right.
|
|
||||||
`Meta+\|`|Split vertically.
|
|
||||||
`Meta+-`|Split horizontally.
|
|
||||||
`Meta+w`|Switch to the above split.
|
|
||||||
`Meta+s`|Switch to the below split.
|
|
||||||
`Meta+a`|Switch to the left split.
|
|
||||||
`Meta+d`|Switch to the right split.
|
|
||||||
`Meta+z`|Detach from session.
|
|
||||||
`Meta+x`|Close window.
|
|
||||||
`Meta+c`|Close split.
|
|
||||||
`Meta+v`|Visual selection. `y` to copy.
|
|
||||||
`Meta+f`|None.
|
|
||||||
|
|
||||||
## Nvim.
|
|
||||||
|
|
||||||
Key|Action
|
|
||||||
---|---
|
|
||||||
`Space+Esc`|None.
|
|
||||||
`Space+q`|Switch to the left buffer.
|
|
||||||
`Space+e`|Switch to the right buffer.
|
|
||||||
`Space+Q`|Move buffer to the left.
|
|
||||||
`Space+E`|Move buffer to the right.
|
|
||||||
`Space+\|`|Split vertically.
|
|
||||||
`Space+-`|Split horizontally.
|
|
||||||
`Space+w`|Switch to the above split.
|
|
||||||
`Space+s`|Switch to the below split.
|
|
||||||
`Space+a`|Switch to the left split.
|
|
||||||
`Space+d`|Switch to the right split.
|
|
||||||
`Space+z`|Save all and exit.
|
|
||||||
`Space+x`|Close buffer.
|
|
||||||
`Space+c`|Close split.
|
|
||||||
`Space+v`|Visual selection (or just default `v`).
|
|
||||||
`Space+f`|None.
|
|
||||||
|
|
||||||
More info in [Nvim config.](#nvim-config)
|
|
||||||
|
|
||||||
# Nvim config.
|
|
||||||
|
|
||||||
TODO: preserve default shortcuts, only add new ones when adding new functionality.
|
|
||||||
|
|
||||||
## General info.
|
|
||||||
|
|
||||||
* Run `:Update` to update everything.
|
|
||||||
* File tree shows everything by default, telescope ingores git-ignored files.
|
|
||||||
|
|
||||||
## Keymaps.
|
|
||||||
|
|
||||||
### Common. TODO: separate visual and others from common.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal, Visual|`5dd`|Repeat following command N (5) times.
|
|
||||||
Normal|`.`|Repeat input on selected line.
|
|
||||||
Normal, Visual|`<Leader>.`|Repeat command on selected line(s).
|
|
||||||
Normal|`zz`|Save all files.
|
|
||||||
Normal|`ZZ`, `<Space>z`|Save all and quit.
|
|
||||||
Normal|`ZQ`|Quit without saving.
|
|
||||||
Normal|`v`, `<Space>v`|Visual selection (cursor).
|
|
||||||
Normal|`V`|Visual selection (lines).
|
|
||||||
Normal|`<C-v>`|Visual selection (block).
|
|
||||||
Normal|`gh`|Go to the start of the line.
|
|
||||||
Normal|`gl`|Go to the end of the line.
|
|
||||||
Normal|`gj`|Go to the end of the file.
|
|
||||||
Normal|`gk`|Go to the top of the file.
|
|
||||||
Normal|`u`|Undo action.
|
|
||||||
Normal|`U`|Redo action (*remaps*: undo whole line), (*default*: `<C-r>`).
|
|
||||||
Visual|`u`|Convert selection to lowercase.
|
|
||||||
Visual|`U`|Convert selection to uppercase.
|
|
||||||
Visual|`~`|Toggle case.
|
|
||||||
Normal, Visual|`;`|Enter command mode (*default*: `:`).
|
|
||||||
Normal|`<Space>0`|Open shortcuts help.
|
|
||||||
|
|
||||||
### Align.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Visual|`<Space>A`|Align selection from the right.
|
|
||||||
Visual|`<Space>a`|Align selection from the left.
|
|
||||||
|
|
||||||
### Autocomplete.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Input|`<C-Space>`|Autocomplete.
|
|
||||||
Normal|`<C-Space>`|LSP autocomplete.
|
|
||||||
|
|
||||||
### Comments.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal, Visual|`<Space>/`|Toggle selected line(s) comment.
|
|
||||||
|
|
||||||
### File tree.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal|`<Space>1`|Toggle file tree.
|
|
||||||
Normal|`<Tab>`|Toggle directory or open file for preview.
|
|
||||||
Normal|`a`|Create file/directory.
|
|
||||||
Normal|`x`|Cut file/directory.
|
|
||||||
Normal|`p`|Paste file/directory.
|
|
||||||
Normal|`f`|Filter.
|
|
||||||
Normal|`F`|Reset filter.
|
|
||||||
Normal|`d`|Delete file/directory.
|
|
||||||
Normal|`r`|Rename file.
|
|
||||||
Normal|`R`|Refresh.
|
|
||||||
Normal|`s`|Open in system app.
|
|
||||||
Normal|`S`|Search.
|
|
||||||
Normal|`I`|Toggle gitignore filter.
|
|
||||||
Normal|`y`|Copy name.
|
|
||||||
Normal|`Y`|Copy relative path.
|
|
||||||
|
|
||||||
### Fold.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal|`<Space>o`|Toggle fold.
|
|
||||||
Normal|`<Space>O`|Fold everything.
|
|
||||||
|
|
||||||
### Git.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal|`<Space>g`|Toggle git inspection mode.
|
|
||||||
|
|
||||||
### Macros.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Visual|`mwx`|Unwrap selection (select the stuff inside wraps).
|
|
||||||
Visual|`mw"`|Wrap selection in ".
|
|
||||||
Visual|`mw3"`|Wrap selection in 3x ".
|
|
||||||
Visual|`mw'`|Wrap selection in '.
|
|
||||||
Visual|`mw(`|Wrap selection in ().
|
|
||||||
Visual|`mw{`|Wrap selection in {}.
|
|
||||||
Visual|`mw[`|Wrap selection in [].
|
|
||||||
Visual|`` mw` ``|Wrap selection in \`.
|
|
||||||
Visual|`` mw3` ``|Wrap selection in 3x \`.
|
|
||||||
Visual|`mw*`|Wrap selection in *.
|
|
||||||
Visual|`mw2*`|Wrap selection in 2x *.
|
|
||||||
Visual|`mw3*`|Wrap selection in 3x *.
|
|
||||||
Visual|`mw `|Wrap selection in spaces.
|
|
||||||
Normal, Visual|`mmx`|Markdown: set - [ ] as completed.
|
|
||||||
Normal, Visual|`mm `|Markdown: set - [x] as not completed.
|
|
||||||
Normal|`mmp`|Markdown: insert paragrapg (2x non-breakable spaces).
|
|
||||||
Visual|`mmb`|Markdown: make selection bold.
|
|
||||||
Visual|`mmi`|Markdown: make selection italic.
|
|
||||||
Visual|`mms`|Markdown: make selection strikethrough.
|
|
||||||
Visual|`mmr`|Markdown: make selection a reference.
|
|
||||||
Visual|`mmc`|Markdown: make selection a code block.
|
|
||||||
Normal|`mi`|Copy and increment selected line.
|
|
||||||
Normal|`ma`|Select all.
|
|
||||||
|
|
||||||
### Navigation.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal|`<Space>w`|Switch to the split above.
|
|
||||||
Normal|`<Space>a`|Switch to the split left.
|
|
||||||
Normal|`<Space>s`|Switch to the split below.
|
|
||||||
Normal|`<Space>d`|Switch to the split right.
|
|
||||||
Normal|`<Space>q`|Swtich to the buffer left.
|
|
||||||
Normal|`<Space>e`|Swtich to the buffer right.
|
|
||||||
Normal|`<Space>Q`|Move the buffer left.
|
|
||||||
Normal|`<Space>E`|Move the buffer right.
|
|
||||||
Normal|`<Space>x`|Close the buffer.
|
|
||||||
Normal|`<Space>X`|Close all invisible buffers.
|
|
||||||
Normal|`<Space>m`|Move split.
|
|
||||||
Normal|`<Space>\|`|Split vertically.
|
|
||||||
Normal|`<Space>-`|Split horizontally.
|
|
||||||
Normal|`<Space>c`|Close split.
|
|
||||||
Input|`<C-h>`|Move left.
|
|
||||||
Input|`<C-l>`|Move right.
|
|
||||||
Input|`<C-j>`|Move down.
|
|
||||||
Input|`<C-k>`|Move up.
|
|
||||||
|
|
||||||
### Telescope.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal|`<Space>ff`|Find files.
|
|
||||||
Normal|`<Space>fg`|Find grep (find text within files).
|
|
||||||
Normal|`<Space>fb`|Find buffer.
|
|
||||||
Normal|`<Space>fh`|Find help.
|
|
||||||
Normal|`<Space>ft`|Find treesitter (vars, functions etc).
|
|
||||||
Normal|`<Space>fa`|Find all (default treesitter window).
|
|
||||||
|
|
||||||
### Terminal.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal|`<Space>4`|Open terminal.
|
|
||||||
Terminal|`<Esc>`|Detach from terminal.
|
|
||||||
|
|
||||||
### To-do.
|
|
||||||
|
|
||||||
Write `TODO:` or `NOTE:` to make it searchable.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal|`<Space>3`|Open to-do list.
|
|
||||||
|
|
||||||
### Trouble.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal|`<Space>2`|Open LSP trouble list.
|
|
||||||
|
|
||||||
### Which key.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal|`<Space>0`|Show context hotkey help.
|
|
||||||
|
|
||||||
### Window management.
|
|
||||||
|
|
||||||
Mode|Key|Action
|
|
||||||
---|---|---
|
|
||||||
Normal|`-`|Decrease split size vertically.
|
|
||||||
Normal|`_`|Increase split size vertically.
|
|
||||||
Normal|`\`|Decrease split size horizontally.
|
|
||||||
Normal|`\|`|Increase split size horizontally.
|
|
||||||
Normal|`<Space>=`|Equalize split sizes.
|
|
||||||
|
|
||||||
# Bash commands.
|
|
||||||
|
|
||||||
To get help with usage info run:
|
|
||||||
|
|
||||||
```text
|
|
||||||
$ help <COMMAND>
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
$ h <COMMAND>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Android.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`emulator [NAME]`|Starts an Android emulator. Default name is "default".
|
|
||||||
|
|
||||||
## Archive.
|
|
||||||
|
|
||||||
Those are self-written scripts to create archives. They are basically compressed tar archives with SHA1 hashes in their names. They are exported so also available in `parallel` like this: `ls | parallel -j 8 -- archive {}`
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`archive [DIRS]`|Create archive with the best compression (slow). If no args given, archives all files in current directory as separate archives.
|
|
||||||
`archive_fast [FILES]`|Like normal `archive` but with minimal compression.
|
|
||||||
`archive_check [ARCHIVES]`|Check specified archives or all archives in current directory.
|
|
||||||
`archive_name [ARCHIVES] [NAME]`|Rename specified archive ro specified name or simplify name for specified archive or simplify names for all archives.
|
|
||||||
`archive_prune [NAME]`|Delete old versions of an archive, or all archives by default.
|
|
||||||
`unarchive [ARCHIVES]`|Check specified or all archives and extract if they are correct.
|
|
||||||
|
|
||||||
## Autocomplete.
|
|
||||||
|
|
||||||
Thos are functions that provide tab-completions.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
_foo()
|
|
||||||
{
|
|
||||||
_autocomplete "{foo,bar}"
|
|
||||||
}
|
|
||||||
complete -F _foo foo
|
|
||||||
```
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`_autocomplete <ARGS>`|Provide completion based on provided arguments separated by spaces.
|
|
||||||
`_autocomplete_first <ARGS>`|Same as `_autocomplete` but works only once for first argument.
|
|
||||||
`_autocomplete_grep <PATTERN>`|Ls autocomplete with specified grep filter.
|
|
||||||
`_autocomplete_nested`|Provides nested completions, just like `sudo` does.
|
|
||||||
|
|
||||||
## Battery.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`battery_level`|Print battery charge level (if available).
|
|
||||||
|
|
||||||
## Bootstrap.
|
|
||||||
|
|
||||||
Shortcuts to install different stuff.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`bootstrap_cargo`|Install cargo.
|
|
||||||
`bootstrap_texlive`|Install TeXLive package.
|
|
||||||
`bootstrap_grub`|Install grub theme. Requires root.
|
|
||||||
`bootstrap_ffmpeg`|Install ffmpeg in flatpak to make `~/app/bin/ffmpeg` work.
|
|
||||||
|
|
||||||
## Cd.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`cdd <DIR>`|Cd back to previous directory by name.
|
|
||||||
|
|
||||||
## Checksum.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`checksum_create [FILES]`|Create checksums for files in current directory.
|
|
||||||
`checksum_check [FILES]`|Check previously created checksums.
|
|
||||||
|
|
||||||
## Chmod.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`x <FILE>`|Make file executable.
|
|
||||||
|
|
||||||
## Color.
|
|
||||||
|
|
||||||
### How to use.
|
|
||||||
|
|
||||||
Most of the time you want to use it with `echo`. To make `echo` respect colors, you need to use `-e` flag like that:
|
|
||||||
```bash
|
|
||||||
export color_default="\033[0m"
|
|
||||||
export color_red="\033[0;31m"
|
|
||||||
echo -e "${color_red}hello world!${color_default}" # will print "hello world!" in red.
|
|
||||||
```
|
|
||||||
Don't forget to use `color_default` at the end, or your whole terminal will be red.
|
|
||||||
|
|
||||||
### List of colors.
|
|
||||||
|
|
||||||
Please note that colors depend on Terminal Emulator and may vary based on its settings.
|
|
||||||
|
|
||||||
|Color|Code|
|
|
||||||
|---|---|
|
|
||||||
|default|`\033[0m`|
|
|
||||||
|blue|`\033[0;34m`|
|
|
||||||
|blue (bold)|`\033[1;34m`|
|
|
||||||
|cyan|`\033[0;36m`|
|
|
||||||
|cyan (bold)|`\033[1;36m`|
|
|
||||||
|green|`\033[0;32m`|
|
|
||||||
|green (bold)|`\033[1;32m`|
|
|
||||||
|purple|`\033[0;35m`|
|
|
||||||
|purple (bold)|`\033[1;35m`|
|
|
||||||
|red|`\033[0;31m`|
|
|
||||||
|red (bold)|`\033[1;31m`|
|
|
||||||
|white|`\033[0;37m`|
|
|
||||||
|white (bold)|`\033[1;37m`|
|
|
||||||
|yellow|`\033[0;33m`|
|
|
||||||
|yellow (bold)|`\033[1;33m`|
|
|
||||||
|
|
||||||
## Copy/paste.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`echo a \| copy`|Copy `a` to system clipboard.
|
|
||||||
`paste > file.txt`|Paste system clipboard to a file (or pipe).
|
|
||||||
|
|
||||||
## File copy (cp).
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`cp <FROM> <TO>`|Copy files or dirs. Actually, it is an alias for `rsync -ahP`. Multiple `<FROM>` could be specified.
|
|
||||||
`cp_merge <FROM> <TO>`|Mirror directories. Same as `rsync --delete`.
|
|
||||||
`cp_link <FROM> <TO>`|Copy directory by recursively creating hardlinks and directories.
|
|
||||||
`cp_test <FROM> <TO>`|Test cp_merge without writing anything.
|
|
||||||
`bcp <FROM> <TO>`|Default `cp` command.
|
|
||||||
|
|
||||||
## Date.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`today`|Return today's date in `YYYYmmdd` format.
|
|
||||||
`dow`|Return today's day of week, where 1 is Monday.
|
|
||||||
|
|
||||||
## Dconf (gnome settings).
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`dconf_load`|Load custom settings.
|
|
||||||
`dconf_save`|Export all current setting in a file to inspect.
|
|
||||||
|
|
||||||
## Disk.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`df`|Show free disk space (only physical media).
|
|
||||||
`du [FILES]`|Show disk usage.
|
|
||||||
|
|
||||||
## Docker.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`docker_volumes <CONTAINER>`|Show volumes of a specified container.
|
|
||||||
`docker_health`|Show containers that exited with an error code.
|
|
||||||
`docker_prune`|Heavy cleanup to free up space.
|
|
||||||
`docker_ip <CONTAINER>`|Show IP of a specified container.
|
|
||||||
`docker_update`|Update all Docker images.
|
|
||||||
`dc`|Short for `docker compose`.
|
|
||||||
`dcu [SERVICE]`|Start a compose service.
|
|
||||||
`dcd [SERVICE]`|Remove a compose service.
|
|
||||||
`dcp [SERVICE]`|Pull image for a compose service.
|
|
||||||
`dcl [SERVICE]`|Show logs for a compose service.
|
|
||||||
`dcr [SERVICE]`|Restart a compose service.
|
|
||||||
`dcs [SERVICE]`|Stop a compose service.
|
|
||||||
`dcdu [SERVICE]`|Recreate a compose service.
|
|
||||||
`dcpu [SERVICE]`|Update and recreate a compose service.
|
|
||||||
`dcul [SERVICE]`|Start a compose service and show its logs.
|
|
||||||
|
|
||||||
## Environment variables.
|
|
||||||
|
|
||||||
Variable|Description
|
|
||||||
---|---
|
|
||||||
`PATH`|Defines where to find binaries. Modified to also include `$HOME/app/bin/` recursively.
|
|
||||||
`LANGUAGE`|Specifies `UTF-8` as default.
|
|
||||||
`EDITOR`|Specifies nvim as a default editor.
|
|
||||||
`MANPAGER`|Specifies nvim as a default `man` viewer.
|
|
||||||
`JAVA_HOME`|Specifies where JDK is stored.
|
|
||||||
`ANDROID_SDK_ROOT`|Specifies where Android SDK is stored.
|
|
||||||
`TEXMFVAR`, `TEXMFCONFIG`, `TEXMFLOCAL`|Specifies paths for TeXLive user directories.
|
|
||||||
|
|
||||||
## Ffmpeg.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`ffmpeg_mux_audio <SOUND> <RESULT>`|Mux external audio into one container with video (replaces original audio). Run inside dir with original video. <SOUND> names should be the same for each video.
|
|
||||||
`ffmpeg_mux_cover <FORMAT> <COVER>`|Mux image into files of specified format.
|
|
||||||
`ffmpeg_music_meta <FORMAT>`|Detect and update music metadata.
|
|
||||||
|
|
||||||
## File.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`o <FILE>`|Open file with the default GUI app.
|
|
||||||
|
|
||||||
## Find.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`find_ext`|Find all file extensions recursively.
|
|
||||||
`find_function`|Find all dotfiles functions.
|
|
||||||
|
|
||||||
## Fix.
|
|
||||||
|
|
||||||
Contains simple fixes for various issues.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`fix_ethernet_speed <SPEED>`|Specify ethernet speed if it failed to set correct speed automatically. [SPEED] can be 10/100/1000 etc.
|
|
||||||
`fix_files_sftp`|Make Nautilus forget incorrect password for SFTP connection.
|
|
||||||
|
|
||||||
## Git.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`gps`|Git push.
|
|
||||||
`gpsf`|Git push --force.
|
|
||||||
`gpl`|Git pull.
|
|
||||||
`gl`|Git log.
|
|
||||||
`gs`|Git status.
|
|
||||||
`gst`|Git stash.
|
|
||||||
`gd`|Git diff.
|
|
||||||
`gdc <HASH>`|Git diff for a specific commit.
|
|
||||||
`gc <MESSAGE>`|Git commit.
|
|
||||||
`gch`|Git checkout.
|
|
||||||
`gchb`|Git checkout branch.
|
|
||||||
`gb`|Git branch.
|
|
||||||
`gbd <BRANCH>`|Delete specified Git branch.
|
|
||||||
`gbda`|Delete all local branches except the current one.
|
|
||||||
`gf`|Git fetch --all.
|
|
||||||
`gt`|Git tag.
|
|
||||||
`gi`|Delete files updated in git ignore.
|
|
||||||
`gpc <FILE>`|Git patch create.
|
|
||||||
`gp <FILE>`|Git patch (apply).
|
|
||||||
`ga`|Git add with preview.
|
|
||||||
`gr [COUNT]`|Git rebase. 2 last commits by default. 0 means from root.
|
|
||||||
`gu <EMAIL>`|Configure git user as Dmitry Voronin with specified email (project).
|
|
||||||
`gg <REPO>`|Get git repo from my own git.
|
|
||||||
`ggc`|Run git garbage collection.
|
|
||||||
|
|
||||||
## Help.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`help <FUNCTION>`|Get help for a dotfile function.
|
|
||||||
`h <FUNCTION>`|Same as `help`.
|
|
||||||
|
|
||||||
## Ls.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`l`|List files in current dir.
|
|
||||||
`ll`|List files by mtime.
|
|
||||||
`lll [DEPTH] [DIRS]`|Show file tree.
|
|
||||||
`llll`|List everything recursively.
|
|
||||||
`la`|List all files.
|
|
||||||
`lla`|List all files by mtime.
|
|
||||||
|
|
||||||
## Name.
|
|
||||||
|
|
||||||
Those are scripts to manipulate file names. They are all exported and available for `parallel`. If no [FILES] specified, it applies to all files inside current directory.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`name [FILES]`|Replace all non-alphanumeric characters in file with underscores.
|
|
||||||
`name_hash [FILES]`|Replace all file names with hashes, keep extension.
|
|
||||||
`name_hash_check [FILES]`|Check all file hashes.
|
|
||||||
`name_series <SEASON> [FILES]`|Rename files to Jellyfin's show format: `Episode S01E01.mkv`.
|
|
||||||
`name_manga <SEASON> [FILES]`|Rename files to Kavita's manga format: `Name Vol.1 Ch.01.cbr`.
|
|
||||||
`name_ext <EXTENSION> [FILES]`|Change file extensions.
|
|
||||||
`name_prefix <OLD> <NEW> [FILES]`|Change file prefix.
|
|
||||||
`name_postfix <OLD> <NEW> [FILES]`|Change file postfix.
|
|
||||||
`name_replace <OLD> <NEW> [FILES]`|Replace a part of file name.
|
|
||||||
|
|
||||||
## Ncdu.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`ncdu [DIR]`|Show recursive disk usage. Only on the same filesystem.
|
|
||||||
|
|
||||||
## Notify.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`notify <MESSAGE>`|Send notification.
|
|
||||||
`notify_silent <MESSAGE>`|Send silent notification.
|
|
||||||
|
|
||||||
## Own.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`own [USER] [FILE]`|Change ownership & permissions to specified user. Ownership changes only when root.
|
|
||||||
|
|
||||||
## Pack.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`pack <TARGET.ext> [FILES]`|Create desired file format from other files.
|
|
||||||
`unpack [FILES]`|Attempt to extract file content.
|
|
||||||
|
|
||||||
## Parse.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`parse_simplify <STRING>`|Return simplified string: only alnum, underscores and dashes.
|
|
||||||
`parse_camel <STRING>`|Return simplified CamelCase string.
|
|
||||||
`parse_alnum <STRING>`|Return string containing only alphanumeric characters.
|
|
||||||
|
|
||||||
## Permissions.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`perm`|Recursively change permissions not to share: 700 for dirs and 600 for files.
|
|
||||||
`perm_share`|Recursively change permissions to share: 755 for dirs and 644 for files.
|
|
||||||
|
|
||||||
## Ps.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`ps <PROGRAM>`|Show process info for matching [PROGRAM] name.
|
|
||||||
|
|
||||||
## Recursive.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`recursive <COMMAND>`|Cd into every directory recursively and run specified command in each dir.
|
|
||||||
`recursive1 <COMMAND>`|Cd into every directory in current directory and run specified command in each dir.
|
|
||||||
|
|
||||||
## Rust.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`rust_book`|Open Rust book in a browser.
|
|
||||||
|
|
||||||
## Shopt.
|
|
||||||
|
|
||||||
Shopt|Description
|
|
||||||
---|---
|
|
||||||
`dotglob`|When using `*` to match files, hidden files that start with a dot are also included.
|
|
||||||
`globstar`|Allows the use of `**` for recursive search.
|
|
||||||
`autocd`|Change directories without writing `cd`.
|
|
||||||
|
|
||||||
## Su.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`s`|An alias for `su` cause I'm lazy.
|
|
||||||
|
|
||||||
## Terminal.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`tsize`|Prints terminal size.
|
|
||||||
|
|
||||||
## Tmp.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`tmp`|CD into host's primary tmp dir.
|
|
||||||
|
|
||||||
## Tmux.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`ta [NAME]`|Attach to session by name. Default is `main`.
|
|
||||||
`td`|Detach from session.
|
|
||||||
`tl`|List all sessions.
|
|
||||||
`trn [NAME]`|Rename session. Uses current dir name by default.
|
|
||||||
`tn [NAME]`|Name window. Uses current dir name by default.
|
|
||||||
`tk [NAME]`|Kill session. Default is `main`.
|
|
||||||
`tka`|Kill all sessions.
|
|
||||||
|
|
||||||
## To-do.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`todo`|Open editor for `~/.todo.md` file.
|
|
||||||
|
|
||||||
## Toolbx.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`tb [NAME]`|Attach to box by name. Default is `main`.
|
|
||||||
`tbk [NAME]`|Kill box by name. Default is `main`.
|
|
||||||
`tb_rpmfusion [NAME]`|Install RPMFusion package to box by name. Default is `main`.
|
|
||||||
`tbl`|List all boxes.
|
|
||||||
|
|
||||||
## Transcode.
|
|
||||||
`transcode <FORMAT> [FILES]`|Convert between different formats.
|
|
||||||
|
|
||||||
## Try.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`try <COMMAND>`|Repeat the command every 2 seconds until it exits with success.
|
|
||||||
|
|
||||||
## Umask.
|
|
||||||
|
|
||||||
By default, umask is `077` which means group and others have no access when files are created.
|
|
||||||
|
|
||||||
## Util.
|
|
||||||
|
|
||||||
Short util functions.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`_core_count`|Get number of available CPU threads.
|
|
||||||
|
|
||||||
## Vdl.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`vdl [LINK]`|Download a video/playlist. When no link provided, tries to update previously downloaded link.
|
|
||||||
|
|
||||||
## Vi.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`vi`|Run vim.
|
|
||||||
`v`|Run neovim.
|
|
||||||
|
|
||||||
## Wallpaper.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`wallpaper <FILE>`|Set specified file as a wallpaper.
|
|
||||||
|
|
||||||
## Watch.
|
|
||||||
|
|
||||||
Command|Description
|
|
||||||
---|---
|
|
||||||
`w <COMMAND>`|Alias for `watch`.
|
|
||||||
`ww <COMMAND>`|Alias for `watch` that updates every 0.1 seconds.
|
|
||||||
|
|
||||||
# To-do later.
|
|
||||||
|
|
||||||
- [ ] Add tmux shortcuts to <C-t> combo, too.
|
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
# Start an Android emulator.
|
||||||
|
# Default name is "default".
|
||||||
|
# Usage: emulator [NAME]
|
||||||
function emulator() {
|
function emulator() {
|
||||||
${ANDROID_SDK_ROOT}/emulator/emulator -avd default &> /dev/null & disown
|
local name="${1}"
|
||||||
|
|
||||||
|
[[ "${name}" = "" ]] && name="default"
|
||||||
|
|
||||||
|
${ANDROID_SDK_ROOT}/emulator/emulator -avd "${name}" &> /dev/null & disown
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
export _ARCHIVE_PATTERN="_[0-9]{12}-[[:alnum:]]{40}.t[xg]z"
|
export _archive_pattern="_[0-9]{12}-[[:alnum:]]{40}.t[xg]z"
|
||||||
|
|
||||||
function _ARCHIVE_DATE() {
|
# Archive directories.
|
||||||
date +%Y%m%d%H%M
|
# All directories by default.
|
||||||
}
|
# Usage: archive [DIRS]
|
||||||
|
|
||||||
# archive file with maximum compression and checksum.
|
|
||||||
# usage: archive [FILES]
|
|
||||||
function archive() {
|
function archive() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local targets=("${@}")
|
local targets=("${@}")
|
||||||
local count=0
|
local count=0
|
||||||
local total=${#}
|
local total=${#}
|
||||||
local date=$(_ARCHIVE_DATE)
|
local date=$(_archive_date)
|
||||||
local failed=0
|
local failed=0
|
||||||
|
|
||||||
# Set dafult value to target all directories.
|
# Set dafult value to target all directories.
|
||||||
|
@ -51,14 +48,15 @@ function archive() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# archive file with minimal compression and checksum.
|
# Archive directories with fast compression.
|
||||||
# usage: archive_fast [FILES]
|
# All directories by default.
|
||||||
|
# Usage: archive_fast [DIRS]
|
||||||
function archive_fast() {
|
function archive_fast() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local targets=("${@}")
|
local targets=("${@}")
|
||||||
local count=0
|
local count=0
|
||||||
local total=${#}
|
local total=${#}
|
||||||
local date=$(_ARCHIVE_DATE)
|
local date=$(_archive_date)
|
||||||
local failed=0
|
local failed=0
|
||||||
|
|
||||||
# Set dafult value to target all directories.
|
# Set dafult value to target all directories.
|
||||||
|
@ -98,8 +96,9 @@ function archive_fast() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# check archive hashes.
|
# Check archives integrity.
|
||||||
# usage: archive_check [FILES]
|
# Checks all archives by default.
|
||||||
|
# Usage: archive_check [FILES]
|
||||||
function archive_check() {
|
function archive_check() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local targets=("${@}")
|
local targets=("${@}")
|
||||||
|
@ -109,7 +108,7 @@ function archive_check() {
|
||||||
|
|
||||||
# set dafult value to target all supported archives.
|
# set dafult value to target all supported archives.
|
||||||
if [[ "${targets}" = "" ]]; then
|
if [[ "${targets}" = "" ]]; then
|
||||||
targets=($(ls | grep -E ${_ARCHIVE_PATTERN}))
|
targets=($(ls | grep -E ${_archive_pattern}))
|
||||||
total=${#targets[@]}
|
total=${#targets[@]}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -143,6 +142,7 @@ function archive_check() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Delete old versions of an archives.
|
# Delete old versions of an archives.
|
||||||
|
# All archives by default.
|
||||||
# Usage: archive_prune [NAME]
|
# Usage: archive_prune [NAME]
|
||||||
function archive_prune() {
|
function archive_prune() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
|
@ -153,7 +153,7 @@ function archive_prune() {
|
||||||
|
|
||||||
# All archives by default.
|
# All archives by default.
|
||||||
if [[ "${targets}" = "" ]]; then
|
if [[ "${targets}" = "" ]]; then
|
||||||
targets=($(ls | grep -E ${_ARCHIVE_PATTERN}))
|
targets=($(ls | grep -E ${_archive_pattern}))
|
||||||
total=${#targets[@]}
|
total=${#targets[@]}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -193,8 +193,8 @@ function archive_prune() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# extract previously created archive with checksum validation.
|
# Extract previously created archive with checksum validation.
|
||||||
# usage: unarchive [FILES]
|
# Usage: unarchive [FILES]
|
||||||
function unarchive() {
|
function unarchive() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local targets=("${@}")
|
local targets=("${@}")
|
||||||
|
@ -204,7 +204,7 @@ function unarchive() {
|
||||||
|
|
||||||
# set dafult value to target all supported archives.
|
# set dafult value to target all supported archives.
|
||||||
if [[ "${targets}" = "" ]]; then
|
if [[ "${targets}" = "" ]]; then
|
||||||
targets=($(ls | grep -E ${_ARCHIVE_PATTERN}))
|
targets=($(ls | grep -E ${_archive_pattern}))
|
||||||
total=${#targets[@]}
|
total=${#targets[@]}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -259,8 +259,10 @@ function unarchive() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# rename archive. if no name specified, it simplifies archive's name.
|
# Rename archives.
|
||||||
# usage: archive_name [ARCHIVE] [NAME]
|
# If no name specified, it simplifies archive's name.
|
||||||
|
# If no archives specified, apply to all archives.
|
||||||
|
# Usage: archive_name [ARCHIVE] [NAME]
|
||||||
function archive_name() {
|
function archive_name() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local targets="${1}"
|
local targets="${1}"
|
||||||
|
@ -271,7 +273,7 @@ function archive_name() {
|
||||||
|
|
||||||
# set dafult value to target all supported archives.
|
# set dafult value to target all supported archives.
|
||||||
if [[ "${targets}" = "" ]]; then
|
if [[ "${targets}" = "" ]]; then
|
||||||
targets=($(ls | grep -E ${_ARCHIVE_PATTERN}))
|
targets=($(ls | grep -E ${_archive_pattern}))
|
||||||
total=${#targets[@]}
|
total=${#targets[@]}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -323,7 +325,7 @@ function archive_name() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# convert an old archive to a new format. TODO: remove me after some time when there won't be any old archives.
|
# Convert old archives to a new format. TODO: remove me after some time when there won't be any old archives.
|
||||||
function archive_convert() {
|
function archive_convert() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local old_format="_[[:alnum:]]{40}.tar.[xg]z"
|
local old_format="_[[:alnum:]]{40}.tar.[xg]z"
|
||||||
|
@ -366,6 +368,8 @@ function archive_convert() {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Parse archive file name to get: name, date, hash and format.
|
||||||
|
# Usage: _archive_parse <FILENAME>
|
||||||
function _archive_parse() {
|
function _archive_parse() {
|
||||||
local input="${1}"
|
local input="${1}"
|
||||||
local name="${input%_*}"
|
local name="${input%_*}"
|
||||||
|
@ -380,6 +384,8 @@ function _archive_parse() {
|
||||||
echo "${format}"
|
echo "${format}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Autocomplete for archive_name function.
|
||||||
|
# First arg is the archives list, second one is selected archive's current name.
|
||||||
function _archive_name() {
|
function _archive_name() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
COMPREPLY=()
|
COMPREPLY=()
|
||||||
|
@ -389,7 +395,7 @@ function _archive_name() {
|
||||||
local command="${COMP_WORDS[0]}"
|
local command="${COMP_WORDS[0]}"
|
||||||
|
|
||||||
if [[ "${prev}" = "${command}" ]]; then
|
if [[ "${prev}" = "${command}" ]]; then
|
||||||
COMPREPLY=( $(compgen -W "$(ls | grep -E ${_ARCHIVE_PATTERN})" -- ${cur}) )
|
COMPREPLY=( $(compgen -W "$(ls | grep -E ${_archive_pattern})" -- ${cur}) )
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
local name="${prev%_*}"
|
local name="${prev%_*}"
|
||||||
|
@ -398,8 +404,14 @@ function _archive_name() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Autocomplete with archives in current dir.
|
||||||
function _archive_grep() {
|
function _archive_grep() {
|
||||||
_autocomplete_grep ${_ARCHIVE_PATTERN}
|
_autocomplete_grep ${_archive_pattern}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get date for a new archive.
|
||||||
|
function _archive_date() {
|
||||||
|
date +%Y%m%d%H%M
|
||||||
}
|
}
|
||||||
|
|
||||||
complete -o filenames -F _archive_grep archive_check unarchive
|
complete -o filenames -F _archive_grep archive_check unarchive
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# bash autocomplete.
|
# Bash autocomplete.
|
||||||
# usage: _foo() { _autocomplete "{foo,bar}" } ; complete -F _foo foo
|
# There are also options like -o nospace. see man for more info.
|
||||||
# there are also options like -o nospace. see man for more info.
|
# Usage: _foo() { _autocomplete "{foo,bar}" } ; complete -F _foo foo
|
||||||
function _autocomplete() {
|
function _autocomplete() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local commands="${*}"
|
local commands="${*}"
|
||||||
|
@ -15,7 +15,7 @@ function _autocomplete() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# autocomplete only first argument.
|
# Autocomplete only first argument.
|
||||||
function _autocomplete_first() {
|
function _autocomplete_first() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local commands="${*}"
|
local commands="${*}"
|
||||||
|
@ -46,7 +46,7 @@ function _autocomplete_grep() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# autocomplete nested program.
|
# Autocomplete nested program.
|
||||||
function _autocomplete_nested() {
|
function _autocomplete_nested() {
|
||||||
# local IFS=$'\n'
|
# local IFS=$'\n'
|
||||||
local cur prev words cword split i
|
local cur prev words cword split i
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# check battery level.
|
# Print current battery level.
|
||||||
function battery_level() {
|
function battery_level() {
|
||||||
cat /sys/class/power_supply/BAT*/capacity
|
cat /sys/class/power_supply/BAT*/capacity
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# install Cargo/Rust.
|
# Install Cargo/Rust.
|
||||||
function bootstrap_rust() {
|
function bootstrap_rust() {
|
||||||
curl https://sh.rustup.rs -sSf | sh
|
curl https://sh.rustup.rs -sSf | sh
|
||||||
rustup component add rust-analyzer
|
rustup component add rust-analyzer
|
||||||
}
|
}
|
||||||
|
|
||||||
# install TeXLive.
|
# Install TeXLive.
|
||||||
function bootstrap_texlive() {
|
function bootstrap_texlive() {
|
||||||
cd /tmp
|
cd /tmp
|
||||||
wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
|
wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
|
||||||
|
@ -14,14 +14,14 @@ function bootstrap_texlive() {
|
||||||
./install-tl
|
./install-tl
|
||||||
}
|
}
|
||||||
|
|
||||||
# install grub theme.
|
# Install grub theme.
|
||||||
function bootstrap_grub() {
|
function bootstrap_grub() {
|
||||||
wget -O- https://github.com/shvchk/fallout-grub-theme/raw/master/install.sh | bash
|
wget -O- https://github.com/shvchk/fallout-grub-theme/raw/master/install.sh | bash
|
||||||
echo 'GRUB_HIDDEN_TIMEOUT=' >> /etc/default/grub
|
echo 'GRUB_HIDDEN_TIMEOUT=' >> /etc/default/grub
|
||||||
grub2-mkconfig -o /etc/grub2.cfg
|
grub2-mkconfig -o /etc/grub2.cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
# install ffmpeg.
|
# Install ffmpeg.
|
||||||
function bootstrap_ffmpeg() {
|
function bootstrap_ffmpeg() {
|
||||||
flatpak install org.kde.kdenlive
|
flatpak install org.kde.kdenlive
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# CD (back) to directory.
|
# CD (back) to directory.
|
||||||
|
# Finds first directory that matches the input (case-insensitive).
|
||||||
# Usage: cdd <DIR>
|
# Usage: cdd <DIR>
|
||||||
function cdd() {
|
function cdd() {
|
||||||
local target="${1}"
|
local target="${1}"
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
# Save file checksums.
|
# 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.
|
||||||
# Usage: checksum_create [FILES]
|
# Usage: checksum_create [FILES]
|
||||||
function checksum_create() {
|
function checksum_create() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
|
@ -46,6 +48,8 @@ function checksum_create() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check stored values against actual files.
|
# Check stored values against actual files.
|
||||||
|
# All files by default.
|
||||||
|
# Usage: checksum_check [FILES]
|
||||||
function checksum_check() {
|
function checksum_check() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local targets=("${@}")
|
local targets=("${@}")
|
||||||
|
@ -95,16 +99,21 @@ function checksum_check() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Calculate hashes for all files recursively and store in a file called "checksum.sha1".
|
||||||
function checksum() {
|
function checksum() {
|
||||||
find -type f | parallel -j $(_core_count) -- sha1sum {} >> checksum.sha1
|
find -type f | parallel -j $(_core_count) -- sha1sum {} >> checksum.sha1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Create checksum for a file.
|
||||||
|
# Usage: _checksum_create <FILE>
|
||||||
function _checksum_create() {
|
function _checksum_create() {
|
||||||
local path="${1%/*}"
|
local path="${1%/*}"
|
||||||
local name="${1##*/}"
|
local name="${1##*/}"
|
||||||
sha1sum "${path}/${name}" > "${path}/.${name}.sha1"
|
sha1sum "${path}/${name}" > "${path}/.${name}.sha1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check checksum for a file.
|
||||||
|
# Usage: _checksum_check <FILE>
|
||||||
function _checksum_check() {
|
function _checksum_check() {
|
||||||
local file="${1##*\ \ }"
|
local file="${1##*\ \ }"
|
||||||
local stored="${1%%\ \ *}"
|
local stored="${1%%\ \ *}"
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# add executable flag to file.
|
# Add executable flag to file.
|
||||||
|
# Usage: x <FILES>
|
||||||
function x() {
|
function x() {
|
||||||
chmod +x "${@}"
|
chmod +x -- "${@}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# collection of available CLI colors.
|
# Collection of available CLI colors.
|
||||||
# they may differ depending on the terminal used.
|
# They may differ depending on the terminal used.
|
||||||
# colors with 'b' prefix are bold colors.
|
# Colors with 'b' prefix are bold colors.
|
||||||
|
|
||||||
export color_default="\033[0m"
|
export color_default="\033[0m"
|
||||||
export color_blue="\033[0;34m"
|
export color_blue="\033[0;34m"
|
||||||
|
@ -18,7 +18,7 @@ export color_bwhite="\033[1;37m"
|
||||||
export color_yellow="\033[0;33m"
|
export color_yellow="\033[0;33m"
|
||||||
export color_byellow="\033[1;33m"
|
export color_byellow="\033[1;33m"
|
||||||
|
|
||||||
# print all available colors with their names colored in corresponding color.
|
# Print all available colors with their names colored in corresponding color.
|
||||||
function color_test() {
|
function color_test() {
|
||||||
echo -e "${color_default}color_default\n${color_blue}color_blue\n${color_bblue}color_bblue\n${color_cyan}color_cyan\n${color_bcyan}color_bcyan\n${color_green}color_green\n${color_bgreen}color_bgreen\n${color_purple}color_purple\n${color_bpurple}color_bpurple\n${color_red}color_red\n${color_bred}color_bred\n${color_white}color_white\n${color_bwhite}color_bwhite\n${color_yellow}color_yellow\n${color_byellow}color_byellow"
|
echo -e "${color_default}color_default\n${color_blue}color_blue\n${color_bblue}color_bblue\n${color_cyan}color_cyan\n${color_bcyan}color_bcyan\n${color_green}color_green\n${color_bgreen}color_bgreen\n${color_purple}color_purple\n${color_bpurple}color_bpurple\n${color_red}color_red\n${color_bred}color_bred\n${color_white}color_white\n${color_bwhite}color_bwhite\n${color_yellow}color_yellow\n${color_byellow}color_byellow"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,2 +1,9 @@
|
||||||
alias copy="wl-copy" # copy stdin to system clipboard.
|
# Copy stdin to system clipboard. Example: echo hi | copy
|
||||||
alias paste="wl-paste" # paste system clipboard to stdout.
|
function copy() {
|
||||||
|
wl-copy
|
||||||
|
}
|
||||||
|
|
||||||
|
# Paste system clipboard to stdout. Example: paste > file.txt
|
||||||
|
function paste() {
|
||||||
|
wl-paste
|
||||||
|
}
|
||||||
|
|
|
@ -1,24 +1,30 @@
|
||||||
# replace default cp with rsync.
|
# Replaces default cp with rsync.
|
||||||
|
# Usage: cp <FROM> <TO>
|
||||||
function cp() {
|
function cp() {
|
||||||
rsync -ahP --chmod=u+w -- "${@}"
|
rsync -ahP --chmod=u+w -- "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# copy and also merge all changes (delete dst files that do not exist in src).
|
# Copy and also merge all changes (delete dst files that do not exist in src).
|
||||||
|
# Usage: cp_merge <FROM> <TO>
|
||||||
function cp_merge() {
|
function cp_merge() {
|
||||||
rsync -ahP --chmod=u+w --delete -- "${@}"
|
rsync -ahP --chmod=u+w --delete -- "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# copy by creating hardlinks.
|
# Copy by creating hardlinks.
|
||||||
|
# Works for directories, too.
|
||||||
|
# Usage: cp_link <FROM> <TO>
|
||||||
function cp_link() {
|
function cp_link() {
|
||||||
/usr/bin/cp -lr -- "${@}"
|
/usr/bin/cp -lr -- "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# default cp, a.k.a builtin cp.
|
# Default cp, a.k.a builtin cp.
|
||||||
|
# When you don't need rsync.
|
||||||
function bcp() {
|
function bcp() {
|
||||||
/usr/bin/cp "${@}"
|
/usr/bin/cp "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# cp_merge without writing anything.
|
# Print output of cp_merge without writing anything.
|
||||||
|
# Usage: cp_test <FROM> <TO>
|
||||||
function cp_test() {
|
function cp_test() {
|
||||||
rsync -ahP --chmod=u+w --delete -n -- "${@}"
|
rsync -ahP --chmod=u+w --delete -n -- "${@}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# print today date in yyyyMMdd format.
|
# Print today date in yyyyMMdd format.
|
||||||
function today() {
|
function today() {
|
||||||
date +%Y%m%d
|
date +%Y%m%d
|
||||||
}
|
}
|
||||||
|
|
||||||
# current day of week number.
|
# Current day of week number.
|
||||||
function dow() {
|
function dow() {
|
||||||
date +%u
|
date +%u
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,16 @@
|
||||||
export _GDCONF_PATH="${HOME}/.config/linux/gnome.dconf"
|
export _gdconf_path="${HOME}/.config/linux/gnome.dconf"
|
||||||
|
|
||||||
|
# Load Gnome settings.
|
||||||
function dconf_load() {
|
function dconf_load() {
|
||||||
sed -i -e s/voronind/$(whoami)/g ${_GDCONF_PATH} ; dconf load / < ${_GDCONF_PATH}
|
sed -i -e s/voronind/$(whoami)/g ${_gdconf_path} ; dconf load / < ${_gdconf_path}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
# Usage: dconf_save [FILE]
|
||||||
function dconf_save() {
|
function dconf_save() {
|
||||||
dconf dump / > gnome.dconf
|
local name="${1}"
|
||||||
|
[[ "${name}" = "" ]] && name="gnome.dconf"
|
||||||
|
dconf dump / > "${name}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
# show only physical drive sizes.
|
# Show only physical drives info.
|
||||||
function df() {
|
function df() {
|
||||||
df --si | sed -e '1p' -e "/^\/dev\//!d"
|
/usr/bin/df --si | sed -e '1p' -e "/^\/dev\//!d"
|
||||||
}
|
}
|
||||||
|
|
||||||
# show combined size in SI.
|
# Show combined size in SI.
|
||||||
|
# Current dir by default.
|
||||||
|
# Usage: du [DIRS]
|
||||||
function du() {
|
function du() {
|
||||||
du -sh --si -- "${@}"
|
/usr/bin/du -sh --si -- "${@}"
|
||||||
}
|
}
|
||||||
|
|
42
.config/bash/module/doc.sh
Normal file
42
.config/bash/module/doc.sh
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# Generate a markdown file with all the help info.
|
||||||
|
# Outputs to ~/.doc/bash.md
|
||||||
|
function doc_bash() {
|
||||||
|
local IFS=$'\n'
|
||||||
|
local file="${HOME}/.doc/bash.md"
|
||||||
|
|
||||||
|
# Print title.
|
||||||
|
echo "# Bash reference file." > "${file}"
|
||||||
|
echo >> "${file}"
|
||||||
|
|
||||||
|
# Print help info.
|
||||||
|
echo "To get help with usage info run:" >> "${file}"
|
||||||
|
echo >> "${file}"
|
||||||
|
echo '```text' >> "${file}"
|
||||||
|
echo '$ help <COMMAND>' >> "${file}"
|
||||||
|
echo >> "${file}"
|
||||||
|
echo "or" >> "${file}"
|
||||||
|
echo >> "${file}"
|
||||||
|
echo '$ h <COMMAND>' >> "${file}"
|
||||||
|
echo '```' >> "${file}"
|
||||||
|
echo >> "${file}"
|
||||||
|
|
||||||
|
# Print table title.
|
||||||
|
echo "Command|Description" >> "${file}"
|
||||||
|
echo "---|---" >> "${file}"
|
||||||
|
|
||||||
|
# Fill with data.
|
||||||
|
for fun in $(find_functions | sort); do
|
||||||
|
# Skip private functions.
|
||||||
|
[[ "${fun}" =~ ^_.* ]] && continue
|
||||||
|
|
||||||
|
# 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
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
# show container's volumes.
|
# Show container's volumes.
|
||||||
|
# Usage: docker_volumes <CONTAINER>
|
||||||
function docker_volumes() {
|
function docker_volumes() {
|
||||||
docker inspect -f '{{ .Mounts }}' "${@}"
|
docker inspect -f '{{ .Mounts }}' "${@}"
|
||||||
}
|
}
|
||||||
|
@ -8,43 +9,48 @@ function docker_health() {
|
||||||
docker ps -a | grep Exited
|
docker ps -a | grep Exited
|
||||||
}
|
}
|
||||||
|
|
||||||
# prune everything.
|
# Prune everything.
|
||||||
function docker_prune() {
|
function docker_prune() {
|
||||||
docker system prune --volumes --all
|
docker system prune --volumes --all
|
||||||
}
|
}
|
||||||
|
|
||||||
# Docker compose shortcut.
|
# Docker compose shortcut.
|
||||||
# Usage: dc [SERVICE]
|
|
||||||
function dc() {
|
function dc() {
|
||||||
docker compose "${@}"
|
docker compose "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Docker compose up.
|
# Docker compose up.
|
||||||
|
# Usage: dcu [SERVICES]
|
||||||
function dcu() {
|
function dcu() {
|
||||||
docker compose up -d "${@}"
|
docker compose up -d "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Docker compose down.
|
# Docker compose down.
|
||||||
|
# Usage: dcd [SERVICES]
|
||||||
function dcd() {
|
function dcd() {
|
||||||
docker compose down "${@}"
|
docker compose down "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Docker compose pull.
|
# Docker compose pull.
|
||||||
|
# Usage: dcp [SERVICES]
|
||||||
function dcp() {
|
function dcp() {
|
||||||
docker compose pull "${@}"
|
docker compose pull "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Docker compose logs.
|
# Docker compose logs.
|
||||||
|
# Usage: dcl [SERVICES]
|
||||||
function dcl() {
|
function dcl() {
|
||||||
docker compose logs -f "${@}"
|
docker compose logs -f "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Docker compose restart.
|
# Docker compose restart.
|
||||||
|
# Usage: dcr [SERVICES]
|
||||||
function dcr() {
|
function dcr() {
|
||||||
docker compose restart "${@}"
|
docker compose restart "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Docker compose stop.
|
# Docker compose stop.
|
||||||
|
# Usage: dcs [SERVICES]
|
||||||
function dcs() {
|
function dcs() {
|
||||||
docker compose stop "${@}"
|
docker compose stop "${@}"
|
||||||
}
|
}
|
||||||
|
@ -70,7 +76,7 @@ function dcul() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Find out container's IP address.
|
# Find out container's IP address.
|
||||||
# Usage: docker_up <CONTAINER NAME>
|
# Usage: docker_up <CONTAINER>
|
||||||
function docker_ip() {
|
function docker_ip() {
|
||||||
docker inspect -f '\''{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'\' "${1}" | sed "s/^.//" | sed "s/.$//"
|
docker inspect -f '\''{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'\' "${1}" | sed "s/^.//" | sed "s/.$//"
|
||||||
}
|
}
|
||||||
|
@ -80,10 +86,12 @@ function docker_update() {
|
||||||
docker images --format "{{.Repository}}:{{.Tag}}" | xargs -L1 docker pull
|
docker images --format "{{.Repository}}:{{.Tag}}" | xargs -L1 docker pull
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Autocomplete with available services.
|
||||||
function _dc_services() {
|
function _dc_services() {
|
||||||
_autocomplete "$(docker compose config --services 2> /dev/null)"
|
_autocomplete "$(docker compose config --services 2> /dev/null)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Autocomplete with available container names.
|
||||||
function _dc_containers() {
|
function _dc_containers() {
|
||||||
_autocomplete "$(docker ps --format "\""{{.Names}}"\"")"
|
_autocomplete "$(docker ps --format "\""{{.Names}}"\"")"
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,4 +25,4 @@ export TEXMFCONFIG="$HOME/app/tex/data/config"
|
||||||
export TEXMFLOCAL="$HOME/app/tex/data/local"
|
export TEXMFLOCAL="$HOME/app/tex/data/local"
|
||||||
|
|
||||||
# Dotfiles exports.
|
# Dotfiles exports.
|
||||||
export DOTFILES_PATH="${HOME}/.config/bash/module"
|
export BASH_MODULE_PATH="${HOME}/.config/bash/module"
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# mux audio into containers. file names in sound and current dirrectories must match. tmp usage for anime downloads.
|
# Mux audio into containers. File names in sound and current dirrectories must match. Tmp usage for anime downloads.
|
||||||
# usage: ffmpeg_mux_audio <SOUND> <OUTPUT DIR>
|
# Usage: ffmpeg_mux_audio <SOUND> <OUTPUT DIR>
|
||||||
function ffmpeg_mux_audio() {
|
function ffmpeg_mux_audio() {
|
||||||
if [[ "$1" = "" ]]; then
|
if [[ "${1}" = "" ]]; then
|
||||||
echo "usage: ffmpeg_mux_audio <SOUND> <OUTPUT DIR>"
|
help ffmpeg_mux_audio
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ function ffmpeg_mux_audio() {
|
||||||
# Usage: ffmpeg_mux_cover <FORMAT> <COVER>
|
# Usage: ffmpeg_mux_cover <FORMAT> <COVER>
|
||||||
function ffmpeg_mux_cover() {
|
function ffmpeg_mux_cover() {
|
||||||
if [[ "${1}" = "" ]]; then
|
if [[ "${1}" = "" ]]; then
|
||||||
echo "Usage: ffmpeg_mux_cover <FORMAT> <COVER>"
|
help ffmpeg_mux_cover
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -39,11 +39,14 @@ function ffmpeg_mux_cover() {
|
||||||
rm -d out/ && rm "${2}"
|
rm -d out/ && rm "${2}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Change music metadata.
|
# 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.
|
||||||
# Usage: ffmpeg_music_meta <FORMAT>
|
# Usage: ffmpeg_music_meta <FORMAT>
|
||||||
function ffmpeg_music_meta() {
|
function ffmpeg_music_meta() {
|
||||||
if [[ "${1}" = "" ]]; then
|
if [[ "${1}" = "" ]]; then
|
||||||
echo "Usage: ffmpeg_music_meta <FORMAT>"
|
help ffmpeg_music_meta
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -71,17 +74,20 @@ function ffmpeg_music_meta() {
|
||||||
rm -d out/
|
rm -d out/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Get video FPS.
|
||||||
function _ffprobe_fps() {
|
function _ffprobe_fps() {
|
||||||
local fps=$(ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate "${1}")
|
local fps=$(ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate "${1}")
|
||||||
fps="${fps%%/*}"
|
fps="${fps%%/*}"
|
||||||
echo "${fps}"
|
echo "${fps}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Get recommended keyframe interval for a file.
|
||||||
_ffprobe_keyint() {
|
_ffprobe_keyint() {
|
||||||
local fps=$(_ffprobe_fps "${1}")
|
local fps=$(_ffprobe_fps "${1}")
|
||||||
echo $((fps*5))
|
echo $((fps*5))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Get audio bitrage. 128 by default.
|
||||||
function _ffprobe_ba() {
|
function _ffprobe_ba() {
|
||||||
local ba=$(ffprobe -v error -select_streams a:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 "${1}")
|
local ba=$(ffprobe -v error -select_streams a:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 "${1}")
|
||||||
[[ "${ba}" != "N/A" ]] && echo $((ba/1024)) || echo 128
|
[[ "${ba}" != "N/A" ]] && echo $((ba/1024)) || echo 128
|
||||||
|
|
|
@ -6,5 +6,5 @@ function find_ext() {
|
||||||
|
|
||||||
# Find all module functions.
|
# Find all module functions.
|
||||||
function find_functions() {
|
function find_functions() {
|
||||||
cat "${DOTFILES_PATH}"/* | grep "^function.*()" | sed -e "s/^function //" -e "s/().*//"
|
cat "${BASH_MODULE_PATH}"/* | grep "^function.*()" | sed -e "s/^function //" -e "s/().*//"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
# fix when ethernet mistakenly detects 100 Mb instead of 1000 Mb.
|
# Fix when ethernet mistakenly detects 100 Mb instead of 1000 Mb.
|
||||||
# usage: fix_ethernet_speed <DEVICE> <SPEED>
|
|
||||||
# SPEED is one of 10/100/1000 etc.
|
# SPEED is one of 10/100/1000 etc.
|
||||||
|
# Usage: fix_ethernet_speed <DEVICE> <SPEED>
|
||||||
function fix_ethernet_speed() {
|
function fix_ethernet_speed() {
|
||||||
local device="${1}"
|
local device="${1}"
|
||||||
local speed="${2}"
|
local speed="${2}"
|
||||||
|
|
||||||
if [[ "${device}" = "" || "${speed}" = "" ]]; then
|
if [[ "${device}" = "" || "${speed}" = "" ]]; then
|
||||||
echo "usage: fix_ethernet_speed <DEVICE> <SPEED>"
|
help fix_ethernet_speed
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ethtool -s "${device}" speed "${speed}"
|
ethtool -s "${device}" speed "${speed}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# fix files wrong sftp password.
|
# Fix nautilus after typing wrong sftp password.
|
||||||
# alias fix_files_sftp="secret-tool clear protocol sftp server 192.168.1.2"
|
|
||||||
function fix_files_sftp() {
|
function fix_files_sftp() {
|
||||||
secret-tool clear protocol sftp
|
secret-tool clear protocol sftp
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ function gch() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Git checkout branch.
|
# Git checkout branch.
|
||||||
|
# Usage: gchb <BRANCH>
|
||||||
function gchb() {
|
function gchb() {
|
||||||
git checkout -b "${@}"
|
git checkout -b "${@}"
|
||||||
}
|
}
|
||||||
|
@ -54,6 +55,7 @@ function gb() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Git branch delete.
|
# Git branch delete.
|
||||||
|
# Usage: gbd <BRANCH>
|
||||||
function gbd() {
|
function gbd() {
|
||||||
git branch -D "${@}"
|
git branch -D "${@}"
|
||||||
}
|
}
|
||||||
|
@ -95,7 +97,7 @@ function ggc() {
|
||||||
git gc --aggressive --no-cruft --prune=now
|
git gc --aggressive --no-cruft --prune=now
|
||||||
}
|
}
|
||||||
|
|
||||||
# Preview diff while adding. adds current dir by default.
|
# Preview diff while adding. Adds current dir by default.
|
||||||
# Usage: ga [FILES]
|
# Usage: ga [FILES]
|
||||||
function ga() {
|
function ga() {
|
||||||
local target=${@}
|
local target=${@}
|
||||||
|
@ -108,8 +110,8 @@ function ga() {
|
||||||
git add ${target}
|
git add ${target}
|
||||||
}
|
}
|
||||||
|
|
||||||
# rebase by X commits or from root. when COUNT is 0 - rebase from root. default is 2.
|
# Rebase by X commits or from root. When COUNT is 0 - rebase from root. Default is 2.
|
||||||
# usage: gr [COMMIT COUNT]
|
# Usage: gr [COMMIT COUNT]
|
||||||
function gr() {
|
function gr() {
|
||||||
local base="${1}"
|
local base="${1}"
|
||||||
|
|
||||||
|
@ -126,8 +128,8 @@ function gr() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# specify git user as Dmitry Voronin with provided email.
|
# Specify git user as Dmitry Voronin with provided email.
|
||||||
# usage: gu [EMAIL]
|
# Usage: gu [EMAIL]
|
||||||
function gu() {
|
function gu() {
|
||||||
local name="Dmitry Voronin"
|
local name="Dmitry Voronin"
|
||||||
local email="${1}"
|
local email="${1}"
|
||||||
|
@ -144,7 +146,14 @@ function gu() {
|
||||||
# Get my git repo.
|
# Get my git repo.
|
||||||
# Usage: gg <REPO>
|
# Usage: gg <REPO>
|
||||||
function gg() {
|
function gg() {
|
||||||
git clone https://git.voronind.com/voronind/"${1}"
|
local repo="${1}"
|
||||||
|
|
||||||
|
if [[ "${repo}" = "" ]]; then
|
||||||
|
help gg
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
git clone https://git.voronind.com/voronind/"${repo}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# See diff for a specific commit.
|
# See diff for a specific commit.
|
||||||
|
@ -206,6 +215,7 @@ __git_complete gt _git_tag &> /dev/null
|
||||||
__git_complete gp _git_apply &> /dev/null
|
__git_complete gp _git_apply &> /dev/null
|
||||||
__git_complete ga _git_add &> /dev/null
|
__git_complete ga _git_add &> /dev/null
|
||||||
|
|
||||||
|
# Autocomplete with my git emails.
|
||||||
function _gu() {
|
function _gu() {
|
||||||
_autocomplete_first account@voronind.com dd.voronin@fsight.ru
|
_autocomplete_first account@voronind.com dd.voronin@fsight.ru
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,23 @@
|
||||||
# Get help about bash function.
|
# Get help about dotfiles bash function.
|
||||||
|
# Usage: help <FUNCTION>
|
||||||
function help() {
|
function help() {
|
||||||
local fun="${1}"
|
local fun="${1}"
|
||||||
|
|
||||||
if [[ $(find_functions | grep "${fun}") = "" ]]; then
|
if [[ "${fun}" = "" ]] || [[ "$(find_functions | grep ${fun})" = "" ]]; then
|
||||||
echo "Function not found."
|
help help
|
||||||
return 1
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sed -e '$s/$/\n/' -s "${DOTFILES_PATH}"/* | sed -n -e "/function ${fun}()/q;p" | tac | sed -n -e "/^$/q;p" | tac | sed -e "s/^# \+//"
|
sed -e '$s/$/\n/' -s "${BASH_MODULE_PATH}"/* | sed -n -e "/function ${fun}()/q;p" | tac | sed -n -e "/^$/q;p" | tac | sed -e "s/^# \+//"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Short for help.
|
# Short for help.
|
||||||
|
# Usage: h <FUNCTION>
|
||||||
function h() {
|
function h() {
|
||||||
help "${@}"
|
help "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Autocomplete with available functions.
|
||||||
function _help_functions() {
|
function _help_functions() {
|
||||||
_autocomplete_first $(find_functions)
|
_autocomplete_first $(find_functions)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,25 @@
|
||||||
# unset possible system-defined aliases.
|
# Unset possible system-defined aliases.
|
||||||
unalias l ll lll llll la lla &> /dev/null
|
unalias l ll lll llll la lla &> /dev/null
|
||||||
unset l ll lll llll la lla &> /dev/null
|
unset l ll lll llll la lla &> /dev/null
|
||||||
|
|
||||||
# list files in dir.
|
# List files in dirs.
|
||||||
|
# Current dir by default.
|
||||||
|
# Usage: l [DIRS]
|
||||||
function l() {
|
function l() {
|
||||||
ls -lhv --si --group-directories-first "$@"
|
ls -lhv --si --group-directories-first -- "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
# list last modified files first.
|
# List last modified files first.
|
||||||
|
# Current dir by default.
|
||||||
|
# Usage: ll [DIRS]
|
||||||
function ll() {
|
function ll() {
|
||||||
ls -lhvtr --si "$@"
|
ls -lhvtr --si -- "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
# list files in tree structure.
|
# List files in tree structure.
|
||||||
# usage: lll [DEPTH] [DIRS]
|
# Current dir by default.
|
||||||
|
# Depth can be omitted by passing - (dash).
|
||||||
|
# Usage: lll [DEPTH] [DIRS]
|
||||||
function lll() {
|
function lll() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local depth="${1}"
|
local depth="${1}"
|
||||||
|
@ -26,17 +32,23 @@ function lll() {
|
||||||
tree -a -L "${depth}" -- "${target[@]}"
|
tree -a -L "${depth}" -- "${target[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# list files recursively.
|
# List files recursively.
|
||||||
|
# Current dir by default.
|
||||||
|
# Usage: llll [DIRS]
|
||||||
function llll() {
|
function llll() {
|
||||||
ls -RlAhv --si --group-directories-first "$@"
|
ls -RlAhv --si --group-directories-first -- "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
# list all files in dir, incl. hidden files.
|
# List all files in dirs, incl. hidden files.
|
||||||
|
# Current dir by default.
|
||||||
|
# Usage: la [DIRS]
|
||||||
function la() {
|
function la() {
|
||||||
ls -lAh --si --group-directories-first "$@"
|
ls -lAh --si --group-directories-first -- "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
# list all files in dir, incl. hidden files, sorted by mtime.
|
# List all files in dirs, incl. hidden files, sorted by mtime.
|
||||||
|
# Current dir by default.
|
||||||
|
# Usage: lla [DIRS]
|
||||||
function lla() {
|
function lla() {
|
||||||
ls -lAhtr --si "$@"
|
ls -lAhtr --si -- "$@"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# rename files to strip all special characters.
|
# Rename files to strip all special characters.
|
||||||
# usage: name [FILES]
|
# All files by default.
|
||||||
|
# Usage: name [FILES]
|
||||||
function name() {
|
function name() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local targets=("${@}")
|
local targets=("${@}")
|
||||||
|
@ -62,8 +63,9 @@ function name() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# rename all files to their hashes while keeping extensions.
|
# Rename all files to their hashes while keeping extensions.
|
||||||
# usage: name_hash [FILES]
|
# All files by default.
|
||||||
|
# Usage: name_hash [FILES]
|
||||||
function name_hash() {
|
function name_hash() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local targets=("${@}")
|
local targets=("${@}")
|
||||||
|
@ -122,13 +124,14 @@ function name_hash() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# check hashes for renamed files.
|
# Check hashes for previously renamed files.
|
||||||
# usage: name_hash_check [FILES]
|
# All files by default.
|
||||||
|
# Usage: name_hash_check [FILES]
|
||||||
function name_hash_check() {
|
function name_hash_check() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local targets=("${@}") # target file(s).
|
local targets=("${@}")
|
||||||
local total=${#} # total to process.
|
local total=${#}
|
||||||
local count=0 # processed counter.
|
local count=0
|
||||||
local failed=0
|
local failed=0
|
||||||
|
|
||||||
# all targets by default.
|
# all targets by default.
|
||||||
|
@ -164,8 +167,9 @@ function name_hash_check() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# rename files for Jellyfin series, i.e. Episode S01E01.mkv
|
# Rename files for Jellyfin series, i.e. Episode S01E01.mkv
|
||||||
# usage: name_series <SEASON> [FILES]
|
# All files by default.
|
||||||
|
# Usage: name_series <SEASON> [FILES]
|
||||||
function name_series() {
|
function name_series() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local season="${1}"
|
local season="${1}"
|
||||||
|
@ -218,8 +222,9 @@ function name_series() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# rename files for Kavita manga format.
|
# Rename files for Kavita manga format.
|
||||||
# usage: name_manga <SEASON> [FILES]
|
# All files by default.
|
||||||
|
# Usage: name_manga <SEASON> [FILES]
|
||||||
function name_manga() {
|
function name_manga() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local season="${1}"
|
local season="${1}"
|
||||||
|
@ -273,8 +278,9 @@ function name_manga() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# rename files for new extension.
|
# Rename files with new extension.
|
||||||
# usage: name_ext <EXTENSION> [FILES]
|
# All files by default.
|
||||||
|
# Usage: name_ext <EXTENSION> [FILES]
|
||||||
function name_ext() {
|
function name_ext() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local extension="${1}"
|
local extension="${1}"
|
||||||
|
@ -325,7 +331,8 @@ function name_ext() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Change file prefixes.
|
# Change file name prefix.
|
||||||
|
# All matching files by default.
|
||||||
# Usage: name_prefix <OLD> <NEW> [FILES]
|
# Usage: name_prefix <OLD> <NEW> [FILES]
|
||||||
function name_prefix() {
|
function name_prefix() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
|
@ -336,7 +343,7 @@ function name_prefix() {
|
||||||
local total=$((${#}-2))
|
local total=$((${#}-2))
|
||||||
local failed=0
|
local failed=0
|
||||||
|
|
||||||
# All targets by default.
|
# All matching targets by default.
|
||||||
if [[ "${targets}" = "" ]]; then
|
if [[ "${targets}" = "" ]]; then
|
||||||
targets=(${old}*)
|
targets=(${old}*)
|
||||||
total=${#targets[@]}
|
total=${#targets[@]}
|
||||||
|
@ -372,7 +379,8 @@ function name_prefix() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Change file postfix.
|
# Change file name postfix.
|
||||||
|
# All matching files by default.
|
||||||
# Usage: name_postfix <OLD> <NEW> [FILES]
|
# Usage: name_postfix <OLD> <NEW> [FILES]
|
||||||
function name_postfix() {
|
function name_postfix() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
|
@ -383,7 +391,7 @@ function name_postfix() {
|
||||||
local total=$((${#}-2))
|
local total=$((${#}-2))
|
||||||
local failed=0
|
local failed=0
|
||||||
|
|
||||||
# All targets by default.
|
# All matching targets by default.
|
||||||
if [[ "${targets}" = "" ]]; then
|
if [[ "${targets}" = "" ]]; then
|
||||||
targets=(*${old})
|
targets=(*${old})
|
||||||
total=${#targets[@]}
|
total=${#targets[@]}
|
||||||
|
@ -420,6 +428,8 @@ function name_postfix() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Replace part of the name.
|
# Replace part of the name.
|
||||||
|
# All matching files by default.
|
||||||
|
# Usage: name_replace <OLD> <NEW> [FILES]
|
||||||
function name_replace() {
|
function name_replace() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local old="${1}"
|
local old="${1}"
|
||||||
|
@ -429,7 +439,7 @@ function name_replace() {
|
||||||
local total=$((${#}-2))
|
local total=$((${#}-2))
|
||||||
local failed=0
|
local failed=0
|
||||||
|
|
||||||
# All targets by default.
|
# All matching targets by default.
|
||||||
if [[ "${targets}" = "" ]]; then
|
if [[ "${targets}" = "" ]]; then
|
||||||
targets=(*${old}*)
|
targets=(*${old}*)
|
||||||
total=${#targets[@]}
|
total=${#targets[@]}
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
# search only on current filesystem.
|
# Search only on current filesystem.
|
||||||
|
# Current dir by default.
|
||||||
|
# Usage: ncdu [DIRS]
|
||||||
function ncdu() {
|
function ncdu() {
|
||||||
ncdu -x -- "${@}"
|
/usr/bin/ncdu -x -- "${@}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
# send Telegram notification.
|
# Send Telegram notification.
|
||||||
|
# Usage: notify <MESSAGE>
|
||||||
function notify() {
|
function notify() {
|
||||||
curl -X POST -H 'Content-Type: Application/json' -d "{\"chat_id\":\"155897358\",\"text\":\"$1\"}" https://api.telegram.org/bot2046849441:AAHQpjRK4xpL8tEUyN4JTSDUUze4J0wSIy4/sendMessage &> /dev/null
|
curl -X POST -H 'Content-Type: Application/json' -d "{\"chat_id\":\"155897358\",\"text\":\"$1\"}" https://api.telegram.org/bot2046849441:AAHQpjRK4xpL8tEUyN4JTSDUUze4J0wSIy4/sendMessage &> /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
# send silent Telegram notification.
|
# Send silent Telegram notification.
|
||||||
|
# Usage: notify_silent <MESSAGE>
|
||||||
function notify_silent() {
|
function notify_silent() {
|
||||||
curl -X POST -H 'Content-Type: Application/json' -d "{\"chat_id\":\"155897358\",\"text\":\"$1\",\"disable_notification\":\"true\"}" https://api.telegram.org/bot2046849441:AAHQpjRK4xpL8tEUyN4JTSDUUze4J0wSIy4/sendMessage &> /dev/null
|
curl -X POST -H 'Content-Type: Application/json' -d "{\"chat_id\":\"155897358\",\"text\":\"$1\",\"disable_notification\":\"true\"}" https://api.telegram.org/bot2046849441:AAHQpjRK4xpL8tEUyN4JTSDUUze4J0wSIy4/sendMessage &> /dev/null
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# change file ownership to specified user id and restrict access to him.
|
# Change file ownership to specified user id and restrict access to him.
|
||||||
# usage: own [USER] [FILES]
|
# Root user by default. This directory recursively by default.
|
||||||
|
# Usage: own [USER] [FILES]
|
||||||
function own() {
|
function own() {
|
||||||
local file="${2}"
|
local file="${2}"
|
||||||
local user="${1}"
|
local user="${1}"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
export _UNPACK_SUPPORTED=".tar$|.tgz$|.txz$|.tar.gz$|.tar.xz$|.zip$|.iso$|.rar$"
|
export _unpack_supported=".tar$|.tgz$|.txz$|.tar.gz$|.tar.xz$|.zip$|.iso$|.rar$"
|
||||||
|
|
||||||
# Pack files into desired format.
|
# Pack files into desired format.
|
||||||
|
# All files and directories by default.
|
||||||
# Usage: pack <TARGET.ext> [FILES]
|
# Usage: pack <TARGET.ext> [FILES]
|
||||||
function pack() {
|
function pack() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
|
@ -11,20 +12,20 @@ function pack() {
|
||||||
|
|
||||||
# report no output.
|
# report no output.
|
||||||
if [[ "${output}" = "" ]]; then
|
if [[ "${output}" = "" ]]; then
|
||||||
echo "Usage: pack <TARGET.ext> [FILES]"
|
help pack
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# report no format.
|
# report no format.
|
||||||
if [[ "${format}" = "" ]]; then
|
if [[ "${format}" = "" ]]; then
|
||||||
echo "Could not determine output format."
|
echo "Could not determine output format."
|
||||||
echo "Usage: pack <TARGET.ext> [FILES]"
|
help pack
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# All targets by default.
|
# All targets by default.
|
||||||
if [[ "${targets}" = "" ]]; then
|
if [[ "${targets}" = "" ]]; then
|
||||||
targets=($(ls))
|
targets=(*)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# process.
|
# process.
|
||||||
|
@ -59,8 +60,9 @@ function pack() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# attempt to unpack everything.
|
# Attempt to unpack.
|
||||||
# usage: unpack [FILES]
|
# All supported formats by default.
|
||||||
|
# Usage: unpack [FILES]
|
||||||
function unpack() {
|
function unpack() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local targets=("${@}")
|
local targets=("${@}")
|
||||||
|
@ -70,7 +72,7 @@ function unpack() {
|
||||||
|
|
||||||
# All targets by default.
|
# All targets by default.
|
||||||
if [[ "${targets}" = "" ]]; then
|
if [[ "${targets}" = "" ]]; then
|
||||||
targets=($(ls | grep -E ${_UNPACK_SUPPORTED}))
|
targets=($(ls | grep -E ${_unpack_supported}))
|
||||||
total=${#targets[@]}
|
total=${#targets[@]}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# parse data and output simplified format.
|
# Parse data and output simplified format.
|
||||||
# usage: parse_simplify <STRING>
|
# Usage: parse_simplify <STRING>
|
||||||
function parse_simplify() {
|
function parse_simplify() {
|
||||||
echo "${*}" | \
|
echo "${*}" | \
|
||||||
sed -e "s/ /_/g" \
|
sed -e "s/ /_/g" \
|
||||||
|
@ -25,8 +25,8 @@ function parse_camel() {
|
||||||
echo "${result}"
|
echo "${result}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# parse data keeping only alphanumeric characters.
|
# Parse data keeping only alphanumeric characters.
|
||||||
# usage: parse_alnum <STRING>
|
# Usage: parse_alnum <STRING>
|
||||||
function parse_alnum() {
|
function parse_alnum() {
|
||||||
echo "${*}" | \
|
echo "${*}" | \
|
||||||
sed -e "s/[^[:alnum:]]//g"
|
sed -e "s/[^[:alnum:]]//g"
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# recursively change permissions to allow read sharing with group and others.
|
# Recursively change permissions to allow read sharing with group and others.
|
||||||
function perm_share() {
|
function perm_share() {
|
||||||
find . -type d -exec chmod 755 {} \;; find . -type f -exec chmod 644 {} \;
|
find . -type d -exec chmod 755 {} \;; find . -type f -exec chmod 644 {} \;
|
||||||
}
|
}
|
||||||
|
|
||||||
# recursively change permissions to restrict access for group and others.
|
# Recursively change permissions to restrict access for group and others.
|
||||||
function perm() {
|
function perm() {
|
||||||
find . -type d -exec chmod 700 {} \;; find . -type f -exec chmod 600 {} \;
|
find . -type d -exec chmod 700 {} \;; find . -type f -exec chmod 600 {} \;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
|
# Find process and filter.
|
||||||
|
# Usage: ps <PROCESS>
|
||||||
function ps() {
|
function ps() {
|
||||||
ps aux | grep "${@}"
|
local process="${1}"
|
||||||
|
|
||||||
|
if [[ "${process}" = "" ]]; then
|
||||||
|
help ps
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
/usr/bin/ps aux | sed -n -e "1p" -e "/${process}/Ip"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
export PROMPT_COMMAND=(__prompt_command "${PROMPT_COMMAND[@]}")
|
export PROMPT_COMMAND=(__prompt_command "${PROMPT_COMMAND[@]}")
|
||||||
|
|
||||||
# custom terminal prompt format.
|
# Custom terminal prompt format.
|
||||||
function __prompt_command() {
|
function __prompt_command() {
|
||||||
local last_status="${?}"
|
local last_status="${?}"
|
||||||
local is_error=false
|
local is_error=false
|
||||||
|
@ -80,6 +80,8 @@ function __prompt_command() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Convert error code into short description.
|
||||||
|
# Usage: _ps1error <CODE>
|
||||||
function _ps1error() {
|
function _ps1error() {
|
||||||
local type
|
local type
|
||||||
case ${1} in
|
case ${1} in
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
# Run something recursively over all directories.
|
# Run something recursively over all directories.
|
||||||
# Usage: recursive <COMMAND>
|
# Usage: recursive <COMMAND>
|
||||||
function recursive() {
|
function recursive() {
|
||||||
|
if [[ "${*}" = "" ]]; then
|
||||||
|
help recursive
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local current="${PWD}"
|
local current="${PWD}"
|
||||||
local dirs=$(find -type d)
|
local dirs=$(find -type d)
|
||||||
|
@ -20,7 +25,7 @@ function recursive() {
|
||||||
echo -e "${color_bblue}[${count}/${total}] ${dir}${color_default}"
|
echo -e "${color_bblue}[${count}/${total}] ${dir}${color_default}"
|
||||||
|
|
||||||
# run command.
|
# run command.
|
||||||
$* || failed=${?}
|
${*} || failed=${?}
|
||||||
done
|
done
|
||||||
|
|
||||||
# return back on complete.
|
# return back on complete.
|
||||||
|
@ -29,10 +34,14 @@ function recursive() {
|
||||||
return ${failed}
|
return ${failed}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Run something recursively over all directories.
|
# Run something recursively over directories of 1 depth (excluding current dir).
|
||||||
# Usage: recursive1 <COMMAND>
|
# Usage: recursive1 <COMMAND>
|
||||||
# TODO: create generic function.
|
|
||||||
function recursive1() {
|
function recursive1() {
|
||||||
|
if [[ "${*}" = "" ]]; then
|
||||||
|
help recursive1
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local current="${PWD}"
|
local current="${PWD}"
|
||||||
local dirs=$(find -mindepth 1 -maxdepth 1 -type d)
|
local dirs=$(find -mindepth 1 -maxdepth 1 -type d)
|
||||||
|
@ -52,7 +61,7 @@ function recursive1() {
|
||||||
echo -e "${color_bblue}[${count}/${total}] ${dir}${color_default}"
|
echo -e "${color_bblue}[${count}/${total}] ${dir}${color_default}"
|
||||||
|
|
||||||
# run command.
|
# run command.
|
||||||
$* || failed=${?}
|
${*} || failed=${?}
|
||||||
done
|
done
|
||||||
|
|
||||||
# return back on complete.
|
# return back on complete.
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
# bash extensions.
|
|
||||||
shopt -s dotglob
|
shopt -s dotglob
|
||||||
shopt -s globstar
|
shopt -s globstar
|
||||||
shopt -s autocd
|
shopt -s autocd
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
# I'm lazy af.
|
# Su shortcut for lazy me.
|
||||||
|
# Root by default.
|
||||||
|
# Usage: s [USER]
|
||||||
function s() {
|
function s() {
|
||||||
su
|
su "${@}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# Get terminal size.
|
||||||
function tsize() {
|
function tsize() {
|
||||||
local width=$(tput cols)
|
local width=$(tput cols)
|
||||||
local height=$(tput lines)
|
local height=$(tput lines)
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
# create/attach to named session.
|
# Create/attach to named session.
|
||||||
|
# By default uses name "main".
|
||||||
|
# Usage: ta [NAME]
|
||||||
function ta() {
|
function ta() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
|
|
||||||
|
@ -11,12 +13,12 @@ function ta() {
|
||||||
tmux new -s "$name" 2> /dev/null || tmux attach-session -t "$name"
|
tmux new -s "$name" 2> /dev/null || tmux attach-session -t "$name"
|
||||||
}
|
}
|
||||||
|
|
||||||
# detach.
|
# Detach from running session.
|
||||||
function td() {
|
function td() {
|
||||||
tmux detach-client
|
tmux detach-client
|
||||||
}
|
}
|
||||||
|
|
||||||
# list.
|
# List running sessions.
|
||||||
function tl() {
|
function tl() {
|
||||||
tmux list-sessions
|
tmux list-sessions
|
||||||
}
|
}
|
||||||
|
@ -31,7 +33,7 @@ function trn() {
|
||||||
tmux rename-session "${name}"
|
tmux rename-session "${name}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Assign name (to window). Uses current dir name by default.
|
# Assign name to window. Uses current dir name by default.
|
||||||
# Usage: tn [NAME]
|
# Usage: tn [NAME]
|
||||||
function tn() {
|
function tn() {
|
||||||
local name="${1}"
|
local name="${1}"
|
||||||
|
@ -41,7 +43,9 @@ function tn() {
|
||||||
tmux rename-window "${name}"
|
tmux rename-window "${name}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# kill specified session or default one.
|
# Kill specified session.
|
||||||
|
# By default it kills "main" session.
|
||||||
|
# Usage: tk [NAME]
|
||||||
function tk() {
|
function tk() {
|
||||||
# set default name.
|
# set default name.
|
||||||
if [[ "${1}" = "" ]]; then
|
if [[ "${1}" = "" ]]; then
|
||||||
|
@ -54,7 +58,7 @@ function tk() {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# kill all sessions.
|
# Kill all sessions.
|
||||||
function tka() {
|
function tka() {
|
||||||
local sessions=$(tmux list-sessions | sed -e 's/:.*//')
|
local sessions=$(tmux list-sessions | sed -e 's/:.*//')
|
||||||
|
|
||||||
|
@ -63,15 +67,17 @@ function tka() {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# autocompletes.
|
# Autocomplete with running sessions once.
|
||||||
function _complete_tmux_session() {
|
function _complete_tmux_session() {
|
||||||
_autocomplete_first "$(tmux list-sessions 2> /dev/null | sed -e 's/:.*//')"
|
_autocomplete_first "$(tmux list-sessions 2> /dev/null | sed -e 's/:.*//')"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Autocomplete with running sessions.
|
||||||
function _complete_tmux_sessions() {
|
function _complete_tmux_sessions() {
|
||||||
_autocomplete "$(tmux list-sessions 2> /dev/null | sed -e 's/:.*//')"
|
_autocomplete "$(tmux list-sessions 2> /dev/null | sed -e 's/:.*//')"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Autocomplete with current dir name and dirs inside this one.
|
||||||
function _complete_tmux_name() {
|
function _complete_tmux_name() {
|
||||||
_autocomplete_first "${PWD##*/}"$'\n'$(ls --classify | grep /$ | sed -e 's/\/$//')
|
_autocomplete_first "${PWD##*/}"$'\n'$(ls --classify | grep /$ | sed -e 's/\/$//')
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# attach/create toolbx container with default or specified name.
|
# Attach/create toolbx container with specified name.
|
||||||
# usage: tb [NAME]
|
# By default uses "main" name.
|
||||||
|
# Usage: tba [NAME]
|
||||||
function tba() {
|
function tba() {
|
||||||
local name="${1}"
|
local name="${1}"
|
||||||
|
|
||||||
|
@ -36,8 +37,9 @@ function tba() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# remove toolbx container with default or specified name.
|
# Remove toolbx container with specified name.
|
||||||
# usage: tbk [NAME]
|
# By default uses "main" name.
|
||||||
|
# Usage: tbk [NAME]
|
||||||
function tbk() {
|
function tbk() {
|
||||||
local name="${1}"
|
local name="${1}"
|
||||||
|
|
||||||
|
@ -50,8 +52,9 @@ function tbk() {
|
||||||
podman stop "${name}" > /dev/null && podman rm "${name}" > /dev/null
|
podman stop "${name}" > /dev/null && podman rm "${name}" > /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
# install rpm-fusion repository.
|
# Install rpm-fusion repository into container with specified name.
|
||||||
# usage: tb_rpmfusion [NAME]
|
# By default uses "main" name.
|
||||||
|
# Usage: tb_rpmfusion [NAME]
|
||||||
function tb_rpmfusion() {
|
function tb_rpmfusion() {
|
||||||
local name="${1}"
|
local name="${1}"
|
||||||
|
|
||||||
|
@ -64,12 +67,12 @@ function tb_rpmfusion() {
|
||||||
toolbox --container "${name}" run sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
|
toolbox --container "${name}" run sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
|
||||||
}
|
}
|
||||||
|
|
||||||
# list all containers.
|
# List all available containers.
|
||||||
function tbl() {
|
function tbl() {
|
||||||
toolbox list -c
|
toolbox list -c
|
||||||
}
|
}
|
||||||
|
|
||||||
# autocomplete.
|
# Autocomplete with available containers.
|
||||||
function _tb_containers() {
|
function _tb_containers() {
|
||||||
_autocomplete_first "$(toolbox list -c | sed -e '1d' | awk '{ print $2 }')"
|
_autocomplete_first "$(toolbox list -c | sed -e '1d' | awk '{ print $2 }')"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# Convert between different formats.
|
# Convert between different formats.
|
||||||
|
# By default tries to convert all files.
|
||||||
# Usage: transcode <FORMAT> [FILES]
|
# Usage: transcode <FORMAT> [FILES]
|
||||||
function transcode() {
|
function transcode() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
|
@ -12,7 +13,7 @@ function transcode() {
|
||||||
# Report no format.
|
# Report no format.
|
||||||
if [[ "${format}" = "" ]]; then
|
if [[ "${format}" = "" ]]; then
|
||||||
echo -e "${color_bred}No format specified.${color_default}"
|
echo -e "${color_bred}No format specified.${color_default}"
|
||||||
echo "Usage: transcode <FORMAT> [FILES]"
|
help transcode
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
# retry command every 2 sec until it completes.
|
# Retry command every 2 sec until it completes successfully.
|
||||||
|
# Usage: try <COMMAND>
|
||||||
function try() {
|
function try() {
|
||||||
|
if [[ "${*}" = "" ]]; then
|
||||||
|
help try
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
local result=-1
|
local result=-1
|
||||||
|
|
||||||
while [ "$result" != 0 ]; do
|
while [ "$result" != 0 ]; do
|
||||||
$@
|
${*}
|
||||||
result=$?
|
result=$?
|
||||||
if [ "$result" != 0 ]; then
|
if [ "$result" != 0 ]; then
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|
|
@ -1,2 +1 @@
|
||||||
# set global umask.
|
|
||||||
umask 077
|
umask 077
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Download video from URL in background. When no [LINK] specified, it tries to update previously downloaded link.
|
# Download video from URL. When no [LINK] specified, it tries to update previously downloaded link.
|
||||||
# Usage: vdl [LINK]
|
# Usage: vdl [LINK]
|
||||||
function vdl() {
|
function vdl() {
|
||||||
# Check that ffmpeg and ffprobe are available.
|
# Check that ffmpeg and ffprobe are available.
|
||||||
|
@ -10,12 +10,12 @@ function vdl() {
|
||||||
local target="${@}" # What to download/update.
|
local target="${@}" # What to download/update.
|
||||||
|
|
||||||
# If no [LINK] provided, try to read from `src.txt`.
|
# If no [LINK] provided, try to read from `src.txt`.
|
||||||
[[ "${target}" = "" ]] && target="$(cat src.txt)"
|
[[ "${target}" = "" ]] && target="$(cat src.txt)"
|
||||||
|
|
||||||
# If could not get [LINK] eventually, show an error and exit.
|
# If could not get [LINK] eventually, show an error and exit.
|
||||||
if [[ "${target}" = "" ]]; then
|
if [[ "${target}" = "" ]]; then
|
||||||
echo -e "${color_red}Could not determine [LINK] to download.${color_default}"
|
echo -e "${color_red}Could not determine [LINK] to download.${color_default}"
|
||||||
echo "Usage: vdl [LINK]"
|
help vdl
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -26,20 +26,14 @@ function vdl() {
|
||||||
yt-dlp -f 'bestvideo[height<=?1081]+bestaudio/best' --download-archive index.txt --embed-thumbnail --embed-subs --write-auto-subs --embed-metadata --merge-output-format mkv -cio '%(playlist_index)000006d_%(id)s.%(ext)s' ${target} # || _vdl_retry
|
yt-dlp -f 'bestvideo[height<=?1081]+bestaudio/best' --download-archive index.txt --embed-thumbnail --embed-subs --write-auto-subs --embed-metadata --merge-output-format mkv -cio '%(playlist_index)000006d_%(id)s.%(ext)s' ${target} # || _vdl_retry
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Temporary fix for vk downloads.
|
||||||
|
# Usage: vdl_vk <LINK>
|
||||||
function vdl_vk() {
|
function vdl_vk() {
|
||||||
vdl --format mp4 "${@}"
|
vdl --format mp4 "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Temporary fix for crashes.
|
# Download all videos from file with links.
|
||||||
function _vdl_retry() {
|
# Usage: vdl_file <FILE>
|
||||||
for file in *.part; do
|
|
||||||
local number="${file%%_*}"
|
|
||||||
rm ${number}*
|
|
||||||
done
|
|
||||||
vdl
|
|
||||||
}
|
|
||||||
|
|
||||||
# download all videos from file.
|
|
||||||
function vdl_file() {
|
function vdl_file() {
|
||||||
vdl -a "${@}"
|
vdl -a "${@}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,4 @@
|
||||||
# default vim.
|
# Neovim shortcut.
|
||||||
function vi() {
|
|
||||||
vi -c "filetype plugin indent on" -c "set autoindent" -c "set tabstop=2" -c "set shiftwidth=2" -c "set expandtab" -c "set number" -- "${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# neovim.
|
|
||||||
function v() {
|
function v() {
|
||||||
nvim -- "${@}"
|
nvim -- "${@}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,14 @@
|
||||||
# set specified file as a wallpaper.
|
# Set specified file as a wallpaper.
|
||||||
|
# Usage: wallpaper <FILE>
|
||||||
function wallpaper() {
|
function wallpaper() {
|
||||||
path_wallpaper=~/.local/share/backgrounds/background.jpg
|
local target="${1}"
|
||||||
cp "$1" $path_wallpaper
|
local path_wallpaper=~/.local/share/backgrounds/background.jpg
|
||||||
chmod 644 $path_wallpaper
|
|
||||||
|
if [[ "${target}" = "" ]]; then
|
||||||
|
help wallpaper
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp "${target}" "${path_wallpaper}"
|
||||||
|
chmod 644 "${path_wallpaper}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,22 @@
|
||||||
# Watch command output with 2 second interval.
|
# Watch command output with 2 second interval.
|
||||||
# Usage: w <COMMAND>
|
# Usage: w <COMMAND>
|
||||||
function w() {
|
function w() {
|
||||||
|
if [[ "${*}" = "" ]]; then
|
||||||
|
help w
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
watch -n 2 "${@}"
|
watch -n 2 "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Watch command output with minimal interval.
|
# Watch command output with minimal interval.
|
||||||
# Usage: ww <COMMAND>
|
# Usage: ww <COMMAND>
|
||||||
function ww() {
|
function ww() {
|
||||||
|
if [[ "${*}" = "" ]]; then
|
||||||
|
help ww
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
watch -n 0 "${@}"
|
watch -n 0 "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue