Compare commits

..

1 Commits

Author SHA1 Message Date
100334a287 nvim(lsp): migrate to coq_nvim 2024-06-26 14:51:47 +03:00
217 changed files with 2603 additions and 6215 deletions

2
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,2 @@
custom: ['https://www.blockchain.com/btc/address/bc1qgh2fyzqgyxgpstsmqwxyev2luzx7hwc4ezq03u', 'https://www.blockchain.com/eth/address/0x01931cf08BbbA74629c232DbEDB390798cDD121f']

27
.gitignore vendored
View File

@ -3,15 +3,12 @@ home/user/.config/zsh/plugins/*
home/user/.config/nvim/plugin
home/user/.config/nvim/spell
home/user/.config/bash/bashrc.d/*
!home/user/.config/bash/bashrc.d/.gitkeep
home/user/.config/zsh/zshrc.d/*
!home/user/.config/zsh/zshrc.d/00_zhashd.sh
home/user/.zshenv.d/*
!home/user/.zshenv.d/.gitkeep
!home/user/.config/zsh/zshrc.d/.gitkeep
home/user/.config/zsh/.zcalc_history
.zcompdump
*.zwc
home/user/.ssh/*
@ -30,20 +27,6 @@ home/user/.termux/shell
home/user/.config/tmux/plugins
home/user/.config/tmux/local.conf
home/user/.tmux/*
!home/user/.tmux/dotfiles
!home/user/.tmux/sandbox
!home/user/.tmux/ssh
!home/user/.tmux/example-background-job
!home/user/.tmux/system-update
!home/user/.tmux/music
!home/user/.tmux/landing
home/user/.config/git/local
home/user/.config/sway/config.d/*
!home/user/.config/sway/config.d/.gitkeep
home/user/.config/sway/variables.d/*
!home/user/.config/sway/variables.d/.gitkeep
!home/user/.tmux/01.sh
!home/user/.tmux/10.sh

View File

@ -20,13 +20,14 @@
## Project description
Config files for:
* bash
* zsh
* alacritty
* tmux
* ssh
* git
* ranger
* sway
* i3
* vim
* nvim
@ -36,18 +37,17 @@ Config files for:
<img src=".assets/prompt.png" alt="Prompt">
</p>
You can add your files to the `~/.config/zsh/zshrc.d` directory for zsh so
that they automatically run in ascending order when you open a terminal.\
You can add your files to the `~/.config/bash/bashrc.d` directory for bash or `~/.config/zsh/zshrc.d` directory for zsh so that they automatically run in ascending order when you open a terminal.\
Example:\
`~/.config/zsh/zshrc.d/01_hello.sh`
```sh
`~/.config/bash/bashrc.d/01_hello.sh`
```bash
echo "Hello $USER!"
```
<a id="chapter-1"></a>
## Installation
```sh
```bash
git clone https://github.com/TheK4n/dotfiles
cd dotfiles
./install zsh nvim ...
@ -64,5 +64,17 @@ Per-user dotfiles "package" manager
4. Transaction based installation
5. Does not overwrite your configs
### Dependencies
* bash
* coreutils
* diffutils
* grep
### Optional dependencies
* git
* wget
* unzip
<h1 align="center"><a href="#top"></a></h1>

View File

@ -1,30 +1,22 @@
readonly TARGETS="\
colors:.config/terminal-colors.d
less:.lesskey .infokey
tmux:.config/tmux .tmux .config/systemd/user/tmux.service %copypasta
t:
note:
psw:
zsh:.config/zsh .zshenv .zshenv.d .inputrc %copypasta %colors
alacritty:.config/alacritty
nvim:.config/nvim .editorconfig .editrc .local/bin/vim_askpass_helper
ssh:
git:.config/git .local/bin/ga
ranger:.config/ranger
gpg:
sway:.config/sway .config/i3blocks .config/mako .config/mimeapps.list .config/rofi .local/bin/screenshot .config/swaylock .Xresources .local/bin/slm .local/bin/slm_rofi .local/bin/firefox_media %copypasta %pomodoro
pomodoro:
bat:.config/bat
font:
termux:.termux
arch:
psql:.psqlrc
docker:.docker/cli-plugins
ipython:.ipython/profile_default/ipython_config.py
gdb:.config/gdb
sandbox:
chromium:.local/bin/pchromium .local/share/applications/pchromium.desktop
scripts:.local/bin/httpstatus .local/bin/apco .local/bin/bb .local/bin/emoji .local/bin/mksh .local/bin/nato .local/bin/pastas .local/bin/timer .local/bin/tryna .local/bin/trynafail .local/bin/bak .local/bin/cleanup-directory .local/bin/cleanup-directory-log .local/bin/cleanup-downloads .local/bin/gobuild .local/bin/json .local/bin/open .local/bin/py .local/bin/sha .local/bin/showtips .local/bin/weather .local/bin/radio .local/bin/rmt .local/bin/scratch .local/bin/wake .local/bin/myip .local/bin/genpass .local/bin/gensalt .local/bin/django-create-project .local/bin/mirror-site .local/bin/split-file .local/bin/extract .local/bin/destroy .local/bin/serveit .local/bin/highlight-logs %copypasta
music:.local/bin/mpv-service.sh .config/systemd/user/mpv.service .local/bin/player
copypasta:.local/bin/copy .local/bin/pasta
all:%less %t %note %tmux %zsh %nvim %git"
declare -r -A TARGETS=(
["colors"]=".config/terminal-colors.d"
["tmux"]=".config/tmux .tmux .config/systemd/user/tmux.service"
["bash"]=".config/bash .bashrc .profile %tmux %colors"
["zsh"]="%bash .config/zsh .zshenv .inputrc"
["alacritty"]=".config/alacritty"
["nvim"]=".config/nvim .editorconfig .local/bin/vim_askpass_helper"
["ssh"]=""
["less"]=".lesskey"
["git"]=".config/git"
["ranger"]=".config/ranger"
["gpg"]=""
["i3"]=".xinitrc .xprofile .Xresources .config/i3 .config/i3status .local/bin/i3status_wrapper .config/rofi .config/picom .local/bin/slm .local/bin/slm_rofi.sh .local/bin/power_rofi.sh .local/bin/wifi .local/bin/bluetooth .local/bin/i3_switch_workspace.sh"
["bat"]=".config/bat"
["font"]=""
["termux"]=".termux"
["arch"]=""
["psql"]=".psqlrc"
["docker"]=".docker/cli-plugins"
["ipython"]=".ipython/profile_default/ipython_config.py"
["gdb"]=".config/gdb"
)

View File

@ -0,0 +1,6 @@
Section "Device"
Identifier "Default nvidia Device"
Driver "nvidia"
Option "ForceFullCompositionPipeline" "true"
EndSection

5
etc/skel/.bash_profile Normal file
View File

@ -0,0 +1,5 @@
#
# ~/.bash_profile
#
[[ -f ~/.bashrc ]] && . ~/.bashrc

26
etc/skel/.bashrc Normal file
View File

@ -0,0 +1,26 @@
alias l.='ls -AF --ignore="*"'
alias ll='ls -lhF'
alias la='ls -AF'
alias lt='du -sh * | sort -h'
alias rm='rm -ir'
alias mkdir='mkdir -pv'
alias cd..='cd ..'
alias ..='cd ..'
alias ...='cd ../..'
alias .3='cd ../../..'
alias path='echo -e ${PATH//:/\\n}'
# shorts
alias c='clear'
alias q='exit'
alias h='history | less'
alias j='jobs -l'
# utils
alias tar-it='tar -czf "../${PWD##*/}.tar.gz" .'
PS1="\n┌──(\u@\H)-[\w]\n└─\$ "

45
etc/skel/.vimrc Normal file
View File

@ -0,0 +1,45 @@
set number "номер строки
set ruler
set laststatus=2
set encoding=utf-8 "Ставит кодировку UTF-8
set nocompatible "Отключает обратную совместимость с Vi
syntax on "Включает подсветку синтаксиса
set expandtab
set smarttab
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set smartindent
set nowrap
set noerrorbells
set novisualbell
set showcmd
set showtabline=2
set ignorecase
set smartcase
set hlsearch
set incsearch
set mousehide
set mouse=a
set colorcolumn=120
set scrolloff=7
set virtualedit=onemore " allow for cursor beyond last character
" f4 toggle hlsearch
nnoremap <F4> :set invhlsearch<CR>
set ffs=unix,dos,mac
set encoding=utf8
" tabs
nnoremap <C-Left> :tabprevious<CR>
nnoremap <C-Right> :tabnext<CR>
nnoremap <C-h> :tabprevious<CR>
nnoremap <C-l> :tabnext<CR>

View File

@ -0,0 +1,2 @@
chmod 751 /home/user
chmod 1777 /home/user/Public

View File

@ -1,3 +0,0 @@
chmod 751 "${HOME}"
mkdir "${HOME}/public"
chmod 1777 "${HOME}/public"

View File

@ -1,4 +0,0 @@
[Service]
Type=simple
ExecStart=
ExecStart=-/sbin/agetty --noreset --noclear --autologin thek4n - ${TERM}

View File

@ -0,0 +1,3 @@
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -- %%USER%%' --noclear --skip-login - $TERM

View File

@ -1,3 +0,0 @@
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -- %%USER%%' --noclear --skip-login - $TERM

View File

@ -0,0 +1 @@
../getty@tty1.service.d/skip-username.conf

View File

@ -1,4 +0,0 @@
#!/bin/sh
echo
figlet -ct -f banner "welcome mr.kan"
echo

View File

@ -1,10 +0,0 @@
#!/bin/sh
echo "wg0 status: $(systemctl is-active wg-quick@wg0.service)"
if ! systemctl is-active wg-quick@wg0.service 1>/dev/null; then
#shellcheck disable=SC2016
echo 'Executing this command may fix wireguard: "sudo apt update && sudo apt install linux-headers-$(uname -r) && sudo reboot"'
fi
echo

23
home/user/.bashrc Normal file
View File

@ -0,0 +1,23 @@
#!/usr/bin/env bash
# https://github.com/TheK4n/dotfiles
if \
[ "$(tty)" != "/dev/tty3" ] && \
command -v tmux &>/dev/null && \
[ -z "$TMUX" ] && \
tmux -N -L "$USER" list-sessions &>/dev/null
then
exec tmux -N -L "$USER" new-session
fi
if [ -f "$HOME/.config/bash/sourcer" ]; then
source "$HOME/.config/bash/sourcer"
fi
if \
command -v tmux &>/dev/null && \
[ -n "$TMUX" ] && \
[ -n "$SSH_CLIENT" ]
then
tmux source-file "$XDG_CONFIG_HOME/tmux/remote.conf"
fi

View File

@ -1,3 +1,4 @@
live_config_reload = true
[env]
TERM = "xterm-256color"
@ -23,16 +24,13 @@ mods = "Control|Shift"
hide_when_typing = true
[scrolling]
history = 3000
history = 10000
multiplier = 3
[window]
dynamic_title = true
opacity = 0.92
opacity = 1
[window.dimensions]
columns = 150
lines = 42
[general]
live_config_reload = true

View File

@ -0,0 +1,140 @@
# vim: ft=bash
_d() { true ; }
_f() { true ; }
# colors
if [ -x "$(command -v dircolors)" ]; then
export LS_OPTIONS="--color=auto"
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias grep='grep $LS_OPTIONS'
alias fgrep='fgrep $LS_OPTIONS'
alias ls='ls -v $LS_OPTIONS'
fi
alias l.='ls -AFv --ignore="*"'
alias ll='ls -lhFv'
alias la='ls -AFv'
alias lla='ls -lhFAv'
alias ll.='ls -lhFAv --ignore="*"'
alias lsl='_d() { ls -lhFA --color=always "${1:-.}" | $PAGER ; }; _d'
alias _='sudo'
alias root='sudo -i TMOUT=450'
alias rm='rm -Ivr --one-file-system'
alias mkdir='mkdir -pv'
alias cd..='cd ..'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .3='cd ../../..'
alias cl='_d() { cd "${1:-$HOME}" && ls; }; _d'
alias q='exit 0'
alias wp='cd $WORKING_PROJECT'
alias path='echo -e ${PATH//:/\\n}'
# shorts
alias c='clear'
alias h='history 0'
alias j='jobs -l'
# utils
alias sha='(shasum -a 256 | head -c 64)'
alias genpass="openssl rand -base64 12"
alias gensalt="dd if=/dev/urandom count=16 2>/dev/null | sha256sum | head -c 64"
alias diff='colordiff'
alias tar-it='tar -czf "../${PWD##*/}.tar.gz" .'
alias man='MANWIDTH=$((COLUMNS > 80 ? 80 : COLUMNS)) man'
# time
alias now='date +"%T"'
alias nowdate='date +"%d-%m-%Y"'
alias cal='cal -m'
alias beeptime='beep -D 400 -l 400 -r "$(date +%I)" -f 440 -n -D 1000 -l 0 -n -D 800 -l 200 -f 880 -r "$(($(date +%M)/15))"'
# vim
alias vi='nvim'
alias svi="sudo -E nvim"
# net
alias ports='ss -tlnp'
alias wget='wget -c'
# alias myip='curl ipinfo.io/ip'
alias myip='dig +short myip.opendns.com @resolver1.opendns.com'
alias sprunge='curl -F "sprunge=<-" http://sprunge.us 2>/dev/null' # CLI pastebin
alias weather='(curl -4 wttr.in/$(cat) 2>/dev/null | head -n -1) <<<'
alias ip='ip -c'
alias fastping='ping -c 100 -i 0.1'
# starts web server
alias www='python3 -m http.server 8080'
# hardware
alias reboot='sudo /sbin/reboot'
alias poweroff='sudo /sbin/poweroff'
alias suspend='sudo systemctl suspend'
alias halt='sudo /sbin/halt'
alias shutdown='sudo /sbin/shutdown now'
alias meminfo='free -mlth'
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
alias wake='((speaker-test -t sine -f 400 &>/dev/null)& local pid=$! ;sleep 0.2s; kill -9 $pid) &>/dev/null'
elif [[ "$OSTYPE" == "linux-android"* ]]; then
alias wake='termux-notification --sound --vibrate 500,1000,200'
fi
# python
alias pipir='python3 -m pip install -r requirements.txt'
alias pipar='python3 -m pip freeze > requirements.txt'
alias vd='deactivate'
# git
alias watch-diff='watch --color "git diff --color=always"'
# docker
alias dcu='docker-compose up -d'
alias dcd='docker-compose down'
alias drmc='docker container prune'
alias drmi='docker image prune'
# tmux
alias dt='tmux detach'
# x11
alias caps='xdotool key Caps_Lock'
alias CAPS='xdotool key Caps_Lock'
alias colors='for i in {0..255}; do printf "\x1b[38;5;${i}mcolor${i} - ██████████\n"; done'
# clipboard
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
if [[ -n "$DISPLAY" ]]; then
alias copy='xclip -selection clipboard -i'
alias paste='xclip -selection clipboard -o'
else
alias copy='read -rd "EOF" TTYCLIPBOARD'
alias paste='echo "$TTYCLIPBOARD"'
fi
elif [[ "$OSTYPE" == "linux-android"* ]]; then
alias copy='termux-clipboard-set'
alias paste='termux-clipboard-get'
elif [[ "$OSTYPE" == "darwin" ]]; then
alias copy='pbcopy'
alias paste='pbpaste'
fi
alias black='convert canvas:none PNG:- | feh -YF -'
# :)
alias PINK='beep -f 233 -l 440 -n -f 349 -l 440 -n -f 196 -l 440 -n -f 330 -l 650'

View File

@ -0,0 +1,12 @@
_workon() {
local cur prev envs
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
envs=$(ls /opt/pythonenv/)
COMPREPLY=( $(compgen -W "${envs}" -- ${cur}) )
}
complete -F _workon workon

View File

@ -0,0 +1,50 @@
# vim: ft=bash
umask 022
export EDITOR="nvim"
export VISUAL="$EDITOR"
export PAGER="less"
export LESS="-nMiSRx4 -# 1 -+X -+F"
if command -v "lesspipe.sh" &>/dev/null; then
export LESSOPEN="| lesspipe.sh %s"
fi
export CDPATH=:~:~/code
export HISTSIZE=100000
export HISTFILESIZE="$HISTSIZE"
export HISTCONTROL=ignoreboth:erasedups
export HISTTIMEFORMAT="%F %T "
export HISTIGNORE="&:l[lsa\.]:[bf]g:exit:q:clear:c:history:h"
export BROWSERCLI=w3m
test -z "$BROWSER" && export BROWSER=firefox
if [ -d "$HOME/.local/bin" ] ; then
export PATH="$HOME/.local/bin:$PATH"
fi
for TMPDIR in "$TMPDIR" "$TMP" /tmp /var/tmp
do
test -d "$TMPDIR" && break
done
export TMPDIR
export FZF_DEFAULT_OPTS="\
--cycle \
--pointer='' \
--marker='+' \
--color='pointer:green' \
--bind \
ctrl-/:toggle-preview,\
ctrl-a:toggle-all,\
ctrl-p:preview-up,\
ctrl-n:preview-down,\
ctrl-u:clear-query,\
tab:toggle+down,\
shift-tab:toggle\
"

View File

