Add zsh, nvim, git configs

This commit is contained in:
Eric Torres 2022-05-24 23:48:16 -07:00
parent ff4b8ce57f
commit 684e15a0b3
22 changed files with 665 additions and 0 deletions

8
git/.config/git/config Normal file
View File

@ -0,0 +1,8 @@
# This is Git's per-user configuration file.
[user]
name = Eric Torres
email = erictorres4@protonmail.com
[core]
pager = nvim -R
[color]
pager = no

View File

@ -0,0 +1,11 @@
" Ctags
" ^] goes to the tag
command MakeTags !ctags -R .
" Show commands
set showcmd
" Use ripgrep for grepping
set grepprg=rg\ --vimgrep
" vim: ft=vim

View File

@ -0,0 +1,65 @@
" Source other files
source ~/.config/nvim/plugins.vim
source ~/.config/nvim/keybindings.vim
source ~/.config/nvim/commands.vim
source ~/.config/nvim/search.vim
" Source vim plugins
set rtp+=/usr/share/vim/vimfiles
" Allow buffers to go to background without needing to write to disk
set hidden
" Disables vi compatibility
set nocompatible
" Colors
set termguicolors
"set background=light
"colorscheme breezy
" Set tabs to 4 spaces
set expandtab
set tabstop=4
set shiftwidth=4
" Set syntax highlighting
syntax enable
" Set filetype detection
if has ("autocmd")
filetype on
filetype plugin on
filetype indent on
endif
" Set line numbers
set number
" Set clipboard to X clipboard buffer
set clipboard+=unnamedplus
" Indentation
set autoindent
set cindent
" Disables cursor-shape termcodes
" Stops the weird q from appearing when changing modes
set guicursor=
" Window Management
map <C-J> <C-W>j<C-W>_
map <C-K> <C-W>k<C-W>_
nmap <silent> <A-Up> :wincmd k<CR>
nmap <silent> <A-Down> :wincmd j<CR>
nmap <silent> <A-Left> :wincmd h<CR>
nmap <silent> <A-Right> :wincmd l<CR>
set wmh=0
" ---------- File finding ----------
" Provide tab completion
set path+=**
" Show all options when tab completing
set wildmenu

View File

@ -0,0 +1,17 @@
" Disable ex mode
map Q <Nop>
" Buffer Management
"nnoremap <F5> :buffers<cr>:buffer<Space>
" No arrows
map <up> <nop>
map <down> <nop>
map <left> <nop>
map <right> <nop>
" Spelling
inoremap <C-s> <Esc>:set spell!<cr>a
nnoremap <C-s> :set spell!<cr>
" vim: ft=vim

View File

@ -0,0 +1,24 @@
" Status line
set laststatus=0
set cmdheight=1
set nomodifiable " Only in version 6.0
set readonly
" My xterms have a navy-blue background, so I need this line too.
set background=dark
" Turn syntax on
syntax enable
" No menu bar and tool bar
set guioptions=aiMr
" Key bindings.
nmap b <C-B><C-G>
nmap q :q!<CR>
nmap <Up> <C-Y>
nmap <Down> <C-E>
" To type the following line, type *two* C-V's followed by two spaces. This
" is how you map the spacebar.
nmap ^V <C-F><C-G>

View File

