Compare commits

..

19 Commits

Author SHA1 Message Date
b9635a5697 notes utils 2026-02-21 18:10:21 +08:00
153776c54e utils upgrade 2026-02-21 18:10:09 +08:00
f4c500d6cd dc util removed 2026-02-21 18:06:33 +08:00
2a177b5413 easyeffects update 2026-02-21 09:25:46 +08:00
e2a3cf8aac fix typo in git alias 'start' 2026-02-18 19:53:54 +08:00
d8859cf833 Merge branch 'master' of git.axenov.dev:anthony/dotfiles 2026-02-18 19:52:15 +08:00
2ce978585b vcompress util 2026-02-18 19:48:25 +08:00
906a2cdb93 vscode update 2026-02-18 19:44:52 +08:00
f7fc877126 xcompose update 2026-02-18 19:42:58 +08:00
5b410bf9e7 obs-studio update 2026-02-18 19:41:41 +08:00
c531f9f88b easyeffects update 2026-02-18 19:40:57 +08:00
214300e21e default .gitignore 2026-02-17 16:19:42 +08:00
95de82c2a0 ~/*.local instead of ~/*.extra 2026-02-17 16:17:20 +08:00
0d7feada81 some aliases moved to utils 2026-02-17 16:16:08 +08:00
94df267831 Some aliases moved to utils 2025-12-08 17:04:11 +08:00
9ca95f6353 git: include ~/.git_aliases.extra 2025-11-24 19:29:35 +08:00
Антон Аксенов
cf5d7a0877 shell misc 2025-11-14 18:29:06 +08:00
ec03e01dbb fix terminal font for vscode 2025-11-14 10:51:53 +08:00
c6ca5271e8 case tar.xz in extract util 2025-11-14 10:51:22 +08:00
49 changed files with 1161 additions and 367 deletions

View File

@@ -22,4 +22,4 @@ Target (`-t`) defaults to the parent of `pwd`, so if you clone this repo not in
* <https://www.gnu.org/software/stow/manual/stow.html>
* <https://tamerlan.dev/how-i-manage-my-dotfiles-using-gnu-stow/>
* <https://gist.github.com/andreibosco/cb8506780d0942a712fc>
* https://github.com/jimeh/git-aware-stow
* <https://github.com/jimeh/git-aware-stow>

View File

@@ -1,15 +1,12 @@
{
"output": {
"bass_enhancer#0": {
"amount": 3.000000000000008,
"blend": 0.0,
"bass_loudness#0": {
"bypass": false,
"floor": 10.0,
"floor-active": false,
"harmonics": 2.000000000000001,
"input-gain": 0.0,
"output-gain": 0.0,
"scope": 30.0
"link": -9.1,
"loudness": -3.0000000000000013,
"output": -6.0,
"output-gain": 0.0
},
"blocklist": [],
"equalizer#0": {
@@ -19,7 +16,7 @@
"left": {
"band0": {
"frequency": 28.738174228603842,
"gain": -2.0,
"gain": -6.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.644403823771979,
@@ -30,18 +27,18 @@
},
"band1": {
"frequency": 53.850091570755154,
"gain": 3.0,
"gain": -3.75,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
"slope": "x1",
"slope": "x4",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band10": {
"frequency": 15336.699231206312,
"gain": -3.0,
"gain": -8.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -52,7 +49,7 @@
},
"band2": {
"frequency": 100.90523980790812,
"gain": 3.0,
"gain": -4.12,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
@@ -62,11 +59,11 @@
"width": 4.0
},
"band3": {
"frequency": 189.07799640996342,
"gain": 0.0,
"frequency": 260.0,
"gain": -6.8,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
"q": 1.98,
"slope": "x1",
"solo": false,
"type": "Bell",
@@ -74,7 +71,7 @@
},
"band4": {
"frequency": 354.2976439525226,
"gain": -5.0,
"gain": -13.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -85,7 +82,7 @@
},
"band5": {
"frequency": 663.8890981166219,
"gain": -11.0,
"gain": -19.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
@@ -96,7 +93,7 @@
},
"band6": {
"frequency": 1244.006958897993,
"gain": -6.0,
"gain": -11.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -107,7 +104,7 @@
},
"band7": {
"frequency": 2331.041913742621,
"gain": -1.0,
"gain": -5.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
@@ -118,7 +115,7 @@
},
"band8": {
"frequency": 4367.946951388736,
"gain": 2.0,
"gain": -3.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -129,7 +126,7 @@
},
"band9": {
"frequency": 8184.735099642112,
"gain": 2.0,
"gain": -4.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -141,13 +138,13 @@
},
"mode": "IIR",
"num-bands": 11,
"output-gain": 0.0,
"output-gain": 2.0,
"pitch-left": 0.0,
"pitch-right": 0.0,
"right": {
"band0": {
"frequency": 28.738174228603842,
"gain": -2.0,
"gain": -6.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.644403823771979,
@@ -158,18 +155,18 @@
},
"band1": {
"frequency": 53.850091570755154,
"gain": 3.0,
"gain": -3.75,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
"slope": "x1",
"slope": "x4",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band10": {
"frequency": 15336.699231206312,
"gain": -3.0,
"gain": -8.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -180,7 +177,7 @@
},
"band2": {
"frequency": 100.90523980790812,
"gain": 3.0,
"gain": -4.12,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
@@ -190,11 +187,11 @@
"width": 4.0
},
"band3": {
"frequency": 189.07799640996342,
"gain": 0.0,
"frequency": 260.0,
"gain": -6.8,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
"q": 1.98,
"slope": "x1",
"solo": false,
"type": "Bell",
@@ -202,7 +199,7 @@
},
"band4": {
"frequency": 354.2976439525226,
"gain": -5.0,
"gain": -13.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -213,7 +210,7 @@
},
"band5": {
"frequency": 663.8890981166219,
"gain": -11.0,
"gain": -19.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
@@ -224,7 +221,7 @@
},
"band6": {
"frequency": 1244.006958897993,
"gain": -6.0,
"gain": -11.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -235,7 +232,7 @@
},
"band7": {
"frequency": 2331.041913742621,
"gain": -1.0,
"gain": -5.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
@@ -246,7 +243,7 @@
},
"band8": {
"frequency": 4367.946951388736,
"gain": 2.0,
"gain": -3.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -257,7 +254,7 @@
},
"band9": {
"frequency": 8184.735099642112,
"gain": 2.0,
"gain": -4.0,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -271,7 +268,7 @@
},
"plugins_order": [
"equalizer#0",
"bass_enhancer#0"
"bass_loudness#0"
]
}
}

View File

@@ -1,7 +1,7 @@
{
"output": {
"bass_enhancer#0": {
"amount": 3.000000000000006,
"amount": 2.5000000000000058,
"blend": 0.0,
"bypass": false,
"floor": 20.0,
@@ -19,7 +19,7 @@
"left": {
"band0": {
"frequency": 28.738174228603842,
"gain": -1.22,
"gain": -2.22,
"mode": "RLC (BT)",
"mute": false,
"q": 1.644403823771979,
@@ -30,7 +30,7 @@
},
"band1": {
"frequency": 53.850091570755154,
"gain": 0.92,
"gain": -0.08,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -41,7 +41,7 @@
},
"band10": {
"frequency": 15336.699231206312,
"gain": -11.65,
"gain": -9.65,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -52,7 +52,7 @@
},
"band2": {
"frequency": 100.90523980790812,
"gain": -1.58,
"gain": -3.58,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
@@ -118,7 +118,7 @@
},
"band8": {
"frequency": 4367.946951388736,
"gain": -0.62,
"gain": -2.62,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -147,7 +147,7 @@
"right": {
"band0": {
"frequency": 28.738174228603842,
"gain": -1.22,
"gain": -2.22,
"mode": "RLC (BT)",
"mute": false,
"q": 1.644403823771979,
@@ -158,7 +158,7 @@
},
"band1": {
"frequency": 53.850091570755154,
"gain": 0.92,
"gain": -0.08,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -169,7 +169,7 @@
},
"band10": {
"frequency": 15336.699231206312,
"gain": -11.65,
"gain": -9.65,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -180,7 +180,7 @@
},
"band2": {
"frequency": 100.90523980790812,
"gain": -1.58,
"gain": -3.58,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
@@ -246,7 +246,7 @@
},
"band8": {
"frequency": 4367.946951388736,
"gain": -0.62,
"gain": -2.62,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,

View File

@@ -11,6 +11,14 @@
"output-gain": 0.0,
"scope": 30.0
},
"bass_loudness#0": {
"bypass": false,
"input-gain": 0.0,
"link": -9.1,
"loudness": -3.499999999999999,
"output": -6.0,
"output-gain": 0.0
},
"blocklist": [],
"equalizer#0": {
"balance": 0.0,
@@ -19,7 +27,7 @@
"left": {
"band0": {
"frequency": 28.738174228603842,
"gain": -5.22,
"gain": -3.22,
"mode": "RLC (BT)",
"mute": false,
"q": 1.644403823771979,
@@ -30,7 +38,7 @@
},
"band1": {
"frequency": 53.850091570755154,
"gain": -2.08,
"gain": -0.08,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -52,7 +60,7 @@
},
"band2": {
"frequency": 100.90523980790812,
"gain": -5.58,
"gain": -4.58,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
@@ -147,7 +155,7 @@
"right": {
"band0": {
"frequency": 28.738174228603842,
"gain": -5.22,
"gain": -3.22,
"mode": "RLC (BT)",
"mute": false,
"q": 1.644403823771979,
@@ -158,7 +166,7 @@
},
"band1": {
"frequency": 53.850091570755154,
"gain": -2.08,
"gain": -0.08,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719791,
@@ -180,7 +188,7 @@
},
"band2": {
"frequency": 100.90523980790812,
"gain": -5.58,
"gain": -4.58,
"mode": "RLC (BT)",
"mute": false,
"q": 1.6444038237719794,
@@ -271,7 +279,8 @@
},
"plugins_order": [
"equalizer#0",
"bass_enhancer#0"
"bass_enhancer#0",
"bass_loudness#0"
]
}
}

View File

@@ -249,7 +249,7 @@
tags = "tag -n1 --list" ; shot tag names and commit message
stashes = "stash list" ; show stashed changes
init = "init -q" ; blm is racism, 'master' branch must be 'master' branch
start = "!git init --quiet --initial-branch maste; git commit --no-verify --allow-empty --message 'Initial commit'" ; quick start empty repo
start = "!git init --quiet --initial-branch master; git commit --no-verify --allow-empty --message 'Initial commit'" ; quick start empty repo
cloner = "clone --recursive" ; clone with submodules
fuck = "!git checkout $(git config init.defaultBranch); git fetch origin --prune; git reset --hard origin/$(git config init.defaultBranch); git clean -dff"

View File

@@ -22,4 +22,6 @@
[include]
path = ~/.git_aliases
[include]
path = ~/.gitconfig.extra ; use this file to store other personal settings and aliases
path = ~/.git_aliases.local
[include]
path = ~/.gitconfig.local ; use this file to store other personal settings and aliases

6
git/.gitignore vendored
View File

@@ -7,4 +7,10 @@ nbproject/
*.log
*.bak
*.rdb
.env
*.env
.env.*
!.env.example
!.env.default
!/**/*.gitkeep

