diff --git a/README.org b/README.org index 391210d..332e743 100644 --- a/README.org +++ b/README.org @@ -26,6 +26,8 @@ This creates [[file:~/.emacs.d/init.el][~/.emacs.d/init.el]] that starts the pro - [[file:ha-capturing-notes.org][ha-capturing-notes.org]] :: my engineering notebook. - [[file:ha-agendas.org][ha-agendas.org]] :: Attempts to "supe-up" my task list. - [[file:ha-email.org][ha-email.org]] :: Reading email using =notmuch= in a *Hey* fashion. + - [[file:ha-irc.org][ha-irc.org]] :: Connection to IRC servers using rcirc and bitlbee. + - [[file:ha-passwords.org][ha-passwords.org]] :: Code for generating passwords. - [[file:ha-programming.org][ha-programming.org]] :: configuration for /all/ programming languages, or at least, the simple ones. *Note:* Other functions and files come from essays written on [[http://www.howardism.org][my blog]]. To help with this, see [[file:support/final-initialize.el][support/final-initialize.el]] file. diff --git a/bootstrap.org b/bootstrap.org index 8b69c78..7033fda 100644 --- a/bootstrap.org +++ b/bootstrap.org @@ -122,8 +122,8 @@ The following loads the rest of my org-mode literate files. I add them as they a "ha-programming.org" "ha-agendas.org" "ha-email.org" - ;; "ha-irc.org" - ;; "ha-passwords.org" + "ha-irc.org" + "ha-passwords.org" "ha-remoting.org" "ha-feed-reader.org" diff --git a/data/adjectives.txt b/data/adjectives.txt new file mode 100644 index 0000000..793d52b --- /dev/null +++ b/data/adjectives.txt @@ -0,0 +1,230 @@ +adorable +adventurous +aggressive +agreeable +alert +alive +amused +angry +annoyed +annoying +anxious +arrogant +ashamed +attractive +average +awful +bad +beautiful +better +bewildered +bittersweet +blushing +shadowy +black +bloody +blue-eyed +blushing +bored +brainy +brave +breakable +bright +busy +calm +careful +cautious +charming +cheerful +clean +clear +clever +cloudy +clumsy +colorful +combative +comfortable +concerned +condemned +confused +cooperative +courageous +crazy +creepy +crowded +cruel +curious +cute +dangerous +dark +dead +defeated +defiant +delightful +depressed +determined +different +difficult +disgusted +distinct +disturbed +dizzy +doubtful +drab +dull +eager +easy +elated +elegant +embarrassed +enchanting +encouraging +energetic +enthusiastic +envious +evil +excited +expensive +exuberant +fair +faithful +famous +fancy +fantastic +fierce +filthy +fine +foolish +fragile +frail +frantic +friendly +frightened +funny +gentle +gifted +glamorous +gleaming +glorious +good +gorgeous +graceful +grieving +grotesque +grumpy +handsome +happy +healthy +helpful +helpless +hilarious +homeless +homely +horrible +hungry +hurt +ill +important +impossible +inexpensive +innocent +inquisitive +itchy +jealous +jittery +jolly +joyous +kind +lazy +light +lively +lonely +long +lovely +lucky +magnificent +misty +modern +motionless +muddy +mushy +mysterious +nasty +naughty +nervous +nice +nutty +obedient +obnoxious +odd +open +outrageous +outstanding +panicky +perfect +plain +pleasant +poised +poor +powerful +precious +prickly +proud +putrid +puzzled +quaint +real +relieved +repulsive +rich +scary +selfish +shiny +shy +silly +sleepy +smiling +smoggy +sore +sparkling +splendid +spotless +stormy +strange +stupid +successful +super +talented +tame +tasty +tender +tense +terrible +thankful +thoughtful +thoughtless +tired +tough +troubled +ugliest +ugly +uninterested +unsightly +unusual +upset +uptight +vast +victorious +vivacious +vivid +wandering +weary +wicked +wide-eyed +wild +witty +worried +worrisome +wrong +zany +zealous diff --git a/data/colors.txt b/data/colors.txt new file mode 100644 index 0000000..ad2bcfc --- /dev/null +++ b/data/colors.txt @@ -0,0 +1,48 @@ +aquamarine +black +blue +brass +brown +burnt-orange +canary +carmine +cerise +cerulean +cobalt +copper +cornflower +denim +eggplant +fuchsia +golden +goldenrod +gray +green +indigo +lavender +magenta +mahogany +maroon +navy +olive +orange +periwinkle +pine +pink +purple +red +red-brick +rose +scarlet +sepia +sienna +silver +tan +teal +turquoise +ultramarine +umber +vermilion +violet +white +yellow diff --git a/data/nouns.txt b/data/nouns.txt new file mode 100644 index 0000000..04cf66a --- /dev/null +++ b/data/nouns.txt @@ -0,0 +1,200 @@ +actor +advertisement +afternoon +airport +ambulance +animal +answer +apple +apricot +army +asparagus +australia +balloon +banana +battery +beach +beard +beaver +bed +belgium +boy +branch +breakfast +brother +camera +candle +car +caravan +carpet +cartoon +china +church +crayon +crowd +daughter +death +denmark +desert +diamond +dinner +disease +doctor +dog +dream +dress +easter +egg +eggplant +egypt +elephant +energy +engine +england +evening +eye +family +fern +fish +flag +flower +football +forest +fountain +france +furniture +garage +garden +gas +ghost +giraffe +girl +glass +gold +grass +greece +guitar +hair +hamburger +helicopter +helmet +holiday +honey +horse +hospital +house +hydrogen +ice +insect +insurance +iron +island +jackal +jelly +jeans +jewellery +jordan +juice +kangaroo +king +kitchen +kite +knife +lamp +lawyer +leather +lemon +library +lighter +lion +lizard +lock +london +lunch +machine +magazine +magician +manatee +manchester +market +match +microphone +monkey +morning +motorcycle +nail +napkin +needle +nest +nigeria +night +notebook +ocean +oil +orange +orchid +oxygen +oyster +painting +parrot +peach +pencil +piano +pillow +pizza +planet +plastic +plum +portugal +potato +queen +quill +rain +rainbow +raincoat +refrigerator +restaurant +river +rocket +room +rose +russia +salmon +sand +sandwich +school +scooter +shampoo +shamrock +shoe +soccer +spoon +stone +sugar +sweden +teacher +telephone +television +tent +thailand +tomato +toothbrush +traffic +train +truck +tumbleweed +uganda +umbrella +van +vase +vegetable +vulture +wall +whale +window +wire +xylophone +yacht +yak +zebra +zoo diff --git a/ha-passwords.org b/ha-passwords.org new file mode 100644 index 0000000..b8894d0 --- /dev/null +++ b/ha-passwords.org @@ -0,0 +1,108 @@ +#+TITLE: Personal Password Generator +#+AUTHOR: Howard X. Abrams +#+EMAIL: howard.abrams@gmail.com +#+DATE: 2021-01-11 +#+FILETAGS: :emacs: + +A literate programming version for Emacs code to generate and store passwords. + +#+BEGIN_SRC emacs-lisp :exports none + ;;; ha-passwords.el --- A literate programming version for Emacs code to generate and store passwords. -*- lexical-binding: t; -*- +;; +;; Copyright (C) 2021 Howard X. Abrams +;; +;; Author: Howard X. Abrams +;; Maintainer: Howard X. Abrams +;; Created: January 11, 2021 +;; +;; This file is not part of GNU Emacs. +;; +;; *NB:* Do not edit this file. Instead, edit the original literate file at: +;; /Users/howard.abrams/other/hamacs/ha-passwords.org +;; And tangle the file to recreate this one. +;; +;;; Code: +#+END_SRC +* Introduction +Let's assume that I store a bunch of words in data files: + +#+BEGIN_SRC emacs-lisp +(defvar ha-passwords-data-files (list (expand-file-name "adjectives.txt" + (expand-file-name "data" hamacs-source-dir)) + (expand-file-name "colors.txt" + (expand-file-name "data" hamacs-source-dir)) + (expand-file-name "nouns.txt" + (expand-file-name "data" hamacs-source-dir))) + "List of file name containing a data lines for our password generator. Order of these files matter.") + +(defvar ha-passwords-data nil + "Contains a list of lists of words that we can choose.") +#+END_SRC + +You can see where I'm going with this, can't you? Let's read them into list variables. + +#+BEGIN_SRC emacs-lisp +(defun ha-passwords--read-data-file (filename) + (with-temp-buffer + (insert-file-contents filename) + (split-string (buffer-string) "\n" t))) + +#+END_SRC + +Now we just get three or so words from our list of lists: + +#+BEGIN_SRC emacs-lisp +(defun ha-passwords-words () + (unless ha-passwords-data + (setq ha-passwords-data + (--map (ha-passwords--read-data-file it) ha-passwords-data-files))) + + (--map (nth (random (length it)) it) ha-passwords-data)) +#+END_SRC + +Let's make a password: + +#+BEGIN_SRC emacs-lisp +(defun ha-passwords-generate (&optional separator) + (unless separator + (setq separator "-")) + + (let* ((choices '("!" "@" "#" "$" "%" "^" "&" "*")) + (choice (random (length choices))) + (number (1+ choice))) + (->> (ha-passwords-words) + (s-join separator) + (s-capitalize) + (s-append (nth choice choices)) + (s-append (number-to-string number))))) +#+END_SRC + +#+BEGIN_SRC emacs-lisp +(defun generate-password (&optional separator) + (interactive) + (let ((passphrase (ha-passwords-generate separator))) + (kill-new passphrase) + (message "Random password: %s" passphrase))) +#+END_SRC +* Keybindings +Got make it easy to call: +#+BEGIN_SRC emacs-lisp +(ha-leader "a g" '("generate passwd" . generate-password)) +#+END_SRC +* Technical Artifacts :noexport: +This will =provide= a code name, so that we can =require= this. + +#+BEGIN_SRC emacs-lisp :exports none +(provide 'ha-passwords) +;;; ha-passwords.el ends here +#+END_SRC + +#+DESCRIPTION: A literate programming version for Emacs code to generate and store passwords. + +#+PROPERTY: header-args:sh :tangle no +#+PROPERTY: header-args:emacs-lisp :tangle yes +#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes + +#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil +#+OPTIONS: skip:nil author:nil email:nil creator:nil timestamp:nil +#+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js