fix technical debt + fine tune functions and hooks

- linting/fixing/formating
- utility for suggesting aliases now accepts parameters to change output
  size
- add helper to checkci
- add verify committer script to avoid committer with wrong git identify
This commit is contained in:
MorganGeek 2020-07-12 16:19:25 +02:00
parent 336aaa2729
commit 3a3fc30b8c
16 changed files with 308 additions and 230 deletions

View File

@ -1,3 +1,4 @@
---
policies:
- type: commit
spec:
@ -15,7 +16,7 @@ policies:
maximumOfOneCommit: true
conventional:
types:
- "type"
- type
scopes:
- "scope"
- scope
descriptionLength: 72

View File

@ -1,3 +1,4 @@
---
#- search: /Something [bB]ad/
# replacement: Something Good
#- search: foobar

View File

@ -1,4 +1,5 @@
---
- name: No FIXME
pattern: 'FIXME'
pattern: FIXME
- name: No TODO
pattern: 'TODO'
pattern: TODO

View File

@ -1,3 +1,7 @@
# Introduction
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
## Prerequisites
### Centos
@ -34,13 +38,13 @@ run `zsh .scripts/upgrade.sh`
- Install pip and pipenv
- Install AWS-CLI
### If Yubico is installed, run this :
### If Yubico is installed, run this
`sudo ansible-playbook ~/.scripts/ansible/macsecure_playbook.yaml`
#### In cases of `\n` errors with zsh
https://github.com/robbyrussell/oh-my-zsh/issues/6764#issuecomment-384045008
[Source](https://github.com/robbyrussell/oh-my-zsh/issues/6764#issuecomment-384045008)
```
cd $ZSH

View File

@ -53,7 +53,7 @@ chmod 755 /bin/git-ftp
yum install golang golang-godoc golang-vet golang-src golang-pkg-linux-amd64 -y
echo "export GOPATH=\"$HOME/go\"" >>~/.zshrc
echo "export PATH=\"$GOPATH/bin:$PATH\"" >>~/.zshrc
. ~/.zshrc
. "$HOME/.zshrc"
# Install Hugo
mkdir "$HOME/src"

View File

@ -16,12 +16,15 @@ repos:
- id: detect-aws-credentials
- id: detect-private-key
- id: end-of-file-fixer
- id: flake8
- id: mixed-line-ending
- id: pretty-format-json
- id: requirements-txt-fixer
- id: sort-simple-yaml
- id: trailing-whitespace
- repo: https://gitlab.com/pycqa/flake8.git
rev: master
hooks:
- id: flake8
- repo: git://github.com/antonbabenko/pre-commit-terraform
rev: v1.31.0 # Get the latest from: https://github.com/antonbabenko/pre-commit-terraform/releases
hooks:
@ -63,13 +66,6 @@ repos:
pass_filenames: false
args: [-l=infra] #NOTE: that this is the directory you created earlier to host your terraform
verbose: true
- repo: https://github.com/askulkarni2/pre-commit-docker-jenkinslint
rev: 88dd7702e44bbc4dc742b37897e1ded7fe99dfba
hooks:
- id: docker-jenkinslint
language: docker_image
entry: --entrypoint /usr/local/bin/run-jflint.sh askulkarni2/jenkinslint
files: Jenkinsfile
- repo: https://github.com/Lucas-C/pre-commit-hooks-nodejs
rev: v1.1.1
hooks:
@ -92,7 +88,6 @@ repos:
rev: 1.2.0
hooks:
- id: relint
- repo: git@github.com:Vimjas/vint.git
rev: master
hooks:
@ -104,3 +99,18 @@ repos:
- id: conform
stages:
- commit-msg
- repo: local
hooks:
- id: check-committer
name: Check Committer Identity
entry: pre-commit-verify-committer
language: system
always_run: true
files: ''
- repo: https://github.com/askulkarni2/pre-commit-docker-jenkinslint
rev: 88dd7702e44bbc4dc742b37897e1ded7fe99dfba
hooks:
- id: docker-jenkinslint
language: docker_image
entry: --entrypoint /usr/local/bin/run-jflint.sh askulkarni2/jenkinslint
files: Jenkinsfile

View File

@ -4,48 +4,48 @@ echo "Hello $(whoami)! Let's get you set up."
# Make sure Code directory exists
echo "mkdir -p $HOME/Code"
mkdir -p ~/Code
ln -snf ~/Code/dotfiles/dot_scripts ~/.scripts
chmod +x ~/.scripts/*.sh
mkdir -p "$HOME/Code"
ln -snf "$HOME/Code/dotfiles/dot_scripts" "$HOME/.scripts"
chmod +x "$HOME/.scripts/*.sh"
~/.scripts/install_linux_packages.sh
~/.scripts/install_homebrew.sh
"$HOME/.scripts/install_linux_packages.sh"
"$HOME/.scripts/install_homebrew.sh"
# Path to ruby
export PATH="/usr/local/opt/ruby/bin:$PATH"
# Create symbolic links
~/.scripts/symbolic_links.sh
"$HOME/.scripts/symbolic_links.sh"
# Install user applications
~/.scripts/install_macpackages.sh
~/.scripts/install_linux_user_apps.sh
"$HOME/.scripts/install_macpackages.sh"
"$HOME/.scripts/install_linux_user_apps.sh"
# Switch to ZSH
echo "switching to ZSH"
command -v zsh >>/etc/shells
chsh -s "$(command -v zsh)"
~/.scripts/sdkmandeps.sh
~/.scripts/rubydeps.sh
~/.scripts/bundlerdeps.sh
~/.scripts/ohmyzshdeps.sh
~/.scripts/vimdeps.sh
~/.scripts/install_no-more-secrets.sh
~/.scripts/load_macos_defaults.sh
~/.scripts/configure_etc_hosts.sh
~/.scripts/pythondeps.sh
~/.scripts/install_baton.sh
~/.scripts/rustdeps.sh
~/.scripts/npmdeps.sh
"$HOME/.scripts/sdkmandeps.sh"
"$HOME/.scripts/rubydeps.sh"
"$HOME/.scripts/bundlerdeps.sh"
"$HOME/.scripts/ohmyzshdeps.sh"
"$HOME/.scripts/vimdeps.sh"
"$HOME/.scripts/install_no-more-secrets.sh"
"$HOME/.scripts/load_macos_defaults.sh"
"$HOME/.scripts/configure_etc_hosts.sh"
"$HOME/.scripts/pythondeps.sh"
"$HOME/.scripts/install_baton.sh"
"$HOME/.scripts/rustdeps.sh"
"$HOME/.scripts/npmdeps.sh"
terraform-docs completion zsh >/usr/local/share/zsh/site-functions/_terraform-docs
autoload -U compinit && compinit
~/.scripts/godeps.sh
~/.scripts/install_weavescope.sh
~/.scripts/install_bashtop.sh
~/.scripts/install_awsls.sh
~/.scripts/configure_git_hooks.sh
~/.scripts/upgrade.sh
~/.scripts/reload.sh
"$HOME/.scripts/godeps.sh"
"$HOME/.scripts/install_weavescope.sh"
"$HOME/.scripts/install_bashtop.sh"
"$HOME/.scripts/install_awsls.sh"
"$HOME/.scripts/configure_git_hooks.sh"
"$HOME/.scripts/upgrade.sh"
"$HOME/.scripts/reload.sh"

View File

@ -1,4 +1,28 @@
#!/usr/bin/env bash
###
### checkci — checks a Jenkinsfile syntax against a real Jenkins instance
###
### Note: this script gets:
### the (jenkins) username from git config
### the (jenkins) password/secret from Environment variable $JENKINS_SECRET
### the (jenkins) URL from Environment variable $JENKINS_URL
###
### Usage:
### checkci.sh [jenkinsfile]
###
### Options:
### [input] path to Jenkinsfile (optional).
### -h Show this message.
help() {
gsed -rn 's/^### ?//;T;p' "$0"
}
if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then
help
exit 1
fi
function _checkci() {
local username
username="$(git config --global -l | grep "user.email" | cut -d'@' -f1 | cut -d'=' -f2)"

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Copy pre-commit hooks
cd ~/Code/dotfiles || exit
cd "$HOME/Code/dotfiles" || exit
git config --global init.templateDir ~/.git-template
pre-commit init-templatedir ~/.git-template
copyhooks

View File

@ -0,0 +1,31 @@
#!/bin/bash
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
# shellcheck disable=SC1090
source "$HOME/.zsh_functions"
source "$HOME/.scripts/secrets.sh"
REMOTE=$(git config --get remote.origin.url)
USERNAME=$(git config --get user.name)
EMAIL=$(git config --get user.email)
checkEmailUsername() {
if [[ "$EMAIL" != "$1" ]]; then
warning "Invalid email: $EMAIL for remote $REMOTE"
arrow "fix this by running :\ngit config user.email $1"
exit 1
fi
if [[ "$USERNAME" != "$2" ]]; then
warning "Invalid username: $USERNAME for remote $REMOTE"
arrow "fix this by running :\ngit config user.name \"$2\""
exit 1
fi
}
if [[ $REMOTE == *"$COMPANY_NAME"* ]] && [[ "$REMOTE" != *"dotfiles"* ]]; then
checkEmailUsername "$GIT_PRO_EMAIL" "$GIT_PRO_USER"
else
checkEmailUsername "$GIT_PERSONAL_EMAIL" "$GIT_PERSONAL_USER"
fi

View File

@ -2,6 +2,7 @@
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh"
# shellcheck disable
# Reload
echo "Reloading config"

View File

@ -1,39 +1,40 @@
#!/usr/bin/env bash
echo "Creating symbolic links"
ln -snf ~/Code/dotfiles/dot_profile ~/.profile
ln -snf ~/.local/share/chezmoi/ ~/dotfiles
ln -snf ~/Code/dotfiles/Gemfile ~/Gemfile
ln -snf ~/Code/dotfiles/README.md ~/README.md
ln -snf ~/Code/dotfiles/dot_bash_profile ~/.bash_profile
ln -snf ~/Code/dotfiles/dot_gitconfig ~/.gitconfig
ln -snf ~/Code/dotfiles/dot_macos ~/.macos
ln -snf ~/Code/dotfiles/dot_scripts ~/.scripts
ln -snf ~/Code/dotfiles/dot_scripts/checkci.sh /usr/local/bin/checkci
ln -snf ~/Code/dotfiles/dot_vimrc ~/.vimrc
ln -snf "$HOME/dotfiles/dot_profile" "$HOME/.profile"
ln -snf "$HOME/.local/share/chezmoi/" "$HOME/dotfiles"
ln -snf "$HOME/dotfiles/Gemfile" "$HOME/Gemfile"
ln -snf "$HOME/dotfiles/README.md" "$HOME/README.md"
ln -snf "$HOME/dotfiles/dot_bash_profile" "$HOME/.bash_profile"
ln -snf "$HOME/dotfiles/dot_gitconfig" "$HOME/.gitconfig"
ln -snf "$HOME/dotfiles/dot_macos" "$HOME/.macos"
ln -snf "$HOME/dotfiles/dot_scripts" "$HOME/.scripts"
ln -snf "$HOME/dotfiles/dot_scripts/checkci.sh" /usr/local/bin/checkci
ln -snf "$HOME/dotfiles/dot_scripts/pre-commit-verify-committer.sh" /usr/local/bin/pre-commit-verify-committer
ln -snf "$HOME/dotfiles/dot_vimrc" "$HOME/.vimrc"
# custom linters
ln -snf ~/Code/dotfiles/dot_vim/ale_linters ~/.vim/ale_linters
ln -snf ~/Code/dotfiles/dot_aliases ~/.aliases
ln -snf ~/Code/dotfiles/dot_zsh_aliases ~/.zsh_aliases
ln -snf ~/Code/dotfiles/dot_zsh_functions ~/.zsh_functions
ln -snf ~/Code/dotfiles/dot_zshrc ~/.zshrc
ln -snf ~/Code/dotfiles/dot_zshrc.pre-oh-my-zsh ~/.zshrc.pre-oh-my-zsh
ln -snf ~/Code/dotfiles/private_dot_ssh/config ~/.ssh/config
ln -snf ~/Code/dotfiles/requirements.txt ~/requirements.txt
ln -snf ~/Code/dotfiles/dot_surfraw.conf ~/.surfraw.conf
ln -snf ~/Code/dotfiles/private_dot_3llo/config.sh ~/.3llo_config
ln -snf ~/Code/dotfiles/dot_ansiweatherrc ~/.ansiweatherrc
ln -snf ~/Code/dotfiles/dot_p10k.zsh ~/.p10k.zsh
ln -snf ~/Code/dotfiles/dot_git-template ~/.git-template
ln -snf ~/Code/dotfiles/private_dot_newsboat ~/.newsboat
ln -snf ~/Code/dotfiles/private_dot_config/Code ~/.config/Code
ln -snf ~/Code/dotfiles/private_dot_config/neofetch ~/.config/neofetch
ln -snf ~/Code/dotfiles/private_dot_config/gh ~/.config/gh
ln -snf ~/Code/dotfiles/private_dot_config/htop ~/.config/htop
ln -snf ~/Code/dotfiles/private_dot_config/bashtop ~/.config/bashtop
ln -snf ~/Code/dotfiles/private_dot_config/wtf ~/.config/wtf
ln -snf ~/Code/dotfiles/private_dot_config/yamllint ~/.config/yamllint
ln -snf ~/Code/dotfiles/dot_git-template/.pre-commit-config.yaml ~/Code/dotfiles/.pre-commit-config.yaml
ln -snf "$HOME/dotfiles/dot_vim/ale_linters" "$HOME/.vim/ale_linters"
ln -snf "$HOME/dotfiles/dot_aliases" "$HOME/.aliases"
ln -snf "$HOME/dotfiles/dot_zsh_aliases" "$HOME/.zsh_aliases"
ln -snf "$HOME/dotfiles/dot_zsh_functions" "$HOME/.zsh_functions"
ln -snf "$HOME/dotfiles/dot_zshrc" "$HOME/.zshrc"
ln -snf "$HOME/dotfiles/dot_zshrc.pre-oh-my-zsh" "$HOME/.zshrc.pre-oh-my-zsh"
ln -snf "$HOME/dotfiles/private_dot_ssh/config" "$HOME/.ssh/config"
ln -snf "$HOME/dotfiles/requirements.txt" "$HOME/requirements.txt"
ln -snf "$HOME/dotfiles/dot_surfraw.conf" "$HOME/.surfraw.conf"
ln -snf "$HOME/dotfiles/private_dot_3llo/config.sh" "$HOME/.3llo_config"
ln -snf "$HOME/dotfiles/dot_ansiweatherrc" "$HOME/.ansiweatherrc"
ln -snf "$HOME/dotfiles/dot_p10k.zsh" "$HOME/.p10k.zsh"
ln -snf "$HOME/dotfiles/dot_git-template" "$HOME/.git-template"
ln -snf "$HOME/dotfiles/private_dot_newsboat" "$HOME/.newsboat"
ln -snf "$HOME/dotfiles/private_dot_config/Code" "$HOME/.config/Code"
ln -snf "$HOME/dotfiles/private_dot_config/neofetch" "$HOME/.config/neofetch"
ln -snf "$HOME/dotfiles/private_dot_config/gh" "$HOME/.config/gh"
ln -snf "$HOME/dotfiles/private_dot_config/htop" "$HOME/.config/htop"
ln -snf "$HOME/dotfiles/private_dot_config/bashtop" "$HOME/.config/bashtop"
ln -snf "$HOME/dotfiles/private_dot_config/wtf" "$HOME/.config/wtf"
ln -snf "$HOME/dotfiles/private_dot_config/yamllint" "$HOME/.config/yamllint"
ln -snf "$HOME/dotfiles/dot_git-template/.pre-commit-config.yaml" "$HOME/dotfiles/.pre-commit-config.yaml"
# Other symbolic links + Install Docker Desktop for Mac
case "$(uname -s)" in

View File

@ -100,13 +100,18 @@ let g:ale_fix_on_save = 1
let g:ale_completion_enabled = 1
let g:ale_open_list = 1
"\ 'yaml': ['prettier'],
let g:ale_fixers = {
\ '*': ['remove_trailing_lines', 'trim_whitespace'],
\ 'python': ['black'],
\ 'rust': ['rustfmt'],
\ 'Jenkinsfile': ['checkci'],
\ 'sh' : ['shfmt'],
\ 'zsh' : ['shfmt'],
\}
let g:ale_linters = {'zsh': ['shellcheck']}
" when running at every change you may want to disable quickfix
let g:prettier#quickfix_enabled = 1
let g:prettier#quickfix_auto_focus = 1
@ -188,6 +193,7 @@ let g:syntastic_python_checkers = ['pylint']
let g:syntastic_shell_checkers = ['shellcheck']
let g:syntastic_yaml_checkers = ['yamllint']
let g:syntastic_vim_checkers = ['vint']
let g:syntastic_zsh_checkers = ['shellcheck']
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
@ -198,3 +204,4 @@ let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
au BufNewFile,BufRead Jenkinsfile setf groovy
au BufRead,BufNewFile *.sh setfiletype sh

View File

@ -14,7 +14,7 @@ alias origin='setorigin'
alias goto='git go'
alias master='goto master'
alias develop='goto develop'
alias gg='git config -l | grep -i' # search git config for ...
alias gg='git config -l | grip' # search git config for ...
alias ucommit='PRE_COMMIT_ALLOW_NO_CONFIG=1 git commit --no-verify'
# Docker
@ -68,14 +68,14 @@ alias feeds='rss'
alias ddg='ddgr'
alias goo='googler'
alias se='sr -elvi'
alias eg='env | grep -i' # search env variables for pattern
alias eg='env | grip' # search env variables for pattern
alias engines='sr -elvi'
alias grep='rg'
alias grip='grep -i'
alias usernames="python3 $HOME/Code/sherlock/sherlock.py --rank --print-found"
alias ygg="torrengo -s ygg"
alias ag='alias | grep -i' # search for patten among aliases
alias hg='history | grep -i' # search for pattern among history
alias ag='alias | grip' # search for patten among aliases
alias hg='history | grip' # search for pattern among history
alias hist='history'
alias codestats='tokei'
alias dups='file_dups'
@ -134,7 +134,7 @@ alias ctrl-c='pbcopy'
alias s=ls
alias sl=ll
alias ls='lsd'
alias lsg='ll | grep -i' # show me files matching "ls grep"
alias lsg='ll | grip' # show me files matching "ls grep"
alias lh='ls -alt | head' # see the last modified files
alias tree='ls --almost-all --tree'
alias v=vi
@ -180,12 +180,13 @@ alias current_year='`echo date +"%Y"`'
alias headers='curl -I --compress' # Find out if remote server supports gzip / mod_deflate or not #
alias https='http --default-scheme=https' # useful alias stealed from a colleague. http is provided by httpie
alias path='echo -e ${PATH//:/\\n}' # Explode and display current PATH
alias p='ps -ef | grep -i ' # Show matching processes. Usage : p <process name>
alias p='ps -ef | grip ' # Show matching processes. Usage : p <process name>
alias root='sudo -i'
alias ':q'='exit'
alias current_hour='date +"%H:%M"'
alias current_time='current_hour'
alias runhooks='pre-commit run -a'
alias tryhook='pre-commit try-repo .'
alias whatyear='current_year'
alias whathour='current_time'
alias whattime='whathour'
@ -193,6 +194,7 @@ alias whattime='whathour'
# Linters
alias checken="aspell check -d en"
alias checkfr="aspell check -d fr"
alias fixallscripts="shfmt -w -l -i 2 -ci **/*.sh"
# Development
alias gw='./gradlew'

View File

@ -98,39 +98,39 @@ function git_listobjectsbysize() {
done
# sort files by SHA1, de-dupe list and finally re-sort by filesize
sort --key 3 "$tempFile" | \
uniq | \
sort --key 3 "$tempFile" |
uniq |
sort --key 4 --numeric-sort --reverse
# remove temp file
rm -f "$tempFile"
}
function top_commands() {
local filter="$1"
history | \cat | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a; }' | grep -v "./" | column -c3 -s " " -t | grep "$filter" | sort -nr | nl | head -n50
local max_results=${2:-'50'}
history | \cat | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a; }' | grep -v "./" | column -c3 -s " " -t | grep "$filter" | sort -nr | nl | head "-n$max_results"
}
function top_commands_full() {
local filter="$1"
history | \cat | awk '{$1=$1};1' | sed 's/^[0-9 TAB]*//g' | awk '{CMD[$0]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "%\t" a; }' | grep "$filter" | sort -nr | nl | head -n50
local max_results=${2:-'50'}
history | \cat | awk '{$1=$1};1' | sed 's/^[0-9 TAB]*//g' | awk '{CMD[$0]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "%\t" a; }' | grep "$filter" | sort -nr | nl | head "-n$max_results"
}
function suggest_aliases() {
local search_input_size=${1:-'50'}
header "alias recommendations"
while read -r line
do
while read -r line; do
local matching_aliases=$(ag "$line")
if [ ! -z "$matching_aliases" ]; then
success "there is an alias for $line :"
while read -r alias_line
do
while read -r alias_line; do
arrow "$alias_line"
done < <(echo "$matching_aliases")
echo
fi
done < <(top_commands_full | awk '{ $1=""; $2=""; $3=""; print}' | awk 'NF' | awk '{$1=$1};1' | awk -v COUNT=1 'NF>COUNT' | head -20)
done < <(top_commands_full "" "$search_input_size" | awk '{ $1=""; $2=""; $3=""; print}' | awk 'NF' | awk '{$1=$1};1' | awk -v COUNT=1 'NF>COUNT' | head "-$search_input_size")
}
function istherenewissues() {
LASTISSUE=$(newissues | sed $'s,\x1b\\[[0-9;]*[a-zA-Z],,g' | awk 'FNR==2{print $2}')
if [[ -f "$HOME/.newjiraissue" ]]
then
if [[ -f "$HOME/.newjiraissue" ]]; then
previous_jira_issue=$(\cat "$HOME/.newjiraissue" | sed $'s,\x1b\\[[0-9;]*[a-zA-Z],,g') # the sed part is for removing output colors
if [ "$LASTISSUE" != "$previous_jira_issue" ]; then
newissues
@ -142,24 +142,20 @@ function istherenewissues() {
}
function aboutpage() {
year=$(echo "$*" | egrep -Eo '\b[[:digit:]]{4}\b' | head -n1)
if [ -z "$year" ]
then
if [ -z "$year" ]; then
year=$(curl -sSL "$*" | tr '<' '\r' | \egrep -i "date|datetime" -A 1 | \grep -Eo '\b[[:digit:]]{4}\b' | head -n1)
fi
author=$(curl -sSL "$*" | tr '<' '\r' | \egrep -i "author" -A 1 | \grep -Eo '([A-Z][A-Za-z]+\s([A-Za-z ]+)*)' | head -n1)
title=$(curl -sSL "$*" | tr '<' '<\n' | \grep title -A 1 | head -n1 | sed -E 's/.*<title>(.*)<\/title>.*/\1/' | sed "s/ [^[:alnum:]]*$author//")
yearint=$(($year + 0))
currentyear=$(echo `date +"%Y"`)
if [ ! -z "$author" ]
then
currentyear=$(echo $(date +"%Y"))
if [ ! -z "$author" ]; then
echo "by $author"
fi
if [ ! -z "$title" ]
then
if [ ! -z "$title" ]; then
echo "-> $title"
fi
if [[ $yearint -ge 1970 && $yearint -le $currentyear ]]
then
if [[ $yearint -ge 1970 && $yearint -le $currentyear ]]; then
echo "$yearint"
fi
if [ ! -z "$title" ] && [ ! -z "$author" ] && [[ $yearint -ge 1970 && $yearint -le $currentyear ]]; then
@ -174,7 +170,7 @@ function col() {
}
# Skip first x words in line
# via https://blog.developer.atlassian.com/ten-tips-for-wonderful-bash-productivity/
function skip {
function skip() {
n=$(($1 + 1))
cut -d' ' -f$n-
}
@ -199,12 +195,12 @@ cmd_loc="find . -type f \( \
# Unique lines of code
# Via https://text.causal.agency/004-uloc.txt
function uloc {
function uloc() {
eval "$cmd_loc | LANG=C LC_CTYPE=C sort -u | wc -l"
}
# Top lines of code
function toploc {
function toploc() {
eval "$cmd_loc | LANG=C LC_CTYPE=C cut -c 1-100 | LANG=C LC_CTYPE=C sort | uniq -c | LANG=C LC_CTYPE=C sort -nr | head -50"
}
@ -227,7 +223,8 @@ function meteo() {
curl "fr.wttr.in/$*"
}
function how_in() {
where="$1"; shift
where="$1"
shift
IFS=+ curl "cht.sh/${where}/$*"
}
function rate() {
@ -235,8 +232,7 @@ function rate() {
}
function transfer() {
# check arguments
if [ $# -eq 0 ];
then
if [ $# -eq 0 ]; then
warning "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md"
return 1
fi
@ -247,18 +243,15 @@ function transfer() {
# upload stdin or file
file=$1
if tty -s;
then
if tty -s; then
basefile=$(basename "$file" | sed -e 's/[^a-zA-Z0-9._-]/-/g')
if [ ! -e $file ];
then
if [ ! -e $file ]; then
error "File $file doesn't exists."
return 1
fi
if [ -d $file ];
then
if [ -d $file ]; then
# zip directory and transfer
zipfile=$(mktemp -t transferXXX.zip)
cd $(dirname $file) && zip -r -q - $(basename $file) >>$zipfile
@ -285,27 +278,27 @@ function whichfunc() {
}
# git shortcuts
function gcrb {
function gcrb() {
branch=$1
git checkout -b $branch origin/$branch
}
function terraform-compliance { docker run --rm -v "$(pwd):/target" -i -t eerkunt/terraform-compliance "$@"; }
function checkov { docker run -i --rm -v "$(pwd):/tf" bridgecrew/checkov -d /tf "$@" ; }
function vimat {
function terraform-compliance() { docker run --rm -v "$(pwd):/target" -i -t eerkunt/terraform-compliance "$@"; }
function checkov() { docker run -i --rm -v "$(pwd):/tf" bridgecrew/checkov -d /tf "$@"; }
function vimat() {
vim +/$1 $2
}
function installhooks {
function installhooks() {
pre-commit install --install-hooks --overwrite --allow-missing-config
}
function copyhooks {
function copyhooks() {
cp -f ~/.git-template/.pre-commit-config.yaml ./
installhooks;
runhooks;
installhooks
runhooks
}
function httperr {
function httperr() {
curl -s "https://http.cat/$1" | imgcat
}
function terragrunt_color {
function terragrunt_color() {
BOLD=$(tput bold)
BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
@ -331,9 +324,7 @@ function terragrunt_color {
-e "s/\( *.*: *\".*\"\)/${GREEN}\1${RESET}/"
}
function git-project {
function git-project() {
if [ -d "$REPO_PATH" ]; then
REPO_PATH="$(pwd)"
fi
@ -343,36 +334,35 @@ function git-project {
cd "$dir" || exit
fi
}
function jenkins-cli {
function jenkins-cli() {
local script_location=$(find $HOME/code/jenkins-cloudbees-core -name "jenkins-cli.sh")
eval "$script_location $*"
}
function passwords {
function passwords() {
bw list items --search "$1" | jq -c '.[] | .name + " " + .login.username + ":" + .login.password + " " + .login.uris[0].uri'
}
function password {
function password() {
bw get password "$1"
}
function vaultgetsecret {
function vaultgetsecret() {
local secret=$(grep -A 500 "ANSIBLE_VAULT" "$1" | awk '{$1=$1;print}' | \grep -Eo "^[0-9a-z^ ]+$")
local secret_string=$(echo "\$ANSIBLE_VAULT;1.1;AES256\n$secret")
echo "$secret_string" | awk '{$1=$1;print}' | ansible-vault decrypt --vault-password-file=$VAULT_PASSWORD_FILE
}
function setorigin {
function setorigin() {
gra origin "$1" 2>/dev/null
grset origin "$1"
if [[ $string =~ "collibra" ]]; then
if [[ $string =~ "$COMPANY_NAME" ]]; then
copyhooks
fi
}
function gitpushcurrentremote {
function gitpushcurrentremote() {
gitpushallremote "$(git_current_branch)"
}
function gitpushallremote {
function gitpushallremote() {
local param_branch="$1"
grv
grv | grep push | awk '{print $1}' | while read -r remote
do
grv | grep push | awk '{print $1}' | while read -r remote; do
if [ -z "$param_branch" ]; then
arrow "pushing all branches to $remote"
git push --all "$remote"
@ -382,13 +372,13 @@ function gitpushallremote {
fi
done
}
function clone {
function clone() {
local folder=$(basename $1 | sed 's/\.git.*//g')
arrow "git project identified as $folder"
if gcls "$1"; then
if [[ -n "$folder" ]]; then
cd "$folder" || exit
if [[ $string =~ "collibra" ]]; then
if [[ "$string:u" =~ "$COMPANY_NAME:u" ]]; then
copyhooks
fi
else
@ -398,7 +388,7 @@ function clone {
error "unable to clone repository url : $1"
fi
}
function colorpic {
function colorpic() {
local picture_url="$1"
arrow "Colorizing $picture_url"
local result_url=$(\curl -F "image=@$picture_url" -H "api-key:$COLORPIC_APIKEY" https://api.deepai.org/api/colorizer -s | jq '.output_url' | strings)
@ -406,36 +396,36 @@ function colorpic {
arrow "Display in progress..."
eval "\curl -s $result_url | imgcat"
}
function brewadd {
function brewadd() {
brew install "$1"
ansible 127.0.0.1 -m lineinfile -a "path=~/Brewfile line='brew \"$1\"'"
}
function pipadd {
function pipadd() {
pip install "$1"
pip freeze >"$HOME/requirements.txt"
}
function goadd {
function goadd() {
ansible 127.0.0.1 -m lineinfile -a "path=~/.scripts/godeps.sh line='go get -u -v $1'"
go get -u -v "$1"
}
function rssadd {
function rssadd() {
ansible 127.0.0.1 -m lineinfile -a "path=~/.newsboat/urls line='"$1"'"
newsboat
}
function bookmarkadd {
function bookmarkadd() {
ansible 127.0.0.1 -m lineinfile -a "path=$HOME/Code/bookmarks/README.md insertafter='"$1"' line='* "$2"'"
}
function backupgithub {
function backupgithub() {
curl -sL "https://api.github.com/users/$1/repos" | jq -r '.[] | .ssh_url' | xargs -n1 git clone --mirror --no-hardlinks
}
# Make a directory and cd to it
function take {
function take() {
mkdir -p $@ && cd ${@:$#}
}
function endofday {
function endofday() {
local planned_end=$(moro status 2>&1 | \grep -Eo "Working until ([0-9:]+) will make.*" | uniq | \grep -Eo "([0-9]+:[0-9]+)")
local max_hour="$planned_end"
local min_hour=`current_time`
local min_hour=$(current_time)
if [ -z "$planned_end" ]; then
local clockout=$(moro report 2>&1 | \grep -Eo "Clock out.*([0-9:]+)" | \grep -Eo "([0-9]+:[0-9]+)")
max_hour="$clockout"
@ -448,13 +438,13 @@ function endofday {
moro report
fi
}
function convtimetodate {
function convtimetodate() {
date -j -f '%H:%M' "$1" +'%Y/%m/%d %H:%M'
}
function convtimetotimestamp {
function convtimetotimestamp() {
date -j -f '%H:%M' "$1" +'%s'
}
function is_earlier {
function is_earlier() {
local first=$(convtimetotimestamp "$1")
local second=$(convtimetotimestamp "$2")
if [ "$second" -gt "$first" ]; then
@ -463,32 +453,32 @@ function is_earlier {
false
fi
}
function gitydiff {
function gitydiff() {
local path_to_file="$1"
git show "HEAD:$path_to_file" | colordiff -y - "$path_to_file"
}
function dl_stopwords {
function dl_stopwords() {
curl -Lks https://raw.githubusercontent.com/MorganGeek/bookmarks/master/stopwords.txt -o "$HOME/stopwords.txt"
}
function file_getwords {
dl_stopwords;
function file_getwords() {
dl_stopwords
\cat "$1" | tr '[:upper:]' '[:lower:]' | \grep -o -E '\w{3,}' | \grep --invert-match --word-regexp --fixed-strings --file="$HOME/stopwords.txt" | \sed 's/s$//g' | \sed 's/ing$//g' | sort | uniq -c | sort --numeric-sort --reverse
}
function file_getpairs {
dl_stopwords;
function file_getpairs() {
dl_stopwords
\cat "$1" | tr '[:upper:]' '[:lower:]' | \grep -o -E '\w{3,} \w{3,}' | \grep --invert-match --word-regexp --fixed-strings --file="$HOME/stopwords.txt" | \sed 's/s$//g' | \sed 's/ing$//g' | sort | uniq -c | sort --numeric-sort --reverse
}
function file_dups {
function file_dups() {
\cat "$1" | sort | uniq -c | sort -nr
}
function foreach_run {
function foreach_run() {
find . -name "$1" -exec "$2" {} \;
}
# input should be something like : 1-10 to generate one number between 1 and 10
function chance {
function chance() {
[[ $(shuf -i "$1" -n 1) == 1 ]]
}
function runiflucky {
function runiflucky() {
if chance "1-10"; then
if alias "$1" 2>/dev/null || (compgen -A function | grep "$1" && compgen -A function "$1" 1>/dev/null); then
eval "$1"

View File

@ -131,6 +131,11 @@ export COLORPIC_APIKEY=""
export VAULT_PASSWORD_FILE=""
export DEFAULT_BROWSER=${DEFAULT_BROWSER:-'Google Chrome'}
export TRELLO_BOARD_URL=""
export COMPANY_NAME=""
export GIT_PERSONAL_EMAIL=""
export GIT_PERSONAL_USER=""
export GIT_PRO_EMAIL=""
export GIT_PRO_USER=""
if test -f "$HOME/.scripts/secrets.sh"; then
chmod +x "$HOME/.scripts/secrets.sh"