View File

@@ -67,12 +67,6 @@ cy=580
geometry=AdnQywADAAAAAAAAAAAAFAAAAlcAAAGjAAAAAAAAABQAAAJXAAABowAAAAAAAAAAB4AAAAAAAAAAFAAAAlcAAAGj
[OBSWebSocket]
FirstLoad=false
ServerEnabled=false
ServerPort=4455
AlertsEnabled=false
AuthRequired=true
ServerPassword=4blHHSDyZzxK6HRO
[Video]
Renderer=OpenGL
@@ -87,3 +81,6 @@ MixerRed=2500223
MixerGreenActive=5046092
MixerYellowActive=5046271
MixerRedActive=5000447
[Appearance]
Theme=com.obsproject.Yami.Classic

View File

@@ -1,18 +1,20 @@
#!/usr/bin/env bash
# alias bashrc='source ~/.bashrc'
alias aliases='cat ~/.bash_aliases'
alias bashrc='source ~/.bashrc'
alias zshrc='source ~/.zshrc'
alias realias='source ~/.bash_aliases'
alias stow="stow -v"
alias unstow="stow -D"
alias restow="stow -R"
alias reload='exec ${SHELL} -l'
alias sudo='sudo ' # enable aliases to be sudoed
alias sudo='sudo ' # enable aliases to be sudo'ed
alias g='git'
alias c='composer'
alias hosts="sudo nano /etc/hosts"
alias shrug="echo '¯\_(ツ)_/¯' | xclip -selection c"
alias up='cd ..'
alias back='cd -'
alias ..='cd ..' # zsh builtin
alias ~='cd ~' # zsh builtin
alias -- -='cd -' # zsh builtin
@@ -34,131 +36,16 @@ alias where='whereis' # zsh builtin
alias ps='ps auxf'
alias psg='ps aux | grep -v grep | grep -i -e VSZ -e'
alias is='type -a'
alias upgrade='sudo apt update && sudo apt upgrade -y && sudo snap refresh'
alias untargz='tar -czf'
alias mkcd="mkdir -p $1 && cd $1"
alias cl="cd $1 && ll"
alias myip='curl http://ipecho.net/plain; echo'
alias wine='LANG=ru_RU.utf8 wine'
alias wine64='LANG=ru_RU.utf8 wine64'
alias ports='netstat -tulpan'
# alias pubkey="more ~/.ssh/id_ed25519.pub | xclip -selection clipboard | echo '=> Public key copied to pasteboard.'"
alias ssh.pub="cat ~/.ssh/*.pub"
alias gpg.new="gpg --full-generate-key"
alias gpg.pub="gpg --armor --export"
alias gpg.list='gpg --list-keys --keyid-format SHORT'
# alias pubkey="more ~/.ssh/id_ed25519.pub | xclip -selection clipboard | echo '=> Public key copied to pasteboard.'"
alias lite-xl="LITE_SCALE=1 lite-xl"
alias wine='LANG=ru_RU.utf8 wine'
alias docker.prune='docker image prune -f; docker network prune -f; docker container prune -f'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# https://obsproject.com/forum/threads/how-to-start-virtual-camera-without-sudo-privileges.139783/
alias obscam="sudo modprobe v4l2loopback video_nr=2 card_label='OBS Virtual Camera'"
# Download music from Youtube or Youtube Music
# and save as top quality flac file without video
# Playlist and video/track URLs are supported
# Usage: $ ytm https://www.youtube.com/watch\?v=dQw4w9WgXcQ
# More info: https://github.com/ytdl-org/youtube-dl
ytm() {
youtube-dl \
--extract-audio \
--audio-format flac \
--audio-quality 0 \
--format bestaudio \
--write-info-json \
--output "${HOME}/Музыка/ytm/%(playlist_title)s/%(channel)s - %(title)s.%(ext)s" \
"$@"
}
docker.ip() {
if [ "$1" ]; then
if [ "$1" = "-a" ]; then
docker ps -aq \
| xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \
| sed -e 's#^/##' \
| column -t
elif [ "$1" = "-c" ]; then
docker-compose ps -q \
| xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \
| sed -e 's#^/##' \
| column -t
else
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$1"
docker port "$1"
fi
else
docker ps -q \
| xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \
| sed -e 's#^/##' \
| column -t
fi
}
#################################################################################
# $1 -- file/dir path
# $2 -- permissions (0644, 0755, etc)
# own() { #TODO refactor
# [ "$1" ] && PATH="${1/#\~/$HOME}" || {
# echo "Error (1): path not provided"
# }
# echo $PATH
# [ "$2" ] && PERM="$2" || {
# if [ -d $PATH ]; then
# PERM="0755"
# elif [ -f $PATH ]; then
# PERM="0644"
# else
# echo "Error (2): path not exists"
# fi;
# }
# echo $PERM
# sudo chmod $PERM -R --preserve-root $PATH
# sudo chown $USER. -R --preserve-root $PATH
# }
# function extract {
# if [ -z "$1" ]; then
# # display usage if no parameters given
# echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
# echo " extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
# return 1
# else
# for n in $@
# do
# if [ -f "$n" ] ; then
# case "${n%,}" in
# *.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar)
# tar xvf "$n" ;;
# *.lzma) unlzma ./"$n" ;;
# *.bz2) bunzip2 ./"$n" ;;
# *.rar) unrar x -ad ./"$n" ;;
# *.gz) gunzip ./"$n" ;;
# *.zip) unzip ./"$n" ;;
# *.z) uncompress ./"$n" ;;
# *.7z|*.arj|*.cab|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.rpm|*.udf|*.wim|*.xar)
# 7z x ./"$n" ;;
# *.xz) unxz ./"$n" ;;
# *.exe) cabextract ./"$n" ;;
# *)
# echo "extract: '$n' - unknown archive method"
# return 1
# ;;
# esac
# else
# echo "'$n' - file does not exist"
# return 1
# fi
# done
# fi
# }
# alias obscam="sudo modprobe v4l2loopback video_nr=2 card_label='OBS Virtual Camera'"