@ -0,0 +1,118 @@
" vim-plug
call plug#begin('~/.local/share/nvim/plugins')
Plug 'christoomey/vim-tmux-navigator'
Plug 'dense-analysis/ale'
"Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
"Plug 'tweekmonster/deoplete-clang2'
Plug 'sbdchd/neoformat'
Plug 'junegunn/fzf.vim', { 'do': { -> fzf#install() } }
"Plug 'vim-airline/vim-airline'
"Plug 'vim-airline/vim-airline-themes'
call plug#end()
" Configuration for plugins
" ---------- Airline ----------
let g:airline#extensions#tabline#enabled = 2
let g:airline#extensions#tabline#fnamemod = ':t'
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
let g:airline#extensions#tabline#right_sep = ' '
let g:airline#extensions#tabline#right_alt_sep = '|'
let g:airline_left_sep = ' '
let g:airline_left_alt_sep = '|'
let g:airline_right_sep = ' '
let g:airline_right_alt_sep = '|'
let g:airline_theme='simple'
" --------- Ale ----------
let g:ale_linters = {
\ 'python': ['pylint'],
\ 'vim': ['vint'],
\ 'cpp': ['clang'],
\ 'c': ['clang']
\}
" ---------- Deoplete ----------
let g:deoplete#enable_at_startup = 1
" ---------- Deoplete-Clang ----------
"g:deoplete#sources#clang#libclang_path = "/Library/Developer/CommandLineTools/usr/lib/libclang.dylib"
"g:deoplete#sources#clang#clang_header = "/Library/Developer/CommandLineTools/usr/lib/clang"
" ---------- Fzf ----------
map <C-o> <esc>:FZF<cr>
" Setup for brew-installed fzf
set rtp+=/usr/local/opt/fzf
" Navigate to a tag
function! s:tags_sink(line)
let parts = split(a:line, '\t\zs')
let excmd = matchstr(parts[2:], '^.*\ze;"\t')
execute 'silent e' parts[1][:-2]
let [magic, &magic] = [&magic, 0]
execute excmd
let &magic = magic
endfunction
function! s:tags()
if empty(tagfiles())
echohl WarningMsg
echom 'Preparing tags'
echohl None
call system('ctags -R')
endif
call fzf#run({
\ 'source': 'cat '.join(map(tagfiles(), 'fnamemodify(v:val, ":S")')).
\ '| grep -v -a ^!',
\ 'options': '+m -d "\t" --with-nth 1,4.. -n 1 --tiebreak=index',
\ 'down': '40%',
\ 'sink': function('s:tags_sink')})
endfunction
command! Tags call s:tags()
map <C-t> <esc>:Tags<cr>
" Search lines in all open buffers
function! s:line_handler(l)
let keys = split(a:l, ':\t')
exec 'buf' keys[0]
exec keys[1]
normal! ^zz
endfunction
function! s:buffer_lines()
let res = []
for b in filter(range(1, bufnr('$')), 'buflisted(v:val)')
call extend(res, map(getbufline(b,0,"$"), 'b . ":\t" . (v:key + 1) . ":\t" . v:val '))
endfor
return res
endfunction
command! FZFLines call fzf#run({
\ 'source': <sid>buffer_lines(),
\ 'sink': function('<sid>line_handler'),
\ 'options': '--extended --nth=3..',
\ 'down': '60%'
\})
" Select buffer
function! s:buflist()
redir => ls
silent ls
redir END
return split(ls, '\n')
endfunction
function! s:bufopen(e)
execute 'buffer' matchstr(a:e, '^[ 0-9]*')
endfunction
nnoremap <silent> <f5> :call fzf#run({
\ 'source': reverse(<sid>buflist()),
\ 'sink': function('<sid>bufopen'),
\ 'options': '+m',
\ 'down': len(<sid>buflist()) + 2
\ })<CR>

View File

@ -0,0 +1,13 @@
" Search settings
set ignorecase
set smartcase
" Case-insensitive searching on normal mode
nnoremap * /\<<C-R>=expand('<cword>')<CR>\><CR>
nnoremap # ?\<<C-R>=expand('<cword>')<CR>\><CR>
" Wrap scans at the bottom and top
set wrapscan
" vim: ft=vim

View File

@ -0,0 +1,8 @@
Thermophile
Halophiles
Coli
Nonpolar
Carboxyl
Amphipathic
triacylglycerol
Desynthesized

Binary file not shown.

9
zsh/.config/zsh/.zprofile Executable file
View File

@ -0,0 +1,9 @@
emulate sh -c 'source /etc/profile'
# Notify on ssh login
IP="$(echo $SSH_CONNECTION | cut -d " " -f 1)"
HOSTNAME=$(hostname)
NOW=$(date +"%e %b %Y, %a %r")
EMAIL='erictorres4@protonmail.com'
echo "Login from ${IP} on ${HOSTNAME} on ${NOW}" | neomutt -s 'SSH Login Notification' "${EMAIL}" 2>/dev/null

