├── LICENSE ├── mac-setup.command └── readme.org /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /mac-setup.command: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Quick Start 3 | 4 | case "${SHELL}" in 5 | (*zsh) ;; 6 | (*) chsh -s "$(which zsh)"; exit 1 ;; 7 | esac 8 | 9 | # Initialize New Terminal 10 | 11 | if test -z "${1}"; then 12 | osascript - "${0}" << EOF > /dev/null 2>&1 13 | on run { _this } 14 | tell app "Terminal" to do script "source " & quoted form of _this & " 0" 15 | end run 16 | EOF 17 | fi 18 | 19 | # Define Function =ask= 20 | 21 | ask () { 22 | osascript - "${1}" "${2}" "${3}" << EOF 2> /dev/null 23 | on run { _title, _action, _default } 24 | tell app "System Events" to return text returned of (display dialog _title with title _title buttons { "Cancel", _action } default answer _default) 25 | end run 26 | EOF 27 | } 28 | 29 | # Define Function =ask2= 30 | 31 | ask2 () { 32 | osascript - "$1" "$2" "$3" "$4" "$5" "$6" << EOF 2> /dev/null 33 | on run { _text, _title, _cancel, _action, _default, _hidden } 34 | 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) 35 | end run 36 | EOF 37 | } 38 | 39 | # Define Function =p= 40 | 41 | p () { 42 | printf "\n\033[1m\033[34m%s\033[0m\n\n" "${1}" 43 | } 44 | 45 | # Define Function =run= 46 | 47 | run () { 48 | osascript - "${1}" "${2}" "${3}" << EOF 2> /dev/null 49 | on run { _title, _cancel, _action } 50 | 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) 51 | end run 52 | EOF 53 | } 54 | 55 | # Define Function =init= 56 | 57 | init () { 58 | init_sudo 59 | init_cache 60 | init_no_sleep 61 | init_hostname 62 | init_perms 63 | init_maskeep 64 | init_updates 65 | 66 | config_new_account 67 | config_rm_sudoers 68 | } 69 | 70 | if test "${1}" = 0; then 71 | printf "\n$(which init)\n" 72 | fi 73 | 74 | # Define Function =init_paths= 75 | 76 | init_paths () { 77 | test -x "/usr/libexec/path_helper" && \ 78 | eval $(/usr/libexec/path_helper -s) 79 | } 80 | 81 | # Eliminate Prompts for Password 82 | 83 | init_sudo () { 84 | printf "%s\n" "%wheel ALL=(ALL) NOPASSWD: ALL" | \ 85 | sudo tee "/etc/sudoers.d/wheel" > /dev/null && \ 86 | sudo dscl /Local/Default append /Groups/wheel GroupMembership "$(whoami)" 87 | } 88 | 89 | # Select Installation Cache Location 90 | 91 | init_cache () { 92 | grep -q "CACHES" "/etc/zshenv" 2> /dev/null || \ 93 | a=$(osascript << EOF 2> /dev/null 94 | on run 95 | return text 1 through -2 of POSIX path of (choose folder with prompt "Select Installation Cache Location") 96 | end run 97 | EOF 98 | ) && \ 99 | test -d "${a}" || \ 100 | a="${HOME}/Library/Caches/" 101 | 102 | grep -q "CACHES" "/etc/zshenv" 2> /dev/null || \ 103 | printf "%s\n" \ 104 | "export CACHES=\"${a}\"" \ 105 | "export HOMEBREW_CACHE=\"${a}/brew\"" \ 106 | "export BREWFILE=\"${a}/brew/Brewfile\"" | \ 107 | sudo tee -a "/etc/zshenv" > /dev/null 108 | . "/etc/zshenv" 109 | 110 | if test -d "${CACHES}/upd"; then 111 | sudo chown -R "$(whoami)" "/Library/Updates" 112 | rsync -a --delay-updates \ 113 | "${CACHES}/upd/" "/Library/Updates/" 114 | fi 115 | } 116 | 117 | # Set Defaults for Sleep 118 | 119 | init_no_sleep () { 120 | sudo pmset -a sleep 0 121 | sudo pmset -a disksleep 0 122 | } 123 | 124 | # Set Hostname from DNS 125 | 126 | init_hostname () { 127 | a=$(ask2 "Set Computer Name and Hostname" "Set Hostname" "Cancel" "Set Hostname" $(ruby -e "print '$(hostname -s)'.capitalize") "false") 128 | if test -n $a; then 129 | sudo scutil --set ComputerName $(ruby -e "print '$a'.capitalize") 130 | sudo scutil --set HostName $(ruby -e "print '$a'.downcase") 131 | fi 132 | } 133 | 134 | # Set Permissions on Install Destinations 135 | 136 | _dest='/usr/local/bin 137 | /Library/Desktop Pictures 138 | /Library/ColorPickers 139 | /Library/Fonts 140 | /Library/Input Methods 141 | /Library/PreferencePanes 142 | /Library/QuickLook 143 | /Library/Screen Savers 144 | /Library/User Pictures' 145 | 146 | init_perms () { 147 | printf "%s\n" "${_dest}" | \ 148 | while IFS="$(printf '\t')" read d; do 149 | test -d "${d}" || sudo mkdir -p "${d}" 150 | sudo chgrp -R admin "${d}" 151 | sudo chmod -R g+w "${d}" 152 | done 153 | } 154 | 155 | # Install Developer Tools 156 | 157 | init_devtools () { 158 | p="${HOMEBREW_CACHE}/Cask/Command Line Tools (macOS High Sierra version 10.13).pkg" 159 | i="com.apple.pkg.CLTools_SDK_macOS1013" 160 | 161 | if test -f "${p}"; then 162 | if ! pkgutil --pkg-info "${i}" > /dev/null 2>&1; then 163 | sudo installer -pkg "${p}" -target / 164 | fi 165 | else 166 | xcode-select --install 167 | fi 168 | } 169 | 170 | # Install Xcode 171 | 172 | init_xcode () { 173 | if test -f ${HOMEBREW_CACHE}/Cask/xcode*.xip; then 174 | p "Installing Xcode" 175 | dest="${HOMEBREW_CACHE}/Cask/xcode" 176 | if ! test -d "$dest"; then 177 | pkgutil --expand ${HOMEBREW_CACHE}/Cask/xcode*.xip "$dest" 178 | curl --location --silent \ 179 | "https://gist.githubusercontent.com/pudquick/ff412bcb29c9c1fa4b8d/raw/24b25538ea8df8d0634a2a6189aa581ccc6a5b4b/parse_pbzx2.py" | \ 180 | python - "${dest}/Content" 181 | find "${dest}" -empty -name "*.xz" -type f -print0 | \ 182 | xargs -0 -l 1 rm 183 | find "${dest}" -name "*.xz" -print0 | \ 184 | xargs -0 -L 1 gunzip 185 | cat ${dest}/Content.part* > \ 186 | ${dest}/Content.cpio 187 | fi 188 | cd /Applications && \ 189 | sudo cpio -dimu --file=${dest}/Content.cpio 190 | for pkg in /Applications/Xcode*.app/Contents/Resources/Packages/*.pkg; do 191 | sudo installer -pkg "$pkg" -target / 192 | done 193 | x="$(find '/Applications' -maxdepth 1 -regex '.*/Xcode[^ ]*.app' -print -quit)" 194 | if test -n "${x}"; then 195 | sudo xcode-select -s "${x}" 196 | sudo xcodebuild -license accept 197 | fi 198 | fi 199 | } 200 | 201 | # Install macOS Updates 202 | 203 | init_updates () { 204 | sudo softwareupdate --install --all 205 | } 206 | 207 | # Save Mac App Store Packages 208 | # #+begin_example sh 209 | # sudo lsof -c softwareupdated -F -r 2 | sed '/^n\//!d;/com.apple.SoftwareUpdate/!d;s/^n//' 210 | # sudo lsof -c storedownloadd -F -r 2 | sed '/^n\//!d;/com.apple.appstore/!d;s/^n//' 211 | # #+end_example 212 | 213 | _maskeep_launchd='add :KeepAlive bool false 214 | add :Label string com.github.ptb.maskeep 215 | add :ProcessType string Background 216 | add :Program string /usr/local/bin/maskeep 217 | add :RunAtLoad bool true 218 | add :StandardErrorPath string /dev/stderr 219 | add :StandardOutPath string /dev/stdout 220 | add :UserName string root 221 | add :WatchPaths array 222 | add :WatchPaths:0 string $(sudo find '"'"'/private/var/folders'"'"' -name '"'"'com.apple.SoftwareUpdate'"'"' -type d -user _softwareupdate -print -quit 2> /dev/null) 223 | add :WatchPaths:1 string $(sudo -u \\#501 -- sh -c '"'"'getconf DARWIN_USER_CACHE_DIR'"'"' 2> /dev/null)com.apple.appstore 224 | add :WatchPaths:2 string $(sudo -u \\#502 -- sh -c '"'"'getconf DARWIN_USER_CACHE_DIR'"'"' 2> /dev/null)com.apple.appstore 225 | add :WatchPaths:3 string $(sudo -u \\#503 -- sh -c '"'"'getconf DARWIN_USER_CACHE_DIR'"'"' 2> /dev/null)com.apple.appstore 226 | add :WatchPaths:4 string /Library/Updates' 227 | 228 | init_maskeep () { 229 | sudo softwareupdate --reset-ignored > /dev/null 230 | 231 | cat << EOF > "/usr/local/bin/maskeep" 232 | #!/bin/sh 233 | 234 | asdir="/Library/Caches/storedownloadd" 235 | as1="\$(sudo -u \\#501 -- sh -c 'getconf DARWIN_USER_CACHE_DIR' 2> /dev/null)com.apple.appstore" 236 | as2="\$(sudo -u \\#502 -- sh -c 'getconf DARWIN_USER_CACHE_DIR' 2> /dev/null)com.apple.appstore" 237 | as3="\$(sudo -u \\#503 -- sh -c 'getconf DARWIN_USER_CACHE_DIR' 2> /dev/null)com.apple.appstore" 238 | upd="/Library/Updates" 239 | sudir="/Library/Caches/softwareupdated" 240 | su="\$(sudo find '/private/var/folders' -name 'com.apple.SoftwareUpdate' -type d -user _softwareupdate 2> /dev/null)" 241 | 242 | for i in 1 2 3 4 5; do 243 | mkdir -m a=rwxt -p "\$asdir" 244 | for as in "\$as1" "\$as2" "\$as3" "\$upd"; do 245 | test -d "\$as" && \ 246 | find "\${as}" -type d -print | \\ 247 | while read a; do 248 | b="\${asdir}/\$(basename \$a)" 249 | mkdir -p "\${b}" 250 | find "\${a}" -type f -print | \\ 251 | while read c; do 252 | d="\$(basename \$c)" 253 | test -e "\${b}/\${d}" || \\ 254 | ln "\${c}" "\${b}/\${d}" && \\ 255 | chmod 666 "\${b}/\${d}" 256 | done 257 | done 258 | done 259 | 260 | mkdir -m a=rwxt -p "\${sudir}" 261 | find "\${su}" -name "*.tmp" -type f -print | \\ 262 | while read a; do 263 | d="\$(basename \$a)" 264 | test -e "\${sudir}/\${d}.xar" || 265 | ln "\${a}" "\${sudir}/\${d}.xar" && \\ 266 | chmod 666 "\${sudir}/\${d}.xar" 267 | done 268 | 269 | sleep 1 270 | done 271 | 272 | exit 0 273 | EOF 274 | 275 | chmod a+x "/usr/local/bin/maskeep" 276 | rehash 277 | 278 | config_launchd "/Library/LaunchDaemons/com.github.ptb.maskeep.plist" "$_maskeep_launchd" "sudo" "" 279 | } 280 | 281 | # Define Function =install= 282 | 283 | install () { 284 | install_macos_sw 285 | install_node_sw 286 | install_perl_sw 287 | install_python_sw 288 | install_ruby_sw 289 | 290 | which config 291 | } 292 | 293 | # Install macOS Software with =brew= 294 | 295 | install_macos_sw () { 296 | p "Installing macOS Software" 297 | install_paths 298 | install_brew 299 | install_brewfile_taps 300 | install_brewfile_brew_pkgs 301 | install_brewfile_cask_args 302 | install_brewfile_cask_pkgs 303 | install_brewfile_mas_apps 304 | 305 | x=$(find '/Applications' -maxdepth 1 -regex '.*/Xcode[^ ]*.app' -print -quit) 306 | if test -n "$x"; then 307 | sudo xcode-select -s "$x" 308 | sudo xcodebuild -license accept 309 | fi 310 | 311 | brew bundle --file="${BREWFILE}" 312 | 313 | x=$(find '/Applications' -maxdepth 1 -regex '.*/Xcode[^ ]*.app' -print -quit) 314 | if test -n "$x"; then 315 | sudo xcode-select -s "$x" 316 | sudo xcodebuild -license accept 317 | fi 318 | 319 | install_links 320 | sudo xattr -rd "com.apple.quarantine" "/Applications" > /dev/null 2>&1 321 | sudo chmod -R go=u-w "/Applications" > /dev/null 2>&1 322 | } 323 | 324 | # Add =/usr/local/bin/sbin= to Default Path 325 | 326 | install_paths () { 327 | if ! grep -Fq "/usr/local/sbin" /etc/paths; then 328 | sudo sed -i "" -e "/\/usr\/sbin/{x;s/$/\/usr\/local\/sbin/;G;}" /etc/paths 329 | fi 330 | } 331 | 332 | # Install Homebrew Package Manager 333 | 334 | install_brew () { 335 | if ! which brew > /dev/null; then 336 | ruby -e \ 337 | "$(curl -Ls 'https://github.com/Homebrew/install/raw/master/install')" \ 338 | < /dev/null > /dev/null 2>&1 339 | fi 340 | printf "" > "${BREWFILE}" 341 | brew analytics off 342 | brew update 343 | brew doctor 344 | brew tap "homebrew/bundle" 345 | } 346 | 347 | # Add Homebrew Taps to Brewfile 348 | 349 | _taps='caskroom/cask 350 | caskroom/fonts 351 | caskroom/versions 352 | homebrew/bundle 353 | homebrew/command-not-found 354 | homebrew/nginx 355 | homebrew/php 356 | homebrew/services 357 | ptb/custom 358 | railwaycat/emacsmacport' 359 | 360 | install_brewfile_taps () { 361 | printf "%s\n" "${_taps}" | \ 362 | while IFS="$(printf '\t')" read tap; do 363 | printf 'tap "%s"\n' "${tap}" >> "${BREWFILE}" 364 | done 365 | printf "\n" >> "${BREWFILE}" 366 | } 367 | 368 | # Add Homebrew Packages to Brewfile 369 | 370 | _pkgs='aspell 371 | bash 372 | certbot 373 | chromedriver 374 | coreutils 375 | dash 376 | duti 377 | e2fsprogs 378 | fasd 379 | fdupes 380 | gawk 381 | getmail 382 | git 383 | git-flow 384 | git-lfs 385 | gnu-sed 386 | gnupg 387 | gpac 388 | httpie 389 | hub 390 | ievms 391 | imagemagick 392 | mas 393 | mercurial 394 | mp4v2 395 | mtr 396 | nmap 397 | node 398 | nodenv 399 | openssl 400 | p7zip 401 | perl-build 402 | pinentry-mac 403 | plenv 404 | pyenv 405 | rbenv 406 | rsync 407 | selenium-server-standalone 408 | shellcheck 409 | sleepwatcher 410 | sqlite 411 | stow 412 | syncthing 413 | syncthing-inotify 414 | tag 415 | terminal-notifier 416 | the_silver_searcher 417 | trash 418 | unrar 419 | vcsh 420 | vim 421 | yarn 422 | youtube-dl 423 | zsh 424 | zsh-syntax-highlighting 425 | zsh-history-substring-search 426 | homebrew/php/php71 427 | ptb/custom/dovecot 428 | ptb/custom/ffmpeg 429 | sdl2 430 | zimg 431 | x265 432 | webp 433 | wavpack 434 | libvorbis 435 | libvidstab 436 | two-lame 437 | theora 438 | tesseract 439 | speex 440 | libssh 441 | libsoxr 442 | snappy 443 | schroedinger 444 | rubberband 445 | rtmpdump 446 | opus 447 | openh264 448 | opencore-amr 449 | libmodplug 450 | libgsm 451 | game-music-emu 452 | fontconfig 453 | fdk-aac 454 | libcaca 455 | libbs2b 456 | libbluray 457 | libass 458 | chromaprint 459 | ptb/custom/nginx-full' 460 | 461 | install_brewfile_brew_pkgs () { 462 | printf "%s\n" "${_pkgs}" | \ 463 | while IFS="$(printf '\t')" read pkg; do 464 | # printf 'brew "%s", args: [ "force-bottle" ]\n' "${pkg}" >> "${BREWFILE}" 465 | printf 'brew "%s"\n' "${pkg}" >> "${BREWFILE}" 466 | done 467 | printf "\n" >> "${BREWFILE}" 468 | } 469 | 470 | # Add Caskroom Options to Brewfile 471 | 472 | _args='colorpickerdir /Library/ColorPickers 473 | fontdir /Library/Fonts 474 | input_methoddir /Library/Input Methods 475 | prefpanedir /Library/PreferencePanes 476 | qlplugindir /Library/QuickLook 477 | screen_saverdir /Library/Screen Savers' 478 | 479 | install_brewfile_cask_args () { 480 | printf 'cask_args \' >> "${BREWFILE}" 481 | printf "%s\n" "${_args}" | \ 482 | while IFS="$(printf '\t')" read arg dir; do 483 | printf '\n %s: "%s",' "${arg}" "${dir}" >> "${BREWFILE}" 484 | done 485 | sed -i "" -e '$ s/,/\ 486 | /' "${BREWFILE}" 487 | } 488 | 489 | # Add Homebrew Casks to Brewfile 490 | 491 | _casks='java 492 | xquartz 493 | adium 494 | alfred 495 | arduino 496 | atom 497 | bbedit 498 | betterzip 499 | bitbar 500 | caffeine 501 | carbon-copy-cloner 502 | charles 503 | dash 504 | dropbox 505 | exifrenamer 506 | find-empty-folders 507 | firefox 508 | github-desktop 509 | gitup 510 | google-chrome 511 | hammerspoon 512 | handbrake 513 | hermes 514 | imageoptim 515 | inkscape 516 | integrity 517 | istat-menus 518 | iterm2 519 | jubler 520 | little-snitch 521 | machg 522 | menubar-countdown 523 | meteorologist 524 | moom 525 | mp4tools 526 | musicbrainz-picard 527 | namechanger 528 | nvalt 529 | nzbget 530 | nzbvortex 531 | openemu 532 | opera 533 | pacifist 534 | platypus 535 | plex-media-server 536 | qlstephen 537 | quitter 538 | radarr 539 | rescuetime 540 | resilio-sync 541 | scrivener 542 | sizeup 543 | sketch 544 | sketchup 545 | skitch 546 | skype 547 | slack 548 | sonarr 549 | sonarr-menu 550 | sourcetree 551 | steermouse 552 | subler 553 | sublime-text 554 | the-unarchiver 555 | time-sink 556 | torbrowser 557 | tower 558 | unrarx 559 | vimr 560 | vlc 561 | vmware-fusion 562 | wireshark 563 | xld 564 | caskroom/fonts/font-inconsolata-lgc 565 | caskroom/versions/transmit4 566 | ptb/custom/adobe-creative-cloud-2014 567 | ptb/custom/blankscreen 568 | ptb/custom/composer 569 | ptb/custom/enhanced-dictation 570 | ptb/custom/ipmenulet 571 | ptb/custom/pcalc-3 572 | ptb/custom/sketchup-pro 573 | ptb/custom/text-to-speech-alex 574 | ptb/custom/text-to-speech-allison 575 | ptb/custom/text-to-speech-samantha 576 | ptb/custom/text-to-speech-tom 577 | railwaycat/emacsmacport/emacs-mac-spacemacs-icon' 578 | 579 | install_brewfile_cask_pkgs () { 580 | printf "%s\n" "${_casks}" | \ 581 | while IFS="$(printf '\t')" read cask; do 582 | printf 'cask "%s"\n' "${cask}" >> "${BREWFILE}" 583 | done 584 | printf "\n" >> "${BREWFILE}" 585 | } 586 | 587 | # Add App Store Packages to Brewfile 588 | 589 | _mas='1Password 443987910 590 | Affinity Photo 824183456 591 | Coffitivity 659901392 592 | Duplicate Photos Fixer Pro 963642514 593 | Growl 467939042 594 | HardwareGrowler 475260933 595 | I Love Stars 402642760 596 | Icon Slate 439697913 597 | Justnotes 511230166 598 | Keynote 409183694 599 | Metanota Pro 515250764 600 | Numbers 409203825 601 | Pages 409201541 602 | WiFi Explorer 494803304 603 | Xcode 497799835' 604 | 605 | install_brewfile_mas_apps () { 606 | open "/Applications/App Store.app" 607 | run "Sign in to the App Store with your Apple ID" "Cancel" "OK" 608 | 609 | MASDIR="$(getconf DARWIN_USER_CACHE_DIR)com.apple.appstore" 610 | sudo chown -R "$(whoami)" "${MASDIR}" 611 | rsync -a --delay-updates \ 612 | "${CACHES}/mas/" "${MASDIR}/" 613 | 614 | printf "%s\n" "${_mas}" | \ 615 | while IFS="$(printf '\t')" read app id; do 616 | printf 'mas "%s", id: %s\n' "${app}" "${id}" >> "${BREWFILE}" 617 | done 618 | } 619 | 620 | # Link System Utilities to Applications 621 | 622 | _links='/System/Library/CoreServices/Applications 623 | /Applications/Xcode.app/Contents/Applications 624 | /Applications/Xcode.app/Contents/Developer/Applications 625 | /Applications/Xcode-beta.app/Contents/Applications 626 | /Applications/Xcode-beta.app/Contents/Developer/Applications' 627 | 628 | install_links () { 629 | printf "%s\n" "${_links}" | \ 630 | while IFS="$(printf '\t')" read link; do 631 | find "${link}" -maxdepth 1 -name "*.app" -type d -print0 2> /dev/null | \ 632 | xargs -0 -I {} -L 1 ln -s "{}" "/Applications" 2> /dev/null 633 | done 634 | } 635 | 636 | # Install Node.js with =nodenv= 637 | 638 | _npm='eslint 639 | eslint-config-cleanjs 640 | eslint-plugin-better 641 | eslint-plugin-fp 642 | eslint-plugin-import 643 | eslint-plugin-json 644 | eslint-plugin-promise 645 | eslint-plugin-standard 646 | gatsby 647 | json 648 | sort-json' 649 | 650 | install_node_sw () { 651 | if which nodenv > /dev/null; then 652 | NODENV_ROOT="/usr/local/node" && export NODENV_ROOT 653 | 654 | sudo mkdir -p "$NODENV_ROOT" 655 | sudo chown -R "$(whoami):admin" "$NODENV_ROOT" 656 | 657 | p "Installing Node.js with nodenv" 658 | git clone https://github.com/nodenv/node-build-update-defs.git \ 659 | "$(nodenv root)"/plugins/node-build-update-defs 660 | nodenv update-version-defs > /dev/null 661 | 662 | nodenv install --skip-existing 8.7.0 663 | nodenv global 8.7.0 664 | 665 | grep -q "${NODENV_ROOT}" "/etc/paths" || \ 666 | sudo sed -i "" -e "1i\\ 667 | ${NODENV_ROOT}/shims 668 | " "/etc/paths" 669 | 670 | init_paths 671 | rehash 672 | fi 673 | 674 | T=$(printf '\t') 675 | 676 | printf "%s\n" "$_npm" | \ 677 | while IFS="$T" read pkg; do 678 | npm install --global "$pkg" 679 | done 680 | 681 | rehash 682 | } 683 | 684 | # Install Perl 5 with =plenv= 685 | 686 | install_perl_sw () { 687 | if which plenv > /dev/null; then 688 | PLENV_ROOT="/usr/local/perl" && export PLENV_ROOT 689 | 690 | sudo mkdir -p "$PLENV_ROOT" 691 | sudo chown -R "$(whoami):admin" "$PLENV_ROOT" 692 | 693 | p "Installing Perl 5 with plenv" 694 | plenv install 5.26.0 > /dev/null 2>&1 695 | plenv global 5.26.0 696 | 697 | grep -q "${PLENV_ROOT}" "/etc/paths" || \ 698 | sudo sed -i "" -e "1i\\ 699 | ${PLENV_ROOT}/shims 700 | " "/etc/paths" 701 | 702 | init_paths 703 | rehash 704 | fi 705 | } 706 | 707 | # Install Python with =pyenv= 708 | 709 | install_python_sw () { 710 | if which pyenv > /dev/null; then 711 | CFLAGS="-I$(brew --prefix openssl)/include" && export CFLAGS 712 | LDFLAGS="-L$(brew --prefix openssl)/lib" && export LDFLAGS 713 | PYENV_ROOT="/usr/local/python" && export PYENV_ROOT 714 | 715 | sudo mkdir -p "$PYENV_ROOT" 716 | sudo chown -R "$(whoami):admin" "$PYENV_ROOT" 717 | 718 | p "Installing Python 2 with pyenv" 719 | pyenv install --skip-existing 2.7.13 720 | p "Installing Python 3 with pyenv" 721 | pyenv install --skip-existing 3.6.2 722 | pyenv global 2.7.13 723 | 724 | grep -q "${PYENV_ROOT}" "/etc/paths" || \ 725 | sudo sed -i "" -e "1i\\ 726 | ${PYENV_ROOT}/shims 727 | " "/etc/paths" 728 | 729 | init_paths 730 | rehash 731 | 732 | pip install --upgrade "pip" "setuptools" 733 | 734 | # Reference: https://github.com/mdhiggins/sickbeard_mp4_automator 735 | pip install --upgrade "babelfish" "guessit<2" "qtfaststart" "requests" "stevedore==1.19.1" "subliminal<2" 736 | pip install --upgrade "requests-cache" "requests[security]" 737 | 738 | # Reference: https://github.com/pixelb/crudini 739 | pip install --upgrade "crudini" 740 | fi 741 | } 742 | 743 | # Install Ruby with =rbenv= 744 | 745 | install_ruby_sw () { 746 | if which rbenv > /dev/null; then 747 | RBENV_ROOT="/usr/local/ruby" && export RBENV_ROOT 748 | 749 | sudo mkdir -p "$RBENV_ROOT" 750 | sudo chown -R "$(whoami):admin" "$RBENV_ROOT" 751 | 752 | p "Installing Ruby with rbenv" 753 | rbenv install --skip-existing 2.4.2 754 | rbenv global 2.4.2 755 | 756 | grep -q "${RBENV_ROOT}" "/etc/paths" || \ 757 | sudo sed -i "" -e "1i\\ 758 | ${RBENV_ROOT}/shims 759 | " "/etc/paths" 760 | 761 | init_paths 762 | rehash 763 | 764 | printf "%s\n" \ 765 | "gem: --no-document" | \ 766 | tee "${HOME}/.gemrc" > /dev/null 767 | 768 | gem update --system > /dev/null 769 | 770 | trash "$(which rdoc)" 771 | trash "$(which ri)" 772 | gem update 773 | 774 | gem install bundler 775 | fi 776 | } 777 | 778 | # Define Function =config= 779 | 780 | config () { 781 | config_admin_req 782 | config_bbedit 783 | config_certbot 784 | config_desktop 785 | config_dovecot 786 | config_emacs 787 | config_environment 788 | config_ipmenulet 789 | config_istatmenus 790 | config_nginx 791 | config_openssl 792 | config_sysprefs 793 | config_zsh 794 | config_guest 795 | 796 | which custom 797 | } 798 | 799 | # Define Function =config_defaults= 800 | 801 | config_defaults () { 802 | printf "%s\n" "${1}" | \ 803 | while IFS="$(printf '\t')" read domain key type value host; do 804 | ${2} defaults ${host} write ${domain} "${key}" ${type} "${value}" 805 | done 806 | } 807 | 808 | # Define Function =config_plist= 809 | 810 | T="$(printf '\t')" 811 | 812 | config_plist () { 813 | printf "%s\n" "$1" | \ 814 | while IFS="$T" read command entry type value; do 815 | case "$value" in 816 | (\$*) 817 | $4 /usr/libexec/PlistBuddy "$2" \ 818 | -c "$command '${3}${entry}' $type '$(eval echo \"$value\")'" 2> /dev/null ;; 819 | (*) 820 | $4 /usr/libexec/PlistBuddy "$2" \ 821 | -c "$command '${3}${entry}' $type '$value'" 2> /dev/null ;; 822 | esac 823 | done 824 | } 825 | 826 | # Define Function =config_launchd= 827 | 828 | config_launchd () { 829 | test -d "$(dirname $1)" || \ 830 | $3 mkdir -p "$(dirname $1)" 831 | 832 | test -f "$1" && \ 833 | $3 launchctl unload "$1" && \ 834 | $3 rm -f "$1" 835 | 836 | config_plist "$2" "$1" "$4" "$3" && \ 837 | $3 plutil -convert xml1 "$1" && \ 838 | $3 launchctl load "$1" 839 | } 840 | 841 | # Mark Applications Requiring Administrator Account 842 | 843 | _admin_req='Carbon Copy Cloner.app 844 | Charles.app 845 | Composer.app 846 | Dropbox.app 847 | iStat Menus.app 848 | Moom.app 849 | VMware Fusion.app 850 | Wireshark.app' 851 | 852 | config_admin_req () { 853 | printf "%s\n" "${_admin_req}" | \ 854 | while IFS="$(printf '\t')" read app; do 855 | sudo tag -a "Red, admin" "/Applications/${app}" 856 | done 857 | } 858 | 859 | # Configure BBEdit 860 | 861 | config_bbedit () { 862 | if test -d "/Applications/BBEdit.app"; then 863 | test -f "/usr/local/bin/bbdiff" || \ 864 | ln /Applications/BBEdit.app/Contents/Helpers/bbdiff /usr/local/bin/bbdiff && \ 865 | ln /Applications/BBEdit.app/Contents/Helpers/bbedit_tool /usr/local/bin/bbedit && \ 866 | ln /Applications/BBEdit.app/Contents/Helpers/bbfind /usr/local/bin/bbfind && \ 867 | ln /Applications/BBEdit.app/Contents/Helpers/bbresults /usr/local/bin/bbresults 868 | fi 869 | } 870 | 871 | # Configure Let’s Encrypt 872 | 873 | config_certbot () { 874 | test -d "/etc/letsencrypt" || \ 875 | sudo mkdir -p /etc/letsencrypt 876 | 877 | sudo tee "/etc/letsencrypt/cli.ini" << EOF > /dev/null 878 | agree-tos = True 879 | authenticator = standalone 880 | eff-email = True 881 | manual-public-ip-logging-ok = True 882 | nginx-ctl = $(which nginx) 883 | nginx-server-root = /usr/local/etc/nginx 884 | preferred-challenges = tls-sni-01 885 | keep-until-expiring = True 886 | rsa-key-size = 4096 887 | text = True 888 | EOF 889 | 890 | if ! test -e "/etc/letsencrypt/.git"; then 891 | a=$(ask "Existing Let’s Encrypt Git Repository Path or URL?" "Clone Repository" "") 892 | test -n "$a" && \ 893 | case "$a" in 894 | (/*) 895 | sudo tee "/etc/letsencrypt/.git" << EOF > /dev/null ;; 896 | gitdir: $a 897 | EOF 898 | (*) 899 | sudo git -C "/etc/letsencrypt" remote add origin "$a" 900 | sudo git -C "/etc/letsencrypt" fetch origin master ;; 901 | esac 902 | sudo git -C "/etc/letsencrypt" reset --hard 903 | sudo git checkout -f -b master HEAD 904 | fi 905 | 906 | sudo launchctl unload /Library/LaunchDaemons/org.nginx.nginx.plist 2> /dev/null 907 | sudo certbot renew 908 | 909 | while true; do 910 | test -n "$1" && server_name="$1" || \ 911 | server_name="$(ask 'New SSL Server: Server Name?' 'Create Server' 'example.com')" 912 | test -n "$server_name" || break 913 | 914 | test -n "$2" && proxy_address="$2" || \ 915 | proxy_address="$(ask "Proxy Address for $server_name?" 'Set Address' 'http://127.0.0.1:80')" 916 | 917 | sudo certbot certonly --domain $server_name 918 | 919 | key1="$(openssl x509 -pubkey < /etc/letsencrypt/live/$server_name/fullchain.pem | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64)" 920 | 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)" 921 | key3="$(curl -s https://letsencrypt.org/certs/isrgrootx1.pem | openssl x509 -pubkey | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64)" 922 | 923 | pkp="$(printf "add_header Public-Key-Pins 'pin-sha256=\"%s\"; pin-sha256=\"%s\"; pin-sha256=\"%s\"; max-age=2592000;';\n" $key1 $key2 $key3)" 924 | 925 | cat << EOF > "/usr/local/etc/nginx/servers/$server_name.conf" 926 | server { 927 | server_name $server_name; 928 | 929 | location / { 930 | proxy_pass $proxy_address; 931 | } 932 | 933 | ssl_certificate /etc/letsencrypt/live/$server_name/fullchain.pem; 934 | ssl_certificate_key /etc/letsencrypt/live/$server_name/privkey.pem; 935 | ssl_trusted_certificate /etc/letsencrypt/live/$server_name/chain.pem; 936 | 937 | $pkp 938 | 939 | add_header Content-Security-Policy "upgrade-insecure-requests;"; 940 | add_header Referrer-Policy "strict-origin"; 941 | add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" always; 942 | add_header X-Content-Type-Options nosniff; 943 | add_header X-Frame-Options DENY; 944 | add_header X-Robots-Tag none; 945 | add_header X-XSS-Protection "1; mode=block"; 946 | 947 | listen 443 ssl http2; 948 | listen [::]:443 ssl http2; 949 | 950 | ssl_stapling on; 951 | ssl_stapling_verify on; 952 | 953 | # https://securityheaders.io/?q=https%3A%2F%2F$server_name&hide=on&followRedirects=on 954 | # https://www.ssllabs.com/ssltest/analyze.html?d=$server_name&hideResults=on&latest 955 | } 956 | EOF 957 | unset argv 958 | done 959 | 960 | sudo launchctl load /Library/LaunchDaemons/org.nginx.nginx.plist 961 | } 962 | 963 | # Configure Default Apps 964 | 965 | config_default_apps () { 966 | true 967 | } 968 | 969 | # Configure Desktop Picture 970 | 971 | config_desktop () { 972 | sudo rm -f "/Library/Caches/com.apple.desktop.admin.png" 973 | 974 | base64 -D << EOF > "/Library/Desktop Pictures/Solid Colors/Solid Black.png" 975 | iVBORw0KGgoAAAANSUhEUgAAAIAAAACAAQAAAADrRVxmAAAAGElEQVR4AWOgMxgFo2AUjIJRMApGwSgAAAiAAAH3bJXBAAAAAElFTkSuQmCC 976 | EOF 977 | } 978 | 979 | # Configure Dovecot 980 | 981 | config_dovecot () { 982 | if which /usr/local/sbin/dovecot > /dev/null; then 983 | if ! run "Configure Dovecot Email Server?" "Configure Server" "Cancel"; then 984 | sudo tee "/usr/local/etc/dovecot/dovecot.conf" << EOF > /dev/null 985 | auth_mechanisms = cram-md5 986 | default_internal_user = _dovecot 987 | default_login_user = _dovenull 988 | log_path = /dev/stderr 989 | mail_location = maildir:~/.mail:INBOX=~/.mail/Inbox:LAYOUT=fs 990 | mail_plugins = zlib 991 | maildir_copy_with_hardlinks = no 992 | namespace { 993 | inbox = yes 994 | mailbox Drafts { 995 | auto = subscribe 996 | special_use = \Drafts 997 | } 998 | mailbox Junk { 999 | auto = subscribe 1000 | special_use = \Junk 1001 | } 1002 | mailbox Sent { 1003 | auto = subscribe 1004 | special_use = \Sent 1005 | } 1006 | mailbox "Sent Messages" { 1007 | special_use = \Sent 1008 | } 1009 | mailbox Trash { 1010 | auto = subscribe 1011 | special_use = \Trash 1012 | } 1013 | separator = . 1014 | type = private 1015 | } 1016 | passdb { 1017 | args = scheme=cram-md5 /usr/local/etc/dovecot/cram-md5.pwd 1018 | driver = passwd-file 1019 | 1020 | # driver = pam 1021 | 1022 | # args = nopassword=y 1023 | # driver = static 1024 | } 1025 | plugin { 1026 | sieve = file:/Users/%u/.sieve 1027 | sieve_plugins = sieve_extprograms 1028 | zlib_save = bz2 1029 | zlib_save_level = 9 1030 | } 1031 | protocols = imap 1032 | service imap-login { 1033 | inet_listener imap { 1034 | port = 0 1035 | } 1036 | } 1037 | ssl = required 1038 | ssl_cipher_list = ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS:!AES128 1039 | ssl_dh_parameters_length = 4096 1040 | ssl_prefer_server_ciphers = yes 1041 | ssl_protocols = !SSLv2 !SSLv3 1042 | userdb { 1043 | driver = passwd 1044 | } 1045 | protocol lda { 1046 | mail_plugins = sieve zlib 1047 | } 1048 | 1049 | # auth_debug = yes 1050 | # auth_debug_passwords = yes 1051 | # auth_verbose = yes 1052 | # auth_verbose_passwords = plain 1053 | # mail_debug = yes 1054 | # verbose_ssl = yes 1055 | EOF 1056 | 1057 | MAILADM="$(ask 'Email: Postmaster Email?' 'Set Email' "$(whoami)@$(hostname -f | cut -d. -f2-)")" 1058 | MAILSVR="$(ask 'Email: Server Hostname for DNS?' 'Set Hostname' "$(hostname -f)")" 1059 | sudo certbot certonly --domain $MAILSVR 1060 | printf "%s\n" \ 1061 | "postmaster_address = '${MAILADM}'" \ 1062 | "ssl_cert = /dev/null 1065 | 1066 | if test ! -f "/usr/local/etc/dovecot/cram-md5.pwd"; then 1067 | while true; do 1068 | MAILUSR="$(ask 'New Email Account: User Name?' 'Create Account' "$(whoami)")" 1069 | test -n "${MAILUSR}" || break 1070 | doveadm pw | \ 1071 | sed -e "s/^/${MAILUSR}:/" | \ 1072 | sudo tee -a "/usr/local/etc/dovecot/cram-md5.pwd" 1073 | done 1074 | sudo chown _dovecot "/usr/local/etc/dovecot/cram-md5.pwd" 1075 | sudo chmod go= "/usr/local/etc/dovecot/cram-md5.pwd" 1076 | fi 1077 | 1078 | sudo tee "/etc/pam.d/dovecot" << EOF > /dev/null 1079 | auth required pam_opendirectory.so try_first_pass 1080 | account required pam_nologin.so 1081 | account required pam_opendirectory.so 1082 | password required pam_opendirectory.so 1083 | EOF 1084 | 1085 | sudo brew services start dovecot 1086 | 1087 | cat << EOF > "/usr/local/bin/imaptimefix.py" 1088 | #!/usr/bin/env python 1089 | 1090 | # Author: Zachary Cutlip <@zcutlip> 1091 | # http://shadow-file.blogspot.com/2012/06/parsing-email-and-fixing-timestamps-in.html 1092 | # Updated: Peter T Bosse II <@ptb> 1093 | # Purpose: A program to fix sorting of mail messages that have been POPed or 1094 | # IMAPed in the wrong order. Compares time stamp sent and timestamp 1095 | # received on an RFC822-formatted email message, and renames the 1096 | # message file using the most recent timestamp that is no more than 1097 | # 24 hours after the date sent. Updates the file's atime/mtime with 1098 | # the timestamp, as well. Does not modify the headers or contents of 1099 | # the message. 1100 | 1101 | from bz2 import BZ2File 1102 | from email import message_from_string 1103 | from email.utils import mktime_tz, parsedate_tz 1104 | from os import rename, utime, walk 1105 | from os.path import abspath, isdir, isfile, join 1106 | from re import compile, match 1107 | from sys import argv 1108 | 1109 | if isdir(argv[1]): 1110 | e = compile("([0-9]+)(\..*$)") 1111 | 1112 | for a, b, c in walk(argv[1]): 1113 | for d in c: 1114 | if e.match(d): 1115 | f = message_from_string(BZ2File(join(a, d)).read()) 1116 | g = mktime_tz(parsedate_tz(f.get("Date"))) 1117 | 1118 | h = 0 1119 | for i in f.get_all("Received", []): 1120 | j = i.split(";")[-1] 1121 | if parsedate_tz(j): 1122 | k = mktime_tz(parsedate_tz(j)) 1123 | if (k - g) > (60*60*24): 1124 | continue 1125 | 1126 | h = k 1127 | break 1128 | 1129 | if (h < 1): 1130 | h = g 1131 | 1132 | l = e.match(d) 1133 | 1134 | if len(l.groups()) == 2: 1135 | m = str(int(h)) + l.groups()[1] 1136 | if not isfile(join(a, m)): 1137 | rename(join(a, d), join(a, m)) 1138 | utime(join(a, m), (h, h)) 1139 | EOF 1140 | chmod +x /usr/local/bin/imaptimefix.py 1141 | fi 1142 | fi 1143 | } 1144 | 1145 | # Configure Emacs 1146 | 1147 | config_emacs () { 1148 | test -f "/usr/local/bin/vi" || \ 1149 | cat << EOF > "/usr/local/bin/vi" 1150 | #!/bin/sh 1151 | 1152 | if [ -e "/Applications/Emacs.app" ]; then 1153 | t=() 1154 | 1155 | if [ \${#@} -ne 0 ]; then 1156 | while IFS= read -r file; do 1157 | [ ! -f "\$file" ] && t+=("\$file") && /usr/bin/touch "\$file" 1158 | file=\$(echo \$(cd \$(dirname "\$file") && pwd -P)/\$(basename "\$file")) 1159 | \$(/usr/bin/osascript <<-END 1160 | if application "Emacs.app" is running then 1161 | tell application id (id of application "Emacs.app") to open POSIX file "\$file" 1162 | else 1163 | tell application ((path to applications folder as text) & "Emacs.app") 1164 | activate 1165 | open POSIX file "\$file" 1166 | end tell 1167 | end if 1168 | END 1169 | ) & # Note: END on the previous line may be indented with tabs but not spaces 1170 | done <<<"\$(printf '%s\n' "\$@")" 1171 | fi 1172 | 1173 | if [ ! -z "\$t" ]; then 1174 | \$(/bin/sleep 10; for file in "\${t[@]}"; do 1175 | [ ! -s "\$file" ] && /bin/rm "\$file"; 1176 | done) & 1177 | fi 1178 | else 1179 | vim -No "\$@" 1180 | fi 1181 | EOF 1182 | 1183 | chmod a+x /usr/local/bin/vi 1184 | rehash 1185 | } 1186 | 1187 | # Configure Environment Variables 1188 | 1189 | _environment_defaults='/Library/LaunchAgents/environment.user KeepAlive -bool false 1190 | /Library/LaunchAgents/environment.user Label -string environment.user 1191 | /Library/LaunchAgents/environment.user ProcessType -string Background 1192 | /Library/LaunchAgents/environment.user Program -string /etc/environment.sh 1193 | /Library/LaunchAgents/environment.user RunAtLoad -bool true 1194 | /Library/LaunchAgents/environment.user WatchPaths -array-add /etc/environment.sh 1195 | /Library/LaunchAgents/environment.user WatchPaths -array-add /etc/paths 1196 | /Library/LaunchAgents/environment.user WatchPaths -array-add /etc/paths.d 1197 | /Library/LaunchDaemons/environment KeepAlive -bool false 1198 | /Library/LaunchDaemons/environment Label -string environment 1199 | /Library/LaunchDaemons/environment ProcessType -string Background 1200 | /Library/LaunchDaemons/environment Program -string /etc/environment.sh 1201 | /Library/LaunchDaemons/environment RunAtLoad -bool true 1202 | /Library/LaunchDaemons/environment WatchPaths -array-add /etc/environment.sh 1203 | /Library/LaunchDaemons/environment WatchPaths -array-add /etc/paths 1204 | /Library/LaunchDaemons/environment WatchPaths -array-add /etc/paths.d ' 1205 | config_environment () { 1206 | sudo tee "/etc/environment.sh" << 'EOF' > /dev/null 1207 | #!/bin/sh 1208 | 1209 | set -e 1210 | 1211 | if test -x /usr/libexec/path_helper; then 1212 | export PATH="" 1213 | eval `/usr/libexec/path_helper -s` 1214 | launchctl setenv PATH $PATH 1215 | fi 1216 | 1217 | osascript -e 'tell app "Dock" to quit' 1218 | EOF 1219 | sudo chmod a+x "/etc/environment.sh" 1220 | rehash 1221 | 1222 | la="/Library/LaunchAgents/environment.user" 1223 | ld="/Library/LaunchDaemons/environment" 1224 | 1225 | sudo mkdir -p "$(dirname $la)" "$(dirname $ld)" 1226 | sudo launchctl unload "${la}.plist" "${ld}.plist" 2> /dev/null 1227 | sudo rm -f "${la}.plist" "${ld}.plist" 1228 | 1229 | config_defaults "$_environment_defaults" "sudo" 1230 | sudo plutil -convert xml1 "${la}.plist" "${ld}.plist" 1231 | sudo launchctl load "${la}.plist" "${ld}.plist" 2> /dev/null 1232 | } 1233 | 1234 | # Configure IPMenulet 1235 | 1236 | config_ipmenulet () { 1237 | _ipm="/Applications/IPMenulet.app/Contents/Resources" 1238 | if test -d "$_ipm"; then 1239 | rm "${_ipm}/icon-19x19-black.png" 1240 | ln "${_ipm}/icon-19x19-white.png" "${_ipm}/icon-19x19-black.png" 1241 | fi 1242 | } 1243 | 1244 | # Configure iStat Menus 1245 | 1246 | config_istatmenus () { 1247 | test -d "/Applications/iStat Menus.app" && \ 1248 | open "/Applications/iStat Menus.app" 1249 | } 1250 | 1251 | # Configure nginx 1252 | 1253 | _nginx_defaults='/Library/LaunchDaemons/org.nginx.nginx KeepAlive -bool true 1254 | /Library/LaunchDaemons/org.nginx.nginx Label -string org.nginx.nginx 1255 | /Library/LaunchDaemons/org.nginx.nginx ProcessType -string Background 1256 | /Library/LaunchDaemons/org.nginx.nginx Program -string /usr/local/bin/nginx 1257 | /Library/LaunchDaemons/org.nginx.nginx RunAtLoad -bool true 1258 | /Library/LaunchDaemons/org.nginx.nginx StandardErrorPath -string /usr/local/var/log/nginx/error.log 1259 | /Library/LaunchDaemons/org.nginx.nginx StandardOutPath -string /usr/local/var/log/nginx/access.log 1260 | /Library/LaunchDaemons/org.nginx.nginx UserName -string root 1261 | /Library/LaunchDaemons/org.nginx.nginx WatchPaths -array-add /usr/local/etc/nginx ' 1262 | config_nginx () { 1263 | cat << 'EOF' > /usr/local/etc/nginx/nginx.conf 1264 | daemon off; 1265 | 1266 | events { 1267 | accept_mutex off; 1268 | worker_connections 8000; 1269 | } 1270 | 1271 | http { 1272 | charset utf-8; 1273 | charset_types 1274 | application/javascript 1275 | application/json 1276 | application/rss+xml 1277 | application/xhtml+xml 1278 | application/xml 1279 | text/css 1280 | text/plain 1281 | text/vnd.wap.wml; 1282 | 1283 | default_type application/octet-stream; 1284 | 1285 | error_log /dev/stderr; 1286 | 1287 | gzip on; 1288 | gzip_comp_level 9; 1289 | gzip_min_length 256; 1290 | gzip_proxied any; 1291 | gzip_static on; 1292 | gzip_vary on; 1293 | 1294 | gzip_types 1295 | application/atom+xml 1296 | application/javascript 1297 | application/json 1298 | application/ld+json 1299 | application/manifest+json 1300 | application/rss+xml 1301 | application/vnd.geo+json 1302 | application/vnd.ms-fontobject 1303 | application/x-font-ttf 1304 | application/x-web-app-manifest+json 1305 | application/xhtml+xml 1306 | application/xml 1307 | font/opentype 1308 | image/bmp 1309 | image/svg+xml 1310 | image/x-icon 1311 | text/cache-manifest 1312 | text/css 1313 | text/plain 1314 | text/vcard 1315 | text/vnd.rim.location.xloc 1316 | text/vtt 1317 | text/x-component 1318 | text/x-cross-domain-policy; 1319 | 1320 | index index.html index.xhtml; 1321 | 1322 | log_format default '$host $status $body_bytes_sent "$request" "$http_referer"\n' 1323 | ' $remote_addr "$http_user_agent"'; 1324 | 1325 | map $http_upgrade $connection_upgrade { 1326 | default upgrade; 1327 | "" close; 1328 | } 1329 | 1330 | proxy_http_version 1.1; 1331 | proxy_set_header Upgrade $http_upgrade; 1332 | proxy_set_header Connection $connection_upgrade; 1333 | 1334 | proxy_set_header Host $host; 1335 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 1336 | proxy_set_header X-Forwarded-Proto $scheme; 1337 | proxy_set_header X-Real-IP $remote_addr; 1338 | 1339 | proxy_buffering off; 1340 | proxy_redirect off; 1341 | 1342 | sendfile on; 1343 | sendfile_max_chunk 512k; 1344 | 1345 | server_tokens off; 1346 | 1347 | resolver 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=300s; 1348 | resolver_timeout 5s; 1349 | 1350 | # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ 1351 | ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS:!AES128; 1352 | 1353 | # openssl dhparam -out /etc/letsencrypt/ssl-dhparam.pem 4096 1354 | ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 1355 | 1356 | ssl_ecdh_curve secp384r1; 1357 | ssl_prefer_server_ciphers on; 1358 | ssl_protocols TLSv1.2; 1359 | ssl_session_cache shared:TLS:10m; 1360 | 1361 | types { 1362 | application/atom+xml atom; 1363 | application/font-woff woff; 1364 | application/font-woff2 woff2; 1365 | application/java-archive ear jar war; 1366 | application/javascript js; 1367 | application/json json map topojson; 1368 | application/ld+json jsonld; 1369 | application/mac-binhex40 hqx; 1370 | application/manifest+json webmanifest; 1371 | application/msword doc; 1372 | application/octet-stream bin deb dll dmg exe img iso msi msm msp safariextz; 1373 | application/pdf pdf; 1374 | application/postscript ai eps ps; 1375 | application/rss+xml rss; 1376 | application/rtf rtf; 1377 | application/vnd.geo+json geojson; 1378 | application/vnd.google-earth.kml+xml kml; 1379 | application/vnd.google-earth.kmz kmz; 1380 | application/vnd.ms-excel xls; 1381 | application/vnd.ms-fontobject eot; 1382 | application/vnd.ms-powerpoint ppt; 1383 | application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; 1384 | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; 1385 | application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; 1386 | application/vnd.wap.wmlc wmlc; 1387 | application/x-7z-compressed 7z; 1388 | application/x-bb-appworld bbaw; 1389 | application/x-bittorrent torrent; 1390 | application/x-chrome-extension crx; 1391 | application/x-cocoa cco; 1392 | application/x-font-ttf ttc ttf; 1393 | application/x-java-archive-diff jardiff; 1394 | application/x-java-jnlp-file jnlp; 1395 | application/x-makeself run; 1396 | application/x-opera-extension oex; 1397 | application/x-perl pl pm; 1398 | application/x-pilot pdb prc; 1399 | application/x-rar-compressed rar; 1400 | application/x-redhat-package-manager rpm; 1401 | application/x-sea sea; 1402 | application/x-shockwave-flash swf; 1403 | application/x-stuffit sit; 1404 | application/x-tcl tcl tk; 1405 | application/x-web-app-manifest+json webapp; 1406 | application/x-x509-ca-cert crt der pem; 1407 | application/x-xpinstall xpi; 1408 | application/xhtml+xml xhtml; 1409 | application/xml rdf xml; 1410 | application/xslt+xml xsl; 1411 | application/zip zip; 1412 | audio/midi mid midi kar; 1413 | audio/mp4 aac f4a f4b m4a; 1414 | audio/mpeg mp3; 1415 | audio/ogg oga ogg opus; 1416 | audio/x-realaudio ra; 1417 | audio/x-wav wav; 1418 | font/opentype otf; 1419 | image/bmp bmp; 1420 | image/gif gif; 1421 | image/jpeg jpeg jpg; 1422 | image/png png; 1423 | image/svg+xml svg svgz; 1424 | image/tiff tif tiff; 1425 | image/vnd.wap.wbmp wbmp; 1426 | image/webp webp; 1427 | image/x-icon cur ico; 1428 | image/x-jng jng; 1429 | text/cache-manifest appcache; 1430 | text/css css; 1431 | text/html htm html shtml; 1432 | text/mathml mml; 1433 | text/plain txt; 1434 | text/vcard vcard vcf; 1435 | text/vnd.rim.location.xloc xloc; 1436 | text/vnd.sun.j2me.app-descriptor jad; 1437 | text/vnd.wap.wml wml; 1438 | text/vtt vtt; 1439 | text/x-component htc; 1440 | video/3gpp 3gp 3gpp; 1441 | video/mp4 f4p f4v m4v mp4; 1442 | video/mpeg mpeg mpg; 1443 | video/ogg ogv; 1444 | video/quicktime mov; 1445 | video/webm webm; 1446 | video/x-flv flv; 1447 | video/x-mng mng; 1448 | video/x-ms-asf asf asx; 1449 | video/x-ms-wmv wmv; 1450 | video/x-msvideo avi; 1451 | } 1452 | 1453 | include servers/*.conf; 1454 | } 1455 | 1456 | worker_processes auto; 1457 | EOF 1458 | 1459 | ld="/Library/LaunchDaemons/org.nginx.nginx" 1460 | 1461 | sudo mkdir -p "$(dirname $ld)" 1462 | sudo launchctl unload "${ld}.plist" 2> /dev/null 1463 | sudo rm -f "${ld}.plist" 1464 | 1465 | config_defaults "$_nginx_defaults" "sudo" 1466 | sudo plutil -convert xml1 "${ld}.plist" 1467 | sudo launchctl load "${ld}.plist" 2> /dev/null 1468 | } 1469 | 1470 | # Configure OpenSSL 1471 | # Create an intentionally invalid certificate for use with a DNS-based ad blocker, e.g. https://pi-hole.net 1472 | 1473 | config_openssl () { 1474 | _default="/etc/letsencrypt/live/default" 1475 | test -d "$_default" || mkdir -p "$_default" 1476 | 1477 | cat << EOF > "${_default}/default.cnf" 1478 | [ req ] 1479 | default_bits = 4096 1480 | default_keyfile = ${_default}/default.key 1481 | default_md = sha256 1482 | distinguished_name = dn 1483 | encrypt_key = no 1484 | prompt = no 1485 | utf8 = yes 1486 | x509_extensions = v3_ca 1487 | 1488 | [ dn ] 1489 | CN = * 1490 | 1491 | [ v3_ca ] 1492 | subjectKeyIdentifier = hash 1493 | authorityKeyIdentifier = keyid:always,issuer 1494 | basicConstraints = CA:true 1495 | EOF 1496 | 1497 | openssl req -days 1 -new -newkey rsa -x509 \ 1498 | -config "${_default}/default.cnf" \ 1499 | -out "${_default}/default.crt" 1500 | 1501 | cat << EOF > "/usr/local/etc/nginx/servers/default.conf" 1502 | server { 1503 | server_name .$(hostname -f | cut -d. -f2-); 1504 | 1505 | listen 80; 1506 | listen [::]:80; 1507 | 1508 | return 301 https://\$host\$request_uri; 1509 | } 1510 | 1511 | server { 1512 | listen 80 default_server; 1513 | listen [::]:80 default_server; 1514 | 1515 | listen 443 default_server ssl http2; 1516 | listen [::]:443 default_server ssl http2; 1517 | 1518 | ssl_certificate ${_default}/default.crt; 1519 | ssl_certificate_key ${_default}/default.key; 1520 | 1521 | ssl_ciphers NULL; 1522 | 1523 | return 204; 1524 | } 1525 | EOF 1526 | } 1527 | 1528 | # Configure System Preferences 1529 | 1530 | config_sysprefs () { 1531 | config_energy 1532 | config_loginwindow 1533 | config_mas 1534 | } 1535 | 1536 | # Configure Energy Saver 1537 | 1538 | _energy='-c displaysleep 20 1539 | -c sleep 0 1540 | -c disksleep 60 1541 | -c womp 1 1542 | -c autorestart 1 1543 | -c powernap 1 1544 | -u displaysleep 2 1545 | -u lessbright 1 1546 | -u haltafter 5 1547 | -u haltremain -1 1548 | -u haltlevel -1' 1549 | 1550 | config_energy () { 1551 | printf "%s\n" "${_energy}" | \ 1552 | while IFS="$(printf '\t')" read flag setting value; do 1553 | sudo pmset $flag ${setting} ${value} 1554 | done 1555 | } 1556 | 1557 | # Configure Login Window 1558 | 1559 | _loginwindow='/Library/Preferences/com.apple.loginwindow 1560 | SHOWFULLNAME 1561 | -bool 1562 | true 1563 | ' 1564 | 1565 | config_loginwindow () { 1566 | config_defaults "${_loginwindow}" "sudo" 1567 | } 1568 | 1569 | # Configure App Store 1570 | 1571 | _swupdate='/Library/Preferences/com.apple.commerce AutoUpdate -bool true 1572 | /Library/Preferences/com.apple.commerce AutoUpdateRestartRequired -bool true ' 1573 | 1574 | config_mas () { 1575 | config_defaults "${_swupdate}" "sudo" 1576 | } 1577 | 1578 | # Configure Z-Shell 1579 | 1580 | config_zsh () { 1581 | grep -q "$(which zsh)" /etc/shells || 1582 | print "$(which zsh)\n" | \ 1583 | sudo tee -a /etc/shells > /dev/null 1584 | 1585 | case "$SHELL" in 1586 | ($(which zsh)) ;; 1587 | (*) 1588 | chsh -s "$(which zsh)" 1589 | sudo chsh -s $(which zsh) ;; 1590 | esac 1591 | 1592 | sudo tee -a /etc/zshenv << 'EOF' > /dev/null 1593 | #-- Exports ---------------------------------------------------- 1594 | 1595 | export \ 1596 | ZDOTDIR="${HOME}/.zsh" \ 1597 | MASDIR="$(getconf DARWIN_USER_CACHE_DIR)com.apple.appstore" \ 1598 | NODENV_ROOT="/usr/local/node" \ 1599 | PLENV_ROOT="/usr/local/perl" \ 1600 | PYENV_ROOT="/usr/local/python" \ 1601 | RBENV_ROOT="/usr/local/ruby" \ 1602 | EDITOR="vi" \ 1603 | VISUAL="vi" \ 1604 | PAGER="less" \ 1605 | LANG="en_US.UTF-8" \ 1606 | LESS="-egiMQRS -x2 -z-2" \ 1607 | LESSHISTFILE="/dev/null" \ 1608 | HISTSIZE=50000 \ 1609 | SAVEHIST=50000 \ 1610 | KEYTIMEOUT=1 1611 | 1612 | test -d "$ZDOTDIR" || \ 1613 | mkdir -p "$ZDOTDIR" 1614 | 1615 | test -f "${ZDOTDIR}/.zshrc" || \ 1616 | touch "${ZDOTDIR}/.zshrc" 1617 | 1618 | # Ensure path arrays do not contain duplicates. 1619 | typeset -gU cdpath fpath mailpath path 1620 | EOF 1621 | sudo chmod +x "/etc/zshenv" 1622 | . "/etc/zshenv" 1623 | 1624 | sudo tee /etc/zshrc << 'EOF' > /dev/null 1625 | #-- Exports ---------------------------------------------------- 1626 | 1627 | export \ 1628 | HISTFILE="${ZDOTDIR:-$HOME}/.zhistory" 1629 | 1630 | #-- Changing Directories --------------------------------------- 1631 | 1632 | setopt \ 1633 | autocd \ 1634 | autopushd \ 1635 | cdablevars \ 1636 | chasedots \ 1637 | chaselinks \ 1638 | NO_posixcd \ 1639 | pushdignoredups \ 1640 | no_pushdminus \ 1641 | pushdsilent \ 1642 | pushdtohome 1643 | 1644 | #-- Completion ------------------------------------------------- 1645 | 1646 | setopt \ 1647 | ALWAYSLASTPROMPT \ 1648 | no_alwaystoend \ 1649 | AUTOLIST \ 1650 | AUTOMENU \ 1651 | autonamedirs \ 1652 | AUTOPARAMKEYS \ 1653 | AUTOPARAMSLASH \ 1654 | AUTOREMOVESLASH \ 1655 | no_bashautolist \ 1656 | no_completealiases \ 1657 | completeinword \ 1658 | no_globcomplete \ 1659 | HASHLISTALL \ 1660 | LISTAMBIGUOUS \ 1661 | no_LISTBEEP \ 1662 | no_listpacked \ 1663 | no_listrowsfirst \ 1664 | LISTTYPES \ 1665 | no_menucomplete \ 1666 | no_recexact 1667 | 1668 | #-- Expansion and Globbing ------------------------------------- 1669 | 1670 | setopt \ 1671 | BADPATTERN \ 1672 | BAREGLOBQUAL \ 1673 | braceccl \ 1674 | CASEGLOB \ 1675 | CASEMATCH \ 1676 | NO_cshnullglob \ 1677 | EQUALS \ 1678 | extendedglob \ 1679 | no_forcefloat \ 1680 | GLOB \ 1681 | NO_globassign \ 1682 | no_globdots \ 1683 | no_globstarshort \ 1684 | NO_globsubst \ 1685 | no_histsubstpattern \ 1686 | NO_ignorebraces \ 1687 | no_ignoreclosebraces \ 1688 | NO_kshglob \ 1689 | no_magicequalsubst \ 1690 | no_markdirs \ 1691 | MULTIBYTE \ 1692 | NOMATCH \ 1693 | no_nullglob \ 1694 | no_numericglobsort \ 1695 | no_rcexpandparam \ 1696 | no_rematchpcre \ 1697 | NO_shglob \ 1698 | UNSET \ 1699 | no_warncreateglobal \ 1700 | no_warnnestedvar 1701 | 1702 | #-- History ---------------------------------------------------- 1703 | 1704 | setopt \ 1705 | APPENDHISTORY \ 1706 | BANGHIST \ 1707 | extendedhistory \ 1708 | no_histallowclobber \ 1709 | no_HISTBEEP \ 1710 | histexpiredupsfirst \ 1711 | no_histfcntllock \ 1712 | histfindnodups \ 1713 | histignorealldups \ 1714 | histignoredups \ 1715 | histignorespace \ 1716 | histlexwords \ 1717 | no_histnofunctions \ 1718 | no_histnostore \ 1719 | histreduceblanks \ 1720 | HISTSAVEBYCOPY \ 1721 | histsavenodups \ 1722 | histverify \ 1723 | incappendhistory \ 1724 | incappendhistorytime \ 1725 | sharehistory 1726 | 1727 | #-- Initialisation --------------------------------------------- 1728 | 1729 | setopt \ 1730 | no_allexport \ 1731 | GLOBALEXPORT \ 1732 | GLOBALRCS \ 1733 | RCS 1734 | 1735 | #-- Input/Output ----------------------------------------------- 1736 | 1737 | setopt \ 1738 | ALIASES \ 1739 | no_CLOBBER \ 1740 | no_correct \ 1741 | no_correctall \ 1742 | dvorak \ 1743 | no_FLOWCONTROL \ 1744 | no_ignoreeof \ 1745 | NO_interactivecomments \ 1746 | HASHCMDS \ 1747 | HASHDIRS \ 1748 | no_hashexecutablesonly \ 1749 | no_mailwarning \ 1750 | pathdirs \ 1751 | NO_pathscript \ 1752 | no_printeightbit \ 1753 | no_printexitvalue \ 1754 | rcquotes \ 1755 | NO_rmstarsilent \ 1756 | no_rmstarwait \ 1757 | SHORTLOOPS \ 1758 | no_sunkeyboardhack 1759 | 1760 | #-- Job Control ------------------------------------------------ 1761 | 1762 | setopt \ 1763 | no_autocontinue \ 1764 | autoresume \ 1765 | no_BGNICE \ 1766 | CHECKJOBS \ 1767 | no_HUP \ 1768 | longlistjobs \ 1769 | MONITOR \ 1770 | NOTIFY \ 1771 | NO_posixjobs 1772 | 1773 | #-- Prompting -------------------------------------------------- 1774 | 1775 | setopt \ 1776 | NO_promptbang \ 1777 | PROMPTCR \ 1778 | PROMPTSP \ 1779 | PROMPTPERCENT \ 1780 | promptsubst \ 1781 | transientrprompt 1782 | 1783 | #-- Scripts and Functions -------------------------------------- 1784 | 1785 | setopt \ 1786 | NO_aliasfuncdef \ 1787 | no_cbases \ 1788 | no_cprecedences \ 1789 | DEBUGBEFORECMD \ 1790 | no_errexit \ 1791 | no_errreturn \ 1792 | EVALLINENO \ 1793 | EXEC \ 1794 | FUNCTIONARGZERO \ 1795 | no_localloops \ 1796 | NO_localoptions \ 1797 | no_localpatterns \ 1798 | NO_localtraps \ 1799 | MULTIFUNCDEF \ 1800 | MULTIOS \ 1801 | NO_octalzeroes \ 1802 | no_pipefail \ 1803 | no_sourcetrace \ 1804 | no_typesetsilent \ 1805 | no_verbose \ 1806 | no_xtrace 1807 | 1808 | #-- Shell Emulation -------------------------------------------- 1809 | 1810 | setopt \ 1811 | NO_appendcreate \ 1812 | no_bashrematch \ 1813 | NO_bsdecho \ 1814 | no_continueonerror \ 1815 | NO_cshjunkiehistory \ 1816 | NO_cshjunkieloops \ 1817 | NO_cshjunkiequotes \ 1818 | NO_cshnullcmd \ 1819 | NO_ksharrays \ 1820 | NO_kshautoload \ 1821 | NO_kshoptionprint \ 1822 | no_kshtypeset \ 1823 | no_kshzerosubscript \ 1824 | NO_posixaliases \ 1825 | no_posixargzero \ 1826 | NO_posixbuiltins \ 1827 | NO_posixidentifiers \ 1828 | NO_posixstrings \ 1829 | NO_posixtraps \ 1830 | NO_shfileexpansion \ 1831 | NO_shnullcmd \ 1832 | NO_shoptionletters \ 1833 | NO_shwordsplit \ 1834 | no_trapsasync 1835 | 1836 | #-- Zle -------------------------------------------------------- 1837 | 1838 | setopt \ 1839 | no_BEEP \ 1840 | combiningchars \ 1841 | no_overstrike \ 1842 | NO_singlelinezle 1843 | 1844 | #-- Aliases ---------------------------------------------------- 1845 | 1846 | alias \ 1847 | ll="/bin/ls -aFGHhlOw" 1848 | 1849 | #-- Functions -------------------------------------------------- 1850 | 1851 | autoload -Uz \ 1852 | add-zsh-hook \ 1853 | compaudit \ 1854 | compinit 1855 | 1856 | compaudit 2> /dev/null | \ 1857 | xargs -L 1 chmod go-w 2> /dev/null 1858 | 1859 | compinit -u 1860 | 1861 | which nodenv > /dev/null && \ 1862 | eval "$(nodenv init - zsh)" 1863 | 1864 | which plenv > /dev/null && \ 1865 | eval "$(plenv init - zsh)" 1866 | 1867 | which pyenv > /dev/null && \ 1868 | eval "$(pyenv init - zsh)" 1869 | 1870 | which rbenv > /dev/null && \ 1871 | eval "$(rbenv init - zsh)" 1872 | 1873 | sf () { 1874 | SetFile -P -d "$1 12:00:00" -m "$1 12:00:00" $argv[2,$] 1875 | } 1876 | 1877 | ssh-add -A 2> /dev/null 1878 | 1879 | #-- zsh-syntax-highlighting ------------------------------------ 1880 | 1881 | . "$(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" 1882 | 1883 | #-- zsh-history-substring-search ------------------------------- 1884 | 1885 | . "$(brew --prefix)/share/zsh-history-substring-search/zsh-history-substring-search.zsh" 1886 | 1887 | HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND="fg=default,underline" && \ 1888 | export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND 1889 | HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND="fg=red,underline" && \ 1890 | export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND 1891 | 1892 | #-- Zle -------------------------------------------------------- 1893 | 1894 | zmodload zsh/zle 1895 | 1896 | bindkey -d 1897 | bindkey -v 1898 | 1899 | for k in "vicmd" "viins"; do 1900 | bindkey -M $k '\C-A' beginning-of-line 1901 | bindkey -M $k '\C-E' end-of-line 1902 | bindkey -M $k '\C-U' kill-whole-line 1903 | bindkey -M $k '\e[3~' delete-char 1904 | bindkey -M $k '\e[A' history-substring-search-up 1905 | bindkey -M $k '\e[B' history-substring-search-down 1906 | bindkey -M $k '\x7f' backward-delete-char 1907 | done 1908 | 1909 | for f in \ 1910 | "zle-keymap-select" \ 1911 | "zle-line-finish" \ 1912 | "zle-line-init" 1913 | do 1914 | eval "$f () { 1915 | case \$TERM_PROGRAM in 1916 | ('Apple_Terminal') 1917 | test \$KEYMAP = 'vicmd' && \ 1918 | printf '%b' '\e[4 q' || \ 1919 | printf '%b' '\e[6 q' ;; 1920 | ('iTerm.app') 1921 | test \$KEYMAP = 'vicmd' && \ 1922 | printf '%b' '\e]Plf27f7f\e\x5c\e[4 q' || \ 1923 | printf '%b' '\e]Pl99cc99\e\x5c\e[6 q' ;; 1924 | esac 1925 | }" 1926 | zle -N $f 1927 | done 1928 | 1929 | #-- prompt_ptb_setup ------------------------------------------- 1930 | 1931 | prompt_ptb_setup () { 1932 | I="$(printf '%b' '%{\e[3m%}')" 1933 | i="$(printf '%b' '%{\e[0m%}')" 1934 | PROMPT="%F{004}$I%d$i %(!.%F{001}.%F{002})%n %B❯%b%f " && \ 1935 | export PROMPT 1936 | } 1937 | 1938 | prompt_ptb_setup 1939 | 1940 | prompt_ptb_precmd () { 1941 | if test "$(uname -s)" = "Darwin"; then 1942 | print -Pn "\e]7;file://%M\${PWD// /%%20}\a" 1943 | print -Pn "\e]2;%n@%m\a" 1944 | print -Pn "\e]1;%~\a" 1945 | fi 1946 | 1947 | test -n "$(git rev-parse --git-dir 2> /dev/null)" && \ 1948 | RPROMPT="%F{000}$(git rev-parse --abbrev-ref HEAD 2> /dev/null)%f" && \ 1949 | export RPROMPT 1950 | } 1951 | 1952 | add-zsh-hook precmd \ 1953 | prompt_ptb_precmd 1954 | EOF 1955 | sudo chmod +x "/etc/zshrc" 1956 | . "/etc/zshrc" 1957 | } 1958 | 1959 | # Configure New Account 1960 | 1961 | config_new_account () { 1962 | e="$(ask 'New macOS Account: Email Address?' 'OK' '')" 1963 | curl --output "/Library/User Pictures/${e}.jpg" --silent \ 1964 | "https://www.gravatar.com/avatar/$(md5 -qs ${e}).jpg?s=512" 1965 | 1966 | g="$(curl --location --silent \ 1967 | "https://api.github.com/search/users?q=${e}" | \ 1968 | sed -n 's/^.*"url": "\(.*\)".*/\1/p')" 1969 | g="$(curl --location --silent ${g})" 1970 | 1971 | n="$(printf ${g} | sed -n 's/^.*"name": "\(.*\)".*/\1/p')" 1972 | n="$(ask 'New macOS Account: Real Name?' 'OK' ${n})" 1973 | 1974 | u="$(printf ${g} | sed -n 's/^.*"login": "\(.*\)".*/\1/p')" 1975 | u="$(ask 'New macOS Account: User Name?' 'OK' ${u})" 1976 | 1977 | sudo defaults write \ 1978 | "/System/Library/User Template/Non_localized/Library/Preferences/.GlobalPreferences.plist" \ 1979 | "com.apple.swipescrolldirection" -bool false 1980 | 1981 | sudo sysadminctl -admin -addUser "${u}" -fullName "${n}" -password - \ 1982 | -shell "$(which zsh)" -picture "/Library/User Pictures/${e}.jpg" 1983 | } 1984 | 1985 | # Configure Guest Users 1986 | 1987 | config_guest () { 1988 | sudo sysadminctl -guestAccount off 1989 | } 1990 | 1991 | # Reinstate =sudo= Password 1992 | 1993 | config_rm_sudoers () { 1994 | sudo -- sh -c \ 1995 | "rm -f /etc/sudoers.d/wheel; dscl /Local/Default -delete /Groups/wheel GroupMembership $(whoami)" 1996 | 1997 | /usr/bin/read -n 1 -p "Press any key to continue. 1998 | " -s 1999 | if run "Log Out Then Log Back In?" "Cancel" "Log Out"; then 2000 | osascript -e 'tell app "loginwindow" to «event aevtrlgo»' 2001 | fi 2002 | } 2003 | 2004 | # Define Function =custom= 2005 | 2006 | custom () { 2007 | custom_githome 2008 | custom_atom 2009 | custom_autoping 2010 | custom_dropbox 2011 | custom_duti 2012 | custom_emacs 2013 | custom_finder 2014 | custom_getmail 2015 | custom_git 2016 | custom_gnupg 2017 | custom_istatmenus 2018 | custom_meteorologist 2019 | custom_moom 2020 | custom_mp4_automator 2021 | custom_nvalt 2022 | custom_nzbget 2023 | custom_safari 2024 | custom_sieve 2025 | custom_sonarr 2026 | custom_ssh 2027 | custom_sysprefs 2028 | custom_terminal 2029 | custom_vim 2030 | custom_vlc 2031 | 2032 | which personalize_all 2033 | } 2034 | 2035 | # Customize Home 2036 | 2037 | custom_githome () { 2038 | git -C "${HOME}" init 2039 | 2040 | test -f "${CACHES}/dbx/.zshenv" && \ 2041 | mkdir -p "${ZDOTDIR:-$HOME}" && \ 2042 | cp "${CACHES}/dbx/.zshenv" "${ZDOTDIR:-$HOME}" && \ 2043 | . "${ZDOTDIR:-$HOME}/.zshenv" 2044 | 2045 | a=$(ask "Existing Git Home Repository Path or URL" "Add Remote" "") 2046 | if test -n "${a}"; then 2047 | git -C "${HOME}" remote add origin "${a}" 2048 | git -C "${HOME}" fetch origin master 2049 | fi 2050 | 2051 | if run "Encrypt and commit changes to Git and push to GitHub, automatically?" "No" "Add AutoKeep"; then 2052 | curl --location --silent \ 2053 | "https://github.com/ptb/autokeep/raw/master/autokeep.command" | \ 2054 | . /dev/stdin 0 2055 | 2056 | autokeep_remote 2057 | autokeep_push 2058 | autokeep_gitignore 2059 | autokeep_post_commit 2060 | autokeep_launchagent 2061 | autokeep_crypt 2062 | 2063 | git reset --hard 2064 | git checkout -f -b master FETCH_HEAD 2065 | fi 2066 | 2067 | chmod -R go= "${HOME}" > /dev/null 2>&1 2068 | } 2069 | 2070 | # Customize Atom 2071 | 2072 | _atom='atom-beautify 2073 | atom-css-comb 2074 | atom-fuzzy-grep 2075 | atom-jade 2076 | atom-wallaby 2077 | autoclose-html 2078 | autocomplete-python 2079 | busy-signal 2080 | double-tag 2081 | editorconfig 2082 | ex-mode 2083 | file-icons 2084 | git-plus 2085 | git-time-machine 2086 | highlight-selected 2087 | intentions 2088 | language-docker 2089 | language-jade 2090 | language-javascript-jsx 2091 | language-lisp 2092 | language-slim 2093 | linter 2094 | linter-eslint 2095 | linter-rubocop 2096 | linter-shellcheck 2097 | linter-ui-default 2098 | MagicPython 2099 | python-yapf 2100 | react 2101 | riot 2102 | sort-lines 2103 | term3 2104 | tomorrow-night-eighties-syntax 2105 | tree-view-open-files 2106 | vim-mode-plus 2107 | vim-mode-zz' 2108 | 2109 | custom_atom () { 2110 | if which apm > /dev/null; then 2111 | mkdir -p "${HOME}/.atom/.apm" 2112 | 2113 | cat << EOF > "${HOME}/.atom/.apmrc" 2114 | cache = ${CACHES}/apm 2115 | EOF 2116 | 2117 | cat << EOF > "${HOME}/.atom/.apm/.apmrc" 2118 | cache = ${CACHES}/apm 2119 | EOF 2120 | 2121 | printf "%s\n" "${_atom}" | \ 2122 | while IFS="$(printf '\t')" read pkg; do 2123 | test -d "${HOME}/.atom/packages/${pkg}" || 2124 | apm install "${pkg}" 2125 | done 2126 | 2127 | cat << EOF > "${HOME}/.atom/config.cson" 2128 | "*": 2129 | "autocomplete-python": 2130 | useKite: false 2131 | core: 2132 | telemetryConsent: "limited" 2133 | themes: [ 2134 | "one-dark-ui" 2135 | "tomorrow-night-eighties-syntax" 2136 | ] 2137 | editor: 2138 | fontFamily: "Inconsolata LGC" 2139 | fontSize: 13 2140 | welcome: 2141 | showOnStartup: false 2142 | EOF 2143 | 2144 | cat << EOF > "${HOME}/.atom/packages/tomorrow-night-eighties-syntax/styles/colors.less" 2145 | @background: #222222; 2146 | @current-line: #333333; 2147 | @selection: #4c4c4c; 2148 | @foreground: #cccccc; 2149 | @comment: #999999; 2150 | @red: #f27f7f; 2151 | @orange: #ff994c; 2152 | @yellow: #ffcc66; 2153 | @green: #99cc99; 2154 | @aqua: #66cccc; 2155 | @blue: #6699cc; 2156 | @purple: #cc99cc; 2157 | EOF 2158 | fi 2159 | } 2160 | 2161 | # Customize autoping 2162 | 2163 | _autoping='com.memset.autoping Hostname -string google.com 2164 | com.memset.autoping SlowPingLowThreshold -int 100 2165 | com.memset.autoping LaunchAtLogin -bool true 2166 | com.memset.autoping ShowIcon -bool true 2167 | com.memset.autoping ShowText -bool true 2168 | com.memset.autoping ShowPacketLossText -bool true 2169 | com.memset.autoping ShowNotifications -bool true ' 2170 | 2171 | custom_autoping () { 2172 | config_defaults "${_autoping}" 2173 | } 2174 | 2175 | # Customize Dropbox 2176 | 2177 | custom_dropbox () { 2178 | test -d "/Applications/Dropbox.app" && \ 2179 | open "/Applications/Dropbox.app" 2180 | } 2181 | 2182 | # Customize Default UTIs 2183 | 2184 | _duti='com.apple.DiskImageMounter com.apple.disk-image all 2185 | com.apple.DiskImageMounter public.disk-image all 2186 | com.apple.DiskImageMounter public.iso-image all 2187 | com.apple.QuickTimePlayerX com.apple.coreaudio-format all 2188 | com.apple.QuickTimePlayerX com.apple.quicktime-movie all 2189 | com.apple.QuickTimePlayerX com.microsoft.waveform-audio all 2190 | com.apple.QuickTimePlayerX public.aifc-audio all 2191 | com.apple.QuickTimePlayerX public.aiff-audio all 2192 | com.apple.QuickTimePlayerX public.audio all 2193 | com.apple.QuickTimePlayerX public.mp3 all 2194 | com.apple.Safari com.compuserve.gif all 2195 | com.apple.Terminal com.apple.terminal.shell-script all 2196 | com.apple.iTunes com.apple.iTunes.audible all 2197 | com.apple.iTunes com.apple.iTunes.ipg all 2198 | com.apple.iTunes com.apple.iTunes.ipsw all 2199 | com.apple.iTunes com.apple.iTunes.ite all 2200 | com.apple.iTunes com.apple.iTunes.itlp all 2201 | com.apple.iTunes com.apple.iTunes.itms all 2202 | com.apple.iTunes com.apple.iTunes.podcast all 2203 | com.apple.iTunes com.apple.m4a-audio all 2204 | com.apple.iTunes com.apple.mpeg-4-ringtone all 2205 | com.apple.iTunes com.apple.protected-mpeg-4-audio all 2206 | com.apple.iTunes com.apple.protected-mpeg-4-video all 2207 | com.apple.iTunes com.audible.aa-audio all 2208 | com.apple.iTunes public.mpeg-4-audio all 2209 | com.apple.installer com.apple.installer-package-archive all 2210 | com.github.atom com.apple.binary-property-list editor 2211 | com.github.atom com.apple.crashreport editor 2212 | com.github.atom com.apple.dt.document.ascii-property-list editor 2213 | com.github.atom com.apple.dt.document.script-suite-property-list editor 2214 | com.github.atom com.apple.dt.document.script-terminology-property-list editor 2215 | com.github.atom com.apple.log editor 2216 | com.github.atom com.apple.property-list editor 2217 | com.github.atom com.apple.rez-source editor 2218 | com.github.atom com.apple.symbol-export editor 2219 | com.github.atom com.apple.xcode.ada-source editor 2220 | com.github.atom com.apple.xcode.bash-script editor 2221 | com.github.atom com.apple.xcode.configsettings editor 2222 | com.github.atom com.apple.xcode.csh-script editor 2223 | com.github.atom com.apple.xcode.fortran-source editor 2224 | com.github.atom com.apple.xcode.ksh-script editor 2225 | com.github.atom com.apple.xcode.lex-source editor 2226 | com.github.atom com.apple.xcode.make-script editor 2227 | com.github.atom com.apple.xcode.mig-source editor 2228 | com.github.atom com.apple.xcode.pascal-source editor 2229 | com.github.atom com.apple.xcode.strings-text editor 2230 | com.github.atom com.apple.xcode.tcsh-script editor 2231 | com.github.atom com.apple.xcode.yacc-source editor 2232 | com.github.atom com.apple.xcode.zsh-script editor 2233 | com.github.atom com.apple.xml-property-list editor 2234 | com.github.atom com.barebones.bbedit.actionscript-source editor 2235 | com.github.atom com.barebones.bbedit.erb-source editor 2236 | com.github.atom com.barebones.bbedit.ini-configuration editor 2237 | com.github.atom com.barebones.bbedit.javascript-source editor 2238 | com.github.atom com.barebones.bbedit.json-source editor 2239 | com.github.atom com.barebones.bbedit.jsp-source editor 2240 | com.github.atom com.barebones.bbedit.lasso-source editor 2241 | com.github.atom com.barebones.bbedit.lua-source editor 2242 | com.github.atom com.barebones.bbedit.setext-source editor 2243 | com.github.atom com.barebones.bbedit.sql-source editor 2244 | com.github.atom com.barebones.bbedit.tcl-source editor 2245 | com.github.atom com.barebones.bbedit.tex-source editor 2246 | com.github.atom com.barebones.bbedit.textile-source editor 2247 | com.github.atom com.barebones.bbedit.vbscript-source editor 2248 | com.github.atom com.barebones.bbedit.vectorscript-source editor 2249 | com.github.atom com.barebones.bbedit.verilog-hdl-source editor 2250 | com.github.atom com.barebones.bbedit.vhdl-source editor 2251 | com.github.atom com.barebones.bbedit.yaml-source editor 2252 | com.github.atom com.netscape.javascript-source editor 2253 | com.github.atom com.sun.java-source editor 2254 | com.github.atom dyn.ah62d4rv4ge80255drq all 2255 | com.github.atom dyn.ah62d4rv4ge80g55gq3w0n all 2256 | com.github.atom dyn.ah62d4rv4ge80g55sq2 all 2257 | com.github.atom dyn.ah62d4rv4ge80y2xzrf0gk3pw all 2258 | com.github.atom dyn.ah62d4rv4ge81e3dtqq all 2259 | com.github.atom dyn.ah62d4rv4ge81e7k all 2260 | com.github.atom dyn.ah62d4rv4ge81g25xsq all 2261 | com.github.atom dyn.ah62d4rv4ge81g2pxsq all 2262 | com.github.atom net.daringfireball.markdown editor 2263 | com.github.atom public.assembly-source editor 2264 | com.github.atom public.c-header editor 2265 | com.github.atom public.c-plus-plus-source editor 2266 | com.github.atom public.c-source editor 2267 | com.github.atom public.csh-script editor 2268 | com.github.atom public.json editor 2269 | com.github.atom public.lex-source editor 2270 | com.github.atom public.log editor 2271 | com.github.atom public.mig-source editor 2272 | com.github.atom public.nasm-assembly-source editor 2273 | com.github.atom public.objective-c-plus-plus-source editor 2274 | com.github.atom public.objective-c-source editor 2275 | com.github.atom public.patch-file editor 2276 | com.github.atom public.perl-script editor 2277 | com.github.atom public.php-script editor 2278 | com.github.atom public.plain-text editor 2279 | com.github.atom public.precompiled-c-header editor 2280 | com.github.atom public.precompiled-c-plus-plus-header editor 2281 | com.github.atom public.python-script editor 2282 | com.github.atom public.ruby-script editor 2283 | com.github.atom public.script editor 2284 | com.github.atom public.shell-script editor 2285 | com.github.atom public.source-code editor 2286 | com.github.atom public.text editor 2287 | com.github.atom public.utf16-external-plain-text editor 2288 | com.github.atom public.utf16-plain-text editor 2289 | com.github.atom public.utf8-plain-text editor 2290 | com.github.atom public.xml editor 2291 | com.kodlian.Icon-Slate com.apple.icns all 2292 | com.kodlian.Icon-Slate com.microsoft.ico all 2293 | com.microsoft.Word public.rtf all 2294 | com.panayotis.jubler dyn.ah62d4rv4ge81g6xy all 2295 | com.sketchup.SketchUp.2017 com.sketchup.skp all 2296 | com.VortexApps.NZBVortex3 dyn.ah62d4rv4ge8068xc all 2297 | com.vmware.fusion com.microsoft.windows-executable all 2298 | cx.c3.theunarchiver com.alcohol-soft.mdf-image all 2299 | cx.c3.theunarchiver com.allume.stuffit-archive all 2300 | cx.c3.theunarchiver com.altools.alz-archive all 2301 | cx.c3.theunarchiver com.amiga.adf-archive all 2302 | cx.c3.theunarchiver com.amiga.adz-archive all 2303 | cx.c3.theunarchiver com.apple.applesingle-archive all 2304 | cx.c3.theunarchiver com.apple.binhex-archive all 2305 | cx.c3.theunarchiver com.apple.bom-compressed-cpio all 2306 | cx.c3.theunarchiver com.apple.itunes.ipa all 2307 | cx.c3.theunarchiver com.apple.macbinary-archive all 2308 | cx.c3.theunarchiver com.apple.self-extracting-archive all 2309 | cx.c3.theunarchiver com.apple.xar-archive all 2310 | cx.c3.theunarchiver com.apple.xip-archive all 2311 | cx.c3.theunarchiver com.cyclos.cpt-archive all 2312 | cx.c3.theunarchiver com.microsoft.cab-archive all 2313 | cx.c3.theunarchiver com.microsoft.msi-installer all 2314 | cx.c3.theunarchiver com.nero.nrg-image all 2315 | cx.c3.theunarchiver com.network172.pit-archive all 2316 | cx.c3.theunarchiver com.nowsoftware.now-archive all 2317 | cx.c3.theunarchiver com.nscripter.nsa-archive all 2318 | cx.c3.theunarchiver com.padus.cdi-image all 2319 | cx.c3.theunarchiver com.pkware.zip-archive all 2320 | cx.c3.theunarchiver com.rarlab.rar-archive all 2321 | cx.c3.theunarchiver com.redhat.rpm-archive all 2322 | cx.c3.theunarchiver com.stuffit.archive.sit all 2323 | cx.c3.theunarchiver com.stuffit.archive.sitx all 2324 | cx.c3.theunarchiver com.sun.java-archive all 2325 | cx.c3.theunarchiver com.symantec.dd-archive all 2326 | cx.c3.theunarchiver com.winace.ace-archive all 2327 | cx.c3.theunarchiver com.winzip.zipx-archive all 2328 | cx.c3.theunarchiver cx.c3.arc-archive all 2329 | cx.c3.theunarchiver cx.c3.arj-archive all 2330 | cx.c3.theunarchiver cx.c3.dcs-archive all 2331 | cx.c3.theunarchiver cx.c3.dms-archive all 2332 | cx.c3.theunarchiver cx.c3.ha-archive all 2333 | cx.c3.theunarchiver cx.c3.lbr-archive all 2334 | cx.c3.theunarchiver cx.c3.lha-archive all 2335 | cx.c3.theunarchiver cx.c3.lhf-archive all 2336 | cx.c3.theunarchiver cx.c3.lzx-archive all 2337 | cx.c3.theunarchiver cx.c3.packdev-archive all 2338 | cx.c3.theunarchiver cx.c3.pax-archive all 2339 | cx.c3.theunarchiver cx.c3.pma-archive all 2340 | cx.c3.theunarchiver cx.c3.pp-archive all 2341 | cx.c3.theunarchiver cx.c3.xmash-archive all 2342 | cx.c3.theunarchiver cx.c3.zoo-archive all 2343 | cx.c3.theunarchiver cx.c3.zoom-archive all 2344 | cx.c3.theunarchiver org.7-zip.7-zip-archive all 2345 | cx.c3.theunarchiver org.archive.warc-archive all 2346 | cx.c3.theunarchiver org.debian.deb-archive all 2347 | cx.c3.theunarchiver org.gnu.gnu-tar-archive all 2348 | cx.c3.theunarchiver org.gnu.gnu-zip-archive all 2349 | cx.c3.theunarchiver org.gnu.gnu-zip-tar-archive all 2350 | cx.c3.theunarchiver org.tukaani.lzma-archive all 2351 | cx.c3.theunarchiver org.tukaani.xz-archive all 2352 | cx.c3.theunarchiver public.bzip2-archive all 2353 | cx.c3.theunarchiver public.cpio-archive all 2354 | cx.c3.theunarchiver public.tar-archive all 2355 | cx.c3.theunarchiver public.tar-bzip2-archive all 2356 | cx.c3.theunarchiver public.z-archive all 2357 | cx.c3.theunarchiver public.zip-archive all 2358 | cx.c3.theunarchiver public.zip-archive.first-part all 2359 | org.gnu.Emacs dyn.ah62d4rv4ge8086xh all 2360 | org.inkscape.Inkscape public.svg-image editor 2361 | org.videolan.vlc com.apple.m4v-video all 2362 | org.videolan.vlc com.microsoft.windows-media-wmv all 2363 | org.videolan.vlc org.videolan.3gp all 2364 | org.videolan.vlc org.videolan.aac all 2365 | org.videolan.vlc org.videolan.ac3 all 2366 | org.videolan.vlc org.videolan.aiff all 2367 | org.videolan.vlc org.videolan.amr all 2368 | org.videolan.vlc org.videolan.aob all 2369 | org.videolan.vlc org.videolan.ape all 2370 | org.videolan.vlc org.videolan.asf all 2371 | org.videolan.vlc org.videolan.avi all 2372 | org.videolan.vlc org.videolan.axa all 2373 | org.videolan.vlc org.videolan.axv all 2374 | org.videolan.vlc org.videolan.divx all 2375 | org.videolan.vlc org.videolan.dts all 2376 | org.videolan.vlc org.videolan.dv all 2377 | org.videolan.vlc org.videolan.flac all 2378 | org.videolan.vlc org.videolan.flash all 2379 | org.videolan.vlc org.videolan.gxf all 2380 | org.videolan.vlc org.videolan.it all 2381 | org.videolan.vlc org.videolan.mid all 2382 | org.videolan.vlc org.videolan.mka all 2383 | org.videolan.vlc org.videolan.mkv all 2384 | org.videolan.vlc org.videolan.mlp all 2385 | org.videolan.vlc org.videolan.mod all 2386 | org.videolan.vlc org.videolan.mpc all 2387 | org.videolan.vlc org.videolan.mpeg-audio all 2388 | org.videolan.vlc org.videolan.mpeg-stream all 2389 | org.videolan.vlc org.videolan.mpeg-video all 2390 | org.videolan.vlc org.videolan.mxf all 2391 | org.videolan.vlc org.videolan.nsv all 2392 | org.videolan.vlc org.videolan.nuv all 2393 | org.videolan.vlc org.videolan.ogg-audio all 2394 | org.videolan.vlc org.videolan.ogg-video all 2395 | org.videolan.vlc org.videolan.oma all 2396 | org.videolan.vlc org.videolan.opus all 2397 | org.videolan.vlc org.videolan.quicktime all 2398 | org.videolan.vlc org.videolan.realmedia all 2399 | org.videolan.vlc org.videolan.rec all 2400 | org.videolan.vlc org.videolan.rmi all 2401 | org.videolan.vlc org.videolan.s3m all 2402 | org.videolan.vlc org.videolan.spx all 2403 | org.videolan.vlc org.videolan.tod all 2404 | org.videolan.vlc org.videolan.tta all 2405 | org.videolan.vlc org.videolan.vob all 2406 | org.videolan.vlc org.videolan.voc all 2407 | org.videolan.vlc org.videolan.vqf all 2408 | org.videolan.vlc org.videolan.vro all 2409 | org.videolan.vlc org.videolan.wav all 2410 | org.videolan.vlc org.videolan.webm all 2411 | org.videolan.vlc org.videolan.wma all 2412 | org.videolan.vlc org.videolan.wmv all 2413 | org.videolan.vlc org.videolan.wtv all 2414 | org.videolan.vlc org.videolan.wv all 2415 | org.videolan.vlc org.videolan.xa all 2416 | org.videolan.vlc org.videolan.xesc all 2417 | org.videolan.vlc org.videolan.xm all 2418 | org.videolan.vlc public.ac3-audio all 2419 | org.videolan.vlc public.audiovisual-content all 2420 | org.videolan.vlc public.avi all 2421 | org.videolan.vlc public.movie all 2422 | org.videolan.vlc public.mpeg all 2423 | org.videolan.vlc public.mpeg-2-video all 2424 | org.videolan.vlc public.mpeg-4 all' 2425 | custom_duti () { 2426 | if test -x "/usr/local/bin/duti"; then 2427 | test -f "${HOME}/Library/Preferences/org.duti.plist" && \ 2428 | rm "${HOME}/Library/Preferences/org.duti.plist" 2429 | 2430 | printf "%s\n" "${_duti}" | \ 2431 | while IFS="$(printf '\t')" read id uti role; do 2432 | defaults write org.duti DUTISettings -array-add \ 2433 | "{ 2434 | DUTIBundleIdentifier = '$a'; 2435 | DUTIUniformTypeIdentifier = '$b'; 2436 | DUTIRole = '$c'; 2437 | }" 2438 | done 2439 | 2440 | duti "${HOME}/Library/Preferences/org.duti.plist" 2> /dev/null 2441 | fi 2442 | } 2443 | 2444 | # Customize Emacs 2445 | 2446 | custom_emacs () { 2447 | mkdir -p "${HOME}/.emacs.d" && \ 2448 | curl --compressed --location --silent \ 2449 | "https://github.com/syl20bnr/spacemacs/archive/master.tar.gz" | \ 2450 | tar -C "${HOME}/.emacs.d" --strip-components 1 -xf - 2451 | mkdir -p "${HOME}/.emacs.d/private/ptb" 2452 | chmod -R go= "${HOME}/.emacs.d" 2453 | 2454 | cat << EOF > "${HOME}/.spacemacs" 2455 | (defun dotspacemacs/layers () 2456 | (setq-default 2457 | dotspacemacs-configuration-layers '( 2458 | auto-completion 2459 | (colors :variables 2460 | colors-colorize-identifiers 'variables) 2461 | dash 2462 | deft 2463 | docker 2464 | emacs-lisp 2465 | evil-cleverparens 2466 | git 2467 | github 2468 | helm 2469 | html 2470 | ibuffer 2471 | imenu-list 2472 | javascript 2473 | markdown 2474 | nginx 2475 | (org :variables 2476 | org-enable-github-support t) 2477 | (osx :variables 2478 | osx-use-option-as-meta nil) 2479 | ptb 2480 | react 2481 | ruby 2482 | ruby-on-rails 2483 | search-engine 2484 | semantic 2485 | shell-scripts 2486 | (spell-checking :variables 2487 | spell-checking-enable-by-default nil) 2488 | syntax-checking 2489 | (version-control :variables 2490 | version-control-diff-side 'left) 2491 | vim-empty-lines 2492 | ) 2493 | dotspacemacs-excluded-packages '(org-bullets) 2494 | ) 2495 | ) 2496 | 2497 | (defun dotspacemacs/init () 2498 | (setq-default 2499 | dotspacemacs-startup-banner nil 2500 | dotspacemacs-startup-lists nil 2501 | dotspacemacs-scratch-mode 'org-mode 2502 | dotspacemacs-themes '(sanityinc-tomorrow-eighties) 2503 | dotspacemacs-default-font '( 2504 | "Inconsolata LGC" 2505 | :size 13 2506 | :weight normal 2507 | :width normal 2508 | :powerline-scale 1.1) 2509 | dotspacemacs-loading-progress-bar nil 2510 | dotspacemacs-active-transparency 100 2511 | dotspacemacs-inactive-transparency 100 2512 | dotspacemacs-line-numbers t 2513 | dotspacemacs-whitespace-cleanup 'all 2514 | ) 2515 | ) 2516 | 2517 | (defun dotspacemacs/user-init ()) 2518 | (defun dotspacemacs/user-config ()) 2519 | EOF 2520 | 2521 | cat << EOF > "${HOME}/.emacs.d/private/ptb/config.el" 2522 | (setq 2523 | default-frame-alist '( 2524 | (top . 22) 2525 | (left . 1201) 2526 | (height . 50) 2527 | (width . 120) 2528 | (vertical-scroll-bars . right)) 2529 | initial-frame-alist (copy-alist default-frame-alist) 2530 | 2531 | deft-directory "~/Dropbox/Notes" 2532 | focus-follows-mouse t 2533 | mouse-wheel-follow-mouse t 2534 | mouse-wheel-scroll-amount '(1 ((shift) . 1)) 2535 | org-src-preserve-indentation t 2536 | purpose-display-at-right 20 2537 | recentf-max-saved-items 5 2538 | scroll-step 1 2539 | system-uses-terminfo nil 2540 | 2541 | ibuffer-formats '( 2542 | (mark modified read-only " " 2543 | (name 18 18 :left :elide))) 2544 | 2545 | ibuffer-shrink-to-minimum-size t 2546 | ibuffer-always-show-last-buffer nil 2547 | ibuffer-sorting-mode 'recency 2548 | ibuffer-use-header-line nil 2549 | x-select-enable-clipboard nil) 2550 | 2551 | (global-linum-mode t) 2552 | (recentf-mode t) 2553 | (x-focus-frame nil) 2554 | (with-eval-after-load 'org 2555 | (org-babel-do-load-languages 2556 | 'org-babel-load-languages '( 2557 | (ruby . t) 2558 | (shell . t) 2559 | ) 2560 | ) 2561 | ) 2562 | EOF 2563 | 2564 | cat << EOF > "${HOME}/.emacs.d/private/ptb/funcs.el" 2565 | (defun is-useless-buffer (buffer) 2566 | (let ((name (buffer-name buffer))) 2567 | (and (= ?* (aref name 0)) 2568 | (string-match "^\\**" name)))) 2569 | 2570 | (defun kill-useless-buffers () 2571 | (interactive) 2572 | (loop for buffer being the buffers 2573 | do (and (is-useless-buffer buffer) (kill-buffer buffer)))) 2574 | 2575 | (defun org-babel-tangle-hook () 2576 | (add-hook 'after-save-hook 'org-babel-tangle)) 2577 | 2578 | (add-hook 'org-mode-hook #'org-babel-tangle-hook) 2579 | 2580 | (defun ptb/new-untitled-buffer () 2581 | "Create a new untitled buffer in the current frame." 2582 | (interactive) 2583 | (let 2584 | ((buffer "Untitled-") (count 1)) 2585 | (while 2586 | (get-buffer (concat buffer (number-to-string count))) 2587 | (setq count (1+ count))) 2588 | (switch-to-buffer 2589 | (concat buffer (number-to-string count)))) 2590 | (org-mode)) 2591 | 2592 | (defun ptb/previous-buffer () 2593 | (interactive) 2594 | (kill-useless-buffers) 2595 | (previous-buffer)) 2596 | 2597 | (defun ptb/next-buffer () 2598 | (interactive) 2599 | (kill-useless-buffers) 2600 | (next-buffer)) 2601 | 2602 | (defun ptb/kill-current-buffer () 2603 | (interactive) 2604 | (kill-buffer (current-buffer)) 2605 | (kill-useless-buffers)) 2606 | EOF 2607 | 2608 | cat << EOF > "${HOME}/.emacs.d/private/ptb/keybindings.el" 2609 | (define-key evil-insert-state-map (kbd "") 'newline) 2610 | 2611 | (define-key evil-normal-state-map (kbd "s-c") 'clipboard-kill-ring-save) 2612 | (define-key evil-insert-state-map (kbd "s-c") 'clipboard-kill-ring-save) 2613 | (define-key evil-visual-state-map (kbd "s-c") 'clipboard-kill-ring-save) 2614 | 2615 | (define-key evil-ex-completion-map (kbd "s-v") 'clipboard-yank) 2616 | (define-key evil-ex-search-keymap (kbd "s-v") 'clipboard-yank) 2617 | (define-key evil-insert-state-map (kbd "s-v") 'clipboard-yank) 2618 | 2619 | (define-key evil-normal-state-map (kbd "s-x") 'clipboard-kill-region) 2620 | (define-key evil-insert-state-map (kbd "s-x") 'clipboard-kill-region) 2621 | (define-key evil-visual-state-map (kbd "s-x") 'clipboard-kill-region) 2622 | 2623 | (define-key evil-normal-state-map (kbd "") 'evil-previous-visual-line) 2624 | (define-key evil-insert-state-map (kbd "") 'evil-previous-visual-line) 2625 | (define-key evil-visual-state-map (kbd "") 'evil-previous-visual-line) 2626 | 2627 | (define-key evil-normal-state-map (kbd "") 'evil-next-visual-line) 2628 | (define-key evil-insert-state-map (kbd "") 'evil-next-visual-line) 2629 | (define-key evil-visual-state-map (kbd "") 'evil-next-visual-line) 2630 | 2631 | (global-set-key (kbd "C-l") 'evil-search-highlight-persist-remove-all) 2632 | 2633 | (global-set-key (kbd "s-t") 'make-frame) 2634 | (global-set-key (kbd "s-n") 'ptb/new-untitled-buffer) 2635 | (global-set-key (kbd "s-w") 'ptb/kill-current-buffer) 2636 | (global-set-key (kbd "s-{") 'ptb/previous-buffer) 2637 | (global-set-key (kbd "s-}") 'ptb/next-buffer) 2638 | EOF 2639 | 2640 | cat << EOF > "${HOME}/.emacs.d/private/ptb/packages.el" 2641 | (setq ptb-packages '(adaptive-wrap auto-indent-mode)) 2642 | 2643 | (defun ptb/init-adaptive-wrap () 2644 | "Load the adaptive wrap package" 2645 | (use-package adaptive-wrap 2646 | :init 2647 | (setq adaptive-wrap-extra-indent 2) 2648 | :config 2649 | (progn 2650 | ;; http://stackoverflow.com/questions/13559061 2651 | (when (fboundp 'adaptive-wrap-prefix-mode) 2652 | (defun ptb/activate-adaptive-wrap-prefix-mode () 2653 | "Toggle 'visual-line-mode' and 'adaptive-wrap-prefix-mode' simultaneously." 2654 | (adaptive-wrap-prefix-mode (if visual-line-mode 1 -1))) 2655 | (add-hook 'visual-line-mode-hook 'ptb/activate-adaptive-wrap-prefix-mode))))) 2656 | 2657 | (defun ptb/init-auto-indent-mode () 2658 | (use-package auto-indent-mode 2659 | :init 2660 | (setq 2661 | auto-indent-delete-backward-char t 2662 | auto-indent-fix-org-auto-fill t 2663 | auto-indent-fix-org-move-beginning-of-line t 2664 | auto-indent-fix-org-return t 2665 | auto-indent-fix-org-yank t 2666 | auto-indent-start-org-indent t 2667 | ) 2668 | ) 2669 | ) 2670 | EOF 2671 | } 2672 | 2673 | # Customize Finder 2674 | 2675 | _finder='com.apple.finder ShowHardDrivesOnDesktop -bool false 2676 | com.apple.finder ShowExternalHardDrivesOnDesktop -bool false 2677 | com.apple.finder ShowRemovableMediaOnDesktop -bool true 2678 | com.apple.finder ShowMountedServersOnDesktop -bool true 2679 | com.apple.finder NewWindowTarget -string PfLo 2680 | com.apple.finder NewWindowTargetPath -string file://${HOME}/Dropbox/ 2681 | -globalDomain AppleShowAllExtensions -bool true 2682 | com.apple.finder FXEnableExtensionChangeWarning -bool false 2683 | com.apple.finder FXEnableRemoveFromICloudDriveWarning -bool true 2684 | com.apple.finder WarnOnEmptyTrash -bool false 2685 | com.apple.finder ShowPathbar -bool true 2686 | com.apple.finder ShowStatusBar -bool true ' 2687 | 2688 | custom_finder () { 2689 | config_defaults "${_finder}" 2690 | defaults write "com.apple.finder" "NSToolbar Configuration Browser" \ 2691 | '{ 2692 | "TB Display Mode" = 2; 2693 | "TB Item Identifiers" = ( 2694 | "com.apple.finder.BACK", 2695 | "com.apple.finder.PATH", 2696 | "com.apple.finder.SWCH", 2697 | "com.apple.finder.ARNG", 2698 | "NSToolbarFlexibleSpaceItem", 2699 | "com.apple.finder.SRCH", 2700 | "com.apple.finder.ACTN" 2701 | ); 2702 | }' 2703 | } 2704 | 2705 | # Customize getmail 2706 | 2707 | _getmail_ini='destination ignore_stderr true 2708 | destination type MDA_external 2709 | options delete true 2710 | options delivered_to false 2711 | options read_all false 2712 | options received false 2713 | options verbose 0 2714 | retriever mailboxes ("[Gmail]/All Mail",) 2715 | retriever move_on_delete [Gmail]/Trash 2716 | retriever port 993 2717 | retriever server imap.gmail.com 2718 | retriever type SimpleIMAPSSLRetriever' 2719 | _getmail_plist='add :KeepAlive bool true 2720 | add :ProcessType string Background 2721 | add :ProgramArguments array 2722 | add :ProgramArguments:0 string /usr/local/bin/getmail 2723 | add :ProgramArguments:1 string --idle 2724 | add :ProgramArguments:2 string [Gmail]/All Mail 2725 | add :ProgramArguments:3 string --rcfile 2726 | add :RunAtLoad bool true 2727 | add :StandardOutPath string getmail.log 2728 | add :StandardErrorPath string getmail.err' 2729 | custom_getmail () { 2730 | test -d "${HOME}/.getmail" || \ 2731 | mkdir -m go= "${HOME}/.getmail" 2732 | 2733 | while true; do 2734 | e=$(ask2 "To configure getmail, enter your email address." "Configure Getmail" "No More Addresses" "Create Configuration" "$(whoami)@$(hostname -f | cut -d. -f2-)" "false") 2735 | test -n "$e" || break 2736 | 2737 | security find-internet-password -a "$e" -D "getmail password" > /dev/null || \ 2738 | p=$(ask2 "Enter your password for $e." "Configure Getmail" "Cancel" "Set Password" "" "true") && \ 2739 | security add-internet-password -a "$e" -s "imap.gmail.com" -r "imap" \ 2740 | -l "$e" -D "getmail password" -P 993 -w "$p" 2741 | 2742 | if which crudini > /dev/null; then 2743 | gm="${HOME}/.getmail/${e}" 2744 | printf "%s\n" "${_getmail_ini}" | \ 2745 | while IFS="$(printf '\t')" read section key value; do 2746 | crudini --set "$gm" "$section" "$key" "$value" 2747 | done 2748 | crudini --set "$gm" "destination" "arguments" "('-c','/usr/local/etc/dovecot/dovecot.conf','-d','$(whoami)')" 2749 | crudini --set "$gm" "destination" "path" "$(find '/usr/local/Cellar/dovecot' -name 'dovecot-lda' -print -quit)" 2750 | crudini --set "$gm" "retriever" "username" "$e" 2751 | fi 2752 | 2753 | la="${HOME}/Library/LaunchAgents/ca.pyropus.getmail.${e}" 2754 | 2755 | test -d "$(dirname $la)" || \ 2756 | mkdir -p "$(dirname $la)" 2757 | launchctl unload "${la}.plist" 2> /dev/null 2758 | rm -f "${la}.plist" 2759 | 2760 | config_plist "$_getmail_plist" "${la}.plist" 2761 | config_defaults "$(printf "${la}\tLabel\t-string\tca.pyropus.getmail.${e}\t")" 2762 | config_defaults "$(printf "${la}\tProgramArguments\t-array-add\t${e}\t")" 2763 | config_defaults "$(printf "${la}\tWorkingDirectory\t-string\t${HOME}/.getmail\t")" 2764 | 2765 | plutil -convert xml1 "${la}.plist" 2766 | launchctl load "${la}.plist" 2> /dev/null 2767 | done 2768 | } 2769 | 2770 | # Customize Git 2771 | 2772 | custom_git () { 2773 | if ! test -e "${HOME}/.gitconfig"; then 2774 | true 2775 | fi 2776 | } 2777 | 2778 | # Customize GnuPG 2779 | 2780 | custom_gnupg () { 2781 | if ! test -d "${HOME}/.gnupg"; then 2782 | true 2783 | fi 2784 | } 2785 | 2786 | # Customize iStat Menus 2787 | 2788 | _istatmenus='com.bjango.istatmenus5.extras MenubarSkinColor -int 8 2789 | com.bjango.istatmenus5.extras MenubarTheme -int 0 2790 | com.bjango.istatmenus5.extras DropdownTheme -int 1 2791 | com.bjango.istatmenus5.extras CPU_MenubarMode -string 100,2,0 2792 | com.bjango.istatmenus5.extras CPU_MenubarTextSize -int 14 2793 | com.bjango.istatmenus5.extras CPU_MenubarGraphShowBackground -int 0 2794 | com.bjango.istatmenus5.extras CPU_MenubarGraphWidth -int 32 2795 | com.bjango.istatmenus5.extras CPU_MenubarGraphBreakdowns -int 0 2796 | com.bjango.istatmenus5.extras CPU_MenubarGraphCustomColors -int 0 2797 | com.bjango.istatmenus5.extras CPU_MenubarGraphOverall -string 0.40 0.60 0.40 1.00 2798 | com.bjango.istatmenus5.extras CPU_MenubarCombineCores -int 1 2799 | com.bjango.istatmenus5.extras CPU_MenubarGroupItems -int 0 2800 | com.bjango.istatmenus5.extras CPU_MenubarSingleHistoryGraph -int 0 2801 | com.bjango.istatmenus5.extras CPU_CombineLogicalCores -int 1 2802 | com.bjango.istatmenus5.extras CPU_AppFormat -int 0 2803 | com.bjango.istatmenus5.extras Memory_MenubarMode -string 100,2,6 2804 | com.bjango.istatmenus5.extras Memory_MenubarPercentageSize -int 14 2805 | com.bjango.istatmenus5.extras Memory_MenubarGraphBreakdowns -int 1 2806 | com.bjango.istatmenus5.extras Memory_MenubarGraphCustomColors -int 0 2807 | com.bjango.istatmenus5.extras Memory_MenubarGraphOverall -string 0.40 0.60 0.40 1.00 2808 | com.bjango.istatmenus5.extras Memory_MenubarGraphWired -string 0.40 0.60 0.40 1.00 2809 | com.bjango.istatmenus5.extras Memory_MenubarGraphActive -string 0.47 0.67 0.47 1.00 2810 | com.bjango.istatmenus5.extras Memory_MenubarGraphCompressed -string 0.53 0.73 0.53 1.00 2811 | com.bjango.istatmenus5.extras Memory_MenubarGraphInactive -string 0.60 0.80 0.60 1.00 2812 | com.bjango.istatmenus5.extras Memory_IgnoreInactive -int 0 2813 | com.bjango.istatmenus5.extras Memory_AppFormat -int 0 2814 | com.bjango.istatmenus5.extras Memory_DisplayFormat -int 1 2815 | com.bjango.istatmenus5.extras Disks_MenubarMode -string 100,9,8 2816 | com.bjango.istatmenus5.extras Disks_MenubarGroupItems -int 1 2817 | com.bjango.istatmenus5.extras Disks_MenubarRWShowLabel -int 1 2818 | com.bjango.istatmenus5.extras Disks_MenubarRWBold -int 0 2819 | com.bjango.istatmenus5.extras Disks_MenubarGraphActivityWidth -int 32 2820 | com.bjango.istatmenus5.extras Disks_MenubarGraphActivityShowBackground -int 0 2821 | com.bjango.istatmenus5.extras Disks_MenubarGraphActivityCustomColors -int 0 2822 | com.bjango.istatmenus5.extras Disks_MenubarGraphActivityRead -string 0.60 0.80 0.60 1.00 2823 | com.bjango.istatmenus5.extras Disks_MenubarGraphActivityWrite -string 0.40 0.60 0.40 1.00 2824 | com.bjango.istatmenus5.extras Disks_SeperateFusion -int 1 2825 | com.bjango.istatmenus5.extras Network_MenubarMode -string 4,0,1 2826 | com.bjango.istatmenus5.extras Network_TextUploadColor-Dark -string 1.00 1.00 1.00 1.00 2827 | com.bjango.istatmenus5.extras Network_TextDownloadColor-Dark -string 1.00 1.00 1.00 1.00 2828 | com.bjango.istatmenus5.extras Network_GraphWidth -int 32 2829 | com.bjango.istatmenus5.extras Network_GraphShowBackground -int 0 2830 | com.bjango.istatmenus5.extras Network_GraphCustomColors -int 0 2831 | com.bjango.istatmenus5.extras Network_GraphUpload -string 0.60 0.80 0.60 1.00 2832 | com.bjango.istatmenus5.extras Network_GraphDownload -string 0.40 0.60 0.40 1.00 2833 | com.bjango.istatmenus5.extras Network_GraphMode -int 1 2834 | com.bjango.istatmenus5.extras Battery_MenubarMode -string 5,0 2835 | com.bjango.istatmenus5.extras Battery_ColorGraphCustomColors -int 1 2836 | com.bjango.istatmenus5.extras Battery_ColorGraphCharged -string 0.40 0.60 0.40 1.00 2837 | com.bjango.istatmenus5.extras Battery_ColorGraphCharging -string 0.60 0.80 0.60 1.00 2838 | com.bjango.istatmenus5.extras Battery_ColorGraphDraining -string 1.00 0.60 0.60 1.00 2839 | com.bjango.istatmenus5.extras Battery_ColorGraphLow -string 1.00 0.20 0.20 1.00 2840 | com.bjango.istatmenus5.extras Battery_PercentageSize -int 14 2841 | com.bjango.istatmenus5.extras Battery_MenubarCustomizeStates -int 0 2842 | com.bjango.istatmenus5.extras Battery_MenubarHideBluetooth -int 1 2843 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add EE 2844 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add \\040 2845 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add MMM 2846 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add \\040 2847 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add d 2848 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add \\040 2849 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add h 2850 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add : 2851 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add mm 2852 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add : 2853 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add ss 2854 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add \\040 2855 | com.bjango.istatmenus5.extras Time_MenubarFormat -array-add a 2856 | com.bjango.istatmenus5.extras Time_DropdownFormat -array-add EE 2857 | com.bjango.istatmenus5.extras Time_DropdownFormat -array-add \\040 2858 | com.bjango.istatmenus5.extras Time_DropdownFormat -array-add h 2859 | com.bjango.istatmenus5.extras Time_DropdownFormat -array-add : 2860 | com.bjango.istatmenus5.extras Time_DropdownFormat -array-add mm 2861 | com.bjango.istatmenus5.extras Time_DropdownFormat -array-add \\040 2862 | com.bjango.istatmenus5.extras Time_DropdownFormat -array-add a 2863 | com.bjango.istatmenus5.extras Time_DropdownFormat -array-add \\040\\050 2864 | com.bjango.istatmenus5.extras Time_DropdownFormat -array-add zzz 2865 | com.bjango.istatmenus5.extras Time_DropdownFormat -array-add \\051 2866 | com.bjango.istatmenus5.extras Time_Cities -array-add 4930956 2867 | com.bjango.istatmenus5.extras Time_Cities -array-add 4887398 2868 | com.bjango.istatmenus5.extras Time_Cities -array-add 5419384 2869 | com.bjango.istatmenus5.extras Time_Cities -array-add 5392171 2870 | com.bjango.istatmenus5.extras Time_Cities -array-add 5879400 2871 | com.bjango.istatmenus5.extras Time_Cities -array-add 5856195 2872 | com.bjango.istatmenus5.extras Time_TextSize -int 14 ' 2873 | 2874 | custom_istatmenus () { 2875 | defaults delete com.bjango.istatmenus5.extras Time_MenubarFormat > /dev/null 2>&1 2876 | defaults delete com.bjango.istatmenus5.extras Time_DropdownFormat > /dev/null 2>&1 2877 | defaults delete com.bjango.istatmenus5.extras Time_Cities > /dev/null 2>&1 2878 | config_defaults "${_istatmenus}" 2879 | } 2880 | 2881 | # Customize Meteorologist 2882 | 2883 | _meteorologist='com.heat.meteorologist controlsInSubmenu -string 0 2884 | com.heat.meteorologist currentWeatherInSubmenu -string 0 2885 | com.heat.meteorologist displayCityName -string 0 2886 | com.heat.meteorologist displayHumidity -string 0 2887 | com.heat.meteorologist displayWeatherIcon -string 1 2888 | com.heat.meteorologist extendedForecastIcons -string 1 2889 | com.heat.meteorologist extendedForecastInSubmenu -string 0 2890 | com.heat.meteorologist extendedForecastSingleLine -string 1 2891 | com.heat.meteorologist forecastDays -int 8 2892 | com.heat.meteorologist viewExtendedForecast -string 1 2893 | com.heat.meteorologist weatherSource_1 -int 3 ' 2894 | 2895 | custom_meteorologist () { 2896 | config_defaults "${_meteorologist}" 2897 | } 2898 | 2899 | # Customize Moom 2900 | 2901 | _moom='com.manytricks.Moom Allow For Drawers -bool true 2902 | com.manytricks.Moom Grid Spacing -bool true 2903 | com.manytricks.Moom Grid Spacing: Gap -int 2 2904 | com.manytricks.Moom Grid Spacing: Apply To Edges -bool false 2905 | com.manytricks.Moom Target Window Highlight -float 0.25 2906 | com.manytricks.Moom Stealth Mode -bool true 2907 | com.manytricks.Moom Application Mode -int 2 2908 | com.manytricks.Moom Mouse Controls -bool true 2909 | com.manytricks.Moom Mouse Controls Delay -float 0.1 2910 | com.manytricks.Moom Mouse Controls Grid -bool true 2911 | com.manytricks.Moom Mouse Controls Grid: Mode -int 3 2912 | com.manytricks.Moom Mouse Controls Grid: Columns -int 16 2913 | com.manytricks.Moom Mouse Controls Grid: Rows -int 9 2914 | com.manytricks.Moom Mouse Controls Include Custom Controls -bool true 2915 | com.manytricks.Moom Mouse Controls Include Custom Controls: Show On Hover -bool false 2916 | com.manytricks.Moom Mouse Controls Auto-Activate Window -bool true 2917 | com.manytricks.Moom Snap -bool false 2918 | com.manytricks.Moom Custom Controls -array-add { Action = 19; "Relative Frame" = "{{0, 0.5}, {0.375, 0.5}}"; } 2919 | com.manytricks.Moom Custom Controls -array-add { Action = 19; "Relative Frame" = "{{0, 0}, {0.375, 0.5}}"; } 2920 | com.manytricks.Moom Custom Controls -array-add { Action = 19; "Relative Frame" = "{{0, 0}, {0.375, 1}}"; } 2921 | com.manytricks.Moom Custom Controls -array-add { Action = 19; "Relative Frame" = "{{0.125, 0}, {0.25, 0.33333}}"; } 2922 | com.manytricks.Moom Custom Controls -array-add { Action = 19; "Relative Frame" = "{{0.375, 0.33333}, {0.3125, 0.66666}}"; } 2923 | com.manytricks.Moom Custom Controls -array-add { Action = 19; "Relative Frame" = "{{0.375, 0}, {0.3125, 0.33333}}"; } 2924 | com.manytricks.Moom Custom Controls -array-add { Action = 19; "Relative Frame" = "{{0.6875, 0.66666}, {0.3125, 0.66666}}"; } 2925 | com.manytricks.Moom Custom Controls -array-add { Action = 19; "Relative Frame" = "{{0.6875, 0.33333}, {0.3125, 0.33333}}"; } 2926 | com.manytricks.Moom Custom Controls -array-add { Action = 19; "Relative Frame" = "{{0.6875, 0}, {0.3125, 0.33333}}"; } 2927 | 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}}" ); } 2928 | com.manytricks.Moom Configuration Grid: Columns -int 16 2929 | com.manytricks.Moom Configuration Grid: Rows -int 9 2930 | com.manytricks.Moom SUEnableAutomaticChecks -bool true ' 2931 | 2932 | custom_moom () { 2933 | killall Moom > /dev/null 2>&1 2934 | defaults delete com.manytricks.Moom "Custom Controls" > /dev/null 2>&1 2935 | config_defaults "${_moom}" 2936 | test -d "/Applications/Moom.app" && \ 2937 | open "/Applications/Moom.app" 2938 | } 2939 | 2940 | # Customize MP4 Automator 2941 | 2942 | _mp4_automator='MP4 aac_adtstoasc True 2943 | MP4 audio-channel-bitrate 256 2944 | MP4 audio-codec ac3,aac 2945 | MP4 audio-default-language eng 2946 | MP4 audio-filter 2947 | MP4 audio-language eng 2948 | MP4 convert-mp4 True 2949 | MP4 copy_to 2950 | MP4 delete_original False 2951 | MP4 download-artwork Poster 2952 | MP4 download-subs True 2953 | MP4 embed-subs True 2954 | MP4 ffmpeg /usr/local/bin/ffmpeg 2955 | MP4 ffprobe /usr/local/bin/ffprobe 2956 | MP4 fullpathguess True 2957 | MP4 h264-max-level 4.1 2958 | MP4 ios-audio True 2959 | MP4 ios-audio-filter 2960 | MP4 ios-first-track-only True 2961 | MP4 max-audio-channels 2962 | MP4 move_to 2963 | MP4 output_directory 2964 | MP4 output_extension m4v 2965 | MP4 output_format mp4 2966 | MP4 permissions 644 2967 | MP4 pix-fmt 2968 | MP4 post-process False 2969 | MP4 postopts 2970 | MP4 preopts 2971 | MP4 relocate_moov True 2972 | MP4 sub-providers addic7ed,podnapisi,thesubdb,opensubtitles 2973 | MP4 subtitle-codec mov_text 2974 | MP4 subtitle-default-language eng 2975 | MP4 subtitle-encoding 2976 | MP4 subtitle-language eng 2977 | MP4 tag-language eng 2978 | MP4 tagfile True 2979 | MP4 threads auto 2980 | MP4 use-qsv-decoder-with-encoder True 2981 | MP4 video-bitrate 2982 | MP4 video-codec h264,x264 2983 | MP4 video-crf 2984 | MP4 video-max-width 1920 2985 | Plex host localhost 2986 | Plex port 32400 2987 | Plex refresh False 2988 | Plex token 2989 | Radarr host localhost 2990 | Radarr port 7878 2991 | Radarr ssl False 2992 | Radarr web_root 2993 | Sonarr host localhost 2994 | Sonarr port 8989 2995 | Sonarr ssl False 2996 | Sonarr web_root ' 2997 | 2998 | custom_mp4_automator () { 2999 | mkdir -p "${HOME}/.config/mp4_automator" && \ 3000 | curl --compressed --location --silent \ 3001 | "https://github.com/mdhiggins/sickbeard_mp4_automator/archive/master.tar.gz" | \ 3002 | tar -C "${HOME}/.config/mp4_automator" --strip-components 1 -xf - 3003 | printf "%s\n" "2.7.13" > "${HOME}/.config/mp4_automator/.python-version" 3004 | 3005 | if which crudini > /dev/null; then 3006 | printf "%s\n" "${_mp4_automator}" | \ 3007 | while IFS="$(printf '\t')" read section key value; do 3008 | crudini --set "${HOME}/.config/mp4_automator/autoProcess.ini" "${section}" "${key}" "${value}" 3009 | done 3010 | 3011 | open "http://localhost:7878/settings/general" 3012 | RADARRAPI="$(ask 'Radarr API Key?' 'Set API Key' '')" 3013 | crudini --set "${HOME}/.config/mp4_automator/autoProcess.ini" "Radarr" "apikey" "$RADARRAPI" 3014 | 3015 | open "http://localhost:8989/settings/general" 3016 | SONARRAPI="$(ask 'Sonarr API Key?' 'Set API Key' '')" 3017 | crudini --set "${HOME}/.config/mp4_automator/autoProcess.ini" "Sonarr" "apikey" "$SONARRAPI" 3018 | fi 3019 | 3020 | find "${HOME}/.config/mp4_automator" -name "*.py" -print0 | \ 3021 | xargs -0 -L 1 sed -i "" -e "s:/usr/bin/env python:/usr/local/python/versions/2.7.13/bin/python:" 3022 | } 3023 | 3024 | # Customize nvALT 3025 | 3026 | _nvalt='net.elasticthreads.nv TableFontPointSize -int 11 3027 | net.elasticthreads.nv AppActivationKeyCode -int -1 3028 | net.elasticthreads.nv AppActivationModifiers -int -1 3029 | net.elasticthreads.nv AutoCompleteSearches -bool true 3030 | net.elasticthreads.nv ConfirmNoteDeletion -bool true 3031 | net.elasticthreads.nv QuitWhenClosingMainWindow -bool false 3032 | net.elasticthreads.nv StatusBarItem -bool true 3033 | net.elasticthreads.nv ShowDockIcon -bool false 3034 | net.elasticthreads.nv PastePreservesStyle -bool false 3035 | net.elasticthreads.nv CheckSpellingInNoteBody -bool false 3036 | net.elasticthreads.nv TabKeyIndents -bool true 3037 | net.elasticthreads.nv UseSoftTabs -bool true 3038 | net.elasticthreads.nv MakeURLsClickable -bool true 3039 | net.elasticthreads.nv AutoSuggestLinks -bool false 3040 | net.elasticthreads.nv UseMarkdownImport -bool false 3041 | net.elasticthreads.nv UseReadability -bool false 3042 | net.elasticthreads.nv rtl -bool false 3043 | net.elasticthreads.nv UseAutoPairing -bool true 3044 | net.elasticthreads.nv DefaultEEIdentifier -string org.gnu.Emacs 3045 | net.elasticthreads.nv UserEEIdentifiers -array-add com.apple.TextEdit 3046 | net.elasticthreads.nv UserEEIdentifiers -array-add org.gnu.Emacs 3047 | net.elasticthreads.nv NoteBodyFont -data 040b73747265616d747970656481e803840140848484064e53466f6e741e8484084e534f626a65637400858401692884055b3430635d060000001e000000fffe49006e0063006f006e0073006f006c006100740061004c004700430000008401660d8401630098019800980086 3048 | net.elasticthreads.nv HighlightSearchTerms -bool true 3049 | net.elasticthreads.nv SearchTermHighlightColor -data 040b73747265616d747970656481e803840140848484074e53436f6c6f72008484084e534f626a65637400858401630184046666666683cdcc4c3f0183cdcc4c3f0186 3050 | net.elasticthreads.nv ForegroundTextColor -data 040b73747265616d747970656481e803840140848484074e53436f6c6f72008484084e534f626a65637400858401630184046666666683cdcc4c3f83cdcc4c3f83cdcc4c3f0186 3051 | net.elasticthreads.nv BackgroundTextColor -data 040b73747265616d747970656481e803840140848484074e53436f6c6f72008484084e534f626a65637400858401630184046666666683d1d0d03d83d1d0d03d83d1d0d03d0186 3052 | net.elasticthreads.nv ShowGrid -bool true 3053 | net.elasticthreads.nv AlternatingRows -bool true 3054 | net.elasticthreads.nv UseETScrollbarsOnLion -bool false 3055 | net.elasticthreads.nv KeepsMaxTextWidth -bool true 3056 | net.elasticthreads.nv NoteBodyMaxWidth -int 650 3057 | net.elasticthreads.nv HorizontalLayout -bool true 3058 | net.elasticthreads.nv NoteAttributesVisible -array-add Title 3059 | net.elasticthreads.nv NoteAttributesVisible -array-add Tags 3060 | net.elasticthreads.nv TableIsReverseSorted -bool true 3061 | net.elasticthreads.nv TableSortColumn -string Date Modified 3062 | net.elasticthreads.nv TableColumnsHaveBodyPreview -bool true ' 3063 | _nvalt_launchd='add :KeepAlive bool true 3064 | add :Label string net.elasticthreads.nv 3065 | add :ProcessType string Interactive 3066 | add :Program string /Applications/nvALT.app/Contents/MacOS/nvALT 3067 | add :RunAtLoad bool true' 3068 | 3069 | custom_nvalt () { 3070 | config_defaults "$_nvalt" 3071 | config_launchd "${HOME}/Library/LaunchAgents/net.elasticthreads.nv.plist" "$_nvalt_launchd" 3072 | } 3073 | 3074 | # Customize NZBGet 3075 | 3076 | # - $7.50/mth: http://www.news.astraweb.com/specials/2mospecial.html 3077 | # - €13/100GB: https://www.tweaknews.eu/en/usenet-plans 3078 | # - $17/100GB: https://www.newsdemon.com/usenet-access.php 3079 | # - $20/200GB: https://billing.blocknews.net/signup.php 3080 | 3081 | 3082 | _nzbget='ControlIP 127.0.0.1 3083 | ControlPort 6789 3084 | AuthorizedIP 127.0.0.1 3085 | Server1.Level 0 3086 | Server1.Host ssl.astraweb.com 3087 | Server1.Port 443 3088 | Server1.Encryption yes 3089 | Server1.Connections 6 3090 | Server1.Retention 3000 3091 | Server2.Level 0 3092 | Server2.Host ssl-us.astraweb.com 3093 | Server2.Port 443 3094 | Server2.Encryption yes 3095 | Server2.Connections 6 3096 | Server2.Retention 3000 3097 | Server3.Level 0 3098 | Server3.Host ssl-eu.astraweb.com 3099 | Server3.Port 443 3100 | Server3.Encryption yes 3101 | Server3.Connections 6 3102 | Server3.Retention 3000 3103 | Server4.Level 1 3104 | Server4.Host news.tweaknews.eu 3105 | Server4.Port 443 3106 | Server4.Encryption yes 3107 | Server4.Connections 40 3108 | Server4.Retention 2500 3109 | Server5.Level 2 3110 | Server5.Host news.newsdemon.com 3111 | Server5.Port 563 3112 | Server5.Encryption yes 3113 | Server5.Connections 12 3114 | Server5.Retention 3303 3115 | Server6.Level 2 3116 | Server6.Host us.newsdemon.com 3117 | Server6.Port 563 3118 | Server6.Encryption yes 3119 | Server6.Connections 12 3120 | Server6.Retention 3303 3121 | Server7.Level 2 3122 | Server7.Host eu.newsdemon.com 3123 | Server7.Port 563 3124 | Server7.Encryption yes 3125 | Server7.Connections 12 3126 | Server7.Retention 3303 3127 | Server8.Level 2 3128 | Server8.Host nl.newsdemon.com 3129 | Server8.Port 563 3130 | Server8.Encryption yes 3131 | Server8.Connections 12 3132 | Server8.Retention 3303 3133 | Server9.Level 2 3134 | Server9.Host usnews.blocknews.net 3135 | Server9.Port 443 3136 | Server9.Encryption yes 3137 | Server9.Connections 16 3138 | Server9.Retention 3240 3139 | Server10.Level 2 3140 | Server10.Host eunews.blocknews.net 3141 | Server10.Port 443 3142 | Server10.Encryption yes 3143 | Server10.Connections 16 3144 | Server10.Retention 3240 3145 | Server11.Level 2 3146 | Server11.Host eunews2.blocknews.net 3147 | Server11.Port 443 3148 | Server11.Encryption yes 3149 | Server11.Connections 16 3150 | Server11.Retention 3240' 3151 | 3152 | custom_nzbget () { 3153 | f="${HOME}/Library/Application Support/NZBGet/nzbget.conf" 3154 | mkdir -p "$(dirname $f)" 3155 | if which crudini > /dev/null; then 3156 | printf "%s\n" "${_nzbget}" | \ 3157 | while IFS="$(printf '\t')" read key value; do 3158 | crudini --set "$f" "" "${key}" "${value}" 3159 | done 3160 | fi 3161 | sed -i "" -e "s/ = /=/g" "$f" 3162 | } 3163 | 3164 | # Customize Safari 3165 | 3166 | _safari='com.apple.Safari AlwaysRestoreSessionAtLaunch -bool false 3167 | com.apple.Safari OpenPrivateWindowWhenNotRestoringSessionAtLaunch -bool false 3168 | com.apple.Safari NewWindowBehavior -int 1 3169 | com.apple.Safari NewTabBehavior -int 1 3170 | com.apple.Safari AutoOpenSafeDownloads -bool false 3171 | com.apple.Safari TabCreationPolicy -int 2 3172 | com.apple.Safari AutoFillFromAddressBook -bool false 3173 | com.apple.Safari AutoFillPasswords -bool true 3174 | com.apple.Safari AutoFillCreditCardData -bool false 3175 | com.apple.Safari AutoFillMiscellaneousForms -bool false 3176 | com.apple.Safari SuppressSearchSuggestions -bool false 3177 | com.apple.Safari UniversalSearchEnabled -bool false 3178 | com.apple.Safari WebsiteSpecificSearchEnabled -bool true 3179 | com.apple.Safari PreloadTopHit -bool true 3180 | com.apple.Safari ShowFavoritesUnderSmartSearchField -bool false 3181 | com.apple.Safari SafariGeolocationPermissionPolicy -int 0 3182 | com.apple.Safari BlockStoragePolicy -int 2 3183 | com.apple.Safari WebKitStorageBlockingPolicy -int 1 3184 | com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2StorageBlockingPolicy -int 1 3185 | com.apple.Safari SendDoNotTrackHTTPHeader -bool true 3186 | com.apple.WebFoundation NSHTTPAcceptCookies -string always 3187 | com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2ApplePayCapabilityDisclosureAllowed -bool true 3188 | com.apple.Safari CanPromptForPushNotifications -bool false 3189 | com.apple.Safari ShowFullURLInSmartSearchField -bool true 3190 | com.apple.Safari WebKitDefaultTextEncodingName -string utf-8 3191 | com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DefaultTextEncodingName -string utf-8 3192 | com.apple.Safari IncludeDevelopMenu -bool true 3193 | com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true 3194 | com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true 3195 | com.apple.Safari ShowFavoritesBar-v2 -bool true 3196 | com.apple.Safari AlwaysShowTabBar -bool true 3197 | com.apple.Safari ShowStatusBar -bool true 3198 | com.apple.Safari ShowStatusBarInFullScreen -bool true ' 3199 | 3200 | custom_safari () { 3201 | config_defaults "${_safari}" 3202 | } 3203 | 3204 | # Customize Sieve 3205 | 3206 | custom_sieve () { 3207 | cat > "${HOME}/.sieve" << EOF 3208 | require ["date", "fileinto", "imap4flags", "mailbox", "relational", "variables"]; 3209 | 3210 | setflag "\\\\Seen"; 3211 | 3212 | if date :is "date" "year" "1995" { fileinto :create "Archives.1995"; } 3213 | if date :is "date" "year" "1996" { fileinto :create "Archives.1996"; } 3214 | if date :is "date" "year" "1997" { fileinto :create "Archives.1997"; } 3215 | if date :is "date" "year" "1998" { fileinto :create "Archives.1998"; } 3216 | if date :is "date" "year" "1999" { fileinto :create "Archives.1999"; } 3217 | if date :is "date" "year" "2000" { fileinto :create "Archives.2000"; } 3218 | if date :is "date" "year" "2001" { fileinto :create "Archives.2001"; } 3219 | if date :is "date" "year" "2002" { fileinto :create "Archives.2002"; } 3220 | if date :is "date" "year" "2003" { fileinto :create "Archives.2003"; } 3221 | if date :is "date" "year" "2004" { fileinto :create "Archives.2004"; } 3222 | if date :is "date" "year" "2005" { fileinto :create "Archives.2005"; } 3223 | if date :is "date" "year" "2006" { fileinto :create "Archives.2006"; } 3224 | if date :is "date" "year" "2007" { fileinto :create "Archives.2007"; } 3225 | if date :is "date" "year" "2008" { fileinto :create "Archives.2008"; } 3226 | if date :is "date" "year" "2009" { fileinto :create "Archives.2009"; } 3227 | if date :is "date" "year" "2010" { fileinto :create "Archives.2010"; } 3228 | if date :is "date" "year" "2011" { fileinto :create "Archives.2011"; } 3229 | if date :is "date" "year" "2012" { fileinto :create "Archives.2012"; } 3230 | if date :is "date" "year" "2013" { fileinto :create "Archives.2013"; } 3231 | if date :is "date" "year" "2014" { fileinto :create "Archives.2014"; } 3232 | if date :is "date" "year" "2015" { fileinto :create "Archives.2015"; } 3233 | if date :is "date" "year" "2016" { fileinto :create "Archives.2016"; } 3234 | if date :is "date" "year" "2017" { fileinto :create "Archives.2017"; } 3235 | if date :is "date" "year" "2018" { fileinto :create "Archives.2018"; } 3236 | if date :is "date" "year" "2019" { fileinto :create "Archives.2019"; } 3237 | if date :is "date" "year" "2020" { fileinto :create "Archives.2020"; } 3238 | EOF 3239 | } 3240 | 3241 | # Customize Sonarr 3242 | 3243 | _sonarr='Advanced Settings Shown 3244 | Rename Episodes Yes 3245 | Standard Episode Format {Series Title} - s{season:00}e{episode:00} - {Episode Title} 3246 | Daily Episode Format {Series Title} - {Air-Date} - {Episode Title} 3247 | Anime Episode Format {Series Title} - s{season:00}e{episode:00} - {Episode Title} 3248 | Multi-Episode Style Scene 3249 | Create empty series folders Yes 3250 | Ignore Deleted Episodes Yes 3251 | Change File Date UTC Air Date 3252 | Set Permissions Yes 3253 | Download Clients NZBGet 3254 | NZBGet: Name NZBGet 3255 | NZBGet: Category Sonarr 3256 | Failed: Remove No 3257 | Drone Factory Interval 0 3258 | Connect: Custom Script 3259 | postSonarr: Name postSonarr 3260 | postSonarr: On Grab No 3261 | postSonarr: On Download Yes 3262 | postSonarr: On Upgrade Yes 3263 | postSonarr: On Rename No 3264 | postSonarr: Path ${HOME}/.config/mp4_automator/postSonarr.py 3265 | Start-Up: Open browser on start No 3266 | Security: Authentication Basic (Browser popup)' 3267 | 3268 | custom_sonarr () { 3269 | open "http://localhost:7878/settings/mediamanagement" 3270 | open "http://localhost:8989/settings/mediamanagement" 3271 | printf "%s" "$_sonarr" | \ 3272 | while IFS="$(printf '\t')" read pref value; do 3273 | printf "\033[1m\033[34m%s:\033[0m %s\n" "$pref" "$value" 3274 | done 3275 | } 3276 | 3277 | # Customize SSH 3278 | 3279 | custom_ssh () { 3280 | if ! test -d "${HOME}/.ssh"; then 3281 | mkdir -m go= "${HOME}/.ssh" 3282 | e="$(ask 'New SSH Key: Email Address?' 'OK' '')" 3283 | ssh-keygen -t ed25519 -a 100 -C "$e" 3284 | cat << EOF > "${HOME}/.ssh/config" 3285 | Host * 3286 | AddKeysToAgent yes 3287 | IdentityFile ~/.ssh/id_ed25519 3288 | EOF 3289 | pbcopy < "${HOME}/.ssh/id_ed25519.pub" 3290 | open "https://github.com/settings/keys" 3291 | fi 3292 | } 3293 | 3294 | # Customize System Preferences 3295 | 3296 | custom_sysprefs () { 3297 | custom_general 3298 | custom_desktop "/Library/Desktop Pictures/Solid Colors/Solid Black.png" 3299 | custom_screensaver 3300 | custom_dock 3301 | custom_dockapps 3302 | # custom_security 3303 | custom_text 3304 | custom_dictation 3305 | custom_mouse 3306 | custom_trackpad 3307 | custom_sound 3308 | custom_loginitems 3309 | custom_siri 3310 | custom_clock 3311 | custom_a11y 3312 | custom_other 3313 | } 3314 | 3315 | # Customize General 3316 | 3317 | _general='-globalDomain AppleAquaColorVariant -int 6 3318 | -globalDomain AppleInterfaceStyle -string Dark 3319 | -globalDomain _HIHideMenuBar -bool false 3320 | -globalDomain AppleHighlightColor -string 0.600000 0.800000 0.600000 3321 | -globalDomain NSTableViewDefaultSizeMode -int 1 3322 | -globalDomain AppleShowScrollBars -string Always 3323 | -globalDomain AppleScrollerPagingBehavior -bool false 3324 | -globalDomain NSCloseAlwaysConfirmsChanges -bool true 3325 | -globalDomain NSQuitAlwaysKeepsWindows -bool false 3326 | com.apple.coreservices.useractivityd ActivityAdvertisingAllowed -bool true -currentHost 3327 | com.apple.coreservices.useractivityd ActivityReceivingAllowed -bool true -currentHost 3328 | -globalDomain AppleFontSmoothing -int 1 -currentHost' 3329 | 3330 | custom_general () { 3331 | osascript -e 'tell application "System Events" to tell appearance preferences to set dark mode to true' 3332 | config_defaults "${_general}" 3333 | osascript << EOF 3334 | tell application "System Events" 3335 | tell appearance preferences 3336 | set recent documents limit to 0 3337 | set recent applications limit to 0 3338 | set recent servers limit to 0 3339 | end tell 3340 | end tell 3341 | EOF 3342 | } 3343 | 3344 | # Customize Desktop Picture 3345 | 3346 | custom_desktop () { 3347 | osascript - "${1}" << EOF 2> /dev/null 3348 | on run { _this } 3349 | tell app "System Events" to set picture of every desktop to POSIX file _this 3350 | end run 3351 | EOF 3352 | } 3353 | 3354 | # Customize Screen Saver 3355 | 3356 | _screensaver='com.apple.screensaver idleTime -int 0 -currentHost 3357 | com.apple.dock wvous-tl-corner -int 2 3358 | com.apple.dock wvous-tl-modifier -int 1048576 3359 | com.apple.dock wvous-bl-corner -int 10 3360 | com.apple.dock wvous-bl-modifier -int 0 ' 3361 | 3362 | custom_screensaver () { 3363 | if test -e "/Library/Screen Savers/BlankScreen.saver"; then 3364 | defaults -currentHost write com.apple.screensaver moduleDict \ 3365 | '{ 3366 | moduleName = "BlankScreen"; 3367 | path = "/Library/Screen Savers/BlankScreen.saver"; 3368 | type = 0; 3369 | }' 3370 | fi 3371 | config_defaults "${_screensaver}" 3372 | } 3373 | 3374 | # Customize Dock 3375 | 3376 | _dock='com.apple.dock tilesize -int 32 3377 | com.apple.dock magnification -bool false 3378 | com.apple.dock largesize -int 64 3379 | com.apple.dock orientation -string right 3380 | com.apple.dock mineffect -string scale 3381 | -globalDomain AppleWindowTabbingMode -string always 3382 | -globalDomain AppleActionOnDoubleClick -string None 3383 | com.apple.dock minimize-to-application -bool true 3384 | com.apple.dock launchanim -bool false 3385 | com.apple.dock autohide -bool true 3386 | com.apple.dock show-process-indicators -bool true ' 3387 | 3388 | custom_dock () { 3389 | config_defaults "${_dock}" 3390 | } 3391 | 3392 | # Customize Dock Apps 3393 | 3394 | _dockapps='Metanota Pro 3395 | Mail 3396 | Safari 3397 | Messages 3398 | Emacs 3399 | BBEdit 3400 | Atom 3401 | Utilities/Terminal 3402 | iTerm 3403 | System Preferences 3404 | PCalc 3405 | Hermes 3406 | iTunes 3407 | VLC' 3408 | 3409 | custom_dockapps () { 3410 | defaults write com.apple.dock "autohide-delay" -float 0 3411 | defaults write com.apple.dock "autohide-time-modifier" -float 0.5 3412 | 3413 | defaults delete com.apple.dock "persistent-apps" 3414 | 3415 | printf "%s\n" "${_dockapps}" | \ 3416 | while IFS="$(printf '\t')" read app; do 3417 | if test -e "/Applications/${app}.app"; then 3418 | defaults write com.apple.dock "persistent-apps" -array-add \ 3419 | "tile-datafile-data_CFURLString/Applications/${app}.app/_CFURLStringType0" 3420 | fi 3421 | done 3422 | 3423 | defaults delete com.apple.dock "persistent-others" 3424 | 3425 | osascript -e 'tell app "Dock" to quit' 3426 | } 3427 | 3428 | # Customize Security 3429 | 3430 | _security='com.apple.screensaver askForPassword -int 1 3431 | com.apple.screensaver askForPasswordDelay -int 5 ' 3432 | 3433 | custom_security () { 3434 | config_defaults "${_security}" 3435 | } 3436 | 3437 | # Customize Text 3438 | 3439 | _text='-globalDomain NSAutomaticCapitalizationEnabled -bool false 3440 | -globalDomain NSAutomaticPeriodSubstitutionEnabled -bool false 3441 | -globalDomain NSAutomaticQuoteSubstitutionEnabled -bool false ' 3442 | custom_text () { 3443 | config_defaults "${_text}" 3444 | } 3445 | 3446 | # Customize Dictation 3447 | 3448 | _dictation='com.apple.speech.recognition.AppleSpeechRecognition.prefs DictationIMMasterDictationEnabled -bool true ' 3449 | 3450 | custom_dictation () { 3451 | config_defaults "${_dictation}" 3452 | } 3453 | 3454 | # Customize Mouse 3455 | 3456 | _mouse='-globalDomain com.apple.swipescrolldirection -bool false ' 3457 | 3458 | custom_mouse () { 3459 | config_defaults "${_mouse}" 3460 | } 3461 | 3462 | # Customize Trackpad 3463 | 3464 | _trackpad='com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true 3465 | -globalDomain com.apple.mouse.tapBehavior -int 1 -currentHost' 3466 | 3467 | custom_trackpad () { 3468 | config_defaults "${_trackpad}" 3469 | } 3470 | 3471 | # Customize Sound 3472 | 3473 | _sound='-globalDomain com.apple.sound.beep.sound -string /System/Library/Sounds/Sosumi.aiff 3474 | -globalDomain com.apple.sound.uiaudio.enabled -int 0 3475 | -globalDomain com.apple.sound.beep.feedback -int 0 ' 3476 | 3477 | custom_sound () { 3478 | config_defaults "${_sound}" 3479 | } 3480 | 3481 | # Customize Login Items 3482 | 3483 | _loginitems='/Applications/Alfred 3.app 3484 | /Applications/autoping.app 3485 | /Applications/Caffeine.app 3486 | /Applications/Coffitivity.app 3487 | /Applications/Dropbox.app 3488 | /Applications/HardwareGrowler.app 3489 | /Applications/I Love Stars.app 3490 | /Applications/IPMenulet.app 3491 | /Applications/iTunes.app/Contents/MacOS/iTunesHelper.app 3492 | /Applications/Menubar Countdown.app 3493 | /Applications/Meteorologist.app 3494 | /Applications/Moom.app 3495 | /Applications/NZBGet.app 3496 | /Applications/Plex Media Server.app 3497 | /Applications/Radarr.app 3498 | /Applications/Sonarr-Menu.app 3499 | /Library/PreferencePanes/SteerMouse.prefPane/Contents/MacOS/SteerMouse Manager.app' 3500 | custom_loginitems () { 3501 | printf "%s\n" "${_loginitems}" | \ 3502 | while IFS="$(printf '\t')" read app; do 3503 | if test -e "$app"; then 3504 | osascript - "$app" << EOF > /dev/null 3505 | on run { _app } 3506 | tell app "System Events" 3507 | make new login item with properties { hidden: true, path: _app } 3508 | end tell 3509 | end run 3510 | EOF 3511 | fi 3512 | done 3513 | } 3514 | 3515 | # Customize Siri 3516 | 3517 | custom_siri () { 3518 | defaults write com.apple.assistant.backedup "Output Voice" \ 3519 | '{ 3520 | Custom = 1; 3521 | Footprint = 0; 3522 | Gender = 1; 3523 | Language = "en-US"; 3524 | }' 3525 | defaults write com.apple.Siri StatusMenuVisible -bool false 3526 | } 3527 | 3528 | # Customize Clock 3529 | 3530 | custom_clock () { 3531 | defaults -currentHost write com.apple.systemuiserver dontAutoLoad \ 3532 | -array-add "/System/Library/CoreServices/Menu Extras/Clock.menu" 3533 | defaults write com.apple.menuextra.clock DateFormat \ 3534 | -string "EEE MMM d h:mm:ss a" 3535 | } 3536 | 3537 | # Customize Accessibility 3538 | 3539 | _a11y='com.apple.universalaccess reduceTransparency -bool true ' 3540 | _speech='com.apple.speech.voice.prefs SelectedVoiceName -string Allison 3541 | com.apple.speech.voice.prefs SelectedVoiceCreator -int 1886745202 3542 | com.apple.speech.voice.prefs SelectedVoiceID -int 184555197 ' 3543 | 3544 | custom_a11y () { 3545 | config_defaults "${_a11y}" 3546 | 3547 | if test -d "/System/Library/Speech/Voices/Allison.SpeechVoice"; then 3548 | config_defaults "${_speech}" 3549 | defaults write com.apple.speech.voice.prefs VisibleIdentifiers \ 3550 | '{ 3551 | "com.apple.speech.synthesis.voice.allison.premium" = 1; 3552 | }' 3553 | fi 3554 | } 3555 | 3556 | # Customize Other Prefs 3557 | 3558 | _other_prefs='Security & Privacy General com.apple.preference.security General /System/Library/PreferencePanes/Security.prefPane/Contents/Resources/FileVault.icns 3559 | Security & Privacy FileVault com.apple.preference.security FDE /System/Library/PreferencePanes/Security.prefPane/Contents/Resources/FileVault.icns 3560 | Security & Privacy Accessibility com.apple.preference.security Privacy_Accessibility /System/Library/PreferencePanes/Security.prefPane/Contents/Resources/FileVault.icns 3561 | Displays Display com.apple.preference.displays displaysDisplayTab /System/Library/PreferencePanes/Displays.prefPane/Contents/Resources/Displays.icns 3562 | Keyboard Modifer Keys com.apple.preference.keyboard keyboardTab_ModifierKeys /System/Library/PreferencePanes/Keyboard.prefPane/Contents/Resources/Keyboard.icns 3563 | Keyboard Text com.apple.preference.keyboard Text /System/Library/PreferencePanes/Keyboard.prefPane/Contents/Resources/Keyboard.icns 3564 | Keyboard Shortcuts com.apple.preference.keyboard shortcutsTab /System/Library/PreferencePanes/Keyboard.prefPane/Contents/Resources/Keyboard.icns 3565 | Keyboard Dictation com.apple.preference.keyboard Dictation /System/Library/PreferencePanes/Keyboard.prefPane/Contents/Resources/Keyboard.icns 3566 | Printers & Scanners Main com.apple.preference.printfax print /System/Library/PreferencePanes/PrintAndScan.prefPane/Contents/Resources/PrintScanPref.icns 3567 | Internet Accounts Main com.apple.preferences.internetaccounts InternetAccounts /System/Library/PreferencePanes/iCloudPref.prefPane/Contents/Resources/iCloud.icns 3568 | Network Wi-Fi com.apple.preference.network Wi-Fi /System/Library/PreferencePanes/Network.prefPane/Contents/Resources/Network.icns 3569 | Users & Groups Login Options com.apple.preferences.users loginOptionsPref /System/Library/PreferencePanes/Accounts.prefPane/Contents/Resources/AccountsPref.icns 3570 | Time Machine Main com.apple.prefs.backup main /System/Library/PreferencePanes/TimeMachine.prefPane/Contents/Resources/TimeMachine.icns' 3571 | custom_other () { 3572 | T=$(printf '\t') 3573 | printf "%s\n" "$_other_prefs" | \ 3574 | while IFS="$T" read pane anchor paneid anchorid icon; do 3575 | osascript - "$pane" "$anchor" "$paneid" "$anchorid" "$icon" << EOF 2> /dev/null 3576 | on run { _pane, _anchor, _paneid, _anchorid, _icon } 3577 | tell app "System Events" 3578 | display dialog "Open the " & _anchor & " pane of " & _pane & " preferences." buttons { "Open " & _pane } default button 1 with icon POSIX file _icon 3579 | end tell 3580 | tell app "System Preferences" 3581 | if not running then run 3582 | reveal anchor _anchorid of pane id _paneid 3583 | activate 3584 | end tell 3585 | end run 3586 | EOF 3587 | done 3588 | } 3589 | 3590 | # Customize Terminal 3591 | 3592 | _term_plist='delete 3593 | add : dict 3594 | add :name string ptb 3595 | add :type string Window Settings 3596 | add :ProfileCurrentVersion real 2.05 3597 | add :BackgroundColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC4xIDAuMSAwLjE=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3598 | add :BackgroundBlur real 0 3599 | add :BackgroundSettingsForInactiveWindows bool false 3600 | add :BackgroundAlphaInactive real 1 3601 | add :BackgroundBlurInactive real 0 3602 | add :Font data $archiverNSKeyedArchiver$objects$null$classCF$UID3NSNameCF$UID2NSSize13NSfFlags16InconsolataLGC$classesNSFontNSObject$classnameNSFont$toprootCF$UID1$version100000 3603 | add :FontWidthSpacing real 1 3604 | add :FontHeightSpacing real 1 3605 | add :FontAntialias bool true 3606 | add :UseBoldFonts bool true 3607 | add :BlinkText bool false 3608 | add :DisableANSIColor bool false 3609 | add :UseBrightBold bool false 3610 | add :TextColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC44IDAuOCAwLjg=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3611 | add :TextBoldColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC44IDAuOCAwLjg=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3612 | add :SelectionColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC4zIDAuMyAwLjM=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3613 | add :ANSIBlackColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC4zIDAuMyAwLjM=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3614 | add :ANSIRedColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC45NSAwLjUgMC41$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3615 | add :ANSIGreenColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC42IDAuOCAwLjY=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3616 | add :ANSIYellowColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMSAwLjggMC40$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3617 | add :ANSIBlueColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC40IDAuNiAwLjg=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3618 | add :ANSIMagentaColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC44IDAuNiAwLjg=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3619 | add :ANSICyanColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC40IDAuOCAwLjg=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3620 | add :ANSIWhiteColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC44IDAuOCAwLjg=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3621 | add :ANSIBrightBlackColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC41IDAuNSAwLjU=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3622 | add :ANSIBrightRedColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMSAwLjcgMC43$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3623 | add :ANSIBrightGreenColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC44IDEgMC44$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3624 | add :ANSIBrightYellowColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMSAxIDAuNg==$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3625 | add :ANSIBrightBlueColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC42IDAuOCAx$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3626 | add :ANSIBrightMagentaColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMSAwLjggMQ==$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3627 | add :ANSIBrightCyanColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC42IDEgMQ==$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3628 | add :ANSIBrightWhiteColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC45IDAuOSAwLjk=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3629 | add :CursorType integer 0 3630 | add :CursorBlink bool false 3631 | add :CursorColor data $archiverNSKeyedArchiver$objects$null$classCF$UID2NSColorSpace1NSRGBMC43IDAuNyAwLjc=$classesNSColorNSObject$classnameNSColor$toprootCF$UID1$version100000 3632 | add :ShowRepresentedURLInTitle bool true 3633 | add :ShowRepresentedURLPathInTitle bool true 3634 | add :ShowActiveProcessInTitle bool true 3635 | add :ShowActiveProcessArgumentsInTitle bool false 3636 | add :ShowShellCommandInTitle bool false 3637 | add :ShowWindowSettingsNameInTitle bool false 3638 | add :ShowTTYNameInTitle bool false 3639 | add :ShowDimensionsInTitle bool false 3640 | add :ShowCommandKeyInTitle bool false 3641 | add :columnCount integer 121 3642 | add :rowCount integer 35 3643 | add :ShouldLimitScrollback integer 0 3644 | add :ScrollbackLines integer 0 3645 | add :ShouldRestoreContent bool false 3646 | add :ShowRepresentedURLInTabTitle bool false 3647 | add :ShowRepresentedURLPathInTabTitle bool false 3648 | add :ShowActiveProcessInTabTitle bool true 3649 | add :ShowActiveProcessArgumentsInTabTitle bool false 3650 | add :ShowTTYNameInTabTitle bool false 3651 | add :ShowComponentsWhenTabHasCustomTitle bool true 3652 | add :ShowActivityIndicatorInTab bool true 3653 | add :shellExitAction integer 1 3654 | add :warnOnShellCloseAction integer 1 3655 | add :useOptionAsMetaKey bool false 3656 | add :ScrollAlternateScreen bool true 3657 | add :TerminalType string xterm-256color 3658 | add :deleteSendsBackspace bool false 3659 | add :EscapeNonASCIICharacters bool true 3660 | add :ConvertNewlinesOnPaste bool true 3661 | add :StrictVTKeypad bool true 3662 | add :scrollOnInput bool true 3663 | add :Bell bool false 3664 | add :VisualBell bool false 3665 | add :VisualBellOnlyWhenMuted bool false 3666 | add :BellBadge bool false 3667 | add :BellBounce bool false 3668 | add :BellBounceCritical bool false 3669 | add :CharacterEncoding integer 4 3670 | add :SetLanguageEnvironmentVariables bool true 3671 | add :EastAsianAmbiguousWide bool false' 3672 | _term_defaults='com.apple.Terminal Startup Window Settings -string ptb 3673 | com.apple.Terminal Default Window Settings -string ptb ' 3674 | 3675 | custom_terminal () { 3676 | config_plist "${_term_plist}" \ 3677 | "${HOME}/Library/Preferences/com.apple.Terminal.plist" \ 3678 | ":Window Settings:ptb" 3679 | config_defaults "${_term_defaults}" 3680 | } 3681 | 3682 | # Customize Vim 3683 | 3684 | custom_vim () { 3685 | true 3686 | } 3687 | 3688 | # Customize VLC 3689 | 3690 | _vlc_defaults='org.videolan.vlc SUEnableAutomaticChecks -bool true 3691 | org.videolan.vlc SUHasLaunchedBefore -bool true 3692 | org.videolan.vlc SUSendProfileInfo -bool true ' 3693 | _vlcrc='macosx macosx-nativefullscreenmode 1 3694 | macosx macosx-video-autoresize 0 3695 | macosx macosx-appleremote 0 3696 | macosx macosx-pause-minimized 1 3697 | macosx macosx-continue-playback 1 3698 | core metadata-network-access 1 3699 | core volume-save 0 3700 | core spdif 1 3701 | core sub-language English 3702 | core medium-jump-size 30 3703 | subsdec subsdec-encoding UTF-8 3704 | avcodec avcodec-hw vda' 3705 | 3706 | custom_vlc () { 3707 | config_defaults "${_vlc_defaults}" 3708 | if which crudini > /dev/null; then 3709 | test -d "${HOME}/Library/Preferences/org.videolan.vlc" || \ 3710 | mkdir -p "${HOME}/Library/Preferences/org.videolan.vlc" 3711 | printf "%s\n" "${_vlcrc}" | \ 3712 | while IFS="$(printf '\t')" read section key value; do 3713 | crudini --set "${HOME}/Library/Preferences/org.videolan.vlc/vlcrc" "${section}" "${key}" "${value}" 3714 | done 3715 | fi 3716 | } 3717 | 3718 | # Define Function =personalize= 3719 | 3720 | personalize () { 3721 | printf "%b" "$(echo "${1}" | openssl enc -aes-256-ecb -a -d -pass "pass:${CRYPTPASS}")" | sh 3722 | } 3723 | 3724 | # Define Function =personalize_all= 3725 | 3726 | personalize_all () { 3727 | personalize_ccc4 3728 | personalize_sketchuppro8 3729 | personalize_istatmenus5 3730 | personalize_littlesnitch4 3731 | personalize_meteorologist3 3732 | personalize_moom 3733 | personalize_nzbget 3734 | personalize_nzbvortex 3735 | personalize_pacifist 3736 | personalize_pcalc3 3737 | personalize_scrivener 3738 | personalize_sizeup 3739 | personalize_steermouse5 3740 | personalize_tower2 3741 | personalize_transmit4 3742 | personalize_tune4mac 3743 | personalize_vmwarefusion8pro 3744 | personalize_logout 3745 | } 3746 | 3747 | # Personalize Carbon Copy Cloner 4 3748 | 3749 | _ccc4_crypt='U2FsdGVkX1/MLZ+EavKN4ODNZY1H0LENk6AnfNBq/JmkRR4f3uSZHoo0c7mZbLdU 3750 | 0V5ygQMCllFVHW0WgAQYyMMeihp6PQ+qjTNZvs05bBCm3ovV2ZJOaR5viJOMQj/v 3751 | aiYazKPPLhR8kNSxWloOS/3xqvENuwCPSjVj9mZxp4U6pSA0swevHhhopr01sube 3752 | 7ay3OykHFZGXAdkkPd64DthTSLTPnF5Yf0GIvLWlJwVJTZxDkb+4tiMRouE1gRPA 3753 | 51Qah/fTE4sFHuvmoCrrAnRBfEuYH5DaWc2FWLWM2srqjd0+TA6N3xIipm0D7jjw 3754 | urcxNanFv0oSBSJpwhYM4YAFGHvSHcbPk/orvtB1URN5+KmYPPjk8Ad2fF10PGBm 3755 | +TlnRloE3sITbYmIzi3MKSdqerw5wf2x69ioNgF/c4xUHZtrVioSIcR2oIwVua8N 3756 | 05OzDNG0XjI9bDo+bsevflV7cSg2YMhJElTlqQa7fUfQLUnP7+QJEeX1Azq2LdF6 3757 | HpEgFgV9Ruv9XHwHJ2lrJG+/qpYhbv+X2wTmmgnqtQY=' 3758 | 3759 | personalize_ccc4 () { 3760 | personalize "${_ccc4_crypt}" 3761 | } 3762 | 3763 | # Personalize Sketchup Pro 8 3764 | 3765 | _sketchuppro8_crypt='U2FsdGVkX1/CiRi4IbSmF9DMnkgd74TA3yNaILrAIAJ6EkdS9a8eLeWLEGVItc9j 3766 | NWk8T5bIUkT3XCUFeBAFU4hX10smsLoT17MZD/vDevm+Nu1Efo4stPLOzg90pNEb 3767 | B0dn2LLBJV8dhDpBHvoBJYl6hXbu7khPZpfVwOTWUGPrdYULEbutjkbYF9R7j+KO 3768 | cTkFyHqpPMxDGGOEhoFUptifSo++KbX0oZWWK5S+XK4=' 3769 | 3770 | personalize_sketchuppro8 () { 3771 | personalize "${_sketchuppro8_crypt}" 3772 | } 3773 | 3774 | # Personalize iStat Menus 5 3775 | 3776 | _istatmenus5_crypt='U2FsdGVkX1+tdI0uAzK7kUWZN9APcwvzte3Q4E1Gr+lOlBTkn55cbHepHjYo0f+W 3777 | FC+v9NBp13EI+owprzVN8qU+Xs9pX69WKgLQuKa45d8ASrX6Pwz9HrYLVfauuh4r 3778 | d8Zd5K8KEsDDZJSmbPq9Xg==' 3779 | 3780 | personalize_istatmenus5 () { 3781 | personalize "${_istatmenus5_crypt}" 3782 | } 3783 | 3784 | # Personalize Little Snitch 4 3785 | 3786 | _littlesnitch4_crypt='U2FsdGVkX18thR0gOmvkpKnSlLhcoHYWP4KcJZodKQIv+Epgi/zbNfW25qNYaxGq 3787 | o0/1HUxF+mTw7bsuAJxKM+u1iwLti/BRcicReoLvqSziH/LMvIt3pAEs5UfnHGpy 3788 | Bd/lcdnAVm7Sq+r1T5CsNzPR5z0Wuziju0ie14PmT/V/PpJ47B/k8ScT/b7mfwzv 3789 | 82RqOFdZJjdJ5sK50aiNt9K5h7up6uVwK7cdut44Xf4TDx/UTR46xsUew8jG4I5F 3790 | EAWUUBvoI2N9lSywCXdmes5qm2LQ3gxZlCrJgY3/oXe6fUi5BLdVK8iGL6NVq+PY 3791 | lDx4SOVP+hZ5kjOpVLe91zhw6nVy1yon6P447IJT0VxP9RaJW2F3VkckRU4xFfao 3792 | ShL49pYYhS4yCzxO/sSSHFR+hzaxCMyYGaddDFwN7u5sp4TOiTj+S6HiF6H9c+Uo 3793 | b4p9g/CwMsplzedpm9X/Y/hIQ0Uda42r91T75H0f4kWjGd2/LEBUjSVXzPBzYZ9a 3794 | o9SduxX3XE+506zBBpE5CGb20ndVEFXgJfq8CVnl7uEF87b+L9AxusLeZHycp83M 3795 | G9QbnGiv12M1P8dm6Az0YpOBiF7Xpn0AlQpg+3k9pNQZy7WRlb4symFW2ugUNgLV 3796 | BNkWD7W8D1PiLYoo0ZyDDI/FPNGb1uRwCZ4BfvtbjiMH28XAvxxZwMAySApfP4QV 3797 | y5UyS6L3olWNpUOFZE/Bgdd3tduCR5xllGAZcugUaN10aXh0EUiubn06i7uf9uQ1' 3798 | 3799 | personalize_littlesnitch4 () { 3800 | personalize "${_littlesnitch4_crypt}" 3801 | } 3802 | 3803 | # Personalize Meteorologist 3 3804 | 3805 | _meteorologist3_crypt='U2FsdGVkX19gjPI4DdUhV25638tJvTh2zGck1vrs/MrQJI1ghBVzZu4YK5I3U4fR 3806 | 96YI2iy5YqVws5f9fPWKYPsEy7Y58Ppl10sHLo/QLmYbWWCPR7HU5sHITnAbtnid 3807 | wjgJtltscMlbSyn1ekyUz2yFM18I2bdKHklHo68UZet/1f8LnyJSBUhaL9l7sYVK 3808 | lw1J7xu9A2djc0s7tQYcondLL/sa1OWKXk4kI9IlzD09vTjmmx9U7g+arUV4Z9cB 3809 | uDkvQFd2W92+G5Da7NdgJJTrgV9hYH+uWznGG/rnTeIpPjyBMEZbIDtOtiq5j1m4 3810 | +K2JieiExcX8CUSKPxBQbH/clmRT8dgr+C9BSDi7iJ2yTIvOU6wRGHvNUN9WrlD4 3811 | L/0eW8p6B2E74SkvHjmmD7o0UcrWgS1DO0C4dcM8p3FcvZ7Tj1QPwX6i1roTqAQ5 3812 | SbeZNE8UsDnaAfFeVtZNElaH3g5XpdONa7x3Q/L56rpANFW9x96HRCAe6zvl6sAj' 3813 | 3814 | personalize_meteorologist3 () { 3815 | personalize "${_meteorologist3_crypt}" 3816 | } 3817 | 3818 | # Personalize Moom 3819 | 3820 | _moom_crypt='U2FsdGVkX18lU+JpUd5n3lZTfIBCHIyenbkWqcLZDtlQ0xNnzuOnHWEuVzMZTEMO 3821 | n32zp+nIgCBYCQU8cj1CT/jOKfuQ0bYEqMXls05yi5SfsLuHciUfgOZtaZdIo0HI 3822 | xi2ozsQaCX9tbxo9l2+l3AS5yE83TYvtWvg2QlTAkkOdPNnnHY7odDNCNICx+aZK 3823 | u5N9CGeB/Dg9yDtEUUZInmUG6wJ/lgPizNTRVVEfntKrjNGIy23nOHk5wdvuOYZP 3824 | ENnGfaoT3eBC0k1/0Rb4SBATDjP4EJyR1kiBRaV0Km+uNz5tH91e2Ows6gAWJc+e 3825 | InOgKTDVAweXmBLxAy5kRTeJAcIkjkAuluu41suzvlAE6e8SSqZXIoptYhNIoLIb 3826 | TyXgx5Ad16KSxla9HrdMWwCoxKnOwzuZbfmTasOy6g7tP18FdTiawfbwf20ZLdKc 3827 | 67ksIOfctKHToHee9g8R+4CtwS0bztEfgszzUhV5Q8BGsP+fYjCI64v3VlLKlPRh 3828 | /7DxoZ5T6Vf9vMM9B3TbEcupmH98Cq+PgZa8TLtjScFTw5rlGTyNC8AAFiJzfipA 3829 | nDZMcWeyhtep1BhL/LcBcPZja/uwtbNYIMxDwgmQzeyzBqBqzE1AX4St+oM4AQmC 3830 | bB7xmEZekWw8LhO4vGGxEkoaT+FXt7GZI6hvKjd2biMCs0LqW8OWWgArWsR7BjrP 3831 | /otPGFZi6RK655O069cEaeVaizxZJ/9kw8QvvRYElh1OzfiQQSfozRwnVghHuk9X 3832 | u9n8b6MnrRYOojufn9YHltb1UZ6WPEMSk0657TcNZkX5AeWLT6/LF9++/qw37nWr 3833 | Z0+xTMP4+BUrXRG2qVOy9gtRkWVr/m9Ap/xvs2IymM+sGPK8msCm+Sx2bL/QpMf9 3834 | UunICoL9GHCz5iu47bLTVZPYkG8SAnsDzauHMxWxJcJOVrMNfJwLinc3GmWi7OXo 3835 | 8r/zcFc0vFA6bSym+3+qCgGrWZ3D84Wf4JO15/qej1o3UqvrHZN1XCgGdNoe7QQu 3836 | fuf003HH98R/KYbM7tnWCKTyr/rqbwNG3EzyM9qWABPsUKhhD4xNDSrAETg0gCcU 3837 | 17ZV74vWmXpBD6GEAvXtW0WxTFm4mX+SwoqA1YEkDDkAxhMIsG00T3X3OcdG8U8/ 3838 | NgeKG2PJcPK5ZzdCS1jKWQKh4+oS+UOjdJjH9CvpGnM6Ol/7GtnvjReRBn91qjBs 3839 | fpVhnmdK3+2+lQsiChCfVH8ZV7scGZqmHrT/Z5B80hxFoHXCBzc4aXqhRP3+8Kwc 3840 | 8Vdm8BexgPjn/f1h6mZt7V3J5+kaQFItwJgd8f6VYwU40/HVQWgggkBVfb6DFTq2 3841 | u+XZ5aZkoM65B4s1HK0bO+Kr8pDxcvcf+O1a53043qPGoAP8l4M2xRHhkKbc2T6Z 3842 | r1dm7UQuLktwMAY2m4B1bg==' 3843 | 3844 | personalize_moom () { 3845 | personalize "${_moom_crypt}" 3846 | } 3847 | 3848 | # Personalize NZBGet 3849 | 3850 | _nzbget_crypt='U2FsdGVkX18JS7hBuu5P5eeTADOpOz+HabaX/DtndESoj1HX1YElFbxrsrovH9IE 3851 | +m5jXFF9KgPHIt2ZjUw3H5KmHkix0GeO+ElBFwaGps8pGV6eh3ZqylUGVXc3+7Zt 3852 | K0DA2PwxAmyiboiUT2MKwjwYk4lt25+aOUxr6/BV1lo7FwQ9PaPkrVKtZYUClDzH 3853 | 6xLEp9vgAnQlHyTLtSF5XalbdtutBEInej20mGojHFniB4UW14FnH01KzBpCowGv 3854 | zAA0d8nft1Ubx9wI6XrcBpYpUOX8teJj3hmS06ciiWE7RW/UB2YLXcvEx/hzS2Ye 3855 | B+tQ5uapM8Ja/ISCcnyAKtNh1WcuKi50PtRo3mXKkxwjJP2pUMWOWe+bhHOX94Z4 3856 | yff6KjQTms6BkT0RSpBKzsB98Q/R3G/CNN8Z15u9bP1Owm/9RdkbqoEO2lEang3j 3857 | vbJwttB2gmXOB68hh0plxoIEhXb32uJu+ULwFa3ho/5I1X93DgPQC4ab/K19vVhE 3858 | 28aQCYUkDWkFW1Z0VBIKqRKP6cMDzEPpGnz0sxMhU8Ps6KR4Fmt+CGJEOxTvsRb/ 3859 | D3Y7UeTTvsFxzmlsiPi/24w8pGAx4oXVPL7Q3DLvomdjBmE9EiJrYzCPOjjO/n4H 3860 | 9YcqjnObUiN9fphZzjiw4knbpzXXvz41eXTPwSSUoBT3Gv+BjpzA2Lx8Q9l5u0aA 3861 | Txm8dbTsddyGaaWPzJ/c6PAsuI9UqV1h01A4nmRVmk1Q0RPcAXON6IvM5gygtKcN 3862 | mbfgOf+S1sLNTGXmOxlVV08edHAk1zP3aE/jNTYi2JBeopUC2+9i+3910MEjkbhx 3863 | 7X0eytMoxHZCaEiLmORTPptouMhflRjbTHoxJJcLEee9p1xOgzxIfI4PzX1d4Jcs 3864 | gAVpUhQJhfEvCZReHjMQloVDc9Or2kQ5uRIGg7ZD1MRZWsh6BhB/afSEBRibS/HU 3865 | WQrmAWyFeIClaHIAK/Clbfqe40dV/RI592ROJ3Ng3wP7wpXgQAPotCskHFb2dMTm 3866 | sNwM1eY1ZgZqtzbCTL4GRUrd2VpoZq417W0HKnr75wctEudn/AOEIp+2l0gOJRKv 3867 | HBkzUYrfkbgTVcYDcFh8Yr9CurOA6aWQXVHiNvQmr46jQNqvE/dqQZoAbFrngtJH 3868 | 4H/SgjvuDiocJitIqVUhNBdX5AtasEhByfzCxalZHGIBxEKdqXMugTaLTcj/nB2C 3869 | TfdZnoTMryqJxLlF/pAEZA==' 3870 | 3871 | personalize_nzbget () { 3872 | personalize "${_nzbget_crypt}" 3873 | } 3874 | 3875 | # Personalize NZBVortex 3876 | 3877 | _nzbvortex_crypt='U2FsdGVkX1+307HjJGIf7rdVkS4iA3amckwax3cNni3YYdUjVoOa8Dzldh2o4zVc 3878 | Xv7Wt0rUR434pPu+IeYH+vLqSU4KDibBPT2TZNyv3bcLKNot91E1TWmdEPrxiIPx 3879 | ZTw6G9ZJlAUdZPK1PL8SN/32wcuQfRyX6d1NHiQ/rsleIedUvcb1Q2L1MJldD9ZU 3880 | vfIE2TZVQA73h2DQsY/HeZXsGudOVhF1A8S5pFP6goocJ8lgmBF0rS0Z2HZ3h8Po 3881 | eBMXudhMltv6kApIB2bj39GsECL5fbZUilX83o7tjn89x/eMra4EXwPv7aAlz9dg 3882 | qr58SoELeC0BySdYr69KiPD13l3KsHRtQv6FBUKPt7iqlw2Ck9JDtpArSKbPXSfE 3883 | efEfu9JIqd3C0A7nNyzapJhjNx5SQLDsu3HbtXvRvztE4BIj2yjLUywWH7BynEEx 3884 | 74tVEmEKmHcXVpOm11qxtKznkRole4RF97V3FT36juAYQ++2xambRxsd8APDKnQx 3885 | x4+uaXLi4A3X2hkxweE4Aw==' 3886 | 3887 | personalize_nzbvortex () { 3888 | personalize "${_nzbvortex_crypt}" 3889 | } 3890 | 3891 | # Personalize Pacifist 3892 | 3893 | _pacifist_crypt='U2FsdGVkX1/wjLIEMp8Q0VgD8rDKDOmWVnoNS0wYicHRoTehfFThWcVNiJT8SvwI 3894 | 0X0pkFgRDq5Le+idSjwfKFIMzmgmKLBZNiMMVbJ6WuWAMaYwl70M5LRfAe4vCvUB 3895 | 4/vRSrH3+OB9k187XLViAgDadJY95T1bZZ/OGuRTiMR6shAe31XMv0DrI4ksNc/2 3896 | clLLzhlnaekyFeCKUYaoywH+BMl0r3nGysFsT9UTxujXmw5RjhsRWJXS7YodvCT6 3897 | DVXa9I2B7Q6XV/1KzVZNRg83A6u3oXBqHHKVHi/VWnrRfJf6O095F6EeIr54gzu1 3898 | EvJ9+a9qvovJZam37q2QrBvpiugbNZcBb0AAVvdscjIVhrdkIpVbdyHiKCO+rugS 3899 | svGkCw28FBdOKIkXgEjudzmj/uXnWQ/9Ru1YFZw0Pv7iFjrubt4Ujgux5CUf5kfr 3900 | xdE02nx6TYRBPH6H6fK5IloX1yMDW48CVR/hVLARoSu7rlJTVqd8U27Sx/HhJ625 3901 | lcV5Y2kBd7DLKqs3nRIkta90gOxFYCD1G0JYw6dAUSTF7xME9aY5UE8p3ODdmD/8' 3902 | 3903 | personalize_pacifist () { 3904 | personalize "${_pacifist_crypt}" 3905 | } 3906 | 3907 | # Personalize PCalc 3 3908 | 3909 | _pcalc3_crypt='U2FsdGVkX1+j54XVyGcpSm/+sDyrrLvt1XqzSIlDSwvLwh8geuJzNPVKOfRHWZK1 3910 | bRHEQIavsXUXmCR92vV+JtlV5Un2g29R5hvC0GDieCGghzt41Y5BypUEHP8dzWIB 3911 | QqNrlqPQ+Wx61AQPVhiIu0y4rocctHx36vArgfuiVlvfYE29APOIJa+0nk3rJ5dB 3912 | HsSxwDsaAQAl+psbtzfvixxtCaRa0RrgzGr0Nx1RVZNDgEbTM/mWNQH3TlFE6Vo3 3913 | jsZIzuUYJwb526KMk8ADC2aKNqh4fufTuWI7nCG+8RXI+t331Ge4KLXjOKsPNdwi 3914 | UQ58r8HS7O2WqOe8Bmqw+/pBlhjLMEsqzsxSmi+KtYzHH5T5s0hOx2DK9fX65pbv 3915 | z1t6035CgWuu+U5FezyjaBQX5XZisv51R0pmLh0akNyYKssRn8KQgeaRDmOztHwz 3916 | Zqfi5MjUUYNPAyYFfY3EUHjzLfnwXKbQz5LNh3LpGq36nsm/NlkgAS4uOsQQuBA7 3917 | vj729zsRh36+psJUhA63+JiQbx5uMVjVq3pXXU0c/I/uWYwDwRNtzPUvfQIUJfZv 3918 | Jjy9pxDOY+ybPdkmkcY+cUbPIExYCkRZkWbeqKCGIijXsJKXA6d5E/snYPa5/ckC 3919 | zWz2E4RXmOjb3FpL3SL3TTdcpCulVRY47e9kP+P0GHADHOe3YoGEJAdwa0IWzKgC 3920 | Zoo2qHh+59O5YjucIb7xFcHZkXvuVzJ5J1iLL/91GsS8oPCp6fci66knv2bpJyAe 3921 | aPk31wCBIlOcIC8Y1JSyLUwZWL6CSu2OUOoqjNB2FgK50Xp/4Y0MkypLBCrq3upa 3922 | K/jINp0AvPdrQB927lgB6BXkcKfGsRiPySepZ8pYwy1UeN1j58yemjcAtOoKiAYH 3923 | tVjRjCyW3FspyFr0RDcxiZD+mJSG/5dxujUqpW7oGsfBtDCF1krfccVYDu3KJ1GF 3924 | CVflh0fAO5em/3RnEyaarbscbV29bjl3cbnUejC2Y1Ofh5WrIrk8dlDNllsJNAdN 3925 | Zuu6zS4sKFuooMDdzPaVf+YoYgZaOjMhIMTNt5ExsihZOMAr4W4KfGzx02fJHxmC 3926 | w462hd1SC+7pjJFTjMjEWnBjUfxi6OiZFPnpgYi9H9iijFKSBu1Z4QNJj3y6V1sK 3927 | xyWmE3/p5Aov6qPy+e7SUe84TF4oVyPQVugtdUxmeVI=' 3928 | 3929 | personalize_pcalc3 () { 3930 | personalize "${_pcalc3_crypt}" 3931 | } 3932 | 3933 | # Personalize Scrivener 3934 | 3935 | _scrivener_crypt='U2FsdGVkX1/tPt4XjHPDEtcu53cxgt0Q7GDNbNvu1VhXB+/ly+13tuMU9fA1QGm7 3936 | 7YBXZ89yhLY15/FzumwHY22T7cU6+y4ULRh5O4weZEX/EyOswJiMYd/MD+mNS+Cf 3937 | dk5X6P/Y6OGPbFjL9GjfKcJi96UeZCxjf9Og39k3pqBLjTZ0iSaAUhKsTxVY9QAD 3938 | UPrUmHuzPVrrkVQ5gArcWg==' 3939 | 3940 | personalize_scrivener () { 3941 | personalize "${_scrivener_crypt}" 3942 | } 3943 | 3944 | # Personalize SizeUp 3945 | 3946 | _sizeup_crypt='U2FsdGVkX1/5orle7q9WUYhaIgZFfM6G+vKsevlp7WxvCSoL/7VGdaXNfGr8yzjy 3947 | tVfmgCAgnLH1kSGY9Xl90/iTaFJOfITzmRpmirqBzUIQVBojWyANkX9JghEnQaZ/ 3948 | RWP/uZJ/ftxcc+dH1c/crUayobF/vhqHKuEno5IA9WAa9hdjRYvym59+Sbm2dA+3 3949 | +Dd8c2SawJ5MwxUWWxUn9lIg4tRtNdoh75ls7JQfvSIalINDidTxd+f43mRmOlzU 3950 | 6Dzr2tRLuY6jeLE8JJCsqS1tUI1ADuI7kvrTioAg6pdFYaAqLt3SUjDw0VRZlaE4 3951 | 4GtZ+jPZFxoQe9tKpjwcEKXWxQ1aaIZwYDpsPHhdG6BPWHyyuJiAWYhuVUbQA7Zy 3952 | IcRdQklOJ/25rzzYVCze6qZP/3oKg4CRcZ1nTurb0QG3hC5VKuYOB5UEBlejI0lp 3953 | iweSpFdwopuXne13bKLfhJGDHz9u1/0f+WW0hVr6SFImbb1jN31GjRpv0yoZH+ia 3954 | i5cr32WPHj+qYCkA2lWu0rCNUOb1SoG/CvPtqgM+0EzPIU3kokdZP8hLTVIAfo7i 3955 | UCN1fiNMEYE5hVYf4pPe83EK2QDW1BcVApFn0XI2X9YlEecJTnPKLhD6TR+tUWa9 3956 | Qjcni9YYoiVniehkRRJcaIy0iii7h295iUcMApduC9PoN4mwtuNOmzT5L32f+ak2 3957 | esIgdF8T4KMQcPrbbu2/+8FLWwLlnlVSe7meaBsxEJW5W7xC6A4kEpownQOMRjJm 3958 | Zn2y+i49ZwTA2oClXFX3JpIg0P8qvdGM7Fn5OX/0ZqsIe1GsAg2Lbw9/obq2pj0L 3959 | peb+6JRTXI7gRgygNCIMbihBvEj+ndp+Nu8XUNQGjgm4lknqkulP/xtoi0k45FT0 3960 | 1duVXZSOm5heXzTFn0z7FnKNmGCZEXVUDC0gbTPLKeCaKFHsxNTfQ/sY4h/THqRO 3961 | h5mziRVzPwrOkzl6lzKESTQbvSDwmc2wl5BgMMlwrQGe5F9xrs2sUkhLdpfGG2QL 3962 | uPhw1AQdRrqH4yU7SAXSpvZFCw3yl7LqEPIDwIn8VuIHfStHYo0ZR1nrMAJkD7Ys 3963 | +G/E8593amGUWCrAtJWCXlXvlDCcmhMKYPoQHYWQH3JEtkof1J4FFBZ5e85jiLhw 3964 | KmZj/JA9hvCghBffMEFZUfg2SdrgkPo4XW51qvDyIvCiOVOBgWQ7yRYCSW2LoRyF 3965 | mihR7MTU30P7GOIf0x6kThAN5yXdWQRNrS/JxjUBk4NqWzfi3svXmZOIVZUbjo7O 3966 | Sq89IECDpn/5kYeYmMGwEG1j4L5U9PcEHjelZfnQEIIcZZbcONQXXVHk8w1zd/fF 3967 | wilkne44R/twnneP4QOmU8MTrX7zo10nZo1Sbxigh0tz4I1HoLAKPYAyIIH+NBqw 3968 | 6FrT8NAo+FQJf87MIYcnftIuX7s/8+9N7mNrVzMeWfWs66L+uNy5yVmYxr1sA2/B 3969 | 6T+GRoKusYmjLe7ZeRVY5M1L7W6/HqWOJmW0ojRFz1yDtaymlqExuGirq2F88UM8 3970 | 6hnJYMJkeYOj0Yn77JT1MIRx2vVuk6JxwmlxGPQwU58os63JNXbRYlc0jJTLu6yo 3971 | yUFjmw1tO7/oKMbqHoxKCKz4gcm3fWx9PF9ewNgTorbVoAE1vpz8B2EKcJtAkjwk 3972 | n+XJeNEkZsfZi66sDCzAs7TMQsBq67QLhyBqguhK5vQ=' 3973 | 3974 | personalize_sizeup () { 3975 | personalize "${_sizeup_crypt}" 3976 | test -d "/Applications/SizeUp.app" && \ 3977 | open "/Applications/SizeUp.app" 3978 | } 3979 | 3980 | # Personalize SteerMouse 5 3981 | 3982 | _steermouse5_crypt='U2FsdGVkX19WKTqA4DlNJWTdwr/4bPHnYGl1FxCz1F33OCwXz3zRmV6bj6OLodFR 3983 | y+rhwfvc0OGUB5a95/EM20AEPEL4PwExFI9srsmYiAPPlyF1ZjTwIt9Sj9uwwDXW 3984 | SacPMAZ65W7TMLepPIynFgTIpcTEbnsE8yK5bEZ4VJdLdcKQ7er0aOLk8/nlclqV 3985 | hs/SvrRweQSgJPhe+aqM2vOaPHVMCjrC2toag/B2C7hgAe1tpxYSGGgcsEaT2d4C 3986 | OvgfbpKwVmjMozy5BFcLipMs40VyQLzLo3EzmMHn1MUaamK2QrsYgUtwCY3ARbEW 3987 | P2wQ3lBCN0d5ORKv3+kb4WAK9ZkYOn/P5656GsDtHe9hPqs+R6mf6FWIDQoexKak 3988 | 16WwLTPw0qWRL9tq5Dxv/S4Ox8wYAxAMRJGjOvP5UyCnm159D+mhQiHlgi/jxOGI 3989 | etDE3a3WoW2LJR/bxtCR8AN7LokExZHWugAf9wtr65p4uJRpoSwn1FZJQiJ7dFkh 3990 | b/6QDMusRoT9gTpl0GZRbbA/fLBdNBOScCyjpzKorad3HPpWUB2DbaTjhGX0lZcx 3991 | rdroouoHEKGM3XxFVDlXpCfMDYjFU3XNIdnhHFUqY2nf5mkbI0NggTGQj+LMk8OB 3992 | q5uvmMFOCcOZjP4QfRVpZ+0/JXA9b1HL/o1DYmH9om3WtJr4NKghw7szBUKQioZn 3993 | T3I3mXVK5YsbdhAjHdIZDI7JwporMjPl5JFXbP3u8RClHIS1SGh49UEI95f5aCA1 3994 | RECFZhx57Kbi4H/e6RAXKAfZEmslwFn6iksIcIUiMg2lVrtmBMYhUYPmyt0LQvpw 3995 | gfG8IuKWp6BsmqoHNiTJrPgtW50m4GpNx7l2T5LQUXdSJd/HHAWTafqv98+aiqJb 3996 | wLKUk2WaxYyDqlk0X1S03iXB6c/YjpJd9QGYfRxuaTnd+TMyW7B2DIhz9ld9Pd/N 3997 | bR0hFQWiLqpf+hvLpbuyDyeze67aKULFH7RMrT71wpbFT1poNIT69RkhEsUcly/1 3998 | 0GCLDxG4zoIN8+2wtj0y2Ig+ovbVHFtabBOE2SaHOz3AUmNyeI8zPRLARJL0U/G1 3999 | +C1tBLZD01goBn+Yx5hEnAfbe9ZGBMER7KdsA6Fuy7G5G8vM0sTQorXaY5k5oI9p 4000 | whOFuwJegjNsCWOb5CUjrAP9wDx0nrfo/yzvLe80LQT3QGOUWBs4zctG8KlC8X2m 4001 | aCkswRz1elOhhJ9AA7ldedbBjCn7DXA6MdXb3/aG0B8YrgGCOppa6kJZT5RV1/HC 4002 | 7wxCYc3Lthhkq+b06kX6seSTOc1No+7ucbNm3huFfIBCfIJdSwt8KC2NOYZn/cD0 4003 | +cKevCq526v2BkzjTF4B8Bhi2AhiB+udiAtUmvtNjwKr7dN6PDpxEOma6PE4hUr8 4004 | YjLd1SOyFAgM7lBXZrAPNI03/s/Zi3Jm4DErFlIKoR6nCJGfjg35nN8OacXaT8Qy 4005 | vHerM61nvEz9uSh67fXzJ/yO3wLwTdtEDiZrvFQShZbRzCxdMzVdfDRx4WnqXRL3 4006 | mPtLPbHRTUyOGRUrh77KP1C8ivi+cvliCZn4C2rhXkQE4SJ8XwGlqjhLaMvFdAoH 4007 | UKCaif+3qNLE28JFrfVytyD7DLPue3mWn7zwuk7teHq2Wa3Fh5i78KnakpKwe/WO 4008 | PtDJ9H76hoirEjtZePXG1jh/nVF2MuFqc1GtNtry769R14sKPQmhJASCz56eZXcj 4009 | LGAJlyu+ppEIZyeq5cGXU2263GALTZdBiTPyxDYAovTMNTVNH9utFnFd3EJ2Cibq 4010 | Hj53sRETEqcsRqndNnSLln4TYZSWeKHQyVuJ9vxu4Ojy1321S/qjNY7sUXXoKfxZ 4011 | l+MLpK7kpw8n7TTeM2qMxVbfLynnot2SO2H2uxmMKt9MdD4z7GsayqtAaYtF3akU 4012 | F4FII9ukpH5e0Olch5rRFmsKqA8chsKHzMdrMgJDAxwcf3ULg63Vi0j0btN6yDXA 4013 | 3TqUsrYZVS64NXc9WHqAHEoPIDDpT6oHOYVYbfu3TNzrafcjRFyraqe4qo0Tqrgs 4014 | FwvEhSlJtrA7b5eaCwxOxtZipi4JJQrgyRw2TtaeiyLZtCVgDctKPWltDvkcMlI1 4015 | vnHEhsPkebebE96Y0Zx1BcNnB1EoN6euZBtXOOex/XYitRgktiF3YeM4g6Gi8YrY 4016 | Hs7+w6Rmp7f5KefhKGOxRzq6ZdOJwl0p0B5Kd6JnDy/3sxZVkcjWV1AABMJsjVSo 4017 | u8aB02TdwiAp8zlGNBxe/HwXXxpmzV0qCtM9N/gXZQ9nzg+HuXITTEdjIH+DVVkp 4018 | 9XrbQkJTtx2kzuhtY/cztMlZrfn34bKKkz6QMDyL74bINR42reQTR3hFrzT3Nf3B 4019 | JwXzGwt5M5i/+VJoFPIOWlKp0bw1IiYx7oeOxsTeO9MtoNaG6C6F73+L4qlcXY8o 4020 | NdLDPQsG7ew4feCjf1sVJbfytW+5N9qCfuxW/suSuvxJCggHtWbzN+Sc5bzYQXfC 4021 | hK9Fui0CrHKGHepM3x4vLTyG/lSd9oEEE3/XNILYjbUXElJ45wH0+agUphWV7Lnc 4022 | LGjSYp0FfmH3Er7+N8UQXd1+oSPVXcbsiYSTmNCohr/cX0LzdSyZbwBkqvsHfJAL 4023 | GTLo9rKorwCnYbI7AGjxBRVaTWcz7taRPENBa8i5QKAEuRG4dg1L++wM7Lx+JVvI 4024 | P4zR+YHUjw4/Uc5FOIedzWHCsBzTyAvmY0gsxcUrpLglaDWhMx+GflNZXBhSuUoL 4025 | 9hso0F6k2D8WoRMTl2hVOqrUTwh06CA6Ny0i9fH0u2YBmAhll2T+JUuJhXl2jXIb 4026 | 7BATYCaxJE2DUm7LV8oVlUX0px19IBia13nBToY9EXJq+envayplm/0S3FumAcII 4027 | T/+LQO9AOUBZArtZVJbtww3TcC9sPtCahHrhhatwbrIh94LzmUBYw3ir85SQmsgN 4028 | IuQinagYq95SW+T13pI/cfosYjj+juQkck9OCiITvBxvTl0H/vVkDtTaMZlksAoo 4029 | V3CILqUxY6Xug7Fff/X3mTkJZmuV7ZaSx/nNHwqYe8giPS9+WlcouNm0J53yVZ4c 4030 | fDillLyYFGBKEJwE/fm17ZHFmWHsVF6F0GF8kgb74A07zlTZin5aS/8628d3J6fx 4031 | d/kmgd/2aojEdPacOjS3dIGBn4s6roEmDhkUefbH1xALGRppd3svbNDysUDrBqow 4032 | TMmJ0A7sKQZC5Rs8exfKiW0OoLJtRNgExXsL/QIHlxsOj9tWs3UNE1Yo7sAxxsfn 4033 | TGM0PQpCVar/Nl0UCBlEvP1odrfirBpUsPtHIJVYzbcmhhnRGjmWOWHHg+0I2VAG 4034 | 6aeyN1u5LeU6wpcfYpVKIh6QPcZUT45Z/sKyiILG+3/sOWI+rPurb3ywXkMvDxFV 4035 | n68+whk3hdO2n9p7OEQxuJzpuYeUparQh6h3kdBUJ4NPL3S6likp13hCxXRBVWwW 4036 | HBJb/ugc4Y/lXL5rgR3I0IM7xqI5WZq0iQqf7TRSegbkQbcDmvKkaSR6FtgjIkwv 4037 | yYztM3EWyiiJ8Wi78SzNvjkU5YmlAwX6PB7eFKjgqcIz3XapIGHAxhUttP5Q6oa6 4038 | n1+fY1+5TyuqonAyvWgLqfWNao1mCJQOyMz5XddD20UiOE8bPnN7YpzPY/6wQdBl 4039 | ryKMY55Lf8rPu7XhlvK/dgbIhyudvC7VFSTKwMOWdCmFwTo4y9Z10CUQAO8dikok 4040 | q4CHI1pc24DHskgHIzLfQgIja9ITDaxtVpAyvTcTjcpTQEQa5FXoAiqk84NRCUe/ 4041 | uz0trd6tSlthMhEmeo+LvYG+vzVQwEh8KVAu/GNvbdv6NGI9ThwtZEm/1yTnBKK3 4042 | s2may2SMkW9GFdxiQ9DWgU503nFhohXQxEReNifBaqK+4Fx4xCr7AuiuxFKEUROE 4043 | 7dy8EbEdB/eTsRuY9TTa1s7kyr5CAKqTnuZmAU2wQmRZz0GcckWSFntu0Dme2ebG 4044 | Db4uOoDpd6yD2auV/GINzAsdH3qdOsC+XuVLmf7qS6I+DEJT6mUYXMLy7kY8ynE2 4045 | 91CEsQZnwp7Bz7J7aLfKLpYdpmfiSuM7dV596j+/knmAFrnvC9XMwNHkWjFhgIvT 4046 | dlSQZVgpikorgFshd0OWibXrShQEwYhcV24WD7q57cJuw3i/TeZCDbE/ndCB6eao 4047 | BaurJk+xSlXGVButaTUp522g9aIhFFhVaaM2IYks2BqZl/wnZHrcltWDiSjAxQfX 4048 | yhacfj/unB1C69N5i2Luf2KkD+PhLT0ppIVC+VrVitPjgIvkzSqt6VM2+XSTLUBN 4049 | 8LNnuH06qHB5UucjHQvMZsmORLHn1ZKSozEZMi/MMl/E2vGnylFkfOEBYGAs6HN6 4050 | AXSVqOgIFRUzZKBVPXCa2q7TX9c4l8cwLC8mib1WUaQq/p57LjyiaDKWofkLd984 4051 | nXdg8/k0Mv87m+n2k0JXWrGJs9OWqzmwpM6kFr04GFtg1L2ZunqKftFGq558TFdw 4052 | qLixubHnXDme4nlD46i0Phk0zba/9gxqhxzGju9WdbqhGFZlmhbNwP6kGS0w5BEN 4053 | bAkYTWYLia1OXILRw/SOF3KfxdJScFF9viKaq3AuplTkhAXugHFjbHXrvx3LGELm 4054 | khf8zNzCeU8xLzDZnkVqN0gqzmqsRTgxePTponrUHv49bDMpZQo/D71RaE/xOf5K 4055 | TJBkMOCTTx3ZTwvcZlXkCKaUg1YiBGDiHE7FwWyeXMJh83CYpuatgYkqtNXS29xU 4056 | BgupL609Ime4mFgEzHl5hTnmq4qR4IpZyNbaxRyDPuqOhz5x4Q/Z5fJdaRZTmUH6 4057 | 6TpEv9ldhEkih/K2v62sPouP2P7sGXQtNW8gdNxWOcAi/vPhoekqrFKP9o07WbRr 4058 | aFrRwkqbDY9bLf+nXQtyAG2Jac7yZ/Ct2/sNiajAkyNRbr8Drk7PM0yvVNWjJ1WV 4059 | wvvxKCC6vsMKy6kSEHTfQdMlGlAavs/0Lv7W1CVRSxe4E4HQOAeO5Vp3LEfcM0R1 4060 | kzdXBUZ/kgE4xLyctWNdY3wBtZcdmKJsJ6DE0cJgv/h9wYRf8mTGyejFKSBt/e5w 4061 | MZHFtxoExUFNxuVsQdaG9TZiKcxorxqa96H++vhmzTG0X6Qo11jKv6kBW0tfbK8o 4062 | G6Kg9akVKtF7oZwA4XbQvffMqkXxWZGCmr12s1fGk3MewJ2h9YXpgyJDXeAUZwI+ 4063 | CBF7dtbq6a2DYud+pCxvROr0kp2RSnn0p4Xv5Ma4oBUAr/UN7mBih286srxWF5KQ 4064 | Wuf72IUsAsJ/i9iUTrXSEgpptTFlPnQZFvX0zYkBw9T0YHBKrKpEn7fARmALCB09 4065 | Tga9rDJBmUeSr2rWN7klUpXJMmMRoRZopgq2F1WOvSSQuUM6hfELi/YfQSBGTdYq 4066 | fstyWoJ7/PxSJB8UHZIhoBhCTi3lw684aI/K5oWF2d2DI7ZRo+fg0CyXKBe4nLlK 4067 | 2AHDcmDdQYWG+8t3Orhz45NJ7YocKob6nXQKnvsUvWw2PTXmNOTFfUSv2OP13MOZ 4068 | zjUXS6Acdk+0dNyvx7y97ycmX4Js2m1NkqGcGI3+oAFGSumUEznCl7KUQC0Sh5Yp 4069 | fxu8M6urmaffkZ2D0jnAriD63ON38nszztFQiObOorY/Oi5As9Un73TFI37CY/vR 4070 | maNJWww+QajfQchSIgNCNl2XrwLf8vE3lFUBvxN871hVv8ztoFype7y/sPfUWihr 4071 | n3t51FUMxfJlTL6urubZWqkZEJsdcyMXapJzdxhEJFvM7tKAid/NSL2mhiQGD96E 4072 | alaZGQDlewSui0SNbdagSjUJgex6mR56vPiFJ/7eixrqzl876uQ3la9nsQYRriMF 4073 | /YeOz3+yk2J1bxmMdRoLuZc0be709s/e88xBso99299xU7iCZA2Iis9h5JxFvZsC 4074 | itR2r01iaB5xOhwol9mxj1l08LjAaH7/qNJkWj2zPoHwXUYPHIMkhPOt72NF+wd+ 4075 | Ji0kK4X+Si1s1bDqX+5ni6rH8ZQ2TGSxPk4vKlo6Ijc4WXyFc0KEnnkEqoWn7fs6 4076 | hhOlq7qIT47aqb1/9EakHA1hTgFxDTUkx7CQo+j2oc3i/hL7pOKzP6GfrapIJC/J 4077 | MTXxstXghx8cnA+0TJwaNM2cIBNaOpf8SujfBsGygoacqUTN7brFqfmPSca7UKHS 4078 | eLEg4Sa58iJCpm9ED99L6Uizfu0GKNyakU7h2zH4b+udDdKdRZ/jaGerZIrzdbyQ 4079 | ccFlsGYmXKPOcRohaFMwfAVlfmYJ5/L9BM6Gd5acY+hltx1pW+en9dKINyXWgj0h 4080 | 0Bne/PnY8PFbOvwYjfqNOJlGLVhWoGNscdmIZayoNXlKia0wLKar3tWD3+sJlPVX 4081 | Q16P3J5oA6IUflPtZd315CRGnzeczjig6/UmoFPR/rCL0LmpvR6Zuir8ke2PBTHC 4082 | n+nFjGnxkEEfvLRq1A6PbS24yCzTj0FcP7UVR9Fe016wH5p0W1B0boquW+otubGk 4083 | bg6Ge+drir4z1af7EJ3bj1O2rwUbIsSMXWTioFzHqLvHzRs/i/gebjokP8QNqPHn 4084 | h6AMujdcGsMWZ72oFhlj/8yqguhMsVZlD5toRfanDYxDwsDbvJ/D447Na8F6OrNK 4085 | U7oeheZMH4ZElM8qk9y2pWBqSZl400g9CobFiGb9DLIJpP9V1T0wkLqo2QAX0fW5 4086 | WetHyE2bQrLpNLcG6G25fM2QzqzQmYmQa30BCqu15ZXHUUBndAuRNCfa8/Mmit6s 4087 | 3X+9jlRqCMGQtdO7Og2UjkMJGwKZCKj1WORFOwNEyoJE783zAtiRbQU0wENXMbKh 4088 | JltWygFE0p6fvWc9EZZDHWe5VtXntrq/0qqQdhaDbEA+psIcc4Vss+vrqGS9/Wt/ 4089 | RdU4z0xLBvV/ZriF8M26M/hotHHYtMmthaZeQaAs3rr2+JKgC2I1Q3gZUwwvwMB5 4090 | gRCrgh8b73mhSVaDEKRj27INxalSJga42G3n5wQUP6tJ/gMrNx2o//q+eOE01FMo 4091 | 0HtPGyFIJg/bDaUUdQ3tMGGUyQS+hrmQNaeGUiaxJ8Zutxlgrac1J0jDVdWAvC1q 4092 | AV5S2VKO9e2MznYpADIF/yNSrAhlg0e9gGO9IPGLc9yXR22dYzw3wyoKcK6UpyRv 4093 | agmbWnDwz8nc8iUloBXREtkOQ28kYBvbfwUO5rwNMSeciYM7QWtTSx6okGLWJ2to 4094 | nuq2SnFI5OW5MvrQ/lnrveuUkdlmwnlan2924EwCV2XrzUF3V4SgZ40MHWTVw5k5 4095 | g1me6yp8ppdYDXN9QfGd1T16YOGEH9BSzi2FPqofMMj2/7qiJUr8drSuja+Ja0Mj 4096 | IeoJXJyX1qeCvn6gNeMVOE7kMzDLWLS3D9PIuK+SrE19YG09defHmbcsYKnCQTsd 4097 | pT4YzQ/6gih3iPoDV+GQnkgpvHk/punMdHbdM4Mejuq2kCXqQGhTqXv2mIa8dqtX 4098 | HwwgpdjiPI4uZTIQJbcu8zACqxjxlVA17XNhHPlZAHBNWLfhffyK23oz6A9N+57+ 4099 | vHlmyU7k7yML2A9AJc8ilvTArLGHwKQ/7f61UmnBu4Yt98a1uJnH3VAAQF48PowC 4100 | QqtbPvSZbXsLp9i+p24uYk6qQVaN2V83Emvb4T2EVGPrAUWyfQol77QYjqM641Zl 4101 | v/1dreM7Y/n+CsVvraWCcj2wlQ8z2o5er9wWnjuSl3cL7z5+hMUH8zivz1gTpoMd 4102 | wCxFhXpq4s1tLQ1AoUTiKI/O5l4sMiwCD1OhZpR+ZZORYrA70aoGq0Z39IHg/3Jd 4103 | DBf9F5XfUFZ7Xdmmn+TgZly4iB+lGkMyhU4pgIbkfSn4X9alkCkXcGOJmzDnh/PX 4104 | oMn0ZYl6VYGF+D66A5cyaVkeqym+ng+FKN3iz6O0OtwxofnrWAxBUbBGu6nfyWSE 4105 | MyzfvBu8dBe1WVB032qtgqNx+/J1oIcTnGckI8NUIsJMjdrhjakqtomIKvi+XeMg 4106 | jXjWvkJccxxojFD64pMzZ30E9i7KIy8lQ8dSlqEk+rzQvgpw25IsCINyWhE/xfaE 4107 | UbASs6I0MMuRtASFwu1sAZcIr1dPNcKXxgPQ+2p9Nhczq4JPY87K4E0Gb8APc+du 4108 | phwsuDhTEwatMK9KK0f+QZBpvT6oiXA5yM2dtjNGkASZgEHkZf0lgurE31F2h9X3 4109 | RGT0VYLVoyRBUowyxiraArsP/e7xIgxVD69RIWIjmZWL0MFSBLzJ6l01CTgOqnPg 4110 | 9+6BxksG7TKCz6yRO/EBTjOw3qoZIqwSEsdLHoaIMcanw73gnPhXkatZg0A/OriR 4111 | hKxJg86G81Gpnbp3Co+uUdEr7CyW1axHOJ/6GdbYtUGa1BB3aGgX0UOIm6IFGf7Y 4112 | PEa9qkbPXmIJDpZWWvXiPmwEE4qY/4NE8ND7zx8MVSoCwoz8jmdATn2kETSSlwwP 4113 | lY1kdo7bAwnHYvKepRRAkB/lAXGpog/S2zI4C8hJc0dG2IqESt65HunOZhPeALQP 4114 | Uh97r3HufL7cEGQsHaByHho5rDFDRMqChOIqOnvOGkBXKoqUxbSsEVRBXWPSbJ2T 4115 | 9WaZgiGEeo0pta9/6BOM6p46DLPC7cjwpfwSPXBfRQ/CtxjoWbplLVfFVG5RECaZ 4116 | fe1Cw2zJ0Vib7xB5trOC0sG1nxSHimCrK0F5cjlczDzsnkBOHHan08J811NLJqbr 4117 | 0vV9a3S7uZgTRw0Nq4v5nwrxufl42o2UtrmqQvvwvb3SgIET8YpfAOos/Y32li9u 4118 | 1l2AnOni0L5BNQL2aAvbxsvaH1WpePZrpZZjdGpd5TmNNNe9wnpPqLjS2PDmG0Yz 4119 | fFnAyBRw2yk5J8xtABhcgy5Z2EBpwjbglutVWRHPvNUkXGYLKJiQtjBNrAQqxwsQ 4120 | SA4orjyr5KxUxFozveQv8zTZSkYXpQJ/D+RAGwBYW4B0zCZ+BsrLM5svKXiPwdyX 4121 | o8XKKB1EUDRcgOrkY950cUkIHXuqy+S7XKpPeq67S1MxJthQJg4PUjLmfVD/MOWD 4122 | IQLAoSiNdzz8r0c7n8oWCn6PWp5Vbwgnzx3CyQSa+DPKZb9uelLi1rDmWKuQ22oh 4123 | devovf82O9Uw4xucpnIX+ct0f0K2q5LeD8izIvQ61JT0rpmZEQRHh+ivEDIK4bHo 4124 | AYMjGsntBCZurUd6drPdRWRk9ZmxVssZXlsdsJdBOKtwfg/qcbYy/lvv9s1BZbn9 4125 | fmGPLMXQ8tobXxXQJjQ7oO6gmKlHzJet5kXStKEc35k7ENIWwSubQ3Z/CA/Z/OFS 4126 | arPhY+5yDgZHoxzre6AIOnOXQoKhCIfDro2UJLgd/W8nsJTFBrYj02jY7Gkk6eFS 4127 | qeiFQyMYW8kyKFMIaHfARtmRG+GtfpJh9n6Sj/7js5C3lVnMcNNfGdHNOxZXTS/z 4128 | X2J9M7fXSBa8QEq2dtRLCECnNuCeFQ7cZ52llW/69KQDzZputCvsdBG/VilxXmO0 4129 | WOUGD0eafkXw7DDqNrHKFtdJfcoM9hfgGGTi5Ehhsqqpw6kQ8zaF8Zr8Peje6yPF 4130 | 8eltpV54eQU5WCw1Soy5ggX1u1VXQV5Cc5GpsA1pJTneChbl6uEMPQWVMoAf0Tl7 4131 | 7LxEmY3e+0+r1rt17pUnE6xj0m3bF92p15SyWJeMuvsglhqtO/eNj3DeR4jNd2xu 4132 | jeG4inhmaSuOTpt7sVxeudwz4RKrEgTgwpJnwGiKGpXZHF9lGIpQEedDXg1CDIr0 4133 | D6mvjVMEVcAEeu88qY5izJFZ65QtN+czpwJnER08CrtaWmrODRSJegMiCYMTLhn9 4134 | biUCSJhTUSQPEaPeF5gq2umGE0YLR+BpltBafvlDDgHlHpNTFRxDNHty+J8dc87e 4135 | eCPdHaW8A79qpHU8vD1wr8O/EKN2Ak6uTwByP4SD1B4XbpkfNGAhPPxC/XUtABvt 4136 | BYF3Q116+cdj17rGRYgzNOt8NpDUb2CkmVE6RRInVXVIcCu0/yOOZ9UJnyJHKy+H 4137 | 2HxWuU9Z5Rad1nY2ZMpS2I7YMK+vhsBaWqUck60r9Svi47S9Vxr1pCWDBx0GBZis 4138 | zmB4Jaa2sFK2dQuth/1tGeW43dn9WpIDhr+nytcIs++UTkUevkDg8haarJlHdEQp 4139 | vYMc2yLwLek3zSKKFqAaxLRkukqFCY6s0ditGsr10JjqZVXLvfdkTpxeoCwql11N 4140 | 8Mm7ebkwwAbbiOFiChMm0n5m6Y9x8JTWcgJvX3k/Rj7Sj/BiCSKXJpILvlWkr6Tx 4141 | 7O6zTkeHyPIVRe7vglUAMR6Udi1zl8Q/3bTBHN/lQpH8QF/5rf7vTXdW3H8KTamv 4142 | tzABn1ycOZVj7SMV9hNjdbe/+bfzfjJbmBMdiQATNjXiJbGiitjo6I/b17DnIBxu 4143 | 4FWZJvPoByQ14RdLn+nYKUai8mJ28GXipCgPrduZ1jQRI9xXXcLXvvcNNfvKRnrQ 4144 | nugCBz0bCK1+ofw8aH7O4FnNbUM3c+NOBVvED5MGSBi6A37tHxeeg95fMjNl5YU3 4145 | uBvFC7PJKOGIoNVIMpvlQYktn5UqbHMJTU7PsmWu+fSnu97SHB/mf9wExiEzZq1q 4146 | qCoC8jPcEb/V1SIsD8lkXLgN31ZyA3aKGOD6Zd4gN9RKfa+7dQkM20kauCxNs5lx 4147 | Upf+HYTbqhfcpPY3PjJGWbgAP5Ke+2jV9iKVKIFW5JMXCVjWFA3vHbqt4IqOvZWx 4148 | 59wF24aBCiLafZqjYvL8zM9WR4zu3mVbJhaXjuObEAiG8eXmXGTr+hn2IxYhZMMQ 4149 | e5qqaXtEV+D0n8bmZZqSVLQ3eDz0j8pKjHODtXDzc3nv6kkQTHSMBw/g06AEy4Px 4150 | Xi30Z30Fs9BrzU/kmuYdz2pemYLeGi4zFaAoG7MIQ3WqZs1tSERKNNS2nuB61jzK 4151 | Iuc89N7Jew+YFDAmd6JuN/yMuEHVIrtnM60F7WJPEb7JPIRMSLrCwO+7fcs+c99J 4152 | JmMd2L0iH5rsdOyqbCI6DhvAzcevBXaAfZyfg1eFkAcx+/c9BlsjY/tdtrMQkvoF 4153 | B1LYrrEbtPJP0htaikb08u9gdR2udK74stRyYYj73duszrXjKH6dSXzJDxe97pAh 4154 | 01nGT3t5YUDt7Nz0+o+vfv5GJPHlhjfBkBZEXysxYrpHVrplZTINgFic/BGGPkp6 4155 | SKU0r4Iz2HKnBqzB/75gvNwZwHGkaAOWeC2G9IPDVkPsqbJryduEhY+Tjb6orCNc 4156 | rSXpQfzl/XXeYTsy3OONxS5VkRYIWwzN/djIZD2OdRF1kZ5yf6aqrpKW2dJyTGvT 4157 | 9kIDJbQs/lVGOXZYQYesz2r9db8ij2Ja11rS9P0WAFJGo699x5UnFhyD3UNI4415 4158 | WRWU/5bQRB+7ku0SxA05UPual4sYkYquhObl89FYpT7oLiqP3ZFCmRZVvJHYFKtJ 4159 | WuJ7m0xf53M6xjsmL8PSYreQgSrdMJ62EhXYhl5xbs3Cr9ZM5fGsLtgC4K0PeTrC 4160 | +5qeNqHAxEHgc2m5PV8q5QcjLhvcXnwHfYn7vTdNLbNwyV07AnsfSWd/eYCpA5ko 4161 | iFCG8WyRgzygplMrvZmJguLWbK9MKCGproqZTfzKh4P6ulgHGY7h1SxLCl/Ulki6 4162 | 7KsyfhDdx2QPsGQM+OkjY9dq2yWeA67YmC5TEZxx9+0u4ym4869WEawFq0vbPd04 4163 | ZUhXIyci7oMdkJkiW3LbupSE6/8a/CU4VQygGGCB/PNfvRRET2KBkAhh0Tdf9HqW 4164 | JDPcYVajW7ElTneEzkJY6071GqEewOMoi9XeYrn199o6Z1yASVIFRymh9/wHrLka 4165 | Cd8l3gKOLXzNOlPYai7mcliWgVemJky9Gxw7HCtMZRpPEMkbp5FPBbQt3CfOePqu 4166 | LsxJZUsXpLat9XcfFtXDkxZr6MevW+d9DIft/gbgS6aE179RTdGg1CwsWCMeXYg5 4167 | +iD8tdQ7ntYesRUhxYiee3KpXu/4ZAaNyt7xI2j7gy9i/25had1/u4e5wivptJ+F 4168 | 3Rf5LmfsRdg0W5bc/kDg7qAWqd2qV96g2IkLSyD51PZB8BZy8zLl2xMMnXGbU3Nu 4169 | w750haFzXA2Mh13VRQs65abOcNQctnU/qUd4Nvoji0sZ627cnpR4UxbYvjUcCLGG 4170 | JkLRSuM7jCkdS36uEfdCZXIED7MI2U/jYIxFZqbdG2NIsNzi5SU/83zf9FgaF7nc 4171 | jAPQoDYAupQOiIADbdv6Ta4FREzI17cv5rBpqzLoI2DsoogvKLtuvbC3akYvNmfp 4172 | KAZzP+r/y6LFEJM3J6UYI0mRaXBBpK9VV65jdbYrnHtUzmyhiGBkZzQwx1XsOIFa 4173 | Ur4wQdLIKGsRIEIYB0JfIku/5Y7hVxlOCJrI+pYWVngz3p+3TK5hwzqT/SPXFY8p 4174 | xQZ47aiMZDIYAAkDnxqT7+Fvj7wusIcwqGs5N2HX6gcPJNytP4NPUaYcHLNYxWa/ 4175 | FI/ox6+yERTmLDUkcAcmdVxxYfnOFrsVcM3Bs1gaUWkOhlxwQ1IFiZ0lX8QajnH/ 4176 | sieukfRJwoq2/Jg8fsE20xqSmX46j12qa+tNzamMdvMIdWl2sIcbE5sgQcB863Za 4177 | ExQyLLQMYkEaM1iWhmtW3C1GcOFUE6mwxbjpqpQVu9hHe970ZRtJ7wzBl+QhwnOZ 4178 | u0s31w5rLMmroW/Gf60MPDqGRWYCVp7Gyvf2dHpGcpZSYH67YED6k6iE1xG1+2q5 4179 | o7HX4FRsIi9zkXNARFe/YtPb4rNXn7FJmo1vsNUY1XYEFf8SR2Bdl79qyNoc+noi 4180 | F1nZjIYE4sV3rQBzCwMu6y/vsiqznVnvIk5WcJ/Qoz00k61O6A7jblTlK7a2Z89q 4181 | Vm1uPYzyxawz1MHhKA7eVwkNcReq8NY2D4ySxOKGlNAxI+2rCEFhLWWTatJmtcal 4182 | 1c2zN3K3Wf1brl7fAxUI7Ccf376XMrGRORI3jer3ksAC3A17Vk/kCOjVSzSbqnl2 4183 | HakK558Znm32HStJaZRUdBRDy9/9MaASdLFg8NhMmKfMSMjF2wz8CHKOAHi2zTCJ 4184 | y0f0nFW+AAIb6FYqfqGWBU6OuKoa5YDdnyjYSh6LE700DtEbmVxj9R2AHoJA7Ips 4185 | Rz4cGSo4RxEOKccfdR0MuPUjWb1buyjFfhScnn22BAwRkk2q4ZlyDLz/T909OKCV 4186 | PlofhriFBt1qdY4HAfjqlTnh5/YCbmkVdZACkazsq9MlT2dieUtnaR9A8TOtInua 4187 | tKffkxztgaimEpijJjSyMng1nTpL7EdYiLFyiUoXAxszB+7x9oYysXEJPXwZy8Im 4188 | L60JxddIwTF24QelW1i6PfLkDXZb/W7JmW8lkXtkH9H7ivXukQK25sihinUTrL+n 4189 | 7yjxKuPGwwRH0PPMqKxBTut+AuMPbzA7VFbUnetJ1aDxfMxFyMb80nHj1cb+2BOl 4190 | z+pSVIWAYYxKLvZz4Jl9q4WV8/l1WrKX7INwVvsJQgoR4813psm/UPt7l4ZfOWl/ 4191 | k7AWMJFQyeW+5W39BusG4lL8zMHgkb9DFapJ40XPOeRjK3UJRslD/ypZL9mbHaJ1 4192 | 7tehyXGJVDWphD3J7ilPCQh+EWSzn17F362X5IPVCVcevX8lSRLkdHLmTIFTGSii 4193 | fTB57eLu/CAhFSEXMR1kxus0Ryo2QmGj/NuCzVc4WJyMS8dViBoxjl5xAcBspael 4194 | LklYzm0XMLkCFF/ndTQJRR1wQe4+VT8nOjdeWgIiTlIrKshNMoGmdEWi4viHEAOf 4195 | sJCxnUaCbiTobA0ktgraBZr4jlLi+7F+FZ3LP8qTsRM6EiiKNK5PtbbnbEWhMojg 4196 | KR6hwpwoV1G3gmOpehv/IR+4nPVsZA//TydE5mrEcIr+MwWHi+TcbsHYGLkZFQG4 4197 | lSusz+DgEZN3bOx5zdilXiy7td2HPWx7NlPAieFIpVu6xIS23R/dF5gQWoLmFMpq 4198 | PYO6iPSC6yt4dmrX5LTbMf+kxaJpMSWoEsV6axdkioonQuZmyDaXiAHYn/5pfjcW 4199 | BxDLlzAS22C2OVhnq3fROYlD2mpZxRfQXHgIuoh04KaEY9CtLgn14rpfJWSKoNST 4200 | iRBUhXjZZCF2Z+R35VI/9H1A4DQWDV0DSErXQfv5+DvHL9HzTzlagKFIQfxC+S5V 4201 | kJj18OlsIv1LLRLSNuSrua/ZBaEDEz/+8ieOZ8YauE3v2pTpF8ZQjVq/oZBObrMp 4202 | mk2LUW+2YjVu02atEjZlbShbtMut2QTxM9I9bbsSBXyF80nNyRFtXpVii8jxX1Ec 4203 | JoMVxpRIEAUhhu+37JeyExtTDuyQf/EVSZsHg9BH0fnpcc9WQh4CRFF5Pocs+h/k 4204 | hzZ5cxHCSv6MZoL/0FRpn3jFSeShAOivZDbjZ3+wfOVaeRN5pX33mEVKMs9m9Wtr 4205 | glsge7im54UoUecRA36fee+cXRZaqslR1+WUiQNIkYpfW41Md5ldjdFtATEk/Crj 4206 | UEL07ijDOTq4mjfQ+mwqCE8vD0DdUebLIBY3Q0X+BjEqlVJ7ue6cQAl9kSJfpw9q 4207 | crdVPH4GPLiJ6pmb9J/JLCU3w0je0pf/TpTOeC0MztQkkfEWa3BDnOBeXdNjHW9M 4208 | V1fLKdp2pVONM1Wyy4sz2AWFDx+Y052iGFLF0c6qYsXjDVIAJwxMAWrkph0o4qr8 4209 | 8DNOckLjWrFQD/Ao3PCQbK/j5V4XR+l/IEyTp1afu0CpSGOuNpL7qx9g6SFvesXa 4210 | KiZKtP2SFo59r+QhXYRSEgvrzz8sblZEVh+Cc8mIm6wucKAyBLZx8Hlsg2b4Xo+I 4211 | io3NB9aEwYuHgl0YCTGHzIwQ8cdJ2l5O/xVaqjwu0pXJtPdPnvcNfuU6gvl8eB7U 4212 | PQYar2geavK65nmmQSgxKWgBNfaAOcB6IXCD9aBjJVF7zdcF15cTSJwua6IjTAsA 4213 | lnfLMoPvo2os+XyTOExAaC6mCgLncGI8iBS4UCa8p8wiGfGso7PLfJCTIRenbx6r 4214 | A4grUiu1VsMzUU6/w2Na43EV3lvkBf+Jj1KCeW0CkdpBJrzqfBlZFrAS5E7tzzdG 4215 | KKihjASFPbr/BD388AyoXZEn26fIlKTNJtEv+WFQZ9/ITzxzmh3PTlAtTm6+O9BC 4216 | EvrE8t1Nwm6opmDRRMmNQ5iy6SaR3nBJGD5xZuD7ZH1/dPgSf5bXz5B61zcH23E8 4217 | IM1Sj3vVS+uuf9SgaqbUaj7Avknn2GI7996wzHTrBOVGMEn1/9a2SsYd+0QEw3QD 4218 | C7bPeLSS+mfc6ywuqjeVvsNBBeVcHRRe66XciqebEeIcbSKDCH4HpPwRYnRA5HZZ 4219 | uwL4f+U9cO2OUCFg9S6hdVQ1Un88jK1/L7V0JesoHpgr/EKrNcajLsMwa2GdLzjh 4220 | YEAePwkjCelLCKcOdjYUIFUkBIf81MVq7BS04jswZjNrs/VLUqZWL0asW6gW1rcU 4221 | Em6zX5yaGDtunzkIF1hT9gkBhZYiD5kXBvYQCJr4I5NZ7uBuNCsL9dXifwEwNkEX 4222 | 7tE5YyFz2bjG8mfYGQFC2+RW8ENh86au+HGJddELam9QABhtCw5+1nGnQ4lY7DVU 4223 | liJL+bNRrb2YznbCGGUf0Y5xvFYy6Ev0Nw/oMK4zUytM8Os6Rj/V/3wEyyb19//q 4224 | rwGy9bmxfSpCFpc12ofndBpJxz17ql9CNRNV1PM2E/JkSQmvFlbGfyqCAhED3QRR 4225 | /96t9RMFJBoDAWyGIp9KlEhVxHaEyLBJU59E2E2GU3teqJNxlKgrbIjyhk+td7yg 4226 | VG124JzbpqxnBZBEPmt1NUbAHMgNsnmuQsEwrXR2JPv8JcSRytUhqzhAi27soKMO 4227 | /TkKrfTd7qIsp3FLsTz2pE/JDegrfv+nbEs52RtgsBU+nuYtR/G310MssA1uS9IR 4228 | aWmHuWVDDo0+lYYGY4UBQVdjeKolZqqYp8Kq+X3weTOisDTauc1tyFsTDjczKzGr 4229 | ur0wH7fAIqsYSe2ud8o8vugRI7B6efAXn3r29YfSnjKcYIXYSKgF8NU9FkjfcN0j 4230 | BBMom/WMFeZWFY42fmZz+FTXi2HHaNY8BwqBwJSMS4farQgUOfs4Z7b/IWvF6YDo 4231 | AmpNzlCcO3uArHZcM+9R0DdyzJu/+IQ1kbqtV/HunCB5J6dm+hfr+O3vX7vfNM0x 4232 | M9IH7INuPodY3FRcU5aCwgPPzfzs8CZVGe9Qd6DglbUH2I6H6Aglmir84v6SsSgG 4233 | N/J9qh4JCyFolpsZlMjXNwxsKyOTdJ0vYQwqouHeT95Si/pp/wR85VYFHKmZH7Tt 4234 | Gba9E1H8AFvpm664KG/MW6we/9yOIbgilU87wZlHzTAOMFIGLokdgAOyh1fx6LKq 4235 | MK1G1479hNHfPOOD8k6ahsHAyaJG1RuG2XcoVd3z8j/qAXZiYGkI9UNHC0ZR2QhB 4236 | 0+5HaYPZC0YemdqL8LfkYXkM3aOdHcg+RNKZXmLjqfXmKNVqOi0YBcD1PkJPFbd/ 4237 | eK3XbC1as7zcVzPqiNuBYbZIpHSD15tevmx6qGe3pN243sJPgHuoUlRgbfCvhzUw 4238 | 3cMLhb7gkvg++LihWmQpzNZf25P4VJGMmMGg9VFof/1QK9fpembEZ9zD5GeXn+ej 4239 | qeALRo7Y3f/Jbbne5pDKhzjecKjhcsFnIOvyN4RHiwadr5s3czkU9UTQO/XObKAL 4240 | 7jS/JjqS58sxocihMYkRoDE+5YfQUoIs4/eL02UmVZwxoZ94NibcmAxEer8BmO0q 4241 | jV0No6MzLLp6/hObS9a2xTDRWNnma+5UYiRa8f0lGQB9ViCVRt+sNuqpA4qm98f1 4242 | KEaM8HB1+QzWxHPey7lcLPQdbhmp5PbE6r0ayS1x1kLfAgi/BmNBeRhgMiA1rgkj 4243 | ffhXcDcWbjI7zds+cjWRgZy+HnNnrg72huQvdfLpQ2kFfZqtIKg0Q4+QKM2TeXXk 4244 | gCI2vSBf8e3RradagxOnPXjrdbYuzckah49qnF5HSwPfUamcqJ3uvhRJ50DMCx6E 4245 | u1ly+oI9q51Fmvo+fvGSZTR0NFufLQ+fonF/9d27+wmIkB8ildoZyYJ+Hhz4H7ev 4246 | FUjoLcuoPvx8wQ4FYR6cx0QJADdPdN7hGaAxqyoh/mE70Zh62w0jjNHG8Aqv8sgH 4247 | GioEGohMIFaM6okXmzy2nKqrmxOu7sSKo2v2gEHyIXv/HMZRrig5QTL2iLFgcXQv 4248 | /KItNzKSZxYEdatplLndzTluzubAmSXsPKlN3DwfK1uimtBjTd2jHNmIB/oxAhPZ 4249 | 5Cl5tjN4gJ4jQZL2OfldidTReUBtOLttLsMGe5tAOn8YHQornDeXOOgYTgLzaxG7 4250 | LJNIi5elAUekH8hnqOUZbKsGMZ4dhTmuJlaMlC1s9mM4Pv6FROor3RlvNKL3zB6c 4251 | 2UJNBbe80MeFtg4C5JRme7cygMukXfP/L3VmgZtDCe2Z1cNFlyer9A/9vrp/1aeG 4252 | IfnBTLGQVw4DVU6R3H3Posh4aDE/gyWOFH6P4+ahYakgXUo0Mqq38HYluUQ+7EKM 4253 | nvC94I+haVFQlh1UpLo2iBPDY8v0mYm2cbvBbj1QABZbRU2UAtlwTwUj1aRYNBbK 4254 | CkNP05QUaHTYv4iaeXn1Q7XT9fae8no8SVpaRo9Ea805EX2216NkDNSDRr6LHrNF 4255 | FWJY5zMvAfgALHHsByuIbDzMv3DpYvlLpbGBsdAqfMtpHa7839wR+ES4q/Tf9zoy 4256 | m5tZB5YB2oxBvWdk7+b53mVwiicPKVfliJWKMSFbhx4FdOoitFqgblLG1MSWMSeG 4257 | wjpaeXsBWEHq297wyzbE9p+K70fIe2tpPLO4HrO+KbTq87qEP5AWkZo3sRpWl56W 4258 | 4L67Pnvh6TesbCGArEmAO6vaCBseiCHceTtbqSW0xyzvRWDdYjSf5/5mivLpMJU3 4259 | U4kFbxqf0UEsfxaHJ23wswOQvQV1IrHwK5BAkOsiF10BTYXpu27UgcyPZyjWVSvh 4260 | yfvQjUxQ41ukbUXqrz7XDFA+C/BNKVdSe2lxvfTOh673k71m2rYjCt6YfNE+ij2q 4261 | H+zJyb2tU13GXJGRacDLCk9K50jKVcCedvf7aKUvOgTLAeERAkJtsUpc1EcBu5A8 4262 | 2t40qnkXZ2i7rAHfhZ5YsRULQeETOlXoKCEF2Hl8TGHkp3gkKJJ0dSbJ98QKJ9Ws 4263 | mtc88uQo52Z5IbtjlKHXAziyFj8vMFWXYG37R+GvptblRGtnFMwyb6uIgeFJlXuy 4264 | +mTfokYmf7M2s0iXxQFSLiA8ZoYE7oH7sAxGUKQpE/dKj5ftJD2sCM//0aPM57AX 4265 | nfdiopfXlV3D6s4kmALm0mJwSI+RbExeHtgEQinyv1EF6nqe0L9vcQ8xYcvy4ZLN 4266 | 1+VDIxeT4DcY5vae0b98IG9c0C4jo1EPPOJefM1y5ZB15eqSrhTuaBX7dzCIF88b 4267 | ldzKALAMY+F+tWnqA0g46fR3/yeqJwa54xhb2iikT4rOopE5kZP5AQRNj0SKDMiR 4268 | 2aWZqVcG9GFckancNE94wklAO+61S4Xtv1W0CdSBQ/Ys6gHz5NcK1+EfjbNfA2DL 4269 | g/pBGUOIo0p7cDUXhfOD0LZYo5D+o0DbWGTtkQsqKoOydHeLd3d9+EtdB97z2TvL 4270 | rXUhbeymqvVVcH8mDL/j8xRuXzAbPgzyq95mf93Xtsn9YmQ/f0tQ+rSUzidCT5Wp 4271 | Is8SsCKuan+zVJCWnZhE3ltwrxSwH8k9P9DC9eb55NR3+sERgSc49mmHk0TgKcXG 4272 | 2wx2rQge/kYuHTXZMFi3QkPjHQvO+7NBXjOj3U3g2O8Jut6MZGk7d5oGlYW08dRP 4273 | 1vkuCvEWzpT5HCHAb0eFkfcxiMJrsJcp90IH2xswE5WMuIoKkChJPNwXSjo1kPew 4274 | Iewz6EI/aiNYscC+hEvfUioFtMxhRkZYUuTxlF740qqFEDOF1jWIgB+Gl/FVMnFG 4275 | 1Ee4jEzEfX2srqDOoqowmg6AzcJ9T/fkr/97BJCihaihWmeoKflvC8OWHa5vAElO 4276 | +YAmtcjqPSqbZ44gQi9e88kjcZVYJJ0IBS9UHtrWeOZTfBfH/OdqoirKDyCOFKqy 4277 | oHRZ+r3/6k5Izovq0Aud68nY89hIM63eYkuj7M8uyNI1C07tvI4swLD30itmXckD 4278 | lZKJFoR8752eTwOBJHd3Dw15C9UKqkwIhfibnrDx6FMpYLHPff/VXeVA82TJbBCo 4279 | 5VX1S+DssdvohN+HRotelm7BHaA/QYY6yYOcmL4l13LD1I9yc5Y+MlQmoVDCJKSz 4280 | SHLU0fvvHpTT279VuFfOs4GrOuVYrZhcqpyrTZhd62EQfDlyu1eX5uAOb6dhizVN 4281 | TAclkpas2Hw3FsZ7Vn4rvnmwijWFKviZI3UJAD5nisUV36lm9ZGG2kJz16qsMxIj 4282 | FoShsXsT8nvFy4tkMkRy3WMufuBFIjUgoA3y5/tJ6tqTeJAOMP2ANuMZopZgp4NX 4283 | wju3DAXddsiA3Tt/0jmLDutufUhVwlErAzDOjN9uWiLfh8GQUaDKUsUO1M87v55+ 4284 | Gpq+qGFCc/iWzA4gs9SrUeO1cMW/YaocAPpV/GDyZEXlZxcXso90kL01H1eY1VZj 4285 | XV0IDWCtdXWnjWn6taahMzhvg6WpHxMPYFax4lkwckvgjxgnD0PusEeubUEvxaD/ 4286 | //cb62hLILxLh5pdSgi1yQk+RDDyGjRFsUl+7Ef3UT9iH6WC1awFbXiJBslOo6zX 4287 | 3QBv3L2yrK2wY3zjYiHF7H88i8HAcf0z5DVcAW8U5uEGQMn/mZ3uGOSFe0XQ/5Kt 4288 | I25IXfUhTYaNfbGcSxU/fGGbluwpyz0agNjl0N0L3ID/AabTv43oOZplpLbT3bK0 4289 | qJ0Rx2BJnhfa+XASUU/oBuUb2flFlwizjlHiXYcG7Io8nyDLpJgBpNrZ0KCE4N2J 4290 | ikw6LT+kZi2JPvOipnt3MdfZ4PM1j+Am3G9yTS6rBQC3BI1yNWLhntulnufGufDj 4291 | 2nuRkVAL+K703fxAHu41XAwucDeqDh0EwMg2/mBqcQQgSf9t9mPq/3WWAv0QivZ9 4292 | GxrOU/t1CeAyK1gBRaUVNdqIajaGpECqpwlhTJg9rGQqmG+MZQoRoHVJkEBnIRJN 4293 | 5nYEKGjje3+714GVBXuK1saGzO1gMd2WdGG+Egw/tpJDMwbr2jN8o0La82wOIkkk 4294 | EucRraA5YcZRDazMbfTSsUOFjxrTE8js6Mj3nRt22f0jw2OUwD8IhNaSo5Xxo1gc 4295 | 27F0dZYhV9sZKTs6n2Um60ZHSLg6d0ugtaoLnyQ2FPgfKky+IwjdVqmml+mutKV2 4296 | EKTvaPhYesXJUrXe9gMaNVxDeR8lRKwoRuls8VMi2GO0VzOQ9301bVM+JynSdlu5 4297 | clKBkJw2alL6szB2kfp0nb65V8xp5X8419cWN5lcD4NvLpzHwGXKX/dCYNqoWcwW 4298 | 8vSDew1ooC53gCM5k9g66IfbbXBdZmntahwkVtag5tAhiy4XsVmG4gjaYL9SbHFE 4299 | SrjLnGn25vAkjIHp6zCxO/eAOIBTp2OYvMgo55Kv4DBw/pIEZFoKFbyWwqXje3mV 4300 | ATzIuLbnOQS7hMgVF316qLeCsVElFHrflUPSpDK840JvrnDgRjIdFBIw8zItNcuq 4301 | i4x/9g3wSJfHQxxq/DHDj5dt7VqftUG9f59jVv5d6+OheZI8fH4HVXrjEuMTjpD6 4302 | Tf9Iw/Y2RtYbPjbojBplD5iE+ZJMC4s82jr96CaIJAfYIV/B0oMcGsHZsPKTyY+y 4303 | H3mVAHvwxBp4s4bZOWEthyIh3Jhueh2YJ6G89uisTwB4S6PSLLYMqotyxgGbLSPy 4304 | cS53LWBH6VHO3sQslv21hn3XyYY8tnbYXwQx1kHxE1Md3d3zyv5uoJg6gDSy7p/G 4305 | KcwYuUQA1++vghj7P7cm3/mKeNzu3G4BI7/V7nSOnriK09nteX/1ZUrs/bNTlL6X 4306 | THEBaXVXLFYWd5lXxP6gNUzpyWNUnabETjKlM8/zZjQc/DwfnWU1UBT3OMLtdWMb 4307 | Niql1ibkYcMOnWhkPNS9TTQRwAJLT7fTqBztwySoh0rzjy8RWJ2DTk3LSfFmXNDe 4308 | 5K6HrZW5dFeurRo+EDuH1RNGrwExn7PQCVRv9OtQcY4SV2oxEa3+rSA7Iy8n5+Ie 4309 | 6u/A9s9UD+z8NGwS8exQVHZX1t+sobs+odu5ZAWoU7jbq5R2cIw6z3GLAy0bt8pm 4310 | Tne9yxR64iu1Gh2hQoQnQSNUuLp9ykWB4IzJ63ZumbphyY5MZgGHuzznbdu4HlTj 4311 | fjTBtxBmb1R82zg/ABEonUSj5XRzA6ZByF9KKJnpmkFzotLLIBZOKX5waXqSaAm1 4312 | MAzZ5/IS76mF8ias1UVUePTNHiKtf7E7AMugDJeL2ZsuPgOP933Y95qFV+hHGU0j 4313 | 9XcK7n/Nq0W3WiesfF0fcnq4+tQPtUyW3nK/AA81vbfRQwXqp3/VrxPSLk1KORMf 4314 | V1xJ1NmBTlEo/4AJ3PZNm03MoJYJKa2Vxwv4qhxrugFpk0DyOGIaZPZ2cQFlv+eH 4315 | TJNmu5OR7xHFHikXmYPHUoQRVn4nV3S+bef/aMsJG2I7sN5WUYfAwVGuFdDaTR01 4316 | TrcvMML9p3PcDKegsYGqgjG3iantT5KYGmShDdEAddxOE1pZ5+/n34yLin/D73nE 4317 | 8hLX3OHxBEIb4YrMoeiKG0HRk+MTsmCgV0VnuR/gNCKRlRGhUv83cR9Bgd1iI5Yn 4318 | 1xoZUX8qa7MELVBYm5aDfmvHC8+nVZTAk76+hYfwUzLiyF9QBtmexinAGVD4gCc3 4319 | B7ggXCe0cV/Vt+mZ3cqBvlWpIrqRiVkZG7Xe11uHeLTWeIMFrFeOpVIXEBlDpzK3 4320 | m4cHjCFjjFQmvODnKfckaSINURo9mxhu3SogDEdyiFOVC3CUdQA8nM7JgTdddmdC 4321 | FzFJXgH7c/fsnINWR/NxsSU4SJDSJOQi+0VWb7aYf5nwyx24pJDSCGhsqS2L471g 4322 | HyyeDOEwCGzUGHuFj+yvGKZQi8xFGnQw+xLzik1h5RMSyX6mqRdUpO1r9ZBC4ys5 4323 | sGhC29uruegwYxV67sNN3HAqbovAwagqIXjtEhYpnzkNJwul6w2Y8XvosZwF6jub 4324 | B2ehwdgC2KigEe5DQfqH+PL7kqdwKYKzBEAKHgfOUrkGN4REn7tY++n8NIIXtOXN 4325 | e5TPelWN7EA7nghjQCzHQ/8grRsQR5PY0P7k9OaT86dTDVfbQRz5dHMt2ej6irLF 4326 | SUWc9sleIeqjeV1zmFjUa+IKU/stsqUpu+UqvpVeMB9MYTXEdsJpM90pqkqrnrX/ 4327 | Cd0EMiJ7MfsjK3+bYO/+6hGePFmIRFJAlm+aOz3GpnCIsrUafoS21qoyieLFDr6T 4328 | 7dwWDm2otOoVZh/nLUGpJ/S+tO4DUopQY/ZfNddSWj8ST/PSzYuEjm5bgiydGPZq 4329 | 8sEtua0e2a4cRqpVvo/Ue7PFYQNn9c0bqAkcG0SwNelxE5+vLCWv3TldXO/VBMbw 4330 | jFkfENLOrCGaleQRDL7qAh3bk3ljjBzlRbQJUGZ1spAcDnGUNcIshfF3N/QhtHie 4331 | YAoq/mRiuktW8J+uP++r9mMXjnqHplB39irTcMEH7n64W1+JD0BF6t8NbjUtgXzH 4332 | l4z75gn1QsLaqDJA5I+ogu0UqZuDLIBesHELXIdXXwmEFBn7HyiaKy02Wamdn60a 4333 | zzWpiOSgXOupNtbD/9FjrJUTe4bJ4dRNEfOHE78sV3B77e+XuUJaH97oYFEVy/0K 4334 | 5IvSowAk5gozuxEqHM+UKvDqvJuphwnzUbFfhzh/ZF2mM3Jzd2ubjGszc+rjULbP 4335 | tX1Qc9zgR+f2IDY6FOfKhVmdQQ9thBkOUe5exnTIm76oGhiU96nHZPigU9+C84m/ 4336 | 6QhRJ/GGZi70JEaAeueHZpLOZSv/kqG/Q8CMOFC6B1sqx2bjSH52DdWtB8cADzz+ 4337 | s1rR5OtkBwP4xF1D2mqderP4FqgL+aoaD8Q6Wtw+E84O0q6YyGrGjkhOqAYvcEqS 4338 | 3zFI8knsjUrtw5qGBiJZK4KUJ1Yx5ZPzR+IAMgzknWwCfbKnqJ5P7NhXtmxdlocP 4339 | kZM6YgmtUaWuOsF6Z3uWU7JtxcOVyL8p8Vr7Ve4keEhnap16/i0tlhyLMUAQUZvR 4340 | z9oHCvS4WOx3lmKL4Osg6ReBQpC6K07ZlEPX/hVuYAILlFH19IMVoaBwEB8BEbWT 4341 | 1uKcmAE94IRH1UkmNiPrdcSEfbyGk1pEGIe0jSLvCm9ms0PC/4C5WyDLHHjcljcq 4342 | 66C4yy7PVxYIWuhXbWpxTojm1lRdmBT3KBxRoicmqzWGSi1YrQ99kFjfI7L4AAK5 4343 | uF7UkpPRGDTrOvbl09fWwCPjR/0MgjDoKhz8INj5WMCmDcXszs0mtZD5f991K/3/ 4344 | JD/PwEYDTnR95UkqKQneaw9Sndxyasi1/g+E8h6ySbqt4DDn7+uE63aTBzzYXARu 4345 | JQwEJl0nvZXQ8mQZa0/lCUplgFs83HdPizyqsHzwH0RJGQHEHjOGyEpjtSv1FgHq 4346 | qXXuY3Tv7tKzRH4CRN+xblZONKYv68/1diB8/ogl9Llbg0VtqEGppRxR0R5OWBWZ 4347 | CQoeE4iYGE9QoCvVgbT1XIhMTB8hT8W/DP97DLI9NlENjEHh+7Pj5AGOgwjr177l' 4348 | 4349 | personalize_steermouse5 () { 4350 | personalize "${_steermouse5_crypt}" 4351 | test -d "/Library/PreferencePanes/SteerMouse.prefPane/Contents/MacOS/SteerMouse Manager.app" && \ 4352 | osascript -e 'tell app "System Preferences" to reveal pane id "jp.plentycom.prefpane.SteerMouse"' > /dev/null && \ 4353 | osascript -e 'tell app "System Preferences" to activate' 4354 | } 4355 | 4356 | # Personalize Tower 2 4357 | 4358 | _tower2_crypt='U2FsdGVkX18oq4VX1emauD73227dbXXMGSeLQUmIsPFyU6+6Q8KFCqbqR7GNsucJ 4359 | LXv/OdspHtCJXtDlaWtqZd1NHs+ggn25OjlYUtdMUWKVRPgGlOTyHJdatXs5gB5W 4360 | eAhPiTi2426B/2/EG6oP4yCppBzg2Futx67NPJ+IQjV2FXCA6trV/yFUu8OD4L0G 4361 | naiVi0l2pCF5Wi1TKNOy/lm9s2+NlCHzRVn7UidI3npHbo2qNPDZaZS/OQ5pW45p 4362 | san6ZcVOSQnvpe89Zn7ytuc1ya5ndVppyY8ZNC/CeSrXWvGlXgdv3xOaLAIcl0l7 4363 | n5DBDW2eKhwcQAc8V5cK1MUHVJpjjChibB5u/XzewMJ5fqB/Foezbppk0C/qB+NG 4364 | Bky5PkBIMGTZxgmSUm015Q0PaaLzypung1wOeUoW3uooW0JXRjHQ+PMz5a7fSwEF 4365 | VJnHS5obu6EpOLALMKeHVNr0pebUrZniblnM/ZYpew4CBLS+Ff90ynwAFXqqMQEd 4366 | SWavfH0nOn6GJGSPaBC7BtsnPP6f8HGzn/zEg2nV4Tdi+2FyKPJGzVpJX/45BGCH 4367 | tqhtNRuuUjBNtgcKq+lKiM0kdKYqIq5178cAQAjSV2CV7MsxpSk3UVgdV0C/lJlc 4368 | dp+IGLgewlA26cZ7mAhmF5rGqnEXwK60GJV/wxiixrzMP2yixNNpejgXku0b+rx5 4369 | MrIdxFffsNZEEs7Zc9akn1MZpipRSQrwaT89BJ16/plkKiXZPaO4BsLXMqLL3Xui 4370 | AgBH9f/Hw3eskinf78r/nkx7l/Gs/zrJS2gb2huAOj37DJBakIyfsmyEfNfyHW5P 4371 | 2nUMynRGLl4vLl3EBYp9X+nbLDqcLz1qllabMqFYwQ75UWlmiAq3PePKdiY9JnzS 4372 | 3dfX/PCWw1maMxGFmnxjXqNEMwaP9dHypuQKO45WpvZ1lTs0DWysvuMf7TsHmR7B 4373 | N6dmrGKVzxdmVpIndQSsgwcjAoAq1S2shtoKxmd1ew3+yp+SiEui9hvb+VmsAH8w 4374 | l4hZRrJOak5+20xeumVQbk7nwz7xdl9K76/jy9RKBXA/3DB2K4iLhkng/vJzAKGz 4375 | 4w7w9F9bLiZI2j4CSR4Mg9Qs4N2nq3Tr2iON14VXsUtUBmBsDhqCcDneRendQApE 4376 | Q835k9ZGbhHn4jjc3YXjRK0ZQlJOzpr1Cin1q+R63DZYtonqVLXa3JiquxjH0z1e 4377 | 90ZFuIABUyCNkpkb7RSwW0aj3gUvX2uKJ1Jm9PRHFzA0Bb/8bDbqN6U/CabExJXk 4378 | fsMvQhP2ZFamNHARTssD1yL+AQoUjIDFp2FAfID2NwKUazQAMIYDS/zRt7lHVWjn 4379 | /0N3R2fegJAjaUaFvGBPc++meoCmOOv2A9cOTa1B+omVJiTuLQNFbWzegeZ6of2B 4380 | dILRTte1UYE1Z/JIDCH0EnoUyH8YvU9fcC+XpvnCrSwWQTUJNylLUF2gDjXIgIti 4381 | 11rxpV4Hb98TmiwCHJdJeww6ab0qawmU1ScPGH642X7Pwku805gZPuUeVuCunlj7 4382 | ZZXp9pjCcuK9jMxRBlgXVVVjomYzeF6Qu8Ld+GMGZks=' 4383 | personalize_tower2 () { 4384 | personalize "${_tower2_crypt}" 4385 | } 4386 | 4387 | # Personalize Transmit 4 4388 | 4389 | _transmit4_crypt='U2FsdGVkX1/A63DIwdmh9ZT09vTHrkKyLuzKUoAwLXVzz8W9KGmBUqIUCw0qBEU7 4390 | ybcj/Pce96IEQX/T+7dcDuMhZ9+XLFmkgjDWbygTSDyqK1JOf5VSfRbHpFv3IIDT 4391 | UJzgFiz9bchSACQ39qVigQ==' 4392 | personalize_transmit4 () { 4393 | personalize "${_transmit4_crypt}" 4394 | } 4395 | 4396 | # Personalize Tune4mac 4397 | 4398 | _tune4mac_crypt='U2FsdGVkX19wxlroNoTkSCFqKoMF+/uM244ExTuMuKN3RtARpy6mL0fDIcsJOA9+ 4399 | UeireHnKQP//WhCYdvUSEeXI51tiqfO05OiasiD0SkqQEY8okh9s5CJ2a8hErUEJ 4400 | rhvPgmlrPMvJkm+w1zabOM/DCUBgpfocCTbaZSmkMAVhWXwGHso1gKuLyxBhswQF 4401 | Mpx+flYNykcvPqr/6/eiB12OgwY2K/GKQJqGslRiO64jrD/mgYx/7tDM6mLwKIxm 4402 | w4DqWY0f63qEwbxb9Ott5CA3RpR5ocV/WHGvKdji6us=' 4403 | personalize_tune4mac () { 4404 | personalize "${_tune4mac_crypt}" 4405 | } 4406 | 4407 | # Personalize VMware Fusion 8 Pro 4408 | 4409 | _vmwarefusion8pro_crypt='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' 4555 | personalize_vmwarefusion8pro () { 4556 | personalize "${_vmwarefusion8pro_crypt}" 4557 | } 4558 | 4559 | # Log Out Then Log Back In 4560 | 4561 | personalize_logout () { 4562 | /usr/bin/read -n 1 -p "Press any key to continue. 4563 | " -s 4564 | if run "Log Out Then Log Back In?" "Cancel" "Log Out"; then 4565 | osascript -e 'tell app "loginwindow" to «event aevtrlgo»' 4566 | fi 4567 | } 4568 | --------------------------------------------------------------------------------