View File

@@ -97,5 +97,5 @@ if ! shopt -oq posix; then
fi
[[ -f ~/.bash_aliases ]] && source ~/.bash_aliases
[[ -f ~/.bashrc.extra ]] && source ~/.bashrc.extra
[[ -f ~/.bashrc.local ]] && source ~/.bashrc.local
[[ -f ~/.profile ]] && source ~/.profile

View File

@@ -16,38 +16,33 @@ fi
### AAA ##########################################
[ -f ~/.bash_aliases ] && source ~/.bash_aliases
[ -f ~/.profile.extra ] && source ~/.profile.extra
export LITE_SCALE=1 # workaround https://github.com/lite-xl/lite-xl/issues/1173
export EDITOR="nano"
export JAVA_HOME="/usr/bin/"
export PATH="/opt/nvim/bin:$PATH"
export PATH="$HOME/.local/bin/:$PATH"
export PATH="$HOME/.local/share/JetBrains/Toolbox/scripts:$PATH"
export PATH="$(composer config -g home)/vendor/bin:$PATH"
export PATH="$PATH:/opt/nvim/bin/"
export PATH="$PATH:$HOME/.local/bin/"
export PATH="$PATH:$HOME/.local/share/JetBrains/Toolbox/scripts/"
if hash composer >/dev/null; then
composer_home=$(composer config -g home 2>/dev/null)
export PATH="$PATH:$composer_home/vendor/bin"
fi
# phpbrew
# export PHPBREW_SET_PROMPT=1
# export PHPBREW_RC_ENABLE=1
# [ -f ~/.phpbrew/bashrc ] && source ~/.phpbrew/bashrc
# [ -f $HOME/.phpbrew/bashrc ] && source $HOME/.phpbrew/bashrc
# golang
export PATH="/usr/local/go/bin:$PATH"
export PATH="$PATH:/usr/local/go/bin"
export GOPATH="$HOME/.go"
# rust cargo
[ -f ~/.cargo/env ] && source ~/.cargo/env
[ -f "$HOME/.cargo/env" ] && source "$HOME/.cargo/env"
# nvm
# export NVM_DIR="$HOME/.nvm"
# [ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh" # This loads nvm
# [ -s "$NVM_DIR/bash_completion" ] && source "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# neovim
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
[ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && source "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# The next line updates PATH for Yandex Cloud CLI.
[ -f "$HOME/yandex-cloud/path.bash.inc" ] && source "$HOME/yandex-cloud/path.bash.inc"
@@ -55,3 +50,5 @@ export NVM_DIR="$HOME/.nvm"
# The next line enables shell command completion for yc.
[ -f "$HOME/yandex-cloud/completion.zsh.inc" ] && source "$HOME/yandex-cloud/completion.zsh.inc"
# misc
[[ -f $HOME/.profile.local ]] && source $HOME/.profile.local

View File

@@ -77,7 +77,7 @@ ZSH_THEME="powerlevel10k/powerlevel10k"
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git docker docker-compose composer zsh-autosuggestions zsh-syntax-highlighting)
plugins=(git docker docker-compose composer zsh-autosuggestions zsh-syntax-highlighting laravel)
source $ZSH/oh-my-zsh.sh
@@ -85,5 +85,5 @@ source $ZSH/oh-my-zsh.sh
[[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh
[[ -f ~/.bash_aliases ]] && source ~/.bash_aliases
[[ -f ~/.bashrc.extra ]] && source ~/.bashrc.extra
# [[ -f ~/.bashrc.local ]] && source ~/.bashrc.local
[[ -f ~/.profile ]] && source ~/.profile

View File

@@ -1,3 +1,17 @@
#!/usr/bin/env bash
set -eo pipefail
watch -tn 1 date '+%l:%M:%S%p'
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Display current time and unix timestamp (updates every second).
Options:
-h, --help Show this help message
EOF
exit 0
fi
watch -tn 1 date '+%H:%M:%S%n%s'

View File

@@ -1,6 +1,21 @@
#!/usr/bin/env bash
set -e
set -u
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] [file]
Copy content to system clipboard.
Options:
-h, --help Show this help message
Arguments:
file File to copy (reads from stdin if not specified)
EOF
exit 0
fi
if hash pbcopy 2>/dev/null; then
exec pbcopy

38
utils/.local/bin/curlstat Executable file
View File

@@ -0,0 +1,38 @@
#!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <url>
Display detailed curl statistics for a URL.
Options:
-h, --help Show this help message
Arguments:
url URL to fetch statistics for
EOF
exit 0
fi
curl -sLw @- -o /dev/null "$@" <<'EOF'
URL:\t\t\t%{url}\n
Address:\t\t%{remote_ip}:%{remote_port}\n
Response:\t\tHTTP/%{http_version} %{http_code}\n
\n
Speed:\n
* speed_download:\t%{speed_download} b/s\n
* speed_upload:\t\t%{speed_upload} b/s\n
\n
Timings:\n
* time_namelookup:\t%{time_namelookup} sec\n
* time_connect:\t\t%{time_connect} sec\n
* time_appconnect:\t%{time_appconnect} sec\n
* time_pretransfer:\t%{time_pretransfer} sec\n
* time_redirect:\t%{time_redirect} sec\n
* time_starttransfer:\t%{time_starttransfer} sec\n
\t\t\t------------\n
* time_total:\t\t%{time_total} sec\n
EOF

View File

@@ -1,26 +0,0 @@
#!/usr/bin/env bash
CONTAINER="my-container" # the name of the container in which to 'exec' something
CONFIG="$(dirname $([ -L $0 ] && readlink -f $0 || echo $0))/docker-compose.yml" # path to compose yml file
CMD="docker-compose -f $CONFIG" # docker-compose command
APP_URL='http://localhost:8000/'
open_browser() {
if which xdg-open > /dev/null; then
xdg-open "$1" </dev/null >/dev/null 2>&1 & disown
elif which gnome-open > /dev/null; then
gnome-open "$1" </dev/null >/dev/null 2>&1 & disown
fi
}
case "$1" in
'' | 'help' ) echo -e "Provide one of operations: \t start, stop, up, down, restart, rebuild, open";
echo "Otherwise all args will be passed to 'docker exec -ti $CONTAINER ...'" ;;
'open' ) open_browser $APP_URL ;;
'up' ) $CMD up -d --build ;; # build and start containers
'down' ) $CMD down --remove-orphans ;; # stop and remove containers
'start' ) $CMD start ;; # start containers
'stop' ) $CMD stop ;; # stop containers
'restart' ) $CMD stop && $CMD start ;; # restart containers
'rebuild' ) $CMD down --remove-orphans && $CMD up -d --build ;; # rebuild containers
* ) docker exec -ti $CONTAINER $@ # exec anything in container
esac