32
zsh/.config/zsh/.zshenv Executable file
View File

@ -0,0 +1,32 @@
# Local Environment Variables
#export SSH_ASKPASS='/usr/bin/ksshaskpass ssh-add < /dev/null'
#export FZF_DEFAULT_COMMAND="fd --threads $(nproc) --type f --hidden --color=never"
# XDG Base Directory Support
export CARGO_HOME="${XDG_DATA_HOME}/.local/share}/cargo"
export GNUPGHOME="${XDG_DATA_HOME}/.local/share}/gnupg"
export GTK2_RC_FILES="${XDG_CONFIG_HOME}/.config}/gtk-2.0/gtkrc"
export _JAVA_OPTIONS="-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/.config}/java"
export KDEHOME="${XDG_CONFIG_HOME}/.config}/kde"
export LESSHISTFILE="${XDG_CACHE_HOME}/.cache}/less/history"
export PASSWORD_STORE_DIR="${XDG_DATA_HOME}/password-store"
export PYLINT_HOME="${XDG_CACHE_HOME}/pylint"
export PYTHON_EGG_CACHE="${XDG_CACHE_HOME}/python-eggs"
export PYTHON_STARTUP="${XDG_CONFIG_HOME}/python/pythonrc"
# nnn
#export NNN_OPTS_PROG=1
#export NNN_TRASH=1
#export NNN_USE_EDITOR=1
#export HOMEBREW_NO_AUTO_UPDATE=1
#export LD_LIBRARY_PATH="/Library/Developer/CommandLineTools/usr/lib/:$LD_LIBRARY_PATH"
export PAGER="nvimpager"
export AUR_PAGER="ranger"
# Manpager using vim/nvim
#export MANPAGER='nvim +Man!'
#export MANWIDTH=999

65
zsh/.config/zsh/.zshrc Executable file
View File

@ -0,0 +1,65 @@
# User-specific zsh configuration
# Default umask value
umask 0027
# ========== Functions ==========
# Fuzzy-find a file and open it in less
_run_fless() {
fless && zle reset-prompt
}
zle -N _run_fless
bindkey -M viins '^n' _run_fless
# Fuzzy find a file and then edit it
_run_fedit() {
fedit && zle reset-prompt
}
_run_etcedit() {
fedit --etc && zle reset-prompt
}
zle -N _run_fedit
bindkey -M viins '^o' _run_fedit
zle -N _run_etcedit
bindkey -M viins '^e' _run_etcedit
# Fuzzy cd from anywhere
# Dependencies
# * fzf
# * mlocate
cf() {
[[ -z "${*}" ]] && return 1
[[ ! -x $(which fzf) ]] && return 1
#dir="$(locate --all --ignore-case --null -- "${@}" | fzf --read0 --select-1 --exit-0)"
#dir="$(locate -0i -- "${@}" | fzf --read0 --select-1 --exit-0)"
dir="$(fd --ignore-file "${XDG_CONFIG_HOME}/fd_ignore" --print0 --type d -- "${@}" | fzf --read0 --select-1 --exit-0)"
[[ -z "${dir}" ]] && return 1
if [[ -f "${dir}" ]]; then
cd "${dir%/*}"
else
cd "${dir}"
fi
}
autoload -Uz cf
# Make a directory, then change into it
mkcd() {
[[ ! -d "${1}" ]] && mkdir --parents -- "${1}"
cd "${1}" || exit
}
autoload -Uz mkcd
[ -f "${ZDOTDIR}/conf.d/fzf.zsh" ] && source "${ZDOTDIR}/conf.d/fzf.zsh"
test -e /Users/etorres/.config/zsh/.iterm2_shell_integration.zsh && source /Users/etorres/.config/zsh/.iterm2_shell_integration.zsh || true

View File

