auth_debug = yes

November 14, 2018 · View on GitHub

  • Mac Setup :properties: :header-args: :cache yes :comments org :padline yes :results silent :header-args:sh: :noweb tangle :shebang "#!/bin/sh" :tangle mac-setup.command :end: #+startup: showall nohideblocks hidestars indent

#+begin_quote From zero to fully installed and configured, in an hour. #+end_quote

** Overview

*** Quick Start #+begin_src sh case "SHELL"in(zsh);;()chshs"{SHELL}" in (*zsh) ;; (*) chsh -s "(which zsh)"; exit 1 ;; esac #+end_src

#+begin_example sh curl --location --silent
"https://github.com/ptb/mac-setup/raw/develop/mac-setup.command" |
source /dev/stdin 0 #+end_example

#+begin_example sh init && install && config #+end_example

#+begin_example sh custom && personalize_all #+end_example

**** =init=

  • Enter administrator account password only once
  • Select the cache folder for repeat installations
  • Turn off sleep and set computer name/hostname
  • Set write permission on destination folders
  • Cache software updates and App Store software
  • Install developer tools and macOS updates

**** =install=

**** =config=

  • Configure software requiring an administrator account
  • Optionally configure local Dovecot secure IMAP server
  • Create your primary /non-administrator/ account
  • Remove password-less administrator account permission
  • Recommended that you log out of administrator account

**** =custom=

*** Features

  • macOS High Sierra: Tested with macOS High Sierra 10.13 (17A365).
  • Completely Automated: Homebrew, Cask, and =mas-cli= install everything.
  • Latest Versions: Includes Node, Perl, Python, and Ruby separate from macOS.
  • Customized Terminal: Colors and fonts decyphered into editable preferences.
  • Idempotent: This script is intended to be safe to run more than once.

*** Walkthrough

**** Clone Internal Hard Disk to External Disk

**** Select the External Disk as Startup Disk

**** Download macOS Install from the App Store

=macappstores://itunes.apple.com/app/id1209167288=

**** Open /Applications/Utilities/Terminal.app #+begin_example sh diskx="$(diskutil list internal physical | sed '/^//!d;s/^(.)\ (.):/\1/')" #+end_example

#+begin_example sh diskutil zeroDisk diskxdiskutilpartitionDiskdiskx diskutil partitionDisk diskx 2 GPT
jhfs+ "Install" 6G
apfs (rubye"print(ruby -e "print '(hostname -s)'.capitalize") R #+end_example

#+begin_example sh sudo "/Applications/Install macOS High Sierra.app/Contents/Resources/createinstallmedia"
--applicationpath "/Applications/Install macOS High Sierra.app" --nointeraction
--volume "/Volumes/Install" #+end_example

**** Select the Install Disk as Startup Disk

*** License

#+begin_quote Copyright 2017 [[https://github.com/ptb][Peter T Bosse II]]

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. #+end_quote

** Initialize

*** Initialize New Terminal #+begin_src sh if test -z "1";thenosascript"{1}"; then osascript - "{0}" << EOF > /dev/null 2>&1 <<new_term.applescript>> EOF fi #+end_src

**** =new_term.applescript= #+begin_src applescript :noweb-ref new_term.applescript on run { _this } tell app "Terminal" to do script "source " & quoted form of _this & " 0" end run #+end_src

*** Define Function =ask= #+begin_src sh ask () { osascript - "1""{1}" "{2}" "${3}" << EOF 2> /dev/null <<ask.applescript>> EOF } #+end_src

**** =ask.applescript= #+begin_src applescript :noweb-ref ask.applescript on run { _title, _action, _default } tell app "System Events" to return text returned of (display dialog _title with title _title buttons { "Cancel", _action } default answer _default) end run #+end_src

*** Define Function =ask2= #+begin_src sh ask2 () { osascript - "$1" "$2" "$3" "$4" "$5" "$6" << EOF 2> /dev/null <<ask2.applescript>> EOF } #+end_src

**** =ask2.applescript= #+begin_src applescript :noweb-ref ask2.applescript on run { _text, _title, _cancel, _action, _default, _hidden } tell app "Terminal" to return text returned of (display dialog _text with title _title buttons { _cancel, _action } cancel button _cancel default button _action default answer _default hidden answer _hidden) end run #+end_src

*** Define Function =p= #+begin_src sh p () { printf "\n\033[1m\033[34m%s\033[0m\n\n" "${1}" } #+end_src

*** Define Function =run= #+begin_src sh run () { osascript - "1""{1}" "{2}" "${3}" << EOF 2> /dev/null <<run.applescript>> EOF } #+end_src

**** =run.applescript= #+begin_src applescript :noweb-ref run.applescript on run { _title, _cancel, _action } tell app "Terminal" to return button returned of (display dialog _title with title _title buttons { _cancel, _action } cancel button 1 default button 2 giving up after 5) end run #+end_src

*** Define Function =init= #+begin_src sh init () { init_sudo init_cache init_no_sleep init_hostname init_perms init_maskeep init_updates

config_new_account config_rm_sudoers }

if test "1"=0;thenprintf"\n{1}" = 0; then printf "\n(which init)\n" fi #+end_src

*** Define Function =init_paths= #+begin_src sh init_paths () { test -x "/usr/libexec/path_helper" &&
eval $(/usr/libexec/path_helper -s) } #+end_src

*** Eliminate Prompts for Password #+begin_src sh init_sudo () { printf "%s\n" "%wheel ALL=(ALL) NOPASSWD: ALL" |
sudo tee "/etc/sudoers.d/wheel" > /dev/null &&
sudo dscl /Local/Default append /Groups/wheel GroupMembership "$(whoami)" } #+end_src

*** Select Installation Cache Location #+begin_src sh init_cache () { grep -q "CACHES" "/etc/zshenv" 2> /dev/null ||
a=(osascript << EOF 2> /dev/null <<init_cache.applescript>> EOF ) && \ test -d "{a}" ||
a="${HOME}/Library/Caches/"

grep -q "CACHES" "/etc/zshenv" 2> /dev/null ||
printf "%s\n"
"export CACHES="{a}\"" \ "export HOMEBREW_CACHE=\"{a}/brew""
"export BREWFILE="${a}/brew/Brewfile"" |
sudo tee -a "/etc/zshenv" > /dev/null . "/etc/zshenv"

if test -d "CACHES/upd";thensudochownR"{CACHES}/upd"; then sudo chown -R "(whoami)" "/Library/Updates" rsync -a --delay-updates
"${CACHES}/upd/" "/Library/Updates/" fi } #+end_src

**** =init_cache.applescript= #+begin_src applescript :noweb-ref init_cache.applescript on run return text 1 through -2 of POSIX path of (choose folder with prompt "Select Installation Cache Location") end run #+end_src

*** Set Defaults for Sleep #+begin_src sh init_no_sleep () { sudo pmset -a sleep 0 sudo pmset -a disksleep 0 } #+end_src

*** Set Hostname from DNS #+begin_src sh init_hostname () { a=(ask2"SetComputerNameandHostname""SetHostname""Cancel""SetHostname"(ask2 "Set Computer Name and Hostname" "Set Hostname" "Cancel" "Set Hostname" (ruby -e "print '(hostnames).capitalize")"false")iftestn(hostname -s)'.capitalize") "false") if test -n a; then sudo scutil --set ComputerName (rubye"print(ruby -e "print 'a'.capitalize") sudo scutil --set HostName (rubye"print(ruby -e "print 'a'.downcase") fi } #+end_src

*** Set Permissions on Install Destinations #+begin_src sh :var _dest=_dest[3:11,1]

init_perms () { printf "%s\n" "dest" whileIFS="{_dest}" | \ while IFS="(printf '\t')" read d; do test -d "d"sudomkdirp"{d}" || sudo mkdir -p "{d}" sudo chgrp -R admin "d"sudochmodRg+w"{d}" sudo chmod -R g+w "{d}" done } #+end_src

**** _dest #+name: _dest |-----------------+---------------------------| | Location | Install Path | |-----------------+---------------------------| | | /usr/local/bin | | | /Library/Desktop Pictures | | colorpickerdir | /Library/ColorPickers | | fontdir | /Library/Fonts | | input_methoddir | /Library/Input Methods | | prefpanedir | /Library/PreferencePanes | | qlplugindir | /Library/QuickLook | | screen_saverdir | /Library/Screen Savers | | | /Library/User Pictures | |-----------------+---------------------------|

*** Install Developer Tools #+begin_src sh init_devtools () { p="${HOMEBREW_CACHE}/Cask/Command Line Tools (macOS High Sierra version 10.13).pkg" i="com.apple.pkg.CLTools_SDK_macOS1013"

if test -f "p";thenif!pkgutilpkginfo"{p}"; then if ! pkgutil --pkg-info "{i}" > /dev/null 2>&1; then sudo installer -pkg "${p}" -target / fi else xcode-select --install fi } #+end_src

*** Install Xcode #+begin_src sh init_xcode () { if test -f HOMEBREWCACHE/Cask/xcode.xip;thenp"InstallingXcode"dest="{HOMEBREW_CACHE}/Cask/xcode*.xip; then p "Installing Xcode" dest="{HOMEBREW_CACHE}/Cask/xcode" if ! test -d "dest";thenpkgutilexpanddest"; then pkgutil --expand {HOMEBREW_CACHE}/Cask/xcode*.xip "dest"curllocationsilent "https://gist.githubusercontent.com/pudquick/ff412bcb29c9c1fa4b8d/raw/24b25538ea8df8d0634a2a6189aa581ccc6a5b4b/parsepbzx2.py" python"dest" curl --location --silent \ "https://gist.githubusercontent.com/pudquick/ff412bcb29c9c1fa4b8d/raw/24b25538ea8df8d0634a2a6189aa581ccc6a5b4b/parse_pbzx2.py" | \ python - "{dest}/Content" find "dest"emptyname".xz"typefprint0 xargs0l1rmfind"{dest}" -empty -name "*.xz" -type f -print0 | \ xargs -0 -l 1 rm find "{dest}" -name "*.xz" -print0 |
xargs -0 -L 1 gunzip cat dest/Content.part> {dest}/Content.part* > \ {dest}/Content.cpio fi cd /Applications &&
sudo cpio -dimu --file=dest/Content.cpioforpkgin/Applications/Xcode.app/Contents/Resources/Packages/.pkg;dosudoinstallerpkg"{dest}/Content.cpio for pkg in /Applications/Xcode*.app/Contents/Resources/Packages/*.pkg; do sudo installer -pkg "pkg" -target / done x="(find/Applicationsmaxdepth1regex./Xcode[].appprintquit)"iftestn"(find '/Applications' -maxdepth 1 -regex '.*/Xcode[^ ]*.app' -print -quit)" if test -n "{x}"; then sudo xcode-select -s "${x}" sudo xcodebuild -license accept fi fi } #+end_src

*** Install macOS Updates #+begin_src sh init_updates () { sudo softwareupdate --install --all } #+end_src

*** Save Mac App Store Packages #+begin_example sh sudo lsof -c softwareupdated -F -r 2 | sed '/^n//!d;/com.apple.SoftwareUpdate/!d;s/^n//' sudo lsof -c storedownloadd -F -r 2 | sed '/^n//!d;/com.apple.appstore/!d;s/^n//' #+end_example #+begin_src sh :var _maskeep_launchd=_maskeep_launchd[3:-2,0:3]

init_maskeep () { sudo softwareupdate --reset-ignored > /dev/null

cat << EOF > "/usr/local/bin/maskeep" <<maskeep.sh>> EOF

chmod a+x "/usr/local/bin/maskeep" rehash

config_launchd "/Library/LaunchDaemons/com.github.ptb.maskeep.plist" "$_maskeep_launchd" "sudo" "" } #+end_src

**** _maskeep_launchd #+name: _maskeep_launchd |---------+--------------------+--------+-----------------------------------------------------------------------------------------------------------------| | Command | Entry | Type | Value | |---------+--------------------+--------+-----------------------------------------------------------------------------------------------------------------| | add | :KeepAlive | bool | false | | add | :Label | string | com.github.ptb.maskeep | | add | :ProcessType | string | Background | | add | :Program | string | /usr/local/bin/maskeep | | add | :RunAtLoad | bool | true | | add | :StandardErrorPath | string | /dev/stderr | | add | :StandardOutPath | string | /dev/stdout | | add | :UserName | string | root | | add | :WatchPaths | array | | | add | :WatchPaths:0 | string | (sudofind/private/var/foldersnamecom.apple.SoftwareUpdatetypedusersoftwareupdateprintquit2>/dev/null)add:WatchPaths:1string(sudo find '/private/var/folders' -name 'com.apple.SoftwareUpdate' -type d -user _softwareupdate -print -quit 2> /dev/null) | | add | :WatchPaths:1 | string | (sudo -u \#501 -- sh -c 'getconf DARWIN_USER_CACHE_DIR' 2> /dev/null)com.apple.appstore | | add | :WatchPaths:2 | string | (sudo -u \\#502 -- sh -c 'getconf DARWIN_USER_CACHE_DIR' 2> /dev/null)com.apple.appstore | | add | :WatchPaths:3 | string | (sudo -u \#503 -- sh -c 'getconf DARWIN_USER_CACHE_DIR' 2> /dev/null)com.apple.appstore | | add | :WatchPaths:4 | string | /Library/Updates | |---------+--------------------+--------+-----------------------------------------------------------------------------------------------------------------|

**** =/usr/local/bin/maskeep= #+begin_src sh :noweb-ref maskeep.sh :tangle no #!/bin/sh

asdir="/Library/Caches/storedownloadd" as1="$(sudo -u \#501 -- sh -c 'getconf DARWIN_USER_CACHE_DIR' 2> /dev/null)com.apple.appstore" as2="$(sudo -u \#502 -- sh -c 'getconf DARWIN_USER_CACHE_DIR' 2> /dev/null)com.apple.appstore" as3="$(sudo -u \#503 -- sh -c 'getconf DARWIN_USER_CACHE_DIR' 2> /dev/null)com.apple.appstore" upd="/Library/Updates" sudir="/Library/Caches/softwareupdated" su="$(sudo find '/private/var/folders' -name 'com.apple.SoftwareUpdate' -type d -user _softwareupdate 2> /dev/null)"

for i in 1 2 3 4 5; do mkdir -m a=rwxt -p "$asdir" for as in "$as1" "$as2" "$as3" "$upd"; do test -d "$as" &&
find "${as}" -type d -print | \ while read a; do b="${asdir}/$(basename $a)" mkdir -p "${b}" find "${a}" -type f -print | \ while read c; do d="$(basename $c)" test -e "${b}/${d}" || \ ln "${c}" "${b}/${d}" && \ chmod 666 "${b}/${d}" done done done

mkdir -m a=rwxt -p "${sudir}" find "${su}" -name "*.tmp" -type f -print | \ while read a; do d="$(basename $a)" test -e "${sudir}/${d}.xar" || ln "${a}" "${sudir}/${d}.xar" && \ chmod 666 "${sudir}/${d}.xar" done

sleep 1 done

exit 0 #+end_src

** Install

*** Define Function =install= #+begin_src sh install () { install_macos_sw install_node_sw install_perl_sw install_python_sw install_ruby_sw

which config } #+end_src

*** Install macOS Software with =brew= #+begin_src sh install_macos_sw () { p "Installing macOS Software" install_paths install_brew install_brewfile_taps install_brewfile_brew_pkgs install_brewfile_cask_args install_brewfile_cask_pkgs install_brewfile_mas_apps

x=(find/Applicationsmaxdepth1regex./Xcode[].appprintquit)iftestn"(find '/Applications' -maxdepth 1 -regex '.*/Xcode[^ ]*.app' -print -quit) if test -n "x"; then sudo xcode-select -s "$x" sudo xcodebuild -license accept fi

brew bundle --file="${BREWFILE}"

x=(find/Applicationsmaxdepth1regex./Xcode[].appprintquit)iftestn"(find '/Applications' -maxdepth 1 -regex '.*/Xcode[^ ]*.app' -print -quit) if test -n "x"; then sudo xcode-select -s "$x" sudo xcodebuild -license accept fi

install_links sudo xattr -rd "com.apple.quarantine" "/Applications" > /dev/null 2>&1 sudo chmod -R go=u-w "/Applications" > /dev/null 2>&1 } #+end_src

*** Add =/usr/local/bin/sbin= to Default Path #+begin_src sh install_paths () { if ! grep -Fq "/usr/local/sbin" /etc/paths; then sudo sed -i "" -e "//usr/sbin/{x;s/$//usr/local/sbin/;G;}" /etc/paths fi } #+end_src

*** Install Homebrew Package Manager #+begin_src sh install_brew () { if ! which brew > /dev/null; then ruby -e
"(curl -Ls 'https://github.com/Homebrew/install/raw/master/install')" \ < /dev/null > /dev/null 2>&1 fi printf "" > "{BREWFILE}" brew analytics off brew update brew doctor brew tap "homebrew/bundle" } #+end_src

*** Add Homebrew Taps to Brewfile #+begin_src sh :var _taps=_taps[3:-2,0]

install_brewfile_taps () { printf "%s\n" "taps" whileIFS="{_taps}" | \ while IFS="(printf '\t')" read tap; do printf 'tap "%s"\n' "tap">>"{tap}" >> "{BREWFILE}" done printf "\n" >> "${BREWFILE}" } #+end_src

**** _taps #+name: _taps |----------------------------+--------------------------------------------------------| | Homebrew Tap Name | Reference URL | |----------------------------+--------------------------------------------------------| | caskroom/cask | https://github.com/caskroom/homebrew-cask | | caskroom/fonts | https://github.com/caskroom/homebrew-fonts | | caskroom/versions | https://github.com/caskroom/homebrew-versions | | homebrew/bundle | https://github.com/Homebrew/homebrew-bundle | | homebrew/command-not-found | https://github.com/Homebrew/homebrew-command-not-found | | homebrew/nginx | https://github.com/Homebrew/homebrew-nginx | | homebrew/php | https://github.com/Homebrew/homebrew-php | | homebrew/services | https://github.com/Homebrew/homebrew-services | | ptb/custom | https://github.com/ptb/homebrew-custom | | railwaycat/emacsmacport | https://github.com/railwaycat/homebrew-emacsmacport | |----------------------------+--------------------------------------------------------|

*** Add Homebrew Packages to Brewfile #+begin_src sh :var _pkgs=_pkgs[3:-2,0]

install_brewfile_brew_pkgs () { printf "%s\n" "pkgs" whileIFS="{_pkgs}" | \ while IFS="(printf '\t')" read pkg; do # printf 'brew "%s", args: [ "force-bottle" ]\n' "pkg">>"{pkg}" >> "{BREWFILE}" printf 'brew "%s"\n' "pkg">>"{pkg}" >> "{BREWFILE}" done printf "\n" >> "${BREWFILE}" } #+end_src

**** _pkgs #+name: _pkgs |------------------------------+-----------------------------------------------------------| | Homebrew Package Name | Reference URL | |------------------------------+-----------------------------------------------------------| | aspell | http://aspell.net/ | | bash | https://www.gnu.org/software/bash/ | | certbot | https://certbot.eff.org/ | | chromedriver | https://sites.google.com/a/chromium.org/chromedriver/ | | coreutils | https://www.gnu.org/software/coreutils/ | | dash | http://gondor.apana.org.au/~herbert/dash/ | | duti | https://github.com/moretension/duti | | e2fsprogs | https://e2fsprogs.sourceforge.io/ | | fasd | https://github.com/clvv/fasd | | fdupes | https://github.com/adrianlopezroche/fdupes | | gawk | https://www.gnu.org/software/gawk/ | | getmail | http://pyropus.ca/software/getmail/ | | git | https://git-scm.com/ | | git-flow | http://nvie.com/posts/a-successful-git-branching-model/ | | git-lfs | https://git-lfs.github.com/ | | gnu-sed | https://www.gnu.org/software/sed/ | | gnupg | https://www.gnupg.org/ | | gpac | https://gpac.wp.imt.fr/ | | httpie | https://httpie.org/ | | hub | https://hub.github.com/ | | ievms | https://xdissent.github.io/ievms/ | | imagemagick | https://www.imagemagick.org/ | | mas | https://github.com/argon/mas | | mercurial | https://www.mercurial-scm.org/ | | mp4v2 | https://code.google.com/archive/p/mp4v2/ | | mtr | https://www.bitwizard.nl/mtr/ | | nmap | https://nmap.org/ | | node | https://nodejs.org/ | | nodenv | https://github.com/nodenv/nodenv | | openssl | https://www.openssl.org/ | | p7zip | http://p7zip.sourceforge.net/ | | perl-build | https://github.com/tokuhirom/Perl-Build | | pinentry-mac | https://github.com/GPGTools/pinentry-mac | | plenv | https://github.com/tokuhirom/plenv | | pyenv | https://github.com/pyenv/pyenv | | rbenv | https://github.com/rbenv/rbenv | | rsync | https://rsync.samba.org/ | | selenium-server-standalone | http://www.seleniumhq.org/ | | shellcheck | https://github.com/koalaman/shellcheck | | sleepwatcher | http://www.bernhard-baehr.de/ | | sqlite | https://sqlite.org | | stow | https://www.gnu.org/software/stow/ | | syncthing | https://syncthing.net/ | | syncthing-inotify | https://github.com/syncthing/syncthing-inotify | | tag | https://github.com/jdberry/tag | | terminal-notifier | https://github.com/julienXX/terminal-notifier | | the_silver_searcher | https://geoff.greer.fm/ag/ | | trash | http://hasseg.org/trash/ | | unrar | http://www.rarlab.com/ | | vcsh | https://github.com/RichiH/vcsh | | vim | https://vim.sourceforge.io/ | | yarn | https://yarnpkg.com/ | | youtube-dl | https://rg3.github.io/youtube-dl/ | | zsh | https://www.zsh.org/ | | zsh-syntax-highlighting | https://github.com/zsh-users/zsh-syntax-highlighting | | zsh-history-substring-search | https://github.com/zsh-users/zsh-history-substring-search | | homebrew/php/php71 | https://github.com/Homebrew/homebrew-php | | ptb/custom/dovecot | | | ptb/custom/ffmpeg | | | sdl2 | | | zimg | | | x265 | | | webp | | | wavpack | | | libvorbis | | | libvidstab | | | two-lame | | | theora | | | tesseract | | | speex | | | libssh | | | libsoxr | | | snappy | | | schroedinger | | | rubberband | | | rtmpdump | | | opus | | | openh264 | | | opencore-amr | | | libmodplug | | | libgsm | | | game-music-emu | | | fontconfig | | | fdk-aac | | | libcaca | | | libbs2b | | | libbluray | | | libass | | | chromaprint | | | ptb/custom/nginx-full | | |------------------------------+-----------------------------------------------------------|

*** Add Caskroom Options to Brewfile #+begin_src sh :var _args=_dest[5:10,0:1]

install_brewfile_cask_args () { printf 'cask_args ' >> "BREWFILE"printf"{BREWFILE}" printf "%s\n" "{_args}" |
while IFS="(printf\t)"readargdir;doprintf\n(printf '\t')" read arg dir; do printf '\n %s: "%s",' "{arg}" "dir">>"{dir}" >> "{BREWFILE}" done sed -i "" -e 's/,/ /" s/,/\ /' "{BREWFILE}" } #+end_src

*** Add Homebrew Casks to Brewfile #+begin_src sh :var _casks=_casks[3:-2,0]

install_brewfile_cask_pkgs () { printf "%s\n" "casks" whileIFS="{_casks}" | \ while IFS="(printf '\t')" read cask; do printf 'cask "%s"\n' "cask">>"{cask}" >> "{BREWFILE}" done printf "\n" >> "${BREWFILE}" } #+end_src

**** _casks #+name: _casks |--------------------------------------------------+---------------------------------------------------------------| | Caskroom Package Name | Reference URL | |--------------------------------------------------+---------------------------------------------------------------| | java | https://www.oracle.com/technetwork/java/javase/ | | xquartz | https://www.xquartz.org/ | | adium | https://www.adium.im/ | | alfred | https://www.alfredapp.com/ | | arduino | https://www.arduino.cc/ | | atom | https://atom.io/ | | bbedit | https://www.barebones.com/products/bbedit/ | | betterzip | https://macitbetter.com/ | | bitbar | https://getbitbar.com/ | | caffeine | http://lightheadsw.com/caffeine/ | | carbon-copy-cloner | https://bombich.com/ | | charles | https://www.charlesproxy.com/ | | dash | https://kapeli.com/dash | | dropbox | https://www.dropbox.com/ | | exifrenamer | http://www.qdev.de/?location=mac/exifrenamer | | find-empty-folders | http://www.tempel.org/FindEmptyFolders | | firefox | https://www.mozilla.org/firefox/ | | github-desktop | https://desktop.github.com/ | | gitup | http://gitup.co/ | | google-chrome | https://www.google.com/chrome/ | | hammerspoon | http://www.hammerspoon.org/ | | handbrake | https://handbrake.fr/ | | hermes | http://hermesapp.org/ | | imageoptim | https://imageoptim.com/mac | | inkscape | https://inkscape.org/ | | integrity | http://peacockmedia.software/mac/integrity/ | | istat-menus | https://bjango.com/mac/istatmenus/ | | iterm2 | https://www.iterm2.com/ | | jubler | http://www.jubler.org/ | | little-snitch | https://www.obdev.at/products/littlesnitch/ | | machg | http://jasonfharris.com/machg/ | | menubar-countdown | http://capablehands.net/menubarcountdown | | meteorologist | http://heat-meteo.sourceforge.net/ | | moom | https://manytricks.com/moom/ | | mp4tools | http://www.emmgunn.com/mp4tools-home/ | | musicbrainz-picard | https://picard.musicbrainz.org/ | | namechanger | https://mrrsoftware.com/namechanger/ | | nvalt | http://brettterpstra.com/projects/nvalt/ | | nzbget | https://nzbget.net/ | | nzbvortex | https://www.nzbvortex.com/ | | openemu | http://openemu.org/ | | opera | https://www.opera.com/ | | pacifist | https://www.charlessoft.com/ | | platypus | https://sveinbjorn.org/platypus | | plex-media-server | https://www.plex.tv/ | | qlstephen | https://whomwah.github.io/qlstephen/ | | quitter | https://marco.org/apps#quitter | | radarr | https://radarr.video/ | | rescuetime | https://www.rescuetime.com/ | | resilio-sync | https://www.resilio.com/individuals/ | | scrivener | https://literatureandlatte.com/scrivener.php | | sizeup | https://www.irradiatedsoftware.com/sizeup/ | | sketch | https://www.sketchapp.com/ | | sketchup | https://www.sketchup.com/ | | skitch | https://evernote.com/products/skitch | | skype | https://www.skype.com/ | | slack | https://slack.com/ | | sonarr | https://sonarr.tv/ | | sonarr-menu | https://github.com/jefbarn/Sonarr-Menu | | sourcetree | https://www.sourcetreeapp.com/ | | steermouse | http://plentycom.jp/en/steermouse/ | | subler | https://subler.org/ | | sublime-text | https://www.sublimetext.com/3 | | the-unarchiver | https://theunarchiver.com/ | | time-sink | https://manytricks.com/timesink/ | | torbrowser | https://www.torproject.org/projects/torbrowser.html | | tower | https://www.git-tower.com/ | | unrarx | http://www.unrarx.com/ | | vimr | http://vimr.org/ | | vlc | https://www.videolan.org/vlc/ | | vmware-fusion | https://www.vmware.com/products/fusion.html | | wireshark | https://www.wireshark.org/ | | xld | http://tmkk.undo.jp/xld/index_e.html | | caskroom/fonts/font-inconsolata-lgc | https://github.com/DeLaGuardo/Inconsolata-LGC | | caskroom/versions/transmit4 | https://panic.com/transmit/ | | ptb/custom/adobe-creative-cloud-2014 | https://www.adobe.com/creativecloud.html | | ptb/custom/blankscreen | http://www.wurst-wasser.net/wiki/index.php/Blank_Screen_Saver | | ptb/custom/composer | https://www.jamf.com/products/jamf-composer/ | | ptb/custom/enhanced-dictation | | | ptb/custom/ipmenulet | https://github.com/mcandre/IPMenulet | | ptb/custom/pcalc-3 | http://www.pcalc.com/english/about.html | | ptb/custom/sketchup-pro | https://www.sketchup.com/products/sketchup-pro | | ptb/custom/text-to-speech-alex | | | ptb/custom/text-to-speech-allison | | | ptb/custom/text-to-speech-samantha | | | ptb/custom/text-to-speech-tom | | | railwaycat/emacsmacport/emacs-mac-spacemacs-icon | https://github.com/railwaycat/homebrew-emacsmacport | |--------------------------------------------------+---------------------------------------------------------------|

*** Add App Store Packages to Brewfile #+begin_src sh :var _mas=_mas[3:-3,0:1]

install_brewfile_mas_apps () { open "/Applications/App Store.app" run "Sign in to the App Store with your Apple ID" "Cancel" "OK"

MASDIR="(getconfDARWINUSERCACHEDIR)com.apple.appstore"sudochownR"(getconf DARWIN_USER_CACHE_DIR)com.apple.appstore" sudo chown -R "(whoami)" "MASDIR"rsyncadelayupdates "{MASDIR}" rsync -a --delay-updates \ "{CACHES}/mas/" "${MASDIR}/"

printf "%s\n" "mas" whileIFS="{_mas}" | \ while IFS="(printf '\t')" read app id; do printf 'mas "%s", id: %s\n' "app""{app}" "{id}" >> "${BREWFILE}" done } #+end_src

**** _mas #+name: _mas |----------------------------+------------+-------------------------------------------| | App Name | App ID | App Store URL | |----------------------------+------------+-------------------------------------------| | 1Password | 443987910 | https://itunes.apple.com/app/id443987910 | | Affinity Photo | 824183456 | https://itunes.apple.com/app/id824183456 | | Coffitivity | 659901392 | https://itunes.apple.com/app/id659901392 | | Duplicate Photos Fixer Pro | 963642514 | https://itunes.apple.com/app/id963642514 | | Growl | 467939042 | https://itunes.apple.com/app/id467939042 | | HardwareGrowler | 475260933 | https://itunes.apple.com/app/id475260933 | | I Love Stars | 402642760 | https://itunes.apple.com/app/id402642760 | | Icon Slate | 439697913 | https://itunes.apple.com/app/id439697913 | | Justnotes | 511230166 | https://itunes.apple.com/app/id511230166 | | Keynote | 409183694 | https://itunes.apple.com/app/id409183694 | | Metanota Pro | 515250764 | https://itunes.apple.com/app/id515250764 | | Numbers | 409203825 | https://itunes.apple.com/app/id409203825 | | Pages | 409201541 | https://itunes.apple.com/app/id409201541 | | WiFi Explorer | 494803304 | https://itunes.apple.com/app/id494803304 | | Xcode | 497799835 | https://itunes.apple.com/app/id497799835 | | macOS High Sierra | 1209167288 | https://itunes.apple.com/app/id1209167288 | |----------------------------+------------+-------------------------------------------|

*** Link System Utilities to Applications #+begin_src sh :var _links=_links[3:-2,0]

install_links () { printf "%s\n" "links" whileIFS="{_links}" | \ while IFS="(printf '\t')" read link; do find "${link}" -maxdepth 1 -name "*.app" -type d -print0 2> /dev/null |
xargs -0 -I {} -L 1 ln -s "{}" "/Applications" 2> /dev/null done } #+end_src

**** _links

#+name: _links
Application Locations
--------------------------------------------------------------
/System/Library/CoreServices/Applications
/Applications/Xcode.app/Contents/Applications
/Applications/Xcode.app/Contents/Developer/Applications
/Applications/Xcode-beta.app/Contents/Applications
/Applications/Xcode-beta.app/Contents/Developer/Applications
--------------------------------------------------------------

*** Install Node.js with =nodenv= #+begin_src sh :var _npm=_npm[3:-2,0]

install_node_sw () { if which nodenv > /dev/null; then NODENV_ROOT="/usr/local/node" && export NODENV_ROOT

sudo mkdir -p "$NODENV_ROOT"
sudo chown -R "$(whoami):admin" "$NODENV_ROOT"

p "Installing Node.js with nodenv"
git clone https://github.com/nodenv/node-build-update-defs.git \
  "$(nodenv root)"/plugins/node-build-update-defs
nodenv update-version-defs > /dev/null

nodenv install --skip-existing 8.7.0
nodenv global 8.7.0

grep -q "${NODENV_ROOT}" "/etc/paths" || \
sudo sed -i "" -e "1i\\

${NODENV_ROOT}/shims " "/etc/paths"

init_paths
rehash

fi

T=$(printf '\t')

printf "%s\n" "npm" whileIFS="_npm" | \ while IFS="T" read pkg; do npm install --global "$pkg" done

rehash } #+end_src

#+name: _npm |------------------------+----------------------------------------------------| | NPM Package Name | Reference URL | |------------------------+----------------------------------------------------| | eslint | https://eslint.org/ | | eslint-config-cleanjs | https://github.com/bodil/eslint-config-cleanjs | | eslint-plugin-better | https://github.com/idmitriev/eslint-plugin-better | | eslint-plugin-fp | https://github.com/jfmengels/eslint-plugin-fp | | eslint-plugin-import | https://github.com/benmosher/eslint-plugin-import | | eslint-plugin-json | https://github.com/azeemba/eslint-plugin-json | | eslint-plugin-promise | https://github.com/xjamundx/eslint-plugin-promise | | eslint-plugin-standard | https://github.com/xjamundx/eslint-plugin-standard | | gatsby | | | json | http://trentm.com/json/ | | sort-json | https://github.com/kesla/sort-json | |------------------------+----------------------------------------------------|

*** Install Perl 5 with =plenv= #+begin_src sh install_perl_sw () { if which plenv > /dev/null; then PLENV_ROOT="/usr/local/perl" && export PLENV_ROOT

sudo mkdir -p "$PLENV_ROOT"
sudo chown -R "$(whoami):admin" "$PLENV_ROOT"

p "Installing Perl 5 with plenv"
plenv install 5.26.0 > /dev/null 2>&1
plenv global 5.26.0

grep -q "${PLENV_ROOT}" "/etc/paths" || \
sudo sed -i "" -e "1i\\

${PLENV_ROOT}/shims " "/etc/paths"

init_paths
rehash

fi } #+end_src

*** Install Python with =pyenv= #+begin_src sh install_python_sw () { if which pyenv > /dev/null; then CFLAGS="-I(brew --prefix openssl)/include" && export CFLAGS LDFLAGS="-L(brew --prefix openssl)/lib" && export LDFLAGS PYENV_ROOT="/usr/local/python" && export PYENV_ROOT

sudo mkdir -p "$PYENV_ROOT"
sudo chown -R "$(whoami):admin" "$PYENV_ROOT"

p "Installing Python 2 with pyenv"
pyenv install --skip-existing 2.7.13
p "Installing Python 3 with pyenv"
pyenv install --skip-existing 3.6.2
pyenv global 2.7.13

grep -q "${PYENV_ROOT}" "/etc/paths" || \
sudo sed -i "" -e "1i\\

${PYENV_ROOT}/shims " "/etc/paths"

init_paths
rehash

pip install --upgrade "pip" "setuptools"

# Reference: https://github.com/mdhiggins/sickbeard_mp4_automator
pip install --upgrade "babelfish" "guessit<2" "qtfaststart" "requests" "stevedore==1.19.1" "subliminal<2"
pip install --upgrade "requests-cache" "requests[security]"

# Reference: https://github.com/pixelb/crudini
pip install --upgrade "crudini"

fi } #+end_src

