diff --git a/.bash_profile b/.bash_profile deleted file mode 100755 index 428cd76..0000000 --- a/.bash_profile +++ /dev/null @@ -1,18 +0,0 @@ -alias brewup='brew update; brew upgrade; brew prune; brew cleanup; brew doctor; brew cask cleanup' -alias rmhis='rm .bash_history; history -c; logout' - -export CLICOLOR=1 -export LSCOLORS=GxFxCxDxBxegedabagaced - -RED='\[\033[1;31m\]' -GREEN='\[\033[1;32m\]' -YELLOW='\[\033[1;33m\]' -PURPLE='\[\033[1;35m\]' -GRAY='\[\033[1;30m\]' -DEFAULT='\[\033[0m\]' - -parse_git_branch() { - git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' -} - -export PS1="${RED}\u ${GRAY}• ${GREEN}\h ${GRAY}• ${YELLOW}\w${GRAY}\$([[ -n \$(git branch 2> /dev/null) ]] && echo \" •\")${PURPLE}\$(parse_git_branch)\n${GRAY}\$ ${DEFAULT}" diff --git a/.gitconfig b/.gitconfig index ef9131e..ff84a7c 100644 --- a/.gitconfig +++ b/.gitconfig @@ -1,9 +1,50 @@ [user] - name = First Last - email = email@email.com -[github] - user = username + name = First Last + email = email@email.com [core] - editor = editor + editor = editor [credential] - helper = osxkeychain + helper = osxkeychain +[color] + ui = true + diff = auto + status = auto + branch = auto + interactive = auto + pager = true +[color "branch"] + current = green reverse +[color "diff"] + meta = yellow +[color "status"] + untracked = cyan +[pager] + branch = false +[filter "lfs"] + clean = git-lfs clean -- %f + smudge = git-lfs smudge -- %f + process = git-lfs filter-process + required = true +[alias] + tree = log --graph --pretty=oneline + lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit + l = log --pretty=colored + s = status + d = diff + aa = add -A + co = checkout + cob = checkout -b + del = branch -d + delete = branch -D + reb = !git fetch && git rebase -i origin/main + ren = "!f() { git branch -m ${2} ${1}; }; f" + up = !git fetch origin && git pull --rebase --prune + cm = !git add -A && git commit + save = !git add -A && git commit -m "SAVEPOINT" + wip = !git add -u && git commit -m "WIP" + undo = reset HEAD~1 --mixed + amend = commit -a --amend --reuse-message=HEAD + wipe = !git add -A && git commit -qm 'WIPE SAVEPOINT' && git reset HEAD~1 --hard + bclean = "!f() { git branch --merged ${1-master} | grep -v " ${1-master}$" | xargs -r git branch -d; }; f" + bdone = "!f() { git checkout ${1-master} && git up && git bclean ${1-master}; }; f" + contributors = "shortlog --summary --numbered" diff --git a/.gitignore b/.gitignore index 2276a02..a0e470f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.DS_Store .vscode/ +Brewfile.lock.json diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..95a52e3 --- /dev/null +++ b/.zshrc @@ -0,0 +1,107 @@ +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:/usr/local/bin:$PATH + +# Path to your oh-my-zsh installation. +export ZSH=$HOME/.oh-my-zsh + +# Set name of the theme to load --- if set to "random", it will +# load a random theme each time oh-my-zsh is loaded, in which case, +# to know which specific one was loaded, run: echo $RANDOM_THEME +# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes +ZSH_THEME="tranquility" + +# Set list of themes to pick from when loading at random +# Setting this variable when ZSH_THEME=random will cause zsh to load +# a theme from this variable instead of looking in $ZSH/themes/ +# If set to an empty array, this variable will have no effect. +# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. +# Case-sensitive completion must be off. _ and - will be interchangeable. +# HYPHEN_INSENSITIVE="true" + +# Uncomment the following line to disable bi-weekly auto-update checks. +# DISABLE_AUTO_UPDATE="true" + +# Uncomment the following line to automatically update without prompting. +# DISABLE_UPDATE_PROMPT="true" + +# Uncomment the following line to change how often to auto-update (in days). +# export UPDATE_ZSH_DAYS=13 + +# Uncomment the following line if pasting URLs and other text is messed up. +# DISABLE_MAGIC_FUNCTIONS="true" + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# Caution: this setting can cause issues with multiline prompts (zsh 5.7.1 and newer seem to work) +# See https://github.com/ohmyzsh/ohmyzsh/issues/5765 +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# You can set one of the optional three formats: +# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# or set a custom format using the strftime function format specifications, +# see 'man strftime' for details. +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +ZSH_CUSTOM=custom_path + +# Which plugins would you like to load? +# Standard plugins can be found in $ZSH/plugins/ +# Custom plugins may be added to $ZSH_CUSTOM/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. +plugins=( + git + rails +) + +source $ZSH/oh-my-zsh.sh + +# User configuration +if which asdf > /dev/null; then eval ". $(brew --prefix asdf)/libexec/asdf.sh"; fi +if which mise > /dev/null; then eval "$(mise activate zsh)"; fi +if which direnv > /dev/null; then eval "$(direnv hook zsh)"; fi + +# export MANPATH="/usr/local/man:$MANPATH" + +# You may need to manually set your language environment +# export LANG=en_US.UTF-8 + +# Preferred editor for local and remote sessions +# if [[ -n $SSH_CONNECTION ]]; then +# export EDITOR='vim' +# else +# export EDITOR='mvim' +# fi + +# Compilation flags +# export ARCHFLAGS="-arch x86_64" + +# Set personal aliases, overriding those provided by oh-my-zsh libs, +# plugins, and themes. Aliases can be placed here, though oh-my-zsh +# users are encouraged to define aliases within the ZSH_CUSTOM folder. +# For a full list of active aliases, run `alias`. +# +# Example aliases +# alias zshconfig="mate ~/.zshrc" +# alias ohmyzsh="mate ~/.oh-my-zsh" diff --git a/Brewfile b/Brewfile deleted file mode 100755 index 0e2f615..0000000 --- a/Brewfile +++ /dev/null @@ -1,24 +0,0 @@ -tap 'caskroom/cask' - -brew 'git' -brew 'mas' - -cask 'appcleaner' -cask 'filezilla' -cask 'firefox' -cask 'flux' -cask 'google-chrome' -cask 'keepingyouawake' -cask 'keka' -cask 'mamp' -cask 'opera' -cask 'sequel-pro' -cask 'skype' -cask 'spectacle' -cask 'transmission' -cask 'visual-studio-code' -cask 'vlc' - -mas "iMovie", id: 408981434 -mas "Numbers", id: 409203825 -mas "Pages", id: 409201541 diff --git a/Dracula.itermcolors b/Dracula.itermcolors new file mode 100755 index 0000000..619da48 --- /dev/null +++ b/Dracula.itermcolors @@ -0,0 +1,225 @@ + + + + + + + + Ansi 0 Color + + Blue Component + 0.0 + Green Component + 0.0 + Red Component + 0.0 + + Ansi 1 Color + + Blue Component + 0.3333333432674408 + Green Component + 0.3333333432674408 + Red Component + 1 + + Ansi 10 Color + + Blue Component + 0.4823529411764706 + Green Component + 0.98039215686274506 + Red Component + 0.31372549019607843 + + Ansi 11 Color + + Blue Component + 0.5490196078431373 + Green Component + 0.98039215686274506 + Red Component + 0.94509803921568625 + + Ansi 12 Color + + Blue Component + 0.97647058823529409 + Green Component + 0.57647058823529407 + Red Component + 0.74117647058823533 + + Ansi 13 Color + + Blue Component + 0.77647058823529413 + Green Component + 0.47450980392156861 + Red Component + 1 + + Ansi 14 Color + + Blue Component + 0.99215686274509807 + Green Component + 0.9137254901960784 + Red Component + 0.54509803921568623 + + Ansi 15 Color + + Blue Component + 1 + Green Component + 1 + Red Component + 1 + + Ansi 2 Color + + Blue Component + 0.4823529411764706 + Green Component + 0.98039215686274506 + Red Component + 0.31372549019607843 + + Ansi 3 Color + + Blue Component + 0.5490196078431373 + Green Component + 0.98039215686274506 + Red Component + 0.94509803921568625 + + Ansi 4 Color + + Blue Component + 0.97647058823529409 + Green Component + 0.57647058823529407 + Red Component + 0.74117647058823533 + + Ansi 5 Color + + Blue Component + 0.77647058823529413 + Green Component + 0.47450980392156861 + Red Component + 1 + + Ansi 6 Color + + Blue Component + 0.99215686274509807 + Green Component + 0.9137254901960784 + Red Component + 0.54509803921568623 + + Ansi 7 Color + + Blue Component + 0.73333334922790527 + Green Component + 0.73333334922790527 + Red Component + 0.73333334922790527 + + Ansi 8 Color + + Blue Component + 0.33333333333333331 + Green Component + 0.33333333333333331 + Red Component + 0.33333333333333331 + + Ansi 9 Color + + Blue Component + 0.33333333333333331 + Green Component + 0.33333333333333331 + Red Component + 1 + + Background Color + + Blue Component + 0.15977837145328522 + Green Component + 0.12215272337198257 + Red Component + 0.11765811592340469 + + Bold Color + + Blue Component + 0.90237069129943848 + Green Component + 0.90237069129943848 + Red Component + 0.90237069129943848 + + Cursor Color + + Blue Component + 0.73333334922790527 + Green Component + 0.73333334922790527 + Red Component + 0.73333334922790527 + + Cursor Text Color + + Blue Component + 1 + Green Component + 1 + Red Component + 1 + + Foreground Color + + Blue Component + 0.90032327175140381 + Green Component + 0.90032327175140381 + Red Component + 0.90032327175140381 + + Selected Text Color + + Blue Component + 1 + Green Component + 1 + Red Component + 1 + + Selection Color + + Blue Component + 0.35294118523597717 + Green Component + 0.27843138575553894 + Red Component + 0.26666668057441711 + + + diff --git a/Flat.terminal b/Flat.terminal deleted file mode 100644 index ba7c5a4..0000000 --- a/Flat.terminal +++ /dev/null @@ -1,295 +0,0 @@ - - - - - BackgroundColor - - YnBsaXN0MDDUAQIDBAUGKyxYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKcHCBMZHSQoVSRudWxs1QkKCwwNDg8QERJcTlNDb21wb25lbnRzVU5TUkdCXE5T - Q29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29sb3JTcGFjZVYkY2xhc3NPECcwLjE2OTc2MzUw - NTUgMC4yNDI0MTMwNDQgMC4zMTQwMTcyMzYyIDFPECcwLjEyODczODMyODggMC4xODM0 - NTkzODYyIDAuMjQ2MTk5MjY1MQAQAYACgAbTFBUNFhcYVE5TSURVTlNJQ0MQB4ADgAXS - Gg0bHFdOUy5kYXRhTxEMSAAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEA - AGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQA - AAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIY - AAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAA - iHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRl - Y2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQA - AAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNj - AAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYt - Mi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAA - AG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbP - ZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0 - dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29s - b3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBS - R0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAA - AAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAA - AAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIu - MQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3M - AAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAA - AAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAU - ABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAA - lQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZ - AR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB - 0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2 - AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD - 4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6 - BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG - 4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+ - CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK - 8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1a - DXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQ - JhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMj - E0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwW - jxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoq - GlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYe - QB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKC - Iq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgn - SSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5 - LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIx - ujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdg - N5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9 - oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQD - REdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRL - DEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIx - UnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbha - B1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1 - YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhq - n2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNd - c7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF8 - 4X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZy - hteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q - 1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtC - m6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqm - i6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHW - skuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++ - Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4 - yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjX - XNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz - 5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/y - jPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//4AE - 0h4fICFaJGNsYXNzbmFtZVgkY2xhc3Nlc11OU011dGFibGVEYXRhoyAiI1ZOU0RhdGFY - TlNPYmplY3TSHh8lJlxOU0NvbG9yU3BhY2WiJyNcTlNDb2xvclNwYWNl0h4fKSpXTlND - b2xvcqIpI18QD05TS2V5ZWRBcmNoaXZlctEtLlRyb290gAEACAARABoAIwAtADIANwA/ - AEUAUABdAGMAcACFAIwAtgDgAOIA5ADmAO0A8gD4APoA/AD+AQMBCw1XDVkNXg1pDXIN - gA2EDYsNlA2ZDaYNqQ22DbsNww3GDdgN2w3gAAAAAAAAAgEAAAAAAAAALwAAAAAAAAAA - AAAAAAAADeI= - - CursorBlink - - CursorColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw - LjkyMTU2ODY5MTcgMC43ODQzMTM3OTggMC4wMjc0NTA5ODI0OAAQAoAC0hAREhNaJGNs - YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp - dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA - AAAZAAAAAAAAAAAAAAAAAAAA2Q== - - CursorType - 0 - Font - - YnBsaXN0MDDUAQIDBAUGGBlYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKQHCBESVSRudWxs1AkKCwwNDg8QVk5TU2l6ZVhOU2ZGbGFnc1ZOU05hbWVWJGNs - YXNzI0AqAAAAAAAAEBCAAoADXlNGTW9uby1SZWd1bGFy0hMUFRZaJGNsYXNzbmFtZVgk - Y2xhc3Nlc1ZOU0ZvbnSiFRdYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2ZXLRGhtUcm9v - dIABCBEaIy0yNzxCS1JbYmlydHZ4h4yXoKeqs8XIzQAAAAAAAAEBAAAAAAAAABwAAAAA - AAAAAAAAAAAAAADP - - ProfileCurrentVersion - 2.0499999999999998 - SelectionColor - - YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw - LjU1Njg2Mjc3MTUgMC4yNjY2NjY2ODA2IDAuNjc4NDMxMzkxNwAQAoAC0hAREhNaJGNs - YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp - dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA - AAAZAAAAAAAAAAAAAAAAAAAA2Q== - - ShowActiveProcessArgumentsInTitle - - ShowActiveProcessInTitle - - ShowCommandKeyInTitle - - ShowDimensionsInTitle - - ShowRepresentedURLInTitle - - ShowRepresentedURLPathInTitle - - ShowShellCommandInTitle - - ShowTTYNameInTitle - - ShowWindowSettingsNameInTitle - - TextBoldColor - - YnBsaXN0MDDUAQIDBAUGKyxYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKcHCBMZHSQoVSRudWxs1QkKCwwNDg8QERJcTlNDb21wb25lbnRzVU5TUkdCXE5T - Q29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29sb3JTcGFjZVYkY2xhc3NHMSAxIDEgMU8QGjEg - MC45OTk5NzQzNyAwLjk5OTk5MTI5NzcAEAGAAoAG0xQVDRYXGFROU0lEVU5TSUNDEAeA - A4AF0hoNGxxXTlMuZGF0YU8RDEgAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkA - 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 - //+ABNIeHyAhWiRjbGFzc25hbWVYJGNsYXNzZXNdTlNNdXRhYmxlRGF0YaMgIiNWTlNE - YXRhWE5TT2JqZWN00h4fJSZcTlNDb2xvclNwYWNloicjXE5TQ29sb3JTcGFjZdIeHykq - V05TQ29sb3KiKSNfEA9OU0tleWVkQXJjaGl2ZXLRLS5Ucm9vdIABAAgAEQAaACMALQAy - ADcAPwBFAFAAXQBjAHAAhQCMAJQAsQCzALUAtwC+AMMAyQDLAM0AzwDUANwNKA0qDS8N - Og1DDVENVQ1cDWUNag13DXoNhw2MDZQNlw2pDawNsQAAAAAAAAIBAAAAAAAAAC8AAAAA - AAAAAAAAAAAAAA2z - - TextColor - - YnBsaXN0MDDUAQIDBAUGKyxYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS - AAGGoKcHCBMZHSQoVSRudWxs1QkKCwwNDg8QERJcTlNDb21wb25lbnRzVU5TUkdCXE5T - Q29sb3JTcGFjZV8QEk5TQ3VzdG9tQ29sb3JTcGFjZVYkY2xhc3NHMSAxIDEgMU8QGjEg - MC45OTk5NzQzNyAwLjk5OTk5MTI5NzcAEAGAAoAG0xQVDRYXGFROU0lEVU5TSUNDEAeA - A4AF0hoNGxxXTlMuZGF0YU8RDEgAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkA - 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 - //+ABNIeHyAhWiRjbGFzc25hbWVYJGNsYXNzZXNdTlNNdXRhYmxlRGF0YaMgIiNWTlNE - YXRhWE5TT2JqZWN00h4fJSZcTlNDb2xvclNwYWNloicjXE5TQ29sb3JTcGFjZdIeHykq - V05TQ29sb3KiKSNfEA9OU0tleWVkQXJjaGl2ZXLRLS5Ucm9vdIABAAgAEQAaACMALQAy - ADcAPwBFAFAAXQBjAHAAhQCMAJQAsQCzALUAtwC+AMMAyQDLAM0AzwDUANwNKA0qDS8N - Og1DDVENVQ1cDWUNag13DXoNhw2MDZQNlw2pDawNsQAAAAAAAAIBAAAAAAAAAC8AAAAA - AAAAAAAAAAAAAA2z - - UseBrightBold - - WindowTitle - Terminal - columnCount - 80 - name - Black - rowCount - 24 - type - Window Settings - - diff --git a/README.md b/README.md index 9cd45e7..5580559 100644 --- a/README.md +++ b/README.md @@ -1,341 +1,133 @@ -

- -# Front End Web Development Setup for macOS - -This document describes how I set up front end web development environment on my MacBook Air with macOS High Sierra 10.13.3. - +
+

Mac Setup

+

+ Full Stack Development Setup for macOS +

+

+ + Last Commit + +

+
+
+ +Automated macOS setup script for full stack development. Installs and configures tools, applications, shell environment, and system preferences. + +--- + +## Table of Contents + +- [Installation](#installation) +- [What Gets Installed](#what-gets-installed) - [System Preferences](#system-preferences) -- [Terminal](#terminal) -- [Bash](#bash) -- [Homebrew](#homebrew) +- [Shell](#shell) - [Git](#git) -- [Node.js](#nodejs) -- [Node Package Manager](#node-package-manager) -- [Web Browsers](#web-browsers) -- [Visual Studio Code](#visual-studio-code) - -## System Preferences - -After clean install of operating system, there are a couple tweaks I like to make to the System Preferences. Some of them are not strictly related to web development enviroment - I use them because of my personal habits. - - -- General > User dark menu bar and Dock -- General > Ask to keep changes when closing documents -- General > Close windows when quitting an app -- Dock > Automatically hide and show the Dock -- Keyboard > Key Repeat > Fast (all the way to the right) -- Keyboard > Delay Until Repeat > Short (all the way to the right) - -### Set Dock size - -```shell -defaults write com.apple.dock tilesize -int 35; killall Dock -``` - -### Disable "Press and hold" - -```shell -defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false -``` - -### Reset icons in Launchpad - -I usually use this command after installing every application that I need - it keeps Apple applications on the first page and moves the rest to the next pages. - -```shell -defaults write com.apple.dock ResetLaunchPad -bool true; killall Dock -``` - -### Show hidden files +- [Version Manager](#version-manager) -This can also be done by pressing `Command ⌘` + `Shift ⇧` + `.`. +--- -```shell -defaults write com.apple.finder AppleShowAllFiles YES -``` +## Installation -### Show path bar in Finder +Clone the repository and run the install script from the repo root: ```shell -defaults write com.apple.finder ShowPathbar -bool true +$ git clone https://github.com/gguerini/mac-setup.git +$ cd mac-setup +$ zsh script/install.sh ``` -### Show status bar in Finder +The installer is interactive — it will prompt you before each step so you can skip anything you don't need. Useful when setting up a work laptop vs. a personal machine. -```shell -defaults write com.apple.finder ShowStatusBar -bool true -``` +--- -## Terminal +## What Gets Installed -I use my custom Terminal profile called **Flat**. You can download it by typing: +### Base packages (always installed) -```shell -curl -O https://raw.githubusercontent.com/appalaszynski/mac-setup/master/Flat.terminal -``` +- `mas` — Mac App Store CLI +- `gh` — GitHub CLI -To use it as default profile open downloaded `Flat.terminal` file and click **Shell** > **Use settings as default** option. +### App groups (opt-in per group) -## Bash +Apps are organized into groups under `brewfiles/`. The installer prompts for each group: -```shell -alias brewup='brew update; brew upgrade; brew prune; brew cleanup; brew doctor; brew cask cleanup' -alias rmhis='rm .bash_history; history -c; logout' +| Group | Apps | +|---|---| +| **development** | Cursor, VS Code, GitHub Desktop, iTerm2, Insomnia, Figma | +| **databases** | TablePlus, Postico | +| **productivity** | Alfred, Rectangle, Caffeine, xbar, AppCleaner, 1Password, MeetingBar, Hidden Bar, Things, Bumpr | +| **communication** | Slack, ChatGPT, WhatsApp, Claude | +| **browsers** | Firefox, Google Chrome, Brave | +| **media** | VLC, LiceCap, ImageOptim, TrainerRoad | +| **utilities** | Wipr 2, Vinegar, GIPHY, Xcode | -export CLICOLOR=1 -export LSCOLORS=GxFxCxDxBxegedabagaced +To add a new group, create a `brewfiles/Brewfile.` file — the installer picks it up automatically. -RED='\[\033[1;31m\]' -GREEN='\[\033[1;32m\]' -YELLOW='\[\033[1;33m\]' -PURPLE='\[\033[1;35m\]' -GRAY='\[\033[1;30m\]' -DEFAULT='\[\033[0m\]' +--- -parse_git_branch() { - git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' -} +## System Preferences -export PS1="${RED}\u ${GRAY}• ${GREEN}\h ${GRAY}• ${YELLOW}\w${GRAY}\$([[ -n \$(git branch 2> /dev/null) ]] && echo \" on\")${PURPLE}\$(parse_git_branch)\n${GRAY}\$ ${DEFAULT}" -``` +macOS system preferences are configured via `script/defaults.sh`. It covers: -In my `.bash_profile` file I create a `brewup` alias to keep Homebrew (which we are going to install in a second) up to date and `rmhis` to remove bash history. I also set color scheme for `ls` command output and for custom prompt which contains username, computer name, working directory and current Git branch. +- **Finder** — status/path bars, list view, show hidden Library, spring loading +- **Dock** — size 35, auto-hide, no animations, minimize to app icon +- **Trackpad** — tap-to-click, two-finger right-click, three-finger swipe +- **Keyboard** — fast key repeat, disable press-and-hold, disable smart punctuation +- **Appearance** — Dark Mode, graphite accent color +- **Safari** — full URL display, developer tools, favorites bar -To download `.bash_profile` and execute its content, use: +Run it standalone at any time: ```shell -cd ~ -curl -O https://raw.githubusercontent.com/appalaszynski/mac-setup/master/.bash_profile -source ~/.bash_profile +$ zsh script/defaults.sh ``` -## Homebrew +> If you see "Could not write domain" errors, grant Full Disk Access to your terminal app in System Settings > Privacy & Security. -[Homebrew](http://brew.sh/) package manager allows to install almost any app right from the command line. +--- -### Installation +## Shell -```shell -/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" -``` +Uses [Oh My Zsh](https://ohmyz.sh/) with a custom theme and aliases. -### Brewfile - -Installing each package separately may take some time. That's why I use [Homebrew Bundle](https://github.com/Homebrew/homebrew-bundle), which allows to automatically install all packages and applications listed in the `Brewfile` file. - -Here are all the programs I install with a brief description. - -- [Cask](https://caskroom.github.io) - an extension to Homebrew which allows to install almost any program that exists for a Mac -- [Git](https://git-scm.com) - for version control -- [mas-cli](https://github.com/mas-cli/mas) - Mac App Store command line interface -- [AppCleaner](https://freemacsoft.net/appcleaner/) - uninstall apps -- [Filezilla](https://filezilla-project.org) - FTP client -- [Firefox](https://www.mozilla.org/firefox/new/) - web browser -- [Flux](https://justgetflux.com) - better Night Shift -- [Google Chrome](https://www.google.pl/chrome/browser/desktop/index.html) - web browser -- [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake) - prevent Mac from entering sleep mode -- [Keka](http://www.kekaosx.com) - file archiver -- [MAMP](https://www.mamp.info/en/) - Apache, MySQL and PHP package -- [Opera](http://www.opera.com) - web browser -- [Sequel Pro](http://www.sequelpro.com) - GUI for MySQL databases -- [Skype](https://www.skype.com) - voice and video chat -- [Spectacle](https://www.spectacleapp.com) - easily move and resize windows -- [Transmission](https://transmissionbt.com) - BitTorrent client -- [Visual Studio Code](https://code.visualstudio.com) - code editor -- [VLC](https://www.videolan.org/vlc/) - media player -- [iMovie](https://www.apple.com/imovie/) - video editor -- [Pages](https://www.apple.com/pages/) - text editor -- [Numbers](https://www.apple.com/numbers/) - spreadsheet - -Below are the entire contents of my `Brewfile`, which will install all the above programs with a single command. - -```ruby -tap 'caskroom/cask' - -brew 'git' -brew 'mas' - -cask 'appcleaner' -cask 'filezilla' -cask 'firefox' -cask 'flux' -cask 'google-chrome' -cask 'keepingyouawake' -cask 'keka' -cask 'mamp' -cask 'opera' -cask 'sequel-pro' -cask 'skype' -cask 'spectacle' -cask 'transmission' -cask 'visual-studio-code' -cask 'vlc' - -mas "iMovie", id: 408981434 -mas "Numbers", id: 409203825 -mas "Pages", id: 409201541 -``` +- **Theme** — `tranquility` (shows Git branch, commit age, dirty state) +- **Plugins** — `git`, `rails` +- **Aliases** — defined in `oh-my-zsh/aliases.zsh` -To check App Store application's IDs use: +VS Code settings are managed via [VS Code Settings Sync](https://code.visualstudio.com/docs/editor/settings-sync) backed by GitHub — not stored in this repo. -```shell -mas search -``` - -To download my `Brewfile` file type: - -```shell -curl -O https://raw.githubusercontent.com/appalaszynski/mac-setup/master/Brewfile -``` - -To install listed applications use: - -```shell -brew bundle -``` - -in directory that contains `Brewfile` file. +--- ## Git -You can set Git global configuration two ways. The first is to run bunch of commands which will update the Git configuration file, e.g. +The installer creates `~/.gitconfig` from the template in this repo, prompting for your name, email, and preferred editor. -```shell -git config --global user.name "First Last" -git config --global user.email "email@email.com" -``` +Includes a set of aliases for common workflows: -The other and faster way is creating the Git configuration file and input it all ourselves. +| Alias | Command | +|---|---| +| `s` | `status` | +| `aa` | `add --all` | +| `cm` | `add --all && commit -m` | +| `co` | `checkout` | +| `cob` | `checkout -b` | +| `up` | `fetch && pull --rebase` | +| `reb` | `fetch && rebase -i origin/main` | +| `lg` | fancy log with graph | +| `wip` | commit all as WIP | +| `undo` | reset last commit (mixed) | +| `wipe` | hard reset | +| `bdone` | checkout main, update, delete merged branches | -```shell -cd ~ -curl -O https://raw.githubusercontent.com/appalaszynski/mac-setup/master/.gitconfig -open .gitconfig -``` - -```properties -[user] - name = First Last - email = email@email.com -[github] - user = username -[core] - editor = editor -[credential] - helper = osxkeychain -``` +### SSH via 1Password -Here I set my name, email, GitHub username, core editor and connect Git to the macOS Keychain so I don’t have to type my username and password every time I want to push to GitHub. +1Password can act as your SSH agent — no key files on disk, protected by biometric unlock. When you enable it in **Settings > Developer > Use the SSH agent**, 1Password automatically updates `~/.ssh/config` for you. -## Node.js +--- -For installation of Node.js I like to use [Node Version Manager](https://github.com/creationix/nvm) (nvm). To download it type: - -```shell -curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash -``` - -You can check all available Node.js versions by: - -```shell -nvm list-remote -``` - -To install specific version type: - -```shell -nvm install -``` - -## Node Package Manager - -The only thing I use globally at the moment is [Gulp](https://gulpjs.com). - -### Gulp - -To install Gulp globally use: - -```shell -npm install --global gulp-cli -``` - -## Web Browsers - -Currently I have installed all major web browsers: - -- [Chrome](https://www.google.com/chrome/) -- [Safari](https://www.apple.com/safari/) -- [Opera](https://www.opera.com/) -- [Firefox](https://www.mozilla.org/en-US/firefox/) - -For main development I use Google Chrome. - -### Chrome extensions - -- [uBlock Origin](https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm) - block ads -- [JSONView](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc) - validate and view JSON documents -- [React developer tools](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi) - inspect component hierarchies and states -- [Redux DevTools](https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd) - debug state changes - -## Visual Studio Code - -All settings changes in Visual Studio Code are stored in `settings.json` file. - -```json -{ - "workbench.startupEditor": "newUntitledFile", - "workbench.colorTheme": "Monokai", - "workbench.activityBar.visible": false, - "workbench.iconTheme": "material-icon-theme", - "editor.fontSize": 12, - "editor.tabSize": 2, - "editor.multiCursorModifier": "ctrlCmd", - "editor.minimap.enabled": false, - "editor.hideCursorInOverviewRuler": true, - "editor.formatOnPaste": true, - "explorer.openEditors.visible": 0, - "files.insertFinalNewline": true, - "html.autoClosingTags": false, - "files.exclude": { - "**/node_modules/": true, - "**/.vscode/": true, - }, - "material-icon-theme.folders.theme": "none", - "todohighlight.isEnable": true, - "todohighlight.keywords": [ - { - "text": "TODO:", - "color": "black", - "backgroundColor": "yellow", - "overviewRulerColor": "yellow" - }, - { - "text": "FIXME:", - "color": "white", - "backgroundColor": "red", - "overviewRulerColor": "red" - } - ], - "todohighlight.exclude": [ - "**/public/" - ] -} -``` - -You can copy and paste them or just download whole file by: - -```shell -cd /Users/Your Username/Library/Application Support/Code/User -curl -O https://raw.githubusercontent.com/appalaszynski/mac-setup/master/settings.json -``` +## Version Manager -### Extensions +The installer offers a choice between [asdf](https://asdf-vm.com/) and [mise](https://mise.jdx.dev/) for managing Ruby versions. Both support `.tool-versions` files. -- [Auto Rename Tag](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag) - automatically rename paired HTML tag -- [Debugger for Chrome](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome) - debug JavaScript code in the Google Chrome browser -- [Material Icon Theme](https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme) - icons based on Material Design -- [open in browser](https://marketplace.visualstudio.com/items?itemName=techer.open-in-browser) - open any file in specific browser right from VS Code explorer -- [Path Intellisense](https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense) - autocomplete filenames -- [Project Manager](https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager) - manage projects right inside Visual Studio Code -- [SCSS IntelliSense](https://marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-scss) - autocomplete variables, mixins, functions and many other -- [TODO Highlight](https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight) - highlight and list TODO, FIXME or any annotations within code +- **asdf** — battle-tested, widely used +- **mise** — faster, actively maintained, drop-in replacement for asdf diff --git a/brewfiles/Brewfile b/brewfiles/Brewfile new file mode 100755 index 0000000..1826631 --- /dev/null +++ b/brewfiles/Brewfile @@ -0,0 +1,2 @@ +brew "mas" +brew "gh" diff --git a/brewfiles/Brewfile.browsers b/brewfiles/Brewfile.browsers new file mode 100644 index 0000000..a852d9e --- /dev/null +++ b/brewfiles/Brewfile.browsers @@ -0,0 +1,3 @@ +cask "firefox" +cask "google-chrome" +cask "brave-browser" diff --git a/brewfiles/Brewfile.communication b/brewfiles/Brewfile.communication new file mode 100644 index 0000000..563c3c6 --- /dev/null +++ b/brewfiles/Brewfile.communication @@ -0,0 +1,4 @@ +cask "slack" + +mas "ChatGPT", id: 6448311069 +mas "Claude", id: 6473753684 diff --git a/brewfiles/Brewfile.databases b/brewfiles/Brewfile.databases new file mode 100644 index 0000000..f3aa3fa --- /dev/null +++ b/brewfiles/Brewfile.databases @@ -0,0 +1,2 @@ +cask "tableplus" +cask "postico" diff --git a/brewfiles/Brewfile.development b/brewfiles/Brewfile.development new file mode 100644 index 0000000..afe0b11 --- /dev/null +++ b/brewfiles/Brewfile.development @@ -0,0 +1,6 @@ +cask "cursor" +cask "visual-studio-code" +cask "github" +cask "iterm2" +cask "insomnia" +cask "figma" diff --git a/brewfiles/Brewfile.media b/brewfiles/Brewfile.media new file mode 100644 index 0000000..87c72ab --- /dev/null +++ b/brewfiles/Brewfile.media @@ -0,0 +1,3 @@ +cask "vlc" +cask "licecap" +cask "imageoptim" diff --git a/brewfiles/Brewfile.personal b/brewfiles/Brewfile.personal new file mode 100644 index 0000000..01d2ed5 --- /dev/null +++ b/brewfiles/Brewfile.personal @@ -0,0 +1,3 @@ +cask "trainerroad" + +mas "WhatsApp", id: 310633997 diff --git a/brewfiles/Brewfile.productivity b/brewfiles/Brewfile.productivity new file mode 100644 index 0000000..822e25f --- /dev/null +++ b/brewfiles/Brewfile.productivity @@ -0,0 +1,11 @@ +cask "alfred" +cask "rectangle" +cask "caffeine" +cask "xbar" +cask "appcleaner" + +mas "1Password", id: 1511601750 +mas "MeetingBar", id: 1532419400 +mas "Hidden Bar", id: 1452453066 +mas "Things", id: 904280696 +mas "Bumpr", id: 1166066070 diff --git a/brewfiles/Brewfile.utilities b/brewfiles/Brewfile.utilities new file mode 100644 index 0000000..a33c419 --- /dev/null +++ b/brewfiles/Brewfile.utilities @@ -0,0 +1,4 @@ +mas "Wipr 2", id: 1662217862 +mas "Vinegar", id: 1591303229 +mas "GIPHY", id: 668208984 +mas "Xcode", id: 497799835 diff --git a/oh-my-zsh/aliases.zsh b/oh-my-zsh/aliases.zsh new file mode 100644 index 0000000..140cda5 --- /dev/null +++ b/oh-my-zsh/aliases.zsh @@ -0,0 +1,8 @@ +# zsh / oh-my-zsh +alias zshconfig="code ~/.zshrc" +alias ohmyzsh="code ~/.oh-my-zsh" +alias reload!="source ~/.zshrc" + +# Show/hide hidden files in Finder +alias show="defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder" +alias hide="defaults write com.apple.finder AppleShowAllFiles -bool false && killall Finder" diff --git a/oh-my-zsh/themes/tranquility.zsh-theme b/oh-my-zsh/themes/tranquility.zsh-theme new file mode 100644 index 0000000..f0943b9 --- /dev/null +++ b/oh-my-zsh/themes/tranquility.zsh-theme @@ -0,0 +1,100 @@ +# Tranquility ZSH Theme based on AVIT + +PROMPT=' +$(_user_host)${_current_dir} $(git_prompt_info) +%{$fg[$CARETCOLOR]%}➜%{$resetcolor%} ' + +PROMPT2='%{$fg[$CARETCOLOR]%}◀%{$reset_color%} ' + +RPROMPT='$(_vi_status)%{$(echotc UP 1)%}$(_git_time_since_commit) $(git_prompt_status) ${_return_status}%{$(echotc DO 1)%}' + +local _current_dir="%{$fg_bold[blue]%}%3~%{$reset_color%} " +local _return_status="%{$fg_bold[red]%}%(?..⍉)%{$reset_color%}" +local _hist_no="%{$fg[grey]%}%h%{$reset_color%}" + +function _current_dir() { + local _max_pwd_length="65" + if [[ $(echo -n $PWD | wc -c) -gt ${_max_pwd_length} ]]; then + echo "%{$fg_bold[blue]%}%-2~ ... %3~%{$reset_color%} " + else + echo "%{$fg_bold[blue]%}%~%{$reset_color%} " + fi +} + +function _user_host() { + if [[ -n $SSH_CONNECTION ]]; then + me="%n@%m" + elif [[ $LOGNAME != $USER ]]; then + me="%n" + fi + if [[ -n $me ]]; then + echo "%{$fg[cyan]%}$me%{$reset_color%}:" + fi +} + +function _vi_status() { + if {echo $fpath | grep -q "plugins/vi-mode"}; then + echo "$(vi_mode_prompt_info)" + fi +} + +# Determine the time since last commit. If branch is clean, +# use a neutral color, otherwise colors will vary according to time. +function _git_time_since_commit() { +# Only proceed if there is actually a commit. + if last_commit=$(git log --pretty=format:'%at' -1 2> /dev/null); then + now=$(date +%s) + seconds_since_last_commit=$((now-last_commit)) + + # Totals + minutes=$((seconds_since_last_commit / 60)) + hours=$((seconds_since_last_commit/3600)) + + # Sub-hours and sub-minutes + days=$((seconds_since_last_commit / 86400)) + sub_hours=$((hours % 24)) + sub_minutes=$((minutes % 60)) + + if [ $hours -gt 24 ]; then + commit_age="${days}d" + elif [ $minutes -gt 60 ]; then + commit_age="${sub_hours}h${sub_minutes}m" + else + commit_age="${minutes}m" + fi + + color=$ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL + echo "$color$commit_age%{$reset_color%}" + fi +} + +if [[ $USER == "root" ]]; then + CARETCOLOR="red" +else + CARETCOLOR="white" +fi + +MODE_INDICATOR="%{$fg_bold[yellow]%}❮%{$reset_color%}%{$fg[yellow]%}❮❮%{$reset_color%}" + +ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[green]%}" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" + +ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}✗%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_CLEAN=" %{$fg[green]%}✔%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%}✚ " +ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[yellow]%}⚑ " +ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%}✖ " +ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[blue]%}▴ " +ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[cyan]%}§ " +ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[white]%}◒ " + +# Colors vary depending on time lapsed. +ZSH_THEME_GIT_TIME_SINCE_COMMIT_SHORT="%{$fg[green]%}" +ZSH_THEME_GIT_TIME_SHORT_COMMIT_MEDIUM="%{$fg[yellow]%}" +ZSH_THEME_GIT_TIME_SINCE_COMMIT_LONG="%{$fg[red]%}" +ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL="%{$fg[white]%}" + +# LS colors, made with https://geoff.greer.fm/lscolors/ +export LSCOLORS="exfxcxdxbxegedabagacad" +export LS_COLORS='di=34;40:ln=35;40:so=32;40:pi=33;40:ex=31;40:bd=34;46:cd=34;43:su=0;41:sg=0;46:tw=0;42:ow=0;43:' +export GREP_COLOR='1;33' diff --git a/rectangle.plist b/rectangle.plist new file mode 100644 index 0000000..044e46a Binary files /dev/null and b/rectangle.plist differ diff --git a/script/defaults.sh b/script/defaults.sh new file mode 100755 index 0000000..dd11021 --- /dev/null +++ b/script/defaults.sh @@ -0,0 +1,193 @@ +# Sets reasonable OS X defaults. +# https://macos-defaults.com/ +# +# Run ./defaults.sh and you'll be good to go. + +# 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' + +############################################################################### +# Finder # +############################################################################### + +# Show status bar +defaults write com.apple.finder ShowStatusBar -bool true + +# Show path bar +defaults write com.apple.finder ShowPathbar -bool true + +# Keep folders on top when sorting by name +defaults write com.apple.finder _FXSortFoldersFirst -bool true + +# Disable showing tags +defaults write com.apple.finder ShowRecentTags -int 0 + +# Use AirDrop over every interface. srsly this should be a default. +defaults write com.apple.NetworkBrowser BrowseAllInterfaces 1 + +# Always open everything in Finder's list view. This is important. +defaults write com.apple.finder FXPreferredViewStyle -string "Nlsv" + +# Show the ~/Library folder. +chflags nohidden ~/Library + +# Set the Finder prefs for showing a few different volumes 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 + +# Allow text selection in Quick Look +defaults write com.apple.finder QLEnableTextSelection -bool true + +# 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 + +############################################################################### +# Safari & WebKit # +############################################################################### + +# Show favorites bar in Safari by default +defaults write com.apple.Safari ShowFavoritesBar -bool true + +# Show the full URL in the address bar (note: this still hides the scheme) +defaults write com.apple.Safari ShowFullURLInSmartSearchField -bool true + +# Enable Safari’s debug menu +defaults write com.apple.Safari IncludeInternalDebugMenu -bool true + +# Shoe Safari’s status bar +defaults write com.apple.Safari ShowOverlayStatusBar -bool true + +# 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 + +############################################################################### +# Dock, Dashboard # +############################################################################### + +# Set Dock size +defaults write com.apple.dock tilesize -int 35 + +# Auto-hide Dock +defaults write com.apple.dock autohide -int 1 + +# Disable animations +defaults write com.apple.dock launchanim -int 0 + +# Minimize windows into their application’s icon +defaults write com.apple.dock minimize-to-application -bool true + +# Show indicator lights for open applications in the Dock +defaults write com.apple.dock show-process-indicators -int 1 + +# Change minimize/maximize window effect +defaults write com.apple.dock mineffect -string "scale" + +# 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 + +# Speed up Mission Control animations +defaults write com.apple.dock expose-animation-duration -float 0.1 + +############################################################################### +# Trackpad. # +############################################################################### + +# Enable tap to click +defaults write com.apple.AppleMultitouchTrackpad Clicking -int 1 +defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -int 1 + +# Enable right click (tap with two fingers) +defaults write com.apple.AppleMultitouchTrackpad TrackpadRightClick -int 1 +defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadRightClick -int 1 + +# Enable application change (swipe horizontal witch three fingers) +defaults write com.apple.AppleMultitouchTrackpad TrackpadThreeFingerHorizSwipeGesture -int 2 +defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerHorizSwipeGesture -int 2 + +# Enable the Launchpad gesture (pinch with thumb and three fingers) +defaults write com.apple.dock showLaunchpadGestureEnabled -int 1 + +# Enable Expose gesture (slide down with three fingers) +defaults write com.apple.dock showAppExposeGestureEnabled -int 1 + +############################################################################### +# Keyboard # +############################################################################### + +# Disable press-and-hold for keys in favor of key repeat +defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false + +# Disable smart dashes +defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false + +# Disable automatic period substitution +defaults write NSGlobalDomain NSAutomaticPeriodSubstitutionEnabled -bool false + +# Disable smart quotes +defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false + +# Set a really fast key repeat +defaults write NSGlobalDomain KeyRepeat -int 1 +defaults write NSGlobalDomain InitialKeyRepeat -int 15 + +# Enable full keyboard access for all controls +# (e.g. enable Tab in modal dialogs) +defaults write NSGlobalDomain AppleKeyboardUIMode -int 3 + +############################################################################### +# Appearance # +############################################################################### + +# Enable Dark Mode +defaults write NSGlobalDomain AppleInterfaceStyle Dark + +# Set appearance color to graphite +defaults write -g AppleAccentColor -integer 4 + +############################################################################### +# Other stuff # +############################################################################### + +# Automatically quit printer app once the print jobs complete +defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true + +# Expand print panel by default +defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true +defaults write NSGlobalDomain PMPrintingExpandedStateForPrint2 -bool true + +# Expand save panel by default +defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true +defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true + +# Text, spell checker automatically identifies languages +defaults write NSGlobalDomain NSSpellCheckerAutomaticallyIdentifiesLanguages -bool true + +# Use plain text mode for new TextEdit documents +defaults write com.apple.TextEdit RichText -int 0 + +# Ask to keep change when closing documents +defaults write NSGlobalDomain NSCloseAlwaysConfirmsChanges -bool true + +# Set alert sound +# defaults write NSGlobalDomain com.apple.sound.beep.sound -string "/System/Library/Sounds/Funk.aiff" + +# Play feedback when volume is changed +defaults write NSGlobalDomain com.apple.sound.beep.feedback -int 1 + +applications_to_kill=( + "Activity Monitor" + "Dock" + "Finder" +) + +killall "${applications_to_kill[@]}" diff --git a/script/install.sh b/script/install.sh new file mode 100755 index 0000000..9f7fbde --- /dev/null +++ b/script/install.sh @@ -0,0 +1,350 @@ +#!/bin/zsh + +# Logo +LOGO=" __ __ _____ _ +| \/ | / ____| | | +| \ / | __ _ ___ | (___ ___| |_ _ _ _ __ +| |\/| |/ _\` |/ __| \___ \ / _ \ __| | | | '_ \\ +| | | | (_| | (__ ____) | __/ |_| |_| | |_) | +|_| |_|\__,_|\___| |_____/ \___|\__|\__,_| .__/ + | | + |_|" + +# Colors +BOLD=$(tput bold) +CYAN=$(tput setaf 6) +RED=$(tput setaf 1) +GREEN=$(tput setaf 2) +YELLOW=$(tput setaf 3) +DEFAULT=$(tput sgr0) + +# New line character +NEW_LINE="\n" +# Horizonal line in cyan color +DIVIDER="${CYAN}${BOLD}------------------------------------------------$DEFAULT" +# Horizonal line in red color +RED_DIVIDER="${RED}${BOLD}------------------------------------------------$DEFAULT" + +# Arrows +ARROW="$CYAN$BOLD==>$DEFAULT" +ARROW_GREEN="$GREEN$BOLD==>$DEFAULT" +ARROW_YELLOW="$YELLOW$BOLD==>$DEFAULT" + +# Booleans to track if specific programs are already installed +IS_HOMEBREW_INSTALLED=false +IS_OH_MY_ZSH_INSTALLED=false +IS_ITERM_INSTALLED=false + +clear + +# Print logo and description +echo -e "${CYAN}${BOLD}${LOGO}${DEFAULT}${NEW_LINE}" +echo -e "${CYAN}${BOLD} Full Stack Development Setup for macOS$NEW_LINE" +echo -e "$DIVIDER" +echo " " +echo " " +echo -e "${DIVIDER}${NEW_LINE}" + +echo "Welcome to the installer!" +echo -e "First, enter your password to execute all the commands as super user.$NEW_LINE" + +echo -e "${RED}${BOLD}Important:$DEFAULT You can be asked more times for password during the process." +echo -e "Also, make sure that You are logged in to the Mac App Store.$NEW_LINE" + +# Prompt user for password +sudo -v + +clear + +#---------------------------- +# Rosetta 2 (Apple Silicon) +#---------------------------- + +if [[ $(uname -m) == "arm64" ]]; then + if /usr/bin/pgrep -q oahd; then + echo "${ARROW_GREEN} Rosetta 2 already installed!" + else + echo "${ARROW} Apple Silicon detected. Installing Rosetta 2..." + softwareupdate --install-rosetta --agree-to-license + fi +fi + +#---------------------------- +# Xcode Command Line Tools +#---------------------------- + +if xcode-select -p &>/dev/null; then + echo "${ARROW_GREEN} Xcode Command Line Tools already installed!" +else + echo "${ARROW} Installing Xcode Command Line Tools..." + xcode-select --install 2>/dev/null + echo -n "${ARROW_YELLOW} Follow the dialog to complete installation, then hit any key to continue..." + read +fi + +#---------------------------- +# Homebrew +#---------------------------- + +if hash brew 2>/dev/null; then + IS_HOMEBREW_INSTALLED=true +fi + +if $IS_HOMEBREW_INSTALLED; then + echo "${ARROW_GREEN} Homebrew already installed!" + + echo -n "${ARROW_YELLOW} Update Homebrew formulas? [y/n]: " + read REPLY + + if [[ "$REPLY" == "y" ]]; then + echo "${ARROW} Updating Homebrew formulas..." + + brew update + brew upgrade + fi +else + echo -n "${ARROW_YELLOW} Install Homebrew? [y/n]: " + read REPLY + + if [[ "$REPLY" == "y" ]]; then + echo "${ARROW} Installing Homebrew..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + + # Add Homebrew to PATH for the remainder of this script + if [[ $(uname -m) == "arm64" ]]; then + eval "$(/opt/homebrew/bin/brew shellenv)" + else + eval "$(/usr/local/bin/brew shellenv)" + fi + + IS_HOMEBREW_INSTALLED=true + fi +fi + +#---------------------------- +# Git +#---------------------------- + +if $IS_HOMEBREW_INSTALLED; then + echo -n "${ARROW_YELLOW} Install latest Git version via Homebrew? [y/n]: " + read REPLY + + if [[ "$REPLY" == "y" ]]; then + echo "${ARROW} Installing Git..." + brew install git + fi +fi + +#---------------------------- +# .gitconfig +#---------------------------- + +echo -n "${ARROW_YELLOW} Configure Git by creating ~/.gitconfig file? [y/n]: " +read REPLY + +if [[ "$REPLY" == "y" ]]; then + echo -n "${ARROW_YELLOW} Please enter full name: " + read username + echo -n "${ARROW_YELLOW} Please enter Git e-mail: " + read email + echo -n "${ARROW_YELLOW} Please enter Git editor: " + read editor + echo "${ARROW} Creating ~/.gitconfig file..." + + cp ~/.gitconfig ~/.gitconfig.mac_setup_backup 2> /dev/null + cp .gitconfig ~ + sed -i -e "s/First Last/$username/g" ~/.gitconfig + sed -i -e "s/email@email.com/$email/g" ~/.gitconfig + sed -i -e "s/= editor/= $editor/g" ~/.gitconfig +fi + +#---------------------------- +# Tig +#---------------------------- + +if $IS_HOMEBREW_INSTALLED; then + echo -n "${ARROW_YELLOW} Install Tig: text-mode interface for Git via Homebrew? [y/n]: " + read REPLY + + if [[ "$REPLY" == "y" ]]; then + echo "${ARROW} Installing Tig..." + brew install tig + fi +fi + +#---------------------------- +# direnv +#---------------------------- + +if $IS_HOMEBREW_INSTALLED; then + echo -n "${ARROW_YELLOW} Install direnv via Homebrew? [y/n]: " + read REPLY + + if [[ "$REPLY" == "y" ]]; then + echo "${ARROW} Installing direnv..." + brew install direnv + fi +fi + +#---------------------------- +# Version manager (asdf or mise) +#---------------------------- + +if $IS_HOMEBREW_INSTALLED; then + echo -n "${ARROW_YELLOW} Install a Ruby version manager? [asdf/mise/n]: " + read REPLY + + if [[ "$REPLY" == "asdf" ]]; then + echo "${ARROW} Installing asdf & ruby-build..." + brew install asdf + asdf plugin-add ruby https://github.com/asdf-vm/asdf-ruby.git + elif [[ "$REPLY" == "mise" ]]; then + echo "${ARROW} Installing mise..." + brew install mise + fi +fi + +#---------------------------- +# Application bundle +#---------------------------- + +if $IS_HOMEBREW_INSTALLED; then + echo -n "${ARROW_YELLOW} Install applications via Homebrew Cask and Mac App Store? [y/n]: " + read REPLY + + if [[ "$REPLY" = "y" ]]; then + echo -e "${RED}${BOLD}Important: Sign into the Mac App Store GUI app manually. Hit any key to continue. " + read + + echo "${ARROW} Installing base packages..." + brew bundle --file="brewfiles/Brewfile" + + for brewfile in brewfiles/Brewfile.*; do + group="${brewfile#brewfiles/Brewfile.}" + echo -n "${ARROW_YELLOW} Install $group apps? [y/n]: " + read REPLY + [[ "$REPLY" == "y" ]] && brew bundle --file="$brewfile" + done + fi +fi + +# ---------------------------- +# oh-my-zsh +# ---------------------------- + +echo -n "${ARROW_YELLOW} Install Oh My Zsh? [y/n]: " +read REPLY + +if [[ "$REPLY" == "y" ]]; then + echo -e "${NEW_LINE}${RED_DIVIDER}" + echo -e "${RED}${BOLD}Important: After the Oh My Zs installation is done, you will have to 'exit' the new shell to continue this script." + echo -e "${RED_DIVIDER}${NEW_LINE}" + + echo "${ARROW} Installing Oh My Zsh..." + sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" + + IS_OH_MY_ZSH_INSTALLED=true +fi + +#---------------------------- +# .zshrc +#---------------------------- + +if $IS_OH_MY_ZSH_INSTALLED; then + echo -n "${ARROW_YELLOW} Configure Oh My Zsh by creating ~/.zshrc file? [y/n]: " + read REPLY + + if [[ "$REPLY" == "y" ]]; then + echo "${ARROW} Creating ~/.zshrc file..." + cp ~/.zshrc ~/.zshrc.mac_setup_backup 2> /dev/null + cp .zshrc ~ + sed -i -e "s+custom_path+$PWD/oh-my-zsh+g" ~/.zshrc + fi +fi + +#---------------------------- +# iTerm2 profile +#---------------------------- + +if [ -d /Applications/iTerm.app/ ]; then + IS_ITERM_INSTALLED=true +fi + +if $IS_ITERM_INSTALLED; then + echo -n "${ARROW_YELLOW} Install Dracula iTerm2 profile? [y/n]: " + read REPLY + + if [[ "$REPLY" == "y" ]]; then + echo "${ARROW_YELLOW} New iTerm2 window opened. Go to 'Preferences' > 'Profiles' > 'Colors' and choose 'Dracula' from the 'Color Presets' menu." + open ./Dracula.itermcolors + fi +fi + +#---------------------------- +# Rectangle settings +#---------------------------- + +if [ -d /Applications/Rectangle.app/ ]; then + IS_RECTANGLE_INSTALLED=true +fi + +if $IS_RECTANGLE_INSTALLED; then + echo -n "${ARROW_YELLOW} Configure Rectangle settings? [y/n]: " + read REPLY + + if [[ "$REPLY" == "y" ]]; then + echo "${ARROW} Configuring Rectangle settings..." + cp ~/Library/Preferences/com.knollsoft.Rectangle.plist ~/Library/Preferences/com.knollsoft.Rectangle.plist.mac_setup_backup 2> /dev/null + cp -r rectangle.plist ~/Library/Preferences/com.knollsoft.Rectangle.plist 2> /dev/null + fi +fi + +#---------------------------- +# Computer name +#---------------------------- + +echo -n "${ARROW_YELLOW} Set computer name? [y/n]: " +read REPLY + +if [[ "$REPLY" == "y" ]]; then + echo -n "${ARROW_YELLOW} Please enter computer name: " + read uservar + + sudo scutil --set ComputerName "$uservar" +fi + +#---------------------------- +# Host name +#---------------------------- + +echo -n "${ARROW_YELLOW} Set host name? [y/n]: " +read REPLY + +if [[ "$REPLY" == "y" ]]; then + echo -n "${ARROW_YELLOW} Please enter host name (avoid special characters, space, etc.): " + read uservar + + sudo scutil --set HostName "$uservar" + sudo scutil --set LocalHostName "$uservar" +fi + +#---------------------------- +# macOS Defaults +#---------------------------- + +echo -n "${ARROW_YELLOW} Configure macOS Defaults? [y/n]: " +read REPLY + +if [[ "$REPLY" == "y" ]]; then + echo "${ARROW} Configuring macOS Defaults..." + echo -e "${NEW_LINE}${DIVIDER}" + echo -e "${YELLOW}${BOLD}Note:$DEFAULT If you see errors like 'Could not write domain', temporarily give Full Disk Access (System Preferences > Security & Privacy)" + echo -e "to the Terminal/iTerm app and re-apply macOS Defaults manually: ${CYAN}${BOLD}./script/defaults.sh" + echo -e "${DIVIDER}" + . ./script/defaults.sh +fi + +echo -e "${NEW_LINE}${YELLOW}${BOLD}Note:$DEFAULT Some changes may need system restart to be applied!" +echo -e "${NEW_LINE}${GREEN}${BOLD}Congratulations, installation complete!${DEFUALT}${NEW_LINE}" + +exit 0 diff --git a/settings.json b/settings.json deleted file mode 100644 index 2602fd7..0000000 --- a/settings.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "workbench.startupEditor": "newUntitledFile", - "workbench.colorTheme": "Monokai", - "workbench.activityBar.visible": false, - "workbench.iconTheme": "material-icon-theme", - "editor.fontSize": 12, - "editor.tabSize": 2, - "editor.multiCursorModifier": "ctrlCmd", - "editor.minimap.enabled": false, - "editor.hideCursorInOverviewRuler": true, - "editor.formatOnPaste": true, - "explorer.openEditors.visible": 0, - "files.insertFinalNewline": true, - "html.autoClosingTags": false, - "files.exclude": { - "**/node_modules/": true, - "**/.vscode/": true, - }, - "material-icon-theme.folders.theme": "none", - "todohighlight.isEnable": true, - "todohighlight.keywords": [ - { - "text": "TODO:", - "color": "black", - "backgroundColor": "yellow", - "overviewRulerColor": "yellow" - }, - { - "text": "FIXME:", - "color": "white", - "backgroundColor": "red", - "overviewRulerColor": "red" - } - ], - "todohighlight.exclude": [ - "**/public/" - ] -}