@ -0,0 +1,151 @@
# ---------- Normal Aliases ----------
# Common commands
alias cp='cp -piv'
alias mv='mv -iv'
# Use safe-rm instead of rm
alias rm='safe-rm -iv'
alias rmdir='rmdir -v'
# Games
alias add-modrinth='ferium add-modrinth'
# Git
alias gar='git archive'
alias gb='git branch'
alias gd='git diff'
alias ga='git add'
alias gc='git commit'
alias gca='git commit -a'
alias gco='git checkout'
alias gconf='${EDITOR} -- "${XDG_CONFIG_HOME:-${HOME}/.config}/git/config"'
alias gmv='git mv'
alias grm='git rm'
alias gs='git status'
alias gtv='printf "%s" "$(git describe --long | sed "s/\([^-]*-\)g/r\1/;s/-/./g")"'
alias gnv='printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"'
alias gr='git reset'
# GPG
alias gdk='gpg --delete-keys'
alias gdsk='gpg --delete-secret-keys'
alias gik='gpg --import '
alias gk='gpg --list-keys'
alias grk='gpg --receive-keys'
alias gsk='gpg --list-secret-keys'
# Neomutt
alias neomuttconf='cd -- ${XDG_CONFIG_HOME:-${HOME}/.config}/neomutt'
alias neomuttrc='${EDITOR} ${XDG_CONFIG_HOME:-${HOME}/.config}/neomutt/neomuttrc'
# Neovim
alias nvimcomm='${EDITOR} ${XDG_CONFIG_HOME:-${HOME}/.config}/nvim/commands'
alias nvimconf='cd "${XDG_CONFIG_HOME:-${HOME}/.config}/nvim"'
alias nvimft='cd "${XDG_DATA_HOME:-${HOME}/.local/share}/nvim/site/ftplugin"'
alias nvimplug='${EDITOR} -- "${XDG_CONFIG_HOME:-${HOME}/.config}/nvim/plugins.vim"'
alias nvimkey='${EDITOR} -- "${XDG_CONFIG_HOME:-${HOME}/.config}/nvim/keybindings.vim"'
alias nvimrc='${EDITOR} -- "${XDG_CONFIG_HOME:-${HOME}/.config}/nvim/init.vim"'
alias swapdir='cd -- "${XDG_DATA_HOME:-${HOME}/.local/share}/nvim/swap"'
alias vmore='nvim -u "${XDG_CONFIG_HOME:-${HOME}/.config}/nvim/pager.vim" -'
#========= Package Management =========
# Arch Linux
alias aurget='aur sync -d aur'
alias -g autoremove='pacman -Rns $(pacman -Qtdq)'
alias checkaurupdates='aur sync -d aur --upgrades'
# alias does not work correctly for some reason
alias lspkg="pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h"
alias ql='pacman -Qql'
alias pacsearch='pacman -Ss'
alias rpmget='aur sync -d rpm'
alias -g updatemirrors="reflector --verbose --country 'United States' --latest 200 --age 24 --sort rate --save /etc/pacman.d/mirrorlist"
# ========== Packaging ==========
# Arch Linux
alias aurcache='cd ${XDG_CACHE_HOME}/aurutils/sync'
alias aurdir='cd /var/cache/pacman/aur'
alias customdir='cd /var/cache/pacman/custom'
alias gpkginit='cp /usr/share/pacman/PKGBUILD-vcs.proto ./PKGBUILD'
alias pkginit='cp /usr/share/pacman/PKGBUILD.proto ./PKGBUILD'
alias pa='makepkg --force --clean --cleanbuild --syncdeps --rmdeps && addpkg aur'
alias pc='makepkg --force --clean --cleanbuild --syncdeps --rmdeps && addpkg custom'
alias pr='makepkg --force --clean --cleanbuild --syncdeps --rmdeps && addpkg rpm'
# Personal
alias :q='exit'
alias ct='cptemplate'
alias less='less -i --'
alias la='ls --almost-all --color --group-directories-first --human-readable -l'
alias ls='ls --color --group-directories-first'
alias ll='ls --classify --color --group-directories-first --human-readable -l'
alias python='python3'
alias spcli='speedtest-cli --secure'
alias sshconfig='"${EDITOR}" -- ${HOME}/.ssh/config'
alias tmux='tmux -f "${XDG_CONFIG_HOME:-${HOME}/.config}"/tmux/tmux.conf'
alias tmuxrc='nvim -- "${XDG_CONFIG_HOME:-${HOME}/.config}"/tmux/tmux.conf'
alias tuir='tuir --no-flash'
alias wget='wget --hsts-file="${XDG_DATA_HOME}/wget-hsts"'
# Navigation
alias dirconf='"${EDITOR}" -- "${XDG_CONFIG_HOME:-${HOME}/.config}/user-dirs.dirs"'
alias dotfiles='cd "${HOME}/Dotfiles"'
alias xch='cd -- ${XDG_CONFIG_HOME:-${HOME}/.config}'
alias xcah='cd -- ${XDG_CACHE_HOME:-${HOME}/.cache}'
alias xdh='cd -- ${XDG_DATA_HOME:-${HOME}/.local/share}'
# Programming
# Use python-pytest-xdist plugin
#alias pytest='pytest --numprocesses=$(nproc)'
alias pyarchive='git archive -o rbackup-"$(python setup.py --version)".tar.gz --prefix=rbackup-"$(python setup.py --version)"/'
# ssh
alias scpe='scp -i "${HOME}/.ssh/empress"'
# system
alias myip='curl ifconfig.me'
alias restartfans='sudo systemctl restart fancontrol.service'
# zsh
alias zdotdir='cd -- ${ZDOTDIR:-${HOME}/.zsh}'
alias zshaliases='${EDITOR} -- ${ZDOTDIR:-${HOME}/.zsh}/conf.d/00-aliases.zsh'
alias zbindings='${EDITOR} -- ${ZDOTDIR:-${HOME}/.zsh}/conf.d/keybindings.zsh'
alias zconf='cd -- ${ZDOTDIR:-${HOME}/.zsh}/conf.d'
alias zfuncs='cd -- ${ZDOTDIR:-${HOME}/.zsh}/conf.d/functions'
alias zhist='${EDITOR} -- ${HISTFILE}'
alias zmod='cd -- ${ZDOTDIR:-${HOME}/.zsh}/conf.d/modules'
alias zpath='${EDITOR} -- ${ZDOTDIR:-${HOME}/.zsh}/conf.d/path.zsh'
alias zprompt='${EDITOR} -- ${ZDOTDIR:-${HOME}/.zsh}/conf.d/prompt.zsh'
alias zshrc='${EDITOR} -- ${ZDOTDIR:-${HOME}/.zsh}/.zshrc'
alias zshrefresh='source -- ${ZDOTDIR:-${HOME}/.zsh}/.zshrc'
alias zshenv='${EDITOR} -- ${ZDOTDIR:-${HOME}/.zsh}/.zshenv'
# ---------- Parameterized Aliases ----------
lsbin() {
if [[ -n $1 ]]; then
pacman -Qql $1 | rg bin
else
return 0
fi
}
rgenv () {
if [[ -n $1 ]]; then
env | rg --ignore-case $1
else
return 0
fi
}
stow-config () {
local dotfile_dir="${HOME}/Dotfiles"
for conf in "${@}"; do
if [[ -n ${conf} ]]; then
mkdir --parents "${dotfile_dir}/${conf}/.config"
mv "${XDG_CONFIG_HOME}/${conf}" "${dotfile_dir}/${conf}/.config"
cd "${dotfile_dir}" && stow "${conf}"
cd -
else
continue
fi
done
}

