@ -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} |