@ -0,0 +1,230 @@
# vim: ft=bash
_sod() {
if [ -d "$1" ] && [ -n "$(ls "$1")" ]; then
for FILENAME in $(ls "$1" | sort -n)
do
source "$1/$FILENAME"
done
fi
}
lt() {
du -h "${1:-.}" 2>/dev/null | sort -h | tac
}
destroy() {
test -n "$1" || return 1
test -e "$1" || return 1
echo -n "Sure want to destroy file '$1' with size $(du -hs "$1" | awk '{printf $1}') [y/N] "
read -r response
[[ $response == [yY] ]] && shred -zun 25 "$1"
}
workon() {
source "/opt/pythonenv/${1:-$(basename $PWD)}/bin/activate"
}
py() {
if [[ -z "$@" && -x "$(command -v ipython 2>/dev/null)" ]]; then
ipython -i -c "q = exit"
else
python3 $@
fi
}
ve() {
python3 -m virtualenv "${1:-venv}" && . "${1:-venv}/bin/activate"
}
va() {
local activate_venv
if [ -f "./venv/bin/activate" ]; then
source "./venv/bin/activate"
return 0
fi
activate_venv="$(find -P . -maxdepth 3 -type f -wholename '*/bin/activate' | sort | head -n 1)"
if [ -n "$activate_venv" ]; then
source "$activate_venv"
return 0
else
echo "va: error: virtual environment not found, use python3 -m virtualenv venv" >&2
return 1
fi
}
extract() (
if [ -z "$1" ]; then
echo "extract: error: usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
return 2
fi
if ! [ -f "$1" ]; then
echo "extract: error: '$1' file does not exist" >&2
return 1
fi
local NAME
NAME=${1%%.*} # removes extension from filename
if [ -e "$NAME" ]; then
echo "extract: error: '$NAME' exists" >&2
return 1
fi
mkdir "$NAME" && cd "$NAME" || return 1
case $1 in
*.tar.bz2) tar xjf ../"$1" ;;
*.tar.gz) tar xzf ../"$1" ;;
*.tar.xz) tar xJf ../"$1" ;;
*.lzma) unlzma ../"$1" ;;
*.bz2) bunzip2 ../"$1" ;;
*.rar) unrar x -ad ../"$1" ;;
*.gz) gunzip ../"$1" ;;
*.tar) tar xf ../"$1" ;;
*.tbz2) tar xjf ../"$1" ;;
*.tgz) tar xzf ../"$1" ;;
*.zip) unzip ../"$1" ;;
*.Z) uncompress ../"$1" ;;
*.7z) 7z x ../"$1" ;;
*.xz) unxz ../"$1" ;;
*.exe) cabextract ../"$1" ;;
*) echo "extract: error: '$1' - unknown archive method" >&2 ;;
esac
)
mcd() {
if [ -z "$1" ]; then
cd "$(mktemp -td "${USER:-user}.XXXX")"
else
mkdir -p "$1" && cd "$1"
fi
}
# toggle wireguard vpn with interface /etc/wireguard/wg0.conf
# to allow sudo user toggle vpn without password:
## sudo groupadd wireguard
## sudo usermod -aG wireguard $USER
vpn() {
local STATUS SERVICE CONFIG CONFIGFILE
CONFIG="${1:-wg0}"
CONFIGFILE="/etc/wireguard/$CONFIG.conf"
if [ ! -e "$CONFIGFILE" ]; then
echo "Config '$CONFIGFILE' not exists" >&2
return 1
fi
SERVICE="wg-quick@$CONFIG.service"
if systemctl --quiet is-active "$SERVICE"; then
sudo systemctl stop "$SERVICE"
echo "DOWN"
else
sudo systemctl start "$SERVICE" && ip -br a | grep "$CONFIG" | awk '{print $1":\t"$3}'
fi
}
toggle-ssh-proxy() {
if [ -z "$1" ]; then
echo "Proxy ssh server hostname not specified" 1>&2
return 1
fi
SSH_PROXY_CONTROL_FILE="$XDG_RUNTIME_DIR/ssh_${1}_proxy.control"
if [ -e "$SSH_PROXY_CONTROL_FILE" ]; then
unset {http,https,ftp,rsync,no}_proxy
ssh -S "$SSH_PROXY_CONTROL_FILE" -O exit "$1"
unset SSH_PROXY_PID
echo "Disabled"
else
ssh -nCTN -S "$SSH_PROXY_CONTROL_FILE" -D 1080 "$1"
export {http,https,ftp,rsync}_proxy="socks5://127.0.0.1:1080" && \
export no_proxy="localhost,127.0.0.1/8,localaddress,.localdomain.com,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12"
echo "Enabled"
fi
}
open() {
test -e $1 || return 1
nohup xdg-open $1 1>/dev/null 2>&1 &
}
split-file() {
test -e "$1" || return 1
local _size="${2:-1G}"
if [ -d "$1" ]; then
(mkdir "$1.tar.gz.splitted" && cd "$1.tar.gz.splitted" && tar -cz "../$1" | split -d -b "$_size")
else
(mkdir "$1.splitted" && cd "$1.splitted" && split -d -b "$_size" "../$1")
fi
}
json() {
if [ -t 0 ]; then # argument
python -m json.tool <<< "$*"
else # pipe
python -m json.tool
fi
}
_get_full_file_extension() {
local filename
filename=$(basename "$1")
if [ "${filename:0:1}" = "." ]; then
filename="${filename:1}"
fi
echo ${filename#*.}
}
rmt() {
local TRASH
TRASH=~/.trash
local filename
for filename in $*
do
local filename_out_path="${TRASH}$(realpath "$filename")"
mkdir -p "$(dirname "$filename_out_path")"
mv "$filename" "${filename_out_path}_$(date +%s)"
done
}
showtips() {
TIPS_DIR="$HOME/.tips"
if [ ! -d "$TIPS_DIR" ]; then
mkdir "$TIPS_DIR" 2>/dev/null
git init "$TIPS_DIR"
fi
local content
for filename in "$TIPS_DIR"/*
do
content="$(cat "$filename")"
echo "$content"
done
return 0
}
most-often-commands() {
history 0 | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn
}
# Enable X11Forwarding and disable mux session
sshx() {
ssh -X -o ControlMaster=no -o ControlPath=none $@
}

View File

@ -0,0 +1,96 @@
parse_git_branch() {
if ! [ -x "$(command -v git)" ]; then
return
fi
local branch status
# current branch
branch="$(git branch --show-current 2> /dev/null)"
# current status
# M = modified
# A = added
# D = deleted
# R = renamed
# C = copied
# U = updated but unmerged
status="$(git status -s 2>/dev/null | cut -c 1 | sort -u | tr -d " \n?")"
if [ -n "$status" ]; then
status="-[$status]"
fi
if [[ -n "$branch" ]]; then
echo "($branch)$status"
fi
}
virtualenv_info() {
# Get Virtual Env
if [[ -n "$VIRTUAL_ENV" ]]; then
# Strip out the path and just leave the env name
echo "($(basename "$VIRTUAL_ENV"))"
fi
}
rightprompt()
{
if [[ $1 -ne 0 ]]; then
printf "%*s" $COLUMNS "$1 "
fi
}
export PROMPT_COMMAND=__prompt_command
__prompt_command() {
local EXIT=${PIPESTATUS[-1]}
close_color='\[\e[m\]'
red_color='\[\033[1;31m\]'
prompt_color='\[\033[;32m\]'
info_color='\[\033[1;34m\]'
prompt_symbol='@'
end_symbol='$'
if [ "$EUID" -eq 0 ]; then # Change prompt colors and symbols for root user
prompt_color='\[\033[;94m\]'
info_color='\[\033[1;31m\]'
end_symbol='#'
fi
if [[ -n "$SSH_CLIENT" || -n "$SSH2_CLIENT" ]]; then
prompt_symbol='📡'
fi
export VIRTUAL_ENV_DISABLE_PROMPT=1
local VENV_ BRANCH_ TERMINAL_NAME
VENV_="\$(virtualenv_info)"
BRANCH_="\$(parse_git_branch)"
TERMINAL_NAME=${0%%/*}
TERMINAL_NAME="\[\e]2;${TERMINAL_NAME^^}\a\]"
_bottom_prompt="$(tput cup 999 0)"
if [ "$EXIT" != 0 ]; then
PS1="$TERMINAL_NAME${_bottom_prompt}\n$prompt_color┌─${VENV_}─($close_color$info_color\u$prompt_symbol\H$close_color$prompt_color)-[$close_color\w$prompt_color]$close_color $red_color${BRANCH_}$close_color\n\[$(tput sc; rightprompt $EXIT; tput rc)\]$prompt_color└─$close_color$info_color$end_symbol$close_color "
else
PS1="$TERMINAL_NAME${_bottom_prompt}\n$prompt_color┌─${VENV_}─($close_color$info_color\u$prompt_symbol\H$close_color$prompt_color)-[$close_color\w$prompt_color]$close_color $red_color${BRANCH_}$close_color\n$prompt_color└─$close_color$info_color$end_symbol$close_color "
fi
PS2="> "
}

View File

@ -0,0 +1,12 @@
## Misc
shopt -s histappend ## Appends hist on exit
shopt -s cmdhist ## Save multi-line hist as one line
shopt -s checkwinsize ## Update col/lines after commands
### Completion
shopt -s cdspell ## Fixes minor spelling errors in cd paths
shopt -s no_empty_cmd_completion ## Stops empty line tab comp
shopt -s dirspell 2>/dev/null ## Tab comp can fix dir name typos
bind '"\e."':yank-last-arg

View File

@ -0,0 +1,19 @@
_so() {
[ -r "$1" ] && [ -f "$1" ] && source "$1"
}
if [[ $0 == *bash ]]; then
_so "$HOME/.config/bash/export"
_so "$HOME/.config/bash/shopt"
fi
if [[ $- == *i* ]]; then
_so "$HOME/.config/bash/prompt"
_so "$HOME/.config/bash/aliases"
_so "$HOME/.config/bash/functions"
_so "$HOME/.config/bash/completion"
_so "$HOME/.config/bash/hosts/$HOSTNAME"
fi
_sod "$HOME/.config/bash/bashrc.d"

View File

@ -1,63 +0,0 @@
# vim: ft=gitconfig
[alias]
a = "!ga"
u = "!git diff --name-only --cached | fzf -1 -0 -m --bind load:last --preview 'git diff --staged --color=always {1}' | xargs -r git restore --staged"
msg = log -1 --pretty=%B
d = diff
di = diff
ds = diff --staged
dno = diff --name-only
dw = diff --word-diff=color
dws = diff --word-diff=color --staged
sw = switch
swl = switch -
swb = switch -c
swc = switch -c
co = checkout
col = checkout @{-1}
cob = checkout -b
ci = commit
cia = commit --all
amend = commit --amend --no-edit
amenda = commit --all --amend --no-edit
fuck = commit --amend
uncommit = reset --soft HEAD~1
untrack = rm --cache --
cim = "!_m() { git commit -m \"$*\"; }; _m"
cima = "!_m() { git commit -am \"$*\"; }; _m"
ps = "!git push origin $(git rev-parse --abbrev-ref HEAD)"
pst = "!git push origin --tags"
pl = "!git pull origin $(git rev-parse --abbrev-ref HEAD)"
pr = "pull --rebase"
s = status
st = status
br = branch
bm = branch --merged
bn = branch --no-merged
hist = log --pretty=format:'%Cgreen%h %Creset%cd %Cblue[%cn](%G?) %Creset%s%C(yellow)%d%C(reset)' --graph --date=relative --decorate --color=always
history = hist --all
hs = hist -n 10
hsa = hist -n 10 --all
last = log -1 HEAD
lastd = diff HEAD^ HEAD
today = hist --since=midnight
df = "!_m() { git log --pretty=format:'%h %cd [%cn] %s%d' --date=relative | fzf --bind \"enter:execute(git diff --color=always $@ {1}^ {1} | ${PAGER})\" --preview-window=65% --preview=\"git diff --color=always $@ {1}^ {1}\"; }; _m"
type = cat-file -t
dump = cat-file -p
unstage = "reset HEAD --"
count = "rev-list --count --all"
tags = "for-each-ref --sort=-creatordate --format '%(refname:strip=2)' refs/tags"
initci = "commit --allow-empty -m 'Initial commit'"
# edit conflicted file on merge
edit-unmerged = "!$EDITOR $(git ls-files --unmerged | cut -f2 | sort -u)"
# add conflicted file on merge
add-unmerged = "!git add $(git ls-files --unmerged | cut -f2 | sort -u)"
remove-remote-tag = "!f() { git tag -d $1 && git push origin :refs/tags/$1 }; f"
aliases = "!git config -l | grep '^alias\\.' | cut -d. -f2-"
# git clone git://localhost/
serve = daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/

View File

@ -2,24 +2,23 @@
excludesfile = ~/.config/git/ignore
editor = "$EDITOR"
pager = "$PAGER -+C -F"
fileMode = true
fileMode = false
hooksPath = ~/.config/git/hooks
whitespace = fix,trailing-space,cr-at-eol
autocrlf = input
quotepath = false
[i18n]
commitEncoding = utf-8
logOutputEncoding = utf-8
logOutputEncoding = utf-8
[init]
defaultBranch = main
defaultBranch = master
[push]
default = current
[pull]
rebase = false
ff = only
[color]
status = auto
@ -38,25 +37,79 @@
[apply]
whitespace = fix
[rerere]
enabled = true
[diff]
mnemonicPrefix = true
suppressBlankEmpty = true
rename = copy
submodule = short
algorithm = histogram
colormoved = default
colormovedws = allow-indentation-change
[include]
path = ~/.config/git/url-aliases
path = ~/.config/git/aliases
path = ~/.config/git/local
[alias]
a = "!git ls-files --exclude-standard -m --others -t | fzf -0 -m --bind load:last --preview 'git diff --color=always {2}' | cut -d' ' -f2 | xargs -r git add"
u = "!git diff --name-only --cached | fzf -0 -m --bind load:last --preview 'git diff --staged --color=always {1}' | xargs -r git restore --staged"
d = diff
di = diff
ds = diff --staged
dno = diff --name-only
dw = diff --word-diff=color
co = checkout
ci = commit
amend = commit --amend --no-edit
amenda = commit --all --amend --no-edit
cim = "!_m() { git commit -m \"$*\"; }; _m"
ps = "!git push origin $(git rev-parse --abbrev-ref HEAD)"
pl = "!git pull origin $(git rev-parse --abbrev-ref HEAD)"
pr = "pull --rebase"
st = status
br = branch
bm = branch --merged
bn = branch --no-merged
hist = log --pretty=format:'%Cgreen%h %Creset%cd %Cblue[%cn](%G?) %Creset%s%C(yellow)%d%C(reset)' --graph --date=relative --decorate --color=always
history = hist --all
hs = hist -n 10
hsa = hist -n 10 --all
last = log -1 HEAD
lastd = diff HEAD^ HEAD
today = hist --since=midnight
df = "!git log --pretty=format:'%h %cd [%cn] %s%d' --date=relative | fzf --preview='git diff --color=always {1}^ {1}' | awk '{print $1}' | xargs -I {} git diff {}^ {}"
type = cat-file -t
dump = cat-file -p
unstage = "reset HEAD --"
count = "rev-list --count --all"
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
# edit conflicted file on merge
edit-unmerged = "!$EDITOR $(git ls-files --unmerged | cut -f2 | sort -u)"
# add conflicted file on merge
add-unmerged = "!git add $(git ls-files --unmerged | cut -f2 | sort -u)"
remove-remote-tag = "!f() { git tag -d $1 && git push origin :refs/tags/$1 }; f"
[github]
user = "thek4n"
email = "thek4n@yandex.ru"
[user]
name = "thek4n"
email = "thek4n@yandex.ru"
signingkey = "thek4n"
[url "https://github.com/"]
insteadOf = "gh:"
[url "https://gist.github.com/"]
insteadOf = "gist:"
[url "https://gitlab.com/"]
insteadOf = "gl:"
[url "https://bitbucket.org/"]
insteadOf = "bb:"
[url "git@github.com:"]
pushInsteadOf = "https://github.com/"
pushInsteadOf = "http://github.com/"
pushInsteadOf = "gh:"
[url "git@gist.github.com:"]
pushInsteadOf = "https://gist.github.com/"
pushInsteadOf = "http://gist.github.com/"
pushInsteadOf = "gist:"

View File

@ -0,0 +1,12 @@
#!/bin/sh
set -e
if command -v makepkg >/dev/null && [ -e PKGBUILD ]; then
if [ -e VERSION ]; then
sed -i "s/pkgver=.\+/pkgver=$(cat VERSION)/" PKGBUILD
git add PKGBUILD
fi
makepkg --printsrcinfo > .SRCINFO
git add .SRCINFO
exit
fi

View File

@ -15,7 +15,6 @@ __pycache__/
*.spec
.env
*.env
*.log
*.bak
*~
@ -37,20 +36,6 @@ CMakeFiles
*.o
a.out
*.exe
*.ipk
build/
dist/
node_modules/
.tns
.autoenv.zsh
.autoenv_leave.zsh
*.tar
*.gz
*.zip
.redo/

View File

@ -1,13 +0,0 @@
# vim: ft=gitconfig
[github]
user = "thek4n"
email = "thek4n@yandex.ru"
[user]
name = "thek4n"
email = "thek4n@yandex.ru"
signingkey = "thek4n"
[url "git@github.com:TheK4n/notes"]
insteadOf = "git@github.com:TheK4n/notes"

View File

@ -1,41 +0,0 @@
# vim: ft=gitconfig
# alias gh:=https://github.com/
[url "https://github.com/"]
insteadOf = "gh:"
# alias gist:=https://gist.github.com/
[url "https://gist.github.com/"]
insteadOf = "gist:"
# alias gl:=https://gitlab.com/
[url "https://gitlab.com/"]
insteadOf = "gl:"
# alias bb:=https://bitbucket.org/
[url "https://bitbucket.org/"]
insteadOf = "bb:"
[url "git@github.com:"]
pushInsteadOf = "https://github.com/"
pushInsteadOf = "http://github.com/"
pushInsteadOf = "git@github.com:"
pushInsteadOf = "gh:"
[url "git@gist.github.com:"]
pushInsteadOf = "https://gist.github.com/"
pushInsteadOf = "http://gist.github.com/"
pushInsteadOf = "gist:"
[url "git@gitlab.com:"]
pushInsteadOf = "https://gitlab.com/"
pushInsteadOf = "http://gitlab.com/"
pushInsteadOf = "git@gitlab.com:"
pushInsteadOf = "gl:"
; [url "https://github.com/"]
; insteadOf = "git@github.com:"
[url "https://gitlab.com/"]
insteadOf = "git@gitlab.com:"

238
home/user/.config/i3/config Normal file
View File

@ -0,0 +1,238 @@
# screen layout
exec --no-startup-id ~/.screenlayout/default.sh
for_window [tiling] border pixel 3
smart_borders on
set $mod Mod4
# screensaver
set $i3lock_cmd "i3lock -enf -c 1e1e1e"
exec --no-startup-id xset +dpms dpms 600 0 0
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock -enf -c 1e1e1e
exec_always --no-startup-id xset r rate 250 100
exec_always --no-startup-id setxkbmap -model pc105 -layout us,ru -option grp:win_space_toggle -option ctrl:nocaps
# wallpapers
exec --no-startup-id nitrogen --restore; sleep 1; picom -b --config ~/.config/picom/picom.conf
exec --no-startup-id hsetroot
exec --no-startup-id feh --randomize --no-fehbg --bg-scale $HOME/.wallpaper/*
set $font_size 11
font xft:FiraCode $font_size
# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioPlay exec playerctl play-pause
bindsym XF86AudioPause exec playerctl play-pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
bindsym XF86MonBrightnessUp exec xbacklight -inc 20
bindsym XF86MonBrightnessDown exec xbacklight -dec 20
bindsym $mod+z exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 0 ## Hold to talk
bindsym --release $mod+z exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 1 ## Release to mute
bindsym $mod+Shift+z exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
bindsym XF86PickupPhone exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 0 ## Hold to talk
bindsym --release XF86PickupPhone exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 1 ## Release to mute
bindsym XF86Go exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 0 ## Hold to talk, x1carb11
bindsym --release XF86Go exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 1 ## Release to mute, x1carb11
bindsym $mod+XF86AudioMicMute exec --no-startup-id pactl list short sources | awk '/input.*RUNNING/ {system("pactl set-source-mute " $1 " toggle")}' ## Find and mute mics
bindsym $mod+m exec i3-input -F 'mark %s' -l 1 -P 'Mark: '
bindsym $mod+g exec i3-input -F '[con_mark="%s"] focus' -l 1 -P 'Goto: '
focus_follows_mouse no
popup_during_fullscreen smart
# start a terminal
bindsym $mod+Return exec alacritty
# kill focused window
bindsym $mod+Shift+q kill
bindsym $mod+d exec --no-startup-id rofi -show drun -m -1
bindsym $mod+i exec --no-startup-id i3_switch_workspace.sh
bindsym $mod+o exec --no-startup-id slm_rofi.sh
bindsym $mod+p exec --no-startup-id power_rofi.sh
# change focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move focused window
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
bindsym $mod+Ctrl+Shift+l move workspace to output right
bindsym $mod+Ctrl+Shift+h move workspace to output left
bindsym $mod+Ctrl+Shift+k move workspace to output up
bindsym $mod+Ctrl+Shift+j move workspace to output down
# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle
# change container layout (tabbed, toggle split)
bindsym $mod+t layout tabbed
bindsym $mod+v layout toggle split
bindsym $mod+a focus parent
# toggle tiling / floating
bindsym $mod+Shift+slash floating toggle
bindsym $mod+Shift+comma sticky toggle
# change focus between tiling / floating windows
bindsym $mod+slash focus mode_toggle
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1 Browser"
set $ws2 "2  Code"
set $ws3 "3  Code"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8💬Social"
set $ws9 "9🎵Music"
set $ws10 "10🍿Media"
# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10
bindsym $mod+u workspace prev
bindsym $mod+Shift+u workspace next
# resize window (you can also use the mouse for that)
bindsym $mod+r mode "resize"
mode "resize" {
bindsym h resize shrink width 10 px or 10 ppt
bindsym j resize grow height 10 px or 10 ppt
bindsym k resize shrink height 10 px or 10 ppt
bindsym l resize grow width 10 px or 10 ppt
bindsym $mod+r mode "default"
bindsym p mode "resize_precise"
bindsym Return mode "default"
bindsym Escape mode "default"
}
mode "resize_precise" {
bindsym h resize shrink width 1 px or 1 ppt
bindsym j resize grow height 1 px or 1 ppt
bindsym k resize shrink height 1 px or 1 ppt
bindsym l resize grow width 1 px or 1 ppt
bindsym $mod+r mode "default"
bindsym p mode "resize"
bindsym Return mode "default"
bindsym Escape mode "default"
}
set $exitmode "Power: [e]xit, [r]eboot, [s]hutdown, s[u]spend, [l]ock, [b]lack"
mode $exitmode {
bindsym e exit
bindsym r exec reboot
bindsym s exec shutdown -h now
bindsym u exec systemctl suspend; mode "default"
bindsym l exec $i3lock_cmd; mode "default"
bindsym b exec convert canvas:none PNG:- | feh -YF -; mode "default"
bindsym Escape mode "default"
bindsym Return mode "default"
}
bindsym $mod+x mode $exitmode
# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
bar {
output primary
output nonprimary
tray_output primary
status_command exec ~/.local/bin/i3status_wrapper
}
# Screenshots
bindsym Print exec --no-startup-id maim "$HOME/Pictures/Screenshots/$(date +'%d-%m-%Y-%T').png"
bindsym $mod+Print exec --no-startup-id maim --window $(xdotool getactivewindow) "$HOME/Pictures/Screenshots/$(date +'%d-%m-%Y-%T').png"
bindsym Shift+Print exec --no-startup-id maim --select "$HOME/Pictures/Screenshots/$(date +'%d-%m-%Y-%T').png"
## Clipboard Screenshots
bindsym Ctrl+Print exec --no-startup-id maim | xclip -selection clipboard -t image/png
bindsym Ctrl+$mod+Print exec --no-startup-id maim --window $(xdotool getactivewindow) | xclip -selection clipboard -t image/png
bindsym Ctrl+Shift+Print exec --no-startup-id maim --select | xclip -selection clipboard -t image/png
# default workspaces for monitors in setup
workspace $ws1 output primary
workspace $ws2 output primary
workspace $ws3 output primary
workspace $ws9 output nonprimary
workspace $ws10 output nonprimary
workspace hide1 output primary
workspace hide2 output nonprimary
bindsym $mod+q exec --no-startup-id i3-msg workspace hide1; workspace hide2
no_focus [title="^Peek preview$"]

View File

@ -1,64 +0,0 @@
separator_block_width=15
markup=pango
color=#FFFFFF
interval=5
[wireless]
command=~/.config/i3blocks/scripts/builder.sh wireless
interval=10
[ethernet]
command=~/.config/i3blocks/scripts/builder.sh ethernet
interval=10
[diskroot]
command=~/.config/i3blocks/scripts/builder.sh disk_root
interval=30
[diskhome]
command=~/.config/i3blocks/scripts/builder.sh disk_home
interval=30
[memory]
command=~/.config/i3blocks/scripts/builder.sh memory
interval=5
[cpu_usage]
command=~/.config/i3blocks/scripts/builder.sh cpu_usage
interval=5
[cpu_temp]
command=~/.config/i3blocks/scripts/builder.sh cpu_temp
interval=5
[bluetooth]
command=~/.config/i3blocks/scripts/builder.sh bluetooth_battery
interval=5
[battery]
command=~/.config/i3blocks/scripts/builder.sh battery
interval=30
[volume]
command=~/.config/i3blocks/scripts/builder.sh volume
interval=1
signal=1
[pomodoro]
command=~/.config/i3blocks/scripts/builder.sh pomodoro
interval=1
signal=2
[language]
command=~/.config/i3blocks/scripts/builder.sh language
signal=1
[userhost]
command=~/.config/i3blocks/scripts/builder.sh userhost
signal=1
[time]
command=~/.config/i3blocks/scripts/builder.sh time
interval=30

View File

@ -1,125 +0,0 @@
#!/bin/sh
set -ue
readonly EXIT_SUCCESS=0
readonly EXIT_FAILURE=1
cmd_wireless() {
wifiname="$(LANG=C nmcli -t -f active,ssid dev wifi | grep '^yes' | cut -d: -f2)"
wifi_ip=$(ip -o -4 addr show | grep wlp | awk '{print $4}' | cut -d/ -f1 | head -1)
if [ -z "${wifiname}" ] || [ -z "${wifi_ip}" ]; then
return 0
fi
printf ' %s %s\n' "${wifiname}" "${wifi_ip}"
}
cmd_battery() {
charging_status="$(cat /sys/class/power_supply/BAT0/status)"
percent="$(cat /sys/class/power_supply/BAT0/capacity)"
if [ "${percent}" -lt 35 ]; then
emoji_status="🪫"
else
emoji_status="🔋"
fi
if [ "${charging_status}" = "Charging" ]; then
emoji_status="🔌"
fi
printf "%s %s%%\n" "${emoji_status}" "${percent}"
}
cmd_disk_root() {
df -h / | awk '/\// {print "/ "$3"/"$2}'
}
cmd_disk_home() {
res="$(df -h /home)"
if [ "$(echo "${res}" | awk '/\// {print $6}')" = "/" ]; then
return 1
fi
df -h /home | awk '/\// {print " "$3"/"$2}'
}
cmd_memory() {
free -h | awk '/^Mem/ {print "🎟 "$3"/"$2}' | sed 's/i//g'
}
cmd_cpu_usage() {
top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print " "100 - $1"%"}'
}
cmd_cpu_temp() {
temp_mC="$(cat /sys/class/thermal/thermal_zone0/temp)"
temp_C="$((temp_mC / 1000))"
if [ "${temp_C}" -gt 80 ]; then
printf '<span foreground="red"> %s°C</span>\n' "${temp_C}"
else
printf ' %s°C\n' "${temp_C}"
fi
}
cmd_time() {
LC_ALL=C date '+ %d.%m.%y %a  %H:%M'
}
cmd_volume() {
value="$(pactl --format=json get-sink-volume @DEFAULT_SINK@ | jq --raw-output '.volume."front-left".value_percent')"
printf ' %s\n' "${value}"
}
cmd_pomodoro() {
pomodoro get
}
cmd_bluetooth_battery() {
device="$(upower -e | grep headset | head -1)"
upower -i "${device}" | grep percentage | awk '{ print "🎧🔋"$2"" }'
}
cmd_language() {
layout="$(swaymsg -t get_inputs | jq -r '.[] | select(.type == "keyboard") | .xkb_active_layout_name' | head -1)"
case "${layout}" in
"English (US)")
printf '🇬🇧 En\n'
;;
Russian)
printf '🇷🇺 Ru\n'
;;
*)
printf '🌐 %s\n' "${layout}"
;;
esac
}
cmd_userhost() {
printf "%s@%s\n" "${USER}" "${HOST:-${HOSTNAME:-}}"
}
case "${1}" in
wireless) shift; cmd_wireless "$@" ;;
ethernet) shift; cmd_ethernet "$@" ;;
battery) shift; cmd_battery "$@" ;;
disk_root) shift; cmd_disk_root "$@" ;;
disk_home) shift; cmd_disk_home "$@" ;;
memory) shift; cmd_memory "$@" ;;
cpu_usage) shift; cmd_cpu_usage "$@" ;;
cpu_temp) shift; cmd_cpu_temp "$@" ;;
time) shift; cmd_time "$@" ;;
volume) shift; cmd_volume "$@" ;;
pomodoro) shift; cmd_pomodoro "$@" ;;
bluetooth_battery) shift; cmd_bluetooth_battery "$@" ;;
language) shift; cmd_language "$@" ;;
userhost) shift; cmd_userhost "$@" ;;
*) exit "${EXIT_FAILURE}" ;;
esac
exit "${EXIT_SUCCESS}"

View File

@ -1,8 +0,0 @@
#!/bin/sh
swaymsg -m -t SUBSCRIBE "['input']" | \
jq --unbuffered -r '.change' | while read -r line; do
if echo "${line}" | grep -q "xkb_layout"; then
pkill -RTMIN+1 i3blocks
fi
done

View File

@ -0,0 +1,81 @@
general {
colors = true
interval = 5
output_format = i3bar
}
order += "wireless _first_"
order += "ethernet _first_"
order += "disk /"
order += "disk /home"
order += "memory"
order += "cpu_usage"
order += "cpu_temperature 0"
order += "tztime holder__headphones"
order += "battery all"
order += "volume master"
order += "tztime local"
wireless _first_ {
format_up = " (%quality at %essid %frequency) %ip"
format_down = " down"
}
ethernet _first_ {
format_up = " %ip"
format_down = " down"
}
battery all {
format = "%status %percentage"
last_full_capacity = false
format_down = ""
status_chr = "⚡"
status_bat = "🔋"
status_unk = "?"
status_full = ""
path = "/sys/class/power_supply/BAT%d/uevent"
low_threshold = 15
}
disk "/" {
format = "/ %used/%total"
}
disk "/home" {
format = " %used/%total"
}
memory {
format = " %used/%total"
threshold_degraded = "1G"
threshold_critical = "200M"
format_degraded = "MEMORY < %available"
}
cpu_usage {
format = " %usage"
}
cpu_temperature 0 {
format = " %degrees°"
max_threshold = "80"
format_above_threshold = " %degrees"
}
tztime local {
format = " %d.%m.%y %a  %H:%M"
}
volume master {
format = " %volume"
format_muted = ": muted %volume"
device = "default"
mixer = "Master"
mixer_idx = 0
}
tztime holder__headphones {
format = "holder__headphones"
}

View File

@ -1 +0,0 @@
output=DP-1

View File

@ -1,11 +0,0 @@
[Default Applications]
application/pdf=firefox.desktop;
text/html=firefox.desktop
x-scheme-handler/about=firefox.desktop
x-scheme-handler/http=firefox.desktop
x-scheme-handler/https=firefox.desktop
x-scheme-handler/about=firefox.desktop
x-scheme-handler/unknown=firefox.desktop
x-scheme-handler/tonsite=org.telegram.desktop.desktop
x-scheme-handler/tg=org.telegram.desktop.desktop
x-scheme-handler/postman=Postman.desktop

View File

@ -1,5 +0,0 @@
local opt = vim.opt_local
opt.expandtab = false
opt.tabstop = 4
opt.shiftwidth = 4

View File

@ -1,7 +0,0 @@
vim.g.python_indent = {
open_paren = 'shiftwidth()',
nested_paren = 'shiftwidth()',
continue = 'shiftwidth()',
closed_paren_align_last_line = false,
searchpair_timeout = 150,
}

View File

@ -4,16 +4,6 @@ local map = vim.keymap.set
vim.g.mapleader = ','
-- Sections
map('n', '<Leader>h', '', {desc = "UI"})
map('n', '<Leader>c', '', {desc = "Colorschemes"})
map('n', '<Leader>f', '', {desc = "Telescope"})
map('n', '<Leader>p', '', {desc = "Config manage"})
map('n', '<Leader>q', '', {desc = "Exits"})
map('n', '<Leader>r', '', {desc = "Run file"})
local function create_function_tabdo(command)
return function()
local curr_tab = vim.fn.tabpagenr()
@ -25,11 +15,9 @@ end
map('n', '<Leader>hc', create_function_tabdo('set cursorline!'),
{desc = "Toggle line highlighting"})
map('n', '<Leader>cs',
function() vim.fn.setreg('/', '\\%x') end,
{desc = "Clear search"})
map('n', '<Leader>h/', function() vim.o.hlsearch = not vim.o.hlsearch end, {desc = "Clear search"})
map('n', '<Leader>h/',
function() vim.opt.hlsearch = not vim.opt.hlsearch["_value"] end,
{desc = "Toggle search highlighting"})
-- enable search highlight in search mode
@ -44,12 +32,17 @@ map('n', '<C-f>', ':set hlsearch<CR>/\\V<C-r><C-w>\\C<CR>')
map('n', '<Leader>hl', create_function_tabdo('lua toggle_number_style()'),
{desc = "Toggle line number style"})
map('i', 'jf', '<ESC>`^')
map('i', 'оа', '<ESC>`^')
map('n', '~', 'vg~', {desc = "Toggle character case"})
map('n', 'Ё', 'vg~', {desc = "Toggle character case"})
map('v', 'Ё', '~', {desc = "Toggle character case"})
map('i',
'<C-[>',
function()
local current_line, _ = unpack(vim.api.nvim_win_get_cursor(0))
vim.api.nvim_win_set_cursor(0, {current_line, COLUMN_NUMBER_BEFORE_INSERT})
vim.cmd('stopinsert')
end
)
map('n',
'.',
@ -61,11 +54,10 @@ map('n',
{remap = false, silent = true}
)
map('n', 'q:', ':')
map('n', 'Ж', ':')
map('n', '<Enter>', 'o<ESC>')
map('n', '<Space>', 'O<ESC>')
-- x to blackhole
map({'n', 'v'}, 'x', '"_x')
@ -82,6 +74,11 @@ map('n', '<C-a>', 'mvggVG')
map('v', '<C-a>', '<Esc>`v:delmarks v<CR>', {silent = true})
-- Scroll tabs
map("n", '<C-l>', vim.cmd.tabnext)
map("n", '<C-h>', vim.cmd.tabprev)
map("n", '<Leader>qq', '<cmd>bd!<CR>',
{desc = "Kill current buffer"})
@ -94,13 +91,6 @@ map("n", '<Leader>he', '<cmd>set list!<CR>',
vim.opt.listchars=[[tab:→\ ,eol:↵,trail:·,extends:↷,precedes:↶]]
map("n", "<Leader>pl", "<cmd>Lazy<CR>",
{desc = "Package manager"})
map("n", "<Leader>pm", "<cmd>Mason<CR>",
{desc = "LSP Manager"})
-- Tab to go prev buffer
map("n", "<TAB>", ":b#<CR>", {silent = true})
@ -137,6 +127,34 @@ function toggle_number_style()
end
local function set_trouble_keymap(key, cmd)
map("n", string.format("<space>x%s", key), string.format("<cmd>TroubleToggle %s<CR>", cmd))
end
set_trouble_keymap("x", "")
set_trouble_keymap("w", "workspace_diagnostics") -- lsp diagnostic of workspace
set_trouble_keymap("d", "document_diagnostics") -- diagnostic of current file
local function set_gitsigns_keymap(key, cmd)
map("n", string.format("<space>g%s", key), string.format("<cmd>Gitsigns %s<CR>", cmd))
end
set_gitsigns_keymap('p', 'preview_hunk') -- show diff
set_gitsigns_keymap('b', 'blame_line') -- show author, hash, date and message of current line commit
set_gitsigns_keymap('n', 'next_hunk') -- go to next unstaged changes
set_gitsigns_keymap('N', 'prev_hunk') -- go to prev unstaged changes
set_gitsigns_keymap('r', 'reset_hunk') -- reset hunk under cursor
set_gitsigns_keymap('h', 'toggle_linehl') -- line highlighting
map("n", "<Leader>pl", "<cmd>Lazy<CR>",
{desc = "Package manager"})
map("n", "<Leader>pm", "<cmd>Mason<CR>",
{desc = "LSP Manager"})
local function reload_config()
vim.cmd.source(vim.env.MYVIMRC)
vim.notify('Config reloaded...', vim.log.levels.INFO)
@ -164,10 +182,10 @@ map("n", "<Leader>pR", fetch_and_reload_config_and_update_plugins,
vim.cmd([[
menu Encoding.utf-8 :e ++enc=utf8<CR>
menu Encoding.windows-1251 :e ++enc=cp1251 ++ff=dos<CR>
menu Encoding.koi8-r :e ++enc=koi8-r ++ff=unix<CR>
menu Encoding.windows-1251 :e ++enc=cp1251 ++ff=dos<CR>
menu Encoding.cp866 :e ++enc=cp866 ++ff=dos<CR>
menu Encoding.utf-8 :e ++enc=utf8<CR>
menu Encoding.koi8-u :e ++enc=koi8-u ++ff=unix<CR>
map <F8> :emenu Encoding.

View File

@ -2,11 +2,12 @@
local function map_filetype(filetype, key, cmd)
local function format_string()
local run_script_string = [[:terminal %s <CR> :set nocursorline number norelativenumber <CR> G]]
local run_script_string = [[:e %% | :terminal %s <CR> :set nocursorline number norelativenumber <CR> G]]
local cmd_string = string.format(run_script_string, cmd)
local map = vim.keymap.set
local opts = { noremap = true, silent = true }
vim.keymap.set('n', key, cmd_string, opts)
map('n', key, cmd_string, opts)
end
@ -23,13 +24,11 @@ map_filetype('markdown', '<Leader>rr', 'pandoc -t plain %')
map_filetype('python', '<Leader>rr', 'python3 %')
map_filetype('python', '<Leader>rt', 'pytest %')
map_filetype('go', '<Leader>rr', 'go run %')
map_filetype('go', '<Leader>rr', 'go run')
map_filetype('rust', '<Leader>rr', 'cargo run')
map_filetype('c', '<Leader>rr', 'gcc -o "${TMPDIR}/a.out" % && "${TMPDIR}/a.out"')
map_filetype('cpp', '<Leader>rr', 'g++ -o "${TMPDIR}/a.out" % && "${TMPDIR}/a.out"')
map_filetype('asm', '<Leader>rr', 'as -o "${TMPDIR}/out.o" % && ld -o "${TMPDIR}/a.out" "${TMPDIR}/out.o" && "${TMPDIR}/a.out"')
map_filetype('c', '<Leader>rr', 'gcc -o /tmp/a.out % && /tmp/a.out')
map_filetype('cpp', '<Leader>rr', 'g++ -o /tmp/a.out % && /tmp/a.out')
map_filetype('make', '<Leader>rr', 'make -C "$(dirname "%")"')

View File

@ -12,7 +12,7 @@ opt.relativenumber = true
opt.clipboard:append { 'unnamed' }
opt.clipboard:append { 'unnamedplus' }
opt.shortmess:append{a = true, s = true, I = true, c = true, S = true}
opt.shortmess:append{a = true, s = true, I = true, c = true}
opt.cmdheight = 0
vim.wo.signcolumn = "yes:1"
@ -144,28 +144,19 @@ vim.cmd.highlight({ "DiagnosticHint", "guifg=Grey" })
opt.langmap = 'ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz'
vim.o.viewdir = vim.fn.stdpath('cache')..'/view'
vim.fn.mkdir(vim.o.viewdir, 'p')
opt.viewoptions = "folds,cursor"
vim.api.nvim_create_autocmd("BufWinLeave", {
vim.api.nvim_create_autocmd({"BufWinLeave", "BufLeave"}, {
pattern = {"?*"},
callback = function(args)
local bufname = vim.api.nvim_buf_get_name(args.buf)
if not bufname:match("^term://") then
vim.cmd.mkview(1)
end
callback = function()
vim.cmd.mkview(1)
end
})
vim.api.nvim_create_autocmd("BufWinEnter", {
pattern = {"?*"},
callback = function(args)
local bufname = vim.api.nvim_buf_get_name(args.buf)
if not bufname:match("^term://") then
vim.cmd([[silent! loadview 1]])
end
callback = function()
vim.cmd("silent! loadview 1")
end,
})

View File

@ -0,0 +1,36 @@
return {
'Pocco81/auto-save.nvim',
config = function()
require("auto-save").setup({
enabled = true, -- start auto-save when the plugin is loaded (i.e. when your package manager loads it)
execution_message = {
message = function() -- message to print on save
return ""
end,
dim = 0.18, -- dim the color of `message`
cleaning_interval = 1250, -- (milliseconds) automatically clean MsgArea after displaying `message`. See :h MsgArea
},
trigger_events = {"InsertLeave", "TextChanged"}, -- vim events that trigger auto-save. See :h events
condition = function(buf)
local fn = vim.fn
local utils = require("auto-save.utils.data")
if
fn.getbufvar(buf, "&modifiable") == 1 and
utils.not_in(fn.getbufvar(buf, "&filetype"), {})
then
return true -- met condition(s), can save
end
return false -- can't save
end,
write_all_buffers = false, -- write all buffers when the current one meets `condition`
debounce_delay = 135, -- saves the file at most every `debounce_delay` milliseconds
callbacks = { -- functions to be executed at different intervals
enabling = nil, -- ran when enabling auto-save
disabling = nil, -- ran when disabling auto-save
before_asserting_save = nil, -- ran before checking `condition`
before_saving = nil, -- ran before doing the actual save
after_saving = nil -- ran after doing the actual save
}
})
end
}

View File

@ -1,137 +0,0 @@
local border_opts = {
border = "rounded",
winhighlight = "Normal:Normal,FloatBorder:FloatBorder,CursorLine:Visual,Search:None",
max_width = 50,
min_width = 50,
max_height = math.floor(vim.o.lines * 0.4),
min_height = 3,
}
local function has_words_before()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local function setup_cmp()
local cmp = require("cmp")
cmp.setup({
preselect = cmp.PreselectMode.None,
completion = {
completeopt = 'menu,menuone,noinsert,noselect',
},
snippet = {
expand = function(args)
vim.snippet.expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
['<Tab>'] = cmp.mapping(
function(fallback)
if cmp.visible() then
cmp.confirm({
behavior = cmp.ConfirmBehavior.Select,
select = true,
})
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end,
{ "i", "s" }
),
['<C-k>'] = cmp.mapping.select_prev_item({ behaviour = cmp.SelectBehavior.Select }),
['<C-j>'] = cmp.mapping.select_next_item({ behaviour = cmp.SelectBehavior.Select }),
['<C-p>'] = cmp.mapping.scroll_docs(4),
['<C-n>'] = cmp.mapping.scroll_docs(-4),
['<C-e>'] = cmp.mapping.abort(),
}),
window = {
completion = cmp.config.window.bordered(border_opts),
documentation = cmp.config.window.bordered(border_opts),
},
sorting = {
priority_weight = 1.0,
comparators = {
cmp.config.compare.score,
cmp.config.compare.locality,
cmp.config.compare.recently_used,
cmp.config.compare.offset,
require("cmp-under-comparator").under,
cmp.config.compare.order,
},
},
sources = cmp.config.sources({
{ name = 'nvim_lsp', priority = 1500 },
{ name = 'luasnip', priority = 1250 },
{ name = 'buffer', priority = 1000 },
{ name = 'tmux', priority = 750 },
{ name = "dotenv", priority = 500 },
{ name = 'path', priority = 250 },
}),
})
end
return {
{
'L3MON4D3/LuaSnip',
event = "InsertEnter",
build = "make install_jsregexp",
dependencies = {
'hrsh7th/nvim-cmp',
'honza/vim-snippets',
},
config = function()
local ls = require("luasnip")
vim.g.snips_author = 'thek4n'
vim.g.snips_email = 'thek4n@yandex.com'
vim.g.snips_github = 'https://github.com/thek4n'
local function jump(val)
return function()
ls.jump(val)
end
end
local map = vim.keymap.set
map({'i', 's'}, '<C-n>', jump(1), {silent = true})
map({'i', 's'}, '<C-p>', jump(-1), {silent = true})
map({'i', 's'}, '<C-k>', ls.expand, {silent = true})
map({"i", "s"}, "<C-e>",
function()
if ls.choice_active() then
ls.change_choice(1)
end
end,
{silent = true}
)
local luasnip_loaders = require("luasnip.loaders.from_snipmate")
luasnip_loaders.lazy_load()
end
},
{
'hrsh7th/nvim-cmp',
event = "InsertEnter",
dependencies = {
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
'saadparwaiz1/cmp_luasnip',
'hrsh7th/cmp-nvim-lsp',
'lukas-reineke/cmp-under-comparator',
'SergioRibera/cmp-dotenv',
'andersevenrud/cmp-tmux',
},
config = setup_cmp,
},
{
'neovim/nvim-lspconfig',
event = "InsertEnter",
config = function()
vim.diagnostic.config({ virtual_text = true })
end,
},
}

View File

@ -0,0 +1,10 @@
return {
"max397574/better-escape.nvim",
config = function()
require("better_escape").setup({
mapping = {'jf', 'оа'},
timeout = vim.o.timeoutlen,
keys = '<ESC>`^'
})
end,
}

View File

@ -0,0 +1,14 @@
return {
"j-morano/buffer_manager.nvim",
dependencies = {
"nvim-lua/plenary.nvim"
},
config = function()
local map = vim.keymap.set
map("n", "<leader><leader>", require("buffer_manager.ui").toggle_quick_menu)
vim.api.nvim_command([[
autocmd FileType buffer_manager vnoremap <C-j> :m '>+1<CR>gv=gv
autocmd FileType buffer_manager vnoremap <C-k> :m '<-2<CR>gv=gv
]])
end
}

View File

@ -21,7 +21,6 @@ return {
require("telescope").load_extension("refactoring")
end,
keys = {
{ "<space>r", "", desc = "Refactoring", mode = {"n", "v"} },
{
"<space>rr",
":lua require('refactoring').select_refactor()<CR>",
@ -76,7 +75,6 @@ return {
{
"<leader>fr",
"<Cmd>lua require('telescope').extensions.refactoring.refactors()<CR>",
desc = "Telescope refactorings",
mode = "n",
}
}
@ -89,101 +87,15 @@ return {
},
config = function()
require('neodev').setup()
end
},
{
'folke/trouble.nvim',
dependencies = { 'kyazdani42/nvim-web-devicons' },
config = function()
require("trouble").setup()
vim.keymap.set("n", "<space>x", "", {desc = "Diagnostics"})
local function set_trouble_keymap(key, cmd, opts)
vim.keymap.set(
"n",
string.format("<space>x%s", key),
string.format("<cmd>Trouble %s<CR>", cmd),
opts
)
end
set_trouble_keymap("x", "diagnostics toggle", {desc = "Workspace diagnostics window"})
set_trouble_keymap("X", "diagnostics toggle filter.buf=0", {desc = "Buffer diagnostics window"})
set_trouble_keymap("Q", "qflist toggle", {desc = "Qflist"})
set_trouble_keymap("l", "lsp toggle focus=false win.position=right", {desc = "Toggle LSP diagnostics"})
end
},
{
'lewis6991/gitsigns.nvim',
event = "BufReadPost",
enabled = vim.fn.executable "git" == 1,
config = function()
require("gitsigns").setup({
signs = {
add = { text = "+" },
change = { text = "|" },
delete = { text = "-" },
topdelete = { text = "^" },
changedelete = { text = "~" },
untracked = { text = "0" },
},
signs_staged = {
add = { text = '+' },
change = { text = '|' },
delete = { text = '-' },
topdelete = { text = "^" },
changedelete = { text = '~' },
untracked = { text = '0' },
},
signs_staged_enable = true,
require('lspconfig').lua_ls.setup({
settings = {
Lua = {
completion = {
callSnippet = "Replace"
}
}
}
})
vim.keymap.set("n", "<space>g", "", {desc = "Git actions"})
local function set_gitsigns_keymap(key, cmd, opts)
vim.keymap.set(
"n",
string.format("<space>g%s", key),
string.format("<cmd>Gitsigns %s<CR>", cmd),
opts
)
end
set_gitsigns_keymap('p', 'preview_hunk', {desc = "Preview hunk"})
set_gitsigns_keymap('b', 'blame_line', {desc = "Show line commit info"})
set_gitsigns_keymap('n', 'next_hunk', {desc = "Next changes"})
set_gitsigns_keymap('N', 'prev_hunk', {desc = "Previous changes"})
set_gitsigns_keymap('r', 'reset_hunk', {desc = "Reset changes"})
set_gitsigns_keymap('h', 'toggle_linehl', {desc = "Toggle changes highlight"})
end
},
{
"wsdjeg/vim-fetch",
},
{
"aznhe21/actions-preview.nvim",
dependencies = {
'nvim-telescope/telescope.nvim',
'MunifTanjim/nui.nvim'
},
config = function()
require("actions-preview").setup {
telescope = {
sorting_strategy = "ascending",
layout_strategy = "vertical",
layout_config = {
width = 0.8,
height = 0.9,
prompt_position = "top",
preview_cutoff = 20,
preview_height = function(_, _, max_lines)
return max_lines - 15
end,
},
},
}
vim.keymap.set("n", "<space>c", "", {desc = "Code action"})
vim.keymap.set("n", "<space>ca", require("actions-preview").code_actions, {desc = "Code action"})
end,
},
}

View File

@ -0,0 +1,43 @@
return {
"neovim/nvim-lspconfig", -- REQUIRED: for native Neovim LSP integration
lazy = false, -- REQUIRED: tell lazy.nvim to start this plugin at startup
dependencies = {
{
"ms-jpq/coq_nvim",
branch = "coq",
build = ":COQdeps",
},
-- 9000+ Snippets
{ "ms-jpq/coq.artifacts", branch = "artifacts" },
{ 'ms-jpq/coq.thirdparty', branch = "3p" }
},
init = function()
vim.g.coq_settings = {
auto_start = true,
}
vim.g.coq_settings = {
keymap = {
recommended = true,
},
}
-- Keybindings
vim.api.nvim_set_keymap('i', '<Esc>', [[pumvisible() ? "\<C-e><Esc>" : "\<Esc>"]], { expr = true, silent = true })
vim.api.nvim_set_keymap('i', '<C-c>', [[pumvisible() ? "\<C-e><C-c>" : "\<C-c>"]], { expr = true, silent = true })
vim.api.nvim_set_keymap('i', '<BS>', [[pumvisible() ? "\<C-e><BS>" : "\<BS>"]], { expr = true, silent = true })
vim.api.nvim_set_keymap(
"i",
"<CR>",
[[pumvisible() ? (complete_info().selected == -1 ? "\<C-e><CR>" : "\<C-y>") : "\<CR>"]],
{ expr = true, silent = true }
)
vim.api.nvim_set_keymap('i', '<Tab>', [[pumvisible() ? "\<C-n>" : "\<Tab>"]], { expr = true, silent = true })
vim.api.nvim_set_keymap('i', '<S-Tab>', [[pumvisible() ? "\<C-p>" : "\<BS>"]], { expr = true, silent = true })
end,
config = function()
vim.cmd('COQnow -s')
end,
}

View File

@ -0,0 +1,17 @@
return {
'lewis6991/gitsigns.nvim',
event = "BufReadPost",
enabled = vim.fn.executable "git" == 1,
config = function()
require("gitsigns").setup({
signs = {
add = { text = "+" },
change = { text = "|" },
delete = { text = "-" },
topdelete = { text = "^" },
changedelete = { text = "~" },
untracked = { text = "0" },
}
})
end
}

View File

@ -0,0 +1,10 @@
return {
'ggandor/leap.nvim',
keys = {
{"J", "<Plug>(leap-forward-to)"},
{"K", "<Plug>(leap-backward-to)"},
},
config = function()
require('leap').opts.safe_labels = {}
end,
}

View File

@ -0,0 +1,15 @@
return {
"mfussenegger/nvim-lint",
config = function()
local lint = require("lint")
lint.linters_by_ft = {
python = {"flake8"},
sh = {"shellcheck"},
}
vim.api.nvim_create_autocmd({"TextChanged", "BufEnter"}, {
callback = function()
lint.try_lint()
end,
})
end
}

View File

@ -1,80 +0,0 @@
local lsp_have_feature = {
rename = function(client)
return client.supports_method "textDocument/rename"
end,
inlay_hint = function(client)
return client.supports_method "textDocument/inlayHint"
end,
}
local function get_lsp_client_names(have_feature)
local client_names = {}
local attached_clients = vim.lsp.get_clients { bufnr = 0 }
for _, client in ipairs(attached_clients) do
if have_feature(client) then
table.insert(client_names, client.name)
end
end
return client_names
end
local function lsp_buf_rename(client_name)
vim.lsp.buf.rename(nil, { name = client_name })
end
function LSP_BUF_RENAME_USE_ANY(fallback)
local client_names = get_lsp_client_names(lsp_have_feature.rename)
for _, client_name in ipairs(client_names) do
lsp_buf_rename(client_name)
return
end
if fallback then
fallback()
end
end
return {
{
'mason-org/mason.nvim',
dependencies = {
'neovim/nvim-lspconfig',
"mason-org/mason-lspconfig.nvim",
'nvim-telescope/telescope.nvim',
},
config = function()
-- Mappings.
local opts = { noremap=true, silent=true }
local function desc(description)
return vim.tbl_extend("keep", opts, {desc = description})
end
-- Sections
vim.api.nvim_set_keymap('n', '<space>w', '', {desc = "Workspace manage"})
-- See `:help vim.lsp.*` for documentation on any of the below functions
vim.api.nvim_set_keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', desc("Go declaration"))
vim.api.nvim_set_keymap('n', 'gd', '<cmd>Telescope lsp_definitions<CR>', desc("Go definition"))
vim.api.nvim_set_keymap('n', 'gi', '<cmd>Telescope lsp_implementations<CR>', desc("Go implementation"))
vim.api.nvim_set_keymap('n', 'gr', '<cmd>Telescope lsp_references<CR>', desc("Go references"))
vim.api.nvim_set_keymap('n', 'gt', '<cmd>Telescope lsp_type_definitions<CR>', desc("Go type references"))
vim.api.nvim_set_keymap('n', '<space>k', '<cmd>lua vim.lsp.buf.hover()<CR>', desc("Show help"))
vim.api.nvim_set_keymap('n', '<space>K', '<cmd>lua vim.lsp.buf.signature_help()<CR>', desc("Show signature"))
vim.api.nvim_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', desc("Add workspace folder"))
vim.api.nvim_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', desc("Remove workspace folder"))
vim.api.nvim_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', desc("Show workspace folders"))
vim.api.nvim_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', desc("Show type"))
vim.api.nvim_set_keymap('n', '<space>rn', "<cmd>lua LSP_BUF_RENAME_USE_ANY()<CR>", desc("Rename object"))
vim.api.nvim_set_keymap('n', '<space>e', '<cmd>lua vim.diagnostic.open_float()<CR>', desc("Show diagnostic"))
vim.api.nvim_set_keymap('n', '<space>p', '<cmd>lua vim.diagnostic.goto_prev()<CR>', desc("Previous problem"))
vim.api.nvim_set_keymap('n', '<space>n', '<cmd>lua vim.diagnostic.goto_next()<CR>', desc("Next problem"))
vim.api.nvim_set_keymap('n', '<space>q', '<cmd>lua vim.diagnostic.setloclist()<CR>', opts)
vim.api.nvim_set_keymap('n', '<space>f', '<cmd>lua vim.lsp.buf.format()<CR>', desc("Format file"))
require("mason").setup()
require("mason-lspconfig").setup()
end,
},
}

View File

@ -0,0 +1,6 @@
return {
'chentoast/marks.nvim',
config = function()
require("marks").setup()
end
}

View File

@ -0,0 +1,56 @@
local on_attach = function(client, bufnr)
local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
-- Enable completion triggered by <c-x><c-o>
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
-- Mappings.
local opts = { noremap=true, silent=true }
-- See `:help vim.lsp.*` for documentation on any of the below functions
buf_set_keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
buf_set_keymap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
buf_set_keymap('n', '<space>k', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
buf_set_keymap('n', '<space>K', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
buf_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
buf_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
buf_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
buf_set_keymap('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
buf_set_keymap('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
buf_set_keymap('n', '<space>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
buf_set_keymap('n', '<space>p', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts)
buf_set_keymap('n', '<space>n', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts)
buf_set_keymap('n', '<space>q', '<cmd>lua vim.diagnostic.setloclist()<CR>', opts)
buf_set_keymap('n', '<space>f', '<cmd>lua vim.lsp.buf.format()<CR>', opts)
end
return {
{
'williamboman/mason.nvim',
dependencies = {
'neovim/nvim-lspconfig',
"williamboman/mason-lspconfig.nvim",
},
config = function()
require("mason").setup()
local mason_lspconfig = require("mason-lspconfig")
mason_lspconfig.setup()
mason_lspconfig.setup_handlers({
function (server_name)
require("lspconfig")[server_name].setup({
on_attach = on_attach,
flags = {
debounce_text_changes = 150,
}
})
end
})
end,
},
}

View File

@ -44,6 +44,13 @@ return {
})
end
},
{
'folke/trouble.nvim',
dependencies = { 'kyazdani42/nvim-web-devicons' },
config = function()
require("trouble").setup()
end
},
{
"thek4n/mdimage.nvim",
config = function()
@ -83,46 +90,4 @@ return {
end)
end
},
{
'chentoast/marks.nvim',
config = function()
require("marks").setup()
end
},
{
'Pocco81/auto-save.nvim',
config = function()
require("auto-save").setup({
enabled = true, -- start auto-save when the plugin is loaded (i.e. when your package manager loads it)
execution_message = {
message = function() -- message to print on save
return ""
end,
dim = 0.18, -- dim the color of `message`
cleaning_interval = 1250, -- (milliseconds) automatically clean MsgArea after displaying `message`. See :h MsgArea
},
trigger_events = {"InsertLeave", "TextChanged"}, -- vim events that trigger auto-save. See :h events
condition = function(buf)
local fn = vim.fn
local utils = require("auto-save.utils.data")
if
fn.getbufvar(buf, "&modifiable") == 1 and
utils.not_in(fn.getbufvar(buf, "&filetype"), {})
then
return true -- met condition(s), can save
end
return false -- can't save
end,
write_all_buffers = false, -- write all buffers when the current one meets `condition`
debounce_delay = 135, -- saves the file at most every `debounce_delay` milliseconds
callbacks = { -- functions to be executed at different intervals
enabling = nil, -- ran when enabling auto-save
disabling = nil, -- ran when disabling auto-save
before_asserting_save = nil, -- ran before checking `condition`
before_saving = nil, -- ran before doing the actual save
after_saving = nil -- ran after doing the actual save
}
})
end
},
}

View File

@ -0,0 +1,41 @@
return {
'toppair/peek.nvim',
event = { "VeryLazy" },
enabled = vim.fn.executable("deno") == 1,
ft = {'markdown'},
build = 'deno task --quiet build:fast',
config = function()
local peek = require('peek')
peek.setup({
auto_load = true,
close_on_bdelete = true,
syntax = true,
theme = 'dark',
update_on_change = true,
app = 'webview',
filetype = {'markdown'},
throttle_at = 200000,
throttle_time = 'auto',
})
if vim.fn.executable("i3-msg") then
vim.api.nvim_create_user_command('PeekOpen', function()
if not peek.is_open() and vim.bo[vim.api.nvim_get_current_buf()].filetype == 'markdown' then
vim.fn.system('i3-msg split horizontal')
peek.open()
end
end, {})
vim.api.nvim_create_user_command('PeekClose', function()
if peek.is_open() then
peek.close()
vim.fn.system('i3-msg move left')
end
end, {})
else
vim.api.nvim_create_user_command("PeekOpen", require("peek").open, {})
vim.api.nvim_create_user_command("PeekClose", require("peek").close, {})
end
end,
}

View File

@ -15,16 +15,12 @@ return {
cmd = {
"Telescope"
},
previewers = {
buffer_previewer_maker = require('telescope.previewers').buffer_previewer_maker
},
keys = {
{ '<Leader>fb', '<cmd>Telescope buffers<CR>' },
{ '<Leader>ff', '<cmd>Telescope find_files<CR>' },
{ '<Leader>fg', '<cmd>Telescope live_grep<CR>' },
{ '<Leader>fc', '<cmd>Telescope git_commits<CR>' },
{ '<Leader>fd', '<cmd>Telescope diagnostics<CR>' },
{ '<Leader><Leader>', '<cmd>Telescope buffers<CR>' },
},
config = function()
local telescope = require("telescope")
@ -46,32 +42,30 @@ return {
["<C-n>"] = actions.preview_scrolling_down,
["<C-p>"] = actions.preview_scrolling_up,
["<C-a>"] = actions.toggle_all,
["<C-o>"] = actions.toggle_selection,
["?"] = actions.which_key,
["jf"] = { "<esc>", type = "command" },
},
n = {
["<C-j>"] = actions.move_selection_next,
["<C-k>"] = actions.move_selection_previous,
["<C-n>"] = actions.preview_scrolling_down,
["<C-p>"] = actions.preview_scrolling_up,
["<C-a>"] = actions.toggle_all,
["jf"] = actions.close,
["?"] = actions.which_key,
}
},
selection_caret = "",
path_display = { "truncate" },
file_ignore_patterns = {
"%.git/",
"%.svn/",
".git/",
".svn/",
"%.o",
"%.a",
"%.so",
"a%.out",
"a.out",
"venv/",
"CMakeFiles/",
"cmake_install%.cmake",
"CMakeCache%.txt",
"cmake_install.cmake",
"CMakeCache.txt",
"target/",
"%.pytest_cache/",
"vendor/",
".pytest_cache/",
"vendor/*",
"%.lock",
"%.db",
"%.sqlite3",
@ -89,11 +83,11 @@ return {
"%.ttf",
"%.webp",
"%.bin",
"%.dart_tool/",
"%.gradle/",
"%.idea/",
"%.settings/",
"%.vscode/",
".dart_tool/",
".gradle/",
".idea/",
".settings/",
".vscode/",
"pycache/",
"build/",
"env/",
@ -110,7 +104,8 @@ return {
"%.jar",
"%.docx",
"%.met",
"%.vale/",
"smalljre_*/*",
".vale/",
"%.rar",
"%.zip",
"%.7z",

View File

@ -1,10 +1,12 @@
return {
{
'kana/vim-textobj-lastpat', -- text-object i/, operate under finding
event = "InsertEnter",
dependencies = { 'kana/vim-textobj-user' }
},
{
'sgur/vim-textobj-parameter',
event = "InsertEnter",
dependencies = { 'kana/vim-textobj-user' }
},
{

View File

@ -44,7 +44,11 @@ return {
{
'vim.fn.getcwd()',
fmt = function(str)
return str:gsub(os.getenv("HOME"), "~")
local res = str
res = str:gsub(os.getenv("HOME"), "~")
return res
end,
color = { fg='white', gui='bold' },
padding = { left = 1, right = 0 }
@ -68,8 +72,8 @@ return {
},
},
lualine_x = {'GET_FORMATTED_VIRTUAL_ENV()', 'DETECT_INDENT_TYPE()', 'filetype'},
lualine_y = {'searchcount'},
lualine_z = {'location', 'selectioncount'},
lualine_y = {'progress'},
lualine_z = {'location'},
},
})
end,
@ -107,7 +111,6 @@ return {
},
{
'xiyaowong/transparent.nvim',
enabled = false,
lazy = true,
config = function()
require("transparent").setup({
@ -120,7 +123,7 @@ return {
lazy = false,
config = function()
require("virt-column").setup({
virtcolumn = '80'
virtcolumn = '81'
})
end
},
@ -179,31 +182,7 @@ return {
health = {
checker = false,
},
routes = {
{ -- hack to disable search count
filter = {
event = "msg_show",
kind = "echo",
["not"] = { cmdline = true },
},
opts = { skip = true },
},
},
})
end
},
{
"https://github.com/liangxianzhe/floating-input.nvim.git",
config = function()
vim.ui.input = function(opts, on_confirm)
require("floating-input").input(opts, on_confirm, { border = 'single' })
end
end
},
{
"petertriho/nvim-scrollbar",
config = function()
require("scrollbar").setup()
end
},
}
}

View File

@ -0,0 +1,434 @@
#################################
# Shadows #
#################################
# Enabled client-side shadows on windows. Note desktop windows
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
# unless explicitly requested using the wintypes option.
#
# shadow = false
shadow = true;
# The blur radius for shadows, in pixels. (defaults to 12)
# shadow-radius = 12
shadow-radius = 7;
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
# shadow-opacity = .75
# The left offset for shadows, in pixels. (defaults to -15)
# shadow-offset-x = -15
shadow-offset-x = -7;
# The top offset for shadows, in pixels. (defaults to -15)
# shadow-offset-y = -15
shadow-offset-y = -7;
# Red color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-red = 0
# Green color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-green = 0
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-blue = 0
# Hex string color value of shadow (#000000 - #FFFFFF, defaults to #000000). This option will override options set shadow-(red/green/blue)
# shadow-color = "#000000"
# Specify a list of conditions of windows that should have no shadow.
#
# examples:
# shadow-exclude = "n:e:Notification";
#
# shadow-exclude = []
shadow-exclude = [
"name = 'Notification'",
"class_g = 'Conky'",
"class_g ?= 'Notify-osd'",
"class_g = 'Cairo-clock'",
"_GTK_FRAME_EXTENTS@:c"
];
# Specify a list of conditions of windows that should have no shadow painted over, such as a dock window.
# clip-shadow-above = []
# Specify a X geometry that describes the region in which shadow should not
# be painted in, such as a dock window region. Use
# shadow-exclude-reg = "x10+0+0"
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
#
# shadow-exclude-reg = ""
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
# xinerama-shadow-crop = false
#################################
# Fading #
#################################
# Fade windows in/out when opening/closing and when opacity changes,
# unless no-fading-openclose is used.
fading = false
# fading = true;
# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
# fade-in-step = 0.028
fade-in-step = 0.075;
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
# fade-out-step = 0.03
fade-out-step = 0.075;
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
# fade-delta = 10
# Specify a list of conditions of windows that should not be faded.
# fade-exclude = []
# Do not fade on window open/close.
# no-fading-openclose = false
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
# no-fading-destroyed-argb = false
#################################
# Transparency / Opacity #
#################################
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
inactive-opacity = 1
# inactive-opacity = 0.95;
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
# frame-opacity = 1.0
frame-opacity = 0.9;
# Let inactive opacity set by -i override the '_NET_WM_WINDOW_OPACITY' values of windows.
# inactive-opacity-override = true
inactive-opacity-override = false;
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
# active-opacity = 1.0
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
inactive-dim = 0.15
# Specify a list of conditions of windows that should never be considered focused.
# focus-exclude = []
focus-exclude = [
"class_g = 'firefox'",
"class_g = 'webview'",
"class_g = 'Cairo-clock'",
"class_g = 'Conky'"
];
# Use fixed inactive dim value, instead of adjusting according to window opacity.
# inactive-dim-fixed = 1.0
# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
# like `50:name *= "Firefox"`. picom-trans is recommended over this.
# Note we don't make any guarantee about possible conflicts with other
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
# example:
# opacity-rule = [ "80:class_g = 'URxvt'" ];
#
# opacity-rule = []
#################################
# Corners #
#################################
# Sets the radius of rounded window corners. When > 0, the compositor will
# round the corners of windows. Does not interact well with
# `transparent-clipping`.
corner-radius = 3
# Exclude conditions for rounded corners.
rounded-corners-exclude = [
"window_type = 'dock'",
"window_type = 'desktop'"
];
#################################
# Background-Blurring #
#################################
# Parameters for background blurring, see the *BLUR* section for more information.
# blur-method =
# blur-size = 12
#
# blur-deviation = false
#
# blur-strength = 5
# Blur background of semi-transparent / ARGB windows.
# Bad in performance, with driver-dependent behavior.
# The name of the switch may change without prior notifications.
#
# blur-background = false
# Blur background of windows when the window frame is not opaque.
# Implies:
# blur-background
# Bad in performance, with driver-dependent behavior. The name may change.
#
# blur-background-frame = false
# Use fixed blur strength rather than adjusting according to window opacity.
# blur-background-fixed = false
# Specify the blur convolution kernel, with the following format:
# example:
# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
#
# blur-kern = ""
blur-kern = "3x3box";
# Exclude conditions for background blur.
# blur-background-exclude = []
blur-background-exclude = [
"window_type = 'dock'",
"window_type = 'desktop'",
"_GTK_FRAME_EXTENTS@:c"
];
#################################
# General Settings #
#################################
# Enable remote control via D-Bus. See the man page for more details.
# dbus = true
# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
# daemon = false
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
# `xrender` is the default one.
#
# backend = "glx"
backend = "xrender";
# Enable/disable VSync.
# vsync = false
vsync = true;
# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
# dbus = false
# Try to detect WM windows (a non-override-redirect window with no
# child that has 'WM_STATE') and mark them as active.
#
# mark-wmwin-focused = false
mark-wmwin-focused = true;
# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
# mark-ovredir-focused = false
mark-ovredir-focused = true;
# Try to detect windows with rounded corners and don't consider them
# shaped windows. The accuracy is not very high, unfortunately.
#
# detect-rounded-corners = false
detect-rounded-corners = true;
# Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
detect-client-opacity = true;
# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
# provided that the WM supports it.
#
# use-ewmh-active-win = false
# Unredirect all windows if a full-screen opaque window is detected,
# to maximize performance for full-screen windows. Known to cause flickering
# when redirecting/unredirecting windows.
#
# unredir-if-possible = false
# Delay before unredirecting the window, in milliseconds. Defaults to 0.
# unredir-if-possible-delay = 0
# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
# unredir-if-possible-exclude = []
# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
# in the same group focused at the same time.
#
# detect-transient = false
detect-transient = true;
# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
# group focused at the same time. This usually means windows from the same application
# will be considered focused or unfocused at the same time.
# 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too.
#
# detect-client-leader = false
# Resize damaged region by a specific number of pixels.
# A positive value enlarges it while a negative one shrinks it.
# If the value is positive, those additional pixels will not be actually painted
# to screen, only used in blur calculation, and such. (Due to technical limitations,
# with use-damage, those pixels will still be incorrectly painted to screen.)
# Primarily used to fix the line corruption issues of blur,
# in which case you should use the blur radius value here
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
# with a 5x5 one you use `--resize-damage 2`, and so on).
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
#
# resize-damage = 1
# Specify a list of conditions of windows that should be painted with inverted color.
# Resource-hogging, and is not well tested.
#
# invert-color-include = []
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
# Might cause incorrect opacity when rendering transparent content (but never
# practically happened) and may not work with blur-background.
# My tests show a 15% performance boost. Recommended.
#
glx-no-stencil = true;
# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes,
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
# Recommended if it works.
#
# glx-no-rebind-pixmap = false
# Disable the use of damage information.
# This cause the whole screen to be redrawn every time, instead of the part of the screen
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
# The opposing option is use-damage
#
# no-use-damage = false
use-damage = true;
# Use X Sync fence to sync clients' draw calls, to make sure all draw
# calls are finished before picom starts drawing. Needed on nvidia-drivers
# with GLX backend for some users.
#
# xrender-sync-fence = false
# GLX backend: Use specified GLSL fragment shader for rendering window
# contents. Read the man page for a detailed explanation of the interface.
#
# window-shader-fg = "default"
# Use rules to set per-window shaders. Syntax is SHADER_PATH:PATTERN, similar
# to opacity-rule. SHADER_PATH can be "default". This overrides window-shader-fg.
#
# window-shader-fg-rule = [
# "my_shader.frag:window_type != 'dock'"
# ]
# Force all windows to be painted with blending. Useful if you
# have a glx-fshader-win that could turn opaque pixels transparent.
#
# force-win-blend = false
# Do not use EWMH to detect fullscreen windows.
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
#
# no-ewmh-fullscreen = false
# Dimming bright windows so their brightness doesn't exceed this set value.
# Brightness of a window is estimated by averaging all pixels in the window,
# so this could comes with a performance hit.
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
#
# max-brightness = 1.0
# Make transparent windows clip other windows like non-transparent windows do,
# instead of blending on top of them.
#
# transparent-clipping = false
# Specify a list of conditions of windows that should never have transparent
# clipping applied. Useful for screenshot tools, where you need to be able to
# see through transparent parts of the window.
#
# transparent-clipping-exclude = []
# Set the log level. Possible values are:
# "trace", "debug", "info", "warn", "error"
# in increasing level of importance. Case doesn't matter.
# If using the "TRACE" log level, it's better to log into a file
# using *--log-file*, since it can generate a huge stream of logs.
#
# log-level = "debug"
log-level = "warn";
# Set the log file.
# If *--log-file* is never specified, logs will be written to stderr.
# Otherwise, logs will to written to the given file, though some of the early
# logs might still be written to the stderr.
# When setting this option from the config file, it is recommended to use an absolute path.
#
# log-file = "/path/to/your/log/file"
# Show all X errors (for debugging)
# show-all-xerrors = false
# Write process ID to a file.
# write-pid-path = "/path/to/your/log/file"
# Window type settings
#
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
# "tooltip", "notification", "combo", and "dnd".
#
# Following per window-type options are available: ::
#
# fade, shadow:::
# Controls window-type-specific shadow and fade settings.
#
# opacity:::
# Controls default opacity of the window type.
#
# focus:::
# Controls whether the window of this type is to be always considered focused.
# (By default, all window types except "normal" and "dialog" has this on.)
#
# full-shadow:::
# Controls whether shadow is drawn under the parts of the window that you
# normally won't be able to see. Useful when the window has parts of it
# transparent, and you want shadows in those areas.
#
# clip-shadow-above:::
# Controls whether shadows that would have been drawn above the window should
# be clipped. Useful for dock windows that should have no shadow painted on top.
#
# redir-ignore:::
# Controls whether this type of windows should cause screen to become
# redirected again after been unredirected. If you have unredir-if-possible
# set, and doesn't want certain window to cause unnecessary screen redirection,
# you can set this to `true`.
#
wintypes:
{
tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
dock = { shadow = false; clip-shadow-above = true; }
dnd = { shadow = false; }
popup_menu = { opacity = 0.8; }
dropdown_menu = { opacity = 0.8; }
};

View File

@ -2,9 +2,5 @@ configuration {
show-icons: true;
terminal: "alacritty";
font: "xft:FiraCode 12";
kb-accept-entry: "Ctrl+m,Return";
kb-row-up: "Ctrl+k";
kb-row-down: "Ctrl+j";
kb-remove-to-eol: "";
}
@theme "Arc-Dark"

View File

@ -1,28 +0,0 @@
# vim: ft=swayconfig
# Sway autostart
exec swayidle -w \
timeout 1800 'swaylock -f' \
timeout 1805 'swaymsg "output * power off"' \
resume 'swaymsg "output * power on"' \
before-sleep 'swaylock -f'
# Screen layout
exec_always ~/.screenlayout/default
output * bg "$(find ~/.wallpaper -type f | shuf -n 1)" fill
# Notifications
#systemctl --user enable --now dbus.service
exec mako --anchor top-right --default-timeout 4000 --icons 1 --actions 1 --output $primary
exec_always wayvnc -o $primary -S "$(mktemp --dry-run --tmpdir="${XDG_RUNTIME_DIR}" wayvnc.XXXXXXXXXX)" 127.0.0.1 5900
exec_always wayvnc -o $secondary -S "$(mktemp --dry-run --tmpdir="${XDG_RUNTIME_DIR}" wayvnc.XXXXXXXXXX)" 127.0.0.1 5901
exec --no-startup-id easyeffects --gapplication-service
exec --no-startup-id pomodoro daemon
exec $browser
exec $terminal
exec Telegram
exec firefox_media

View File

@ -1,19 +0,0 @@
# vim: ft=swayconfig
# Sway bar
bar {
mode dock
position bottom
status_command i3blocks
wrap_scroll no
bindsym button4 nop
bindsym button5 nop
hidden_state hide
output *
tray_output $primary
strip_workspace_name no
strip_workspace_numbers no
modifier $mod
}
exec ~/.config/i3blocks/scripts/layout_change_handler.sh

View File

@ -1,201 +0,0 @@
# vim: ft=swayconfig
# Sway bindings
bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% && pkill -RTMIN+1 i3blocks
bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% && pkill -RTMIN+1 i3blocks
bindsym --locked XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle && pkill -RTMIN+1 i3blocks
bindsym --locked XF86AudioPlay exec playerctl play-pause
bindsym --locked XF86AudioPause exec playerctl play-pause
bindsym --locked XF86AudioNext exec playerctl next
bindsym --locked XF86AudioPrev exec playerctl previous
bindsym --locked XF86Tools exec pavucontrol
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
bindsym --to-code $mod+p exec pomodoro toggle && pkill -RTMIN+2 i3blocks
bindsym $mod+z exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 0 ## Hold to talk
bindsym --release $mod+z exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 1 ## Release to mute
bindsym $mod+Shift+z exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle
bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
bindsym XF86PickupPhone exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 0 ## Hold to talk
bindsym --release XF86PickupPhone exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 1 ## Release to mute
bindsym XF86Go exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 0 ## Hold to talk, x1carb11
bindsym --release XF86Go exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 1 ## Release to mute, x1carb11
bindsym $mod+XF86AudioMicMute exec --no-startup-id pactl list short sources | awk '/input.*RUNNING/ {system("pactl set-source-mute " $1 " toggle")}' ## Find and mute mics
bindsym --to-code $mod+s exec ~/.config/sway/scripts/swap-workspaces.sh
bindsym --to-code $mod+Shift+q kill
bindsym --to-code $mod+Shift+r reload
set $menu rofi -show drun -m -1
bindsym --to-code $mod+d exec $menu
bindsym $mod+o exec --no-startup-id slm_rofi
# Change focus
bindsym --to-code $mod+h focus left
bindsym --to-code $mod+j focus down
bindsym --to-code $mod+k focus up
bindsym --to-code $mod+l focus right
bindsym --to-code $mod+Left focus left
bindsym --to-code $mod+Down focus down
bindsym --to-code $mod+Up focus up
bindsym --to-code $mod+Right focus right
# Move focused window
bindsym --to-code $mod+Shift+h move left
bindsym --to-code $mod+Shift+j move down
bindsym --to-code $mod+Shift+k move up
bindsym --to-code $mod+Shift+l move right
bindsym --to-code $mod+Shift+Left move left
bindsym --to-code $mod+Shift+Down move down
bindsym --to-code $mod+Shift+Up move up
bindsym --to-code $mod+Shift+Right move right
bindsym --to-code $mod+Ctrl+Shift+l move workspace to output right
bindsym --to-code $mod+Ctrl+Shift+h move workspace to output left
bindsym --to-code $mod+Ctrl+Shift+k move workspace to output up
bindsym --to-code $mod+Ctrl+Shift+j move workspace to output down
bindsym --to-code $mod+f fullscreen toggle
bindsym --to-code $mod+t layout tabbed
bindsym --to-code $mod+v layout toggle split
bindsym --to-code $mod+a focus parent
bindsym --to-code $mod+Shift+slash floating toggle
bindsym --to-code $mod+Shift+comma sticky toggle
# Change focus between tiling / floating windows
bindsym --to-code $mod+slash focus mode_toggle
bindsym --to-code Print exec --no-startup-id screenshot select copy
bindsym --to-code $mod+Print exec --no-startup-id screenshot window copy
bindsym --to-code Ctrl+Print exec --no-startup-id screenshot entire copy
bindsym --to-code Shift+Print exec --no-startup-id screenshot select save
bindsym --to-code Shift+$mod+Print exec --no-startup-id screenshot window save
bindsym --to-code Shift+Ctrl+Print exec --no-startup-id screenshot entire save
bindsym --to-code $mod+q workspace hide1; workspace hide2
bindsym $mod+Shift+minus move scratchpad
bindsym $mod+minus scratchpad show
bindsym --to-code $mod+b bar mode toggle
set $exitmode "Power: [e]xit, [r]eboot, [s]hutdown, s[u]spend, [l]ock, [b]lack, [R]UEFI"
mode $exitmode {
bindsym --to-code e exit
bindsym --to-code r exec --no-startup-id reboot
bindsym --to-code s exec --no-startup-id shutdown -h now
bindsym --to-code u exec ~/.config/sway/scripts/lock-telegram.sh && systemctl suspend; mode "default"
bindsym --to-code l exec ~/.config/sway/scripts/lock-telegram.sh && swaylock -f; mode "default"
bindsym --to-code b exec magick canvas:none PNG:- | feh --class black -YFx -; mode "default"
bindsym --to-code Shift+r exec --no-startup-id systemctl reboot --firmware-setup
bindsym Escape mode "default"
bindsym Return mode "default"
}
bindsym --to-code $mod+x mode $exitmode
# switch to workspace
bindsym --to-code $mod+1 workspace number $ws1
bindsym --to-code $mod+2 workspace number $ws2
bindsym --to-code $mod+3 workspace number $ws3
bindsym --to-code $mod+4 workspace number $ws4
bindsym --to-code $mod+5 workspace number $ws5
bindsym --to-code $mod+6 workspace number $ws6
bindsym --to-code $mod+7 workspace number $ws7
bindsym --to-code $mod+8 workspace number $ws8
bindsym --to-code $mod+9 workspace number $ws9
bindsym --to-code $mod+0 workspace number $ws10
# move focused container to workspace
bindsym --to-code $mod+Shift+1 move container to workspace number $ws1
bindsym --to-code $mod+Shift+2 move container to workspace number $ws2
bindsym --to-code $mod+Shift+3 move container to workspace number $ws3
bindsym --to-code $mod+Shift+4 move container to workspace number $ws4
bindsym --to-code $mod+Shift+5 move container to workspace number $ws5
bindsym --to-code $mod+Shift+6 move container to workspace number $ws6
bindsym --to-code $mod+Shift+7 move container to workspace number $ws7
bindsym --to-code $mod+Shift+8 move container to workspace number $ws8
bindsym --to-code $mod+Shift+9 move container to workspace number $ws9
bindsym --to-code $mod+Shift+0 move container to workspace number $ws10
bindsym --to-code $mod+u workspace prev
bindsym --to-code $mod+Shift+u workspace next
# workspace_auto_back_and_forth no
bindsym --to-code $mod+Tab workspace back_and_forth
# resize window (you can also use the mouse for that)
set $resizemode "Resize: toggle [p]recize"
mode $resizemode {
bindsym --to-code h resize shrink width 10 px or 10 ppt
bindsym --to-code j resize grow height 10 px or 10 ppt
bindsym --to-code k resize shrink height 10 px or 10 ppt
bindsym --to-code l resize grow width 10 px or 10 ppt
bindsym --to-code $mod+r mode "default"
bindsym --to-code p mode $presizemode
bindsym --to-code Return mode "default"
bindsym --to-code Escape mode "default"
}
set $presizemode "Precise resize: toggle [p]resize"
mode $presizemode {
bindsym --to-code h resize shrink width 1 px or 1 ppt
bindsym --to-code j resize grow height 1 px or 1 ppt
bindsym --to-code k resize shrink height 1 px or 1 ppt
bindsym --to-code l resize grow width 1 px or 1 ppt
bindsym --to-code $mod+r mode "default"
bindsym --to-code p mode $resizemode
bindsym --to-code Return mode "default"
bindsym --to-code Escape mode "default"
}
bindsym --to-code $mod+r mode $resizemode
input type:keyboard {
xkb_layout us,ru
xkb_options grp:win_space_toggle,caps:ctrl_modifier
xkb_model "pc101"
repeat_delay 250
repeat_rate 100
}
input type:pointer {
natural_scroll disabled
}
input type:touchpad {
tap enabled
tap_button_map lrm
dwt enabled
scroll_method two_finger
natural_scroll enabled
drag enabled
drag_lock disabled
pointer_accel 0.4
}
bindgesture swipe:3:right workspace next
bindgesture swipe:3:left workspace prev
bindgesture swipe:3:up exec $menu
bindgesture swipe:3:down workspace hide1; workspace hide2

View File

@ -1,34 +0,0 @@
# Sway config sourcer
exec swaylock -f
set $mod Mod4
set $ws1 "1 Browser"
set $ws2 "2  Code"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8💬Social"
set $ws9 "9🎵Music"
set $ws10 "10🍿Media"
set $terminal ~/.config/sway/scripts/auto-alacritty.sh
set $browser firefox
# Example variables.d:
#set $primary DVI-I-1
#set $secondary VGA-1
#set $terminal alacritty
#set $browser firefox
include ~/.config/sway/variables.d/*.conf
include ~/.config/sway/other.conf
include ~/.config/sway/bindings.conf
include ~/.config/sway/bar.conf
include ~/.config/sway/autostart.conf
include /etc/sway/config.d/*.conf
include ~/.config/sway/config.d/*.conf

View File

@ -1,55 +0,0 @@
# vim: ft=swayconfig
# Other sway config
# Hide cursor
seat seat0 hide_cursor when-typing enable
seat seat0 hide_cursor 5000
set $font_size 11
font xft:FiraCode $font_size
floating_modifier $mod
focus_follows_mouse no
mouse_warping none
popup_during_fullscreen smart
smart_borders on
focus_on_window_activation urgent
default_border pixel 1
default_floating_border normal
hide_edge_borders smart
for_window [tiling] border pixel 3
for_window [title="Picture-in-Picture"] sticky enable
for_window [title="Picture-in-Picture"] border pixel 0
for_window [app_id="firefox"] inhibit_idle fullscreen
for_window [app_id="pavucontrol"] {
floating enable
resize set width 60 ppt height 80 ppt
move position center
}
for_window [class="black"] fullscreen enable
no_focus [title="^Peek preview$"]
no_focus [class="black"]
assign [app_id="firefox_media"] workspace $ws10
assign [app_id="Alacritty"] workspace $ws2
assign [app_id="org.telegram.desktop"] workspace $ws8
assign [app_id="firefox"] workspace $ws1
workspace $ws1 output $primary
workspace $ws2 output $primary
workspace $ws3 output $primary
workspace $ws9 output $secondary
workspace $ws10 output $secondary
workspace hide1 output $primary
workspace hide2 output $secondary
exec_always test -f ~/.Xresources && xrdb -merge ~/.Xresources

View File

@ -1,6 +0,0 @@
#!/bin/sh
while true; do
alacritty
sleep 1
done

View File

@ -1,25 +0,0 @@
#!/bin/bash
TELEGRAM_WINDOW="$(
swaymsg -t get_tree | \
jq -r '.. | select(.app_id? == "org.telegram.desktop") | .id' | \
head -n 1
)"
readonly TELEGRAM_WINDOW
if [ -z "${TELEGRAM_WINDOW}" ]; then
echo "Error: Telegram not found"
exit 0
fi
swaymsg "[con_id=${TELEGRAM_WINDOW}] focus"
sleep 0.2
wtype -M ctrl l
swaymsg workspace back_and_forth
exit 0

View File

@ -1,26 +0,0 @@
#!/bin/bash
set -eu
current_monitor=$(swaymsg -r -t get_workspaces | jq '.[] | select(.focused).output' | tr -d '"')
other_monitor=$(swaymsg -r -t get_outputs | jq -r ".[] | select(.active and .name != \"${current_monitor}\").name" | head -n 1)
if [ -z "${other_monitor}" ]; then
echo "No other active monitor found."
exit 1
fi
current_workspace=$(swaymsg -r -t get_workspaces | jq '.[] | select(.focused).name' | tr -d '"')
other_workspace=$(swaymsg -r -t get_workspaces | jq -r ".[] | select(.visible and .output == \"${other_monitor}\").name" | head -n 1)
if [ -n "${other_workspace}" ]; then
# Swap workspaces
swaymsg "workspace ${other_workspace}; move workspace to output ${current_monitor}"
swaymsg "workspace ${current_workspace}; move workspace to output ${other_monitor}"
swaymsg "workspace ${other_workspace}"
else
# Just move current workspace if target is empty
swaymsg "move workspace to output ${other_monitor}"
fi

View File

@ -1,3 +0,0 @@
color=000000
ignore-empty-password
show-failed-attempts

View File

@ -1,18 +0,0 @@
[Unit]
Description=MPV Audio Player Service
Documentation=man:mpv(1)
After=sound.target graphical-session.target
Wants=sound.target
[Service]
Type=simple
ExecStart=%h/.local/bin/mpv-service.sh
Restart=on-failure
RestartSec=5
Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=%t/bus
Environment=XDG_RUNTIME_DIR=%t
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=default.target

View File

@ -1,17 +0,0 @@
[Unit]
Description=SSH proxy
Requires=default.target
After=default.target
# ln -s % ~/.config/systemd/user
# systemctl --user enable --now ssh-proxy@server.vpn
[Service]
Type=simple
ExecStart=/usr/bin/ssh -o ControlMaster=no -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -vCTN -D 127.0.0.1:1080 %i
Restart=always
RestartSec=3
StartLimitInterval=0
StartLimitBurst=0
[Install]
WantedBy=default.target

View File

@ -8,8 +8,7 @@ Type=simple
ExecStart=/usr/bin/tmux -D -L %u
ExecStop=/usr/bin/tmux -L %u kill-server
ExecReload=/usr/bin/tmux -L %u source-file %h/.config/tmux/tmux.conf
Restart=on-failure
ExecStartPost=/usr/bin/tmux -L %u new-session -d -s landing 'sh -c "tmux rename-window -t 1 landing; tmux set-option remain-on-exit on; figlet -w 200 -c -f big Landing; trap : INT; while true; do sleep 3600; done"'
Restart=always
[Install]
WantedBy=default.target

View File

@ -7,7 +7,7 @@ After=default.target
[Service]
Type=simple
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/x11vnc -noxdamage -rfbauth %h/.vnc/passwd -display :0 -forever -reopen -shared
ExecStart=/usr/bin/x11vnc -noxdamage -rfbauth %h/.vnc/passwd -display :0 -forever
Restart=on-failure
[Install]

View File

@ -36,7 +36,3 @@ set -g command-alias[110] default-layout="
resize-pane -x $_tmux_main_pane_size
select-layout '6c98,213x55,0,0{72x55,0,0,72,140x55,73,0,73}'
"
set -g command-alias[111] enable-zoom='
if -F "#{window_zoomed_flag}" "" "resize-pane -Z"
'

View File

@ -3,7 +3,6 @@
set -g prefix C-b
bind C-b send-prefix
bind C-и send-prefix
# Toggle local tmux mappings to allow control remote tmux
@ -19,42 +18,11 @@ bind -T off F12 {
set status on
}
bind WheelUpPane send-keys -N 2 scroll-up
bind WheelDownPane send-keys -N 2 scroll-Down
bind F12 send-keys F12
# View current pane in editor
bind y {
capture-pane -J
save-buffer /tmp/tmux-buffer
delete-buffer
display-popup -E -w 90% -h 80% "nvim /tmp/tmux-buffer"
}
# View current buffer in editor
bind Y {
capture-pane -J -S - -E -
save-buffer /tmp/tmux-buffer
delete-buffer
display-popup -E -w 90% -h 80% "nvim /tmp/tmux-buffer"
}
bind t display-popup -E -h 70% -w 60% -d "${HOME}"
bind c display-menu \
calendar c {
display-popup -w 33% -h 70% "cal -my"
} \
time t {
display-popup -w 50% -h 17% "watch -t -n 1 'figlet -ct -f big \"$(date \"+%H : %M : %S\")\"'"
} \
weather w {
display-popup -h 80% -w 60% "zsh -ic 'weather \$CITY'"
}
bind s choose-tree-index
# Switch new session
@ -62,21 +30,14 @@ bind n new-session -c ~
# Switch new named session
bind N command-prompt -p "New session:" "new-session -A -s '%1' -c ~"
bind x if -F "#{?#{==:#{client_session},landing},0,1}" \
"confirm-before -p \"kill current session? (y/n)\" kill-session" \
"display-message 'Cannot kill session: landing'"
bind X if -F "#{?#{==:#{client_last_session},landing},0,1}" \
"confirm-before -p \"kill last session [#{client_last_session}]? (y/n)\" \"kill-session -t #{client_last_session} \\; display-message 'Killed last session'\"" \
"display-message 'Cannot kill session: landing'"
bind x confirm-before -p "kill current session? (y/n)" "kill-session"
bind X confirm-before -p "kill last session [#{client_last_session}]? (y/n)" "kill-session -t #{client_last_session} \; display-message \"Killed last session\""
bind C-x confirm-before -p "kill other sessions? (y/n)" "kill-session -a"
bind q if -F "#{?#{==:#{client_session},landing},0,1}" \
"confirm-before -p \"kill current pane? (y/n)\" kill-pane" \
"display-message 'Cannot kill session: landing'"
bind Q if -F "#{?#{==:#{window_name},landing},0,1}" \
"confirm-before -p \"kill current window? (y/n)\" kill-window" \
"display-message 'Cannot kill session: landing'"
bind q confirm-before -p "kill current pane? (y/n)" "kill-pane"
bind Q kill-window
bind C-q confirm-before -p "kill other windows? (y/n)" "kill-window -a"
bind d detach
bind D choose-client -Z
@ -86,6 +47,9 @@ bind r command-prompt -I '#W' -p "New window name:" "rename-window '%%'"
bind R command-prompt -I '#S' -p "New session name:" "rename-session '%%'"
bind H command-prompt -p "Remote host:" "new-session -s 'ssh-%1' -A ssh %1 \; set default-command 'ssh %1' \; set remain-on-exit on"
bind ';' command-prompt
@ -134,16 +98,16 @@ bind i detect-panes
# Windows navigation
bind -n M-1 if-shell 'tmux new-window -t 1 -n 1 -c "#{pane_current_path}"' '' 'select-window -t 1'
bind -n M-2 if-shell 'tmux new-window -t 2 -n 2 -c "#{pane_current_path}"' '' 'select-window -t 2'
bind -n M-3 if-shell 'tmux new-window -t 3 -n 3 -c "#{pane_current_path}"' '' 'select-window -t 3'
bind -n M-4 if-shell 'tmux new-window -t 4 -n 4 -c "#{pane_current_path}"' '' 'select-window -t 4'
bind -n M-5 if-shell 'tmux new-window -t 5 -n 5 -c "#{pane_current_path}"' '' 'select-window -t 5'
bind -n M-6 if-shell 'tmux new-window -t 6 -n 6 -c "#{pane_current_path}"' '' 'select-window -t 6'
bind -n M-7 if-shell 'tmux new-window -t 7 -n 7 -c "#{pane_current_path}"' '' 'select-window -t 7'
bind -n M-8 if-shell 'tmux new-window -t 8 -n 8 -c "#{pane_current_path}"' '' 'select-window -t 8'
bind -n M-9 if-shell 'tmux new-window -t 9 -n 9 -c "#{pane_current_path}"' '' 'select-window -t 9'
bind -n M-0 if-shell 'tmux new-window -t 10 -n 10 -c "#{pane_current_path}"' '' 'select-window -t 10'
bind -n M-1 if-shell 'tmux select-window -t 1' '' 'new-window -t 1 -n 1 -c "#{pane_current_path}"'
bind -n M-2 if-shell 'tmux select-window -t 2' '' 'new-window -t 2 -n 2 -c "#{pane_current_path}"'
bind -n M-3 if-shell 'tmux select-window -t 3' '' 'new-window -t 3 -n 3 -c "#{pane_current_path}"'
bind -n M-4 if-shell 'tmux select-window -t 4' '' 'new-window -t 4 -n 4 -c "#{pane_current_path}"'
bind -n M-5 if-shell 'tmux select-window -t 5' '' 'new-window -t 5 -n 5 -c "#{pane_current_path}"'
bind -n M-6 if-shell 'tmux select-window -t 6' '' 'new-window -t 6 -n 6 -c "#{pane_current_path}"'
bind -n M-7 if-shell 'tmux select-window -t 7' '' 'new-window -t 7 -n 7 -c "#{pane_current_path}"'
bind -n M-8 if-shell 'tmux select-window -t 8' '' 'new-window -t 8 -n 8 -c "#{pane_current_path}"'
bind -n M-9 if-shell 'tmux select-window -t 9' '' 'new-window -t 9 -n 9 -c "#{pane_current_path}"'
bind -n M-0 if-shell 'tmux select-window -t 10' '' 'new-window -t 10 -n 10 -c "#{pane_current_path}"'
# Moving pane to window by Alt+Shift+Number
@ -169,7 +133,7 @@ bind -r ">" swap-window -d -t +1
# Windows splitting
bind -n M-Enter split-window -d -h -b -l $_tmux_other_pane_size -c "#{pane_current_path}"
bind -n M-Enter split-window -h -b -l $_tmux_other_pane_size -c "#{pane_current_path}"
bind -n M-t split-window -v -l 20% -c "#{pane_current_path}"
bind \\ split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
@ -186,27 +150,17 @@ bind -n M-Tab swap-pane -t '{left-of}'
# Copy mode
setw -g mode-keys vi
bind v copy-mode
bind -n M-V copy-mode
bind -r p paste-buffer
bind C-p choose-buffer
bind -T copy-mode-vi C-v {
send-keys -X rectangle-toggle
if -F '#{selection_active}' '' 'send-keys -X begin-selection'
}
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "copy"
bind MouseDrag1Pane copy-mode
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "copy"
bind -r p run-shell "pasta | tmux load-buffer - && tmux paste-buffer -p"
bind -r з run-shell "pasta | tmux load-buffer - && tmux paste-buffer -p"
bind -r P paste-buffer -p
## Toggle selection
bind -T copy-mode-vi v if -F '#{selection_active}' 'send-keys -X clear-selection' 'send-keys -X begin-selection'
bind -T copy-mode-vi Escape if -F '#{selection_active}' 'send-keys -X clear-selection' 'send-keys -X cancel'
bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind -T copy-mode-vi C-v send-keys -X rectangle-toggle
bind -T copy-mode-vi Escape send-keys -X cancel
bind -T copy-mode-vi C-c send-keys -X cancel
bind -T copy-mode-vi q send-keys -X cancel
@ -214,12 +168,15 @@ bind -T copy-mode-vi q send-keys -X cancel
bind -T copy-mode-vi WheelUpPane select-pane \; send-keys -X -N 2 scroll-up
bind -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 2 scroll-down
## Search all files in buffer
bind-key f copy-mode \; send-keys -X search-backward \
'(^|/|\<|[[:space:]"])((\.|\.\.)|[[:alnum:]~_"-]*)((/[][[:alnum:]_.#$%&+=@"-]+)+([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)|(/[][[:alnum:]_.#$%&+=@"-]+){2,}([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)?|(\.|\.\.)/([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?))'
# Session managment
bind a display-popup -EE -w 80% -h 80% -B '~/.config/tmux/scripts/attach_session.sh'
bind s display-popup -EE -w 80% -h 80% -B '~/.config/tmux/scripts/start_session.sh'
bind S display-popup -EE -w 40% -h 80% -B '~/.config/tmux/scripts/start_projects.sh'
bind 1 run-shell ~/.tmux/01.sh
bind 2 run-shell ~/.tmux/02.sh
bind 3 run-shell ~/.tmux/03.sh
bind 4 run-shell ~/.tmux/04.sh
bind 5 run-shell ~/.tmux/05.sh
bind 6 run-shell ~/.tmux/06.sh
bind 7 run-shell ~/.tmux/07.sh
bind 8 run-shell ~/.tmux/08.sh
bind 9 run-shell ~/.tmux/09.sh
bind 0 run-shell ~/.tmux/10.sh

View File

@ -18,7 +18,7 @@ set -g repeat-time 400
set -g base-index 1
set -g pane-base-index 1
set -g renumber-windows on
set -g renumber-windows off
set -g history-limit 10000
@ -36,4 +36,12 @@ set -g terminal-overrides[101] "xterm-256color:Tc"
set-hook -g after-new-session[101] 'rename-window -t 1 1'
set -g update-environment "PATH DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY TERM LANG LC_ALL COLORTERM EDITOR VISUAL SWAYSOCK WAYLAND_DISPLAY"
set -g update-environment[101] 'DISPLAY'
set -g update-environment[102] 'WINDOWID'
set -g update-environment[103] 'XAUTHORITY'
set -g update-environment[104] 'SSH_CLIENT'
set -g update-environment[105] 'SSH_ASKPASS'
set -g update-environment[106] 'SSH_AUTH_SOCK'
set -g update-environment[107] 'SSH_AGENT_PID'
set -g update-environment[108] 'SSH_CONNECTION'
set -g update-environment[109] 'SSH_TTY'

View File

@ -9,6 +9,3 @@ set -g @plugin 'laktak/extrakto'
set -g @extrakto_popup_size '40%'
set -g @extrakto_key 'e'
set -g @extrakto_fzf_unset_default_opts "false"
set -g @extrakto_insert_key 'enter'
set -g @extrakto_copy_key 'tab'
set -g @extrakto_help_key 'ctrl-/'

View File

@ -1 +1,3 @@
# vim: ft=tmux
set detach-on-destroy on

View File

@ -1,27 +0,0 @@
#!/bin/sh
readonly tmux_list_sessions_script="${HOME}/.config/tmux/scripts/list_sessions.sh"
readonly tmux_kill_session_script="${HOME}/.config/tmux/scripts/kill_session.sh"
export FZF_DEFAULT_OPTS="\
${FZF_DEFAULT_OPTS}
--no-multi
--marker=''
--border=rounded
--border-label-pos=bottom
--border-label=' Attach session '
--color='border:blue,label:blue'
--preview-window=follow
--preview='tmux capture-pane -p -e -t {1}'
--bind
ctrl-x:execute\(${tmux_kill_session_script}\ {1}\)+reload\(${tmux_list_sessions_script}\),\
load:reload\(${tmux_list_sessions_script}\;sleep\ 1\)\
"
session_to_attach="$("${tmux_list_sessions_script}" | fzf | awk '{printf $1}')"
readonly session_to_attach
if [ -n "${session_to_attach}" ]; then
tmux switch-client -t "${session_to_attach}"
fi

View File

@ -1,7 +0,0 @@
#!/bin/sh
if [ "${1}" = "landing" ]; then
exit 0
fi
tmux kill-session -t "${1}"

View File

@ -1,15 +0,0 @@
#!/bin/sh
current_session="$(tmux display-message -p '#S')"
readonly current_session
last_session="$(tmux display-message -p '#{client_last_session}')"
readonly last_session
sessions="$(tmux list-session -F '#S#{?session_attached, (attached) , }')"
sessions="$(echo "${sessions}" | sed "s/^${current_session} /${current_session} (current) /")"
sessions="$(echo "${sessions}" | sed "s/^${last_session} /${last_session} (last) /")"
readonly sessions
echo "${sessions}"

View File

@ -1,35 +0,0 @@
#!/bin/sh
export FZF_DEFAULT_OPTS="\
${FZF_DEFAULT_OPTS}
--no-multi
--marker=''
--border=rounded
--border-label-pos=bottom
--border-label=' Start session '
--color='border:grey,label:grey'
"
project_dir="$(find "${HOME}" -xdev -maxdepth 3 -type d -not -path '*/.*' | sed "s%^${HOME}%~%" | fzf | sed "s%^~%${HOME}%")"
readonly project_dir
if [ -z "${project_dir}" ]; then
exit 0
fi
if [ ! -d "${project_dir}" ]; then
printf 'Directory "%s" not found' "${project_dir}" >&2
exit 1
fi
session="$(basename "${project_dir}" | sed 's/\./_/g')"
if ! tmux has-session -t="${session}" 2>/dev/null; then
tmux new-session -d -n 1 -c "${project_dir}" -s "$(basename "${project_dir}")"
fi
tmux switch-client -t "${session}"

View File

@ -1,41 +0,0 @@
#!/bin/sh
readonly TMUX_SESSIONS="${HOME}/.tmux"
readonly EDITOR="nvim"
export FZF_DEFAULT_OPTS="\
${FZF_DEFAULT_OPTS}
--no-multi
--marker=''
--border=rounded
--border-label-pos=bottom
--border-label=' Start session '
--color='border:green,label:green'
--preview='highlight -O ansi '${TMUX_SESSIONS}/{1}''
--bind
ctrl-e:execute\(${EDITOR}\ \"${TMUX_SESSIONS}/{1}\"\)\
"
current_session="$(tmux display-message -p '#S')"
readonly current_session
existing_sessions="$(tmux list-session -F '#S')"
readonly existing_sessions
sessions="$(find "${TMUX_SESSIONS}/" -type f -executable -exec basename {} \;)"
sessions="$(echo "${sessions}" | sed "s/^${current_session}/${current_session} (current)/")"
for _s in $existing_sessions
do
sessions="$(echo "${sessions}" | sed "s/^${_s}/${_s} (created)/")"
done
readonly sessions
session_file="$(echo "${sessions}" | fzf | awk '{printf $1}')"
readonly session_file
if [ -n "${session_file}" ]; then
"${TMUX_SESSIONS}/${session_file}"
fi

View File

@ -1,10 +1,10 @@
# vim: ft=tmux
_tmux_color_inactive_background="terminal" # "colour236"
_tmux_color_inactive_background="colour236"
_tmux_color_inactive_foreground="colour247"
_tmux_color_main_background="terminal"
_tmux_color_border="colour12"
_tmux_color_border="colour24"
_tmux_color_menu="colour24"
_tmux_color_activity_style="colour239"

View File

@ -1,42 +0,0 @@
{
"layer": "bottom",
"position": "bottom",
"modules-left": [
"sway/workspaces",
"sway/mode",
],
"modules-center": [],
"modules-right": [
"sway/language",
"clock",
"tray"
],
"sway/workspaces": {
"disable-scroll": true
},
"clock": {
"format": " {:%F %a  %H:%M}",
"format-alt": " {:%A, %B %d, %Y (%R)}",
"tooltip-format": "<tt><small>{calendar}</small></tt>",
"calendar": {
"mode" : "year",
"mode-mon-col" : 3,
"weeks-pos" : "right",
"on-scroll" : 1,
"format": {
"months": "<span color='#ffead3'><b>{}</b></span>",
"days": "<span color='#ecc6d9'><b>{}</b></span>",
"weeks": "<span color='#99ffdd'><b>W{}</b></span>",
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
"today": "<span color='#ff6699'><b><u>{}</u></b></span>"
}
},
"actions": {
"on-click-right": "mode",
"on-scroll-up": "tz_up",
"on-scroll-down": "tz_down",
"on-scroll-up": "shift_up",
"on-scroll-down": "shift_down"
}
},
}

View File

@ -1,11 +1,8 @@
if [[ "${TTY}" =~ /dev/tty* ]]; then
if [[ "$TTY" =~ /dev/tty* ]]; then
setterm -blength=0
setfont cyr-sun16
fi
if [ "${TTY}" = "/dev/tty1" ] && [ -z "${WAYLAND_DISPLAY}" ] && [ -z "${DISPLAY}" ]; then
wayland_dir="${XDG_STATE_HOME:-${HOME}/.local/state}/wayland"
mkdir -p "${wayland_dir}"
exec sway >> "${wayland_dir}/sway.log" 2>&1
if [[ "$TTY" = "/dev/tty1" ]] && [[ $XDG_VTNR -eq 1 ]] && [[ -z $DISPLAY ]] && systemctl -q is-active graphical.target; then
exec startx >> ~/.xlogs 2>&1
fi

View File

@ -4,23 +4,20 @@
if \
[ "$(tty)" != "/dev/tty3" ] && \
command -v tmux &>/dev/null && \
[ -z "${TMUX}" ] && \
tmux -N -L "${USER}" list-sessions &>/dev/null
[ -z "$TMUX" ] && \
tmux -N -L "$USER" list-sessions &>/dev/null
then
if [ -n "${SSH_CLIENT}" ]; then
exec tmux -N -L "${USER}" new-session
fi
exec tmux -N -L "${USER}" new-session -A
exec tmux -N -L "$USER" new-session
fi
if [ -f "${ZDOTDIR}/sourcer" ]; then
source "${ZDOTDIR}/sourcer"
if [ -f "$ZDOTDIR/sourcer" ]; then
source "$ZDOTDIR/sourcer"
fi
if \
command -v tmux &>/dev/null && \
[ -n "${TMUX}" ] && \
[ -n "${SSH_CLIENT}" ]
[ -n "$TMUX" ] && \
[ -n "$SSH_CLIENT" ]
then
tmux source-file "${XDG_CONFIG_HOME}/tmux/remote.conf"
tmux source-file "$XDG_CONFIG_HOME/tmux/remote.conf"
fi

View File

@ -1,43 +0,0 @@
export ZCALC_HISTFILE="${HOME}/.zcalc_history"
autoload -U zcalc
function __format_number() {
local num="${1}"
local res
num="$(echo "${num}" | sed 's/\.$//')"
res="${num}"
if [[ "${num}" =~ ^[-]?[0-9]+$ ]]; then
res="$(LC_NUMERIC='en_US.UTF-8' printf "%'.20f\n" "${num}" | sed "s/,/_/g")"
fi
echo "${res}" | sed 's/\.\([0-9]*[1-9]\)0*$/.\1/; s/\.0*$//'
}
function __calc {
local result
result="$(ZDOTDIR="${HOME}" zcalc -f -e "$*" 2>/dev/null)"
__format_number "${result}"
}
aliases[calc]='noglob __calc'
aliases[=]='noglob __calc'
function accept-line() {
if [[ ${BUFFER} =~ '^[ ]?\(?[-+]?[0-9]+[^a-zA-Z]+' ]]; then
echo
test "${BUFFER[1]}" != " " && print -S -- "${BUFFER}" # saving the command to history
__calc "${BUFFER}"
BUFFER=
fi
zle .${WIDGET}
}
zle -N accept-line
# vim: ft=zsh

View File

@ -1,205 +1,20 @@
# vim: ft=zsh
_d() { true ; }
_f() { true ; }
_a() { true ; }
alias ls='ls --classify=auto --human-readable'
alias ll='ls -l'
alias la='ls --almost-all'
alias lla='ls -l --almost-all'
alias l.='ls --almost-all --ignore="*"'
alias ll.='ls -l --almost-all --ignore="*"'
if command -v eza &>/dev/null; then
alias eza='eza --classify=auto'
alias ls='eza'
alias ll='eza --long'
alias la='eza --all'
alias lla='eza --long --all'
alias l.='_d() ( cd "${1:-.}" && eza --list-dirs .* ; ); _d'
alias ll.='_d() ( cd "${1:-.}" && eza --long --all --list-dirs .* ; ); _d'
alias tree='eza --tree'
fi
GREP_OPTIONS=(
--color=auto
--binary-files=without-match
--exclude-dir=.git
--exclude-dir=.svn
)
alias grep='grep $GREP_OPTIONS'
alias g='noglob grep $GREP_OPTIONS --dereference-recursive --line-number'
alias f='_f() { find . -name "*${1}*" }; noglob _f'
alias _='sudo'
alias root='sudo --login TMOUT=450'
alias rm='rm --interactive=once --verbose --recursive --one-file-system'
alias mkdir='mkdir --parents --verbose'
alias md='mkdir --parents --verbose'
alias q='exit 0'
alias path='echo -e ${PATH//:/\\n}'
alias dh='dirs -v'
alias pd='popd'
# shorts
alias c='clear'
alias h='history -d -D 0'
alias j='jobs -l'
alias zshrc='source "${ZDOTDIR}/.zshrc" >/dev/null'
if command -v colordiff &>/dev/null; then
alias diff='colordiff'
fi
alias tar-it='tar -czf "../${PWD##*/}.tar.gz" .'
alias man='MANWIDTH=$((COLUMNS > 80 ? 80 : COLUMNS)) man'
# time
alias now='date +"%T"'
alias nowdate='date +"%d-%m-%Y"'
alias cal='cal --monday'
alias beeptime='beep -D 400 -l 400 -r "$(date +%I)" -f 440 -n -D 1000 -l 0 -n -D 800 -l 200 -f 880 -r "$(($(date +%M)/15+1))"'
# vim
alias vi='nvim'
alias svi="sudo --preserve-env nvim"
# git
for al in s d di co col cob ds u ps pst pl pr hs last lastd df amend br fuck sw swl swc swb
do
alias "g${al}"="git ${al}"
done
# net
alias ports='ss -tlnp'
alias wget='wget -c'
alias ip='ip -c'
alias fastping='ping -c 100 -i 0.1'
alias www='serveit'
# hardware
alias reboot='sudo /sbin/reboot'
alias poweroff='sudo /sbin/poweroff'
alias suspend='sudo systemctl suspend'
alias halt='sudo /sbin/halt'
alias shutdown='sudo /sbin/shutdown now'
alias meminfo='free -mlth'
# python
alias pipir='pip install -r requirements.txt'
alias pipar='pip list --not-required --format freeze | tee requirements.txt'
alias vd='deactivate'
# docker
alias dc='docker compose'
alias dcl='docker compose logs -f'
alias drmc='docker container prune'
alias drmi='docker image prune'
alias dpsa='docker ps -a'
alias gb='gobuild'
# tmux
alias dt='tmux detach'
# x11
alias caps='xdotool key Caps_Lock'
alias CAPS='xdotool key Caps_Lock'
alias colors='for i in {0..255}; do printf "\x1b[38;5;${i}mcolor${i} - ██████████\n"; done'
alias paste.thek4n.ru='curl --data-binary @- "https://paste.thek4n.ru/" 2>/dev/null'
alias pastewww='paste.thek4n.ru'
alias copy='tee /dev/stderr | \copy'
alias ssh='TERM=xterm-256color ssh'
alias sshn='ssh -S none'
alias black='magick canvas:none PNG:- | feh --class black -YFx -'
alias ex='extract'
# Notes
alias notes='note'
alias n='note'
alias ns='note sync'
alias ne='note edit'
alias nfe='note fe'
alias nfg='note fg'
alias ng='note git'
alias sn='mdpreview --browser --host localhost --port 0 "$(note --prefix)"'
# Cargo
alias cr='cargo run'
alias crr='cargo run --release'
alias cb='cargo build'
alias cbr='cargo build --release'
alias ct='cargo test'
alias cf='cargo fmt'
alias cl='cargo clippy --release'
alias p='player'
# :)
alias PINK='beep -f 233 -l 440 -n -f 349 -l 440 -n -f 196 -l 440 -n -f 330 -l 650'
alias -g L='2>&1 | $PAGER'
alias -g H='| head'
alias -g T='| tail'
alias -g L='| $PAGER'
alias -g HL='| highlight -O ansi -S '
alias -g JSON='| json HL json'
alias -g DI='| diff'
alias -g ?='| grep -i'
alias -g G='| grep -i'
alias -g C='| wc -l'
alias -g ?='| grep'
alias -g CO='--color=always'
alias -g ...='../..'
alias -g ....='../../..'
alias -g .3='../../..'
alias -g .....='../../../..'
alias -g .4='../../../..'
alias -g ......='../../../../..'
alias -g .5='../../../../..'
alias -g D="DISPLAY=:0.0"
alias -g XT="TERM=xterm"
alias -g GP="GOPROXY=direct"
alias -g DN=">/dev/null"
alias -g 2DN="2>/dev/null"
alias -g ADN="&>/dev/null"
alias -g BG="&>/dev/null &" # background
alias -g O="1>/dev/null"
alias -g R="2>/dev/null"
alias -g Q="&>/dev/null"
alias -g BG="Q &"
alias -g RED='2> >(while read line; do printf "\033[0;31m${line}\033[0m\n"; done)'
alias -g BEEP='&& beep -f 800 -l 250 -n -f 1000 -l 500 || beep -f 800 -l 250 -n -f 500 -l 500'
if [[ "${OSTYPE}" == "linux-android"* ]]; then
alias -g BEEP='&& termux-notification --sound --vibrate 500,1000,200'
fi
alias -g WAKE='BEEP; notify-send --urgency normal Wake'
alias -g PROXY='http_proxy="socks5://${SOCKS5_SERVER:-localhost}"'
alias -s mp4='vlc'
alias -s mp3='audacious'
alias -s flac='audacious'

View File

@ -1,81 +0,0 @@
: ${AUTOENV_AUTH_FILE:=~/.autoenv_auth}
: ${AUTOENV_FILE_ENTER:=.autoenv.zsh}
: ${AUTOENV_FILE_LEAVE:=.autoenv_leave.zsh}
: ${AUTOENV_DISABLED:=0}
: ${AUTOENV_HANDLE_LEAVE:=1}
_autoenv_hash_pair() {
local env_file="${1:A}"
if [ ! -s "${env_file}" ]; then
return 1
fi
local env_cksum=${${:-$(cksum "${env_file}")}[1]}
printf "%s:%s" "${env_file}" "${env_cksum}"
}
_autoenv_envfile_authorize() {
local env_cksum="$(_autoenv_hash_pair "${1}")"
local line
for line in $(<"${AUTOENV_AUTH_FILE}")
do
if [ "${line}" == "${env_cksum}" ]; then
return 0
fi
done
return 1
}
_autoenv_source_if_authorized() {
local file_to_source="${1}"
if [ ! -s "${file_to_source}" ]; then
return 1
fi
if ! _autoenv_envfile_authorize "${file_to_source}"; then
return 1
fi
source "${file_to_source}"
}
_autoenv() {
_autoenv_source_if_authorized "${PWD}/${AUTOENV_FILE_ENTER}"
}
_autoenv_leave() {
_autoenv_source_if_authorized "${OLDPWD}/${AUTOENV_FILE_LEAVE}"
}
if [[ "${AUTOENV_DISABLED}" != 1 ]]; then
autoload -U add-zsh-hook
add-zsh-hook chpwd _autoenv
if [[ "${AUTOENV_HANDLE_LEAVE}" == 1 ]]; then
add-zsh-hook chpwd _autoenv_leave
fi
_autoenv_source_if_authorized "${PWD}/${AUTOENV_FILE_ENTER}"
fi
autoenv-auth() {
echo >> "${AUTOENV_AUTH_FILE}"
if [ -s "${PWD}/${AUTOENV_FILE_ENTER}" ]; then
_autoenv_hash_pair "${PWD}/${AUTOENV_FILE_ENTER}" >> "${AUTOENV_AUTH_FILE}"
echo >> "${AUTOENV_AUTH_FILE}"
fi
if [ -s "${PWD}/${AUTOENV_FILE_LEAVE}" ]; then
_autoenv_hash_pair "${PWD}/${AUTOENV_FILE_LEAVE}" >> "${AUTOENV_AUTH_FILE}"
echo >> "${AUTOENV_AUTH_FILE}"
fi
}
# vim: ft=zsh

View File

@ -0,0 +1,23 @@
# calculator
autoload -U zcalc
function __calc {
zcalc -f -e "$*"
}
aliases[calc]='noglob __calc'
aliases[=]='noglob __calc'
function accept-line() {
if [[ $BUFFER =~ '^[ ]?\(?[-+]?[0-9]+[^a-zA-Z]+' ]]; then
echo
test "$BUFFER[1]" != " " && print -S -- "$BUFFER" # saving the command to history
__calc "$BUFFER" | sed 's/\.$//'
BUFFER=
fi
zle .$WIDGET
}
zle -N accept-line
# vim: ft=zsh

View File

@ -1,19 +1,15 @@
# enable completion features
# vim: ft=zsh
fpath=(~/.zfunc $fpath)
zmodload zsh/complist
setopt menucomplete
autoload -Uz compinit
compinit -d ~/.cache/zsh/.zcompdump
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path "${HOME}/.cache/zsh/.zcompcache"
zstyle ':completion:*' menu select
compinit -d ~/.cache/zcompdump
zstyle ':completion:*:*:*:*:*' menu select
zstyle ':completion:*' auto-description 'specify: %d'
zstyle ':completion:*' completer _expand _complete _correct _approximate
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' list-colors ''
zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
zstyle ':completion:*' rehash true
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
@ -21,72 +17,10 @@ zstyle ':completion:*' use-compctl false
zstyle ':completion:*' verbose true
zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'
zstyle ':completion:*:*:extract:*' file-patterns '*.tar* *.lzma *.bz2 *.zip *.7z'
zstyle ':completion:*' complete-options true
zstyle ':completion:*' squeeze-slashes true
zstyle ':completion:*:match:*' original only
zstyle ':completion:*:*:(eza|ls):*' file-sort modification
zstyle ':completion:*' completer _expand _complete _ignored _prefix _list
zstyle ':completion:*:correct:*' completer _correct
zstyle ':completion:*:approximate:*' completer _approximate
zstyle ':completion:*:correct:*' max-errors 1
zstyle ':completion:*:approximate:*' max-errors 1 numeric
zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS'
zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS'
zstyle ':completion:*' squeeze-slashes true
zstyle ':completion:*:cd:*' ignore-parents parent pwd
zstyle ':completion:*:messages' format ' %F{purple} -- %d --%f'
zstyle ':completion:*:warnings' format ' %F{red}-- no matches found --%f'
bindkey -M menuselect '^h' vi-backward-char
bindkey -M menuselect '^k' vi-up-line-or-history
bindkey -M menuselect '^j' vi-down-line-or-history
bindkey -M menuselect '^l' vi-forward-char
bindkey -M menuselect '^e' undo
bindkey -M menuselect '^[' accept
bindkey -M menuselect '^M' check-command
bindkey -M menuselect '^I' accept-and-infer-next-history
bindkey '^l' menu-select
setopt AUTO_PARAM_SLASH
setopt COMPLETE_IN_WORD
unsetopt menucomplete
autoload bashcompinit
bashcompinit
compdef _directories _d
compdef _files _f
compdef _directories mcd
_gcim_completion() {
local -a commit_types
commit_types=(
'fix:Fix errors'
'feat:New features'
'chore:Routine chore'
'docs:Documentation changes'
'style:Code style'
'refactor:Refactoring'
'perf:Performance improvements'
'test:Add tests'
'revert:Revert changes'
'ci:CI/CD changes'
'build:Build system changes'
)
_describe 'commit message type in format CT1: "type(optional-scope): description"' commit_types -S ''
}
function _gcim() {
noglob git cim "${*}"
}
compdef _gcim_completion _gcim
alias gcim='noglob _gcim'

View File

@ -1,72 +0,0 @@
# vim: ft=zsh
mcd() {
local dir
if [ -z "${1}" ]; then
dir="$(mktemp -ut "${USER:-user}.XXXX")"
else
dir="${1}"
fi
readonly dir
mkdir -p "${dir}" && cd "${dir}"
}
ve() {
local -r venv_name="${1:-venv}"
python3 -m venv "${venv_name}" && . "${venv_name}/bin/activate"
}
va() {
if [[ -v 1 ]]; then
if [[ -f "${1}/bin/activate" ]]; then
source "${1}/bin/activate"
return 0
fi
echo "va: error: virtual environment ${1} not found, use 'python3 -m venv ${1}'" >&2
return 1$
fi
if [[ -f "./venv/bin/activate" ]]; then
source "./venv/bin/activate"
return 0
fi
local activate_venv
activate_venv="$(find -P . -maxdepth 3 -type f -wholename '*/bin/activate' | sort | head -n 1)"
readonly activate_venv
if [[ -f "${activate_venv}" ]]; then
source "${activate_venv}"
return 0
else
echo "va: error: virtual environment not found, use python3 -m venv venv" >&2
return 1
fi
}
top-commands() {
local -r num_args="${1:-1}"
if ! [[ "${num_args}" =~ ^[1-9][0-9]*$ ]]; then
echo "error: usage: top-commands [N]" >&2
echo "error: N must be a positive non-zero integer." >&2
return 1
fi
fc -l -n 1 | awk 'NF' | awk -v n="$num_args" '{
end = (NF < n) ? NF : n
for (i = 1; i <= end; i++) {
printf "%s%s", $i, (i == end ? "\n" : OFS)
}
}' | sort | uniq -c | sort -nr | sed 's/^[[:space:]]*//'
}
cargo-init() {
if [[ ! -v 1 ]]; then
return 1
fi
cargo init "${1}" && cd "${1}" && \
return "${?}"
}

Some files were not shown because too many files have changed in this diff Show More