27
utils/.local/bin/docker-ips Executable file
View File

@@ -0,0 +1,27 @@
#!/usr/bin/env bash
set -eo pipefail
# TODO not ready yet
exit
if [ "$1" ]; then
if [ "$1" = "-a" ]; then
docker ps -aq \
| xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \
| sed -e 's#^/##' \
| column -t
elif [ "$1" = "-c" ]; then
docker compose ps -q \
| xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \
| sed -e 's#^/##' \
| column -t
else
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$1"
docker port "$1"
fi
else
docker ps -q \
| xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \
| sed -e 's#^/##' \
| column -t
fi

View File

@@ -1,22 +1,42 @@
#!/usr/bin/env bash
if [ -f "$1" ]; then
case "$1" in
*.tar.bz2) tar -jxvf "$1" ;;
*.tar.gz) tar -zxvf "$1" ;;
*.bz2) bunzip2 "$1" ;;
*.dmg) hdiutil mount "$1" ;;
*.gz) gunzip "$1" ;;
*.tar) tar -xvf "$1" ;;
*.tbz2) tar -jxvf "$1" ;;
*.tgz) tar -zxvf "$1" ;;
*.zip) unzip "$1" ;;
*.ZIP) unzip "$1" ;;
set -eo pipefail
if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
echo "Usage: $(basename "$0") <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
echo " $(basename "$0") <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
echo
echo "Options:"
echo " -h, --help Show this help message"
exit 0
fi
for n in "$@"; do
if [ ! -f "$n" ] ; then
echo "File does not exist, skipping: '$n'"
continue
fi
case "${n%,}" in
# *.tar) tar -xvf "$1" ;;
# *.tbz2) tar -jxvf "$1" ;;
# *.tar.bz2) tar -jxvf "$1" ;;
# *.tgz) tar -zxvf "$1" ;;
# *.tar.gz) tar -zxvf "$1" ;;
# *.tar.xz) tar -Jxvf "$1" ;;
*.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar)
tar xvf "$n" ;;
*.7z|*.arj|*.cab|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.rpm|*.udf|*.wim|*.xar)
7z x ./"$n" ;;
*.lzma) unlzma ./"$n" ;;
*.bz2) bunzip2 ./"$n" ;;
*.rar) unrar x -ad ./"$n" ;;
*.gz) gunzip ./"$n" ;;
*.zip) unzip ./"$n" ;;
*.z) uncompress ./"$n" ;;
*.xz) unxz ./"$n" ;;
*.exe) cabextract ./"$n" ;;
*.pax) cat "$1" | pax -r ;;
*.pax.Z) uncompress "$1" --stdout | pax -r ;;
*.rar) unrar x "$1" ;;
*.Z) uncompress "$1" ;;
*) echo "'$1' cannot be extracted/mounted via extract()" ;;
*) echo "extract: '$n' - unknown archive method" ;;
esac
else
echo "'$1' is not a valid file"
fi
done

