@ -0,0 +1,109 @@ | |||||
#!/bin/bash | |||||
set -o vi | |||||
bind -m vi-insert "\C-l":clear-screen | |||||
shopt -s extglob | |||||
HISTSIZE= | |||||
HISTFILESIZE= | |||||
export EDITOR='nvim' | |||||
export GIT_AUTHOR_NAME="Tovi Jaeschke-Rogers" | |||||
export GIT_AUTHOR_EMAIL="tovi@tovijaeschke.xyz" | |||||
export GIT_COMMITTER_NAME="Tovi Jaeschke-Rogers" | |||||
export GIT_COMMITTER_EMAIL="tovi@tovijaeschke.xyz" | |||||
export LESS='-R' | |||||
export LESSOPEN='|~/.lessfilter %s' | |||||
alias ls="ls --color=auto" \ | |||||
vb='nvim ~/.bashrc && source ~/.bashrc' \ | |||||
va='nvim ~/.config/aliasrc && source ~/.bashrc' | |||||
if [[ $(uname) != "Linux" ]]; then | |||||
test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash" || true | |||||
export HOMEBREW_NO_INSTALL_CLEANUP=1 | |||||
export GIT_AUTHOR_EMAIL="tovi.jaeschke-rogers@thirty4.com" | |||||
export GIT_COMMITTER_EMAIL="tovi.jaeschke-rogers@thirty4.com" | |||||
alias ls="ls -G" \ | |||||
vb='nvim ~/.bash_profile && source ~/.bash_profile' \ | |||||
va='nvim ~/.config/aliasrc && source ~/.bash_profile' | |||||
mount-hdd() { | |||||
if [ -z $1 ]; then | |||||
sudo umount /dev/disk2s1 && sudo /usr/local/bin/ntfs-3g /dev/disk2s1 /Volumes/NTFS -olocal -oallow_other | |||||
else | |||||
sudo umount /dev/$1 && sudo /usr/local/bin/ntfs-3g /dev/$1 /Volumes/NTFS -olocal -oallow_other | |||||
fi | |||||
} | |||||
fi | |||||
# set PATH so it includes user's private bin if it exists | |||||
if [ -d "$HOME/.local/bin" ] ; then | |||||
PATH="$PATH:$(du "$HOME/.local/bin/" | cut -f2 | tr '\n' ':')" | |||||
fi | |||||
source ~/.config/aliasrc | |||||
parse_git_branch() { | |||||
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' | |||||
} | |||||
export PS1=" \[\033[0;36m\]\t \[\033[0;35m\]\u\[\033[0;32m\]@\[\033[0;34m\]\h \[\033[32m\]\W\[\033[33m\]\$(parse_git_branch)\[\033[31m\] \n$\[\033[00m\] " | |||||
mkcd() { | |||||
if [ ! -d "$1" ]; then | |||||
mkdir -p "$1" && cd "$1" | |||||
elif [ -d "$1" ]; then | |||||
cd "$1" | |||||
else | |||||
echo "Error" | |||||
fi | |||||
} | |||||
# Go up directory structures | |||||
up() { | |||||
cd $(printf "%0.0s../" $(seq 1 $1)); | |||||
} | |||||
git() { | |||||
if [[ $@ == "mergetool" ]]; then | |||||
command git mergetool --no-gui | |||||
else | |||||
command git $@ | |||||
fi | |||||
} | |||||
# git branch -vv | grep 'gone\]' | awk ' { print $1 }' | xargs -p git branch -d | |||||
git-prune() { | |||||
if [[ $@ == "--apply" ]]; then | |||||
command git branch --merged develop | grep -vEw "develop$|master$" | xargs git branch -d | |||||
else | |||||
echo "Run \"git prune --apply\" to delete the following branches:" | |||||
command git branch --merged develop | grep -vEw "develop$|master$" | |||||
fi | |||||
} | |||||
color-diff() { | |||||
if [ -z ${1+x} ] || [ -z ${2+x} ]; then | |||||
echo "Usage: color-diff dir1/ dir2/" | |||||
return | |||||
fi | |||||
diff -bur $1 $2 | colordiff | less | |||||
} | |||||
export NVM_DIR="$HOME/.nvm" | |||||
[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" # This loads nvm | |||||
[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm" | |||||
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion | |||||
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh" |
@ -0,0 +1,26 @@ | |||||
#!/bin/sh | |||||
alias q='exit' \ | |||||
dd='sudo dd status=progress' \ | |||||
h="history | grep" \ | |||||
back='cd -' \ | |||||
b='cd -' \ | |||||
py='python3' \ | |||||
py2='python2' \ | |||||
v='nvim' \ | |||||
vim='nvim' \ | |||||
ka='killall' \ | |||||
grep='grep --color=auto' \ | |||||
egrep='grep --color=auto -E' \ | |||||
sshtj='ssh tovi@tovijaeschke.xyz' \ | |||||
extip='curl -s www.icanhazip.com' \ | |||||
ns='sudo nmap -p- -sV' \ | |||||
cc='rm -rf cache/* && php symfony cc' \ | |||||
pdu='php symfony propel:diff && php symfony propel:up' \ | |||||
foursync='php symfony four:sync' \ | |||||
ddate='date +%d-%m-%Y' \ | |||||
gitup='git push origin $(git rev-parse --abbrev-ref HEAD)' \ | |||||
gco='git checkout' \ | |||||
vv='nvim ~/.config/nvim/init.vim' \ | |||||
delorig='find . -name "*.orig" -exec rm {} \;' \ | |||||
delbak='find . -name "*.bak" -exec rm {} \;' \ | |||||
site-clone='wget --mirror --convert-links --adjust-extension --page-requisites --no-parent' |
@ -0,0 +1,204 @@ | |||||
let mapleader ="," | |||||
if ! filereadable(expand('~/.config/nvim/autoload/plug.vim')) | |||||
echo "Downloading junegunn/vim-plug to manage plugins..." | |||||
silent !mkdir -p ~/.config/nvim/autoload/ | |||||
silent !curl "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > ~/.config/nvim/autoload/plug.vim | |||||
autocmd VimEnter * PlugInstall | |||||
endif | |||||
call plug#begin('~/.config/nvim/plugged') | |||||
Plug 'morhetz/gruvbox' | |||||
Plug 'neoclide/coc.nvim', {'branch': 'release'} | |||||
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } | |||||
Plug 'junegunn/fzf.vim' | |||||
"Plug 'vim-scripts/jcommenter.vim' | |||||
"Plug 'SirVer/ultisnips' | |||||
"Plug 'phux/vim-snippets' | |||||
"Plug 'tobyS/vmustache' | |||||
"Plug 'tobyS/pdv' | |||||
Plug 'Rican7/php-doc-modded' | |||||
Plug 'jreybert/vimagit' | |||||
Plug 'bling/vim-airline' | |||||
Plug 'tpope/vim-commentary' | |||||
Plug 'tpope/vim-fugitive' | |||||
Plug 'rbong/vim-flog' | |||||
Plug 'ap/vim-css-color' | |||||
call plug#end() | |||||
" Some basics: | |||||
set go=a | |||||
set mouse=a | |||||
set nohlsearch | |||||
set clipboard+=unnamedplus | |||||
set incsearch | |||||
set smartcase | |||||
set noswapfile | |||||
set nobackup | |||||
set undodir=~/.config/nvim/undodir | |||||
set undofile | |||||
colorscheme gruvbox | |||||
set background=dark | |||||
nnoremap c "_c | |||||
set nocompatible | |||||
filetype plugin on | |||||
syntax on | |||||
set encoding=utf-8 | |||||
set number relativenumber | |||||
" Indent marks | |||||
"set listchars=tab:\|_ | |||||
"set list | |||||
" Tab 2 spaces | |||||
filetype plugin indent on | |||||
set tabstop=2 softtabstop=2 expandtab shiftwidth=2 smarttab | |||||
" Disables automatic commenting on newline: | |||||
autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o | |||||
" coc | |||||
inoremap <silent><expr> <TAB> | |||||
\ pumvisible() ? "\<C-n>" : | |||||
\ <SID>check_back_space() ? "\<TAB>" : | |||||
\ coc#refresh() | |||||
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" | |||||
function! s:check_back_space() abort | |||||
let col = col('.') - 1 | |||||
return !col || getline('.')[col - 1] =~# '\s' | |||||
endfunction | |||||
nmap <leader>gd <Plug>(coc-definition) | |||||
nmap <leader>gr <Plug>(coc-references) | |||||
inoremap <expr> <C-j> pumvisible() ? "\<Down>" : "\<C-j>" | |||||
inoremap <expr> <C-k> pumvisible() ? "\<Up>" : "\<C-k>" | |||||
" fzf remaps | |||||
"nnoremap <C-p> :GFiles<CR> | |||||
nnoremap <C-q> :GFiles<CR> | |||||
nnoremap <C-a> :Files<CR> | |||||
" php-doc-modded | |||||
nnoremap <C-c> :call PhpDocSingle()<CR>i | |||||
"nnoremap <C-P> :call PhpDocSingle()<CR> | |||||
"vnoremap <C-P> :call PhpDocRange()<CR> | |||||
let g:pdv_cfg_autoEndClass = 0 | |||||
let g:pdv_cfg_autoEndFunction = 0 | |||||
" Spell-check set to <leader>o, 'o' for 'orthography': | |||||
map <leader>o :setlocal spell! spelllang=en_au<CR> | |||||
" Splits open at the bottom and right, which is non-retarded, unlike vim defaults. | |||||
set splitbelow splitright | |||||
" Shortcutting split navigation, saving a keypress: | |||||
" nnoremap <C-h> <C-w>h | |||||
" nnoremap <C-j> <C-w>j | |||||
" nnoremap <C-k> <C-w>k | |||||
" nnoremap <C-l> <C-w>l | |||||
" Check file in shellcheck: | |||||
map <leader>s :!clear && shellcheck %<CR> | |||||
" Replace all is aliased to S. | |||||
nnoremap S :%s//g<Left><Left> | |||||
" Ensure files are read as what I want: | |||||
let g:vimwiki_ext2syntax = {'.Rmd': 'markdown', '.rmd': 'markdown','.md': 'markdown', '.markdown': 'markdown', '.mdown': 'markdown'} | |||||
let g:vimwiki_list = [{'path': '~/vimwiki', 'syntax': 'markdown', 'ext': '.md'}] | |||||
autocmd BufRead,BufNewFile *.ms,*.me,*.mom,*.man set filetype=groff | |||||
autocmd BufRead,BufNewFile *.tex set filetype=tex | |||||
" Automatically deletes all trailing whitespace on save. | |||||
autocmd BufWritePre * %s/\s\+$//e | |||||
" Rebind $ to <leader>d | |||||
nnoremap <leader>d $ | |||||
" Navigating with guides | |||||
inoremap <leader><leader> <Esc>/<++><Enter>"_c4l | |||||
vnoremap <leader><leader> <Esc>/<++><Enter>"_c4l | |||||
map <leader><leader> <Esc>/<++><Enter>"_c4l | |||||
" Remember last cursor position | |||||
autocmd BufReadPost * if @% !~# '\.git[\/\\]COMMIT_EDITMSG$' && line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif | |||||
" Update CHANGELOG message | |||||
inoremap <leader>C Update CHANGELOG<esc>:wq<cr> | |||||
"""HTML | |||||
autocmd FileType html inoremap <leader>b <b></b><Space><++><Esc>FbT>i | |||||
autocmd FileType html inoremap <leader>it <em></em><Space><++><Esc>FeT>i | |||||
autocmd FileType html inoremap <leader>1 <h1></h1><Enter><Enter><++><Esc>2kf<i | |||||
autocmd FileType html inoremap <leader>2 <h2></h2><Enter><Enter><++><Esc>2kf<i | |||||
autocmd FileType html inoremap <leader>3 <h3></h3><Enter><Enter><++><Esc>2kf<i | |||||
autocmd FileType html inoremap <leader>p <p></p><Enter><Enter><++><Esc>02kf>a | |||||
autocmd FileType html inoremap <leader>a <a<Space>href=""><++></a><Space><++><Esc>14hi | |||||
autocmd FileType html inoremap <leader>e <a<Space>target="_blank"<Space>href=""><++></a><Space><++><Esc>14hi | |||||
autocmd FileType html inoremap <leader>ul <ul><Enter><li></li><Enter></ul><Enter><Enter><++><Esc>03kf<i | |||||
autocmd FileType html inoremap <leader>li <Esc>o<li></li><Esc>F>a | |||||
autocmd FileType html inoremap <leader>ol <ol><Enter><li></li><Enter></ol><Enter><Enter><++><Esc>03kf<i | |||||
autocmd FileType html inoremap <leader>im <img src="" alt="<++>"><++><esc>Fcf"a | |||||
autocmd FileType html inoremap <leader>td <td></td><++><Esc>Fdcit | |||||
autocmd FileType html inoremap <leader>tr <tr></tr><Enter><++><Esc>kf<i | |||||
autocmd FileType html inoremap <leader>th <th></th><++><Esc>Fhcit | |||||
autocmd FileType html inoremap <leader>tab <table><Enter></table><Esc>O | |||||
autocmd FileType html inoremap <leader>gr <font color="green"></font><Esc>F>a | |||||
autocmd FileType html inoremap <leader>rd <font color="red"></font><Esc>F>a | |||||
autocmd FileType html inoremap <leader>yl <font color="yellow"></font><Esc>F>a | |||||
autocmd FileType html inoremap <leader>dt <dt></dt><Enter><dd><++></dd><Enter><++><esc>2kcit | |||||
autocmd FileType html inoremap <leader>dl <dl><Enter><Enter></dl><enter><enter><++><esc>3kcc | |||||
autocmd FileType html inoremap &<space> &<space> | |||||
autocmd FileType html inoremap á á | |||||
autocmd FileType html inoremap é é | |||||
autocmd FileType html inoremap í í | |||||
autocmd FileType html inoremap ó ó | |||||
autocmd FileType html inoremap ú ú | |||||
autocmd FileType html inoremap ä ä | |||||
autocmd FileType html inoremap ë ë | |||||
autocmd FileType html inoremap ï ï | |||||
autocmd FileType html inoremap ö ö | |||||
autocmd FileType html inoremap ü ü | |||||
autocmd FileType html inoremap ã ã | |||||
autocmd FileType html inoremap ẽ &etilde; | |||||
autocmd FileType html inoremap ĩ ĩ | |||||
autocmd FileType html inoremap õ õ | |||||
autocmd FileType html inoremap ũ ũ | |||||
autocmd FileType html inoremap ñ ñ | |||||
autocmd FileType html inoremap à à | |||||
autocmd FileType html inoremap è è | |||||
autocmd FileType html inoremap ì ì | |||||
autocmd FileType html inoremap ò ò | |||||
autocmd FileType html inoremap ù ù | |||||
""MARKDOWN | |||||
" autocmd Filetype markdown,rmd map <leader>w yiWi[<esc>Ea](<esc>pa) | |||||
" autocmd Filetype markdown,rmd inoremap <leader>n ---<Enter><Enter> | |||||
" autocmd Filetype markdown,rmd inoremap <leader>b ****<++><Esc>F*hi | |||||
" autocmd Filetype markdown,rmd inoremap <leader>s ~~~~<++><Esc>F~hi | |||||
" autocmd Filetype markdown,rmd inoremap <leader>e **<++><Esc>F*i | |||||
" autocmd Filetype markdown,rmd inoremap <leader>h ====<Space><++><Esc>F=hi | |||||
" autocmd Filetype markdown,rmd inoremap <leader>i ![](<++>)<++><Esc>F[a | |||||
" autocmd Filetype markdown,rmd inoremap <leader>a [](<++>)<++><Esc>F[a | |||||
" autocmd Filetype markdown,rmd inoremap <leader>1 #<Space><Enter><++><Esc>kA | |||||
" autocmd Filetype markdown,rmd inoremap <leader>2 ##<Space><Enter><++><Esc>kA | |||||
" autocmd Filetype markdown,rmd inoremap <leader>3 ###<Space><Enter><++><Esc>kA | |||||
" autocmd Filetype markdown,rmd inoremap <leader>l --------<Enter> | |||||
" autocmd Filetype rmd inoremap <leader>r ```{r}<CR>```<CR><CR><esc>2kO | |||||
" autocmd Filetype rmd inoremap <leader>p ```{python}<CR>```<CR><CR><esc>2kO | |||||
" autocmd Filetype rmd inoremap <leader>c ```<cr>```<cr><cr><esc>2kO | |||||
""".php | |||||
autocmd FileType php inoremap <leader>f public function <Enter>{<Enter><Tab><++><Enter>}<Esc>kkk$i | |||||
autocmd FileType php inoremap <leader>t $this | |||||
autocmd FileType php inoremap <leader>u use Thirty4\Theme\Form\\<++>;<Esc>5hi | |||||
autocmd FileType php inoremap <leader>s 'url' => [ 'select', [ 'name' => '' ]],<Esc>4hi | |||||
autocmd FileType php inoremap <leader>v var_dump();<CR>die();<Esc>k$hi | |||||
@ -0,0 +1,6 @@ | |||||
.idea | |||||
lib/filter/base | |||||
lib/form/base | |||||
zz_release_ticket.php | |||||
ZzDummyTask.class.php | |||||
lib/task/ZzDummyTask.class.php |
@ -0,0 +1,608 @@ | |||||
#!/bin/bash | |||||
# The iTerm2 customizations fall under the following license: | |||||
# | |||||
# This program is free software; you can redistribute it and/or | |||||
# modify it under the terms of the GNU General Public License | |||||
# as published by the Free Software Foundation; either version 2 | |||||
# of the License, or (at your option) any later version. | |||||
# | |||||
# This program is distributed in the hope that it will be useful, | |||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
# GNU General Public License for more details. | |||||
# | |||||
# You should have received a copy of the GNU General Public License | |||||
# along with this program; if not, write to the Free Software | |||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||||
# -- BEGIN ITERM2 CUSTOMIZATIONS -- | |||||
if [[ "$ITERM_ENABLE_SHELL_INTEGRATION_WITH_TMUX""$TERM" != screen && "$ITERM_SHELL_INTEGRATION_INSTALLED" = "" && "$-" == *i* && "$TERM" != linux && "$TERM" != dumb ]]; then | |||||
if shopt extdebug | grep on > /dev/null; then | |||||
echo "iTerm2 Shell Integration not installed." | |||||
echo "" | |||||
echo "Your shell has 'extdebug' turned on." | |||||
echo "This is incompatible with shell integration." | |||||
echo "Find 'shopt -s extdebug' in bash's rc scripts and remove it." | |||||
return 0 | |||||
fi | |||||
ITERM_SHELL_INTEGRATION_INSTALLED=Yes | |||||
# Saved copy of your PS1. This is used to detect if the user changes PS1 | |||||
# directly. ITERM_PREV_PS1 will hold the last value that this script set PS1 to | |||||
# (including various custom escape sequences). | |||||
ITERM_PREV_PS1="$PS1" | |||||
# The following chunk of code, bash-preexec.sh, is licensed like this: | |||||
# The MIT License | |||||
# | |||||
# Copyright (c) 2015 Ryan Caloras and contributors (see https://github.com/rcaloras/bash-preexec) | |||||
# | |||||
# Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
# of this software and associated documentation files (the "Software"), to deal | |||||
# in the Software without restriction, including without limitation the rights | |||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
# copies of the Software, and to permit persons to whom the Software is | |||||
# furnished to do so, subject to the following conditions: | |||||
# | |||||
# The above copyright notice and this permission notice shall be included in | |||||
# all copies or substantial portions of the Software. | |||||
# | |||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
# THE SOFTWARE. | |||||
# Wrap bash-preexec.sh in a function so that, if it exits early due to having | |||||
# been sourced elsewhere, it doesn't exit our entire script. | |||||
_install_bash_preexec () { | |||||
# -- BEGIN BASH-PREEXEC.SH -- | |||||
#!/bin/bash | |||||
# | |||||
# bash-preexec.sh -- Bash support for ZSH-like 'preexec' and 'precmd' functions. | |||||
# https://github.com/rcaloras/bash-preexec | |||||
# | |||||
# | |||||
# 'preexec' functions are executed before each interactive command is | |||||
# executed, with the interactive command as its argument. The 'precmd' | |||||
# function is executed before each prompt is displayed. | |||||
# | |||||
# Author: Ryan Caloras (ryan@bashhub.com) | |||||
# Forked from Original Author: Glyph Lefkowitz | |||||
# | |||||
# V0.3.7 | |||||
# | |||||
# -- END ITERM2 CUSTOMIZATIONS -- | |||||
# bash-preexec.sh -- Bash support for ZSH-like 'preexec' and 'precmd' functions. | |||||
# https://github.com/rcaloras/bash-preexec | |||||
# | |||||
# | |||||
# 'preexec' functions are executed before each interactive command is | |||||
# executed, with the interactive command as its argument. The 'precmd' | |||||
# function is executed before each prompt is displayed. | |||||
# | |||||
# Author: Ryan Caloras (ryan@bashhub.com) | |||||
# Forked from Original Author: Glyph Lefkowitz | |||||
# | |||||
# V0.3.7 | |||||
# | |||||
# General Usage: | |||||
# | |||||
# 1. Source this file at the end of your bash profile so as not to interfere | |||||
# with anything else that's using PROMPT_COMMAND. | |||||
# | |||||
# 2. Add any precmd or preexec functions by appending them to their arrays: | |||||
# e.g. | |||||
# precmd_functions+=(my_precmd_function) | |||||
# precmd_functions+=(some_other_precmd_function) | |||||
# | |||||
# preexec_functions+=(my_preexec_function) | |||||
# | |||||
# 3. Consider changing anything using the DEBUG trap or PROMPT_COMMAND | |||||
# to use preexec and precmd instead. Preexisting usages will be | |||||
# preserved, but doing so manually may be less surprising. | |||||
# | |||||
# Note: This module requires two Bash features which you must not otherwise be | |||||
# using: the "DEBUG" trap, and the "PROMPT_COMMAND" variable. If you override | |||||
# either of these after bash-preexec has been installed it will most likely break. | |||||
# Avoid duplicate inclusion | |||||
if [[ "${__bp_imported:-}" == "defined" ]]; then | |||||
return 0 | |||||
fi | |||||
__bp_imported="defined" | |||||
# Should be available to each precmd and preexec | |||||
# functions, should they want it. $? and $_ are available as $? and $_, but | |||||
# $PIPESTATUS is available only in a copy, $BP_PIPESTATUS. | |||||
# TODO: Figure out how to restore PIPESTATUS before each precmd or preexec | |||||
# function. | |||||
__bp_last_ret_value="$?" | |||||
BP_PIPESTATUS=("${PIPESTATUS[@]}") | |||||
__bp_last_argument_prev_command="$_" | |||||
__bp_inside_precmd=0 | |||||
__bp_inside_preexec=0 | |||||
# Fails if any of the given variables are readonly | |||||
# Reference https://stackoverflow.com/a/4441178 | |||||
__bp_require_not_readonly() { | |||||
local var | |||||
for var; do | |||||
if ! ( unset "$var" 2> /dev/null ); then | |||||
echo "iTerm2 Shell Integration:bash-preexec requires write access to ${var}" >&2 | |||||
return 1 | |||||
fi | |||||
done | |||||
} | |||||
# Remove ignorespace and or replace ignoreboth from HISTCONTROL | |||||
# so we can accurately invoke preexec with a command from our | |||||
# history even if it starts with a space. | |||||
__bp_adjust_histcontrol() { | |||||
local histcontrol | |||||
histcontrol="${HISTCONTROL//ignorespace}" | |||||
# Replace ignoreboth with ignoredups | |||||
if [[ "$histcontrol" == *"ignoreboth"* ]]; then | |||||
histcontrol="ignoredups:${histcontrol//ignoreboth}" | |||||
fi; | |||||
export HISTCONTROL="$histcontrol" | |||||
} | |||||
# This variable describes whether we are currently in "interactive mode"; | |||||
# i.e. whether this shell has just executed a prompt and is waiting for user | |||||
# input. It documents whether the current command invoked by the trace hook is | |||||
# run interactively by the user; it's set immediately after the prompt hook, | |||||
# and unset as soon as the trace hook is run. | |||||
__bp_preexec_interactive_mode="" | |||||
__bp_trim_whitespace() { | |||||
local var=$@ | |||||
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters | |||||
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters | |||||
echo -n "$var" | |||||
} | |||||
# This function is installed as part of the PROMPT_COMMAND; | |||||
# It sets a variable to indicate that the prompt was just displayed, | |||||
# to allow the DEBUG trap to know that the next command is likely interactive. | |||||
__bp_interactive_mode() { | |||||
__bp_preexec_interactive_mode="on"; | |||||
} | |||||
# This function is installed as part of the PROMPT_COMMAND. | |||||
# It will invoke any functions defined in the precmd_functions array. | |||||
__bp_precmd_invoke_cmd() { | |||||
# Save the returned value from our last command, and from each process in | |||||
# its pipeline. Note: this MUST be the first thing done in this function. | |||||
__bp_last_ret_value="$?" BP_PIPESTATUS=("${PIPESTATUS[@]}") | |||||
# Don't invoke precmds if we are inside an execution of an "original | |||||
# prompt command" by another precmd execution loop. This avoids infinite | |||||
# recursion. | |||||
if (( __bp_inside_precmd > 0 )); then | |||||
return | |||||
fi | |||||
local __bp_inside_precmd=1 | |||||
# Invoke every function defined in our function array. | |||||
local precmd_function | |||||
for precmd_function in "${precmd_functions[@]}"; do | |||||
# Only execute this function if it actually exists. | |||||
# Test existence of functions with: declare -[Ff] | |||||
if type -t "$precmd_function" 1>/dev/null; then | |||||
__bp_set_ret_value "$__bp_last_ret_value" "$__bp_last_argument_prev_command" | |||||
# Quote our function invocation to prevent issues with IFS | |||||
"$precmd_function" | |||||
fi | |||||
done | |||||
} | |||||
# Sets a return value in $?. We may want to get access to the $? variable in our | |||||
# precmd functions. This is available for instance in zsh. We can simulate it in bash | |||||
# by setting the value here. | |||||
__bp_set_ret_value() { | |||||
return ${1:-} | |||||
} | |||||
__bp_in_prompt_command() { | |||||
local prompt_command_array | |||||
IFS=';' read -ra prompt_command_array <<< "$PROMPT_COMMAND" | |||||
local trimmed_arg | |||||
trimmed_arg=$(__bp_trim_whitespace "${1:-}") | |||||
local command | |||||
for command in "${prompt_command_array[@]:-}"; do | |||||
local trimmed_command | |||||
trimmed_command=$(__bp_trim_whitespace "$command") | |||||
# Only execute each function if it actually exists. | |||||
if [[ "$trimmed_command" == "$trimmed_arg" ]]; then | |||||
return 0 | |||||
fi | |||||
done | |||||
return 1 | |||||
} | |||||
# This function is installed as the DEBUG trap. It is invoked before each | |||||
# interactive prompt display. Its purpose is to inspect the current | |||||
# environment to attempt to detect if the current command is being invoked | |||||
# interactively, and invoke 'preexec' if so. | |||||
__bp_preexec_invoke_exec() { | |||||
# Save the contents of $_ so that it can be restored later on. | |||||
# https://stackoverflow.com/questions/40944532/bash-preserve-in-a-debug-trap#40944702 | |||||
__bp_last_argument_prev_command="${1:-}" | |||||
# Don't invoke preexecs if we are inside of another preexec. | |||||
if (( __bp_inside_preexec > 0 )); then | |||||
return | |||||
fi | |||||
local __bp_inside_preexec=1 | |||||
# Checks if the file descriptor is not standard out (i.e. '1') | |||||
# __bp_delay_install checks if we're in test. Needed for bats to run. | |||||
# Prevents preexec from being invoked for functions in PS1 | |||||
if [[ ! -t 1 && -z "${__bp_delay_install:-}" ]]; then | |||||
return | |||||
fi | |||||
if [[ -n "${COMP_LINE:-}" ]]; then | |||||
# We're in the middle of a completer. This obviously can't be | |||||
# an interactively issued command. | |||||
return | |||||
fi | |||||
if [[ -z "${__bp_preexec_interactive_mode:-}" ]]; then | |||||
# We're doing something related to displaying the prompt. Let the | |||||
# prompt set the title instead of me. | |||||
return | |||||
else | |||||
# If we're in a subshell, then the prompt won't be re-displayed to put | |||||
# us back into interactive mode, so let's not set the variable back. | |||||
# In other words, if you have a subshell like | |||||
# (sleep 1; sleep 2) | |||||
# You want to see the 'sleep 2' as a set_command_title as well. | |||||
if [[ 0 -eq "${BASH_SUBSHELL:-}" ]]; then | |||||
__bp_preexec_interactive_mode="" | |||||
fi | |||||
fi | |||||
if __bp_in_prompt_command "${BASH_COMMAND:-}"; then | |||||
# If we're executing something inside our prompt_command then we don't | |||||
# want to call preexec. Bash prior to 3.1 can't detect this at all :/ | |||||
__bp_preexec_interactive_mode="" | |||||
return | |||||
fi | |||||
local this_command | |||||
this_command=$( | |||||
export LC_ALL=C | |||||
HISTTIMEFORMAT= builtin history 1 | sed '1 s/^ *[0-9][0-9]*[* ] //' | |||||
) | |||||
# Sanity check to make sure we have something to invoke our function with. | |||||
if [[ -z "$this_command" ]]; then | |||||
return | |||||
fi | |||||
# If none of the previous checks have returned out of this function, then | |||||
# the command is in fact interactive and we should invoke the user's | |||||
# preexec functions. | |||||
# Invoke every function defined in our function array. | |||||
local preexec_function | |||||
local preexec_function_ret_value | |||||
local preexec_ret_value=0 | |||||
for preexec_function in "${preexec_functions[@]:-}"; do | |||||
# Only execute each function if it actually exists. | |||||
# Test existence of function with: declare -[fF] | |||||
if type -t "$preexec_function" 1>/dev/null; then | |||||
__bp_set_ret_value ${__bp_last_ret_value:-} | |||||
# Quote our function invocation to prevent issues with IFS | |||||
"$preexec_function" "$this_command" | |||||
preexec_function_ret_value="$?" | |||||
if [[ "$preexec_function_ret_value" != 0 ]]; then | |||||
preexec_ret_value="$preexec_function_ret_value" | |||||
fi | |||||
fi | |||||
done | |||||
# Restore the last argument of the last executed command, and set the return | |||||
# value of the DEBUG trap to be the return code of the last preexec function | |||||
# to return an error. | |||||
# If `extdebug` is enabled a non-zero return value from any preexec function | |||||
# will cause the user's command not to execute. | |||||
# Run `shopt -s extdebug` to enable | |||||
__bp_set_ret_value "$preexec_ret_value" "$__bp_last_argument_prev_command" | |||||
} | |||||
__bp_install() { | |||||
# Exit if we already have this installed. | |||||
if [[ "${PROMPT_COMMAND:-}" == *"__bp_precmd_invoke_cmd"* ]]; then | |||||
return 1; | |||||
fi | |||||
trap '__bp_preexec_invoke_exec "$_"' DEBUG | |||||
# Preserve any prior DEBUG trap as a preexec function | |||||
local prior_trap=$(sed "s/[^']*'\(.*\)'[^']*/\1/" <<<"${__bp_trap_string:-}") | |||||
unset __bp_trap_string | |||||
if [[ -n "$prior_trap" ]]; then | |||||
eval '__bp_original_debug_trap() { | |||||
'"$prior_trap"' | |||||
}' | |||||
preexec_functions+=(__bp_original_debug_trap) | |||||
fi | |||||
# Adjust our HISTCONTROL Variable if needed. | |||||
__bp_adjust_histcontrol | |||||
# Issue #25. Setting debug trap for subshells causes sessions to exit for | |||||
# backgrounded subshell commands (e.g. (pwd)& ). Believe this is a bug in Bash. | |||||
# | |||||
# Disabling this by default. It can be enabled by setting this variable. | |||||
if [[ -n "${__bp_enable_subshells:-}" ]]; then | |||||
# Set so debug trap will work be invoked in subshells. | |||||
set -o functrace > /dev/null 2>&1 | |||||
shopt -s extdebug > /dev/null 2>&1 | |||||
fi; | |||||
# Install our hooks in PROMPT_COMMAND to allow our trap to know when we've | |||||
# actually entered something. | |||||
PROMPT_COMMAND="__bp_precmd_invoke_cmd; __bp_interactive_mode" | |||||
# Add two functions to our arrays for convenience | |||||
# of definition. | |||||
precmd_functions+=(precmd) | |||||
preexec_functions+=(preexec) | |||||
# Since this function is invoked via PROMPT_COMMAND, re-execute PC now that it's properly set | |||||
eval "$PROMPT_COMMAND" | |||||
} | |||||
# Sets our trap and __bp_install as part of our PROMPT_COMMAND to install | |||||
# after our session has started. This allows bash-preexec to be included | |||||
# at any point in our bash profile. Ideally we could set our trap inside | |||||
# __bp_install, but if a trap already exists it'll only set locally to | |||||
# the function. | |||||
__bp_install_after_session_init() { | |||||
# Make sure this is bash that's running this and return otherwise. | |||||
if [[ -z "${BASH_VERSION:-}" ]]; then | |||||
return 1; | |||||
fi | |||||
# bash-preexec needs to modify these variables in order to work correctly | |||||
# if it can't, just stop the installation | |||||
__bp_require_not_readonly PROMPT_COMMAND HISTCONTROL HISTTIMEFORMAT || return | |||||
# If there's an existing PROMPT_COMMAND capture it and convert it into a function | |||||
# So it is preserved and invoked during precmd. | |||||
if [[ -n "$PROMPT_COMMAND" ]]; then | |||||
eval '__bp_original_prompt_command() { | |||||
'"$PROMPT_COMMAND"' | |||||
}' | |||||
precmd_functions+=(__bp_original_prompt_command) | |||||
fi | |||||
# Installation is finalized in PROMPT_COMMAND, which allows us to override the DEBUG | |||||
# trap. __bp_install sets PROMPT_COMMAND to its final value, so these are only | |||||
# invoked once. | |||||
# It's necessary to clear any existing DEBUG trap in order to set it from the install function. | |||||
# Using \n as it's the most universal delimiter of bash commands | |||||
PROMPT_COMMAND=$'\n__bp_trap_string="$(trap -p DEBUG)"\ntrap DEBUG\n__bp_install\n' | |||||
} | |||||
# Run our install so long as we're not delaying it. | |||||
if [[ -z "$__bp_delay_install" ]]; then | |||||
__bp_install_after_session_init | |||||
fi; | |||||
# -- END BASH-PREEXEC.SH -- | |||||
} | |||||
_install_bash_preexec | |||||
unset -f _install_bash_preexec | |||||
# -- BEGIN ITERM2 CUSTOMIZATIONS -- | |||||
# We don't care about whitespace, but users care about not changing their histcontrol variables. | |||||
# We overwrite the upstream __bp_adjust_histcontrol function whcih gets called from the next | |||||
# PROMPT_COMMAND invocation. | |||||
function __bp_adjust_histcontrol() { | |||||
true | |||||
} | |||||
function iterm2_begin_osc { | |||||
printf "\033]" | |||||
} | |||||
function iterm2_end_osc { | |||||
printf "\007" | |||||
} | |||||
function iterm2_print_state_data() { | |||||
iterm2_begin_osc | |||||
printf "1337;RemoteHost=%s@%s" "$USER" "$iterm2_hostname" | |||||
iterm2_end_osc | |||||
iterm2_begin_osc | |||||
printf "1337;CurrentDir=%s" "$PWD" | |||||
iterm2_end_osc | |||||
iterm2_print_user_vars | |||||
} | |||||
# Usage: iterm2_set_user_var key value | |||||
function iterm2_set_user_var() { | |||||
iterm2_begin_osc | |||||
printf "1337;SetUserVar=%s=%s" "$1" $(printf "%s" "$2" | base64 | tr -d '\n') | |||||
iterm2_end_osc | |||||
} | |||||
if [ -z "$(type -t iterm2_print_user_vars)" ] || [ "$(type -t iterm2_print_user_vars)" != function ]; then | |||||
# iterm2_print_user_vars is not already defined. Provide a no-op default version. | |||||
# | |||||
# Users can write their own version of this function. It should call | |||||
# iterm2_set_user_var but not produce any other output. | |||||
function iterm2_print_user_vars() { | |||||
true | |||||
} | |||||
fi | |||||
function iterm2_prompt_prefix() { | |||||
iterm2_begin_osc | |||||
printf "133;D;\$?" | |||||
iterm2_end_osc | |||||
} | |||||
function iterm2_prompt_mark() { | |||||
iterm2_begin_osc | |||||
printf "133;A" | |||||
iterm2_end_osc | |||||
} | |||||
function iterm2_prompt_suffix() { | |||||
iterm2_begin_osc | |||||
printf "133;B" | |||||
iterm2_end_osc | |||||
} | |||||
function iterm2_print_version_number() { | |||||
iterm2_begin_osc | |||||
printf "1337;ShellIntegrationVersion=14;shell=bash" | |||||
iterm2_end_osc | |||||
} | |||||
# If hostname -f is slow on your system, set iterm2_hostname before sourcing this script. | |||||
if [ -z "${iterm2_hostname:-}" ]; then | |||||
iterm2_hostname=$(hostname -f 2>/dev/null) | |||||
# some flavors of BSD (i.e. NetBSD and OpenBSD) don't have the -f option | |||||
if [ $? -ne 0 ]; then | |||||
iterm2_hostname=$(hostname) | |||||
fi | |||||
fi | |||||
# Runs after interactively edited command but before execution | |||||
__iterm2_preexec() { | |||||
# Save the returned value from our last command | |||||
__iterm2_last_ret_value="$?" | |||||
iterm2_begin_osc | |||||
printf "133;C;" | |||||
iterm2_end_osc | |||||
# If PS1 still has the value we set it to in iterm2_preexec_invoke_cmd then | |||||
# restore it to its original value. It might have changed if you have | |||||
# another PROMPT_COMMAND (like liquidprompt) that modifies PS1. | |||||
if [ -n "${ITERM_ORIG_PS1+xxx}" -a "$PS1" = "$ITERM_PREV_PS1" ] | |||||
then | |||||
export PS1="$ITERM_ORIG_PS1" | |||||
fi | |||||
iterm2_ran_preexec="yes" | |||||
__bp_set_ret_value "$__iterm2_last_ret_value" "$__bp_last_argument_prev_command" | |||||
} | |||||
function __iterm2_precmd () { | |||||
__iterm2_last_ret_value="$?" | |||||
# Work around a bug in CentOS 7.2 where preexec doesn't run if you press | |||||
# ^C while entering a command. | |||||
if [[ -z "${iterm2_ran_preexec:-}" ]] | |||||
then | |||||
__iterm2_preexec "" | |||||
fi | |||||
iterm2_ran_preexec="" | |||||
# This is an iTerm2 addition to try to work around a problem in the | |||||
# original preexec.bash. | |||||
# When the PS1 has command substitutions, this gets invoked for each | |||||
# substitution and each command that's run within the substitution, which | |||||
# really adds up. It would be great if we could do something like this at | |||||
# the end of this script: | |||||
# PS1="$(iterm2_prompt_prefix)$PS1($iterm2_prompt_suffix)" | |||||
# and have iterm2_prompt_prefix set a global variable that tells precmd not to | |||||
# output anything and have iterm2_prompt_suffix reset that variable. | |||||
# Unfortunately, command substitutions run in subshells and can't | |||||
# communicate to the outside world. | |||||
# Instead, we have this workaround. We save the original value of PS1 in | |||||
# $ITERM_ORIG_PS1. Then each time this function is run (it's called from | |||||
# PROMPT_COMMAND just before the prompt is shown) it will change PS1 to a | |||||
# string without any command substitutions by doing eval on ITERM_ORIG_PS1. At | |||||
# this point ITERM_PREEXEC_INTERACTIVE_MODE is still the empty string, so preexec | |||||
# won't produce output for command substitutions. | |||||
# The first time this is called ITERM_ORIG_PS1 is unset. This tests if the variable | |||||
# is undefined (not just empty) and initializes it. We can't initialize this at the | |||||
# top of the script because it breaks with liquidprompt. liquidprompt wants to | |||||
# set PS1 from a PROMPT_COMMAND that runs just before us. Setting ITERM_ORIG_PS1 | |||||
# at the top of the script will overwrite liquidprompt's PS1, whose value would | |||||
# never make it into ITERM_ORIG_PS1. Issue 4532. It's important to check | |||||
# if it's undefined before checking if it's empty because some users have | |||||
# bash set to error out on referencing an undefined variable. | |||||
if [ -z "${ITERM_ORIG_PS1+xxx}" ] | |||||
then | |||||
# ITERM_ORIG_PS1 always holds the last user-set value of PS1. | |||||
# You only get here on the first time iterm2_preexec_invoke_cmd is called. | |||||
export ITERM_ORIG_PS1="$PS1" | |||||
fi | |||||
# If you want to generate PS1 dynamically from PROMPT_COMMAND, the best way | |||||
# to do it is to define a function named iterm2_generate_ps1 that sets PS1. | |||||
# Issue 5964. Other shells don't have this issue because they don't need | |||||
# such extremes to get precmd and preexec. | |||||
if [ -n "$(type -t iterm2_generate_ps1)" ] && [ "$(type -t iterm2_generate_ps1)" = function ]; then | |||||
iterm2_generate_ps1 | |||||
fi | |||||
if [[ "$PS1" != "$ITERM_PREV_PS1" ]] | |||||
then | |||||
export ITERM_ORIG_PS1="$PS1" | |||||
fi | |||||
# Get the value of the prompt prefix, which will change $? | |||||
\local iterm2_prompt_prefix_value="$(iterm2_prompt_prefix)" | |||||
# Add the mark unless the prompt includes '$(iterm2_prompt_mark)' as a substring. | |||||
if [[ $ITERM_ORIG_PS1 != *'$(iterm2_prompt_mark)'* && x$ITERM2_SQUELCH_MARK = x ]] | |||||
then | |||||
iterm2_prompt_prefix_value="$iterm2_prompt_prefix_value$(iterm2_prompt_mark)" | |||||
fi | |||||
# Send escape sequences with current directory and hostname. | |||||
iterm2_print_state_data | |||||
# Reset $? to its saved value, which might be used in $ITERM_ORIG_PS1. | |||||
__bp_set_ret_value "$__iterm2_last_ret_value" "$__bp_last_argument_prev_command" | |||||
# Set PS1 to various escape sequences, the user's preferred prompt, and more escape sequences. | |||||
export PS1="\[$iterm2_prompt_prefix_value\]$ITERM_ORIG_PS1\[$(iterm2_prompt_suffix)\]" | |||||
# Save the value we just set PS1 to so if the user changes PS1 we'll know and we can update ITERM_ORIG_PS1. | |||||
export ITERM_PREV_PS1="$PS1" | |||||
__bp_set_ret_value "$__iterm2_last_ret_value" "$__bp_last_argument_prev_command" | |||||
} | |||||
# Install my functions | |||||
preexec_functions+=(__iterm2_preexec) | |||||
precmd_functions+=(__iterm2_precmd) | |||||
iterm2_print_state_data | |||||
iterm2_print_version_number | |||||
fi | |||||
# -- END ITERM2 CUSTOMIZATIONS -- | |||||
@ -0,0 +1,5 @@ | |||||
#!/bin/bash | |||||
F=$(fzf) | |||||
[ -z "$F" ] || nvim "$F" |
@ -0,0 +1,98 @@ | |||||
#!/usr/bin/env bash | |||||
# author: unknown | |||||
# sentby: MoreChannelNoise (https://www.youtube.com/user/MoreChannelNoise) | |||||
# editby: gotbletu (https://www.youtube.com/user/gotbletu) | |||||
# demo: https://www.youtube.com/watch?v=kxJClZIXSnM | |||||
# info: this is a script to launch other rofi scripts, | |||||
# saves us the trouble of binding multiple hotkeys for each script, | |||||
# when we can just use one hotkey for everything. | |||||
declare -A LABELS | |||||
declare -A COMMANDS | |||||
### | |||||
# List of defined 'bangs' | |||||
# launch programs | |||||
COMMANDS["apps"]="dmenu_run -i -m 0 -fn 'Inconsolata:size=10' -nb '#222222' -nf '#bbbbbb' -sb '#005577' -sf '#eeeeee'" | |||||
LABELS["apps"]="" | |||||
# clipboard | |||||
COMMANDS["clipboard"]="greenclip print | dmenu -i -l 10 -m 0 -fn 'Inconsolata:size=10' -nb '#222222' -nf '#bbbbbb' -sb '#005577' -sf '#eeeeee' -p 'clipboard: ' | xclip -selection clipboard" | |||||
LABELS["clipboard"]="" | |||||
# search local files | |||||
COMMANDS["emoji"]="~/.local/bin/dmenu-scripts/dmenu-emoji" | |||||
LABELS["emoji"]="" | |||||
# mount drives | |||||
COMMANDS["mount"]="sudo ~/.local/bin/dmenu-scripts/dmenu-mount" | |||||
LABELS["mount"]="" | |||||
# umount drives | |||||
COMMANDS["unmount"]="sudo ~/.local/bin/dmenu-scripts/dmenu-mount unmount" | |||||
LABELS["unmount"]="" | |||||
# shutdown | |||||
COMMANDS["shutdown"]="sudo ~/.local/bin/dmenu-scripts/dmenu-shutdown" | |||||
LABELS["shutdown"]="" | |||||
# PDF man pages | |||||
COMMANDS["man"]="~/.local/bin/dmenu-scripts/dmenu-man" | |||||
LABELS["man"]="" | |||||
# locate files | |||||
COMMANDS["locate"]="~/.local/bin/dmenu-scripts/dmenu-locate" | |||||
LABELS["locate"]="" | |||||
################################################################################ | |||||
# do not edit below | |||||
################################################################################ | |||||
## | |||||
# Generate menu | |||||
## | |||||
function print_menu() | |||||
{ | |||||
for key in ${!LABELS[@]} | |||||
do | |||||
echo "$key ${LABELS}" | |||||
# echo "$key ${LABELS[$key]}" | |||||
# my top version just shows the first field in labels row, not two words side by side | |||||
done | |||||
} | |||||
## | |||||
# Show rofi. | |||||
## | |||||
function start() | |||||
{ | |||||
print_menu | sort | dmenu -i -m 0 -fn "Inconsolata:size=10" -nb "#222222" -nf "#bbbbbb" -sb "#005577" -sf "#eeeeee" -p "dmenu bangs: " | |||||
} | |||||
# Run it | |||||
value="$(start)" | |||||
# Split input. | |||||
# grab upto first space. | |||||
choice=${value%%\ *} | |||||
# graph remainder, minus space. | |||||
input=${value:$((${#choice}+1))} | |||||
## | |||||
# Cancelled? bail out | |||||
## | |||||
if test -z ${choice} | |||||
then | |||||
exit | |||||
fi | |||||
# check if choice exists | |||||
if test ${COMMANDS[$choice]+isset} | |||||
then | |||||
# Execute the choice | |||||
eval ${COMMANDS[$choice]} | |||||
else | |||||
eval $choice | dmenu | |||||
fi |
@ -0,0 +1,15 @@ | |||||
#!/bin/bash | |||||
#cat ~/.emoji | dmenu -i -l 10 -m 0 -fn 'Inconsolata:size=10' -nb '#222222' -nf '#bbbbbb' -sb '#005577' -sf '#eeeeee' -p 'Emoji: ' | |||||
chosen=$(grep -v "#" ~/.emoji | dmenu -i -l 20 -m 0 -fn 'Inconsolata:size=10' -nb '#222222' -nf '#bbbbbb' -sb '#005577' -sf '#eeeeee' -p 'emoji: ') | |||||
[ "$chosen" != "" ] || exit | |||||
c=$(echo "$chosen" | sed "s/ .*//") | |||||
echo "$c" | tr -d '\n' | xclip -selection clipboard | |||||
notify-send "'$c' copied to clipboard." & | |||||
s=$(echo "$chosen" | sed "s/.*; //" | awk '{print $1}') | |||||
echo "$s" | tr -d '\n' | xclip | |||||
notify-send "'$s' copied to primary." & |
@ -0,0 +1,3 @@ | |||||
#!/bin/bash | |||||
xdg-open $(locate home media | dmenu -l 20 -i -m 0 -fn "Inconsolata:size=10" -nb "#000000" -nf "#bbbbbb" -sb "#0099cc" -sf "#000000" -p "Locate: ") |
@ -0,0 +1,3 @@ | |||||
#!/bin/bash | |||||
man -k . | dmenu -i -m 0 -fn "Inconsolata:size=10" -nb "#000000" -nf "#bbbbbb" -sb "#0099cc" -sf "#000000" -l 20 -p "Man: " | awk '{print $1}' | xargs -r man -Tpdf | zathura - |
@ -0,0 +1,28 @@ | |||||
#!/bin/bash | |||||
COLS="name,type,size,mountpoint" | |||||
if [[ "$1" == "unmount" ]] | |||||
then | |||||
drives="$(lsblk -rpo "$COLS" | awk '$2=="part"&&$4!=""{printf "%s (%s)\n",$1,$3}')" | |||||
[ -z "$drives" ] && exit 1 | |||||
chosen="$(echo "$drives" | dmenu -i -l 10 -m 0 -fn 'Inconsolata:size=10' -nb '#222222' -nf '#bbbbbb' -sb '#005577' -sf '#eeeeee' -p 'Drive to unmount: ' | awk '{print $1}')" | |||||
[ -z "$chosen" ] && exit 1 | |||||
umount $chosen && notify-send "$chosen umounted" || notfiy-send "Error unmounting $chosen" | |||||
else | |||||
drives="$(lsblk -rpo "$COLS" | awk '$2=="part"&&$4==""{printf "%s (%s)\n",$1,$3}')" | |||||
[ -z "$drives" ] && exit 1 | |||||
chosen="$(echo "$drives" | dmenu -i -l 10 -m 0 -fn 'Inconsolata:size=10' -nb '#222222' -nf '#bbbbbb' -sb '#005577' -sf '#eeeeee' -p 'Drive to mount: ' | awk '{print $1}')" | |||||
[ -z "$chosen" ] && exit 1 | |||||
mount "$chosen" && exit 0 | |||||
mp="$(find /mnt /media /mount /home -type d -maxdepth 1 2>/dev/null | dmenu -i -l 10 -m 0 -fn 'Inconsolata:size=10' -nb '#222222' -nf '#bbbbbb' -sb '#005577' -sf '#eeeeee' -p 'Mount point: ' | awk '{print $1}')" | |||||
[ "$mp" = "" ] && exit 1 | |||||
if [ ! -d "$mp" ]; then | |||||
mkdiryn=$(printf "No\\nYes" | dmenu -i -m 0 -fn 'Inconsolata:size=10' -nb '#222222' -nf '#bbbbbb' -sb '#005577' -sf '#eeeeee' -p 'Mount point does not exist, create it?') | |||||
[ "$mkdiryn" = "Yes" ] && sudo -A mkdir -p "$mp" | |||||
fi | |||||
echo $mp | |||||
mount "$chosen" "$mp" && notify-send "$chosen mounted to $mp." || notify-send "Error mounting $chosen to $mp" | |||||
fi | |||||
@ -0,0 +1,24 @@ | |||||
#!/bin/bash | |||||
option=$(echo -e "Lock the screen\nReboot\nShutdown\nHibernate" | dmenu -i -m 0 -fn "Inconsolata:size=10" -nb "#000000" -nf "#bbbbbb" -sb "#0099cc" -sf "#000000" -p "Power menu: ") | |||||
answer=$(echo -e "No\nYes" | dmenu -i -m 0 -fn "Inconsolata:size=10" -nb "#000000" -nf "#bbbbbb" -sb "#0099cc" -sf "#000000" -p "Would you like to ${option} now? ") | |||||
if [[ ${answer} == "Yes" ]] | |||||
then | |||||
if [[ ${option} == "Lock the screen" ]] | |||||
then | |||||
slock | |||||
elif [[ ${option} == "Reboot" ]] | |||||
then | |||||
systemctl reboot | |||||
elif [[ ${option} == "Shutdown" ]] | |||||
then | |||||
systemctl poweroff | |||||
elif [[ ${option} == "Hibernate" ]] | |||||
then | |||||
systemctl hibernate | |||||
fi | |||||
fi | |||||
@ -0,0 +1,12 @@ | |||||
#!/bin/sh | |||||
read -p "Enter the name/url for repo: " url | |||||
read -p "Enter the description for repo:" desc | |||||
url_parsed=${url// /_} | |||||
url_path="/var/www/git/${url_parsed}.git" | |||||
ssh git@tovijaeschke.xyz "mkdir -p ${url_path} && git init --bare ${url_path} && echo -e \"\nrepo.url=${url_parsed}\nrepo.path=${url_path}\nrepo.desc=${desc}\n\" >> /etc/cgitrepos" | |||||
git remote add origin git@git.tovijaeschke.xyz:${url_path} |
@ -0,0 +1,9 @@ | |||||
#!/bin/bash | |||||
F=$(ls ~/notes/ | fzf) | |||||
if [ ${F: -4} == ".enc" ]; then | |||||
fenc -e $(realpath ~/notes/${F}) | |||||
else | |||||
nvim $(realpath ~/notes/${F}) | |||||
fi |
@ -0,0 +1,10 @@ | |||||
#!/usr/bin/python3 | |||||
import sys | |||||
def a(one): | |||||
if one[:2] == "0x": | |||||
one = one[2:] | |||||
print(bytearray.fromhex(one).decode()) | |||||
a(sys.argv[1]) |
@ -0,0 +1,163 @@ | |||||
#!/usr/bin/env python3 | |||||
class Colours: | |||||
HEADER = '\033[95m' | |||||
OKBLUE = '\033[94m' | |||||
OKGREEN = '\033[92m' | |||||
WARNING = '\033[93m' | |||||
FAIL = '\033[91m' | |||||
ENDC = '\033[0m' | |||||
BOLD = '\033[1m' | |||||
UNDERLINE = '\033[4m' | |||||
try: | |||||
import os | |||||
import re | |||||
import sys | |||||
import getopt | |||||
import requests | |||||
from clint.textui import progress | |||||
from bs4 import BeautifulSoup | |||||
except Exception as err: | |||||
print(Colours.FAIL + "Error: {}".format(err) + Colours.ENDC) | |||||
def Usage(): | |||||
use_msg = ''' | |||||
---------- Usage ---------- | |||||
leak-lookup [options] [search term] | |||||
--------------------------- | |||||
Options: | |||||
-h: Prints this help message | |||||
-p: Searches haveibeenpwned.com | |||||
-d: Searches for leaked database | |||||
--------------------------- | |||||
''' | |||||
print(use_msg) | |||||
def DownloadDatabase(url, name): | |||||
try: | |||||
r = requests.get(url, stream=True) | |||||
with open(name, 'wb') as f: | |||||
total_length = int(r.headers.get('content-length')) | |||||
for chunk in progress.bar(r.iter_content(chunk_size=1024), expected_size=(total_length/1024) + 1): | |||||
if chunk: | |||||
f.write(chunk) | |||||
f.flush() | |||||
except (KeyboardInterrupt, SystemExit, EOFError): | |||||
print(Colours.FAIL + "An error occurred, cleaning up" + Colours.ENDC) | |||||
os.remove(name) | |||||
def DatabaseQuery(database): | |||||
r = requests.get("https://www.databases.today/search-nojs.php?for=" + database) | |||||
if r.reason != "OK": | |||||
print(Colours.FAIL + "Error code: {}".format(r.status_code) + Colours.ENDC) | |||||
sys.exit(1) | |||||
soup = BeautifulSoup(r.text, "html.parser") | |||||
dbs = soup.find(id="myTable").find_all("tr") | |||||
entries = [] | |||||
for table in dbs: | |||||
entry = table.find_all("td") | |||||
if len(entry) != 0: | |||||
entries.append([entry[0].text, entry[4].a.get("href")]) | |||||
print("Which file would you like to download?") | |||||
for index, dllink in enumerate(entries): | |||||
print("{}) {}".format(index + 1, dllink[0])) | |||||
print("a) All") | |||||
print("q) Quit") | |||||
download_choice = input(">> ") | |||||
if download_choice == "q": | |||||
sys.exit(0) | |||||
elif download_choice == "a": | |||||
for x in dllink: | |||||
DownloadDatabase(x[1], x[0]) | |||||
else: | |||||
try: | |||||
download_choice = int(download_choice) - 1 | |||||
DownloadDatabase(dllink[1], dllink[0].split(" (")[0]) | |||||
except: | |||||
print(Colours.FAIL + "Error: Invalid selection" + Colours.ENDC) | |||||
sys.exit(1) | |||||
def QueryHaveIBeenPwned(email): | |||||
r = requests.post("https://haveibeenpwned.com/", data={"Account": email}) | |||||
if r.reason != "OK": | |||||
print(Colours.FAIL + "Error code: {}".format(r.status_code) + Colours.ENDC) | |||||
sys.exit(1) | |||||
soup = BeautifulSoup(r.text, "html.parser") | |||||
pwnCount = re.match("Pwned on \d+", soup.find(id="pwnCount").text) | |||||
if pwnCount == None: | |||||
print(Colours.OKGREEN + "{} has no public leaks".format(email) + Colours.ENDC) | |||||
return | |||||
print(Colours.FAIL + "{} has {} public leaks avalible".format(email, pwnCount.group().split(" ")[-1]) + Colours.ENDC) | |||||
leaks = [] | |||||
for leak in soup.find_all(class_="pwnedWebsite"): | |||||
leak_name = None | |||||
leak_status = None | |||||
compromised_data = None | |||||
leak_name_html = leak.find(class_="pwnedCompanyTitle") | |||||
if leak_name_html: | |||||
if "(" in leak_name_html.text: | |||||
leak_name = leak_name_html.text.split(" (")[0] | |||||
leak_status = leak_name_html.text.split(" (")[1][:-2] | |||||
else: | |||||
leak_name = leak_name_html.text[:-1] | |||||
leak_status = None | |||||
compromised_data_html = leak.find(class_="dataClasses") | |||||
if compromised_data_html: | |||||
compromised_data = compromised_data_html.text | |||||
if leak_name: | |||||
leaks.append([leak_name, leak_status, compromised_data]) | |||||
print("\nDownload databases:") | |||||
for index, leak in enumerate(leaks): | |||||
if leak[1] == None: | |||||
print("{}) {}: {}".format(index + 1, leak[0], leak[2])) | |||||
else: | |||||
print("{}) {} ({}): {}".format(index + 1, leak[0], leak[1], leak[2])) | |||||
print("a) Download all") | |||||
print("q) Quit") | |||||
download_choice = input(">> ") | |||||
if download_choice == "q": | |||||
sys.exit(0) | |||||
elif download_choice == "a": | |||||
for leak in leaks: | |||||
DatabaseQuery(leak[0]) | |||||
try: | |||||
download_choice = int(download_choice) - 1 | |||||
DatabaseQuery(leaks[download_choice][0]) | |||||
except: | |||||
print(Colours.FAIL + "Error: Invalid selection" + Colours.ENDC) | |||||
sys.exit(1) | |||||
def main(): | |||||
if len(sys.argv[1:]) == 0: | |||||
Usage() | |||||
sys.exit(1) | |||||
try: | |||||
options, remainder = getopt.getopt(sys.argv[1:],'hpd',['h', 'p','d',]) | |||||
except getopt.GetoptError as err: | |||||
print(Colours.FAIL + "Error: {}".format(err) + Colours.ENDC) | |||||
sys.exit(1) | |||||
for opt, arg in options: | |||||
if opt == "-h": | |||||
Usage() | |||||
sys.exit(0) | |||||
elif opt == "-p": | |||||
if len(remainder) == 0: | |||||
Usage() | |||||
sys.exit(1) | |||||
QueryHaveIBeenPwned(" ".join(remainder)) | |||||
elif opt == "-d": | |||||
if len(remainder) == 0: | |||||
Usage() | |||||
sys.exit(1) | |||||
DatabaseQuery(" ".join(remainder)) | |||||
if __name__ == "__main__": | |||||
try: | |||||
main() | |||||
except (KeyboardInterrupt, SystemExit, EOFError): | |||||
sys.exit(0) |
@ -0,0 +1,7 @@ | |||||
#!/bin/bash | |||||
for i in $(objdump -d $1 | tr '\t' ' ' | tr ' ' '\n' | egrep '^[0-9a-f]{2}$' ) | |||||
do | |||||
echo -n "\x$i" | |||||
done | |||||
echo -e "\n" |
@ -0,0 +1,26 @@ | |||||
#!/bin/sh | |||||
VAGRANT=`which vagrant` | |||||
### User vagrant global-status to get the global ID | |||||
GLOBAL_ID='e2d06a8' | |||||
GLOBAL_DIR='/opt/vhosts/tools-deployment' | |||||
CWD=`pwd` | |||||
pushd $GLOBAL_DIR | |||||
if [[ $1 == "up" ]] | |||||
then | |||||
$VAGRANT up $GLOBAL_ID | |||||
ntfy -l INFO -t 'VAGRANT' send 'VM has finished booting' | |||||
elif [[ $1 == "halt" ]] | |||||
then | |||||
$VAGRANT halt $GLOBAL_ID | |||||
ntfy -l INFO -t 'VAGRANT' send 'VM has halted' | |||||
elif [[ $1 == "sup" ]] | |||||
then | |||||
$VAGRANT up $GLOBAL_ID | |||||
ntfy -l INFO -t 'VAGRANT' send 'VM has started, ssh-ing into it' | |||||
echo 'Shelling into machine...' | |||||
$VAGRANT ssh | |||||
else | |||||
$VAGRANT "$@" | |||||
fi | |||||
popd |
@ -0,0 +1,28 @@ | |||||
#!/bin/bash | |||||
# Dependencies are xclip and xorg-xprop. | |||||
# qrencode required for qrcode generation. | |||||
# groff/zathura required for man pages. | |||||
prim="$(xclip -o)"; [ -z "$prim" ] && exit | |||||
PID=$(xprop -id "$(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')" | grep -m 1 PID | cut -d " " -f 3) | |||||
PID=$(echo "$(pstree -lpA "$PID" | tail -n 1)" | awk -F'---' '{print $NF}' | sed -re 's/[^0-9]//g') | |||||
cd "$(readlink /proc/"$PID"/cwd)" | |||||
[[ "${prim}" == *"~"* ]] && prim=$(echo "~/go/src/gitlab.com/tovijaeschke/website" | sed 's@~@'"$HOME"'@g') | |||||
[ -f "$prim" ] && xdg-open "$prim" && exit | |||||
[ -d "$prim" ] && st -c "$prim" && exit | |||||
websearch() { "$BROWSER" "https://duckduckgo.com/?q=$@" ;} | |||||
wikipedia() { "$BROWSER" "https://en.wikipedia.org/wiki/$@" ;} | |||||
wiktionary() { "$BROWSER" "https://en.wiktionary.org/wiki/$@" ;} | |||||
piratebay() { "$BROWSER" "https://piratebays.fi/s/?q=$@" ;} | |||||
maps() { "$BROWSER" "https://www.openstreetmap.org/search?query=$@" ;} | |||||
ebay() { "$BROWSER" "https://www.ebay.com/sch/$@" ;} | |||||
echo "$prim" | grep "^.*\.[A-Za-z]\+.*" >/dev/null && gotourl() { "$BROWSER" "$@" ;} | |||||
echo "$prim" | grep "^.*@.*\.[A-Za-z]\+$" >/dev/null && email() { xdg-email "$@" ;} | |||||
command -v qrencode >/dev/null && qrcode() { qrencode "$@" -s 10 -o /tmp/qr.png && xdg-open /tmp/qr.png ;} | |||||
man -k "^$prim$" >/dev/null && manual() { man -Tpdf "$prim" | zathura - ;} | |||||
func="$(declare -F | awk '{print $3}' | dmenu -p "Plumb $prim to?" -i -l 15)" | |||||
[ -z "$func" ] || "$func" "$prim" |
@ -0,0 +1,4 @@ | |||||
#!/bin/bash | |||||
notify-send "Changing wallpaper" | |||||
feh --bg-fill ~/pix/cyberpunk/$(ls ~/pix/cyberpunk | shuf -n 1) |
@ -0,0 +1,8 @@ | |||||
#!/bin/bash | |||||
case "$1" in | |||||
*.asm) nasm -f elf64 "$1" && ld "${1%.*}".o -o "${1%.*}"; rm "${1%.*}".o ;; | |||||
*.c) gcc "$1" -o "${1%.*}" ;; | |||||
*.go) go build "$1" ;; | |||||
Makefile) make ;; | |||||
esac |
@ -0,0 +1,9 @@ | |||||
#!/bin/bash | |||||
intern=LVDS-1 | |||||
extern=VGA-1 | |||||
if xrandr | grep "$extern connected"; then | |||||
xrandr --output ${extern} --auto --right-of ${intern} | |||||
else | |||||
xrandr --output ${extern} --off --output ${intern} --auto | |||||
fi |
@ -0,0 +1,25 @@ | |||||
#!/bin/bash | |||||
if [ -f $1 ] ; then | |||||
# NAME=${1%.*} | |||||
# mkdir $NAME && cd $NAME | |||||
case $1 in | |||||
*.tar.bz2) tar xvjf ../$1 ;; | |||||
*.tar.gz) tar xvzf ../$1 ;; | |||||
*.tar.xz) tar xvJf ../$1 ;; | |||||
*.lzma) unlzma ../$1 ;; | |||||
*.bz2) bunzip2 ../$1 ;; | |||||
*.rar) unrar x -ad ../$1 ;; | |||||
*.gz) gunzip ../$1 ;; | |||||
*.tar) tar xvf ../$1 ;; | |||||
*.tbz2) tar xvjf ../$1 ;; | |||||
*.tgz) tar xvzf ../$1 ;; | |||||
*.zip) unzip ../$1 ;; | |||||
*.Z) uncompress ../$1 ;; | |||||
*.7z) 7z x ../$1 ;; | |||||
*.xz) unxz ../$1 ;; | |||||
*.exe) cabextract ../$1 ;; | |||||
*) echo "extract: '$1' - unknown archive method" ;; | |||||
esac | |||||
else | |||||
echo "$1 - file does not exist" | |||||
fi |
@ -0,0 +1,10 @@ | |||||
#!/bin/bash | |||||
if [ $(pgrep xautolock) ] | |||||
then | |||||
killall xautolock | |||||
notify-send "🔓 Turning off xautolock" | |||||
else | |||||
xautolock -time 10 -locker slock & | |||||
notify-send "🔒 Turning on xautolock" | |||||
fi |
@ -0,0 +1,4 @@ | |||||
#!/bin/bash | |||||
pactl set-sink-volume @DEFAULT_SINK@ -5% | |||||
vol=$(amixer sget Master | grep 'Right:' | awk -F'[][]' '{ print $2 }') | |||||
notify-send -t 500 "Volume: ${vol}" |
@ -0,0 +1,4 @@ | |||||
#!/bin/bash | |||||
pactl set-sink-volume @DEFAULT_SINK@ +5% | |||||
vol=$(amixer sget Master | grep 'Right:' | awk -F'[][]' '{ print $2 }') | |||||
notify-send -t 500 "Volume: ${vol}" |
@ -0,0 +1,14 @@ | |||||
#!/bin/bash | |||||
listandReturn() { | |||||
printf "Listing contents of %s.\\n" "$1" | |||||
ls -rc "$1" | awk -F '/' '{print $NF}' | nl | |||||
read -erp "Pick an entry by number to $2, or press ctrl-c to cancel. " number | |||||
chosen="$(ls -rc "$1" | nl | grep -w "$number" | awk '{print $2}')" | |||||
basefile="$(basename "$chosen")" && base="${basefile%.*}" | |||||
} | |||||
listandReturn ~/.openvpn/UDP\ 1194\ Normal/ | |||||
sudo openvpn --config ~/.openvpn/UDP\ 1194\ Normal/${basefile} |