From 35a45c9cae65c21fcf224fcdbdade27e7a3955c9 Mon Sep 17 00:00:00 2001 From: Adam Lamers Date: Fri, 4 Nov 2016 17:11:25 -0500 Subject: [PATCH] add pwgen utility Move common zsh/bash things into a separate file Add pwgen utility to generate xkcd-style passphrases --- bash_profile | 46 ++------------------------ common_shell_functions | 72 +++++++++++++++++++++++++++++++++++++++++ dictionary.txt.gz | Bin 0 -> 46330 bytes install.conf.yaml | 3 ++ util/pwgen.py | 27 ++++++++++++++++ zshrc | 46 ++------------------------ 6 files changed, 108 insertions(+), 86 deletions(-) create mode 100644 common_shell_functions create mode 100644 dictionary.txt.gz create mode 100755 util/pwgen.py diff --git a/bash_profile b/bash_profile index f8785e4..9be1e90 100644 --- a/bash_profile +++ b/bash_profile @@ -33,49 +33,9 @@ shopt -s cmdhist export HISTCONTROL=ignoredups export HISTIGNORE="&:ls:[bf]g:exit" -function local_pi() { -LOCAL_PI_IP=$(en4ip) -ssh -b $LOCAL_PI_IP pi@169.254.100.100 -} - -#################### Project Initialization Tools ################### -function download_bootstrap() { - mkdir -p static - mkdir -p static/css - mkdir -p static/js - - cd static/css - wget "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" - cd ../ - cd js - wget "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" - cd ../.. -} - -function init_flask() { - mkdir -p templates - touch templates/index.html - curl "https://raw.githubusercontent.com/lewagon/bootstrap-boilerplate/gh-pages/index.html" > templates/index.html - FLASK_TEMPLATE="from flask import Flask, render_template, request - -app = Flask(__name__) - -@app.route('/') -def index(): - return render_template('index.html') - -if __name__ == '__main__': - app.debug = True - app.run() -" - echo "$FLASK_TEMPLATE" > app.py -} - -function weather() { - LOCATION=milwaukee - - curl wttr.in/$LOCATION -} +if [ -f ~/.common_shell_functions ]; then + . ~/.common_shell_functions +fi #Enable ~/.ssh/config host tab completion _complete_ssh_hosts () diff --git a/common_shell_functions b/common_shell_functions new file mode 100644 index 0000000..2b3e1e5 --- /dev/null +++ b/common_shell_functions @@ -0,0 +1,72 @@ +################################################################### +# This file is for shell functions common between shells: zsh, bash +################################################################### + +function local_pi() { +LOCAL_PI_IP=$(en4ip) +ssh -b $LOCAL_PI_IP pi@169.254.100.100 +} + +function pubkey() { + if [ -f ~/.ssh/id_rsa.pub ]; then + if which pbcopy &> /dev/null; then + cat ~/.ssh/id_rsa.pub | pbcopy + echo "Copied public key using pbcopy" + else + echo "pbcopy not available - printing public key" + echo + cat ~/.ssh/id_rsa.pub + fi + fi +} + +function pwgen() { + if [ -f ~/.dotfile_util/pwgen.py ]; then + if which python &> /dev/null; then + ~/.dotfile_util/pwgen.py 4 + else + echo "Need python for pwgen" + fi + else + echo "Could not find ~/.dotfile_util/pwgen.py" + fi +} + +#################### Project Initialization Tools ################### +function download_bootstrap() { + mkdir -p static + mkdir -p static/css + mkdir -p static/js + + cd static/css + wget "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" + cd ../ + cd js + wget "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" + cd ../.. +} + +function init_flask() { + mkdir -p templates + touch templates/index.html + curl "https://raw.githubusercontent.com/lewagon/bootstrap-boilerplate/gh-pages/index.html" > templates/index.html + FLASK_TEMPLATE="from flask import Flask, render_template, request + +app = Flask(__name__) + +@app.route('/') +def index(): + return render_template('index.html') + +if __name__ == '__main__': + app.debug = True + app.run() +" + echo "$FLASK_TEMPLATE" > app.py +} + +function weather() { + LOCATION=milwaukee + + curl wttr.in/$LOCATION +} diff --git a/dictionary.txt.gz b/dictionary.txt.gz new file mode 100644 index 0000000000000000000000000000000000000000..7b122a0a111b79130e0ebc310b209c5e5d438cfa GIT binary patch literal 46330 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 1: + word_length = int(sys.argv[1]) + else: + word_length = 3 + + dictfile = os.path.expanduser('~/.dictionary.txt.gz') + with gzip.open(dictfile) as f: + lines = f.readlines() + rand_engine = random.SystemRandom() + result = '' + words = [] + for _ in range(0, word_length): + word = rand_engine.choice(lines).strip().decode() + while len(word) > 10: + word = rand_engine.choice(lines).strip().decode() + result += word + words.append(word) + print(result) + print("From words: {}".format(', '.join(words))) diff --git a/zshrc b/zshrc index a034e55..01cdc64 100644 --- a/zshrc +++ b/zshrc @@ -49,46 +49,6 @@ alias vi='vim' #alias en4ip="ifconfig | grep -A1 en4 | tail -n1 | awk 'BEGIN { FS=\" \" }; {print \$2}'" alias en4ip="ifconfig | grep -Eo '169.254.\d{1,3}.\d{1,3}' | head -n1" -function local_pi() { -LOCAL_PI_IP=$(en4ip) -ssh -b $LOCAL_PI_IP pi@169.254.100.100 -} - -#################### Project Initialization Tools ################### -function download_bootstrap() { - mkdir -p static - mkdir -p static/css - mkdir -p static/js - - cd static/css - wget "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" - cd ../ - cd js - wget "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" - cd ../.. -} - -function init_flask() { - mkdir -p templates - touch templates/index.html - curl "https://raw.githubusercontent.com/lewagon/bootstrap-boilerplate/gh-pages/index.html" > templates/index.html - FLASK_TEMPLATE="from flask import Flask, render_template, request - -app = Flask(__name__) - -@app.route('/') -def index(): - return render_template('index.html') - -if __name__ == '__main__': - app.debug = True - app.run() -" - echo "$FLASK_TEMPLATE" > app.py -} - -function weather() { - LOCATION=milwaukee - - curl wttr.in/$LOCATION -} +if [ -f ~/.common_shell_functions ]; then + . ~/.common_shell_functions +fi