First commit

This commit is contained in:
Alexey Norets 2025-12-23 12:46:07 +03:00
commit da3d3a5bcc
4 changed files with 1849 additions and 0 deletions

1549
.zsh_history Normal file

File diff suppressed because it is too large Load Diff

111
.zshrc Normal file
View File

@ -0,0 +1,111 @@
export PATH=/Users/norets/.cargo/bin:$PATH
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PATH=/Users/norets/.local/bin:$PATH
export PATH=/usr/local/opt/llvm/bin:$PATH
export PATH=/usr/local/sbin:$PATH
export PATH=/usr/bin:$PATH
export PATH=/usr/sbin:$PATH
export PATH=/usr/local/opt/make/libexec/gnubin:$PATH
export PATH=/Library/TeX/texbin:$PATH
export PATH="/usr/local/bin:$PATH"
export PATH="/Users/norets/opt/neovim/bin:$PATH"
# export ANDROID_SDK_ROOT=/Users/norets/opt
# export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin
# export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/platform-tools
# export PATH=$PATH:$ANDROID_SDK_ROOT/build-tools/30.0.3
# export PATH=/usr/local/opt/gnu-sed/libexec/gnubin:$PATH
export TOKEN_RO=t.zw2IDNZvkfFaAK3jUZUUSay-Yc_Gi2Um-7lhmBCPVEAZtQ8lKJqLGb75vFKJwDCUOkN5eClLOipB5DDWqEq0RA
# source /usr/local/share/zsh-autocomplete/zsh-autocomplete.plugin.zsh
# Folders with projects
# export WORKON_HOME=$HOME/.virtualenvs
# export PROJECT_HOME=$HOME/projects
export LANG="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
# Functions for zsh.
source ~/.config/zsh/my_zsh_func.zsh
# History
# хранить историю в указанном файле
export HISTFILE=~/.config/zsh/.zsh_history
# максимальное число команд, хранимых в сеансе
export HISTSIZE=10000
export SAVEHIST=$HISTSIZE
# включить историю команд
setopt APPEND_HISTORY
# убрать повторяющиеся команды, пустые строки и пр.
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_IGNORE_SPACE
setopt HIST_REDUCE_BLANKS
setopt SHARE_HISTORY
alias server1c='ssh norets@135.181.253.33'
alias vdsina='ssh norets@88.210.3.57'
alias twc='ssh norets@147.45.135.158'
alias turcia='ssh root@65.108.243.87'
# alias l='eza --tree --level=1 --icons=always --no-user --no-time --no-permissions --group-directories-first'
alias ls='ls --color=always'
alias ll='ls -lah'
alias emacs='~/programm_sources/emacs/nextstep/Emacs.app/Contents/MacOS/Emacs --init-directory ~/.config/emacs.terminal --eval "(x-focus-frame nil)"'
alias enw='~/programm_sources/emacs/nextstep/Emacs.app/Contents/MacOS/Emacs -nw --init-directory ~/.config/emacs.terminal/'
alias ctags="`brew --prefix`/bin/ctags"
#
# alias enw='emacs -nw'
# alias ec='/usr/local/bin/emacsclient -nw -c "$@"'
# alias ega='exa -lah --git'
# alias exat='exa -hT --git'
# alias nls='exa -la --color=always --git --group-directories-first $*'
# alias em='emacs -nw'
# alias doomem='emacs --with-profile doom'
# Привязываем клавишу для вызова функции (например, Ctrl+w)
# bindkey '^w' switch_or_create_tmux_session_widget
bindkey -s ^w "~/.config/zsh/tmux-sessionizer\n"
parse_git_branch() {
git branch 2> /dev/null | sed -n -e 's/^\* \(.*\)/[\1]/p'
}
setopt PROMPT_SUBST
# PROMPT='[%F{243}%n@%m%f %F{gray}%B%1~%b%f] %F{cyan}$(parse_git_branch)%f %F{yellow}>>%f '
PROMPT='[%n@%F{243}%m%f %F{gray}%1~%f]$ '
# COLOR_DEF='%f'
# COLOR_USR='%F{243}'
# COLOR_DIR='%F{197}'
# COLOR_GIT='%F{39}'
# # About the prefixed `$`: https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_03.html#:~:text=Words%20in%20the%20form%20%22%24',by%20the%20ANSI%2DC%20standard.
# NEWLINE=$'\n'
# # Set zsh option for prompt substitution
# setopt PROMPT_SUBST
# export PROMPT='${COLOR_USR}%n@%M ${COLOR_DIR}%d ${COLOR_GIT}$(parse_git_branch)${COLOR_DEF}${NEWLINE}%% '
# Auto sug
# source ~/.config/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# zsh
source <(fzf --zsh)
# fzf
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
autoload -U compinit promptinit
promptinit
# prompt pure
compinit
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # ignore case
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} = # colorz !
fpath=(/usr/local/share/zsh-completions $fpath)
# source /usr/local/share/zsh-syntax-highlighting.zsh
# export PATH="/usr/local/opt/m4/bin:$PATH"

141
my_zsh_func.zsh Normal file
View File