View File

@@ -1,3 +1,17 @@
#!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Flush DNS cache using resolvectl.
Options:
-h, --help Show this help message
EOF
exit 0
fi
sudo resolvectl flush-caches

View File

@@ -1,6 +1,25 @@
#!/usr/bin/env bash
set -e
set -u
set -eo pipefail
show_usage() {
cat <<EOF
Usage: $(basename "$0") [-h] [search]
List or search HTTP status codes.
Options:
-h, --help Show this help message
Arguments:
search Search term to filter status codes
EOF
}
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
show_usage
exit 0
fi
statuses="100 Continue
101 Switching Protocols

22
utils/.local/bin/is Executable file
View File

@@ -0,0 +1,22 @@
#!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <command>
Check if a command is available.
Options:
-h, --help Show this help message
Arguments:
command Command to check
Returns 0 if command exists, 1 otherwise.
EOF
exit 0
fi
[ -n "$1" ] && command -v "$1" || exit 1

View File

@@ -1,5 +1,24 @@
#!/usr/bin/env bash
set -e
set -u
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <string>
Display length of a string.
Options:
-h, --help Show this help message
Arguments:
string String to measure
EOF
exit 0
fi
if [[ ! -t 0 ]]; then # Read from stdin (pipe)
wc -c | awk '{print $1}'
else # Read from arguments
echo -n "$@" | wc -c | awk '{print $1}'
fi

View File

@@ -1,6 +1,27 @@
#!/usr/bin/env bash
set -e
set -u
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <lineno> <file>
Display a specific line from a file.
Options:
-h, --help Show this help message
Arguments:
lineno Line number to display (1-based)
file File to read from
EOF
exit 0
fi
lineno="$1"; shift
if [[ ! -t 0 ]]; then # Read from stdin (pipe)
sed -n "${lineno}p"
else # Read from file
sed -n "${lineno}p" -- "$@"
fi

21
utils/.local/bin/mkcd Executable file
View File

@@ -0,0 +1,21 @@
#!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <directory>
Create directory and change to it.
Options:
-h, --help Show this help message
Arguments:
directory Directory to create and enter
EOF
exit 0
fi
mkdir -p "$1"
cd "$1" || false

View File