*** Install Ruby with =rbenv= #+begin_src sh install_ruby_sw () { if which rbenv > /dev/null; then RBENV_ROOT="/usr/local/ruby" && export RBENV_ROOT

sudo mkdir -p "$RBENV_ROOT"
sudo chown -R "$(whoami):admin" "$RBENV_ROOT"

p "Installing Ruby with rbenv"
rbenv install --skip-existing 2.4.2
rbenv global 2.4.2

grep -q "${RBENV_ROOT}" "/etc/paths" || \
sudo sed -i "" -e "1i\\

${RBENV_ROOT}/shims " "/etc/paths"

init_paths
rehash

printf "%s\n" \
  "gem: --no-document" | \
tee "${HOME}/.gemrc" > /dev/null

gem update --system > /dev/null

trash "$(which rdoc)"
trash "$(which ri)"
gem update

gem install bundler

fi } #+end_src

** Configure

*** Define Function =config= #+begin_src sh config () { config_admin_req config_bbedit config_certbot config_desktop config_dovecot config_emacs config_environment config_ipmenulet config_istatmenus config_nginx config_openssl config_sysprefs config_zsh config_guest

which custom } #+end_src

*** Define Function =config_defaults= #+begin_src sh config_defaults () { printf "%s\n" "1" whileIFS="{1}" | \ while IFS="(printf '\t')" read domain key type value host; do 2defaults{2} defaults {host} write domain"{domain} "{key}" type"{type} "{value}" done } #+end_src

*** Define Function =config_plist= #+begin_src sh T="$(printf '\t')"

config_plist () { printf "%s\n" "$1" |
while IFS="T"readcommandentrytypevalue;docase"T" read command entry type value; do case "value" in ($) $4 /usr/libexec/PlistBuddy "$2"
-c "commandcommand '{3}entry{entry}' type '(eval echo \"value")'" 2> /dev/null ;; (
) $4 /usr/libexec/PlistBuddy "$2"
-c "commandcommand '{3}entry{entry}' type '$value'" 2> /dev/null ;; esac done } #+end_src

*** Define Function =config_launchd= #+begin_src sh config_launchd () { test -d "(dirname \1)" ||
$3 mkdir -p "(dirname \1)"

test -f "$1" &&
$3 launchctl unload "$1" &&
$3 rm -f "$1"

config_plist "$2" "$1" "$4" "$3" &&
$3 plutil -convert xml1 "$1" &&
$3 launchctl load "$1" } #+end_src

*** Mark Applications Requiring Administrator Account #+begin_src sh :var _admin_req=_admin_req[3:-2,0]

config_admin_req () { printf "%s\n" "adminreq" whileIFS="{_admin_req}" | \ while IFS="(printf '\t')" read app; do sudo tag -a "Red, admin" "/Applications/${app}" done } #+end_src

**** _admin_req

#+name: _admin_req
Admin Apps
------------------------
Carbon Copy Cloner.app
Charles.app
Composer.app
Dropbox.app
iStat Menus.app
Moom.app
VMware Fusion.app
Wireshark.app
------------------------

*** Configure BBEdit #+begin_src sh config_bbedit () { if test -d "/Applications/BBEdit.app"; then test -f "/usr/local/bin/bbdiff" ||
ln /Applications/BBEdit.app/Contents/Helpers/bbdiff /usr/local/bin/bbdiff &&
ln /Applications/BBEdit.app/Contents/Helpers/bbedit_tool /usr/local/bin/bbedit &&
ln /Applications/BBEdit.app/Contents/Helpers/bbfind /usr/local/bin/bbfind &&
ln /Applications/BBEdit.app/Contents/Helpers/bbresults /usr/local/bin/bbresults fi } #+end_src

*** Configure Let’s Encrypt #+begin_src sh config_certbot () { test -d "/etc/letsencrypt" ||
sudo mkdir -p /etc/letsencrypt

sudo tee "/etc/letsencrypt/cli.ini" << EOF > /dev/null agree-tos = True authenticator = standalone eff-email = True manual-public-ip-logging-ok = True nginx-ctl = $(which nginx) nginx-server-root = /usr/local/etc/nginx preferred-challenges = tls-sni-01 keep-until-expiring = True rsa-key-size = 4096 text = True EOF

if ! test -e "/etc/letsencrypt/.git"; then a=(ask"ExistingLetsEncryptGitRepositoryPathorURL?""CloneRepository""")testn"(ask "Existing Let’s Encrypt Git Repository Path or URL?" "Clone Repository" "") test -n "a" &&
case "a"in(/)sudotee"/etc/letsencrypt/.git"<<EOF>/dev/null;;gitdir:a" in (/*) sudo tee "/etc/letsencrypt/.git" << EOF > /dev/null ;; gitdir: a EOF (*) sudo git -C "/etc/letsencrypt" remote add origin "$a" sudo git -C "/etc/letsencrypt" fetch origin master ;; esac sudo git -C "/etc/letsencrypt" reset --hard sudo git checkout -f -b master HEAD fi

sudo launchctl unload /Library/LaunchDaemons/org.nginx.nginx.plist 2> /dev/null sudo certbot renew

while true; do test -n "$1" && server_name="$1" ||
server_name="(ask 'New SSL Server: Server Name?' 'Create Server' 'example.com')" test -n "server_name" || break

test -n "\$2" && proxy_address="\$2" || \
  proxy_address="$(ask "Proxy Address for $server_name?" 'Set Address' 'http://127.0.0.1:80')"

sudo certbot certonly --domain $server_name

key1="$(openssl x509 -pubkey < /etc/letsencrypt/live/$server_name/fullchain.pem | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64)"
key2="$(curl -s https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem | openssl x509 -pubkey | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64)"
key3="$(curl -s https://letsencrypt.org/certs/isrgrootx1.pem | openssl x509 -pubkey | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64)"

pkp="$(printf "add_header Public-Key-Pins 'pin-sha256=\"%s\"; pin-sha256=\"%s\"; pin-sha256=\"%s\"; max-age=2592000;';\n" $key1 $key2 $key3)"

cat << EOF > "/usr/local/etc/nginx/servers/$server_name.conf"

<<server_name.conf>> EOF unset argv done

sudo launchctl load /Library/LaunchDaemons/org.nginx.nginx.plist } #+end_src

**** =/usr/local/etc/nginx/servers/server_name/server_name.conf= #+begin_src conf :noweb-ref server_name.conf server { server_name $server_name;

location / { proxy_pass $proxy_address; }

ssl_certificate /etc/letsencrypt/live/servername/fullchain.pem;sslcertificatekey/etc/letsencrypt/live/server_name/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/server_name/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/$server_name/chain.pem;

$pkp

add_header Content-Security-Policy "upgrade-insecure-requests;"; add_header Referrer-Policy "strict-origin"; add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" always; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options DENY; add_header X-Robots-Tag none; add_header X-XSS-Protection "1; mode=block";

listen 443 ssl http2; listen [::]:443 ssl http2;

ssl_stapling on; ssl_stapling_verify on;

https://securityheaders.io/?q=https%3A%2F%2F$server_name&hide=on&followRedirects=on

https://www.ssllabs.com/ssltest/analyze.html?d=$server_name&hideResults=on&latest

} #+end_src

*** Configure Default Apps #+begin_src sh config_default_apps () { true } #+end_src

*** Configure Desktop Picture #+begin_src sh config_desktop () { sudo rm -f "/Library/Caches/com.apple.desktop.admin.png"

base64 -D << EOF > "/Library/Desktop Pictures/Solid Colors/Solid Black.png" <<black.png.b64>> EOF } #+end_src

**** =black.png.b64= #+begin_src base64 :noweb-ref black.png.b64 iVBORw0KGgoAAAANSUhEUgAAAIAAAACAAQAAAADrRVxmAAAAGElEQVR4AWOgMxgFo2AUjIJRMApGwSgAAAiAAAH3bJXBAAAAAElFTkSuQmCC #+end_src

*** Configure Dovecot #+begin_src sh config_dovecot () { if which /usr/local/sbin/dovecot > /dev/null; then if ! run "Configure Dovecot Email Server?" "Configure Server" "Cancel"; then sudo tee "/usr/local/etc/dovecot/dovecot.conf" << EOF > /dev/null <<dovecot.conf>> EOF

  MAILADM="$(ask 'Email: Postmaster Email?' 'Set Email' "$(whoami)@$(hostname -f | cut -d. -f2-)")"
  MAILSVR="$(ask 'Email: Server Hostname for DNS?' 'Set Hostname' "$(hostname -f)")"
  sudo certbot certonly --domain $MAILSVR
  printf "%s\n" \
    "postmaster_address = '${MAILADM}'" \
    "ssl_cert = </etc/letsencrypt/live/$MAILSVR/fullchain.pem" \
    "ssl_key = </etc/letsencrypt/live/$MAILSVR/privkey.pem" | \
  sudo tee -a "/usr/local/etc/dovecot/dovecot.conf" > /dev/null

  if test ! -f "/usr/local/etc/dovecot/cram-md5.pwd"; then
    while true; do
      MAILUSR="$(ask 'New Email Account: User Name?' 'Create Account' "$(whoami)")"
      test -n "${MAILUSR}" || break
      doveadm pw | \
      sed -e "s/^/${MAILUSR}:/" | \
      sudo tee -a "/usr/local/etc/dovecot/cram-md5.pwd"
    done
    sudo chown _dovecot "/usr/local/etc/dovecot/cram-md5.pwd"
    sudo chmod go= "/usr/local/etc/dovecot/cram-md5.pwd"
  fi

  sudo tee "/etc/pam.d/dovecot" << EOF > /dev/null

<<dovecot.pam>> EOF

  sudo brew services start dovecot

  cat << EOF > "/usr/local/bin/imaptimefix.py"

<<imaptimefix.py>> EOF chmod +x /usr/local/bin/imaptimefix.py fi fi } #+end_src

**** =/usr/local/etc/dovecot/dovecot.conf= #+begin_src conf :noweb-ref dovecot.conf auth_mechanisms = cram-md5 default_internal_user = _dovecot default_login_user = _dovenull log_path = /dev/stderr mail_location = maildir:/.mail:INBOX=/.mail/Inbox:LAYOUT=fs mail_plugins = zlib maildir_copy_with_hardlinks = no namespace { inbox = yes mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = subscribe special_use = \Junk } mailbox Sent { auto = subscribe special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { auto = subscribe special_use = \Trash } separator = . type = private } passdb { args = scheme=cram-md5 /usr/local/etc/dovecot/cram-md5.pwd driver = passwd-file

driver = pam

args = nopassword=y

driver = static

} plugin { sieve = file:/Users/%u/.sieve sieve_plugins = sieve_extprograms zlib_save = bz2 zlib_save_level = 9 } protocols = imap service imap-login { inet_listener imap { port = 0 } } ssl = required ssl_cipher_list = ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS:!AES128 ssl_dh_parameters_length = 4096 ssl_prefer_server_ciphers = yes ssl_protocols = !SSLv2 !SSLv3 userdb { driver = passwd } protocol lda { mail_plugins = sieve zlib }

auth_debug = yes

auth_debug_passwords = yes

auth_verbose = yes

auth_verbose_passwords = plain

mail_debug = yes

verbose_ssl = yes

#+end_src

**** =/etc/pam.d/dovecot= #+begin_src conf :noweb-ref dovecot.pam auth required pam_opendirectory.so try_first_pass account required pam_nologin.so account required pam_opendirectory.so password required pam_opendirectory.so #+end_src

**** =/usr/local/bin/imaptimefix.py= #+begin_src python :noweb-ref imaptimefix.py #!/usr/bin/env python

Author: Zachary Cutlip <@zcutlip>

http://shadow-file.blogspot.com/2012/06/parsing-email-and-fixing-timestamps-in.html

Updated: Peter T Bosse II <@ptb>

Purpose: A program to fix sorting of mail messages that have been POPed or

IMAPed in the wrong order. Compares time stamp sent and timestamp

received on an RFC822-formatted email message, and renames the

message file using the most recent timestamp that is no more than

24 hours after the date sent. Updates the file's atime/mtime with

the timestamp, as well. Does not modify the headers or contents of

the message.

from bz2 import BZ2File from email import message_from_string from email.utils import mktime_tz, parsedate_tz from os import rename, utime, walk from os.path import abspath, isdir, isfile, join from re import compile, match from sys import argv

if isdir(argv[1]): e = compile("([0-9]+)(..*$)")

for a, b, c in walk(argv[1]): for d in c: if e.match(d): f = message_from_string(BZ2File(join(a, d)).read()) g = mktime_tz(parsedate_tz(f.get("Date")))

    h = 0
    for i in f.get_all("Received", []):
      j = i.split(";")[-1]
      if parsedate_tz(j):
        k = mktime_tz(parsedate_tz(j))
        if (k - g) > (60*60*24):
          continue

        h = k
      break

    if (h < 1):
      h = g

    l = e.match(d)

    if len(l.groups()) == 2:
      m = str(int(h)) + l.groups()[1]
      if not isfile(join(a, m)):
        rename(join(a, d), join(a, m))
      utime(join(a, m), (h, h))

#+end_src

*** Configure Emacs #+begin_src sh config_emacs () { test -f "/usr/local/bin/vi" ||
cat << EOF > "/usr/local/bin/vi" <<vi.sh>> EOF

chmod a+x /usr/local/bin/vi rehash } #+end_src

**** =/usr/local/bin/vi= #+begin_src sh :noweb-ref vi.sh :tangle no #!/bin/sh

if [ -e "/Applications/Emacs.app" ]; then t=()

if [ ${#@} -ne 0 ]; then while IFS= read -r file; do [ ! -f "$file" ] && t+=("$file") && /usr/bin/touch "$file" file=$(echo $(cd $(dirname "$file") && pwd -P)/$(basename "$file")) $(/usr/bin/osascript <<-END if application "Emacs.app" is running then tell application id (id of application "Emacs.app") to open POSIX file "$file" else tell application ((path to applications folder as text) & "Emacs.app") activate open POSIX file "$file" end tell end if END ) & # Note: END on the previous line may be indented with tabs but not spaces done <<<"$(printf '%s\n' "$@")" fi

if [ ! -z "$t" ]; then $(/bin/sleep 10; for file in "${t[@]}"; do [ ! -s "$file" ] && /bin/rm "$file"; done) & fi else vim -No "$@" fi #+end_src

*** Configure Environment Variables #+begin_src sh :var _environment_defaults=_environment_defaults[3:-2,0:4] config_environment () { sudo tee "/etc/environment.sh" << 'EOF' > /dev/null <<environment.sh>> EOF sudo chmod a+x "/etc/environment.sh" rehash

la="/Library/LaunchAgents/environment.user" ld="/Library/LaunchDaemons/environment"

sudo mkdir -p "(dirname(dirname la)" "(dirname(dirname ld)" sudo launchctl unload "la.plist""{la}.plist" "{ld}.plist" 2> /dev/null sudo rm -f "la.plist""{la}.plist" "{ld}.plist"

config_defaults "environmentdefaults""sudo"sudoplutilconvertxml1"_environment_defaults" "sudo" sudo plutil -convert xml1 "{la}.plist" "ld.plist"sudolaunchctlload"{ld}.plist" sudo launchctl load "{la}.plist" "${ld}.plist" 2> /dev/null } #+end_src

**** =/etc/environment.sh= #+begin_src sh :noweb-ref environment.sh :tangle no #!/bin/sh

set -e

if test -x /usr/libexec/path_helper; then export PATH="" eval /usr/libexec/path_helper -s launchctl setenv PATH $PATH fi

osascript -e 'tell app "Dock" to quit' #+end_src

**** _environment_defaults #+name: _environment_defaults |----------------------------------------+-------------+------------+---------------------+------| | Domain | Key | Type | Value | Host | |----------------------------------------+-------------+------------+---------------------+------| | /Library/LaunchAgents/environment.user | KeepAlive | -bool | false | | | /Library/LaunchAgents/environment.user | Label | -string | environment.user | | | /Library/LaunchAgents/environment.user | ProcessType | -string | Background | | | /Library/LaunchAgents/environment.user | Program | -string | /etc/environment.sh | | | /Library/LaunchAgents/environment.user | RunAtLoad | -bool | true | | | /Library/LaunchAgents/environment.user | WatchPaths | -array-add | /etc/environment.sh | | | /Library/LaunchAgents/environment.user | WatchPaths | -array-add | /etc/paths | | | /Library/LaunchAgents/environment.user | WatchPaths | -array-add | /etc/paths.d | | | /Library/LaunchDaemons/environment | KeepAlive | -bool | false | | | /Library/LaunchDaemons/environment | Label | -string | environment | | | /Library/LaunchDaemons/environment | ProcessType | -string | Background | | | /Library/LaunchDaemons/environment | Program | -string | /etc/environment.sh | | | /Library/LaunchDaemons/environment | RunAtLoad | -bool | true | | | /Library/LaunchDaemons/environment | WatchPaths | -array-add | /etc/environment.sh | | | /Library/LaunchDaemons/environment | WatchPaths | -array-add | /etc/paths | | | /Library/LaunchDaemons/environment | WatchPaths | -array-add | /etc/paths.d | | |----------------------------------------+-------------+------------+---------------------+------|

*** Configure IPMenulet #+begin_src sh config_ipmenulet () { _ipm="/Applications/IPMenulet.app/Contents/Resources" if test -d "ipm";thenrm"_ipm"; then rm "{_ipm}/icon-19x19-black.png" ln "ipm/icon19x19white.png""{_ipm}/icon-19x19-white.png" "{_ipm}/icon-19x19-black.png" fi } #+end_src

*** Configure iStat Menus #+begin_src sh config_istatmenus () { test -d "/Applications/iStat Menus.app" &&
open "/Applications/iStat Menus.app" } #+end_src

**** Notes #+begin_example conf client_max_body_size 0;

