diff --git a/.config/ideavim/ideavimrc b/.config/ideavim/ideavimrc index 20c81dc..81571a8 100644 --- a/.config/ideavim/ideavimrc +++ b/.config/ideavim/ideavimrc @@ -35,10 +35,12 @@ nnoremap k nnoremap l " yank/paste with system clipboard +nnoremap Y y$ +vnoremap Y y$ nnoremap y \"+y -nnoremap Y \"+Y +nnoremap Y \"+y$ vnoremap y \"+y -vnoremap Y \"+Y +vnoremap Y \"+y$ nnoremap p \"+p nnoremap P \"+P vnoremap p \"+p @@ -61,7 +63,8 @@ nmap ? (FindInPath) nmap sf (GotoFile) nmap af (GotoFile) nmap rn (RenameElement) -nmap ru (Run) +nmap rj (Run) +nmap l (ActivateLogcatToolWindow) " Plugins diff --git a/.config/nvim/lua/config/autocmd.lua b/.config/nvim/lua/config/autocmd.lua index 45f5a41..b011c3c 100644 --- a/.config/nvim/lua/config/autocmd.lua +++ b/.config/nvim/lua/config/autocmd.lua @@ -7,6 +7,8 @@ vim.api.nvim_create_autocmd('FileType', { -- Remove trailing whitespaces on save vim.api.nvim_create_autocmd('BufWritePre', { callback = function() + if vim.fn.expand('%:e') == 'md' then return end + local view = vim.fn.winsaveview() vim.cmd('%s/\\s\\+$//e') vim.fn.winrestview(view) @@ -19,3 +21,18 @@ vim.api.nvim_create_autocmd('TextYankPost', { vim.highlight.on_yank({ higroup = "Visual", timeout = 400 }) end }) + +local filetypes = { + json = 'jsonc', + j2 = 'jinja', + service = 'systemd' +} + +for ext, ft in pairs(filetypes) do + vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, { + pattern = "*." .. ext, + callback = function() + vim.bo.filetype = ft + end, + }) +end diff --git a/.config/nvim/lua/config/options.lua b/.config/nvim/lua/config/options.lua index 871ce09..3731daa 100644 --- a/.config/nvim/lua/config/options.lua +++ b/.config/nvim/lua/config/options.lua @@ -2,8 +2,8 @@ vim.o.hlsearch = true -- Enable line numbers -vim.wo.number = true -vim.wo.relativenumber = true +vim.o.number = true +vim.o.relativenumber = true -- Enable mouse mode vim.o.mouse = 'a' diff --git a/.config/nvim/lua/plugins/illuminate.lua b/.config/nvim/lua/plugins/illuminate.lua new file mode 100644 index 0000000..7bba057 --- /dev/null +++ b/.config/nvim/lua/plugins/illuminate.lua @@ -0,0 +1,7 @@ +return { + 'RRethy/vim-illuminate', config = function() + require('illuminate').configure({ + delay = 0, + }) + end +} diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua index d1acea9..fcae7ad 100644 --- a/.config/nvim/lua/plugins/telescope.lua +++ b/.config/nvim/lua/plugins/telescope.lua @@ -19,12 +19,7 @@ return { [''] = false, [""] = actions.move_selection_next, [""] = actions.move_selection_previous, - -- [""] = actions.smart_send_to_qflist + actions.open_qflist, - [""] = require("trouble.sources.telescope").open }, - n = { - [""] = require("trouble.sources.telescope").open - } }, }, } diff --git a/.config/tmux/theme.conf b/.config/tmux/theme.conf index b860ca7..65141c0 100644 --- a/.config/tmux/theme.conf +++ b/.config/tmux/theme.conf @@ -12,10 +12,10 @@ set -g status-justify "left" # status set -g status-left-length 0 -set -g status-left "#[bg=#{@theme-active-bg},fg=#{@theme-active-fg}]#{?client_prefix,[#{session_name}],#[bg=#{@theme-bg},fg=#{@theme-fg}][#{session_name}]}#[bg=#{@theme-bg},fg=#{@theme-fg}] " +set -g status-left "#{?client_prefix,#[bg=#{@theme-active-bg}]#[fg=#{@theme-active-fg}][#{session_name}],#[bg=#{@theme-bg}]#[fg=#{@theme-fg}][#{session_name}]}#[bg=#{@theme-bg},fg=#{@theme-fg}] " set -g status-right "#(sb-battery -s) | %a %m/%d %I:%M %P" set -g window-status-format " #I:#W " -set -g window-status-current-format "#[bg=#{@theme-active-bg},fg=#{@theme-active-fg}, bold]#{?window_zoomed_flag, #I:#W 󰊓 , #I:#W }" +set -g window-status-current-format "#[bg=#{@theme-active-bg},fg=#{@theme-active-fg},bold]#{?window_zoomed_flag, #I:#W 󰊓 , #I:#W }" set -g window-status-style "bg=#{@theme-bg},fg=#{@theme-fg}" set -g status-interval "5" diff --git a/.config/zsh/.zlogin b/.config/zsh/.zlogin index 5022d02..2d0b73a 100644 --- a/.config/zsh/.zlogin +++ b/.config/zsh/.zlogin @@ -1,15 +1,2 @@ -[ -f "$HOME/.config/.fix-tty" ] || return - -process_id="$$" -( - if [ "$(inxi -aG | grep -c 'Monitor')" = "1" ]; then - setfont ter-v32n - stty -F /proc/$process_id/fd/0 rows 65 cols 195 - else - setfont ter-v16n - stty -F /proc/$process_id/fd/0 rows 90 cols 320 - fi >/dev/null 2>&1 & -) -unset process_id - -# vim: ft=sh +pkill -0 gpg-agent || gpg-agent --daemon +eval "$(ssh-agent)" diff --git a/.config/zsh/.zshenv b/.config/zsh/.zshenv index 6b03206..98486b4 100644 --- a/.config/zsh/.zshenv +++ b/.config/zsh/.zshenv @@ -1,11 +1,6 @@ set -a -PATH="\ -$HOME/.local/share/go/bin:\ -$HOME/.local/share/dotnet:\ -$PATH" -PATH="${$(find -L ~/.local/bin ! -name '.*' -type d -printf %p:)%%:}:$PATH" - +# `time` format TIMEFMT=$'\ncmd\t%J\nreal\t%*E\nuser\t%U\nsys\t%S\ncpu\t%P' # lc vars @@ -39,8 +34,9 @@ XDG_MUSIC_DIR="$HOME/" XDG_PICTURES_DIR="$HOME/" XDG_VIDEOS_DIR="$HOME/" -# default configs -ANDROID_HOME="${HOME}/.local/share/android-home" +# other +ANDROID_HOME='/opt/android-sdk' +ANDROID_SDK_ROOT='/opt/android-sdk' ANDROID_USER_HOME="${HOME}/.local/share/android-home" ANDROID_AVD_HOME="${ANDROID_HOME}/avd" BAT_THEME="TwoDark" @@ -61,5 +57,13 @@ COMPOSE_BAKE=true GIT_DISCOVERY_ACROSS_FILESYSTEM=1 DOTNET_CLI_TELEMETRY_OPTOUT=1 # clippy <3 DOTNET_ROOT="${HOME}/.local/share/dotnet" +DELTA_FEATURES="-side-by-side" + +PATH="\ +$HOME/.local/share/go/bin:\ +$HOME/.local/share/dotnet:\ +$ANDROID_HOME/cmdline-tools/latest/bin: +$PATH" +PATH="${$(find -L ~/.local/bin ! -name '.*' -type d -printf %p:)%%:}:$PATH" set +a diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc index fcdfde5..98c829f 100644 --- a/.config/zsh/.zshrc +++ b/.config/zsh/.zshrc @@ -1,8 +1,5 @@ -. ~/.config/zsh/modes.sh - fpath=($HOME/.local/share/completions $fpath) - -# ls colors +eval "$(zoxide init zsh --cmd j)" eval "$(dircolors -b)" # history @@ -10,7 +7,6 @@ HISTSIZE=10000000 SAVEHIST=10000000 HISTFILE="${HOME}/.cache/zsh_history" alias history='history 1000000000000000' -alias hist='history' setopt hist_expire_dups_first setopt hist_ignore_dups @@ -90,10 +86,9 @@ alias venv='source src_venv' alias ex='source src_example' alias pa='source src_add_path' alias info='pinfo' -alias bat='bat ' +alias bat='bat' alias img='nsxiv' alias xclip='xclip -selection clipboard' -alias xcp='perl -pe "chomp if eof" | xclip -selection clipboard' alias rgf='rg --files | rg' alias wt='watch --color -d -cn 0.1 ' alias .e='set -a && source .env && set +a' @@ -107,78 +102,98 @@ alias open='xdg-open' alias m.='if mount | grep -q "$(pwd)"; then umount -l .; cd .; else mount .; cd .; fi' alias rs='stow -R .' alias sst='ssh -t' -alias rdj='rmdir ./*' +alias rdj='rmdir --ignore-fail-on-non-empty ./* 2>/dev/null' +alias rdr='rmdir --ignore-fail-on-non-empty ./**/* 2>/dev/null' alias qr='qrencode -t ansiutf8' -alias rgi='rg --no-ignore --hidden' +alias rgi='rg -i' +alias rgn='rg --no-ignore --hidden' +alias rgni='rg --no-ignore --hidden -i' +alias cal='cal -3' +alias s='s ' +alias t='vi ~/todo.md' +alias c.='cloc --vcs=git .' +alias yt='noglob yt-dlp' +alias b64='base64' # function aliases mkexe() { touch "${1?}"; chmod +x "$1"; }; compdef _files mkexe; bl() { brightnessctl set "$1"% > /dev/null; } nosw() { alacritty --class 'noswallow' -e "$@"; }; compdef _command nosw vims() { filepath="$(type "$1" | rev | cut -d ' ' -f 1 | rev)"; [ $? -eq 0 ] && vim "${filepath}"; }; compdef _command vims -tl() { tree -C "$@" | bat }; compdef _tree tl +tl() { tree -C "$@" | bat; }; compdef _tree tl diff() { /usr/bin/diff --color -u "$@" | delta; }; compdef _files di; +xcp() { perl -pe "chomp if eof" | xclip -selection clipboard; } # compdef -compdef -a '_git; _git-commit' gdc # todo compdef '_files -g "*.md"' md +compdef _command s # ansible alias ap='ansible-playbook' alias ag='ansible-galaxy' # git aliases +compdef -a '_git; _git-commit' gdc # todo +compdef -a '_git; _git-ls-files' gls # todo +# compdef -a '_git; _git-reset' grt # todo +alias grt='git reset' + gl() { git log --decorate "$@" | bat }; compdef '_git; _git-log' gl gus() { git branch --set-upstream-to="${1:?}/${2:?}" "${2:?}" }; compdef '_git; _git-push' gus gpo() { git push --set-upstream origin "$(git rev-parse --abbrev-ref HEAD)" "$@" } gru() { git remote get-url "${1-origin}" }; compdef '_gor' gru +gtr() { gls $1 | tree --fromfile . } alias ga="git add" -alias ga.="git add ." # always fatfinger this alias gb="git branch" alias gc="git commit" -alias gca="git commit --allow-empty-message --amend --no-edit" +alias gca="git commit --allow-empty-message --amend --no-edit --date now" alias gcad='gca --no-gpg-sign' +alias gcan="git commit --allow-empty-message --amend --no-edit --no-date" +alias gcd='git commit --no-gpg-sign' alias gck="git checkout" alias gcl="git clone" +alias gcln!='git clean -xfd' +alias gcln='git clean -nxfd' alias gcls="git clone --depth=1" alias gcm="git commit --allow-empty-message -m ''" -alias gcd='git commit --no-gpg-sign' alias gcmd="git commit --allow-empty-message -m '' --no-gpg-sign" -alias gcn="git clean -nfd" alias gcn!="git clean -fd" +alias gcn="git clean -nfd" alias gcp="git cherry-pick" +alias gct="gc -am 'Add files via upload :trollface:'" alias gd="git diff" +alias gdj='DELTA_FEATURES="+side-by-side" gd' alias gds="gd --staged" +alias 'gd?'="gd --stat" +alias 'gds?'="gds --stat" +alias gdsj='DELTA_FEATURES="+side-by-side" gds' +alias gdv='git difftool --tool=vimdiff' alias gf="git fetch" alias gi="git init" alias gla="gl --all" +alias glp='gl --pretty=fuller' alias gm="git merge" alias gp="git push" alias gpu="git pull" alias gr="git restore" +alias grc='git rm --cached' alias grj="git rebase" alias grjc="git rebase --continue" alias grjs="git rebase --cancel" alias grm="git remote" alias grs="git restore --staged" -alias grt="git reset" -alias grt!="git reset --hard" -alias gsm='git submodule' -alias grc='git rm --cached' +alias grt!="grt --hard" alias gs="git status" -alias gs.='git status .' alias gsc="git switch -C" alias gsh="git show" +alias 'gsh?'="git show --stat" +alias gshj='DELTA_FEATURES="+side-by-side" gsh' alias gsj="git stash" +alias gsl="git stash list" +alias gsm='git submodule' alias gsp="git stash pop" alias gt="git tag" alias gus="git fetch --unshallow" -alias gdj='DELTA_FEATURES="+side-by-side" gd' -alias gdsj='DELTA_FEATURES="+side-by-side" gds' -alias gshj='DELTA_FEATURES="+side-by-side" gsh' -alias gcln='git clean -nxfd' -alias gcln!='git clean -xfd' -alias gct="gc -am 'Add files via upload :trollface:'" # docker aliases alias d='docker' @@ -188,6 +203,7 @@ alias dc!='d! compose' alias di='d image' alias dj='dc up -d --force-recreate' +alias djn='dc up -d' alias djb='dj --build' alias djbl='djb && dl' alias djl='dj && dl' @@ -197,16 +213,38 @@ alias dr='d run --rm -it' alias drs='dc restart' alias drsl='dc restart && dl' alias dv='d volume' +alias ds='dc stop' # tmux stuff tn() { tmux new-session -s "${1-"$(basename "$(pwd)")"}" } -alias ta='tmux a -t' -# ta() { tmux a -t "$1" }; compdef '_tmux; _tmux-attach-session' ta +ta() { tmux a -t "$1" } +# alias ta='tmux a -t' # disable xon control chars stty -ixon # print tasks on startup -_ZSH_TODO_FILE="${HOME}/todo.md" -[ -f "$_ZSH_TODO_FILE" ] && { cat "$_ZSH_TODO_FILE" | grep -v '>.*'; } -unset _ZSH_TODO_FILE +TODO_FILE="${HOME}/todo.md" +[ -f "$TODO_FILE" ] && { cat "$TODO_FILE" | grep -v '>.*'; } +unset TODO_FILE + +setopt extendedglob +autoload add-zsh-hook +for file in "$ZDOTDIR/cd_hooks/"^_*; do + fname="cd_::$(basename "$file")" + eval " + $fname() { + $(cat "$file")"' + if [ -n "$DIRNAME" ]; then + if [[ "$PWD/" = "$DIRNAME"*/ && ( "$OLDPWD/" != "$DIRNAME"*/ || "$PWD" = "$OLDPWD" ) ]]; then cd::enter + elif [[ "$PWD/" != "$DIRNAME"*/ && "$OLDPWD/" = "$DIRNAME"*/ ]]; then cd::leave; fi + elif [ -n "$BASE_DIR" ]; then + : # TODO: handle + fi + } + ' + add-zsh-hook chpwd "$fname" + "$fname" +done +unsetopt extendedglob +CD_HOOKS_COMPLETED=1 diff --git a/.config/zsh/cd_hooks/hicpu_mount b/.config/zsh/cd_hooks/hicpu_mount new file mode 100644 index 0000000..e300dbd --- /dev/null +++ b/.config/zsh/cd_hooks/hicpu_mount @@ -0,0 +1,13 @@ +# shellcheck disable=SC2164,SC2168 + +local DIRNAME="$HOME/Services/cpu" + +cd::enter() { + ! mount | grep -q "$DIRNAME" && mount "$DIRNAME" && builtin cd -q "$DIRNAME" +} + +cd::leave() { + ! fuser -m "$DIRNAME" >/dev/null 2>&1 && umount "$DIRNAME" +} + +# vim: ft=sh diff --git a/.config/zsh/cd_hooks/higpu_mount b/.config/zsh/cd_hooks/higpu_mount new file mode 100644 index 0000000..cfd8684 --- /dev/null +++ b/.config/zsh/cd_hooks/higpu_mount @@ -0,0 +1,14 @@ +# shellcheck disable=SC2168 + +local DIRNAME="$HOME/Services/gpu" +local MOUNT_DIRNAME="$DIRNAME/.volumes" + +cd::enter() { + ! mount | grep -q "$MOUNT_DIRNAME" && mount "$MOUNT_DIRNAME" +} + +cd::leave() { + ! fuser "$DIRNAME" >/dev/null 2>&1 && umount "$MOUNT_DIRNAME" +} + +# vim: ft=sh diff --git a/.config/zsh/cd_hooks/university b/.config/zsh/cd_hooks/university new file mode 100644 index 0000000..9a22c9f --- /dev/null +++ b/.config/zsh/cd_hooks/university @@ -0,0 +1,73 @@ +local DIRNAME="$HOME/University/" + +mode::enable() { + local mode_path="$DIRNAME/$1/.env" + export MODE__ACTIVE_MODE="$1" + export MODE__OLD_PS1="$PS1" + + export PS1="($1) $PS1" + + . "$mode_path" +} + + +mode::get_functions() { + perl -ne '/^(?>function\s+)?([\x21-\x7e]+)\s*\(\)/ && print "$1\n"' < "$1" +} + +mode::get_variables() { + perl -ne '/^(?>declare\s+(?>--?\w+\s*)+\s*)?\s*([\x21-\x3c\x3e-\x7e]+)=.*$/ && print "$1\n"' < "$1" +} + +mode::get_aliases() { + perl -ne '/^(?:noglob\s+)?alias ([\x21-\x3c\x3e-\x7e]+)=(.*)\n/ && print "$1=$2\n"' < "$1" +} + +mode::disable() { + export PS1="$MODE__OLD_PS1" + local mode_path="$DIRNAME/$MODE__ACTIVE_MODE/.env" + + unset -v "MODE__OLD_PS1" + unset -v "MODE__ACTIVE_MODE" + + for mode_variable in ${(@f)"$(mode::get_variables "$mode_path")"}; do + unset "$mode_variable" + done + + for mode_function in ${(@f)"$(mode::get_functions "$mode_path")"}; do + unset -f "$mode_function" + done + + for mode_alias in ${(@f)"$(mode::get_aliases "$mode_path")"}; do + unalias "${mode_alias%=*}" + done +} + +cd::enter() { + [ -n "$MODE__ACTIVE_MODE" ] && mode::disable + local module_name="$(cut -d/ -f1 <<<"${PWD#"$DIRNAME"}" )" + [ ! -f "$DIRNAME/$module_name/.env" ] && return + mode::enable "$module_name" +} + +cd::leave() { + [ -n "$MODE__ACTIVE_MODE" ] && mode::disable +} + +m() { + [ -z "$MODE__ACTIVE_MODE" ] && return 1 + + local mode_path="$DIRNAME/$MODE__ACTIVE_MODE/.env" + + for type in Aliases Functions Variables; do + local arr=(${(@f)"$(mode::get_"${type:l}" "$mode_path")"}) + + [ "${#arr}" -gt 0 ] && { + echo "$type:" + printf '%s\n' "${arr[@]}" + echo + } + done | head -n -1 +} + +# vim: ft=zsh diff --git a/.config/zsh/modes.sh b/.config/zsh/modes.sh deleted file mode 100644 index 793f812..0000000 --- a/.config/zsh/modes.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/zsh - -mode::enable() { - local mode_path="${HOME}/.config/zsh/modes/$1.sh" - [ ! -f "$mode_path" ] && echo "Mode not found!" && return 1 - export MODE__ACTIVE_MODE="$1" - - export MODE__OLD_PS1="$PS1" - export PS1="($1) $PS1" - - # shellcheck disable=SC1090 - source "$mode_path" -} - - -mode::get_functions() { - perl -ne '/^(?>function\s+)?([\x21-\x7e]+)\s*\(\)/ && print "$1\n"' < "$1" -} - -mode::get_variables() { - perl -ne '/^(?>declare\s+(?>--?\w+\s*)+\s*)?\s*([\x21-\x3c\x3e-\x7e]+)=.*$/ && print "$1\n"' < "$1" -} - -mode::get_aliases() { - perl -ne '/^(?:noglob\s+)?alias ([\x21-\x3c\x3e-\x7e]+)=/ && print "$1\n"' < "$1" -} - -mode::disable() { - export PS1="${MODE__OLD_PS1}" - local mode_path="${HOME}/.config/zsh/modes/$MODE__ACTIVE_MODE.sh" - - unset -v "MODE__OLD_PS1" - unset -v "MODE__ACTIVE_MODE" - - for mode_variable in $(mode::get_variables "$mode_path"); do - unset "$mode_variable" - done - - for mode_function in $(mode::get_functions "$mode_path"); do - unset -f "$mode_function" - done - - for mode_alias in $(mode::get_aliases "$mode_path"); do - unalias "$mode_alias" - done -} - - -mode::help() { - echo "Usage:" - echo " mode " - echo - echo "Available modes:" - for mode in ~/.config/zsh/modes/*; do - printf " %s\n" "$(basename "${mode%.sh}")" - done -} - - -m() { - [ -n "$MODE__ACTIVE_MODE" ] && { - mode::disable - [ -z "$1" ] && return - } - - [ -z "$1" ] && { - echo 'Error: Missing mode name!' - mode::help - return 1 - } >&2 - - case "$1" in - "-h"|"--help") - mode::help - ;; - *) - mode::enable "$1" || mode::help >&2 - ;; - esac -} - -mm() { - [ -z "$MODE__ACTIVE_MODE" ] && return 1 - - local mode_path="${HOME}/.config/zsh/modes/$MODE__ACTIVE_MODE.sh" - - echo "Active mode: $MODE__ACTIVE_MODE" - - echo - echo 'Aliases: ' - for mode_alias in $(mode::get_aliases "$mode_path"); do - printf ' ' - alias "$mode_alias" - done - - echo - echo 'Functions:' - for mode_function in $(mode::get_functions "$mode_path"); do - echo " $mode_function" - done - - echo - echo 'Variables:' - for mode_variable in $(mode::get_variables "$mode_path"); do - echo " $mode_variable" - done -} - -alias 'm?'=mm diff --git a/.config/zsh/modes/cpp.sh b/.config/zsh/modes/cpp.sh deleted file mode 100644 index d15b843..0000000 --- a/.config/zsh/modes/cpp.sh +++ /dev/null @@ -1,18 +0,0 @@ -# shellcheck disable=SC2139 - -CPP_MODE__BUILD_DIR="./cmake-build" - -alias cb="cmake --build ${CPP_MODE__BUILD_DIR}" -alias cg="cmake -B ${CPP_MODE__BUILD_DIR} -DCMAKE_EXPORT_COMPILE_COMMANDS=1 && ln -sf ${CPP_MODE__BUILD_DIR}/compile_commands.json ." - -cpp_mode::find_exec() { - find "${CPP_MODE__BUILD_DIR}/$1" -maxdepth 1 -type f -executable -} - -ct() { - "$(cpp_mode::find_exec "tests")" -} - -cr() { - "$(cpp_mode::find_exec)" -} diff --git a/.config/zsh/modes/dt.sh b/.config/zsh/modes/dt.sh deleted file mode 100644 index dcd8b1f..0000000 --- a/.config/zsh/modes/dt.sh +++ /dev/null @@ -1,7 +0,0 @@ -alias db='dotnet build' -alias df='dotnet format' -alias dt='dotnet test' -alias dr='dotnet restore' -noglob alias df?='dotnet format --verify-no-changes' -alias dff='df; df; df?' -alias da='dff && db && dt' diff --git a/.fonts/Evolventa.ttf b/.fonts/Evolventa.ttf new file mode 100644 index 0000000..751382a Binary files /dev/null and b/.fonts/Evolventa.ttf differ diff --git a/.fonts/Farabee.ttf b/.fonts/Farabee.ttf new file mode 100644 index 0000000..392fb8d Binary files /dev/null and b/.fonts/Farabee.ttf differ diff --git a/.gitconfig b/.gitconfig index 48892c7..61fc6e2 100644 --- a/.gitconfig +++ b/.gitconfig @@ -26,3 +26,5 @@ smudge = git-lfs smudge -- %f process = git-lfs filter-process required = true +[advice] + detachedHead = false diff --git a/.local/bin/scripts/aw b/.local/bin/scripts/aw new file mode 100755 index 0000000..75ac5ea --- /dev/null +++ b/.local/bin/scripts/aw @@ -0,0 +1,126 @@ +#!/bin/bash +# shellcheck disable=SC2016,SC2329 + +COMMAND=' + [ "$(su -c settings get global adb_wifi_enabled)" != 1 ] && su -c settings put --user current global adb_wifi_enabled 1 + su -c getprop service.adb.tls.port +' +PHONE_SERIAL=4B141JEBF23561 +WIFI_NAME='🙂' +PHONE_DNS_PREFIX=phone +declare -a PHONE_VPN_HOSTS=( + '10.160.1.3' + '10.160.3.3' + 'phone.spb.wzray.com' + 'phone.msk.wzray.com' +) + +find_host_wifi() { + local default_link domain + + default_link="$( + resolvectl status | + grep 'Default Route: yes' -B10 | + grep 'Link' | + tail -1 | + grep -Eo '\(.*\)' | + tr -d '()' + )" + + domain="$(resolvectl domain "$default_link" | cut -d: -f2 | awk '{ print $1 }')" + grep -q 'wzray.com' <<<"$domain" && printf "%s.%s" "$PHONE_DNS_PREFIX" "$domain" +} + +find_hosts_vpn() { + [ "$( ip link | grep -o -e 'tun[[:digit:]]' -e 'awg_[a-z]\+' | wc -l)" != 0 ] && + echo "${PHONE_VPN_HOSTS[@]}" +} + +find_host_tethering() { + ! find_host_wifi >/dev/null 2>&1 && + [ "$(iwctl station wlan0 show | grep 'Connected network' | awk '{ print $3 }')" = "$WIFI_NAME" ] && + ip route show dev wlan0 | grep default | grep -Eo 'via [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | cut -d ' ' -f2 +} + +can_use_adb() { + adb devices | grep -q "$PHONE_SERIAL\s\+device" +} + +host_port_adb() { + can_use_adb && adb -d shell ' + host="$(for ifname in tun0 wlan1 wlan0 lo; do + ip a show dev $ifname 2>&1 | grep "inet " | awk '\''{ print $2 }'\'' | cut -d/ -f1 + done | head -1)" + port="$('"$COMMAND"')" + printf "%s:%s" "$host" "$port" + ' +} + +can_use_ssh() { + nmap --system-dns -sT -p8022 "$1" | grep -q '8022/tcp\s\+open' +} + +port_ssh() { + ssh -o HostName="$1" \ + -o UserKnownHostsFile=/dev/null \ + -o IdentityFile=/dev/null \ + -o StrictHostKeyChecking=no \ + -o ConnectTimeout=1 \ + -o LogLevel=ERROR \ + phone "$COMMAND" 2>/dev/null +} + +host_port_ssh() { + for host in $1; do + can_use_ssh "$host" && + port="$(port_ssh "$host")" && + printf "%s:%s" "$host" "$port" && + return + done +} + +host_port_nmap() { + for host in $1; do + ping -c1 -W 0.35 "$host" >/dev/null 2>&1 && + port="$( + nmap -Pn -n -oG - --system-dns -p10000-65535 -sT "$host" | + grep -o 'Ports: .*/' | + sed 's,^Ports: ,,' | + sed -s 's/, /\n/g' | + grep -o '[0-9]\+/open/tcp' | + cut -d/ -f1 | + head -1 + )" && + printf "%s:%s" "$host" "$port" + done +} + +adb devices | grep -q ':' && { + adb shell settings put --user current global adb_wifi_enabled 0 >/dev/null 2>&1 & + disown %1 + sleep 0.1 + adb disconnect >/dev/null 2>&1 + echo 'disconnected' + exit +} + +if can_use_adb; then + host_port="$(host_port_adb)" +else + if [ -n "$1" ]; then + hosts="$1" + else + hosts="$(find_host_wifi) $(find_host_tethering) $(find_hosts_vpn)" + fi + host_port="$(host_port_ssh "$hosts" || host_port_nmap "$hosts")" +fi + +if [ -n "$host_port" ]; then + if [ -z "$(cut -d: -f2 <<<"$host_port")" ]; then + echo "Unable to start adb server! Start it manually or start sshd!" + else + adb connect "$host_port" + fi +else + echo "Unable to find phone address. You need to specify it manually." +fi diff --git a/.local/bin/scripts/caf b/.local/bin/scripts/caf new file mode 100755 index 0000000..efdafa8 --- /dev/null +++ b/.local/bin/scripts/caf @@ -0,0 +1,10 @@ +#!/bin/bash + +while [ "$#" -gt 0 ]; do + echo "### $1:" + echo '```' + cat "$1" + echo '```' + [ "$#" -gt 1 ] && printf "\n\n" + shift +done diff --git a/.local/bin/scripts/cat-files b/.local/bin/scripts/cat-files deleted file mode 100755 index b73723d..0000000 --- a/.local/bin/scripts/cat-files +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -while IFS=$'\n' read -r file; do - echo "$file:" - cat "$file" - printf "\n\n" -done < <(find "${1?}" -type f) diff --git a/.local/bin/scripts/ft b/.local/bin/scripts/ft new file mode 100755 index 0000000..9cf5d6d --- /dev/null +++ b/.local/bin/scripts/ft @@ -0,0 +1,15 @@ +#!/bin/sh + +process_id="$$" +( + if [ "$(inxi -aG | grep -c 'Monitor')" = "1" ]; then + setfont ter-v32n + stty -F /proc/$process_id/fd/0 rows 65 cols 195 + else + setfont ter-v16n + stty -F /proc/$process_id/fd/0 rows 90 cols 320 + fi >/dev/null 2>&1 & +) +unset process_id + +# vim: ft=sh diff --git a/.local/bin/scripts/git b/.local/bin/scripts/git new file mode 100755 index 0000000..1c7f0c5 --- /dev/null +++ b/.local/bin/scripts/git @@ -0,0 +1,13 @@ +#!/bin/bash + +declare -a args + +while [ "$#" -gt 0 ]; do + case "$1" in + '^'*) args+=("HEAD$1") ;; + *) args+=("$1") ;; + esac + shift +done + +exec "$(command -vp git)" "${args[@]}" diff --git a/.local/bin/scripts/gls b/.local/bin/scripts/gls new file mode 100755 index 0000000..30488cf --- /dev/null +++ b/.local/bin/scripts/gls @@ -0,0 +1,5 @@ +#!/bin/bash + +filter=(sed '/^\./d') +[ "$1" = '-a' ] && filter=('cat') && shift +git ls-files "$@" | "${filter[@]}" diff --git a/.local/bin/scripts/gor b/.local/bin/scripts/gor index be0eddd..144a469 100755 --- a/.local/bin/scripts/gor +++ b/.local/bin/scripts/gor @@ -4,10 +4,6 @@ url="$(git remote get-url "${1:-origin}")" if [[ "$url" =~ ^https?:\/\/ ]]; then xdg-open "${url%.git}" -# elif [[ "$url" =~ ([a-zA-Z0-9_.-]+):(.*) ]]; then -# url="https://${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" -# url="${url%.git}" -# xdg-open "$url" elif [[ "$url" =~ ^[a-zA-Z0-9_-]+@([a-zA-Z0-9_.-]+):(.*) ]]; then url="https://${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" url="${url%.git}" @@ -16,6 +12,10 @@ elif [[ "$url" =~ ^ssh://[a-zA-Z0-9_-]+@([a-zA-Z0-9_.-]+)/(.*) ]]; then url="https://${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" url="${url%.git}" xdg-open "$url" +elif [[ "$url" =~ ([a-zA-Z0-9_.-]+):(.*) ]]; then + url="https://${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" + url="${url%.git}" + xdg-open "$url" else echo "TODO: $url" fi diff --git a/.local/bin/scripts/grt b/.local/bin/scripts/grt new file mode 100755 index 0000000..874cfbf --- /dev/null +++ b/.local/bin/scripts/grt @@ -0,0 +1,13 @@ +#!/bin/bash + +args=() +shopt -s extglob +while [ "$#" -gt 0 ]; do + case "$1" in + +(^)) args+=("HEAD$1");; + *) args+=("$1"); + esac + shift +done + +git reset "${args[@]}" diff --git a/.local/bin/scripts/ie b/.local/bin/scripts/ie index 0589f88..90fde46 100755 --- a/.local/bin/scripts/ie +++ b/.local/bin/scripts/ie @@ -1,6 +1,4 @@ -#!/bin/bash -e - -set -o pipefail +#!/bin/bash API_ENDPOINT="http://ip-api.com/json/$1"'?fields=' FIELDS_FULL='7876383' @@ -24,7 +22,7 @@ elif [ -t 1 ]; then notify-send -i /dev/null "IP Info" "$(get_stats)" else if [ -n "$1" ]; then - resp="$(dig +short "$1" | tr -d $'\n')" + resp="$(dig +short "$1" | tail -1 | tr -d $'\n')" [ -n "$resp" ] && printf "%s" "$resp" || { echo 'Not found!' >&2; exit 1; } else curl "${API_ENDPOINT}${FIELDS_SHORT}" 2>/dev/null | jq -r .query | tr -d $'\n' diff --git a/.local/bin/scripts/l2p b/.local/bin/scripts/l2p new file mode 100755 index 0000000..dcbbe61 --- /dev/null +++ b/.local/bin/scripts/l2p @@ -0,0 +1,48 @@ +#!/usr/bin/python3 + +from io import BytesIO +import os +import subprocess +import random +from string import ascii_letters +from subprocess import PIPE +import sys + +from PIL import Image + +LATEX_TEMPLATE = r''' +\documentclass{{minimal}} +\begin{{document}} +$$ +{} +$$ +\end{{document}} +''' + +dpi = 1024 +padding = 72 + +run = lambda args: subprocess.run(args, stdout=PIPE, stderr=PIPE) +filename = "".join(random.choices(ascii_letters, k=8)) +tex_fn = filename + '.tex' +try: + with open(tex_fn, 'w') as f: + f.write(LATEX_TEMPLATE.format(' '.join(sys.argv[2:]))) + + ps = run(['latex', '-interaction=nonstopmode', tex_fn]) + print(ps.stdout.decode(), ps.stderr.decode()) + ps.check_returncode() + + ps = run(['dvipng', '-q', '-T', 'tight', '-D', str(dpi), filename + '.dvi', '-o', filename + '.png']) + print(ps.stdout.decode(), ps.stderr.decode()) + ps.check_returncode() + + img = Image.open(filename + '.png') + new_img = Image.new('RGB', (img.width + padding * 2, img.height + padding * 2), (255, 255, 255)) + new_img.paste(img, (padding, padding)) + new_img.save(sys.argv[1] + ".png", 'png') + +finally: + for fn in [f'{filename}.{ext}' for ext in ('aux', 'dvi', 'log', 'tex', 'png')] + ['texput.log']: + if os.path.isfile(fn): + os.remove(fn) diff --git a/.local/bin/scripts/lock b/.local/bin/scripts/lock index 70eebd1..1ccdb64 100755 --- a/.local/bin/scripts/lock +++ b/.local/bin/scripts/lock @@ -3,17 +3,21 @@ pkill -0 picom || { picom --config "$HOME/.config/picom.conf" & disown -h %% - export START_PICOM=1 + START_PICOM=1 } +img="$HOME/.local/share/wallpaper/wallpaper_blur_desktop.png" +[ "$(xrandr | grep primary | cut -d ' ' -f1)" = 'eDP-1' ] && + img="$HOME/.local/share/wallpaper/wallpaper_blur_laptop.png" + blank='00000000' -hl='23232340' +hl='23232350' hl_red='5c222240' fg='#a0a0a0' +pkill i3lock i3lock \ - -F \ - -i "$HOME/.local/share/wallpaper/wallpaper_blur.png" \ + -i "$img" \ -c '00000000' \ --clock \ --date-color=$fg \ @@ -21,15 +25,10 @@ i3lock \ --verif-color=$fg \ --wrong-color=$fg \ --bshl-color=$hl \ - --inside-color=$blank \ - --insidever-color=$blank \ - --insidewrong-color=$blank \ --keyhl-color=$hl \ --line-uses-ring \ - --ring-color=$blank \ --ringver-color=$blank \ --ringwrong-color=$hl_red \ - --separator-color=$blank \ --date-str='%A %m/%d' \ --time-str='%H:%M' \ --time-size=82 \ @@ -38,7 +37,7 @@ i3lock \ --date-pos 'tx:ty+36' \ --verif-text='' \ --noinput-text='' \ - --wrong-text='' \ + --wrong-text='x' \ --time-font="Mononoki Nerd Font Propo" \ --date-font="Mononoki Nerd Font Propo" \ --layout-font="Mononoki Nerd Font Propo" \ @@ -47,9 +46,10 @@ i3lock \ --bar-color $blank \ --bar-base-width 2080 \ --bar-max-height 2080 \ - --bar-step 0 \ + --bar-step 2080 \ --bar-count 1 \ --bar-periodic-step 2080 \ + --redraw-thread \ --bar-indicator \ [ -n "$START_PICOM" ] && { diff --git a/.local/bin/scripts/lock-suspend b/.local/bin/scripts/lock-suspend index 51a0b37..d239bb0 100755 --- a/.local/bin/scripts/lock-suspend +++ b/.local/bin/scripts/lock-suspend @@ -1,6 +1,8 @@ #!/bin/sh -pkill -0 i3lock || \ - DISPLAY=:0 lock +export DISPLAY=:0 + +pkill i3lock +lock xkb-switch -s us systemctl suspend diff --git a/.local/bin/scripts/nike b/.local/bin/scripts/nike new file mode 100755 index 0000000..5b871ff --- /dev/null +++ b/.local/bin/scripts/nike @@ -0,0 +1,3 @@ +#!/bin/sh + +notify-send 'НИКИТА' "У тебя объективно НЕПРАВИЛЬНОЕ мнение насчет шорткатов, используй Win + Q " diff --git a/.local/bin/scripts/oop b/.local/bin/scripts/oop new file mode 100755 index 0000000..2b2d21e --- /dev/null +++ b/.local/bin/scripts/oop @@ -0,0 +1,3 @@ +#!/bin/sh + +xdg-open https://github.com/is-oop-y28/.github/blob/master/profile/labs/"$(git rev-parse --abbrev-ref HEAD)".md diff --git a/.local/bin/scripts/printcolors b/.local/bin/scripts/printcolors index 1c08b19..f74cd54 100755 --- a/.local/bin/scripts/printcolors +++ b/.local/bin/scripts/printcolors @@ -13,23 +13,25 @@ for i in {0..1}; do done done -echo +[ -z "$1" ] && { + echo + + for i in {0..5}; do + for _ in {0..1}; do + for ((j=36*i+16;j<36*(i+1)+16;++j)); do + printc "$j" + [ $(((j + -15) % 6)) -eq 0 ] && printf " " || printf "" + done + echo + done + done + + echo -for i in {0..5}; do for _ in {0..1}; do - for ((j=36*i+16;j<36*(i+1)+16;++j)); do - printc "$j" - [ $(((j + -15) % 6)) -eq 0 ] && printf " " || printf "" + for i in {232..255}; do + printc "$i" " " done echo done -done - -echo - -for _ in {0..1}; do - for i in {232..255}; do - printc "$i" " " - done - echo -done +} diff --git a/.local/bin/scripts/promt b/.local/bin/scripts/promt new file mode 100755 index 0000000..c527514 --- /dev/null +++ b/.local/bin/scripts/promt @@ -0,0 +1,30 @@ +#!/bin/bash + +tmpfile="$(mktemp)" +if [ -t 0 ]; then + [ "$#" = 0 ] && exit 1 + echo "$@" > "$tmpfile" +else + cat > "$tmpfile" + case "$1" in + r*) dir=en-ru;; + e*) dir=ru-en;; + esac +fi + +[ -z "$dir" ] && +if (( $(grep -oP '\p{Latin}' < "$tmpfile" | wc -l) > $(grep -oP '\p{Cyrillic}' < "$tmpfile" | wc -l) )); then + dir='en-ru' +else + dir='ru-en' +fi + +curl -s \ + http://ядро.орг:9000/translate \ + -H 'Content-Type: text/html' \ + -H "X-Translation-Direction: $dir" \ + --data-binary @- -o- < "$tmpfile" | \ + tail -n +2 | \ + perl -pe 's,(.*?),\1,g' | + sed -e 's/>/>/g' -e 's/</&2 && exit 1 + +script -O /dev/null -E never -qfc "$*" diff --git a/.local/bin/scripts/tg b/.local/bin/scripts/tg index bba8021..0bc84df 100755 --- a/.local/bin/scripts/tg +++ b/.local/bin/scripts/tg @@ -70,7 +70,7 @@ main() { msg="" while [ $# -gt 0 ]; do case "$1" in - '-h'|'--help') help; exit 0 ;; + '-h'|'--help') help; exit 0;; '-p'|'--parse-mode') shift; tg__params[parse_mode]="${_TELEGRAM__PARSE_MODES[$1]}" ;; '-c'|'--code') tg__code=1; tg__params[parse_mode]='HTML' ;; '-r'|'--print-response') print_response=1 ;; diff --git a/.local/bin/scripts/unplug b/.local/bin/scripts/unplug index b4dea79..2e0d5ec 100755 --- a/.local/bin/scripts/unplug +++ b/.local/bin/scripts/unplug @@ -1,4 +1,3 @@ #!/bin/sh xr internal -lock-suspend diff --git a/.local/bin/scripts/vimdiff b/.local/bin/scripts/vimdiff new file mode 100755 index 0000000..f9ce79c --- /dev/null +++ b/.local/bin/scripts/vimdiff @@ -0,0 +1,3 @@ +#!/bin/sh + +nvim -d "$@" diff --git a/.local/bin/scripts/vix b/.local/bin/scripts/vix new file mode 100755 index 0000000..0246b87 --- /dev/null +++ b/.local/bin/scripts/vix @@ -0,0 +1,7 @@ +#!/bin/sh + +[ -z "$1" ] && echo 'Missing filename!' >&2 && exit 1 + +touch "$1" +chmod +x "$1" +vi "$1" diff --git a/.local/bin/scripts/vpn b/.local/bin/scripts/vpn index 9de23f1..08813ec 100755 --- a/.local/bin/scripts/vpn +++ b/.local/bin/scripts/vpn @@ -17,6 +17,7 @@ awg-quick() { DEFAULT_LINK="$(resolvectl status | grep 'Default Route: yes' -B10 | grep 'Link' | tail -1 | grep -Eo '\(.*\)' | tr -d '()')" +IS_LOCAL=0 if resolvectl domain "$DEFAULT_LINK" | grep -q 'wzray.com'; then IS_LOCAL=1 fi @@ -26,6 +27,7 @@ IFNAME="awg_ext" while [ "$#" -gt 0 ]; do case "$1" in i|int|internal) IFNAME='awg_int';; + -f) IS_LOCAL=0;; *) echo "Wrong argument!" >&2; exit 1;; esac shift @@ -35,7 +37,7 @@ UP_NAME="$(ip link | grep 'awg_' | cut -d ' ' -f 2 | sed 's,:,,')" if [ -n "$UP_NAME" ]; then awg-quick down "$UP_NAME" -elif [ -n "$IS_LOCAL" ]; then +elif [ "$IS_LOCAL" = 1 ]; then send_router_cmd toggle else awg-quick up "${IFNAME}" diff --git a/.local/bin/scripts/xr b/.local/bin/scripts/xr index e632aa8..2f9398a 100755 --- a/.local/bin/scripts/xr +++ b/.local/bin/scripts/xr @@ -20,8 +20,8 @@ INT_RES="$(echo $INT_MODELINE | cut -d ' ' -f 1 | tr -d '\"')" if [[ -z "${EXT_MON}" ]] || [ "$1" = "internal" ]; then xrandr --output eDP-1 --pos 0x0 --mode "3120x2080" --rate 90 --primary --output DP-1 --off --output DP-2 --off --output DP-3 --off --output DP-4 --off - xrandr --delmode eDP-1 "${INT_RES}" - xrandr --rmmode "${INT_RES}" + # xrandr --delmode eDP-1 "${INT_RES}" + # xrandr --rmmode "${INT_RES}" change_dpi 192 48 else : diff --git a/.local/bin/source/src_clone_cd b/.local/bin/source/src_clone_cd new file mode 100644 index 0000000..a1f9dbc --- /dev/null +++ b/.local/bin/source/src_clone_cd @@ -0,0 +1,3 @@ +git clone "$1" && cd "$(basename "$1")" || exit 1 + +# vim: ft=sh diff --git a/.local/share/completions/_gor b/.local/share/completions/_gor new file mode 100644 index 0000000..88495dd --- /dev/null +++ b/.local/share/completions/_gor @@ -0,0 +1,18 @@ +#compdef gor + +__git_command_successful () { + if (( ${#*:#0} > 0 )); then + _message 'not a git repository' + return 1 + fi + return 0 +} + +__git_remotes() { + local remotes expl + remotes=(${(f)"$(_call_program remotes git remote 2>/dev/null)"}) + __git_command_successful $pipestatus || return 1 + _wanted remotes expl remote compadd "$@" -a - remotes +} + +_arguments -S $endopt ': :__git_remotes' diff --git a/.local/share/completions/_ollama b/.local/share/completions/_ollama new file mode 100644 index 0000000..1bbf90e --- /dev/null +++ b/.local/share/completions/_ollama @@ -0,0 +1,136 @@ +#compdef ollama + +# Purpose: +# This script file `_ollama` should be placed in your fpath to provide zsh completions functionality for ollama commands. +# It utilizes zsh's native completion system by defining specific completion behaviors tailored to ollama commands. + +# Installation: +# 1. Check your current fpath by executing: `echo $fpath` in your zsh shell. +# 2. To introduce a new directory to fpath, edit your .zshrc file: +# Example: `fpath=($HOME/.zsh-completions $fpath)` +# 3. Store this script file in the directory you have added to your fpath. +# 4. For a system-wide installation on Linux: +# Download and deploy this script with the following command: +# sudo wget -O /usr/share/zsh/site-functions/_ollama https://gist.githubusercontent.com/obeone/9313811fd61a7cbb843e0001a4434c58/raw/_ollama.zsh + +# Contributions: +# Principal contributions by: +# - ChatGPT [ZSH Expert](https://chatgpt.com/g/g-XczdbjXSW-zsh-expert) as the primary creator. +# - Guidance and revisions by [obeone](https://github.com/obeone). + +# Note: +# - This configuration file presupposes the utilization of Zsh as your primary shell environment. +# - It is crucial to restart your zsh session subsequent to alterations made to your fpath to ensure the updates are effectively recognized. + + +_fetch_ollama_models() { + if [[ ${#models} -ne 0 ]]; then + printf "here\n\n" + _describe 'model names' models + return 0 + fi + + local output="$(ollama list 2>/dev/null | sed 's/:/\\:/g')" + + if [[ -z "$output" ]]; then + _message "no models available or 'ollama list' failed" + return 1 + fi + export models=("${(@f)$(echo "$output" | awk 'NR>1 {print $1}')}") + if [[ ${#models} -eq 0 ]]; then + _message "no models found" + return 1 + fi + _describe 'model names' models +} + +# Main completion function +_ollama() { + local -a commands + declare -a models + + _arguments -C \ + '1: :->command' \ + '*:: :->args' + + case $state in + command) + commands=( + 'serve:Start ollama' + 'create:Create a model from a Modelfile' + 'show:Show information for a model' + 'run:Run a model' + 'stop:Stop a running model' + 'pull:Pull a model from a registry' + 'push:Push a model to a registry' + 'list:List models' + 'ps:List running models' + 'cp:Copy a model' + 'rm:Remove a model' + 'help:Help about any command' + ) + _describe -t commands 'ollama command' commands + ;; + args) + case $words[1] in + create) + _arguments \ + '-f+[Specify the file name]:file:_files' \ + '-q+[Quantize model to this level (e.g. q4_0)]' \ + ;; + show) + _arguments \ + '--license[Show license of a model]' \ + '--modelfile[Show Modelfile of a model]' \ + '--parameters[Show parameters of a model]' \ + '--system[Show system message of a model]' \ + '--template[Show template of a model]' \ + '*::model:->model' + if [[ $state == model ]]; then + _fetch_ollama_models + fi + ;; + run) + _arguments \ + '--format[Specify the response format]:format:' \ + '--insecure[Use an insecure registry]' \ + '--nowordwrap[Disable word wrap]' \ + '--verbose[Show verbose output]' \ + '*::model and prompt:->model_and_prompt' + if [[ $state == model_and_prompt ]]; then + _fetch_ollama_models + _message "enter prompt" + fi + ;; + pull|push) + _arguments \ + '--insecure[Use an insecure registry]' \ + '*::model:->model' + if [[ $state == model ]]; then + _fetch_ollama_models + fi + ;; + list|ls) + _message "no additional arguments for list" + ;; + cp) + _arguments \ + '1:source model:_fetch_ollama_models' \ + '2:target model:_fetch_ollama_models' + ;; + rm) + _arguments \ + '*::models:->model' + if [[ $state == model ]]; then + _fetch_ollama_models + fi + ;; + help) + _message "no additional arguments for help" + ;; + esac + ;; + esac +} + +_ollama diff --git a/.local/share/completions/_ta b/.local/share/completions/_ta new file mode 100644 index 0000000..cbdad08 --- /dev/null +++ b/.local/share/completions/_ta @@ -0,0 +1,26 @@ +#compdef ta + +# from builtin _tmux +function __tmux-sessions-separately() { + local ret=1 + local -a sessions detached_sessions attached_sessions + sessions=( ${${(f)"$(command tmux 2> /dev/null list-sessions)"}/:[ $'\t']##/:} ) + detached_sessions=( ${sessions:#*"(attached)"} ) + attached_sessions=( ${(M)sessions:#*"(attached)"} ) + + # ### This seems to work without a _tags loop but not with it. I suspect + # ### that has something to do with _describe doing its own _tags loop. + _tags detached-sessions attached-sessions + # Placing detached before attached means the default behaviour of this + # function better suits its only current caller, _tmux-attach-session(). + _requested detached-sessions && _describe -t detached-sessions 'detached session' detached_sessions "$@" && ret=0 + _requested attached-sessions && _describe -t attached-sessions 'attached session' attached_sessions "$@" && ret=0 + + return ret +} + +_ta() { + _arguments '*:: : __tmux-sessions-separately' +} + +_ta "$@" diff --git a/.local/share/wallpaper/wallpaper_blur_desktop.png b/.local/share/wallpaper/wallpaper_blur_desktop.png new file mode 100644 index 0000000..fae6ba0 Binary files /dev/null and b/.local/share/wallpaper/wallpaper_blur_desktop.png differ diff --git a/.local/share/wallpaper/wallpaper_blur_laptop.png b/.local/share/wallpaper/wallpaper_blur_laptop.png new file mode 100644 index 0000000..6eec249 Binary files /dev/null and b/.local/share/wallpaper/wallpaper_blur_laptop.png differ diff --git a/.ssh/config b/.ssh/config index 2b2cf5b..70a96bd 100644 --- a/.ssh/config +++ b/.ssh/config @@ -8,6 +8,7 @@ Host vm.zvray.ru StrictHostKeyChecking no UpdateHostkeys no UserKnownHostsFile /dev/null + LogLevel ERROR Host *.zvray.ru mx*.wzray.com User root @@ -18,6 +19,7 @@ Host phone Port 8022 Host laptop laptop.*.wzray.com + Port 8022 Host hicpu hicpu.spb.wzray.com User root diff --git a/.xinitrc b/.xinitrc index 65a03bc..cc131cc 100644 --- a/.xinitrc +++ b/.xinitrc @@ -8,10 +8,6 @@ dbus-update-activation-environment --verbose --all systemctl --user import-environment XDG_CURRENT_DESKTOP systemctl --user import-environment DISPLAY -# agents -gpg-agent -d -eval "$(ssh-agent)" - # resolution and autostart "${HOME}"/.config/X11/runonce xr