View File

@ -0,0 +1,4 @@
# bindkey -M viins '^r' history-incremental-search-backward
# bindkey -M vicmd '^r' history-incremental-search-backward
# vim: syntax=zsh

View File

@ -0,0 +1,27 @@
## zsh-completion-generator
#GENCOMPL_FPATH="${HOME}/zsh-completions"
#source '/usr/share/zsh-completion-generator/zsh-completion-generator.plugin.zsh'
autoload -Uz compinit
compinit
# Tab completion menu
zstyle ':completion:*' menu select
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*:*:kill:*' menu yes select
zstyle ':completion:*:kill:*' force-list always
zstyle ':completion:*:*:killall:*' menu yes select
zstyle ':completion:*:killall:*' force-list always
# Disabling this option enables tab completion for aliases
#setopt complete_aliases
# Case insensitive completion
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*'
# Automatically load new executables
zstyle ':completion:*' rehash true
# vim: syntax=zsh

View File

@ -0,0 +1,10 @@
# Setup fzf
# ---------
# Auto-completion
# ---------------
[[ $- == *i* ]] && source "/usr/share/fzf/completion.zsh"
# Key bindings
# ------------
source "/usr/share/fzf/key-bindings.zsh"

View File

@ -0,0 +1,14 @@
### PROCESS
# mnemonic: [K]ill [P]rocess
# show output of "ps -ef", use [tab] to select one or multiple entries
# press [enter] to kill selected processes and go back to the process list.
# or press [escape] to go back to the process list. Press [escape] twice to exit completely.
kp() {
local pid=$(ps -ef | sed 1d | eval "fzf ${FZF_DEFAULT_OPTS} -m --header='[kill:process]'" | awk '{print $2}')
if [[ -n "${pid}" && "${pid}" != "x" ]]; then
echo ${pid} | xargs kill -${1:-9}
kp
fi
}