location / { if (http_x_plex_device_name = "") { rewrite ^/ https://$host/web/index.html permanent; } } #+end_example

*** Configure nginx #+begin_src sh :var _nginx_defaults=_nginx_defaults[3:-2,0:4] config_nginx () { cat << 'EOF' > /usr/local/etc/nginx/nginx.conf <<nginx.conf>> EOF

ld="/Library/LaunchDaemons/org.nginx.nginx"

sudo mkdir -p "(dirname(dirname ld)" sudo launchctl unload "ld.plist"2>/dev/nullsudormf"{ld}.plist" 2> /dev/null sudo rm -f "{ld}.plist"

config_defaults "nginxdefaults""sudo"sudoplutilconvertxml1"_nginx_defaults" "sudo" sudo plutil -convert xml1 "{ld}.plist" sudo launchctl load "${ld}.plist" 2> /dev/null } #+end_src

**** =/usr/local/etc/nginx/nginx.conf= #+begin_src conf :noweb-ref nginx.conf daemon off;

events { accept_mutex off; worker_connections 8000; }

http { charset utf-8; charset_types application/javascript application/json application/rss+xml application/xhtml+xml application/xml text/css text/plain text/vnd.wap.wml;

default_type application/octet-stream;

error_log /dev/stderr;

gzip on; gzip_comp_level 9; gzip_min_length 256; gzip_proxied any; gzip_static on; gzip_vary on;

gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

index index.html index.xhtml;

log_format default 'hosthost status bodybytessent"body_bytes_sent "request" "http_referer"\n' ' remote_addr "$http_user_agent"';

map httpupgradehttp_upgrade connection_upgrade { default upgrade; "" close; }

proxy_http_version 1.1; proxy_set_header Upgrade httpupgrade;proxysetheaderConnectionhttp_upgrade; proxy_set_header Connection connection_upgrade;

proxy_set_header Host host;proxysetheaderXForwardedForhost; proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto scheme;proxysetheaderXRealIPscheme; proxy_set_header X-Real-IP remote_addr;

proxy_buffering off; proxy_redirect off;

sendfile on; sendfile_max_chunk 512k;

server_tokens off;

resolver 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=300s; resolver_timeout 5s;

https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/

ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS:!AES128;

openssl dhparam -out /etc/letsencrypt/ssl-dhparam.pem 4096

ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

ssl_ecdh_curve secp384r1; ssl_prefer_server_ciphers on; ssl_protocols TLSv1.2; ssl_session_cache shared:TLS:10m;

types { application/atom+xml atom; application/font-woff woff; application/font-woff2 woff2; application/java-archive ear jar war; application/javascript js; application/json json map topojson; application/ld+json jsonld; application/mac-binhex40 hqx; application/manifest+json webmanifest; application/msword doc; application/octet-stream bin deb dll dmg exe img iso msi msm msp safariextz; application/pdf pdf; application/postscript ai eps ps; application/rss+xml rss; application/rtf rtf; application/vnd.geo+json geojson; application/vnd.google-earth.kml+xml kml; application/vnd.google-earth.kmz kmz; application/vnd.ms-excel xls; application/vnd.ms-fontobject eot; application/vnd.ms-powerpoint ppt; application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; application/vnd.wap.wmlc wmlc; application/x-7z-compressed 7z; application/x-bb-appworld bbaw; application/x-bittorrent torrent; application/x-chrome-extension crx; application/x-cocoa cco; application/x-font-ttf ttc ttf; application/x-java-archive-diff jardiff; application/x-java-jnlp-file jnlp; application/x-makeself run; application/x-opera-extension oex; application/x-perl pl pm; application/x-pilot pdb prc; application/x-rar-compressed rar; application/x-redhat-package-manager rpm; application/x-sea sea; application/x-shockwave-flash swf; application/x-stuffit sit; application/x-tcl tcl tk; application/x-web-app-manifest+json webapp; application/x-x509-ca-cert crt der pem; application/x-xpinstall xpi; application/xhtml+xml xhtml; application/xml rdf xml; application/xslt+xml xsl; application/zip zip; audio/midi mid midi kar; audio/mp4 aac f4a f4b m4a; audio/mpeg mp3; audio/ogg oga ogg opus; audio/x-realaudio ra; audio/x-wav wav; font/opentype otf; image/bmp bmp; image/gif gif; image/jpeg jpeg jpg; image/png png; image/svg+xml svg svgz; image/tiff tif tiff; image/vnd.wap.wbmp wbmp; image/webp webp; image/x-icon cur ico; image/x-jng jng; text/cache-manifest appcache; text/css css; text/html htm html shtml; text/mathml mml; text/plain txt; text/vcard vcard vcf; text/vnd.rim.location.xloc xloc; text/vnd.sun.j2me.app-descriptor jad; text/vnd.wap.wml wml; text/vtt vtt; text/x-component htc; video/3gpp 3gp 3gpp; video/mp4 f4p f4v m4v mp4; video/mpeg mpeg mpg; video/ogg ogv; video/quicktime mov; video/webm webm; video/x-flv flv; video/x-mng mng; video/x-ms-asf asf asx; video/x-ms-wmv wmv; video/x-msvideo avi; }

include servers/*.conf; }

worker_processes auto; #+end_src

**** _nginx_defaults #+name: _nginx_defaults |----------------------------------------+-------------------+------------+-------------------------------------+------| | Domain | Key | Type | Value | Host | |----------------------------------------+-------------------+------------+-------------------------------------+------| | /Library/LaunchDaemons/org.nginx.nginx | KeepAlive | -bool | true | | | /Library/LaunchDaemons/org.nginx.nginx | Label | -string | org.nginx.nginx | | | /Library/LaunchDaemons/org.nginx.nginx | ProcessType | -string | Background | | | /Library/LaunchDaemons/org.nginx.nginx | Program | -string | /usr/local/bin/nginx | | | /Library/LaunchDaemons/org.nginx.nginx | RunAtLoad | -bool | true | | | /Library/LaunchDaemons/org.nginx.nginx | StandardErrorPath | -string | /usr/local/var/log/nginx/error.log | | | /Library/LaunchDaemons/org.nginx.nginx | StandardOutPath | -string | /usr/local/var/log/nginx/access.log | | | /Library/LaunchDaemons/org.nginx.nginx | UserName | -string | root | | | /Library/LaunchDaemons/org.nginx.nginx | WatchPaths | -array-add | /usr/local/etc/nginx | | |----------------------------------------+-------------------+------------+-------------------------------------+------|

*** Configure OpenSSL Create an intentionally invalid certificate for use with a DNS-based ad blocker, e.g. https://pi-hole.net #+begin_src sh config_openssl () { _default="/etc/letsencrypt/live/default" test -d "default"mkdirp"_default" || mkdir -p "_default"

cat << EOF > "${_default}/default.cnf" <<openssl.cnf>> EOF

openssl req -days 1 -new -newkey rsa -x509
-config "default/default.cnf" out"{_default}/default.cnf" \ -out "{_default}/default.crt"

cat << EOF > "/usr/local/etc/nginx/servers/default.conf" <<default.conf>> EOF } #+end_src

**** =/etc/letsencrypt/live/default/default.cnf= #+begin_src conf :noweb-ref openssl.cnf [ req ] default_bits = 4096 default_keyfile = ${_default}/default.key default_md = sha256 distinguished_name = dn encrypt_key = no prompt = no utf8 = yes x509_extensions = v3_ca

[ dn ] CN = *

[ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = CA:true #+end_src

**** =/usr/local/etc/nginx/servers/default.conf= #+begin_src conf :noweb-ref default.conf server { server_name .$(hostname -f | cut -d. -f2-);

listen 80; listen [::]:80;

return 301 https://$host$request_uri; }

server { listen 80 default_server; listen [::]:80 default_server;

listen 443 default_server ssl http2; listen [::]:443 default_server ssl http2;

ssl_certificate default/default.crt;sslcertificatekey{_default}/default.crt; ssl_certificate_key {_default}/default.key;

ssl_ciphers NULL;

return 204; } #+end_src

*** Configure System Preferences #+begin_src sh config_sysprefs () { config_energy config_loginwindow config_mas } #+end_src

**** Configure Energy Saver #+begin_src sh :var _energy=_energy[3:-2,1:3]

config_energy () { printf "%s\n" "energy" whileIFS="{_energy}" | \ while IFS="(printf '\t')" read flag setting value; do sudo pmset flagflag {setting} ${value} done } #+end_src

***** _energy #+name: _energy |--------------------------------------------------------------------------------------+------+--------------+-------| | Preference | Flag | Setting | Value | |--------------------------------------------------------------------------------------+------+--------------+-------| | Power: Turn display off after: 20 min | -c | displaysleep | 20 | | Power: on Prevent computer from sleeping automatically when the display is off | -c | sleep | 0 | | Power: 60 min Put hard disks to sleep when possible | -c | disksleep | 60 | | Power: on Wake for network access | -c | womp | 1 | | Power: on Start up automatically after a power failure | -c | autorestart | 1 | | Power: on Enable Power Nap | -c | powernap | 1 | | UPS: Turn display off after: 2 min | -u | displaysleep | 2 | | UPS: on Slightly dim the display when using this power source | -u | lessbright | 1 | | UPS: on Shut down the computer after using the UPS battery for: 5 min | -u | haltafter | 5 | | UPS: off Shut down the computer when the time remaining on the UPS battery is: | -u | haltremain | -1 | | UPS: off Shut down the computer when the UPS battery level is below: | -u | haltlevel | -1 | |--------------------------------------------------------------------------------------+------+--------------+-------|

**** Configure Login Window #+begin_src sh :var _loginwindow=_loginwindow[3:-2,1:5]

config_loginwindow () { config_defaults "${_loginwindow}" "sudo" } #+end_src

**** _loginwindow #+name: _loginwindow |------------------------------------------------+--------------------------------------------+--------------+-------+-------+------| | Preference | Domain | Key | Type | Value | Host | |------------------------------------------------+--------------------------------------------+--------------+-------+-------+------| | Display login window as: Name and password | /Library/Preferences/com.apple.loginwindow | SHOWFULLNAME | -bool | true | | |------------------------------------------------+--------------------------------------------+--------------+-------+-------+------|

**** Configure App Store #+begin_src sh :var _swupdate=_swupdate[3:-2,1:5]

config_mas () { config_defaults "${_swupdate}" "sudo" } #+end_src

**** _swupdate #+name: _swupdate |------------------------------+-----------------------------------------+---------------------------+-------+-------+------| | Preference | Domain | Key | Type | Value | Host | |------------------------------+-----------------------------------------+---------------------------+-------+-------+------| | on Install app updates | /Library/Preferences/com.apple.commerce | AutoUpdate | -bool | true | | | on Install macOS updates | /Library/Preferences/com.apple.commerce | AutoUpdateRestartRequired | -bool | true | | |------------------------------+-----------------------------------------+---------------------------+-------+-------+------|

*** Configure Z-Shell #+begin_src sh config_zsh () { grep -q "(whichzsh)"/etc/shellsprint"(which zsh)" /etc/shells || print "(which zsh)\n" |
sudo tee -a /etc/shells > /dev/null

case "SHELL"in(SHELL" in ((which zsh)) ;; (*) chsh -s "(whichzsh)"sudochshs(which zsh)" sudo chsh -s (which zsh) ;; esac

sudo tee -a /etc/zshenv << 'EOF' > /dev/null <> EOF sudo chmod +x "/etc/zshenv" . "/etc/zshenv"

sudo tee /etc/zshrc << 'EOF' > /dev/null <> EOF sudo chmod +x "/etc/zshrc" . "/etc/zshrc" } #+end_src

**** =/etc/zshenv= #+begin_src sh :noweb-ref etc-zshenv :tangle no #-- Exports ----------------------------------------------------

export
ZDOTDIR="HOME/.zsh" MASDIR="{HOME}/.zsh" \ MASDIR="(getconf DARWIN_USER_CACHE_DIR)com.apple.appstore"
NODENV_ROOT="/usr/local/node"
PLENV_ROOT="/usr/local/perl"
PYENV_ROOT="/usr/local/python"
RBENV_ROOT="/usr/local/ruby"
EDITOR="vi"
VISUAL="vi"
PAGER="less"
LANG="en_US.UTF-8"
LESS="-egiMQRS -x2 -z-2"
LESSHISTFILE="/dev/null"
HISTSIZE=50000
SAVEHIST=50000
KEYTIMEOUT=1

test -d "ZDOTDIR" mkdirp"ZDOTDIR" || \ mkdir -p "ZDOTDIR"

test -f "ZDOTDIR/.zshrc" touch"{ZDOTDIR}/.zshrc" || \ touch "{ZDOTDIR}/.zshrc"

Ensure path arrays do not contain duplicates.

typeset -gU cdpath fpath mailpath path #+end_src

**** =/etc/zshrc= #+begin_src sh :noweb-ref etc-zshrc :tangle no #-- Exports ----------------------------------------------------

export
HISTFILE="{ZDOTDIR:-HOME}/.zhistory"

#-- Changing Directories ---------------------------------------

setopt
autocd
autopushd
cdablevars
chasedots
chaselinks
NO_posixcd
pushdignoredups
no_pushdminus
pushdsilent
pushdtohome

#-- Completion -------------------------------------------------

setopt
ALWAYSLASTPROMPT
no_alwaystoend
AUTOLIST
AUTOMENU
autonamedirs
AUTOPARAMKEYS
AUTOPARAMSLASH
AUTOREMOVESLASH
no_bashautolist
no_completealiases
completeinword
no_globcomplete
HASHLISTALL
LISTAMBIGUOUS
no_LISTBEEP
no_listpacked
no_listrowsfirst
LISTTYPES
no_menucomplete
no_recexact

#-- Expansion and Globbing -------------------------------------

setopt
BADPATTERN
BAREGLOBQUAL
braceccl
CASEGLOB
CASEMATCH
NO_cshnullglob
EQUALS
extendedglob
no_forcefloat
GLOB
NO_globassign
no_globdots
no_globstarshort
NO_globsubst
no_histsubstpattern
NO_ignorebraces
no_ignoreclosebraces
NO_kshglob
no_magicequalsubst
no_markdirs
MULTIBYTE
NOMATCH
no_nullglob
no_numericglobsort
no_rcexpandparam
no_rematchpcre
NO_shglob
UNSET
no_warncreateglobal
no_warnnestedvar

#-- History ----------------------------------------------------

setopt
APPENDHISTORY
BANGHIST
extendedhistory
no_histallowclobber
no_HISTBEEP
histexpiredupsfirst
no_histfcntllock
histfindnodups
histignorealldups
histignoredups
histignorespace
histlexwords
no_histnofunctions
no_histnostore
histreduceblanks
HISTSAVEBYCOPY
histsavenodups
histverify
incappendhistory
incappendhistorytime
sharehistory

#-- Initialisation ---------------------------------------------

setopt
no_allexport
GLOBALEXPORT
GLOBALRCS
RCS

#-- Input/Output -----------------------------------------------

setopt
ALIASES
no_CLOBBER
no_correct
no_correctall
dvorak
no_FLOWCONTROL
no_ignoreeof
NO_interactivecomments
HASHCMDS
HASHDIRS
no_hashexecutablesonly
no_mailwarning
pathdirs
NO_pathscript
no_printeightbit
no_printexitvalue
rcquotes
NO_rmstarsilent
no_rmstarwait
SHORTLOOPS
no_sunkeyboardhack

#-- Job Control ------------------------------------------------

setopt
no_autocontinue
autoresume
no_BGNICE
CHECKJOBS
no_HUP
longlistjobs
MONITOR
NOTIFY
NO_posixjobs

#-- Prompting --------------------------------------------------

setopt
NO_promptbang
PROMPTCR
PROMPTSP
PROMPTPERCENT
promptsubst
transientrprompt

#-- Scripts and Functions --------------------------------------

setopt
NO_aliasfuncdef
no_cbases
no_cprecedences
DEBUGBEFORECMD
no_errexit
no_errreturn
EVALLINENO
EXEC
FUNCTIONARGZERO
no_localloops
NO_localoptions
no_localpatterns
NO_localtraps
MULTIFUNCDEF
MULTIOS
NO_octalzeroes
no_pipefail
no_sourcetrace
no_typesetsilent
no_verbose
no_xtrace

#-- Shell Emulation --------------------------------------------

setopt
NO_appendcreate
no_bashrematch
NO_bsdecho
no_continueonerror
NO_cshjunkiehistory
NO_cshjunkieloops
NO_cshjunkiequotes
NO_cshnullcmd
NO_ksharrays
NO_kshautoload
NO_kshoptionprint
no_kshtypeset
no_kshzerosubscript
NO_posixaliases
no_posixargzero
NO_posixbuiltins
NO_posixidentifiers
NO_posixstrings
NO_posixtraps
NO_shfileexpansion
NO_shnullcmd
NO_shoptionletters
NO_shwordsplit
no_trapsasync

#-- Zle --------------------------------------------------------

setopt
no_BEEP
combiningchars
no_overstrike
NO_singlelinezle

#-- Aliases ----------------------------------------------------

alias
ll="/bin/ls -aFGHhlOw"

#-- Functions --------------------------------------------------

autoload -Uz
add-zsh-hook
compaudit
compinit

compaudit 2> /dev/null |
xargs -L 1 chmod go-w 2> /dev/null

compinit -u

which nodenv > /dev/null &&
eval "$(nodenv init - zsh)"

which plenv > /dev/null &&
eval "$(plenv init - zsh)"

which pyenv > /dev/null &&
eval "$(pyenv init - zsh)"

which rbenv > /dev/null &&
eval "$(rbenv init - zsh)"

sf () { SetFile -P -d "$1 12:00:00" -m "$1 12:00:00" argv[2,argv[2,] }

ssh-add -A 2> /dev/null

#-- zsh-syntax-highlighting ------------------------------------

. "$(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"

#-- zsh-history-substring-search -------------------------------

. "$(brew --prefix)/share/zsh-history-substring-search/zsh-history-substring-search.zsh"

HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND="fg=default,underline" &&
export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND="fg=red,underline" &&
export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND

#-- Zle --------------------------------------------------------

zmodload zsh/zle

bindkey -d bindkey -v

for k in "vicmd" "viins"; do bindkey -M k\CAbeginningoflinebindkeyMk '\C-A' beginning-of-line bindkey -M k '\C-E' end-of-line bindkey -M k\CUkillwholelinebindkeyMk '\C-U' kill-whole-line bindkey -M k '\e[3~' delete-char bindkey -M k\e[AhistorysubstringsearchupbindkeyMk '\e[A' history-substring-search-up bindkey -M k '\e[B' history-substring-search-down bindkey -M $k '\x7f' backward-delete-char done

for f in
"zle-keymap-select"
"zle-line-finish"
"zle-line-init" do eval "f () { case \TERM_PROGRAM in ('Apple_Terminal') test $KEYMAP = 'vicmd' &&
printf '%b' '\e[4 q' ||
printf '%b' '\e[6 q' ;; ('iTerm.app') test $KEYMAP = 'vicmd' &&
printf '%b' '\e]Plf27f7f\e\x5c\e[4 q' ||
printf '%b' '\e]Pl99cc99\e\x5c\e[6 q' ;; esac }" zle -N $f done

#-- prompt_ptb_setup -------------------------------------------

prompt_ptb_setup () { I="(printfi="(printf '%b' '%{\e[3m%}')" i="(printf '%b' '%{\e[0m%}')" PROMPT="%F{004}II%di %(!.%F{001}.%F{002})%n %B❯%b%f " &&
export PROMPT }

prompt_ptb_setup

prompt_ptb_precmd () { if test "(unames)"="Darwin";thenprintPn"\e]7;file://(uname -s)" = "Darwin"; then print -Pn "\e]7;file://%M\{PWD// /%%20}\a" print -Pn "\e]2;%n@%m\a" print -Pn "\e]1;%~\a" fi

test -n "(git rev-parse --git-dir 2> /dev/null)" && \ RPROMPT="%F{000}(git rev-parse --abbrev-ref HEAD 2> /dev/null)%f" &&
export RPROMPT }

add-zsh-hook precmd
prompt_ptb_precmd #+end_src

*** Configure New Account #+begin_src sh config_new_account () { e="(ask 'New macOS Account: Email Address?' 'OK' '')" curl --output "/Library/User Pictures/{e}.jpg" --silent
"https://www.gravatar.com/avatar/$(md5 -qs ${e}).jpg?s=512"

g="(curllocationsilent "https://api.github.com/search/users?q=(curl --location --silent \ "https://api.github.com/search/users?q={e}" |
sed -n 's/^."url": "(.)".*/\1/p')" g="(curllocationsilent(curl --location --silent {g})"

n="(printf(printf {g} | sed -n 's/^."name": "(.)".*/\1/p')" n="(ask 'New macOS Account: Real Name?' 'OK' {n})"

u="(printf(printf {g} | sed -n 's/^."login": "(.)".*/\1/p')" u="(ask 'New macOS Account: User Name?' 'OK' {u})"

sudo defaults write
"/System/Library/User Template/Non_localized/Library/Preferences/.GlobalPreferences.plist"
"com.apple.swipescrolldirection" -bool false

sudo sysadminctl -admin -addUser "u"fullName"{u}" -fullName "{n}" -password -
-shell "(whichzsh)"picture"/Library/UserPictures/(which zsh)" -picture "/Library/User Pictures/{e}.jpg" } #+end_src

*** Configure Guest Users #+begin_src sh config_guest () { sudo sysadminctl -guestAccount off } #+end_src

*** Reinstate =sudo= Password #+begin_src sh config_rm_sudoers () { sudo -- sh -c
"rm -f /etc/sudoers.d/wheel; dscl /Local/Default -delete /Groups/wheel GroupMembership $(whoami)"

/usr/bin/read -n 1 -p "Press any key to continue. " -s if run "Log Out Then Log Back In?" "Cancel" "Log Out"; then osascript -e 'tell app "loginwindow" to «event aevtrlgo»' fi } #+end_src

** Customize

*** Define Function =custom= #+begin_src sh custom () { custom_githome custom_atom custom_autoping custom_dropbox custom_duti custom_emacs custom_finder custom_getmail custom_git custom_gnupg custom_istatmenus custom_meteorologist custom_moom custom_mp4_automator custom_nvalt custom_nzbget custom_safari custom_sieve custom_sonarr custom_ssh custom_sysprefs custom_terminal custom_vim custom_vlc

which personalize_all } #+end_src

*** Customize Home #+begin_src sh custom_githome () { git -C "${HOME}" init

test -f "{CACHES}/dbx/.zshenv" && \ mkdir -p "{ZDOTDIR:-HOME}" && \ cp "{CACHES}/dbx/.zshenv" "{ZDOTDIR:-HOME}" &&
. "{ZDOTDIR:-HOME}/.zshenv"

a=(ask"ExistingGitHomeRepositoryPathorURL""AddRemote""")iftestn"(ask "Existing Git Home Repository Path or URL" "Add Remote" "") if test -n "{a}"; then git -C "HOME"remoteaddorigin"{HOME}" remote add origin "{a}" git -C "${HOME}" fetch origin master fi

if run "Encrypt and commit changes to Git and push to GitHub, automatically?" "No" "Add AutoKeep"; then curl --location --silent
"https://github.com/ptb/autokeep/raw/master/autokeep.command" |
. /dev/stdin 0

autokeep_remote
autokeep_push
autokeep_gitignore
autokeep_post_commit
autokeep_launchagent
autokeep_crypt

git reset --hard
git checkout -f -b master FETCH_HEAD

fi

chmod -R go= "${HOME}" > /dev/null 2>&1 } #+end_src

*** Customize Atom #+begin_src sh :var _atom=_atom[3:-2,0]

custom_atom () { if which apm > /dev/null; then mkdir -p "${HOME}/.atom/.apm"

cat << EOF > "${HOME}/.atom/.apmrc"

cache = ${CACHES}/apm EOF

cat << EOF > "${HOME}/.atom/.apm/.apmrc"

cache = ${CACHES}/apm EOF

printf "%s\n" "${_atom}" | \
while IFS="$(printf '\t')" read pkg; do
  test -d "${HOME}/.atom/packages/${pkg}" ||
  apm install "${pkg}"
done

cat << EOF > "${HOME}/.atom/config.cson"

<<config.cson>> EOF

cat << EOF > "${HOME}/.atom/packages/tomorrow-night-eighties-syntax/styles/colors.less"

<<colors.less>> EOF fi } #+end_src

**** _atom #+name: _atom |--------------------------------+---------------------------------------------------------| | Atom Package Name | Reference URL | |--------------------------------+---------------------------------------------------------| | atom-beautify | https://atom.io/packages/atom-beautify | | atom-css-comb | https://atom.io/packages/atom-css-comb | | atom-fuzzy-grep | https://atom.io/packages/atom-fuzzy-grep | | atom-jade | https://atom.io/packages/atom-jade | | atom-wallaby | https://atom.io/packages/atom-wallaby | | autoclose-html | https://atom.io/packages/autoclose-html | | autocomplete-python | https://atom.io/packages/autocomplete-python | | busy-signal | https://atom.io/packages/busy-signal | | double-tag | https://atom.io/packages/double-tag | | editorconfig | https://atom.io/packages/editorconfig | | ex-mode | https://atom.io/packages/ex-mode | | file-icons | https://atom.io/packages/file-icons | | git-plus | https://atom.io/packages/git-plus | | git-time-machine | https://atom.io/packages/git-time-machine | | highlight-selected | https://atom.io/packages/highlight-selected | | intentions | https://atom.io/packages/intentions | | language-docker | https://atom.io/packages/language-docker | | language-jade | https://atom.io/packages/language-jade | | language-javascript-jsx | https://atom.io/packages/language-javascript-jsx | | language-lisp | https://atom.io/packages/language-lisp | | language-slim | https://atom.io/packages/language-slim | | linter | https://atom.io/packages/linter | | linter-eslint | https://atom.io/packages/linter-eslint | | linter-rubocop | https://atom.io/packages/linter-rubocop | | linter-shellcheck | https://atom.io/packages/linter-shellcheck | | linter-ui-default | https://atom.io/packages/linter-ui-default | | MagicPython | https://atom.io/packages/MagicPython | | python-yapf | https://atom.io/packages/python-yapf | | react | https://atom.io/packages/react | | riot | https://atom.io/packages/riot | | sort-lines | https://atom.io/packages/sort-lines | | term3 | https://atom.io/packages/term3 | | tomorrow-night-eighties-syntax | https://atom.io/packages/tomorrow-night-eighties-syntax | | tree-view-open-files | https://atom.io/packages/tree-view-open-files | | vim-mode-plus | https://atom.io/packages/vim-mode-plus | | vim-mode-zz | https://atom.io/packages/vim-mode-zz | |--------------------------------+---------------------------------------------------------|

**** =${HOME}/.atom/config.cson= #+begin_src cson :noweb-ref config.cson "*": "autocomplete-python": useKite: false core: telemetryConsent: "limited" themes: [ "one-dark-ui" "tomorrow-night-eighties-syntax" ] editor: fontFamily: "Inconsolata LGC" fontSize: 13 welcome: showOnStartup: false #+end_src

**** =${HOME}/.atom/packages/tomorrow-night-eighties-syntax/styles/colors.less= #+begin_src less :noweb-ref colors.less @background: #222222; @current-line: #333333; @selection: #4c4c4c; @foreground: #cccccc; @comment: #999999; @red: #f27f7f; @orange: #ff994c; @yellow: #ffcc66; @green: #99cc99; @aqua: #66cccc; @blue: #6699cc; @purple: #cc99cc; #+end_src

*** Customize autoping #+begin_src sh :var _autoping=_autoping[3:-2,1:5]

custom_autoping () { config_defaults "${_autoping}" } #+end_src

**** _autoping #+name: _autoping |----------------------------------+---------------------+----------------------+---------+------------+------| | Preference | Domain | Key | Type | Value | Host | |----------------------------------+---------------------+----------------------+---------+------------+------| | Host to Ping | com.memset.autoping | Hostname | -string | google.com | | | Slow Ping Threshold (ms) 100 | com.memset.autoping | SlowPingLowThreshold | -int | 100 | | | Launch at Login on | com.memset.autoping | LaunchAtLogin | -bool | true | | | Display Icon and Text | com.memset.autoping | ShowIcon | -bool | true | | | | com.memset.autoping | ShowText | -bool | true | | | Packet Loss Text on | com.memset.autoping | ShowPacketLossText | -bool | true | | | Connection Up/Down Alerts on | com.memset.autoping | ShowNotifications | -bool | true | | |----------------------------------+---------------------+----------------------+---------+------------+------|

*** Customize Dropbox #+begin_src sh custom_dropbox () { test -d "/Applications/Dropbox.app" &&
open "/Applications/Dropbox.app" } #+end_src

*** Customize Default UTIs #+begin_src sh :var _duti=_duti[3:-2,0:2] custom_duti () { if test -x "/usr/local/bin/duti"; then test -f "{HOME}/Library/Preferences/org.duti.plist" && \ rm "{HOME}/Library/Preferences/org.duti.plist"

printf "%s\n" "${_duti}" | \
while IFS="$(printf '\t')" read id uti role; do
  defaults write org.duti DUTISettings -array-add \
    "{
      DUTIBundleIdentifier = '$a';
      DUTIUniformTypeIdentifier = '$b';
      DUTIRole = '$c';
    }"
done

duti "${HOME}/Library/Preferences/org.duti.plist" 2> /dev/null

fi } #+end_src