@@ -1,7 +1,21 @@
#!/usr/bin/env bash
set -e
set -u
set -o pipefail
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <script>
Create a new bash script with boilerplate.
Options:
-h, --help Show this help message
Arguments:
script Script filename to create
EOF
exit 0
fi
if [ ! $# -eq 1 ]; then
echo 'mksh takes one argument' 1>&2
@@ -11,13 +25,11 @@ elif [ -e "$1" ]; then
exit 1
fi
echo '#!/usr/bin/env bash
set -e
set -u
set -o pipefail
' > "$1"
{
echo '#!/usr/bin/env bash'
echo 'set -eo pipefail'
echo
} > "$1"
chmod u+x "$1"
nano "$1"
exec "$EDITOR" "$1"

22
utils/.local/bin/myip Executable file
View File

@@ -0,0 +1,22 @@
#!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Display external IP address.
Options:
-h, --help Show this help message
EOF
exit 0
fi
if [[ "$1" == "-2" ]]; then
curl -fsSL https://api.myip.com | jq -r .ip
else
curl -fsSL http://ipecho.net/plain
echo
fi

171
utils/.local/bin/notes Executable file
View File

@@ -0,0 +1,171 @@
#!/bin/bash
#shellcheck disable=SC2155,SC2207
set -eo pipefail
NOTES_DIR="$HOME/notes"
EDITOR="${EDITOR:-nano}"
mkdir -p "$NOTES_DIR"
show_usage() {
cat <<EOF
Usage: $(basename "$0") <command> [options]
Commands:
add Create a new note
edit Open a note in editor
rm Remove a note
list List all notes
Options for 'add':
-n, --name <name> Custom note name (default: <unixtime>-untitled-note.md)
-t, --title <title> Custom note title (default: "Untitled note")
--no-time Don't add creation timestamp
--no-edit Don't open editor
Options for 'edit':
<name> Note filename to edit
Options for 'rm':
<name> Note filename to remove
Options for 'list':
(none)
EOF
}
cmd_add() {
local name="untitled-note"
local title="Untitled note"
local add_time=true
local new_edit=true
while [[ $# -gt 0 ]]; do
case "$1" in
-n|--name) name="$2"; shift 2 ;;
-t|--title) title="$2"; shift 2 ;;
--no-time) add_time=false; shift ;;
--no-edit) new_edit=false; shift ;;
*)
echo "Unknown option: $1"
show_usage
exit 1
;;
esac
done
local filename="$(date +%s)-${name}.md"
local filepath="$NOTES_DIR/$filename"
{
echo "# $title"
echo
if [[ "$add_time" == true ]]; then
echo
echo "Created at $(date '+%Y-%m-%d %H:%M:%S')"
echo
fi
echo "---"
echo
} > "$filepath"
echo "Created note: $filepath"
if [[ "$new_edit" == true ]]; then
$EDITOR "$filepath"
fi
}
cmd_edit() {
if [[ $# -lt 1 ]]; then
echo "Error: Note name required"
show_usage
exit 1
fi
local filename="$1"
local filepath="$NOTES_DIR/$filename"
if [[ ! -f "$filepath" ]]; then
echo "Error: Note not found: $filename"
exit 1
fi
$EDITOR "$filepath"
}
cmd_rm() {
if [[ $# -lt 1 ]]; then
echo "Error: Note name required"
show_usage
exit 1
fi
local filename="$1"
local filepath="$NOTES_DIR/$filename"
if [[ ! -f "$filepath" ]]; then
echo "Error: Note not found: $filename"
exit 1
fi
rm -v "$filepath"
}
cmd_list() {
local count=0
printf "%-40s %s\n" "Filename" "Title"
printf "%-40s %s\n" "--------" "-----"
# Use nullglob to handle empty directory case
local shopt_save
shopt_save=$(shopt -p nullglob)
shopt -s nullglob
local files=("$NOTES_DIR"/*.md)
# Restore original nullglob setting
eval "$shopt_save"
for file in "${files[@]}"; do
if [[ -f "$file" ]]; then
local filename=$(basename "$file")
local title=$(sed -n 's/^# \([^#].*\)/\1/p' "$file" | head -n1)
if [[ -z "$title" ]]; then
title="Untitled note"
fi
printf "%-40s # %s\n" "$filename" "$title"
((count++))
fi
done
if [[ $count -eq 0 ]]; then
echo "No notes found"
else
echo ""
echo "Total: $count note(s)"
fi
}
if [[ $# -lt 1 ]]; then
cmd_list "$@"
exit 0
fi
command="$1"
shift
case "$command" in
add) cmd_add "$@" ;;
edit) cmd_edit "$@" ;;
rm) cmd_rm "$@" ;;
list) cmd_list "$@" ;;
-h|--help|help) show_usage ;;
*)
echo "Unknown command: $command"
show_usage
exit 1
;;
esac

View File

@@ -0,0 +1,62 @@
#!/bin/bash
#shellcheck disable=SC2155,SC2207,SC2309,SC2034,SC2154,SC1087
set -eo pipefail
_notes_completion() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local command="${COMP_WORDS[1]}"
if [[ COMP_CWORD -eq 1 ]]; then
COMPREPLY=($(compgen -W "add edit rm list" -- "$cur"))
return
fi
if [[ "$command" == "edit" || "$command" == "rm" ]]; then
local notes_dir="$HOME/notes"
local notes=()
if [[ -d "$notes_dir" ]]; then
for file in "$notes_dir"/*.md; do
if [[ -f "$file" ]]; then
notes+=("$(basename "$file")")
fi
done
fi
local IFS=$'\n'
COMPREPLY=($(compgen -W "$(printf '%s\n' "${notes[@]}")" -- "$cur"))
compopt -o filenames
return
fi
}
_notes() {
local -a commands=(
'add:Create a new note'
'edit:Open a note in editor'
'rm:Remove a note'
'list:List all notes'
)
if (( CURRENT == 2 )); then
_describe 'command' commands
elif (( CURRENT >= 3 )); then
case $words[2] in
edit|rm)
local notes_dir="$HOME/notes"
if [[ -d "$notes_dir" ]]; then
_files -W "$notes_dir" -g '*.md'
fi
;;
*)
_message 'no more arguments'
;;
esac
fi
}
if [[ -n "$BASH_VERSION" ]]; then
complete -F _notes_completion notes ./notes
fi
if [[ -n "$ZSH_VERSION" ]]; then
compdef _notes notes ./notes
fi

View File

@@ -1,3 +1,17 @@
#!/usr/bin/env bash
set -eo pipefail
date '+%d.%m.%Y %H:%M:%S'
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Display current time and unix timestamp.
Options:
-h, --help Show this help message
EOF
exit 0
fi
date '+%H:%M:%S%n%s'

20
utils/.local/bin/own Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <files...>
Change ownership of files to current user.
Options:
-h, --help Show this help message
Arguments:
files Files or directories to change ownership
EOF
exit 0
fi
sudo chown "$(whoami)". -R --changes --preserve-root "$@"

View File

@@ -1,6 +1,18 @@
#!/usr/bin/env bash
set -e
set -u
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Paste content from system clipboard.
Options:
-h, --help Show this help message
EOF
exit 0
fi
if hash pbpaste 2>/dev/null; then
exec pbpaste

View File

@@ -1,4 +1,22 @@
#!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Set default permissions for files and directories in current directory.
Options:
-h, --help Show this help message
Sets:
- Files: 0664 (rw-rw-r--)
- Directories: 0775 (rwxrwxr-x)
EOF
exit 0
fi
# TODO permissions via arguments

View File

@@ -1,13 +1,29 @@
#!/usr/bin/env bash
set -e
set -u
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] [filter]
Display running processes.
Options:
-h, --help Show this help message
Arguments:
filter Optional filter string to match processes
EOF
exit 0
fi
if [[ $# == 0 ]]; then
process_list="$(ps -eo 'pid command')"
if [[ $# != 0 ]]; then
else
process_list="$(echo "$process_list" | grep -Fiw "$@")"
fi
echo "$process_list" |
grep -Fv "${BASH_SOURCE[0]}" |
grep -Fv grep |
GREP_COLORS='mt=00;35' grep -E --colour=auto '^\s*[[:digit:]]+'
echo "$process_list" \
| grep -Fv "${BASH_SOURCE[0]}" \
| grep -Fv grep \
| GREP_COLORS='mt=00;35' grep -E --colour=auto '^\s*[[:digit:]]+'

View File

@@ -1,7 +1,18 @@
#!/usr/bin/env bash
set -e
set -u
set -o pipefail
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Open a temporary scratchpad file in \$EDITOR.
Options:
-h, --help Show this help message
EOF
exit 0
fi
file="$(mktemp)"
echo "Editing $file"

View File

@@ -1,13 +1,24 @@
#!/usr/bin/env bash
set -e
set -u
set -o pipefail
set -eo pipefail
port='8888'
if [ $# -eq 1 ]; then
port="$1"
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] [port]
Start a simple HTTP server in current directory.
Options:
-h, --help Show this help message
Arguments:
port Port number (default: 8888)
EOF
exit 0
fi
port="${1:-8888}"
if hash php 2>/dev/null; then
exec php -S "localhost:$port"
elif hash python3 2>/dev/null; then

View File

@@ -1,7 +1,21 @@
#!/usr/bin/env bash
set -e
set -u
set -o pipefail
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <seconds>
Set a timer with desktop notification.
Options:
-h, --help Show this help message
Arguments:
seconds Timer duration in seconds
EOF
exit 0
fi
sleep "$1"
notify-send 'Timer complete!' \

17
utils/.local/bin/today Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Display current date.
Options:
-h, --help Show this help message
EOF
exit 0
fi
date '+%d.%m.%Y'

View File

@@ -1,6 +1,20 @@
#!/usr/bin/env bash
set -e
set -u
set -o pipefail
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <files...>
Move files to trash using gio.
Options:
-h, --help Show this help message
Arguments:
files Files or directories to move to trash
EOF
exit 0
fi
gio trash "$@"

View File

@@ -1,5 +1,21 @@
#!/usr/bin/env bash
set -u
#!/husr/bin/env bash
set -uo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <command>
Retry a command until it fails.
Options:
-h, --help Show this help message
Arguments:
command Command to repeatedly execute
EOF
exit 0
fi
"$@"
while [[ "$?" -eq 0 ]]; do

View File

@@ -1,5 +1,21 @@
#!/usr/bin/env bash
set -u
set -uo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <command>
Retry a command until it succeeds.
Options:
-h, --help Show this help message
Arguments:
command Command to repeatedly execute
EOF
exit 0
fi
"$@"
while [[ "$?" -ne 0 ]]; do

16
utils/.local/bin/unixtime Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Display current unix timestamp.
Options:
-h, --help Show this help message
EOF
exit 0
fi
date '%s'

43
utils/.local/bin/upgrade Executable file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Upgrade system packages (apt, snap, flatpak).
Options:
-h, --help Show this help message
EOF
exit 0
fi
is apt >/dev/null && {
echo
echo "==========================="
echo "Upgrading apt packages..."
echo "==========================="
echo
sudo apt update
sudo apt upgrade -y
}
is snap >/dev/null && {
echo
echo "==========================="
echo "Upgrading snap packages..."
echo "==========================="
echo
sudo snap refresh
}
is flatpak >/dev/null && {
echo
echo "==========================="
echo "Upgrading flatpak packages..."
echo "==========================="
echo
sudo flatpak update -y
}

View File

@@ -1,14 +1,38 @@
#!/usr/bin/env bash
set -e
set -u
set -o pipefail
set -eo pipefail
curl "https://r.jina.ai/$1" \
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <url>
Convert webpage URL to markdown using jina.ai.
Options:
-h, --help Show this help message
Arguments:
url URL of webpage to convert
EOF
exit 0
fi
# More details: https://jina.ai/reader/
url="$1"; shift
curl "https://r.jina.ai/$url" \
-sS \
-H "DNT: 1" \
-H "X-Md-Hr: ---" \
-H "X-Base: final" \
-H "X-Engine: direct" \
-H "X-Timeout: 10" \
-H "X-Locale: ru-RU" \
-H "X-No-Cache: true" \
-H "X-Engine: browser" \
-H "X-User-Agent: url2md" \
-H "X-Md-Em-Delimiter: *" \
-H "X-Md-Heading-Style: setext" \
-H "X-Md-Link-Style: inlined" \
-H "X-Return-Format: markdown" \
-H "X-Keep-Img-Data-Url: true" \
-H "X-Md-Link-Reference-Style: collapsed" \
-H "X-Md-Link-Style: referenced"
"$@"

30
utils/.local/bin/vcompress Executable file
View File

@@ -0,0 +1,30 @@
#!/usr/bin/env bash
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <input.mp4>
Compress MP4 video using ffmpeg.
Options:
-h, --help Show this help message
Arguments:
input.mp4 Input video file (must be .mp4)
Output:
<input>_compressed.mp4
EOF
exit 0
fi
filename="${1%.mp4}"
ffmpeg \
-i "$filename".mp4 \
-c:v libx264 \
-crf 28 \
-preset veryslow \
-c:a aac \
-b:a 128k \
"$filename"_compressed.mp4

View File

@@ -1,7 +1,21 @@
#!/usr/bin/env bash
set -e
set -u
set -o pipefail
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <pid>
Wait for a process to complete.
Options:
-h, --help Show this help message
Arguments:
pid Process ID to wait for
EOF
exit 0
fi
if hash systemd-inhibit 2>/dev/null; then
systemd-inhibit \

32
utils/.local/bin/what Executable file
View File

@@ -0,0 +1,32 @@
#!/usr/bin/env bash
#set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <command>
Show detailed information about a command.
Options:
-h, --help Show this help message
Arguments:
command Command to investigate
EOF
exit 0
fi
set -x
type "$1" 2>/dev/null
type -t "$1" 2>/dev/null
type -a "$1" 2>/dev/null
type -P "$1" 2>/dev/null
which -a "$1" 2>/dev/null
which "$1" \
&& file -b "$(which "$1")" \
&& file -L "$(which "$1")"
type -a "$1" 2>/dev/null
command -v "$1"
whereis "$1"

39
utils/.local/bin/ytmusic Executable file
View File

@@ -0,0 +1,39 @@
#!/usr/bin/env bash
set -eo pipefail
# Download music from Youtube or Youtube Music
# and save as top quality flac file without video
# Playlist and video/track URLs are supported
# Usage: $ ytmusic https://www.youtube.com/watch?v=dQw4w9WgXcQ
# More info: https://github.com/ytdl-org/youtube-dl
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <url>
Download music from YouTube or YouTube Music as FLAC.
Options:
-h, --help Show this help message
Arguments:
url YouTube or YouTube Music URL (playlist or video)
Output:
$HOME/ytmusic/<playlist>/<channel> - <title>.flac
EOF
exit 0
fi
DEST_PATH="${HOME}/ytmusic"
mkdir -p "${DEST_PATH}"
youtube-dl \
--extract-audio \
--audio-format flac \
--audio-quality 0 \
--format bestaudio \
--write-info-json \
--output "${DEST_PATH}/%(playlist_title)s/%(channel)s - %(title)s.%(ext)s" \
"$@"

View File

@@ -44,7 +44,34 @@
"statusbar_command.applicationCommands": [
{
"text": "$(arrow-left)",
"text": "$(debug-restart)",
"tooltip": "Перезагрузить расширения",
"id": "reload-ext",
"name": "Перезагрузить расширения",
"priority": 1,
"alignment": "left",
"command": "workbench.action.restartExtensionHost"
},
{
"text": "$(console) Терминал",
"tooltip": "Терминал",
"id": "terminal",
"name": "Терминал",
"priority": 1,
"alignment": "left",
"command": "workbench.action.terminal.toggleTerminal"
},
{
"text": "$(credit-card) DevTools",
"tooltip": "VSCode Dev Tools",
"id": "dev-tools",
"name": "VSCode Dev Tools",
"priority": 1,
"alignment": "left",
"command": "workbench.action.toggleDevTools"
},
{
"text": "$(arrow-left) Назад",
"tooltip": "Назад",
"id": "nav-back",
"name": "Назад",
@@ -53,13 +80,22 @@
"command": "workbench.action.navigateBack"
},
{
"text": "$(arrow-right)",
"text": "$(arrow-right) Вперёд",
"tooltip": "Вперёд",
"id": "nav-forw",
"name": "Вперёд",
"priority": 1,
"alignment": "left",
"command": "workbench.action.navigateForward"
},
{
"text": "$(squirrel) Decode JWT",
"tooltip": "Decode JWT",
"id": "decode_jwt",
"name": "decode_jwt",
"priority": 1,
"alignment": "left",
"command": "extension.jwt-decoder"
}
],
@@ -102,7 +138,7 @@
// terminal
//----------------------------------------------------------------
"terminal.integrated.fontFamily": "Jetbrains Mono, MesloLGS NF, Ubuntu Mono",
"terminal.integrated.fontFamily": "JetBrainsMono Nerd Font, MesloLGS NF, Ubuntu Mono",
"terminal.integrated.fontSize": 13,
"terminal.integrated.cursorStyle": "line",
"terminal.integrated.defaultProfile.linux": "zsh",
@@ -285,5 +321,6 @@
"git diff",
"git show"
],
"kilo-code.deniedCommands": []
"kilo-code.deniedCommands": [],
"chat.disableAIFeatures": true
}

View File

@@ -35,6 +35,20 @@ include "%L"
<Multi_key> <P> <minus> : "₽" # рубли
<Multi_key> <p> <minus> : "₽" # рубли
<Multi_key> <plus> <minus> : "±"
<Multi_key> <^> <|> : "↑"
<Multi_key> <^> <equal> : "⇑"
<Multi_key> <|> <v> : "↓"
<Multi_key> <v> <equal> : "⇓"
<Multi_key> <less> <minus> : "←"
<Multi_key> <less> <equal> : "⇐"
<Multi_key> <minus> <greater> : "→"
<Multi_key> <equal> <greater> : "⇒"
# ################################################################################
# # Compose Table for Cyrillic Alphabets / Compose-таблица для кириллических алфавитов
# ################################################################################