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