**** _duti #+name: _duti |----------------------------+--------------------------------------------------------+--------| | Bundle ID | UTI | Role | |----------------------------+--------------------------------------------------------+--------| | com.apple.DiskImageMounter | com.apple.disk-image | all | | com.apple.DiskImageMounter | public.disk-image | all | | com.apple.DiskImageMounter | public.iso-image | all | | com.apple.QuickTimePlayerX | com.apple.coreaudio-format | all | | com.apple.QuickTimePlayerX | com.apple.quicktime-movie | all | | com.apple.QuickTimePlayerX | com.microsoft.waveform-audio | all | | com.apple.QuickTimePlayerX | public.aifc-audio | all | | com.apple.QuickTimePlayerX | public.aiff-audio | all | | com.apple.QuickTimePlayerX | public.audio | all | | com.apple.QuickTimePlayerX | public.mp3 | all | | com.apple.Safari | com.compuserve.gif | all | | com.apple.Terminal | com.apple.terminal.shell-script | all | | com.apple.iTunes | com.apple.iTunes.audible | all | | com.apple.iTunes | com.apple.iTunes.ipg | all | | com.apple.iTunes | com.apple.iTunes.ipsw | all | | com.apple.iTunes | com.apple.iTunes.ite | all | | com.apple.iTunes | com.apple.iTunes.itlp | all | | com.apple.iTunes | com.apple.iTunes.itms | all | | com.apple.iTunes | com.apple.iTunes.podcast | all | | com.apple.iTunes | com.apple.m4a-audio | all | | com.apple.iTunes | com.apple.mpeg-4-ringtone | all | | com.apple.iTunes | com.apple.protected-mpeg-4-audio | all | | com.apple.iTunes | com.apple.protected-mpeg-4-video | all | | com.apple.iTunes | com.audible.aa-audio | all | | com.apple.iTunes | public.mpeg-4-audio | all | | com.apple.installer | com.apple.installer-package-archive | all | | com.github.atom | com.apple.binary-property-list | editor | | com.github.atom | com.apple.crashreport | editor | | com.github.atom | com.apple.dt.document.ascii-property-list | editor | | com.github.atom | com.apple.dt.document.script-suite-property-list | editor | | com.github.atom | com.apple.dt.document.script-terminology-property-list | editor | | com.github.atom | com.apple.log | editor | | com.github.atom | com.apple.property-list | editor | | com.github.atom | com.apple.rez-source | editor | | com.github.atom | com.apple.symbol-export | editor | | com.github.atom | com.apple.xcode.ada-source | editor | | com.github.atom | com.apple.xcode.bash-script | editor | | com.github.atom | com.apple.xcode.configsettings | editor | | com.github.atom | com.apple.xcode.csh-script | editor | | com.github.atom | com.apple.xcode.fortran-source | editor | | com.github.atom | com.apple.xcode.ksh-script | editor | | com.github.atom | com.apple.xcode.lex-source | editor | | com.github.atom | com.apple.xcode.make-script | editor | | com.github.atom | com.apple.xcode.mig-source | editor | | com.github.atom | com.apple.xcode.pascal-source | editor | | com.github.atom | com.apple.xcode.strings-text | editor | | com.github.atom | com.apple.xcode.tcsh-script | editor | | com.github.atom | com.apple.xcode.yacc-source | editor | | com.github.atom | com.apple.xcode.zsh-script | editor | | com.github.atom | com.apple.xml-property-list | editor | | com.github.atom | com.barebones.bbedit.actionscript-source | editor | | com.github.atom | com.barebones.bbedit.erb-source | editor | | com.github.atom | com.barebones.bbedit.ini-configuration | editor | | com.github.atom | com.barebones.bbedit.javascript-source | editor | | com.github.atom | com.barebones.bbedit.json-source | editor | | com.github.atom | com.barebones.bbedit.jsp-source | editor | | com.github.atom | com.barebones.bbedit.lasso-source | editor | | com.github.atom | com.barebones.bbedit.lua-source | editor | | com.github.atom | com.barebones.bbedit.setext-source | editor | | com.github.atom | com.barebones.bbedit.sql-source | editor | | com.github.atom | com.barebones.bbedit.tcl-source | editor | | com.github.atom | com.barebones.bbedit.tex-source | editor | | com.github.atom | com.barebones.bbedit.textile-source | editor | | com.github.atom | com.barebones.bbedit.vbscript-source | editor | | com.github.atom | com.barebones.bbedit.vectorscript-source | editor | | com.github.atom | com.barebones.bbedit.verilog-hdl-source | editor | | com.github.atom | com.barebones.bbedit.vhdl-source | editor | | com.github.atom | com.barebones.bbedit.yaml-source | editor | | com.github.atom | com.netscape.javascript-source | editor | | com.github.atom | com.sun.java-source | editor | | com.github.atom | dyn.ah62d4rv4ge80255drq | all | | com.github.atom | dyn.ah62d4rv4ge80g55gq3w0n | all | | com.github.atom | dyn.ah62d4rv4ge80g55sq2 | all | | com.github.atom | dyn.ah62d4rv4ge80y2xzrf0gk3pw | all | | com.github.atom | dyn.ah62d4rv4ge81e3dtqq | all | | com.github.atom | dyn.ah62d4rv4ge81e7k | all | | com.github.atom | dyn.ah62d4rv4ge81g25xsq | all | | com.github.atom | dyn.ah62d4rv4ge81g2pxsq | all | | com.github.atom | net.daringfireball.markdown | editor | | com.github.atom | public.assembly-source | editor | | com.github.atom | public.c-header | editor | | com.github.atom | public.c-plus-plus-source | editor | | com.github.atom | public.c-source | editor | | com.github.atom | public.csh-script | editor | | com.github.atom | public.json | editor | | com.github.atom | public.lex-source | editor | | com.github.atom | public.log | editor | | com.github.atom | public.mig-source | editor | | com.github.atom | public.nasm-assembly-source | editor | | com.github.atom | public.objective-c-plus-plus-source | editor | | com.github.atom | public.objective-c-source | editor | | com.github.atom | public.patch-file | editor | | com.github.atom | public.perl-script | editor | | com.github.atom | public.php-script | editor | | com.github.atom | public.plain-text | editor | | com.github.atom | public.precompiled-c-header | editor | | com.github.atom | public.precompiled-c-plus-plus-header | editor | | com.github.atom | public.python-script | editor | | com.github.atom | public.ruby-script | editor | | com.github.atom | public.script | editor | | com.github.atom | public.shell-script | editor | | com.github.atom | public.source-code | editor | | com.github.atom | public.text | editor | | com.github.atom | public.utf16-external-plain-text | editor | | com.github.atom | public.utf16-plain-text | editor | | com.github.atom | public.utf8-plain-text | editor | | com.github.atom | public.xml | editor | | com.kodlian.Icon-Slate | com.apple.icns | all | | com.kodlian.Icon-Slate | com.microsoft.ico | all | | com.microsoft.Word | public.rtf | all | | com.panayotis.jubler | dyn.ah62d4rv4ge81g6xy | all | | com.sketchup.SketchUp.2017 | com.sketchup.skp | all | | com.VortexApps.NZBVortex3 | dyn.ah62d4rv4ge8068xc | all | | com.vmware.fusion | com.microsoft.windows-executable | all | | cx.c3.theunarchiver | com.alcohol-soft.mdf-image | all | | cx.c3.theunarchiver | com.allume.stuffit-archive | all | | cx.c3.theunarchiver | com.altools.alz-archive | all | | cx.c3.theunarchiver | com.amiga.adf-archive | all | | cx.c3.theunarchiver | com.amiga.adz-archive | all | | cx.c3.theunarchiver | com.apple.applesingle-archive | all | | cx.c3.theunarchiver | com.apple.binhex-archive | all | | cx.c3.theunarchiver | com.apple.bom-compressed-cpio | all | | cx.c3.theunarchiver | com.apple.itunes.ipa | all | | cx.c3.theunarchiver | com.apple.macbinary-archive | all | | cx.c3.theunarchiver | com.apple.self-extracting-archive | all | | cx.c3.theunarchiver | com.apple.xar-archive | all | | cx.c3.theunarchiver | com.apple.xip-archive | all | | cx.c3.theunarchiver | com.cyclos.cpt-archive | all | | cx.c3.theunarchiver | com.microsoft.cab-archive | all | | cx.c3.theunarchiver | com.microsoft.msi-installer | all | | cx.c3.theunarchiver | com.nero.nrg-image | all | | cx.c3.theunarchiver | com.network172.pit-archive | all | | cx.c3.theunarchiver | com.nowsoftware.now-archive | all | | cx.c3.theunarchiver | com.nscripter.nsa-archive | all | | cx.c3.theunarchiver | com.padus.cdi-image | all | | cx.c3.theunarchiver | com.pkware.zip-archive | all | | cx.c3.theunarchiver | com.rarlab.rar-archive | all | | cx.c3.theunarchiver | com.redhat.rpm-archive | all | | cx.c3.theunarchiver | com.stuffit.archive.sit | all | | cx.c3.theunarchiver | com.stuffit.archive.sitx | all | | cx.c3.theunarchiver | com.sun.java-archive | all | | cx.c3.theunarchiver | com.symantec.dd-archive | all | | cx.c3.theunarchiver | com.winace.ace-archive | all | | cx.c3.theunarchiver | com.winzip.zipx-archive | all | | cx.c3.theunarchiver | cx.c3.arc-archive | all | | cx.c3.theunarchiver | cx.c3.arj-archive | all | | cx.c3.theunarchiver | cx.c3.dcs-archive | all | | cx.c3.theunarchiver | cx.c3.dms-archive | all | | cx.c3.theunarchiver | cx.c3.ha-archive | all | | cx.c3.theunarchiver | cx.c3.lbr-archive | all | | cx.c3.theunarchiver | cx.c3.lha-archive | all | | cx.c3.theunarchiver | cx.c3.lhf-archive | all | | cx.c3.theunarchiver | cx.c3.lzx-archive | all | | cx.c3.theunarchiver | cx.c3.packdev-archive | all | | cx.c3.theunarchiver | cx.c3.pax-archive | all | | cx.c3.theunarchiver | cx.c3.pma-archive | all | | cx.c3.theunarchiver | cx.c3.pp-archive | all | | cx.c3.theunarchiver | cx.c3.xmash-archive | all | | cx.c3.theunarchiver | cx.c3.zoo-archive | all | | cx.c3.theunarchiver | cx.c3.zoom-archive | all | | cx.c3.theunarchiver | org.7-zip.7-zip-archive | all | | cx.c3.theunarchiver | org.archive.warc-archive | all | | cx.c3.theunarchiver | org.debian.deb-archive | all | | cx.c3.theunarchiver | org.gnu.gnu-tar-archive | all | | cx.c3.theunarchiver | org.gnu.gnu-zip-archive | all | | cx.c3.theunarchiver | org.gnu.gnu-zip-tar-archive | all | | cx.c3.theunarchiver | org.tukaani.lzma-archive | all | | cx.c3.theunarchiver | org.tukaani.xz-archive | all | | cx.c3.theunarchiver | public.bzip2-archive | all | | cx.c3.theunarchiver | public.cpio-archive | all | | cx.c3.theunarchiver | public.tar-archive | all | | cx.c3.theunarchiver | public.tar-bzip2-archive | all | | cx.c3.theunarchiver | public.z-archive | all | | cx.c3.theunarchiver | public.zip-archive | all | | cx.c3.theunarchiver | public.zip-archive.first-part | all | | org.gnu.Emacs | dyn.ah62d4rv4ge8086xh | all | | org.inkscape.Inkscape | public.svg-image | editor | | org.videolan.vlc | com.apple.m4v-video | all | | org.videolan.vlc | com.microsoft.windows-media-wmv | all | | org.videolan.vlc | org.videolan.3gp | all | | org.videolan.vlc | org.videolan.aac | all | | org.videolan.vlc | org.videolan.ac3 | all | | org.videolan.vlc | org.videolan.aiff | all | | org.videolan.vlc | org.videolan.amr | all | | org.videolan.vlc | org.videolan.aob | all | | org.videolan.vlc | org.videolan.ape | all | | org.videolan.vlc | org.videolan.asf | all | | org.videolan.vlc | org.videolan.avi | all | | org.videolan.vlc | org.videolan.axa | all | | org.videolan.vlc | org.videolan.axv | all | | org.videolan.vlc | org.videolan.divx | all | | org.videolan.vlc | org.videolan.dts | all | | org.videolan.vlc | org.videolan.dv | all | | org.videolan.vlc | org.videolan.flac | all | | org.videolan.vlc | org.videolan.flash | all | | org.videolan.vlc | org.videolan.gxf | all | | org.videolan.vlc | org.videolan.it | all | | org.videolan.vlc | org.videolan.mid | all | | org.videolan.vlc | org.videolan.mka | all | | org.videolan.vlc | org.videolan.mkv | all | | org.videolan.vlc | org.videolan.mlp | all | | org.videolan.vlc | org.videolan.mod | all | | org.videolan.vlc | org.videolan.mpc | all | | org.videolan.vlc | org.videolan.mpeg-audio | all | | org.videolan.vlc | org.videolan.mpeg-stream | all | | org.videolan.vlc | org.videolan.mpeg-video | all | | org.videolan.vlc | org.videolan.mxf | all | | org.videolan.vlc | org.videolan.nsv | all | | org.videolan.vlc | org.videolan.nuv | all | | org.videolan.vlc | org.videolan.ogg-audio | all | | org.videolan.vlc | org.videolan.ogg-video | all | | org.videolan.vlc | org.videolan.oma | all | | org.videolan.vlc | org.videolan.opus | all | | org.videolan.vlc | org.videolan.quicktime | all | | org.videolan.vlc | org.videolan.realmedia | all | | org.videolan.vlc | org.videolan.rec | all | | org.videolan.vlc | org.videolan.rmi | all | | org.videolan.vlc | org.videolan.s3m | all | | org.videolan.vlc | org.videolan.spx | all | | org.videolan.vlc | org.videolan.tod | all | | org.videolan.vlc | org.videolan.tta | all | | org.videolan.vlc | org.videolan.vob | all | | org.videolan.vlc | org.videolan.voc | all | | org.videolan.vlc | org.videolan.vqf | all | | org.videolan.vlc | org.videolan.vro | all | | org.videolan.vlc | org.videolan.wav | all | | org.videolan.vlc | org.videolan.webm | all | | org.videolan.vlc | org.videolan.wma | all | | org.videolan.vlc | org.videolan.wmv | all | | org.videolan.vlc | org.videolan.wtv | all | | org.videolan.vlc | org.videolan.wv | all | | org.videolan.vlc | org.videolan.xa | all | | org.videolan.vlc | org.videolan.xesc | all | | org.videolan.vlc | org.videolan.xm | all | | org.videolan.vlc | public.ac3-audio | all | | org.videolan.vlc | public.audiovisual-content | all | | org.videolan.vlc | public.avi | all | | org.videolan.vlc | public.movie | all | | org.videolan.vlc | public.mpeg | all | | org.videolan.vlc | public.mpeg-2-video | all | | org.videolan.vlc | public.mpeg-4 | all | |----------------------------+--------------------------------------------------------+--------|

*** Customize Emacs #+begin_src sh custom_emacs () { mkdir -p "{HOME}/.emacs.d" && \ curl --compressed --location --silent \ "https://github.com/syl20bnr/spacemacs/archive/master.tar.gz" | \ tar -C "{HOME}/.emacs.d" --strip-components 1 -xf - mkdir -p "HOME/.emacs.d/private/ptb"chmodRgo="{HOME}/.emacs.d/private/ptb" chmod -R go= "{HOME}/.emacs.d"

cat << EOF > "${HOME}/.spacemacs" <<.spacemacs>> EOF

cat << EOF > "${HOME}/.emacs.d/private/ptb/config.el" <<config.el>> EOF

cat << EOF > "${HOME}/.emacs.d/private/ptb/funcs.el" <<funcs.el>> EOF

cat << EOF > "${HOME}/.emacs.d/private/ptb/keybindings.el" <<keybindings.el>> EOF

cat << EOF > "${HOME}/.emacs.d/private/ptb/packages.el" <<packages.el>> EOF } #+end_src

**** =~/.spacemacs= #+begin_src emacs-lisp :noweb-ref .spacemacs (defun dotspacemacs/layers () (setq-default dotspacemacs-configuration-layers '( auto-completion (colors :variables colors-colorize-identifiers 'variables) dash deft docker emacs-lisp evil-cleverparens git github helm html ibuffer imenu-list javascript markdown nginx (org :variables org-enable-github-support t) (osx :variables osx-use-option-as-meta nil) ptb react ruby ruby-on-rails search-engine semantic shell-scripts (spell-checking :variables spell-checking-enable-by-default nil) syntax-checking (version-control :variables version-control-diff-side 'left) vim-empty-lines ) dotspacemacs-excluded-packages '(org-bullets) ) )

(defun dotspacemacs/init () (setq-default dotspacemacs-startup-banner nil dotspacemacs-startup-lists nil dotspacemacs-scratch-mode 'org-mode dotspacemacs-themes '(sanityinc-tomorrow-eighties) dotspacemacs-default-font '( "Inconsolata LGC" :size 13 :weight normal :width normal :powerline-scale 1.1) dotspacemacs-loading-progress-bar nil dotspacemacs-active-transparency 100 dotspacemacs-inactive-transparency 100 dotspacemacs-line-numbers t dotspacemacs-whitespace-cleanup 'all ) )

(defun dotspacemacs/user-init ()) (defun dotspacemacs/user-config ()) #+end_src

**** =~/.emacs.d/private/ptb/config.el= #+begin_src emacs-lisp :noweb-ref config.el (setq default-frame-alist '( (top . 22) (left . 1201) (height . 50) (width . 120) (vertical-scroll-bars . right)) initial-frame-alist (copy-alist default-frame-alist)

deft-directory "~/Dropbox/Notes" focus-follows-mouse t mouse-wheel-follow-mouse t mouse-wheel-scroll-amount '(1 ((shift) . 1)) org-src-preserve-indentation t purpose-display-at-right 20 recentf-max-saved-items 5 scroll-step 1 system-uses-terminfo nil

ibuffer-formats '( (mark modified read-only " " (name 18 18 :left :elide)))

ibuffer-shrink-to-minimum-size t ibuffer-always-show-last-buffer nil ibuffer-sorting-mode 'recency ibuffer-use-header-line nil x-select-enable-clipboard nil)

