diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4b4ee7b..eb53030 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -60,21 +60,20 @@ git clone https://github.com/seantrane/dotfiles.git dotfiles && cd dotfiles ~/.dotfiles/ ├─ bin/ * Anything in `bin/` will get added to your `$PATH` │ │ and be made available everywhere. -│ ├─ {binary} * Any shell script you wish +│ ├─ {binary} * Any shell script you wish. │ : │ -├─ functions/ * Anything in `functions/` will get added to your `$PATH` -│ │ and be made available everywhere. +├─ functions/ * Anything in `functions/` will be loaded in environment. │ ├─ {function} * Shell function (with filename identical to function name) │ : │ ├─ {topic}/ * Directory with files pertaining to a specific topic or application. -│ ├─ aliases.zsh * Any file named `aliases.zsh` is loaded into your environment. -│ ├─ completion.zsh * Any file named `completion.zsh` is loaded last +│ ├─ aliases.{,ba,z}sh * Any file named `aliases.{,ba,z}sh` is loaded into your environment. +│ ├─ completion.{ba,z}sh * Any file named `completion.{ba,z}sh` is loaded last │ │ and is expected to setup autocomplete. -│ ├─ path.zsh * Any file named `path.zsh` is loaded first +│ ├─ path.{,ba,z}sh * Any file named `path.{,ba,z}sh` is loaded first │ │ and is expected to setup `$PATH` or similar. -│ ├─ *.zsh * Any files ending in `.zsh` get loaded into your environment. +│ ├─ *.{,ba,z}sh * Any files ending in `.{,ba,z}sh` get loaded into your environment. │ ├─ *.symlink * Any files ending in `*.symlink` get symlinked into your `$HOME`. │ : For example; `npmrc.symlink` would be symlinked to `~/.npmrc` │ This is so you can keep all of those versioned in your dotfiles @@ -84,6 +83,60 @@ git clone https://github.com/seantrane/dotfiles.git dotfiles && cd dotfiles └─ cli * Command-line interface ``` +## Dotfiles File Structure Explained + +```text +~/ +├─ .dotfiles/ * TBD +│ ├─ bash/ * TBD +│ ├─ bin/ * TBD +│ ├─ brew/ * TBD +│ ├─ functions/ * TBD +│ ├─ git/ * TBD +│ ├─ macos/ * TBD +│ ├─ script/ * TBD +│ ├─ shell/ * TBD +│ ├─ system/ * TBD +│ ├─ user/ * TBD +│ └─ zsh/ * TBD +│ +└─ cli * TBD +``` + +## Zsh configuration process + +1. **`/etc/zshenv`** +2. `~/.zshenv` 👉 `~/.dotfiles/zsh/zshenv.symlink` ⭐️ + - `~/.zprofile` 👉 `~/.dotfiles/zsh/zprofile.symlink` + - _`~/.profile`_ 👀👤 + - `~/.dotfiles/brew/paths.sh` + - `~/.env` 👉 `~/.dotfiles/system/env.symlink` + - `~/.dotfiles/shell/response.sh` ⭐️ + - `~/.dotfiles/shell/paths.sh` ⭐️ + - `~/.dotfiles/**/path.{sh,zsh}` ⭐️ + - _`~/.path`_ 👀👤 + - `~/.dotfiles/shell/exports.sh` ⭐️ + - `~/.dotfiles/shell/functions.sh` + - _`~/.rvm/scripts/rvm`_ + - _`~/.functions`_ 👀👤 + - `~/.dotfiles/functions/*` ⭐️ +3. **`/etc/zprofile`** 🛑 +4. `~/.zprofile` 👉 `~/.dotfiles/zsh/zprofile.symlink` ⭐️ + - _`~/.profile`_ 👀👤 +5. **`/etc/zshrc`** +6. `~/.zshrc` 👉 `~/.dotfiles/zsh/zshrc.symlink` ⭐️ + - _`~/.zprezto/init.zsh`_ + - _`~/.localrc`_ 👀👤 + - `~/.dotfiles/**/aliases.{sh,zsh}` ⭐️ + - _`~/.aliases`_ 👀👤 + - _`/etc/zsh_command_not_found`_ + - `~/.dotfiles/**/completion.zsh` ⭐️ + - _`~/z/z.sh` || `/opt/homebrew/etc/profile.d/z.sh`_ +7. **`/etc/zlogin`** +8. `~/.zlogin` 👉 `~/.dotfiles/zsh/zlogin.symlink` +9. **`/etc/zlogout`** +10. `~/.zlogout` 👉 `~/.dotfiles/zsh/zlogout.symlink` + --- #### Happy coding! diff --git a/README.md b/README.md index 66512c5..59cb711 100644 --- a/README.md +++ b/README.md @@ -45,32 +45,34 @@ git clone https://github.com/seantrane/dotfiles.git ~/.dotfiles ### Step 2 -Every file can be edited or removed as you please, but there are few primary files you'll want to focus on. +Every file can be edited or removed as you please, but there are few primary files you may want to focus on. Edit the `zsh/zpreztorc.symlink`, for Prezto configuration. Edit the `zsh/zshenv.symlink`, for Zsh configuration. -Edit the `osx/set-defaults.sh`, for your OS X preferences. +Edit the `macos/set-defaults.sh`, for your macOS preferences. -Edit the `osx/install-casks.sh`, for your preferred OS X apps. - -Edit the `php/install.sh`, to modify PHP/extensions. +Edit the `system/Brewfile.symlink`, for your preferred software and macOS apps. ### Step 3 -Bootstrap the `.dotfiles` and install dependencies. +To bootstrap the `.dotfiles` and install dependencies, run the following command. ```sh ~/.dotfiles/script/bootstrap ``` -This will symlink the appropriate files in `.dotfiles` to your home directory. -Everything is configured and tweaked within `~/.dotfiles`. - -It will then install common dependencies, in the proper order. +This process will... -This will also install Zsh and Prezto and will reset your default shell. +1. Configure the `.gitconfig` file. +2. Symlink all `~/.dotfiles/*/*.symlink` files to the `$HOME` directory. +3. Install _Xcode Command Line Tools_ (macOS only), if unavailable. +4. Install _Homebrew_, if unavailable. +5. Install _Git_, if not installed with _Homebrew_. +6. Install _Ruby_, if not installed with _Homebrew_. +7. Install _Prezto_, _Zsh_, and _Zsh Completions_. +8. Reset default shell to Zsh. ### Step 4 @@ -81,7 +83,7 @@ After restarting your terminal/shell, run all installers. ``` This will not only install all of your [components](#components), -but it will also install your chosen apps/casks in `osx/install-casks.sh`. +but it will also install your chosen apps/casks in `macos/install-casks.sh`. ### Step 5 @@ -91,38 +93,148 @@ Restart your terminal/shell. ### Topical -Everything is built around topic areas. If you're adding a new area to your +Everything is built around _topic_ areas. If you're adding a new area to your forked _dotfiles_ — say, "Java" — you can simply add a `java` directory and put -files in there. Anything with an extension of `.zsh` will get automatically -included into your shell. Anything with an extension of `.symlink` will get -symlinked without extension into `$HOME` when you run `script/bootstrap`. +files in there. ### Components There are a few special files in the hierarchy. -- **bin/**: Anything in `bin/` will get added to your `$PATH` and be made - available everywhere. -- **topic/\*.zsh**: Any files ending in `.zsh` get loaded into your - environment. -- **topic/path.zsh**: Any file named `path.zsh` is loaded first and is - expected to setup `$PATH` or similar. -- **topic/completion.zsh**: Any file named `completion.zsh` is loaded - last and is expected to setup autocomplete. -- **topic/\*.symlink**: Any files ending in `*.symlink` get symlinked into - your `$HOME`. This is so you can keep all of those versioned in your dotfiles - but still keep those autoloaded files in your home directory. These get - symlinked in when you run `script/bootstrap`. +- **`bin/*`**: Anything in `bin/` will get added to your `$PATH` and be made available everywhere. +- **`functions/*`**: Anything in `functions/` will be sourced, auto-loaded into the shell environment. +- **`/*.sh`**: Any files ending in `.sh` get loaded into Bash and Zsh. +- **`/*.bash`**: Any files ending in `.bash` get loaded into Bash. +- **`/*.zsh`**: Any files ending in `.zsh` get loaded into Zsh. +- **`/path.{,ba,z}sh`**: Any file named `path.sh`, `path.zsh` or `path.bash` is loaded first and is expected to setup `$PATH` or similar. +- **`/completion.{ba,z}sh`**: Any file named `completion.zsh` or `completion.bash` is loaded last and is expected to setup autocomplete. +- **`/*.symlink`**: Any files ending in `*.symlink` get symlinked into the `$HOME` directory (without extension), enabling version control and auto-loading at the same time. These get symlinked in when you run `script/bootstrap` or `install_dotfiles`. ### Updates/Maintenance -`dot` is a simple script that updates dependencies, packages, sets sane OS X +`dot` is a simple script that updates dependencies, packages, sets sane macOS defaults, and so on. Tweak this script, and occasionally run `dot` from time to time to keep your environment fresh and up-to-date. You can find this script in `bin/`. --- +## System Provisioning Features + +### Node.js global dependencies + +- [x] [`cucumber`](https://www.npmjs.com/package/cucumber) +- [ ] [`ember-cli`](https://www.npmjs.com/package/ember-cli) +- [ ] [`gulp`](https://www.npmjs.com/package/gulp) +- [x] [`less`](https://www.npmjs.com/package/less) +- [x] [`serverless`](https://www.npmjs.com/package/serverless) +- [x] [`yo`](https://www.npmjs.com/package/yo) + +### Ruby Gems + +- [x] [`boom`](https://github.com/holman/boom) +- [x] [`jekyll`](https://jekyllrb.com) +- [x] [`rails`](https://rubyonrails.org) +- [x] [`sass`](https://sass-lang.com/) + +### Visual Studio Code Extensions + +_Some extensions are disabled (commented-out in code)._ + +- [x] [Angular Snippets](https://marketplace.visualstudio.com/items?itemName=johnpapa.Angular2) +- [x] [Apache Conf](https://marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-apache) +- [x] [Atom Keymap](https://marketplace.visualstudio.com/items?itemName=ms-vscode.atom-keybindings) +- [x] [Auto Close Tag](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag) +- [x] [Auto Rename Tag](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag) +- [x] [AutoFileName](https://marketplace.visualstudio.com/items?itemName=JerryHong.autofilename) +- [x] [Azure Account](https://marketplace.visualstudio.com/items?itemName=ms-vscode.azure-account) +- [x] [BalanceD Syntax Theme](https://marketplace.visualstudio.com/items?itemName=seantrane.balanced-theme) +- [x] [BATS (Bash Automated Testing System)](https://marketplace.visualstudio.com/items?itemName=jetmartin.bats) +- [x] [Bash IDE](https://marketplace.visualstudio.com/items?itemName=mads-hartmann.bash-ide-vscode) +- [x] [Better Align](https://marketplace.visualstudio.com/items?itemName=chouzz.vscode-better-align) +- [x] [Bootstrap 4, Font awesome 4, Font Awesome 5 Free & Pro snippets](https://marketplace.visualstudio.com/items?itemName=thekalinga.bootstrap4-vscode) +- [x] [Brewfile](https://marketplace.visualstudio.com/items?itemName=sharat.vscode-brewfile) +- [ ] [Bridge to Kubernetes](https://marketplace.visualstudio.com/items?itemName=mindaro.mindaro) +- [x] [Change Case](https://marketplace.visualstudio.com/items?itemName=wmaurer.change-case) +- [x] [chmod](https://marketplace.visualstudio.com/items?itemName=dlech.chmod) +- [x] [Code Runner](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner) +- [x] [Contextual Duplicate](https://marketplace.visualstudio.com/items?itemName=lafe.contextualduplicate) +- [x] [Debugger for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug) +- [x] [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) +- [x] [Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) +- [x] [Document This](https://marketplace.visualstudio.com/items?itemName=oouo-diogo-perdigao.docthis) +- [x] [DotENV](https://marketplace.visualstudio.com/items?itemName=mikestead.dotenv) +- [x] [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) +- [x] [Elixir Support for VS Code](https://marketplace.visualstudio.com/items?itemName=mjmcloug.vscode-elixir) +- [ ] [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) +- [x] [ExpressionEngine](https://marketplace.visualstudio.com/items?itemName=jrrdnx.expressionengine) +- [x] [Extension Pack for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack) +- [x] [File Downloader](https://marketplace.visualstudio.com/items?itemName=mindaro-dev.file-downloader) +- [x] [File Utils](https://marketplace.visualstudio.com/items?itemName=sleistner.vscode-fileutils) +- [x] [Git History](https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory) +- [x] [GitHub Codespaces](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces) +- [x] [gitignore](https://marketplace.visualstudio.com/items?itemName=codezombiech.gitignore) +- [ ] [Go](https://marketplace.visualstudio.com/items?itemName=golang.go) +- [x] [GraphQL for VSCode](https://marketplace.visualstudio.com/items?itemName=kumar-harsh.graphql-for-vscode) +- [x] [HashiCorp Terraform](https://marketplace.visualstudio.com/items?itemName=hashicorp.terraform) +- [x] [i18n Ally](https://marketplace.visualstudio.com/items?itemName=lokalise.i18n-ally) +- [x] [IntelliCode API Usage Examples](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.intellicode-api-usage-examples) +- [x] [IntelliCode](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode) +- [x] [isort](https://marketplace.visualstudio.com/items?itemName=ms-python.isort) +- [x] [Jasmine code snippets](https://marketplace.visualstudio.com/items?itemName=xabikos.JasmineSnippets) +- [x] [JavaScript (ES6) code snippets](https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets) +- [x] [JavaScript Snippet Pack](https://marketplace.visualstudio.com/items?itemName=akamud.vscode-javascript-snippet-pack) +- [x] [Jekyll Syntax Support](https://marketplace.visualstudio.com/items?itemName=ginfuru.ginfuru-vscode-jekyll-syntax) +- [x] [Jest](https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest) +- [ ] [Kubernetes](https://marketplace.visualstudio.com/items?itemName=ms-kubernetes-tools.vscode-kubernetes-tools) +- [x] [Language Support for Java(TM) by Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.java) +- [x] [Lodash Snippets](https://marketplace.visualstudio.com/items?itemName=tomphilbin.lodash-snippets) +- [x] [Markdown Preview Enhanced](https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced) +- [x] [Markdown Preview Github Styling](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-preview-github-styles) +- [x] [Markdown Table Prettifier](https://marketplace.visualstudio.com/items?itemName=darkriszty.markdown-table-prettify) +- [x] [markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint) +- [x] [Material Icon Theme](https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme) +- [x] [Maven for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-maven) +- [x] [Mocha Snippets](https://marketplace.visualstudio.com/items?itemName=Alan.MochaSnippets) +- [x] [New Relic CodeStream](https://marketplace.visualstudio.com/items?itemName=CodeStream.codestream) +- [x] [New Relic One](https://marketplace.visualstudio.com/items?itemName=new-relic.nr1) +- [x] [New Relic Query Language](https://marketplace.visualstudio.com/items?itemName=joelalejandro.nrql-language) +- [x] [npm Intellisense](https://marketplace.visualstudio.com/items?itemName=christian-kohler.npm-intellisense) +- [x] [Output Colorizer](https://marketplace.visualstudio.com/items?itemName=IBM.output-colorizer) +- [x] [Path Intellisense](https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense) +- [x] [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) +- [x] [Project Manager for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-dependency) +- [x] [Pylance](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance) +- [x] [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python) +- [x] [Rainbow CSV](https://marketplace.visualstudio.com/items?itemName=mechatroner.rainbow-csv) +- [x] [RAML](https://marketplace.visualstudio.com/items?itemName=jeppeandersen.raml) +- [x] [React Native Tools](https://marketplace.visualstudio.com/items?itemName=msjsdiag.vscode-react-native) +- [x] [Regex Previewer](https://marketplace.visualstudio.com/items?itemName=chrmarti.regex) +- [x] [REST Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) +- [x] [Rewrap](https://marketplace.visualstudio.com/items?itemName=stkb.rewrap) +- [x] [Ruby LSP](https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp) +- [x] [Sass (.sass only)](https://marketplace.visualstudio.com/items?itemName=Syler.sass-indented) +- [x] [Select Line Status Bar](https://marketplace.visualstudio.com/items?itemName=tomoki1207.selectline-statusbar) +- [x] [Shell Snippets](https://marketplace.visualstudio.com/items?itemName=DeepInThought.vscode-shell-snippets) +- [x] [ShellCheck](https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck) +- [x] [slugify](https://marketplace.visualstudio.com/items?itemName=maximerouiller.slugify-vscode) +- [x] [Snippets and Syntax Highlight for Gherkin (Cucumber)](https://marketplace.visualstudio.com/items?itemName=stevejpurves.cucumber) +- [x] [SonarLint](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarlint-vscode) +- [x] [Sort JSON objects](https://marketplace.visualstudio.com/items?itemName=richie5um2.vscode-sort-json) +- [x] [Sort lines](https://marketplace.visualstudio.com/items?itemName=Tyriar.sort-lines) +- [x] [Terraform doc snippets](https://marketplace.visualstudio.com/items?itemName=run-at-scale.terraform-doc-snippets) +- [x] [Test Runner for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-test) +- [x] [Vetur - Vue tooling for VS Code](https://marketplace.visualstudio.com/items?itemName=octref.vetur) +- [x] [VS Code database](https://marketplace.visualstudio.com/items?itemName=bajdzis.vscode-database) +- [x] [VS DocBlockr](https://marketplace.visualstudio.com/items?itemName=jeremyljackson.vs-docblock) +- [x] [VSCode Ruby](https://marketplace.visualstudio.com/items?itemName=wingrunr21.vscode-ruby) +- [x] [vscode-icons](https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons) +- [x] [XML Tools](https://marketplace.visualstudio.com/items?itemName=DotJoshJohnson.xml) +- [x] [YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) +- [x] [yo](https://marketplace.visualstudio.com/items?itemName=samverschueren.yo) + +--- + ## Thanks Big thanks goes out to [Zach Holman](https://github.com/holman), whose [dotfiles](https://github.com/holman/dotfiles) were so awesome, I had to fork them. Zach forked his from [Ryan Bates](https://github.com/ryanb)' [dotfiles](https://github.com/ryanb/dotfiles). I am grateful for their efforts. Zach wrote [a post on the subject](http://zachholman.com/2010/08/dotfiles-are-meant-to-be-forked/) that I encourage reading. diff --git a/bash/aliases.sh b/bash/aliases.bash similarity index 100% rename from bash/aliases.sh rename to bash/aliases.bash diff --git a/bash/bash_env.symlink b/bash/bash_env.symlink index 099eee0..5245fb8 100644 --- a/bash/bash_env.symlink +++ b/bash/bash_env.symlink @@ -1,6 +1,12 @@ #!/usr/bin/env bash +# _ _ +# | |__ __ _ ___| |__ ___ _ ____ __ +# | '_ \ / _` / __| '_ \ / _ \ '_ \ \ / / +# | |_) | (_| \__ \ | | | | __/ | | \ V / +# |_.__/ \__,_|___/_| |_| \___|_| |_|\_/ +# ========================================= # -# BASH ENV +# Bash Environment configuration file. # # Defines shell scripting environment (non-interactive shell). # diff --git a/bash/bash_login.symlink b/bash/bash_login.symlink index af1258a..4b54835 100644 --- a/bash/bash_login.symlink +++ b/bash/bash_login.symlink @@ -1,20 +1,27 @@ #!/usr/bin/env bash +# _ _ _ _ +# | |__ __ _ ___| |__ | | ___ __ _(_)_ __ +# | '_ \ / _` / __| '_ \ | |/ _ \ / _` | | '_ \ +# | |_) | (_| \__ \ | | | | | (_) | (_| | | | | | +# |_.__/ \__,_|___/_| |_| |_|\___/ \__, |_|_| |_| +# |___/ +# =============================================== # -# BASH LOGIN +# Bash Login configuration file. # # Executes commands at login (after .bashrc). -# +# # Typically, most users will encounter a login shell only if either: # * they logged in from a tty, not through a GUI # * they logged in remotely, such as through ssh. -# -# If the shell was started any other way, such as through GNOME’s gnome-terminal -# or KDE’s konsole, then it is typically not a login shell — the login shell was -# what started GNOME or KDE behind your back when you logged in; things started anew -# are not login shells. New terminals or new screen windows you open are not login +# +# If the shell was started any other way, such as through GNOME’s gnome-terminal +# or KDE’s konsole, then it is typically not a login shell — the login shell was +# what started GNOME or KDE behind your back when you logged in; things started anew +# are not login shells. New terminals or new screen windows you open are not login # shells either. -# (Starting a new window in OS X’s Terminal.app seems to count as a login shell, though.) -# +# (Starting a new window in macOS’s Terminal.app seems to count as a login shell, though.) +# # Put `~/.bash_login` stuff in the Conditional Configuration section of `~/.bashrc`. -# +# # See comments in `~/.bashrc` for detailed summary. diff --git a/bash/bash_profile.symlink b/bash/bash_profile.symlink index 6b2263c..3224733 100644 --- a/bash/bash_profile.symlink +++ b/bash/bash_profile.symlink @@ -1,6 +1,13 @@ #!/usr/bin/env bash +# _ _ __ _ _ +# | |__ __ _ ___| |__ _ __ _ __ ___ / _(_) | ___ +# | '_ \ / _` / __| '_ \ | '_ \| '__/ _ \| |_| | |/ _ \ +# | |_) | (_| \__ \ | | | | |_) | | | (_) | _| | | __/ +# |_.__/ \__,_|___/_| |_| | .__/|_| \___/|_| |_|_|\___| +# |_| +# ====================================================== # -# BASH PROFILE +# Bash Profile configuration file. # # Put stuff in `~/.bashrc`, make `~/.bash_profile` source it. # See comments in `~/.bashrc` for detailed summary. diff --git a/bash/bash_prompt.symlink b/bash/bash_prompt.symlink index 61a9c55..7627a0e 100644 --- a/bash/bash_prompt.symlink +++ b/bash/bash_prompt.symlink @@ -1,4 +1,13 @@ #!/usr/bin/env bash +# _ _ _ +# | |__ __ _ ___| |__ _ __ _ __ ___ _ __ ___ _ __ | |_ +# | '_ \ / _` / __| '_ \ | '_ \| '__/ _ \| '_ ` _ \| '_ \| __| +# | |_) | (_| \__ \ | | | | |_) | | | (_) | | | | | | |_) | |_ +# |_.__/ \__,_|___/_| |_| | .__/|_| \___/|_| |_| |_| .__/ \__| +# |_| |_| +# ============================================================= +# +# Bash Prompt configuration file. # # Bash Prompt # https://ss64.com/bash/syntax-prompt.html @@ -219,9 +228,9 @@ prompt_git () { fi } -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # USER @ HOST (OS-MACH-ARCH): -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- PSUSERHOST="${gray}" # Highlight the user name when logged in as root. @@ -237,9 +246,9 @@ PSUSERHOST+=${HOST:-${HOSTNAME:-$(hostname 2> /dev/null || echo "\h")}} } PSUSERHOST+=" ${dkgray}(${UTYPE:-${OSTYPE:-$(uname 2> /dev/null)}})${reset}" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # PROMPT -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # reduce directories shown in path export PROMPT_DIRTRIM=3 diff --git a/bash/bashrc.symlink b/bash/bashrc.symlink index 7713fd9..ad3a2da 100644 --- a/bash/bashrc.symlink +++ b/bash/bashrc.symlink @@ -1,33 +1,38 @@ #!/usr/bin/env bash +# _ _ +# | |__ __ _ ___| |__ _ __ ___ +# | '_ \ / _` / __| '_ \| '__/ __| +# | |_) | (_| \__ \ | | | | | (__ +# |_.__/ \__,_|___/_| |_|_| \___| +# ================================ # -# BASH RC +# Bash Run Control file. # -# Bash run-control file. # See table below for processing information. # # Bash executes A, then B, then C, etc. # The B1, B2, B3 means it executes only the first of those files found. -# +----------------+-----------+-----------+------+ -# | |Interactive|Interactive|Script| -# | |login |non-login | | -# +----------------+-----------+-----------+------+ -# |/etc/profile | A | | | -# +----------------+-----------+-----------+------+ -# |/etc/bash.bashrc| | A | | -# +----------------+-----------+-----------+------+ -# |~/.bashrc | | B | | -# +----------------+-----------+-----------+------+ -# |~/.bash_profile | B1 | | | -# +----------------+-----------+-----------+------+ -# |~/.bash_login | B2 | | | -# +----------------+-----------+-----------+------+ -# |~/.profile | B3 | | | -# +----------------+-----------+-----------+------+ -# |BASH_ENV | | | A | -# +----------------+-----------+-----------+------+ -# +----------------+-----------+-----------+------+ -# |~/.bash_logout | C | | | -# +----------------+-----------+-----------+------+ +# +-----------------+-----------+-----------+------+ +# | |Interactive|Interactive|Script| +# | |login |non-login | | +# +-----------------+-----------+-----------+------+ +# |/etc/profile | A | | | +# +-----------------+-----------+-----------+------+ +# |/etc/bash.bashrc | | A | | +# +-----------------+-----------+-----------+------+ +# | ~/.bashrc | | B | | +# +-----------------+-----------+-----------+------+ +# | ~/.bash_profile| B1 | | | +# +-----------------+-----------+-----------+------+ +# | ~/.bash_login | B2 | | | +# +-----------------+-----------+-----------+------+ +# | ~/.profile | B3 | | | +# +-----------------+-----------+-----------+------+ +# |BASH_ENV | | | A | +# +-----------------+-----------+-----------+------+ +# +-----------------+-----------+-----------+------+ +# | ~/.bash_logout | C | | | +# +-----------------+-----------+-----------+------+ # # Moral: Put stuff in `~/.bashrc `, make `~/.bash_profile` source it. # @@ -38,40 +43,55 @@ # # shellcheck disable=SC1090,SC1091 -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Load `.env` a.k.a. `~/.dotfiles/shell/env.symlink` -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # This file should be loaded first in all shell environments, # in the following files; `~/.bashrc` and `~/.zshenv` # . ~/.env [[ -f "$HOME/.env" ]] && . "$HOME/.env" +type "find_files" &> /dev/null || . "$DOTFILES/functions/find_files" -######################################################################## -######################################################################## +################################################################################ +################################################################################ ## ## GENERAL CONFIGURATION ## (stuff that you always want executed) ## -######################################################################## -######################################################################## +################################################################################ +################################################################################ + +#------------------------------------------------------------------------------- +# PATH +#------------------------------------------------------------------------------- + +# for file in ~/.dotfiles/{git,system}/path.sh; do +for _file in $(find_files "$DOTFILES" 'path.sh' 2); do . "$_file"; done + +# for file in ~/.dotfiles/{git,system}/path.bash; do +for _file in $(find_files "$DOTFILES" 'path.bash' 2); do . "$_file"; done + +#------------------------------------------------------------------------------- +# Functions +#------------------------------------------------------------------------------- # autoload every function: # for file in ~/.dotfiles/functions/{extract,link_file}; do -_find_files_array=($(find -H "$DOTFILES/functions" -maxdepth 2 -perm -u+r -type f -name '[A-Za-z0-9\-\_]*')) -for _file_path in ${_find_files_array}; do - . "$_file_path" +for _file in $(find_files "$DOTFILES" 'aliases.sh' 2); do . "$_file"; done + +for _file in $(find_files "$DOTFILES/functions" '[A-Za-z0-9\-\_]*' 2); do + . "$_file" done -unset _file_path _find_files_array -######################################################################## +################################################################################ ## THE END: GENERAL CONFIGURATION -######################################################################## +################################################################################ -######################################################################## -######################################################################## +################################################################################ +################################################################################ ## ## 1. SCRIPT / NON-INTERACTIVE / .bash_env ## @@ -80,15 +100,15 @@ unset _file_path _find_files_array ## Bash scripts typically would not process this file, ## so this section can be ignored unless required. ## -######################################################################## +################################################################################ if [[ -z "$PS1" ]]; then : ###################################################################### # echo "$SHELL" -######################################################################## -######################################################################## +################################################################################ +################################################################################ ## ## 2. INTERACTIVE / PROMPT / .bashrc ## @@ -96,36 +116,32 @@ if [[ -z "$PS1" ]]; then ## If you have a command-prompt, this conditional was met. ## Put stuff here for prompt-based users only. ## -######################################################################## +################################################################################ else : ###################################################################### # echo "$SHELL::interactive" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # USER/MACHINE/SHELL PROFILE -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- + [[ -f "$DOTFILES/bash/.shell_profile.sh" ]] && . "$DOTFILES/bash/.shell_profile.sh" +#------------------------------------------------------------------------------- +# HOMEBREW INIT +#------------------------------------------------------------------------------- -#----------------------------------------------------------------------- -# HOMEBREW PATH -#----------------------------------------------------------------------- -BREW_PREFIX="" -if type "brew" &> /dev/null; then - eval "$(/opt/homebrew/bin/brew shellenv)" - BREW_PREFIX="$(brew --prefix)" - [[ ! -d "$BREW_PREFIX" ]] && BREW_PREFIX="" -fi +[[ -f "$DOTFILES/brew/init.sh" ]] && . "$DOTFILES/brew/init.sh" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # RUN-CONTROLS -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # GRC colorizes nifty unix tools all over the place if type "grc" &> /dev/null; then # Homebrew GRC: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/grc.rb - if [[ -n "${BREW_PREFIX}" ]] && [[ -f "${BREW_PREFIX}/etc/grc.bashrc" ]]; then - . "${BREW_PREFIX}/etc/grc.bashrc" + if [[ -n "${HOMEBREW_PREFIX}" ]] && [[ -f "${HOMEBREW_PREFIX}/etc/grc.bashrc" ]]; then + . "${HOMEBREW_PREFIX}/etc/grc.bashrc" elif [[ -f "/etc/grc.bashrc" ]]; then . "/etc/grc.bashrc" fi @@ -136,40 +152,30 @@ fi # you'll have access to them in your scripts. [[ -f "$HOME/.localrc" ]] && . "$HOME/.localrc" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # PROMPT OPTIONS -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # `~/.bash_prompt` can be used for custom prompt configuration. [[ -f "$HOME/.bash_prompt" ]] && . "$HOME/.bash_prompt" - -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # ALIASES -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Aliases should only be available to prompt-user (not scripts). # for file in ~/.dotfiles/{git,system}/aliases.sh; do -_find_files_array=($(find -H "$DOTFILES" -maxdepth 2 -perm -u+r -type f -name 'aliases.sh')) -for _file_path in ${_find_files_array}; do - . "$_file_path" -done -unset _file_path _find_files_array +for _file in $(find_files "$DOTFILES" 'aliases.sh' 2); do . "$_file"; done # for file in ~/.dotfiles/{git,system}/aliases.bash; do -_find_files_array=($(find -H "$DOTFILES" -maxdepth 2 -perm -u+r -type f -name 'aliases.bash')) -for _file_path in ${_find_files_array}; do - . "$_file_path" -done -unset _file_path _find_files_array +for _file in $(find_files "$DOTFILES" 'aliases.bash' 2); do . "$_file"; done # `~/.aliases` can be used for private aliases. [[ -f "$HOME/.aliases" ]] && . "$HOME/.aliases" - -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # BASH OPTIONS -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Case-insensitive globbing (used in pathname expansion) shopt -s nocaseglob; @@ -187,9 +193,9 @@ for option in autocd globstar; do shopt -s "$option" 2> /dev/null done -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # TAB COMPLETION -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Only if Bash-version is >= 4 if [[ ${BASH_VERSION%%[^0-9]*} -ge 4 ]]; then @@ -197,21 +203,17 @@ if [[ ${BASH_VERSION%%[^0-9]*} -ge 4 ]]; then # Add tab completion for many Bash commands # Thanks to @tmoitie, adds more tab completion for bash, # also when hitting tab twice it will show a list. - if [[ -n "${BREW_PREFIX}" ]] && [[ -f "${BREW_PREFIX}/share/bash-completion/bash_completion" ]]; then - . "${BREW_PREFIX}/share/bash-completion/bash_completion" - elif [[ -n "${BREW_PREFIX}" ]] && [[ -f "${BREW_PREFIX}/share/bash-completion" ]]; then - . "${BREW_PREFIX}/share/bash-completion" + if [[ -n "${HOMEBREW_PREFIX}" ]] && [[ -f "${HOMEBREW_PREFIX}/share/bash-completion/bash_completion" ]]; then + . "${HOMEBREW_PREFIX}/share/bash-completion/bash_completion" + elif [[ -n "${HOMEBREW_PREFIX}" ]] && [[ -f "${HOMEBREW_PREFIX}/share/bash-completion" ]]; then + . "${HOMEBREW_PREFIX}/share/bash-completion" elif [[ -f "/etc/bash_completion" ]]; then . "/etc/bash_completion" fi # load every completion after autocomplete loads: # for file in ~/.dotfiles/{git,system}/completion.bash; do - _find_files_array=($(find -H "$DOTFILES" -maxdepth 2 -perm -u+r -type f -name 'completion.bash')) - for _file_path in ${_find_files_array}; do - . "$_file_path" - done - unset _file_path _find_files_array + for _file in $(find_files "$DOTFILES" 'completion.bash' 2); do . "$_file"; done fi @@ -222,32 +224,27 @@ fi # that matches ALL of the regexes given on the command line, in order. if [[ -f "$HOME/z/z.sh" ]]; then . "$HOME/z/z.sh" -elif [[ -n "${BREW_PREFIX}" ]] && [[ -f "${BREW_PREFIX}/etc/profile.d/z.sh" ]]; then - . "${BREW_PREFIX}/etc/profile.d/z.sh" +elif [[ -n "${HOMEBREW_PREFIX}" ]] && [[ -f "${HOMEBREW_PREFIX}/etc/profile.d/z.sh" ]]; then + . "${HOMEBREW_PREFIX}/etc/profile.d/z.sh" fi -#----------------------------------------------------------------------- -# Travis CI -#----------------------------------------------------------------------- -[[ -f "$HOME/.travis/travis.sh" ]] && . "$HOME/.travis/travis.sh" - -######################################################################## -######################################################################## +################################################################################ +################################################################################ ## ## 3. LOGIN / .bash_profile / .bash_login ## ## This is executed only when it is a login shell. ## Put your `~/.bash_profile` and `~/.bash_login` stuff here. ## -######################################################################## +################################################################################ if shopt -q login_shell ; then -: ###################################################################### +: ############################################################################## # echo "$SHELL::interactive-login" -######################################################################## -######################################################################## +################################################################################ +################################################################################ ## ## 4. NON-LOGIN / .bash_profile ## @@ -256,17 +253,17 @@ if shopt -q login_shell ; then ## That means this can be ignored unless considerations ## are required for NON-LOGIN USERS ONLY. ## -######################################################################## +################################################################################ else -: ###################################################################### +: ############################################################################## # echo "$SHELL::interactive-nonlogin" -######################################################################## -fi ##################################################################### +################################################################################ +fi ############################################################################# ## ## THE END: CONDITIONAL CONFIGURATION ## -fi ##################################################################### -######################################################################## +fi ############################################################################# +################################################################################ diff --git a/bash/install.sh b/bash/install.sh deleted file mode 100755 index 6aeb999..0000000 --- a/bash/install.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# -# Install Bash 4 -# -# This installs Bash and common extensions using Homebrew. -# Note: don’t forget to add `/opt/homebrew/bin/bash` to `/etc/shells` before -# running `chsh`. -# -# shellcheck disable=SC1090,SC1091 - -# Shell Support -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -sh_info "Installing/updating Bash + bash-completions..." -if type "brew" &> /dev/null; then - sh_info "Installing Bash..." - brew install bash bash-completion2 - # Add the new shell to the list of allowed shells - if [[ -e "$(brew --prefix)/bin/bash" ]]; then - sh_info "Adding Bash to your allowed shells (/etc/shells)..." - if type "tee" &> /dev/null; then - sudo tee -a /etc/shells <<<"$(brew --prefix)/bin/bash" - else - sudo bash -c 'echo "$(brew --prefix)/bin/bash" >> /etc/shells' - fi - fi -elif type "apt-get" &> /dev/null; then - sudo apt-get -y install bash bash-completion2 -elif type "yum" &> /dev/null; then - sudo yum install bash bash-completion2 -fi - -if type "bash" &> /dev/null; then - sh_success "$(bash --version) installed: $(command -v bash)" -fi diff --git a/bin/dot b/bin/dot index 5391797..f453e91 100755 --- a/bin/dot +++ b/bin/dot @@ -9,9 +9,9 @@ # shellcheck disable=SC1090 . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # OS-specific Updates -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- if [[ "$OSTYPE" == "linux-gnu" ]]; then @@ -39,37 +39,37 @@ elif [[ "$OSTYPE" == "darwin"* ]]; then : # Mac OS - # OS X Software Update + # macOS Software Update action= - sh_user "Do you want to run OS X Software Update? ${Underline:-}y${Reset:-}es / ${Underline:-}n${Reset:-}o" + sh_user "Do you want to run macOS Software Update? ${Underline:-}y${Reset:-}es / ${Underline:-}n${Reset:-}o" read -r -n 1 action case "$action" in y ) - sh_info "Running OS X Software Update..." + sh_info "Running macOS Software Update..." sudo softwareupdate -i -a ;; * ) - sh_info "Skipping OS X Software Update." + sh_info "Skipping macOS Software Update." ;; esac # (Re)Set defaults action= - sh_user "Do you want to overwrite OS X defaults? ${Underline:-}y${Reset:-}es / ${Underline:-}n${Reset:-}o" + sh_user "Do you want to overwrite macOS defaults? ${Underline:-}y${Reset:-}es / ${Underline:-}n${Reset:-}o" read -r -n 1 action case "$action" in y ) - sh_info "Overwriting OS X defaults..." + sh_info "Overwriting macOS defaults..." # shellcheck disable=SC1090 - . "$DOTFILES/osx/set-defaults.sh" + . "$DOTFILES/macos/set-defaults.sh" ;; * ) - sh_info "Skipping OS X defaults." + sh_info "Skipping macOS defaults." ;; esac - # TODO: Copy OS X app prefs for backup/reinstall purposes. - # source $DOTFILES/osx/copy-prefs.sh + # TODO: Copy macOS app prefs for backup/reinstall purposes. + # source $DOTFILES/macos/copy-prefs.sh # Homebrew updates if type "brew" &> /dev/null; then @@ -101,9 +101,9 @@ else fi -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Software/Package Updates -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # RVM updates if type "rvm" &> /dev/null; then diff --git a/bin/set-defaults b/bin/set-defaults index 2a9da1f..4ea1c42 100755 --- a/bin/set-defaults +++ b/bin/set-defaults @@ -1,5 +1,5 @@ #!/usr/bin/env bash # -# Sets OS X defaults by running $DOTFILES/osx/set-defaults.sh. +# Sets macOS defaults by running $DOTFILES/macos/set-defaults.sh. -[[ -s "$DOTFILES/osx/set-defaults.sh" ]] && exec $DOTFILES/osx/set-defaults.sh +[[ -s "$DOTFILES/macos/set-defaults.sh" ]] && exec $DOTFILES/macos/set-defaults.sh diff --git a/boom/completion.bash b/boom/completion.bash deleted file mode 100644 index a43826f..0000000 --- a/boom/completion.bash +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -# -# compdef boom -# http://zachholman.com/boom - -if type "boom" &> /dev/null; then - - _boom_complete() { - local cur prev lists curr_list items - COMPREPLY=() - cur="${COMP_WORDS[COMP_CWORD]}" - prev="${COMP_WORDS[COMP_CWORD-1]}" - curr_list=$(eval echo "$prev") - local IFS=$'\n' - - if [ "$COMP_CWORD" -eq 1 ]; then - lists=$(boom | sed 's/^ \(.*\) ([0-9]\{1,\})$/\1/') - # shellcheck disable=SC2207 - COMPREPLY=( $( compgen -W "${lists}" -- "${cur}" ) ) - elif [ "$COMP_CWORD" -eq 2 ]; then - items=$(boom "$curr_list" | sed 's/^ \(.\{0,16\}\):.*$/\1/') - # shellcheck disable=SC2207 - COMPREPLY=( $( compgen -W "${items}" -- "${cur}" ) ) - fi - } - complete -o filenames -F _boom_complete boom - -fi diff --git a/boom/completion.zsh.bak b/boom/completion.zsh.bak deleted file mode 100755 index e30413b..0000000 --- a/boom/completion.zsh.bak +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -# -# compdef boom -# http://zachholman.com/boom - -if type "boom" &> /dev/null; then - - _arguments -C '1: :->cmds' '*: :->args' - - case ${state:-} in - cmds) - local -a cmds - cmds=( - "all:show all items in all lists" - "edit:edit the boom JSON file in $EDITOR" - "help:help text" - ) - _describe -t commands 'boom command' cmds - _values 'lists' "$(boom | awk '{print $1}')" - ;; - args) - case ${line[1]} in - (boom|all|edit|help) - ;; - *) - _values 'items' "$(boom "${line[1]}" | awk '{print $1}' | sed -e 's/://')" 2>/dev/null - ;; - esac - ;; - esac - - return - -fi diff --git a/boom/install.sh b/boom/install.sh deleted file mode 100755 index 78b7353..0000000 --- a/boom/install.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -# -# Install Boom -# -# boom manages your text snippets on your command line. -# You can stash away text like URLs, canned responses, and -# important notes and then quickly copy them onto your clipboard, ready for pasting. -# http://zachholman.com/boom -# https://github.com/holman/boom - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "boom" &> /dev/null; then - - # Ensure Ruby is installed and `gem` command is available. - ! type "gem" &> /dev/null && . "$DOTFILES/ruby/install.sh" - - if type "gem" &> /dev/null; then - . "$DOTFILES/ruby/gem-update.sh" - sh_info "Installing Boom..." - gem install boom - fi - - . "$DOTFILES/ruby/rehash.sh" -fi - -if type "boom" &> /dev/null; then - sh_success "$(boom --version) installed: $(command -v boom)\n" - gem which boom - echo -fi diff --git a/brew/aliases.zsh b/brew/aliases.zsh deleted file mode 100755 index e32a1fc..0000000 --- a/brew/aliases.zsh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -# -# Homebrew aliases - -# Homebrew updates/upgrades -alias brew_update="brew update; brew upgrade; brew cleanup" diff --git a/brew/init.sh b/brew/init.sh new file mode 100755 index 0000000..4ab804c --- /dev/null +++ b/brew/init.sh @@ -0,0 +1,36 @@ +# shellcheck shell=bash +# +# Installation of Homebrew will be added to: PATH, MANPATH, INFOPATH. +# Variables exported: HOMEBREW_PREFIX, HOMEBREW_CELLAR, HOMEBREW_REPOSITORY. + +# Use default init method provided by Homebrew. +if type "brew" &> /dev/null; then + eval "$(brew shellenv)" +else + # Set HOMEBREW_PREFIX, if unavailable. + if [[ -z "${HOMEBREW_PREFIX:-}" ]]; then + if [[ "$OSTYPE" == "darwin"* ]]; then + if [[ "$(sysctl -n machdep.cpu.brand_string)" =~ "Apple" ]]; then + # Apple Silicon has different Homebrew directory. + HOMEBREW_PREFIX="/opt/homebrew" + else + # Default for Apple Intel. + HOMEBREW_PREFIX="/usr/local" + fi + else + # Default for Linux. + HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew" + fi + fi + export HOMEBREW_PREFIX + + # Add Homebrew to PATH. + [[ -d "${HOMEBREW_PREFIX:-}" ]] && export PATH="${HOMEBREW_PREFIX:-}/bin:$PATH" + + # Try again to use default init method provided by Homebrew. + if type "brew" &> /dev/null; then + eval "$(brew shellenv)" + else + echo "[ERROR] Unable to find/load Homebrew. Please install." + fi +fi diff --git a/brew/init_install.sh b/brew/init_install.sh new file mode 100755 index 0000000..0ea93c7 --- /dev/null +++ b/brew/init_install.sh @@ -0,0 +1,179 @@ +#!/usr/bin/env bash +# +# init or install homebrew +# +# @see: https://brew.sh/ +# @see: https://docs.brew.sh/Installation +# @see: https://docs.brew.sh/Homebrew-on-Linux +# +# Installation of Homebrew will be added to: PATH, MANPATH, INFOPATH. +# Variables exported: HOMEBREW_PREFIX, HOMEBREW_CELLAR, HOMEBREW_REPOSITORY. + +#------------------------------------------------------------------------------- +# Shell Support +#------------------------------------------------------------------------------- + +# shellcheck disable=SC1091 +[[ -z "$SHELLSUPPORT" ]] && \ +. "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" + +#------------------------------------------------------------------------------- +# CONSTANTS +#------------------------------------------------------------------------------- + +_DOT_HOMEBREW_INSTALL="${_DOT_HOMEBREW_INSTALL:-}" + +#------------------------------------------------------------------------------- +# FUNCTIONS +#------------------------------------------------------------------------------- + +_init_homebrew () { + if type "brew" &> /dev/null; then + eval "$(brew shellenv)" + else + _set_homebrew_prefix + [[ -x "${HOMEBREW_PREFIX:-}/bin/brew" ]] && \ + eval "$("$HOMEBREW_PREFIX"/bin/brew shellenv)" + if ! type "brew" &> /dev/null; then + sh_error "Unable to find/load Homebrew. Please install." + fi + fi +} + +_init_or_install_homebrew () { + if ! type "brew" &> /dev/null; then + if [[ -n "$_DOT_HOMEBREW_INSTALL" ]]; then + _install_homebrew + else + sh_yesno 'Would you like to install Homebrew?' + read -r -e _answer + [[ "$_answer" == "y"* ]] && _install_homebrew + fi + fi + _init_homebrew +} + +_install_command_line_tools () { + if [[ "$OSTYPE" == "darwin"* ]]; then + if type "xcode-select" &> /dev/null; then + sh_info "Installing Xcode Command Line Tools..." + xcode-select --install + else + sh_error "'xcode-select' command not found." + sh_fail "Please install Xcode and Command Line Tools." + fi + fi +} + +_install_homebrew () { + # Bypass if Homebrew is already installed. + type "brew" &> /dev/null && return 0 + # Install macOS dependencies. + if [[ "$OSTYPE" == "darwin"* ]]; then + sh_note 'Homebrew requires Xcode Command Line Tools.' + _install_command_line_tools + if [[ ! "$XCODE_PATH" ]]; then + sh_fail 'Homebrew requires Xcode Command Line Tools.' + fi + elif [[ "$OSTYPE" == "linux-gnu" ]]; then + _install_linuxbrew_deps + fi + sh_info "Installing Homebrew..." + _brew_dist='https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh' + if /bin/bash -c "$(curl -fsSL "$_brew_dist")"; then + _init_homebrew + sh_success 'Homebrew installed successfully.' + else + sh_error 'Supported install of Homebrew was not successful.' + sh_note 'Attempting a manual install of Homebrew.' + _install_homebrew_unsupported + fi +} + +_install_homebrew_unsupported () { + _set_homebrew_prefix + mkdir -p "$HOMEBREW_PREFIX" || \ + sh_fail "Failed to create homebrew directory: $HOMEBREW_PREFIX" + _brew_dist='https://github.com/Homebrew/homebrew/tarball/master' + curl -L "$_brew_dist" | tar xz --strip 1 -C "$HOMEBREW_PREFIX" + test -e "$HOMEBREW_PREFIX/bin/brew" || \ + sh_fail "Failed to locate homebrew binary: $HOMEBREW_PREFIX/bin/brew" + eval "$("$HOMEBREW_PREFIX"/bin/brew shellenv)" + brew update --force --quiet + chmod -R go-w "$(brew --prefix)/share/zsh" +} + +# Install Linuxbrew dependencies. +# @see https://github.com/Linuxbrew/linuxbrew#dependencies +_install_linuxbrew_deps () { + if [[ "$OSTYPE" == "linux-gnu" ]]; then + if type "apt-get" &> /dev/null; then + sh_info "Installing Homebrew dependencies for Debian, Ubuntu." + sudo apt-get install \ + build-essential \ + curl \ + git \ + m4 \ + python-setuptools \ + ruby \ + texinfo \ + libbz2-dev \ + libcurl4-openssl-dev \ + libexpat-dev \ + libncurses-dev \ + zlib1g-dev \ + ; + elif type "yum" &> /dev/null; then + sh_info "Installing Homebrew dependencies for Fedora, CentOS, Red Hat." + sudo yum groupinstall 'Development Tools' && sudo yum install \ + curl \ + git \ + irb \ + m4 \ + python-setuptools \ + ruby \ + texinfo \ + bzip2-devel \ + curl-devel \ + expat-devel \ + ncurses-devel \ + zlib-devel \ + ; + fi + fi +} + +# shellcheck disable=SC2120 +_set_homebrew_prefix () { + HOMEBREW_PREFIX="${1:-${HOMEBREW_PREFIX:-}}" + if [[ -z "$HOMEBREW_PREFIX" ]]; then + if [[ "$OSTYPE" == "darwin"* ]]; then + # macOS Intel + HOMEBREW_PREFIX="/usr/local" + [[ "$(sysctl -n machdep.cpu.brand_string)" =~ "Apple" ]] && \ + # Apple Silicon + HOMEBREW_PREFIX="/opt/homebrew" + elif [[ "$OSTYPE" == "linux-gnu" ]]; then + # Linux + HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew" + fi + fi + [[ -n "$HOMEBREW_PREFIX" ]] && export HOMEBREW_PREFIX +} + +#------------------------------------------------------------------------------- +# EXPORTS +#------------------------------------------------------------------------------- + +# main () { +# _init_or_install_homebrew +# } +# main "$@" # Uncomment to enable executable. + +export \ + _init_homebrew \ + _init_or_install_homebrew \ + _install_homebrew \ + _install_homebrew_unsupported \ + _set_homebrew_prefix \ + ; diff --git a/brew/install.sh b/brew/install.sh index 65123c9..d117a69 100755 --- a/brew/install.sh +++ b/brew/install.sh @@ -35,7 +35,7 @@ if ! type "brew" &> /dev/null; then # test "$(uname)" = "Darwin" elif [[ "$OSTYPE" == "darwin"* ]]; then # Homebrew requires Xcode Command Line Tools - . "$DOTFILES/osx/install-clt.sh" + . "$DOTFILES/macos/install-clt.sh" if [[ ! "$XCODE_PATH" ]]; then sh_fail "Homebrew requires Xcode Command Line Tools." fi @@ -56,7 +56,7 @@ if type "brew" &> /dev/null; then # Setup taps. sh_info "Setting up Homebrew taps..." brew tap homebrew/bundle - # CASKROOM for OS X + # CASKROOM for macOS if [[ "$OSTYPE" == "darwin"* ]]; then brew tap homebrew/cask-fonts brew tap homebrew/cask-versions diff --git a/brew/path.zsh b/brew/path.zsh deleted file mode 100755 index 43378ce..0000000 --- a/brew/path.zsh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -# Add Linuxbrew PATHs (to your .bashrc or .zshrc): -if [[ -d "$HOME/.linuxbrew" ]]; then - export PATH="$HOME/.linuxbrew/bin:$PATH" - export MANPATH="$HOME/.linuxbrew/share/man:$MANPATH" - export INFOPATH="$HOME/.linuxbrew/share/info:$INFOPATH" -fi - -export PATH="/opt/homebrew/bin:$PATH" diff --git a/composer/install.sh b/composer/install.sh deleted file mode 100755 index 37edae0..0000000 --- a/composer/install.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# -# Install Composer. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "composer" &> /dev/null; then - sh_info "Installing Composer..." - curl -sS https://getcomposer.org/installer | php - # mkdir:/usr/local/bin, if it does not exist yet - # using sudo to bypass any issues - sudo mkdir /usr - sudo mkdir /usr/local - sudo mkdir /usr/local/bin - sudo mv composer.phar /usr/local/bin/composer -else - sh_info "Updating Composer..." - composer self-update -fi - -if type "composer" &> /dev/null; then - sh_success "$(composer --version) installed: $(command -v composer)" -fi diff --git a/composer/path.zsh b/composer/path.zsh deleted file mode 100755 index df75f81..0000000 --- a/composer/path.zsh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -# Composer support: -if [[ -d "$HOME/.composer/vendor/bin" ]]; then - export PATH="$HOME/.composer/vendor/bin:$PATH" -fi diff --git a/cucumber/install.sh b/cucumber/install.sh deleted file mode 100755 index c792e81..0000000 --- a/cucumber/install.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -# -# Install Cucumber -# https://cucumber.io/ - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "cucumber" &> /dev/null; then - ! type "npm" &> /dev/null && . "$DOTFILES/node/install.sh" - sh_info "Installing Cucumber..." - npm install -g cucumber -fi - -if type "cucumber" &> /dev/null; then - sh_success "Cucumber $(npm info cucumber version) installed: $(command -v cucumber)\n" - npm list -g cucumber - echo -fi diff --git a/docker/aliases.zsh b/docker/aliases.zsh deleted file mode 100755 index 169624e..0000000 --- a/docker/aliases.zsh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -#----------------------------------------------------------------------- -# Docker Machine -# https://docs.docker.com/machine/get-started/#create-a-machine -#----------------------------------------------------------------------- - - -#----------------------------------------------------------------------- -# Docker Compose -#----------------------------------------------------------------------- - -alias dockerc="docker-compose" -alias dkrup="docker-compose stop < /dev/null 2> /dev/null; docker-compose up --build" -alias dkrstop="docker-compose stop < /dev/null 2> /dev/null" -alias dkroff="docker ps; docker-compose stop < /dev/null 2> /dev/null; docker rm -f \"$(docker ps -a -q < /dev/null 2> /dev/null)\" < /dev/null 2> /dev/null; docker ps -a" -alias dkr0="docker images; docker-compose stop < /dev/null 2> /dev/null; docker rmi -f \"$(docker images -a -q < /dev/null 2> /dev/null)\" < /dev/null 2> /dev/null; docker images" diff --git a/elixir/install.sh b/elixir/install.sh deleted file mode 100755 index 937e954..0000000 --- a/elixir/install.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -# -# Install Elixir/Erlang - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "elixir" &> /dev/null; then - sh_info "Installing Elixir/Erlang..." - if type "brew" &> /dev/null; then - brew install elixir - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install elixir - elif type "yum" &> /dev/null; then - sudo yum install elixir - fi -fi - -if type "elixir" &> /dev/null; then - sh_success "$(elixir --version) installed: $(command -v elixir)" -fi diff --git a/elixir/path.zsh b/elixir/path.zsh deleted file mode 100755 index dd4c36d..0000000 --- a/elixir/path.zsh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -if type "elixir" &> /dev/null; then - export MANPATH="$(brew --prefix erlang)/lib/erlang/man:$MANPATH" -fi diff --git a/ember/install.sh b/ember/install.sh deleted file mode 100755 index 5543c80..0000000 --- a/ember/install.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -# -# Install Ember - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "ember" &> /dev/null; then - ! type "npm" &> /dev/null && . "$DOTFILES/node/install.sh" - sh_info "Installing Ember..." - npm install -g ember-cli -fi - -if type "ember" &> /dev/null; then - sh_success "Ember $(npm info ember version) installed: $(command -v ember)\n" - npm list -g ember-cli - echo -fi diff --git a/functions/extract b/functions/extract index 55add03..4366004 100755 --- a/functions/extract +++ b/functions/extract @@ -2,7 +2,7 @@ # # Usage: extract # Description: extracts archived files / mounts disk images -# Note: .dmg/hdiutil is Mac OS X-specific. +# Note: .dmg/hdiutil is Mac macOS-specific. # credit: http://nparikh.org/notes/zshrc.txt extract () { diff --git a/functions/find_files b/functions/find_files new file mode 100755 index 0000000..e6ed5a4 --- /dev/null +++ b/functions/find_files @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# +# Find Files +# A wrapper function for 'find' +# +# Examples: +# find_files ./directory/path '*.sh' + +find_files () { + local _find_path="${1:-}" + local _find_artifact="${2:-}" + local _find_depth="${3:-1}" + local _find_type="${4:-f}" + local _find_files_array=() + # Fail-fast + [[ ! -d "$_find_path" ]] && return + [[ -z "$_find_artifact" ]] && return + # Set IFS for proper word/path splitting + local _save_IFS=$IFS # Backup default IFS: $' \t\n' + IFS=$'\n' + # shellcheck disable=SC2207 + _find_files_array=($(find -H "$_find_path" -maxdepth "$_find_depth" -perm -u+r -type "$_find_type" -name "$_find_artifact")) + IFS=$_save_IFS + echo "${_find_files_array[@]}" +} diff --git a/functions/install_dotfiles b/functions/install_dotfiles index 6bbe4af..a0a6f38 100755 --- a/functions/install_dotfiles +++ b/functions/install_dotfiles @@ -4,77 +4,78 @@ # example; link_file ~/.bashrc ~/.dotfiles/bash/bashrc.symlink install_dotfiles () { - DOTFILEDIR=$( cd "$HOME/.dotfiles" && pwd ) - printf "\033[2K\r\n [\033[0;34m .. \033[0m] Installing ~/.dotfiles \n" + DOTFILEDIR=$( cd "$HOME/.dotfiles" && pwd ) + printf "\033[2K\r\n [\033[0;34m .. \033[0m] Installing ~/.dotfiles \n" - local overwrite_all=false backup_all=false skip=false skip_all=false - local action= + local overwrite_all=false backup_all=false skip=false skip_all=false + local action= - # for file in ~/.dotfiles/{bash,zsh}/{bashrc,zshrc}.symlink; do - for src in $(find -H "$DOTFILEDIR" -maxdepth 2 -name "*.symlink" -not -path "*.git*"); do - destination="$HOME/.$(basename "${src%.*}")" - printf "\033[2K\r\n [\033[0;34m .. \033[0m] Attempting to link ${destination} to ${src} \n" - # echo "Attempting to link $src to $destination" - # $DOTFILEDIR/functions/link_file "$src" "$destination" + # for file in ~/.dotfiles/{bash,zsh}/{bashrc,zshrc}.symlink; do + # shellcheck disable=SC2207 + local _find_files_array=($(find -H "$DOTFILEDIR" -maxdepth 2 -name "*.symlink")) + for _source in "${_find_files_array[@]}"; do + _alias="$HOME/.$(basename "${_source%.*}")" + printf "\033[2K\r\n [\033[0;34m .. \033[0m] Attempting to link %s to %s \n" "$_alias" "$_source" + # $DOTFILEDIR/functions/link_file "$_source" "$_alias" - if [ -f "$destination" -o -d "$destination" -o -L "$destination" ]; then + if [ -f "$_alias" ] || [ -d "$_alias" ] || [ "$_alias" ]; then - if [ "$overwrite_all" == "false" ] && [ "$backup_all" == "false" ] && [ "$skip_all" == "false" ]; then + if [ "$overwrite_all" == "false" ] && [ "$backup_all" == "false" ] && [ "$skip_all" == "false" ]; then - # local currentSrc="$(readlink $destination)" + current_source="$(readlink "$_alias")" - # if [ "$currentSrc" == "$src" ]; then - # printf "\033[2K\r\n [\033[0;36m ** \033[0m] \033[0;36m Link/file already exists: $destination \033[0m \n" - # skip=true; - # else - printf "\033[2K\r\n [\033[0;33m ?? \033[0m] File already exists: $destination ($(basename "$src")), what do you want to do?\n\ - [s]kip, [S]kip all, [o]verwrite, [O]verwrite all, [b]ackup, [B]ackup all? \n" - read -r -n 1 action + if [ "$current_source" == "$_source" ]; then + printf "\033[2K\r\n [\033[0;36m ** \033[0m] \033[0;36m Link/file already exists: %s \033[0m \n" "$_alias" + skip=true; + else + printf "\033[2K\r\n [\033[0;33m ?? \033[0m] File already exists: %s (%s), what do you want to do?\n\ + [s]kip, [S]kip all, [o]verwrite, [O]verwrite all, [b]ackup, [B]ackup all? \n" "$_alias" "$(basename "$_source")" + read -r -n 1 action - case "$action" in - o ) - overwrite=true;; - O ) - overwrite_all=true;; - b ) - backup=true;; - B ) - backup_all=true;; - s ) - skip=true;; - S ) - skip_all=true;; - * ) - ;; - esac - # fi - fi - - overwrite=${overwrite:-$overwrite_all} - backup=${backup:-$backup_all} - skip=${skip:-$skip_all} + case "$action" in + o ) + overwrite=true;; + O ) + overwrite_all=true;; + b ) + backup=true;; + B ) + backup_all=true;; + s ) + skip=true;; + S ) + skip_all=true;; + * ) + ;; + esac + fi + fi - if [ "$overwrite" == "true" ]; then - rm -rf "$destination" - printf "\033[2K\r\n [\033[0;32m OK \033[0m] \033[0;32m Removed $destination \033[0m \n" - fi + overwrite=${overwrite:-$overwrite_all} + backup=${backup:-$backup_all} + skip=${skip:-$skip_all} - if [ "$backup" == "true" ]; then - mv "$destination" "${destination}.backup" - printf "\033[2K\r\n [\033[0;32m OK \033[0m] \033[0;32m Moved $destination to ${destination}.backup \033[0m \n" - fi + if [ "$overwrite" == "true" ]; then + rm -rf "$_alias" + printf "\033[2K\r\n [\033[0;32m OK \033[0m] \033[0;32m Removed %s \033[0m \n" "$_alias" + fi - if [ "$skip" == "true" ]; then - printf "\033[2K\r\n [\033[0;32m OK \033[0m] \033[0;32m Skipped $src \033[0m \n" - fi - fi + if [ "$backup" == "true" ]; then + mv "$_alias" "${_alias}.backup" + printf "\033[2K\r\n [\033[0;32m OK \033[0m] \033[0;32m Moved %s to %s.backup \033[0m \n" "$_alias" "$_alias" + fi - # "false" or empty - if [ "$skip" != "true" ]; then - ln -s "$src" "$destination" - printf "\033[2K\r\n [\033[0;32m OK \033[0m] \033[0;32m Linked $destination to $src \033[0m \n" - fi + if [ "$skip" == "true" ]; then + printf "\033[2K\r\n [\033[0;32m OK \033[0m] \033[0;32m Skipped %s \033[0m \n" "$_source" + fi + fi + # "false" or empty + if [ "$skip" != "true" ]; then + ln -s "$_source" "$_alias" + printf "\033[2K\r\n [\033[0;32m OK \033[0m] \033[0;32m Linked %s to %s \033[0m \n" "$_alias" "$_source" + fi - done + done + unset _source _find_files_array } diff --git a/functions/rsyncit b/functions/rsyncit index ab23cba..5eb5097 100755 --- a/functions/rsyncit +++ b/functions/rsyncit @@ -158,6 +158,3 @@ rsyncit () { rsync -au --progress --stats "${FLAGS[@]}" "$2" "$3" fi } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx rsyncit diff --git a/functions/sh_alert b/functions/sh_alert index cb246fc..8402756 100755 --- a/functions/sh_alert +++ b/functions/sh_alert @@ -6,6 +6,3 @@ sh_alert () { # shellcheck disable=SC2059 printf "${ClearNewLine:-} [${Yellow:-} !! ${Reset:-}] ${Yellow:-}${1:-}${Reset:-} \\n" } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_alert diff --git a/functions/sh_code b/functions/sh_code index f104198..77bdef1 100755 --- a/functions/sh_code +++ b/functions/sh_code @@ -6,6 +6,3 @@ sh_code () { # shellcheck disable=SC2059 printf "${ClearNewLine:-}${Dim:-}${1:-}${Reset:-} \\n" } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_code diff --git a/functions/sh_error b/functions/sh_error index bc71802..e971452 100755 --- a/functions/sh_error +++ b/functions/sh_error @@ -6,6 +6,3 @@ sh_error () { # shellcheck disable=SC2059 printf "${ClearNewLine:-} [${Red:-} ER ${Reset:-}] ${Red:-}${1:-}${Reset:-} \\n" >&2 } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_error diff --git a/functions/sh_fail b/functions/sh_fail index 639971d..51a0e2c 100755 --- a/functions/sh_fail +++ b/functions/sh_fail @@ -7,6 +7,3 @@ sh_fail () { printf "${ClearNewLine:-} [${Red:-}FAIL${Reset:-}] ${Red:-}${1:-}${Reset:-} \\n\\n" >&2 exit 2 } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_fail diff --git a/functions/sh_heading b/functions/sh_heading index ef0177a..62d8ef1 100755 --- a/functions/sh_heading +++ b/functions/sh_heading @@ -6,6 +6,3 @@ sh_heading () { # shellcheck disable=SC2059 printf "${ClearNewLine:-}\\n\\n${Bold:-}${IMagenta:-}❯❯❯❯❯❯❯❯${Reset:-} ${Bold:-}${ICyan:-}${Underline:-}${1:-}${Reset:-} ${Bold:-}${IMagenta:-}❯${IYellow:-}❯${IGreen:-}❯${Reset:-}\\n\\n" } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_heading diff --git a/functions/sh_info b/functions/sh_info index aa84dcd..e258ce7 100755 --- a/functions/sh_info +++ b/functions/sh_info @@ -6,6 +6,3 @@ sh_info () { # shellcheck disable=SC2059 printf "${ClearNewLine:-} [${Blue:-} .. ${Reset:-}] ${1:-} \\n" } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_info diff --git a/functions/sh_msg b/functions/sh_msg index 9433080..84e3dcd 100755 --- a/functions/sh_msg +++ b/functions/sh_msg @@ -6,6 +6,3 @@ sh_msg () { # shellcheck disable=SC2059 printf "${ClearNewLine:-}\\n❯❯❯ ${1:-} \\n" } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_msg diff --git a/functions/sh_note b/functions/sh_note index 3b70dfe..d71a6a8 100755 --- a/functions/sh_note +++ b/functions/sh_note @@ -6,6 +6,3 @@ sh_note () { # shellcheck disable=SC2059 printf "${ClearNewLine:-} [${Cyan:-} ** ${Reset:-}] ${1:-} \\n" } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_note diff --git a/functions/sh_success b/functions/sh_success index aff2298..1371b94 100755 --- a/functions/sh_success +++ b/functions/sh_success @@ -6,6 +6,3 @@ sh_success () { # shellcheck disable=SC2059 printf "${ClearNewLine:-} [${Green:-} OK ${Reset:-}] ${Green:-}${1:-}${Reset:-} \\n" } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_success diff --git a/functions/sh_text b/functions/sh_text index fd215a8..e507f63 100755 --- a/functions/sh_text +++ b/functions/sh_text @@ -6,6 +6,3 @@ sh_text () { # shellcheck disable=SC2059 printf "${ClearLine:-} ${1:-} \\n" } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_text diff --git a/functions/sh_user b/functions/sh_user index e06223a..26b3e43 100755 --- a/functions/sh_user +++ b/functions/sh_user @@ -6,6 +6,3 @@ sh_user () { # shellcheck disable=SC2059 printf "${ClearNewLine:-} [${Yellow:-} ?? ${Reset:-}] ${1:-} \\n" } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_user diff --git a/functions/sh_yesno b/functions/sh_yesno index 8a1959b..d0f7843 100755 --- a/functions/sh_yesno +++ b/functions/sh_yesno @@ -6,6 +6,3 @@ sh_yesno () { sh_user "${1:-}" sh_text "${Underline:-}y${Reset:-}es / ${Underline:-}n${Reset:-}o" } - -# shellcheck disable=SC2034 -[[ -z "${ZSH_NAME:-}" ]] && typeset -fx sh_yesno diff --git a/functions/sync_prefs b/functions/sync_prefs index fd82928..1e604ac 100755 --- a/functions/sync_prefs +++ b/functions/sync_prefs @@ -4,9 +4,9 @@ sync_prefs () { - DOTOSXINIT=$HOME/.dotfiles/osx/init + DOTMACOSINIT=$HOME/.dotfiles/macos/init FROMLIB=$HOME/Library - TOLIB=$DOTOSXINIT/Library + TOLIB=$DOTMACOSINIT/Library FROMPREFS=$FROMLIB/Preferences TOPREFS=$TOLIB/Preferences @@ -31,7 +31,7 @@ sync_prefs () { echo $TOSUBL [[ -a "$FROMSUBL/Snippets" ]] && rsync -avz $FROMSUBL/Snippets $TOSUBL [[ -a "$FROMSUBL/Themes" ]] && rsync -avz $FROMSUBL/Themes $TOSUBL - [[ -a "$FROMSUBL"/Default\ '(OSX)'.sublime-keymap ]] && rsync -avz $FROMSUBL/Default\ '(OSX)'.sublime-keymap $TOSUBL + [[ -a "$FROMSUBL"/Default\ '(MACOS)'.sublime-keymap ]] && rsync -avz $FROMSUBL/Default\ '(MACOS)'.sublime-keymap $TOSUBL [[ -a "$FROMSUBL/less.sublime-build" ]] && rsync -avz $FROMSUBL/less.sublime-build $TOSUBL [[ -a "$FROMSUBL"/Package\ Control.sublime-settings ]] && rsync -avz $FROMSUBL/Package\ Control.sublime-settings $TOSUBL [[ -a "$FROMSUBL/phpfmt.sublime-settings" ]] && rsync -avz $FROMSUBL/phpfmt.sublime-settings $TOSUBL @@ -39,9 +39,9 @@ sync_prefs () { [[ -a "$FROMSUBL/Preferences.sublime-settings" ]] && rsync -avz $FROMSUBL/Preferences.sublime-settings $TOSUBL if test $(command -v tree); then - tree $DOTOSXINIT + tree $DOTMACOSINIT else - ls -al $DOTOSXINIT + ls -al $DOTMACOSINIT fi echo "...done syncing preferences." diff --git a/functions/targz b/functions/targz index 7413c7d..2d60f80 100755 --- a/functions/targz +++ b/functions/targz @@ -7,7 +7,7 @@ targz () { tar -cvf "${tmpFile}" --exclude=".DS_Store" "${@}" || return 1; size=$( - stat -f"%z" "${tmpFile}" 2> /dev/null; # OS X `stat` + stat -f"%z" "${tmpFile}" 2> /dev/null; # macOS `stat` stat -c"%s" "${tmpFile}" 2> /dev/null # GNU `stat` ); diff --git a/git/aliases.sh b/git/aliases.sh new file mode 100755 index 0000000..941c977 --- /dev/null +++ b/git/aliases.sh @@ -0,0 +1,39 @@ +# shellcheck shell=bash +# +# Git aliases + +if [[ "$SHELL" == *"/zsh" ]]; then + # alias g="git" + # alias gl="git pull --prune" + # alias glog="git log --graph --pretty=format:'%Cred%h%Creset %an: %s - %Creset %C(yellow)%d%Creset %Cgreen(%cr)%Creset' --abbrev-commit --date=relative" + # alias gp="git push origin HEAD" + # alias gd="git diff" + # alias gc="git commit" + # alias gca="git commit -a" + # alias gco="git checkout" + # alias gcb="git copy-branch-name" + # alias gb="git branch" + # alias gs="git status -sb" # upgrade your git if -sb breaks for you. it's fun. + alias gac="git add -A && git commit -m" # shortcut for adding and committing together +else + alias g="git" + alias gl="git pull --prune" + alias glog="git log --graph --pretty=format:'%Cred%h%Creset %an: %s - %Creset %C(yellow)%d%Creset %Cgreen(%cr)%Creset' --abbrev-commit --date=relative" + alias gp="git push origin HEAD" + alias gd="git diff" + alias gc="git commit" + alias gca="git commit -a" + alias gco="git checkout" + alias gcb="git copy-branch-name" + alias gb="git branch" + alias gs="git status -sb" # upgrade your git if -sb breaks for you. it's fun. + alias gac="git add -A && git commit -m" # shortcut for adding and committing together +fi + +# Use Git’s colored diff when available +hash "git" &>/dev/null +if [[ $? -eq 0 ]]; then + function diff() { + git diff --no-index --color-words "$@" + } +fi diff --git a/git/aliases.zsh b/git/aliases.zsh deleted file mode 100755 index 43a7cc4..0000000 --- a/git/aliases.zsh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -# Use `hub` as our git wrapper: -# http://defunkt.github.com/hub/ -#hub_path=$(command -v hub) -# if (( $+commands[hub] )) -# then -# alias git="$hub_path" -# fi - -#alias g="git" -#alias gl="git pull --prune" -#alias glog="git log --graph --pretty=format:'%Cred%h%Creset %an: %s - %Creset %C(yellow)%d%Creset %Cgreen(%cr)%Creset' --abbrev-commit --date=relative" -#alias gp="git push origin HEAD" -#alias gd="git diff" -#alias gc="git commit" -#alias gca="git commit -a" -#alias gco="git checkout" -#alias gcb="git copy-branch-name" -#alias gb="git branch" -#alias gs="git status -sb" # upgrade your git if -sb breaks for you. it's fun. -alias gac="git add -A && git commit -m" # shortcut for adding and committing together diff --git a/git/completion.bash b/git/completion.bash deleted file mode 100644 index 38cad01..0000000 --- a/git/completion.bash +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash -# -# Enable tab completion for `g` by marking it as an alias for `git` - -if type "_git" &> /dev/null && [[ -f "$(brew --prefix)/etc/bash_completion.d/git-completion.bash" ]]; then - complete -o default -o nospace -F _git g -fi diff --git a/git/completion.zsh b/git/completion.zsh deleted file mode 100755 index d04894f..0000000 --- a/git/completion.zsh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -# Uses git's autocompletion for inner commands. Assumes an install of git's -# bash `git-completion` script at $completion below (this is where Homebrew -# tosses it, at least). -completion="$(brew --prefix)/share/zsh/site-functions/_git" - -if test -f "$completion"; then - . "$completion" -fi diff --git a/git/git-colored-diff.zsh b/git/git-colored-diff.zsh deleted file mode 100755 index f8e0ee8..0000000 --- a/git/git-colored-diff.zsh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -# -# Use Git’s colored diff when available - -hash "git" &>/dev/null - -if [[ $? -eq 0 ]]; then - function diff() { - git diff --no-index --color-words "$@" - } -fi diff --git a/git/gitconfig.symlink.example b/git/gitconfig.symlink.example index 3e84922..603da15 100644 --- a/git/gitconfig.symlink.example +++ b/git/gitconfig.symlink.example @@ -138,7 +138,7 @@ # [default] space-before-tab: looks for spaces before tabs at the beginning of a line whitespace = space-before-tab,-indent-with-non-tab,trailing-space - # Make `git rebase` safer on OS X + # Make `git rebase` safer on macOS # More info: trustctime = false diff --git a/git/install.sh b/git/install.sh deleted file mode 100755 index 805d8c4..0000000 --- a/git/install.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -# -# Install Git - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "git" &> /dev/null; then - sh_info "Installing Git..." - if type "brew" &> /dev/null; then - brew install git - brew install git-lfs - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install git - elif type "yum" &> /dev/null; then - sudo yum install git - fi -fi - -if type "git" &> /dev/null; then - sh_success "$(git --version) installed: $(command -v git)" -fi diff --git a/git/path.zsh b/git/path.zsh deleted file mode 100755 index 11acf6b..0000000 --- a/git/path.zsh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -# Git-manual: -if type "brew" &> /dev/null && [[ -d "$(brew --prefix)/git/man" ]]; then - export MANPATH="$(brew --prefix)/git/man:$MANPATH" -fi diff --git a/go/install.sh b/go/install.sh deleted file mode 100755 index fdbc96c..0000000 --- a/go/install.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -# -# Install Go. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "go" &> /dev/null || [[ "$OSTYPE" == "darwin"* ]]; then - sh_info "Installing Go..." - if type "brew" &> /dev/null; then - brew install go - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install go - elif type "yum" &> /dev/null; then - sudo yum install go - fi -fi - -if type "go" &> /dev/null; then - sh_success "$(go version) installed: $(command -v go)" - - sh_info "Setting up Go workspace file structure (~/go)..." - mkdir -p "$HOME"/go/{bin,src,pkg} - ls -al "$HOME/go" -fi diff --git a/go/path.zsh b/go/path.zsh deleted file mode 100755 index 017e236..0000000 --- a/go/path.zsh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -[[ -d "$HOME/go" ]] && export GOPATH="$HOME/go" -[[ -d "$(brew --prefix golang)/libexec" ]] && export GOROOT="$(brew --prefix golang)/libexec" -[[ -d "${GOPATH}/bin" ]] && export PATH="$PATH:${GOPATH}/bin" -[[ -d "${GOROOT}/bin" ]] && export PATH="$PATH:${GOROOT}/bin" diff --git a/gulp/install.sh b/gulp/install.sh deleted file mode 100755 index 837b532..0000000 --- a/gulp/install.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -# -# Install Gulp - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "gulp" &> /dev/null; then - ! type "npm" &> /dev/null && . "$DOTFILES/node/install.sh" - sh_info "Installing Gulp..." - npm install -g gulp -fi - -if type "gulp" &> /dev/null; then - sh_success "Gulp $(npm info gulp version) installed: $(command -v gulp)\n" - npm list -g gulp - echo -fi diff --git a/heroku/install.sh b/heroku/install.sh deleted file mode 100755 index 6e56a07..0000000 --- a/heroku/install.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -# -# Heroku CLI (heroku toolbelt) -# Everything you need to get started with Heroku -# https://toolbelt.heroku.com -# http://github.com/heroku/heroku - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "heroku" &> /dev/null; then - sh_info "Installing Heroku CLI (heroku toolbelt)..." - if type "brew" &> /dev/null; then - brew tap heroku/brew - brew install heroku - elif type "apt-get" &> /dev/null; then - wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh - else - wget -O- https://toolbelt.heroku.com/install.sh | sh - fi -fi - -if type "heroku" &> /dev/null; then - sh_success "$(heroku --version) installed: $(command -v heroku)" -fi diff --git a/java/install.sh b/java/install.sh deleted file mode 100755 index aacb43a..0000000 --- a/java/install.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash -# -# Install OpenJDK. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "java" &> /dev/null || [[ "$OSTYPE" == "darwin"* ]]; then - sh_info "Installing OpenJDK..." - if type "brew" &> /dev/null; then - brew install java - fi -fi - -# Help system find OpenJDK by loading paths -. "$( cd "${BASH_SOURCE%/*}" && pwd )/path.zsh" - -if type "java" &> /dev/null; then - sh_success "$(java -version) installed: $(command -v java)" -fi diff --git a/java/path.zsh b/java/path.zsh deleted file mode 100755 index f281004..0000000 --- a/java/path.zsh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -# For the system Java wrappers to find this JDK, symlink it with: -if [[ ! -e "/Library/Java/JavaVirtualMachines/openjdk.jdk" ]] && [[ -d "/Library/Java/JavaVirtualMachines" ]] && [[ -e "$(brew --prefix openjdk)/libexec/openjdk.jdk" ]]; then - sudo ln -sfn $(brew --prefix openjdk)/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk -fi - -# openjdk is keg-only, which means it was not symlinked into $(brew --prefix), -# because macOS provides similar software and installing this software in -# parallel can cause all kinds of trouble. - -# To have openjdk first in your PATH: -if [[ -d "$(brew --prefix openjdk)/bin" ]]; then - export PATH="$(brew --prefix openjdk)/bin:$PATH" -fi - -# For compilers to find openjdk you may need to set: -if [[ -e "$(brew --prefix openjdk)/include" ]]; then - export CPPFLAGS="-I$(brew --prefix openjdk)/include" -fi diff --git a/jekyll/aliases.zsh b/jekyll/aliases.zsh deleted file mode 100755 index 21828bb..0000000 --- a/jekyll/aliases.zsh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -# -# Aliases for Jekyll (and Bundler) - -alias binstall="bundle install" -alias bjbuild="bundle exec jekyll build --incremental" -alias bjserve="bundle exec jekyll serve --incremental --watch" -alias bjbs="bjbuild; bjserve" diff --git a/jekyll/install.sh b/jekyll/install.sh deleted file mode 100755 index b88707b..0000000 --- a/jekyll/install.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# Install Jekyll - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "jekyll" &> /dev/null; then - - # Ensure Ruby is installed and `gem` command is available. - ! type "gem" &> /dev/null && . "$DOTFILES/ruby/install.sh" - - if type "gem" &> /dev/null; then - . "$DOTFILES/ruby/gem-update.sh" - sh_info "Installing Jekyll..." - gem install jekyll - fi - - . "$DOTFILES/ruby/rehash.sh" -fi - -if type "jekyll" &> /dev/null; then - sh_success "$(jekyll --version) installed: $(command -v jekyll)\n" - gem which jekyll - echo -fi diff --git a/kubernetes/helm/install.sh b/kubernetes/helm/install.sh deleted file mode 100755 index 3de39e3..0000000 --- a/kubernetes/helm/install.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -# -# Install Helm - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "helm" &> /dev/null; then - sh_info "Installing Helm..." - if type "brew" &> /dev/null; then - brew install helm - elif type "apt-get" &> /dev/null; then - # sudo apt-get update - sudo apt-get -y install helm - elif type "yum" &> /dev/null; then - sudo yum install helm - fi -fi - -if type "helm" &> /dev/null; then - sh_success "$(helm --version) installed: $(command -v helm)" -fi diff --git a/kubernetes/install.sh b/kubernetes/install.sh deleted file mode 100755 index 5758520..0000000 --- a/kubernetes/install.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# -# Install Kubernetes - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "kubectl" &> /dev/null; then - sh_info "Installing Kubernetes..." - if type "brew" &> /dev/null; then - brew install kubectl - elif type "apt-get" &> /dev/null; then - sudo apt-get update && sudo apt-get install -y apt-transport-https - curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list - sudo apt-get update - sudo apt-get -y install kubectl - elif type "yum" &> /dev/null; then - cat < /etc/yum.repos.d/kubernetes.repo -[kubernetes] -name=Kubernetes -baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 -enabled=1 -gpgcheck=1 -repo_gpgcheck=1 -gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg -EOF - sudo yum install kubectl - fi -fi - -if type "kubectl" &> /dev/null; then - sh_success "$(kubectl --version) installed: $(command -v kubectl)" -fi diff --git a/kubernetes/minikube/install.sh b/kubernetes/minikube/install.sh deleted file mode 100755 index b32747e..0000000 --- a/kubernetes/minikube/install.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -# -# Install Minikube - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "minikube" &> /dev/null; then - sh_info "Installing Minikube..." - sh_info "If you do not already have a hypervisor installed, install VirtualBox." - if type "brew" &> /dev/null; then - brew install minikube - elif type "apt-get" &> /dev/null; then - # sudo apt-get update - sudo apt-get -y install minikube - elif type "yum" &> /dev/null; then - sudo yum install minikube - fi -fi - -if type "minikube" &> /dev/null; then - sh_success "$(minikube --version) installed: $(command -v minikube)" -fi diff --git a/laravel/aliases.zsh b/laravel/aliases.zsh deleted file mode 100755 index cbfc17c..0000000 --- a/laravel/aliases.zsh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -# -# Laravel Aliases - -# Artisan CLI -alias art="php artisan" diff --git a/laravel/install.sh b/laravel/install.sh deleted file mode 100755 index a0c924f..0000000 --- a/laravel/install.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -# -# Install Laravel. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "laravel" &> /dev/null; then - ! type "composer" &> /dev/null && . "$DOTFILES/composer/install.sh" - sh_info "Installing Laravel..." - composer global require "laravel/installer=~1.1" -fi - -if type "laravel" &> /dev/null; then - sh_success "$(laravel --version) installed: $(command -v laravel)" -fi diff --git a/less/install.sh b/less/install.sh deleted file mode 100755 index e0d423e..0000000 --- a/less/install.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -# -# Install Less.js/lessc - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "lessc" &> /dev/null; then - ! type "npm" &> /dev/null && . "$DOTFILES/node/install.sh" - sh_info "Installing Less.js/lessc..." - npm install -g less - # Install Less.js/lessc plugins - # Clean CSS - sh_info "Installing Clean CSS plugin for Less.js/lessc..." - npm install -g less-plugin-clean-css -fi - -if type "lessc" &> /dev/null; then - sh_success "Less.js/lessc $(npm info less version) installed: $(command -v lessc)\n" - npm list -g less -fi diff --git a/linux/install-epel.sh b/linux/install-epel.sh deleted file mode 100755 index fe0bd9f..0000000 --- a/linux/install-epel.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# -# Install Extra Packages for Enterprise Linux (EPEL) -# -# There are repository rpm packages for RHEL5, RHEL6 and RHEL7. -# The repository package installs the repo details on your local system for yum or up2date to use. -# Then you can install packages with your usual method, and the EPEL repository is included. -# https://fedoraproject.org/wiki/EPEL/FAQ#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F - -if type "yum" &> /dev/null; then - su -c 'rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm' -fi diff --git a/osx/aliases.zsh b/macos/aliases.sh similarity index 93% rename from osx/aliases.zsh rename to macos/aliases.sh index 93421fd..26dc872 100755 --- a/osx/aliases.zsh +++ b/macos/aliases.sh @@ -1,12 +1,15 @@ -#!/usr/bin/env bash +# shellcheck shell=bash # -# OS X Aliases +# macOS aliases alias ios="open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app" alias subl="open -a \"Sublime Text\"" -# Get OS X Software Updates, and update installed Ruby gems, Homebrew, npm, and their installed packages +alias defr="defaults read" +alias defw="defaults write" + +# Get macOS Software Updates, and update installed Ruby gems, Homebrew, npm, and their installed packages alias update="(cd; sudo softwareupdate -i -a; brew update; brew upgrade; brew cleanup; npm cache clean -g -f; npm install -g npm@latest; npm update -g; npm cache clean -g -f; sudo gem update --system; sudo gem update)" alias brewupdate="brew update; brew upgrade; brew cleanup" alias macupdate="sudo softwareupdate -i -a" @@ -29,10 +32,10 @@ alias flush="sudo dscacheutil -flushcache;sudo discoveryutil mdnsflushcache;sudo # Clean up LaunchServices to remove duplicates in the “Open With” menu alias lscleanup="/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user && killall Finder" -# OS X has no `md5sum`, so use `md5` as a fallback +# macOS has no `md5sum`, so use `md5` as a fallback command -v md5sum > /dev/null || alias md5sum="md5" -# OS X has no `sha1sum`, so use `shasum` as a fallback +# macOS has no `sha1sum`, so use `shasum` as a fallback command -v sha1sum > /dev/null || alias sha1sum="shasum" # Disable power chime (sound when plugging in a cable, or at startup) diff --git a/osx/fix-dns.sh b/macos/fix-dns.sh similarity index 78% rename from osx/fix-dns.sh rename to macos/fix-dns.sh index 663e43d..260c442 100755 --- a/osx/fix-dns.sh +++ b/macos/fix-dns.sh @@ -7,7 +7,7 @@ sudo discoveryutil mdnsactivedirectory yes # Copy LaunchDaemon -sudo cp -fv "$HOME/.dotfiles/osx/init/Library/LaunchDaemons/com.discoveryd.fix.plist" "/Library/LaunchDaemons/com.discoveryd.fix.plist" +sudo cp -fv "$HOME/.dotfiles/macos/init/Library/LaunchDaemons/com.discoveryd.fix.plist" "/Library/LaunchDaemons/com.discoveryd.fix.plist" # Set root permissions sudo chown root "/Library/LaunchDaemons/com.discoveryd.fix.plist" diff --git a/macos/init/BalanceD.itermcolors b/macos/init/BalanceD.itermcolors new file mode 100644 index 0000000..3ee2816 --- /dev/null +++ b/macos/init/BalanceD.itermcolors @@ -0,0 +1,344 @@ + + + + + Ansi 0 Color + + Alpha Component + 1 + Blue Component + 0.20000000298023224 + Color Space + sRGB + Green Component + 0.20000000298023224 + Red Component + 0.20000000298023224 + + Ansi 1 Color + + Alpha Component + 1 + Blue Component + 0.0 + Color Space + sRGB + Green Component + 0.13333334028720856 + Red Component + 0.93333333730697632 + + Ansi 10 Color + + Alpha Component + 1 + Blue Component + 0.0 + Color Space + sRGB + Green Component + 1 + Red Component + 0.53333336114883423 + + Ansi 11 Color + + Alpha Component + 1 + Blue Component + 0.0 + Color Space + sRGB + Green Component + 0.86666667461395264 + Red Component + 1 + + Ansi 12 Color + + Alpha Component + 1 + Blue Component + 1 + Color Space + sRGB + Green Component + 0.66666668653488159 + Red Component + 0.53333336114883423 + + Ansi 13 Color + + Alpha Component + 1 + Blue Component + 1 + Color Space + sRGB + Green Component + 0.0 + Red Component + 1 + + Ansi 14 Color + + Alpha Component + 1 + Blue Component + 1 + Color Space + sRGB + Green Component + 0.93333333730697632 + Red Component + 0.40000000596046448 + + Ansi 15 Color + + Alpha Component + 1 + Blue Component + 1 + Color Space + sRGB + Green Component + 1 + Red Component + 1 + + Ansi 2 Color + + Alpha Component + 1 + Blue Component + 0.0 + Color Space + sRGB + Green Component + 0.86666667461395264 + Red Component + 0.53333336114883423 + + Ansi 3 Color + + Alpha Component + 1 + Blue Component + 0.0 + Color Space + sRGB + Green Component + 0.66666668653488159 + Red Component + 1 + + Ansi 4 Color + + Alpha Component + 1 + Blue Component + 1 + Color Space + sRGB + Green Component + 0.60313111543655396 + Red Component + 0.53333336114883423 + + Ansi 5 Color + + Alpha Component + 1 + Blue Component + 0.80000001192092896 + Color Space + sRGB + Green Component + 0.0 + Red Component + 0.80000001192092896 + + Ansi 6 Color + + Alpha Component + 1 + Blue Component + 0.93333333730697632 + Color Space + sRGB + Green Component + 0.86666667461395264 + Red Component + 0.40000000596046448 + + Ansi 7 Color + + Alpha Component + 1 + Blue Component + 0.88235294818878174 + Color Space + sRGB + Green Component + 0.88235294818878174 + Red Component + 0.88235294818878174 + + Ansi 8 Color + + Alpha Component + 1 + Blue Component + 0.40000000596046448 + Color Space + sRGB + Green Component + 0.40000000596046448 + Red Component + 0.40000000596046448 + + Ansi 9 Color + + Alpha Component + 1 + Blue Component + 0.13333334028720856 + Color Space + sRGB + Green Component + 0.26666668057441711 + Red Component + 1 + + Background Color + + Alpha Component + 1 + Blue Component + 0.090196080505847931 + Color Space + sRGB + Green Component + 0.090196080505847931 + Red Component + 0.090196080505847931 + + Badge Color + + Alpha Component + 0.5 + Blue Component + 0.0 + Color Space + sRGB + Green Component + 0.14910027384757996 + Red Component + 1 + + Bold Color + + Alpha Component + 1 + Blue Component + 0.86666667461395264 + Color Space + sRGB + Green Component + 0.86666667461395264 + Red Component + 0.86666667461395264 + + Cursor Color + + Alpha Component + 1 + Blue Component + 0.97647058963775635 + Color Space + sRGB + Green Component + 0.97647058963775635 + Red Component + 0.97647058963775635 + + Cursor Guide Color + + Alpha Component + 0.25 + Blue Component + 1 + Color Space + sRGB + Green Component + 0.92681378126144409 + Red Component + 0.70214027166366577 + + Cursor Text Color + + Alpha Component + 1 + Blue Component + 0.80000001192092896 + Color Space + sRGB + Green Component + 0.80000001192092896 + Red Component + 0.80000001192092896 + + Foreground Color + + Alpha Component + 1 + Blue Component + 0.80000001192092896 + Color Space + sRGB + Green Component + 0.80000001192092896 + Red Component + 0.80000001192092896 + + Link Color + + Alpha Component + 1 + Blue Component + 0.53333336114883423 + Color Space + sRGB + Green Component + 1 + Red Component + 1 + + Selected Text Color + + Alpha Component + 1 + Blue Component + 0.0 + Color Space + sRGB + Green Component + 0.0 + Red Component + 0.0 + + Selection Color + + Alpha Component + 1 + Blue Component + 0.60000002384185791 + Color Space + sRGB + Green Component + 1 + Red Component + 1 + + + diff --git a/macos/init/BalanceD.terminal b/macos/init/BalanceD.terminal new file mode 100644 index 0000000..52871e4 --- /dev/null +++ b/macos/init/BalanceD.terminal @@ -0,0 +1,1587 @@ + + + + + ANSIBlackColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPECUwLjIwMDY5NDU2MSAwLjIwMDY5NDU2MSAwLjIwMDY5NDU2 + MSAxTxAnMC4xNTExMDk1MzE1IDAuMTUxMTA5NTMxNSAwLjE1MTEwOTUzMTUAEAGAAoAF + 0xgZERobHFROU0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0IgWFla + IAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gAB + AAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIE + AAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAA + cGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1l + YXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMA + AAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBD + b21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNS + R0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAA + AAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAA + AAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAA + AAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVm + YXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0y + LjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAA + AAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVD + NjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGlu + IElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ + ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAA + AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAA + BAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIA + dwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2 + APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoB + oQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6 + AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oD + lgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wTh + BPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoG + ewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghG + CFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQK + agqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzA + DNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14P + eg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJk + EoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsV + vRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlF + GWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4d + Rx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1 + IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcm + JyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysC + KzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUw + bDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9 + Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8 + JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJy + QrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1J + Y0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1Bx + ULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BY + L1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AF + YFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9o + lmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6 + cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6 + pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQd + hICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+O + Zo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4 + mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj + 5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8W + r4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7 + LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dB + x7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bU + SdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE + 4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTv + QO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p + /br+S/7c/23//9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNloiMk + XE5TQ29sb3JTcGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAApADIA + NwBJAEwAUQBTAFoAYABrAHgAfgCLAKAApwDPAPkA+wD9AP8BBgELAREBEwEVARcNYw1o + DXMNfA2JDYwNmQ2iDacNrwAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA2y + + ANSIBlueColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPEB0wLjUzNDE5NDk0NjMgMC42MDI2NTQ2OTU1IDEgMU8QJzAu + NDYwMzQxMTI1NyAwLjUxMjIyMDYyMTEgMC45OTg3MDg5MDM4ABABgAKABdMYGREaGxxU + TlNJRFVOU0lDQxAHgAOABE8RDEgAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkA + BgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQ + ICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFj + cHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFla + AAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAAC + xAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAA + ACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0 + ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAA + ZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYx + OTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAA + AAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+E + AAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklF + QyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdC + IGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1 + bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVz + YwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIu + MQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2 + Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4AEM8U + AAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAA + AAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAK + AA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYA + iwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwEN + ARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkB + wQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKi + AqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oD + xwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUc + BSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8G + wAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiW + CKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4K + xQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0m + DUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P + 7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLj + EwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYW + SRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxnd + GgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd + 7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yIn + IlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm + 6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvR + LAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIx + SjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbp + NyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9 + Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9 + Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdK + fUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGb + UeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZ + aVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFP + YaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp + 8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3Km + cwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8 + IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wr + hg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56Q + BpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/Jpo + mtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTil + qaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDq + sWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9 + Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6 + ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHW + VdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj + 4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXx + cvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t + ///SHyAhIlokY2xhc3NuYW1lWCRjbGFzc2VzXE5TQ29sb3JTcGFjZaIjJFxOU0NvbG9y + U3BhY2VYTlNPYmplY3TSHyAmJ1dOU0NvbG9yoiYkAAgAEQAaACQAKQAyADcASQBMAFEA + UwBaAGAAawB4AH4AiwCgAKcAxwDxAPMA9QD3AP4BAwEJAQsBDQEPDVsNYA1rDXQNgQ2E + DZENmg2fDacAAAAAAAACAQAAAAAAAAAoAAAAAAAAAAAAAAAAAAANqg== + + ANSIBrightBlackColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPECgwLjM5OTU3ODU3MTMgMC4zOTk1Nzg1NzEzIDAuMzk5NTc4 + NTcxMyAxTxAnMC4zMjU0NDMyNjc4IDAuMzI1NDQzMjA4MiAwLjMyNTQ0MzI2NzgAEAGA + AoAF0xgZERobHFROU0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0Ig + WFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD2 + 1gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQA + AAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJU + AAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAA + FG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJU + UkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy + ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA + EnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAA + AAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAA + AAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAA + AAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEg + RGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2 + Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAA + AAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4g + SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9u + IGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAA + E6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFz + AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAA + AAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABt + AHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA + 8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGS + AZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcC + cQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+ + A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE + 0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZ + BmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8I + MghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9 + ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4M + pwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9B + D14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYS + RRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4 + FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZ + IBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1 + HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwh + SCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXH + JfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsq + zysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+ + MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1 + wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuq + O+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5C + MEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjX + SR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91Q + J1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeS + V+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ff + s2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fp + aD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw + 4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnn + ekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eD + uoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Y + jf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CY + TJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMG + o3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2u + oa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7 + urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbG + w8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE + 08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4Dbg + veFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o + 7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8 + mP0p/br+S/7c/23//9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNl + oiMkXE5TQ29sb3JTcGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAAp + ADIANwBJAEwAUQBTAFoAYABrAHgAfgCLAKAApwDSAPwA/gEAAQIBCQEOARQBFgEYARoN + Zg1rDXYNfw2MDY8NnA2lDaoNsgAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA21 + + ANSIBrightBlueColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPEB0wLjUzNDE5NDk0NjMgMC42NjU4NzI1MTQyIDEgMU8QJjAu + NDYyNTcyMzk1OCAwLjU4NzE1NzAxMSAwLjk5ODc3NzQ0OTEAEAGAAoAF0xgZERobHFRO + U0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAG + ADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAg + IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNw + cnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoA + AAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALE + AAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAA + JHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRl + eHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABk + ZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5 + NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAA + AAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QA + ALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVD + IGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0Ig + Y29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVs + dCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNj + AAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4x + AAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2 + LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQA + A+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAA + AAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoA + DwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCL + AJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0B + EwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHB + AckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqIC + rAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPH + A9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwF + KwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbA + BtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYI + qgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrF + CtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYN + QA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/s + EAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMT + AxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJ + FmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0a + BBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3s + HhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7Iici + VSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtybo + JxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9Es + BSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFK + MYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3 + JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0i + PWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31D + wEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9 + SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR + 5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllp + WbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9h + omH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnx + akhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZz + AXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwh + fIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauG + DoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAG + kG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia + 1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWp + phqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqx + YLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70V + vY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJ + uco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV + 1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj + 6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy + 8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23/ + /9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNloiMkXE5TQ29sb3JT + cGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAApADIANwBJAEwAUQBT + AFoAYABrAHgAfgCLAKAApwDHAPAA8gD0APYA/QECAQgBCgEMAQ4NWg1fDWoNcw2ADYMN + kA2ZDZ4NpgAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA2p + + ANSIBrightCyanColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPEBwwLjM5OTU3ODU3MTMgMC45MzE4ODk4MzIgMSAxTxAnMC4z + NDg5OTYzMTE0IDAuOTIwNDEyNTQwNCAwLjk5OTA2MDM5MjQAEAGAAoAF0xgZERobHFRO + U0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAG + ADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAg + IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNw + cnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoA + AAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALE + AAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAA + JHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRl + eHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABk + ZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5 + NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAA + AAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QA + ALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVD + IGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0Ig + Y29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVs + dCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNj + AAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4x + AAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2 + LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQA + A+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAA + AAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoA + DwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCL + AJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0B + EwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHB + AckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqIC + rAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPH + A9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwF + KwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbA + BtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYI + qgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrF + CtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYN + QA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/s + EAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMT + AxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJ + FmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0a + BBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3s + HhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7Iici + VSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtybo + JxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9Es + BSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFK + MYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3 + JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0i + PWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31D + wEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9 + SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR + 5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllp + WbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9h + omH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnx + akhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZz + AXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwh + fIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauG + DoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAG + kG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia + 1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWp + phqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqx + YLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70V + vY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJ + uco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV + 1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj + 6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy + 8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23/ + /9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNloiMkXE5TQ29sb3JT + cGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAApADIANwBJAEwAUQBT + AFoAYABrAHgAfgCLAKAApwDGAPAA8gD0APYA/QECAQgBCgEMAQ4NWg1fDWoNcw2ADYMN + kA2ZDZ4NpgAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA2p + + ANSIBrightGreenColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPEBIwLjUzNDE5NDk0NjMgMSAwIDFPEB0wLjQ4MTMxNzkzNzQg + MSAwLjAzMTQxMjM1MTg4ABABgAKABdMYGREaGxxUTlNJRFVOU0lDQxAHgAOABE8RDEgA + AAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMg + c1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAA + AGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRi + WFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3 + AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAE + PAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykg + MTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2 + MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEA + AAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAA + AAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBo + dHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAA + AAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IA + AAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt + IHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZp + ZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5j + ZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAA + AAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAAC + c2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsA + QABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8 + AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwB + UgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIU + Ah0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsD + FgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRI + BFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUF + xQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0 + B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJ + eQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuw + C8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4O + SQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RET + ETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcU + SRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReu + F9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2Mb + ihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+U + H78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/Ak + HyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijU + KQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEu + Fi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/ + M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5 + fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+i + P+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJG + Z0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1K + TZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U + 21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyG + XNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk + 6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1g + bbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52 + m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/l + gEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ + /opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQg + lIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6f + HZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaoc + qo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2 + AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hj + wl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbO + ts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA + 3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6Lzp + RunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb7 + 94r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t///SHyAhIlokY2xhc3NuYW1lWCRj + bGFzc2VzXE5TQ29sb3JTcGFjZaIjJFxOU0NvbG9yU3BhY2VYTlNPYmplY3TSHyAmJ1dO + U0NvbG9yoiYkAAgAEQAaACQAKQAyADcASQBMAFEAUwBaAGAAawB4AH4AiwCgAKcAvADc + AN4A4ADiAOkA7gD0APYA+AD6DUYNSw1WDV8NbA1vDXwNhQ2KDZIAAAAAAAACAQAAAAAA + AAAoAAAAAAAAAAAAAAAAAAANlQ== + + ANSIBrightMagentaColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NHMSAwIDEgMU8QHDAuOTg0NzQzNjU0NyAwIDAuOTk5MTM1NjEz + NAAQAYACgAXTGBkRGhscVE5TSURVTlNJQ0MQB4ADgARPEQxIAAAMSExpbm8CEAAAbW50 + clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAA + AAAAAPbWAAEAAAAA0y1IUCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAU + YmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1u + ZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAAA9QAAAAkbHVtaQAA + A/gAAAAUbWVhcwAABAwAAAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgMZ1RSQwAABDwA + AAgMYlRSQwAABDwAAAgMdGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1Q + YWNrYXJkIENvbXBhbnkAAGRlc2MAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAA + AAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAA + AAAAAAAAAAAAAABYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABja + WFlaIAAAAAAAACSgAAAPhAAAts9kZXNjAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMu + Y2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2 + LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVD + IDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlv + biBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25k + aXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3 + AAAAAAATpP4AFF8uABDPFAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf + 521lYXMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1 + cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4A + YwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDg + AOUA6wDwAPYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwB + gwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJU + Al0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oD + ZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSo + BLYExATTBOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicG + NwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4 + CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsK + EQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxc + DHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4P + CQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHo + EgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIV + NBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihiv + GNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHsc + oxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDE + IPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTgl + aCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1 + KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ov + kS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUT + NU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87 + LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFq + QaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVI + S0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9J + T5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW + 91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69 + Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhn + PWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yvbQhtYG25bhJua27Ebx5veG/R + cCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdWd7N4EXhueMx5 + KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKS + gvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOM + yo0xjZiN/45mjs6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cK + l3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobai + JqKWowajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1E + rbiuLa6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5 + SrnCuju6tbsuu6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVL + xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7S + P9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p + 36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77Ibt + Ee2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn + +3f8B/yY/Sn9uv5L/tz/bf//0h8gISJaJGNsYXNzbmFtZVgkY2xhc3Nlc1xOU0NvbG9y + U3BhY2WiIyRcTlNDb2xvclNwYWNlWE5TT2JqZWN00h8gJidXTlNDb2xvcqImJAAIABEA + GgAkACkAMgA3AEkATABRAFMAWgBgAGsAeAB+AIsAoACnAK8AzgDQANIA1ADbAOAA5gDo + AOoA7A04DT0NSA1RDV4NYQ1uDXcNfA2EAAAAAAAAAgEAAAAAAAAAKAAAAAAAAAAAAAAA + AAAADYc= + + ANSIBrightRedColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPEB0xIDAuMjY4NDQ5NjkzOSAwLjEzMzU3MTQ3NTcgMU8QJjAu + OTg2ODMyNzM3OSAwLjE3MDAxMjI2NTQgMC4xMDY1NTQ5ODUAEAGAAoAF0xgZERobHFRO + U0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAG + ADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAg + IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNw + cnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoA + AAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALE + AAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAA + JHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRl + eHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABk + ZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5 + NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAA + AAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QA + ALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVD + IGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0Ig + Y29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVs + dCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNj + AAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4x + AAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2 + LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQA + A+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAA + AAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoA + DwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCL + AJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0B + EwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHB + AckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqIC + rAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPH + A9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwF + KwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbA + BtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYI + qgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrF + CtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYN + QA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/s + EAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMT + AxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJ + FmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0a + BBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3s + HhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7Iici + VSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtybo + JxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9Es + BSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFK + MYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3 + JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0i + PWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31D + wEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9 + SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR + 5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllp + WbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9h + omH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnx + akhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZz + AXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwh + fIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauG + DoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAG + kG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia + 1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWp + phqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqx + YLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70V + vY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJ + uco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV + 1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj + 6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy + 8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23/ + /9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNloiMkXE5TQ29sb3JT + cGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAApADIANwBJAEwAUQBT + AFoAYABrAHgAfgCLAKAApwDHAPAA8gD0APYA/QECAQgBCgEMAQ4NWg1fDWoNcw2ADYMN + kA2ZDZ4NpgAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA2p + + ANSIBrightWhiteColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NHMSAxIDEgMUYxIDEgMQAQAYACgAXTGBkRGhscVE5TSURVTlNJ + Q0MQB4ADgARPEQxIAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNz + cE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1IUCAgAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAA + AAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAU + Z1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVl + ZAAAA0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA/gAAAAUbWVhcwAABAwAAAAkdGVjaAAA + BDAAAAAMclRSQwAABDwAAAgMZ1RSQwAABDwAAAgMYlRSQwAABDwAAAgMdGV4dAAAAABD + b3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkAAGRlc2MAAAAA + AAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZ + WiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAAb6IA + ADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9kZXNj + AAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDov + L3d3dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIg + c3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBj + b2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAA + LFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAA + AAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDPFAAD7cwABBML + AANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAe + ACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoA + nwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwEl + ASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB + 4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLL + AtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD + +QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVY + BWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUH + BwcZBysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjn + CPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsL + Igs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2O + DakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQ + YRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNj + E4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW + 1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3 + Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoe + lB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLd + IwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3on + qyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyi + LNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIy + KjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfX + OBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ + ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SK + RM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NL + mkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLH + UxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZa + plr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKc + YvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdr + T2una/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQU + dHB0zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9 + oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7 + h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+ekAaQbpDWkT+R + qJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wc + nImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2n + bqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LC + szizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS+ + /796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2 + y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DY + ZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE + 5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnz + p/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf//0h8gISJa + JGNsYXNzbmFtZVgkY2xhc3Nlc1xOU0NvbG9yU3BhY2WiIyRcTlNDb2xvclNwYWNlWE5T + T2JqZWN00h8gJidXTlNDb2xvcqImJAAIABEAGgAkACkAMgA3AEkATABRAFMAWgBgAGsA + eAB+AIsAoACnAK8AtgC4ALoAvADDAMgAzgDQANIA1A0gDSUNMA05DUYNSQ1WDV8NZA1s + AAAAAAAAAgEAAAAAAAAAKAAAAAAAAAAAAAAAAAAADW8= + + ANSIBrightYellowColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPEBIxIDAuODY2MTk1NzM4MyAwIDFPECgwLjk5Njk3OTg5MjMg + MC44NDY4MDI4MzA3IDAuMDM4MjI2MDkwMzcAEAGAAoAF0xgZERobHFROU0lEVU5TSUND + EAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BN + U0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAA + M2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdY + WVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQA + AANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQw + AAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29w + eXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAA + ABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVog + AAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA4 + 9QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAA + AAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93 + d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNw + YWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29s + b3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxS + ZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAA + AAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwAD + XJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAA + AAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAj + ACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8A + pACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQEr + ATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB + 6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLV + AuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kE + BgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVn + BXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcH + GQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7 + CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyIL + OQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2p + DcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQ + fhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxOD + E6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW + +hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqe + GsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQe + vh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMK + IzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn + 3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizX + LQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioy + YzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgU + OFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+ + YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTO + RRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL + 4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MT + U19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa + 9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLw + Y0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09r + p2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRw + dMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+ + AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4ef + iASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiS + EZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJ + nPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n + 4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4 + s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/ + er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2 + zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY + 6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN + 5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0 + NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//9IfICEiWiRj + bGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNloiMkXE5TQ29sb3JTcGFjZVhOU09i + amVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAApADIANwBJAEwAUQBTAFoAYABrAHgA + fgCLAKAApwC8AOcA6QDrAO0A9AD5AP8BAQEDAQUNUQ1WDWENag13DXoNhw2QDZUNnQAA + AAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA2g + + ANSICyanColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPECcwLjM5OTU3ODU3MTMgMC44NjYxOTU3MzgzIDAuOTMxODg5 + ODMyIDFPECYwLjM0NDgxNzM0MDQgMC44MzkyODY2ODUgMC45MTQwMTczMTk3ABABgAKA + BdMYGREaGxxUTlNJRFVOU0lDQxAHgAOABE8RDEgAAAxITGlubwIQAABtbnRyUkdCIFhZ + WiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYA + AQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAAC + BAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAA + AHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRt + ZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJD + AAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQg + Q29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJz + UkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAA + AAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAA + AAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAA + AAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERl + ZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYt + Mi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElF + QzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBp + biBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk + /gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAA + AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAA + AAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQBy + AHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA + 9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGa + AaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnEC + egKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOK + A5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME + 4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZq + BnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDII + RghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpU + CmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcM + wAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9e + D3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUS + ZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWb + Fb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZ + RRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0e + HUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUgh + dSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3 + JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8r + Ais2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1 + MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1 + /TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvo + PCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBC + ckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kd + SWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQ + cVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfg + WC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7Ng + BWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/ + aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBx + OnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pG + eqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qE + HYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/ + jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyY + uJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2 + o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGv + Fq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1 + uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPH + Qce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG + 1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3h + ROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO60 + 70DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9 + Kf26/kv+3P9t///SHyAhIlokY2xhc3NuYW1lWCRjbGFzc2VzXE5TQ29sb3JTcGFjZaIj + JFxOU0NvbG9yU3BhY2VYTlNPYmplY3TSHyAmJ1dOU0NvbG9yoiYkAAgAEQAaACQAKQAy + ADcASQBMAFEAUwBaAGAAawB4AH4AiwCgAKcA0QD6APwA/gEAAQcBDAESARQBFgEYDWQN + aQ10DX0Nig2NDZoNow2oDbAAAAAAAAACAQAAAAAAAAAoAAAAAAAAAAAAAAAAAAANsw== + + ANSIGreenColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPEB0wLjUzNDE5NDk0NjMgMC44NjYxOTU3MzgzIDAgMU8QKDAu + NDczNzA3OTQ0MiAwLjg1NjMyMDIwMjQgMC4wMjQ2Mjg1MjAwMQAQAYACgAXTGBkRGhsc + VE5TSURVTlNJQ0MQB4ADgARPEQxIAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJ + AAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1I + UCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR + Y3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZ + WgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAA + AsQAAACIdnVlZAAAA0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA/gAAAAUbWVhcwAABAwA + AAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgMZ1RSQwAABDwAAAgMYlRSQwAABDwAAAgM + dGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkA + AGRlc2MAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAASc1JHQiBJRUM2 + MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVog + AAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAP + hAAAts9kZXNjAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAABZJ + RUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJH + QiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZh + dWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRl + c2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0y + LjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5 + NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDP + FAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUA + CgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCG + AIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcB + DQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5 + AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgC + ogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6 + A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0F + HAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQav + BsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIII + lgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAqu + CsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0N + Jg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/P + D+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS + 4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYm + FkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ + 3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3D + HeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsi + JyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3 + JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r + 0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zES + MUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq42 + 6TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzj + PSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpD + fUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3 + Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBR + m1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1ka + WWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxh + T2GiYfViSWKcYvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2ma + afFqSGqfavdrT2una/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwckty + pnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vC + fCF8gXzhfUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeF + q4YOhnKG14c7h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+e + kAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfya + aJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4 + pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw + 6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8Ibyb + vRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJ + Osm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR + 1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvj + Y+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl + 8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/ + bf//0h8gISJaJGNsYXNzbmFtZVgkY2xhc3Nlc1xOU0NvbG9yU3BhY2WiIyRcTlNDb2xv + clNwYWNlWE5TT2JqZWN00h8gJidXTlNDb2xvcqImJAAIABEAGgAkACkAMgA3AEkATABR + AFMAWgBgAGsAeAB+AIsAoACnAMcA8gD0APYA+AD/AQQBCgEMAQ4BEA1cDWENbA11DYIN + hQ2SDZsNoA2oAAAAAAAAAgEAAAAAAAAAKAAAAAAAAAAAAAAAAAAADas= + + ANSIMagentaColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPEB0wLjc5OTQzNDQ4MzEgMCAwLjc5OTQzNDQ4MzEgMU8QHDAu + NzQzNDA0MDkwNCAwIDAuNzU0MjY4ODg0NwAQAYACgAXTGBkRGhscVE5TSURVTlNJQ0MQ + B4ADgARPEQxIAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1T + RlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1IUCAgAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAz + ZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZ + WgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAA + A0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA/gAAAAUbWVhcwAABAwAAAAkdGVjaAAABDAA + AAAMclRSQwAABDwAAAgMZ1RSQwAABDwAAAgMYlRSQwAABDwAAAgMdGV4dAAAAABDb3B5 + cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkAAGRlc2MAAAAAAAAA + EnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAA + AAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAAb6IAADj1 + AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9kZXNjAAAA + AAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3 + dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3Bh + Y2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xv + dXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALFJl + ZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAA + ACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDPFAAD7cwABBMLAANc + ngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMA + KAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCk + AKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwElASsB + MgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHp + AfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC + 4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD+QQG + BBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVYBWcF + dwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZ + BysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJ + EAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5 + C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakN + ww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+ + EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MT + pBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6 + Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3Gp4a + xRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6+ + HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwoj + OCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfc + KA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNct + DC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJj + Mpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4 + UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ID5g + PqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5F + EkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkvi + TCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNT + X1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1 + W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKcYvBj + Q2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2un + a/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0 + zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4B + fmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+I + BIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+ekAaQbpDWkT+RqJIR + knqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc + 951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfg + qFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCsziz + rrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS+/796 + v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bM + Ncy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo + 2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3m + lucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q0 + 9ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf//0h8gISJaJGNs + YXNzbmFtZVgkY2xhc3Nlc1xOU0NvbG9yU3BhY2WiIyRcTlNDb2xvclNwYWNlWE5TT2Jq + ZWN00h8gJidXTlNDb2xvcqImJAAIABEAGgAkACkAMgA3AEkATABRAFMAWgBgAGsAeAB+ + AIsAoACnAMcA5gDoAOoA7ADzAPgA/gEAAQIBBA1QDVUNYA1pDXYNeQ2GDY8NlA2cAAAA + AAAAAgEAAAAAAAAAKAAAAAAAAAAAAAAAAAAADZ8= + + ANSIRedColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPEBwwLjkzMTg4OTgzMiAwLjEzMzU3MTQ3NTcgMCAxTxAdMC45 + MDIyNzQ5MDY2IDAgMC4wMjMzNTIxOTQ1OAAQAYACgAXTGBkRGhscVE5TSURVTlNJQ0MQ + B4ADgARPEQxIAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1T + RlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1IUCAgAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAz + ZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZ + WgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAA + A0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA/gAAAAUbWVhcwAABAwAAAAkdGVjaAAABDAA + AAAMclRSQwAABDwAAAgMZ1RSQwAABDwAAAgMYlRSQwAABDwAAAgMdGV4dAAAAABDb3B5 + cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkAAGRlc2MAAAAAAAAA + EnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAA + AAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAAb6IAADj1 + AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9kZXNjAAAA + AAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3 + dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3Bh + Y2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xv + dXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALFJl + ZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAA + ACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDPFAAD7cwABBMLAANc + ngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMA + KAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCk + AKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwElASsB + MgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHp + AfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC + 4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD+QQG + BBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVYBWcF + dwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZ + BysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJ + EAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5 + C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakN + ww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+ + EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MT + pBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6 + Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3Gp4a + xRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6+ + HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwoj + OCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfc + KA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNct + DC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJj + Mpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4 + UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ID5g + PqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5F + EkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkvi + TCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNT + X1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1 + W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKcYvBj + Q2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2un + a/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0 + zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4B + fmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+I + BIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+ekAaQbpDWkT+RqJIR + knqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc + 951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfg + qFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCsziz + rrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS+/796 + v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bM + Ncy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo + 2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3m + lucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q0 + 9ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf//0h8gISJaJGNs + YXNzbmFtZVgkY2xhc3Nlc1xOU0NvbG9yU3BhY2WiIyRcTlNDb2xvclNwYWNlWE5TT2Jq + ZWN00h8gJidXTlNDb2xvcqImJAAIABEAGgAkACkAMgA3AEkATABRAFMAWgBgAGsAeAB+ + AIsAoACnAMYA5gDoAOoA7ADzAPgA/gEAAQIBBA1QDVUNYA1pDXYNeQ2GDY8NlA2cAAAA + AAAAAgEAAAAAAAAAKAAAAAAAAAAAAAAAAAAADZ8= + + ANSIWhiteColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPECUwLjg4MzU4MjU5MiAwLjg4MzU4MjU5MiAwLjg4MzU4MjU5 + MiAxTxAnMC44NTU2NDQ1ODM3IDAuODU1NjQ0NTgzNyAwLjg1NTY0NDU4MzcAEAGAAoAF + 0xgZERobHFROU0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0IgWFla + IAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gAB + AAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIE + AAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAA + cGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1l + YXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMA + AAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBD + b21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNS + R0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAA + AAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAA + AAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAA + AAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVm + YXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0y + LjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAA + AAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVD + NjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGlu + IElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ + ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAA + AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAA + BAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIA + dwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2 + APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoB + oQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6 + AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oD + lgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wTh + BPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoG + ewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghG + CFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQK + agqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzA + DNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14P + eg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJk + EoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsV + vRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlF + GWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4d + Rx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1 + IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcm + JyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysC + KzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUw + bDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9 + Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8 + JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJy + QrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1J + Y0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1Bx + ULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BY + L1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AF + YFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9o + lmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6 + cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6 + pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQd + hICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+O + Zo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4 + mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj + 5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8W + r4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7 + LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dB + x7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bU + SdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE + 4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTv + QO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p + /br+S/7c/23//9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNloiMk + XE5TQ29sb3JTcGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAApADIA + NwBJAEwAUQBTAFoAYABrAHgAfgCLAKAApwDPAPkA+wD9AP8BBgELAREBEwEVARcNYw1o + DXMNfA2JDYwNmQ2iDacNrwAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA2y + + ANSIYellowColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPEBIxIDAuNjY1ODcyNTE0MiAwIDFPECgwLjk5MjA4NzMwNDYg + MC42MDMyNzU2NTY3IDAuMDM0MjgxNzQ5MjgAEAGAAoAF0xgZERobHFROU0lEVU5TSUND + EAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BN + U0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAA + M2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdY + WVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQA + AANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQw + AAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29w + eXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAA + ABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVog + AAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA4 + 9QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAA + AAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93 + d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNw + YWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29s + b3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxS + ZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAA + AAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwAD + XJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAA + AAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAj + ACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8A + pACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQEr + ATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB + 6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLV + AuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kE + BgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVn + BXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcH + GQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7 + CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyIL + OQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2p + DcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQ + fhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxOD + E6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW + +hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqe + GsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQe + vh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMK + IzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn + 3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizX + LQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioy + YzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgU + OFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+ + YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTO + RRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL + 4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MT + U19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa + 9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLw + Y0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09r + p2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRw + dMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+ + AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4ef + iASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiS + EZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJ + nPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n + 4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4 + s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/ + er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2 + zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY + 6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN + 5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0 + NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//9IfICEiWiRj + bGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNloiMkXE5TQ29sb3JTcGFjZVhOU09i + amVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAApADIANwBJAEwAUQBTAFoAYABrAHgA + fgCLAKAApwC8AOcA6QDrAO0A9AD5AP8BAQEDAQUNUQ1WDWENag13DXoNhw2QDZUNnQAA + AAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA2g + + BackgroundColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPECswLjA5Mjc1OTE1NDc0IDAuMDkyNzU5MTU0NzQgMC4wOTI3 + NTkxNTQ3NCAxTxAqMC4wNzI3MzM3MTUxOCAwLjA3MjczMzcxNTE4IDAuMDcyNzMzNzE1 + MTgAEAGAAoAF0xgZERobHFROU0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1u + dHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAA + AAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAA + FGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRt + bmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkA + AAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8 + AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQt + UGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAA + AAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAA + AAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY + 2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVj + LmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2 + Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklF + QyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAA + AAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRp + b24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29u + ZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmll + dwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABX + H+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBj + dXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBe + AGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA + 4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8 + AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksC + VAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNa + A2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoE + qAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYn + BjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH + +AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7 + ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMM + XAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7u + DwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR + 6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUS + FTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoY + rxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7 + HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJgg + xCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4 + JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIq + NSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9a + L5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1 + EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrv + Oy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlB + akGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgF + SEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBP + SU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFap + VvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxe + vV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmbo + Zz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv + 0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjM + eSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCC + koL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/Ixj + jMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+X + Cpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2 + oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCt + RK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjR + uUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7F + S8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+ + 0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLf + Kd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG + 7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf6 + 5/t3/Af8mP0p/br+S/7c/23//9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xv + clNwYWNloiMkXE5TQ29sb3JTcGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAAR + ABoAJAApADIANwBJAEwAUQBTAFoAYABrAHgAfgCLAKAApwDVAQIBBAEGAQgBDwEUARoB + HAEeASANbA1xDXwNhQ2SDZUNog2rDbANuAAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAA + AAAAAA27 + + BackgroundSettingsForInactiveWindows + + CursorColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPECgwLjk3NjI3NjU3NjUgMC45NzYyNzY1NzY1IDAuOTc2Mjc2 + NTc2NSAxTxAnMC45NzAxMzA4MDEyIDAuOTcwMTMwODAxMiAwLjk3MDEzMDgwMTIAEAGA + AoAF0xgZERobHFROU0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0Ig + WFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD2 + 1gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQA + AAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJU + AAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAA + FG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJU + UkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy + ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA + EnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAA + AAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAA + AAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAA + AAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEg + RGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2 + Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAA + AAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4g + SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9u + IGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAA + E6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFz + AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAA + AAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABt + AHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA + 8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGS + AZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcC + cQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+ + A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE + 0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZ + BmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8I + MghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9 + ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4M + pwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9B + D14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYS + RRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4 + FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZ + IBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1 + HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwh + SCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXH + JfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsq + zysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+ + MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1 + wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuq + O+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5C + MEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjX + SR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91Q + J1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeS + V+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ff + s2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fp + aD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw + 4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnn + ekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eD + uoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Y + jf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CY + TJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMG + o3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2u + oa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7 + urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbG + w8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE + 08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4Dbg + veFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o + 7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8 + mP0p/br+S/7c/23//9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNl + oiMkXE5TQ29sb3JTcGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAAp + ADIANwBJAEwAUQBTAFoAYABrAHgAfgCLAKAApwDSAPwA/gEAAQIBCQEOARQBFgEYARoN + Zg1rDXYNfw2MDY8NnA2lDaoNsgAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA21 + + Font + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGkCwwVFlUkbnVsbNQNDg8QERIT + FFZOU1NpemVYTlNmRmxhZ3NWTlNOYW1lViRjbGFzcyNAKAAAAAAAABAQgAKAA11NZW5s + by1SZWd1bGFy0hcYGRpaJGNsYXNzbmFtZVgkY2xhc3Nlc1ZOU0ZvbnSiGRtYTlNPYmpl + Y3QIERokKTI3SUxRU1heZ253foWOkJKUoqeyu8LFAAAAAAAAAQEAAAAAAAAAHAAAAAAA + AAAAAAAAAAAAAM4= + + FontAntialias + + FontHeightSpacing + 1.1000000000000001 + FontWidthSpacing + 1.004032258064516 + ProfileCurrentVersion + 2.0699999999999998 + SelectionColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPECgwLjk5MzIzNDIxNzIgMC45OTMyMzQyMTcyIDAuNTk1MTI5 + NTQ5NSAxTxAcMC45OTIyNjc0Mjk4IDEgMC41MjY0MjM2OTI3ABABgAKABdMYGREaGxxU + TlNJRFVOU0lDQxAHgAOABE8RDEgAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkA + BgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQ + ICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFj + cHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFla + AAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAAC + xAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAA + ACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0 + ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAA + ZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYx + OTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAA + AAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+E + AAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklF + QyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdC + IGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1 + bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVz + YwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIu + MQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2 + Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4AEM8U + AAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAA + AAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAK + AA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYA + iwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwEN + ARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkB + wQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKi + AqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oD + xwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUc + BSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8G + wAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiW + CKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4K + xQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0m + DUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P + 7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLj + EwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYW + SRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxnd + GgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd + 7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yIn + IlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm + 6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvR + LAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIx + SjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbp + NyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9 + Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9 + Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdK + fUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGb + UeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZ + aVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFP + YaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp + 8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3Km + cwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8 + IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wr + hg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56Q + BpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/Jpo + mtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTil + qaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDq + sWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9 + Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6 + ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHW + VdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj + 4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXx + cvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t + ///SHyAhIlokY2xhc3NuYW1lWCRjbGFzc2VzXE5TQ29sb3JTcGFjZaIjJFxOU0NvbG9y + U3BhY2VYTlNPYmplY3TSHyAmJ1dOU0NvbG9yoiYkAAgAEQAaACQAKQAyADcASQBMAFEA + UwBaAGAAawB4AH4AiwCgAKcA0gDxAPMA9QD3AP4BAwEJAQsBDQEPDVsNYA1rDXQNgQ2E + DZENmg2fDacAAAAAAAACAQAAAAAAAAAoAAAAAAAAAAAAAAAAAAANqg== + + TextBoldColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPECgwLjg2NjE5NTczODMgMC44NjYxOTU3MzgzIDAuODY2MTk1 + NzM4MyAxTxAnMC44MzQ1NzYxMjk5IDAuODM0NTc2MTI5OSAwLjgzNDU3NjEyOTkAEAGA + AoAF0xgZERobHFROU0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0Ig + WFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD2 + 1gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQA + AAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJU + AAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAA + FG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJU + UkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy + ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA + EnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAA + AAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAA + AAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAA + AAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEg + RGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2 + Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAA + AAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4g + SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9u + IGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAA + E6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFz + AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAA + AAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABt + AHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA + 8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGS + AZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcC + cQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+ + A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE + 0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZ + BmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8I + MghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9 + ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4M + pwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9B + D14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYS + RRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4 + FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZ + IBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1 + HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwh + SCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXH + JfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsq + zysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+ + MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1 + wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuq + O+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5C + MEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjX + SR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91Q + J1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeS + V+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ff + s2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fp + aD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw + 4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnn + ekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eD + uoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Y + jf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CY + TJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMG + o3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2u + oa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7 + urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbG + w8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE + 08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4Dbg + veFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o + 7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8 + mP0p/br+S/7c/23//9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNl + oiMkXE5TQ29sb3JTcGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAAp + ADIANwBJAEwAUQBTAFoAYABrAHgAfgCLAKAApwDSAPwA/gEAAQIBCQEOARQBFgEYARoN + Zg1rDXYNfw2MDY8NnA2lDaoNsgAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA21 + + TextColor + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS + AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGmCwwXHR4lVSRudWxs1Q0ODxAR + EhMUFRZcTlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29s + b3JTcGFjZVYkY2xhc3NPECgwLjc5NTg4ODk2MDQgMC43OTU4ODg5NjA0IDAuNzk1ODg4 + OTYwNCAxTxAnMC43NTA3NDc1MDE5IDAuNzUwNzQ3NDQyMiAwLjc1MDc0NzUwMTkAEAGA + AoAF0xgZERobHFROU0lEVU5TSUNDEAeAA4AETxEMSAAADEhMaW5vAhAAAG1udHJSR0Ig + WFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD2 + 1gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQA + AAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJU + AAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAA + FG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJU + UkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy + ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA + EnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAA + AAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAA + AAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAA + AAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEg + RGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2 + Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAA + AAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4g + SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9u + IGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAA + E6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFz + AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAA + AAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABt + AHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA + 8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGS + AZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcC + cQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+ + A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE + 0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZ + BmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8I + MghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9 + ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4M + pwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9B + D14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYS + RRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4 + FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZ + IBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1 + HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwh + SCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXH + JfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsq + zysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+ + MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1 + wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuq + O+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5C + MEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjX + SR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91Q + J1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeS + V+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ff + s2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fp + aD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw + 4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnn + ekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eD + uoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Y + jf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CY + TJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMG + o3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2u + oa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7 + urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbG + w8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE + 08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4Dbg + veFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o + 7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8 + mP0p/br+S/7c/23//9IfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNDb2xvclNwYWNl + oiMkXE5TQ29sb3JTcGFjZVhOU09iamVjdNIfICYnV05TQ29sb3KiJiQACAARABoAJAAp + ADIANwBJAEwAUQBTAFoAYABrAHgAfgCLAKAApwDSAPwA/gEAAQIBCQEOARQBFgEYARoN + Zg1rDXYNfw2MDY8NnA2lDaoNsgAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAA21 + + columnCount + 200 + name + BalanceD + rowCount + 56 + type + Window Settings + + diff --git a/macos/init/Library/Application Support/Code/User/settings.json b/macos/init/Library/Application Support/Code/User/settings.json new file mode 100644 index 0000000..82a68a7 --- /dev/null +++ b/macos/init/Library/Application Support/Code/User/settings.json @@ -0,0 +1,106 @@ +// Place your settings in this file to overwrite the default settings +{ + "alignment.operatorPadding": "left", + "atomKeymap.promptV3Features": true, + "cSpell.userWords": [], + "editor.cursorStyle": "line-thin", + "editor.fontFamily": "Menlo, Monaco, 'Andale Mono', 'Lucida Console', 'Courier New', Courier, monospace", + "editor.fontSize": 12, + "editor.formatOnPaste": false, + "editor.multiCursorModifier": "ctrlCmd", + "editor.renderWhitespace": "boundary", + "editor.scrollBeyondLastLine": false, + "editor.semanticTokenColorCustomizations": { + + }, + "editor.suggestSelection": "first", + "editor.tabSize": 2, + "editor.wordWrap": "on", + "explorer.confirmDragAndDrop": false, + "files.associations": { + ".editorconfig": "editorconfig", + ".env.example": "dotenv", + "*.hcl": "terraform", + "*.symlink": "shellscript", + "CODEOWNERS": "ignore", + "Dockerfile.*": "dockerfile", + "config": "editorconfig" + }, + "files.exclude": { + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true + }, + "files.trimTrailingWhitespace": true, + "gitlens.hovers.currentLine.over": "line", + "gitlens.currentLine.enabled": false, + "gitlens.codeLens.enabled": false, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "markdown.styles": [ + "https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.4.0/github-markdown.min.css" + ], + "markdownTablePrettify.columnPadding": 1, + "[markdown]": { + "editor.defaultFormatter": "darkriszty.markdown-table-prettify" + }, + "python.languageServer": "Default", + "redhat.telemetry.enabled": false, + "search.exclude": { + "**/.bundle": true, + "**/.sass-cache": true, + "**/bower_components": true, + "**/node_modules": true, + "./vendor": true + }, + "shellcheck.customArgs": [ + "-x" + ], + "selectline.alignment": "right", + "selectline.displayFormat": "%d Lines Selected", + "selectline.statusbarPriority": 1000, + "shellcheck.executablePath": "/opt/homebrew/bin/shellcheck", + "telemetry.telemetryLevel": "off", + "terminal.external.osxExec": "iTerm.app", + "terminal.integrated.lineHeight": 1.1, + "terminal.integrated.scrollback": 10000, + "typescript.updateImportsOnFileMove.enabled": "always", + "vsicons.dontShowNewVersionMessage": true, + "vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue", + "window.restoreWindows": "all", + "window.title": "${activeEditorMedium}${separator}${rootName}", + "window.zoomLevel": 0, + "workbench.colorCustomizations": { + "panel.background": "#1c1c1c", + "statusBar.background": "#1c1c1c", + "terminal.ansiBlack":"#333333", + "terminal.ansiBlue":"#8899ff", + "terminal.ansiBrightBlack":"#666666", + "terminal.ansiBrightBlue":"#88aaff", + "terminal.ansiBrightCyan":"#66eeff", + "terminal.ansiBrightGreen":"#88ff00", + "terminal.ansiBrightMagenta":"#ff00ff", + "terminal.ansiBrightRed":"#ff4422", + "terminal.ansiBrightWhite":"#ffffff", + "terminal.ansiBrightYellow":"#ffdd00", + "terminal.ansiCyan":"#66ddee", + "terminal.ansiGreen":"#88dd00", + "terminal.ansiMagenta":"#cc00cc", + "terminal.ansiRed":"#ee2200", + "terminal.ansiWhite":"#e1e1e1", + "terminal.ansiYellow":"#ffaa00", + "terminal.background":"#171717", + "terminal.foreground":"#cccccc", + "terminalCursor.background":"#cccccc", + "terminalCursor.foreground":"#f9f9f9", + "titleBar.activeBackground": "#1c1c1c" + }, + "workbench.colorTheme": "BalanceD", + "workbench.editor.showTabs": "single", + "workbench.editor.tabSizing": "shrink", + "workbench.fontAliasing": "auto", + "workbench.sideBar.location": "left", + "workbench.startupEditor": "newUntitledFile" +} diff --git a/osx/init/Library/Preferences/WebIde90/codestyles/Balanced.xml b/macos/init/Library/Preferences/WebIde90/codestyles/Balanced.xml similarity index 100% rename from osx/init/Library/Preferences/WebIde90/codestyles/Balanced.xml rename to macos/init/Library/Preferences/WebIde90/codestyles/Balanced.xml diff --git a/osx/init/Library/Preferences/WebIde90/colors/Balanced.icls b/macos/init/Library/Preferences/WebIde90/colors/Balanced.icls similarity index 100% rename from osx/init/Library/Preferences/WebIde90/colors/Balanced.icls rename to macos/init/Library/Preferences/WebIde90/colors/Balanced.icls diff --git a/osx/init/Library/Preferences/WebIde90/colors/Darcula 2.icls b/macos/init/Library/Preferences/WebIde90/colors/Darcula 2.icls similarity index 100% rename from osx/init/Library/Preferences/WebIde90/colors/Darcula 2.icls rename to macos/init/Library/Preferences/WebIde90/colors/Darcula 2.icls diff --git a/osx/init/Library/Preferences/WebIde90/disabled_plugins.txt b/macos/init/Library/Preferences/WebIde90/disabled_plugins.txt similarity index 100% rename from osx/init/Library/Preferences/WebIde90/disabled_plugins.txt rename to macos/init/Library/Preferences/WebIde90/disabled_plugins.txt diff --git a/osx/init/Library/Preferences/WebIde90/inspection/Default.xml b/macos/init/Library/Preferences/WebIde90/inspection/Default.xml similarity index 100% rename from osx/init/Library/Preferences/WebIde90/inspection/Default.xml rename to macos/init/Library/Preferences/WebIde90/inspection/Default.xml diff --git a/osx/init/Library/Preferences/WebIde90/installed.txt b/macos/init/Library/Preferences/WebIde90/installed.txt similarity index 100% rename from osx/init/Library/Preferences/WebIde90/installed.txt rename to macos/init/Library/Preferences/WebIde90/installed.txt diff --git a/osx/init/Library/Preferences/WebIde90/keymaps/Balanced.xml b/macos/init/Library/Preferences/WebIde90/keymaps/Balanced.xml similarity index 100% rename from osx/init/Library/Preferences/WebIde90/keymaps/Balanced.xml rename to macos/init/Library/Preferences/WebIde90/keymaps/Balanced.xml diff --git a/osx/init/Library/Preferences/WebIde90/templates/PHP.xml b/macos/init/Library/Preferences/WebIde90/templates/PHP.xml similarity index 100% rename from osx/init/Library/Preferences/WebIde90/templates/PHP.xml rename to macos/init/Library/Preferences/WebIde90/templates/PHP.xml diff --git a/macos/install-clt.sh b/macos/install-clt.sh new file mode 100755 index 0000000..f9f2fab --- /dev/null +++ b/macos/install-clt.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +# +# Install Command Line Tools for Xcode + +# Shell Support +# shellcheck disable=SC1090 +[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" + +if [[ "$OSTYPE" == "darwin"* ]]; then + if type "xcode-select" &> /dev/null; then + XCODE_PATH=$(xcode-select -p) + if [[ "$XCODE_PATH" == "/Applications/Xcode.app"* ]]; then + sh_success "Xcode is installed:" + sh_text "${XCODE_PATH}" + sh_alert "You should ensure Xcode is updated to the newest version." + sh_text "Launch the App Store application, check 'Updates', update Xcode." + sh_text "After updating Xcode, be sure to launch the Xcode application and accept the Apple license terms." + elif [[ "$XCODE_PATH" == "/Library/Developer/CommandLineTools"* ]]; then + sh_success "Xcode Command Line Tools are installed:" + sh_text "${XCODE_PATH}" + else + sh_info "Installing Xcode Command Line Tools..." + xcode-select --install + fi + else + sh_error "The 'xcode-select' command was not available." + sh_alert "You should install Xcode (and Command Line Tools)." + sh_text "Launch the App Store application, search-for and install Xcode." + sh_text "After installing Xcode, be sure to launch the Xcode application and accept the Apple license terms." + sh_fail "This operation requires Xcode Command Line Tools." + fi + # Check gcc for successful installation. + if type "gcc" &> /dev/null; then + sh_success "gcc is installed. Check configuration:" + echo + gcc --version + echo + fi +fi diff --git a/macos/set-defaults.sh b/macos/set-defaults.sh new file mode 100755 index 0000000..5fb4519 --- /dev/null +++ b/macos/set-defaults.sh @@ -0,0 +1,1168 @@ +#!/usr/bin/env bash +# +# Sets reasonable macOS defaults. +# +# @see https://macos-defaults.com + +_macos_init="${HOME}/.dotfiles/macos/init" + +# Close any open System Preferences panes, to prevent them from overriding +# settings we're about to change +osascript -e 'tell application "System Preferences" to quit' + +# Ask for the administrator password upfront +sudo -v + +# Keep-alive: update existing `sudo` time stamp until script has finished +while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & + +################################################################################ +__USER_defaults= +################################################################################ + +# Set language and text formats +defaults write NSGlobalDomain AppleLanguages -array "en-US" +defaults write NSGlobalDomain AppleLocale -string "en_US" +defaults write NSGlobalDomain AppleMeasurementUnits -string "Inches" +defaults write NSGlobalDomain AppleMetricUnits -bool false +defaults write NSGlobalDomain AppleTemperatureUnit -string "Fahrenheit" + +# Set the timezone; see `systemsetup -listtimezones` for other values +sudo systemsetup -settimezone "America/New_York" > /dev/null + + +################################################################################ +__SYSTEM_defaults= +################################################################################ + +# Set computer name (as done via System Preferences → Sharing) +# sudo scutil --set ComputerName "0x73313077656E" +# sudo scutil --set HostName "0x73313077656E" +# sudo scutil --set LocalHostName "0x73313077656E" +# sudo defaults write \ +# /Library/Preferences/SystemConfiguration/com.apple.smb.server \ +# NetBIOSName -string "0x73313077656E" + +# Set standby delay to 24 hours (default is 1 hour) +# sudo pmset -a standbydelay 86400 + +# Disable the sound effects on boot +sudo nvram SystemAudioVolume=%00 + +# Disable power chime (sound when plugging in a cable) +defaults write com.apple.PowerChime ChimeOnNoHardware -bool true +defaults write com.apple.PowerChime ChimeOnAllHardware -bool false +sudo defaults write com.apple.PowerChime ChimeOnNoHardware -bool true +sudo defaults write com.apple.PowerChime ChimeOnAllHardware -bool false +killall PowerChime + +# Disable transparency in the menu bar and elsewhere on Yosemite +# defaults write com.apple.universalaccess reduceTransparency -bool true + +# Set interface style +defaults write NSGlobalDomain AppleInterfaceStyle -string "Dark" + +# Set highlight color +defaults write NSGlobalDomain AppleHighlightColor \ + -string "0.968627 0.831373 1.000000 Purple" + +# Set sidebar icon size to medium +# defaults write NSGlobalDomain NSTableViewDefaultSizeMode -int 2 + +# Scroller Paging Behavior +defaults write NSGlobalDomain AppleScrollerPagingBehavior -bool true + +# Always show scrollbars +defaults write NSGlobalDomain AppleShowScrollBars -string "Always" +# Possible values: `WhenScrolling`, `Automatic` and `Always` + +# Disable smooth scrolling +# (Uncomment if you're on an older Mac that messes up the animation) +# defaults write NSGlobalDomain NSScrollAnimationEnabled -bool false + +# Increase window resize speed for Cocoa applications +defaults write NSGlobalDomain NSWindowResizeTime -float 0.001 + +# Expand save panel by default +defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true +defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true + +# Expand print panel by default +defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true +defaults write NSGlobalDomain PMPrintingExpandedStateForPrint2 -bool true + +# Save to disk (not to iCloud) by default +defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false + +# Automatically quit printer app once the print jobs complete +defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true + +# Disable the "Are you sure you want to open this application?" dialog +defaults write com.apple.LaunchServices LSQuarantine -bool false + +# Remove duplicates in the "Open With" menu (also see `lscleanup` alias) +/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister \ + -kill -r -domain local -domain system -domain user + +# Display ASCII control characters using caret notation in standard text views +# Try e.g. `cd /tmp; unidecode "\x{0000}" > cc.txt; open -e cc.txt` +defaults write NSGlobalDomain NSTextShowsControlCharacters -bool true + +# Disable Resume system-wide +# defaults write com.apple.systempreferences \ +# NSQuitAlwaysKeepsWindows -bool false + +# Disable automatic termination of inactive apps +defaults write NSGlobalDomain NSDisableAutomaticTermination -bool true + +# Disable the crash reporter +defaults write com.apple.CrashReporter DialogType -string "none" + +# Set Help Viewer windows to non-floating mode +defaults write com.apple.helpviewer DevMode -bool true + +# Fix for the ancient UTF-8 bug in QuickLook (http://mths.be/bbo) +# Commented out, as this is known to cause problems in various Adobe apps :( +# See https://github.com/mathiasbynens/dotfiles/issues/237 +# echo "0x08000100:0" > ~/.CFUserTextEncoding + +# Reveal IP address, hostname, OS version, etc. when clicking the clock +# in the login window +# sudo defaults write /Library/Preferences/com.apple.loginwindow \ +# AdminHostInfo HostName + +# Restart automatically if the computer freezes +sudo systemsetup -setrestartfreeze on + +# Never go into computer sleep mode +# sudo systemsetup -setcomputersleep Off > /dev/null + +# Check for software updates daily, not just once per week +# defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1 + +# Disable Notification Center and remove the menu bar icon +# launchctl unload \ +# -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist \ +# 2> /dev/null + +# Disable smart quotes as they're annoying when typing code +defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false + +# Disable smart dashes as they're annoying when typing code +defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false + + +################################################################################ +__DESKTOP_defaults= +# @see https://macos-defaults.com/#desktop +################################################################################ + +# Set a custom wallpaper image. `DefaultDesktop.jpg` is already a symlink, and +# all wallpapers are in `/Library/Desktop Pictures/`. The default is `Wave.jpg`. +# rm -rf ~/Library/Application Support/Dock/desktoppicture.db +# sudo rm -rf /System/Library/CoreServices/DefaultDesktop.jpg +# sudo ln -s /path/to/your/image /System/Library/CoreServices/DefaultDesktop.jpg + + +################################################################################ +__ENERGY_SAVING_defaults= +################################################################################ + +# Enable lid wakeup +sudo pmset -a lidwake 1 + +# Restart automatically on power loss +sudo pmset -a autorestart 1 + +# Restart automatically if the computer freezes +sudo systemsetup -setrestartfreeze on + +# Sleep the display after 15 minutes +sudo pmset -a displaysleep 15 + +# Disable machine sleep while charging +sudo pmset -c sleep 0 + +# Set machine sleep to 5 minutes on battery +sudo pmset -b sleep 5 + +# Set standby delay to 24 hours (default is 1 hour) +sudo pmset -a standbydelay 86400 + +# Never go into computer sleep mode +sudo systemsetup -setcomputersleep Off > /dev/null + + +################################################################################ +# SSD-specific tweaks +__SSD_defaults= +################################################################################ + +# Disable local Time Machine snapshots +sudo tmutil disable localsnapshot +# for older versions: +# sudo tmutil disablelocal + +# Hibernation mode +# 0: Disable hibernation (speeds up entering sleep mode) +# 3: Copy RAM to disk so system state can be restored after power failure. +sudo pmset -a hibernatemode 0 + +# Remove the sleep image file to save disk space +[[ -e /private/var/vm/sleepimage ]] && sudo rm /private/var/vm/sleepimage +# Create a zero-byte file instead... +sudo touch /private/var/vm/sleepimage +# ...and make sure it can't be rewritten +sudo chflags uchg /private/var/vm/sleepimage + +# Disable the sudden motion sensor as it's not useful for SSDs +sudo pmset -a sms 0 + + +################################################################################ +# Trackpad, mouse, keyboard, Bluetooth accessories, and input +__TRACKPAD_MOUSE_defaults= +################################################################################ + +# Trackpad: enable tap to click for this user and for the login screen +# defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad \ +# Clicking -bool true +# defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1 +# defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1 + +# Trackpad: map bottom right corner to right-click +# defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad \ +# TrackpadCornerSecondaryClick -int 2 +# defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad \ +# TrackpadRightClick -bool false +# defaults -currentHost write NSGlobalDomain \ +# com.apple.trackpad.trackpadCornerClickBehavior -int 1 +# defaults -currentHost write NSGlobalDomain \ +# com.apple.trackpad.enableSecondaryClick -bool false + +# Trackpad: disable launchpad pinch with thumb and three fingers +# defaults write com.apple.dock showLaunchpadGestureEnabled -int 0 + +# Disable "natural" (Lion-style) scrolling +defaults write NSGlobalDomain com.apple.swipescrolldirection -bool false + +# Increase sound quality for Bluetooth headphones/headsets +# defaults write com.apple.BluetoothAudioAgent \ +# "Apple Bitpool Min (editable)" -int 40 + +# Enable full keyboard access for all controls +# (e.g. enable Tab in modal dialogs) +defaults write NSGlobalDomain AppleKeyboardUIMode -int 3 + +# Use scroll gesture with the Ctrl (^) modifier key to zoom +defaults write com.apple.universalaccess closeViewScrollWheelToggle -bool true +defaults write com.apple.universalaccess HIDScrollZoomModifierMask -int 262144 +# Follow the keyboard focus while zoomed in +defaults write com.apple.universalaccess closeViewZoomFollowsFocus -bool true + +# Disable press-and-hold for keys in favor of key repeat +defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false + +# Set a blazingly fast keyboard repeat rate +defaults write NSGlobalDomain KeyRepeat -int 1 +defaults write NSGlobalDomain InitialKeyRepeat -int 10 + +# Disable auto-correct +defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false + +# Stop iTunes from responding to the keyboard media keys +launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist + + +################################################################################ +__SECURITY_defaults= +################################################################################ + +# Require password immediately after sleep or screen saver begins +defaults write com.apple.screensaver askForPassword -int 1 +defaults write com.apple.screensaver askForPasswordDelay -int 300 # 5min + + +################################################################################ +__SCREEN_CAPTURE_defaults= +# @see https://macos-defaults.com/#screenshots +################################################################################ + +# Save screenshots to the desktop +defaults write com.apple.screencapture location -string "$HOME/Desktop" + +# Save screenshots in PNG format (other options: BMP, GIF, JPG, PDF, TIFF) +defaults write com.apple.screencapture type -string "png" + +# Disable shadow in screenshots +defaults write com.apple.screencapture disable-shadow -bool true + +# Enable subpixel font rendering on non-Apple LCDs +defaults write NSGlobalDomain AppleFontSmoothing -int 1 + +# Enable HiDPI display modes (requires restart) +sudo defaults write /Library/Preferences/com.apple.windowserver \ + DisplayResolutionEnabled -bool true + + +################################################################################ +__FINDER_defaults= +# @see https://macos-defaults.com/#finder +################################################################################ + +# Finder: allow quitting via ⌘ + Q; doing so will also hide desktop icons +# defaults write com.apple.finder QuitMenuItem -bool true + +# Finder: disable window animations and Get Info animations +defaults write com.apple.finder DisableAllAnimations -bool true + +# Set Desktop as the default location for new Finder windows +# For other paths, use `PfLo` and `file:///full/path/here/` +defaults write com.apple.finder NewWindowTarget -string "PfDe" +defaults write com.apple.finder NewWindowTargetPath \ + -string "file://${HOME}/Desktop/" + +# Show icons for hard drives, servers, and removable media on the desktop +defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true +defaults write com.apple.finder ShowHardDrivesOnDesktop -bool true +defaults write com.apple.finder ShowMountedServersOnDesktop -bool true +defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true + +# Finder: show hidden files by default +defaults write com.apple.finder AppleShowAllFiles -bool true + +# Finder: show all filename extensions +defaults write NSGlobalDomain AppleShowAllExtensions -bool true + +# Finder: show status bar +defaults write com.apple.finder ShowStatusBar -bool true + +# Finder: show path bar +defaults write com.apple.finder ShowPathbar -bool true + +# Finder: allow text selection in Quick Look +defaults write com.apple.finder QLEnableTextSelection -bool true + +# Show folders sorted at top, separate from files +defaults write com.apple.finder _FXSortFoldersFirst -bool true + +# Display full POSIX path as Finder window title +defaults write com.apple.finder _FXShowPosixPathInTitle -bool true + +# Always show folder icon before title in the title bar +# defaults write com.apple.universalaccess showWindowTitlebarIcons -bool true + +# Choose the delay of the auto-hidden document-proxy icon +# com.apple.universalaccess showWindowTitlebarIcons must be set to false +# defaults write NSGlobalDomain NSToolbarTitleViewRolloverDelay -float 0.7 + +# When performing a search, search the current folder by default +defaults write com.apple.finder FXDefaultSearchScope -string "SCcf" + +# Disable the warning when changing a file extension +defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false + +# Enable spring loading for directories +defaults write NSGlobalDomain com.apple.springing.enabled -bool true + +# Remove the spring loading delay for directories +defaults write NSGlobalDomain com.apple.springing.delay -float 0 + +# Avoid creating .DS_Store files on network or USB volumes +defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true +defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true + +# Disable disk image verification +defaults write com.apple.frameworks.diskimages skip-verify -bool true +defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true +defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true + +# Automatically open a new Finder window when a volume is mounted +defaults write com.apple.frameworks.diskimages auto-open-ro-root -bool true +defaults write com.apple.frameworks.diskimages auto-open-rw-root -bool true +defaults write com.apple.finder OpenWindowForNewRemovableDisk -bool true + +# Show item info near icons on the desktop and in other icon views +/usr/libexec/PlistBuddy -c \ + "Set :DesktopViewSettings:IconViewSettings:showItemInfo true" \ + ~/Library/Preferences/com.apple.finder.plist +/usr/libexec/PlistBuddy -c \ + "Set :FK_StandardViewSettings:IconViewSettings:showItemInfo true" \ + ~/Library/Preferences/com.apple.finder.plist +/usr/libexec/PlistBuddy -c \ + "Set :StandardViewSettings:IconViewSettings:showItemInfo true" \ + ~/Library/Preferences/com.apple.finder.plist + +# Show item info to the right of the icons on the desktop +/usr/libexec/PlistBuddy -c \ + "Set DesktopViewSettings:IconViewSettings:labelOnBottom false" \ + ~/Library/Preferences/com.apple.finder.plist + +# Enable snap-to-grid for icons on the desktop and in other icon views +/usr/libexec/PlistBuddy -c \ + "Set :DesktopViewSettings:IconViewSettings:arrangeBy grid" \ + ~/Library/Preferences/com.apple.finder.plist +/usr/libexec/PlistBuddy -c \ + "Set :FK_StandardViewSettings:IconViewSettings:arrangeBy grid" \ + ~/Library/Preferences/com.apple.finder.plist +/usr/libexec/PlistBuddy -c \ + "Set :StandardViewSettings:IconViewSettings:arrangeBy grid" \ + ~/Library/Preferences/com.apple.finder.plist + +# Increase grid spacing for icons on the desktop and in other icon views +/usr/libexec/PlistBuddy -c \ + "Set :DesktopViewSettings:IconViewSettings:gridSpacing 48" \ + ~/Library/Preferences/com.apple.finder.plist +/usr/libexec/PlistBuddy -c \ + "Set :FK_StandardViewSettings:IconViewSettings:gridSpacing 48" \ + ~/Library/Preferences/com.apple.finder.plist +/usr/libexec/PlistBuddy -c \ + "Set :StandardViewSettings:IconViewSettings:gridSpacing 48" \ + ~/Library/Preferences/com.apple.finder.plist + +# Increase the size of icons on the desktop and in other icon views +/usr/libexec/PlistBuddy -c \ + "Set :DesktopViewSettings:IconViewSettings:iconSize 36" \ + ~/Library/Preferences/com.apple.finder.plist +/usr/libexec/PlistBuddy -c \ + "Set :FK_StandardViewSettings:IconViewSettings:iconSize 36" \ + ~/Library/Preferences/com.apple.finder.plist +/usr/libexec/PlistBuddy -c \ + "Set :StandardViewSettings:IconViewSettings:iconSize 36" \ + ~/Library/Preferences/com.apple.finder.plist + +# Use list view in all Finder windows by default +# Four-letter codes for the other view modes: `icnv`, `clmv`, `Flwv` +defaults write com.apple.finder FXPreferredViewStyle -string "Nlsv" +defaults write com.apple.finder FXPreferredSearchViewStyle -string "Nlsv" + +# Disable the warning before emptying the Trash +defaults write com.apple.finder WarnOnEmptyTrash -bool false + +# Empty Trash securely by default +# defaults write com.apple.finder EmptyTrashSecurely -bool true + +# Enable AirDrop over Ethernet and on unsupported Macs running Lion +# defaults write com.apple.NetworkBrowser BrowseAllInterfaces -bool true + +# Enable the MacBook Air SuperDrive on any Mac +# sudo nvram boot-args="mbasd=1" + +# Show the ~/Library folder +chflags nohidden ~/Library + +# Show the /Volumes folder +sudo chflags nohidden /Volumes + +# Remove Dropbox's green checkmark icons in Finder +# file=/Applications/Dropbox.app/Contents/Resources/emblem-dropbox-uptodate.icns +# [[ -e "$file" ]] && mv -f "$file" "$file.bak" + +# Expand the following File Info panes: +# "General", "Open with", and "Sharing & Permissions" +defaults write com.apple.finder FXInfoPanesExpanded -dict \ + Comments -bool false \ + General -bool true \ + MetaData -bool true \ + Name -bool false \ + OpenWith -bool true \ + Preview -bool true \ + Privileges -bool true + + +################################################################################ +__DOCK_defaults= +# @see https://macos-defaults.com/#dock +# @see https://developer.apple.com/documentation/devicemanagement/dock +################################################################################ + +# Enable highlight hover effect for the grid view of a stack (Dock) +defaults write com.apple.dock mouse-over-hilite-stack -bool true + +# Set the icon size of Dock items +defaults write com.apple.dock tilesize -int 42 + +# Change minimize/maximize window effect +# defaults write com.apple.dock mineffect -string "scale" + +# Disable icon magnification +defaults write com.apple.dock magnification -bool false + +# Minimize windows into their application's icon +defaults write com.apple.dock minimize-to-application -bool true + +# Enable spring loading for all Dock items +defaults write com.apple.dock enable-spring-load-actions-on-all-items -bool true + +# Show indicator lights for open applications in the Dock +defaults write com.apple.dock show-process-indicators -bool true + +# Don't animate opening applications from the Dock +defaults write com.apple.dock launchanim -bool false + +# Speed up Mission Control animations +defaults write com.apple.dock expose-animation-duration -float 0 + +# Don't group windows by application in Mission Control +# (i.e. use the old Exposé behavior instead) +# defaults write com.apple.dock expose-group-by-app -bool false + +# Disable Dashboard (DEPRECATED) +# defaults write com.apple.dashboard mcx-disabled -bool true + +# Don't show Dashboard as a Space (DEPRECATED) +# defaults write com.apple.dock dashboard-in-overlay -bool true + +# Don't automatically rearrange Spaces based on most recent use +defaults write com.apple.dock mru-spaces -bool false + +# Quick auto-hiding Dock delay +defaults write com.apple.dock autohide-delay -float 0.15 +# Quick animation when hiding/showing the Dock +defaults write com.apple.dock autohide-time-modifier -float 0.15 + +# Automatically hide and show the Dock +defaults write com.apple.dock autohide -bool true + +# Make Dock icons of hidden applications translucent +defaults write com.apple.dock showhidden -bool true + +# Don't show recent applications in Dock +defaults write com.apple.dock show-recents -bool false + +# Disable the Launchpad gesture (pinch with thumb and three fingers) +# defaults write com.apple.dock showLaunchpadGestureEnabled -int 0 + +# Reset Launchpad, but keep the desktop wallpaper intact +# find "${HOME}/Library/Application Support/Dock" \ +# -name "*-*.db" -maxdepth 1 -delete + +# Add iOS & Watch Simulator to Launchpad +sudo ln -sf \ + "/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app" \ + "/Applications/Simulator.app" +sudo ln -sf \ + "/Applications/Xcode.app/Contents/Developer/Applications/Simulator (Watch).app" \ + "/Applications/Simulator (Watch).app" + +# Orientation - where on screen to show the Dock +# options are: right, bottom, left +defaults write com.apple.dock orientation -string "right" + +# Wipe all (default) app icons from the Dock +# This is only really useful when setting up a new Mac, or if you don't use +# the Dock to launch apps. +defaults write com.apple.dock persistent-apps -array + +# Set primary app icons in the Dock +defaults write com.apple.dock persistent-apps -array-add "\ + tile-data\ + \ + bundle-identifier com.apple.launchpad.launcher\ + dock-extra \ + file-data\ + \ + _CFURLString\ + file:///System/Applications/Launchpad.app/\ + _CFURLStringType 15\ + \ + file-label Launchpad\ + file-type 169\ + is-beta \ + \ + tile-type file-tile\ +" + +defaults write com.apple.dock persistent-apps -array-add "\ + tile-data\ + \ + bundle-identifier com.apple.systempreferences\ + dock-extra \ + file-data\ + \ + _CFURLString\ + file:///System/Applications/System%20Preferences.app/\ + _CFURLStringType 15\ + \ + file-label System Preferences\ + file-type 41\ + is-beta \ + \ + tile-type file-tile\ +" + +defaults write com.apple.dock persistent-apps -array-add "\ + tile-data\ + \ + bundle-identifier com.apple.Safari\ + dock-extra \ + file-data\ + \ + _CFURLString\ + file:///Applications/Safari.app/\ + _CFURLStringType 15\ + \ + file-label Safari\ + file-type 41\ + is-beta \ + \ + tile-type file-tile\ +" + +# Add a spacer to the left side of the Dock (where the applications are) +# defaults write com.apple.dock persistent-apps \ +# -array-add '{tile-data={}; tile-type="spacer-tile";}' +# Add a spacer to the right side of the Dock (where the Trash is) +# defaults write com.apple.dock persistent-others \ +# -array-add '{tile-data={}; tile-type="spacer-tile";}' + +# Add 'Applications' list folder to Dock +defaults write com.apple.dock persistent-others -array-add "\ + tile-data\ + \ + arrangement 1\ + displayas 1\ + file-data\ + \ + _CFURLString file:///Applications/\ + _CFURLStringType 15\ + \ + file-label Applications\ + file-type 2\ + is-beta \ + preferreditemsize -1\ + showas 3\ + \ + tile-type directory-tile\ +" + +# Add 'Downloads' list folder to Dock +defaults write com.apple.dock persistent-others -array-add "\ + tile-data\ + \ + arrangement 2\ + displayas 1\ + file-data\ + \ + _CFURLString file://$HOME/Downloads/\ + _CFURLStringType 15\ + \ + file-label Downloads\ + file-type 2\ + is-beta \ + preferreditemsize -1\ + showas 3\ + \ + tile-type directory-tile\ +" + +# Add 'HOME' list folder to Dock +defaults write com.apple.dock persistent-others -array-add "\ + tile-data\ + \ + arrangement 3\ + displayas 1\ + file-data\ + \ + _CFURLString file://$HOME/\ + _CFURLStringType 15\ + \ + file-label $USER\ + file-type 2\ + is-beta \ + preferreditemsize -1\ + showas 3\ + \ + tile-type directory-tile\ +" + +################################################################################ +__HOT_CORNERS_defaults= +################################################################################ + +# Hot corners +# Possible values: +# 0: no-op +# 2: Mission Control +# 3: Show application windows +# 4: Desktop +# 5: Start screen saver +# 6: Disable screen saver +# 7: Dashboard (DEPRECATED) +# 10: Put display to sleep +# 11: Launchpad +# 12: Notification Center +# 13: Lock Screen +# 14: Quick Note +# Top left screen corner → Mission Control +# defaults write com.apple.dock wvous-tl-corner -int 2 +# defaults write com.apple.dock wvous-tl-modifier -int 0 +# Top right screen corner → Desktop +# defaults write com.apple.dock wvous-tr-corner -int 4 +# defaults write com.apple.dock wvous-tr-modifier -int 0 +# Bottom left screen corner → Start screen saver +# defaults write com.apple.dock wvous-bl-corner -int 5 +# defaults write com.apple.dock wvous-bl-modifier -int 0 + +# disable all hot corners +defaults write com.apple.dock wvous-tl-corner -int 0 +defaults write com.apple.dock wvous-tr-corner -int 0 +defaults write com.apple.dock wvous-br-corner -int 0 +defaults write com.apple.dock wvous-bl-corner -int 0 + + +################################################################################ +__SAFARI_WEBKIT_defaults= +# @see https://macos-defaults.com/#safari +################################################################################ + +# Restore Session (Tabs) At Launch +defaults write com.apple.Safari AlwaysRestoreSessionAtLaunch -bool true +defaults write com.apple.Safari \ + ExcludePrivateWindowWhenRestoringSessionAtLaunch -bool true + +# Set search provider to 'DuckDuckGo' +defaults write com.apple.Safari SearchProviderShortName -string "DuckDuckGo" + +# Privacy: don't send search queries to Apple +defaults write com.apple.Safari UniversalSearchEnabled -bool false +defaults write com.apple.Safari SuppressSearchSuggestions -bool true + +# Press Tab to highlight each item on a web page +defaults write com.apple.Safari WebKitTabToLinksPreferenceKey -bool true +defaults write com.apple.Safari \ + com.apple.Safari.ContentPageGroupIdentifier.WebKit2TabsToLinks -bool true + +# Show the full URL in the address bar (note: this still hides the scheme) +defaults write com.apple.Safari ShowFullURLInSmartSearchField -bool true + +# Set Safari's home page to `about:blank` for faster loading +# defaults write com.apple.Safari HomePage -string "about:blank" + +# Prevent Safari from opening 'safe' files automatically after downloading +defaults write com.apple.Safari AutoOpenSafeDownloads -bool false + +# Allow hitting the Backspace key to go to the previous page in history +# defaults write com.apple.Safari \ + # com.apple.Safari.ContentPageGroupIdentifier.WebKit2BackspaceKeyNavigationEnabled \ +# -bool true + +# Hide Safari's bookmarks bar by default +defaults write com.apple.Safari ShowFavoritesBar -bool false + +# Hide Highlights in Favorites +defaults write com.apple.Safari ShowHighlightsInFavorites -bool false + +# Hide Safari's sidebar in Top Sites +defaults write com.apple.Safari ShowSidebarInTopSites -bool false + +# Disable Safari's thumbnail cache for History and Top Sites +defaults write com.apple.Safari DebugSnapshotsUpdatePolicy -int 2 + +# Enable Safari's debug menu +defaults write com.apple.Safari IncludeInternalDebugMenu -bool true + +# Make Safari's search banners default to Contains instead of Starts With +defaults write com.apple.Safari FindOnPageMatchesWordStartsOnly -bool false + +# Remove useless icons from Safari's bookmarks bar +defaults write com.apple.Safari ProxiesInBookmarksBar "()" + +# Enable the Develop menu and the Web Inspector in Safari +defaults write com.apple.Safari IncludeDevelopMenu -bool true +defaults write com.apple.Safari \ + WebKitDeveloperExtrasEnabledPreferenceKey -bool true +defaults write com.apple.Safari \ + com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled \ + -bool true + +# Add a context menu item for showing the Web Inspector in web views +defaults write NSGlobalDomain WebKitDeveloperExtras -bool true + +# Enable continuous spellchecking +defaults write com.apple.Safari WebContinuousSpellCheckingEnabled -bool true +# Disable auto-correct +defaults write com.apple.Safari WebAutomaticSpellingCorrectionEnabled -bool false + +# Disable AutoFill +defaults write com.apple.Safari AutoFillFromAddressBook -bool false +defaults write com.apple.Safari AutoFillPasswords -bool false +defaults write com.apple.Safari AutoFillCreditCardData -bool false +defaults write com.apple.Safari AutoFillMiscellaneousForms -bool false + +# Warn about fraudulent websites +defaults write com.apple.Safari WarnAboutFraudulentWebsites -bool true + +# Disable plug-ins +defaults write com.apple.Safari WebKitPluginsEnabled -bool false +defaults write com.apple.Safari \ + com.apple.Safari.ContentPageGroupIdentifier.WebKit2PluginsEnabled -bool false + +# Disable Java +defaults write com.apple.Safari WebKitJavaEnabled -bool false +defaults write com.apple.Safari \ + com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaEnabled \ + -bool false +defaults write com.apple.Safari \ + com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaEnabledForLocalFiles \ + -bool false + +# Block pop-up windows +defaults write com.apple.Safari \ + WebKitJavaScriptCanOpenWindowsAutomatically -bool false +defaults write com.apple.Safari \ + com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaScriptCanOpenWindowsAutomatically \ + -bool false + +# Disable auto-playing video +# defaults write com.apple.Safari WebKitMediaPlaybackAllowsInline -bool false +# defaults write com.apple.SafariTechnologyPreview WebKitMediaPlaybackAllowsInline -bool false +# defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2AllowsInlineMediaPlayback -bool false +# defaults write com.apple.SafariTechnologyPreview com.apple.Safari.ContentPageGroupIdentifier.WebKit2AllowsInlineMediaPlayback -bool false + +# Enable "Do Not Track" +defaults write com.apple.Safari SendDoNotTrackHTTPHeader -bool true + +# Update extensions automatically +defaults write com.apple.Safari InstallExtensionUpdatesAutomatically -bool true + + +################################################################################ +__MAIL_defaults= +################################################################################ + +# Disable send and reply animations in Mail.app +defaults write com.apple.mail DisableReplyAnimations -bool true +defaults write com.apple.mail DisableSendAnimations -bool true + +# Copy email addresses as `foo@example.com` instead of +# `Foo Bar ` in Mail.app +defaults write com.apple.mail AddressesIncludeNameOnPasteboard -bool false + +# Add the keyboard shortcut ⌘ + Enter to send an email in Mail.app +defaults write com.apple.mail NSUserKeyEquivalents \ + -dict-add "Send" -string "@\\U21a9" + +# Display emails in threaded mode, sorted by date (oldest at the top) +defaults write com.apple.mail DraftsViewerAttributes \ + -dict-add "DisplayInThreadedMode" -string "yes" +defaults write com.apple.mail DraftsViewerAttributes \ + -dict-add "SortedDescending" -string "yes" +defaults write com.apple.mail DraftsViewerAttributes \ + -dict-add "SortOrder" -string "received-date" + +# Disable inline attachments (just show the icons) +defaults write com.apple.mail DisableInlineAttachmentViewing -bool true + +# Disable automatic spell checking +# defaults write com.apple.mail SpellCheckingBehavior \ +# -string "NoSpellCheckingEnabled" + + +################################################################################ +__SPOTLIGHT_defaults= +################################################################################ + +# Hide Spotlight tray-icon (and subsequent helper) +# sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search + +# Disable Spotlight indexing for any volume that gets mounted +# and has not yet been indexed before. +# Use `sudo mdutil -i off "/Volumes/foo"` to stop indexing any volume. +# sudo defaults write /.Spotlight-V100/VolumeConfiguration Exclusions \ +# -array "/Volumes" + +# Change indexing order and disable some search results +# Yosemite-specific search results (remove them for macOS 10.9 or older): +# MENU_DEFINITION +# MENU_CONVERSION +# MENU_EXPRESSION +# MENU_SPOTLIGHT_SUGGESTIONS (send search queries to Apple) +# MENU_WEBSEARCH (send search queries to Apple) +# MENU_OTHER +defaults write com.apple.spotlight orderedItems -array \ + '{"enabled" = 1;"name" = "APPLICATIONS";}' \ + '{"enabled" = 1;"name" = "SYSTEM_PREFS";}' \ + '{"enabled" = 1;"name" = "DIRECTORIES";}' \ + '{"enabled" = 1;"name" = "PDF";}' \ + '{"enabled" = 1;"name" = "FONTS";}' \ + '{"enabled" = 0;"name" = "DOCUMENTS";}' \ + '{"enabled" = 0;"name" = "MESSAGES";}' \ + '{"enabled" = 0;"name" = "CONTACT";}' \ + '{"enabled" = 0;"name" = "EVENT_TODO";}' \ + '{"enabled" = 0;"name" = "IMAGES";}' \ + '{"enabled" = 0;"name" = "BOOKMARKS";}' \ + '{"enabled" = 0;"name" = "MUSIC";}' \ + '{"enabled" = 0;"name" = "MOVIES";}' \ + '{"enabled" = 0;"name" = "PRESENTATIONS";}' \ + '{"enabled" = 0;"name" = "SPREADSHEETS";}' \ + '{"enabled" = 0;"name" = "SOURCE";}' \ + '{"enabled" = 0;"name" = "MENU_DEFINITION";}' \ + '{"enabled" = 0;"name" = "MENU_OTHER";}' \ + '{"enabled" = 0;"name" = "MENU_CONVERSION";}' \ + '{"enabled" = 0;"name" = "MENU_EXPRESSION";}' \ + '{"enabled" = 0;"name" = "MENU_WEBSEARCH";}' \ + '{"enabled" = 0;"name" = "MENU_SPOTLIGHT_SUGGESTIONS";}' +# Load new settings before rebuilding the index +killall mds +# Make sure indexing is enabled for the main volume +sudo mdutil -i on / +# Rebuild the index from scratch +sudo mdutil -E / + + +################################################################################ +__TERMINAL_defaults= +################################################################################ + +# Only use UTF-8 in Terminal.app +defaults write com.apple.terminal StringEncodings -array 4 + +# Use a modified version of the BalanceD theme by default in Terminal.app +CURRENT_PROFILE="$(defaults read com.apple.terminal 'Default Window Settings')" +if [[ "${CURRENT_PROFILE}" != "BalanceD" ]]; then + open "${_macos_init}/BalanceD.terminal" + sleep 1; # Wait a bit to make sure the theme is loaded + defaults write com.apple.terminal \ + 'Default Window Settings' -string "BalanceD" + defaults write com.apple.terminal \ + 'Startup Window Settings' -string "BalanceD" +fi + +# Enable "focus follows mouse" for Terminal.app and all X11 apps +# i.e. hover over a window and start typing in it without clicking first +# defaults write com.apple.terminal FocusFollowsMouse -bool true +# defaults write org.x.X11 wm_ffm -bool true + +# Enable Secure Keyboard Entry in Terminal.app +# See: https://security.stackexchange.com/a/47786/8918 +# defaults write com.apple.terminal SecureKeyboardEntry -bool true + +# Disable the annoying line marks +# defaults write com.apple.Terminal ShowLineMarks -int 0 + + +################################################################################ +__ITERM_defaults= +################################################################################ + +# Install the BalanceD theme for iTerm +open "${_macos_init}/BalanceD.itermcolors" + +# Don’t display the annoying prompt when quitting iTerm +defaults write com.googlecode.iterm2 PromptOnQuit -bool false + + +################################################################################ +__VSCODE_settings="Library/Application Support/Code/User/settings.json" +################################################################################ + +# Copy VS Code Settings +if [[ -f "${_macos_init}/${__VSCODE_settings}" ]]; then + cp -af "${_macos_init}/${__VSCODE_settings}" "${HOME}/${__VSCODE_settings}" +fi + + +################################################################################ +__TIME_MACHINE_defaults= +################################################################################ + +# Prevent Time Machine from prompting to use new hard drives as backup volume +defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true + +# Disable local Time Machine backups +hash tmutil &> /dev/null && sudo tmutil disablelocal + + +################################################################################ +__ACTIVITY_MONITOR_defaults= +################################################################################ + +# Show the main window when launching Activity Monitor +defaults write com.apple.ActivityMonitor OpenMainWindow -bool true + +# Visualize CPU usage in the Activity Monitor Dock icon +defaults write com.apple.ActivityMonitor IconType -int 5 + +# Show all processes in Activity Monitor +defaults write com.apple.ActivityMonitor ShowCategory -int 0 + +# Sort Activity Monitor results by CPU usage +defaults write com.apple.ActivityMonitor SortColumn -string "CPUUsage" +defaults write com.apple.ActivityMonitor SortDirection -int 0 + + +################################################################################ +# Address Book, TextEdit, and Disk Utility +__ADDRESS_TEXT_DISK_defaults= +################################################################################ + +# Enable the debug menu in Address Book +defaults write com.apple.addressbook ABShowDebugMenu -bool true + +# Use plain text mode for new TextEdit documents +defaults write com.apple.TextEdit RichText -int 0 +# Open and save files as UTF-8 in TextEdit +defaults write com.apple.TextEdit PlainTextEncoding -int 4 +defaults write com.apple.TextEdit PlainTextEncodingForWrite -int 4 + +# Enable the debug menu in Disk Utility +defaults write com.apple.DiskUtility DUDebugMenuEnabled -bool true +defaults write com.apple.DiskUtility advanced-image-options -bool true + +# Auto-play videos when opened with QuickTime Player +defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen -bool true + + +################################################################################ +__MAC_APP_STORE_defaults= +################################################################################ + +# Enable the WebKit Developer Tools in the Mac App Store +defaults write com.apple.appstore WebKitDeveloperExtras -bool true + +# Enable Debug Menu in the Mac App Store +defaults write com.apple.appstore ShowDebugMenu -bool true + +# Enable the automatic update check +defaults write com.apple.SoftwareUpdate AutomaticCheckEnabled -bool true + +# Check for software updates daily, not just once per week +# defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1 + +# Download newly available updates in background +# defaults write com.apple.SoftwareUpdate AutomaticDownload -int 1 + +# Install System data files & security updates +# defaults write com.apple.SoftwareUpdate CriticalUpdateInstall -int 1 + +# Automatically download apps purchased on other Macs +# defaults write com.apple.SoftwareUpdate ConfigDataInstall -int 1 + +# Turn on app auto-update +# defaults write com.apple.commerce AutoUpdate -bool true + +# Allow the App Store to reboot machine on macOS updates +# defaults write com.apple.commerce AutoUpdateRestartRequired -bool true + + +################################################################################ +__PHOTOS_defaults= +################################################################################ + +# Prevent Photos from opening automatically when devices are plugged in +defaults -currentHost write com.apple.ImageCapture disableHotPlug -bool true + + +################################################################################ +__MESSAGES_defaults= +################################################################################ + +# Disable automatic emoji substitution (i.e. use plain text smileys) +defaults write com.apple.messageshelper.MessageController SOInputLineSettings \ + -dict-add "automaticEmojiSubstitutionEnablediMessage" -bool false + +# Disable smart quotes as it's annoying for messages that contain code +defaults write com.apple.messageshelper.MessageController SOInputLineSettings \ + -dict-add "automaticQuoteSubstitutionEnabled" -bool false + +# Disable continuous spell checking +defaults write com.apple.messageshelper.MessageController SOInputLineSettings \ + -dict-add "continuousSpellCheckingEnabled" -bool false + + +################################################################################ +__SIZEUP_defaults= +################################################################################ + +# Start SizeUp at login +# defaults write com.irradiatedsoftware.SizeUp StartAtLogin -bool true + +# Don’t show the preferences window on next start +# defaults write com.irradiatedsoftware.SizeUp ShowPrefsOnNextStart -bool false + + +################################################################################ +# Google Chrome & Google Chrome Canary +__GOOGLE_CHROME_defaults= +################################################################################ + +# Allow installing user scripts via GitHub Gist or Userscripts.org +# defaults write com.google.Chrome ExtensionInstallSources \ +# -array "https://gist.githubusercontent.com/" "http://userscripts.org/*" +# defaults write com.google.Chrome.canary ExtensionInstallSources \ +# -array "https://gist.githubusercontent.com/" "http://userscripts.org/*" + +# Disable the all too sensitive backswipe on trackpads +defaults write com.google.Chrome AppleEnableSwipeNavigateWithScrolls -bool false +defaults write com.google.Chrome.canary \ + AppleEnableSwipeNavigateWithScrolls -bool false + +# Disable the all too sensitive backswipe on Magic Mouse +defaults write com.google.Chrome \ + AppleEnableMouseSwipeNavigateWithScrolls -bool false +defaults write com.google.Chrome.canary \ + AppleEnableMouseSwipeNavigateWithScrolls -bool false + +# Use the system-native print preview dialog +defaults write com.google.Chrome DisablePrintPreview -bool true +defaults write com.google.Chrome.canary DisablePrintPreview -bool true + +# Expand the print dialog by default +defaults write com.google.Chrome PMPrintingExpandedStateForPrint2 -bool true +defaults write com.google.Chrome.canary \ + PMPrintingExpandedStateForPrint2 -bool true + + +################################################################################ +# Google Update Stopper +__GOOGLE_UPDATE_defaults="Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/Resources/install.py" +################################################################################ + +# Remove global update-agent +[[ -f "/$__GOOGLE_UPDATE_defaults" ]] && \ + sudo "/$__GOOGLE_UPDATE_defaults" --uninstall +# Remove local update-agent +[[ -f "$HOME/$__GOOGLE_UPDATE_defaults" ]] && \ + sudo "$HOME/$__GOOGLE_UPDATE_defaults" --uninstall +# Void the update-checker +defaults write com.google.Keystone.Agent checkInterval 0 + + +################################################################################ +# Keep additonal commands separate so diff in future is easy +__additional_defaults= +################################################################################ + +# Menu bar: Set date and time format e.g. Sun 11 Aug 16:55 +# defaults write com.apple.menuextra.clock DateFormat -string "E d MMM HH:mm" + +# Menu bar: Set date and time format e.g. Sun Aug 11 4:55 pm +defaults write com.apple.menuextra.clock DateFormat -string "EEE MMM d h:mm a" + + +################################################################################ +# Kill affected applications +################################################################################ + +_kill_apps=( + "Activity Monitor" + "Address Book" + "Calendar" + "cfprefsd" + "Contacts" + "Dock" + "Finder" + "Google Chrome Canary" + "Google Chrome" + "Mail" + "Messages" + "Safari" + "SizeUp" + "SystemUIServer" + # "Terminal" +) +for app in "${_kill_apps[@]}"; do + killall "$app" > /dev/null 2>&1 +done +echo "Done. Note that some changes require a logout/restart to take effect." diff --git a/maven/install.sh b/maven/install.sh deleted file mode 100755 index 4ea20e2..0000000 --- a/maven/install.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -# -# Install Maven - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "maven" &> /dev/null; then - sh_info "Installing Maven..." - if type "brew" &> /dev/null; then - brew install maven - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install maven - elif type "yum" &> /dev/null; then - sudo yum install maven - fi -fi - -if type "maven" &> /dev/null; then - sh_success "$(maven --version) installed: $(command -v maven)" -fi diff --git a/mysql/install.sh b/mysql/install.sh deleted file mode 100755 index 2ed9646..0000000 --- a/mysql/install.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -# -# Install MySQL. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "mysql" &> /dev/null || [[ "$OSTYPE" == "darwin"* ]]; then - sh_info "Installing MySQL..." - if type "brew" &> /dev/null; then - brew install mysql - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install mysql - elif type "yum" &> /dev/null; then - sudo yum install mysql - fi -fi - -if type "mysql" &> /dev/null; then - sh_success "$(mysql --version) installed: $(command -v mysql)" -fi diff --git a/mysql/path.zsh b/mysql/path.zsh deleted file mode 100755 index 9cf1f11..0000000 --- a/mysql/path.zsh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -# MySQL-manual: -if type "brew" &> /dev/null && [[ -d "$(brew --prefix)/mysql/man" ]]; then - export MANPATH="$(brew --prefix)/mysql/man:$MANPATH" -fi diff --git a/node/aliases.zsh b/node/aliases.zsh deleted file mode 100755 index b42d6f1..0000000 --- a/node/aliases.zsh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash -# -# Node/NPM Aliases - -alias node-update="brew update node" -alias npm-update="(cd; npm cache clean -g -f; node-update; npm install -g npm@latest; npm update -g; npm cache clean -g -f)" - -alias npmlistg="npm list -g --depth=0 2>/dev/null" -alias npmlist="npm list --depth=0 2>/dev/null" diff --git a/node/install.sh b/node/install.sh deleted file mode 100755 index ec32f91..0000000 --- a/node/install.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# -# Install Node.js - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -[[ -z "${NODE_VERSION:-}" ]] && NODE_VERSION=12 - -if ! type "node" &> /dev/null; then - sh_info "Installing Node.js..." - if type "brew" &> /dev/null; then - brew install node - elif type "apt-get" &> /dev/null; then - curl -sL "https://deb.nodesource.com/setup_${NODE_VERSION}.x" | sudo -E bash - - sudo apt-get -y install nodejs - sudo apt-get -y install build-essential - elif type "yum" &> /dev/null; then - curl --silent --location "https://rpm.nodesource.com/setup" | bash - - sudo yum install nodejs npm - sudo yum install gcc-c++ make - fi - sh_info "Adding ~/.node/bin to PATH..." - . "$( cd "${BASH_SOURCE%/*}" && pwd )/path.zsh" -fi - -if type "node" &> /dev/null; then - sh_success "Node.js $(node --version) installed: $(command -v node)" -fi - -if type "npm" &> /dev/null; then - npm install npm --global - sh_success "npm $(npm --version) installed: $(command -v npm)" -fi diff --git a/node/path.zsh b/node/path.zsh deleted file mode 100755 index 36ac4b1..0000000 --- a/node/path.zsh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -# .node bin: -if [[ -d "$HOME/.node/bin" ]]; then - export PATH="$HOME/.node/bin:$PATH" -fi - -# .node node_modules: -if [[ -d "$HOME/.node/lib/node_modules" ]]; then - export NODE_PATH="$HOME/.node/lib/node_modules:$NODE_PATH" -fi - -# If Homebrew has NOT installed npm, you should supplement -# your NODE_PATH with the npm module folder: -# $(brew --prefix)/lib/node_modules -if type "brew" &> /dev/null && [[ "$(brew ls --versions node)" ]]; then - export NODE_PATH="$(brew --prefix)/lib/node_modules:$NODE_PATH" -fi diff --git a/node/uninstall.sh b/node/uninstall.sh deleted file mode 100755 index b64e566..0000000 --- a/node/uninstall.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env bash -# -# Uninstall Node.js, npm and all node_modules - -echo - -# Remove global node_modules -{ - sudo rm -Rf \ - "$(brew --prefix)/include/node_modules" \ - "$(brew --prefix)/include/node" \ - "$(brew --prefix)/lib/node_modules" \ - "$(brew --prefix)/lib/node" -} -echo "~> Removed global node_modules." -echo - -# Uninstall npm -if test "$(command -v npm)"; then - npm uninstall -g npm - echo "~> Uninstalled npm." - echo -fi - -# Uninstall Node.js -if [[ "$(brew ls --versions node)" ]]; then - brew uninstall node - brew cleanup - echo "~> Uninstalled Node.js." - echo -fi - -# Remove all files for Node/modules -{ - sudo rm -Rf \ - "/opt/local/bin/node" \ - "/opt/local/include/node" \ - "/opt/local/lib/node_modules" - "$(brew --prefix)/bin/node" \ - "$(brew --prefix)/bin/npm" \ - "$(brew --prefix)/lib/dtrace/node.d" \ - "$(brew --prefix)/share/man/man1/node.1" \ - "$HOME/.node-gyp" \ - "$HOME/.node" \ - "$HOME/.npm" \ - "$HOME/include/node_modules" \ - "$HOME/include/node" \ - "$HOME/lib/node_modules" \ - "$HOME/lib/node" \ - "$HOME/node_modules" \ - "$HOME/node" -} < /dev/null 2> /dev/null - -echo "~> Removed all files for Node/modules." -echo -echo "\033[1;32m~> All traces of Node.js, npm, and modules have been removed!\033[0m" -echo diff --git a/osx/completion.bash b/osx/completion.bash deleted file mode 100644 index 6a35177..0000000 --- a/osx/completion.bash +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# -# OS X tab completion for Bash - -# OS-CONDITIONALS -if [[ "$OSTYPE" == "darwin"* ]]; then - # Add tab completion for `defaults read|write NSGlobalDomain` - # You could just use `-g` instead, but I like being explicit - complete -W "NSGlobalDomain" defaults - # Add `killall` tab completion for common apps - complete -o "nospace" -W "Contacts Calendar Dock Finder Mail Safari iTunes SystemUIServer Terminal Twitter" killall -fi diff --git a/osx/init/Fonts/Menlo-Powerline.otf b/osx/init/Fonts/Menlo-Powerline.otf deleted file mode 100644 index 417a3fa..0000000 Binary files a/osx/init/Fonts/Menlo-Powerline.otf and /dev/null differ diff --git a/osx/init/Library/Application Support/Sublime Text 3/Packages/User/Themes/Balance.tmTheme b/osx/init/Library/Application Support/Sublime Text 3/Packages/User/Themes/Balance.tmTheme deleted file mode 100644 index 93e36ec..0000000 --- a/osx/init/Library/Application Support/Sublime Text 3/Packages/User/Themes/Balance.tmTheme +++ /dev/null @@ -1,732 +0,0 @@ - - - - - authorSean Trane - nameBalance - settings - - - settings - - background #FFFFFF - caret #A7A7A7 - foreground #444444 - invisibles #000000CC - lineHighlight #00000006 - selection #00000011 - selectionBorder #00000033 - inactiveSelection #00000011 - findHighlight #000000CC - findHighlightForeground#FFFFFF - - - - name Embedded Source - scope string source, text source - settings - - background - - - - name Comments - scope comment, comment punctuation - settings - - foreground #999999 - - - - name Variables - scope variable, support.other.variable - settings - - foreground #660099 - - - - name Variables: Punctuation - scope variable punctuation - settings - - foreground #330066 - - - - name Numbers - scope constant.numeric - settings - - foreground #0066FF - - - - name Constants - scope constant.language, support.constant, constant.character - settings - - foreground #0066FF - - - - name Keywords - scope keyword - settings - - foreground #CC0000 - - - - name Operators - scope keyword.operator - settings - - fontWeight bold - foreground #000000 - - - - name Special Methods - scope keyword.other.special-method - settings - - foreground #663333 - - - - name Storage - scope storage, storage.type - settings - - foreground #990000 - - - - name Functions - scope entity.name.function, meta.function-call, support.function - settings - - foreground #CC3300 - - - - name Classes - scope entity.name.class, entity.name.type.class - settings - - foreground #CC3300 - - - - name Classes: Inherited - scope entity.other.inherited-class - settings - - foreground #CC3300 - - - - name Support - scope support.type, support.class - settings - - fontStyle - foreground #CC6600 - - - - name ----------------------------------- - settings - - - name Tag Attribute - scope variable.parameter - settings - - foreground #660000 - - - - name Embedded Punctuation - scope punctuation.section.embedded - settings - - foreground #660000 - - - - name Units of Measure - scope keyword.other.unit - settings - - foreground #0066FF - - - - name Misc - scope constant.other.color - settings - - foreground #0066FF - - - - name Block Level - scope meta.block-level - settings - - background #999999 - - - - name ----------------------------------- - settings - - - name Invalid - scope invalid - settings - - foreground #000000 - - - - name Invalid: Deprecated - scope invalid.deprecated - settings - - fontStyle italic underline - foreground #999999 - - - - name Invalid: Illegal - scope invalid.illegal - settings - - background #00000011 - foreground #000000 - - - - name ----------------------------------- - settings - - - name Strings - scope string - settings - - foreground #009900 - - - - name Strings: Punctuation - scope string punctuation - settings - - foreground #00CC00 - - - - name Strings: Variables - scope string variable - settings - - foreground #660099 - - - - name Strings: Constants/Symbols - scope string constant, constant.other.symbol - settings - - foreground #0066FF - - - - name Strings: Links - scope string.other.link, markup.underline.link.php, keyword.other.phpdoc.php, support.function.url.css - settings - - fontStyle underline - foreground #3366CC - - - - name Strings: Escape Sequences - scope constant.character.escape - settings - - foreground #0066FF - - - - name Strings: Regular Expressions - scope string.regexp - settings - - foreground #009900 - - - - name Strings: RegEx Escapes - scope string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition - settings - - foreground #0066FF - - - - name ----------------------------------- - settings - - - name Doctype/XML Processing - scope meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string - settings - - foreground #AAAAAA - - - - name Declaration Tags - scope declaration.tag, declaration.tag entity - settings - - foreground #441100 - - - - name Declaration Tags: Inline - scope declaration.tag.inline, declaration.tag.inline entity - settings - - foreground #441100 - - - - name Source Tags - scope source entity.name.tag, source entity.other.attribute-name - settings - - foreground #663300 - - - - name Meta Tags - scope meta.tag, meta.tag entity - settings - - foreground - - - - name Meta Tags: Inline - scope meta.tag.inline, meta.tag.inline entity - settings - - foreground - - - - name ----------------------------------- - settings - - - name HTML: Tags - scope entity.name.tag - settings - - foreground #a67c52 - - - - name HTML: Tag Punctuation - scope punctuation.definition.tag - settings - - foreground #c7b299 - - - - name HTML: Attribute Punctuation - scope meta.tag string punctuation - settings - - foreground #754c24 - - - - name HTML: Attribute Names - scope entity.other.attribute-name - settings - - foreground #8c6239 - - - - name HTML: Attribute Values - scope meta.tag string.quoted, meta.tag string.quoted constant.character.entity - settings - - foreground #009900 - - - - name HTML: Entities - scope constant.character.entity - settings - - foreground #0066CC - - - - name ----------------------------------- - settings - - - name CSS: Tag Names - scope meta.selector.css entity.name.tag, keyword.control.html.elements - settings - - foreground #336699 - - - - name CSS: Pseudo - scope meta.selector.css entity.other.attribute-name.pseudo-element, meta.selector.css entity.other.attribute-name.pseudo-class, support.function.misc.css - settings - - foreground #003366 - - - - name CSS: Selectors - scope meta.selector.css entity.other.attribute-name.id, meta.selector.css entity.other.attribute-name.class, meta.selector.css entity punctuation, entity.other.attribute-name.class - settings - - foreground #003366 - - - - name CSS: Property Names - scope meta.property-name, support.type.property-name - settings - - foreground #6699CC - - - - name CSS: Property Values - scope meta.property-value constant.numeric, meta.property-value constant, meta.property-value keyword, meta.selector.css string, meta.attribute-selector.css string, keyword.unit.css - settings - - foreground #0066FF - - - - name CSS: URLs - scope variable.parameter.misc.css - settings - - fontStyle underline - foreground #000000 - - - - name CSS: at-rule - scope meta.at-rule - settings - - foreground #FFFF66 - - - - name CSS: Additional Constants - scope meta.property-value support.constant.named-color.css, meta.property-value constant - settings - - foreground #DDAADD - - - - name CSS: Colors - scope meta.property-value support.constant.color, meta.property-value support.constant.other - settings - - foreground #0066FF - - - - name CSS: Constructor Argument - scope meta.constructor.argument.css - settings - - foreground #003300 - - - - name ----------------------------------- - settings - - - name - less.mixin - scope - entity.other.less.mixin - settings - - foreground - #98E124 - - - - name - less.variable - scope - variable.declaration.less - settings - - foreground - #660099 - - - - name ----------------------------------- - settings - - - name JavaScript: Classes - scope meta.class.js, support.class.js, support.function.event-handler.js, entity.name.type.instance.js - settings - - foreground #CC3366 - - - - name JavaScript: Constants - scope support.constant.js, support.constant.dom.js, constant.numeric.js, constant.character.escape.js, constant.language.js, constant.language.boolean.true.js, constant.language.boolean.false.js - settings - - foreground #CC6699 - - - - name JavaScript: Keywords - scope keyword.control.js, keyword.other.js - settings - - foreground #6600CC - - - - name JavaScript: Functions - scope meta.function.js, meta.function.prototype.js, support.function.js, support.function.dom.js, entity.name.function.js - settings - - foreground #FF3399 - - - - name JavaScript: Operators - scope keyword.operator.js, keyword.operator.new.js - settings - - foreground #9933CC - - - - name JavaScript: Storage - scope storage.type.function.js, storage.type.js, storage.modifier.js - settings - - foreground #B21262 - - - - name JavaScript: Punctuation - scope punctuation.terminator.statement.js, meta.delimiter.object.comma.js, meta.delimiter.method.period.js, meta.brace.curly.js, meta.brace.round.js, meta.brace.square.js - settings - - foreground #CC6699 - - - - name JavaScript: Variables - scope variable.parameter.function.js, variable.language.js - settings - - foreground #EE22EE - - - - name JavaScript: Strings - scope string.quoted.single.js, string.quoted.double.js, string.regexp.js, punctuation.definition.string.begin.js, punctuation.definition.string.end.js, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js - settings - - foreground #666199 - - - - name ----------------------------------- - settings - - - name Markup: Changed - scope markup.changed - settings - - background #00000033 - foreground #FFFFFF - - - - name Markup: Deletion - scope markup.deleted - settings - - foreground #444444 - - - - name Markup: Emphasis - scope markup.italic - settings - - fontStyle italic - - - - name Markup: Error - scope markup.error - settings - - foreground #990000 - - - - name Markup: Insertion - scope markup.inserted - settings - - fontStyle underline - - - - name Markup: Output - scope markup.output, markup.raw - settings - - background #444444 - foreground #EEEEEE - - - - name Markup: Prompt - scope markup.prompt - settings - - foreground #FFFFFF - - - - name Markup: List - scope markup.list - settings - - foreground #FFCC66 - - - - name Markup: Heading - scope markup.heading - settings - - foreground #FFCC66 - - - - name Markup: Strong - scope markup.strong - settings - - fontWeight bold - - - - name Markup: Traceback - scope markup.traceback - settings - - fontStyle italic - - - - name Markup: Underline - scope markup.underline - settings - - fontStyle underline - - - - name ----------------------------------- - settings - - - name Extra: Diff Range - scope meta.diff.range, meta.diff.index, meta.separator - settings - - background #000000 - fontStyle italic - foreground #F8F8F8 - - - - name Extra: Diff From - scope meta.diff.header.from-file - settings - - background #000000 - foreground #CCCCCC - - - - name Extra: Diff To - scope meta.diff.header.to-file - settings - - background #000000 - foreground #F8F8F8 - - - - name ----------------------------------- - settings - - - name C/C++ Preprocessor Line - scope meta.preprocessor.c - settings - - foreground #999999 - - - - name C/C++ Preprocessor Directive - scope meta.preprocessor.c keyword - settings - - foreground #CC3333 - - - - name ----------------------------------- - settings - - - - diff --git a/osx/init/Library/Application Support/Sublime Text 3/Packages/User/Themes/BalanceD.tmTheme b/osx/init/Library/Application Support/Sublime Text 3/Packages/User/Themes/BalanceD.tmTheme deleted file mode 100644 index 33b21d3..0000000 --- a/osx/init/Library/Application Support/Sublime Text 3/Packages/User/Themes/BalanceD.tmTheme +++ /dev/null @@ -1,732 +0,0 @@ - - - - - authorSean Trane - nameBalanceD - settings - - - settings - - background #222222 - caret #A7A7A7 - foreground #F8F8F8 - invisibles #FFFFFFCC - lineHighlight #00000033 - selection #00000066 - selectionBorder #33333366 - inactiveSelection #00000099 - findHighlight #FFFFCCFF - findHighlightForeground#000000 - - - - name Embedded Source - scope string source, text source - settings - - background #00000011 - - - - name Comments - scope comment, comment punctuation - settings - - background #FFFFFF02 - foreground #666666 - - - - name Variables - scope variable, support.other.variable - settings - - foreground #DBAF00 - - - - name Variables: Punctuation - scope variable punctuation - settings - - foreground #FFDD55 - - - - name Numbers - scope constant.numeric - settings - - foreground #A3D1FF - - - - name Constants - scope constant.language, support.constant, constant.character - settings - - foreground #A3D1FF - - - - name Keywords - scope keyword - settings - - foreground #CC3333 - - - - name Operators - scope keyword.operator - settings - - foreground #FFFFFF - - - - name Special Methods - scope keyword.other.special-method - settings - - foreground #996666 - - - - name Storage - scope storage, storage.type - settings - - foreground #D9342B - - - - name Functions - scope entity.name.function, meta.function-call, support.function - settings - - foreground #CC6633 - - - - name Classes - scope entity.name.class, entity.name.type.class - settings - - foreground #CC6633 - - - - name Classes: Inherited - scope entity.other.inherited-class - settings - - foreground #CC6633 - - - - name Support - scope support.type, support.class - settings - - fontStyle - foreground #E3832D - - - - name ----------------------------------- - settings - - - name Tag Attribute - scope variable.parameter - settings - - foreground #FFFFFF - - - - name Embedded Punctuation - scope punctuation.section.embedded - settings - - foreground #999999 - - - - name Units of Measure - scope keyword.other.unit - settings - - foreground #A3D1FF - - - - name Misc - scope constant.other.color - settings - - foreground #A3D1FF - - - - name Block Level - scope meta.block-level - settings - - background #00000044 - - - - name ----------------------------------- - settings - - - name Invalid - scope invalid - settings - - foreground #FFFFFF - - - - name Invalid: Deprecated - scope invalid.deprecated - settings - - fontStyle italic underline - foreground #999999 - - - - name Invalid: Illegal - scope invalid.illegal - settings - - background #000000FF - foreground #FFFFFF - - - - name ----------------------------------- - settings - - - name Strings - scope string - settings - - foreground #99CC66 - - - - name Strings: Punctuation - scope string punctuation - settings - - foreground #99CC33 - - - - name Strings: Variables - scope string variable - settings - - foreground #FFDD55 - - - - name Strings: Constants/Symbols - scope string constant, constant.other.symbol - settings - - foreground #77AADD - - - - name Strings: Links - scope string.other.link, markup.underline.link.php, keyword.other.phpdoc.php, support.function.url.css - settings - - fontStyle underline - foreground #3366CC - - - - name Strings: Escape Sequences - scope constant.character.escape - settings - - foreground #77AADD - - - - name Strings: Regular Expressions - scope string.regexp - settings - - foreground #99CC66 - - - - name Strings: RegEx Escapes - scope string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition - settings - - foreground #CC6633 - - - - name ----------------------------------- - settings - - - name Doctype/XML Processing - scope meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string - settings - - foreground #666666 - - - - name Declaration Tags - scope declaration.tag, declaration.tag entity - settings - - foreground #FFCC66 - - - - name Declaration Tags: Inline - scope declaration.tag.inline, declaration.tag.inline entity - settings - - foreground #AC885B - - - - name Source Tags - scope source entity.name.tag, source entity.other.attribute-name - settings - - foreground #FFCC66 - - - - name Meta Tags - scope meta.tag, meta.tag entity - settings - - foreground - - - - name Meta Tags: Inline - scope meta.tag.inline, meta.tag.inline entity - settings - - foreground - - - - name ----------------------------------- - settings - - - name HTML: Tags - scope entity.name.tag - settings - - foreground #aa9786 - - - - name HTML: Tag Punctuation - scope punctuation.definition.tag - settings - - foreground #736357 - - - - name HTML: Attribute Punctuation - scope meta.tag string punctuation - settings - - foreground #c7b299 - - - - name HTML: Attribute Names - scope entity.other.attribute-name - settings - - foreground #c7b299 - - - - name HTML: Attribute Values - scope meta.tag string.quoted, meta.tag string.quoted constant.character.entity - settings - - foreground #99CC66 - - - - name HTML: Entities - scope constant.character.entity - settings - - foreground #6699CC - - - - name ----------------------------------- - settings - - - name CSS: Tag Names - scope meta.selector.css entity.name.tag, keyword.control.html.elements - settings - - foreground #996699 - - - - name CSS: Pseudo - scope meta.selector.css entity.other.attribute-name.pseudo-element, meta.selector.css entity.other.attribute-name.pseudo-class, support.function.misc.css - settings - - foreground #996699 - - - - name CSS: Selectors - scope meta.selector.css entity.other.attribute-name.id, meta.selector.css entity.other.attribute-name.class, meta.selector.css entity punctuation, entity.other.attribute-name.class - settings - - foreground #FF99FF - - - - name CSS: Property Names - scope meta.property-name, support.type.property-name - settings - - foreground #6699CC - - - - name CSS: Property Values - scope meta.property-value constant.numeric, meta.property-value constant, meta.property-value keyword, meta.selector.css string, meta.attribute-selector.css string, keyword.unit.css - settings - - foreground #A3D1FF - - - - name CSS: URLs - scope variable.parameter.misc.css - settings - - fontStyle underline - foreground #FFFFFF - - - - name CSS: at-rule - scope meta.at-rule - settings - - foreground #FFFF66 - - - - name CSS: Additional Constants - scope meta.property-value support.constant.named-color.css, meta.property-value constant - settings - - foreground #DDAADD - - - - name CSS: Colors - scope meta.property-value support.constant.color, meta.property-value support.constant.other - settings - - foreground #FFFFFF - - - - name CSS: Constructor Argument - scope meta.constructor.argument.css - settings - - foreground #8F9D6A - - - - name ----------------------------------- - settings - - - name - less.mixin - scope - entity.other.less.mixin - settings - - foreground - #98E124 - - - - name - less.variable - scope - variable.declaration.less - settings - - foreground - #DBAF00 - - - - name ----------------------------------- - settings - - - name JavaScript: Classes - scope meta.class.js, support.class.js, support.function.event-handler.js, entity.name.type.instance.js - settings - - foreground #CC3366 - - - - name JavaScript: Constants - scope support.constant.js, support.constant.dom.js, constant.numeric.js, constant.character.escape.js, constant.language.js, constant.language.boolean.true.js, constant.language.boolean.false.js - settings - - foreground #FF99CC - - - - name JavaScript: Keywords - scope keyword.control.js, keyword.other.js - settings - - foreground #FF66FF - - - - name JavaScript: Functions - scope meta.function.js, meta.function.prototype.js, support.function.js, support.function.dom.js, entity.name.function.js - settings - - foreground #FF3399 - - - - name JavaScript: Operators - scope keyword.operator.js, keyword.operator.new.js - settings - - foreground #FFDD55 - - - - name JavaScript: Storage - scope storage.type.function.js, storage.type.js, storage.modifier.js - settings - - foreground #B21262 - - - - name JavaScript: Punctuation - scope punctuation.terminator.statement.js, meta.delimiter.object.comma.js, meta.delimiter.method.period.js, meta.brace.curly.js, meta.brace.round.js, meta.brace.square.js - settings - - foreground #FF99FF - - - - name JavaScript: Variables - scope variable.parameter.function.js, variable.language.js - settings - - foreground #DBAF00 - - - - name JavaScript: Strings - scope string.quoted.single.js, string.quoted.double.js, string.regexp.js, punctuation.definition.string.begin.js, punctuation.definition.string.end.js, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js - settings - - foreground #9995bd - - - - name ----------------------------------- - settings - - - name Markup: Changed - scope markup.changed - settings - - background #00000033 - foreground #FFFFFF - - - - name Markup: Deletion - scope markup.deleted - settings - - foreground #444444 - - - - name Markup: Emphasis - scope markup.italic - settings - - fontStyle italic - - - - name Markup: Error - scope markup.error - settings - - foreground #990000 - - - - name Markup: Insertion - scope markup.inserted - settings - - fontStyle underline - - - - name Markup: Output - scope markup.output, markup.raw - settings - - background #444444 - foreground #EEEEEE - - - - name Markup: Prompt - scope markup.prompt - settings - - foreground #FFFFFF - - - - name Markup: List - scope markup.list - settings - - foreground #FFCC66 - - - - name Markup: Heading - scope markup.heading - settings - - foreground #FFCC66 - - - - name Markup: Strong - scope markup.strong - settings - - fontStyle bold - - - - name Markup: Traceback - scope markup.traceback - settings - - fontStyle italic - - - - name Markup: Underline - scope markup.underline - settings - - fontStyle underline - - - - name ----------------------------------- - settings - - - name Extra: Diff Range - scope meta.diff.range, meta.diff.index, meta.separator - settings - - background #000000 - fontStyle italic - foreground #F8F8F8 - - - - name Extra: Diff From - scope meta.diff.header.from-file - settings - - background #000000 - foreground #CCCCCC - - - - name Extra: Diff To - scope meta.diff.header.to-file - settings - - background #000000 - foreground #F8F8F8 - - - - name ----------------------------------- - settings - - - name C/C++ Preprocessor Line - scope meta.preprocessor.c - settings - - foreground #999999 - - - - name C/C++ Preprocessor Directive - scope meta.preprocessor.c keyword - settings - - foreground #CC3333 - - - - name ----------------------------------- - settings - - - - diff --git a/osx/init/Library/LaunchDaemons/com.discoveryd.fix.plist b/osx/init/Library/LaunchDaemons/com.discoveryd.fix.plist deleted file mode 100644 index 2a8f448..0000000 --- a/osx/init/Library/LaunchDaemons/com.discoveryd.fix.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - Label - com.fix.local - ProgramArguments - - /usr/sbin/discoveryutil - activedirectory - yes - - RunAtLoad - - ServiceDescription - startup service for domain.local discoveryd fix - - \ No newline at end of file diff --git a/osx/init/Monokai Soda.itermcolors b/osx/init/Monokai Soda.itermcolors deleted file mode 100644 index 5b7ff50..0000000 --- a/osx/init/Monokai Soda.itermcolors +++ /dev/null @@ -1,213 +0,0 @@ - - - - - Ansi 0 Color - - Blue Component - 0.10051459074020386 - Green Component - 0.10051288455724716 - Red Component - 0.10051589459180832 - - Ansi 1 Color - - Blue Component - 0.3728577196598053 - Green Component - 0.0 - Red Component - 0.95683503150939941 - - Ansi 10 Color - - Blue Component - 0.14004382491111755 - Green Component - 0.87921047210693359 - Red Component - 0.59473341703414917 - - Ansi 11 Color - - Blue Component - 0.38154411315917969 - Green Component - 0.83635991811752319 - Red Component - 0.87748134136199951 - - Ansi 12 Color - - Blue Component - 0.99877572059631348 - Green Component - 0.39599207043647766 - Red Component - 0.61468899250030518 - - Ansi 13 Color - - Blue Component - 0.3728577196598053 - Green Component - 0.0 - Red Component - 0.95683503150939941 - - Ansi 14 Color - - Blue Component - 0.92060363292694092 - Green Component - 0.81977206468582153 - Red Component - 0.34416967630386353 - - Ansi 15 Color - - Blue Component - 0.9359474778175354 - Green Component - 0.96549534797668457 - Red Component - 0.96537256240844727 - - Ansi 2 Color - - Blue Component - 0.14004382491111755 - Green Component - 0.87921047210693359 - Red Component - 0.59473341703414917 - - Ansi 3 Color - - Blue Component - 0.099807053804397583 - Green Component - 0.51805692911148071 - Red Component - 0.98094809055328369 - - Ansi 4 Color - - Blue Component - 0.99877572059631348 - Green Component - 0.39599207043647766 - Red Component - 0.61468899250030518 - - Ansi 5 Color - - Blue Component - 0.3728577196598053 - Green Component - 0.0 - Red Component - 0.95683503150939941 - - Ansi 6 Color - - Blue Component - 0.92060363292694092 - Green Component - 0.81977206468582153 - Red Component - 0.34416967630386353 - - Ansi 7 Color - - Blue Component - 0.70993047952651978 - Green Component - 0.77144092321395874 - Red Component - 0.76960963010787964 - - Ansi 8 Color - - Blue Component - 0.29652142524719238 - Green Component - 0.36959609389305115 - Red Component - 0.3829454779624939 - - Ansi 9 Color - - Blue Component - 0.3728577196598053 - Green Component - 0.0 - Red Component - 0.95683503150939941 - - Background Color - - Blue Component - 0.10051459074020386 - Green Component - 0.10051288455724716 - Red Component - 0.10051589459180832 - - Bold Color - - Blue Component - 0.70993047952651978 - Green Component - 0.77144092321395874 - Red Component - 0.76960963010787964 - - Cursor Color - - Blue Component - 0.92647796869277954 - Green Component - 0.96674919128417969 - Red Component - 0.96554505825042725 - - Cursor Text Color - - Blue Component - 0.70993047952651978 - Green Component - 0.77144092321395874 - Red Component - 0.76960963010787964 - - Foreground Color - - Blue Component - 0.70993047952651978 - Green Component - 0.77144092321395874 - Red Component - 0.76960963010787964 - - Selected Text Color - - Blue Component - 0.70993047952651978 - Green Component - 0.77144092321395874 - Red Component - 0.76960963010787964 - - Selection Color - - Blue Component - 0.20521116256713867 - Green Component - 0.20520767569541931 - Red Component - 0.20521381497383118 - - - \ No newline at end of file diff --git a/osx/init/Monokai Soda.terminal b/osx/init/Monokai Soda.terminal deleted file mode 100755 index 48b9c7d..0000000 --- a/osx/init/Monokai Soda.terminal +++ /dev/null @@ -1,201 +0,0 @@ - - - - - ANSIBlackColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw - LjEwMTk2MDc4NDMgMC4xMDE5NjA3ODQzIDAuMTAxOTYwNzg0MwAQAYAC0hAREhNaJGNs - YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp - dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA - AAAZAAAAAAAAAAAAAAAAAAAA2Q== - - ANSIBlueColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPEBww - LjYxNTY4NjI3NDUgMC4zOTYwNzg0MzE0IDEAEAGAAtIQERITWiRjbGFzc25hbWVYJGNs - YXNzZXNXTlNDb2xvcqISFFhOU09iamVjdF8QD05TS2V5ZWRBcmNoaXZlctEXGFRyb290 - gAEIERojLTI3O0FITltigYOFipWepqmyxMfMAAAAAAAAAQEAAAAAAAAAGQAAAAAAAAAA - AAAAAAAAAM4= - - ANSIBrightBlackColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw - LjM4NDMxMzcyNTUgMC4zNjg2Mjc0NTEgMC4yOTgwMzkyMTU3ABABgALSEBESE1okY2xh - c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 - ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA - ABkAAAAAAAAAAAAAAAAAAADY - - ANSIBrightBlueColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPEBww - LjYxNTY4NjI3NDUgMC4zOTYwNzg0MzE0IDEAEAGAAtIQERITWiRjbGFzc25hbWVYJGNs - YXNzZXNXTlNDb2xvcqISFFhOU09iamVjdF8QD05TS2V5ZWRBcmNoaXZlctEXGFRyb290 - gAEIERojLTI3O0FITltigYOFipWepqmyxMfMAAAAAAAAAQEAAAAAAAAAGQAAAAAAAAAA - AAAAAAAAAM4= - - ANSIBrightCyanColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw - LjM0NTA5ODAzOTIgMC44MTk2MDc4NDMxIDAuOTIxNTY4NjI3NQAQAYAC0hAREhNaJGNs - YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp - dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA - AAAZAAAAAAAAAAAAAAAAAAAA2Q== - - ANSIBrightGreenColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw - LjU5NjA3ODQzMTQgMC44Nzg0MzEzNzI1IDAuMTQxMTc2NDcwNgAQAYAC0hAREhNaJGNs - YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp - dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA - AAAZAAAAAAAAAAAAAAAAAAAA2Q== - - ANSIBrightMagentaColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPEBww - Ljk1Njg2Mjc0NTEgMCAwLjM3MjU0OTAxOTYAEAGAAtIQERITWiRjbGFzc25hbWVYJGNs - YXNzZXNXTlNDb2xvcqISFFhOU09iamVjdF8QD05TS2V5ZWRBcmNoaXZlctEXGFRyb290 - gAEIERojLTI3O0FITltigYOFipWepqmyxMfMAAAAAAAAAQEAAAAAAAAAGQAAAAAAAAAA - AAAAAAAAAM4= - - ANSIBrightRedColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPEBww - Ljk1Njg2Mjc0NTEgMCAwLjM3MjU0OTAxOTYAEAGAAtIQERITWiRjbGFzc25hbWVYJGNs - YXNzZXNXTlNDb2xvcqISFFhOU09iamVjdF8QD05TS2V5ZWRBcmNoaXZlctEXGFRyb290 - gAEIERojLTI3O0FITltigYOFipWepqmyxMfMAAAAAAAAAQEAAAAAAAAAGQAAAAAAAAAA - AAAAAAAAAM4= - - ANSIBrightWhiteColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw - Ljk2NDcwNTg4MjQgMC45NjQ3MDU4ODI0IDAuOTM3MjU0OTAyABABgALSEBESE1okY2xh - c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 - ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA - ABkAAAAAAAAAAAAAAAAAAADY - - ANSIBrightYellowColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw - Ljg3ODQzMTM3MjUgMC44MzUyOTQxMTc2IDAuMzgwMzkyMTU2OQAQAYAC0hAREhNaJGNs - YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp - dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA - AAAZAAAAAAAAAAAAAAAAAAAA2Q== - - ANSICyanColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw - LjM0NTA5ODAzOTIgMC44MTk2MDc4NDMxIDAuOTIxNTY4NjI3NQAQAYAC0hAREhNaJGNs - YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp - dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA - AAAZAAAAAAAAAAAAAAAAAAAA2Q== - - ANSIGreenColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw - LjU5NjA3ODQzMTQgMC44Nzg0MzEzNzI1IDAuMTQxMTc2NDcwNgAQAYAC0hAREhNaJGNs - YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp - dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA - AAAZAAAAAAAAAAAAAAAAAAAA2Q== - - ANSIMagentaColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPEBww - Ljk1Njg2Mjc0NTEgMCAwLjM3MjU0OTAxOTYAEAGAAtIQERITWiRjbGFzc25hbWVYJGNs - YXNzZXNXTlNDb2xvcqISFFhOU09iamVjdF8QD05TS2V5ZWRBcmNoaXZlctEXGFRyb290 - gAEIERojLTI3O0FITltigYOFipWepqmyxMfMAAAAAAAAAQEAAAAAAAAAGQAAAAAAAAAA - AAAAAAAAAM4= - - ANSIRedColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPEBww - Ljk1Njg2Mjc0NTEgMCAwLjM3MjU0OTAxOTYAEAGAAtIQERITWiRjbGFzc25hbWVYJGNs - YXNzZXNXTlNDb2xvcqISFFhOU09iamVjdF8QD05TS2V5ZWRBcmNoaXZlctEXGFRyb290 - gAEIERojLTI3O0FITltigYOFipWepqmyxMfMAAAAAAAAAQEAAAAAAAAAGQAAAAAAAAAA - AAAAAAAAAM4= - - ANSIWhiteColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw - Ljc2ODYyNzQ1MSAwLjc3MjU0OTAxOTYgMC43MDk4MDM5MjE2ABABgALSEBESE1okY2xh - c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 - ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA - ABkAAAAAAAAAAAAAAAAAAADY - - ANSIYellowColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECgw - Ljk4MDM5MjE1NjkgMC41MTc2NDcwNTg4IDAuMDk4MDM5MjE1NjkAEAGAAtIQERITWiRj - bGFzc25hbWVYJGNsYXNzZXNXTlNDb2xvcqISFFhOU09iamVjdF8QD05TS2V5ZWRBcmNo - aXZlctEXGFRyb290gAEIERojLTI3O0FITltijY+RlqGqsrW+0NPYAAAAAAAAAQEAAAAA - AAAAGQAAAAAAAAAAAAAAAAAAANo= - - BackgroundColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw - LjEwMTk2MDc4NDMgMC4xMDE5NjA3ODQzIDAuMTAxOTYwNzg0MwAQAYAC0hAREhNaJGNs - YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp - dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA - AAAZAAAAAAAAAAAAAAAAAAAA2Q== - - CursorColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw - Ljk2NDcwNTg4MjQgMC45Njg2Mjc0NTEgMC45MjU0OTAxOTYxABABgALSEBESE1okY2xh - c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 - ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA - ABkAAAAAAAAAAAAAAAAAAADY - - ProfileCurrentVersion - 2.02 - SelectionColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw - LjIwMzkyMTU2ODYgMC4yMDM5MjE1Njg2IDAuMjAzOTIxNTY4NgAQAYAC0hAREhNaJGNs - YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp - dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA - AAAZAAAAAAAAAAAAAAAAAAAA2Q== - - TextBoldColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw - Ljc2ODYyNzQ1MSAwLjc3MjU0OTAxOTYgMC43MDk4MDM5MjE2ABABgALSEBESE1okY2xh - c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 - ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA - ABkAAAAAAAAAAAAAAAAAAADY - - TextColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw - Ljc2ODYyNzQ1MSAwLjc3MjU0OTAxOTYgMC43MDk4MDM5MjE2ABABgALSEBESE1okY2xh - c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 - ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA - ABkAAAAAAAAAAAAAAAAAAADY - - name - Monokai Soda - type - Window Settings - - \ No newline at end of file diff --git a/osx/init/Sublime/Themes/Balance.tmTheme b/osx/init/Sublime/Themes/Balance.tmTheme deleted file mode 100644 index 93e36ec..0000000 --- a/osx/init/Sublime/Themes/Balance.tmTheme +++ /dev/null @@ -1,732 +0,0 @@ - - - - - authorSean Trane - nameBalance - settings - - - settings - - background #FFFFFF - caret #A7A7A7 - foreground #444444 - invisibles #000000CC - lineHighlight #00000006 - selection #00000011 - selectionBorder #00000033 - inactiveSelection #00000011 - findHighlight #000000CC - findHighlightForeground#FFFFFF - - - - name Embedded Source - scope string source, text source - settings - - background - - - - name Comments - scope comment, comment punctuation - settings - - foreground #999999 - - - - name Variables - scope variable, support.other.variable - settings - - foreground #660099 - - - - name Variables: Punctuation - scope variable punctuation - settings - - foreground #330066 - - - - name Numbers - scope constant.numeric - settings - - foreground #0066FF - - - - name Constants - scope constant.language, support.constant, constant.character - settings - - foreground #0066FF - - - - name Keywords - scope keyword - settings - - foreground #CC0000 - - - - name Operators - scope keyword.operator - settings - - fontWeight bold - foreground #000000 - - - - name Special Methods - scope keyword.other.special-method - settings - - foreground #663333 - - - - name Storage - scope storage, storage.type - settings - - foreground #990000 - - - - name Functions - scope entity.name.function, meta.function-call, support.function - settings - - foreground #CC3300 - - - - name Classes - scope entity.name.class, entity.name.type.class - settings - - foreground #CC3300 - - - - name Classes: Inherited - scope entity.other.inherited-class - settings - - foreground #CC3300 - - - - name Support - scope support.type, support.class - settings - - fontStyle - foreground #CC6600 - - - - name ----------------------------------- - settings - - - name Tag Attribute - scope variable.parameter - settings - - foreground #660000 - - - - name Embedded Punctuation - scope punctuation.section.embedded - settings - - foreground #660000 - - - - name Units of Measure - scope keyword.other.unit - settings - - foreground #0066FF - - - - name Misc - scope constant.other.color - settings - - foreground #0066FF - - - - name Block Level - scope meta.block-level - settings - - background #999999 - - - - name ----------------------------------- - settings - - - name Invalid - scope invalid - settings - - foreground #000000 - - - - name Invalid: Deprecated - scope invalid.deprecated - settings - - fontStyle italic underline - foreground #999999 - - - - name Invalid: Illegal - scope invalid.illegal - settings - - background #00000011 - foreground #000000 - - - - name ----------------------------------- - settings - - - name Strings - scope string - settings - - foreground #009900 - - - - name Strings: Punctuation - scope string punctuation - settings - - foreground #00CC00 - - - - name Strings: Variables - scope string variable - settings - - foreground #660099 - - - - name Strings: Constants/Symbols - scope string constant, constant.other.symbol - settings - - foreground #0066FF - - - - name Strings: Links - scope string.other.link, markup.underline.link.php, keyword.other.phpdoc.php, support.function.url.css - settings - - fontStyle underline - foreground #3366CC - - - - name Strings: Escape Sequences - scope constant.character.escape - settings - - foreground #0066FF - - - - name Strings: Regular Expressions - scope string.regexp - settings - - foreground #009900 - - - - name Strings: RegEx Escapes - scope string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition - settings - - foreground #0066FF - - - - name ----------------------------------- - settings - - - name Doctype/XML Processing - scope meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string - settings - - foreground #AAAAAA - - - - name Declaration Tags - scope declaration.tag, declaration.tag entity - settings - - foreground #441100 - - - - name Declaration Tags: Inline - scope declaration.tag.inline, declaration.tag.inline entity - settings - - foreground #441100 - - - - name Source Tags - scope source entity.name.tag, source entity.other.attribute-name - settings - - foreground #663300 - - - - name Meta Tags - scope meta.tag, meta.tag entity - settings - - foreground - - - - name Meta Tags: Inline - scope meta.tag.inline, meta.tag.inline entity - settings - - foreground - - - - name ----------------------------------- - settings - - - name HTML: Tags - scope entity.name.tag - settings - - foreground #a67c52 - - - - name HTML: Tag Punctuation - scope punctuation.definition.tag - settings - - foreground #c7b299 - - - - name HTML: Attribute Punctuation - scope meta.tag string punctuation - settings - - foreground #754c24 - - - - name HTML: Attribute Names - scope entity.other.attribute-name - settings - - foreground #8c6239 - - - - name HTML: Attribute Values - scope meta.tag string.quoted, meta.tag string.quoted constant.character.entity - settings - - foreground #009900 - - - - name HTML: Entities - scope constant.character.entity - settings - - foreground #0066CC - - - - name ----------------------------------- - settings - - - name CSS: Tag Names - scope meta.selector.css entity.name.tag, keyword.control.html.elements - settings - - foreground #336699 - - - - name CSS: Pseudo - scope meta.selector.css entity.other.attribute-name.pseudo-element, meta.selector.css entity.other.attribute-name.pseudo-class, support.function.misc.css - settings - - foreground #003366 - - - - name CSS: Selectors - scope meta.selector.css entity.other.attribute-name.id, meta.selector.css entity.other.attribute-name.class, meta.selector.css entity punctuation, entity.other.attribute-name.class - settings - - foreground #003366 - - - - name CSS: Property Names - scope meta.property-name, support.type.property-name - settings - - foreground #6699CC - - - - name CSS: Property Values - scope meta.property-value constant.numeric, meta.property-value constant, meta.property-value keyword, meta.selector.css string, meta.attribute-selector.css string, keyword.unit.css - settings - - foreground #0066FF - - - - name CSS: URLs - scope variable.parameter.misc.css - settings - - fontStyle underline - foreground #000000 - - - - name CSS: at-rule - scope meta.at-rule - settings - - foreground #FFFF66 - - - - name CSS: Additional Constants - scope meta.property-value support.constant.named-color.css, meta.property-value constant - settings - - foreground #DDAADD - - - - name CSS: Colors - scope meta.property-value support.constant.color, meta.property-value support.constant.other - settings - - foreground #0066FF - - - - name CSS: Constructor Argument - scope meta.constructor.argument.css - settings - - foreground #003300 - - - - name ----------------------------------- - settings - - - name - less.mixin - scope - entity.other.less.mixin - settings - - foreground - #98E124 - - - - name - less.variable - scope - variable.declaration.less - settings - - foreground - #660099 - - - - name ----------------------------------- - settings - - - name JavaScript: Classes - scope meta.class.js, support.class.js, support.function.event-handler.js, entity.name.type.instance.js - settings - - foreground #CC3366 - - - - name JavaScript: Constants - scope support.constant.js, support.constant.dom.js, constant.numeric.js, constant.character.escape.js, constant.language.js, constant.language.boolean.true.js, constant.language.boolean.false.js - settings - - foreground #CC6699 - - - - name JavaScript: Keywords - scope keyword.control.js, keyword.other.js - settings - - foreground #6600CC - - - - name JavaScript: Functions - scope meta.function.js, meta.function.prototype.js, support.function.js, support.function.dom.js, entity.name.function.js - settings - - foreground #FF3399 - - - - name JavaScript: Operators - scope keyword.operator.js, keyword.operator.new.js - settings - - foreground #9933CC - - - - name JavaScript: Storage - scope storage.type.function.js, storage.type.js, storage.modifier.js - settings - - foreground #B21262 - - - - name JavaScript: Punctuation - scope punctuation.terminator.statement.js, meta.delimiter.object.comma.js, meta.delimiter.method.period.js, meta.brace.curly.js, meta.brace.round.js, meta.brace.square.js - settings - - foreground #CC6699 - - - - name JavaScript: Variables - scope variable.parameter.function.js, variable.language.js - settings - - foreground #EE22EE - - - - name JavaScript: Strings - scope string.quoted.single.js, string.quoted.double.js, string.regexp.js, punctuation.definition.string.begin.js, punctuation.definition.string.end.js, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js - settings - - foreground #666199 - - - - name ----------------------------------- - settings - - - name Markup: Changed - scope markup.changed - settings - - background #00000033 - foreground #FFFFFF - - - - name Markup: Deletion - scope markup.deleted - settings - - foreground #444444 - - - - name Markup: Emphasis - scope markup.italic - settings - - fontStyle italic - - - - name Markup: Error - scope markup.error - settings - - foreground #990000 - - - - name Markup: Insertion - scope markup.inserted - settings - - fontStyle underline - - - - name Markup: Output - scope markup.output, markup.raw - settings - - background #444444 - foreground #EEEEEE - - - - name Markup: Prompt - scope markup.prompt - settings - - foreground #FFFFFF - - - - name Markup: List - scope markup.list - settings - - foreground #FFCC66 - - - - name Markup: Heading - scope markup.heading - settings - - foreground #FFCC66 - - - - name Markup: Strong - scope markup.strong - settings - - fontWeight bold - - - - name Markup: Traceback - scope markup.traceback - settings - - fontStyle italic - - - - name Markup: Underline - scope markup.underline - settings - - fontStyle underline - - - - name ----------------------------------- - settings - - - name Extra: Diff Range - scope meta.diff.range, meta.diff.index, meta.separator - settings - - background #000000 - fontStyle italic - foreground #F8F8F8 - - - - name Extra: Diff From - scope meta.diff.header.from-file - settings - - background #000000 - foreground #CCCCCC - - - - name Extra: Diff To - scope meta.diff.header.to-file - settings - - background #000000 - foreground #F8F8F8 - - - - name ----------------------------------- - settings - - - name C/C++ Preprocessor Line - scope meta.preprocessor.c - settings - - foreground #999999 - - - - name C/C++ Preprocessor Directive - scope meta.preprocessor.c keyword - settings - - foreground #CC3333 - - - - name ----------------------------------- - settings - - - - diff --git a/osx/init/Sublime/Themes/BalanceD.tmTheme b/osx/init/Sublime/Themes/BalanceD.tmTheme deleted file mode 100644 index b76e2be..0000000 --- a/osx/init/Sublime/Themes/BalanceD.tmTheme +++ /dev/null @@ -1,726 +0,0 @@ - - - - - authorSean Trane - nameBalanceD - settings - - - settings - - background #222222 - caret #A7A7A7 - foreground #F8F8F8 - invisibles #FFFFFFCC - lineHighlight #00000033 - selection #00000066 - selectionBorder #33333366 - inactiveSelection #00000099 - findHighlight #FFFFCCFF - findHighlightForeground #000000 - - - - name Embedded Source - scope string source, text source - settings - - background #00000011 - - - - name Comments - scope comment, comment punctuation - settings - - background #FFFFFF02 - foreground #666666 - - - - name Variables - scope variable, support.other.variable - settings - - foreground #DBAF00 - - - - name Variables: Punctuation - scope variable punctuation - settings - - foreground #FFDD55 - - - - name Numbers - scope constant.numeric - settings - - foreground #A3D1FF - - - - name Constants - scope constant.language, support.constant, constant.character - settings - - foreground #A3D1FF - - - - name Keywords - scope keyword - settings - - foreground #CC3333 - - - - name Operators - scope keyword.operator - settings - - foreground #FFFFFF - - - - name Special Methods - scope keyword.other.special-method - settings - - foreground #996666 - - - - name Storage - scope storage, storage.type - settings - - foreground #D9342B - - - - name Functions - scope entity.name.function, meta.function-call, support.function - settings - - foreground #CC6633 - - - - name Classes - scope entity.name.class, entity.name.type.class - settings - - foreground #CC6633 - - - - name Classes: Inherited - scope entity.other.inherited-class - settings - - foreground #CC6633 - - - - name Support - scope support.type, support.class - settings - - fontStyle - foreground #E3832D - - - - name ----------------------------------- - settings - - - name Tag Attribute - scope variable.parameter - settings - - foreground #FFFFFF - - - - name Embedded Punctuation - scope punctuation.section.embedded - settings - - foreground #999999 - - - - name Units of Measure - scope keyword.other.unit - settings - - foreground #A3D1FF - - - - name Misc - scope constant.other.color - settings - - foreground #A3D1FF - - - - name Block Level - scope meta.block-level - settings - - background #00000044 - - - - name ----------------------------------- - settings - - - name Invalid - scope invalid - settings - - foreground #FFFFFF - - - - name Invalid: Deprecated - scope invalid.deprecated - settings - - fontStyle italic underline - foreground #999999 - - - - name Invalid: Illegal - scope invalid.illegal - settings - - background #000000FF - foreground #FFFFFF - - - - name ----------------------------------- - settings - - - name Strings - scope string - settings - - foreground #99CC66 - - - - name Strings: Punctuation - scope string punctuation - settings - - foreground #99CC33 - - - - name Strings: Variables - scope string variable - settings - - foreground #FFDD55 - - - - name Strings: Constants/Symbols - scope string constant, constant.other.symbol - settings - - foreground #77AADD - - - - name Strings: Links - scope string.other.link, markup.underline.link.php, keyword.other.phpdoc.php, support.function.url.css - settings - - fontStyle underline - foreground #3366CC - - - - name Strings: Escape Sequences - scope constant.character.escape - settings - - foreground #77AADD - - - - name Strings: Regular Expressions - scope string.regexp - settings - - foreground #99CC66 - - - - name Strings: RegEx Escapes - scope string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition - settings - - foreground #CC6633 - - - - name ----------------------------------- - settings - - - name Doctype/XML Processing - scope meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string - settings - - foreground #666666 - - - - name Declaration Tags - scope declaration.tag, declaration.tag entity - settings - - foreground #FFCC66 - - - - name Declaration Tags: Inline - scope declaration.tag.inline, declaration.tag.inline entity - settings - - foreground #AC885B - - - - name Source Tags - scope source entity.name.tag, source entity.other.attribute-name - settings - - foreground #FFCC66 - - - - name Meta Tags - scope meta.tag, meta.tag entity - settings - - foreground - - - - name Meta Tags: Inline - scope meta.tag.inline, meta.tag.inline entity - settings - - foreground - - - - name ----------------------------------- - settings - - - name HTML: Tags - scope entity.name.tag - settings - - foreground #aa9786 - - - - name HTML: Tag Punctuation - scope punctuation.definition.tag - settings - - foreground #736357 - - - - name HTML: Attribute Punctuation - scope meta.tag string punctuation - settings - - foreground #c7b299 - - - - name HTML: Attribute Names - scope entity.other.attribute-name - settings - - foreground #c7b299 - - - - name HTML: Attribute Values - scope meta.tag string.quoted, meta.tag string.quoted constant.character.entity - settings - - foreground #99CC66 - - - - name HTML: Entities - scope constant.character.entity - settings - - foreground #6699CC - - - - name ----------------------------------- - settings - - - name CSS: Tag Names - scope meta.selector.css entity.name.tag, keyword.control.html.elements - settings - - foreground #996699 - - - - name CSS: Pseudo - scope meta.selector.css entity.other.attribute-name.pseudo-element, meta.selector.css entity.other.attribute-name.pseudo-class, support.function.misc.css - settings - - foreground #996699 - - - - name CSS: Selectors - scope meta.selector.css entity.other.attribute-name.id, meta.selector.css entity.other.attribute-name.class, meta.selector.css entity punctuation, entity.other.attribute-name.class - settings - - foreground #FF99FF - - - - name CSS: Property Names - scope meta.property-name, support.type.property-name - settings - - foreground #6699CC - - - - name CSS: Property Values - scope meta.property-value constant.numeric, meta.property-value constant, meta.property-value keyword, meta.selector.css string, meta.attribute-selector.css string, keyword.unit.css - settings - - foreground #A3D1FF - - - - name CSS: URLs - scope variable.parameter.misc.css - settings - - fontStyle underline - foreground #FFFFFF - - - - name CSS: at-rule - scope meta.at-rule - settings - - foreground #FFFF66 - - - - name CSS: Additional Constants - scope meta.property-value support.constant.named-color.css, meta.property-value constant - settings - - foreground #DDAADD - - - - name CSS: Colors - scope meta.property-value support.constant.color, meta.property-value support.constant.other - settings - - foreground #FFFFFF - - - - name CSS: Constructor Argument - scope meta.constructor.argument.css - settings - - foreground #8F9D6A - - - - name ----------------------------------- - settings - - - name less.mixin - scope entity.other.less.mixin - settings - - foreground #98E124 - - - - name less.variable - scope variable.declaration.less - settings - - foreground #DBAF00 - - - - name ----------------------------------- - settings - - - name JavaScript: Classes - scope meta.class.js, support.class.js, support.function.event-handler.js, entity.name.type.instance.js - settings - - foreground #CC3366 - - - - name JavaScript: Constants - scope support.constant.js, support.constant.dom.js, constant.numeric.js, constant.character.escape.js, constant.language.js, constant.language.boolean.true.js, constant.language.boolean.false.js - settings - - foreground #FF99CC - - - - name JavaScript: Keywords - scope keyword.control.js, keyword.other.js - settings - - foreground #FF66FF - - - - name JavaScript: Functions - scope meta.function.js, meta.function.prototype.js, support.function.js, support.function.dom.js, entity.name.function.js - settings - - foreground #FF3399 - - - - name JavaScript: Operators - scope keyword.operator.js, keyword.operator.new.js - settings - - foreground #FFDD55 - - - - name JavaScript: Storage - scope storage.type.function.js, storage.type.js, storage.modifier.js - settings - - foreground #B21262 - - - - name JavaScript: Punctuation - scope punctuation.terminator.statement.js, meta.delimiter.object.comma.js, meta.delimiter.method.period.js, meta.brace.curly.js, meta.brace.round.js, meta.brace.square.js - settings - - foreground #FF99FF - - - - name JavaScript: Variables - scope variable.parameter.function.js, variable.language.js - settings - - foreground #DBAF00 - - - - name JavaScript: Strings - scope string.quoted.single.js, string.quoted.double.js, string.regexp.js, punctuation.definition.string.begin.js, punctuation.definition.string.end.js, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js - settings - - foreground #9995bd - - - - name ----------------------------------- - settings - - - name Markup: Changed - scope markup.changed - settings - - background #00000033 - foreground #FFFFFF - - - - name Markup: Deletion - scope markup.deleted - settings - - foreground #444444 - - - - name Markup: Emphasis - scope markup.italic - settings - - fontStyle italic - - - - name Markup: Error - scope markup.error - settings - - foreground #990000 - - - - name Markup: Insertion - scope markup.inserted - settings - - fontStyle underline - - - - name Markup: Output - scope markup.output, markup.raw - settings - - background #444444 - foreground #EEEEEE - - - - name Markup: Prompt - scope markup.prompt - settings - - foreground #FFFFFF - - - - name Markup: List - scope markup.list - settings - - foreground #FFCC66 - - - - name Markup: Heading - scope markup.heading - settings - - foreground #FFCC66 - - - - name Markup: Strong - scope markup.strong - settings - - fontStyle bold - - - - name Markup: Traceback - scope markup.traceback - settings - - fontStyle italic - - - - name Markup: Underline - scope markup.underline - settings - - fontStyle underline - - - - name ----------------------------------- - settings - - - name Extra: Diff Range - scope meta.diff.range, meta.diff.index, meta.separator - settings - - background #000000 - fontStyle italic - foreground #F8F8F8 - - - - name Extra: Diff From - scope meta.diff.header.from-file - settings - - background #000000 - foreground #CCCCCC - - - - name Extra: Diff To - scope meta.diff.header.to-file - settings - - background #000000 - foreground #F8F8F8 - - - - name ----------------------------------- - settings - - - name C/C++ Preprocessor Line - scope meta.preprocessor.c - settings - - foreground #999999 - - - - name C/C++ Preprocessor Directive - scope meta.preprocessor.c keyword - settings - - foreground #CC3333 - - - - name ----------------------------------- - settings - - - - diff --git a/osx/install-casks.sh b/osx/install-casks.sh deleted file mode 100755 index 56742d7..0000000 --- a/osx/install-casks.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env bash -# -# Install Mac OS Apps -# -# This installs Mac OS Apps with Casks using Homebrew + Caskroom. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if type "brew" &> /dev/null; then - - # sh_info "Installing Caskroom/cask..." - # brew tap homebrew/cask - - sh_info "Setting up Caskroom/versions tap..." - brew tap homebrew/cask-versions - - sh_info "Installing Apps..." - brew install --cask 1password - brew install --cask a-better-finder-rename - # brew install --cask adobe-creative-cloud - # brew install --cask adobe-photoshop-lightroom - # brew install --cask adobe-reader - brew install --cask alfred - # brew install --cask atom - # brew install --cask audacity - # brew install --cask citrix-receiver - # brew install --cask cleanmymac - # brew install --cask cyberduck - # brew install --cask dash - # brew install --cask dash-beta - # brew install --cask docker - # brew install --cask drobo-dashboard - # brew install --cask dropbox - # brew install --cask evernote - # brew install --cask firefox - # brew install --cask gimp - brew install --cask github - # brew install --cask gitkraken - # brew install --cask gitx - # brew install --cask google-chrome - brew install --cask handbrake - brew install --cask imagealpha - brew install --cask imageoptim - # brew install --cask intellij-idea - # brew install --cask intellij-idea-ce - brew install --cask iterm2 - # brew install --cask java - # brew install --cask jenkins - # brew install --cask jenkins-lts - # brew install --cask jenkins-menu - # brew install --cask kaleidoscope-beta - # brew install --cask keka - # brew install --cask libreoffice - # brew install --cask little-snitch - brew install --cask macpar-deluxe - # brew install --cask mamp - # brew install --cask microsoft-lync - # brew install --cask microsoft-office - brew install --cask mongodb-compass - # brew install --cask phpstorm - brew install --cask postman - # brew install --cask screenflow - # brew install --cask sequel-pro - # brew install --cask skype - brew install --cask slack - brew install --cask sourcetree - # brew install --cask spectacle - # brew install --cask stellarium - # brew install --cask sublime-text - # brew install --cask svnx - # brew install --cask textexpander - brew install --cask the-unarchiver - # brew install --cask tower - # brew install --cask transmission - # brew install --cask vagrant - brew install --cask virtualbox - brew install --cask visual-studio-code - # brew install --cask vitalsource-bookshelf - brew install --cask vlc - # brew install --cask webstorm - # brew install --cask whatsapp - brew install --cask xld - # brew install --cask xquartz - # brew install --cask xtrafinder - brew install --cask zoom - - sh_info "Setting up Caskroom/fonts tap..." - brew tap homebrew/cask-fonts - - sh_info "Installing Fonts..." - brew install --cask font-arimo - brew install --cask font-dejavu-sans - brew install --cask font-fontawesome - brew install --cask font-inconsolata - brew install --cask font-open-iconic - brew install --cask font-open-sans - brew install --cask font-open-sans-condensed - brew install --cask font-source-code-pro - brew install --cask font-source-sans-pro - brew install --cask font-source-serif-pro - brew install --cask font-ubuntu - - brew cleanup - -fi diff --git a/osx/install-clt.sh b/osx/install-clt.sh deleted file mode 100755 index ff86aae..0000000 --- a/osx/install-clt.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash -# -# Install Command Line Tools for Xcode - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if [[ "$OSTYPE" == "darwin"* ]]; then - if type "xcode-select" &> /dev/null; then - XCODE_PATH=$(xcode-select -p) - if [[ "$XCODE_PATH" == "/Applications/Xcode.app"* ]]; then - sh_success "Xcode is installed:" - sh_text "${XCODE_PATH}" - sh_alert "You should ensure Xcode is updated to the newest version." - sh_text "Launch the App Store application, check 'Updates', update Xcode." - sh_text "After updating Xcode, be sure to launch the Xcode application and accept the Apple license terms." - elif [[ "$XCODE_PATH" == "/Library/Developer/CommandLineTools"* ]]; then - sh_success "Xcode Command Line Tools are installed:" - sh_text "${XCODE_PATH}" - else - sh_info "Installing Xcode Command Line Tools..." - xcode-select --install - fi - else - sh_error "The 'xcode-select' command was not available." - sh_alert "You should install Xcode (and Command Line Tools)." - sh_text "Launch the App Store application, search-for and install Xcode." - sh_text "After installing Xcode, be sure to launch the Xcode application and accept the Apple license terms." - sh_fail "This operation requires Xcode Command Line Tools." - fi - # Check gcc for successful installation. - if type "gcc" &> /dev/null; then - sh_success "gcc is installed. Check configuration:" - echo - gcc --version - echo - fi -fi diff --git a/osx/install.sh b/osx/install.sh deleted file mode 100755 index f9c6dee..0000000 --- a/osx/install.sh +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env bash -# -# OSX -# -# This installs some of the common dependencies for OSX. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if [[ "$OSTYPE" == "darwin"* ]]; then - - # Install Homebrew - ! type "brew" &> /dev/null && . "$DOTFILES/brew/install.sh" - - # Install system/support utils - . "$DOTFILES/system/install.sh" - - if type "brew" &> /dev/null; then - - sh_info "Installing standard Linux/GNU utilities and software that OS X neglects..." - - if [[ ! "$(brew ls --versions coreutils)" ]]; then - sh_info "Installing core-utilities (GNU File, Shell, and Text utilities)..." - brew install coreutils - # Don’t forget to add `$(brew --prefix coreutils)/libexec/gnubin` to `$PATH`. - fi - if [[ "$(brew ls --versions coreutils)" ]]; then - sh_success "$(brew ls --versions coreutils) installed." - fi - - # Install some other useful utilities like `sponge`. - if [[ ! "$(brew ls --versions moreutils)" ]]; then - sh_info "Installing more-utilities (collection of tools that nobody wrote when UNIX was young)..." - brew install moreutils - fi - if [[ "$(brew ls --versions moreutils)" ]]; then - sh_success "$(brew ls --versions moreutils) installed." - fi - - # Install GNU `find`, `locate`, `updatedb`, and `xargs`, `g`-prefixed. - if [[ ! "$(brew ls --versions findutils)" ]]; then - sh_info "Installing find-utilities (collection of GNU find, xargs, and locate)..." - brew install findutils - fi - if [[ "$(brew ls --versions findutils)" ]]; then - sh_success "$(brew ls --versions findutils) installed." - fi - - # Install GNU `sed`, overwriting the built-in `sed`. - if [[ ! "$(brew ls --versions gnu-sed)" ]]; then - sh_info "Installing gnu-sed (GNU implementation of the famous stream editor)..." - brew install gnu-sed --with-default-names - fi - if [[ "$(brew ls --versions gnu-sed)" ]]; then - sh_success "$(brew ls --versions gnu-sed) installed." - fi - - # Install `pass`, `gpg`, `pwgen` for password management. - if [[ ! "$(brew ls --versions pass)" ]]; then - sh_info "Installing Password manager..." - brew install pass - fi - if [[ "$(brew ls --versions pass)" ]]; then - sh_success "$(brew ls --versions pass) installed." - fi - - # Install `dnsmasq` for easier ip-host relationships. - # if [[ ! "$(brew ls --versions dnsmasq)" ]]; then - # sh_info "Installing dnsmasq (Lightweight DNS forwarder and DHCP server)..." - # brew install dnsmasq - # fi - # if [[ "$(brew ls --versions dnsmasq)" ]]; then - # sh_success "$(brew ls --versions dnsmasq) installed." - # fi - - # Install more recent versions of some OS X tools. - sh_info "Installing more recent versions of some OS X tools..." - - if [[ ! "$(brew ls --versions bzip2)" ]]; then - sh_info "Installing bzip2 (Freely available high-quality data compressor)..." - brew install bzip2 - fi - if [[ "$(brew ls --versions bzip2)" ]]; then - sh_success "$(brew ls --versions bzip2) installed." - fi - - if [[ ! "$(brew ls --versions gcc)" ]]; then - sh_info "Installing gcc (GNU compiler collection)..." - brew install gcc - fi - if [[ "$(brew ls --versions gcc)" ]]; then - sh_success "$(brew ls --versions gcc) installed." - fi - - if [[ ! "$(brew ls --versions grep)" ]]; then - sh_info "Installing GNU Grep..." - brew install grep - fi - if [[ "$(brew ls --versions grep)" ]]; then - sh_success "$(brew ls --versions grep) installed." - fi - - if [[ ! "$(brew ls --versions libzip)" ]]; then - sh_info "Installing libzip (C library for reading, creating, and modifying zip archives)..." - brew install libzip - fi - if [[ "$(brew ls --versions libzip)" ]]; then - sh_success "$(brew ls --versions libzip) installed." - fi - - if [[ ! "$(brew ls --versions openssh)" ]]; then - sh_info "Installing OpenSSH (OpenBSD freely-licensed SSH connectivity tools)..." - brew install openssh - fi - if [[ "$(brew ls --versions openssh)" ]]; then - sh_success "$(brew ls --versions openssh) installed." - fi - - if [[ ! "$(brew ls --versions openssl)" ]]; then - sh_info "Installing OpenSSL (SSL/TLS cryptography library)..." - brew install openssl - fi - if [[ "$(brew ls --versions openssl)" ]]; then - sh_success "$(brew ls --versions openssl) installed." - fi - - if [[ ! "$(brew ls --versions screen)" ]]; then - sh_info "Installing GNU Screen..." - brew install screen - fi - if [[ "$(brew ls --versions screen)" ]]; then - sh_success "$(brew ls --versions screen) installed." - fi - - if [[ ! "$(brew ls --versions zlib)" ]]; then - sh_info "Installing zlib (General-purpose lossless data-compression library)..." - brew install zlib - fi - if [[ "$(brew ls --versions zlib)" ]]; then - sh_success "$(brew ls --versions zlib) installed." - fi - - # if [[ ! "$(brew ls --versions vim)" ]]; then - # sh_info "Installing Vi \"workalike\" with many additional features..." - # brew install vim --override-system-vi - # fi - # if [[ "$(brew ls --versions vim)" ]]; then - # sh_success "$(brew ls --versions vim) installed." - # fi - - # webkit2png - # Create screenshots of webpages from the terminal - # http://www.paulhammond.org/webkit2png/ - install_webkit2png () { - if ! type "webkit2png" &> /dev/null; then - if type "brew" &> /dev/null && [[ ! "$(brew ls --versions webkit2png)" ]]; then - brew install webkit2png - fi - fi - if type "webkit2png" &> /dev/null; then - sh_success "$(webkit2png --version) installed: $(command -v webkit2png)" - fi - } - # install_webkit2png - - sh_success "All OS X enhancements and utilities have been installed." - - fi - -fi diff --git a/osx/path.zsh b/osx/path.zsh deleted file mode 100755 index 83df444..0000000 --- a/osx/path.zsh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -# coreutils support: -if type "brew" &> /dev/null && [[ "$(brew ls --versions coreutils)" ]]; then - export PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH" -fi - -# openssl support: -if type "brew" &> /dev/null && [[ "$(brew ls --versions openssl)" ]]; then - export PATH="$(brew --prefix openssl@1.1)/bin:$PATH" - - export LDFLAGS="-L$(brew --prefix openssl@1.1)/lib" - export CPPFLAGS="-I$(brew --prefix openssl@1.1)/include" - export PKG_CONFIG_PATH="$(brew --prefix openssl@1.1)/lib/pkgconfig" -fi - -# MAMP support: -if [[ -d "/Applications/MAMP/Library/bin" ]]; then - export PATH="/Applications/MAMP/Library/bin:$PATH" -fi diff --git a/osx/set-defaults.sh b/osx/set-defaults.sh deleted file mode 100755 index 5c52a56..0000000 --- a/osx/set-defaults.sh +++ /dev/null @@ -1,689 +0,0 @@ -#!/usr/bin/env bash -# -# Sets reasonable OS X defaults. -# -# @see https://github.com/mathiasbynens/dotfiles/blob/master/.osx - - -############################################################################### -# General UI/UX # -############################################################################### - -# Set computer name (as done via System Preferences → Sharing) -#sudo scutil --set ComputerName "0x73313077656E" -#sudo scutil --set HostName "0x73313077656E" -#sudo scutil --set LocalHostName "0x73313077656E" -#sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string "0x73313077656E" - -# Set standby delay to 24 hours (default is 1 hour) -# sudo pmset -a standbydelay 86400 - -# Disable the sound effects on boot -sudo nvram SystemAudioVolume=%00 - -# Disable power chime (sound when plugging in a cable) -defaults write com.apple.PowerChime ChimeOnNoHardware -bool true -defaults write com.apple.PowerChime ChimeOnAllHardware -bool false -sudo defaults write com.apple.PowerChime ChimeOnNoHardware -bool true -sudo defaults write com.apple.PowerChime ChimeOnAllHardware -bool false -killall PowerChime - -# Disable transparency in the menu bar and elsewhere on Yosemite -defaults write com.apple.universalaccess reduceTransparency -bool true - -# # Menu bar: hide the User icons -for domain in ~/Library/Preferences/ByHost/com.apple.systemuiserver.*; do - defaults write "${domain}" dontAutoLoad -array \ - "/System/Library/CoreServices/Menu Extras/User.menu" -done -defaults write com.apple.systemuiserver menuExtras -array \ - "/System/Library/CoreServices/Menu Extras/Displays.menu" \ - "/System/Library/CoreServices/Menu Extras/TimeMachine.menu" \ - "/System/Library/CoreServices/Menu Extras/Volume.menu" \ - "/System/Library/CoreServices/Menu Extras/Bluetooth.menu" \ - "/System/Library/CoreServices/Menu Extras/VPN.menu" \ - "/System/Library/CoreServices/Menu Extras/AirPort.menu" \ - "/System/Library/CoreServices/Menu Extras/Battery.menu" \ - "/System/Library/CoreServices/Menu Extras/Clock.menu" - -# Set highlight color to green -#defaults write NSGlobalDomain AppleHighlightColor -string "0.764700 0.976500 0.568600" - -# Set sidebar icon size to medium -defaults write NSGlobalDomain NSTableViewDefaultSizeMode -int 2 - -# Always show scrollbars -defaults write NSGlobalDomain AppleShowScrollBars -string "Always" -# Possible values: `WhenScrolling`, `Automatic` and `Always` - -# Disable smooth scrolling -# (Uncomment if you’re on an older Mac that messes up the animation) -# defaults write NSGlobalDomain NSScrollAnimationEnabled -bool false - -# Increase window resize speed for Cocoa applications -defaults write NSGlobalDomain NSWindowResizeTime -float 0.001 - -# Expand save panel by default -defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true -defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true - -# Expand print panel by default -defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true -defaults write NSGlobalDomain PMPrintingExpandedStateForPrint2 -bool true - -# Save to disk (not to iCloud) by default -defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false - -# Automatically quit printer app once the print jobs complete -defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true - -# Disable the “Are you sure you want to open this application?” dialog -defaults write com.apple.LaunchServices LSQuarantine -bool false - -# Remove duplicates in the “Open With” menu (also see `lscleanup` alias) -/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user - -# Display ASCII control characters using caret notation in standard text views -# Try e.g. `cd /tmp; unidecode "\x{0000}" > cc.txt; open -e cc.txt` -defaults write NSGlobalDomain NSTextShowsControlCharacters -bool true - -# Disable Resume system-wide -# defaults write com.apple.systempreferences NSQuitAlwaysKeepsWindows -bool false - -# Disable automatic termination of inactive apps -defaults write NSGlobalDomain NSDisableAutomaticTermination -bool true - -# Disable the crash reporter -defaults write com.apple.CrashReporter DialogType -string "none" - -# Set Help Viewer windows to non-floating mode -defaults write com.apple.helpviewer DevMode -bool true - -# Fix for the ancient UTF-8 bug in QuickLook (http://mths.be/bbo) -# Commented out, as this is known to cause problems in various Adobe apps :( -# See https://github.com/mathiasbynens/dotfiles/issues/237 -#echo "0x08000100:0" > ~/.CFUserTextEncoding - -# Reveal IP address, hostname, OS version, etc. when clicking the clock -# in the login window -# sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostName - -# Restart automatically if the computer freezes -sudo systemsetup -setrestartfreeze on - -# Never go into computer sleep mode -#sudo systemsetup -setcomputersleep Off > /dev/null - -# Check for software updates daily, not just once per week -defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1 - -# Disable Notification Center and remove the menu bar icon -# launchctl unload -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist 2> /dev/null - -# Disable smart quotes as they’re annoying when typing code -defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false - -# Disable smart dashes as they’re annoying when typing code -defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false - -# Set a custom wallpaper image. `DefaultDesktop.jpg` is already a symlink, and -# all wallpapers are in `/Library/Desktop Pictures/`. The default is `Wave.jpg`. -#rm -rf ~/Library/Application Support/Dock/desktoppicture.db -#sudo rm -rf /System/Library/CoreServices/DefaultDesktop.jpg -#sudo ln -s /path/to/your/image /System/Library/CoreServices/DefaultDesktop.jpg - - -############################################################################### -# SSD-specific tweaks # -############################################################################### - -# Disable local Time Machine snapshots -sudo tmutil disablelocal - -# Disable hibernation (speeds up entering sleep mode) -sudo pmset -a hibernatemode 0 - -## Remove the sleep image file to save disk space -#sudo rm /Private/var/vm/sleepimage -## Create a zero-byte file instead… -#sudo touch /Private/var/vm/sleepimage -## …and make sure it can’t be rewritten -#sudo chflags uchg /Private/var/vm/sleepimage - -# Disable the sudden motion sensor as it’s not useful for SSDs -sudo pmset -a sms 0 - - -############################################################################### -# Trackpad, mouse, keyboard, Bluetooth accessories, and input # -############################################################################### - -# Trackpad: enable tap to click for this user and for the login screen -# defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true -# defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1 -# defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1 - -# Trackpad: map bottom right corner to right-click -# defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadCornerSecondaryClick -int 2 -# defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadRightClick -bool false -# defaults -currentHost write NSGlobalDomain com.apple.trackpad.trackpadCornerClickBehavior -int 1 -# defaults -currentHost write NSGlobalDomain com.apple.trackpad.enableSecondaryClick -bool false - -# Trackpad: disable launchpad pinch with thumb and three fingers -# defaults write com.apple.dock showLaunchpadGestureEnabled -int 0 - -# Disable “natural” (Lion-style) scrolling -# defaults write NSGlobalDomain com.apple.swipescrolldirection -bool false - -# Increase sound quality for Bluetooth headphones/headsets -# defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Min (editable)" -int 40 - -# Enable full keyboard access for all controls -# (e.g. enable Tab in modal dialogs) -defaults write NSGlobalDomain AppleKeyboardUIMode -int 3 - -# Use scroll gesture with the Ctrl (^) modifier key to zoom -defaults write com.apple.universalaccess closeViewScrollWheelToggle -bool true -defaults write com.apple.universalaccess HIDScrollZoomModifierMask -int 262144 -# Follow the keyboard focus while zoomed in -defaults write com.apple.universalaccess closeViewZoomFollowsFocus -bool true - -# Disable press-and-hold for keys in favor of key repeat -defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false - -# Set a blazingly fast keyboard repeat rate -defaults write NSGlobalDomain KeyRepeat -int 1 -defaults write NSGlobalDomain InitialKeyRepeat -int 10 - -# Set language and text formats -# Note: if you’re in the US, replace `EUR` with `USD`, `Centimeters` with -# `Inches`, `en_GB` with `en_US`, and `true` with `false`. -# defaults write NSGlobalDomain AppleLanguages -array "en" "nl" -# defaults write NSGlobalDomain AppleLocale -string "en_GB@currency=EUR" -# defaults write NSGlobalDomain AppleMeasurementUnits -string "Centimeters" -# defaults write NSGlobalDomain AppleMetricUnits -bool true - -# Set the timezone; see `systemsetup -listtimezones` for other values -#sudo systemsetup -settimezone "Europe/Brussels" > /dev/null - -# Disable auto-correct -defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false - -# Stop iTunes from responding to the keyboard media keys -launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist - - -############################################################################### -# Screen # -############################################################################### - -# Require password immediately after sleep or screen saver begins -#defaults write com.apple.screensaver askForPassword -int 1 -#defaults write com.apple.screensaver askForPasswordDelay -int 0 - -# Save screenshots to the desktop -defaults write com.apple.screencapture location -string "$HOME/Desktop" - -# Save screenshots in PNG format (other options: BMP, GIF, JPG, PDF, TIFF) -defaults write com.apple.screencapture type -string "png" - -# Disable shadow in screenshots -defaults write com.apple.screencapture disable-shadow -bool true - -# Enable subpixel font rendering on non-Apple LCDs -defaults write NSGlobalDomain AppleFontSmoothing -int 2 - -# Enable HiDPI display modes (requires restart) -sudo defaults write /Library/Preferences/com.apple.windowserver DisplayResolutionEnabled -bool true - - -############################################################################### -# Finder # -############################################################################### - -# Finder: allow quitting via ⌘ + Q; doing so will also hide desktop icons -#defaults write com.apple.finder QuitMenuItem -bool true - -# Finder: disable window animations and Get Info animations -defaults write com.apple.finder DisableAllAnimations -bool true - -# Set Desktop as the default location for new Finder windows -# For other paths, use `PfLo` and `file:///full/path/here/` -defaults write com.apple.finder NewWindowTarget -string "PfDe" -defaults write com.apple.finder NewWindowTargetPath -string "file://${HOME}/Desktop/" - -# Show icons for hard drives, servers, and removable media on the desktop -defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true -defaults write com.apple.finder ShowHardDrivesOnDesktop -bool true -defaults write com.apple.finder ShowMountedServersOnDesktop -bool true -defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true - -# Finder: show hidden files by default -#defaults write com.apple.finder AppleShowAllFiles -bool true - -# Finder: show all filename extensions -defaults write NSGlobalDomain AppleShowAllExtensions -bool true - -# Finder: show status bar -defaults write com.apple.finder ShowStatusBar -bool true - -# Finder: show path bar -defaults write com.apple.finder ShowPathbar -bool true - -# Finder: allow text selection in Quick Look -defaults write com.apple.finder QLEnableTextSelection -bool true - -# Display full POSIX path as Finder window title -defaults write com.apple.finder _FXShowPosixPathInTitle -bool true - -# When performing a search, search the current folder by default -defaults write com.apple.finder FXDefaultSearchScope -string "SCcf" - -# Disable the warning when changing a file extension -defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false - -# Enable spring loading for directories -defaults write NSGlobalDomain com.apple.springing.enabled -bool true - -# Remove the spring loading delay for directories -defaults write NSGlobalDomain com.apple.springing.delay -float 0 - -# Avoid creating .DS_Store files on network volumes -defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true - -# Disable disk image verification -defaults write com.apple.frameworks.diskimages skip-verify -bool true -defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true -defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true - -# Automatically open a new Finder window when a volume is mounted -defaults write com.apple.frameworks.diskimages auto-open-ro-root -bool true -defaults write com.apple.frameworks.diskimages auto-open-rw-root -bool true -defaults write com.apple.finder OpenWindowForNewRemovableDisk -bool true - -# Show item info near icons on the desktop and in other icon views -#/usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:showItemInfo true" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:showItemInfo true" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:showItemInfo true" ~/Library/Preferences/com.apple.finder.plist - -# Show item info to the right of the icons on the desktop -#/usr/libexec/PlistBuddy -c "Set DesktopViewSettings:IconViewSettings:labelOnBottom false" ~/Library/Preferences/com.apple.finder.plist - -# Enable snap-to-grid for icons on the desktop and in other icon views -/usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist -/usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist -/usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist - -# Increase grid spacing for icons on the desktop and in other icon views -#/usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:gridSpacing 100" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:gridSpacing 100" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:gridSpacing 100" ~/Library/Preferences/com.apple.finder.plist - -# Increase the size of icons on the desktop and in other icon views -#/usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:iconSize 80" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:iconSize 80" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:iconSize 80" ~/Library/Preferences/com.apple.finder.plist - -# Use list view in all Finder windows by default -# Four-letter codes for the other view modes: `icnv`, `clmv`, `Flwv` -defaults write com.apple.finder FXPreferredViewStyle -string "Nlsv" - -# Disable the warning before emptying the Trash -defaults write com.apple.finder WarnOnEmptyTrash -bool false - -# Empty Trash securely by default -# defaults write com.apple.finder EmptyTrashSecurely -bool true - -# Enable AirDrop over Ethernet and on unsupported Macs running Lion -#defaults write com.apple.NetworkBrowser BrowseAllInterfaces -bool true - -# Enable the MacBook Air SuperDrive on any Mac -sudo nvram boot-args="mbasd=1" - -# Show the ~/Library folder -chflags nohidden ~/Library - -# Remove Dropbox’s green checkmark icons in Finder -file=/Applications/Dropbox.app/Contents/Resources/emblem-dropbox-uptodate.icns -[ -e "$file" ] && mv -f "$file" "$file.bak" - -# Expand the following File Info panes: -# “General”, “Open with”, and “Sharing & Permissions” -defaults write com.apple.finder FXInfoPanesExpanded -dict \ - General -bool true \ - OpenWith -bool true \ - Privileges -bool true - - -############################################################################### -# Dock, Dashboard, and hot corners # -############################################################################### - -# Enable highlight hover effect for the grid view of a stack (Dock) -defaults write com.apple.dock mouse-over-hilite-stack -bool true - -# Set the icon size of Dock items to 42 pixels -defaults write com.apple.dock tilesize -int 42 - -# Change minimize/maximize window effect -defaults write com.apple.dock mineffect -string "scale" - -# Minimize windows into their application’s icon -defaults write com.apple.dock minimize-to-application -bool true - -# Enable spring loading for all Dock items -defaults write com.apple.dock enable-spring-load-actions-on-all-items -bool true - -# Show indicator lights for open applications in the Dock -defaults write com.apple.dock show-process-indicators -bool true - -# Wipe all (default) app icons from the Dock -# This is only really useful when setting up a new Mac, or if you don’t use -# the Dock to launch apps. -#defaults write com.apple.dock persistent-apps -array - -# Don’t animate opening applications from the Dock -defaults write com.apple.dock launchanim -bool false - -# Speed up Mission Control animations -defaults write com.apple.dock expose-animation-duration -float 0.1 - -# Don’t group windows by application in Mission Control -# (i.e. use the old Exposé behavior instead) -defaults write com.apple.dock expose-group-by-app -bool false - -# Disable Dashboard -defaults write com.apple.dashboard mcx-disabled -bool true - -# Don’t show Dashboard as a Space -defaults write com.apple.dock dashboard-in-overlay -bool true - -# Don’t automatically rearrange Spaces based on most recent use -defaults write com.apple.dock mru-spaces -bool false - -# Remove the auto-hiding Dock delay -defaults write com.apple.dock autohide-delay -float 0.5 -# Remove the animation when hiding/showing the Dock -defaults write com.apple.dock autohide-time-modifier -float 0 - -# Automatically hide and show the Dock -defaults write com.apple.dock autohide -bool true - -# Make Dock icons of hidden applications translucent -#defaults write com.apple.dock showhidden -bool true - -# Disable the Launchpad gesture (pinch with thumb and three fingers) -defaults write com.apple.dock showLaunchpadGestureEnabled -int 0 - -# Reset Launchpad, but keep the desktop wallpaper intact -#find "${HOME}/Library/Application Support/Dock" -name "*-*.db" -maxdepth 1 -delete - -# Add iOS Simulator to Launchpad -# sudo ln -sf "/Applications/Xcode.app/Contents/Developer/Applications/iOS Simulator.app" "/Applications/iOS Simulator.app" - -# Add a spacer to the left side of the Dock (where the applications are) -# defaults write com.apple.dock persistent-apps -array-add '{tile-data={}; tile-type="spacer-tile";}' -# Add a spacer to the right side of the Dock (where the Trash is) -# defaults write com.apple.dock persistent-others -array-add '{tile-data={}; tile-type="spacer-tile";}' - -# Hot corners -# Possible values: -# 0: no-op -# 2: Mission Control -# 3: Show application windows -# 4: Desktop -# 5: Start screen saver -# 6: Disable screen saver -# 7: Dashboard -# 10: Put display to sleep -# 11: Launchpad -# 12: Notification Center -# Top left screen corner → Mission Control -# defaults write com.apple.dock wvous-tl-corner -int 2 -# defaults write com.apple.dock wvous-tl-modifier -int 0 -# Top right screen corner → Desktop -# defaults write com.apple.dock wvous-tr-corner -int 4 -# defaults write com.apple.dock wvous-tr-modifier -int 0 -# Bottom left screen corner → Start screen saver -# defaults write com.apple.dock wvous-bl-corner -int 5 -# defaults write com.apple.dock wvous-bl-modifier -int 0 - - -############################################################################### -# Safari & WebKit # -############################################################################### - -# Privacy: don’t send search queries to Apple -defaults write com.apple.Safari UniversalSearchEnabled -bool false -defaults write com.apple.Safari SuppressSearchSuggestions -bool true - -# Press Tab to highlight each item on a web page -defaults write com.apple.Safari WebKitTabToLinksPreferenceKey -bool true -defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2TabsToLinks -bool true - -# Show the full URL in the address bar (note: this still hides the scheme) -defaults write com.apple.Safari ShowFullURLInSmartSearchField -bool true - -# Set Safari’s home page to `about:blank` for faster loading -defaults write com.apple.Safari HomePage -string "about:blank" - -# Prevent Safari from opening ‘safe’ files automatically after downloading -defaults write com.apple.Safari AutoOpenSafeDownloads -bool false - -# Allow hitting the Backspace key to go to the previous page in history -defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2BackspaceKeyNavigationEnabled -bool true - -# Hide Safari’s bookmarks bar by default -defaults write com.apple.Safari ShowFavoritesBar -bool false - -# Hide Safari’s sidebar in Top Sites -defaults write com.apple.Safari ShowSidebarInTopSites -bool false - -# Disable Safari’s thumbnail cache for History and Top Sites -defaults write com.apple.Safari DebugSnapshotsUpdatePolicy -int 2 - -# Enable Safari’s debug menu -defaults write com.apple.Safari IncludeInternalDebugMenu -bool true - -# Make Safari’s search banners default to Contains instead of Starts With -defaults write com.apple.Safari FindOnPageMatchesWordStartsOnly -bool false - -# Remove useless icons from Safari’s bookmarks bar -defaults write com.apple.Safari ProxiesInBookmarksBar "()" - -# Enable the Develop menu and the Web Inspector in Safari -defaults write com.apple.Safari IncludeDevelopMenu -bool true -defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true -defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true - -# Add a context menu item for showing the Web Inspector in web views -defaults write NSGlobalDomain WebKitDeveloperExtras -bool true - - -############################################################################### -# Mail # -############################################################################### - -# Disable send and reply animations in Mail.app -#defaults write com.apple.mail DisableReplyAnimations -bool true -#defaults write com.apple.mail DisableSendAnimations -bool true - -# Copy email addresses as `foo@example.com` instead of `Foo Bar ` in Mail.app -#defaults write com.apple.mail AddressesIncludeNameOnPasteboard -bool false - -# Add the keyboard shortcut ⌘ + Enter to send an email in Mail.app -#defaults write com.apple.mail NSUserKeyEquivalents -dict-add "Send" -string "@\\U21a9" - -# Display emails in threaded mode, sorted by date (oldest at the top) -#defaults write com.apple.mail DraftsViewerAttributes -dict-add "DisplayInThreadedMode" -string "yes" -#defaults write com.apple.mail DraftsViewerAttributes -dict-add "SortedDescending" -string "yes" -#defaults write com.apple.mail DraftsViewerAttributes -dict-add "SortOrder" -string "received-date" - -# Disable inline attachments (just show the icons) -#defaults write com.apple.mail DisableInlineAttachmentViewing -bool true - -# Disable automatic spell checking -#defaults write com.apple.mail SpellCheckingBehavior -string "NoSpellCheckingEnabled" - - -############################################################################### -# Spotlight # -############################################################################### - -# Hide Spotlight tray-icon (and subsequent helper) -sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search -# Disable Spotlight indexing for any volume that gets mounted and has not yet -# been indexed before. -# Use `sudo mdutil -i off "/Volumes/foo"` to stop indexing any volume. -sudo defaults write /.Spotlight-V100/VolumeConfiguration Exclusions -array "/Volumes" -# Change indexing order and disable some search results -# Yosemite-specific search results (remove them if your are using OS X 10.9 or older): -# MENU_DEFINITION -# MENU_CONVERSION -# MENU_EXPRESSION -# MENU_SPOTLIGHT_SUGGESTIONS (send search queries to Apple) -# MENU_WEBSEARCH (send search queries to Apple) -# MENU_OTHER -#defaults write com.apple.spotlight orderedItems -array \ -# '{"enabled" = 1;"name" = "APPLICATIONS";}' \ -# '{"enabled" = 1;"name" = "SYSTEM_PREFS";}' \ -# '{"enabled" = 1;"name" = "DIRECTORIES";}' \ -# '{"enabled" = 1;"name" = "PDF";}' \ -# '{"enabled" = 1;"name" = "FONTS";}' \ -# '{"enabled" = 0;"name" = "DOCUMENTS";}' \ -# '{"enabled" = 0;"name" = "MESSAGES";}' \ -# '{"enabled" = 0;"name" = "CONTACT";}' \ -# '{"enabled" = 0;"name" = "EVENT_TODO";}' \ -# '{"enabled" = 0;"name" = "IMAGES";}' \ -# '{"enabled" = 0;"name" = "BOOKMARKS";}' \ -# '{"enabled" = 0;"name" = "MUSIC";}' \ -# '{"enabled" = 0;"name" = "MOVIES";}' \ -# '{"enabled" = 0;"name" = "PRESENTATIONS";}' \ -# '{"enabled" = 0;"name" = "SPREADSHEETS";}' \ -# '{"enabled" = 0;"name" = "SOURCE";}' \ -# '{"enabled" = 0;"name" = "MENU_DEFINITION";}' \ -# '{"enabled" = 0;"name" = "MENU_OTHER";}' \ -# '{"enabled" = 0;"name" = "MENU_CONVERSION";}' \ -# '{"enabled" = 0;"name" = "MENU_EXPRESSION";}' \ -# '{"enabled" = 0;"name" = "MENU_WEBSEARCH";}' \ -# '{"enabled" = 0;"name" = "MENU_SPOTLIGHT_SUGGESTIONS";}' -# Load new settings before rebuilding the index -# killall mds -# Make sure indexing is enabled for the main volume -# sudo mdutil -i on / -# Rebuild the index from scratch -# sudo mdutil -E / - - -############################################################################### -# Terminal # -############################################################################### - -# Only use UTF-8 in Terminal.app -defaults write com.apple.terminal StringEncodings -array 4 - -# Use a modified version of the Monokai Soda theme by default in Terminal.app -TERM_PROFILE='Monokai Soda'; -CURRENT_PROFILE="$(defaults read com.apple.terminal 'Default Window Settings')"; -if [ "${CURRENT_PROFILE}" != "${TERM_PROFILE}" ]; then - open "${HOME}/.dotfiles/osx/init/${TERM_PROFILE}.terminal"; - sleep 1; # Wait a bit to make sure the theme is loaded - defaults write com.apple.terminal 'Default Window Settings' -string "${TERM_PROFILE}"; - defaults write com.apple.terminal 'Startup Window Settings' -string "${TERM_PROFILE}"; -fi; - -# Enable “focus follows mouse” for Terminal.app and all X11 apps -# i.e. hover over a window and start typing in it without clicking first -# defaults write com.apple.terminal FocusFollowsMouse -bool true -# defaults write org.x.X11 wm_ffm -bool true - - -############################################################################### -# Time Machine # -############################################################################### - -# Prevent Time Machine from prompting to use new hard drives as backup volume -defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true - -# Disable local Time Machine backups -hash tmutil &> /dev/null && sudo tmutil disablelocal - - -############################################################################### -# Activity Monitor # -############################################################################### - -# Show the main window when launching Activity Monitor -defaults write com.apple.ActivityMonitor OpenMainWindow -bool true - -# Visualize CPU usage in the Activity Monitor Dock icon -defaults write com.apple.ActivityMonitor IconType -int 5 - -# Show all processes in Activity Monitor -defaults write com.apple.ActivityMonitor ShowCategory -int 0 - -# Sort Activity Monitor results by CPU usage -defaults write com.apple.ActivityMonitor SortColumn -string "CPUUsage" -defaults write com.apple.ActivityMonitor SortDirection -int 0 - - -############################################################################### -# Address Book, Dashboard, iCal, TextEdit, and Disk Utility # -############################################################################### - -# Enable the debug menu in Address Book -# defaults write com.apple.addressbook ABShowDebugMenu -bool true - -# Enable Dashboard dev mode (allows keeping widgets on the desktop) -# defaults write com.apple.dashboard devmode -bool true - -# Enable the debug menu in iCal (pre-10.8) -# defaults write com.apple.iCal IncludeDebugMenu -bool true - -# Use plain text mode for new TextEdit documents -defaults write com.apple.TextEdit RichText -int 0 -# Open and save files as UTF-8 in TextEdit -defaults write com.apple.TextEdit PlainTextEncoding -int 4 -defaults write com.apple.TextEdit PlainTextEncodingForWrite -int 4 - -# Enable the debug menu in Disk Utility -# defaults write com.apple.DiskUtility DUDebugMenuEnabled -bool true -# defaults write com.apple.DiskUtility advanced-image-options -bool true - - -############################################################################### -# Messages # -############################################################################### - -# Disable automatic emoji substitution (i.e. use plain text smileys) -defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticEmojiSubstitutionEnablediMessage" -bool false - -# Disable smart quotes as it’s annoying for messages that contain code -defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticQuoteSubstitutionEnabled" -bool false - -# Disable continuous spell checking -defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "continuousSpellCheckingEnabled" -bool false - - -############################################################################### -# Keep additonal commands separate so diff in future is easy # -############################################################################### - -# Menu bar: Set date and time format e.g. Sun 11 Aug 16:55 -#defaults write com.apple.menuextra.clock DateFormat -string "E MMM d HH:mm" - -# Menu bar: Set date and time format e.g. Sun Aug 11 4:55 pm -defaults write com.apple.menuextra.clock DateFormat -string "EEE d MMM h:mm a" - - -############################################################################### -# Kill affected applications # -############################################################################### - -# for app in "Activity Monitor" "Address Book" "Calendar" "Contacts" "cfprefsd" \ -# "Dock" "Finder" "Google Chrome" "Google Chrome Canary" "Mail" "Messages" \ -# "Opera" "Safari" "SizeUp" "Spectacle" "SystemUIServer" "Terminal" \ -# "Transmission" "Twitter" "iCal"; do -# killall "${app}" > /dev/null 2>&1 -# done -# echo "Done. Note that some of these changes require a logout/restart to take effect." diff --git a/osx/set-prefs.sh b/osx/set-prefs.sh deleted file mode 100755 index 7d07a38..0000000 --- a/osx/set-prefs.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env bash -# -# Sets OS X Application preferences. - - -############################################################################### -# iTerm 2 # -############################################################################### - -# Install the Monokai Soda theme for iTerm -open "$HOME"/.dotfiles/osx/init/Monokai\ Soda.itermcolors - -# Don’t display the annoying prompt when quitting iTerm -defaults write com.googlecode.iterm2 PromptOnQuit -bool false - - -############################################################################### -# Google Chrome & Google Chrome Canary # -############################################################################### - -# Allow installing user scripts via GitHub Gist or Userscripts.org -# defaults write com.google.Chrome ExtensionInstallSources -array "https://gist.githubusercontent.com/" "http://userscripts.org/*" -# defaults write com.google.Chrome.canary ExtensionInstallSources -array "https://gist.githubusercontent.com/" "http://userscripts.org/*" - -# Disable the all too sensitive backswipe -defaults write com.google.Chrome AppleEnableSwipeNavigateWithScrolls -bool false -defaults write com.google.Chrome.canary AppleEnableSwipeNavigateWithScrolls -bool false - -# Use the system-native print preview dialog -defaults write com.google.Chrome DisablePrintPreview -bool true -defaults write com.google.Chrome.canary DisablePrintPreview -bool true - - -############################################################################### -# SizeUp.app # -############################################################################### - -# Start SizeUp at login -# defaults write com.irradiatedsoftware.SizeUp StartAtLogin -bool true - -# Don’t show the preferences window on next start -# defaults write com.irradiatedsoftware.SizeUp ShowPrefsOnNextStart -bool false - - -############################################################################### -# Google Update Stopper # -############################################################################### - -GOOGLE_UPDATER_FILE="Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/Resources/install.py" - -# Remove global update-agent -if [ -f "$GOOGLE_UPDATER_FILE" ]; -then - sudo "/$GOOGLE_UPDATER_FILE" --uninstall -fi - -# Remove local update-agent -if [ -f "$GOOGLE_UPDATER_FILE" ]; -then - sudo "$HOME/$GOOGLE_UPDATER_FILE" --uninstall -fi - -# Void the update-checker -defaults write com.google.Keystone.Agent checkInterval 0 - - -############################################################################### -# Sublime Text # -############################################################################### - -SUBLIME_DOT_PREFS="$HOME/.dotfiles/osx/init/Sublime" -SUBLIME_PREF_PATH="$HOME/Library/Application\ Support/Sublime\ Text\ 3/Packages/User/" - -if [ -d "$SUBLIME_PREF_PATH" ]; -then - # Install Sublime Text settings - cp "$SUBLIME_DOT_PREFS/Preferences.sublime-settings" "$SUBLIME_PREF_PATH" - - # Install Sublime Text key bindings - cp "$SUBLIME_DOT_PREFS"/Default\ '(OSX)'.sublime-keymap "$SUBLIME_PREF_PATH" - - # Install Sublime Text lessc build - cp "$SUBLIME_DOT_PREFS/less.sublime-build" "$SUBLIME_PREF_PATH" - - # Install Sublime Text themes - cp -a "$SUBLIME_DOT_PREFS/Themes" "$SUBLIME_PREF_PATH" - - # Install Sublime Text snippets - cp -a "$SUBLIME_DOT_PREFS/Snippets" "$SUBLIME_PREF_PATH" -fi - -############################################################################### -# Twitter.app # -############################################################################### - -# # Disable smart quotes as it’s annoying for code tweets -# defaults write com.twitter.twitter-mac AutomaticQuoteSubstitutionEnabled -bool false - -# # Show the app window when clicking the menu icon -# defaults write com.twitter.twitter-mac MenuItemBehavior -int 1 - -# # Enable the hidden ‘Develop’ menu -# defaults write com.twitter.twitter-mac ShowDevelopMenu -bool true - -# # Open links in the background -# defaults write com.twitter.twitter-mac openLinksInBackground -bool true - -# # Allow closing the ‘new tweet’ window by pressing `Esc` -# defaults write com.twitter.twitter-mac ESCClosesComposeWindow -bool true - -# # Show full names rather than Twitter handles -# defaults write com.twitter.twitter-mac ShowFullNames -bool true - -# # Hide the app in the background if it’s not the front-most window -# defaults write com.twitter.twitter-mac HideInBackground -bool true - - -############################################################################### -# Kill affected applications # -############################################################################### - -# for app in "Activity Monitor" "Address Book" "Calendar" "Contacts" "cfprefsd" \ -# "Dock" "Finder" "Google Chrome" "Google Chrome Canary" "Mail" "Messages" \ -# "Opera" "Safari" "SizeUp" "Spectacle" "SystemUIServer" "Terminal" \ -# "Transmission" "Twitter" "iCal"; do -# killall "${app}" > /dev/null 2>&1 -# done -# echo "Done. Note that some of these changes require a logout/restart to take effect." diff --git a/packer/install.sh b/packer/install.sh deleted file mode 100755 index 7eb6706..0000000 --- a/packer/install.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -# -# Install Packer - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "packer" &> /dev/null; then - sh_info "Installing Packer..." - if type "brew" &> /dev/null; then - brew install packer - elif type "apt-get" &> /dev/null; then - # sudo apt-get update - sudo apt-get -y install packer - elif type "yum" &> /dev/null; then - sudo yum install packer - fi -fi - -if type "packer" &> /dev/null; then - sh_success "$(packer --version) installed: $(command -v packer)" -fi diff --git a/php/install-php56.sh b/php/install-php56.sh deleted file mode 100755 index 17507a3..0000000 --- a/php/install-php56.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env bash -# -# Install PHP 5.6.* -# -# This installs PHP and common extensions. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if type "brew" &> /dev/null; then - - if [ ! "$(brew ls --versions php56)" ]; then - sh_info "Installing PHP 5.6..." - brew install php56 --with-gmp - else - sh_success "$(brew ls --versions php56) installed: $(command -v php)" - fi - - sh_info "Installing primary PHP extensions/modules..." - - [[ ! "$(brew ls --versions php56-geoip)" ]] && brew install php56-geoip - [[ ! "$(brew ls --versions php56-intl)" ]] && brew install php56-intl - [[ ! "$(brew ls --versions php56-mcrypt)" ]] && brew install php56-mcrypt - [[ ! "$(brew ls --versions php56-pspell)" ]] && brew install php56-pspell - [[ ! "$(brew ls --versions php56-ssh2)" ]] && brew install php56-ssh2 - - sh_info "Installing PHP storage/cache extensions/modules..." - - [[ ! "$(brew ls --versions php56-memcached)" ]] && brew install php56-memcached - [[ ! "$(brew ls --versions php56-mongodb)" ]] && brew install php56-mongodb - [[ ! "$(brew ls --versions php56-opcache)" ]] && brew install php56-opcache - [[ ! "$(brew ls --versions php56-pdo-pgsql)" ]] && brew install php56-pdo-pgsql - [[ ! "$(brew ls --versions php56-redis)" ]] && brew install php56-redis - # [[ ! "$(brew ls --versions php56-xcache)" ]] && brew install php56-xcache - - sh_info "Installing PHP utility extensions/modules..." - - [[ ! "$(brew ls --versions php56-suhosin)" ]] && brew install php56-suhosin - # [[ ! "$(brew ls --versions php56-tidy)" ]] && brew install php56-tidy - [[ ! "$(brew ls --versions php56-xdebug)" ]] && brew install php56-xdebug - - sh_info "Installing PHP media extensions/modules..." - - [[ ! "$(brew ls --versions php56-imagick)" ]] && brew install php56-imagick - # [[ ! "$(brew ls --versions php56-pdflib)" ]] && brew install php56-pdflib - - sh_info "Installing PHP PEAR/PECL extensions/modules..." - - [[ ! "$(brew ls --versions php56-raphf)" ]] && brew install php56-raphf - [[ ! "$(brew ls --versions php56-propro)" ]] && brew install php56-propro - [[ ! "$(brew ls --versions php56-http)" ]] && brew install php56-http - [[ ! "$(brew ls --versions php56-oauth)" ]] && brew install php56-oauth - [[ ! "$(brew ls --versions php56-yaml)" ]] && brew install php56-yaml - - sh_info "Re-installing PHP to avoid errors..." - brew reinstall php56 --with-gmp - -fi diff --git a/php/install-php70.sh b/php/install-php70.sh deleted file mode 100755 index 45297d5..0000000 --- a/php/install-php70.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env bash -# -# Install PHP 7.0.* -# -# This installs PHP and common extensions. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if type "brew" &> /dev/null; then - - if [ ! "$(brew ls --versions php70)" ]; then - sh_info "Installing PHP 7.0..." - brew install php70 --with-gmp - else - sh_success "$(brew ls --versions php70) installed: $(command -v php)" - fi - - sh_info "Installing primary PHP extensions/modules..." - - # [[ ! "$(brew ls --versions php70-geoip)" ]] && brew install php70-geoip - [[ ! "$(brew ls --versions php70-intl)" ]] && brew install php70-intl - [[ ! "$(brew ls --versions php70-mcrypt)" ]] && brew install php70-mcrypt - [[ ! "$(brew ls --versions php70-pspell)" ]] && brew install php70-pspell - - sh_info "Installing PHP storage/cache extensions/modules..." - - [[ ! "$(brew ls --versions php70-memcached)" ]] && brew install php70-memcached - [[ ! "$(brew ls --versions php70-opcache)" ]] && brew install php70-opcache - [[ ! "$(brew ls --versions php70-pdo-pgsql)" ]] && brew install php70-pdo-pgsql - [[ ! "$(brew ls --versions php70-redis)" ]] && brew install php70-redis - - sh_info "Installing PHP utility extensions/modules..." - - [[ ! "$(brew ls --versions php70-xdebug)" ]] && brew install php70-xdebug - - sh_info "Installing PHP media extensions/modules..." - - [[ ! "$(brew ls --versions php70-imagick)" ]] && brew install php70-imagick - - sh_info "Installing PHP PEAR/PECL extensions/modules..." - - # [[ ! "$(brew ls --versions php70-raphf)" ]] && brew install php70-raphf - # [[ ! "$(brew ls --versions php70-propro)" ]] && brew install php70-propro - # [[ ! "$(brew ls --versions php70-http)" ]] && brew install php70-http - # [[ ! "$(brew ls --versions php70-oauth)" ]] && brew install php70-oauth - [[ ! "$(brew ls --versions php70-yaml)" ]] && brew install php70-yaml - - sh_info "Re-installing PHP to avoid errors..." - brew reinstall php70 --with-gmp - -fi diff --git a/php/install-phpcs.sh b/php/install-phpcs.sh deleted file mode 100755 index b47f405..0000000 --- a/php/install-phpcs.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -# -# Install PHP CodeSniffer -# https://github.com/squizlabs/PHP_CodeSniffer - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "phpcs" &> /dev/null; then - sh_info "Installing PHP CodeSniffer..." - if type "brew" &> /dev/null; then - brew install php-code-sniffer - fi -fi - -if type "phpcs" &> /dev/null; then - sh_success "PHP CodeSniffer $(phpcs --version) installed: $(command -v phpcs)" -fi diff --git a/php/install-phplint.sh b/php/install-phplint.sh deleted file mode 100755 index 5b6b391..0000000 --- a/php/install-phplint.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -# -# Install PHPLint -# http://www.icosaedro.it/phplint/ - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "phplint" &> /dev/null; then - sh_info "Installing PHPLint..." - if type "brew" &> /dev/null; then - brew install gcc - brew install phplint - fi -fi - -if type "phplint" &> /dev/null; then - sh_success "PHPLint $(phplint --version) installed: $(command -v phplint)" -fi diff --git a/php/install-phpmd.sh b/php/install-phpmd.sh deleted file mode 100755 index 0989e2f..0000000 --- a/php/install-phpmd.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -# -# Install PHP Mess Detector -# http://phpmd.org - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "phpmd" &> /dev/null; then - sh_info "Installing PHP Mess Detector..." - if type "brew" &> /dev/null; then - brew install phpmd - fi -fi - -if type "phpmd" &> /dev/null; then - sh_success "PHP Mess Detector $(phpmd --version) installed: $(command -v phpmd)" -fi diff --git a/php/install-phpmyadmin.sh b/php/install-phpmyadmin.sh deleted file mode 100755 index ffe50ee..0000000 --- a/php/install-phpmyadmin.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -# -# Install phpMyAdmin -# http://www.phpmyadmin.net - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "phpmyadmin" &> /dev/null; then - sh_info "Installing phpMyAdmin..." - if type "brew" &> /dev/null; then - brew install phpmyadmin - fi -fi - -if type "phpmyadmin" &> /dev/null; then - sh_success "phpMyAdmin $(phpmyadmin --version) installed: $(command -v phpmyadmin)" -fi diff --git a/php/install-phpunit.sh b/php/install-phpunit.sh deleted file mode 100755 index 8b47e50..0000000 --- a/php/install-phpunit.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -# -# Install PHPUnit -# https://phpunit.de - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "phpunit" &> /dev/null; then - sh_info "Installing PHPUnit..." - if type "brew" &> /dev/null; then - brew install phpunit - #brew install phpunit-skeleton-generator - elif type "composer" &> /dev/null; then - composer global require "phpunit/phpunit" - elif type "apt-get" &> /dev/null; then - wget https://phar.phpunit.de/phpunit.phar - chmod +x phpunit.phar - sudo mv phpunit.phar /usr/bin/phpunit - fi -fi - -if type "phpunit" &> /dev/null; then - sh_success "PHPUnit $(phpunit --version) installed: $(command -v phpunit)" -fi diff --git a/php/install.sh b/php/install.sh deleted file mode 100755 index a669ada..0000000 --- a/php/install.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash -# -# Install PHP -# -# This installs PHP and common extensions using Homebrew. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -DOTPHP=$( cd "${BASH_SOURCE%/*}" && pwd ) - -# Install PHP -installphp () { - local action= - sh_user "Which PHP version do you want to install?" - sh_text "${Underline:-}a${Reset:-}) 5.6.* / ${Underline:-}b${Reset:-}) 7.0.* / ${Underline:-}n${Reset:-}one" - read -r -n 1 action - case "$action" in - a ) # PHP 5.6.+ - [[ -s "$DOTPHP/install-php56.sh" ]] && . "$DOTPHP/install-php56.sh" - ;; - b ) # PHP 7.0.+ - [[ -s "$DOTPHP/install-php70.sh" ]] && . "$DOTPHP/install-php70.sh" - ;; - * ) - sh_alert "You elected not to install PHP." - ;; - esac -} -installphp - -# https://github.com/squizlabs/PHP_CodeSniffer -[[ -s "$DOTPHP/install-phpcs.sh" ]] && . "$DOTPHP/install-phpcs.sh" - -# http://phpmd.org -[[ -s "$DOTPHP/install-phpmd.sh" ]] && . "$DOTPHP/install-phpmd.sh" - -# http://www.phpmyadmin.net -[[ -s "$DOTPHP/install-phpmyadmin.sh" ]] && . "$DOTPHP/install-phpmyadmin.sh" - -# https://phpunit.de -[[ -s "$DOTPHP/install-phpunit.sh" ]] && . "$DOTPHP/install-phpunit.sh" diff --git a/php/path.zsh b/php/path.zsh deleted file mode 100755 index 9fb4855..0000000 --- a/php/path.zsh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -# php56 support: -if type "brew" &> /dev/null && [[ "$(brew ls --versions php56)" ]]; then - export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH" -fi - -# php70 support: -if type "brew" &> /dev/null && [[ "$(brew ls --versions php70)" ]]; then - export PATH="$(brew --prefix homebrew/php/php70)/bin:$PATH" -fi diff --git a/postgresql/install.sh b/postgresql/install.sh deleted file mode 100755 index af62ec1..0000000 --- a/postgresql/install.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -# -# Install PostGreSQL - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "postgres" &> /dev/null; then - sh_info "Installing PostGreSQL..." - if type "brew" &> /dev/null; then - brew install postgresql - elif type "apt-get" &> /dev/null; then - # sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' > /etc/apt/sources.list.d/pgdg.list" - # wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - - # sudo apt-get update - sudo apt-get -y install postgresql-common - sudo apt-get -y install postgresql-9.3 libpq-dev - elif type "yum" &> /dev/null; then - sudo yum install postgresql - fi -fi - -if type "postgres" &> /dev/null; then - sh_success "$(postgres --version) installed: $(command -v postgres)" -fi diff --git a/prezto/install.sh b/prezto/install.sh deleted file mode 100755 index 0079ac0..0000000 --- a/prezto/install.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bash -# -# Install Prezto -# https://github.com/sorin-ionescu/prezto - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if [[ ! -d "$HOME/.zprezto" ]]; then - if type "git" &> /dev/null; then - sh_info "Cloning Prezto to your home directory: ~/.prezto..." - git clone --recursive https://github.com/sorin-ionescu/prezto.git "$HOME/.zprezto" - elif type "curl" &> /dev/null; then - sh_info "Downloading/extracting Prezto to your home directory: ~/.prezto..." - cd || echo - curl -LOk https://github.com/sorin-ionescu/prezto/archive/master.zip - unzip master.zip - mv prezto-master .prezto - rm master.zip - fi - # Vagrant installations - if [[ -d "$HOME/.zprezto" ]] && [[ -d "/home/vagrant" ]]; then - sh_info "Cloning Prezto to your Vagrant directory: /home/vagrant/.prezto..." - # copy ~/.zprezto for `vagrant` user - cp -a "$HOME/.zprezto" "/home/vagrant/.zprezto" - if [[ -d "/home/vagrant/.zprezto" ]]; then - # change ownership to `vagrant` user - chown -Rf vagrant "/home/vagrant/.zprezto" - sh_success "Prezto installed: /home/vagrant/.zprezto" - fi - fi -fi - -if [[ -d "$HOME/.zprezto" ]]; then - sh_success "Prezto installed: $HOME/.zprezto" -fi diff --git a/python/install.sh b/python/install.sh deleted file mode 100755 index a46e251..0000000 --- a/python/install.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# -# Install Python - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "python" &> /dev/null; then - sh_info "Installing Python..." - if type "brew" &> /dev/null; then - brew install python - # If you switch to the brewed Python, then reinstall all formulae with python bindings - # See: https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Homebrew-and-Python.md#homebrew-provided-python-bindings - brew reinstall pyside wxwidgets pygtk pygobject opencv vtk boost-python - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install python - elif type "yum" &> /dev/null; then - sudo yum install python - fi -fi - -if type "python" &> /dev/null; then - sh_success "$(python --version) installed: $(command -v python)" -fi diff --git a/rails/install.sh b/rails/install.sh deleted file mode 100755 index dc72db2..0000000 --- a/rails/install.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -# -# Install Ruby On Rails - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "rails" &> /dev/null; then - - # Ensure Ruby/rbenv is installed and gem/rbenv commands are available. - if ! type "gem" &> /dev/null || ! type "rbenv" &> /dev/null; then - . "$DOTFILES/ruby/install.sh" - fi - - # Ensure Node.js is installed. - ! type "node" &> /dev/null && . "$DOTFILES/node/install.sh" - - if type "gem" &> /dev/null; then - . "$DOTFILES/ruby/gem-update.sh" - sh_info "Installing Ruby On Rails..." - gem install rails -v 5.2.2 - fi - - . "$DOTFILES/ruby/rehash.sh" -fi - -if type "rails" &> /dev/null; then - sh_success "$(rails --version) installed: $(command -v rails)\\n" - gem which rails - echo -fi diff --git a/rbenv/completion.bash b/rbenv/completion.bash deleted file mode 100644 index fde2c4e..0000000 --- a/rbenv/completion.bash +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# -# https://github.com/sstephenson/rbenv/blob/master/completions/rbenv.bash - -_rbenv() { - COMPREPLY=() - local word="${COMP_WORDS[COMP_CWORD]}" - - if [ "$COMP_CWORD" -eq 1 ]; then - # shellcheck disable=SC2207 - COMPREPLY=( $(compgen -W "$(rbenv commands)" -- "$word") ) - else - local words=("${COMP_WORDS[@]}") - unset words["0"] - unset words["$COMP_CWORD"] - local completions - completions=$(rbenv completions "${words[@]}") - # shellcheck disable=SC2207 - COMPREPLY=( $(compgen -W "$completions" -- "$word") ) - fi -} - -if type "rbenv" &> /dev/null; then - complete -F _rbenv rbenv -fi diff --git a/rbenv/completion.zsh b/rbenv/completion.zsh deleted file mode 100755 index 44d4207..0000000 --- a/rbenv/completion.zsh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -# -# https://github.com/sstephenson/rbenv/blob/master/completions/rbenv.zsh - -# if [[ ! -o interactive ]]; then -# return -# fi - -# if type "rbenv" &> /dev/null; then -# compctl -K _rbenv rbenv -# fi - -# _rbenv() { -# local words completions -# read -r -cA words - -# if [[ "${#words}" -eq 2 ]]; then -# completions="$(rbenv commands)" -# else -# completions="$(rbenv completions ${words[2,-2]})" -# fi - -# reply=("${(ps:\n:)completions}") -# } diff --git a/rbenv/init.zsh b/rbenv/init.zsh deleted file mode 100755 index 1ac7d1e..0000000 --- a/rbenv/init.zsh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -# -# Initiate Ruby-environment (rbenv) - -# if type "rbenv" &> /dev/null; then -# # Mac-only: Use Homebrew's directories instead of ~/.rbenv (add to your profile): -# if type "brew" &> /dev/null && [[ "$(brew ls --versions rbenv)" ]]; then -# export RBENV_ROOT="$(brew --prefix)/var/rbenv" -# fi - -# # To enable shims and autocompletion add to your profile: -# # eval "$(rbenv init -)"; -# # eval "$(rbenv init - zsh)"; -# # eval "$(rbenv init - --no-rehash)" -# fi diff --git a/rbenv/install.sh b/rbenv/install.sh deleted file mode 100755 index 57e27c2..0000000 --- a/rbenv/install.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash -# -# Install Ruby-environment (rbenv) - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -# Install Ruby-environment (rbenv) -if ! type "rbenv" &> /dev/null; then - # For Mac; rbenv is best installed using Homebrew - if ! type "brew" &> /dev/null && [[ "$OSTYPE" == "darwin"* ]]; then - . "$DOTFILES/brew/install.sh" - fi - # For Linux/*; rbenv requires Git, so let's install that too - ! type "git" &> /dev/null && . "$DOTFILES/git/install.sh" - - sh_info "Installing Ruby-environment (rbenv) and Ruby-build..." - if type "brew" &> /dev/null; then - brew install rbenv ruby-build - elif type "git" &> /dev/null; then - cd || echo - git clone git://github.com/sstephenson/rbenv.git .rbenv - git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build - git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash - fi - # Initiate rbenv - source "$( cd "${BASH_SOURCE%/*}" && pwd )/init.zsh" - # Restart Shell - exec "$SHELL" -fi - -if type "rbenv" &> /dev/null; then - sh_success "$(rbenv --version) installed: $(command -v rbenv)" -fi - -if type "ruby-build" &> /dev/null; then - sh_success "$(ruby-build --version) installed: $(command -v ruby-build)" -fi diff --git a/rbenv/path.zsh b/rbenv/path.zsh deleted file mode 100755 index 0a30bc4..0000000 --- a/rbenv/path.zsh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash -# -# PATHs for; rbenv/ruby-build - -# [[ -d "$HOME/.rbenv/shims" ]] && export PATH="$HOME/.rbenv/shims:$PATH" -# [[ -d "$HOME/.rbenv/bin" ]] && export PATH="$HOME/.rbenv/bin:$PATH" -# [[ -d "$HOME/.rbenv/plugins/ruby-build/bin" ]] && export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH" diff --git a/redis/install.sh b/redis/install.sh deleted file mode 100755 index 1c3cf60..0000000 --- a/redis/install.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -# -# Install Redis - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "redis-cli" &> /dev/null; then - sh_info "Installing Redis..." - if type "brew" &> /dev/null; then - brew install redis - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install redis - elif type "yum" &> /dev/null; then - sudo yum install redis - fi -fi - -if type "redis-cli" &> /dev/null; then - sh_success "$(redis-cli --version) installed: $(command -v redis-cli)" -fi diff --git a/ruby/aliases.zsh b/ruby/aliases.zsh deleted file mode 100755 index aa9605c..0000000 --- a/ruby/aliases.zsh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -alias sc="script/console" -alias sg="script/generate" -alias sd="script/destroy" diff --git a/ruby/gem-update.sh b/ruby/gem-update.sh deleted file mode 100755 index 1f352ab..0000000 --- a/ruby/gem-update.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# -# Check gems are up to date without installing documentation - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if type "gem" &> /dev/null; then - sh_info "Updating Ruby gems..." - gem update --system --no-document -fi diff --git a/ruby/install.sh b/ruby/install.sh deleted file mode 100755 index 0b6f6c2..0000000 --- a/ruby/install.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -# -# Install Ruby et.al. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -# Install Ruby-dependencies for Debian-based systems -if type "apt-get" &> /dev/null; then - sudo apt-get update - sh_info "Installing some dependencies for Ruby..." - sudo apt-get -y install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev -elif type "brew" &> /dev/null; then - brew install ruby -fi - -# Install Bundler on Linux systems -# http://bundler.io -# Recommended by: https://gorails.com/setup -if ! type "bundler" &> /dev/null; then - if type "gem" &> /dev/null; then - sh_info "Installing Bundler (http://bundler.io)..." - sh_note "Recommended by: https://gorails.com/setup" - gem install bundler - if type "bundler" &> /dev/null; then - sh_success "$(bundler --version) installed: $(command -v bundler)" - fi - fi -fi - -if type "ruby" &> /dev/null; then - sh_success "$(ruby --version) installed: $(command -v ruby)" -fi - -# # Install Ruby-environment (rbenv) -# ! type "rbenv" &> /dev/null && . "$DOTFILES/rbenv/install.sh" - -# # Install Ruby -# if type "rbenv" &> /dev/null; then -# sh_info "Installing Ruby..." -# rbenv install 3.2.2 -# rbenv global 3.2.2 -# fi diff --git a/ruby/path.zsh b/ruby/path.zsh deleted file mode 100755 index 8c58939..0000000 --- a/ruby/path.zsh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -# -# Add PATH for gem executables - -# If you need to have openssl@1.1 first in your PATH run: -# [[ -d "$(brew --prefix openssl@1.1)/bin" ]] && export PATH="$(brew --prefix openssl@1.1)/bin:$PATH" -# For compilers to find openssl@1.1 you may need to set: -# [[ -d "$(brew --prefix openssl@1.1)/lib" ]] && export LDFLAGS="-L$(brew --prefix openssl@1.1)/lib" -# [[ -d "$(brew --prefix openssl@1.1)/include" ]] && export CPPFLAGS="-I$(brew --prefix openssl@1.1)/include" -# For pkg-config to find openssl@1.1 you may need to set: -# [[ -d "$(brew --prefix openssl@1.1)/lib/pkgconfig" ]] && export PKG_CONFIG_PATH="$(brew --prefix openssl@1.1)/lib/pkgconfig" - -# If you need to have ruby first in your PATH run: -[[ -d "$(brew --prefix ruby)/bin" ]] && export PATH="$(brew --prefix ruby)/bin:$PATH" -# For compilers to find ruby you may need to set: -[[ -d "$(brew --prefix ruby)/lib" ]] && export LDFLAGS="-L$(brew --prefix ruby)/lib" -[[ -d "$(brew --prefix ruby)/include" ]] && export CPPFLAGS="-I$(brew --prefix ruby)/include" -# For pkg-config to find ruby you may need to set: -[[ -d "$(brew --prefix ruby)/lib/pkgconfig" ]] && export PKG_CONFIG_PATH="$(brew --prefix ruby)/lib/pkgconfig" - -# By default, binaries installed by gem will be placed into: -[[ -d "$(brew --prefix)/lib/ruby/gems/2.3.0/bin" ]] && export PATH="$(brew --prefix)/lib/ruby/gems/2.3.0/bin:$PATH" -[[ -d "$(brew --prefix)/lib/ruby/gems/2.4.0/bin" ]] && export PATH="$(brew --prefix)/lib/ruby/gems/2.4.0/bin:$PATH" -[[ -d "$(brew --prefix)/lib/ruby/gems/2.5.0/bin" ]] && export PATH="$(brew --prefix)/lib/ruby/gems/2.5.0/bin:$PATH" -[[ -d "$(brew --prefix)/lib/ruby/gems/2.6.0/bin" ]] && export PATH="$(brew --prefix)/lib/ruby/gems/2.6.0/bin:$PATH" -[[ -d "$(brew --prefix)/lib/ruby/gems/3.1.0/bin" ]] && export PATH="$(brew --prefix)/lib/ruby/gems/3.1.0/bin:$PATH" - -[[ -d "$HOME/.gem/ruby/2.3.0/bin" ]] && export PATH="$HOME/.gem/ruby/2.3.0/bin:$PATH" -[[ -d "$HOME/.gem/ruby/2.4.0/bin" ]] && export PATH="$HOME/.gem/ruby/2.4.0/bin:$PATH" -[[ -d "$HOME/.gem/ruby/2.5.0/bin" ]] && export PATH="$HOME/.gem/ruby/2.5.0/bin:$PATH" -[[ -d "$HOME/.gem/ruby/2.6.0/bin" ]] && export PATH="$HOME/.gem/ruby/2.6.0/bin:$PATH" -[[ -d "$HOME/.gem/ruby/3.1.0/bin" ]] && export PATH="$HOME/.gem/ruby/3.1.0/bin:$PATH" diff --git a/ruby/rehash.sh b/ruby/rehash.sh deleted file mode 100755 index 3fa291b..0000000 --- a/ruby/rehash.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# -# Installing shims for all Ruby executables known to rbenv - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -# if type "rbenv" &> /dev/null; then -# sh_info "Installing shims for all Ruby executables known to rbenv..." -# rbenv rehash -# fi diff --git a/sass/install.sh b/sass/install.sh deleted file mode 100755 index d80b7ba..0000000 --- a/sass/install.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# Install Sass - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "sass" &> /dev/null; then - - # Ensure Ruby is installed and `gem` command is available. - ! type "gem" &> /dev/null && . "$DOTFILES/ruby/install.sh" - - if type "gem" &> /dev/null; then - . "$DOTFILES/ruby/gem-update.sh" - sh_info "Installing Sass..." - gem install sass - fi - - . "$DOTFILES/ruby/rehash.sh" -fi - -if type "sass" &> /dev/null; then - sh_success "$(sass --version) installed: $(command -v sass)\n" - gem which sass - echo -fi diff --git a/script/bootstrap b/script/bootstrap index 3d1eeab..a1bf10f 100755 --- a/script/bootstrap +++ b/script/bootstrap @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1091 # # bootstrap installs things. @@ -8,19 +9,20 @@ [[ -z "$DOTFILES" ]] && DOTFILES="$HOME/.dotfiles" if ! type "sh_success" &> /dev/null; then - . $DOTFILES/functions/sh_alert - . $DOTFILES/functions/sh_error - . $DOTFILES/functions/sh_fail - . $DOTFILES/functions/sh_info - . $DOTFILES/functions/sh_note - . $DOTFILES/functions/sh_user - . $DOTFILES/functions/sh_success - . $DOTFILES/functions/sh_text + . "$DOTFILES/functions/sh_alert" + . "$DOTFILES/functions/sh_error" + . "$DOTFILES/functions/sh_fail" + . "$DOTFILES/functions/sh_info" + . "$DOTFILES/functions/sh_note" + . "$DOTFILES/functions/sh_user" + . "$DOTFILES/functions/sh_success" + . "$DOTFILES/functions/sh_text" + . "$DOTFILES/functions/sh_yesno" fi -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # SUDO -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Ask for the administrator password upfront. sudo -v @@ -30,109 +32,133 @@ while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & set -e -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # GIT CONFIG -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- setup_gitconfig () { - if [ ! -f "$DOTFILES/git/gitconfig.symlink" ]; then - sh_info 'Setting up gitconfig.symlink' - - git_credential='cache' - if [[ "$OSTYPE" == "darwin"* ]]; then - git_credential='osxkeychain' - fi - - sh_user 'What is your github author name? (username)' - read -r -e git_authorname - sh_user 'What is your github author email? (username@users.noreply.github.com)' - read -r -e git_authoremail - - sed -e "s/AUTHORNAME/$git_authorname/g" -e "s/AUTHOREMAIL/$git_authoremail/g" -e "s/GIT_CREDENTIAL_HELPER/$git_credential/g" $DOTFILES/git/gitconfig.symlink.example > $DOTFILES/git/gitconfig.symlink - - sh_success 'gitconfig.symlink is now ready for symlinking to ~/.gitconfig' - fi + if [[ ! -r "$DOTFILES/git/gitconfig.symlink" ]]; then + sh_info 'Setting up gitconfig.symlink' + # Set Git credential storage. + git_credential='cache' + [[ "$OSTYPE" == "darwin"* ]] && git_credential='osxkeychain' + # Get user inputs. + sh_user 'What is your github author name? (username)' + read -r -e git_authorname + sh_user 'What is your github author email? (username@users.noreply.github.com)' + read -r -e git_authoremail + # Inject Git user info to gitconfig.symlink, using config-template. + sed -e "s/AUTHORNAME/$git_authorname/g" \ + -e "s/AUTHOREMAIL/$git_authoremail/g" \ + -e "s/GIT_CREDENTIAL_HELPER/$git_credential/g" \ + "$DOTFILES/git/gitconfig.symlink.example" > "$DOTFILES/git/gitconfig.symlink" + # Evaluate success + [[ -r "$DOTFILES/git/gitconfig.symlink" ]] && \ + sh_success 'gitconfig.symlink is now ready for symlinking to ~/.gitconfig' + else + sh_note 'gitconfig.symlink already exists. Please edit manually.' + fi } -setup_gitconfig +sh_yesno 'Would you like to configure the '~/.gitconfig' file/symlink?' +read -r -e _answer +[[ "$_answer" == "y"* ]] && setup_gitconfig -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # SYMLINK DOTFILES -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- -. $DOTFILES/functions/link_file -. $DOTFILES/functions/install_dotfiles +. "$DOTFILES/functions/link_file" +. "$DOTFILES/functions/install_dotfiles" install_dotfiles -#----------------------------------------------------------------------- -# HOMEBREW + GIT + RUBY + base libs/bins -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- +# HOMEBREW + required dependencies +#------------------------------------------------------------------------------- # Here's is the install list/order: # * Linux libraries/dependencies -# * Homebrew (Mac-only) -# * Git -# * rbenv -# * Ruby -# * Bundler (Linux-only) +# * macOS Xcode Command Line Tools +# * Homebrew -. $DOTFILES/brew/install.sh +. "$DOTFILES/brew/init_install.sh" +_init_or_install_homebrew + +if ! type "brew" &> /dev/null; then + sh_error "Install of Homebrew not found." + sh_fail "Please install manually. See: https://brew.sh" +fi + +if [[ -z "${HOMEBREW_PREFIX:-}" ]]; then + sh_error "HOMEBREW_PREFIX variable not set." + sh_fail "Try restarting your shell environment, or reinstalling Homebrew." +fi # sh_info "Configuring homebrew permissions to allow multiple admin users." # sh_info "Any user from the admin group will be able to manage homebrew." # declare -a HOMEBREW_DIRS=( -# "$(brew --prefix)/Caskroom" -# "$(brew --prefix)/Cellar" -# "$(brew --prefix)/Homebrew" -# "$(brew --prefix)/etc" -# "$(brew --prefix)/lib" -# "$(brew --prefix)/share" -# "$(brew --prefix)/var" +# "${HOMEBREW_PREFIX:-}/Caskroom" +# "${HOMEBREW_PREFIX:-}/Cellar" +# "${HOMEBREW_PREFIX:-}/Homebrew" +# "${HOMEBREW_PREFIX:-}/etc" +# "${HOMEBREW_PREFIX:-}/lib" +# "${HOMEBREW_PREFIX:-}/share" +# "${HOMEBREW_PREFIX:-}/var" # ) - # for brew_dir in "${HOMEBREW_DIRS[@]}"; do -# if [[ ! -d "${brew_dir}" ]]; then -# sh_info "Creating directory: ${brew_dir}" -# mkdir "${brew_dir}" -# fi -# sh_info "Changing group ownership of directory: ${brew_dir}" -# sudo chgrp -R admin "${brew_dir}" -# sudo chmod -R g+w "${brew_dir}" +# if [[ ! -d "${brew_dir}" ]]; then +# sh_info "Creating directory: ${brew_dir}" +# mkdir "${brew_dir}" +# fi +# sh_info "Changing group ownership of directory: ${brew_dir}" +# sudo chgrp -R admin "${brew_dir}" +# sudo chmod -R g+w "${brew_dir}" # done +# ls -al "${HOMEBREW_PREFIX:-}" + +#------------------------------------------------------------------------------- +# GIT / RUBY +#------------------------------------------------------------------------------- + +[[ ! -d "${HOMEBREW_PREFIX:-}/opt/git" ]] && brew install git +[[ ! -d "${HOMEBREW_PREFIX:-}/opt/ruby" ]] && brew install ruby + +#------------------------------------------------------------------------------- +# Zsh + Prezto +#------------------------------------------------------------------------------- + +# Install Prezto first to be ready for Zsh config. +if [[ ! -d "$HOME/.zprezto" ]]; then + sh_info "Installing Prezto to the home directory: ~/.prezto" + if type "git" &> /dev/null; then + git clone --recursive https://github.com/sorin-ionescu/prezto.git "$HOME/.zprezto" + elif type "curl" &> /dev/null; then + cd || echo + curl -LOk https://github.com/sorin-ionescu/prezto/archive/master.zip \ + && unzip master.zip && mv prezto-master .prezto && rm master.zip + fi +fi -# ls -al "$(brew --prefix)" - -. $DOTFILES/git/install.sh -. $DOTFILES/ruby/install.sh - -#----------------------------------------------------------------------- -# Zshell + Prezto -#----------------------------------------------------------------------- - -# We install Prezto first so that it's ready for Zsh. -. $DOTFILES/prezto/install.sh -# Install Zshell + Zsh-completions -. $DOTFILES/zsh/install.sh - -#----------------------------------------------------------------------- -# OS CONDITIONALS -#----------------------------------------------------------------------- - -# If we're on a Mac, let's install and setup homebrew. -if [[ "$OSTYPE" == "darwin"* ]]; then - sh_info "installing dependencies" - #if source bin/dot > /tmp/dotfiles-dot 2>&1; then - # sh_success "dependencies installed" - #else - # sh_fail "error installing dependencies" - #fi +# Install Zsh and Zsh-completions +if [[ ! -e "${HOMEBREW_PREFIX:-}/bin/zsh" ]]; then + sh_info "Install Zsh and Zsh-completions" + brew install zsh zsh-completions + # Install oh-my-zsh on top of zsh to getting additional functionality + # curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh +fi +# Add Zsh to the list of allowed shells +if [[ -e "${HOMEBREW_PREFIX:-}/bin/zsh" ]] && [[ ! "$(cat /etc/shells)" == *"${HOMEBREW_PREFIX:-}/bin/zsh"* ]]; then + sh_info "Adding Zsh to the list of allowed shells (/etc/shells)." + sudo bash -c 'echo "$(brew --prefix)/bin/zsh" >> /etc/shells' +else + sh_fail "Error locating Homebrew and/or Zsh. Please install manually." fi -echo "" +echo -sh_success "Bootstrapping complete!" +sh_success "Bootstrapping complete." -sh_alert "Restart your terminal/shell, and take the next step." +sh_alert "Restart the terminal and run: ~/.dotfiles/install" -echo "" +echo diff --git a/script/install b/script/install index 515098f..b231a70 100755 --- a/script/install +++ b/script/install @@ -1,69 +1,112 @@ #!/usr/bin/env bash # # Run all dotfiles installers. +# shellcheck disable=SC1090,SC1091 -DOTFILES_ROOT=$( cd "${BASH_SOURCE%/*}/.." && pwd ) +[[ ! -d "${DOTFILES:-}" ]] && DOTFILES=$( cd "${BASH_SOURCE%/*}/.." && pwd ) + +type "find_files" &> /dev/null || . "$DOTFILES/functions/find_files" # Install all other dot-packages # find the installers and run them iteratively -for file in $(find -H "$DOTFILES_ROOT" -maxdepth 2 -name 'install.sh'); do - source $file +for _file in $(find_files "$DOTFILES" 'install.sh' 2); do + . "$_file" done -unset file -#----------------------------------------------------------------------- +# Run before Ruby Gem installs +# . "$DOTFILES/ruby/gem-update.sh" +# Run after Ruby Gem installs +# . "$DOTFILES/ruby/rehash.sh" + +#------------------------------------------------------------------------------- # OS-specific Installs -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- -if [[ "$OSTYPE" == "linux-gnu" ]]; then +if [[ "$OSTYPE" == "freebsd"* ]]; then - : # Linux + : # FreeBSD - if type "apt-get" &> /dev/null; then +elif [[ "$OSTYPE" == "linux-gnu" ]]; then - : # Debian or Ubuntu: + : # Linux - elif type "yum" &> /dev/null; then + if type "apt-get" &> /dev/null; then - : # Fedora, CentOS or Red Hat: + : # Debian or Ubuntu: - fi + elif type "yum" &> /dev/null; then -elif [[ "$OSTYPE" == "darwin"* ]]; then + : # Fedora, CentOS or Red Hat: - : # Mac OSX + # Install Extra Packages for Enterprise Linux (EPEL) + # There are repository rpm packages for RHEL5, RHEL6 and RHEL7. + # The repository package installs the repo details on your local system for yum or up2date to use. + # Then you can install packages with your usual method, and the EPEL repository is included. + # https://fedoraproject.org/wiki/EPEL/FAQ#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F + su -c 'rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm' - # Install OSX apps (homebrew casks) - [[ -s "$DOTFILES_ROOT/osx/install-casks.sh" ]] && source $DOTFILES_ROOT/osx/install-casks.sh + else - # Remove outdated versions from the cellar. - brew cleanup + : # Unknown Linux OS + + fi - # Set OS X defaults - [[ -s "$DOTFILES_ROOT/osx/set-defaults.sh" ]] && source $DOTFILES_ROOT/osx/set-defaults.sh +elif [[ "$OSTYPE" == "darwin"* ]]; then - # Set OS X app prefs - # This should only be run once Apps/Casks have been installed. - [[ -s "$DOTFILES_ROOT/osx/set-prefs.sh" ]] && source $DOTFILES_ROOT/osx/set-prefs.sh + : # macOS (Darwin) + + # Homebrew installs + if type "brew" &> /dev/null; then + # Install deps/apps using Brewfile + if [[ -r "$HOME/.Brewfile" ]]; then + export HOMEBREW_BUNDLE_FILE="$HOME/.Brewfile" + brew bundle install --global + brew bundle check + fi + # Remove outdated versions from the cellar. + brew cleanup + fi + + # Node.js/npm installs + if type "npm" &> /dev/null; then + npm install -g \ + cucumber \ + less \ + serverless \ + yo \ + ; + fi + + # Ruby/Bundler installs + if type "bundle" &> /dev/null && [[ -r "$HOME/.Gemfile" ]]; then + (cd && bundle install --gemfile="$HOME/.Gemfile") + fi + + # Set macOS defaults + # This should only be run once Apps/Casks have been installed. + [[ -s "$DOTFILES/macos/set-defaults.sh" ]] && . "$DOTFILES/macos/set-defaults.sh" + + # sh_info "installing dependencies" + # if source bin/dot > /tmp/dotfiles-dot 2>&1; then + # sh_success "dependencies installed" + # else + # sh_fail "error installing dependencies" + # fi elif [[ "$OSTYPE" == "cygwin" ]]; then - : # POSIX compatibility layer and Linux environment emulation for Windows + : # POSIX compatibility layer and Linux environment emulation for Windows elif [[ "$OSTYPE" == "msys" ]]; then - : # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) + : # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) elif [[ "$OSTYPE" == "win32" ]]; then - : # Windows (32-bit) (...this may not work...) - -elif [[ "$OSTYPE" == "freebsd"* ]]; then - - : # FreeBSD + : # Windows (32-bit) (...this may not work...) else - : # Unknown OS + : # Unknown OS fi diff --git a/serverless/completion.zsh b/serverless/completion.zsh deleted file mode 100755 index 9a8ba08..0000000 --- a/serverless/completion.zsh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -# tabtab source for serverless package -# uninstall by removing these lines or running `tabtab uninstall serverless` -# shellcheck disable=SC1090 -[[ -f "$(brew --prefix)/lib/node_modules/serverless/node_modules/tabtab/.completions/serverless.zsh" ]] && \ - . "$(brew --prefix)/lib/node_modules/serverless/node_modules/tabtab/.completions/serverless.zsh" -# tabtab source for sls package -# uninstall by removing these lines or running `tabtab uninstall sls` -# shellcheck disable=SC1090 -[[ -f "$(brew --prefix)/lib/node_modules/serverless/node_modules/tabtab/.completions/sls.zsh" ]] && \ - . "$(brew --prefix)/lib/node_modules/serverless/node_modules/tabtab/.completions/sls.zsh" diff --git a/serverless/install.sh b/serverless/install.sh deleted file mode 100755 index 0a180af..0000000 --- a/serverless/install.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -# -# Install Serverless Framework -# -# Serverless Framework is your single toolkit for -# deploying serverless architectures to any provider. -# https://serverless.com/framework/ - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "serverless" &> /dev/null; then - ! type "npm" &> /dev/null && . "$DOTFILES/node/install.sh" - sh_info "Installing Serverless Framework..." - npm install -g serverless -fi - -if type "serverless" &> /dev/null; then - sh_success "Serverless Framework $(npm info serverless version) installed: $(command -v serverless)\n" - npm list -g serverless -fi diff --git a/shell/aliases.sh b/shell/aliases.sh new file mode 100755 index 0000000..fc5b310 --- /dev/null +++ b/shell/aliases.sh @@ -0,0 +1,70 @@ +# shellcheck shell=bash +# +# Shell Aliases +# shellcheck disable=SC2139 + +# Reload the shell (i.e. invoke as a login shell) +alias reload="exec $SHELL -l" + +# Easier navigation: .., ..., ...., ....., ~ and - +alias ..="cd .." +alias ...="cd ../.." +alias ....="cd ../../.." +alias .....="cd ../../../.." +alias ~="cd ~" # `cd` is probably faster to type though +alias -- -="cd -" + +# Enable aliases to be sudo’ed +# alias sudo='sudo ' +alias nsudo='nocorrect sudo' +alias sudo='my_sudo ' +function my_sudo { + while [[ $# -gt 0 ]]; do + case "$1" in + command) shift ; break ;; + nocorrect|noglob) shift ;; + *) break ;; + esac + done + if [[ $# = 0 ]]; then + command sudo zsh + else + # shellcheck disable=SC2068 + noglob command sudo $@ + fi +} + +# Put OS to sleep/standby +alias sleepnow="pmset sleepnow" + +# Get week number +alias week='date +%V' + +# Stopwatch +alias timer='echo "Timer started. Stop with Ctrl-D." && date && time cat && date' + +# IP addresses +alias ip="dig +short myip.opendns.com @resolver1.opendns.com" +alias localip="ipconfig getifaddr en0" +alias ips="ifconfig -a | grep -o 'inet6\? \(addr:\)\?\s\?\(\(\([0-9]\+\.\)\{3\}[0-9]\+\)\|[a-fA-F0-9:]\+\)' | awk '{ sub(/inet6? (addr:)? ?/, \"\"); print }'" + +# View HTTP traffic +alias sniff="sudo ngrep -d 'en1' -t '^(GET|POST) ' 'tcp and port 80'" +alias httpdump="sudo tcpdump -i en1 -n -s 0 -w - | grep -a -o -E \"Host\: .*|GET \/.*\"" + +# Canonical hex dump; some systems have this symlinked +command -v hd > /dev/null || alias hd="hexdump -C" + +# Ring the terminal bell, and put a badge on Terminal.app’s Dock icon +# (useful when executing time-consuming commands) +alias badge="tput bel" + +# Intuitive map function +# For example, to list all directories that contain a certain file: +# find . -name .gitattributes | map dirname +alias map="xargs -n1" + +# One of @janmoesen’s ProTip™s +for method in GET HEAD POST PUT DELETE TRACE OPTIONS; do + alias "$method"="lwp-request -m '$method'" +done diff --git a/shell/env.symlink b/shell/env.symlink index d276b70..782000e 100644 --- a/shell/env.symlink +++ b/shell/env.symlink @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +# shellcheck shell=bash # # SHELL ENV # @@ -18,9 +18,9 @@ # # NOTE: These files are loaded in an optimal order. -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # `$DOTFILES` = path to `~/.dotfiles` directory -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # This file should be loaded first in `~/.bashrc` and `~/.zshenv` # This will ensure that all scripts and prompts will have access # to some standard variables. @@ -29,9 +29,9 @@ export DOTFILES="$HOME/.dotfiles" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Shell Environment -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # This file provides standard configuration for all shell environments. # * Response Helpers # * Paths @@ -45,7 +45,7 @@ export DOTSHELL="$DOTFILES/shell" # Shell Response Text/Colors/Helpers # shellcheck disable=SC1090 -. "$DOTSHELL/response.sh" +[[ "${SWITCH:-}" != "\033[" ]] && . "$DOTSHELL/response.sh" # Shell PATHs # shellcheck disable=SC1090 @@ -59,9 +59,9 @@ export DOTSHELL="$DOTFILES/shell" # shellcheck disable=SC1090 . "$DOTSHELL/functions.sh" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # SYSTEM VARIABLES -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- type "lowercase" &> /dev/null && [[ -z "$UTYPE" ]] && UTYPE=$(lowercase "$OSTYPE") && export UTYPE type "lowercase" &> /dev/null && [[ -z "$UNAME" ]] && UNAME=$(lowercase "$UNAME") && export UNAME diff --git a/shell/exports.sh b/shell/exports.sh index 086a402..238e1b8 100755 --- a/shell/exports.sh +++ b/shell/exports.sh @@ -1,42 +1,56 @@ -#!/usr/bin/env bash +# shellcheck shell=bash disable=SC1090,SC1091 # # EXPORTS # # Defines exports/variables for bash scripting environment. -# -# shellcheck disable=SC1090,SC1091 -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # DEFAULT VARIABLES -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # your project folder that we can `c [tab]` to export PROJECTS="$HOME/Projects" # BROWSER if [[ "$OSTYPE" == "darwin"* ]]; then - export BROWSER='open' + export BROWSER="open" fi # EDITORS -if [[ "$OSTYPE" == "darwin"* ]]; then - # Use Sublime (subl) on Mac - export EDITOR='subl' - export VISUAL='subl' -else - export EDITOR='vi' - export VISUAL='vi' +# Use VIM, by default +EDITOR="vim" +VISUAL="$EDITOR" +if type "code" &> /dev/null; then + # Use VS Code, if available + EDITOR="code" + VISUAL="$EDITOR" +elif type "nvim" &> /dev/null; then + # Use Neovim, if available + EDITOR="nvim" + VISUAL="$EDITOR" + alias vi="nvim" +elif ! type "vim" &> /dev/null && type "nano" &> /dev/null; then + # Use Nano, as a fallback + EDITOR="nano" + VISUAL="$EDITOR" +elif ! type "vim" &> /dev/null && type "pico" &> /dev/null; then + # Use Pico, as a fallback + EDITOR="pico" + VISUAL="$EDITOR" fi +export EDITOR VISUAL -export PAGER='less' +# LESS > MORE +export PAGER="less" +export NULLCMD="cat" +export READNULLCMD="$PAGER" # LANGUAGE -[[ -z "$LANG" ]] && export LANG='en_US.UTF-8' - +[[ -z "$LANG" ]] && export LANG="en_US.UTF-8" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # CUSTOM/USER VARIABLES -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # `~/.exports` can be used for private variables. [[ -f "$HOME/.exports" ]] && . "$HOME/.exports" diff --git a/shell/functions.sh b/shell/functions.sh index cfcc1e6..2b39c5c 100755 --- a/shell/functions.sh +++ b/shell/functions.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +# shellcheck shell=bash # # FUNCTIONS # @@ -6,25 +6,25 @@ # # shellcheck disable=SC1090,SC1091 -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # HELPER FUNCTIONS -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- ! type "link_file" &> /dev/null && . "$DOTFILES/functions/link_file" ! type "lowercase" &> /dev/null && . "$DOTFILES/functions/lowercase" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # RVM -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Load RVM into a shell session *as a function* # http://stackoverflow.com/questions/13804382/how-to-automatically-run-bin-bash-login-automatically-in-the-embeded-termin # RVM users should consider switching to `rbenv` (http://gorails.com) [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # CUSTOM/USER FUNCTIONS -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # `~/.functions` can be used for private functions. [[ -f "$HOME/.functions" ]] && . "$HOME/.functions" diff --git a/shell/ls_colors.md b/shell/ls_colors.md new file mode 100644 index 0000000..1d6f98c --- /dev/null +++ b/shell/ls_colors.md @@ -0,0 +1,131 @@ +# Color Configuration for `ls` _(`LS_COLORS`)_ + +> TLDR: _`lscolors` generator tool: [http://geoff.greer.fm/lscolors/]_ + +## LSCOLORS + +The value of this variable describes what color to use for which attribute when colors are enabled with `CLICOLOR`. This string is a concatenation of pairs of the format `fb`, where `f` is the foreground color and `b` is the background color. + +The color designators are as follows: + +| Code | Description | +|:----:|:------------------------------------------| +| `a` | black | +| `b` | red | +| `c` | green | +| `d` | brown | +| `e` | blue | +| `f` | magenta | +| `g` | cyan | +| `h` | light grey | +| `A` | bold black, usually shows up as dark grey | +| `B` | bold red | +| `C` | bold green | +| `D` | bold brown, usually shows up as yellow | +| `E` | bold blue | +| `F` | bold magenta | +| `G` | bold cyan | +| `H` | bold light grey; looks like bright white | +| `x` | default foreground or background | + +Note that the above are standard ANSI colors. The actual display may differ depending on the color capabilities of the terminal in use. + +The order of the attributes are as follows: + +1. directory +2. symbolic link +3. socket +4. pipe +5. executable +6. block special +7. character special +8. executable with `setuid` bit set +9. executable with `setgid` bit set +10. directory writable to others, with sticky bit +11. directory writable to others, without sticky bit + +The default is `exfxcxdxbxegedabagacad`, i.e. blue foreground and default background for regular directories, black foreground and red background for `setuid` executables, etc. + +## LS_COLORS + +`LS_COLORS='di=1:fi=0:ln=31:pi=5:so=5:bd=5:cd=5:or=31'` + +Parameters for `LS_COLORS` (`di`, `fi`, ...) refer to different file types: + +| Code | Description | +|:----:|:----------------------------------------------------------------| +| `no` | No color code at all | +| `fi` | Regular file: use no color at all | +| `rs` | Reset to "normal" color | +| `di` | Directory | +| `ln` | Symbolic Link | +| `mh` | MULTIHARDLINK - regular file with more than one link | +| `pi` | Named pipe, Fifo file | +| `so` | Socket file | +| `do` | Door file | +| `bd` | Block device driver, (buffered) special file | +| `cd` | Character device driver, (unbuffered) special file | +| `or` | Orphan symlink to nonexistent file, or non-`stat`'able file | +| `mi` | Non-existent file symlinked (visible when you type `ls -l`) | +| `su` | Normal file that is `setuid` (`u+s`) | +| `sg` | Normal file that is `setgid` (`g+s`) | +| `ca` | File with capability (very expensive to lookup) | +| `tw` | Directory that is sticky and other-writable (`+t`,`o+w`) | +| `ow` | Directory that is other-writable (`o+w`) and not sticky | +| `st` | Directory with the sticky bit set (`+t`) and not other-writable | +| `ex` | File which is executable (ie. has `x` set in permissions) | + +### Color Codes + +| Code | Description | +|------:|:---------------------------------------| +| `0` | Default Color | +| `1` | Bold | +| `2` | Dim | +| `3` | Italic | +| `4` | Underlined | +| `5` | Blinking Text | +| `7` | Reverse Text | +| `8` | Conceal Text (Hidden) | +| `30` | Black | +| `31` | Red | +| `32` | Green | +| `33` | Yellow | +| `34` | Blue | +| `35` | Magenta | +| `36` | Cyan | +| `37` | White/Grey | +| `39` | Default | +| `40` | Black Background | +| `41` | Red Background | +| `42` | Green Background | +| `43` | Yellow Background | +| `44` | Blue Background | +| `45` | Magenta Background | +| `46` | Cyan Background | +| `47` | White/Grey Background | +| `49` | Default Background | +| `90` | Black - High Intensity | +| `91` | Red - High Intensity | +| `92` | Green - High Intensity | +| `93` | Yellow - High Intensity | +| `94` | Blue - High Intensity | +| `95` | Magenta - High Intensity | +| `96` | Cyan - High Intensity | +| `97` | White/Grey - High Intensity | +| `99` | Default - High Intensity | +| `100` | Black Background - High Intensity | +| `101` | Red Background - High Intensity | +| `102` | Green Background - High Intensity | +| `103` | Yellow Background - High Intensity | +| `104` | Blue Background - High Intensity | +| `105` | Magenta Background - High Intensity | +| `106` | Cyan Background - High Intensity | +| `107` | White/Grey Background - High Intensity | +| `109` | Default Background - High Intensity | + +These codes can also be combined with one another: + +```txt +di=5;34;43 +``` diff --git a/shell/ls_colors.png b/shell/ls_colors.png new file mode 100644 index 0000000..5ff865e Binary files /dev/null and b/shell/ls_colors.png differ diff --git a/shell/ls_colors.sh b/shell/ls_colors.sh new file mode 100755 index 0000000..50d7317 --- /dev/null +++ b/shell/ls_colors.sh @@ -0,0 +1,455 @@ +# shellcheck shell=bash disable=SC2139 +# +# LSCOLORS & LS COLORS + aliases +# +# @see: https://gist.github.com/seantrane/e13706494a54bd3a6c2456608ea68c7e + +#------------------------------------------------------------------------------- +# LS ALIASES +#------------------------------------------------------------------------------- +# Detect which `ls` flavor is in use. +# FreeBSD, older versions of macOS, have different ls command. +if ls --color > /dev/null 2>&1; then + colorflag="--color=always" +else + colorflag="-G" +fi +# Use GNU ls, if installed by Homebrew. +# Always use color output for `ls`. +if [[ -r "${HOMEBREW_PREFIX:-}/bin/gls" ]]; then + alias ls="command ${HOMEBREW_PREFIX:-}/bin/gls ${colorflag}" +else + alias ls="command ls ${colorflag}" +fi +# Set time style flag, according to `ls` flavor. +if [[ ! -r "${HOMEBREW_PREFIX:-}/bin/gls" ]] && ls -T > /dev/null 2>&1; then + timeflag="-T" +else + timeflag="--time-style=long-iso" +fi +# List all files colorized in long format. +alias l="ls -lhF ${timeflag}" +# List all files colorized in long format, including dot files. +alias la="ls -lahF ${timeflag}" +# List, rescursively, all files colorized in long format, including dot files. +alias lsr="ls -lahFR ${timeflag}" +# List only directories +alias lsd="ls -d ${timeflag} */" +alias lsdl="ls -dl ${timeflag} */" + +#------------------------------------------------------------------------------- +# LSCOLORS +#------------------------------------------------------------------------------- +# The value of this variable describes what color to use when colors are enabled +# with `CLICOLOR`. +export CLICOLOR=1 + +# The `LSCOLORS` string is a concatenation of pairs of the format `fb`, +# where `f` is the foreground color and `b` is the background color. +# +# The color designators are as follows: +# +# | Code | Description | +# |:----:|:------------------------------------------| +# | `a` | black | +# | `b` | red | +# | `c` | green | +# | `d` | brown | +# | `e` | blue | +# | `f` | magenta | +# | `g` | cyan | +# | `h` | light grey | +# | `A` | bold black, usually shows up as dark grey | +# | `B` | bold red | +# | `C` | bold green | +# | `D` | bold brown, usually shows up as yellow | +# | `E` | bold blue | +# | `F` | bold magenta | +# | `G` | bold cyan | +# | `H` | bold light grey; looks like bright white | +# | `x` | default foreground or background | +# +# Note that the above are standard ANSI colors. The actual display may +# differ depending on the color capabilities of the terminal in use. + +# The default is `exfxcxdxbxegedabagacad`, i.e. blue foreground and +# default background for regular directories, black foreground and +# red background for `setuid` executables, etc. +# LSCOLORS='exfxcxdxbxegedabagacad' +# The order of the attributes are as follows: +_lscolors=( + 'ex' # 01. directory + 'Dx' # 02. symbolic link + 'fx' # 03. socket + 'dx' # 04. pipe + 'cx' # 05. executable + 'da' # 06. block special + 'da' # 07. character special + 'ab' # 08. executable with `setuid` bit set + 'ag' # 09. executable with `setgid` bit set + 'ac' # 10. directory writable to others, with sticky bit + 'ad' # 11. directory writable to others, without sticky bit +) +# Merge array into properly formatted string. +_ogIFS=$IFS +IFS='' +export LSCOLORS="${_lscolors[*]}" +IFS=$_ogIFS + +#------------------------------------------------------------------------------- +# LS COLORS +#------------------------------------------------------------------------------- +# +# `LS_COLORS='di=1:fi=0:ln=31:pi=5:so=5:bd=5:cd=5:or=31'` +# +# Parameters for `LS_COLORS` (`di`, `fi`, ...) refer to different file types: +# +# | Code | Description | +# |:----:|:----------------------------------------------------------------| +# | `no` | No color code at all | +# | `fi` | Regular file: use no color at all | +# | `rs` | Reset to "normal" color | +# | `di` | Directory | +# | `ln` | Symbolic Link | +# | `mh` | MULTIHARDLINK - regular file with more than one link | +# | `pi` | Named pipe, Fifo file | +# | `so` | Socket file | +# | `do` | Door file | +# | `bd` | Block device driver, (buffered) special file | +# | `cd` | Character device driver, (unbuffered) special file | +# | `or` | Orphan symlink to nonexistent file, or non-`stat`'able file | +# | `mi` | Non-existent file symlinked (visible when you type `ls -l`) | +# | `su` | Normal file that is `setuid` (`u+s`) | +# | `sg` | Normal file that is `setgid` (`g+s`) | +# | `ca` | File with capability (very expensive to lookup) | +# | `tw` | Directory that is sticky and other-writable (`+t`,`o+w`) | +# | `ow` | Directory that is other-writable (`o+w`) and not sticky | +# | `st` | Directory with the sticky bit set (`+t`) and not other-writable | +# | `ex` | File which is executable (ie. has `x` set in permissions) | +# +# ### Color Codes +# +# | Code | Description | +# |------:|:---------------------------------------| +# | `0` | Default Color | +# | `1` | Bold | +# | `2` | Dim | +# | `3` | Italic | +# | `4` | Underlined | +# | `5` | Blinking Text | +# | `7` | Reverse Text | +# | `8` | Conceal Text (Hidden) | +# | `30` | Black | +# | `31` | Red | +# | `32` | Green | +# | `33` | Yellow | +# | `34` | Blue | +# | `35` | Magenta | +# | `36` | Cyan | +# | `37` | White/Grey | +# | `39` | Default | +# | `40` | Black Background | +# | `41` | Red Background | +# | `42` | Green Background | +# | `43` | Yellow Background | +# | `44` | Blue Background | +# | `45` | Magenta Background | +# | `46` | Cyan Background | +# | `47` | White/Grey Background | +# | `49` | Default Background | +# | `90` | Black - High Intensity | +# | `91` | Red - High Intensity | +# | `92` | Green - High Intensity | +# | `93` | Yellow - High Intensity | +# | `94` | Blue - High Intensity | +# | `95` | Magenta - High Intensity | +# | `96` | Cyan - High Intensity | +# | `97` | White/Grey - High Intensity | +# | `99` | Default - High Intensity | +# | `100` | Black Background - High Intensity | +# | `101` | Red Background - High Intensity | +# | `102` | Green Background - High Intensity | +# | `103` | Yellow Background - High Intensity | +# | `104` | Blue Background - High Intensity | +# | `105` | Magenta Background - High Intensity | +# | `106` | Cyan Background - High Intensity | +# | `107` | White/Grey Background - High Intensity | +# | `109` | Default Background - High Intensity | +# +# These codes can also be combined with one another: +# di=5;34;43 + +# Reusable color combos +_ls_audio="35" +_ls_code="37" +_ls_exec="01;32" +_ls_hide="02;30" +_ls_hush="02;37" +_ls_image="36" +_ls_special="33" +_ls_video="94" +_ls_zip="03;34" + +# Colorize tree even when used in pipes +# 'typeset' disabled so that this file can be sourced in both Bash and Zsh. +# typeset -Tgx LS_COLORS ls_colors ':' +ls_colors=( + # Parameters for `LS_COLORS` (`di`, `fi`, ...) refer to different file types: + 'no=00' # no = No color code at all + 'fi=00' # fi = Regular file: use no color at all + 'rs=0' # rs = Reset to "normal" color + 'di=01;34' # di = Directory + 'ln=03;93' # ln = Symbolic Link + 'mh=00' # mh = MULTIHARDLINK - regular file with more than one link + 'pi=40;33' # pi = Named pipe, Fifo file + 'so=01;35' # so = Socket file + 'do=01;35' # do = Door file + 'bd=40;33;01' # bd = Block device driver, (buffered) special file + 'cd=40;33;01' # cd = Character device driver, (unbuffered) special file + 'or=40;31;03' # or = Orphan symlink to nonexistent file, or non-stat'able file + 'mi=00' # mi = Non-existent file symlinked (visible with `ls -l`) + 'su=37' # su = Normal file that is `setuid` (`u+s`) + 'sg=30' # sg = Normal file that is `setgid` (`g+s`) + 'ca=30' # ca = File with capability (very expensive to lookup) + 'tw=30' # tw = Directory that's sticky and other-writable (`+t`,`o+w`) + 'ow=01;33' # ow = Directory that's other-writable (`o+w`), not sticky + 'st=37' # st = Directory with sticky bit set (`+t`), not other-writable + 'ex=01;32' # ex = File which is executable (ie. has `x` set in permissions) + # HIDDEN OS FILES + "*._*=$_ls_hide" + "*.CFUserTextEncoding=$_ls_hide" + "*.DS_Store=$_ls_hide" + "*.file=$_ls_hide" + "*.localized=$_ls_hide" + # HIDDEN IDE/PROJECT FILES + "*.c9=$_ls_hush" + "*.cache=$_ls_hush" + "*.classpath=$_ls_hush" + "*.dockerignore=$_ls_hush" + "*.editorconfig=$_ls_hush" + "*.env=$_ls_hush" + "*.eslintrc.json=$_ls_hush" + "*.git=$_ls_hush" + "*.gitignore=$_ls_hush" + "*.grunt=$_ls_hush" + "*.idea=$_ls_hush" + "*.jekyll-metadata=$_ls_hush" + "*.launch=$_ls_hush" + "*.localrc=$_ls_hush" + "*.lock-wscript=$_ls_hush" + "*.lock=$_ls_hush" + "*.log=$_ls_hush" + "*.markdownlint.json=$_ls_hush" + "*.mega-linter.yml=$_ls_hush" + "*.netrc=$_ls_hush" + "*.prettierrc=$_ls_hush" + "*.project=$_ls_hush" + "*.sass-cache=$_ls_hush" + "*.settings=$_ls_hush" + "*.sonar=$_ls_hush" + "*.sublime-*=$_ls_hush" + "*.swp=$_ls_hush" + "*.terraform.lock.hcl=$_ls_hush" + "*.terraform=$_ls_hush" + "*.vscode=$_ls_hush" + "*.webpack.json=$_ls_hush" + # SHELL / TERMINAL / USER + "*.account=$_ls_hush" + "*.anyconnect=$_ls_hush" + "*.bash_env=$_ls_hush" + "*.bash_history=$_ls_hush" + "*.bash_login=$_ls_hush" + "*.bash_profile=$_ls_hush" + "*.bash_prompt=$_ls_hush" + "*.bashrc=$_ls_hush" + "*.curlrc=$_ls_hush" + "*.gemrc=$_ls_hush" + "*.hushlogin=$_ls_hush" + "*.inputrc=$_ls_hush" + "*.irbrc=$_ls_hush" + "*.lesshst=$_ls_hush" + "*.localrc=$_ls_hush" + "*.npmrc=$_ls_hush" + "*.profile=$_ls_hush" + "*.screenrc=$_ls_hush" + "*.serverlessrc=$_ls_hush" + "*.sh_history=$_ls_hush" + "*.vault=token=$_ls_hush" + "*.viminfo=$_ls_hush" + "*.vimrc=$_ls_hush" + "*.wgetrc=$_ls_hush" + "*.zcompdump=$_ls_hush" + "*.zhistory=$_ls_hush" + "*.zlogin=$_ls_hush" + "*.zlogout=$_ls_hush" + "*.zpreztorc=$_ls_hush" + "*.zprofile=$_ls_hush" + "*.zsh_history=$_ls_hush" + "*.zshenv=$_ls_hush" + "*.zshrc=$_ls_hush" + # GIT / SOURCE CONTROL + "*.gitattributes=$_ls_hush" + "*.gitconfig=$_ls_hush" + "*.gitflow_export=$_ls_hush" + "*.gitignore_global=$_ls_hush" + "*.gitignore=$_ls_hush" + "*.hgignore_global=$_ls_hush" + "*.hgignore=$_ls_hush" + # SPECIAL + "*_config.yml=01;35" + "*.Brewfile=01;31" + "*.code-workspace=01;02;$_ls_special" + "*.env.example=02;03;$_ls_special" + "*.env=$_ls_special" + "*.Gemfile=01;31" + "*.symlink=02;03;$_ls_special" + "*Brewfile.lock.json=02;03;31" + "*Brewfile=01;31" + "*CODEOWNERS=$_ls_special" + "*CONTRIBUTING.md=$_ls_special" + "*docker-compose.yml=01;35" + "*Dockerfile=01;31" + "*Gemfile.lock=02;03;31" + "*Gemfile=01;31" + "*LICENSE=03" + "*package-lock.json=02;03;35" + "*package.json=01;35" + "*README.md=01;04;$_ls_special" + # SHELL SCRIPTS (non-executable) + "*.bash=$_ls_special" + "*.sh=$_ls_special" + "*.zsh=$_ls_special" + # EXECUTABLES / COMPILED SOURCE + "*.app=$_ls_exec" + "*.bat=$_ls_exec" + "*.btm=$_ls_exec" + "*.class=$_ls_exec" + "*.cmd=$_ls_exec" + "*.com=$_ls_exec" + "*.dll=$_ls_exec" + "*.exe=$_ls_exec" + "*.o=$_ls_exec" + "*.so=$_ls_exec" + # PACKAGES + "*.deb=$_ls_special" + "*.dmg=$_ls_special" + "*.pkg=$_ls_special" + "*.rpm=$_ls_special" + # COMPRESSION + "*.7z=$_ls_zip" + "*.arj=$_ls_zip" + "*.bz=$_ls_zip" + "*.bz2=$_ls_zip" + "*.gz=$_ls_zip" + "*.jar=$_ls_zip" + "*.lzh=$_ls_zip" + "*.rar=$_ls_zip" + "*.t7z=$_ls_zip" + "*.tar=$_ls_zip" + "*.taz=$_ls_zip" + "*.tgz=$_ls_zip" + "*.Z=$_ls_zip" + "*.z=$_ls_zip" + "*.zip=$_ls_zip" + # CODE + "*.c=$_ls_code" + "*.cjs=$_ls_code" + "*.cjsx=$_ls_code" + "*.cts=$_ls_code" + "*.ctsx=$_ls_code" + "*.java=$_ls_code" + "*.js=$_ls_code" + "*.jsx=$_ls_code" + "*.mjs=$_ls_code" + "*.mjsx=$_ls_code" + "*.mts=$_ls_code" + "*.mtsx=$_ls_code" + "*.php=$_ls_code" + "*.py=$_ls_code" + "*.rb=$_ls_code" + "*.ts=$_ls_code" + "*.tsx=$_ls_code" + # PRO IMAGE + "*.ai=01;$_ls_image" + "*.indd=01;$_ls_image" + "*.psd=01;$_ls_image" + "*.xcf=01;$_ls_image" + # IMAGE + "*.bmp=$_ls_image" + "*.eps=01;$_ls_image" + "*.gif=$_ls_image" + "*.icns=$_ls_image" + "*.ico=$_ls_image" + "*.jpeg=$_ls_image" + "*.jpg=$_ls_image" + "*.pct=$_ls_image" + "*.pict=$_ls_image" + "*.png=$_ls_image" + "*.sgi=$_ls_image" + "*.svg=$_ls_image" + "*.svgz=$_ls_image" + "*.tga=$_ls_image" + "*.tif=$_ls_image" + "*.tiff=$_ls_image" + "*.webp=$_ls_image" + # PRO AUDIO + "*.abl=01;95" + "*.ablbundle=03;$_ls_audio" + "*.adg=03;$_ls_audio" + "*.adv=03;$_ls_audio" + "*.agr=03;$_ls_audio" + "*.alc=03;$_ls_audio" + "*.alp=03;$_ls_audio" + "*.als=03;$_ls_audio" + "*.ams=03;$_ls_audio" + "*.amxd=03;$_ls_audio" + "*.asd=03;$_ls_audio" + "*.ask=03;$_ls_audio" + "*.band=01;95" + "*.logicx=01;95" + "*.sd2=$_ls_audio" + "*.sesx=01;$_ls_video" + # AUDIO + "*.aac=$_ls_audio" + "*.aif=$_ls_audio" + "*.aifc=$_ls_audio" + "*.aiff=$_ls_audio" + "*.alac=$_ls_audio" + "*.au=$_ls_audio" + "*.caf=$_ls_audio" + "*.flac=$_ls_audio" + "*.flc=$_ls_audio" + "*.m4a=$_ls_audio" + "*.m4b=$_ls_audio" + "*.mid=$_ls_audio" + "*.midi=$_ls_audio" + "*.mka=$_ls_audio" + "*.mp3=$_ls_audio" + "*.mpc=$_ls_audio" + "*.ogg=$_ls_audio" + "*.ra=$_ls_audio" + "*.smf=$_ls_audio" + "*.wav=$_ls_audio" + "*.wave=$_ls_audio" + # PRO VIDEO + "*.aep=01;$_ls_video" + "*.m2t=01;$_ls_video" + "*.prproj=01;$_ls_video" + # VIDEO + "*.avi=$_ls_video" + "*.flv=$_ls_video" + "*.m4v=$_ls_video" + "*.mkv=$_ls_video" + "*.mov=$_ls_video" + "*.mp4=$_ls_video" + "*.mpeg=$_ls_video" + "*.mpg=$_ls_video" + "*.qt=$_ls_video" + "*.wmv=$_ls_video" +) +# typeset -gx zls_colors=("${ls_colors[@]}") + +_ogIFS=$IFS +IFS=':' +export LS_COLORS="${ls_colors[*]}:" +IFS=$_ogIFS diff --git a/shell/paths.sh b/shell/paths.sh index f1a4981..e5643ef 100755 --- a/shell/paths.sh +++ b/shell/paths.sh @@ -1,16 +1,18 @@ -#!/usr/bin/env bash +# shellcheck shell=bash # # PATH / MANPATH exports # # Defines the $PATH export/variable for shell environments. -#----------------------------------------------------------------------- +type "find_files" &> /dev/null || . "$DOTFILES/functions/find_files" + +#------------------------------------------------------------------------------- # BINARIES/SCRIPTS -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # This will ensure proper loading/ordering of PATHs. # DEFAULT `$PATH` -export PATH="/usr/sbin:/usr/bin:./sbin:./bin:/sbin:/bin:$PATH" +export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" # Add `/usr/local/{sbin,bin}` to the `$PATH` [[ -d "/usr/local/bin" ]] && export PATH="/usr/local/bin:$PATH" @@ -29,36 +31,38 @@ export PATH="/usr/sbin:/usr/bin:./sbin:./bin:/sbin:/bin:$PATH" [[ -d "$HOME/sbin" ]] && export PATH="$HOME/sbin:$PATH" # LOAD DOTFILES PATHS: -# for file in ~/.dotfiles/{git,system}/path.zsh; do -# shellcheck disable=SC2044 -for file in $(find -H "$DOTFILES" -maxdepth 2 -name 'path.zsh'); do - # shellcheck disable=SC1090 - [[ -r "$file" ]] && [[ -f "$file" ]] && . "$file"; -done; -unset file; +# for file in ~/.dotfiles/{git,system}/path.sh; do +_find_files_array=($(find -H "$DOTFILES" -maxdepth 2 -perm -u+r -type f -name 'path.sh')) +for _file_path in "${_find_files_array[@]}"; do + . "$_file_path" +done +unset _file_path _find_files_array # CUSTOM/USER PATHS # `~/.path` can be used to extend `$PATH`. # shellcheck disable=SC1090 [[ -f "$HOME/.path" ]] && . "$HOME/.path" -# PATH CLEANUP -# Ensure PATH array does not contain duplicates. -PATH=$(echo -n "$PATH" | awk -v RS=: '{ if (!arr[$0]++) {printf("%s%s",!ln++?"":":",$0)}}') -export PATH - -[[ -d "$(brew --prefix)/bin" ]] && export PATH="$(brew --prefix)/bin:$PATH" +# Ensure Homebrew path comes first +export PATH="/opt/homebrew/bin:$PATH" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # HELP DOCS/MANUALS -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- -[[ -d "$(brew --prefix)/man" ]] && export MANPATH="$(brew --prefix)/man:$MANPATH" +[[ -d "${HOMEBREW_PREFIX:-}/man" ]] && export MANPATH="${HOMEBREW_PREFIX:-}/man:$MANPATH" # .local manuals: [[ -d "$HOME/.local/man" ]] && export MANPATH="$HOME/.local/man:$MANPATH" -# MANPATH CLEANUP -# Ensure MANPATH array does not contain duplicates. -type "awk" &> /dev/null && MANPATH=$(echo -n "$MANPATH" | awk -v RS=: '{ if (!arr[$0]++) {printf("%s%s",!ln++?"":":",$0)}}') -export MANPATH +#------------------------------------------------------------------------------- +# CLEANUP PATH, MANPATH - Ensure arrays do not contain duplicates. +#------------------------------------------------------------------------------- + +if type "awk" &> /dev/null; then + PATH=$(echo -n "$PATH" | awk -v RS=: '{ if (!arr[$0]++) {printf("%s%s",!ln++?"":":",$0)}}') + export PATH + + MANPATH=$(echo -n "$MANPATH" | awk -v RS=: '{ if (!arr[$0]++) {printf("%s%s",!ln++?"":":",$0)}}') + export MANPATH +fi diff --git a/shell/response.sh b/shell/response.sh index c9bb75d..54fa56c 100755 --- a/shell/response.sh +++ b/shell/response.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +# shellcheck shell=bash # # Shell Response Text/Colors/Helpers # @@ -101,9 +101,9 @@ export BGICyan="${SWITCH}0;106m" export BGIWhite="${SWITCH}0;107m" export BGIDefault="${SWITCH}0;109m" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Shell Response Helpers -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # ! type "sh_text" &> /dev/null && . "$DOTFILES/functions/sh_text" # ! type "sh_user" &> /dev/null && . "$DOTFILES/functions/sh_user" diff --git a/shell/support.sh b/shell/support.sh index ffd5fdb..55403ca 100755 --- a/shell/support.sh +++ b/shell/support.sh @@ -1,13 +1,13 @@ -#!/usr/bin/env bash +# shellcheck shell=bash # # Shell script support # This file contains functions and helpers for Shell scripts. # # shellcheck disable=SC1090,SC1091 -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Shell Environment -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # . ~/.env [[ -f "$HOME/.env" ]] && . "$HOME/.env" @@ -16,4 +16,3 @@ # Shortcut to this file is $SHELLSUPPORT # This variable is used for support-file-conditionals export SHELLSUPPORT="$DOTSHELL/support.sh" - diff --git a/system/Brewfile.symlink b/system/Brewfile.symlink new file mode 100644 index 0000000..f1bbf11 --- /dev/null +++ b/system/Brewfile.symlink @@ -0,0 +1,350 @@ +######################################################################## +## +## Brewfile for developers on MacOS +## +## @see Homebrew Bundle (https://github.com/Homebrew/homebrew-bundle) +## +######################################################################## +# +# Path for Cask Application aliases +cask_args appdir: "/Applications" # GLOBAL/DEFAULT CONFIG +# cask_args appdir: "~/Applications", require_sha: true # LOCAL CONFIG +# +#------------------------------------------------------------------------------- +# TAPS +#------------------------------------------------------------------------------- +# +tap "homebrew/cask" +tap "homebrew/cask-fonts" +tap "homebrew/cask-versions" +# +#------------------------------------------------------------------------------- +# SYSTEM +#------------------------------------------------------------------------------- +# +# CORE UTILITIES +# +brew "coreutils" if OS.mac? # [GNU File, Shell, Text utilities](https://www.gnu.org/software/coreutils) +brew "moreutils" # [UNIX tools, like Sponge](https://joeyh.name/code/moreutils/) +brew "findutils" if OS.mac? # [GNU Find, Xargs, Locate](https://www.gnu.org/software/findutils/) +brew "gcc" if OS.mac? # [GNU compiler collection](https://gcc.gnu.org/) +# +# COMPRESSION BINARIES +# +brew "bzip2" # [data compressor](https://sourceware.org/bzip2/) +brew "libzip" # [C library for zip archives](https://libzip.org/) +brew "p7zip" # [7-Zip file archiver](http://p7zip.sourceforge.net) +# brew "pigz" # [Parallel gzip](http://www.zlib.net/pigz/) +brew "zlib" # [lossless compression library](https://zlib.net/) +# brew "zopfli" # [zlib compatible compressor](https://code.google.com/p/zopfli/) +# +# SHELL BINARIES +# +brew "bash" # [Bourne-Again SHell (Bash)](https://www.gnu.org/software/bash/) +brew "bash-completion2" +brew "grc" # [shell colorization](http://www.man-online.org/page/1-grc/) +brew "zsh" # [Z shell (Zsh)](https://www.zsh.org/) +brew "zsh-completions" +# +# GIT BINARIES +# +brew "git" +brew "git-lfs" # Git-LFS (Large File Support) +brew "libgit2" # [C library of Git core methods](https://libgit2.github.com/) +brew "git-xargs" # [CLI for bulk repos changes + pull requests](https://github.com/gruntwork-io/git-xargs) +# +# CORE BINARIES +# +brew "ack" # [optimized grep-like search](http://beyondgrep.com) +brew "curl" # [Get files via HTTP, HTTPS, FTP](https://curl.se) +brew "gnu-sed", args: ["with-default-names"] +brew "grep" # [GNU grep, egrep, fgrep](https://www.gnu.org/software/grep/) +brew "jq" # [command-line JSON processor](https://jqlang.github.io/jq/) +brew "openssh" # [OpenBSD SSH connectivity tools](https://www.openssh.com) +brew "openssl" # [Cryptography and SSL/TLS Toolkit](https://openssl.org) +# brew "vim", args: ["override-system-vi"] +brew "wget", args: ["with-iri"] +# +# POPULAR BINARIES +# +brew "imagemagick" # [Image manipulation](https://www.imagemagick.org) +brew "pass" # [Password management](https://www.passwordstore.org/) +brew "pv" # [Monitor progress via pipe](https://www.ivarch.com/programs/pv.shtml) +brew "rename" # [Perl-powered file renamer](http://plasmasturm.org/code/rename) +brew "screen" # [Terminal multiplexer](https://www.gnu.org/software/screen) +brew "spark" # [Spark](http://zachholman.com/spark/) +brew "ssh-copy-id" # [CLI for remote authorized_keys](http://www.openssh.com) +brew "tree" # [Display file structure](http://mama.indstate.edu/users/ice/tree/) +# +# ADDITIONAL BINARIES +# +# brew "dnsmasq" # [DNS forwarder, DHCP server](https://thekelleys.org.uk/dnsmasq/doc.html) +# brew "exiv2" # [EXIF/IPTC metadata manipulation](http://www.exiv2.org) +brew "jansson" # [C lib for encoding, decoding, manipulating JSON](https://digip.org/jansson/) +# brew "jp2a" # [Convert JPG to ASCII](https://github.com/Talinx/jp2a) +# brew "libcaca", args: ["with-imlib2"] # [Convert images to colored ASCII](http://caca.zoy.org/wiki/libcaca) +# brew "lua" [Lua programming language](http://www.lua.org) +# brew "lynx" # [Text-based web browser](http://lynx.isc.org) +brew "readline" # [Library for command-line editing](https://tiswww.case.edu/php/chet/readline/rltop.html) +# brew "rhino" # [JavaScript engine](https://www.mozilla.org/rhino/) +# brew "roundup" # [shell script unit testing](https://bmizerany.github.io/roundup) +# brew "spaceman-diff" # [Diff images from command-line](https://github.com/holman/spaceman-diff) +# brew "speedtest_cli" # [SpeedTest.net CLI](https://github.com/sivel/speedtest-cli) +# brew "webkit2png" # [Create web screenshots from terminal](https://www.paulhammond.org/webkit2png/) +# brew "webp" # [Image compression for web](https://developers.google.com/speed/webp/) +# brew "xmlto" # [Convert XML to other formats](https://pagure.io/xmlto/) +# brew "youtube-dl" # [Download YouTube videos from command-line](https://ytdl-org.github.io/youtube-dl/) +# +# DEV TOOLS +# +brew "awscli" +brew "cloud-nuke" # [CLI tool to delete all cloud resources](https://github.com/gruntwork-io/cloud-nuke) +brew "dependency-check" # [OWASP dependency-check](https://owasp.org/www-project-dependency-check/) +brew "dive" # [Inspection of docker image layers](https://github.com/wagoodman/dive) +# brew "elixir" +# brew "erlang" +# brew "galen" +brew "gradle" +brew "helm" +# brew "heroku" +brew "kubectl" +brew "maven" +# brew "mcrypt" +# brew "memcached" +brew "minikube" +# brew "mongodb" +# brew "mysql", restart_service: true, link: true, conflicts_with: ["mysql"] +brew "node" +brew "p11-kit" # [Lib for PKCS#11 modules](https://p11-glue.freedesktop.org) +# brew "packer" +# brew "php" +# brew "php-code-sniffer" +# brew "phpunit" +# brew "postgresql" +brew "python" +# brew "rbenv" +# brew "redis" +# brew "ruby-build" +brew "shellcheck" # [ShellCheck](https://github.com/koalaman/shellcheck) +brew "sqlite" +brew "terraform" +brew "terragrunt" # [thin wrapper for Terraform](https://terragrunt.gruntwork.io) +brew "tflint" +# brew "vault" +brew "yarn" +# +#------------------------------------------------------------------------------- +# APPLICATIONS (CASKS) +#------------------------------------------------------------------------------- +# +cask "1password" +cask "a-better-finder-rename" +# cask "adobe-creative-cloud" +# cask "adobe-photoshop-lightroom" +# cask "adobe-reader" +cask "alfred" +# cask "atom" +# cask "audacity" +cask "audio-hijack" +# cask "blue-jeans" +# cask "citrix-receiver" +# cask "cyberduck" +# cask "dash" +# cask "dash-beta" +# cask "docker" +# cask "drobo-dashboard" +# cask "dropbox" +# cask "evernote" +# cask "filezilla" +# cask "firefox" +# cask "flash" +cask "focusrite-control" +# cask "gimp" +cask "github" +# cask "gitkraken" +# cask "gitx" +cask "gog-galaxy" +# cask "google-chrome" +cask "handbrake" +cask "imagealpha" +cask "imageoptim" +# cask "intellij-idea" +# cask "intellij-idea-ce" +cask "iterm2" +cask "java" unless system "/usr/libexec/java_home --failfast" +# cask "jenkins" +# cask "jenkins-lts" +# cask "jenkins-menu" +# cask "kaleidoscope" +# cask "keka" +cask "keybase" +cask "krita" +# cask "little-snitch" +cask "macpar-deluxe" +# cask "mamp" +# cask "microsoft-lync" +# cask "microsoft-office" +cask "mongodb-compass" +cask "musicbrainz-picard" +cask "native-access" +cask "nzbget" +# cask "openoffice" +# cask "phpstorm" +cask "postman" +# cask "screenflow" +cask "sequel-pro" +cask "skype" +cask "slack" +cask "sourcetree" +# cask "spectacle" +# cask "stellarium" +# cask "sublime-text" +# cask "svnx" +# cask "textexpander" +cask "the-unarchiver" +# cask "tower" +# cask "transmission" +# cask "vagrant" +cask "virtualbox" +cask "visual-studio-code" +cask "vlc" +# cask "webstorm" +# cask "whatsapp" +# cask "wineskin-winery" +cask "xld" +# cask "xquartz" +# cask "xtrafinder" +cask "zoom" +# +#------------------------------------------------------------------------------- +# FONTS (CASKS) +#------------------------------------------------------------------------------- +# +cask "font-arimo" +cask "font-dejavu-sans" +cask "font-fontawesome" +cask "font-inconsolata" +cask "font-lora" +cask "font-open-iconic" +cask "font-open-sans" +cask "font-open-sans-condensed" +cask "font-source-code-pro" +cask "font-source-sans-pro" +cask "font-source-serif-pro" +cask "font-ubuntu" +# +#------------------------------------------------------------------------------- +# MAS (Mac App Store) +# @see mas-cli https://github.com/mas-cli/mas +#------------------------------------------------------------------------------- +# +brew "mas" +# +# mas "1Password", id: 443987910 +mas "Logic Pro", id: 634148309 +# +#------------------------------------------------------------------------------- +# Whalebrew +# @see https://github.com/whalebrew/whalebrew +#------------------------------------------------------------------------------- +# +brew "whalebrew" +# +whalebrew "composer/composer" # [PHP Composer](https://getcomposer.org/doc/00-intro.md#docker-image) +# +#------------------------------------------------------------------------------- +# Visual Studio Code Extensions +# 'vscode --install-extension' +#------------------------------------------------------------------------------- +# +vscode "johnpapa.Angular2" # [Angular Snippets](https://marketplace.visualstudio.com/items?itemName=johnpapa.Angular2) +vscode "mrmlnc.vscode-apache" # [Apache Conf](https://marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-apache) +vscode "ms-vscode.atom-keybindings" # [Atom Keymap](https://marketplace.visualstudio.com/items?itemName=ms-vscode.atom-keybindings) +vscode "formulahendry.auto-close-tag" # [Auto Close Tag](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag) +vscode "formulahendry.auto-rename-tag" # [Auto Rename Tag](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag) +vscode "JerryHong.autofilename" # [AutoFileName](https://marketplace.visualstudio.com/items?itemName=JerryHong.autofilename) +vscode "ms-vscode.azure-account" # [Azure Account](https://marketplace.visualstudio.com/items?itemName=ms-vscode.azure-account) +vscode "seantrane.balanced-theme" # [BalanceD Syntax Theme](https://marketplace.visualstudio.com/items?itemName=seantrane.balanced-theme) +vscode "jetmartin.bats" # [BATS (Bash Automated Testing System)](https://marketplace.visualstudio.com/items?itemName=jetmartin.bats) +vscode "mads-hartmann.bash-ide-vscode" # [Bash IDE](https://marketplace.visualstudio.com/items?itemName=mads-hartmann.bash-ide-vscode) +vscode "chouzz.vscode-better-align" # [Better Align](https://marketplace.visualstudio.com/items?itemName=chouzz.vscode-better-align) +vscode "thekalinga.bootstrap4-vscode" # [Bootstrap 4, Font awesome 4, Font Awesome 5 Free & Pro snippets](https://marketplace.visualstudio.com/items?itemName=thekalinga.bootstrap4-vscode) +vscode "sharat.vscode-brewfile" # [Brewfile](https://marketplace.visualstudio.com/items?itemName=sharat.vscode-brewfile) +# vscode "mindaro.mindaro" # [Bridge to Kubernetes](https://marketplace.visualstudio.com/items?itemName=mindaro.mindaro) +vscode "wmaurer.change-case" # [Change Case](https://marketplace.visualstudio.com/items?itemName=wmaurer.change-case) +vscode "dlech.chmod" # [chmod](https://marketplace.visualstudio.com/items?itemName=dlech.chmod) +vscode "formulahendry.code-runner" # [Code Runner](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner) +vscode "lafe.contextualduplicate" # [Contextual Duplicate](https://marketplace.visualstudio.com/items?itemName=lafe.contextualduplicate) +vscode "vscjava.vscode-java-debug" # [Debugger for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug) +vscode "ms-vscode-remote.remote-containers" # [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) +vscode "ms-azuretools.vscode-docker" # [Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) +vscode "oouo-diogo-perdigao.docthis" # [Document This](https://marketplace.visualstudio.com/items?itemName=oouo-diogo-perdigao.docthis) +vscode "mikestead.dotenv" # [DotENV](https://marketplace.visualstudio.com/items?itemName=mikestead.dotenv) +vscode "EditorConfig.EditorConfig" # [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) +vscode "mjmcloug.vscode-elixir" # [Elixir Support for VS Code](https://marketplace.visualstudio.com/items?itemName=mjmcloug.vscode-elixir) +# vscode "dbaeumer.vscode-eslint" # [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) +vscode "jrrdnx.expressionengine" # [ExpressionEngine](https://marketplace.visualstudio.com/items?itemName=jrrdnx.expressionengine) +vscode "vscjava.vscode-java-pack" # [Extension Pack for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack) +vscode "mindaro-dev.file-downloader" # [File Downloader](https://marketplace.visualstudio.com/items?itemName=mindaro-dev.file-downloader) +vscode "sleistner.vscode-fileutils" # [File Utils](https://marketplace.visualstudio.com/items?itemName=sleistner.vscode-fileutils) +vscode "donjayamanne.githistory" # [Git History](https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory) +vscode "GitHub.codespaces" # [GitHub Codespaces](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces) +vscode "codezombiech.gitignore" # [gitignore](https://marketplace.visualstudio.com/items?itemName=codezombiech.gitignore) +# vscode "golang.go" # [Go](https://marketplace.visualstudio.com/items?itemName=golang.go) +vscode "kumar-harsh.graphql-for-vscode" # [GraphQL for VSCode](https://marketplace.visualstudio.com/items?itemName=kumar-harsh.graphql-for-vscode) +vscode "hashicorp.terraform" # [HashiCorp Terraform](https://marketplace.visualstudio.com/items?itemName=hashicorp.terraform) +vscode "lokalise.i18n-ally" # [i18n Ally](https://marketplace.visualstudio.com/items?itemName=lokalise.i18n-ally) +vscode "VisualStudioExptTeam.intellicode-api-usage-examples" # [IntelliCode API Usage Examples](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.intellicode-api-usage-examples) +vscode "VisualStudioExptTeam.vscodeintellicode" # [IntelliCode](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode) +vscode "ms-python.isort" # [isort](https://marketplace.visualstudio.com/items?itemName=ms-python.isort) +vscode "xabikos.JasmineSnippets" # [Jasmine code snippets](https://marketplace.visualstudio.com/items?itemName=xabikos.JasmineSnippets) +vscode "xabikos.JavaScriptSnippets" # [JavaScript (ES6) code snippets](https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets) +vscode "akamud.vscode-javascript-snippet-pack" # [JavaScript Snippet Pack](https://marketplace.visualstudio.com/items?itemName=akamud.vscode-javascript-snippet-pack) +vscode "ginfuru.ginfuru-vscode-jekyll-syntax" # [Jekyll Syntax Support](https://marketplace.visualstudio.com/items?itemName=ginfuru.ginfuru-vscode-jekyll-syntax) +vscode "Orta.vscode-jest" # [Jest](https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest) +# vscode "ms-kubernetes-tools.vscode-kubernetes-tools" # [Kubernetes](https://marketplace.visualstudio.com/items?itemName=ms-kubernetes-tools.vscode-kubernetes-tools) +vscode "redhat.java" # [Language Support for Java(TM) by Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.java) +vscode "tomphilbin.lodash-snippets" # [Lodash Snippets](https://marketplace.visualstudio.com/items?itemName=tomphilbin.lodash-snippets) +vscode "shd101wyy.markdown-preview-enhanced" # [Markdown Preview Enhanced](https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced) +vscode "bierner.markdown-preview-github-styles" # [Markdown Preview Github Styling](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-preview-github-styles) +vscode "darkriszty.markdown-table-prettify" # [Markdown Table Prettifier](https://marketplace.visualstudio.com/items?itemName=darkriszty.markdown-table-prettify) +vscode "DavidAnson.vscode-markdownlint" # [markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint) +vscode "PKief.material-icon-theme" # [Material Icon Theme](https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme) +vscode "vscjava.vscode-maven" # [Maven for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-maven) +vscode "Alan.MochaSnippets" # [Mocha Snippets](https://marketplace.visualstudio.com/items?itemName=Alan.MochaSnippets) +vscode "CodeStream.codestream" # [New Relic CodeStream](https://marketplace.visualstudio.com/items?itemName=CodeStream.codestream) +vscode "new-relic.nr1" # [New Relic One](https://marketplace.visualstudio.com/items?itemName=new-relic.nr1) +vscode "joelalejandro.nrql-language" # [New Relic Query Language](https://marketplace.visualstudio.com/items?itemName=joelalejandro.nrql-language) +vscode "christian-kohler.npm-intellisense" # [npm Intellisense](https://marketplace.visualstudio.com/items?itemName=christian-kohler.npm-intellisense) +vscode "IBM.output-colorizer" # [Output Colorizer](https://marketplace.visualstudio.com/items?itemName=IBM.output-colorizer) +vscode "christian-kohler.path-intellisense" # [Path Intellisense](https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense) +vscode "esbenp.prettier-vscode" # [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) +vscode "vscjava.vscode-java-dependency" # [Project Manager for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-dependency) +vscode "ms-python.vscode-pylance" # [Pylance](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance) +vscode "ms-python.python" # [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python) +vscode "mechatroner.rainbow-csv" # [Rainbow CSV](https://marketplace.visualstudio.com/items?itemName=mechatroner.rainbow-csv) +vscode "jeppeandersen.raml" # [RAML](https://marketplace.visualstudio.com/items?itemName=jeppeandersen.raml) +vscode "msjsdiag.vscode-react-native" # [React Native Tools](https://marketplace.visualstudio.com/items?itemName=msjsdiag.vscode-react-native) +vscode "chrmarti.regex" # [Regex Previewer](https://marketplace.visualstudio.com/items?itemName=chrmarti.regex) +vscode "humao.rest-client" # [REST Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) +vscode "stkb.rewrap" # [Rewrap](https://marketplace.visualstudio.com/items?itemName=stkb.rewrap) +vscode "Shopify.ruby-lsp" # [Ruby LSP](https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp) +vscode "Syler.sass-indented" # [Sass (.sass only)](https://marketplace.visualstudio.com/items?itemName=Syler.sass-indented) +vscode "tomoki1207.selectline-statusbar" # [Select Line Status Bar](https://marketplace.visualstudio.com/items?itemName=tomoki1207.selectline-statusbar) +vscode "DeepInThought.vscode-shell-snippets" # [Shell Snippets](https://marketplace.visualstudio.com/items?itemName=DeepInThought.vscode-shell-snippets) +vscode "timonwong.shellcheck" # [ShellCheck](https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck) +vscode "maximerouiller.slugify-vscode" # [slugify](https://marketplace.visualstudio.com/items?itemName=maximerouiller.slugify-vscode) +vscode "stevejpurves.cucumber" # [Snippets and Syntax Highlight for Gherkin (Cucumber)](https://marketplace.visualstudio.com/items?itemName=stevejpurves.cucumber) +vscode "SonarSource.sonarlint-vscode" # [SonarLint](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarlint-vscode) +vscode "richie5um2.vscode-sort-json" # [Sort JSON objects](https://marketplace.visualstudio.com/items?itemName=richie5um2.vscode-sort-json) +vscode "Tyriar.sort-lines" # [Sort lines](https://marketplace.visualstudio.com/items?itemName=Tyriar.sort-lines) +vscode "run-at-scale.terraform-doc-snippets" # [Terraform doc snippets](https://marketplace.visualstudio.com/items?itemName=run-at-scale.terraform-doc-snippets) +vscode "vscjava.vscode-java-test" # [Test Runner for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-test) +vscode "octref.vetur" # [Vetur - Vue tooling for VS Code](https://marketplace.visualstudio.com/items?itemName=octref.vetur) +vscode "bajdzis.vscode-database" # [VS Code database](https://marketplace.visualstudio.com/items?itemName=bajdzis.vscode-database) +vscode "jeremyljackson.vs-docblock" # [VS DocBlockr](https://marketplace.visualstudio.com/items?itemName=jeremyljackson.vs-docblock) +vscode "wingrunr21.vscode-ruby" # [VSCode Ruby](https://marketplace.visualstudio.com/items?itemName=wingrunr21.vscode-ruby) +vscode "vscode-icons-team.vscode-icons" # [vscode-icons](https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons) +vscode "DotJoshJohnson.xml" # [XML Tools](https://marketplace.visualstudio.com/items?itemName=DotJoshJohnson.xml) +vscode "redhat.vscode-yaml" # [YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) +vscode "samverschueren.yo" # [yo](https://marketplace.visualstudio.com/items?itemName=samverschueren.yo) diff --git a/system/Gemfile.symlink b/system/Gemfile.symlink new file mode 100644 index 0000000..e151f66 --- /dev/null +++ b/system/Gemfile.symlink @@ -0,0 +1,8 @@ +source 'https://rubygems.org' + +# Gems here + +gem 'boom' # [manages your text snippets](https://github.com/holman/boom) +gem 'jekyll' # [Jekyll](https://jekyllrb.com) +gem 'rails' # [Ruby on Rails](https://rubyonrails.org) +gem 'sass' # [Sass](https://sass-lang.com) diff --git a/system/aliases.sh b/system/aliases.sh new file mode 100755 index 0000000..d806257 --- /dev/null +++ b/system/aliases.sh @@ -0,0 +1,19 @@ +# shellcheck shell=bash +# +# System Aliases +# shellcheck disable=SC2139 + +# Shortcuts +# alias d="cd ~/Dropbox" +alias dl="cd ~/Downloads" +alias dt="cd ~/Desktop" +# alias p="cd ~/projects" +alias h="history" +alias j="jobs" + +# Get macOS Software Updates, and update installed Ruby gems, Homebrew, npm, and their installed packages +alias update='(cd; sudo softwareupdate -i -a; brew update; brew upgrade; brew cleanup; npm cache clean -g -f; npm install -g npm@latest; npm update -g; npm cache clean -g -f; sudo gem update --system; sudo gem update)' +alias brewupdate='brew update; brew upgrade; brew cleanup' +alias macupdate='sudo softwareupdate -i -a' +alias nodeupdate='(cd; npm cache clean -g -f; brew update node --without-npm; npm install -g npm@latest; npm update -g; npm cache clean -g -f)' +alias rubyupdate='sudo gem update --system; sudo gem update' diff --git a/system/aliases.zsh b/system/aliases.zsh deleted file mode 100755 index 288a149..0000000 --- a/system/aliases.zsh +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env bash -# -# System Aliases -# shellcheck disable=SC2139 - -# Reload the shell (i.e. invoke as a login shell) -alias reload="exec $SHELL -l" - -# Detect which `ls` flavor is in use -# FreeBSD, older versions of OS X, have different ls command. -if ls --color > /dev/null 2>&1; then - colorflag="--color" -else - colorflag="-G" -fi -if ls -T > /dev/null 2>&1; then - timeflag="-T" -else - timeflag="--time-style=long-iso" -fi -# shellcheck disable=SC2034 -colortimeflags="${colorflag} ${timeflag}" -# List all files colorized in long format -alias l="ls -lhF ${colortimeflags}" -# List all files colorized in long format, including dot files -alias la="ls -lahF ${colortimeflags}" -# List, rescursively, all files colorized in long format, including dot files -alias lsr="ls -lahFR ${colortimeflags}" -# Always use color output for `ls` -alias ls="command ls ${colorflag}" -export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:' -# List only directories -alias lsd="ls -d ${colortimeflags} */" -alias lsdl="ls -dl ${colortimeflags} */" - -# Easier navigation: .., ..., ...., ....., ~ and - -alias ..="cd .." -alias ...="cd ../.." -alias ....="cd ../../.." -alias .....="cd ../../../.." -alias ~="cd ~" # `cd` is probably faster to type though -alias -- -="cd -" - -# Shortcuts -#alias d="cd ~/Dropbox" -alias dl="cd ~/Downloads" -alias dt="cd ~/Desktop" -#alias p="cd ~/projects" -alias h="history" -alias j="jobs" - -# Enable aliases to be sudo’ed -#alias sudo='sudo ' -alias nsudo='nocorrect sudo' -alias sudo='my_sudo ' -function my_sudo { - while [[ $# > 0 ]]; do - case "$1" in - command) shift ; break ;; - nocorrect|noglob) shift ;; - *) break ;; - esac - done - if [[ $# = 0 ]]; then - command sudo zsh - else - noglob command sudo $@ - fi -} - -# Put OS to sleep/standby -alias sleepnow="pmset sleepnow" - -# Get week number -alias week='date +%V' - -# Stopwatch -alias timer='echo "Timer started. Stop with Ctrl-D." && date && time cat && date' - -# Get OS X Software Updates, and update installed Ruby gems, Homebrew, npm, and their installed packages -alias update='(cd; sudo softwareupdate -i -a; brew update; brew upgrade; brew cleanup; npm cache clean -g -f; npm install -g npm@latest; npm update -g; npm cache clean -g -f; sudo gem update --system; sudo gem update)' -alias brewupdate='brew update; brew upgrade; brew cleanup' -alias macupdate='sudo softwareupdate -i -a' -alias nodeupdate='(cd; npm cache clean -g -f; brew update node --without-npm; npm install -g npm@latest; npm update -g; npm cache clean -g -f)' -alias rubyupdate='sudo gem update --system; sudo gem update' - -# IP addresses -alias ip="dig +short myip.opendns.com @resolver1.opendns.com" -alias localip="ipconfig getifaddr en0" -alias ips="ifconfig -a | grep -o 'inet6\? \(addr:\)\?\s\?\(\(\([0-9]\+\.\)\{3\}[0-9]\+\)\|[a-fA-F0-9:]\+\)' | awk '{ sub(/inet6? (addr:)? ?/, \"\"); print }'" - -# View HTTP traffic -alias sniff="sudo ngrep -d 'en1' -t '^(GET|POST) ' 'tcp and port 80'" -alias httpdump="sudo tcpdump -i en1 -n -s 0 -w - | grep -a -o -E \"Host\: .*|GET \/.*\"" - -# Canonical hex dump; some systems have this symlinked -command -v hd > /dev/null || alias hd="hexdump -C" - -# Ring the terminal bell, and put a badge on Terminal.app’s Dock icon -# (useful when executing time-consuming commands) -alias badge="tput bel" - -# Intuitive map function -# For example, to list all directories that contain a certain file: -# find . -name .gitattributes | map dirname -alias map="xargs -n1" - -# One of @janmoesen’s ProTip™s -for method in GET HEAD POST PUT DELETE TRACE OPTIONS; do - alias "$method"="lwp-request -m '$method'" -done - -# Make Grunt print stack traces by default -command -v grunt > /dev/null && alias grunt="grunt --stack" - diff --git a/system/completion.bash b/system/completion.bash index 7a32038..aff67dc 100644 --- a/system/completion.bash +++ b/system/completion.bash @@ -1,7 +1,85 @@ #!/usr/bin/env bash # +# System Command Tab Completions for Bash + +################################################################################ +# 'nix +################################################################################ # Tab completion for SSH hostnames, based on ~/.ssh/config, ignoring wildcards if [[ -e "$HOME/.ssh/config" ]]; then complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | tr ' ' '\n')" scp sftp ssh; fi + +################################################################################ +# boom +################################################################################ +# http://zachholman.com/boom + +if type "boom" &> /dev/null; then + _boom_complete() { + local cur prev lists curr_list items + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + curr_list=$(eval echo "$prev") + local IFS=$'\n' + + if [ "$COMP_CWORD" -eq 1 ]; then + lists=$(boom | sed 's/^ \(.*\) ([0-9]\{1,\})$/\1/') + # shellcheck disable=SC2207 + COMPREPLY=( $( compgen -W "${lists}" -- "${cur}" ) ) + elif [ "$COMP_CWORD" -eq 2 ]; then + items=$(boom "$curr_list" | sed 's/^ \(.\{0,16\}\):.*$/\1/') + # shellcheck disable=SC2207 + COMPREPLY=( $( compgen -W "${items}" -- "${cur}" ) ) + fi + } + complete -o filenames -F _boom_complete boom +fi + +################################################################################ +# Git +################################################################################ +# Enable tab completion for `g` by marking it as an alias for `git` + +if type "_git" &> /dev/null && [[ -f "$(brew --prefix)/etc/bash_completion.d/git-completion.bash" ]]; then + complete -o default -o nospace -F _git g +fi + +################################################################################ +# MacOS +################################################################################ + +if [[ "$OSTYPE" == "darwin"* ]]; then + # Add tab completion for `defaults read|write NSGlobalDomain` + # You could just use `-g` instead, but I like being explicit + complete -W "NSGlobalDomain" defaults + # Add `killall` tab completion for common apps + complete -o "nospace" -W "Contacts Calendar Dock Finder Mail Safari iTunes SystemUIServer Terminal Twitter" killall +fi + +################################################################################ +# rbenv +################################################################################ +# https://github.com/sstephenson/rbenv/blob/master/completions/rbenv.bash + +_rbenv() { + COMPREPLY=() + local word="${COMP_WORDS[COMP_CWORD]}" + + if [ "$COMP_CWORD" -eq 1 ]; then + # shellcheck disable=SC2207 + COMPREPLY=( $(compgen -W "$(rbenv commands)" -- "$word") ) + else + local words=("${COMP_WORDS[@]}") + unset words["0"] + unset words["$COMP_CWORD"] + local completions + completions=$(rbenv completions "${words[@]}") + # shellcheck disable=SC2207 + COMPREPLY=( $(compgen -W "$completions" -- "$word") ) + fi +} + +type "rbenv" &> /dev/null && complete -F _rbenv rbenv diff --git a/system/completion.zsh b/system/completion.zsh new file mode 100755 index 0000000..f2f491e --- /dev/null +++ b/system/completion.zsh @@ -0,0 +1,48 @@ +# shellcheck shell=bash disable=SC1090 +# +# System Command Tab Completions for Zsh + +################################################################################ +# Git +################################################################################ + +# Uses git's autocompletion for inner commands. Assumes an install of git's +# bash `git-completion` script at $completion below (this is where Homebrew +# tosses it, at least). +[[ -f "$HOMEBREW_PREFIX/share/zsh/site-functions/_git" ]] && \ + . "$HOMEBREW_PREFIX/share/zsh/site-functions/_git" + +################################################################################ +# rbenv +################################################################################ +# https://github.com/sstephenson/rbenv/blob/master/completions/rbenv.zsh + +# [[ ! -o interactive ]] && return + +# _rbenv() { +# local words completions +# read -r -cA words + +# if [[ "${#words}" -eq 2 ]]; then +# completions="$(rbenv commands)" +# else +# completions="$(rbenv completions ${words[2,-2]})" +# fi + +# reply=("${(ps:\n:)completions}") +# } + +# type "rbenv" &> /dev/null && compctl -K _rbenv rbenv + +################################################################################ +# Serverless +################################################################################ + +_slsd="$HOMEBREW_PREFIX/lib/node_modules/serverless" +_slscompd="$_slsd/node_modules/tabtab/.completions" +# tabtab source for serverless package +# uninstall by removing these lines or running `tabtab uninstall serverless` +[[ -f "$_slscompd/serverless.zsh" ]] && . "$_slscompd/serverless.zsh" +# tabtab source for sls package +# uninstall by removing these lines or running `tabtab uninstall sls` +[[ -f "$_slscompd/sls.zsh" ]] && . "$_slscompd/sls.zsh" diff --git a/system/env.zsh b/system/env.zsh index 346d8cd..cad45db 100755 --- a/system/env.zsh +++ b/system/env.zsh @@ -1,10 +1,4 @@ -#!/usr/bin/env bash - -# Set the default editor -# export EDITOR="vim"; -# export EDITOR="subl"; -# export EDITOR="atom"; -export EDITOR="code"; +# shellcheck shell=bash # Larger bash history (allow 32³ entries; default is 500) export HISTSIZE=32768; diff --git a/system/install-ack.sh b/system/install-ack.sh deleted file mode 100755 index 5f85e2e..0000000 --- a/system/install-ack.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# ack -# Search tool like grep, but optimized for programmers -# http://beyondgrep.com - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_ack () { - if ! type "ack" &> /dev/null; then - sh_info "Installing ack..." - if type "brew" &> /dev/null; then - brew install ack - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install ack - elif type "yum" &> /dev/null; then - sudo yum install ack - fi - fi - - if type "ack" &> /dev/null; then - sh_success "$(ack --version) installed: $(command -v ack)" - fi -} -install_ack diff --git a/system/install-exiv2.sh b/system/install-exiv2.sh deleted file mode 100755 index 6f65461..0000000 --- a/system/install-exiv2.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# exiv2 -# EXIF and IPTC metadata manipulation library and tools -# http://www.exiv2.org - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_exiv2 () { - if ! type "exiv2" &> /dev/null; then - sh_info "Installing exiv2..." - if type "brew" &> /dev/null; then - brew install exiv2 - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install exiv2 - elif type "yum" &> /dev/null; then - sudo yum install exiv2 - fi - fi - - if type "exiv2" &> /dev/null; then - sh_success "$(exiv2 --version) installed: $(command -v exiv2)" - fi -} -install_exiv2 diff --git a/system/install-grc.sh b/system/install-grc.sh deleted file mode 100755 index 250a3da..0000000 --- a/system/install-grc.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -# -# GRC colorizes nifty unix tools all over the place -# (http://www.man-online.org/page/1-grc/) - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_grc () { - if ! type "grc" &> /dev/null; then - sh_info "Installing grc..." - if type "brew" &> /dev/null; then - brew install grc - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install grc - elif type "yum" &> /dev/null; then - sudo yum install grc - fi - fi - - if type "grc" &> /dev/null; then - sh_success "$(grc --version) installed: $(command -v grc)" - fi -} -install_grc diff --git a/system/install-imagemagick.sh b/system/install-imagemagick.sh deleted file mode 100755 index 7996be0..0000000 --- a/system/install-imagemagick.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# ImageMagick (convert) -# Tools and libraries to manipulate images in many formats -# https://www.imagemagick.org - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_imagemagick () { - if ! type "imagemagick" &> /dev/null; then - sh_info "Installing ImageMagick (convert)..." - if type "brew" &> /dev/null; then - brew install imagemagick - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install imagemagick - elif type "yum" &> /dev/null; then - sudo yum install imagemagick - fi - fi - - if type "convert" &> /dev/null; then - sh_success "$(convert --version) installed: $(command -v convert)" - fi -} -install_imagemagick diff --git a/system/install-lua.sh b/system/install-lua.sh deleted file mode 100755 index 8754b06..0000000 --- a/system/install-lua.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# lua -# Powerful, lightweight programming language -# http://www.lua.org - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_lua () { - if ! type "lua" &> /dev/null; then - sh_info "Installing lua..." - if type "brew" &> /dev/null; then - brew install lua - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install lua - elif type "yum" &> /dev/null; then - sudo yum install lua - fi - fi - - if type "lua" &> /dev/null; then - sh_success "$(lua --version) installed: $(command -v lua)" - fi -} -install_lua diff --git a/system/install-lynx.sh b/system/install-lynx.sh deleted file mode 100755 index 08e7d60..0000000 --- a/system/install-lynx.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# lynx -# Text-based web browser -# http://lynx.isc.org - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_lynx () { - if ! type "lynx" &> /dev/null; then - sh_info "Installing lynx..." - if type "brew" &> /dev/null; then - brew install lynx - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install lynx - elif type "yum" &> /dev/null; then - sudo yum install lynx - fi - fi - - if type "lynx" &> /dev/null; then - sh_success "$(lynx --version) installed: $(command -v lynx)" - fi -} -install_lynx diff --git a/system/install-p7zip.sh b/system/install-p7zip.sh deleted file mode 100755 index 9427539..0000000 --- a/system/install-p7zip.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# p7zip -# 7-Zip (high compression file archiver) implementation -# http://p7zip.sourceforge.net - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_p7zip () { - if ! type "p7zip" &> /dev/null; then - sh_info "Installing p7zip..." - if type "brew" &> /dev/null; then - brew install p7zip - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install p7zip - elif type "yum" &> /dev/null; then - sudo yum install p7zip - fi - fi - - if type "p7zip" &> /dev/null; then - sh_success "$(p7zip --version) installed: $(command -v p7zip)" - fi -} -install_p7zip diff --git a/system/install-pigz.sh b/system/install-pigz.sh deleted file mode 100755 index 7119079..0000000 --- a/system/install-pigz.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# pigz -# Parallel gzip -# http://www.zlib.net/pigz/ - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_pigz () { - if ! type "pigz" &> /dev/null; then - sh_info "Installing pigz..." - if type "brew" &> /dev/null; then - brew install pigz - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install pigz - elif type "yum" &> /dev/null; then - sudo yum install pigz - fi - fi - - if type "pigz" &> /dev/null; then - sh_success "$(pigz --version) installed: $(command -v pigz)" - fi -} -install_pigz diff --git a/system/install-pv.sh b/system/install-pv.sh deleted file mode 100755 index 7f12be6..0000000 --- a/system/install-pv.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# pv -# Monitor data's progress through a pipe -# https://www.ivarch.com/programs/pv.shtml - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_pv () { - if ! type "pv" &> /dev/null; then - sh_info "Installing pv..." - if type "brew" &> /dev/null; then - brew install pv - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install pv - elif type "yum" &> /dev/null; then - sudo yum install pv - fi - fi - - if type "pv" &> /dev/null; then - sh_success "$(pv --version) installed: $(command -v pv)" - fi -} -install_pv diff --git a/system/install-rename.sh b/system/install-rename.sh deleted file mode 100755 index da2d2a2..0000000 --- a/system/install-rename.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# rename -# Perl-powered file rename script with many helpful built-ins -# http://plasmasturm.org/code/rename - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_rename () { - if ! type "rename" &> /dev/null; then - sh_info "Installing rename..." - if type "brew" &> /dev/null; then - brew install rename - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install rename - elif type "yum" &> /dev/null; then - sudo yum install rename - fi - fi - - if type "rename" &> /dev/null; then - sh_success "$(rename --version) installed: $(command -v rename)" - fi -} -install_rename diff --git a/system/install-rhino.sh b/system/install-rhino.sh deleted file mode 100755 index c68d3e8..0000000 --- a/system/install-rhino.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# rhino -# JavaScript engine -# https://www.mozilla.org/rhino/ - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_rhino () { - if ! type "rhino" &> /dev/null; then - sh_info "Installing rhino..." - if type "brew" &> /dev/null; then - brew install rhino - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install rhino - elif type "yum" &> /dev/null; then - sudo yum install rhino - fi - fi - - if type "rhino" &> /dev/null; then - sh_success "$(rhino --version) installed: $(command -v rhino)" - fi -} -install_rhino diff --git a/system/install-shellcheck.sh b/system/install-shellcheck.sh deleted file mode 100755 index f0e1d4a..0000000 --- a/system/install-shellcheck.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -# -# ShellCheck -# finds bugs in your shell scripts. -# https://www.shellcheck.net/ -# https://github.com/koalaman/shellcheck - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_shellcheck () { - if ! type "shellcheck" &> /dev/null; then - sh_info "Installing shellcheck..." - if type "brew" &> /dev/null; then - brew install shellcheck - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install shellcheck - elif type "yum" &> /dev/null; then - sudo yum install shellcheck - fi - fi - - if type "shellcheck" &> /dev/null; then - sh_success "$(shellcheck --version) installed: $(command -v shellcheck)" - fi -} -install_shellcheck diff --git a/system/install-spark.sh b/system/install-spark.sh deleted file mode 100755 index 88b16b3..0000000 --- a/system/install-spark.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# Spark -# Sparklines for the shell -# http://zachholman.com/spark/ - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_spark () { - if ! type "spark" &> /dev/null; then - sh_info "Installing spark..." - if type "brew" &> /dev/null; then - brew install spark - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install spark - elif type "yum" &> /dev/null; then - sudo yum install spark - fi - fi - - if type "spark" &> /dev/null; then - sh_success "$(spark --version) installed: $(command -v spark)" - fi -} -install_spark diff --git a/system/install-speedtest.sh b/system/install-speedtest.sh deleted file mode 100755 index ed7f9f0..0000000 --- a/system/install-speedtest.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# speedtest_cli -# Command-line interface for http://speedtest.net bandwidth tests -# https://github.com/sivel/speedtest-cli - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_speedtest_cli () { - if ! type "speedtest_cli" &> /dev/null; then - sh_info "Installing speedtest_cli..." - if type "brew" &> /dev/null; then - brew install speedtest_cli - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install speedtest_cli - elif type "yum" &> /dev/null; then - sudo yum install speedtest_cli - fi - fi - - if type "speedtest_cli" &> /dev/null; then - sh_success "$(speedtest_cli --version) installed: $(command -v speedtest_cli)" - fi -} -install_speedtest_cli diff --git a/system/install-sshcopyid.sh b/system/install-sshcopyid.sh deleted file mode 100755 index 1698d7b..0000000 --- a/system/install-sshcopyid.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# ssh-copy-id -# Add a public key to a remote machine's authorized_keys file -# http://www.openssh.com - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_sshcopyid () { - if ! type "ssh-copy-id" &> /dev/null; then - sh_info "Installing ssh-copy-id..." - if type "brew" &> /dev/null; then - brew install ssh-copy-id - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install ssh-copy-id - elif type "yum" &> /dev/null; then - sudo yum install ssh-copy-id - fi - fi - - if type "ssh-copy-id" &> /dev/null; then - sh_success "$(ssh-copy-id --version) installed: $(command -v ssh-copy-id)" - fi -} -install_sshcopyid diff --git a/system/install-tree.sh b/system/install-tree.sh deleted file mode 100755 index 15f9762..0000000 --- a/system/install-tree.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# tree -# Display directories as trees (with optional color/HTML output) -# http://mama.indstate.edu/users/ice/tree/ - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_tree () { - if ! type "tree" &> /dev/null; then - sh_info "Installing tree..." - if type "brew" &> /dev/null; then - brew install tree - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install tree - elif type "yum" &> /dev/null; then - sudo yum install tree - fi - fi - - if type "tree" &> /dev/null; then - sh_success "$(tree --version) installed: $(command -v tree)" - fi -} -install_tree diff --git a/system/install-wine.sh b/system/install-wine.sh deleted file mode 100755 index 261fff1..0000000 --- a/system/install-wine.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash -# -# Wine Is Not an Emulator -# https://www.winehq.org - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_wine () { - if ! type "wine" &> /dev/null; then - sh_info "Installing wine..." - if type "brew" &> /dev/null; then - brew install wine - brew install winetricks - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install wine - sudo apt-get -y install winetricks - elif type "yum" &> /dev/null; then - sudo yum install wine - sudo yum install winetricks - fi - fi - - if type "wine" &> /dev/null; then - sh_success "$(wine --version) installed: $(command -v wine)" - fi -} -install_wine diff --git a/system/install-zopfli.sh b/system/install-zopfli.sh deleted file mode 100755 index 795b3d5..0000000 --- a/system/install-zopfli.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# zopfli -# New zlib (gzip, deflate) compatible compressor -# https://code.google.com/p/zopfli/ - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -install_zopfli () { - if ! type "zopfli" &> /dev/null; then - sh_info "Installing zopfli..." - if type "brew" &> /dev/null; then - brew install zopfli - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install zopfli - elif type "yum" &> /dev/null; then - sudo yum install zopfli - fi - fi - - if type "zopfli" &> /dev/null; then - sh_success "$(zopfli --version) installed: $(command -v zopfli)" - fi -} -install_zopfli diff --git a/system/install.sh b/system/install.sh deleted file mode 100755 index 9e4ef18..0000000 --- a/system/install.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash -# -# System/support install - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -DOTSYSTEM=$( cd "${BASH_SOURCE%/*}" && pwd ) - -# GRC colorizes nifty unix tools all over the place -. "$DOTSYSTEM/install-grc.sh" - -# spark: Sparklines for the shell -. "$DOTSYSTEM/install-spark.sh" - -# ack: Search tool like grep, but optimized for programmers -. "$DOTSYSTEM/install-ack.sh" - -# ImageMagick (convert): Tools and libraries to manipulate images in many formats -. "$DOTSYSTEM/install-imagemagick.sh" - -# p7zip: 7-Zip (high compression file archiver) implementation -. "$DOTSYSTEM/install-p7zip.sh" - -# pv: Monitor data's progress through a pipe -. "$DOTSYSTEM/install-pv.sh" - -# rename: Perl-powered file rename script with many helpful built-ins -. "$DOTSYSTEM/install-rename.sh" - -# ssh-copy-id: Add a public key to a remote machine's authorized_keys file -. "$DOTSYSTEM/install-sshcopyid.sh" - -# tree: Display directories as trees (with optional color/HTML output) -. "$DOTSYSTEM/install-tree.sh" - -# Wine Is Not an Emulator -. "$DOTSYSTEM/install-wine.sh" - -# exiv2: EXIF and IPTC metadata manipulation library and tools -# . "$DOTSYSTEM/install-exiv2.sh" - -# lua: Powerful, lightweight programming language -# . "$DOTSYSTEM/install-lua.sh" - -# lynx: Text-based web browser -# . "$DOTSYSTEM/install-lynx.sh" - -# pigz: Parallel gzip -# . "$DOTSYSTEM/install-pigz.sh" - -# rhino: JavaScript engine (Mozilla.org) -# . "$DOTSYSTEM/install-rhino.sh" - -# speedtest_cli: Command-line interface for http://speedtest.net bandwidth tests -# . "$DOTSYSTEM/install-speedtest.sh" - -# zopfli: New zlib (gzip, deflate) compatible compressor -# . "$DOTSYSTEM/install-zopfli.sh" diff --git a/system/path.sh b/system/path.sh new file mode 100755 index 0000000..c6d38f2 --- /dev/null +++ b/system/path.sh @@ -0,0 +1,182 @@ +# shellcheck shell=bash +# +# PATH inclusions + +[[ ! -d "${DOTFILES:-}" ]] && DOTFILES=$( cd "${BASH_SOURCE%/*}/.." && pwd ) + +# shellcheck disable=SC1091 +type "find_files" &> /dev/null || . "$DOTFILES/functions/find_files" + +_brewd="${HOMEBREW_PREFIX:-/usr/local}" + +################################################################################ +# 'nix +################################################################################ + +# coreutils support: +_cutilsd="$_brewd/opt/coreutils" +[[ -d "$_cutilsd/libexec/gnubin" ]] && PATH="$_cutilsd/libexec/gnubin:$PATH" + +# openssl support: +_ossl1d="$_brewd/opt/openssl@1.1" +_ossl3d="$_brewd/opt/openssl@3" +if [[ -d "$_ossl3d/bin" ]]; then + # If you need to have openssl@3 first in your PATH run: + PATH="$_ossl3d/bin:$PATH" + # For compilers to find openssl@3 you may need to set: + [[ -d "$_ossl3d/lib" ]] && LDFLAGS="-L$_ossl3d/lib" + [[ -d "$_ossl3d/include" ]] && CPPFLAGS="-I$_ossl3d/include" + # For pkg-config to find openssl@3 you may need to set: + [[ -d "$_ossl3d/lib/pkgconfig" ]] && PKG_CONFIG_PATH="$_ossl3d/lib/pkgconfig" +elif [[ -d "$_ossl1d/bin" ]]; then + # If you need to have openssl@1.1 first in your PATH run: + PATH="$_ossl1d/bin:$PATH" + # For compilers to find openssl@1.1 you may need to set: + [[ -d "$_ossl1d/lib" ]] && LDFLAGS="-L$_ossl1d/lib" + [[ -d "$_ossl1d/include" ]] && CPPFLAGS="-I$_ossl1d/include" + # For pkg-config to find openssl@1.1 you may need to set: + [[ -d "$_ossl1d/lib/pkgconfig" ]] && PKG_CONFIG_PATH="$_ossl1d/lib/pkgconfig" +fi + +################################################################################ +# Elixir / Erlang +################################################################################ + +_erlangd="$_brewd/opt/erlang" +[[ -d "$_erlangd" ]] && MANPATH="$_erlangd/lib/erlang/man:$MANPATH" + +################################################################################ +# Git +################################################################################ + +_gitd="$_brewd/opt/git" +[[ -d "$_gitd/man" ]] && MANPATH="$_gitd/man:$MANPATH" + +################################################################################ +# Go +################################################################################ + +_golangd="$_brewd/opt/golang" +_gohomed="$HOME/go" +if type "go" &> /dev/null; then + mkdir -p "$_gohomed"/{bin,src,pkg} + GOPATH="$_gohomed" + [[ -d "$_golangd/libexec" ]] && GOROOT="$_golangd/libexec" + [[ -d "${GOPATH:-$_gohomed}/bin" ]] && PATH="$PATH:${GOPATH:-$_gohomed}/bin" + [[ -d "${GOROOT:-$_gohomed}/bin" ]] && PATH="$PATH:${GOROOT:-$_gohomed}/bin" + export GOPATH GOROOT +fi + +################################################################################ +# Java +################################################################################ + +_javad="$_brewd/opt/openjdk" +_jvmd="/Library/Java/JavaVirtualMachines" +if [[ -d "$_javad/bin" ]]; then + # For the system Java wrappers to find this JDK, symlink it with: + if [[ -d "$_jvmd" ]] && [[ ! -e "$_jvmd/openjdk.jdk" ]] \ + && [[ -e "$_javad/libexec/openjdk.jdk" ]]; then + sudo ln -sfn "$_javad/libexec/openjdk.jdk" "$_jvmd/openjdk.jdk" + fi + # openjdk is keg-only, which means it was not symlinked into $(brew --prefix), + # because macOS provides similar software and installing this software in + # parallel can cause all kinds of trouble. + # To have openjdk first in your PATH: + [[ -d "$_javad/bin" ]] && PATH="$_javad/bin:$PATH" + # For compilers to find openjdk you may need to set: + [[ -e "$_javad/include" ]] && CPPFLAGS="-I$_javad/include" +fi + +################################################################################ +# MySQL +################################################################################ + +# MySQL-manual: +_mysqld="$_brewd/opt/mysql" +[[ -d "$_mysqld/man" ]] && MANPATH="$_mysqld/man:$MANPATH" + +################################################################################ +# Node.js +################################################################################ + +# .node bin: +_nodebind="$HOME/.node/bin" +[[ -d "$_nodebind" ]] && PATH="$_nodebind:$PATH" +# .node node_modules: +_nodemodsd="$HOME/.node/lib/node_modules" +[[ -d "$_nodemodsd" ]] && export NODE_PATH="$_nodemodsd:$NODE_PATH" +# If Homebrew has NOT installed npm, you should supplement +# your NODE_PATH with the npm module folder: +_nodemodsd="${HOMEBREW_PREFIX:-/usr}/lib/node_modules" +[[ -d "$_nodemodsd" ]] && export NODE_PATH="$_nodemodsd:$NODE_PATH" + +################################################################################ +# Ruby +################################################################################ + +_rubyd="$_brewd/opt/ruby" +if [[ -d "$_rubyd/bin" ]]; then + # If you need to have ruby first in your PATH run: + PATH="$_rubyd/bin:$PATH" + # For compilers to find ruby you may need to set: + [[ -d "$_rubyd/lib" ]] && LDFLAGS="-L$_rubyd/lib" + [[ -d "$_rubyd/include" ]] && CPPFLAGS="-I$_rubyd/include" + # For pkg-config to find ruby you may need to set: + [[ -d "$_rubyd/lib/pkgconfig" ]] && PKG_CONFIG_PATH="$_rubyd/lib/pkgconfig" + # By default, binaries installed by gem will be placed into: + for _file in $(find_files "${HOMEBREW_PREFIX:-}/lib/ruby/gems" 'bin' 2 'd') + do + PATH="$_file:$PATH" + done +fi + +for _file in $(find_files "$HOME/.gem/ruby" 'bin' 2 'd'); do + PATH="$_file:$PATH" +done + +# rbenv + ruby-build: +_rbenvd="$HOME/.rbenv" +if [[ -d "$_rbenvd" ]]; then + PATH="$_rbenvd/shims:$PATH" + PATH="$_rbenvd/bin:$PATH" + PATH="$_rbenvd/plugins/ruby-build/bin:$PATH" +fi + +################################################################################ +# PHP / Composer +################################################################################ + +[[ -d "$HOME/.composer/vendor/bin" ]] && PATH="$HOME/.composer/vendor/bin:$PATH" + +################################################################################ +# Terraform +################################################################################ + +[[ -d "$HOME/terraform" ]] && PATH="$HOME/terraform:$PATH" +_terrad="$_brewd/opt/terraform" +[[ -d "$_terrad/bin" ]] && PATH="$_terrad/bin:$PATH" + +################################################################################ +# Yarn +################################################################################ + +type "yarn" &> /dev/null && PATH="$(yarn global bin):$PATH" + +################################################################################ +# Homebrew +################################################################################ + +# Add Linuxbrew PATHs (to your .bashrc or .zshrc): +_lbrewd="$HOME/.linuxbrew" +if [[ -d "$_lbrewd" ]]; then + PATH="$_lbrewd/bin:$PATH" + MANPATH="$_lbrewd/share/man:$MANPATH" + INFOPATH="$_lbrewd/share/info:$INFOPATH" +fi + +# Keep this at bottom so that Homebrew-install binaries take precedent. +PATH="/opt/homebrew/bin:$PATH" + +export LDFLAGS CPPFLAGS PKG_CONFIG_PATH +export PATH MANPATH INFOPATH diff --git a/terraform/install.sh b/terraform/install.sh deleted file mode 100755 index 53783b9..0000000 --- a/terraform/install.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -# -# Terraform -# https://www.terraform.io - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "terraform" &> /dev/null; then - sh_info "Installing Terraform..." - if type "brew" &> /dev/null; then - brew install terraform - elif type "apt-get" &> /dev/null; then - # sudo apt-get update - sudo apt-get -y install terraform - elif type "yum" &> /dev/null; then - sudo yum install terraform - fi -fi - -if type "terraform" &> /dev/null; then - sh_success "$(terraform --version) installed: $(command -v terraform)" -fi diff --git a/terraform/path.zsh b/terraform/path.zsh deleted file mode 100755 index 4a24b5a..0000000 --- a/terraform/path.zsh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -[[ -d "$HOME/terraform" ]] && export PATH="$HOME/terraform:$PATH" - -[[ -d "/$(brew --prefix terraform)/bin" ]] && export PATH="/$(brew --prefix terraform)/bin:$PATH" diff --git a/user/aliases.sh b/user/aliases.sh new file mode 100755 index 0000000..9165e09 --- /dev/null +++ b/user/aliases.sh @@ -0,0 +1,63 @@ +# shellcheck shell=bash +# +# + +################################################################################ +# Homebrew aliases +################################################################################ + +# Homebrew updates/upgrades +alias brew_update="brew update; brew upgrade; brew cleanup" + +################################################################################ +# Docker aliases +################################################################################ + +#------------------------------------------------------------------------------- +# Docker Machine +# https://docs.docker.com/machine/get-started/#create-a-machine +#------------------------------------------------------------------------------- + +#------------------------------------------------------------------------------- +# Docker Compose +#------------------------------------------------------------------------------- + +alias dockerc="docker-compose" +alias dkrup="docker-compose stop < /dev/null 2> /dev/null; docker-compose up --build" +alias dkrstop="docker-compose stop < /dev/null 2> /dev/null" +alias dkroff="docker ps; docker-compose stop < /dev/null 2> /dev/null; docker rm -f \"$(docker ps -a -q < /dev/null 2> /dev/null)\" < /dev/null 2> /dev/null; docker ps -a" +alias dkr0="docker images; docker-compose stop < /dev/null 2> /dev/null; docker rmi -f \"$(docker images -a -q < /dev/null 2> /dev/null)\" < /dev/null 2> /dev/null; docker images" + +################################################################################ +# Jekyll (and Bundler) aliases +################################################################################ + +alias binstall="bundle install" +alias bjbuild="bundle exec jekyll build --incremental" +alias bjserve="bundle exec jekyll serve --incremental --watch" +alias bjbs="bjbuild; bjserve" + +################################################################################ +# Laravel aliases +################################################################################ + +# Artisan CLI +alias art="php artisan" + +################################################################################ +# Node.js/npm aliases +################################################################################ + +alias node-update="brew update node" +alias npm-update="(cd; npm cache clean -g -f; node-update; npm install -g npm@latest; npm update -g; npm cache clean -g -f)" + +alias npmlistg="npm list -g --depth=0 2>/dev/null" +alias npmlist="npm list --depth=0 2>/dev/null" + +################################################################################ +# Ruby aliases +################################################################################ + +alias sc="script/console" +alias sg="script/generate" +alias sd="script/destroy" diff --git a/curl/curlrc.symlink b/user/curlrc.symlink similarity index 92% rename from curl/curlrc.symlink rename to user/curlrc.symlink index 4d6ec17..22f5ae9 100644 --- a/curl/curlrc.symlink +++ b/user/curlrc.symlink @@ -1,5 +1,3 @@ -#!/usr/bin/env bash - # Disguise as IE 9 on Windows 7 user-agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" diff --git a/ruby/gemrc.symlink b/user/gemrc.symlink similarity index 100% rename from ruby/gemrc.symlink rename to user/gemrc.symlink diff --git a/input/inputrc.symlink b/user/inputrc.symlink similarity index 100% rename from input/inputrc.symlink rename to user/inputrc.symlink diff --git a/ruby/irbrc.symlink b/user/irbrc.symlink similarity index 100% rename from ruby/irbrc.symlink rename to user/irbrc.symlink diff --git a/mongodb/mongorc.js.symlink b/user/mongorc.js.symlink similarity index 100% rename from mongodb/mongorc.js.symlink rename to user/mongorc.js.symlink diff --git a/node/npmrc.symlink b/user/npmrc.symlink similarity index 100% rename from node/npmrc.symlink rename to user/npmrc.symlink diff --git a/screen/screenrc.symlink b/user/screenrc.symlink similarity index 100% rename from screen/screenrc.symlink rename to user/screenrc.symlink diff --git a/vim/vimrc.symlink b/user/vimrc.symlink similarity index 100% rename from vim/vimrc.symlink rename to user/vimrc.symlink diff --git a/wget/wgetrc.symlink b/user/wgetrc.symlink similarity index 100% rename from wget/wgetrc.symlink rename to user/wgetrc.symlink diff --git a/vault/install.sh b/vault/install.sh deleted file mode 100755 index 5395eb3..0000000 --- a/vault/install.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -# -# Install Vault - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "vault" &> /dev/null; then - sh_info "Installing Vault..." - if type "brew" &> /dev/null; then - brew install vault - fi -fi - -if type "vault" &> /dev/null; then - sh_success "$(vault --version) installed: $(command -v vault)" -fi diff --git a/wget/install.sh b/wget/install.sh deleted file mode 100755 index 9c41e68..0000000 --- a/wget/install.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -# -# Install wget -# -# This installs `wget` with IRI support using Homebrew. - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "wget" &> /dev/null; then - sh_info "Installing GNU Wget with IRI support..." - if type "brew" &> /dev/null; then - brew install wget --with-iri - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install wget --with-iri - elif type "yum" &> /dev/null; then - sudo yum install wget --with-iri - fi -fi - -if type "wget" &> /dev/null; then - sh_success "$(wget --version) installed: $(command -v wget)" -fi diff --git a/yarn/install.sh b/yarn/install.sh deleted file mode 100755 index 89eaa1f..0000000 --- a/yarn/install.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -# -# Install Yarn - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "yarn" &> /dev/null; then - sh_info "Installing Yarn..." - if type "brew" &> /dev/null; then - brew install yarn - elif type "apt-get" &> /dev/null; then - sudo apt-get -y install yarn - elif type "yum" &> /dev/null; then - sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo - if ! type "node" &> /dev/null; then - curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash - - fi - sudo yum install yarn - elif type "apk" &> /dev/null; then - apk add yarn - fi -fi - -if type "yarn" &> /dev/null; then - sh_success "$(yarn --version) installed: $(command -v yarn)" -fi diff --git a/yarn/path.zsh b/yarn/path.zsh deleted file mode 100755 index 747ce13..0000000 --- a/yarn/path.zsh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -if type "yarn" &> /dev/null && [[ -d "$(yarn global bin)" ]]; then - export PATH="$(yarn global bin):$PATH" -fi diff --git a/yo/install.sh b/yo/install.sh deleted file mode 100755 index f150792..0000000 --- a/yo/install.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -# -# Install Yeoman -# Yeoman helps you to kickstart new projects, prescribing best practices and tools to help you stay productive. -# https://github.com/yeoman/yo - -# Shell Support -# shellcheck disable=SC1090 -[[ -z "$SHELLSUPPORT" ]] && . "$( cd "${BASH_SOURCE%/*}/.." && pwd )/shell/support.sh" - -if ! type "yo" &> /dev/null; then - ! type "npm" &> /dev/null && . "$DOTFILES/node/install.sh" - sh_info "Installing Yeoman..." - npm install -g yo@latest -fi - -if type "yo" &> /dev/null; then - sh_success "Yeoman $(npm info yo version) installed: $(command -v yo)\n" - npm list -g yo - echo - - # - # Install Yeoman generators - # - - # Jekyllized - # https://github.com/sondr3/generator-jekyllized - # if ! type "gulp" &> /dev/null; then - # . "$DOTFILES/gulp/install.sh" - # fi - # sh_info "Installing Jekyllized..." - # npm install -g generator-jekyllized - -fi diff --git a/zsh/completion.zsh b/zsh/completion.zsh deleted file mode 100755 index 5b1db54..0000000 --- a/zsh/completion.zsh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -# matches case insensitive for lowercase -zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' - -# pasting with tabs doesn't perform completion -zstyle ':completion:*' insert-tab pending diff --git a/zsh/config.zsh b/zsh/config.zsh deleted file mode 100755 index 5bfd2b5..0000000 --- a/zsh/config.zsh +++ /dev/null @@ -1,143 +0,0 @@ -#!/usr/bin/env bash - -#if [[ -n $SSH_CONNECTION ]]; then -# export PS1='%m:%3~$(git_info_for_prompt)%# ' -#else -# export PS1='%3~$(git_info_for_prompt)%# ' -#fi - -export LSCOLORS="exfxcxdxbxegedabagacad" -export CLICOLOR=true - -fpath=($DOTFILES/functions $fpath) - -autoload -U $DOTFILES/functions/*(:t) - -# default history settings -HISTFILE=~/.zsh_history -HISTSIZE=10000 -SAVEHIST=10000 - -# don't nice background tasks -setopt NO_BG_NICE - -setopt NO_HUP - -setopt NO_LIST_BEEP - -# allow functions to have local options -setopt LOCAL_OPTIONS - -setopt LOCAL_TRAPS - -# allow functions to have local traps -setopt HIST_VERIFY - -# share history between sessions ??? -setopt SHARE_HISTORY - -# add timestamps to history -setopt EXTENDED_HISTORY - -setopt PROMPT_SUBST - -setopt CORRECT - -setopt COMPLETE_IN_WORD - -setopt IGNORE_EOF - -# adds history -setopt APPEND_HISTORY - -# adds history incrementally and share it across sessions -setopt INC_APPEND_HISTORY SHARE_HISTORY - -# don't record dupes in history -setopt HIST_IGNORE_ALL_DUPS - -setopt HIST_REDUCE_BLANKS - -# auto 'cd dir' if you type 'dir' -setopt AUTO_CD - -# Pipe to multiple outputs -setopt MULTIOS - -# This makes cd=pushd -setopt AUTO_PUSHD - -# This will use named dirs when possible -setopt AUTO_NAME_DIRS - -# If we have a glob this will expand it -setopt GLOB_COMPLETE -setopt PUSHD_MINUS - -# No more annoying pushd messages... -# setopt PUSHD_SILENT - -# blank pushd goes to home -setopt PUSHD_TO_HOME - -# this will ignore multiple directories for the stack. Useful? I dunno. -setopt PUSHD_IGNORE_DUPS - -# 10 second wait if you do something that will delete everything. I wish I'd had this before... -setopt RM_STAR_WAIT - -# use magic (this is default, but it can't hurt!) -# ! DISABLED: can't change option: ZLE -#setopt ZLE - -# If I could disable Ctrl-s completely I would! -setopt NO_FLOW_CONTROL - -# Keep echo "station" > station from clobbering station -setopt NO_CLOBBER - -# Case insensitive globbing -setopt NO_CASE_GLOB - -# Be Reasonable! -setopt NUMERIC_GLOB_SORT - -# I don't know why I never set this before. -setopt EXTENDED_GLOB - -# hows about arrays be awesome? -# (that is, foo${cool}foo has foo surrounding all the variables, not just first and last -setopt RC_EXPAND_PARAM - -# don't expand aliases _before_ completion has finished, like; git comm-[tab] -setopt complete_aliases - -zle -N newtab - -# Who doesn't want home and end to work? -bindkey '\e[1~' beginning-of-line -bindkey '\e[4~' end-of-line - -# Incremental search is elite! -bindkey -M vicmd "/" history-incremental-search-backward -bindkey -M vicmd "?" history-incremental-search-forward - -# Search based on what you typed in already -bindkey -M vicmd "//" history-beginning-search-backward -bindkey -M vicmd "??" history-beginning-search-forward - -bindkey "\eOP" run-help - -# oh wow! This is killer... try it! -bindkey -M vicmd "q" push-line - -# it's like, space AND completion. Gnarlbot. -bindkey -M viins ' ' magic-space - -bindkey '^[^[[D' backward-word -bindkey '^[^[[C' forward-word -bindkey '^[[5D' beginning-of-line -bindkey '^[[5C' end-of-line -bindkey '^[[3~' delete-char -bindkey '^[^N' newtab -bindkey '^?' backward-delete-char diff --git a/zsh/fpath.zsh b/zsh/fpath.zsh deleted file mode 100755 index ce87b62..0000000 --- a/zsh/fpath.zsh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -#add each topic folder to fpath so that they can add functions and completion scripts -for topic_folder ($DOTFILES/*) if [[ -d $topic_folder ]]; then fpath=($topic_folder $fpath); fi; - -# To activate Homebrew-Zsh-completions, add to .zshrc: -if type "brew" &> /dev/null && [ -f "$(brew --prefix)/share/zsh-completions" ]; then - fpath=("$(brew --prefix)/share/zsh-completions" $fpath) -fi diff --git a/zsh/install.sh b/zsh/install.sh index bc1941a..d1255ba 100755 --- a/zsh/install.sh +++ b/zsh/install.sh @@ -1,6 +1,6 @@ -#!/usr/bin/env bash +# shellcheck shell=bash # -# Install Zshell +# Install Zsh (Z shell) # Shell Support # shellcheck disable=SC1090 diff --git a/zsh/window.zsh b/zsh/window.zsh deleted file mode 100755 index 6a41246..0000000 --- a/zsh/window.zsh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -# From http://dotfiles.org/~_why/.zshrc -# Sets the window title nicely no matter where you are -function title() { - # escape '%' chars in $1, make nonprintables visible - a=${(V)1//\%/\%\%} - - # Truncate command, and join lines. - a=$(print -Pn "%40>...>$a" | tr -d "\n") - - case $TERM in - screen) - print -Pn "\ek$a:$3\e\\" # screen title (in ^A") - ;; - xterm*|rxvt) - print -Pn "\e]2;$2\a" # plain xterm title ($3 for pwd) - ;; - esac -} diff --git a/zsh/zlogin.symlink b/zsh/zlogin.symlink index 1803abb..07470d7 100644 --- a/zsh/zlogin.symlink +++ b/zsh/zlogin.symlink @@ -1,5 +1,13 @@ +# shellcheck shell=bash disable=SC1090,SC1091,SC2034,SC2296 +# _ _ +# ___| | ___ __ _(_)_ __ +# |_ / |/ _ \ / _` | | '_ \ +# / /| | (_) | (_| | | | | | +# /___|_|\___/ \__, |_|_| |_| +# |___/ +# =========================== # -# ZSH LOGIN +# Zsh Login configuration file. # # Executes commands at login (after .zshrc). # @@ -22,7 +30,7 @@ # what started GNOME or KDE behind your back when you logged in; things started anew # are not login shells. New terminals or new screen windows you open are not login # shells either. -# (Starting a new window in OS X’s Terminal.app seems to count as a login shell, though.) +# (Starting a new window in macOS’s Terminal.app seems to count as a login shell, though.) # # Put `~/.zlogin` stuff in the Conditional Configuration section of `~/.zshenv`. # See comments in `~/.zshenv` for detailed summary. diff --git a/zsh/zlogout.symlink b/zsh/zlogout.symlink index 017e76b..9bcd8df 100644 --- a/zsh/zlogout.symlink +++ b/zsh/zlogout.symlink @@ -1,5 +1,13 @@ +# shellcheck shell=bash disable=SC1090,SC1091,SC2034,SC2296 +# _ _ +# ___| | ___ __ _ ___ _ _| |_ +# |_ / |/ _ \ / _` |/ _ \| | | | __| +# / /| | (_) | (_| | (_) | |_| | |_ +# /___|_|\___/ \__, |\___/ \__,_|\__| +# |___/ +# =================================== # -# ZSH LOGOUT +# Zsh Logout configuration file. # # Executes commands at Zsh-logout. # zlogout is sometimes used to clear and reset the terminal. diff --git a/prezto/zpreztorc.symlink b/zsh/zpreztorc.symlink similarity index 88% rename from prezto/zpreztorc.symlink rename to zsh/zpreztorc.symlink index 5076434..838f939 100644 --- a/prezto/zpreztorc.symlink +++ b/zsh/zpreztorc.symlink @@ -1,13 +1,13 @@ -#!/usr/bin/env bash +# shellcheck shell=bash disable=SC1090,SC1091,SC2034,SC2296 # -# ZSH-PREZTO RC +# Zsh-Prezto Runtime Configuration file. # -# Prezto run-control file. -# Sets Prezto configuration options. +# Prezto: https://github.com/sorin-ionescu/prezto#readme +# Modules: https://github.com/sorin-ionescu/prezto/tree/master/modules#readme -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # General -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Set case-sensitivity for completion, history lookup, etc. # zstyle ':prezto:*:*' case-sensitive 'yes' @@ -55,9 +55,9 @@ zstyle ':prezto:load' pmodule \ 'history-substring-search' \ 'prompt' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Editor -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Set the key mapping style to 'emacs' or 'vi'. zstyle ':prezto:module:editor' key-bindings 'emacs' @@ -65,23 +65,23 @@ zstyle ':prezto:module:editor' key-bindings 'emacs' # Auto convert .... to ../.. # zstyle ':prezto:module:editor' dot-expansion 'yes' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Git -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Ignore submodules when they are 'dirty', 'untracked', 'all', or 'none'. # zstyle ':prezto:module:git:status:ignore' submodules 'all' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # GNU Utility -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Set the command prefix on non-GNU systems. # zstyle ':prezto:module:gnu-utility' prefix 'g' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # History Substring Search -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Set the query found color. # zstyle ':prezto:module:history-substring-search:color' found '' @@ -92,16 +92,16 @@ zstyle ':prezto:module:editor' key-bindings 'emacs' # Set the search globbing flags. # zstyle ':prezto:module:history-substring-search' globbing-flags '' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Pacman -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Set the Pacman frontend. # zstyle ':prezto:module:pacman' frontend 'yaourt' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Prompt -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Set the prompt theme to load. # Setting it to 'random' loads a random theme. @@ -119,16 +119,16 @@ zstyle ':prezto:module:prompt' theme 'sorin' # - The 'arrow pointing down' means you are behind. # - The 'arrow pointing up' means you are ahead. -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Ruby -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Auto switch the Ruby version on directory change. # zstyle ':prezto:module:ruby:chruby' auto-switch 'yes' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Screen -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Auto start a session when Zsh is launched in a local terminal. # zstyle ':prezto:module:screen:auto-start' local 'yes' @@ -136,16 +136,16 @@ zstyle ':prezto:module:prompt' theme 'sorin' # Auto start a session when Zsh is launched in a SSH connection. # zstyle ':prezto:module:screen:auto-start' remote 'yes' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # SSH -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Set the SSH identities to load into the agent. -# zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_dsa' 'id_github' 'gh_rsa' +# zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_ed25519' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Syntax Highlighting -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Set syntax highlighters. # By default, only the main highlighter is enabled. @@ -162,9 +162,9 @@ zstyle ':prezto:module:prompt' theme 'sorin' # 'command' 'bg=blue' \ # 'function' 'bg=blue' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Terminal -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Auto set the tab and window titles. zstyle ':prezto:module:terminal' auto-title 'yes' @@ -175,9 +175,9 @@ zstyle ':prezto:module:terminal:window-title' format '%n@%m: %s' # Set the tab title format. zstyle ':prezto:module:terminal:tab-title' format '%m: %s' -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Tmux -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Auto start a session when Zsh is launched in a local terminal. # zstyle ':prezto:module:tmux:auto-start' local 'yes' diff --git a/zsh/zprofile.symlink b/zsh/zprofile.symlink index 5bc4a36..d7f2b30 100644 --- a/zsh/zprofile.symlink +++ b/zsh/zprofile.symlink @@ -1,5 +1,13 @@ +# shellcheck shell=bash disable=SC1090,SC1091,SC2034,SC2296 +# __ _ _ +# _____ __ _ __ ___ / _(_) | ___ +# |_ / '_ \| '__/ _ \| |_| | |/ _ \ +# / /| |_) | | | (_) | _| | | __/ +# /___| .__/|_| \___/|_| |_|_|\___| +# |_| +# ================================== # -# ZSH PROFILE +# Zsh Profile configuration file. # # `.zprofile' is meant as an alternative to `.zlogin' for ksh fans; # the two are not intended to be used together, @@ -7,8 +15,6 @@ # # Put stuff in `~/.zshenv`, which is always executed. # See comments in `~/.zshenv` for detailed summary. -# -# shellcheck disable=SC1090,SC1091 ######################################################################## ######################################################################## diff --git a/zsh/zshenv.symlink b/zsh/zshenv.symlink index c7e8c4a..ecdcb93 100644 --- a/zsh/zshenv.symlink +++ b/zsh/zshenv.symlink @@ -1,7 +1,14 @@ +# shellcheck shell=bash disable=SC1090,SC1091,SC2034,SC2206 +# _ +# _______| |__ ___ _ ____ __ +# |_ / __| '_ \ / _ \ '_ \ \ / / +# / /\__ \ | | | __/ | | \ V / +# /___|___/_| |_|\___|_| |_|\_/ +# =============================== # -# ZSH ENV +# Zsh environment configuration file. # -# Defines Zshell environment. +# Startup Files: https://zsh.sourceforge.io/Intro/intro_3.html # # There are five startup files that zsh will read commands from: # * $ZDOTDIR/.zshenv @@ -11,7 +18,8 @@ # * $ZDOTDIR/.zlogout # # If ZDOTDIR is not set, then the value of HOME is used; this is the usual case. -# `.zshenv' is sourced on all invocations of the shell, unless the -f option is set. +# +# `.zshenv' is sourced on all invocations of the shell, unless -f option is set. # It should contain commands to set the command search path, # plus other important environment variables. # `.zshenv' should not contain commands that produce output @@ -29,8 +37,8 @@ # # `.zlogin' is not the place for alias definitions, options, # environment variable settings, etc.; as a general rule, it should not -# change the shell environment at all. Rather, it should be used to -# set the terminal type and run a series of external commands (fortune, msgs, etc). +# change the shell environment at all. Rather, it should be used to set +# the terminal type and run a series of external commands (fortune, msgs, etc). # # See table below for processing information. # @@ -41,29 +49,29 @@ # +----------------+-----------+-----------+------+ # |/etc/zshenv | A | A | A | # +----------------+-----------+-----------+------+ -# |~/.zshenv | B | B | B | +# | ~/.zshenv | B | B | B | <<< This sets $PATH # +----------------+-----------+-----------+------+ -# |/etc/zprofile | C | | | +# |/etc/zprofile | C | | | <<< This overwrites $PATH =( # +----------------+-----------+-----------+------+ -# |~/.zprofile | D | | | +# | ~/.zprofile | D | | | # +----------------+-----------+-----------+------+ # |/etc/zshrc | E | C | | # +----------------+-----------+-----------+------+ -# |~/.zshrc | F | D | | +# | ~/.zshrc | F | D | | <<< This resets $PATH # +----------------+-----------+-----------+------+ # |/etc/zlogin | G | | | # +----------------+-----------+-----------+------+ -# |~/.zlogin | H | | | +# | ~/.zlogin | H | | | # +----------------+-----------+-----------+------+ # +----------------+-----------+-----------+------+ -# |~/.zlogout | I | | | +# | ~/.zlogout | I | | | # +----------------+-----------+-----------+------+ # |/etc/zlogout | J | | | # +----------------+-----------+-----------+------+ # -# Moral: Put stuff in `~/.zshenv`, which is always executed. -# HOWEVER: Some config may be overwritten by `/etc/zshrc`. So, -# you have to put some config in `~/.zshrc` (e.g., prompt config). +# Moral: Put stuff in `~/.zshenv`, that should always be executed. +# HOWEVER: Some config may be overwritten by `/etc/zprofile` or `/etc/zshrc`. +# So, you have to put some config in `~/.zshrc` (e.g., prompt config). # # Use the Conditional Sections as needed: # 1. SCRIPT / NON-INTERACTIVE / .zshenv @@ -73,96 +81,335 @@ # # NOTE: This is different from how Bash is processed (see `~/.bashrc`). # -# shellcheck disable=SC1090,SC1091 +# Zsh Reference Card: https://www.bash2zsh.com/zsh_refcard/refcard.pdf +# ZSH-LOVERS(1): https://grml.org/zsh/zsh-lovers.html _SHELL_TYPE="prompt" _SHELL_USER="public" [[ "$SHLVL" -eq 1 && ! -o LOGIN ]] && _SHELL_TYPE="script" [[ -o LOGIN ]] && _SHELL_TYPE="private" -[[ "$_SHELL_TYPE" = "prompt" ]] && echo "$SHELL::$_SHELL_TYPE-$_SHELL_USER" +# [[ "$_SHELL_TYPE" = "prompt" ]] && echo "$SHELL::$_SHELL_TYPE-$_SHELL_USER" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Ensure that non-login/non-interactive shell has a defined environment. -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- if [[ "$SHLVL" -eq 1 && ! -o LOGIN && -s "${ZDOTDIR:-$HOME}/.zprofile" ]]; then . "${ZDOTDIR:-$HOME}/.zprofile" fi -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- +# HOMEBREW INIT +#------------------------------------------------------------------------------- + +[[ -f "$DOTFILES/brew/init.sh" ]] && . "$DOTFILES/brew/init.sh" + +#------------------------------------------------------------------------------- # Load `.env` a.k.a. `~/.dotfiles/shell/env.symlink` -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # This file should be loaded first in all shell environments, # in the following files; `~/.bashrc` and `~/.zshenv` [[ -f "${ZDOTDIR:-$HOME}/.env" ]] && . "${ZDOTDIR:-$HOME}/.env" +#------------------------------------------------------------------------------- +# PATHS +#------------------------------------------------------------------------------- -######################################################################## -######################################################################## +# Set the the list of directories that cd searches. +# cdpath=( +# $cdpath +# ) + +# Set the list of directories that Zsh searches for programs. +# path=( +# $(brew --prefix)/{bin,sbin} +# $path +# ) + +# Ensure path arrays do not contain duplicates. +# typeset -gU cdpath fpath mailpath path + + +################################################################################ +################################################################################ ## ## GENERAL CONFIGURATION ## (stuff that you always want executed) ## -######################################################################## -######################################################################## +################################################################################ +################################################################################ # autoload every function: -# for file in ~/.dotfiles/functions/{extract,link_file}; do -# _find_files_array=($(find -H "$DOTFILES/functions" -maxdepth 2 -perm -u+r -type f -name '[A-Za-z0-9\-\_]*')) -# for _file_path in ${_find_files_array}; do -# . "$_file_path" -# done -# unset _file_path _find_files_array - -# shellcheck disable=SC2206 fpath=("$DOTFILES"/functions $fpath) -autoload +X sh_alert sh_error sh_fail sh_info sh_note sh_success sh_text sh_user sh_yesno +autoload -U "$DOTFILES"/functions/*(:t) -# PATH="$PATH:$DOTFILES/functions" -# fpath="$DOTFILES/functions:$fpath" +#------------------------------------------------------------------------------- +# Changing Directories +#------------------------------------------------------------------------------- -# for d in $fpath; do -# autoload `ls $d` -# done +# `cd` is run if a valid command is not found +# auto 'cd dir' if you type 'dir' +setopt AUTO_CD -# autoload `ls "$DOTFILES/functions"` +# `cd` pushes the old directory onto the directory stack +# This makes cd=pushd +setopt AUTO_PUSHD -# . "$DOTFILES/zsh/fpath.zsh" -# . "$DOTFILES/zsh/config.zsh" +# If arg is not a directory, see if it's a variable, and `cd` to its value +setopt CDABLE_VARS +# this will ignore multiple directories for the stack. +setopt PUSHD_IGNORE_DUPS -#----------------------------------------------------------------------- -# PATHS -#----------------------------------------------------------------------- +setopt PUSHD_MINUS -# Set the the list of directories that cd searches. -# cdpath=( -# $cdpath -# ) +# `pushd` and `popd` will no longer print the directory name +# No more annoying pushd messages... +# setopt PUSHD_SILENT -# Set the list of directories that Zsh searches for programs. -# path=( -# $(brew --prefix)/{bin,sbin} -# $path -# ) +# `pushd` with no arguments act like 'pushd $HOME' +setopt PUSHD_TO_HOME -# Ensure path arrays do not contain duplicates. -# typeset -gU cdpath fpath mailpath path +#------------------------------------------------------------------------------- +# Completion +#------------------------------------------------------------------------------- + +# don't expand aliases _before_ completion has finished, like; git comm-[tab] +setopt complete_aliases + +setopt COMPLETE_IN_WORD + +# Immediately cycle through options for tab completion +# setopt MENU_COMPLETE + +# Do not beep during listing completions +setopt NO_LIST_BEEP + +#------------------------------------------------------------------------------- +# Expansion and Globbing +#------------------------------------------------------------------------------- + +# I don't know why I never set this before. +setopt EXTENDED_GLOB + +# If we have a glob this will expand it +setopt GLOB_COMPLETE + +# Case insensitive globbing +setopt NO_CASE_GLOB + +# Be Reasonable! +setopt NUMERIC_GLOB_SORT + +# hows about arrays be awesome? +# `foo${cool}foo` has foo surrounding all variables, not just first and last. +setopt RC_EXPAND_PARAM + +#------------------------------------------------------------------------------- +# History +#------------------------------------------------------------------------------- + +# adds history +setopt APPEND_HISTORY + +# Save command timestamps +setopt EXTENDED_HISTORY + +# If the internal history needs to be trimmed to add the current command line, +# remove the oldest history event that has a duplicate. You should be sure to +# set the value of HISTSIZE to a larger number than SAVEHIST in order to give +# you some room for the duplicated events, otherwise this option will behave +# just like HIST_IGNORE_ALL_DUPS once the history fills up with unique events. +setopt HIST_EXPIRE_DUPS_FIRST + +# When searching for history entries in the line editor, +# do not display duplicates of a line previously found, +# even if the duplicates are not contiguous. +setopt HIST_FIND_NO_DUPS + +# If a new command line being added to the history list duplicates +# an older one then the older command is removed from the list. +setopt HIST_IGNORE_ALL_DUPS + +# Don't save command if preceded by whitespace +setopt HIST_IGNORE_SPACE + +# Trim unnecessary whitespace from commands in history +setopt HIST_REDUCE_BLANKS -#----------------------------------------------------------------------- +# allow functions to have local traps +setopt HIST_VERIFY + +# adds history incrementally +setopt INC_APPEND_HISTORY + +# Share command history between active shell sessions +setopt SHARE_HISTORY + +#------------------------------------------------------------------------------- +# Initialisation +#------------------------------------------------------------------------------- + +# Don't globally export environment variables by default +# setopt NO_GLOBAL_EXPORT + +#------------------------------------------------------------------------------- +# Input/Output +#------------------------------------------------------------------------------- + +# This will use named dirs when possible +setopt AUTO_NAME_DIRS + +# Output hex numbers in the familiar C syntax (e.g. '0x2f') +# setopt C_BASES + +setopt CORRECT + +# don't log out on EOF +setopt IGNORE_EOF + +# Allow comments, even in an the interactive shell +# setopt INTERACTIVE_COMMENTS + +# allow functions to have local options +setopt LOCAL_OPTIONS + +# allow functions to have local traps +setopt LOCAL_TRAPS + +# Keep echo "station" > station from clobbering station +# don't overwrite files unless forced +setopt NO_CLOBBER + +# Output octal numbers in the familiar C syntax (e.g. '077') +# setopt OCTAL_ZEROES + +# 10 second wait if you do something that will delete everything. +setopt RM_STAR_WAIT + +# Print the exit value of programs with non-zero exit status +# setopt PRINT_EXIT_VALUE + +#------------------------------------------------------------------------------- +# Job Control +#------------------------------------------------------------------------------- + +# When disowning a process, send a SIGCONT +# setopt AUTO_CONTINUE + +# Single letter commands call `fg` +# setopt AUTO_RESUME + +# List jobs in a verbose format +# setopt LONG_LIST_JOBS + +# zsh sends SIGHUP to running background jobs. +# setopt NO_HUP config only sends SIGHUP in certain situations. +setopt NO_HUP + +# don't nice background tasks +setopt NO_BG_NICE + +# If I could disable Ctrl-s completely I would! +setopt NO_FLOW_CONTROL + +#------------------------------------------------------------------------------- +# Prompt +#------------------------------------------------------------------------------- + +# Enable prompt substitution +setopt PROMPT_SUBST + +# Clear right-side prompt upon submission of command +# setopt TRANSIENT_RPROMPT + +#------------------------------------------------------------------------------- +# Scripts and Functions +#------------------------------------------------------------------------------- + +# Pipe to multiple outputs +setopt MULTIOS + +#------------------------------------------------------------------------------- +# Shell Emulation +#------------------------------------------------------------------------------- + +# Use a version of `echo` compatible with bash +# setopt BSD_ECHO + +#------------------------------------------------------------------------------- +# Zle +#------------------------------------------------------------------------------- + +# use magic (this is default, but it can't hurt!) +# ! DISABLED: can't change option: ZLE +# setopt ZLE + +zle -N newtab + +#------------------------------------------------------------------------------- + +# In the line editor, the number of matches to list without asking first. +# If the value is negative, the list will be shown if it spans at most as many +# lines as given by the absolute value. If set to zero, the shell asks only if +# the top of the listing would scroll off the screen. +# typeset -gx LISTMAX=0 + +# Duration to wait for further input during a key-sequence +# (in hundredths of a second) +# typeset -gx KEYTIMEOUT=20 + +#------------------------------------------------------------------------------- + +# Who doesn't want home and end to work? +bindkey '\e[1~' beginning-of-line +bindkey '\e[4~' end-of-line + +# Incremental search is elite! +bindkey -M vicmd "/" history-incremental-search-backward +bindkey -M vicmd "?" history-incremental-search-forward + +# Search based on what you typed in already +bindkey -M vicmd "//" history-beginning-search-backward +bindkey -M vicmd "??" history-beginning-search-forward + +bindkey "\eOP" run-help + +# oh wow! This is killer... try it! +bindkey -M vicmd "q" push-line + +# it's like, space AND completion. Gnarlbot. +bindkey -M viins ' ' magic-space + +bindkey '^[^[[D' backward-word +bindkey '^[^[[C' forward-word +bindkey '^[[5D' beginning-of-line +bindkey '^[[5C' end-of-line +bindkey '^[[3~' delete-char +bindkey '^[^N' newtab +bindkey '^?' backward-delete-char + +#------------------------------------------------------------------------------- +# History Settings +#------------------------------------------------------------------------------- + +export HISTFILE="${ZDOTDIR:-$HOME}/.zsh_history" +export HISTSIZE=10000 +export SAVEHIST=10000 + +#------------------------------------------------------------------------------- # Temporary Files -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- -if [[ ! -d "$TMPDIR" ]]; then - export TMPDIR="/tmp/$LOGNAME" +if [[ ! -d "${TMPDIR:-}" ]]; then + export TMPDIR="/tmp/${LOGNAME:-}" # shellcheck disable=SC2174 mkdir -p -m 700 "$TMPDIR" fi - -TMPPREFIX="${TMPDIR%/}/zsh"; export TMPPREFIX +export TMPPREFIX="${TMPDIR%/}/zsh" -######################################################################## +################################################################################ ## THE END: GENERAL CONFIGURATION -######################################################################## +################################################################################ diff --git a/zsh/zshrc.symlink b/zsh/zshrc.symlink index 0be623f..d188a7c 100644 --- a/zsh/zshrc.symlink +++ b/zsh/zshrc.symlink @@ -1,5 +1,10 @@ -# -# ZSH RC +# shellcheck shell=bash disable=SC1090,SC1091,SC2034,SC2086,SC2296 +# _ +# _______| |__ _ __ ___ +# |_ / __| '_ \| '__/ __| +# / /\__ \ | | | | | (__ +# /___|___/_| |_|_| \___| +# ======================== # # Zsh run-control file. # @@ -9,12 +14,20 @@ # Put stuff in conditional section of `~/.zshenv`. # See comments in `~/.zshenv` for detailed summary. # -# shellcheck disable=SC1090,SC1091 +# Zsh Reference Card: https://www.bash2zsh.com/zsh_refcard/refcard.pdf +# ZSH-LOVERS(1): https://grml.org/zsh/zsh-lovers.html + +# Fix Shell PATH Issue (overwritten by .zprofile) +DEFAULT_PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" +# remove defaults from beginning of PATH +PATH="${PATH#"$DEFAULT_PATH:"}" +# put defaults back at end of PATH +PATH="$PATH:$DEFAULT_PATH" -[[ -d "$(brew --prefix)/bin" ]] && export PATH="$(brew --prefix)/bin:$PATH" +type "find_files" &> /dev/null || . "$DOTFILES/functions/find_files" -######################################################################## -######################################################################## +################################################################################ +################################################################################ ## ## 1. SCRIPT / NON-INTERACTIVE / .zshenv ## @@ -22,15 +35,15 @@ ## Put your script-only stuff here, otherwise ## this section can be ignored. ## -######################################################################## -if [[ "$SHLVL" -eq 1 && ! -o LOGIN ]]; then -: ###################################################################### +################################################################################ +if [[ "$SHLVL" -eq 1 ]] && [[ ! -o LOGIN ]]; then +: ############################################################################## # echo "$SHELL" -######################################################################## -######################################################################## +################################################################################ +################################################################################ ## ## 2. INTERACTIVE / PROMPT / .zshrc ## @@ -38,54 +51,70 @@ if [[ "$SHLVL" -eq 1 && ! -o LOGIN ]]; then ## If you have a command-prompt, this conditional was met. ## Put stuff here for prompt-based users only. ## -######################################################################## +################################################################################ else -: ###################################################################### +: ############################################################################## # echo "$SHELL::interactive" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Source/init Prezto. -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- + +_zpreztod="${ZDOTDIR:-$HOME}/.zprezto" +[[ -f "$_zpreztod/init.zsh" ]] && . "$_zpreztod/init.zsh" -[[ -f "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]] && . "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" +# Prezto init will prepend PATH with `~/.gem/ruby/*/bin` directory in +# `~/.zprezto/modules/ruby/init.zsh`, line 48. +# These commands will strip this out, as `~/.gem/ruby/*/bin` is already in PATH. +for _file in $(find_files "${ZDOTDIR:-$HOME}/.gem/ruby" 'bin' 2 'd'); do + PATH="${PATH#"${_file}:"}" +done -# Unalias `nocorrect` completions from: prezto/modules/utility/init.zsh +# Unalias `nocorrect` completions from: ~/.zprezto/modules/utility/init.zsh # unalias mkdir mv mysql rm -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # LOCAL/PRIVATE CONFIG -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Stash your environment variables in ~/.localrc. This means they'll stay out # of your main dotfiles repository (which may be public, like this one), but # you'll have access to them in your scripts. [[ -f "${ZDOTDIR:-$HOME}/.localrc" ]] && . "${ZDOTDIR:-$HOME}/.localrc" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # ALIASES -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Aliases should only be available to prompt-user (not scripts). alias reload!='. ~/.zshrc' # for file in ~/.dotfiles/{git,system}/aliases.sh; do -_find_files_array=($(find -H "$DOTFILES" -maxdepth 2 -perm -u+r -type f -name 'aliases.sh')) -for _file_path in ${_find_files_array}; do - . "$_file_path" -done -unset _file_path _find_files_array +for _file in $(find_files "$DOTFILES" 'aliases.sh' 2); do . "$_file"; done -# load everything but the path and completion files: -# for file in ~/.dotfiles/{git,system}/{aliases,*}.zsh; do -_find_files_array=($(find -H "$DOTFILES" -maxdepth 2 -perm -u+r -type f -name '*.zsh')) -for _file_path in ${${_find_files_array:#*/path.zsh}:#*/completion.zsh}; do - . "$_file_path" -done -unset _file_path _find_files_array +# for file in ~/.dotfiles/{git,system}/aliases.zsh; do +for _file in $(find_files "$DOTFILES" 'aliases.zsh' 2); do . "$_file"; done # `~/.aliases` can be used for private aliases. [[ -f "${ZDOTDIR:-$HOME}/.aliases" ]] && . "${ZDOTDIR:-$HOME}/.aliases" +# From http://dotfiles.org/~_why/.zshrc +# Sets the window title nicely no matter where you are +function title() { + # escape '%' chars in $1, make nonprintables visible + a=${(V)1//\%/\%\%} + # Truncate command, and join lines. + a=$(print -Pn "%40>...>$a" | tr -d "\n") + case $TERM in + screen) + print -Pn "\ek$a:$3\e\\" # screen title (in ^A") + ;; + xterm*|rxvt) + print -Pn "\e]2;$2\a" # plain xterm title ($3 for pwd) + ;; + esac +} + # moving-or-renaming-multiple-files # http://www.mfasold.net/blog/2008/11/moving-or-renaming-multiple-files/ # “mmv *.dat *.dat_old” or “mmv foo.* bar.*” @@ -96,9 +125,9 @@ alias mmv='noglob zmv -W' # http://apt-browse.org/browse/debian/wheezy/main/all/command-not-found/ [[ -f "/etc/zsh_command_not_found" ]] && . "/etc/zsh_command_not_found" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # TAB COMPLETION -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Disable autocorrect guesses. Happens when typing a wrong # command that may look like an existing one. @@ -114,24 +143,67 @@ expand-or-complete-with-dots() { zle -N expand-or-complete-with-dots bindkey "^I" expand-or-complete-with-dots +# fignore() An array containing the suffixes of files to be +# ignored during filename completion. However, if completion only +# generates files with suffixes in this list, then these files are +# completed anyway. +typeset -Ua fignore=( + .DS_Store + __pycache__ + .zip + .tgz +) + +# REPORTTIME: commands whose combined user and system execution +# times (measured in seconds) are greater than this value have +# timing statistics printed for them. Output is suppressed for +# commands executed within the line editor, including completion; +# commands explicitly marked with the time keyword still cause +# the summary to be printed in this case. +typeset REPORTTIME=5 + # initialize autocomplete here, otherwise functions won't be loaded +# compinit flags are defined as follows +# -d FILE: dump a cache of compiled completion scripts to FILE +# -C: skip the security check entirely +# NOTE: will prevent changes from being made to the completions +# cached in the dump file +# -u: silently include all insecure files and directories +# -i: silently ignore all insecure files and directories autoload -U compinit compinit -u +# Initialize module to provide compatibility for bash-based completion functions +# autoload -U +X bashcompinit +# bashcompinit + +# matches case insensitive for lowercase +zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' + +# pasting with tabs doesn't perform completion +zstyle ':completion:*' insert-tab pending + +# Zsh to use the same colors as ls +# zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} + +#------------------------------------------------------------------------------- + # Homebrew-Zsh help reset -if type "brew" &> /dev/null && [ -f "$(brew --prefix)/share/zsh/help" ]; then +_zshhelpf="${HOMEBREW_PREFIX:-}/share/zsh/help" +if [[ -f "$_zshhelpf" ]]; then unalias run-help autoload run-help - HELPDIR="$(brew --prefix)/share/zsh/help"; export HELPDIR + export HELPDIR="$_zshhelpf" fi # load every completion after autocomplete loads: # for file in ~/.dotfiles/{git,system}/completion.zsh; do -_find_files_array=($(find -H "$DOTFILES" -maxdepth 2 -perm -u+r -type f -name 'completion.zsh')) -for _file_path in ${_find_files_array}; do - . "$_file_path" -done -unset _file_path _find_files_array +for _file in $(find_files "$DOTFILES" 'completion.zsh' 2); do . "$_file"; done + +# To activate Homebrew-Zsh-completions, add to .zshrc: +_zshcompf="${HOMEBREW_PREFIX:-}/share/zsh-completions" +# shellcheck disable=SC2206 +[[ -f "$_zshcompf" ]] && fpath=("$_zshcompf" $fpath) # z - jump around # https://github.com/rupa/z @@ -140,13 +212,13 @@ unset _file_path _find_files_array # that matches ALL of the regexes given on the command line, in order. if [[ -f "$HOME/z/z.sh" ]]; then . "$HOME/z/z.sh" -elif type "brew" &> /dev/null && [[ -f "$(brew --prefix)/etc/profile.d/z.sh" ]]; then - . "$(brew --prefix)/etc/profile.d/z.sh" +elif [[ -f "${HOMEBREW_PREFIX:-}/etc/profile.d/z.sh" ]]; then + . "${HOMEBREW_PREFIX:-}/etc/profile.d/z.sh" fi -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Less - opposite of more -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- # Less is a program similar to more (1), but which allows # backward movement in the file as well as forward movement. # Also, less does not have to read the entire input file @@ -164,38 +236,34 @@ export LESS='-F -g -i -M -R -S -w -X -z-4' # if (( $#commands[(i)lesspipe(|.sh)] )); then # export LESSOPEN="| /usr/bin/env $commands[(i)lesspipe(|.sh)] %s 2>&-" # fi -lesspipe_file="$(brew --prefix)/bin/lesspipe.sh" -[[ -e "$(brew --prefix)/bin/lesspipe" ]] && lesspipe_file="$(brew --prefix)/bin/lesspipe" -LESSOPEN="|$lesspipe_file %s"; export LESSOPEN #(sh like shells) -type "setenv" &> /dev/null && setenv LESSOPEN "|$lesspipe_file %s" #(csh, tcsh) +_lesspipe="${HOMEBREW_PREFIX}/bin/lesspipe" +_lesspipef="$_lesspipe.sh" +[[ -e "$_lesspipe" ]] && _lesspipef="$_lesspipe" +LESSOPEN="|$_lesspipef %s"; export LESSOPEN #(sh like shell) +type "setenv" &> /dev/null && setenv LESSOPEN "|$_lesspipef %s" #(csh, tcsh) -#----------------------------------------------------------------------- -# Travis CI -#----------------------------------------------------------------------- -[[ -f "${ZDOTDIR:-$HOME}/.travis/travis.sh" ]] && . "${ZDOTDIR:-$HOME}/.travis/travis.sh" -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- +# LS COLORS +#------------------------------------------------------------------------------- + +[[ -r "$DOTFILES/shell/ls_colors.sh" ]] && . "$DOTFILES/shell/ls_colors.sh" + +zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} + +#------------------------------------------------------------------------------- # PROMPT OPTIONS -#----------------------------------------------------------------------- +#------------------------------------------------------------------------------- autoload -Uz promptinit promptinit prompt sorin -######################################################################## -######################################################################## +################################################################################ +################################################################################ ## ## THE END: SCRIPT/INTERACTIVE CONDITIONAL CONFIGURATION ## -fi ##################################################################### -######################################################################## - -# tabtab source for serverless package -# uninstall by removing these lines or running `tabtab uninstall serverless` -[[ -f $(brew --prefix)/lib/node_modules/serverless/node_modules/tabtab/.completions/serverless.zsh ]] && . $(brew --prefix)/lib/node_modules/serverless/node_modules/tabtab/.completions/serverless.zsh -# tabtab source for sls package -# uninstall by removing these lines or running `tabtab uninstall sls` -[[ -f $(brew --prefix)/lib/node_modules/serverless/node_modules/tabtab/.completions/sls.zsh ]] && . $(brew --prefix)/lib/node_modules/serverless/node_modules/tabtab/.completions/sls.zsh - -[[ -d "$(brew --prefix)/bin" ]] && export PATH="$(brew --prefix)/bin:$PATH" +fi ############################################################################# +################################################################################