View File

@ -0,0 +1,14 @@
# automatically cd into a given directory
setopt autocd
# history options
setopt append_history
setopt hist_ignore_all_dups
# command correction
setopt correctall
# prevent accidental overwriting of a file
setopt noclobber
# vim: syntax=zsh

View File

@ -0,0 +1,4 @@
# PATH variable configuration
path=("${HOME}/Scripts/Arch Linux Helpers" $path)
export PATH

View File

@ -0,0 +1,35 @@
# allows substitution in the prompt
setopt PROMPT_SUBST
# ========== VCS info ==========
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' check-for-changes true
#zstyle ':vcs_info:git*' formats "%{$fg[grey]%} %{$fg[blue]%}%b%{$reset_color%}%m %u %c%{$reset_color%}"
zstyle ':vcs_info:git*' formats "%{$fg[grey]%}%{$fg[blue]%}%b%{$reset_color%}%m %u %c%{$reset_color%}"
# ========== Vim Command Mode ==========
vim_ins_mode='ins'
vim_cmd_mode='cmd'
vim_mode=${vim_ins_mode}
zle-keymap-select() {
vim_mode="${${KEYMAP/vicmd/${vim_cmd_mode}}/(main|viins)/${vim_ins_mode}}"
zle reset-prompt
}
zle -N zle-keymap-select
zle-line-finish() {
vim_mode=${vim_ins_mode}
}
zle -N zle-line-finish
# ========== Final Prompt ==========
precmd() {
vcs_info
}
#PS1='%F{blue}%n%f@%m %F{green}%3~%f > '
#RPS1='%F{green}${vim_mode}%f ${vcs_info_msg_0_} [%F{red}%?%f]'
PS1='%F{green}%3~%f %F{blue}>%f '
RPS1='${vcs_info_msg_0_} [%F{red}%?%f]'

View File

@ -0,0 +1,23 @@
# Press escape twice to prepend the previous command with "sudo"
sudo-command-line() {
[[ -z ${BUFFER} ]] && zle up-history
if [[ ${BUFFER} == sudo\ * ]]; then
LBUFFER="${LBUFFER#sudo }"
elif [[ ${BUFFER} == $EDITOR\ * ]]; then
LBUFFER="${LBUFFER#$EDITOR }"
LBUFFER="sudoedit $LBUFFER"
elif [[ ${BUFFER} == sudoedit\ * ]]; then
LBUFFER="${LBUFFER#sudoedit }"
LBUFFER="$EDITOR $LBUFFER"
else
LBUFFER="sudo $LBUFFER"
fi
}
zle -N sudo-command-line
# Defined shortcut keys: [Esc] [Esc]
bindkey -M viins "\e\e" sudo-command-line
bindkey -M vicmd "\e\e" sudo-command-line
# vim: syntax=zsh

View File

@ -0,0 +1,13 @@
## load a tmux session
_load_tmux() {
if [[ -n "${TMUX}" ]]; then
echo "Already in a tmux session."
else
tmux
fi
}
zle -N _load_tmux
bindkey -M viins "^y" _load_tmux
# vim: syntax=zsh