(global-linum-mode t) (recentf-mode t) (x-focus-frame nil) (with-eval-after-load 'org (org-babel-do-load-languages 'org-babel-load-languages '( (ruby . t) (shell . t) ) ) ) #+end_src

**** =~/.emacs.d/private/ptb/funcs.el= #+begin_src emacs-lisp :noweb-ref funcs.el (defun is-useless-buffer (buffer) (let ((name (buffer-name buffer))) (and (= ?* (aref name 0)) (string-match "^\**" name))))

(defun kill-useless-buffers () (interactive) (loop for buffer being the buffers do (and (is-useless-buffer buffer) (kill-buffer buffer))))

(defun org-babel-tangle-hook () (add-hook 'after-save-hook 'org-babel-tangle))

(add-hook 'org-mode-hook #'org-babel-tangle-hook)

(defun ptb/new-untitled-buffer () "Create a new untitled buffer in the current frame." (interactive) (let ((buffer "Untitled-") (count 1)) (while (get-buffer (concat buffer (number-to-string count))) (setq count (1+ count))) (switch-to-buffer (concat buffer (number-to-string count)))) (org-mode))

(defun ptb/previous-buffer () (interactive) (kill-useless-buffers) (previous-buffer))

(defun ptb/next-buffer () (interactive) (kill-useless-buffers) (next-buffer))

(defun ptb/kill-current-buffer () (interactive) (kill-buffer (current-buffer)) (kill-useless-buffers)) #+end_src

**** =~/.emacs.d/private/ptb/keybindings.el= #+begin_src emacs-lisp :noweb-ref keybindings.el (define-key evil-insert-state-map (kbd "") 'newline)

(define-key evil-normal-state-map (kbd "s-c") 'clipboard-kill-ring-save) (define-key evil-insert-state-map (kbd "s-c") 'clipboard-kill-ring-save) (define-key evil-visual-state-map (kbd "s-c") 'clipboard-kill-ring-save)

(define-key evil-ex-completion-map (kbd "s-v") 'clipboard-yank) (define-key evil-ex-search-keymap (kbd "s-v") 'clipboard-yank) (define-key evil-insert-state-map (kbd "s-v") 'clipboard-yank)

(define-key evil-normal-state-map (kbd "s-x") 'clipboard-kill-region) (define-key evil-insert-state-map (kbd "s-x") 'clipboard-kill-region) (define-key evil-visual-state-map (kbd "s-x") 'clipboard-kill-region)

(define-key evil-normal-state-map (kbd "") 'evil-previous-visual-line) (define-key evil-insert-state-map (kbd "") 'evil-previous-visual-line) (define-key evil-visual-state-map (kbd "") 'evil-previous-visual-line)

(define-key evil-normal-state-map (kbd "") 'evil-next-visual-line) (define-key evil-insert-state-map (kbd "") 'evil-next-visual-line) (define-key evil-visual-state-map (kbd "") 'evil-next-visual-line)

(global-set-key (kbd "C-l") 'evil-search-highlight-persist-remove-all)

(global-set-key (kbd "s-t") 'make-frame) (global-set-key (kbd "s-n") 'ptb/new-untitled-buffer) (global-set-key (kbd "s-w") 'ptb/kill-current-buffer) (global-set-key (kbd "s-{") 'ptb/previous-buffer) (global-set-key (kbd "s-}") 'ptb/next-buffer) #+end_src

**** =~/.emacs.d/private/ptb/packages.el= #+begin_src emacs-lisp :noweb-ref packages.el (setq ptb-packages '(adaptive-wrap auto-indent-mode))

(defun ptb/init-adaptive-wrap () "Load the adaptive wrap package" (use-package adaptive-wrap :init (setq adaptive-wrap-extra-indent 2) :config (progn ;; http://stackoverflow.com/questions/13559061 (when (fboundp 'adaptive-wrap-prefix-mode) (defun ptb/activate-adaptive-wrap-prefix-mode () "Toggle 'visual-line-mode' and 'adaptive-wrap-prefix-mode' simultaneously." (adaptive-wrap-prefix-mode (if visual-line-mode 1 -1))) (add-hook 'visual-line-mode-hook 'ptb/activate-adaptive-wrap-prefix-mode)))))

(defun ptb/init-auto-indent-mode () (use-package auto-indent-mode :init (setq auto-indent-delete-backward-char t auto-indent-fix-org-auto-fill t auto-indent-fix-org-move-beginning-of-line t auto-indent-fix-org-return t auto-indent-fix-org-yank t auto-indent-start-org-indent t ) ) ) #+end_src

*** Customize Finder #+begin_src sh :var _finder=_finder[3:-2,1:5]

custom_finder () { config_defaults "${_finder}" defaults write "com.apple.finder" "NSToolbar Configuration Browser"
'{ "TB Display Mode" = 2; "TB Item Identifiers" = ( "com.apple.finder.BACK", "com.apple.finder.PATH", "com.apple.finder.SWCH", "com.apple.finder.ARNG", "NSToolbarFlexibleSpaceItem", "com.apple.finder.SRCH", "com.apple.finder.ACTN" ); }' } #+end_src

**** _finder #+name: _finder |----------------------------------------------------------------+------------------+--------------------------------------+---------+-------------------------+------| | Preference | Domain | Key | Type | Value | Host | |----------------------------------------------------------------+------------------+--------------------------------------+---------+-------------------------+------| | Show these items on the desktop: off Hard disks | com.apple.finder | ShowHardDrivesOnDesktop | -bool | false | | | Show these items on the desktop: off External disks | com.apple.finder | ShowExternalHardDrivesOnDesktop | -bool | false | | | Show these items on the desktop: on CDs, DVDs, and iPods | com.apple.finder | ShowRemovableMediaOnDesktop | -bool | true | | | Show these items on the desktop: on Connected servers: | com.apple.finder | ShowMountedServersOnDesktop | -bool | true | | | New Finder windows show: ~HOME com.apple.finderNewWindowTargetstringPfLocom.apple.finderNewWindowTargetPathstringfile://{HOME}~ | com.apple.finder | NewWindowTarget | -string | PfLo | | | | com.apple.finder | NewWindowTargetPath | -string | file://{HOME}/Dropbox/ | | | on Show all filename extensions | -globalDomain | AppleShowAllExtensions | -bool | true | | | off Show warning before changing an extension | com.apple.finder | FXEnableExtensionChangeWarning | -bool | false | | | on Show warning before removing from iCloud Drive | com.apple.finder | FXEnableRemoveFromICloudDriveWarning | -bool | true | | | off Show warning before emptying the Trash | com.apple.finder | WarnOnEmptyTrash | -bool | false | | | ViewShow Path Bar | com.apple.finder | ShowPathbar | -bool | true | | | ViewShow Status Bar | com.apple.finder | ShowStatusBar | -bool | true | | |----------------------------------------------------------------+------------------+--------------------------------------+---------+-------------------------+------|

*** Customize getmail #+begin_src sh :var _getmail_ini=_getmail_ini[3:-2,0:2] _getmail_plist=_getmail_plist[3:-2,0:3] custom_getmail () { test -d "HOME/.getmail" mkdirmgo="{HOME}/.getmail" || \ mkdir -m go= "{HOME}/.getmail"

while true; do e=(ask2"Toconfiguregetmail,enteryouremailaddress.""ConfigureGetmail""NoMoreAddresses""CreateConfiguration""(ask2 "To configure getmail, enter your email address." "Configure Getmail" "No More Addresses" "Create Configuration" "(whoami)@(hostnamefcutd.f2)""false")testn"(hostname -f | cut -d. -f2-)" "false") test -n "e" || break

security find-internet-password -a "$e" -D "getmail password" > /dev/null || \
p=$(ask2 "Enter your password for $e." "Configure Getmail" "Cancel" "Set Password" "" "true") && \
security add-internet-password -a "$e" -s "imap.gmail.com" -r "imap" \
  -l "$e" -D "getmail password" -P 993 -w "$p"

if which crudini > /dev/null; then
  gm="${HOME}/.getmail/${e}"
  printf "%s\n" "${_getmail_ini}" | \
  while IFS="$(printf '\t')" read section key value; do
    crudini --set "$gm" "$section" "$key" "$value"
  done
  crudini --set "$gm" "destination" "arguments" "('-c','/usr/local/etc/dovecot/dovecot.conf','-d','$(whoami)')"
  crudini --set "$gm" "destination" "path" "$(find '/usr/local/Cellar/dovecot' -name 'dovecot-lda' -print -quit)"
  crudini --set "$gm" "retriever" "username" "$e"
fi

la="${HOME}/Library/LaunchAgents/ca.pyropus.getmail.${e}"

test -d "$(dirname $la)" || \
  mkdir -p "$(dirname $la)"
launchctl unload "${la}.plist" 2> /dev/null
rm -f "${la}.plist"

config_plist "$_getmail_plist" "${la}.plist"
config_defaults "$(printf "${la}\tLabel\t-string\tca.pyropus.getmail.${e}\t")"
config_defaults "$(printf "${la}\tProgramArguments\t-array-add\t${e}\t")"
config_defaults "$(printf "${la}\tWorkingDirectory\t-string\t${HOME}/.getmail\t")"

plutil -convert xml1 "${la}.plist"
launchctl load "${la}.plist" 2> /dev/null

done } #+end_src

**** _getmail_ini #+name: _getmail_ini |-------------+----------------+------------------------| | Section | Key | Value | |-------------+----------------+------------------------| | destination | ignore_stderr | true | | destination | type | MDA_external | | options | delete | true | | options | delivered_to | false | | options | read_all | false | | options | received | false | | options | verbose | 0 | | retriever | mailboxes | ("[Gmail]/All Mail",) | | retriever | move_on_delete | "[Gmail]/Trash" | | retriever | port | 993 | | retriever | server | imap.gmail.com | | retriever | type | SimpleIMAPSSLRetriever | |-------------+----------------+------------------------|

**** _getmail_plist #+name: _getmail_plist |---------+---------------------+---------+------------------------| | Command | Entry | Type | Value | |---------+---------------------+---------+------------------------| | add | :KeepAlive | bool | true | | add | :ProcessType | string | Background | | add | :ProgramArguments | array | | | add | :ProgramArguments:0 | string | /usr/local/bin/getmail | | add | :ProgramArguments:1 | string | --idle | | add | :ProgramArguments:2 | string | [Gmail]/All Mail | | add | :ProgramArguments:3 | string | --rcfile | | add | :RunAtLoad | bool | true | | add | :StandardOutPath | string | getmail.log | | add | :StandardErrorPath | string | getmail.err | |---------+---------------------+---------+------------------------|

*** Customize Git #+begin_src sh custom_git () { if ! test -e "${HOME}/.gitconfig"; then true fi } #+end_src

*** Customize GnuPG #+begin_src sh custom_gnupg () { if ! test -d "${HOME}/.gnupg"; then true fi } #+end_src

*** Customize iStat Menus #+begin_src sh :var _istatmenus=_istatmenus[3:-2,1:5]

custom_istatmenus () { defaults delete com.bjango.istatmenus5.extras Time_MenubarFormat > /dev/null 2>&1 defaults delete com.bjango.istatmenus5.extras Time_DropdownFormat > /dev/null 2>&1 defaults delete com.bjango.istatmenus5.extras Time_Cities > /dev/null 2>&1 config_defaults "${_istatmenus}" } #+end_src

**** _istatmenus #+name: _istatmenus |------------+-------------------------------+------------------------------------------+------------+---------------------+------| | Preference | Domain | Key | Type | Value | Host | |------------+-------------------------------+------------------------------------------+------------+---------------------+------| | | com.bjango.istatmenus5.extras | MenubarSkinColor | -int | 8 | | | | com.bjango.istatmenus5.extras | MenubarTheme | -int | 0 | | | | com.bjango.istatmenus5.extras | DropdownTheme | -int | 1 | | | | com.bjango.istatmenus5.extras | CPU_MenubarMode | -string | 100,2,0 | | | | com.bjango.istatmenus5.extras | CPU_MenubarTextSize | -int | 14 | | | | com.bjango.istatmenus5.extras | CPU_MenubarGraphShowBackground | -int | 0 | | | | com.bjango.istatmenus5.extras | CPU_MenubarGraphWidth | -int | 32 | | | | com.bjango.istatmenus5.extras | CPU_MenubarGraphBreakdowns | -int | 0 | | | | com.bjango.istatmenus5.extras | CPU_MenubarGraphCustomColors | -int | 0 | | | | com.bjango.istatmenus5.extras | CPU_MenubarGraphOverall | -string | 0.40 0.60 0.40 1.00 | | | | com.bjango.istatmenus5.extras | CPU_MenubarCombineCores | -int | 1 | | | | com.bjango.istatmenus5.extras | CPU_MenubarGroupItems | -int | 0 | | | | com.bjango.istatmenus5.extras | CPU_MenubarSingleHistoryGraph | -int | 0 | | | | com.bjango.istatmenus5.extras | CPU_CombineLogicalCores | -int | 1 | | | | com.bjango.istatmenus5.extras | CPU_AppFormat | -int | 0 | | | | com.bjango.istatmenus5.extras | Memory_MenubarMode | -string | 100,2,6 | | | | com.bjango.istatmenus5.extras | Memory_MenubarPercentageSize | -int | 14 | | | | com.bjango.istatmenus5.extras | Memory_MenubarGraphBreakdowns | -int | 1 | | | | com.bjango.istatmenus5.extras | Memory_MenubarGraphCustomColors | -int | 0 | | | | com.bjango.istatmenus5.extras | Memory_MenubarGraphOverall | -string | 0.40 0.60 0.40 1.00 | | | | com.bjango.istatmenus5.extras | Memory_MenubarGraphWired | -string | 0.40 0.60 0.40 1.00 | | | | com.bjango.istatmenus5.extras | Memory_MenubarGraphActive | -string | 0.47 0.67 0.47 1.00 | | | | com.bjango.istatmenus5.extras | Memory_MenubarGraphCompressed | -string | 0.53 0.73 0.53 1.00 | | | | com.bjango.istatmenus5.extras | Memory_MenubarGraphInactive | -string | 0.60 0.80 0.60 1.00 | | | | com.bjango.istatmenus5.extras | Memory_IgnoreInactive | -int | 0 | | | | com.bjango.istatmenus5.extras | Memory_AppFormat | -int | 0 | | | | com.bjango.istatmenus5.extras | Memory_DisplayFormat | -int | 1 | | | | com.bjango.istatmenus5.extras | Disks_MenubarMode | -string | 100,9,8 | | | | com.bjango.istatmenus5.extras | Disks_MenubarGroupItems | -int | 1 | | | | com.bjango.istatmenus5.extras | Disks_MenubarRWShowLabel | -int | 1 | | | | com.bjango.istatmenus5.extras | Disks_MenubarRWBold | -int | 0 | | | | com.bjango.istatmenus5.extras | Disks_MenubarGraphActivityWidth | -int | 32 | | | | com.bjango.istatmenus5.extras | Disks_MenubarGraphActivityShowBackground | -int | 0 | | | | com.bjango.istatmenus5.extras | Disks_MenubarGraphActivityCustomColors | -int | 0 | | | | com.bjango.istatmenus5.extras | Disks_MenubarGraphActivityRead | -string | 0.60 0.80 0.60 1.00 | | | | com.bjango.istatmenus5.extras | Disks_MenubarGraphActivityWrite | -string | 0.40 0.60 0.40 1.00 | | | | com.bjango.istatmenus5.extras | Disks_SeperateFusion | -int | 1 | | | | com.bjango.istatmenus5.extras | Network_MenubarMode | -string | 4,0,1 | | | | com.bjango.istatmenus5.extras | Network_TextUploadColor-Dark | -string | 1.00 1.00 1.00 1.00 | | | | com.bjango.istatmenus5.extras | Network_TextDownloadColor-Dark | -string | 1.00 1.00 1.00 1.00 | | | | com.bjango.istatmenus5.extras | Network_GraphWidth | -int | 32 | | | | com.bjango.istatmenus5.extras | Network_GraphShowBackground | -int | 0 | | | | com.bjango.istatmenus5.extras | Network_GraphCustomColors | -int | 0 | | | | com.bjango.istatmenus5.extras | Network_GraphUpload | -string | 0.60 0.80 0.60 1.00 | | | | com.bjango.istatmenus5.extras | Network_GraphDownload | -string | 0.40 0.60 0.40 1.00 | | | | com.bjango.istatmenus5.extras | Network_GraphMode | -int | 1 | | | | com.bjango.istatmenus5.extras | Battery_MenubarMode | -string | 5,0 | | | | com.bjango.istatmenus5.extras | Battery_ColorGraphCustomColors | -int | 1 | | | | com.bjango.istatmenus5.extras | Battery_ColorGraphCharged | -string | 0.40 0.60 0.40 1.00 | | | | com.bjango.istatmenus5.extras | Battery_ColorGraphCharging | -string | 0.60 0.80 0.60 1.00 | | | | com.bjango.istatmenus5.extras | Battery_ColorGraphDraining | -string | 1.00 0.60 0.60 1.00 | | | | com.bjango.istatmenus5.extras | Battery_ColorGraphLow | -string | 1.00 0.20 0.20 1.00 | | | | com.bjango.istatmenus5.extras | Battery_PercentageSize | -int | 14 | | | | com.bjango.istatmenus5.extras | Battery_MenubarCustomizeStates | -int | 0 | | | | com.bjango.istatmenus5.extras | Battery_MenubarHideBluetooth | -int | 1 | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | EE | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | \040 | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | MMM | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | \040 | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | d | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | \040 | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | h | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | : | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | mm | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | : | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | ss | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | \040 | | | | com.bjango.istatmenus5.extras | Time_MenubarFormat | -array-add | a | | | | com.bjango.istatmenus5.extras | Time_DropdownFormat | -array-add | EE | | | | com.bjango.istatmenus5.extras | Time_DropdownFormat | -array-add | \040 | | | | com.bjango.istatmenus5.extras | Time_DropdownFormat | -array-add | h | | | | com.bjango.istatmenus5.extras | Time_DropdownFormat | -array-add | : | | | | com.bjango.istatmenus5.extras | Time_DropdownFormat | -array-add | mm | | | | com.bjango.istatmenus5.extras | Time_DropdownFormat | -array-add | \040 | | | | com.bjango.istatmenus5.extras | Time_DropdownFormat | -array-add | a | | | | com.bjango.istatmenus5.extras | Time_DropdownFormat | -array-add | \040\050 | | | | com.bjango.istatmenus5.extras | Time_DropdownFormat | -array-add | zzz | | | | com.bjango.istatmenus5.extras | Time_DropdownFormat | -array-add | \051 | | | | com.bjango.istatmenus5.extras | Time_Cities | -array-add | 4930956 | | | | com.bjango.istatmenus5.extras | Time_Cities | -array-add | 4887398 | | | | com.bjango.istatmenus5.extras | Time_Cities | -array-add | 5419384 | | | | com.bjango.istatmenus5.extras | Time_Cities | -array-add | 5392171 | | | | com.bjango.istatmenus5.extras | Time_Cities | -array-add | 5879400 | | | | com.bjango.istatmenus5.extras | Time_Cities | -array-add | 5856195 | | | | com.bjango.istatmenus5.extras | Time_TextSize | -int | 14 | | |------------+-------------------------------+------------------------------------------+------------+---------------------+------|

*** Customize Meteorologist #+begin_src sh :var _meteorologist=_meteorologist[3:-2,1:5]

custom_meteorologist () { config_defaults "${_meteorologist}" } #+end_src

**** _meteorologist #+name: _meteorologist |------------+------------------------+----------------------------+---------+-------+------| | Preference | Domain | Key | Type | Value | Host | |------------+------------------------+----------------------------+---------+-------+------| | | com.heat.meteorologist | controlsInSubmenu | -string | 0 | | | | com.heat.meteorologist | currentWeatherInSubmenu | -string | 0 | | | | com.heat.meteorologist | displayCityName | -string | 0 | | | | com.heat.meteorologist | displayHumidity | -string | 0 | | | | com.heat.meteorologist | displayWeatherIcon | -string | 1 | | | | com.heat.meteorologist | extendedForecastIcons | -string | 1 | | | | com.heat.meteorologist | extendedForecastInSubmenu | -string | 0 | | | | com.heat.meteorologist | extendedForecastSingleLine | -string | 1 | | | | com.heat.meteorologist | forecastDays | -int | 8 | | | | com.heat.meteorologist | viewExtendedForecast | -string | 1 | | | | com.heat.meteorologist | weatherSource_1 | -int | 3 | | |------------+------------------------+----------------------------+---------+-------+------|

*** Customize Moom #+begin_src sh :var _moom=_moom[3:-2,1:5]

custom_moom () { killall Moom > /dev/null 2>&1 defaults delete com.manytricks.Moom "Custom Controls" > /dev/null 2>&1 config_defaults "${_moom}" test -d "/Applications/Moom.app" &&
open "/Applications/Moom.app" } #+end_src

**** _moom #+name: _moom |------------------------------------------------------------------------+---------------------+-------------------------------------------------------+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------| | Preference | Domain | Key | Type | Value | Host | |------------------------------------------------------------------------+---------------------+-------------------------------------------------------+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------| | on Treat drawers as part of their parent windows | com.manytricks.Moom | Allow For Drawers | -bool | true | | | on Separate windows by 2 pt | com.manytricks.Moom | Grid Spacing | -bool | true | | | | com.manytricks.Moom | Grid Spacing: Gap | -int | 2 | | | off Apply to screen edges | com.manytricks.Moom | Grid Spacing: Apply To Edges | -bool | false | | | Grid/keyboard control highlight: 25% | com.manytricks.Moom | Target Window Highlight | -float | 0.25 | | | off Show preferences on launch | com.manytricks.Moom | Stealth Mode | -bool | true | | | Run as faceless application | com.manytricks.Moom | Application Mode | -int | 2 | | | on Pop up controls when hovering over a Zoom button | com.manytricks.Moom | Mouse Controls | -bool | true | | | Delay: 0.1 second | com.manytricks.Moom | Mouse Controls Delay | -float | 0.1 | | | on Enable hexagon grid with 16 × 9 cells | com.manytricks.Moom | Mouse Controls Grid | -bool | true | | | | com.manytricks.Moom | Mouse Controls Grid: Mode | -int | 3 | | | | com.manytricks.Moom | Mouse Controls Grid: Columns | -int | 16 | | | | com.manytricks.Moom | Mouse Controls Grid: Rows | -int | 9 | | | on Enable access to custom controls | com.manytricks.Moom | Mouse Controls Include Custom Controls | -bool | true | | | off Show on hover | com.manytricks.Moom | Mouse Controls Include Custom Controls: Show On Hover | -bool | false | | | on Bring moomed windows to the front automatically | com.manytricks.Moom | Mouse Controls Auto-Activate Window | -bool | true | | | off Move & Zoom when dragging a window to a display edge or corner | com.manytricks.Moom | Snap | -bool | false | | | Move & Zoom | com.manytricks.Moom | Custom Controls | -array-add | { Action = 19; "Relative Frame" = "{{0, 0.5}, {0.375, 0.5}}"; } | | | | com.manytricks.Moom | Custom Controls | -array-add | { Action = 19; "Relative Frame" = "{{0, 0}, {0.375, 0.5}}"; } | | | | com.manytricks.Moom | Custom Controls | -array-add | { Action = 19; "Relative Frame" = "{{0, 0}, {0.375, 1}}"; } | | | | com.manytricks.Moom | Custom Controls | -array-add | { Action = 19; "Relative Frame" = "{{0.125, 0}, {0.25, 0.33333}}"; } | | | | com.manytricks.Moom | Custom Controls | -array-add | { Action = 19; "Relative Frame" = "{{0.375, 0.33333}, {0.3125, 0.66666}}"; } | | | | com.manytricks.Moom | Custom Controls | -array-add | { Action = 19; "Relative Frame" = "{{0.375, 0}, {0.3125, 0.33333}}"; } | | | | com.manytricks.Moom | Custom Controls | -array-add | { Action = 19; "Relative Frame" = "{{0.6875, 0.66666}, {0.3125, 0.66666}}"; } | | | | com.manytricks.Moom | Custom Controls | -array-add | { Action = 19; "Relative Frame" = "{{0.6875, 0.33333}, {0.3125, 0.33333}}"; } | | | | com.manytricks.Moom | Custom Controls | -array-add | { Action = 19; "Relative Frame" = "{{0.6875, 0}, {0.3125, 0.33333}}"; } | | | | com.manytricks.Moom | Custom Controls | -array-add | { Action = 1001; "Apply to Overlapping Windows" = 1; Snapshot = ({ "Application Name" = Safari; "Bundle Identifier" = "com.apple.safari"; "Window Frame" = "{{0, 890}, {1199, 888}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = Chrome; "Bundle Identifier" = "com.google.chrome"; "Window Frame" = "{{0, 0}, {1199, 888}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = Firefox; "Bundle Identifier" = "org.mozilla.firefox"; "Window Frame" = "{{0, 0}, {1199, 888}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = Emacs; "Bundle Identifier" = "org.gnu.emacs"; "Window Frame" = "{{1201, 597}, {991, 1181}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = Code; "Bundle Identifier" = "com.microsoft.vscode"; "Window Frame" = "{{1201, 594}, {1999, 1184}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = Mail; "Bundle Identifier" = "com.apple.mail"; "Window Frame" = "{{2201, 594}, {999, 1184}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = nvALT; "Bundle Identifier" = "net.elasticthreads.nv"; "Window Frame" = "{{2201, 989}, {999, 789}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = SimpleNote; "Bundle Identifier" = "bogdanf.osx.metanota.pro"; "Window Frame" = "{{2201, 989}, {999, 789}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = Finder; "Bundle Identifier" = "com.apple.finder"; "Window Frame" = "{{2401, 1186}, {799, 592}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = Messages; "Bundle Identifier" = "com.apple.ichat"; "Window Frame" = "{{401, 0}, {798, 591}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = Slack; "Bundle Identifier" = "com.tinyspeck.slackmacgap"; "Window Frame" = "{{0, 0}, {999, 591}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = Terminal; "Bundle Identifier" = "com.apple.terminal"; "Window Frame" = "{{1201, 20}, {993, 572}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = iTerm2; "Bundle Identifier" = "com.googlecode.iterm2"; "Window Frame" = "{{1201, 17}, {993, 572}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = QuickTime; "Bundle Identifier" = "com.apple.quicktimeplayerx"; "Window Frame" = "{{2201, 0}, {999, 592}}"; "Window Subrole" = AXStandardWindow; }, { "Application Name" = VLC; "Bundle Identifier" = "org.videolan.vlc"; "Window Frame" = "{{2201, 0}, {999, 592}}"; "Window Subrole" = AXStandardWindow; }); "Snapshot Screens" = ( "{{0, 0}, {3200, 1800}}" ); } | | | Define window sizes using 16 × 9 cells | com.manytricks.Moom | Configuration Grid: Columns | -int | 16 | | | | com.manytricks.Moom | Configuration Grid: Rows | -int | 9 | | | on Check for updates automatically | com.manytricks.Moom | SUEnableAutomaticChecks | -bool | true | | |------------------------------------------------------------------------+---------------------+-------------------------------------------------------+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------|

*** Customize MP4 Automator #+begin_src sh :var _mp4_automator=_mp4_automator[3:-2,1:3]

custom_mp4_automator () { mkdir -p "{HOME}/.config/mp4_automator" && \ curl --compressed --location --silent \ "https://github.com/mdhiggins/sickbeard_mp4_automator/archive/master.tar.gz" | \ tar -C "{HOME}/.config/mp4_automator" --strip-components 1 -xf - printf "%s\n" "2.7.13" > "${HOME}/.config/mp4_automator/.python-version"

if which crudini > /dev/null; then printf "%s\n" "mp4automator" whileIFS="{_mp4_automator}" | \ while IFS="(printf '\t')" read section key value; do crudini --set "HOME/.config/mp4automator/autoProcess.ini""{HOME}/.config/mp4_automator/autoProcess.ini" "{section}" "key""{key}" "{value}" done

open "http://localhost:7878/settings/general"
RADARRAPI="$(ask 'Radarr API Key?' 'Set API Key' '')"
crudini --set "${HOME}/.config/mp4_automator/autoProcess.ini" "Radarr" "apikey" "$RADARRAPI"

open "http://localhost:8989/settings/general"
SONARRAPI="$(ask 'Sonarr API Key?' 'Set API Key' '')"
crudini --set "${HOME}/.config/mp4_automator/autoProcess.ini" "Sonarr" "apikey" "$SONARRAPI"

fi

find "${HOME}/.config/mp4_automator" -name "*.py" -print0 |
xargs -0 -L 1 sed -i "" -e "s:/usr/bin/env python:/usr/local/python/versions/2.7.13/bin/python:" } #+end_src

**** _mp4_automator #+name: _mp4_automator |------------+---------+------------------------------+-------------------------------------------| | Preference | Section | Key | Value | |------------+---------+------------------------------+-------------------------------------------| | | MP4 | aac_adtstoasc | True | | | MP4 | audio-channel-bitrate | 256 | | | MP4 | audio-codec | ac3,aac | | | MP4 | audio-default-language | eng | | | MP4 | audio-filter | | | | MP4 | audio-language | eng | | | MP4 | convert-mp4 | True | | | MP4 | copy_to | | | | MP4 | delete_original | False | | | MP4 | download-artwork | Poster | | | MP4 | download-subs | True | | | MP4 | embed-subs | True | | | MP4 | ffmpeg | /usr/local/bin/ffmpeg | | | MP4 | ffprobe | /usr/local/bin/ffprobe | | | MP4 | fullpathguess | True | | | MP4 | h264-max-level | 4.1 | | | MP4 | ios-audio | True | | | MP4 | ios-audio-filter | | | | MP4 | ios-first-track-only | True | | | MP4 | max-audio-channels | | | | MP4 | move_to | | | | MP4 | output_directory | | | | MP4 | output_extension | m4v | | | MP4 | output_format | mp4 | | | MP4 | permissions | 0644 | | | MP4 | pix-fmt | | | | MP4 | post-process | False | | | MP4 | postopts | | | | MP4 | preopts | | | | MP4 | relocate_moov | True | | | MP4 | sub-providers | addic7ed,podnapisi,thesubdb,opensubtitles | | | MP4 | subtitle-codec | mov_text | | | MP4 | subtitle-default-language | eng | | | MP4 | subtitle-encoding | | | | MP4 | subtitle-language | eng | | | MP4 | tag-language | eng | | | MP4 | tagfile | True | | | MP4 | threads | auto | | | MP4 | use-qsv-decoder-with-encoder | True | | | MP4 | video-bitrate | | | | MP4 | video-codec | h264,x264 | | | MP4 | video-crf | | | | MP4 | video-max-width | 1920 | | | Plex | host | localhost | | | Plex | port | 32400 | | | Plex | refresh | False | | | Plex | token | | | | Radarr | host | localhost | | | Radarr | port | 7878 | | | Radarr | ssl | False | | | Radarr | web_root | | | | Sonarr | host | localhost | | | Sonarr | port | 8989 | | | Sonarr | ssl | False | | | Sonarr | web_root | | |------------+---------+------------------------------+-------------------------------------------|

*** Customize nvALT #+begin_src sh :var _nvalt=_nvalt[3:-2,1:5] :var _nvalt_launchd=_nvalt_launchd[3:-2,0:3]

custom_nvalt () { config_defaults "nvalt"configlaunchd"_nvalt" config_launchd "{HOME}/Library/LaunchAgents/net.elasticthreads.nv.plist" "$_nvalt_launchd" } #+end_src

**** _nvalt #+name: _nvalt |----------------------------------------------------------+-----------------------+-----------------------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------| | Preference | Domain | Key | Type | Value | Host | |----------------------------------------------------------+-----------------------+-----------------------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------| | List Text Size: Small | net.elasticthreads.nv | TableFontPointSize | -int | 11 | | | Bring-to-Front Hotkey: (None) | net.elasticthreads.nv | AppActivationKeyCode | -int | -1 | | | | net.elasticthreads.nv | AppActivationModifiers | -int | -1 | | | on Auto-select notes by title when searching | net.elasticthreads.nv | AutoCompleteSearches | -bool | true | | | on Confirm note deletion | net.elasticthreads.nv | ConfirmNoteDeletion | -bool | true | | | off Quit when closing window | net.elasticthreads.nv | QuitWhenClosingMainWindow | -bool | false | | | on Show menu bar icon | net.elasticthreads.nv | StatusBarItem | -bool | true | | | Hide Dock Icon | net.elasticthreads.nv | ShowDockIcon | -bool | false | | | Styled Text: off Copy basic styles from other apps | net.elasticthreads.nv | PastePreservesStyle | -bool | false | | | Spelling: off Check as you type | net.elasticthreads.nv | CheckSpellingInNoteBody | -bool | false | | | Tab Key: Indent lines | net.elasticthreads.nv | TabKeyIndents | -bool | true | | | on Soft tabs (spaces) | net.elasticthreads.nv | UseSoftTabs | -bool | true | | | Links: on Make URLs clickable links | net.elasticthreads.nv | MakeURLsClickable | -bool | true | | | Links: off Suggest titles for note-links | net.elasticthreads.nv | AutoSuggestLinks | -bool | false | | | URL Import: off Convert imported URLs to Markdown | net.elasticthreads.nv | UseMarkdownImport | -bool | false | | | URL Import: off Process with Readability | net.elasticthreads.nv | UseReadability | -bool | false | | | Direction: off Right-To-Left (RTL) | net.elasticthreads.nv | rtl | -bool | false | | | Auto-pair: on | net.elasticthreads.nv | UseAutoPairing | -bool | true | | | External Text Editor: Emacs.app | net.elasticthreads.nv | DefaultEEIdentifier | -string | org.gnu.Emacs | | | | net.elasticthreads.nv | UserEEIdentifiers | -array-add | com.apple.TextEdit | | | | net.elasticthreads.nv | UserEEIdentifiers | -array-add | org.gnu.Emacs | | | Body Font: InconsolataLGC 13 | net.elasticthreads.nv | NoteBodyFont | -data | 040b73747265616d747970656481e803840140848484064e53466f6e741e8484084e534f626a65637400858401692884055b3430635d060000001e000000fffe49006e0063006f006e0073006f006c006100740061004c004700430000008401660d8401630098019800980086 | | | on Search Highlight: #CCFFCC | net.elasticthreads.nv | HighlightSearchTerms | -bool | true | | | | net.elasticthreads.nv | SearchTermHighlightColor | -data | 040b73747265616d747970656481e803840140848484074e53436f6c6f72008484084e534f626a65637400858401630184046666666683cdcc4c3f0183cdcc4c3f0186 | | | Foreground Text: #CCCCCC | net.elasticthreads.nv | ForegroundTextColor | -data | 040b73747265616d747970656481e803840140848484074e53436f6c6f72008484084e534f626a65637400858401630184046666666683cdcc4c3f83cdcc4c3f83cdcc4c3f0186 | | | Background: #1A1A1A | net.elasticthreads.nv | BackgroundTextColor | -data | 040b73747265616d747970656481e803840140848484074e53436f6c6f72008484084e534f626a65637400858401630184046666666683d1d0d03d83d1d0d03d83d1d0d03d0186 | | | Always Show Grid Lines in Notes List: on | net.elasticthreads.nv | ShowGrid | -bool | true | | | Alternating Row Colors: on | net.elasticthreads.nv | AlternatingRows | -bool | true | | | Use nvALT Scrollbars: off | net.elasticthreads.nv | UseETScrollbarsOnLion | -bool | false | | | Keep Note Body Width Readable: on | net.elasticthreads.nv | KeepsMaxTextWidth | -bool | true | | | Max. Note Body Width: 650 pixels | net.elasticthreads.nv | NoteBodyMaxWidth | -int | 650 | | | ViewSwitch to Horizontal Layout | net.elasticthreads.nv | HorizontalLayout | -bool | true | | | ViewColumns✓ Title ✓ Tags | net.elasticthreads.nv | NoteAttributesVisible | -array-add | Title | | | | net.elasticthreads.nv | NoteAttributesVisible | -array-add | Tags | | | ViewSort By ▶︎ ▼ Date Modified | net.elasticthreads.nv | TableIsReverseSorted | -bool | true | | | | net.elasticthreads.nv | TableSortColumn | -string | Date Modified | | | ViewShow Note Previews in Title | net.elasticthreads.nv | TableColumnsHaveBodyPreview | -bool | true | | |----------------------------------------------------------+-----------------------+-----------------------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------|

**** _nvalt_launchd #+name: _nvalt_launchd |---------+--------------------+--------+----------------------------------------------| | Command | Entry | Type | Value | |---------+--------------------+--------+----------------------------------------------| | add | :KeepAlive | bool | true | | add | :Label | string | net.elasticthreads.nv | | add | :ProcessType | string | Interactive | | add | :Program | string | /Applications/nvALT.app/Contents/MacOS/nvALT | | add | :RunAtLoad | bool | true | |---------+--------------------+--------+----------------------------------------------|

*** Customize NZBGet

#+begin_src sh :var _nzbget=_nzbget[3:-2,1:2]

custom_nzbget () { f="HOME/Library/ApplicationSupport/NZBGet/nzbget.conf"mkdirp"{HOME}/Library/Application Support/NZBGet/nzbget.conf" mkdir -p "(dirname f)"ifwhichcrudini>/dev/null;thenprintf"f)" if which crudini > /dev/null; then printf "%s\n" "{_nzbget}" |
while IFS="(printf\t)"readkeyvalue;docrudiniset"(printf '\t')" read key value; do crudini --set "f" "" "key""{key}" "{value}" done fi sed -i "" -e "s/ = /=/g" "$f" } #+end_src

**** _nzbget #+name: _nzbget |----------------+----------------------+-----------------------| | Preference | Key | Value | |----------------+----------------------+-----------------------| | Security | ControlIP | 127.0.0.1 | | | ControlPort | 6789 | | | AuthorizedIP | 127.0.0.1 | | News-Servers | Server1.Level | 0 | | Server1 | Server1.Host | ssl.astraweb.com | | | Server1.Port | 443 | | | Server1.Encryption | yes | | | Server1.Connections | 6 | | | Server1.Retention | 3000 | | News-Servers | Server2.Level | 0 | | Server2 | Server2.Host | ssl-us.astraweb.com | | | Server2.Port | 443 | | | Server2.Encryption | yes | | | Server2.Connections | 6 | | | Server2.Retention | 3000 | | News-Servers | Server3.Level | 0 | | Server3 | Server3.Host | ssl-eu.astraweb.com | | | Server3.Port | 443 | | | Server3.Encryption | yes | | | Server3.Connections | 6 | | | Server3.Retention | 3000 | | News-Servers | Server4.Level | 1 | | Server4 | Server4.Host | news.tweaknews.eu | | | Server4.Port | 443 | | | Server4.Encryption | yes | | | Server4.Connections | 40 | | | Server4.Retention | 2500 | | News-Servers | Server5.Level | 2 | | Server5 | Server5.Host | news.newsdemon.com | | | Server5.Port | 563 | | | Server5.Encryption | yes | | | Server5.Connections | 12 | | | Server5.Retention | 3303 | | News-Servers | Server6.Level | 2 | | Server6 | Server6.Host | us.newsdemon.com | | | Server6.Port | 563 | | | Server6.Encryption | yes | | | Server6.Connections | 12 | | | Server6.Retention | 3303 | | News-Servers | Server7.Level | 2 | | Server7 | Server7.Host | eu.newsdemon.com | | | Server7.Port | 563 | | | Server7.Encryption | yes | | | Server7.Connections | 12 | | | Server7.Retention | 3303 | | News-Servers | Server8.Level | 2 | | Server8 | Server8.Host | nl.newsdemon.com | | | Server8.Port | 563 | | | Server8.Encryption | yes | | | Server8.Connections | 12 | | | Server8.Retention | 3303 | | News-Servers | Server9.Level | 2 | | Server9 | Server9.Host | usnews.blocknews.net | | | Server9.Port | 443 | | | Server9.Encryption | yes | | | Server9.Connections | 16 | | | Server9.Retention | 3240 | | News-Servers | Server10.Level | 2 | | Server10 | Server10.Host | eunews.blocknews.net | | | Server10.Port | 443 | | | Server10.Encryption | yes | | | Server10.Connections | 16 | | | Server10.Retention | 3240 | | News-Servers | Server11.Level | 2 | | Server11 | Server11.Host | eunews2.blocknews.net | | | Server11.Port | 443 | | | Server11.Encryption | yes | | | Server11.Connections | 16 | | | Server11.Retention | 3240 | |----------------+----------------------+-----------------------|

*** Customize Safari #+begin_src sh :var _safari=_safari[3:-2,1:5]

custom_safari () { config_defaults "${_safari}" } #+end_src

**** _safari #+name: _safari |-------------------------------------------------------------------------+-------------------------+----------------------------------------------------------------------------------------+---------+--------+------| | Preference | Domain | Key | Type | Value | Host | |-------------------------------------------------------------------------+-------------------------+----------------------------------------------------------------------------------------+---------+--------+------| | Safari opens with: A new window | com.apple.Safari | AlwaysRestoreSessionAtLaunch | -bool | false | | | | com.apple.Safari | OpenPrivateWindowWhenNotRestoringSessionAtLaunch | -bool | false | | | New windows open with: Empty Page | com.apple.Safari | NewWindowBehavior | -int | 1 | | | New tabs open with: Empty Page | com.apple.Safari | NewTabBehavior | -int | 1 | | | off Open “safe” files after downloading | com.apple.Safari | AutoOpenSafeDownloads | -bool | false | | | Open pages in tabs instead of windows: Always | com.apple.Safari | TabCreationPolicy | -int | 2 | | | AutoFill web forms: off Using info from my contacts | com.apple.Safari | AutoFillFromAddressBook | -bool | false | | | AutoFill web forms: on User names and passwords | com.apple.Safari | AutoFillPasswords | -bool | true | | | AutoFill web forms: off Credit cards | com.apple.Safari | AutoFillCreditCardData | -bool | false | | | AutoFill web forms: off Other forms | com.apple.Safari | AutoFillMiscellaneousForms | -bool | false | | | on Include search engine suggestions | com.apple.Safari | SuppressSearchSuggestions | -bool | false | | | Smart Search Field: off Include Safari Suggestions | com.apple.Safari | UniversalSearchEnabled | -bool | false | | | Smart Search Field: on Enable Quick Website Search | com.apple.Safari | WebsiteSpecificSearchEnabled | -bool | true | | | Smart Search Field: on Preload Top Hit in the background | com.apple.Safari | PreloadTopHit | -bool | true | | | Smart Search Field: off Show Favorites | com.apple.Safari | ShowFavoritesUnderSmartSearchField | -bool | false | | | Website use of location services: Deny without prompting | com.apple.Safari | SafariGeolocationPermissionPolicy | -int | 0 | | | *Website tracking: on Prevent cross-site tracking | com.apple.Safari | BlockStoragePolicy | -int | 2 | | | | com.apple.Safari | WebKitStorageBlockingPolicy | -int | 1 | | | | com.apple.Safari | com.apple.Safari.ContentPageGroupIdentifier.WebKit2StorageBlockingPolicy | -int | 1 | | | Website tracking: on Ask websites not to track me | com.apple.Safari | SendDoNotTrackHTTPHeader | -bool | true | | | Cookies and website data: off Block all cookies | com.apple.WebFoundation | NSHTTPAcceptCookies | -string | always | | | Apple Pay: on Allow websites to check if Apple Pay is set up | com.apple.Safari | com.apple.Safari.ContentPageGroupIdentifier.WebKit2ApplePayCapabilityDisclosureAllowed | -bool | true | | | off Allow websites to ask for permission to send push notifications | com.apple.Safari | CanPromptForPushNotifications | -bool | false | | | Smart Search Field: on Show full website address | com.apple.Safari | ShowFullURLInSmartSearchField | -bool | true | | | Default encoding: Unicode (UTF-8) | com.apple.Safari | WebKitDefaultTextEncodingName | -string | utf-8 | | | | com.apple.Safari | com.apple.Safari.ContentPageGroupIdentifier.WebKit2DefaultTextEncodingName | -string | utf-8 | | | on Show Develop menu in menu bar | com.apple.Safari | IncludeDevelopMenu | -bool | true | | | | com.apple.Safari | WebKitDeveloperExtrasEnabledPreferenceKey | -bool | true | | | | com.apple.Safari | com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled | -bool | true | | | ViewShow Favorites Bar | com.apple.Safari | ShowFavoritesBar-v2 | -bool | true | | | ViewShow Tab Bar | com.apple.Safari | AlwaysShowTabBar | -bool | true | | | ViewShow Status Bar | com.apple.Safari | ShowStatusBar | -bool | true | | | | com.apple.Safari | ShowStatusBarInFullScreen | -bool | true | | |-------------------------------------------------------------------------+-------------------------+----------------------------------------------------------------------------------------+---------+--------+------|

*** Customize Sieve #+begin_src sh custom_sieve () { cat > "${HOME}/.sieve" << EOF require ["date", "fileinto", "imap4flags", "mailbox", "relational", "variables"];

setflag "\\Seen";

if date :is "date" "year" "1995" { fileinto :create "Archives.1995"; } if date :is "date" "year" "1996" { fileinto :create "Archives.1996"; } if date :is "date" "year" "1997" { fileinto :create "Archives.1997"; } if date :is "date" "year" "1998" { fileinto :create "Archives.1998"; } if date :is "date" "year" "1999" { fileinto :create "Archives.1999"; } if date :is "date" "year" "2000" { fileinto :create "Archives.2000"; } if date :is "date" "year" "2001" { fileinto :create "Archives.2001"; } if date :is "date" "year" "2002" { fileinto :create "Archives.2002"; } if date :is "date" "year" "2003" { fileinto :create "Archives.2003"; } if date :is "date" "year" "2004" { fileinto :create "Archives.2004"; } if date :is "date" "year" "2005" { fileinto :create "Archives.2005"; } if date :is "date" "year" "2006" { fileinto :create "Archives.2006"; } if date :is "date" "year" "2007" { fileinto :create "Archives.2007"; } if date :is "date" "year" "2008" { fileinto :create "Archives.2008"; } if date :is "date" "year" "2009" { fileinto :create "Archives.2009"; } if date :is "date" "year" "2010" { fileinto :create "Archives.2010"; } if date :is "date" "year" "2011" { fileinto :create "Archives.2011"; } if date :is "date" "year" "2012" { fileinto :create "Archives.2012"; } if date :is "date" "year" "2013" { fileinto :create "Archives.2013"; } if date :is "date" "year" "2014" { fileinto :create "Archives.2014"; } if date :is "date" "year" "2015" { fileinto :create "Archives.2015"; } if date :is "date" "year" "2016" { fileinto :create "Archives.2016"; } if date :is "date" "year" "2017" { fileinto :create "Archives.2017"; } if date :is "date" "year" "2018" { fileinto :create "Archives.2018"; } if date :is "date" "year" "2019" { fileinto :create "Archives.2019"; } if date :is "date" "year" "2020" { fileinto :create "Archives.2020"; } EOF } #+end_src

*** Customize Sonarr #+begin_src sh :var _sonarr=_sonarr[3:-2,0:1]

custom_sonarr () { open "http://localhost:7878/settings/mediamanagement" open "http://localhost:8989/settings/mediamanagement" printf "%s" "sonarr" whileIFS="_sonarr" | \ while IFS="(printf '\t')" read pref value; do printf "\033[1m\033[34m%s:\033[0m %s\n" "pref""pref" "value" done }

#+end_src

**** _sonarr #+name: _sonarr |---------------------------------+--------------------------------------------------------------| | Preference | Value | |---------------------------------+--------------------------------------------------------------| | Advanced Settings | Shown | | Rename Episodes | Yes | | Standard Episode Format | {Series Title} - s{season:00}e{episode:00} - {Episode Title} | | Daily Episode Format | {Series Title} - {Air-Date} - {Episode Title} | | Anime Episode Format | {Series Title} - s{season:00}e{episode:00} - {Episode Title} | | Multi-Episode Style | Scene | | Create empty series folders | Yes | | Ignore Deleted Episodes | Yes | | Change File Date | UTC Air Date | | Set Permissions | Yes | | Download Clients | NZBGet | | NZBGet: Name | NZBGet | | NZBGet: Category | Sonarr | | Failed: Remove | No | | Drone Factory Interval | 0 | | Connect: Custom Script | | | postSonarr: Name | postSonarr | | postSonarr: On Grab | No | | postSonarr: On Download | Yes | | postSonarr: On Upgrade | Yes | | postSonarr: On Rename | No | | postSonarr: Path | ${HOME}/.config/mp4_automator/postSonarr.py | | Start-Up: Open browser on start | No | | Security: Authentication | Basic (Browser popup) | |---------------------------------+--------------------------------------------------------------|

*** Customize SSH #+begin_src sh custom_ssh () { if ! test -d "HOME/.ssh";thenmkdirmgo="{HOME}/.ssh"; then mkdir -m go= "{HOME}/.ssh" e="(ask 'New SSH Key: Email Address?' 'OK' '')" ssh-keygen -t ed25519 -a 100 -C "e" cat << EOF > "HOME/.ssh/config"HostAddKeysToAgentyesIdentityFile /.ssh/ided25519EOFpbcopy<"{HOME}/.ssh/config" Host * AddKeysToAgent yes IdentityFile ~/.ssh/id_ed25519 EOF pbcopy < "{HOME}/.ssh/id_ed25519.pub" open "https://github.com/settings/keys" fi } #+end_src

*** Customize System Preferences #+begin_src sh custom_sysprefs () { custom_general custom_desktop "/Library/Desktop Pictures/Solid Colors/Solid Black.png" custom_screensaver custom_dock custom_dockapps

custom_security

custom_text custom_dictation custom_mouse custom_trackpad custom_sound custom_loginitems custom_siri custom_clock custom_a11y custom_other } #+end_src

**** Customize General #+begin_src sh :var _general=_general[3:-2,1:5]

custom_general () { osascript -e 'tell application "System Events" to tell appearance preferences to set dark mode to true' config_defaults "${_general}" osascript << EOF <<recent-items.applescript>> EOF } #+end_src

**** =recent-items.applescript= #+begin_src applescript :noweb-ref recent-items.applescript tell application "System Events" tell appearance preferences set recent documents limit to 0 set recent applications limit to 0 set recent servers limit to 0 end tell end tell #+end_src

**** _general #+name: _general |----------------------------------------------------------------+--------------------------------------+------------------------------+---------+----------------------------+--------------| | Preference | Domain | Key | Type | Value | Host | |----------------------------------------------------------------+--------------------------------------+------------------------------+---------+----------------------------+--------------| | Appearance: Graphite For Buttons, Menus, and Windows | -globalDomain | AppleAquaColorVariant | -int | 6 | | | Appearance: on Use dark menu bar and Dock | -globalDomain | AppleInterfaceStyle | -string | Dark | | | Appearance: off Automatically hide and show the menu bar | -globalDomain | _HIHideMenuBar | -bool | false | | | Highlight color: #99CC99 Other… | -globalDomain | AppleHighlightColor | -string | 0.600000 0.800000 0.600000 | | | Sidebar icon size: Small | -globalDomain | NSTableViewDefaultSizeMode | -int | 1 | | | Show scroll bars: Always | -globalDomain | AppleShowScrollBars | -string | Always | | | Click in the scroll bar to: Jump to the next page | -globalDomain | AppleScrollerPagingBehavior | -bool | false | | | on Ask to keep changes when closing documents | -globalDomain | NSCloseAlwaysConfirmsChanges | -bool | true | | | on Close windows when quitting an app | -globalDomain | NSQuitAlwaysKeepsWindows | -bool | false | | | on Allow Handoff between this Mac and your iCloud devices | com.apple.coreservices.useractivityd | ActivityAdvertisingAllowed | -bool | true | -currentHost | | | com.apple.coreservices.useractivityd | ActivityReceivingAllowed | -bool | true | -currentHost | | on Use LCD font smoothing when available | -globalDomain | AppleFontSmoothing | -int | 1 | -currentHost | |----------------------------------------------------------------+--------------------------------------+------------------------------+---------+----------------------------+--------------|

**** Customize Desktop Picture #+begin_src sh custom_desktop () { osascript - "${1}" << EOF 2> /dev/null <<custom_desktop.applescript>> EOF } #+end_src

**** =custom_desktop.applescript= #+begin_src applescript :noweb-ref custom_desktop.applescript on run { _this } tell app "System Events" to set picture of every desktop to POSIX file _this end run #+end_src

**** Customize Screen Saver #+begin_src sh :var _screensaver=_screensaver[3:-2,1:5]

custom_screensaver () { if test -e "/Library/Screen Savers/BlankScreen.saver"; then defaults -currentHost write com.apple.screensaver moduleDict
'{ moduleName = "BlankScreen"; path = "/Library/Screen Savers/BlankScreen.saver"; type = 0; }' fi config_defaults "${_screensaver}" } #+end_src

**** _screensaver #+name: _screensaver |-------------------------------------------------------------+-----------------------+--------------------------+---------+---------+--------------| | Preference | Domain | Key | Type | Value | Host | |-------------------------------------------------------------+-----------------------+--------------------------+---------+---------+--------------| | Start after: Never | com.apple.screensaver | idleTime | -int | 0 | -currentHost | | Hot Corners…: Top Left: ⌘ Mission Control | com.apple.dock | wvous-tl-corner | -int | 2 | | | | com.apple.dock | wvous-tl-modifier | -int | 1048576 | | | Hot Corners…: Bottom Left: Put Display to Sleep | com.apple.dock | wvous-bl-corner | -int | 10 | | | | com.apple.dock | wvous-bl-modifier | -int | 0 | | |-------------------------------------------------------------+-----------------------+--------------------------+---------+---------+--------------|

**** Customize Dock #+begin_src sh :var _dock=_dock[3:-2,1:5]

custom_dock () { config_defaults "${_dock}" } #+end_src

**** _dock #+name: _dock |-----------------------------------------------------+----------------+--------------------------+---------+--------+------| | Preference | Domain | Key | Type | Value | Host | |-----------------------------------------------------+----------------+--------------------------+---------+--------+------| | Size: 32 px | com.apple.dock | tilesize | -int | 32 | | | off Magnification: 64 px | com.apple.dock | magnification | -bool | false | | | | com.apple.dock | largesize | -int | 64 | | | Position on screen: Right | com.apple.dock | orientation | -string | right | | | Minimize windows using: Scale effect | com.apple.dock | mineffect | -string | scale | | | Prefer tabs when opening documents: Always | -globalDomain | AppleWindowTabbingMode | -string | always | | | off Double-click a window’s title bar to None | -globalDomain | AppleActionOnDoubleClick | -string | None | | | on Minimize windows into application icon | com.apple.dock | minimize-to-application | -bool | true | | | off Animate opening applications | com.apple.dock | launchanim | -bool | false | | | on Automatically hide and show the Dock | com.apple.dock | autohide | -bool | true | | | on Show indicators for open applications | com.apple.dock | show-process-indicators | -bool | true | | |-----------------------------------------------------+----------------+--------------------------+---------+--------+------|

**** Customize Dock Apps #+begin_src sh :var _dockapps=_dockapps[3:-2,0]

custom_dockapps () { defaults write com.apple.dock "autohide-delay" -float 0 defaults write com.apple.dock "autohide-time-modifier" -float 0.5

defaults delete com.apple.dock "persistent-apps"

printf "%s\n" "dockapps" whileIFS="{_dockapps}" | \ while IFS="(printf '\t')" read app; do if test -e "/Applications/app.app";thendefaultswritecom.apple.dock"persistentapps"arrayadd "<dict><key>tiledata</key><dict><key>filedata</key><dict><key>CFURLString</key><string>/Applications/{app}.app"; then defaults write com.apple.dock "persistent-apps" -array-add \ "<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/Applications/{app}.app/_CFURLStringType0" fi done

defaults delete com.apple.dock "persistent-others"

osascript -e 'tell app "Dock" to quit' } #+end_src

**** _dockapps

#+name: _dockapps
Dock Items
--------------------
Metanota Pro
Mail
Safari
Messages
Emacs
BBEdit
Atom
Utilities/Terminal
iTerm
System Preferences
PCalc
Hermes
iTunes
VLC
--------------------

**** Customize Security #+begin_src sh :var _security=_security[3:-2,1:5]

custom_security () { config_defaults "${_security}" } #+end_src

**** _security #+name: _security |--------------------------------------------------------------------------+-----------------------+---------------------+------+-------+------| | Preference | Domain | Key | Type | Value | Host | |--------------------------------------------------------------------------+-----------------------+---------------------+------+-------+------| | on Require password 5 seconds after sleep or screen saver begins | com.apple.screensaver | askForPassword | -int | 1 | | | | com.apple.screensaver | askForPasswordDelay | -int | 5 | | |--------------------------------------------------------------------------+-----------------------+---------------------+------+-------+------|

**** Customize Text #+begin_src sh :var _text=_text[3:-2,1:5] custom_text () { config_defaults "${_text}" } #+end_src

**** _text #+name: _text |----------------------------------------+---------------+--------------------------------------+-------+-------+------| | Preference | Domain | Key | Type | Value | Host | |----------------------------------------+---------------+--------------------------------------+-------+-------+------| | off Capitalize words automatically | -globalDomain | NSAutomaticCapitalizationEnabled | -bool | false | | | off Add period with double-space | -globalDomain | NSAutomaticPeriodSubstitutionEnabled | -bool | false | | | off Use smart quotes and dashes | -globalDomain | NSAutomaticQuoteSubstitutionEnabled | -bool | false | | |----------------------------------------+---------------+--------------------------------------+-------+-------+------|

**** Customize Dictation #+begin_src sh :var _dictation=_dictation[2:3,1:5]

custom_dictation () { config_defaults "${_dictation}" } #+end_src

**** _dictation #+name: _dictation |-------------------+-----------------------------------------------------------+-----------------------------------+-------+-------+------| | Preference | Domain | Key | Type | Value | Host | |-------------------+-----------------------------------------------------------+-----------------------------------+-------+-------+------| | Dictation: On | com.apple.speech.recognition.AppleSpeechRecognition.prefs | DictationIMMasterDictationEnabled | -bool | true | | |-------------------+-----------------------------------------------------------+-----------------------------------+-------+-------+------|

**** Customize Mouse #+begin_src sh :var _mouse=_mouse[2:3,1:5]

custom_mouse () { config_defaults "${_mouse}" } #+end_src

**** _mouse #+name: _mouse |-----------------------------------+---------------+--------------------------------+-------+-------+------| | Preference | Domain | Key | Type | Value | Host | |-----------------------------------+---------------+--------------------------------+-------+-------+------| | off Scroll direction: Natural | -globalDomain | com.apple.swipescrolldirection | -bool | false | | |-----------------------------------+---------------+--------------------------------+-------+-------+------|

**** Customize Trackpad #+begin_src sh :var _trackpad=_trackpad[3:-2,1:5]

custom_trackpad () { config_defaults "${_trackpad}" } #+end_src

**** _trackpad #+name: _trackpad |---------------------+----------------------------------------------------+-----------------------------+-------+-------+--------------| | Preference | Domain | Key | Type | Value | Host | |---------------------+----------------------------------------------------+-----------------------------+-------+-------+--------------| | on Tap to click | com.apple.driver.AppleBluetoothMultitouch.trackpad | Clicking | -bool | true | | | | -globalDomain | com.apple.mouse.tapBehavior | -int | 1 | -currentHost | |---------------------+----------------------------------------------------+-----------------------------+-------+-------+--------------|

**** Customize Sound #+begin_src sh :var _sound=_sound[3:-2,1:5]

custom_sound () { config_defaults "${_sound}" } #+end_src

**** _sound #+name: _sound |----------------------------------------------+---------------+---------------------------------+---------+------------------------------------+------| | Preference | Domain | Key | Type | Value | Host | |----------------------------------------------+---------------+---------------------------------+---------+------------------------------------+------| | Select an alert sound: Sosumi | -globalDomain | com.apple.sound.beep.sound | -string | /System/Library/Sounds/Sosumi.aiff | | | off Play user interface sound effects | -globalDomain | com.apple.sound.uiaudio.enabled | -int | 0 | | | off Play feedback when volume is changed | -globalDomain | com.apple.sound.beep.feedback | -int | 0 | | |----------------------------------------------+---------------+---------------------------------+---------+------------------------------------+------|

**** Customize Login Items #+begin_src sh :var _loginitems=_loginitems[3:-2,0] custom_loginitems () { printf "%s\n" "loginitems" whileIFS="{_loginitems}" | \ while IFS="(printf '\t')" read app; do if test -e "app";thenosascript"app"; then osascript - "app" << EOF > /dev/null on run { _app } tell app "System Events" make new login item with properties { hidden: true, path: _app } end tell end run EOF fi done } #+end_src

**** _loginitems

#+name: _loginitems
Login Items
------------------------------------------------------------------------------------
/Applications/Alfred 3.app
/Applications/autoping.app
/Applications/Caffeine.app
/Applications/Coffitivity.app
/Applications/Dropbox.app
/Applications/HardwareGrowler.app
/Applications/I Love Stars.app
/Applications/IPMenulet.app
/Applications/iTunes.app/Contents/MacOS/iTunesHelper.app
/Applications/Menubar Countdown.app
/Applications/Meteorologist.app
/Applications/Moom.app
/Applications/NZBGet.app
/Applications/Plex Media Server.app
/Applications/Radarr.app
/Applications/Sonarr-Menu.app
/Library/PreferencePanes/SteerMouse.prefPane/Contents/MacOS/SteerMouse Manager.app
------------------------------------------------------------------------------------

**** Customize Siri #+begin_src sh custom_siri () { defaults write com.apple.assistant.backedup "Output Voice"
'{ Custom = 1; Footprint = 0; Gender = 1; Language = "en-US"; }' defaults write com.apple.Siri StatusMenuVisible -bool false } #+end_src

**** Customize Clock #+begin_src sh custom_clock () { defaults -currentHost write com.apple.systemuiserver dontAutoLoad
-array-add "/System/Library/CoreServices/Menu Extras/Clock.menu" defaults write com.apple.menuextra.clock DateFormat
-string "EEE MMM d h:mm:ss a" } #+end_src

**** Customize Accessibility #+begin_src sh :var _a11y=_a11y[2:3,1:5] :var _speech=_a11y[4:-2,1:5]

custom_a11y () { config_defaults "${_a11y}"

if test -d "/System/Library/Speech/Voices/Allison.SpeechVoice"; then config_defaults "${_speech}" defaults write com.apple.speech.voice.prefs VisibleIdentifiers
'{ "com.apple.speech.synthesis.voice.allison.premium" = 1; }' fi } #+end_src

**** _a11y #+name: _a11y |-------------------------------------+------------------------------+----------------------+---------+------------+------| | Preference | Domain | Key | Type | Value | Host | |-------------------------------------+------------------------------+----------------------+---------+------------+------| | Display: on Reduce transparency | com.apple.universalaccess | reduceTransparency | -bool | true | | | Speech: System Voice: Allison | com.apple.speech.voice.prefs | SelectedVoiceName | -string | Allison | | | | com.apple.speech.voice.prefs | SelectedVoiceCreator | -int | 1886745202 | | | | com.apple.speech.voice.prefs | SelectedVoiceID | -int | 184555197 | | |-------------------------------------+------------------------------+----------------------+---------+------------+------|

**** Customize Other Prefs #+begin_src sh :var _other_prefs=_other_prefs[3:-2,0:4] custom_other () { T=(printf\t)printf"(printf '\t') printf "%s\n" "_other_prefs" |
while IFS="T"readpaneanchorpaneidanchoridicon;doosascript"T" read pane anchor paneid anchorid icon; do osascript - "pane" "anchor""anchor" "paneid" "anchorid""anchorid" "icon" << EOF 2> /dev/null <<open-syspref.applescript>> EOF done } #+end_src

***** =open-syspref.applescript= #+begin_src applescript :noweb-ref open-syspref.applescript on run { _pane, _anchor, _paneid, _anchorid, _icon } tell app "System Events" display dialog "Open the " & _anchor & " pane of " & _pane & " preferences." buttons { "Open " & _pane } default button 1 with icon POSIX file _icon end tell tell app "System Preferences" if not running then run reveal anchor _anchorid of pane id _paneid activate end tell end run #+end_src

#+name: _other_prefs |---------------------+---------------+----------------------------------------+--------------------------+---------------------------------------------------------------------------------------------| | Pane | Anchor | Pane ID | Anchor ID | Icon | |---------------------+---------------+----------------------------------------+--------------------------+---------------------------------------------------------------------------------------------| | Security & Privacy | General | com.apple.preference.security | General | /System/Library/PreferencePanes/Security.prefPane/Contents/Resources/FileVault.icns | | Security & Privacy | FileVault | com.apple.preference.security | FDE | /System/Library/PreferencePanes/Security.prefPane/Contents/Resources/FileVault.icns | | Security & Privacy | Accessibility | com.apple.preference.security | Privacy_Accessibility | /System/Library/PreferencePanes/Security.prefPane/Contents/Resources/FileVault.icns | | Displays | Display | com.apple.preference.displays | displaysDisplayTab | /System/Library/PreferencePanes/Displays.prefPane/Contents/Resources/Displays.icns | | Keyboard | Modifer Keys | com.apple.preference.keyboard | keyboardTab_ModifierKeys | /System/Library/PreferencePanes/Keyboard.prefPane/Contents/Resources/Keyboard.icns | | Keyboard | Text | com.apple.preference.keyboard | Text | /System/Library/PreferencePanes/Keyboard.prefPane/Contents/Resources/Keyboard.icns | | Keyboard | Shortcuts | com.apple.preference.keyboard | shortcutsTab | /System/Library/PreferencePanes/Keyboard.prefPane/Contents/Resources/Keyboard.icns | | Keyboard | Dictation | com.apple.preference.keyboard | Dictation | /System/Library/PreferencePanes/Keyboard.prefPane/Contents/Resources/Keyboard.icns | | Printers & Scanners | Main | com.apple.preference.printfax | print | /System/Library/PreferencePanes/PrintAndScan.prefPane/Contents/Resources/PrintScanPref.icns | | Internet Accounts | Main | com.apple.preferences.internetaccounts | InternetAccounts | /System/Library/PreferencePanes/iCloudPref.prefPane/Contents/Resources/iCloud.icns | | Network | Wi-Fi | com.apple.preference.network | Wi-Fi | /System/Library/PreferencePanes/Network.prefPane/Contents/Resources/Network.icns | | Users & Groups | Login Options | com.apple.preferences.users | loginOptionsPref | /System/Library/PreferencePanes/Accounts.prefPane/Contents/Resources/AccountsPref.icns | | Time Machine | Main | com.apple.prefs.backup | main | /System/Library/PreferencePanes/TimeMachine.prefPane/Contents/Resources/TimeMachine.icns | |---------------------+---------------+----------------------------------------+--------------------------+---------------------------------------------------------------------------------------------|

*** Customize Terminal #+begin_src sh :var _term_plist=_term_plist[3:-2,1:4] :var _term_defaults=_term_defaults[3:-2,1:5]

custom_terminal () { config_plist "termplist" "{_term_plist}" \ "{HOME}/Library/Preferences/com.apple.Terminal.plist"
":Window Settings:ptb" config_defaults "${_term_defaults}" } #+end_src

**** _term_plist #+name: _term_plist |------------+---------+---------------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Preference | Command | Entry | Type | Value | |------------+---------+---------------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | | delete | | | | | | add | : | | dict | | | add | :name | string | ptb | | | add | :type | string | Window Settings | | | add | :ProfileCurrentVersion | real | 2.05 | | | add | :BackgroundColor | data | archiver</key><string>NSKeyedArchiver</string><key>archiver</key><string>NSKeyedArchiver</string><key>objectsnull</string><dict><key>null</string><dict><key>classCFUID</key><integer>2</integer></dict><key>NSColorSpace</key><integer>1</integer><key>NSRGB</key><data>MC4xIDAuMSAwLjE=</data></dict><dict><key>UID</key><integer>2</integer></dict><key>NSColorSpace</key><integer>1</integer><key>NSRGB</key><data>MC4xIDAuMSAwLjE=</data></dict><dict><key>classesNSColorNSObjectclassname</key><string>NSColor</string></dict></array><key>classname</key><string>NSColor</string></dict></array><key>toprootCFUID</key><integer>1</integer></dict></dict><key>UID</key><integer>1</integer></dict></dict><key>version100000 | | | add | :BackgroundBlur | real | 0 | | | add | :BackgroundSettingsForInactiveWindows | bool | false | | | add | :BackgroundAlphaInactive | real | 1 | | | add | :BackgroundBlurInactive | real | 0 | | | add | :Font | data | archiver</key><string>NSKeyedArchiver</string><key>archiver</key><string>NSKeyedArchiver</string><key>objectsnull</string><dict><key>null</string><dict><key>classCFUID</key><integer>3</integer></dict><key>NSName</key><dict><key>CFUID</key><integer>3</integer></dict><key>NSName</key><dict><key>CFUID2NSSize13NSfFlags16InconsolataLGCclasses</key><array><string>NSFont</string><string>NSObject</string></array><key>classes</key><array><string>NSFont</string><string>NSObject</string></array><key>classnameNSFonttop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:FontWidthSpacingreal1add:FontHeightSpacingreal1add:FontAntialiasbooltrueadd:UseBoldFontsbooltrueadd:BlinkTextboolfalseadd:DisableANSIColorboolfalseadd:UseBrightBoldboolfalseadd:TextColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :FontWidthSpacing | real | 1 | | | add | :FontHeightSpacing | real | 1 | | | add | :FontAntialias | bool | true | | | add | :UseBoldFonts | bool | true | | | add | :BlinkText | bool | false | | | add | :DisableANSIColor | bool | false | | | add | :UseBrightBold | bool | false | | | add | :TextColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC44IDAuOCAwLjg=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:TextBoldColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :TextBoldColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC44IDAuOCAwLjg=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:SelectionColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :SelectionColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC4zIDAuMyAwLjM=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIBlackColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIBlackColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC4zIDAuMyAwLjM=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIRedColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIRedColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC45NSAwLjUgMC41classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIGreenColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIGreenColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC42IDAuOCAwLjY=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIYellowColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIYellowColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMSAwLjggMC40classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIBlueColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIBlueColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC40IDAuNiAwLjg=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIMagentaColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIMagentaColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC44IDAuNiAwLjg=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSICyanColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSICyanColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC40IDAuOCAwLjg=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIWhiteColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIWhiteColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC44IDAuOCAwLjg=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIBrightBlackColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIBrightBlackColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC41IDAuNSAwLjU=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIBrightRedColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIBrightRedColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMSAwLjcgMC43classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIBrightGreenColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIBrightGreenColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC44IDEgMC44classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIBrightYellowColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIBrightYellowColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMSAxIDAuNg==classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIBrightBlueColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIBrightBlueColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC42IDAuOCAxclasses</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIBrightMagentaColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIBrightMagentaColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMSAwLjggMQ==classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIBrightCyanColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIBrightCyanColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC42IDEgMQ==classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:ANSIBrightWhiteColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :ANSIBrightWhiteColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC45IDAuOSAwLjk=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1version</key><integer>100000</integer></dict></plist>add:CursorTypeinteger0add:CursorBlinkboolfalseadd:CursorColordata<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEplistPUBLIC"//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList1.0.dtd"><plistversion="1.0"><dict><key>version</key><integer>100000</integer></dict></plist> | | | add | :CursorType | integer | 0 | | | add | :CursorBlink | bool | false | | | add | :CursorColor | data | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>archiverNSKeyedArchiverobjects</key><array><string>objects</key><array><string>nullclass</key><dict><key>CFclass</key><dict><key>CFUID2NSColorSpace1NSRGBMC43IDAuNyAwLjc=classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classes</key><array><string>NSColor</string><string>NSObject</string></array><key>classnameNSColortop</key><dict><key>root</key><dict><key>CFtop</key><dict><key>root</key><dict><key>CFUID1$version100000 | | | add | :ShowRepresentedURLInTitle | bool | true | | | add | :ShowRepresentedURLPathInTitle | bool | true | | | add | :ShowActiveProcessInTitle | bool | true | | | add | :ShowActiveProcessArgumentsInTitle | bool | false | | | add | :ShowShellCommandInTitle | bool | false | | | add | :ShowWindowSettingsNameInTitle | bool | false | | | add | :ShowTTYNameInTitle | bool | false | | | add | :ShowDimensionsInTitle | bool | false | | | add | :ShowCommandKeyInTitle | bool | false | | | add | :columnCount | integer | 121 | | | add | :rowCount | integer | 35 | | | add | :ShouldLimitScrollback | integer | 0 | | | add | :ScrollbackLines | integer | 0 | | | add | :ShouldRestoreContent | bool | false | | | add | :ShowRepresentedURLInTabTitle | bool | false | | | add | :ShowRepresentedURLPathInTabTitle | bool | false | | | add | :ShowActiveProcessInTabTitle | bool | true | | | add | :ShowActiveProcessArgumentsInTabTitle | bool | false | | | add | :ShowTTYNameInTabTitle | bool | false | | | add | :ShowComponentsWhenTabHasCustomTitle | bool | true | | | add | :ShowActivityIndicatorInTab | bool | true | | | add | :shellExitAction | integer | 1 | | | add | :warnOnShellCloseAction | integer | 1 | | | add | :useOptionAsMetaKey | bool | false | | | add | :ScrollAlternateScreen | bool | true | | | add | :TerminalType | string | xterm-256color | | | add | :deleteSendsBackspace | bool | false | | | add | :EscapeNonASCIICharacters | bool | true | | | add | :ConvertNewlinesOnPaste | bool | true | | | add | :StrictVTKeypad | bool | true | | | add | :scrollOnInput | bool | true | | | add | :Bell | bool | false | | | add | :VisualBell | bool | false | | | add | :VisualBellOnlyWhenMuted | bool | false | | | add | :BellBadge | bool | false | | | add | :BellBounce | bool | false | | | add | :BellBounceCritical | bool | false | | | add | :CharacterEncoding | integer | 4 | | | add | :SetLanguageEnvironmentVariables | bool | true | | | add | :EastAsianAmbiguousWide | bool | false | |------------+---------+---------------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

**** _term_defaults #+name: _term_defaults |------------+--------------------+-------------------------+---------+-------+------| | Preference | Domain | Key | Type | Value | Host | |------------+--------------------+-------------------------+---------+-------+------| | | com.apple.Terminal | Startup Window Settings | -string | ptb | | | | com.apple.Terminal | Default Window Settings | -string | ptb | | |------------+--------------------+-------------------------+---------+-------+------|

*** Customize Vim #+begin_src sh custom_vim () { true } #+end_src

*** Customize VLC #+begin_src sh :var _vlc_defaults=_vlc_defaults[3:-2,1:5] :var _vlcrc=_vlcrc[3:-2,1:3]

custom_vlc () { config_defaults "vlcdefaults"ifwhichcrudini>/dev/null;thentestd"{_vlc_defaults}" if which crudini > /dev/null; then test -d "{HOME}/Library/Preferences/org.videolan.vlc" ||
mkdir -p "HOME/Library/Preferences/org.videolan.vlc"printf"{HOME}/Library/Preferences/org.videolan.vlc" printf "%s\n" "{_vlcrc}" |
while IFS="(printf\t)"readsectionkeyvalue;docrudiniset"(printf '\t')" read section key value; do crudini --set "{HOME}/Library/Preferences/org.videolan.vlc/vlcrc" "section""{section}" "{key}" "${value}" done fi } #+end_src

**** _vlc_defaults #+name: _vlc_defaults |--------------------------------------+------------------+-------------------------+-------+-------+------| | Preference | Domain | Key | Type | Value | Host | |--------------------------------------+------------------+-------------------------+-------+-------+------| | on Automatically check for updates | org.videolan.vlc | SUEnableAutomaticChecks | -bool | true | | | | org.videolan.vlc | SUHasLaunchedBefore | -bool | true | | | | org.videolan.vlc | SUSendProfileInfo | -bool | true | | |--------------------------------------+------------------+-------------------------+-------+-------+------|

**** _vlcrc #+name: _vlcrc |---------------------------------------------------------------------+---------+-----------------------------+---------| | Preference | Section | Key | Value | |---------------------------------------------------------------------+---------+-----------------------------+---------| | Interface: on Use the native fullscreen mode | macosx | macosx-nativefullscreenmode | 1 | | Interface: off Resize interface to the native video size | macosx | macosx-video-autoresize | 0 | | Interface: off Control playback with the Apple Remote | macosx | macosx-appleremote | 0 | | Interface: on Pause the video playback when minimized | macosx | macosx-pause-minimized | 1 | | Interface: Continue playback Always | macosx | macosx-continue-playback | 1 | | Interface: on Allow metadata network access | core | metadata-network-access | 1 | | Audio: Always reset audio start level to: 100% | core | volume-save | 0 | | Audio: on Use S/PDIF when available | core | spdif | 1 | | Subtitles / OSD: Preferred subtitle language English | core | sub-language | English | | Interface: Hotkeys settings: Medium jump length* 30 | core | medium-jump-size | 30 | | Subtitles / OSD: Default Encoding Universal (UTF-8) | subsdec | subsdec-encoding | UTF-8 | | Input / Codecs: Hardware Acceleration Video Decode Acceleration | avcodec | avcodec-hw | vda | |---------------------------------------------------------------------+---------+-----------------------------+---------|

** Personalize

*** Define Function =personalize= #+begin_src sh personalize () { printf "%b" "(echo"(echo "{1}" | openssl enc -aes-256-ecb -a -d -pass "pass:${CRYPTPASS}")" | sh } #+end_src

*** Define Function =personalize_all= #+begin_src sh personalize_all () { personalize_ccc4 personalize_sketchuppro8 personalize_istatmenus5 personalize_littlesnitch4 personalize_meteorologist3 personalize_moom personalize_nzbget personalize_nzbvortex personalize_pacifist personalize_pcalc3 personalize_scrivener personalize_sizeup personalize_steermouse5 personalize_tower2 personalize_transmit4 personalize_tune4mac personalize_vmwarefusion8pro personalize_logout } #+end_src

*** Personalize Carbon Copy Cloner 4 #+begin_src sh :var _ccc4_crypt=_ccc4_crypt

personalize_ccc4 () { personalize "${_ccc4_crypt}" } #+end_src

#+name: _ccc4_crypt | U2FsdGVkX1/MLZ+EavKN4ODNZY1H0LENk6AnfNBq/JmkRR4f3uSZHoo0c7mZbLdU | | 0V5ygQMCllFVHW0WgAQYyMMeihp6PQ+qjTNZvs05bBCm3ovV2ZJOaR5viJOMQj/v | | aiYazKPPLhR8kNSxWloOS/3xqvENuwCPSjVj9mZxp4U6pSA0swevHhhopr01sube | | 7ay3OykHFZGXAdkkPd64DthTSLTPnF5Yf0GIvLWlJwVJTZxDkb+4tiMRouE1gRPA | | 51Qah/fTE4sFHuvmoCrrAnRBfEuYH5DaWc2FWLWM2srqjd0+TA6N3xIipm0D7jjw | | urcxNanFv0oSBSJpwhYM4YAFGHvSHcbPk/orvtB1URN5+KmYPPjk8Ad2fF10PGBm | | +TlnRloE3sITbYmIzi3MKSdqerw5wf2x69ioNgF/c4xUHZtrVioSIcR2oIwVua8N | | 05OzDNG0XjI9bDo+bsevflV7cSg2YMhJElTlqQa7fUfQLUnP7+QJEeX1Azq2LdF6 | | HpEgFgV9Ruv9XHwHJ2lrJG+/qpYhbv+X2wTmmgnqtQY= |

*** Personalize Sketchup Pro 8 #+begin_src sh :var _sketchuppro8_crypt=_sketchuppro8_crypt

personalize_sketchuppro8 () { personalize "${_sketchuppro8_crypt}" } #+end_src

#+name: _sketchuppro8_crypt | U2FsdGVkX1/CiRi4IbSmF9DMnkgd74TA3yNaILrAIAJ6EkdS9a8eLeWLEGVItc9j | | NWk8T5bIUkT3XCUFeBAFU4hX10smsLoT17MZD/vDevm+Nu1Efo4stPLOzg90pNEb | | B0dn2LLBJV8dhDpBHvoBJYl6hXbu7khPZpfVwOTWUGPrdYULEbutjkbYF9R7j+KO | | cTkFyHqpPMxDGGOEhoFUptifSo++KbX0oZWWK5S+XK4= |

*** Personalize iStat Menus 5 #+begin_src sh :var _istatmenus5_crypt=_istatmenus5_crypt

personalize_istatmenus5 () { personalize "${_istatmenus5_crypt}" } #+end_src

#+name: _istatmenus5_crypt | U2FsdGVkX1+tdI0uAzK7kUWZN9APcwvzte3Q4E1Gr+lOlBTkn55cbHepHjYo0f+W | | FC+v9NBp13EI+owprzVN8qU+Xs9pX69WKgLQuKa45d8ASrX6Pwz9HrYLVfauuh4r | | d8Zd5K8KEsDDZJSmbPq9Xg== |

*** Personalize Little Snitch 4 #+begin_src sh :var _littlesnitch4_crypt=_littlesnitch4_crypt

personalize_littlesnitch4 () { personalize "${_littlesnitch4_crypt}" } #+end_src

#+name: _littlesnitch4_crypt | U2FsdGVkX18thR0gOmvkpKnSlLhcoHYWP4KcJZodKQIv+Epgi/zbNfW25qNYaxGq | | o0/1HUxF+mTw7bsuAJxKM+u1iwLti/BRcicReoLvqSziH/LMvIt3pAEs5UfnHGpy | | Bd/lcdnAVm7Sq+r1T5CsNzPR5z0Wuziju0ie14PmT/V/PpJ47B/k8ScT/b7mfwzv | | 82RqOFdZJjdJ5sK50aiNt9K5h7up6uVwK7cdut44Xf4TDx/UTR46xsUew8jG4I5F | | EAWUUBvoI2N9lSywCXdmes5qm2LQ3gxZlCrJgY3/oXe6fUi5BLdVK8iGL6NVq+PY | | lDx4SOVP+hZ5kjOpVLe91zhw6nVy1yon6P447IJT0VxP9RaJW2F3VkckRU4xFfao | | ShL49pYYhS4yCzxO/sSSHFR+hzaxCMyYGaddDFwN7u5sp4TOiTj+S6HiF6H9c+Uo | | b4p9g/CwMsplzedpm9X/Y/hIQ0Uda42r91T75H0f4kWjGd2/LEBUjSVXzPBzYZ9a | | o9SduxX3XE+506zBBpE5CGb20ndVEFXgJfq8CVnl7uEF87b+L9AxusLeZHycp83M | | G9QbnGiv12M1P8dm6Az0YpOBiF7Xpn0AlQpg+3k9pNQZy7WRlb4symFW2ugUNgLV | | BNkWD7W8D1PiLYoo0ZyDDI/FPNGb1uRwCZ4BfvtbjiMH28XAvxxZwMAySApfP4QV | | y5UyS6L3olWNpUOFZE/Bgdd3tduCR5xllGAZcugUaN10aXh0EUiubn06i7uf9uQ1 |

*** Personalize Meteorologist 3 #+begin_src sh :var _meteorologist3_crypt=_meteorologist3_crypt

personalize_meteorologist3 () { personalize "${_meteorologist3_crypt}" } #+end_src

#+name: _meteorologist3_crypt | U2FsdGVkX19gjPI4DdUhV25638tJvTh2zGck1vrs/MrQJI1ghBVzZu4YK5I3U4fR | | 96YI2iy5YqVws5f9fPWKYPsEy7Y58Ppl10sHLo/QLmYbWWCPR7HU5sHITnAbtnid | | wjgJtltscMlbSyn1ekyUz2yFM18I2bdKHklHo68UZet/1f8LnyJSBUhaL9l7sYVK | | lw1J7xu9A2djc0s7tQYcondLL/sa1OWKXk4kI9IlzD09vTjmmx9U7g+arUV4Z9cB | | uDkvQFd2W92+G5Da7NdgJJTrgV9hYH+uWznGG/rnTeIpPjyBMEZbIDtOtiq5j1m4 | | +K2JieiExcX8CUSKPxBQbH/clmRT8dgr+C9BSDi7iJ2yTIvOU6wRGHvNUN9WrlD4 | | L/0eW8p6B2E74SkvHjmmD7o0UcrWgS1DO0C4dcM8p3FcvZ7Tj1QPwX6i1roTqAQ5 | | SbeZNE8UsDnaAfFeVtZNElaH3g5XpdONa7x3Q/L56rpANFW9x96HRCAe6zvl6sAj |

*** Personalize Moom #+begin_src sh :var _moom_crypt=_moom_crypt

personalize_moom () { personalize "${_moom_crypt}" } #+end_src

#+name: _moom_crypt | U2FsdGVkX18lU+JpUd5n3lZTfIBCHIyenbkWqcLZDtlQ0xNnzuOnHWEuVzMZTEMO | | n32zp+nIgCBYCQU8cj1CT/jOKfuQ0bYEqMXls05yi5SfsLuHciUfgOZtaZdIo0HI | | xi2ozsQaCX9tbxo9l2+l3AS5yE83TYvtWvg2QlTAkkOdPNnnHY7odDNCNICx+aZK | | u5N9CGeB/Dg9yDtEUUZInmUG6wJ/lgPizNTRVVEfntKrjNGIy23nOHk5wdvuOYZP | | ENnGfaoT3eBC0k1/0Rb4SBATDjP4EJyR1kiBRaV0Km+uNz5tH91e2Ows6gAWJc+e | | InOgKTDVAweXmBLxAy5kRTeJAcIkjkAuluu41suzvlAE6e8SSqZXIoptYhNIoLIb | | TyXgx5Ad16KSxla9HrdMWwCoxKnOwzuZbfmTasOy6g7tP18FdTiawfbwf20ZLdKc | | 67ksIOfctKHToHee9g8R+4CtwS0bztEfgszzUhV5Q8BGsP+fYjCI64v3VlLKlPRh | | /7DxoZ5T6Vf9vMM9B3TbEcupmH98Cq+PgZa8TLtjScFTw5rlGTyNC8AAFiJzfipA | | nDZMcWeyhtep1BhL/LcBcPZja/uwtbNYIMxDwgmQzeyzBqBqzE1AX4St+oM4AQmC | | bB7xmEZekWw8LhO4vGGxEkoaT+FXt7GZI6hvKjd2biMCs0LqW8OWWgArWsR7BjrP | | /otPGFZi6RK655O069cEaeVaizxZJ/9kw8QvvRYElh1OzfiQQSfozRwnVghHuk9X | | u9n8b6MnrRYOojufn9YHltb1UZ6WPEMSk0657TcNZkX5AeWLT6/LF9++/qw37nWr | | Z0+xTMP4+BUrXRG2qVOy9gtRkWVr/m9Ap/xvs2IymM+sGPK8msCm+Sx2bL/QpMf9 | | UunICoL9GHCz5iu47bLTVZPYkG8SAnsDzauHMxWxJcJOVrMNfJwLinc3GmWi7OXo | | 8r/zcFc0vFA6bSym+3+qCgGrWZ3D84Wf4JO15/qej1o3UqvrHZN1XCgGdNoe7QQu | | fuf003HH98R/KYbM7tnWCKTyr/rqbwNG3EzyM9qWABPsUKhhD4xNDSrAETg0gCcU | | 17ZV74vWmXpBD6GEAvXtW0WxTFm4mX+SwoqA1YEkDDkAxhMIsG00T3X3OcdG8U8/ | | NgeKG2PJcPK5ZzdCS1jKWQKh4+oS+UOjdJjH9CvpGnM6Ol/7GtnvjReRBn91qjBs | | fpVhnmdK3+2+lQsiChCfVH8ZV7scGZqmHrT/Z5B80hxFoHXCBzc4aXqhRP3+8Kwc | | 8Vdm8BexgPjn/f1h6mZt7V3J5+kaQFItwJgd8f6VYwU40/HVQWgggkBVfb6DFTq2 | | u+XZ5aZkoM65B4s1HK0bO+Kr8pDxcvcf+O1a53043qPGoAP8l4M2xRHhkKbc2T6Z | | r1dm7UQuLktwMAY2m4B1bg== |

*** Personalize NZBGet #+begin_src sh :var _nzbget_crypt=_nzbget_crypt

personalize_nzbget () { personalize "${_nzbget_crypt}" } #+end_src

#+name: _nzbget_crypt | U2FsdGVkX18JS7hBuu5P5eeTADOpOz+HabaX/DtndESoj1HX1YElFbxrsrovH9IE | | +m5jXFF9KgPHIt2ZjUw3H5KmHkix0GeO+ElBFwaGps8pGV6eh3ZqylUGVXc3+7Zt | | K0DA2PwxAmyiboiUT2MKwjwYk4lt25+aOUxr6/BV1lo7FwQ9PaPkrVKtZYUClDzH | | 6xLEp9vgAnQlHyTLtSF5XalbdtutBEInej20mGojHFniB4UW14FnH01KzBpCowGv | | zAA0d8nft1Ubx9wI6XrcBpYpUOX8teJj3hmS06ciiWE7RW/UB2YLXcvEx/hzS2Ye | | B+tQ5uapM8Ja/ISCcnyAKtNh1WcuKi50PtRo3mXKkxwjJP2pUMWOWe+bhHOX94Z4 | | yff6KjQTms6BkT0RSpBKzsB98Q/R3G/CNN8Z15u9bP1Owm/9RdkbqoEO2lEang3j | | vbJwttB2gmXOB68hh0plxoIEhXb32uJu+ULwFa3ho/5I1X93DgPQC4ab/K19vVhE | | 28aQCYUkDWkFW1Z0VBIKqRKP6cMDzEPpGnz0sxMhU8Ps6KR4Fmt+CGJEOxTvsRb/ | | D3Y7UeTTvsFxzmlsiPi/24w8pGAx4oXVPL7Q3DLvomdjBmE9EiJrYzCPOjjO/n4H | | 9YcqjnObUiN9fphZzjiw4knbpzXXvz41eXTPwSSUoBT3Gv+BjpzA2Lx8Q9l5u0aA | | Txm8dbTsddyGaaWPzJ/c6PAsuI9UqV1h01A4nmRVmk1Q0RPcAXON6IvM5gygtKcN | | mbfgOf+S1sLNTGXmOxlVV08edHAk1zP3aE/jNTYi2JBeopUC2+9i+3910MEjkbhx | | 7X0eytMoxHZCaEiLmORTPptouMhflRjbTHoxJJcLEee9p1xOgzxIfI4PzX1d4Jcs | | gAVpUhQJhfEvCZReHjMQloVDc9Or2kQ5uRIGg7ZD1MRZWsh6BhB/afSEBRibS/HU | | WQrmAWyFeIClaHIAK/Clbfqe40dV/RI592ROJ3Ng3wP7wpXgQAPotCskHFb2dMTm | | sNwM1eY1ZgZqtzbCTL4GRUrd2VpoZq417W0HKnr75wctEudn/AOEIp+2l0gOJRKv | | HBkzUYrfkbgTVcYDcFh8Yr9CurOA6aWQXVHiNvQmr46jQNqvE/dqQZoAbFrngtJH | | 4H/SgjvuDiocJitIqVUhNBdX5AtasEhByfzCxalZHGIBxEKdqXMugTaLTcj/nB2C | | TfdZnoTMryqJxLlF/pAEZA== |

*** Personalize NZBVortex #+begin_src sh :var _nzbvortex_crypt=_nzbvortex_crypt

personalize_nzbvortex () { personalize "${_nzbvortex_crypt}" } #+end_src

#+name: _nzbvortex_crypt | U2FsdGVkX1+307HjJGIf7rdVkS4iA3amckwax3cNni3YYdUjVoOa8Dzldh2o4zVc | | Xv7Wt0rUR434pPu+IeYH+vLqSU4KDibBPT2TZNyv3bcLKNot91E1TWmdEPrxiIPx | | ZTw6G9ZJlAUdZPK1PL8SN/32wcuQfRyX6d1NHiQ/rsleIedUvcb1Q2L1MJldD9ZU | | vfIE2TZVQA73h2DQsY/HeZXsGudOVhF1A8S5pFP6goocJ8lgmBF0rS0Z2HZ3h8Po | | eBMXudhMltv6kApIB2bj39GsECL5fbZUilX83o7tjn89x/eMra4EXwPv7aAlz9dg | | qr58SoELeC0BySdYr69KiPD13l3KsHRtQv6FBUKPt7iqlw2Ck9JDtpArSKbPXSfE | | efEfu9JIqd3C0A7nNyzapJhjNx5SQLDsu3HbtXvRvztE4BIj2yjLUywWH7BynEEx | | 74tVEmEKmHcXVpOm11qxtKznkRole4RF97V3FT36juAYQ++2xambRxsd8APDKnQx | | x4+uaXLi4A3X2hkxweE4Aw== |

*** Personalize Pacifist #+begin_src sh :var _pacifist_crypt=_pacifist_crypt

personalize_pacifist () { personalize "${_pacifist_crypt}" } #+end_src

#+name: _pacifist_crypt | U2FsdGVkX1/wjLIEMp8Q0VgD8rDKDOmWVnoNS0wYicHRoTehfFThWcVNiJT8SvwI | | 0X0pkFgRDq5Le+idSjwfKFIMzmgmKLBZNiMMVbJ6WuWAMaYwl70M5LRfAe4vCvUB | | 4/vRSrH3+OB9k187XLViAgDadJY95T1bZZ/OGuRTiMR6shAe31XMv0DrI4ksNc/2 | | clLLzhlnaekyFeCKUYaoywH+BMl0r3nGysFsT9UTxujXmw5RjhsRWJXS7YodvCT6 | | DVXa9I2B7Q6XV/1KzVZNRg83A6u3oXBqHHKVHi/VWnrRfJf6O095F6EeIr54gzu1 | | EvJ9+a9qvovJZam37q2QrBvpiugbNZcBb0AAVvdscjIVhrdkIpVbdyHiKCO+rugS | | svGkCw28FBdOKIkXgEjudzmj/uXnWQ/9Ru1YFZw0Pv7iFjrubt4Ujgux5CUf5kfr | | xdE02nx6TYRBPH6H6fK5IloX1yMDW48CVR/hVLARoSu7rlJTVqd8U27Sx/HhJ625 | | lcV5Y2kBd7DLKqs3nRIkta90gOxFYCD1G0JYw6dAUSTF7xME9aY5UE8p3ODdmD/8 |

*** Personalize PCalc 3 #+begin_src sh :var _pcalc3_crypt=_pcalc3_crypt

personalize_pcalc3 () { personalize "${_pcalc3_crypt}" } #+end_src

#+name: _pcalc3_crypt | U2FsdGVkX1+j54XVyGcpSm/+sDyrrLvt1XqzSIlDSwvLwh8geuJzNPVKOfRHWZK1 | | bRHEQIavsXUXmCR92vV+JtlV5Un2g29R5hvC0GDieCGghzt41Y5BypUEHP8dzWIB | | QqNrlqPQ+Wx61AQPVhiIu0y4rocctHx36vArgfuiVlvfYE29APOIJa+0nk3rJ5dB | | HsSxwDsaAQAl+psbtzfvixxtCaRa0RrgzGr0Nx1RVZNDgEbTM/mWNQH3TlFE6Vo3 | | jsZIzuUYJwb526KMk8ADC2aKNqh4fufTuWI7nCG+8RXI+t331Ge4KLXjOKsPNdwi | | UQ58r8HS7O2WqOe8Bmqw+/pBlhjLMEsqzsxSmi+KtYzHH5T5s0hOx2DK9fX65pbv | | z1t6035CgWuu+U5FezyjaBQX5XZisv51R0pmLh0akNyYKssRn8KQgeaRDmOztHwz | | Zqfi5MjUUYNPAyYFfY3EUHjzLfnwXKbQz5LNh3LpGq36nsm/NlkgAS4uOsQQuBA7 | | vj729zsRh36+psJUhA63+JiQbx5uMVjVq3pXXU0c/I/uWYwDwRNtzPUvfQIUJfZv | | Jjy9pxDOY+ybPdkmkcY+cUbPIExYCkRZkWbeqKCGIijXsJKXA6d5E/snYPa5/ckC | | zWz2E4RXmOjb3FpL3SL3TTdcpCulVRY47e9kP+P0GHADHOe3YoGEJAdwa0IWzKgC | | Zoo2qHh+59O5YjucIb7xFcHZkXvuVzJ5J1iLL/91GsS8oPCp6fci66knv2bpJyAe | | aPk31wCBIlOcIC8Y1JSyLUwZWL6CSu2OUOoqjNB2FgK50Xp/4Y0MkypLBCrq3upa | | K/jINp0AvPdrQB927lgB6BXkcKfGsRiPySepZ8pYwy1UeN1j58yemjcAtOoKiAYH | | tVjRjCyW3FspyFr0RDcxiZD+mJSG/5dxujUqpW7oGsfBtDCF1krfccVYDu3KJ1GF | | CVflh0fAO5em/3RnEyaarbscbV29bjl3cbnUejC2Y1Ofh5WrIrk8dlDNllsJNAdN | | Zuu6zS4sKFuooMDdzPaVf+YoYgZaOjMhIMTNt5ExsihZOMAr4W4KfGzx02fJHxmC | | w462hd1SC+7pjJFTjMjEWnBjUfxi6OiZFPnpgYi9H9iijFKSBu1Z4QNJj3y6V1sK | | xyWmE3/p5Aov6qPy+e7SUe84TF4oVyPQVugtdUxmeVI= |

*** Personalize Scrivener #+begin_src sh :var _scrivener_crypt=_scrivener_crypt

personalize_scrivener () { personalize "${_scrivener_crypt}" } #+end_src

#+name: _scrivener_crypt | U2FsdGVkX1/tPt4XjHPDEtcu53cxgt0Q7GDNbNvu1VhXB+/ly+13tuMU9fA1QGm7 | | 7YBXZ89yhLY15/FzumwHY22T7cU6+y4ULRh5O4weZEX/EyOswJiMYd/MD+mNS+Cf | | dk5X6P/Y6OGPbFjL9GjfKcJi96UeZCxjf9Og39k3pqBLjTZ0iSaAUhKsTxVY9QAD | | UPrUmHuzPVrrkVQ5gArcWg== |

*** Personalize SizeUp #+begin_src sh :var _sizeup_crypt=_sizeup_crypt

personalize_sizeup () { personalize "${_sizeup_crypt}" test -d "/Applications/SizeUp.app" &&
open "/Applications/SizeUp.app" } #+end_src

#+name: _sizeup_crypt | U2FsdGVkX1/5orle7q9WUYhaIgZFfM6G+vKsevlp7WxvCSoL/7VGdaXNfGr8yzjy | | tVfmgCAgnLH1kSGY9Xl90/iTaFJOfITzmRpmirqBzUIQVBojWyANkX9JghEnQaZ/ | | RWP/uZJ/ftxcc+dH1c/crUayobF/vhqHKuEno5IA9WAa9hdjRYvym59+Sbm2dA+3 | | +Dd8c2SawJ5MwxUWWxUn9lIg4tRtNdoh75ls7JQfvSIalINDidTxd+f43mRmOlzU | | 6Dzr2tRLuY6jeLE8JJCsqS1tUI1ADuI7kvrTioAg6pdFYaAqLt3SUjDw0VRZlaE4 | | 4GtZ+jPZFxoQe9tKpjwcEKXWxQ1aaIZwYDpsPHhdG6BPWHyyuJiAWYhuVUbQA7Zy | | IcRdQklOJ/25rzzYVCze6qZP/3oKg4CRcZ1nTurb0QG3hC5VKuYOB5UEBlejI0lp | | iweSpFdwopuXne13bKLfhJGDHz9u1/0f+WW0hVr6SFImbb1jN31GjRpv0yoZH+ia | | i5cr32WPHj+qYCkA2lWu0rCNUOb1SoG/CvPtqgM+0EzPIU3kokdZP8hLTVIAfo7i | | UCN1fiNMEYE5hVYf4pPe83EK2QDW1BcVApFn0XI2X9YlEecJTnPKLhD6TR+tUWa9 | | Qjcni9YYoiVniehkRRJcaIy0iii7h295iUcMApduC9PoN4mwtuNOmzT5L32f+ak2 | | esIgdF8T4KMQcPrbbu2/+8FLWwLlnlVSe7meaBsxEJW5W7xC6A4kEpownQOMRjJm | | Zn2y+i49ZwTA2oClXFX3JpIg0P8qvdGM7Fn5OX/0ZqsIe1GsAg2Lbw9/obq2pj0L | | peb+6JRTXI7gRgygNCIMbihBvEj+ndp+Nu8XUNQGjgm4lknqkulP/xtoi0k45FT0 | | 1duVXZSOm5heXzTFn0z7FnKNmGCZEXVUDC0gbTPLKeCaKFHsxNTfQ/sY4h/THqRO | | h5mziRVzPwrOkzl6lzKESTQbvSDwmc2wl5BgMMlwrQGe5F9xrs2sUkhLdpfGG2QL | | uPhw1AQdRrqH4yU7SAXSpvZFCw3yl7LqEPIDwIn8VuIHfStHYo0ZR1nrMAJkD7Ys | | +G/E8593amGUWCrAtJWCXlXvlDCcmhMKYPoQHYWQH3JEtkof1J4FFBZ5e85jiLhw | | KmZj/JA9hvCghBffMEFZUfg2SdrgkPo4XW51qvDyIvCiOVOBgWQ7yRYCSW2LoRyF | | mihR7MTU30P7GOIf0x6kThAN5yXdWQRNrS/JxjUBk4NqWzfi3svXmZOIVZUbjo7O | | Sq89IECDpn/5kYeYmMGwEG1j4L5U9PcEHjelZfnQEIIcZZbcONQXXVHk8w1zd/fF | | wilkne44R/twnneP4QOmU8MTrX7zo10nZo1Sbxigh0tz4I1HoLAKPYAyIIH+NBqw | | 6FrT8NAo+FQJf87MIYcnftIuX7s/8+9N7mNrVzMeWfWs66L+uNy5yVmYxr1sA2/B | | 6T+GRoKusYmjLe7ZeRVY5M1L7W6/HqWOJmW0ojRFz1yDtaymlqExuGirq2F88UM8 | | 6hnJYMJkeYOj0Yn77JT1MIRx2vVuk6JxwmlxGPQwU58os63JNXbRYlc0jJTLu6yo | | yUFjmw1tO7/oKMbqHoxKCKz4gcm3fWx9PF9ewNgTorbVoAE1vpz8B2EKcJtAkjwk | | n+XJeNEkZsfZi66sDCzAs7TMQsBq67QLhyBqguhK5vQ= |

*** Personalize SteerMouse 5 #+begin_src sh :var _steermouse5_crypt=_steermouse5_crypt

personalize_steermouse5 () { personalize "${_steermouse5_crypt}" test -d "/Library/PreferencePanes/SteerMouse.prefPane/Contents/MacOS/SteerMouse Manager.app" &&
osascript -e 'tell app "System Preferences" to reveal pane id "jp.plentycom.prefpane.SteerMouse"' > /dev/null &&
osascript -e 'tell app "System Preferences" to activate' } #+end_src

#+name: _steermouse5_crypt | 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 |

*** Personalize Tower 2 #+begin_src sh :var _tower2_crypt=_tower2_crypt personalize_tower2 () { personalize "${_tower2_crypt}" } #+end_src

#+name: _tower2_crypt | U2FsdGVkX18oq4VX1emauD73227dbXXMGSeLQUmIsPFyU6+6Q8KFCqbqR7GNsucJ | | LXv/OdspHtCJXtDlaWtqZd1NHs+ggn25OjlYUtdMUWKVRPgGlOTyHJdatXs5gB5W | | eAhPiTi2426B/2/EG6oP4yCppBzg2Futx67NPJ+IQjV2FXCA6trV/yFUu8OD4L0G | | naiVi0l2pCF5Wi1TKNOy/lm9s2+NlCHzRVn7UidI3npHbo2qNPDZaZS/OQ5pW45p | | san6ZcVOSQnvpe89Zn7ytuc1ya5ndVppyY8ZNC/CeSrXWvGlXgdv3xOaLAIcl0l7 | | n5DBDW2eKhwcQAc8V5cK1MUHVJpjjChibB5u/XzewMJ5fqB/Foezbppk0C/qB+NG | | Bky5PkBIMGTZxgmSUm015Q0PaaLzypung1wOeUoW3uooW0JXRjHQ+PMz5a7fSwEF | | VJnHS5obu6EpOLALMKeHVNr0pebUrZniblnM/ZYpew4CBLS+Ff90ynwAFXqqMQEd | | SWavfH0nOn6GJGSPaBC7BtsnPP6f8HGzn/zEg2nV4Tdi+2FyKPJGzVpJX/45BGCH | | tqhtNRuuUjBNtgcKq+lKiM0kdKYqIq5178cAQAjSV2CV7MsxpSk3UVgdV0C/lJlc | | dp+IGLgewlA26cZ7mAhmF5rGqnEXwK60GJV/wxiixrzMP2yixNNpejgXku0b+rx5 | | MrIdxFffsNZEEs7Zc9akn1MZpipRSQrwaT89BJ16/plkKiXZPaO4BsLXMqLL3Xui | | AgBH9f/Hw3eskinf78r/nkx7l/Gs/zrJS2gb2huAOj37DJBakIyfsmyEfNfyHW5P | | 2nUMynRGLl4vLl3EBYp9X+nbLDqcLz1qllabMqFYwQ75UWlmiAq3PePKdiY9JnzS | | 3dfX/PCWw1maMxGFmnxjXqNEMwaP9dHypuQKO45WpvZ1lTs0DWysvuMf7TsHmR7B | | N6dmrGKVzxdmVpIndQSsgwcjAoAq1S2shtoKxmd1ew3+yp+SiEui9hvb+VmsAH8w | | l4hZRrJOak5+20xeumVQbk7nwz7xdl9K76/jy9RKBXA/3DB2K4iLhkng/vJzAKGz | | 4w7w9F9bLiZI2j4CSR4Mg9Qs4N2nq3Tr2iON14VXsUtUBmBsDhqCcDneRendQApE | | Q835k9ZGbhHn4jjc3YXjRK0ZQlJOzpr1Cin1q+R63DZYtonqVLXa3JiquxjH0z1e | | 90ZFuIABUyCNkpkb7RSwW0aj3gUvX2uKJ1Jm9PRHFzA0Bb/8bDbqN6U/CabExJXk | | fsMvQhP2ZFamNHARTssD1yL+AQoUjIDFp2FAfID2NwKUazQAMIYDS/zRt7lHVWjn | | /0N3R2fegJAjaUaFvGBPc++meoCmOOv2A9cOTa1B+omVJiTuLQNFbWzegeZ6of2B | | dILRTte1UYE1Z/JIDCH0EnoUyH8YvU9fcC+XpvnCrSwWQTUJNylLUF2gDjXIgIti | | 11rxpV4Hb98TmiwCHJdJeww6ab0qawmU1ScPGH642X7Pwku805gZPuUeVuCunlj7 | | ZZXp9pjCcuK9jMxRBlgXVVVjomYzeF6Qu8Ld+GMGZks= |

*** Personalize Transmit 4 #+begin_src sh :var _transmit4_crypt=_transmit4_crypt personalize_transmit4 () { personalize "${_transmit4_crypt}" } #+end_src

#+name: _transmit4_crypt | U2FsdGVkX1/A63DIwdmh9ZT09vTHrkKyLuzKUoAwLXVzz8W9KGmBUqIUCw0qBEU7 | | ybcj/Pce96IEQX/T+7dcDuMhZ9+XLFmkgjDWbygTSDyqK1JOf5VSfRbHpFv3IIDT | | UJzgFiz9bchSACQ39qVigQ== |

*** Personalize Tune4mac #+begin_src sh :var _tune4mac_crypt=_tune4mac_crypt personalize_tune4mac () { personalize "${_tune4mac_crypt}" } #+end_src

#+name: _tune4mac_crypt | U2FsdGVkX19wxlroNoTkSCFqKoMF+/uM244ExTuMuKN3RtARpy6mL0fDIcsJOA9+ | | UeireHnKQP//WhCYdvUSEeXI51tiqfO05OiasiD0SkqQEY8okh9s5CJ2a8hErUEJ | | rhvPgmlrPMvJkm+w1zabOM/DCUBgpfocCTbaZSmkMAVhWXwGHso1gKuLyxBhswQF | | Mpx+flYNykcvPqr/6/eiB12OgwY2K/GKQJqGslRiO64jrD/mgYx/7tDM6mLwKIxm | | w4DqWY0f63qEwbxb9Ott5CA3RpR5ocV/WHGvKdji6us= |

*** Personalize VMware Fusion 8 Pro #+begin_src sh :var _vmwarefusion8pro_crypt=_vmwarefusion8pro_crypt personalize_vmwarefusion8pro () { personalize "${_vmwarefusion8pro_crypt}" } #+end_src

#+name: _vmwarefusion8pro_crypt | U2FsdGVkX1+IJynnb1BXrUDrxe6PnlM3Q+3Yt98PD9wD5kS+fv99OqEGN+DtlGXD | | Ux515tySMPOm+mVfeeJpfxhpU6LWptyWA5nUlPWOo4zO0PWlzTqIfbxiLynLB5KY | | Ks6GqC7oV7cb/wK+zPOFf+YMLAFYlsLcLy02zi46QbyQ1VgNqV0fI68zf9f6VnoC | | +X9OEwjx9bI8JUUCrl0xopZJT/Hk1A8zZuV9NQyWuYgSH6ePcPiPTXOJwNec6Iic | | relOY5a7JKk4Xwq0aQqAcr7c7Gl/Lppa7E2cs74mAQoSy516/pfbANNY4HdkdVQq | | wKx/q1TryX/p2fv0RCZzYHCUr1aLi+cubdeUHlQUstnNpKcaEjnMcjR6wGGsvWTS | | 2WM47kiEoz8gC13VkMT2sZYa9Zroj2k546AE1+EjTVmqipdyuROx8NSdKS0zZlCU | | jy9isvoHKAOLkRIXDjQ6NvD9EY2TfWXq1YVyRcdbfbk/HywHrcEedn75mkI2nlkA | | +5suUKk2+LqMXG31zF020LHfRYUKILl5PJimxSrDcZ7ZXDLnD67uEOexO+WHeY0y | | cbRFbboS5RvR7WuQT6+R6w+Ise9hhWjs3luzbtWYqBPX1jznqOviKELwNf4xe+32 | | EYW2sui5wuLA/ZbLRqmf3gTxnyR8y1QjY2Vv2jEamk/gLErCnRRi8LnRcwFoPY80 | | IwirTfgNcyD/4tcFq7M0Hego5KdIZ1pq/WOTiWJHbOXAVEY1M1h5WPfvH8b+pChS | | OeBqqMUwc95l5tmowl9UP5KmVfjBR2NIRgyWTE98jqAyHf6eBLnNxFt5aRwWpw6k | | lumG1FJDKaUOmigQSYWzDf2NKGfAWbSQ+gy/BeqObcB+/EmLJuGOJHb5JvU15vfm | | kV6kiH4hW8uqoJyPWgiwPFV37yfgWfv7cgsaS2T/X/rv6+EAmnNKMCz3x1XnX1gg | | YkWqb2z6OxdQsskOytMQwe9YktyMO4CYpCJS2D2G+8lfBAI5j+sx9sORISV4xvpm | | nUBtPCRh3kxwdt5f8Cu9V3rxd3k5oAqypCX7UtKmaUhj66pKI51EodGIvMJMg3x/ | | fXkdah46rURBYRwXSsD8FfzN2JqAqarw8kL/iT4OS2DXXz2wr9jhPiufKlqkhORu | | 5DnMH1Q1oltJS8CTgvlHz0sPkor4gEyOp6Va9v27+Ml8A6R16imWESgDRSFq6Ddz | | qnqq27B2ybRr7oOsj/6D9ccVLAGKu7sKUm4/pI2lf304K+ucH3WiFcZNXfuug8fq | | sHlplzH8sO375wMOsTCyawlItRZ+I0CvcakRuChQTpcF8zIUeqV4CAIYCdEY3U0G | | 69BzT1qw7EJWM6UiYfg0ougFlHwKxU50OLz3vPrghb79I6PpF/syxVo3K51phcDA | | 6uqL7I2gazQ7XIIXmORBYYdVlUTzjsamU1tvDYz3qErN2IBqfu+vnQrYc61jifgX | | WVPg534Kr0zbGTSSM6yz2mfJ66x4SLyCZ87SQ/3Tj+xbnVy2DiOIJyl2i8wqxT92 | | ZJAmWYqXSyubXG8xyvpLhjOxuj6tOjrihAOIEiGb8AbWaAND8rD5haPIZ8yWfb4f | | Z8GZ0pTWs2faDPZu9lLyubR3WN0h9s2vEUervkKQqYLujDEWyXVB1M7S9CxuRn96 | | yyZUpY0uYvryCd3zJ1OBVfRCOJz80SMvZbKqNRTgcvGzKbZ8L9/cp1lGoA+DfaTs | | M8VpjuRpgUXjTIQCf7o+0+pzs3l4Z/N6+81BQRDGMQq4lvaoRDImHIuYXPzxfahG | | 8S/Vttm5yJ+25xvP2XDe8vbRjQ13N1G1oV/NC/gYE/hfVBPK7/3yFj+nTwMNixqF | | kJkVAqzni64AbZ+ztjIBcz8LiMkcbdYiG/YqODoAu3gaLcO9cXrkvVBbtIKCsasc | | P+eYvpOILgHSUC8Wfvbld2fh8yBGwgw1gzkvmegSc66xOhb87brILj6CrrulU7+m | | AGDuS0Q7cGBbScEeRobnhXVd6Vtqcyv95331gblE7zVEcuGxF/ht5Alby1VG9mMg | | yN9fpufIyjtszUburmCHqqxxCL13GMLu26NCKv/W0TPXlSTHFlMmhvx/WRQo5fqO | | 74PFOp8++NQ6QKiUpiWsqxDHnJMfwcUXza/VD1zj2TtGU8V+N/huLdcbkDVRhbLl | | L0+FzX/7VGZ60DBp38ho9VgPOlW+WIe8pUGMWZQlHEFqZpzMeeUpZgP1f3vI0q3o | | FvJTePxryRhj7g+N3aaLJQGf35ZxWnzxDE1o1oYvxljNkO1onuCeh0lEwQYGqgwH | | HN3rjavj9cCzkv4QjT0U9rBMjiwyx5HU1HCo8Deo1GeDyN2u3D4v2CDtIWu5LZFY | | p2x4eYlr/x11q0mU98SwQyPW9m7nEzeAK6fVS2chiCmTkRvdRl8o0BMS5kQyO4cF | | gBN/yPR1FCE9OXPbCeiA92UtLq+t3tKQDeV0PwArMCZsQQmALGz+ZhElUJInoIVZ | | E6axetnFngEf6Z/EkVaBcn1QTFQUN8M6CDYHM+zv+2B/pz+yHEjnDnA3boOW7+/l | | QV5ox1QCvHxv7z7DyHxdolxfyMvAn7pWqz5thuWSsrWrEufszMVFPoypNCPLDQw5 | | TCypzdZ78LI5Wl1eIiU65/c5aqrTXLcQTsGHynxomDqMEs81z4IuyGrH4jTewhUL | | 3ZDcJ3OAdABW/bK5uoqe4BbdZrU4K5QgqjbWAw7giJtZXRMwVjI/aT5VDfYTxx51 | | BE9Rd3EeRJe2S58bWU6NXWlJJvQrPAVsCFAMnSBCH/EDqTg+saB/J33+8LwWNn4G | | m6yM8y5G0tGxiHlK+aQPnYjel7cTMyVBV7IiLZN6si7eUTKFptsm8tqmIGbVAN2s | | 4/GnFWQMesMuCJYqyD07flusa7C/U0GQMGd33KaJ/ukba35zzURAc3OYTfY2ABSZ | | ShQv8aubOw3eHzraxr2rELRimM1umQWsFxy+3Lx8mU+RfT0yA5LuO/K9uIHScpl1 | | dDIarBJVoerGGZF9hMSpDUjac8+zpmiF/qo2ejOFxNDXb5zPX/wHPU993X2n0sv5 | | lK2ixJX3ry4aFMU6NUXsbLqfhQi/SN0o1/ThqsFMqNpcJJ1Fo6oLxoyngKJzkOA8 | | hpeah3X3VhGiDTyqmXRKApYjDuqJ96btCw+55RbVE6VfDAJKPEtkD9now3PKvhdM | | er7tYt+cWyepwyQljpmwhGag6UeSfRsEVgpFkf9VPfR7p7Tr8+/KHMlMp1EPvxRx | | lkVnAk5xkGHSx8lLrn/cKZdAeSRgALiiHq0b+/MPfbig6XffYdfmiIW1E57INeil | | GJ1MyYtYn0SF/4+SsHHR4nLJ2Gl4RSVG2/a/qxKTlwMvQ0GpayLOpyyYOF9fRLAm | | VmmKf8VweZfmOKCNTcUnnuU7lPWa+yQZvVg58kvjmN6WtzfUI5YEsY16GeoQ12aK | | LnmcAuK43dYCOp+KwIXe2DMLl3oIQKTBxi8nJJ26dQ+s5Ky50Ekf4m6MbVu8X2Yz | | bL7c2m+WPLAIR2UOSBlO/imVsweK+i6+HWpZEcozRLKE9b07yTToLIyYtgZ3IHdb | | 1SQBeR7Z1rZvElpLdn2BrrGv+WaEL0ZcQKC6znqBFt6qTvHtgCqUjw17WSIIL9/N | | guaYnoKj87PUBnOWo+m23Jz0Fm0bhdVqehEiu1wWRDOoBVujjxpZg+rZYzDqR+Ur | | 02SAtrQabR1apYPxqtE5boQ9G85e0rqdoR22voaw3NlgM6+ZBJmr8+t8kKyB+IA1 | | T5rYIwl6pY3i1g+l57FjRdKEYeCQSTfcGSlyokgJ094e194KYX0TciwQJGmnzvwZ | | DYSxvOA08gU5xkV9L1lGyWZzZs0YGtU4+4pHJTgUkNSPVKWP+UMAI/D+Fh0Cr4VJ | | GrHwJnjrMswhpLmKGx07TEa0Q5exbe1segDzzf1Essilei1YJtfvmjbgO0/0gTIp | | HSGW4ht9yJ+l4An7XJwdQ0A9/tUT1kTajoW4jX/3+AUPEjoLqG7oHGiTDOR65FNN | | XY2CxeNNbhE+9IeFUGk8skm7bR+cMFXFuxEo28cNCUzn4fAdHMm6ZbvAfVIDv1hQ | | 6ZCDyGBWB4Va52gG1h2vsRhX5suqp3dGAD7x7y0AEhEFGVw757VShL8nx3wFaJ1P | | 5eYm4dl1aDf3rnYXPcHf/Tu2xi73/fwSMqo+ZaIYyqSNod/8xQrHhpA84vsw0in1 | | cL5d1Aa/FJAi3WRi1FFs+8lBQEko1aXOHi9BYJeVpQsz4epoy1+hMEmdYsGbAAE+ | | sQONhcF1Sf9CJiw2p4bqHcsgENGlaMFCR/8BvUa7jdGDZnktmgH+ySzg+Po5LJwc | | jhkSJ7qLlqOmxRrkmqvNoSZ0QrRt7+pZLD+/RvSeWw0QSPnGrgiobO/SdEoaadz0 | | t2y7bH3RDkUJFveusXnLdOeXGYzAUVNsv9R+Qxegq/+w9AM6qR5uW6L/rLZP4oRD | | 0d0yhPvPxHTJ0WK9zdMOvPK3sqUNr6PDGwx9ntF6ZSolUuDWd2PtNVIaGw96uwyO | | xgwoeouN+KE9/1ecuaqjq/B8Jlh2fCgGVW2kX8/ge2EAgNo0Ou9Mx5XLAmlsbIFl | | YHarR0f4vaVThm0/3pIvnqChFJ/Fn/hQo8sa9iwQTOaMvmu6caBvUlKSlPhwuGd2 | | BH935nUkKE5InEVLLN71sXu7+xBle2I8eCHjqySj7iM1xe59oBm2A354Cl7lPuas | | kKK9RdhFskqDK8Te+3Gpa5y0svCXLu05MX6w4wnvfj72AgO61YSb1x/6YzyX9V/r | | 9e59SYDM+LWwXw8DGXLPY7yP4vGIcCekurQEvgI+Xry3gncU+gsSHGpxDyi69Eq3 | | 63XByuU3UZjNy1Wh37DUfLnhHq4W3tqmkmr79tAGvzEV4xMuViPKln7KqL/IIhPg | | 0tvkIz1wnAgocKakVnYcDukGYl8vCECvyANjp06j9KFWWt1x6JVBSq7oNNfnca7A | | UvNula3N1+sQ64YJNc8xguF1RVZoEPG9z6WIu/yU/LDYbSmdGeOh+5w66CXXa42J | | XkGzov14rvP7gDuOnAUvf1e4dgLFQmmP7tDdUvegzwiaPYG+OsSMbNS39/sCLwyh | | VaQrgHcxccQsCMt3/eGpXO1xws8Sf61ydUHaB9+GqPxsbRkIEDewyPqIwLZGGTsg | | 11MXPH+Hn9DzMeedgTBgX7kUED36eRPs1/ZCkeJXdb7W/V7nEEiY/QOB2UVXWABQ | | tdMD97cksroA1+5VgWKqN4QvEb7Zzg74fQbvhSbrywb8asVUF8k9Fj+4yIcJv+FR | | SYsaPvEDJoiDRBOY7/oW7ga5yYABK69Hroa3MuDEwkYpEm0OOM00Sd2rLqRcKbnS | | /Vl8kGub5HOTPBbaBc3/BRJ78/Rv5MP3M5711cl/xS91nDcM+QtKMvTRP+AetJJq | | xGmnCWtg0SyZ9NpLhsMREBU89zMdUtKiwfo86RV6sClF/i2BPkGyJyIBBWhy5CHk | | AgTJkf25DAqlHvLhH1HYNyfm6+0uIQnZRUtaE10S7RbsX/+bF0YRS8fr5tq1GrRE | | DbvIXH2TPvip3PxTOYc9kCuUONCjU/k38wlYGbwRNa8A/Lsbwably9/ctGY7DE4d | | r2tI2N27NUqvNNjHQb1gtpXWmXhmeryf2/Rz/fJZVPJhjljR5wx1xsMJLkXAi7Ke | | DGWCFMkqUZc7+vIivyaTBlBqFACZK3WA76D+KcU7wCR4aCL+VLytrJJFZfPn99RD | | Xor2npiGNZHc+iydtGCaVdo7Z4gS5xEWg1v16YuHjtLYckgDNr/MLMZgjYyVIbHq | | /ZxgXqiMBLdBZ+KTsrdWjfcIExLPkpQZBqr5g63UElwB0bk0VvkIkTiEQYeuAU+X | | tAMWhn8KnPerYkmlfssYp5cCB5x3nIo+gDoJxH8n+XE9Y49eZ/LpP/7KL6QiDU49 | | ngVdmldom2pNj2acSj3rp9aavqkJ8Gm1IDl9BqnHs0zp5Ua1wrdyadbtCH0FfF46 | | NCV79NOfjiMDefSCeQx9PogRw9Fr1ts+YW+/bSaW/GfWdBFga7WQv+gMoDL0iCxY | | iai60m0YxLHvlQ1WvUi/fb7c5AWs9kxLet9jsKeQU7aVzghqgCJhEVEXi1V+Xite | | BxJWlVeoYxWoaM/qTwwbnWmmmRXNZK5S7Ti//vIphVgayP/fZAunKOm+RkUDUclU | | SFVY21T+kxOJmb5axGr108nhH9DHZyzeISHRHM+C/Cs6Ue87qW04ho+09cuh4TkD | | XPi9E3cLItVtyYIU9ZupOITv5qfW48/ZWKgdBlYjE4bjBx1rvfFOS43I4iDPwTOM | | 3zrvZGOW7wn7yPjoB6sRkfzJcLSKuvN8IGRTBUc3mo1/FJUc1hzO/dZGGTM148ul | | zAsqG+N9t2T2fa9Y0+2Jt4DNhktuDdDcagZtRFHr+hcupYp87YdzHUdp5imrZCXH | | EYeygoHlXhe0X2+ESHVouARqjFph0w64V3tX/Mh4d3OwDLbY+7q3qwRenIHZ+rcu | | QDoJz1gnAa9OHFc6MwuWNTvLbc7nkDEyBpiczUqVkyY9MXK3jN8+rc89Bf+RMmx7 | | lRfIAw14BIs0GZIWJDG/qxiw5nDEQ2pN9Or4K3IAr7Mb6EbsQvUvHGCQhfUstnRG | | Crib6e7GEq4xxGvmEaBezJL/sywpVaH0sU0N1Qk67QeaNGP87HhCxgHfb9Saa1tD | | JpX8tYp/gVATe9lacaNs7aUgZ0ovXfso/SrOL2aLWBHjO91uVvZB4+AWm1HpaC8U | | 5EIFxktccXG+j0fKkKJNj1HmTGkCn3SjZL1byo9ZlsDCfrLziFaKJUlNBnsK8NQc | | v1j1xEPdvPVUTRPc95hsUX7DScieyJc1oM24F3toMQIAvq9BdmrR3rIAOepnSFNJ | | sDiEUV8PQJckpZL+OfzzHrio6/diPgWISLwhKR5uwI1W1GPpsn7RNWL++71saa9X | | QbCR+AP/k0ouwNNabgJ43b/BQEI/PEDaiE7ETJUHs2Y7DE5qEPOBiowYu5QUWttw | | 6I1nMZygUnw9NA5FuTzDxjuqLJxGw3EhTmaKb+vmCOz4YgpTGWf0fXdOLldS9Ew7 | | psiiPN88xSWUqN+MkwY5ch/wOPl785eyeUJjztebDrRwwYYTbO2LdFDKnyr+CzZf | | C2sSXQsCYZe3m3GegMnxDcmXrBcsLLvOG8JW9ykaWSxOOIy/voFDtLF14trJiGFy | | 2+575wPZKqSFx9B8AaB4KQFvECSI982LeQ/SwVZCvHEe5WRgvZyji0Qe2qC0aGDO | | /reRDmRnG4/0TpaiDDpfkxtXKhdTJPRt461OrGg3RNZG8S49/rVZCeCvAhy3MX0D | | FlHeSp5lWcODf0l4t/LQqbVP6mGvcbV0dtJgOXdx1fttdOIDnYL9d6PjW+m5gclp | | aCmHG0k0RVZqnoIOU5NIQ29sK2njjAnsSUfpGZr5xfVPoair8cU1A3BG9F6W9e/q | | aVLYwqLsf3dhUAmXM0kxfcZZYZk73STci6DpMFsjn8QD3JKkBIhqZOnydgLEdwSI | | M1mAqAM4lx0ySB92UYeTLJxJg5LPdMC8Ok0nbLpPs+zeNviMPDdRZ8DmYpN+zSQx | | jHoLvi1wvKXYd9lT6eBzutR5/re5o4ncpbsM0+0roB0og17V9kJMJa4o4Lcziz6H | | RHmwne0lGIUyKRYkMuUmmxPGvpLVVrWlE5EH1RYhipFQLNJxtF0mzUARhmb5or6w | | BtBeLuEHk3hjXiA/Pj+f/z17yAQdGeuCKdj7Zfiu+3y5uGH14C65YEOE9xIqZ14I | | HZD2DHW/I/PpnNFN4AN3dXe9U0TKY6uLTB6eQGjf1QcSLKbPYW5yZaHYLEQQrk/0 | | myPG3kbDU8jjOoKsYj9Qw0YY6dj2KfiDnS9ARoU4REj37jyh1wyHoA9btTAZ2LZU | | 5o6CjBhq0M0TTP7XwtEDAORQCcwMX2XJ5zslgIjsCfBGynam5nJh1folTHDYM2uF | | VNyt4f7XyH6gUzLXBACvkuZz/Up5ul4sNffUK4HHDaNZ+NjiVFONy2PaTTqdSVMF | | EtsahGYtJqDWb8a0Vox9XZO5nrWKJTTYehcYvtz7yzoQvdiVuZI1FfFofT6zwWJi | | F2r6OJg1xkj4BAcmy3ZaFMVP+coq1TaFV5sj9/woKU2/EsJ5zwKIKOgpwIDIrV7E | | N1wcUApb5IykoOfBQo0PmJL4lYkHwuXStwvwsjGCqPDneI/uQDw/kp/V2CpNSDrg | | fEGaTo0eeDpIkDR8IPKlb498bYnXEoRKiPfsEXpJvY8fDYZvpfBZKE4TGCN+syi2 | | nEpQdfgXOk7A6X0bRkGr1ZpwO6s4G41x8icvaf3aT0x61wv83syXK4mGbaL9jWN2 | | G7O4QQZ0jaNb0JPkH+qzq8d5RusD4jLDR5rWFvXMGCrG+boKiuO8eeFDU2E1EII5 | | LoH+ZwH0+saEuijbJnTyQB1KowSm9E31qK3z0+RiHyoyysJFZu38rlq7TTkBQjzF | | 7+l4KHcU+CaHv5Ok+Q8kxKEHFD4mNTIDlwkGhSVfqyZuT2vAF/b+jhbVm+pnn/Hp | | hpfdMSm6+THf8Myt95uEII1oZetwT+MLZKEaWEXcSj+MkGxxsKecdb/Y76otQi79 | | jC+3Lx526mnGCagVo/BisMEYj9wbH2lhz2G+9FTD0HHZRNmTZlKehBOpDuV6H9cX | | d0SEk2MIDelhA4iiC/flXK04sYU9nnJ9/Kiwre3R5/jbTUajGQgXDjGci5wxOtIJ | | OIrcOedTiDKBDf0pRFZ876xX24HjojndTwZDqtXyPZSW4vQ2DsDlJdWHbc3L1TO3 | | P2c3egq1nQfK+fp7fIRDdob7PvBCrXf7awdGKGdgrP2sCrYiWxth1k2VUpm51jiI | | lL55JsHaEp7Nz+w0UTuSTLekdFxG5DO1OUFL06l/Iyx2fDcdnrlXBEGfqHNpatOU | | 7+wW2TiiPSEvqsvPkq150B+YX02o9GhPpbZ5ajKoIomp0P1Tht4FC4BK700ltdTs | | EFIv3fkxwYkwQACKVL15Oo36ZHhUf69+ejM9BVepkj0x+laJFvjR/We/HwBXcVb2 | | yxhSxwDuv09sEVjZ4a4lBM6F1wYNh2uwe34jssQvCQ2+hv9DgySCZU4OptgjnNl4 | | UgqDmjdrp/FNzFvZJUFVP6sFqlk+F1X57CbdZnzblrTpVl1kkCU/XkrBngSVvbZc | | pHA2infKImRWBLxBTkvsCuchWhUeWi/3RvdxpSl9fYKYYrIoMBRlupArYc1rXFXy | | zOqlg36vwdhr3IVrqULfzD1ELfg73smLsQSFw51vOc0= |

*** Log Out Then Log Back In #+begin_src sh personalize_logout () { /usr/bin/read -n 1 -p "Press any key to continue. " -s if run "Log Out Then Log Back In?" "Cancel" "Log Out"; then osascript -e 'tell app "loginwindow" to «event aevtrlgo»' fi } #+end_src