@ -0,0 +1,141 @@
# Start the tmux session if not alraedy in the tmux session
# if [[ ! -n $TMUX ]]; then
# # Get the session IDs
# session_ids="$(tmux list-sessions)"
# # Create new session if no sessions exist
# if [[ -z "$session_ids" ]]; then
# tmux new-session
# fi
# # Select from following choices
# # - Attach existing session
# # - Create new session
# # - Start without tmux
# create_new_session="Create new session"
# start_without_tmux="Start without tmux"
# choices="$session_ids\n${create_new_session}:\n${start_without_tmux}:"
# choice="$(echo $choices | fzf | cut -d: -f1)"
# selected_name=$(basename "$choice" | tr . _)
# if expr "$choice" : "[0-9a-zA-Z]*$" >&/dev/null; then
# # if expr "$choice" : "[0-9]*$" >&/dev/null; then
# # Attach existing session
# tmux attach-session -t "$choice"
# elif [[ "$choice" = "${create_new_session}" ]]; then
# # Create new session
# tmux new-session
# elif [[ "$choice" = "${start_without_tmux}" ]]; then
# # Start without tmux
# :
# fi
# fi
switch_or_create_tmux_session() {
# Если передан один аргумент, используем его
if [[ $# -eq 1 ]]; then
selected=$1
else
# Используем fzf для выбора директории
selected=$(find ~/.config ~/projects -mindepth 1 -maxdepth 1 -type d | fzf)
fi
# Если ничего не выбрано, выходим
if [[ -z $selected ]]; then
return 0
fi
# Получаем имя для сессии tmux, заменяя точки на подчеркивания
selected_name=$(basename "$selected" | tr . _)
# Проверяем, запущен ли tmux
tmux_running=$(pgrep tmux)
# Если tmux не запущен и мы не в сессии tmux, создаем новую сессию
if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then
tmux new-session -s $selected_name -c $selected
return 0
fi
# Создаем новую сессию, если такой еще нет
if ! tmux has-session -t=$selected_name 2> /dev/null; then
tmux new-session -ds $selected_name -c $selected
fi
# Переключаемся на существующую сессию, если она есть, или подключаемся к ней
if ! tmux switch-client -t $selected_name 2> /dev/null; then
tmux attach-session -t $selected_name
fi
}
zle -N switch_or_create_tmux_session_widget switch_or_create_tmux_session
# Function for cd and showing including files.
cd() {
# Переход в указанный каталог
builtin cd "$1"
# Печать полного пути к текущему каталогу
# Цвет текста:
BLACK='\033[0;30m' # ${BLACK} # чёрный цвет знаков
RED='\033[0;31m' # ${RED} # красный цвет знаков
GREEN='\033[0;32m' # ${GREEN} # зелёный цвет знаков
YELLOW='\033[0;33m' # ${YELLOW} # желтый цвет знаков
BLUE='\033[0;34m' # ${BLUE} # синий цвет знаков
MAGENTA='\033[0;35m' # ${MAGENTA} # фиолетовый цвет знаков
CYAN='\033[0;36m' # ${CYAN} # цвет морской волны знаков
GRAY='\033[0;37m' # ${GRAY} # серый цвет знаков
LRED='\033[1;31m'
NC='\033[0m'
echo "${MAGENTA}Current directory${NC}: ${YELLOW}$(pwd)${NC}"
# # Вывод содержимого каталога
# gls -aCAGF --color=always --group-directories-first
# eza -aAGF --color=always --group-directories-first
ls -aAGF --color=always
}
# Function for creating a new note in Obsidian.
cnn() {
# Основная директория с заметками для Obsidian
local notes_base_dir="$HOME/Library/Mobile Documents/iCloud~md~obsidian/Documents/Main"
# Проверяем, существует ли основная директория
if [ ! -d "$notes_base_dir" ]; then
echo "Папка с заметками не найдена: $notes_base_dir"
return 1
fi
# Добавляем пункт для создания новой папки в меню выбора
local selected_dir=$(echo -e "Создать новую папку\n$(find "$notes_base_dir" -mindepth 1 -maxdepth 1 -type d)" | fzf --prompt="Выберите папку")
# Если выбран пункт "Создать новую папку"
if [[ "$selected_dir" == "Создать новую папку" ]]; then
echo "Введите название новой папки:"
read new_dir_name
selected_dir="$notes_base_dir/$new_dir_name"
mkdir -p "$selected_dir"
echo "Создана новая папка: $selected_dir"
fi
# Если не выбрана папка и не создана новая
if [ -z "$selected_dir" ]; then
echo "Папка не выбрана. Отмена создания заметки."
return 1
fi
# Если аргумент передан, используем его как имя файла, иначе используем текущую дату и время
local file_name
if [ -n "$1" ]; then
file_name="$1"
else
file_name=$(date "+%Y-%m-%d-%H%M%S")
fi
local note_file="$selected_dir/$file_name.md"
# Создаем новый Markdown файл
touch "$note_file"
# Открываем файл в nvim с obsidian.nvim
nvim "$note_file"
}

48
tmux-sessionizer Executable file
View File

@ -0,0 +1,48 @@
#!/usr/bin/env bash
switch_to() {
if [[ -z $TMUX ]]; then
tmux attach-session -t $1
else
tmux switch-client -t $1
fi
}
has_session() {
tmux list-sessions | grep -q "^$1:"
}
hydrate() {
if [ -f $2/.tmux-sessionizer ]; then
tmux send-keys -t $1 "source $2/.tmux-sessionizer" c-M
elif [ -f $HOME/.tmux-sessionizer ]; then
tmux send-keys -t $1 "source $HOME/.tmux-sessionizer" c-M
fi
}
if [[ $# -eq 1 ]]; then
selected=$1
else
# If someone wants to make this extensible, i'll accept
# PR
selected=$(find ~/projects ~/.config ~/Nextcloud -mindepth 1 -maxdepth 1 -type d | fzf)
fi
if [[ -z $selected ]]; then
exit 0
fi
selected_name=$(basename "$selected" | tr . _)
tmux_running=$(pgrep tmux)
if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then
tmux new-session -s $selected_name -c $selected
hydrate $selected_name $selected
exit 0
fi
if ! has_session $selected_name; then
tmux new-session -ds $selected_name -c $selected
hydrate $selected_name $selected
fi
switch_to $selected_name