From cf6757d3d93cbdd35893f8096b53494279b8417f Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 04:44:20 -0300 Subject: [PATCH 01/63] feat: linux settings --- git/.git-commit-template | 18 + git/.gitconfig | 18 +- linux/.zshrc | 53 +++ linux/Brewfile | 27 ++ linux/install | 328 ++++++++++++++++++ zsh/aliases.zsh | 68 ++-- .../custom-functions.plugin.zsh | 16 + 7 files changed, 484 insertions(+), 44 deletions(-) create mode 100644 git/.git-commit-template create mode 100644 linux/.zshrc create mode 100644 linux/Brewfile create mode 100644 linux/install diff --git a/git/.git-commit-template b/git/.git-commit-template new file mode 100644 index 0000000..ed875a7 --- /dev/null +++ b/git/.git-commit-template @@ -0,0 +1,18 @@ +# Title (maximum 50 characters) +# +# Briefly and imperatively describe the change made + +# Blank line + +# Message body (maximum 72 characters per line) +# +# Explain what and why, not just how. If necessary, provide context, +# motivations, and the impact of the change. Use as many lines as needed. + +# Blank line + +# Footer (optional) +# +# Reference issues, pull requests, or breaking changes, if applicable. +# Example: Closes #123, Related to #456 + diff --git a/git/.gitconfig b/git/.gitconfig index c0e34c6..eeba04c 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -1,20 +1,23 @@ -# This is Git's per-user configuration file. - [user] - name = "" - email = "" + name = "" # e.g. Tiago Celestino + email = "" # e.g. your.email@provider.com [mergetool] keepBackup = true [core] - editor = vim + editor = $EDITOR excludesfile = ~/.gitignore attributesfile = ~/.gitattributes [init] defaultBranch = main +[push] + autoSetupRemote = true + +[commit] + template = ~/.git-commit-template [alias] ci = commit @@ -33,10 +36,10 @@ fu = fetch origin pum = pull origin master pumn = pull origin main - pud = pull origin dev + pud = pull origin develop fupum = !git co master && git fu && git pum fupumn = !git co main && git fu && git pumn - fupud = !git co dev && git fu && git pud + fupud = !git co develop && git fu && git pud rb = "!f() { \ branch=\"$(git branch 2>/dev/null | grep \\* | awk '{ print $2 }')\" && \ if git rev-parse --verify master >/dev/null 2>&1; then \ @@ -67,3 +70,4 @@ deletebranches = !git branch --merged | grep -v \\* | xargs git branch -D prune = !git remote prune origin cleanup = "!f() { git branch | grep -v \" $(git rev-parse --abbrev-ref HEAD)\" | xargs git branch -D; git fetch --prune;}; f" + diff --git a/linux/.zshrc b/linux/.zshrc new file mode 100644 index 0000000..80a3be6 --- /dev/null +++ b/linux/.zshrc @@ -0,0 +1,53 @@ +export ZSH=$HOME/.oh-my-zsh + +ZSH_THEME="dracula" + +plugins=(brew copypath copyfile custom-functions deno docker docker-compose extract git history npm python vscode web-search yarn) + +# global +export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" +export PATH=$HOME/local/bin:$PATH +export NPM_PACKAGES="${HOME}/.npm-packages" +export PATH="$NPM_PACKAGES/bin:$PATH" +export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH" +#export JAVA_HOME="$(/usr/libexec/java_home -v 1.$JAVA_VERSION)" # enable this if you are using java +#export PATH=/usr/share/maven/bin:$PATH # enable this if you are using maven +#export PATH=$HOME/mongodb/bin:$PATH # enable this if you are using mongodb +#export PATH=$PATH:~/.composer/vendor/bin # enable this if you are using composer + +# github +export GH_TOKEN="" # create token at https://github.com/settings/apps select "Personal access tokens" + +# ssh +export SSH_KEY_PATH="~/.ssh/id_ed25519" + +# node and npm +export NODE_ENV="development" +export NPM_TOKEN="" # create token at https://www.npmjs.com/settings/tokens +export NPM_SCOPE="" # e.g. tcelestino + +# local +export USER_NAME="" # e.g. tcelestino +export USER_EMAIL="" # e.g. your.email@provider.com + +# preferred editor for local and remote sessions +if [[ -n $SSH_CONNECTION ]]; then + export EDITOR='vim' +else + export EDITOR='code' +fi + +# web search custom search engines +ZSH_WEB_SEARCH_ENGINES=( + reddit "https://www.reddit.com/search/?q=" + linkedin "https://www.linkedin.com/search/results/all/?keywords=" +) + +# deno settings +. "$HOME/.deno/env" + +# homebrew +eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" + +source $ZSH/oh-my-zsh.sh + diff --git a/linux/Brewfile b/linux/Brewfile new file mode 100644 index 0000000..38f4dd7 --- /dev/null +++ b/linux/Brewfile @@ -0,0 +1,27 @@ +tap "homebrew/bundle" +brew "xz" +brew "zstd" +brew "libtiff" +brew "jpeg-xl" +brew "c-ares" +brew "icu4c@76" +brew "libuv" +brew "openssl@3" +brew "gettext" +brew "glib" +brew "sqlite" +brew "gh" +brew "git" +brew "unbound" +brew "gnutls" +brew "netpbm" +brew "harfbuzz" +brew "python@3.13" +brew "graphviz" +brew "httpie" +brew "libssh" +brew "pipx" +brew "pyenv" +brew "python-argcomplete" +brew "qemu" +brew "yarn" diff --git a/linux/install b/linux/install new file mode 100644 index 0000000..f31eedd --- /dev/null +++ b/linux/install @@ -0,0 +1,328 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' + +# Get current location +DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +# Array to store completed steps +declare -a completed_steps=() + +# Register a completed step +# @param $1 Step name +register_completed_step() { + local step="$1" + completed_steps+=("$step") +} + +# Print info messages +# @param $1 Message +log() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +# Print error messages in red and exit +# @param $1 Message +error() { + echo -e "${RED}[ERROR]${NC} $1" + exit 1 +} + +# Create a symbolic link +# @param $1 Source file path +# @param $2 Destination link path +safe_link() { + local src="$1" + local dest="$2" + + if [ -e "$dest" ] || [ -L "$dest" ]; then + log "Found $dest - removing..." + rm -f "$dest" + fi + + if [ ! -e "$src" ]; then + error "Source file $src does not exist!" + fi + + log "Linking $dest to $src" + ln -s "$src" "$dest" +} + +# Copy a directory +# @param $1 Source directory path +# @param $2 Destination directory path +copy_dir() { + local src="$1" + local dest="$2" + + if [ ! -d "$src" ]; then + error "Source directory $src does not exist!" + fi + + if [ -d "$dest" ]; then + log "Found $dest - renaming..." + mv "$dest" "$dest.old" + fi + + log "Copying directory $src to $dest" + if ! cp -R "$src" "$dest"; then + error "Failed to copy directory $src to $dest" + fi +} + +# Copy a file +# @param $1 Source file path +# @param $2 Destination file path +copy_file() { + local src="$1" + local dest="$2" + + if [ ! -f "$src" ]; then + error "Source file $src does not exist!" + fi + + if [ -f "$dest" ]; then + log "Found $dest - renaming..." + mv "$dest" "$dest.old" + fi + + log "Copying file $src to $dest" + if ! cp "$src" "$dest"; then + error "Failed to copy file $src to $dest" + fi +} + +# Install Homebrew +install_brew() { + if command -v brew >/dev/null 2>&1; then + log "Homebrew is already installed." + register_completed_step "Homebrew (already installed)" + return + fi + + log "Installing Homebrew..." + if ! /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"; then + error "Failed to install Homebrew" + fi + + register_completed_step "Homebrew" + log "Homebrew installed successfully!" +} + +# Install zsh +install_zsh() { + if command -v zsh >/dev/null 2>&1; then + log "zsh is already installed." + register_completed_step "zsh (already installed)" + return + fi + log "Updating package list..." + if ! sudo apt update; then + error "Failed to update package list (apt update)" + fi + log "Installing zsh..." + if ! sudo apt install -y zsh; then + error "Failed to install zsh" + fi + register_completed_step "zsh" + log "zsh installed successfully!" +} + +# Install oh-my-zsh +install_oh_my_zsh() { + if [ -d "$HOME/.oh-my-zsh" ]; then + log "oh-my-zsh is already installed." + register_completed_step "oh-my-zsh (already installed)" + return + fi + + log "Installing oh-my-zsh..." + + # Download the install script to a temporary file + local temp_script=$(mktemp) + if ! curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -o "$temp_script"; then + error "Failed to download oh-my-zsh install script" + fi + + # Make the script executable and run it + chmod +x "$temp_script" + if ! bash "$temp_script" --unattended; then + rm -f "$temp_script" + error "Failed to install oh-my-zsh" + fi + + # Clean up the temporary script + rm -f "$temp_script" + + register_completed_step "oh-my-zsh" + log "oh-my-zsh installed successfully!" +} + +# Install Deno runtime +install_deno() { + if [ -f "$HOME/.deno/bin/deno" ] || command -v deno >/dev/null 2>&1; then + log "Deno is already installed.." + register_completed_step "Deno (already installed)" + return + else + log "Installing Deno" + if ! sh -c "$(curl -fsSL https://deno.land/install.sh)"; then + error "Failed to install Deno" + fi + register_completed_step "Deno" + log "Deno installed successfully!" + fi +} + +# Configure Git settings +setup_git() { + copy_file "$DIR/git/.gitconfig" "$HOME/.gitconfig" + copy_file "$DIR/git/.gitignore" "$HOME/.gitignore" + copy_file "$DIR/git/.gitattributes" "$HOME/.gitattributes" + copy_file "$DIR/git/.git-commit-template" "$HOME/.git-commit-template" + register_completed_step "Git" + log "Git configured successfully!" +} + +# Configure Zsh settings +setup_zsh() { + copy_file "$DIR/linux/.zshrc" "$HOME/.zshrc" + copy_dir "$DIR/zsh/themes" "$HOME/.oh-my-zsh/themes" + copy_file "$DIR/zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" + copy_dir "$DIR/zsh/custom-functions" "$HOME/.oh-my-zsh/plugins/custom-functions" + + register_completed_step "Zsh" + log "Zsh configured successfully!" +} + +# Configure Homebrew and install packages from Brewfile +setup_brew() { + copy_file "$DIR/linux/Brewfile" "$HOME/Brewfile" + log "Executing brew bundle install..." + if ! brew bundle install; then + error "Brew bundle install failed" + fi + register_completed_step "Homebrew" + log "Homebrew configured successfully!" +} + +# NPM Settings +setup_npm() { + copy_file "$DIR/.npmrc" "$HOME/.npmrc" + register_completed_step "NPM" + log "NPM configured successfully!" + + # Install npm globally without sudo. Based on https://github.com/sindresorhus/guides/blob/main/npm-global-without-sudo.md + if [ -d "$HOME/.npm-packages" ]; then + log ".npm-packages folder exists" + return + else + mkdir -p "$HOME/.npm-packages" + fi +} + +# Set my favorite custom fonts +setup_fonts() { + local font_dir="$HOME/.local/share/fonts" + if [ ! -d "$font_dir" ]; then + mkdir -p "$font_dir" + fi + copy_dir "$DIR/extras/fonts" "$font_dir" + log "Installing fonts for Linux..." + fc-cache -f -v + + register_completed_step "Fonts" + log "Fonts installed successfully!" +} + +ask_continue() { + local message="$1" + local step="$2" + echo -e "\n${GREEN}[INFO]${NC} Step $step: $message" + echo -e "${GREEN}[INFO]${NC} Options:" + echo -e " ${GREEN}[y]${NC} - Yes, continue" + echo -e " ${GREEN}[n]${NC} - No, skip this step" + echo -e " ${GREEN}[q]${NC} - Exit installation" + read -p "Your choice (y/n/q): " response + + case "$response" in + [Yy]*) + return 0 + ;; + [Nn]*) + log "Step $step skipped." + return 1 + ;; + [Qq]*) + log "Installation interrupted by user." + exit 0 + ;; + *) + log "Invalid option. Please try again." + ask_continue "$message" "$step" + ;; + esac +} + +main() { + log "Starting installation from $DIR..." + log "This script will configure your environment with the following steps:" + echo "1. Install zsh" + echo "2. Install oh-my-zsh" + echo "3. Install Homebrew" + echo "4. Install Deno" + echo "5. Configure Zsh" + echo "6. Configure Homebrew and install packages" + echo "7. Configure Git" + echo "8. Configure NPM" + echo "9. Configure the fonts" + + if ask_continue "Install zsh" "1"; then + install_zsh + fi + + if ask_continue "Install oh-my-zsh" "2"; then + install_oh_my_zsh + fi + + if ask_continue "Install Homebrew" "3"; then + install_brew + fi + + if ask_continue "Install Deno" "4"; then + install_deno + fi + + if ask_continue "Configure Zsh" "5"; then + setup_zsh + fi + + if ask_continue "Configure Homebrew and install packages" "6"; then + setup_brew + fi + + if ask_continue "Configure Git" "7"; then + setup_git + fi + + if ask_continue "Configure NPM" "8"; then + setup_npm + fi + + if ask_continue "Configure the fonts" "9"; then + setup_fonts + fi + + log "Configurations completed successfully! 🎉" + log "Steps executed:" + for step in "${completed_steps[@]}"; do + echo "- $step" + done +} + +main "$@" diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh index de74613..0ebb21b 100755 --- a/zsh/aliases.zsh +++ b/zsh/aliases.zsh @@ -1,16 +1,15 @@ # oh-my-zsh alias zshconfig="$EDITOR ~/.zshrc" alias ohmyzsh="$EDITOR ~/.oh-my-zsh" -alias reload="omz reload" # reload oh-my-zsh -alias zsh-alias="$EDITOR ~/.oh-my-zsh/custom/aliases.zsh" +alias reload="omz reload" +alias custom-alias="$EDITOR ~/.oh-my-zsh/custom/aliases.zsh" # local development -alias server="python -m SimpleHTTPServer" +alias server="python3 -m http.server" alias serveo="ssh -R 80:localhost:3000 serveo.net" -alias redis-start="/opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf" #start redis # https://paulbrowne.xyz/https-localhost -alias https-server='http-server --ssl --cert ~/.ssl/localhost.crt --key ~/.ssl/localhost.key -a localhost -o' +alias https-server="http-server --ssl --cert ~/.ssl/localhost.crt --key ~/.ssl/localhost.key -a localhost -o" # npm alias npm-i='npm install' @@ -22,51 +21,46 @@ alias npm-test='npm test' alias npm-it='npm install && npm test' alias npm-lk='npm link' alias npm-run='npm run' -alias npm-reset='rm -rf node_modules && rm -f package-lock.json && npm install && npx node-notifier-cli -t "Done" -m "npm modules reinstalled" -s Glass -i https://cdn.rawgit.com/npm/logos/31945b5c/npm%20square/n-64.png' alias npm-ri='rm -rf node_modules && npm i' +alias npm-reset='rm -rf node_modules && rm -f package-lock.json && npm install && npx node-notifier-cli -t "Done" -m "npm modules reinstalled" -s Glass -i https://cdn.rawgit.com/npm/logos/31945b5c/npm%20square/n-64.png' -# git +# git-cz alias commit="git-cz --disable-emoji" alias commitall="git add . && git-cz --disable-emoji" -# mac -alias shutdown="sudo shutdown -h now" -alias hosts="sudo $EDITOR /etc/hosts" -alias dns_clear="dscacheutil -flushcache" - # directory -alias downloads='cd ~/Downloads/' -alias projects='cd ~/Projects/' -alias work='cd ~/work' +alias downloads="cd ~/Downloads" +alias work=workFolder # mv, rm, cp -alias mv='mv -v' -alias rm='rm -i -v' -alias cp='cp -v' +alias mv="mv -v" +alias rm="rm -i -v" +alias cp="cp -v" alias rd="rmdir" alias del="rm -i" -alias cl="clear" -alias -- -="cd -" - # docker -alias dockercleand='docker rmi $(docker images -q)' # delete all images -alias dockercleanu='docker rmi $(docker images -q -f dangling=true)' # delete all untagged images -alias dockercleans='docker rm $(docker ps -a -q)' # delete all stopped images -alias dockerstop='docker stop $(docker ps -aq)' # stop all container -alias dcu='docker-compose up' #start with docker-composer -alias dcd='docker-compose down' #stop with docker-composer -alias dcr='docker-compose restart' #restart with docker-composer -alias dcb='docker-compose build' #build with docker-composer -alias dcl='docker-compose logs' #logs with docker-composer -alias dcp='docker-compose -f docker-compose.dependencies.yaml up -d' #start dependencies with docker-composer -alias docker_hostclean='export DOCKER_HOST=' # clean DOCKER_HOST +alias docker-rmi="docker rmi $(docker images -q)" # delete all images +alias docker-rmiu="docker rmi $(docker images -q -f dangling=true)" # delete all untagged images +alias docker-rmus="docker rm $(docker ps -a -q)" # delete all stopped images +alias docker-stop="docker stop $(docker ps -aq)" # stop all container +alias docker-ch="export DOCKER_HOST=" -alias fs="stat -f \"%z bytes\"" -alias chmox='chmod -x' +# docker-compose +alias dcu="docker-compose up" #start with docker-compose +alias dcd="docker-compose down" #stop with docker-compose +alias dcdv="docker-compose down -v" #stop with docker-compose and remove volumes +alias dcr="docker-compose restart" #restart with docker-compose +alias dcb="docker-compose build" #build with docker-compose +alias dcl="docker-compose logs" #logs with docker-compose +alias dcp="docker-compose -f docker-compose.dependencies.yaml up -d" #start dependencies with docker-compose + +# utils +alias fs="stat -c "%s bytes"" +alias chmox="chmod -x" alias where=which alias killnode="killall -9 node" - -alias checkport=checkPort # use my zsh custom plugin -alias killport=killPort # use my zsh custom plugin alias what_shell=ps -p $$ -o pid,comm= # show current shell +alias checkport=checkPort +alias killport=killPort + diff --git a/zsh/custom-functions/custom-functions.plugin.zsh b/zsh/custom-functions/custom-functions.plugin.zsh index 6e719f2..f4d3e2a 100755 --- a/zsh/custom-functions/custom-functions.plugin.zsh +++ b/zsh/custom-functions/custom-functions.plugin.zsh @@ -67,3 +67,19 @@ function logprocess() { journalctl -f -u "$1" 2>/dev/null || tail -f /var/log/syslog | grep "$1" fi } + +# open work folder +function workFolder() { + if [ -d ~/Projects ]; then + cd ~/Projects + elif [ -d ~/projects ]; then + cd ~/projects + elif [ -d ~/work ]; then + cd ~/work + elif [ -d ~/Work ]; then + cd ~/Work + else + echo "Folder ~/Projects, ~/projects, ~/work or ~/Work does not exist" + fi +} + From dde45d906fd41e99635b033f1d34d409ba0dc6e2 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 04:45:01 -0300 Subject: [PATCH 02/63] chore: set execute file --- linux/install | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 linux/install diff --git a/linux/install b/linux/install old mode 100644 new mode 100755 From a08cd55901b4eea7de0e655b769a46790c7a8cf1 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:17:28 -0300 Subject: [PATCH 03/63] docs: update infos --- README.md | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index bb4fb9a..8408dbc 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,42 @@ # dotfiles -Hey! 👋 +This is my dotfiles for personal app configs and customizations. I mainly use zsh, but you might adapt for bash or other shells. -This repo stores my personal app configs and customizations. I mainly use zsh, but you can adapt for bash or other shells. -Since I work with macOS and Ubuntu, configs are optimized for these OSs. But no worries - you can easily tweak them for other systems too! +This repo is 100% open for you to explore and customize. -## Usage +## How to use -This repo is 100% open for you to explore and customize. Just clone it and swap my configs with yours - makes it super easy to get your dev environment up and running on any new machine. - -## Getting Started - -1. Clone this repository to your local machine: +1. Clone this repository and open folder `dotfiles`: ```bash -git clone git@github.com:tcelestino/dotfiles.git +git clone git@github.com:tcelestino/dotfiles.git && cd dotfiles ``` -2. Open folder `dotfiles` and set run file to install +2. Open `.zshrc` file and change variables `USER_NAME`, `USER_EMAIL` and `NPM_SCOPE`. You might set `GH_TOKEN` and `NPM_TOKEN` too. + +3. Choose your OS and run the install script: `macos` or `linux`: ```bash -chmod +x install +# macos +./macos/install ``` -3. Open `.zshrc` file and change variables "USER_NAME", "USER_EMAIL" and "NPM_SCOPE". You might set `GH_TOKEN` and `NPM_TOKEN` too. ```bash +# linux +./linux/install +``` -4. Run the install script +## Apps and dev tools -```bash -./install -``` -⚠️ **Don't forget to set values `GH_TOKEN` and `NPM_TOKEN`!!** +My apps and dev tools for Linux and macOS. + +- [Linux apps](docs/linux-apps.md) +- [macOS apps](docs/macos-apps.md) +- [Dev tools](docs/dev-tools.md) ## Additional Configurations - To set the keyboard layout to include the 'ç' character on Ubuntu, follow the steps in the article "[Ajeitando o cedilha errado (ć) no Ubuntu Linux](https://www.danielkossmann.com/pt/ajeitando-cedilha-errado-ubuntu-linux/)" -- If you use iTerm2, you might import the color scheme and other configurations into iTerm2. The settings can be found in the "iterm2" folder. ## Contributing @@ -45,4 +45,5 @@ If you have any suggestions, improvements, or bug fixes, feel free to open an is This project follows the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification. Please use it when making changes to the codebase. ## License + See in [LICENSE](LICENSE). From 708f5fb1dd934c15a5fbae4fb5bd4534c47802c0 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:17:45 -0300 Subject: [PATCH 04/63] docs: create my apps and dev tools lists --- docs/dev-tools.md | 30 +++++++++++++++++++ docs/linux-apps.md | 10 +++++++ docs/macos-apps.md | 75 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 docs/dev-tools.md create mode 100644 docs/linux-apps.md create mode 100644 docs/macos-apps.md diff --git a/docs/dev-tools.md b/docs/dev-tools.md new file mode 100644 index 0000000..8685973 --- /dev/null +++ b/docs/dev-tools.md @@ -0,0 +1,30 @@ +# Dev tools + +My dev tools for macOS and Linux + +| Name | Description | URL | +| ---------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------ | +| Beekeeper Studio | Database management tool | [https://www.beekeeperstudio.io/](https://www.beekeeperstudio.io/) | +| Cursor | AI-powered code editor | [https://www.cursor.com/](https://www.cursor.com/) | +| Deno | Runtime for JavaScript and TypeScript | [https://deno.com/](https://deno.com/) | +| Docker | Containerization tool | [https://www.docker.com/](https://www.docker.com/) | +| Flatpak | Package manager for Linux | [https://flatpak.org/](https://flatpak.org/) | +| Git | Distributed version control system | [https://git-scm.com/](https://git-scm.com/) | +| MongoDB Compass | Database management tool | [https://www.mongodb.com/products/compass](https://www.mongodb.com/products/compass) | +| Node.js | JavaScript runtime for application development | [https://nodejs.org/](https://nodejs.org/) | +| OrbStack | Docker manager | [https://orbstack.com/](https://orbstack.com/) | +| VSCode | Code editor | [https://code.visualstudio.com/](https://code.visualstudio.com/) | +| Yaak | API client | [https://yaak.app/](https://yaak.app/) | +| Yarn | Fast and reliable package manager for Node.js | [https://yarnpkg.com/](https://yarnpkg.com/) | + +## NPM packages + +NPM packages I use globally + +| Name | Description | URL | +| ----------------- | ------------------------------- | -------------------------------------------------------------------------------------------------- | +| @nestjs/cli | NestJS Command Line Interface | [https://docs.nestjs.com/](https://docs.nestjs.com/) | +| fastify-cli | CLI for Fastify framework | [https://www.fastify.io/](https://www.fastify.io/) | +| git-cz | Tool for conventional commits | [https://www.npmjs.com/package/git-cz](https://www.npmjs.com/package/git-cz) | +| n | Node Version Manager | [https://github.com/tj/n/](https://github.com/tj/n/) | +| npm-check-updates | Tool to update npm dependencies | [https://www.npmjs.com/package/npm-check-updates](https://www.npmjs.com/package/npm-check-updates) | diff --git a/docs/linux-apps.md b/docs/linux-apps.md new file mode 100644 index 0000000..81a8c78 --- /dev/null +++ b/docs/linux-apps.md @@ -0,0 +1,10 @@ +# Linux apps + +My Linux apps + +| Name | Description | URL | +| ---------------- | -------------------------------- | -------------------------------------------------------------- | +| Firefox | Web browser | [https://www.firefox.com/](https://www.firefox.com/) | +| Gnome Extensions | Power to Gnome | [https://extensions.gnome.org/](https://extensions.gnome.org/) | +| Terminator | Multi-monitor terminal for Linux | [https://gnome-terminator.org/](https://gnome-terminator.org/) | +| Ulauncher | Spotlight for Linux | [https://ulauncher.io/](https://ulauncher.io/) | diff --git a/docs/macos-apps.md b/docs/macos-apps.md new file mode 100644 index 0000000..34f7c2e --- /dev/null +++ b/docs/macos-apps.md @@ -0,0 +1,75 @@ +# macOS apps + +My macOS apps + +| Name | Description | URL | +| ------------------ | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Amphetamine | Keep your Mac awake | [https://apps.apple.com/us/app/amphetamine/id937984704?mt=12](https://apps.apple.com/us/app/amphetamine/id937984704?mt=12) | +| balenaEtcher | Flash OS images to SD cards & USB drives. | [https://github.com/balena-io/etcher/tree/master](https://github.com/balena-io/etcher/tree/master) | +| Battery Monitor | Monitor your battery | [https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12](https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12) | +| Bear | Markdown notes | [https://bear.app](https://bear.app) | +| Beekeeper Studio | Database management tool | [https://www.beekeeperstudio.io/](https://www.beekeeperstudio.io/) | +| Bitwarden | Password manager | [https://bitwarden.com](https://bitwarden.com) | +| Budget Flow | Financial Manager | [https://budget-flow.app/](https://budget-flow.app/) | +| Claude | Anthropic AI app | [https://claude.ai/download](https://claude.ai/download) | +| Daisy Disk | Find it. Clean it | [https://daisydiskapp.com/](https://daisydiskapp.com/) | +| Espanso | Text expander | [https://espanso.org/](https://espanso.org/) | +| Floorp | Web browser | [https://www.floorp.app/](https://www.floorp.app/) | +| f.lux | Color temperature | [https://justgetflux.com/](https://justgetflux.com/) | +| Funter | Show hidden files on Mac, hide files with one click, find | [https://nektony.com/funter](https://nektony.com/funter) | +| Ghostty | Terminal | [https://ghostty.org/](https://ghostty.org/) | +| Gifski | GIF encoder based on libimagequant (pngquant) | [https://github.com/ImageOptim/gifski/](https://github.com/ImageOptim/gifski/) | +| Google Drive | Syncronize your GDrive | [https://www.google.com/drive/download/](https://www.google.com/drive/download/) | +| Itsycal | Calendar on menu bar | [https://www.mowglii.com/itsycal/](https://www.mowglii.com/itsycal/) | +| Kaspersky VPN | VPN | [https://www.kaspersky.com.br/vpn-secure-connection/download-vpn](https://www.kaspersky.com.br/vpn-secure-connection/download-vpn) | +| Latest | A small utility app for macOS about all the latest updates | [https://github.com/mangerlahn/Latest](https://github.com/mangerlahn/Latest) | +| LocalSend | Share files all devices | [https://localsend.org/](https://localsend.org/) | +| Maccy | Clipboard manager | [https://maccy.app/](https://maccy.app/) | +| Monitor Control | Control your display's brightness & volume on your Mac | [https://github.com/MonitorControl/MonitorControl](https://github.com/MonitorControl/MonitorControl) | +| NextDNS | DNS | [https://nextdns.io](https://nextdns.io) | +| noTunes | Prevent iTunes or Apple Music from launching | [https://github.com/tombonez/noTunes](https://github.com/tombonez/noTunes) | +| Notion | Notes | [https://www.notion.so/](https://www.notion.so/) | +| Notion Calendar | Calendar | [https://www.notion.com/product/calendar](https://www.notion.com/product/calendar) | +| Numi | Advanced calculator | [https://numi.app/](https://numi.app/) | +| Pearcleaner | Remove apps with security | [https://www.nektony.com/products/pear-cleaner](https://www.nektony.com/products/pear-cleaner) | +| Picview | Image viewer | [https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12](https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12) | +| Raycast | Spotlight for macOS | [https://www.raycast.com/](https://www.raycast.com/) | +| Rectangle | Window manager | [https://rectangleapp.com/](https://rectangleapp.com/) | +| Shottr | Screenshot tool | [https://shottr.cc/](https://shottr.cc/) | +| Speediness | Speed test | [https://sindresorhus.com/speediness](https://sindresorhus.com/speediness) | +| Stats | Status bar | [https://github.com/exelban/stats](https://github.com/exelban/stats) | +| The Unarchiver | Archive manager | [https://theunarchiver.com/](https://theunarchiver.com/) | +| Todoist | Todo list | [https://www.todoist.com](https://www.todoist.com) | +| UTM | Running OS for macOS | [https://mac.getutm.app/](https://mac.getutm.app/) | +| Unsplash Wallpaper | Wallpaper for macOS | [https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12](https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12) | +| VLC | Media player | [https://www.videolan.org/vlc/](https://www.videolan.org/vlc/) | + +## Raycast Extensions + +My list of Raycast extensions. Yes, I use Raycast free! 😀. + +- Amphetamine +- Bear Notes +- Clean Keyboard +- Color Picker +- Cursor +- Download Manager +- Emojis Search +- Github +- Google Workspace +- HTTP Status Codes +- Installed Extensions +- Kill Process +- Model Context Protocol Registry +- Oh My Zsh Plugins +- Raindrop.io +- Search MDN +- Search npm packages +- Shell history +- Svgl +- Timers +- Todoist +- UUID Generator +- Video Downloader + +See more extensions at [https://www.raycast.com/store](https://www.raycast.com/store) From 291cf520b4f698ee54d648cdaa6fed31ec678fa3 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:18:08 -0300 Subject: [PATCH 05/63] chore: remove unnecessary files --- .macos | 525 ------------------------------------- Brewfile | 101 ------- iterm2/Dracula.itermcolors | 225 ---------------- zsh/.zshrc | 41 --- 4 files changed, 892 deletions(-) delete mode 100755 .macos delete mode 100644 Brewfile delete mode 100644 iterm2/Dracula.itermcolors delete mode 100644 zsh/.zshrc diff --git a/.macos b/.macos deleted file mode 100755 index 676b73a..0000000 --- a/.macos +++ /dev/null @@ -1,525 +0,0 @@ -#!/usr/bin/env bash - -#~/.macos - -# based on paul irish .macos (https://github.com/paulirish/dotfiles/blob/main/.macos) - -# 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 `.osx` has finished -while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & - -# General UI/UX # -############################################################################################# - -# Set standby delay to 24 hours (default is 1 hour) -sudo pmset -a standbydelay 86400 - -# Disable the sound effects on boot -sudo nvram SystemAudioVolume=" " - -# disbale transparency menu bar -defaults write NSGlobalDomain AppleEnableMenuBarTransparency -bool false - -# Disable the you sure you want to open this application dialog -defaults write com.apple.LaunchServices LSQuarantine -bool false - -# Set sidebar icon size to medium -defaults write NSGlobalDomain NSTableViewDefaultSizeMode -int 2 - -# Increase window resize speed for Cocoa applications -defaults write NSGlobalDomain NSWindowResizeTime -float 0.001 - -# Adjust toolbar title rollover delay -defaults write NSGlobalDomain NSToolbarTitleViewRolloverDelay -float 0 - -# Always show scrollbars -defaults write NSGlobalDomain AppleShowScrollBars -string "Always" - -# 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 - -# 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 delay when taking a screenshot -defaults write com.apple.screencapture show-thumbnail -bool false - -# 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 - -# 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 - -# Disable Resume system-wide -defaults write com.apple.systempreferences NSQuitAlwaysKeepsWindows -bool false - -# Edit: ALLOW automatic termination of inactive apps -defaults write NSGlobalDomain NSDisableAutomaticTermination -bool false - -# Set Help Viewer windows to non-floating mode -defaults write com.apple.helpviewer DevMode -bool true - -# Restart automatically if the computer freezes -sudo systemsetup -setrestartfreeze on - -# go into computer sleep mode after 20min -sudo systemsetup -setcomputersleep 20 - -# 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 date display in menu bar -defaults write com.apple.menuextra.clock "DateFormat" "d MMM EEE H.mm" - -# 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 true -defaults -currentHost write NSGlobalDomain com.apple.trackpad.trackpadCornerClickBehavior -int 1 -defaults -currentHost write NSGlobalDomain com.apple.trackpad.enableSecondaryClick -bool true - -# 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 - -# mute all sounds, incl volume change feedback -defaults write "com.apple.sound.beep.feedback" -int 0 -defaults write com.apple.systemsound 'com.apple.sound.beep.volume' -float 0 -defaults write "com.apple.systemsound" "com.apple.sound.uiaudio.enabled" -int 0 - -# Enable access for assistive devices -echo -n 'a' | sudo tee /private/var/db/.AccessibilityAPIEnabled > /dev/null 2>&1 -sudo chmod 444 /private/var/db/.AccessibilityAPIEnabled - -# 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 false -# Zoom should use nearest neighbor instead of smoothing. -defaults write com.apple.universalaccess 'closeViewSmoothImages' -bool false - -# 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 2> /dev/null - -# Screen # -############################################################################################# - -# Save screenshots to the desktop -defaults write com.apple.screencapture location -string "${HOME}/Pictures/Screenshots" - -# Save screenshots in PNG format (other options: BMP, GIF, JPG, PDF, TIFF) -defaults write com.apple.screencapture type -string "jpg" - -# 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 - -# Finder: show all filename extensions -defaults write NSGlobalDomain AppleShowAllExtensions -bool true - -# Disable the warning when changing a file extension -defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false - -# Finder: show path bar -defaults write com.apple.finder ShowPathbar -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 - -# Show status bar -defaults write com.apple.finder ShowStatusBar -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 - -# 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 - -# 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" - -# Empty Trash securely by default -defaults write com.apple.finder EmptyTrashSecurely -bool true - -# Disable the warning before emptying the Trash -defaults write com.apple.finder WarnOnEmptyTrash -bool false - -# Show the ~/Library folder -chflags nohidden ~/Library - -# Show the /Volumes folder -sudo chflags nohidden /Volumes - -# 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 40 pixels -defaults write com.apple.dock tilesize -int 25 - -# 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 false - -# Enable spring loading for all Dock items -defaults write com.apple.dock enable-spring-load-actions-on-all-items -bool true - -# 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 - -# Show indicator lights for open applications in the Dock -defaults write com.apple.dock show-process-indicators -bool false - -# Don't animate opening applications from the Dock -defaults write com.apple.dock launchanim -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 - -# 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 - -# Don't make Dock icons of hidden applications translucent -defaults write com.apple.dock showhidden -bool false - -# Hide 'recent applications' from dock -defaults write com.apple.dock show-recents -bool false - -# Reset Launchpad, but keep the desktop wallpaper intact -find "${HOME}/Library/Application Support/Dock" -name "*-*.db" -maxdepth 1 -delete - -# 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 → Put to sleep -defaults write com.apple.dock wvous-tl-corner -int 0 -defaults write com.apple.dock wvous-tl-modifier -int 0 -# Top right screen corner → no-op -defaults write com.apple.dock wvous-tr-corner -int 1 -defaults write com.apple.dock wvous-tr-modifier -int 1048576 -# Bottom left screen corner → no-op -defaults write com.apple.dock wvous-bl-corner -int 1 -defaults write com.apple.dock wvous-bl-modifier -int 1048576 -# Bottom right screen corner → no-op -defaults write com.apple.dock wvous-br-corner -int 1 -defaults write com.apple.dock wvous-br-modifier -int 1048576 - -# 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 -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 - -# Show Safari's bookmarks bar by default -defaults write com.apple.Safari ShowFavoritesBar -bool true - -# 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 - -# 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 - -# Remove useless icons from Safari’s bookmarks bar -defaults write com.apple.Safari ProxiesInBookmarksBar "()" - -# Add a context menu item for showing the Web Inspector in web views -defaults write NSGlobalDomain WebKitDeveloperExtras -bool true - -# Do not open previous previewed files (e.g. PDFs) when opening a new one -defaults write com.apple.Preview ApplePersistenceIgnoreState YES - -# 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" - -# Disable CMD+space for spotlight -/usr/libexec/PlistBuddy ~/Library/Preferences/com.apple.symbolichotkeys.plist -c "Set AppleSymbolicHotKeys:64:enabled false" - -# 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 - -# TextEdit and QuickTimePlayer # -############################################################################### - -# 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 - -# Auto-play videos when opened with QuickTime Player -defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen -bool true - -# Mac App Store # -############################################################################### - -# 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 - -# Photos # -############################################################################### - -# Prevent Photos from opening automatically when devices are plugged in -defaults -currentHost write com.apple.ImageCapture disableHotPlug -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 - -# Transmission.app # -############################################################################### - -# Don’t prompt for confirmation before downloading -defaults write org.m0k.transmission DownloadAsk -bool false -defaults write org.m0k.transmission MagnetOpenAsk -bool false - -# Trash original torrent files -defaults write org.m0k.transmission DeleteOriginalTorrent -bool true - -# Hide the donate message -defaults write org.m0k.transmission WarningDonate -bool false -# Hide the legal disclaimer -defaults write org.m0k.transmission WarningLegal -bool false - -# IP block list. -# Source: https://giuliomac.wordpress.com/2014/02/19/best-blocklist-for-transmission/ -defaults write org.m0k.transmission BlocklistNew -bool true -defaults write org.m0k.transmission BlocklistURL -string "http://john.bitsurge.net/public/biglist.p2p.gz" -defaults write org.m0k.transmission BlocklistAutoUpdate -bool true - - -# 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 - -# Sets columns for all tabs -defaults read com.apple.ActivityMonitor "UserColumnsPerTab v5.0" -dict \ - '0' '( Command, CPUUsage, CPUTime, Threads, PID, UID, Ports )' \ - '1' '( Command, ResidentSize, Threads, Ports, PID, UID, )' \ - '2' '( Command, PowerScore, 12HRPower, AppSleep, UID, powerAssertion )' \ - '3' '( Command, bytesWritten, bytesRead, Architecture, PID, UID, CPUUsage )' \ - '4' '( Command, txBytes, rxBytes, PID, UID, txPackets, rxPackets, CPUUsage )' - -# Set sort column -defaults write com.apple.ActivityMonitor UserColumnSortPerTab -dict \ - '0' '{ direction = 0; sort = CPUUsage; }' \ - '1' '{ direction = 0; sort = ResidentSize; }' \ - '2' '{ direction = 0; sort = 12HRPower; }' \ - '3' '{ direction = 0; sort = bytesWritten; }' \ - '4' '{ direction = 0; sort = rxBytes; }' -defaults write com.apple.ActivityMonitor SortDirection -int 0 - -# Show Data in the Disk graph (instead of IO) -defaults write com.apple.ActivityMonitor DiskGraphType -int 1 - -# Show Data in the Network graph (instead of packets) -defaults write com.apple.ActivityMonitor NetworkGraphType -int 1 - -# Kill all application # -############################################################################################# - -/System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u - -for app in "Activity Monitor" "Calendar" "Contacts" "cfprefsd" \ - "Dock" "Finder" "Messages" "Photos" \ - "Safari" "Firefox" "Floorp" "SystemUIServer" \ - "Terminal" "Transmission" "Raycast"; do - killall "${app}" &> /dev/null -done - -echo "Done. Note that some of these changes require a logout/restart to take effect." diff --git a/Brewfile b/Brewfile deleted file mode 100644 index 73c00c7..0000000 --- a/Brewfile +++ /dev/null @@ -1,101 +0,0 @@ -tap "espanso/espanso" -tap "homebrew/bundle" -tap "localsend/localsend" -brew "xz" -brew "zstd" -brew "libtiff" -brew "jpeg-xl" -brew "c-ares" -brew "icu4c@76" -brew "libuv" -brew "openssl@3" -brew "node" -brew "bitwarden-cli" -brew "gettext" -brew "glib" -brew "duti" -brew "sqlite" -brew "gh" -brew "git" -brew "unbound" -brew "gnutls" -brew "netpbm" -brew "harfbuzz" -brew "python@3.13" -brew "graphviz" -brew "httpie" -brew "libssh" -brew "pipx" -brew "pyenv" -brew "python-argcomplete" -brew "qemu" -brew "yarn" -cask "alt-tab" -cask "balenaetcher" -cask "bitwarden" -cask "espanso" -cask "ghostty" -cask "latest" -cask "localsend" -cask "mark-text" -cask "monitorcontrol" -cask "notion-calendar" -cask "notunes" -cask "numi" -cask "pearcleaner" -cask "shottr" -cask "stats" -cask "warp" -cask "yaak" -vscode "aaron-bond.better-comments" -vscode "alefragnani.project-manager" -vscode "bradlc.vscode-tailwindcss" -vscode "christian-kohler.npm-intellisense" -vscode "christian-kohler.path-intellisense" -vscode "chrmarti.regex" -vscode "davidanson.vscode-markdownlint" -vscode "dbaeumer.vscode-eslint" -vscode "denoland.vscode-deno" -vscode "dracula-theme.theme-dracula" -vscode "dsznajder.es7-react-js-snippets" -vscode "editorconfig.editorconfig" -vscode "emmanuelbeziat.vscode-great-icons" -vscode "esbenp.prettier-vscode" -vscode "formulahendry.auto-close-tag" -vscode "formulahendry.auto-rename-tag" -vscode "github.copilot" -vscode "github.copilot-chat" -vscode "github.copilot-workspace" -vscode "github.vscode-github-actions" -vscode "github.vscode-pull-request-github" -vscode "gruntfuggly.todo-tree" -vscode "hashicorp.terraform" -vscode "hbenl.vscode-test-explorer" -vscode "idered.npm" -vscode "maxvanderschee.web-accessibility" -vscode "meganrogge.template-string-converter" -vscode "mikestead.dotenv" -vscode "ms-azuretools.vscode-docker" -vscode "ms-vscode-remote.remote-containers" -vscode "ms-vscode.live-server" -vscode "ms-vscode.test-adapter-converter" -vscode "ms-vsliveshare.vsliveshare" -vscode "mylesmurphy.prettify-ts" -vscode "nicoespeon.abracadabra" -vscode "orta.vscode-jest" -vscode "philnash.ngrok-for-vscode" -vscode "pwabuilder.pwa-studio" -vscode "quicktype.quicktype" -vscode "ritwickdey.liveserver" -vscode "saoudrizwan.claude-dev" -vscode "sburg.vscode-javascript-booster" -vscode "sleistner.vscode-fileutils" -vscode "sonarsource.sonarlint-vscode" -vscode "stevencl.adddoccomments" -vscode "stylelint.vscode-stylelint" -vscode "visualstudioexptteam.intellicode-api-usage-examples" -vscode "visualstudioexptteam.vscodeintellicode" -vscode "wayou.vscode-todo-highlight" -vscode "wmaurer.change-case" -vscode "xabikos.javascriptsnippets" -vscode "yoavbls.pretty-ts-errors" diff --git a/iterm2/Dracula.itermcolors b/iterm2/Dracula.itermcolors deleted file mode 100644 index 619da48..0000000 --- a/iterm2/Dracula.itermcolors +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - 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/zsh/.zshrc b/zsh/.zshrc deleted file mode 100644 index aaa73cc..0000000 --- a/zsh/.zshrc +++ /dev/null @@ -1,41 +0,0 @@ -export ZSH=$HOME/.oh-my-zsh - -ZSH_THEME="dracula" - -plugins=(alias-finder brew copypath copyfile deno dotenv docker docker-compose extract history iterm2 git macos npm python vscode web-search yarn custom-functions) - - -# global -#export JAVA_HOME="$(/usr/libexec/java_home -v 1.$JAVA_VERSION)" # enable this if you are using java -export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" -export PATH=/usr/share/maven/bin:$PATH -export PATH=$HOME/local/bin:$PATH -export PATH=$HOME/mongodb/bin:$PATH -export PATH=$PATH:~/.composer/vendor/bin -export PATH="/opt/homebrew/bin:$PATH" # brew on Apple Silicon -export PATH="/usr/local/bin:$PATH" # brew on Intel -export NPM_PACKAGES="${HOME}/.npm-packages" -export PATH="$NPM_PACKAGES/bin:$PATH" -export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH" -export GH_TOKEN="" # create token at https://github.com/settings/apps select "Personal access tokens" -export NPM_TOKEN="" -export NODE_ENV="development" -export SSH_KEY_PATH="~/.ssh/id_ed" # set your ssh key path -export USER_NAME="" -export USER_EMAIL="" -export NPM_SCOPE=${USER:-your_username} # e.g. tcelestino - -# preferred editor for local and remote sessions -if [[ -n $SSH_CONNECTION ]]; then - export EDITOR='vim' -else - export EDITOR='code' -fi - -# web search custom search engines -ZSH_WEB_SEARCH_ENGINES=( - reddit "https://www.reddit.com/search/?q=" - linkedin "https://www.linkedin.com/search/results/all/?keywords=" -) - -source $ZSH/oh-my-zsh.sh From 0b088d8c113745838ca6363639c0fe4828b0ca42 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:18:20 -0300 Subject: [PATCH 06/63] feat: create macos folder --- macos/.ghostty-config | 6 + macos/.macos | 525 ++++++++++++++++++++++++++++++++++++++++++ macos/.zshrc | 41 ++++ macos/Brewfile | 101 ++++++++ macos/install | 98 ++++++++ 5 files changed, 771 insertions(+) create mode 100644 macos/.ghostty-config create mode 100755 macos/.macos create mode 100644 macos/.zshrc create mode 100644 macos/Brewfile create mode 100755 macos/install diff --git a/macos/.ghostty-config b/macos/.ghostty-config new file mode 100644 index 0000000..68f76c1 --- /dev/null +++ b/macos/.ghostty-config @@ -0,0 +1,6 @@ +font-family = "JetBrains Mono NL" +font-size = 16 +theme = dracula + +#keybind = super+v=paste_from_selection +#keybind = super+shift+v=paste_from_clipboard diff --git a/macos/.macos b/macos/.macos new file mode 100755 index 0000000..676b73a --- /dev/null +++ b/macos/.macos @@ -0,0 +1,525 @@ +#!/usr/bin/env bash + +#~/.macos + +# based on paul irish .macos (https://github.com/paulirish/dotfiles/blob/main/.macos) + +# 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 `.osx` has finished +while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & + +# General UI/UX # +############################################################################################# + +# Set standby delay to 24 hours (default is 1 hour) +sudo pmset -a standbydelay 86400 + +# Disable the sound effects on boot +sudo nvram SystemAudioVolume=" " + +# disbale transparency menu bar +defaults write NSGlobalDomain AppleEnableMenuBarTransparency -bool false + +# Disable the you sure you want to open this application dialog +defaults write com.apple.LaunchServices LSQuarantine -bool false + +# Set sidebar icon size to medium +defaults write NSGlobalDomain NSTableViewDefaultSizeMode -int 2 + +# Increase window resize speed for Cocoa applications +defaults write NSGlobalDomain NSWindowResizeTime -float 0.001 + +# Adjust toolbar title rollover delay +defaults write NSGlobalDomain NSToolbarTitleViewRolloverDelay -float 0 + +# Always show scrollbars +defaults write NSGlobalDomain AppleShowScrollBars -string "Always" + +# 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 + +# 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 delay when taking a screenshot +defaults write com.apple.screencapture show-thumbnail -bool false + +# 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 + +# 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 + +# Disable Resume system-wide +defaults write com.apple.systempreferences NSQuitAlwaysKeepsWindows -bool false + +# Edit: ALLOW automatic termination of inactive apps +defaults write NSGlobalDomain NSDisableAutomaticTermination -bool false + +# Set Help Viewer windows to non-floating mode +defaults write com.apple.helpviewer DevMode -bool true + +# Restart automatically if the computer freezes +sudo systemsetup -setrestartfreeze on + +# go into computer sleep mode after 20min +sudo systemsetup -setcomputersleep 20 + +# 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 date display in menu bar +defaults write com.apple.menuextra.clock "DateFormat" "d MMM EEE H.mm" + +# 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 true +defaults -currentHost write NSGlobalDomain com.apple.trackpad.trackpadCornerClickBehavior -int 1 +defaults -currentHost write NSGlobalDomain com.apple.trackpad.enableSecondaryClick -bool true + +# 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 + +# mute all sounds, incl volume change feedback +defaults write "com.apple.sound.beep.feedback" -int 0 +defaults write com.apple.systemsound 'com.apple.sound.beep.volume' -float 0 +defaults write "com.apple.systemsound" "com.apple.sound.uiaudio.enabled" -int 0 + +# Enable access for assistive devices +echo -n 'a' | sudo tee /private/var/db/.AccessibilityAPIEnabled > /dev/null 2>&1 +sudo chmod 444 /private/var/db/.AccessibilityAPIEnabled + +# 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 false +# Zoom should use nearest neighbor instead of smoothing. +defaults write com.apple.universalaccess 'closeViewSmoothImages' -bool false + +# 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 2> /dev/null + +# Screen # +############################################################################################# + +# Save screenshots to the desktop +defaults write com.apple.screencapture location -string "${HOME}/Pictures/Screenshots" + +# Save screenshots in PNG format (other options: BMP, GIF, JPG, PDF, TIFF) +defaults write com.apple.screencapture type -string "jpg" + +# 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 + +# Finder: show all filename extensions +defaults write NSGlobalDomain AppleShowAllExtensions -bool true + +# Disable the warning when changing a file extension +defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false + +# Finder: show path bar +defaults write com.apple.finder ShowPathbar -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 + +# Show status bar +defaults write com.apple.finder ShowStatusBar -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 + +# 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 + +# 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" + +# Empty Trash securely by default +defaults write com.apple.finder EmptyTrashSecurely -bool true + +# Disable the warning before emptying the Trash +defaults write com.apple.finder WarnOnEmptyTrash -bool false + +# Show the ~/Library folder +chflags nohidden ~/Library + +# Show the /Volumes folder +sudo chflags nohidden /Volumes + +# 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 40 pixels +defaults write com.apple.dock tilesize -int 25 + +# 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 false + +# Enable spring loading for all Dock items +defaults write com.apple.dock enable-spring-load-actions-on-all-items -bool true + +# 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 + +# Show indicator lights for open applications in the Dock +defaults write com.apple.dock show-process-indicators -bool false + +# Don't animate opening applications from the Dock +defaults write com.apple.dock launchanim -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 + +# 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 + +# Don't make Dock icons of hidden applications translucent +defaults write com.apple.dock showhidden -bool false + +# Hide 'recent applications' from dock +defaults write com.apple.dock show-recents -bool false + +# Reset Launchpad, but keep the desktop wallpaper intact +find "${HOME}/Library/Application Support/Dock" -name "*-*.db" -maxdepth 1 -delete + +# 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 → Put to sleep +defaults write com.apple.dock wvous-tl-corner -int 0 +defaults write com.apple.dock wvous-tl-modifier -int 0 +# Top right screen corner → no-op +defaults write com.apple.dock wvous-tr-corner -int 1 +defaults write com.apple.dock wvous-tr-modifier -int 1048576 +# Bottom left screen corner → no-op +defaults write com.apple.dock wvous-bl-corner -int 1 +defaults write com.apple.dock wvous-bl-modifier -int 1048576 +# Bottom right screen corner → no-op +defaults write com.apple.dock wvous-br-corner -int 1 +defaults write com.apple.dock wvous-br-modifier -int 1048576 + +# 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 +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 + +# Show Safari's bookmarks bar by default +defaults write com.apple.Safari ShowFavoritesBar -bool true + +# 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 + +# 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 + +# Remove useless icons from Safari’s bookmarks bar +defaults write com.apple.Safari ProxiesInBookmarksBar "()" + +# Add a context menu item for showing the Web Inspector in web views +defaults write NSGlobalDomain WebKitDeveloperExtras -bool true + +# Do not open previous previewed files (e.g. PDFs) when opening a new one +defaults write com.apple.Preview ApplePersistenceIgnoreState YES + +# 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" + +# Disable CMD+space for spotlight +/usr/libexec/PlistBuddy ~/Library/Preferences/com.apple.symbolichotkeys.plist -c "Set AppleSymbolicHotKeys:64:enabled false" + +# 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 + +# TextEdit and QuickTimePlayer # +############################################################################### + +# 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 + +# Auto-play videos when opened with QuickTime Player +defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen -bool true + +# Mac App Store # +############################################################################### + +# 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 + +# Photos # +############################################################################### + +# Prevent Photos from opening automatically when devices are plugged in +defaults -currentHost write com.apple.ImageCapture disableHotPlug -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 + +# Transmission.app # +############################################################################### + +# Don’t prompt for confirmation before downloading +defaults write org.m0k.transmission DownloadAsk -bool false +defaults write org.m0k.transmission MagnetOpenAsk -bool false + +# Trash original torrent files +defaults write org.m0k.transmission DeleteOriginalTorrent -bool true + +# Hide the donate message +defaults write org.m0k.transmission WarningDonate -bool false +# Hide the legal disclaimer +defaults write org.m0k.transmission WarningLegal -bool false + +# IP block list. +# Source: https://giuliomac.wordpress.com/2014/02/19/best-blocklist-for-transmission/ +defaults write org.m0k.transmission BlocklistNew -bool true +defaults write org.m0k.transmission BlocklistURL -string "http://john.bitsurge.net/public/biglist.p2p.gz" +defaults write org.m0k.transmission BlocklistAutoUpdate -bool true + + +# 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 + +# Sets columns for all tabs +defaults read com.apple.ActivityMonitor "UserColumnsPerTab v5.0" -dict \ + '0' '( Command, CPUUsage, CPUTime, Threads, PID, UID, Ports )' \ + '1' '( Command, ResidentSize, Threads, Ports, PID, UID, )' \ + '2' '( Command, PowerScore, 12HRPower, AppSleep, UID, powerAssertion )' \ + '3' '( Command, bytesWritten, bytesRead, Architecture, PID, UID, CPUUsage )' \ + '4' '( Command, txBytes, rxBytes, PID, UID, txPackets, rxPackets, CPUUsage )' + +# Set sort column +defaults write com.apple.ActivityMonitor UserColumnSortPerTab -dict \ + '0' '{ direction = 0; sort = CPUUsage; }' \ + '1' '{ direction = 0; sort = ResidentSize; }' \ + '2' '{ direction = 0; sort = 12HRPower; }' \ + '3' '{ direction = 0; sort = bytesWritten; }' \ + '4' '{ direction = 0; sort = rxBytes; }' +defaults write com.apple.ActivityMonitor SortDirection -int 0 + +# Show Data in the Disk graph (instead of IO) +defaults write com.apple.ActivityMonitor DiskGraphType -int 1 + +# Show Data in the Network graph (instead of packets) +defaults write com.apple.ActivityMonitor NetworkGraphType -int 1 + +# Kill all application # +############################################################################################# + +/System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u + +for app in "Activity Monitor" "Calendar" "Contacts" "cfprefsd" \ + "Dock" "Finder" "Messages" "Photos" \ + "Safari" "Firefox" "Floorp" "SystemUIServer" \ + "Terminal" "Transmission" "Raycast"; do + killall "${app}" &> /dev/null +done + +echo "Done. Note that some of these changes require a logout/restart to take effect." diff --git a/macos/.zshrc b/macos/.zshrc new file mode 100644 index 0000000..aaa73cc --- /dev/null +++ b/macos/.zshrc @@ -0,0 +1,41 @@ +export ZSH=$HOME/.oh-my-zsh + +ZSH_THEME="dracula" + +plugins=(alias-finder brew copypath copyfile deno dotenv docker docker-compose extract history iterm2 git macos npm python vscode web-search yarn custom-functions) + + +# global +#export JAVA_HOME="$(/usr/libexec/java_home -v 1.$JAVA_VERSION)" # enable this if you are using java +export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" +export PATH=/usr/share/maven/bin:$PATH +export PATH=$HOME/local/bin:$PATH +export PATH=$HOME/mongodb/bin:$PATH +export PATH=$PATH:~/.composer/vendor/bin +export PATH="/opt/homebrew/bin:$PATH" # brew on Apple Silicon +export PATH="/usr/local/bin:$PATH" # brew on Intel +export NPM_PACKAGES="${HOME}/.npm-packages" +export PATH="$NPM_PACKAGES/bin:$PATH" +export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH" +export GH_TOKEN="" # create token at https://github.com/settings/apps select "Personal access tokens" +export NPM_TOKEN="" +export NODE_ENV="development" +export SSH_KEY_PATH="~/.ssh/id_ed" # set your ssh key path +export USER_NAME="" +export USER_EMAIL="" +export NPM_SCOPE=${USER:-your_username} # e.g. tcelestino + +# preferred editor for local and remote sessions +if [[ -n $SSH_CONNECTION ]]; then + export EDITOR='vim' +else + export EDITOR='code' +fi + +# web search custom search engines +ZSH_WEB_SEARCH_ENGINES=( + reddit "https://www.reddit.com/search/?q=" + linkedin "https://www.linkedin.com/search/results/all/?keywords=" +) + +source $ZSH/oh-my-zsh.sh diff --git a/macos/Brewfile b/macos/Brewfile new file mode 100644 index 0000000..73c00c7 --- /dev/null +++ b/macos/Brewfile @@ -0,0 +1,101 @@ +tap "espanso/espanso" +tap "homebrew/bundle" +tap "localsend/localsend" +brew "xz" +brew "zstd" +brew "libtiff" +brew "jpeg-xl" +brew "c-ares" +brew "icu4c@76" +brew "libuv" +brew "openssl@3" +brew "node" +brew "bitwarden-cli" +brew "gettext" +brew "glib" +brew "duti" +brew "sqlite" +brew "gh" +brew "git" +brew "unbound" +brew "gnutls" +brew "netpbm" +brew "harfbuzz" +brew "python@3.13" +brew "graphviz" +brew "httpie" +brew "libssh" +brew "pipx" +brew "pyenv" +brew "python-argcomplete" +brew "qemu" +brew "yarn" +cask "alt-tab" +cask "balenaetcher" +cask "bitwarden" +cask "espanso" +cask "ghostty" +cask "latest" +cask "localsend" +cask "mark-text" +cask "monitorcontrol" +cask "notion-calendar" +cask "notunes" +cask "numi" +cask "pearcleaner" +cask "shottr" +cask "stats" +cask "warp" +cask "yaak" +vscode "aaron-bond.better-comments" +vscode "alefragnani.project-manager" +vscode "bradlc.vscode-tailwindcss" +vscode "christian-kohler.npm-intellisense" +vscode "christian-kohler.path-intellisense" +vscode "chrmarti.regex" +vscode "davidanson.vscode-markdownlint" +vscode "dbaeumer.vscode-eslint" +vscode "denoland.vscode-deno" +vscode "dracula-theme.theme-dracula" +vscode "dsznajder.es7-react-js-snippets" +vscode "editorconfig.editorconfig" +vscode "emmanuelbeziat.vscode-great-icons" +vscode "esbenp.prettier-vscode" +vscode "formulahendry.auto-close-tag" +vscode "formulahendry.auto-rename-tag" +vscode "github.copilot" +vscode "github.copilot-chat" +vscode "github.copilot-workspace" +vscode "github.vscode-github-actions" +vscode "github.vscode-pull-request-github" +vscode "gruntfuggly.todo-tree" +vscode "hashicorp.terraform" +vscode "hbenl.vscode-test-explorer" +vscode "idered.npm" +vscode "maxvanderschee.web-accessibility" +vscode "meganrogge.template-string-converter" +vscode "mikestead.dotenv" +vscode "ms-azuretools.vscode-docker" +vscode "ms-vscode-remote.remote-containers" +vscode "ms-vscode.live-server" +vscode "ms-vscode.test-adapter-converter" +vscode "ms-vsliveshare.vsliveshare" +vscode "mylesmurphy.prettify-ts" +vscode "nicoespeon.abracadabra" +vscode "orta.vscode-jest" +vscode "philnash.ngrok-for-vscode" +vscode "pwabuilder.pwa-studio" +vscode "quicktype.quicktype" +vscode "ritwickdey.liveserver" +vscode "saoudrizwan.claude-dev" +vscode "sburg.vscode-javascript-booster" +vscode "sleistner.vscode-fileutils" +vscode "sonarsource.sonarlint-vscode" +vscode "stevencl.adddoccomments" +vscode "stylelint.vscode-stylelint" +vscode "visualstudioexptteam.intellicode-api-usage-examples" +vscode "visualstudioexptteam.vscodeintellicode" +vscode "wayou.vscode-todo-highlight" +vscode "wmaurer.change-case" +vscode "xabikos.javascriptsnippets" +vscode "yoavbls.pretty-ts-errors" diff --git a/macos/install b/macos/install new file mode 100755 index 0000000..d215320 --- /dev/null +++ b/macos/install @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' + +# Get current location +DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +# Array to store completed steps +declare -a completed_steps=() + +# Register a completed step +# @param $1 Step name +register_completed_step() { + local step="$1" + completed_steps+=("$step") +} + +# Print info messages +# @param $1 Message +log() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +# Print error messages in red and exit +# @param $1 Message +error() { + echo -e "${RED}[ERROR]${NC} $1" + exit 1 +} + +# Create a symbolic link +# @param $1 Source file path +# @param $2 Destination link path +safe_link() { + local src="$1" + local dest="$2" + + if [ -e "$dest" ] || [ -L "$dest" ]; then + log "Found $dest - removing..." + rm -f "$dest" + fi + + if [ ! -e "$src" ]; then + error "Source file $src does not exist!" + fi + + log "Linking $dest to $src" + ln -s "$src" "$dest" +} + +# Copy a directory +# @param $1 Source directory path +# @param $2 Destination directory path +copy_dir() { + local src="$1" + local dest="$2" + + if [ ! -d "$src" ]; then + error "Source directory $src does not exist!" + fi + + if [ -d "$dest" ]; then + log "Found $dest - renaming..." + mv "$dest" "$dest.old" + fi + + log "Copying directory $src to $dest" + if ! cp -R "$src" "$dest"; then + error "Failed to copy directory $src to $dest" + fi +} + +# Copy a file +# @param $1 Source file path +# @param $2 Destination file path +copy_file() { + local src="$1" + local dest="$2" + + if [ ! -f "$src" ]; then + error "Source file $src does not exist!" + fi + + if [ -f "$dest" ]; then + log "Found $dest - renaming..." + mv "$dest" "$dest.old" + fi + + log "Copying file $src to $dest" + if ! cp "$src" "$dest"; then + error "Failed to copy file $src to $dest" + fi +} From 873a68e3641d428176eeeeec9972921c4cca7ffd Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:22:18 -0300 Subject: [PATCH 07/63] refactor: remove apps not used --- macos/Brewfile | 54 +------------------------------------------------- 1 file changed, 1 insertion(+), 53 deletions(-) diff --git a/macos/Brewfile b/macos/Brewfile index 73c00c7..e404d0b 100644 --- a/macos/Brewfile +++ b/macos/Brewfile @@ -45,57 +45,5 @@ cask "numi" cask "pearcleaner" cask "shottr" cask "stats" -cask "warp" cask "yaak" -vscode "aaron-bond.better-comments" -vscode "alefragnani.project-manager" -vscode "bradlc.vscode-tailwindcss" -vscode "christian-kohler.npm-intellisense" -vscode "christian-kohler.path-intellisense" -vscode "chrmarti.regex" -vscode "davidanson.vscode-markdownlint" -vscode "dbaeumer.vscode-eslint" -vscode "denoland.vscode-deno" -vscode "dracula-theme.theme-dracula" -vscode "dsznajder.es7-react-js-snippets" -vscode "editorconfig.editorconfig" -vscode "emmanuelbeziat.vscode-great-icons" -vscode "esbenp.prettier-vscode" -vscode "formulahendry.auto-close-tag" -vscode "formulahendry.auto-rename-tag" -vscode "github.copilot" -vscode "github.copilot-chat" -vscode "github.copilot-workspace" -vscode "github.vscode-github-actions" -vscode "github.vscode-pull-request-github" -vscode "gruntfuggly.todo-tree" -vscode "hashicorp.terraform" -vscode "hbenl.vscode-test-explorer" -vscode "idered.npm" -vscode "maxvanderschee.web-accessibility" -vscode "meganrogge.template-string-converter" -vscode "mikestead.dotenv" -vscode "ms-azuretools.vscode-docker" -vscode "ms-vscode-remote.remote-containers" -vscode "ms-vscode.live-server" -vscode "ms-vscode.test-adapter-converter" -vscode "ms-vsliveshare.vsliveshare" -vscode "mylesmurphy.prettify-ts" -vscode "nicoespeon.abracadabra" -vscode "orta.vscode-jest" -vscode "philnash.ngrok-for-vscode" -vscode "pwabuilder.pwa-studio" -vscode "quicktype.quicktype" -vscode "ritwickdey.liveserver" -vscode "saoudrizwan.claude-dev" -vscode "sburg.vscode-javascript-booster" -vscode "sleistner.vscode-fileutils" -vscode "sonarsource.sonarlint-vscode" -vscode "stevencl.adddoccomments" -vscode "stylelint.vscode-stylelint" -vscode "visualstudioexptteam.intellicode-api-usage-examples" -vscode "visualstudioexptteam.vscodeintellicode" -vscode "wayou.vscode-todo-highlight" -vscode "wmaurer.change-case" -vscode "xabikos.javascriptsnippets" -vscode "yoavbls.pretty-ts-errors" + From 18ec472880a9301f368324803aedccf4fbd9ffed Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:22:30 -0300 Subject: [PATCH 08/63] chore: remove unnecessary file --- install | 224 -------------------------------------------------------- 1 file changed, 224 deletions(-) delete mode 100644 install diff --git a/install b/install deleted file mode 100644 index 0b7a3ac..0000000 --- a/install +++ /dev/null @@ -1,224 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -NC='\033[0m' - -# Get current location -DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -# Helper function to print info messages -log() { - echo -e "${GREEN}[INFO]${NC} $1" -} - -# Helper function to print error messages in red and exit -error() { - echo -e "${RED}[ERROR]${NC} $1" - exit 1 -} - -# Verify if required dependencies (Node.js, Homebrew, Git) are installed -# check_dependencies() { -# command -v node >/dev/null 2>&1 || error "Node.js is required but not installed. https://nodejs.org/" -# command -v git >/dev/null 2>&1 || error "Git is required but not installed. https://git-scm.com/downloads" -# } - -# Create a symbolic link -# @param $1 Source file path -# @param $2 Destination link path -safe_link() { - local src="$1" - local dest="$2" - - if [ -e "$dest" ] || [ -L "$dest" ]; then - log "Found $dest - removing..." - rm -f "$dest" - fi - - if [ ! -e "$src" ]; then - error "Source file $src does not exist!" - fi - - log "Linking $dest to $src" - ln -s "$src" "$dest" -} - -# Copy a directory -# @param $1 Source directory path -# @param $2 Destination directory path -copy_dir() { - local src="$1" - local dest="$2" - - if [ ! -d "$src" ]; then - error "Source directory $src does not exist!" - fi - - if [ -d "$dest" ]; then - log "Found $dest - renaming..." - mv "$dest" "$dest.old" - fi - - log "Copying directory $src to $dest" - if ! cp -R "$src" "$dest"; then - error "Failed to copy directory $src to $dest" - fi -} - -# Copy a file -# @param $1 Source file path -# @param $2 Destination file path -copy_file() { - local src="$1" - local dest="$2" - - if [ ! -f "$src" ]; then - error "Source file $src does not exist!" - fi - - if [ -f "$dest" ]; then - log "Found $dest - renaming..." - mv "$dest" "$dest.old" - fi - - log "Copying file $src to $dest" - if ! cp "$src" "$dest"; then - error "Failed to copy file $src to $dest" - fi -} - -# Install Homebrew if not already installed -install_brew() { - if ! command -v brew >/dev/null 2>&1; then - log "Installing Homebrew..." - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - else - log "Homebrew is already installed." - fi -} - -# Install Oh My Zsh if not already installed -install_oh_my_zsh() { - if [ -d "$HOME/.oh-my-zsh" ]; then - log "oh-my-zsh is already installed." - else - log "Installing oh-my-zsh..." - if ! sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"; then - error "Failed to install oh-my-zsh" - fi - fi -} - -# Install Deno runtime if not already installed -install_deno() { - if [ -d "$HOME/.deno/bin/deno" ]; then - log "Deno is already installed.." - else - log "Installing Deno" - if ! sh -c "$(curl -fsSL https://deno.land/install.sh)"; then - error "Failed to install Deno" - fi - fi -} - -# Configure Git settings by linking gitconfig file -setup_git() { - copy_file "$DIR/git/.gitconfig" "$HOME/.gitconfig" - copy_file "$DIR/git/.gitignore" "$HOME/.gitignore" - copy_file "$DIR/git/.gitattributes" "$HOME/.gitattributes" -} - -# Configure Zsh settings by linking various configuration files -setup_zsh() { - copy_file "$DIR/zsh/.zshrc" "$HOME/.zshrc" - copy_dir "$DIR/zsh/themes" "$HOME/.oh-my-zsh/themes" - copy_file "$DIR/zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" - copy_dir "$DIR/zsh/custom-functions" "$HOME/.oh-my-zsh/plugins/custom-functions" -} - -# Install global NPM packages required for development -install_global_npm_pkg() { - log "Installing global npm packages..." - npm install -g git-cz # https://github.com/streamich/git-cz - npm install -g n # https://github.com/tj/n - npm install -g fastify-cli #https://fastify.dev/ -} - -# Configure NPM settings and install global packages -setup_npm() { - copy_file "$DIR/.npmrc" "$HOME/.npmrc" - - # Install npm globally without sudo. Based on https://github.com/sindresorhus/guides/blob/main/npm-global-without-sudo.md - if [ -d "$HOME/.npm-packages" ]; then - log ".npm-packages folder exists" - else - mkdir -p "$HOME/.npm-packages" - fi - - install_global_npm_pkg -} - -# Configure Homebrew and install packages from Brewfile -setup_brew() { - copy_file "$DIR/Brewfile" "$HOME/Brewfile" - log "Executing brew bundle install..." - if ! brew bundle install; then - error "Brew bundle install failed" - fi -} - -# Install custom fonts based on the operating system -setup_fonts() { - if [[ "$OSTYPE" == "darwin"* ]]; then - # macOS - local font_dir="$HOME/Library/Fonts" - if [ ! -d "$font_dir" ]; then - mkdir -p "$font_dir" - fi - log "Installing fonts for macOS..." - cp "$DIR/extras/fonts/"* "$font_dir/" - elif [[ "$OSTYPE" == "linux-gnu"* ]]; then - # Ubuntu/Linux - local font_dir="$HOME/.local/share/fonts" - if [ ! -d "$font_dir" ]; then - mkdir -p "$font_dir" - fi - log "Installing fonts for Linux..." - cp "$DIR/extras/fonts/"* "$font_dir/" - fc-cache -f -v - else - error "Unsupported operating system" - fi -} - -# Configure macOS system settings if running on macOS -setup_macos() { - if [[ "$OSTYPE" == "darwin"* ]]; then - log "Setting up macOS..." - sh .macos - copy_file "$DIR/extras/duti_picview.config" "$HOME/duti_picview.config" # Configure duti (macOS default application manager) settings - fi -} - -main() { - log "Starting installation from $DIR..." - - install_oh_my_zsh - install_brew - install_deno - - setup_zsh - setup_brew - setup_git - setup_npm - setup_macos - setup_fonts - - log "Settings completed successfully! 🎉" -} - -main "$@" From bcbabacd5f8a24746768599853ffb5ee43fc72a6 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:27:19 -0300 Subject: [PATCH 09/63] chore: rename alias dcp --- zsh/aliases.zsh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh index 0ebb21b..7221a12 100755 --- a/zsh/aliases.zsh +++ b/zsh/aliases.zsh @@ -12,16 +12,16 @@ alias serveo="ssh -R 80:localhost:3000 serveo.net" alias https-server="http-server --ssl --cert ~/.ssl/localhost.crt --key ~/.ssl/localhost.key -a localhost -o" # npm -alias npm-i='npm install' -alias npm-is='npm install --save' -alias npm-id='npm install --save-dev' -alias npm-ig='npm install --global' -alias npm-start='npm start' -alias npm-test='npm test' -alias npm-it='npm install && npm test' -alias npm-lk='npm link' -alias npm-run='npm run' -alias npm-ri='rm -rf node_modules && npm i' +alias npm-i="npm install" +alias npm-is="npm install --save" +alias npm-id="npm install --save-dev" +alias npm-ig="npm install --global" +alias npm-start="npm start" +alias npm-test="npm test" +alias npm-it="npm install && npm test" +alias npm-lk="npm link" +alias npm-run="npm run" +alias npm-ri="rm -rf node_modules && npm i" alias npm-reset='rm -rf node_modules && rm -f package-lock.json && npm install && npx node-notifier-cli -t "Done" -m "npm modules reinstalled" -s Glass -i https://cdn.rawgit.com/npm/logos/31945b5c/npm%20square/n-64.png' # git-cz @@ -53,7 +53,7 @@ alias dcdv="docker-compose down -v" #stop with docker-compose and remove volumes alias dcr="docker-compose restart" #restart with docker-compose alias dcb="docker-compose build" #build with docker-compose alias dcl="docker-compose logs" #logs with docker-compose -alias dcp="docker-compose -f docker-compose.dependencies.yaml up -d" #start dependencies with docker-compose +alias dcdp="docker-compose -f docker-compose.dependencies.yaml up -d" #start dependencies with docker-compose # utils alias fs="stat -c "%s bytes"" From 4cd4118450da7ef230d869008330e1e21c960e25 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:27:32 -0300 Subject: [PATCH 10/63] chore: use $HOME to set pah --- linux/.zshrc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linux/.zshrc b/linux/.zshrc index 80a3be6..08cfab7 100644 --- a/linux/.zshrc +++ b/linux/.zshrc @@ -19,7 +19,7 @@ export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH" export GH_TOKEN="" # create token at https://github.com/settings/apps select "Personal access tokens" # ssh -export SSH_KEY_PATH="~/.ssh/id_ed25519" +export SSH_KEY_PATH=$HOME/.ssh/id_ed25519 # node and npm export NODE_ENV="development" @@ -47,7 +47,7 @@ ZSH_WEB_SEARCH_ENGINES=( . "$HOME/.deno/env" # homebrew -eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" +eval "$($HOME/.linuxbrew/bin/brew shellenv)" source $ZSH/oh-my-zsh.sh From 10f1f3281e788ad63c1641071ae92822ffbb73e4 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:32:03 -0300 Subject: [PATCH 11/63] feat: create fn to file size macos and linux --- zsh/aliases.zsh | 2 +- zsh/custom-functions/custom-functions.plugin.zsh | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh index 7221a12..e2ffe74 100755 --- a/zsh/aliases.zsh +++ b/zsh/aliases.zsh @@ -56,7 +56,7 @@ alias dcl="docker-compose logs" #logs with docker-compose alias dcdp="docker-compose -f docker-compose.dependencies.yaml up -d" #start dependencies with docker-compose # utils -alias fs="stat -c "%s bytes"" +alias fs=filesize alias chmox="chmod -x" alias where=which alias killnode="killall -9 node" diff --git a/zsh/custom-functions/custom-functions.plugin.zsh b/zsh/custom-functions/custom-functions.plugin.zsh index f4d3e2a..7fd2dcc 100755 --- a/zsh/custom-functions/custom-functions.plugin.zsh +++ b/zsh/custom-functions/custom-functions.plugin.zsh @@ -83,3 +83,13 @@ function workFolder() { fi } +# show the size of a file or directory on macos and linux +function filesize() { + if [[ "$OSTYPE" == "darwin"* ]]; then + # macOS + stat -f "%z bytes" "$@" + else + # Linux + stat -c "%s bytes" "$@" + fi +} From 4f1850d4753e9aeb296002ffa8e0556b84bc2b54 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:33:37 -0300 Subject: [PATCH 12/63] chore: rename alias --- zsh/aliases.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh index e2ffe74..50a9966 100755 --- a/zsh/aliases.zsh +++ b/zsh/aliases.zsh @@ -48,12 +48,12 @@ alias docker-ch="export DOCKER_HOST=" # docker-compose alias dcu="docker-compose up" #start with docker-compose +alias dcud="docker-compose -f docker-compose.dependencies.yaml up -d" #start dependencies with docker-compose alias dcd="docker-compose down" #stop with docker-compose alias dcdv="docker-compose down -v" #stop with docker-compose and remove volumes alias dcr="docker-compose restart" #restart with docker-compose alias dcb="docker-compose build" #build with docker-compose alias dcl="docker-compose logs" #logs with docker-compose -alias dcdp="docker-compose -f docker-compose.dependencies.yaml up -d" #start dependencies with docker-compose # utils alias fs=filesize From 2fb155da0769afd8171078c930c0954adf2a48d4 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:37:26 -0300 Subject: [PATCH 13/63] refactor: update zsh plugins --- linux/.zshrc | 2 +- macos/.zshrc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/linux/.zshrc b/linux/.zshrc index 08cfab7..a31d30b 100644 --- a/linux/.zshrc +++ b/linux/.zshrc @@ -2,7 +2,7 @@ export ZSH=$HOME/.oh-my-zsh ZSH_THEME="dracula" -plugins=(brew copypath copyfile custom-functions deno docker docker-compose extract git history npm python vscode web-search yarn) +plugins=(brew copypath copyfile custom-functions deno docker docker-compose extract git history npm python ubuntu vscode web-search yarn) # global export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" diff --git a/macos/.zshrc b/macos/.zshrc index aaa73cc..bfaf38d 100644 --- a/macos/.zshrc +++ b/macos/.zshrc @@ -2,7 +2,7 @@ export ZSH=$HOME/.oh-my-zsh ZSH_THEME="dracula" -plugins=(alias-finder brew copypath copyfile deno dotenv docker docker-compose extract history iterm2 git macos npm python vscode web-search yarn custom-functions) +plugins=(brew copypath copyfile custom-functions deno docker docker-compose extract git history macos npm python vscode web-search yarn) # global From c201ca8da46693943c47ef4bf640c981a8e88ded Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 06:41:11 -0300 Subject: [PATCH 14/63] feat: update path --- macos/.zshrc | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/macos/.zshrc b/macos/.zshrc index bfaf38d..1efd5d2 100644 --- a/macos/.zshrc +++ b/macos/.zshrc @@ -4,26 +4,33 @@ ZSH_THEME="dracula" plugins=(brew copypath copyfile custom-functions deno docker docker-compose extract git history macos npm python vscode web-search yarn) - # global -#export JAVA_HOME="$(/usr/libexec/java_home -v 1.$JAVA_VERSION)" # enable this if you are using java export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" -export PATH=/usr/share/maven/bin:$PATH export PATH=$HOME/local/bin:$PATH -export PATH=$HOME/mongodb/bin:$PATH -export PATH=$PATH:~/.composer/vendor/bin -export PATH="/opt/homebrew/bin:$PATH" # brew on Apple Silicon -export PATH="/usr/local/bin:$PATH" # brew on Intel export NPM_PACKAGES="${HOME}/.npm-packages" export PATH="$NPM_PACKAGES/bin:$PATH" export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH" -export GH_TOKEN="" # create token at https://github.com/settings/apps select "Personal access tokens" -export NPM_TOKEN="" +export PATH="/opt/homebrew/bin:$PATH" # brew on Apple Silicon +export PATH="/usr/local/bin:$PATH" # brew on Intel +#export JAVA_HOME="$(/usr/libexec/java_home -v 1.$JAVA_VERSION)" # enable this if you are using java +#export PATH=/usr/share/maven/bin:$PATH # enable this if you are using maven +#export PATH=$HOME/mongodb/bin:$PATH # enable this if you are using mongodb +#export PATH=$PATH:~/.composer/vendor/bin # enable this if you are using composer + +# github +export GH_TOKEN="" # create token at https://github.com/settings/apps select "Personal access tokens" + +# ssh +export SSH_KEY_PATH=$HOME/.ssh/id_ed25519 + +# node and npm export NODE_ENV="development" -export SSH_KEY_PATH="~/.ssh/id_ed" # set your ssh key path -export USER_NAME="" -export USER_EMAIL="" -export NPM_SCOPE=${USER:-your_username} # e.g. tcelestino +export NPM_TOKEN="" # create token at https://www.npmjs.com/settings/tokens +export NPM_SCOPE="" # e.g. tcelestino + +# local +export USER_NAME="" # e.g. tcelestino +export USER_EMAIL="" # e.g. your.email@provider.com # preferred editor for local and remote sessions if [[ -n $SSH_CONNECTION ]]; then From 3576dfe9233126e9ea0decf0521ee872c0b57242 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 07:00:35 -0300 Subject: [PATCH 15/63] fix: adjust path to linux --- linux/install | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/linux/install b/linux/install index f31eedd..50683ad 100755 --- a/linux/install +++ b/linux/install @@ -181,20 +181,20 @@ install_deno() { # Configure Git settings setup_git() { - copy_file "$DIR/git/.gitconfig" "$HOME/.gitconfig" - copy_file "$DIR/git/.gitignore" "$HOME/.gitignore" - copy_file "$DIR/git/.gitattributes" "$HOME/.gitattributes" - copy_file "$DIR/git/.git-commit-template" "$HOME/.git-commit-template" + copy_file "$DIR/../git/.gitconfig" "$HOME/.gitconfig" + copy_file "$DIR/../git/.gitignore" "$HOME/.gitignore" + copy_file "$DIR/../git/.gitattributes" "$HOME/.gitattributes" + copy_file "$DIR/../git/.git-commit-template" "$HOME/.git-commit-template" register_completed_step "Git" log "Git configured successfully!" } # Configure Zsh settings setup_zsh() { - copy_file "$DIR/linux/.zshrc" "$HOME/.zshrc" - copy_dir "$DIR/zsh/themes" "$HOME/.oh-my-zsh/themes" - copy_file "$DIR/zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" - copy_dir "$DIR/zsh/custom-functions" "$HOME/.oh-my-zsh/plugins/custom-functions" + copy_file "$DIR/.zshrc" "$HOME/.zshrc" + copy_dir "$DIR/../zsh/themes" "$HOME/.oh-my-zsh/themes" + copy_file "$DIR/../zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" + copy_dir "$DIR/../zsh/custom-functions" "$HOME/.oh-my-zsh/plugins/custom-functions" register_completed_step "Zsh" log "Zsh configured successfully!" @@ -202,7 +202,7 @@ setup_zsh() { # Configure Homebrew and install packages from Brewfile setup_brew() { - copy_file "$DIR/linux/Brewfile" "$HOME/Brewfile" + copy_file "$DIR/Brewfile" "$HOME/Brewfile" log "Executing brew bundle install..." if ! brew bundle install; then error "Brew bundle install failed" @@ -213,7 +213,7 @@ setup_brew() { # NPM Settings setup_npm() { - copy_file "$DIR/.npmrc" "$HOME/.npmrc" + copy_file "$DIR/../.npmrc" "$HOME/.npmrc" register_completed_step "NPM" log "NPM configured successfully!" @@ -232,7 +232,7 @@ setup_fonts() { if [ ! -d "$font_dir" ]; then mkdir -p "$font_dir" fi - copy_dir "$DIR/extras/fonts" "$font_dir" + copy_dir "$DIR/../extras/fonts" "$font_dir" log "Installing fonts for Linux..." fc-cache -f -v From 4327c3027af5205f4d0984988e3c9124af0d8857 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 07:27:16 -0300 Subject: [PATCH 16/63] refactor: just configure not install --- linux/install | 172 ++++++++++++++++---------------------------------- 1 file changed, 54 insertions(+), 118 deletions(-) diff --git a/linux/install b/linux/install index 50683ad..5dc8c55 100755 --- a/linux/install +++ b/linux/install @@ -97,86 +97,23 @@ copy_file() { fi } -# Install Homebrew -install_brew() { - if command -v brew >/dev/null 2>&1; then - log "Homebrew is already installed." - register_completed_step "Homebrew (already installed)" - return +# Configure zsh settings +setup_zsh() { + if ! command -v zsh >/dev/null 2>&1; then + error "zsh is not installed. Please install zsh first." fi - log "Installing Homebrew..." - if ! /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"; then - error "Failed to install Homebrew" + if ! [ -d "$HOME/.oh-my-zsh" ]; then + error "oh-my-zsh is not installed. Please install oh-my-zsh first." fi - register_completed_step "Homebrew" - log "Homebrew installed successfully!" -} + copy_file "$DIR/.zshrc" "$HOME/.zshrc" + copy_dir "$DIR/../zsh/themes" "$HOME/.oh-my-zsh/themes" + copy_file "$DIR/../zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" + copy_dir "$DIR/../zsh/custom-functions" "$HOME/.oh-my-zsh/plugins/custom-functions" -# Install zsh -install_zsh() { - if command -v zsh >/dev/null 2>&1; then - log "zsh is already installed." - register_completed_step "zsh (already installed)" - return - fi - log "Updating package list..." - if ! sudo apt update; then - error "Failed to update package list (apt update)" - fi - log "Installing zsh..." - if ! sudo apt install -y zsh; then - error "Failed to install zsh" - fi register_completed_step "zsh" - log "zsh installed successfully!" -} - -# Install oh-my-zsh -install_oh_my_zsh() { - if [ -d "$HOME/.oh-my-zsh" ]; then - log "oh-my-zsh is already installed." - register_completed_step "oh-my-zsh (already installed)" - return - fi - - log "Installing oh-my-zsh..." - - # Download the install script to a temporary file - local temp_script=$(mktemp) - if ! curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -o "$temp_script"; then - error "Failed to download oh-my-zsh install script" - fi - - # Make the script executable and run it - chmod +x "$temp_script" - if ! bash "$temp_script" --unattended; then - rm -f "$temp_script" - error "Failed to install oh-my-zsh" - fi - - # Clean up the temporary script - rm -f "$temp_script" - - register_completed_step "oh-my-zsh" - log "oh-my-zsh installed successfully!" -} - -# Install Deno runtime -install_deno() { - if [ -f "$HOME/.deno/bin/deno" ] || command -v deno >/dev/null 2>&1; then - log "Deno is already installed.." - register_completed_step "Deno (already installed)" - return - else - log "Installing Deno" - if ! sh -c "$(curl -fsSL https://deno.land/install.sh)"; then - error "Failed to install Deno" - fi - register_completed_step "Deno" - log "Deno installed successfully!" - fi + log "zsh settings configured successfully!" } # Configure Git settings @@ -186,29 +123,22 @@ setup_git() { copy_file "$DIR/../git/.gitattributes" "$HOME/.gitattributes" copy_file "$DIR/../git/.git-commit-template" "$HOME/.git-commit-template" register_completed_step "Git" - log "Git configured successfully!" -} - -# Configure Zsh settings -setup_zsh() { - copy_file "$DIR/.zshrc" "$HOME/.zshrc" - copy_dir "$DIR/../zsh/themes" "$HOME/.oh-my-zsh/themes" - copy_file "$DIR/../zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" - copy_dir "$DIR/../zsh/custom-functions" "$HOME/.oh-my-zsh/plugins/custom-functions" - - register_completed_step "Zsh" - log "Zsh configured successfully!" + log "Git settings configured successfully!" } # Configure Homebrew and install packages from Brewfile setup_brew() { + if ! command -v brew >/dev/null 2>&1; then + error "Homebrew is not installed. Please install Homebrew first." + fi + copy_file "$DIR/Brewfile" "$HOME/Brewfile" log "Executing brew bundle install..." if ! brew bundle install; then error "Brew bundle install failed" fi register_completed_step "Homebrew" - log "Homebrew configured successfully!" + log "Homebrew settings configured successfully!" } # NPM Settings @@ -226,6 +156,17 @@ setup_npm() { fi } +setup_global_npm_packages() { + if ! command -v node >/dev/null 2>&1; then + error "node is not installed. Please install node first." + fi + + log "Installing global npm packages..." + npm install -g npm-check-updates n git-cz @nestjs/cli fastify-cli yarn + register_completed_step "npm packages" + log "npm packages installed successfully!" +} + # Set my favorite custom fonts setup_fonts() { local font_dir="$HOME/.local/share/fonts" @@ -233,11 +174,20 @@ setup_fonts() { mkdir -p "$font_dir" fi copy_dir "$DIR/../extras/fonts" "$font_dir" - log "Installing fonts for Linux..." + log "Copying fonts for Linux..." + + if ! fc-cache -f -v; then + log "Installing Fontconfig..." + sudo apt update && sudo apt install fontconfig + log "Fontconfig installed successfully!" + fi + + log "Fontcaching..." fc-cache -f -v + log "Fontcaching done!" register_completed_step "Fonts" - log "Fonts installed successfully!" + log "Fonts configured successfully!" } ask_continue() { @@ -272,49 +222,35 @@ ask_continue() { main() { log "Starting installation from $DIR..." log "This script will configure your environment with the following steps:" - echo "1. Install zsh" - echo "2. Install oh-my-zsh" - echo "3. Install Homebrew" - echo "4. Install Deno" - echo "5. Configure Zsh" - echo "6. Configure Homebrew and install packages" - echo "7. Configure Git" - echo "8. Configure NPM" - echo "9. Configure the fonts" - - if ask_continue "Install zsh" "1"; then - install_zsh - fi - if ask_continue "Install oh-my-zsh" "2"; then - install_oh_my_zsh - fi + echo "1. Configure Zsh" + echo "2. Configure Homebrew and install packages" + echo "3. Configure Git" + echo "4. Configure NPM" + echo "5. Install global npm packages" + echo "6. Configure the fonts" - if ask_continue "Install Homebrew" "3"; then - install_brew - fi - - if ask_continue "Install Deno" "4"; then - install_deno - fi - - if ask_continue "Configure Zsh" "5"; then + if ask_continue "Configure Zsh" "1"; then setup_zsh fi - if ask_continue "Configure Homebrew and install packages" "6"; then + if ask_continue "Configure Homebrew and install packages" "2"; then setup_brew fi - if ask_continue "Configure Git" "7"; then + if ask_continue "Configure Git" "3"; then setup_git fi - if ask_continue "Configure NPM" "8"; then + if ask_continue "Configure NPM" "4"; then setup_npm fi - if ask_continue "Configure the fonts" "9"; then + if ask_continue "Install global npm packages" "5"; then + setup_global_npm_packages + fi + + if ask_continue "Configure the fonts" "6"; then setup_fonts fi From 2ee545fba611ffab856a24470412465a1a440271 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 07:40:29 -0300 Subject: [PATCH 17/63] refactor: set conditional to validate zsh and oh-my-zsh --- linux/install | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/linux/install b/linux/install index 5dc8c55..d6cb020 100755 --- a/linux/install +++ b/linux/install @@ -97,14 +97,14 @@ copy_file() { fi } -# Configure zsh settings +# Configure zsh setup_zsh() { - if ! command -v zsh >/dev/null 2>&1; then - error "zsh is not installed. Please install zsh first." - fi - - if ! [ -d "$HOME/.oh-my-zsh" ]; then - error "oh-my-zsh is not installed. Please install oh-my-zsh first." + if ! command -v zsh >/dev/null 2>&1 && ! [ -d "$HOME/.oh-my-zsh" ]; then + error "zsh and oh-my-zsh are not installed. Please install both before continuing." + elif ! command -v zsh >/dev/null 2>&1; then + error "zsh is not installed. Please install zsh before continuing." + elif ! [ -d "$HOME/.oh-my-zsh" ]; then + error "oh-my-zsh is not installed. Please install oh-my-zsh before continuing." fi copy_file "$DIR/.zshrc" "$HOME/.zshrc" @@ -116,7 +116,7 @@ setup_zsh() { log "zsh settings configured successfully!" } -# Configure Git settings +# Configure Git setup_git() { copy_file "$DIR/../git/.gitconfig" "$HOME/.gitconfig" copy_file "$DIR/../git/.gitignore" "$HOME/.gitignore" @@ -141,7 +141,7 @@ setup_brew() { log "Homebrew settings configured successfully!" } -# NPM Settings +# Configure NPM setup_npm() { copy_file "$DIR/../.npmrc" "$HOME/.npmrc" register_completed_step "NPM" @@ -156,6 +156,7 @@ setup_npm() { fi } +# Install global npm packages setup_global_npm_packages() { if ! command -v node >/dev/null 2>&1; then error "node is not installed. Please install node first." @@ -167,7 +168,7 @@ setup_global_npm_packages() { log "npm packages installed successfully!" } -# Set my favorite custom fonts +# Configure my favorites fonts setup_fonts() { local font_dir="$HOME/.local/share/fonts" if [ ! -d "$font_dir" ]; then From a693a6bd0d29dbb9d565858fae6f940130d5d522 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 07:40:43 -0300 Subject: [PATCH 18/63] docs: add requirements section --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 8408dbc..00125d8 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,16 @@ This is my dotfiles for personal app configs and customizations. I mainly use zs This repo is 100% open for you to explore and customize. +## Requirements + +You need to have the following tools installed: + +- [zsh](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH#install-and-set-up-zsh-as-default) +- [oh-my-zsh](https://ohmyz.sh/#install) +- [Homebrew](https://brew.sh/) +- [Git](https://git-scm.com/) +- [Node.js](https://nodejs.org/en/download) + ## How to use 1. Clone this repository and open folder `dotfiles`: From a2af6c95799cd80f860b66c325d3a819aa7b731f Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 07:51:06 -0300 Subject: [PATCH 19/63] refactor: set conditional --- linux/install | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/linux/install b/linux/install index d6cb020..85679ab 100755 --- a/linux/install +++ b/linux/install @@ -107,6 +107,11 @@ setup_zsh() { error "oh-my-zsh is not installed. Please install oh-my-zsh before continuing." fi + if command -v zsh >/dev/null 2>&1 && [ -d "$HOME/.oh-my-zsh" ]; then + log "zsh already configured. Skipping..." + return + fi + copy_file "$DIR/.zshrc" "$HOME/.zshrc" copy_dir "$DIR/../zsh/themes" "$HOME/.oh-my-zsh/themes" copy_file "$DIR/../zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" @@ -118,6 +123,11 @@ setup_zsh() { # Configure Git setup_git() { + if [ -f "$HOME/.gitconfig" ] && [ -f "$HOME/.gitignore" ] && [ -f "$HOME/.gitattributes" ] && [ -f "$HOME/.git-commit-template" ]; then + log "git already configured. Skipping..." + return + fi + copy_file "$DIR/../git/.gitconfig" "$HOME/.gitconfig" copy_file "$DIR/../git/.gitignore" "$HOME/.gitignore" copy_file "$DIR/../git/.gitattributes" "$HOME/.gitattributes" @@ -132,6 +142,11 @@ setup_brew() { error "Homebrew is not installed. Please install Homebrew first." fi + if command -v brew >/dev/null 2>&1; then + log "Brewfile already exists. Skipping..." + return + fi + copy_file "$DIR/Brewfile" "$HOME/Brewfile" log "Executing brew bundle install..." if ! brew bundle install; then @@ -143,6 +158,11 @@ setup_brew() { # Configure NPM setup_npm() { + if [ -f "$HOME/.npmrc" ] || [ -d "$HOME/.npm-packages" ]; then + log "npm already configured. Skipping..." + return + fi + copy_file "$DIR/../.npmrc" "$HOME/.npmrc" register_completed_step "NPM" log "NPM configured successfully!" @@ -162,6 +182,11 @@ setup_global_npm_packages() { error "node is not installed. Please install node first." fi + if command -v n >/dev/null 2>&1; then + log "global npm packages already installed. Skipping..." + return + fi + log "Installing global npm packages..." npm install -g npm-check-updates n git-cz @nestjs/cli fastify-cli yarn register_completed_step "npm packages" From 7b6a6998c049c10598432926baa77fd0e831d547 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 07:54:45 -0300 Subject: [PATCH 20/63] feat: add default choice --- linux/install | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/linux/install b/linux/install index 85679ab..6ec8e66 100755 --- a/linux/install +++ b/linux/install @@ -221,10 +221,14 @@ ask_continue() { local step="$2" echo -e "\n${GREEN}[INFO]${NC} Step $step: $message" echo -e "${GREEN}[INFO]${NC} Options:" - echo -e " ${GREEN}[y]${NC} - Yes, continue" + echo -e " ${GREEN}[Y]${NC} - Yes, continue (default)" echo -e " ${GREEN}[n]${NC} - No, skip this step" echo -e " ${GREEN}[q]${NC} - Exit installation" - read -p "Your choice (y/n/q): " response + read -p "Your choice (Y/n/q): " response + + if [ -z "$response" ]; then + response="y" + fi case "$response" in [Yy]*) From bf396a0b19d8eea78d6c66a74464ab7021dfe295 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 11:19:34 -0300 Subject: [PATCH 21/63] feat: update brewfile --- linux/Brewfile | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/linux/Brewfile b/linux/Brewfile index 38f4dd7..5e44b88 100644 --- a/linux/Brewfile +++ b/linux/Brewfile @@ -1,27 +1,57 @@ tap "homebrew/bundle" -brew "xz" -brew "zstd" +tap "espanso/espanso" +tap "localsend/localsend" +# Run your GitHub Actions locally +brew "act" +# TIFF library and utilities brew "libtiff" +# Cryptography and SSL/TLS Toolkit +brew "openssl@3" +# Command-line interface for SQLite +brew "sqlite" +# Interpreted, interactive, object-oriented programming language +brew "python@3.13" +# New file format for still image compression brew "jpeg-xl" +# Core application library for C +brew "glib" +# Asynchronous DNS library brew "c-ares" -brew "icu4c@76" +# Multi-platform support library with a focus on asynchronous I/O brew "libuv" -brew "openssl@3" +# Secure and free password manager for all of your devices +brew "bitwarden-cli" +# GNU compiler collection +brew "gcc" +# GNU internationalization (i18n) and localization (l10n) library brew "gettext" -brew "glib" -brew "sqlite" +# GitHub command-line tool brew "gh" +# Distributed revision control system brew "git" +# Validating, recursive, caching DNS resolver brew "unbound" +# GNU Transport Layer Security (TLS) Library brew "gnutls" +# Image manipulation brew "netpbm" +# OpenType text shaping engine brew "harfbuzz" -brew "python@3.13" +# Graph visualization software from AT&T and Bell Labs brew "graphviz" +# User-friendly cURL replacement (command-line HTTP client) brew "httpie" +# C/C++ and Java libraries for Unicode and globalization +brew "icu4c@76" +# C library SSHv1/SSHv2 client and server protocols brew "libssh" +# Execute binaries from Python packages in isolated environments brew "pipx" +# Python version management brew "pyenv" +# Tab completion for Python argparse brew "python-argcomplete" +# Generic machine emulator and virtualizer brew "qemu" +# JavaScript package manager brew "yarn" From cfe792b9b8d99d4d5e5793d7ef93c5da667da7d4 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 11:26:39 -0300 Subject: [PATCH 22/63] docs: update how to use section --- README.md | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 00125d8..381eb91 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ You need to have the following tools installed: - [zsh](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH#install-and-set-up-zsh-as-default) - [oh-my-zsh](https://ohmyz.sh/#install) - [Homebrew](https://brew.sh/) -- [Git](https://git-scm.com/) - [Node.js](https://nodejs.org/en/download) ## How to use @@ -24,7 +23,33 @@ git clone git@github.com:tcelestino/dotfiles.git && cd dotfiles 2. Open `.zshrc` file and change variables `USER_NAME`, `USER_EMAIL` and `NPM_SCOPE`. You might set `GH_TOKEN` and `NPM_TOKEN` too. -3. Choose your OS and run the install script: `macos` or `linux`: +3. Install Homebrew: + +```bash +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +``` + +4. Install zsh: + +```bash +## linux +sudo apt update && sudo apt install zsh +``` + +```bash +## macos +brew install zsh +``` + +5. Install oh-my-zsh: + +```bash +sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" +``` + +6. Install Node.js: [https://nodejs.org/en/download](https://nodejs.org/en/download) + +7. Choose your OS and run the install script: `macos` or `linux`: ```bash # macos From edced33fb01e7a1e80d4640f87799845af2b687a Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 11:34:24 -0300 Subject: [PATCH 23/63] chore: remove unnecessary files --- linux/install | 294 -------------------------------------------------- macos/install | 98 ----------------- 2 files changed, 392 deletions(-) delete mode 100755 linux/install delete mode 100755 macos/install diff --git a/linux/install b/linux/install deleted file mode 100755 index 6ec8e66..0000000 --- a/linux/install +++ /dev/null @@ -1,294 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -NC='\033[0m' - -# Get current location -DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -# Array to store completed steps -declare -a completed_steps=() - -# Register a completed step -# @param $1 Step name -register_completed_step() { - local step="$1" - completed_steps+=("$step") -} - -# Print info messages -# @param $1 Message -log() { - echo -e "${GREEN}[INFO]${NC} $1" -} - -# Print error messages in red and exit -# @param $1 Message -error() { - echo -e "${RED}[ERROR]${NC} $1" - exit 1 -} - -# Create a symbolic link -# @param $1 Source file path -# @param $2 Destination link path -safe_link() { - local src="$1" - local dest="$2" - - if [ -e "$dest" ] || [ -L "$dest" ]; then - log "Found $dest - removing..." - rm -f "$dest" - fi - - if [ ! -e "$src" ]; then - error "Source file $src does not exist!" - fi - - log "Linking $dest to $src" - ln -s "$src" "$dest" -} - -# Copy a directory -# @param $1 Source directory path -# @param $2 Destination directory path -copy_dir() { - local src="$1" - local dest="$2" - - if [ ! -d "$src" ]; then - error "Source directory $src does not exist!" - fi - - if [ -d "$dest" ]; then - log "Found $dest - renaming..." - mv "$dest" "$dest.old" - fi - - log "Copying directory $src to $dest" - if ! cp -R "$src" "$dest"; then - error "Failed to copy directory $src to $dest" - fi -} - -# Copy a file -# @param $1 Source file path -# @param $2 Destination file path -copy_file() { - local src="$1" - local dest="$2" - - if [ ! -f "$src" ]; then - error "Source file $src does not exist!" - fi - - if [ -f "$dest" ]; then - log "Found $dest - renaming..." - mv "$dest" "$dest.old" - fi - - log "Copying file $src to $dest" - if ! cp "$src" "$dest"; then - error "Failed to copy file $src to $dest" - fi -} - -# Configure zsh -setup_zsh() { - if ! command -v zsh >/dev/null 2>&1 && ! [ -d "$HOME/.oh-my-zsh" ]; then - error "zsh and oh-my-zsh are not installed. Please install both before continuing." - elif ! command -v zsh >/dev/null 2>&1; then - error "zsh is not installed. Please install zsh before continuing." - elif ! [ -d "$HOME/.oh-my-zsh" ]; then - error "oh-my-zsh is not installed. Please install oh-my-zsh before continuing." - fi - - if command -v zsh >/dev/null 2>&1 && [ -d "$HOME/.oh-my-zsh" ]; then - log "zsh already configured. Skipping..." - return - fi - - copy_file "$DIR/.zshrc" "$HOME/.zshrc" - copy_dir "$DIR/../zsh/themes" "$HOME/.oh-my-zsh/themes" - copy_file "$DIR/../zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" - copy_dir "$DIR/../zsh/custom-functions" "$HOME/.oh-my-zsh/plugins/custom-functions" - - register_completed_step "zsh" - log "zsh settings configured successfully!" -} - -# Configure Git -setup_git() { - if [ -f "$HOME/.gitconfig" ] && [ -f "$HOME/.gitignore" ] && [ -f "$HOME/.gitattributes" ] && [ -f "$HOME/.git-commit-template" ]; then - log "git already configured. Skipping..." - return - fi - - copy_file "$DIR/../git/.gitconfig" "$HOME/.gitconfig" - copy_file "$DIR/../git/.gitignore" "$HOME/.gitignore" - copy_file "$DIR/../git/.gitattributes" "$HOME/.gitattributes" - copy_file "$DIR/../git/.git-commit-template" "$HOME/.git-commit-template" - register_completed_step "Git" - log "Git settings configured successfully!" -} - -# Configure Homebrew and install packages from Brewfile -setup_brew() { - if ! command -v brew >/dev/null 2>&1; then - error "Homebrew is not installed. Please install Homebrew first." - fi - - if command -v brew >/dev/null 2>&1; then - log "Brewfile already exists. Skipping..." - return - fi - - copy_file "$DIR/Brewfile" "$HOME/Brewfile" - log "Executing brew bundle install..." - if ! brew bundle install; then - error "Brew bundle install failed" - fi - register_completed_step "Homebrew" - log "Homebrew settings configured successfully!" -} - -# Configure NPM -setup_npm() { - if [ -f "$HOME/.npmrc" ] || [ -d "$HOME/.npm-packages" ]; then - log "npm already configured. Skipping..." - return - fi - - copy_file "$DIR/../.npmrc" "$HOME/.npmrc" - register_completed_step "NPM" - log "NPM configured successfully!" - - # Install npm globally without sudo. Based on https://github.com/sindresorhus/guides/blob/main/npm-global-without-sudo.md - if [ -d "$HOME/.npm-packages" ]; then - log ".npm-packages folder exists" - return - else - mkdir -p "$HOME/.npm-packages" - fi -} - -# Install global npm packages -setup_global_npm_packages() { - if ! command -v node >/dev/null 2>&1; then - error "node is not installed. Please install node first." - fi - - if command -v n >/dev/null 2>&1; then - log "global npm packages already installed. Skipping..." - return - fi - - log "Installing global npm packages..." - npm install -g npm-check-updates n git-cz @nestjs/cli fastify-cli yarn - register_completed_step "npm packages" - log "npm packages installed successfully!" -} - -# Configure my favorites fonts -setup_fonts() { - local font_dir="$HOME/.local/share/fonts" - if [ ! -d "$font_dir" ]; then - mkdir -p "$font_dir" - fi - copy_dir "$DIR/../extras/fonts" "$font_dir" - log "Copying fonts for Linux..." - - if ! fc-cache -f -v; then - log "Installing Fontconfig..." - sudo apt update && sudo apt install fontconfig - log "Fontconfig installed successfully!" - fi - - log "Fontcaching..." - fc-cache -f -v - log "Fontcaching done!" - - register_completed_step "Fonts" - log "Fonts configured successfully!" -} - -ask_continue() { - local message="$1" - local step="$2" - echo -e "\n${GREEN}[INFO]${NC} Step $step: $message" - echo -e "${GREEN}[INFO]${NC} Options:" - echo -e " ${GREEN}[Y]${NC} - Yes, continue (default)" - echo -e " ${GREEN}[n]${NC} - No, skip this step" - echo -e " ${GREEN}[q]${NC} - Exit installation" - read -p "Your choice (Y/n/q): " response - - if [ -z "$response" ]; then - response="y" - fi - - case "$response" in - [Yy]*) - return 0 - ;; - [Nn]*) - log "Step $step skipped." - return 1 - ;; - [Qq]*) - log "Installation interrupted by user." - exit 0 - ;; - *) - log "Invalid option. Please try again." - ask_continue "$message" "$step" - ;; - esac -} - -main() { - log "Starting installation from $DIR..." - log "This script will configure your environment with the following steps:" - - echo "1. Configure Zsh" - echo "2. Configure Homebrew and install packages" - echo "3. Configure Git" - echo "4. Configure NPM" - echo "5. Install global npm packages" - echo "6. Configure the fonts" - - if ask_continue "Configure Zsh" "1"; then - setup_zsh - fi - - if ask_continue "Configure Homebrew and install packages" "2"; then - setup_brew - fi - - if ask_continue "Configure Git" "3"; then - setup_git - fi - - if ask_continue "Configure NPM" "4"; then - setup_npm - fi - - if ask_continue "Install global npm packages" "5"; then - setup_global_npm_packages - fi - - if ask_continue "Configure the fonts" "6"; then - setup_fonts - fi - - log "Configurations completed successfully! 🎉" - log "Steps executed:" - for step in "${completed_steps[@]}"; do - echo "- $step" - done -} - -main "$@" diff --git a/macos/install b/macos/install deleted file mode 100755 index d215320..0000000 --- a/macos/install +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -NC='\033[0m' - -# Get current location -DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -# Array to store completed steps -declare -a completed_steps=() - -# Register a completed step -# @param $1 Step name -register_completed_step() { - local step="$1" - completed_steps+=("$step") -} - -# Print info messages -# @param $1 Message -log() { - echo -e "${GREEN}[INFO]${NC} $1" -} - -# Print error messages in red and exit -# @param $1 Message -error() { - echo -e "${RED}[ERROR]${NC} $1" - exit 1 -} - -# Create a symbolic link -# @param $1 Source file path -# @param $2 Destination link path -safe_link() { - local src="$1" - local dest="$2" - - if [ -e "$dest" ] || [ -L "$dest" ]; then - log "Found $dest - removing..." - rm -f "$dest" - fi - - if [ ! -e "$src" ]; then - error "Source file $src does not exist!" - fi - - log "Linking $dest to $src" - ln -s "$src" "$dest" -} - -# Copy a directory -# @param $1 Source directory path -# @param $2 Destination directory path -copy_dir() { - local src="$1" - local dest="$2" - - if [ ! -d "$src" ]; then - error "Source directory $src does not exist!" - fi - - if [ -d "$dest" ]; then - log "Found $dest - renaming..." - mv "$dest" "$dest.old" - fi - - log "Copying directory $src to $dest" - if ! cp -R "$src" "$dest"; then - error "Failed to copy directory $src to $dest" - fi -} - -# Copy a file -# @param $1 Source file path -# @param $2 Destination file path -copy_file() { - local src="$1" - local dest="$2" - - if [ ! -f "$src" ]; then - error "Source file $src does not exist!" - fi - - if [ -f "$dest" ]; then - log "Found $dest - renaming..." - mv "$dest" "$dest.old" - fi - - log "Copying file $src to $dest" - if ! cp "$src" "$dest"; then - error "Failed to copy file $src to $dest" - fi -} From 73384f4c69ee1621690abfe5a1b4258cf740c9b8 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 11:34:35 -0300 Subject: [PATCH 24/63] feat: move to root folder --- install | 306 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 306 insertions(+) create mode 100755 install diff --git a/install b/install new file mode 100755 index 0000000..0e1d2ff --- /dev/null +++ b/install @@ -0,0 +1,306 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' + +# Get current location +DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +# Array to store completed steps +declare -a completed_steps=() + +# Register a completed step +# @param $1 Step name +register_completed_step() { + local step="$1" + completed_steps+=("$step") +} + +# Print info messages +# @param $1 Message +log() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +# Print error messages in red and exit +# @param $1 Message +error() { + echo -e "${RED}[ERROR]${NC} $1" + exit 1 +} + +# Create a symbolic link +# @param $1 Source file path +# @param $2 Destination link path +safe_link() { + local src="$1" + local dest="$2" + + if [ -e "$dest" ] || [ -L "$dest" ]; then + log "Found $dest - removing..." + rm -f "$dest" + fi + + if [ ! -e "$src" ]; then + error "Source file $src does not exist!" + fi + + log "Linking $dest to $src" + ln -s "$src" "$dest" +} + +# Copy a directory +# @param $1 Source directory path +# @param $2 Destination directory path +copy_dir() { + local src="$1" + local dest="$2" + + if [ ! -d "$src" ]; then + error "Source directory $src does not exist!" + fi + + if [ -d "$dest" ]; then + log "Found $dest - renaming..." + mv "$dest" "$dest.old" + fi + + log "Copying directory $src to $dest" + if ! cp -R "$src" "$dest"; then + error "Failed to copy directory $src to $dest" + fi +} + +# Copy a file +# @param $1 Source file path +# @param $2 Destination file path +copy_file() { + local src="$1" + local dest="$2" + + if [ ! -f "$src" ]; then + error "Source file $src does not exist!" + fi + + if [ -f "$dest" ]; then + log "Found $dest - renaming..." + mv "$dest" "$dest.old" + fi + + log "Copying file $src to $dest" + if ! cp "$src" "$dest"; then + error "Failed to copy file $src to $dest" + fi +} + +# Configure zsh +setup_zsh() { + if ! command -v zsh >/dev/null 2>&1 && ! [ -d "$HOME/.oh-my-zsh" ]; then + error "zsh and oh-my-zsh are not installed. Please install both before continuing." + elif ! command -v zsh >/dev/null 2>&1; then + error "zsh is not installed. Please install zsh before continuing." + elif ! [ -d "$HOME/.oh-my-zsh" ]; then + error "oh-my-zsh is not installed. Please install oh-my-zsh before continuing." + fi + + if command -v zsh >/dev/null 2>&1 && [ -d "$HOME/.oh-my-zsh" ]; then + log "zsh already configured. Skipping..." + return + fi + + # copy zshrc based on the OS + if [[ "$OSTYPE" == "darwin"* ]]; then + log "Copying zshrc for macOS..." + copy_file "$DIR/macos/.zshrc" "$HOME/.zshrc" + else + log "Copying zshrc for Linux..." + copy_file "$DIR/linux/.zshrc" "$HOME/.zshrc" + fi + + copy_dir "$DIR/../zsh/themes" "$HOME/.oh-my-zsh/themes" + copy_file "$DIR/../zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" + copy_dir "$DIR/../zsh/custom-functions" "$HOME/.oh-my-zsh/plugins/custom-functions" + + register_completed_step "zsh" + log "zsh settings configured successfully!" +} + +# Configure Git +setup_git() { + if [ -f "$HOME/.gitconfig" ] && [ -f "$HOME/.gitignore" ] && [ -f "$HOME/.gitattributes" ] && [ -f "$HOME/.git-commit-template" ]; then + log "git already configured. Skipping..." + return + fi + + copy_file "$DIR/../git/.gitconfig" "$HOME/.gitconfig" + copy_file "$DIR/../git/.gitignore" "$HOME/.gitignore" + copy_file "$DIR/../git/.gitattributes" "$HOME/.gitattributes" + copy_file "$DIR/../git/.git-commit-template" "$HOME/.git-commit-template" + register_completed_step "Git" + log "Git settings configured successfully!" +} + +# Configure Homebrew and install packages from Brewfile +setup_brew() { + if ! command -v brew >/dev/null 2>&1; then + error "Homebrew is not installed. Please install Homebrew first." + fi + + if command -v brew >/dev/null 2>&1; then + log "Brewfile already exists. Skipping..." + return + fi + + # copy Brewfile based on the OS + if [[ "$OSTYPE" == "darwin"* ]]; then + log "Copying Brewfile for macOS..." + copy_file "$DIR/macos/Brewfile" "$HOME/Brewfile" + else + log "Copying Brewfile for Linux..." + copy_file "$DIR/linux/Brewfile" "$HOME/Brewfile" + fi + + log "Executing brew bundle install..." + if ! brew bundle install; then + error "Brew bundle install failed" + fi + register_completed_step "Homebrew" + log "Homebrew settings configured successfully!" +} + +# Configure NPM +setup_npm() { + if [ -f "$HOME/.npmrc" ] || [ -d "$HOME/.npm-packages" ]; then + log "npm already configured. Skipping..." + return + fi + + copy_file "$DIR/../.npmrc" "$HOME/.npmrc" + register_completed_step "NPM" + log "NPM configured successfully!" + + # Install npm globally without sudo. Based on https://github.com/sindresorhus/guides/blob/main/npm-global-without-sudo.md + if [ -d "$HOME/.npm-packages" ]; then + log ".npm-packages folder exists" + return + else + mkdir -p "$HOME/.npm-packages" + fi +} + +# Install global npm packages +setup_global_npm_packages() { + if ! command -v node >/dev/null 2>&1; then + error "node is not installed. Please install node first." + fi + + if command -v n >/dev/null 2>&1; then + log "global npm packages already installed. Skipping..." + return + fi + + log "Installing global npm packages..." + npm install -g npm-check-updates n git-cz @nestjs/cli fastify-cli yarn + register_completed_step "npm packages" + log "npm packages installed successfully!" +} + +# Configure my favorites fonts +setup_fonts() { + local font_dir="$HOME/.local/share/fonts" + if [ ! -d "$font_dir" ]; then + mkdir -p "$font_dir" + fi + copy_dir "$DIR/../extras/fonts" "$font_dir" + log "Copying fonts for Linux..." + + if ! fc-cache -f -v; then + log "Installing Fontconfig..." + sudo apt update && sudo apt install fontconfig + log "Fontconfig installed successfully!" + fi + + log "Fontcaching..." + fc-cache -f -v + log "Fontcaching done!" + + register_completed_step "Fonts" + log "Fonts configured successfully!" +} + +ask_continue() { + local message="$1" + local step="$2" + echo -e "\n${GREEN}[INFO]${NC} Step $step: $message" + echo -e "${GREEN}[INFO]${NC} Options:" + echo -e " ${GREEN}[Y]${NC} - Yes, continue (default)" + echo -e " ${GREEN}[n]${NC} - No, skip this step" + echo -e " ${GREEN}[q]${NC} - Exit installation" + read -p "Your choice (Y/n/q): " response + + if [ -z "$response" ]; then + response="y" + fi + + case "$response" in + [Yy]*) + return 0 + ;; + [Nn]*) + log "Step $step skipped." + return 1 + ;; + [Qq]*) + log "Installation interrupted by user." + exit 0 + ;; + *) + log "Invalid option. Please try again." + ask_continue "$message" "$step" + ;; + esac +} + +main() { + log "Starting installation from $DIR..." + log "This script will configure your environment with the following steps:" + + echo "1. Configure Zsh" + echo "2. Configure Homebrew and install packages" + echo "3. Configure Git" + echo "4. Configure NPM" + echo "5. Install global npm packages" + echo "6. Configure the fonts" + + if ask_continue "Configure Zsh" "1"; then + setup_zsh + fi + + if ask_continue "Configure Homebrew and install packages" "2"; then + setup_brew + fi + + if ask_continue "Configure Git" "3"; then + setup_git + fi + + if ask_continue "Configure NPM" "4"; then + setup_npm + fi + + if ask_continue "Install global npm packages" "5"; then + setup_global_npm_packages + fi + + if ask_continue "Configure the fonts" "6"; then + setup_fonts + fi + + log "Configurations completed successfully! 🎉" +} + +main "$@" From 5070af72215eb5e4e810a695daf038627590be82 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 11:35:08 -0300 Subject: [PATCH 25/63] docs: update install script --- README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 381eb91..791550a 100644 --- a/README.md +++ b/README.md @@ -49,16 +49,10 @@ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/too 6. Install Node.js: [https://nodejs.org/en/download](https://nodejs.org/en/download) -7. Choose your OS and run the install script: `macos` or `linux`: +7. Run the install script: ```bash -# macos -./macos/install -``` - -```bash -# linux -./linux/install +./install ``` ## Apps and dev tools From a2ccb1e54ebbece39c37422bbb583d836599dd6d Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 11:50:55 -0300 Subject: [PATCH 26/63] feat: setup macos --- install | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/install b/install index 0e1d2ff..1c68403 100755 --- a/install +++ b/install @@ -232,6 +232,19 @@ setup_fonts() { log "Fonts configured successfully!" } +setup_macos() { + log "Settings for macOS" + + if [[ -x "$DIR/macos/install" ]]; then + "$DIR/macos/install" + register_completed_step "macOS" + log "macOS settings configured successfully!" + else + error "$DIR/macos/install not found or not executable." + fi +} + + ask_continue() { local message="$1" local step="$2" @@ -275,6 +288,9 @@ main() { echo "4. Configure NPM" echo "5. Install global npm packages" echo "6. Configure the fonts" + if [[ "$OSTYPE" == "darwin"* ]]; then + echo "7. Settings for macOS" + fi if ask_continue "Configure Zsh" "1"; then setup_zsh @@ -300,6 +316,12 @@ main() { setup_fonts fi + if [[ "$OSTYPE" == "darwin"* ]]; then + if ask_continue "Settings for macOS" "7"; then + setup_macos + fi + fi + log "Configurations completed successfully! 🎉" } From 8a0eef9181f0453e7929ba61548401a5a559824b Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 11:52:42 -0300 Subject: [PATCH 27/63] docs: adjust info to apps --- docs/macos-apps.md | 82 +++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/docs/macos-apps.md b/docs/macos-apps.md index 34f7c2e..4217654 100644 --- a/docs/macos-apps.md +++ b/docs/macos-apps.md @@ -2,47 +2,47 @@ My macOS apps -| Name | Description | URL | -| ------------------ | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Amphetamine | Keep your Mac awake | [https://apps.apple.com/us/app/amphetamine/id937984704?mt=12](https://apps.apple.com/us/app/amphetamine/id937984704?mt=12) | -| balenaEtcher | Flash OS images to SD cards & USB drives. | [https://github.com/balena-io/etcher/tree/master](https://github.com/balena-io/etcher/tree/master) | -| Battery Monitor | Monitor your battery | [https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12](https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12) | -| Bear | Markdown notes | [https://bear.app](https://bear.app) | -| Beekeeper Studio | Database management tool | [https://www.beekeeperstudio.io/](https://www.beekeeperstudio.io/) | -| Bitwarden | Password manager | [https://bitwarden.com](https://bitwarden.com) | -| Budget Flow | Financial Manager | [https://budget-flow.app/](https://budget-flow.app/) | -| Claude | Anthropic AI app | [https://claude.ai/download](https://claude.ai/download) | -| Daisy Disk | Find it. Clean it | [https://daisydiskapp.com/](https://daisydiskapp.com/) | -| Espanso | Text expander | [https://espanso.org/](https://espanso.org/) | -| Floorp | Web browser | [https://www.floorp.app/](https://www.floorp.app/) | -| f.lux | Color temperature | [https://justgetflux.com/](https://justgetflux.com/) | -| Funter | Show hidden files on Mac, hide files with one click, find | [https://nektony.com/funter](https://nektony.com/funter) | -| Ghostty | Terminal | [https://ghostty.org/](https://ghostty.org/) | -| Gifski | GIF encoder based on libimagequant (pngquant) | [https://github.com/ImageOptim/gifski/](https://github.com/ImageOptim/gifski/) | -| Google Drive | Syncronize your GDrive | [https://www.google.com/drive/download/](https://www.google.com/drive/download/) | -| Itsycal | Calendar on menu bar | [https://www.mowglii.com/itsycal/](https://www.mowglii.com/itsycal/) | -| Kaspersky VPN | VPN | [https://www.kaspersky.com.br/vpn-secure-connection/download-vpn](https://www.kaspersky.com.br/vpn-secure-connection/download-vpn) | -| Latest | A small utility app for macOS about all the latest updates | [https://github.com/mangerlahn/Latest](https://github.com/mangerlahn/Latest) | -| LocalSend | Share files all devices | [https://localsend.org/](https://localsend.org/) | -| Maccy | Clipboard manager | [https://maccy.app/](https://maccy.app/) | -| Monitor Control | Control your display's brightness & volume on your Mac | [https://github.com/MonitorControl/MonitorControl](https://github.com/MonitorControl/MonitorControl) | -| NextDNS | DNS | [https://nextdns.io](https://nextdns.io) | -| noTunes | Prevent iTunes or Apple Music from launching | [https://github.com/tombonez/noTunes](https://github.com/tombonez/noTunes) | -| Notion | Notes | [https://www.notion.so/](https://www.notion.so/) | -| Notion Calendar | Calendar | [https://www.notion.com/product/calendar](https://www.notion.com/product/calendar) | -| Numi | Advanced calculator | [https://numi.app/](https://numi.app/) | -| Pearcleaner | Remove apps with security | [https://www.nektony.com/products/pear-cleaner](https://www.nektony.com/products/pear-cleaner) | -| Picview | Image viewer | [https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12](https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12) | -| Raycast | Spotlight for macOS | [https://www.raycast.com/](https://www.raycast.com/) | -| Rectangle | Window manager | [https://rectangleapp.com/](https://rectangleapp.com/) | -| Shottr | Screenshot tool | [https://shottr.cc/](https://shottr.cc/) | -| Speediness | Speed test | [https://sindresorhus.com/speediness](https://sindresorhus.com/speediness) | -| Stats | Status bar | [https://github.com/exelban/stats](https://github.com/exelban/stats) | -| The Unarchiver | Archive manager | [https://theunarchiver.com/](https://theunarchiver.com/) | -| Todoist | Todo list | [https://www.todoist.com](https://www.todoist.com) | -| UTM | Running OS for macOS | [https://mac.getutm.app/](https://mac.getutm.app/) | -| Unsplash Wallpaper | Wallpaper for macOS | [https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12](https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12) | -| VLC | Media player | [https://www.videolan.org/vlc/](https://www.videolan.org/vlc/) | +| Name | Description | URL | +| ------------------ | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Amphetamine | Keep your Mac awake | [https://apps.apple.com/us/app/amphetamine/id937984704?mt=12](https://apps.apple.com/us/app/amphetamine/id937984704?mt=12) | +| balenaEtcher | Flash OS images to SD cards & USB drives. | [https://github.com/balena-io/etcher/tree/master](https://github.com/balena-io/etcher/tree/master) | +| Battery Monitor | Monitor your battery | [https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12](https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12) | +| Bear | Markdown notes | [https://bear.app](https://bear.app) | +| Beekeeper Studio | Database management tool | [https://www.beekeeperstudio.io/](https://www.beekeeperstudio.io/) | +| Bitwarden | Password manager | [https://bitwarden.com](https://bitwarden.com) | +| Budget Flow | Financial Manager | [https://budget-flow.app/](https://budget-flow.app/) | +| Claude | Anthropic AI app | [https://claude.ai/download](https://claude.ai/download) | +| Daisy Disk | Find it. Clean it | [https://daisydiskapp.com/](https://daisydiskapp.com/) | +| Espanso | Text expander | [https://espanso.org/](https://espanso.org/) | +| Floorp | Web browser | [https://www.floorp.app/](https://www.floorp.app/) | +| f.lux | Color temperature | [https://justgetflux.com/](https://justgetflux.com/) | +| Funter | Show hidden files on Mac, hide files with one click, find any hidden file or folder in the Finder | [https://nektony.com/funter](https://nektony.com/funter) | +| Ghostty | Terminal | [https://ghostty.org/](https://ghostty.org/) | +| Gifski | GIF encoder based on libimagequant (pngquant) | [https://github.com/ImageOptim/gifski/](https://github.com/ImageOptim/gifski/) | +| Google Drive | Synchronize your GDrive | [https://www.google.com/drive/download/](https://www.google.com/drive/download/) | +| Itsycal | Calendar on menu bar | [https://www.mowglii.com/itsycal/](https://www.mowglii.com/itsycal/) | +| Kaspersky VPN | VPN | [https://www.kaspersky.com.br/vpn-secure-connection/download-vpn](https://www.kaspersky.com.br/vpn-secure-connection/download-vpn) | +| Latest | A small utility app for macOS about all the latest updates | [https://github.com/mangerlahn/Latest](https://github.com/mangerlahn/Latest) | +| LocalSend | Share files all devices | [https://localsend.org/](https://localsend.org/) | +| Maccy | Clipboard manager | [https://maccy.app/](https://maccy.app/) | +| Monitor Control | Control your display's brightness & volume on your Mac | [https://github.com/MonitorControl/MonitorControl](https://github.com/MonitorControl/MonitorControl) | +| NextDNS | DNS | [https://nextdns.io](https://nextdns.io) | +| noTunes | Prevent iTunes or Apple Music from launching | [https://github.com/tombonez/noTunes](https://github.com/tombonez/noTunes) | +| Notion | Notes | [https://www.notion.so/](https://www.notion.so/) | +| Notion Calendar | Calendar | [https://www.notion.com/product/calendar](https://www.notion.com/product/calendar) | +| Numi | Advanced calculator | [https://numi.app/](https://numi.app/) | +| Pearcleaner | Remove apps with security | [https://www.nektony.com/products/pear-cleaner](https://www.nektony.com/products/pear-cleaner) | +| Picview | Image viewer | [https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12](https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12) | +| Raycast | Spotlight for macOS | [https://www.raycast.com/](https://www.raycast.com/) | +| Rectangle | Window manager | [https://rectangleapp.com/](https://rectangleapp.com/) | +| Shottr | Screenshot tool | [https://shottr.cc/](https://shottr.cc/) | +| Speediness | Speed test | [https://sindresorhus.com/speediness](https://sindresorhus.com/speediness) | +| Stats | Status bar | [https://github.com/exelban/stats](https://github.com/exelban/stats) | +| The Unarchiver | Archive manager | [https://theunarchiver.com/](https://theunarchiver.com/) | +| Todoist | Todo list | [https://www.todoist.com](https://www.todoist.com) | +| UTM | Running OS for macOS | [https://mac.getutm.app/](https://mac.getutm.app/) | +| Unsplash Wallpaper | Wallpaper for macOS | [https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12](https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12) | +| VLC | Media player | [https://www.videolan.org/vlc/](https://www.videolan.org/vlc/) | ## Raycast Extensions From 40b4ce8beb9e831a91ef3ba442c28ed9173428b8 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 12:02:57 -0300 Subject: [PATCH 28/63] feat: update brewfiles --- install | 6 +- linux/{Brewfile => .Brewfile} | 0 macos/.Brewfile | 108 ++++++++++++++++++++++++++++++++++ macos/Brewfile | 49 --------------- 4 files changed, 111 insertions(+), 52 deletions(-) rename linux/{Brewfile => .Brewfile} (100%) create mode 100644 macos/.Brewfile delete mode 100644 macos/Brewfile diff --git a/install b/install index 1c68403..2e476a0 100755 --- a/install +++ b/install @@ -158,14 +158,14 @@ setup_brew() { # copy Brewfile based on the OS if [[ "$OSTYPE" == "darwin"* ]]; then log "Copying Brewfile for macOS..." - copy_file "$DIR/macos/Brewfile" "$HOME/Brewfile" + copy_file "$DIR/macos/.Brewfile" "$HOME/.Brewfile" else log "Copying Brewfile for Linux..." - copy_file "$DIR/linux/Brewfile" "$HOME/Brewfile" + copy_file "$DIR/linux/.Brewfile" "$HOME/.Brewfile" fi log "Executing brew bundle install..." - if ! brew bundle install; then + if ! brew bundle install --file="$HOME/.Brewfile"; then error "Brew bundle install failed" fi register_completed_step "Homebrew" diff --git a/linux/Brewfile b/linux/.Brewfile similarity index 100% rename from linux/Brewfile rename to linux/.Brewfile diff --git a/macos/.Brewfile b/macos/.Brewfile new file mode 100644 index 0000000..d623de2 --- /dev/null +++ b/macos/.Brewfile @@ -0,0 +1,108 @@ +tap "espanso/espanso" +tap "homebrew/bundle" +tap "homebrew/services" +tap "localsend/localsend" +# Run your GitHub Actions locally +brew "act" +# General-purpose data compression with high compression ratio +brew "xz" +# Zstandard is a real-time compression algorithm +brew "zstd" +# TIFF library and utilities +brew "libtiff" +# New file format for still image compression +brew "jpeg-xl" +# Asynchronous DNS library +brew "c-ares" +# Multi-platform support library with a focus on asynchronous I/O +brew "libuv" +# Cryptography and SSL/TLS Toolkit +brew "openssl@3" +# Platform built on V8 to build network applications +brew "node" +# Secure and free password manager for all of your devices +brew "bitwarden-cli" +# GNU internationalization (i18n) and localization (l10n) library +brew "gettext" +# Core application library for C +brew "glib" +# Select default apps for documents and URL schemes on macOS +brew "duti" +# GitHub command-line tool +brew "gh" +# Distributed revision control system +brew "git" +# Validating, recursive, caching DNS resolver +brew "unbound" +# GNU Transport Layer Security (TLS) Library +brew "gnutls" +# Image manipulation +brew "netpbm" +# OpenType text shaping engine +brew "harfbuzz" +# Graph visualization software from AT&T and Bell Labs +brew "graphviz" +# Command-line interface for SQLite +brew "sqlite" +# Interpreted, interactive, object-oriented programming language +brew "python@3.13" +# User-friendly cURL replacement (command-line HTTP client) +brew "httpie" +# C/C++ and Java libraries for Unicode and globalization +brew "icu4c@76" +# C library SSHv1/SSHv2 client and server protocols +brew "libssh" +# Execute binaries from Python packages in isolated environments +brew "pipx" +# Python version management +brew "pyenv" +# Tab completion for Python argparse +brew "python-argcomplete" +# Generic machine emulator and virtualizer +brew "qemu" +# Persistent key-value database, with built-in net interface +brew "redis" +# JavaScript package manager +brew "yarn" +# Enable Windows-like alt-tab +cask "alt-tab" +# Tool to flash OS images to SD cards & USB drives +cask "balenaetcher" +# Cross platform SQL editor and database management app +cask "beekeeper-studio" +# Desktop password and login vault +cask "bitwarden" +# Cross-platform Text Expander written in Rust +cask "espanso" +# Terminal emulator that uses platform-native UI and GPU acceleration +cask "ghostty" +# Testing client for REST, GraphQL, and HTTP APIs +cask "httpie-desktop" +# Utility that shows the latest app updates +cask "latest" +# Open-source cross-platform alternative to AirDrop +cask "localsend" +# Markdown editor +cask "mark-text" +# Tool to control external monitor brightness & volume +cask "monitorcontrol" +# Calendar for professionals and teams +cask "notion-calendar" +# Simple application that will prevent iTunes or Apple Music from launching +cask "notunes" +# Calculator and converter application +cask "numi" +# Replacement for Docker Desktop +cask "orbstack" +# WebKit based web browser +cask "orion" +# Utility to uninstall apps and remove leftover files from old/uninstalled apps +cask "pearcleaner" +# Screenshot measurement and annotation tool +cask "shottr" +# System monitor for the menu bar +cask "stats" +# Rust-based terminal +cask "warp" +# REST, GraphQL and gRPC client +cask "yaak" diff --git a/macos/Brewfile b/macos/Brewfile deleted file mode 100644 index e404d0b..0000000 --- a/macos/Brewfile +++ /dev/null @@ -1,49 +0,0 @@ -tap "espanso/espanso" -tap "homebrew/bundle" -tap "localsend/localsend" -brew "xz" -brew "zstd" -brew "libtiff" -brew "jpeg-xl" -brew "c-ares" -brew "icu4c@76" -brew "libuv" -brew "openssl@3" -brew "node" -brew "bitwarden-cli" -brew "gettext" -brew "glib" -brew "duti" -brew "sqlite" -brew "gh" -brew "git" -brew "unbound" -brew "gnutls" -brew "netpbm" -brew "harfbuzz" -brew "python@3.13" -brew "graphviz" -brew "httpie" -brew "libssh" -brew "pipx" -brew "pyenv" -brew "python-argcomplete" -brew "qemu" -brew "yarn" -cask "alt-tab" -cask "balenaetcher" -cask "bitwarden" -cask "espanso" -cask "ghostty" -cask "latest" -cask "localsend" -cask "mark-text" -cask "monitorcontrol" -cask "notion-calendar" -cask "notunes" -cask "numi" -cask "pearcleaner" -cask "shottr" -cask "stats" -cask "yaak" - From 5a22025fbe3a7e6082e371d2a1a5ce0ae2f670c7 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 12:29:48 -0300 Subject: [PATCH 29/63] feat: setup ssh and adjust font to macos and linux --- install | 105 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 77 insertions(+), 28 deletions(-) diff --git a/install b/install index 2e476a0..a3fa286 100755 --- a/install +++ b/install @@ -209,50 +209,93 @@ setup_global_npm_packages() { log "npm packages installed successfully!" } -# Configure my favorites fonts -setup_fonts() { - local font_dir="$HOME/.local/share/fonts" - if [ ! -d "$font_dir" ]; then - mkdir -p "$font_dir" +# Configure SSH +setup_ssh() { + if [ -f "$HOME/.ssh/id_ed25519" ]; then + log "SSH key already exists. Skipping..." + return fi - copy_dir "$DIR/../extras/fonts" "$font_dir" - log "Copying fonts for Linux..." - if ! fc-cache -f -v; then - log "Installing Fontconfig..." - sudo apt update && sudo apt install fontconfig - log "Fontconfig installed successfully!" + log "Generating SSH key..." + ssh-keygen -t ed25519 -C $USER_EMAIL + log "SSH key generated successfully!" + + log "Adding SSH agent in background..." + eval "$(ssh-agent -s)" + log "SSH agent added to the background successfully!" + + log "Adding SSH key to the ssh-agent..." + if [[ "$OSTYPE" == "darwin"* ]]; then + ssh-add --apple-use-keychain ~/.ssh/id_ed25519 + else + ssh-add ~/.ssh/id_ed25519 fi + log "SSH key added to the ssh-agent successfully!" - log "Fontcaching..." - fc-cache -f -v - log "Fontcaching done!" + log "Adding SSH config..." + copy_file "$DIR/../ssh/config" "$HOME/.ssh/config" + log "SSH config added successfully!" - register_completed_step "Fonts" - log "Fonts configured successfully!" + register_completed_step "ssh" + log "SSH configured successfully!" } +# Configure my favorites fonts +setup_fonts() { + if [[ "$OSTYPE" == "darwin"* ]]; then + # macOS + local font_dir="$HOME/Library/Fonts" + if [ ! -d "$font_dir" ]; then + mkdir -p "$font_dir" + fi + log "Installing fonts for macOS..." + copy_dir "$DIR/extras/fonts/"* "$font_dir/" + log "Fonts installed successfully!" + elif [[ "$OSTYPE" == "linux-gnu"* ]]; then + # Ubuntu/Linux + local font_dir="$HOME/.local/share/fonts" + if [ ! -d "$font_dir" ]; then + mkdir -p "$font_dir" + fi + log "Installing fonts for Linux..." + copy_dir "$DIR/extras/fonts/"* "$font_dir/" + + if ! fc-cache -f -v; then + log "Installing Fontconfig..." + sudo apt update && sudo apt install fontconfig + log "Fontconfig installed successfully!" + fi + + log "Fontcaching..." + fc-cache -f -v + log "Fontcaching done!" + + register_completed_step "Fonts" + log "Fonts configured successfully!" + else + error "Unsupported operating system" + fi +} + +# Configure macOS setup_macos() { log "Settings for macOS" - if [[ -x "$DIR/macos/install" ]]; then - "$DIR/macos/install" + if [[ -x "$DIR/macos/.macos" ]]; then + sh "$DIR/macos/.macos" register_completed_step "macOS" log "macOS settings configured successfully!" + + copy_file "$DIR/extras/duti_picview.config" "$HOME/duti_picview.config" # Configure duti (macOS default application manager) settings else - error "$DIR/macos/install not found or not executable." + error "$DIR/macos/.macos not found or not executable." fi } - ask_continue() { local message="$1" local step="$2" echo -e "\n${GREEN}[INFO]${NC} Step $step: $message" - echo -e "${GREEN}[INFO]${NC} Options:" - echo -e " ${GREEN}[Y]${NC} - Yes, continue (default)" - echo -e " ${GREEN}[n]${NC} - No, skip this step" - echo -e " ${GREEN}[q]${NC} - Exit installation" read -p "Your choice (Y/n/q): " response if [ -z "$response" ]; then @@ -287,9 +330,11 @@ main() { echo "3. Configure Git" echo "4. Configure NPM" echo "5. Install global npm packages" - echo "6. Configure the fonts" + echo "6. Configure SSH" + echo "7. Set custom fonts" + if [[ "$OSTYPE" == "darwin"* ]]; then - echo "7. Settings for macOS" + echo "8. Settings for macOS" fi if ask_continue "Configure Zsh" "1"; then @@ -312,12 +357,16 @@ main() { setup_global_npm_packages fi - if ask_continue "Configure the fonts" "6"; then + if ask_continue "Configure SSH" "6"; then + setup_ssh + fi + + if ask_continue "Set custom fonts" "7"; then setup_fonts fi if [[ "$OSTYPE" == "darwin"* ]]; then - if ask_continue "Settings for macOS" "7"; then + if ask_continue "Settings for macOS" "8"; then setup_macos fi fi From 5fb60346dfec01a5c463fd24a0ca7aef521fab71 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 12:30:10 -0300 Subject: [PATCH 30/63] refactor: change ssh key filename --- ssh/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ssh/config b/ssh/config index 321e772..bf1c306 100644 --- a/ssh/config +++ b/ssh/config @@ -1,4 +1,4 @@ Host * UseKeychain yes AddKeysToAgent yes - IdentityFile ~/.ssh/id_rsa + IdentityFile ~/.ssh/id_ed25519 From 9ae2be45799fe78f426c71afbae318d89d422186 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 13:38:45 -0300 Subject: [PATCH 31/63] feat: raycast quicklinks --- extras/raycast-quicklinks.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 extras/raycast-quicklinks.json diff --git a/extras/raycast-quicklinks.json b/extras/raycast-quicklinks.json new file mode 100644 index 0000000..62c3a14 --- /dev/null +++ b/extras/raycast-quicklinks.json @@ -0,0 +1 @@ +[{"link":"https:\/\/duckduckgo.com\/?q={Query}","name":"Search DuckDuckGo"},{"link":"https:\/\/www.linguee.com\/english-portuguese\/search?source=auto&query={Query}","name":"Linguee"},{"link":"~\/Downloads","name":"Open Download folder"},{"link":"https:\/\/docs.google.com\/spreadsheets\/d\/1b-UMuk4iDuh5-i3SFePl4scS7PvsGuuk2kJWYpIHk1g\/edit?gid=1509416510#gid=1509416510","name":"Minhas Finanças"},{"link":"https:\/\/web.whatsapp.com","name":"WhatsApp Web"},{"link":"https:\/\/www.youtube.com\/results?search_query={Query}","name":"Youtube"},{"link":"https:\/\/drive.google.com","name":"Google Drive"},{"link":"https:\/\/www.google.com\/maps\/place\/{Query}","name":"Google Maps"},{"link":"https:\/\/www.amazon.com.br\/s?k={Query}","name":"Amazon BR"},{"link":"~\/Projects\/bloco-de-notas","openWith":"Visual Studio Code","name":"Bloco de Notas"},{"link":"https:\/\/docs.google.com\/spreadsheets\/d\/1Aq9OtlpHIa7PSFL12euYMg5sRF2yKQAI7HI-dWV82kY\/edit?gid=1013744764#gid=1013744764","name":"Plano de Estudos PM3"},{"link":"https:\/\/tcelestino.github.io\/bloco-de-notas\/","name":"Meu blog"},{"link":"https:\/\/duck.ai\/","name":"Duck AI"},{"link":"https:\/\/drive.google.com\/drive\/starred","name":"Google Drive Starred"},{"link":"https:\/\/docs.google.com\/spreadsheets\/d\/1Qxt-6wVhKy9JWsu20f4y5ashEzJk43n9VkSUntsq7x4\/edit?gid=0#gid=0","name":"Minha Saúde"},{"link":"~\/Pictures\/Screenshots","name":"Screenshots"},{"link":"https:\/\/docs.google.com\/spreadsheets\/d\/14hazr9W-4kzYIQBd5f2-BxxrhrBzIa3Chzi617qeKrc\/edit?gid=0#gid=0","name":"Meus Investimentos"},{"link":"https:\/\/techcrunch.com\/?s={query}","name":"TechCrunch Search"},{"link":"https:\/\/candidatei.lovable.app\/dashboard","name":"Candidatei"},{"link":"https:\/\/github.com\/tcelestino?tab=repositories&type=source","name":"My repos"},{"link":"https:\/\/docs.google.com\/spreadsheets\/d\/1Gn2HWqrm-cxBpokXsN2z9rUBwFzHONcIk_0zDFBGV-Y\/edit?gid=0#gid=0","name":"Minhas Candidaturas"},{"link":"https:\/\/drive.google.com\/drive\/recent","name":"Google Drive Recents"},{"link":"https:\/\/github.com\/resultado-da-mega","name":"Projeto: Resultado Mega Sena"}] \ No newline at end of file From ecf33a5012267d86b86337a963def20ac78b519e Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 13:42:11 -0300 Subject: [PATCH 32/63] docs: add raycast quicklinks section --- docs/macos-apps.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/macos-apps.md b/docs/macos-apps.md index 4217654..49f443b 100644 --- a/docs/macos-apps.md +++ b/docs/macos-apps.md @@ -73,3 +73,7 @@ My list of Raycast extensions. Yes, I use Raycast free! 😀. - Video Downloader See more extensions at [https://www.raycast.com/store](https://www.raycast.com/store) + +### Raycast Quicklinks + +If you would like to use my Raycast quicklinks, please import the file [raycast-quicklinks.json](../extras/raycast-quicklinks.json) into Raycast. From eca47f5b67727016c216bb8a304a2de09769c7ef Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 13:53:38 -0300 Subject: [PATCH 33/63] chore: remove warp --- macos/.Brewfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/macos/.Brewfile b/macos/.Brewfile index d623de2..d1f9126 100644 --- a/macos/.Brewfile +++ b/macos/.Brewfile @@ -102,7 +102,5 @@ cask "pearcleaner" cask "shottr" # System monitor for the menu bar cask "stats" -# Rust-based terminal -cask "warp" # REST, GraphQL and gRPC client cask "yaak" From 3deba45f8a6e21cedeb9ed56ffbaa5a4b79149ab Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 13:57:14 -0300 Subject: [PATCH 34/63] docs: add git url --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 791550a..28ee981 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ This repo is 100% open for you to explore and customize. You need to have the following tools installed: +- [git](https://git-scm.com/downloads) - [zsh](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH#install-and-set-up-zsh-as-default) - [oh-my-zsh](https://ohmyz.sh/#install) - [Homebrew](https://brew.sh/) From d01e11c821e4a71b2107e75bcd6ea6bd21ab1122 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 14:24:37 -0300 Subject: [PATCH 35/63] fix: adjust path --- install | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/install b/install index a3fa286..a871009 100755 --- a/install +++ b/install @@ -107,7 +107,7 @@ setup_zsh() { error "oh-my-zsh is not installed. Please install oh-my-zsh before continuing." fi - if command -v zsh >/dev/null 2>&1 && [ -d "$HOME/.oh-my-zsh" ]; then + if [ -d "$HOME/.oh-my-zsh" ]; then log "zsh already configured. Skipping..." return fi @@ -136,10 +136,10 @@ setup_git() { return fi - copy_file "$DIR/../git/.gitconfig" "$HOME/.gitconfig" - copy_file "$DIR/../git/.gitignore" "$HOME/.gitignore" - copy_file "$DIR/../git/.gitattributes" "$HOME/.gitattributes" - copy_file "$DIR/../git/.git-commit-template" "$HOME/.git-commit-template" + copy_file "$DIR/git/.gitconfig" "$HOME/.gitconfig" + copy_file "$DIR/git/.gitignore" "$HOME/.gitignore" + copy_file "$DIR/git/.gitattributes" "$HOME/.gitattributes" + copy_file "$DIR/git/.git-commit-template" "$HOME/.git-commit-template" register_completed_step "Git" log "Git settings configured successfully!" } @@ -179,7 +179,7 @@ setup_npm() { return fi - copy_file "$DIR/../.npmrc" "$HOME/.npmrc" + copy_file "$DIR/.npmrc" "$HOME/.npmrc" register_completed_step "NPM" log "NPM configured successfully!" @@ -233,7 +233,7 @@ setup_ssh() { log "SSH key added to the ssh-agent successfully!" log "Adding SSH config..." - copy_file "$DIR/../ssh/config" "$HOME/.ssh/config" + copy_file "$DIR/ssh/config" "$HOME/.ssh/config" log "SSH config added successfully!" register_completed_step "ssh" From 94935161d266b5a55152c4b6112e56216a0135b1 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 14:26:26 -0300 Subject: [PATCH 36/63] fix: remove oh-my-zsh conditional --- install | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/install b/install index a871009..a8dfa16 100755 --- a/install +++ b/install @@ -99,16 +99,12 @@ copy_file() { # Configure zsh setup_zsh() { - if ! command -v zsh >/dev/null 2>&1 && ! [ -d "$HOME/.oh-my-zsh" ]; then - error "zsh and oh-my-zsh are not installed. Please install both before continuing." - elif ! command -v zsh >/dev/null 2>&1; then + if ! command -v zsh >/dev/null 2>&1; then error "zsh is not installed. Please install zsh before continuing." - elif ! [ -d "$HOME/.oh-my-zsh" ]; then - error "oh-my-zsh is not installed. Please install oh-my-zsh before continuing." fi if [ -d "$HOME/.oh-my-zsh" ]; then - log "zsh already configured. Skipping..." + log "oh-my-zsh already configured. Skipping..." return fi From db84a4dc1c408c5500ce860882fab2944e8d9f82 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 14:27:13 -0300 Subject: [PATCH 37/63] fix: adjust path --- install | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install b/install index a8dfa16..fea73e5 100755 --- a/install +++ b/install @@ -117,9 +117,9 @@ setup_zsh() { copy_file "$DIR/linux/.zshrc" "$HOME/.zshrc" fi - copy_dir "$DIR/../zsh/themes" "$HOME/.oh-my-zsh/themes" - copy_file "$DIR/../zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" - copy_dir "$DIR/../zsh/custom-functions" "$HOME/.oh-my-zsh/plugins/custom-functions" + copy_dir "$DIR/zsh/themes" "$HOME/.oh-my-zsh/themes" + copy_file "$DIR/zsh/aliases.zsh" "$HOME/.oh-my-zsh/custom/aliases.zsh" + copy_dir "$DIR/zsh/custom-functions" "$HOME/.oh-my-zsh/plugins/custom-functions" register_completed_step "zsh" log "zsh settings configured successfully!" From 5d343894168266d05728d2a1914bbdad44bf204a Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 14:28:33 -0300 Subject: [PATCH 38/63] chore: disable conditional --- install | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/install b/install index fea73e5..04e0a11 100755 --- a/install +++ b/install @@ -103,10 +103,10 @@ setup_zsh() { error "zsh is not installed. Please install zsh before continuing." fi - if [ -d "$HOME/.oh-my-zsh" ]; then - log "oh-my-zsh already configured. Skipping..." - return - fi + # if [ -d "$HOME/.oh-my-zsh" ]; then + # log "oh-my-zsh already configured. Skipping..." + # return + # fi # copy zshrc based on the OS if [[ "$OSTYPE" == "darwin"* ]]; then From 1810322954a578a45010e0ca79ab3707d26eabbb Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 19 Jul 2025 23:42:31 -0300 Subject: [PATCH 39/63] chore: remove unnecessary cask and tap --- linux/.Brewfile | 4 ---- macos/.Brewfile | 8 -------- 2 files changed, 12 deletions(-) diff --git a/linux/.Brewfile b/linux/.Brewfile index 5e44b88..f33a439 100644 --- a/linux/.Brewfile +++ b/linux/.Brewfile @@ -1,8 +1,6 @@ tap "homebrew/bundle" tap "espanso/espanso" tap "localsend/localsend" -# Run your GitHub Actions locally -brew "act" # TIFF library and utilities brew "libtiff" # Cryptography and SSL/TLS Toolkit @@ -11,8 +9,6 @@ brew "openssl@3" brew "sqlite" # Interpreted, interactive, object-oriented programming language brew "python@3.13" -# New file format for still image compression -brew "jpeg-xl" # Core application library for C brew "glib" # Asynchronous DNS library diff --git a/macos/.Brewfile b/macos/.Brewfile index d1f9126..970b449 100644 --- a/macos/.Brewfile +++ b/macos/.Brewfile @@ -1,17 +1,11 @@ tap "espanso/espanso" -tap "homebrew/bundle" -tap "homebrew/services" tap "localsend/localsend" -# Run your GitHub Actions locally -brew "act" # General-purpose data compression with high compression ratio brew "xz" # Zstandard is a real-time compression algorithm brew "zstd" # TIFF library and utilities brew "libtiff" -# New file format for still image compression -brew "jpeg-xl" # Asynchronous DNS library brew "c-ares" # Multi-platform support library with a focus on asynchronous I/O @@ -76,8 +70,6 @@ cask "bitwarden" cask "espanso" # Terminal emulator that uses platform-native UI and GPU acceleration cask "ghostty" -# Testing client for REST, GraphQL, and HTTP APIs -cask "httpie-desktop" # Utility that shows the latest app updates cask "latest" # Open-source cross-platform alternative to AirDrop From 69ee53ba106448100d9acc3da273a13f07c9e25a Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 00:13:51 -0300 Subject: [PATCH 40/63] docs: update infos to git settings --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 28ee981..5b1ee08 100644 --- a/README.md +++ b/README.md @@ -48,14 +48,16 @@ brew install zsh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" ``` -6. Install Node.js: [https://nodejs.org/en/download](https://nodejs.org/en/download) - -7. Run the install script: +6. Run the install script: ```bash ./install ``` +## Some settings + +- Set name and email for git on `.gitconfig` file + ## Apps and dev tools My apps and dev tools for Linux and macOS. From e5245a89a90371f47e7e1fb22f9b38a68a8c3a9d Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 00:14:11 -0300 Subject: [PATCH 41/63] chore: disable custom font setup --- install | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install b/install index 04e0a11..a3a166c 100755 --- a/install +++ b/install @@ -327,10 +327,10 @@ main() { echo "4. Configure NPM" echo "5. Install global npm packages" echo "6. Configure SSH" - echo "7. Set custom fonts" + # echo "7. Set custom fonts" if [[ "$OSTYPE" == "darwin"* ]]; then - echo "8. Settings for macOS" + echo "7. Settings for macOS" fi if ask_continue "Configure Zsh" "1"; then @@ -357,12 +357,12 @@ main() { setup_ssh fi - if ask_continue "Set custom fonts" "7"; then - setup_fonts - fi + # if ask_continue "Set custom fonts" "7"; then + # setup_fonts + # fi if [[ "$OSTYPE" == "darwin"* ]]; then - if ask_continue "Settings for macOS" "8"; then + if ask_continue "Settings for macOS" "7"; then setup_macos fi fi From 385ecd88f9ee2b47b4c38fd90255d130434cf624 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 00:24:30 -0300 Subject: [PATCH 42/63] chore: remove unused app --- macos/.Brewfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/macos/.Brewfile b/macos/.Brewfile index 970b449..9d396c5 100644 --- a/macos/.Brewfile +++ b/macos/.Brewfile @@ -86,8 +86,6 @@ cask "notunes" cask "numi" # Replacement for Docker Desktop cask "orbstack" -# WebKit based web browser -cask "orion" # Utility to uninstall apps and remove leftover files from old/uninstalled apps cask "pearcleaner" # Screenshot measurement and annotation tool From fa6497434e46a0d3d1d4e4da1745432069d4835f Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 00:29:23 -0300 Subject: [PATCH 43/63] feat: set global variable to verify install proccess --- install | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/install b/install index a3a166c..9838f03 100755 --- a/install +++ b/install @@ -53,6 +53,8 @@ safe_link() { ln -s "$src" "$dest" } +DOTFILES_ZSH_INSTALL=false + # Copy a directory # @param $1 Source directory path # @param $2 Destination directory path @@ -103,6 +105,11 @@ setup_zsh() { error "zsh is not installed. Please install zsh before continuing." fi + if [ "$DOTFILES_ZSH_INSTALL" = true ]; then + log "oh-my-zsh already installed. Skipping..." + return + fi + # if [ -d "$HOME/.oh-my-zsh" ]; then # log "oh-my-zsh already configured. Skipping..." # return @@ -123,6 +130,8 @@ setup_zsh() { register_completed_step "zsh" log "zsh settings configured successfully!" + + DOTFILES_ZSH_INSTALL=true } # Configure Git From 82842e390b0b6871c76fe353fb5e2788ace01d7d Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 08:27:48 -0300 Subject: [PATCH 44/63] feat: set global to identify setup --- install | 60 ++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/install b/install index 9838f03..a240239 100755 --- a/install +++ b/install @@ -53,8 +53,6 @@ safe_link() { ln -s "$src" "$dest" } -DOTFILES_ZSH_INSTALL=false - # Copy a directory # @param $1 Source directory path # @param $2 Destination directory path @@ -105,16 +103,11 @@ setup_zsh() { error "zsh is not installed. Please install zsh before continuing." fi - if [ "$DOTFILES_ZSH_INSTALL" = true ]; then - log "oh-my-zsh already installed. Skipping..." + if [ "$DOTFILES_ZSH_SETUP" = true ]; then + log "oh-my-zsh already setup. Skipping..." return fi - # if [ -d "$HOME/.oh-my-zsh" ]; then - # log "oh-my-zsh already configured. Skipping..." - # return - # fi - # copy zshrc based on the OS if [[ "$OSTYPE" == "darwin"* ]]; then log "Copying zshrc for macOS..." @@ -131,13 +124,13 @@ setup_zsh() { register_completed_step "zsh" log "zsh settings configured successfully!" - DOTFILES_ZSH_INSTALL=true + DOTFILES_ZSH_SETUP=true } # Configure Git setup_git() { - if [ -f "$HOME/.gitconfig" ] && [ -f "$HOME/.gitignore" ] && [ -f "$HOME/.gitattributes" ] && [ -f "$HOME/.git-commit-template" ]; then - log "git already configured. Skipping..." + if [ "$DOTFILES_GIT_SETUP" = true ]; then + log "git already setup. Skipping..." return fi @@ -147,6 +140,8 @@ setup_git() { copy_file "$DIR/git/.git-commit-template" "$HOME/.git-commit-template" register_completed_step "Git" log "Git settings configured successfully!" + + DOTFILES_GIT_SETUP=true } # Configure Homebrew and install packages from Brewfile @@ -155,8 +150,8 @@ setup_brew() { error "Homebrew is not installed. Please install Homebrew first." fi - if command -v brew >/dev/null 2>&1; then - log "Brewfile already exists. Skipping..." + if [ "$DOTFILES_BREW_SETUP" = true ]; then + log "Brewfile already setup. Skipping..." return fi @@ -175,12 +170,14 @@ setup_brew() { fi register_completed_step "Homebrew" log "Homebrew settings configured successfully!" + + DOTFILES_BREW_SETUP=true } # Configure NPM setup_npm() { - if [ -f "$HOME/.npmrc" ] || [ -d "$HOME/.npm-packages" ]; then - log "npm already configured. Skipping..." + if [ "$DOTFILES_NPM_SETUP" = true ]; then + log "npm already setup. Skipping..." return fi @@ -195,6 +192,8 @@ setup_npm() { else mkdir -p "$HOME/.npm-packages" fi + + DOTFILES_NPM_SETUP=true } # Install global npm packages @@ -203,8 +202,8 @@ setup_global_npm_packages() { error "node is not installed. Please install node first." fi - if command -v n >/dev/null 2>&1; then - log "global npm packages already installed. Skipping..." + if [ "$DOTFILES_NPM_SETUP" = true ]; then + log "global npm packages already setup. Skipping..." return fi @@ -212,6 +211,8 @@ setup_global_npm_packages() { npm install -g npm-check-updates n git-cz @nestjs/cli fastify-cli yarn register_completed_step "npm packages" log "npm packages installed successfully!" + + DOTFILES_NPM_SETUP=true } # Configure SSH @@ -221,6 +222,11 @@ setup_ssh() { return fi + if [ "$DOTFILES_SSH_SETUP" = true ]; then + log "SSH already setup. Skipping..." + return + fi + log "Generating SSH key..." ssh-keygen -t ed25519 -C $USER_EMAIL log "SSH key generated successfully!" @@ -243,10 +249,17 @@ setup_ssh() { register_completed_step "ssh" log "SSH configured successfully!" + + DOTFILES_SSH_SETUP=true } # Configure my favorites fonts setup_fonts() { + if [ "$DOTFILES_FONTS_SETUP" = true ]; then + log "fonts already setup. Skipping..." + return + fi + if [[ "$OSTYPE" == "darwin"* ]]; then # macOS local font_dir="$HOME/Library/Fonts" @@ -256,6 +269,8 @@ setup_fonts() { log "Installing fonts for macOS..." copy_dir "$DIR/extras/fonts/"* "$font_dir/" log "Fonts installed successfully!" + + DOTFILES_FONTS_SETUP=true elif [[ "$OSTYPE" == "linux-gnu"* ]]; then # Ubuntu/Linux local font_dir="$HOME/.local/share/fonts" @@ -277,6 +292,8 @@ setup_fonts() { register_completed_step "Fonts" log "Fonts configured successfully!" + + DOTFILES_FONTS_SETUP=true else error "Unsupported operating system" fi @@ -284,6 +301,11 @@ setup_fonts() { # Configure macOS setup_macos() { + if [ "$DOTFILES_MACOS_SETUP" = true ]; then + log "macOS already setup. Skipping..." + return + fi + log "Settings for macOS" if [[ -x "$DIR/macos/.macos" ]]; then @@ -295,6 +317,8 @@ setup_macos() { else error "$DIR/macos/.macos not found or not executable." fi + + DOTFILES_MACOS_SETUP=true } ask_continue() { From 2bafb0c9aee2bfc00920f9fdd2acdbacf5aa4b7b Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 08:29:26 -0300 Subject: [PATCH 45/63] docs: remove unused app --- docs/macos-apps.md | 83 +++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/docs/macos-apps.md b/docs/macos-apps.md index 49f443b..aaacd5d 100644 --- a/docs/macos-apps.md +++ b/docs/macos-apps.md @@ -2,47 +2,48 @@ My macOS apps -| Name | Description | URL | -| ------------------ | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Amphetamine | Keep your Mac awake | [https://apps.apple.com/us/app/amphetamine/id937984704?mt=12](https://apps.apple.com/us/app/amphetamine/id937984704?mt=12) | -| balenaEtcher | Flash OS images to SD cards & USB drives. | [https://github.com/balena-io/etcher/tree/master](https://github.com/balena-io/etcher/tree/master) | -| Battery Monitor | Monitor your battery | [https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12](https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12) | -| Bear | Markdown notes | [https://bear.app](https://bear.app) | -| Beekeeper Studio | Database management tool | [https://www.beekeeperstudio.io/](https://www.beekeeperstudio.io/) | -| Bitwarden | Password manager | [https://bitwarden.com](https://bitwarden.com) | -| Budget Flow | Financial Manager | [https://budget-flow.app/](https://budget-flow.app/) | -| Claude | Anthropic AI app | [https://claude.ai/download](https://claude.ai/download) | -| Daisy Disk | Find it. Clean it | [https://daisydiskapp.com/](https://daisydiskapp.com/) | -| Espanso | Text expander | [https://espanso.org/](https://espanso.org/) | -| Floorp | Web browser | [https://www.floorp.app/](https://www.floorp.app/) | -| f.lux | Color temperature | [https://justgetflux.com/](https://justgetflux.com/) | -| Funter | Show hidden files on Mac, hide files with one click, find any hidden file or folder in the Finder | [https://nektony.com/funter](https://nektony.com/funter) | -| Ghostty | Terminal | [https://ghostty.org/](https://ghostty.org/) | -| Gifski | GIF encoder based on libimagequant (pngquant) | [https://github.com/ImageOptim/gifski/](https://github.com/ImageOptim/gifski/) | -| Google Drive | Synchronize your GDrive | [https://www.google.com/drive/download/](https://www.google.com/drive/download/) | -| Itsycal | Calendar on menu bar | [https://www.mowglii.com/itsycal/](https://www.mowglii.com/itsycal/) | -| Kaspersky VPN | VPN | [https://www.kaspersky.com.br/vpn-secure-connection/download-vpn](https://www.kaspersky.com.br/vpn-secure-connection/download-vpn) | -| Latest | A small utility app for macOS about all the latest updates | [https://github.com/mangerlahn/Latest](https://github.com/mangerlahn/Latest) | -| LocalSend | Share files all devices | [https://localsend.org/](https://localsend.org/) | -| Maccy | Clipboard manager | [https://maccy.app/](https://maccy.app/) | -| Monitor Control | Control your display's brightness & volume on your Mac | [https://github.com/MonitorControl/MonitorControl](https://github.com/MonitorControl/MonitorControl) | -| NextDNS | DNS | [https://nextdns.io](https://nextdns.io) | -| noTunes | Prevent iTunes or Apple Music from launching | [https://github.com/tombonez/noTunes](https://github.com/tombonez/noTunes) | -| Notion | Notes | [https://www.notion.so/](https://www.notion.so/) | -| Notion Calendar | Calendar | [https://www.notion.com/product/calendar](https://www.notion.com/product/calendar) | -| Numi | Advanced calculator | [https://numi.app/](https://numi.app/) | -| Pearcleaner | Remove apps with security | [https://www.nektony.com/products/pear-cleaner](https://www.nektony.com/products/pear-cleaner) | -| Picview | Image viewer | [https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12](https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12) | -| Raycast | Spotlight for macOS | [https://www.raycast.com/](https://www.raycast.com/) | -| Rectangle | Window manager | [https://rectangleapp.com/](https://rectangleapp.com/) | -| Shottr | Screenshot tool | [https://shottr.cc/](https://shottr.cc/) | -| Speediness | Speed test | [https://sindresorhus.com/speediness](https://sindresorhus.com/speediness) | -| Stats | Status bar | [https://github.com/exelban/stats](https://github.com/exelban/stats) | -| The Unarchiver | Archive manager | [https://theunarchiver.com/](https://theunarchiver.com/) | -| Todoist | Todo list | [https://www.todoist.com](https://www.todoist.com) | -| UTM | Running OS for macOS | [https://mac.getutm.app/](https://mac.getutm.app/) | -| Unsplash Wallpaper | Wallpaper for macOS | [https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12](https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12) | -| VLC | Media player | [https://www.videolan.org/vlc/](https://www.videolan.org/vlc/) | +| Name | Description | URL | +| ---------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Amphetamine | Keep your Mac awake | [https://apps.apple.com/us/app/amphetamine/id937984704?mt=12](https://apps.apple.com/us/app/amphetamine/id937984704?mt=12) | +| balenaEtcher | Flash OS images to SD cards & USB drives. | [https://github.com/balena-io/etcher/tree/master](https://github.com/balena-io/etcher/tree/master) | +| Battery Monitor | Monitor your battery | [https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12](https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12) | +| Bear | Markdown notes | [https://bear.app](https://bear.app) | +| Beekeeper Studio | Database management tool | [https://www.beekeeperstudio.io/](https://www.beekeeperstudio.io/) | +| Bitwarden | Password manager | [https://bitwarden.com](https://bitwarden.com) | +| Budget Flow | Financial Manager | [https://budget-flow.app/](https://budget-flow.app/) | +| Claude | Anthropic AI app | [https://claude.ai/download](https://claude.ai/download) | +| Daisy Disk | Find it. Clean it | [https://daisydiskapp.com/](https://daisydiskapp.com/) | +| Espanso | Text expander | [https://espanso.org/](https://espanso.org/) | +| Floorp | Web browser | [https://www.floorp.app/](https://www.floorp.app/) | +| f.lux | Color temperature | [https://justgetflux.com/](https://justgetflux.com/) | + +| +| Ghostty | Terminal | [https://ghostty.org/](https://ghostty.org/) | +| Gifski | GIF encoder based on libimagequant (pngquant) | [https://github.com/ImageOptim/gifski/](https://github.com/ImageOptim/gifski/) | +| Google Drive | Synchronize your GDrive | [https://www.google.com/drive/download/](https://www.google.com/drive/download/) | +| Itsycal | Calendar on menu bar | [https://www.mowglii.com/itsycal/](https://www.mowglii.com/itsycal/) | +| Kaspersky VPN | VPN | [https://www.kaspersky.com.br/vpn-secure-connection/download-vpn](https://www.kaspersky.com.br/vpn-secure-connection/download-vpn) | +| Latest | A small utility app for macOS about all the latest updates | [https://github.com/mangerlahn/Latest](https://github.com/mangerlahn/Latest) | +| LocalSend | Share files all devices | [https://localsend.org/](https://localsend.org/) | +| Maccy | Clipboard manager | [https://maccy.app/](https://maccy.app/) | +| Monitor Control | Control your display's brightness & volume on your Mac | [https://github.com/MonitorControl/MonitorControl](https://github.com/MonitorControl/MonitorControl) | +| NextDNS | DNS | [https://nextdns.io](https://nextdns.io) | +| noTunes | Prevent iTunes or Apple Music from launching | [https://github.com/tombonez/noTunes](https://github.com/tombonez/noTunes) | +| Notion | Notes | [https://www.notion.so/](https://www.notion.so/) | +| Notion Calendar | Calendar | [https://www.notion.com/product/calendar](https://www.notion.com/product/calendar) | +| Numi | Advanced calculator | [https://numi.app/](https://numi.app/) | +| Pearcleaner | Remove apps with security | [https://www.nektony.com/products/pear-cleaner](https://www.nektony.com/products/pear-cleaner) | +| Picview | Image viewer | [https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12](https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12) | +| Raycast | Spotlight for macOS | [https://www.raycast.com/](https://www.raycast.com/) | +| Rectangle | Window manager | [https://rectangleapp.com/](https://rectangleapp.com/) | +| Shottr | Screenshot tool | [https://shottr.cc/](https://shottr.cc/) | +| Speediness | Speed test | [https://sindresorhus.com/speediness](https://sindresorhus.com/speediness) | +| Stats | Status bar | [https://github.com/exelban/stats](https://github.com/exelban/stats) | +| The Unarchiver | Archive manager | [https://theunarchiver.com/](https://theunarchiver.com/) | +| Todoist | Todo list | [https://www.todoist.com](https://www.todoist.com) | +| UTM | Running OS for macOS | [https://mac.getutm.app/](https://mac.getutm.app/) | +| Unsplash Wallpaper | Wallpaper for macOS | [https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12](https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12) | +| VLC | Media player | [https://www.videolan.org/vlc/](https://www.videolan.org/vlc/) | ## Raycast Extensions From e7d6a4f46ef9b1d305ce4fec8451c3a2fd3dcde3 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 08:34:38 -0300 Subject: [PATCH 46/63] docs: adjust usage proccess --- README.md | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 5b1ee08..7e8210f 100644 --- a/README.md +++ b/README.md @@ -8,29 +8,29 @@ This repo is 100% open for you to explore and customize. You need to have the following tools installed: -- [git](https://git-scm.com/downloads) +- [Homebrew](https://brew.sh/) - [zsh](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH#install-and-set-up-zsh-as-default) - [oh-my-zsh](https://ohmyz.sh/#install) -- [Homebrew](https://brew.sh/) -- [Node.js](https://nodejs.org/en/download) +- [git](https://git-scm.com/downloads) ## How to use -1. Clone this repository and open folder `dotfiles`: +1. Install Homebrew: ```bash -git clone git@github.com:tcelestino/dotfiles.git && cd dotfiles +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` -2. Open `.zshrc` file and change variables `USER_NAME`, `USER_EMAIL` and `NPM_SCOPE`. You might set `GH_TOKEN` and `NPM_TOKEN` too. - -3. Install Homebrew: +2. Clone this repository and open folder `dotfiles`: ```bash -/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +git clone git@github.com:tcelestino/dotfiles.git && cd dotfiles ``` -4. Install zsh: +3. Open `.zshrc` file and change variables `USER_NAME`, `USER_EMAIL` and `NPM_SCOPE`. You might set `GH_TOKEN` and `NPM_TOKEN` too. +4. Set your email and name for git on `.gitconfig` file. + +5. Install zsh (if you not have it installed): ```bash ## linux @@ -42,22 +42,20 @@ sudo apt update && sudo apt install zsh brew install zsh ``` -5. Install oh-my-zsh: +_zsh is default shell on latest versions of macOS_ + +6. Install oh-my-zsh: ```bash sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" ``` -6. Run the install script: +7. Run the install script: ```bash ./install ``` -## Some settings - -- Set name and email for git on `.gitconfig` file - ## Apps and dev tools My apps and dev tools for Linux and macOS. From da645eaa596b7b055bbcdb177c592f817fcecf6e Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 10:42:26 -0300 Subject: [PATCH 47/63] feat: create redis alias --- zsh/aliases.zsh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh index 50a9966..bbc8659 100755 --- a/zsh/aliases.zsh +++ b/zsh/aliases.zsh @@ -5,8 +5,9 @@ alias reload="omz reload" alias custom-alias="$EDITOR ~/.oh-my-zsh/custom/aliases.zsh" # local development -alias server="python3 -m http.server" +alias server="python -m SimpleHTTPServer" alias serveo="ssh -R 80:localhost:3000 serveo.net" +alias redis-start="/opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf" #start redis # https://paulbrowne.xyz/https-localhost alias https-server="http-server --ssl --cert ~/.ssl/localhost.crt --key ~/.ssl/localhost.key -a localhost -o" From 783de434f2d294d3934adf398099696098055c6b Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 10:43:53 -0300 Subject: [PATCH 48/63] docs: add redis --- docs/dev-tools.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/dev-tools.md b/docs/dev-tools.md index 8685973..f299286 100644 --- a/docs/dev-tools.md +++ b/docs/dev-tools.md @@ -13,6 +13,7 @@ My dev tools for macOS and Linux | MongoDB Compass | Database management tool | [https://www.mongodb.com/products/compass](https://www.mongodb.com/products/compass) | | Node.js | JavaScript runtime for application development | [https://nodejs.org/](https://nodejs.org/) | | OrbStack | Docker manager | [https://orbstack.com/](https://orbstack.com/) | +| Redis | Database | [https://redis.io/](https://redis.io/) | | VSCode | Code editor | [https://code.visualstudio.com/](https://code.visualstudio.com/) | | Yaak | API client | [https://yaak.app/](https://yaak.app/) | | Yarn | Fast and reliable package manager for Node.js | [https://yarnpkg.com/](https://yarnpkg.com/) | From e773e494fcc055ac41c7fa91ef83dea1b38ff42f Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 11:06:24 -0300 Subject: [PATCH 49/63] docs: markdown lint --- docs/macos-apps.md | 82 ++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 42 deletions(-) diff --git a/docs/macos-apps.md b/docs/macos-apps.md index aaacd5d..911979c 100644 --- a/docs/macos-apps.md +++ b/docs/macos-apps.md @@ -2,48 +2,46 @@ My macOS apps -| Name | Description | URL | -| ---------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Amphetamine | Keep your Mac awake | [https://apps.apple.com/us/app/amphetamine/id937984704?mt=12](https://apps.apple.com/us/app/amphetamine/id937984704?mt=12) | -| balenaEtcher | Flash OS images to SD cards & USB drives. | [https://github.com/balena-io/etcher/tree/master](https://github.com/balena-io/etcher/tree/master) | -| Battery Monitor | Monitor your battery | [https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12](https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12) | -| Bear | Markdown notes | [https://bear.app](https://bear.app) | -| Beekeeper Studio | Database management tool | [https://www.beekeeperstudio.io/](https://www.beekeeperstudio.io/) | -| Bitwarden | Password manager | [https://bitwarden.com](https://bitwarden.com) | -| Budget Flow | Financial Manager | [https://budget-flow.app/](https://budget-flow.app/) | -| Claude | Anthropic AI app | [https://claude.ai/download](https://claude.ai/download) | -| Daisy Disk | Find it. Clean it | [https://daisydiskapp.com/](https://daisydiskapp.com/) | -| Espanso | Text expander | [https://espanso.org/](https://espanso.org/) | -| Floorp | Web browser | [https://www.floorp.app/](https://www.floorp.app/) | -| f.lux | Color temperature | [https://justgetflux.com/](https://justgetflux.com/) | - -| -| Ghostty | Terminal | [https://ghostty.org/](https://ghostty.org/) | -| Gifski | GIF encoder based on libimagequant (pngquant) | [https://github.com/ImageOptim/gifski/](https://github.com/ImageOptim/gifski/) | -| Google Drive | Synchronize your GDrive | [https://www.google.com/drive/download/](https://www.google.com/drive/download/) | -| Itsycal | Calendar on menu bar | [https://www.mowglii.com/itsycal/](https://www.mowglii.com/itsycal/) | -| Kaspersky VPN | VPN | [https://www.kaspersky.com.br/vpn-secure-connection/download-vpn](https://www.kaspersky.com.br/vpn-secure-connection/download-vpn) | -| Latest | A small utility app for macOS about all the latest updates | [https://github.com/mangerlahn/Latest](https://github.com/mangerlahn/Latest) | -| LocalSend | Share files all devices | [https://localsend.org/](https://localsend.org/) | -| Maccy | Clipboard manager | [https://maccy.app/](https://maccy.app/) | -| Monitor Control | Control your display's brightness & volume on your Mac | [https://github.com/MonitorControl/MonitorControl](https://github.com/MonitorControl/MonitorControl) | -| NextDNS | DNS | [https://nextdns.io](https://nextdns.io) | -| noTunes | Prevent iTunes or Apple Music from launching | [https://github.com/tombonez/noTunes](https://github.com/tombonez/noTunes) | -| Notion | Notes | [https://www.notion.so/](https://www.notion.so/) | -| Notion Calendar | Calendar | [https://www.notion.com/product/calendar](https://www.notion.com/product/calendar) | -| Numi | Advanced calculator | [https://numi.app/](https://numi.app/) | -| Pearcleaner | Remove apps with security | [https://www.nektony.com/products/pear-cleaner](https://www.nektony.com/products/pear-cleaner) | -| Picview | Image viewer | [https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12](https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12) | -| Raycast | Spotlight for macOS | [https://www.raycast.com/](https://www.raycast.com/) | -| Rectangle | Window manager | [https://rectangleapp.com/](https://rectangleapp.com/) | -| Shottr | Screenshot tool | [https://shottr.cc/](https://shottr.cc/) | -| Speediness | Speed test | [https://sindresorhus.com/speediness](https://sindresorhus.com/speediness) | -| Stats | Status bar | [https://github.com/exelban/stats](https://github.com/exelban/stats) | -| The Unarchiver | Archive manager | [https://theunarchiver.com/](https://theunarchiver.com/) | -| Todoist | Todo list | [https://www.todoist.com](https://www.todoist.com) | -| UTM | Running OS for macOS | [https://mac.getutm.app/](https://mac.getutm.app/) | -| Unsplash Wallpaper | Wallpaper for macOS | [https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12](https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12) | -| VLC | Media player | [https://www.videolan.org/vlc/](https://www.videolan.org/vlc/) | +| Name | Description | URL | +| ------------------ | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Amphetamine | Keep your Mac awake | [https://apps.apple.com/us/app/amphetamine/id937984704?mt=12](https://apps.apple.com/us/app/amphetamine/id937984704?mt=12) | +| balenaEtcher | Flash OS images to SD cards & USB drives. | [https://github.com/balena-io/etcher/tree/master](https://github.com/balena-io/etcher/tree/master) | +| Battery Monitor | Monitor your battery | [https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12](https://apps.apple.com/us/app/battery-monitor-health-info/id836505650?mt=12) | +| Bear | Markdown notes | [https://bear.app](https://bear.app) | +| Beekeeper Studio | Database management tool | [https://www.beekeeperstudio.io/](https://www.beekeeperstudio.io/) | +| Bitwarden | Password manager | [https://bitwarden.com](https://bitwarden.com) | +| Budget Flow | Financial Manager | [https://budget-flow.app/](https://budget-flow.app/) | +| Claude | Anthropic AI app | [https://claude.ai/download](https://claude.ai/download) | +| Daisy Disk | Find it. Clean it | [https://daisydiskapp.com/](https://daisydiskapp.com/) | +| Espanso | Text expander | [https://espanso.org/](https://espanso.org/) | +| Floorp | Web browser | [https://www.floorp.app/](https://www.floorp.app/) | +| f.lux | Color temperature | [https://justgetflux.com/](https://justgetflux.com/) | +| Ghostty | Terminal | [https://ghostty.org/](https://ghostty.org/) | +| Gifski | GIF encoder based on libimagequant (pngquant) | [https://github.com/ImageOptim/gifski/](https://github.com/ImageOptim/gifski/) | +| Google Drive | Synchronize your GDrive | [https://www.google.com/drive/download/](https://www.google.com/drive/download/) | +| Itsycal | Calendar on menu bar | [https://www.mowglii.com/itsycal/](https://www.mowglii.com/itsycal/) | +| Kaspersky VPN | VPN | [https://www.kaspersky.com.br/vpn-secure-connection/download-vpn](https://www.kaspersky.com.br/vpn-secure-connection/download-vpn) | +| Latest | A small utility app for macOS about all the latest updates | [https://github.com/mangerlahn/Latest](https://github.com/mangerlahn/Latest) | +| LocalSend | Share files all devices | [https://localsend.org/](https://localsend.org/) | +| Maccy | Clipboard manager | [https://maccy.app/](https://maccy.app/) | +| Monitor Control | Control your display's brightness & volume on your Mac | [https://github.com/MonitorControl/MonitorControl](https://github.com/MonitorControl/MonitorControl) | +| NextDNS | DNS | [https://nextdns.io](https://nextdns.io) | +| noTunes | Prevent iTunes or Apple Music from launching | [https://github.com/tombonez/noTunes](https://github.com/tombonez/noTunes) | +| Notion | Notes | [https://www.notion.so/](https://www.notion.so/) | +| Notion Calendar | Calendar | [https://www.notion.com/product/calendar](https://www.notion.com/product/calendar) | +| Numi | Advanced calculator | [https://numi.app/](https://numi.app/) | +| Pearcleaner | Remove apps with security | [https://www.nektony.com/products/pear-cleaner](https://www.nektony.com/products/pear-cleaner) | +| Picview | Image viewer | [https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12](https://apps.apple.com/br/app/picview-image-viewer/id6452016140?mt=12) | +| Raycast | Spotlight for macOS | [https://www.raycast.com/](https://www.raycast.com/) | +| Rectangle | Window manager | [https://rectangleapp.com/](https://rectangleapp.com/) | +| Shottr | Screenshot tool | [https://shottr.cc/](https://shottr.cc/) | +| Speediness | Speed test | [https://sindresorhus.com/speediness](https://sindresorhus.com/speediness) | +| Stats | Status bar | [https://github.com/exelban/stats](https://github.com/exelban/stats) | +| The Unarchiver | Archive manager | [https://theunarchiver.com/](https://theunarchiver.com/) | +| Todoist | Todo list | [https://www.todoist.com](https://www.todoist.com) | +| UTM | Running OS for macOS | [https://mac.getutm.app/](https://mac.getutm.app/) | +| Unsplash Wallpaper | Wallpaper for macOS | [https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12](https://apps.apple.com/us/app/unsplash-wallpapers/id1284863847?mt=12) | +| VLC | Media player | [https://www.videolan.org/vlc/](https://www.videolan.org/vlc/) | ## Raycast Extensions From 64ae5cdcb59498c85fbd01fd2f5f25772e589425 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sun, 20 Jul 2025 18:05:50 -0300 Subject: [PATCH 50/63] chore: remove raycast quicklinks file --- docs/macos-apps.md | 4 ---- extras/raycast-quicklinks.json | 1 - 2 files changed, 5 deletions(-) delete mode 100644 extras/raycast-quicklinks.json diff --git a/docs/macos-apps.md b/docs/macos-apps.md index 911979c..ff6ca3f 100644 --- a/docs/macos-apps.md +++ b/docs/macos-apps.md @@ -72,7 +72,3 @@ My list of Raycast extensions. Yes, I use Raycast free! 😀. - Video Downloader See more extensions at [https://www.raycast.com/store](https://www.raycast.com/store) - -### Raycast Quicklinks - -If you would like to use my Raycast quicklinks, please import the file [raycast-quicklinks.json](../extras/raycast-quicklinks.json) into Raycast. diff --git a/extras/raycast-quicklinks.json b/extras/raycast-quicklinks.json deleted file mode 100644 index 62c3a14..0000000 --- a/extras/raycast-quicklinks.json +++ /dev/null @@ -1 +0,0 @@ -[{"link":"https:\/\/duckduckgo.com\/?q={Query}","name":"Search DuckDuckGo"},{"link":"https:\/\/www.linguee.com\/english-portuguese\/search?source=auto&query={Query}","name":"Linguee"},{"link":"~\/Downloads","name":"Open Download folder"},{"link":"https:\/\/docs.google.com\/spreadsheets\/d\/1b-UMuk4iDuh5-i3SFePl4scS7PvsGuuk2kJWYpIHk1g\/edit?gid=1509416510#gid=1509416510","name":"Minhas Finanças"},{"link":"https:\/\/web.whatsapp.com","name":"WhatsApp Web"},{"link":"https:\/\/www.youtube.com\/results?search_query={Query}","name":"Youtube"},{"link":"https:\/\/drive.google.com","name":"Google Drive"},{"link":"https:\/\/www.google.com\/maps\/place\/{Query}","name":"Google Maps"},{"link":"https:\/\/www.amazon.com.br\/s?k={Query}","name":"Amazon BR"},{"link":"~\/Projects\/bloco-de-notas","openWith":"Visual Studio Code","name":"Bloco de Notas"},{"link":"https:\/\/docs.google.com\/spreadsheets\/d\/1Aq9OtlpHIa7PSFL12euYMg5sRF2yKQAI7HI-dWV82kY\/edit?gid=1013744764#gid=1013744764","name":"Plano de Estudos PM3"},{"link":"https:\/\/tcelestino.github.io\/bloco-de-notas\/","name":"Meu blog"},{"link":"https:\/\/duck.ai\/","name":"Duck AI"},{"link":"https:\/\/drive.google.com\/drive\/starred","name":"Google Drive Starred"},{"link":"https:\/\/docs.google.com\/spreadsheets\/d\/1Qxt-6wVhKy9JWsu20f4y5ashEzJk43n9VkSUntsq7x4\/edit?gid=0#gid=0","name":"Minha Saúde"},{"link":"~\/Pictures\/Screenshots","name":"Screenshots"},{"link":"https:\/\/docs.google.com\/spreadsheets\/d\/14hazr9W-4kzYIQBd5f2-BxxrhrBzIa3Chzi617qeKrc\/edit?gid=0#gid=0","name":"Meus Investimentos"},{"link":"https:\/\/techcrunch.com\/?s={query}","name":"TechCrunch Search"},{"link":"https:\/\/candidatei.lovable.app\/dashboard","name":"Candidatei"},{"link":"https:\/\/github.com\/tcelestino?tab=repositories&type=source","name":"My repos"},{"link":"https:\/\/docs.google.com\/spreadsheets\/d\/1Gn2HWqrm-cxBpokXsN2z9rUBwFzHONcIk_0zDFBGV-Y\/edit?gid=0#gid=0","name":"Minhas Candidaturas"},{"link":"https:\/\/drive.google.com\/drive\/recent","name":"Google Drive Recents"},{"link":"https:\/\/github.com\/resultado-da-mega","name":"Projeto: Resultado Mega Sena"}] \ No newline at end of file From cac67a81c07db8e05096485b18551216ad78b66b Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Thu, 24 Jul 2025 08:45:51 -0300 Subject: [PATCH 51/63] feat: add npm update alias using npm-check-updates --- zsh/aliases.zsh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh index bbc8659..db5792d 100755 --- a/zsh/aliases.zsh +++ b/zsh/aliases.zsh @@ -25,6 +25,8 @@ alias npm-run="npm run" alias npm-ri="rm -rf node_modules && npm i" alias npm-reset='rm -rf node_modules && rm -f package-lock.json && npm install && npx node-notifier-cli -t "Done" -m "npm modules reinstalled" -s Glass -i https://cdn.rawgit.com/npm/logos/31945b5c/npm%20square/n-64.png' +alias npm-update="ncu -i --format group" #update list using npm-check-update + # git-cz alias commit="git-cz --disable-emoji" alias commitall="git add . && git-cz --disable-emoji" From 53d5cc723a50faeae0a67d891ce77e3062e07ebe Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Thu, 24 Jul 2025 09:18:30 -0300 Subject: [PATCH 52/63] feat: disable shake mouse pointer to locate --- macos/.macos | 3 +++ 1 file changed, 3 insertions(+) diff --git a/macos/.macos b/macos/.macos index 676b73a..b069a2f 100755 --- a/macos/.macos +++ b/macos/.macos @@ -137,6 +137,9 @@ defaults write "com.apple.systemsound" "com.apple.sound.uiaudio.enabled" -int 0 echo -n 'a' | sudo tee /private/var/db/.AccessibilityAPIEnabled > /dev/null 2>&1 sudo chmod 444 /private/var/db/.AccessibilityAPIEnabled +# Disable shake mouse pointer to locate +defaults write ~/Library/Preferences/.GlobalPreferences CGDisableCursorLocationMagnification -bool YES + # Enable full keyboard access for all controls # (e.g. enable Tab in modal dialogs) defaults write NSGlobalDomain AppleKeyboardUIMode -int 3 From 9c9a07c16538c0007aff8ed91a36f1e642d13db9 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Thu, 24 Jul 2025 21:55:31 -0300 Subject: [PATCH 53/63] feat: update docker-compose alias --- zsh/aliases.zsh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh index db5792d..97c5212 100755 --- a/zsh/aliases.zsh +++ b/zsh/aliases.zsh @@ -51,10 +51,11 @@ alias docker-ch="export DOCKER_HOST=" # docker-compose alias dcu="docker-compose up" #start with docker-compose -alias dcud="docker-compose -f docker-compose.dependencies.yaml up -d" #start dependencies with docker-compose -alias dcd="docker-compose down" #stop with docker-compose +alias dcdu="docker-compose -f docker-compose.dependencies.yaml up -d" #start dependencies with docker-compose +alias dcdd="docker-compose -f docker-compose.dependencies.yaml down" #stop dependencies with docker-compose +alias dcd="docker-compose down" #stop containers alias dcdv="docker-compose down -v" #stop with docker-compose and remove volumes -alias dcr="docker-compose restart" #restart with docker-compose +alias dcr="docker-compose restart" #restart containers with docker-compose alias dcb="docker-compose build" #build with docker-compose alias dcl="docker-compose logs" #logs with docker-compose From ee40bda6704c4553cd8bb5f670bdfc446b996b3a Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Thu, 24 Jul 2025 22:29:27 -0300 Subject: [PATCH 54/63] refactor: rename alias to docker compose --- zsh/aliases.zsh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh index 97c5212..876a71a 100755 --- a/zsh/aliases.zsh +++ b/zsh/aliases.zsh @@ -50,14 +50,15 @@ alias docker-stop="docker stop $(docker ps -aq)" # stop all container alias docker-ch="export DOCKER_HOST=" # docker-compose -alias dcu="docker-compose up" #start with docker-compose -alias dcdu="docker-compose -f docker-compose.dependencies.yaml up -d" #start dependencies with docker-compose -alias dcdd="docker-compose -f docker-compose.dependencies.yaml down" #stop dependencies with docker-compose +alias dcup="docker-compose up" #start with docker-compose alias dcd="docker-compose down" #stop containers alias dcdv="docker-compose down -v" #stop with docker-compose and remove volumes alias dcr="docker-compose restart" #restart containers with docker-compose alias dcb="docker-compose build" #build with docker-compose -alias dcl="docker-compose logs" #logs with docker-compose +alias dclg="docker-compose logs" #logs with docker-compose +alias dcdpup="docker-compose -f docker-compose.dependencies.yaml up -d" #start dependencies with docker-compose +alias dcdpd="docker-compose -f docker-compose.dependencies.yaml down" #stop dependencies with docker-compose +alias dcdpdv="docker-compose -f docker-compose.dependencies.yaml down -v" #stop dependencies with docker-compose and remove volumes # utils alias fs=filesize From 401f4e156d59b65d4787663e941e050c72fadafd Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Fri, 25 Jul 2025 20:22:08 -0300 Subject: [PATCH 55/63] chore: add new jetbrains fonts --- extras/fonts/JetBrainsMonoNL-Bold.ttf | Bin 0 -> 210988 bytes extras/fonts/JetBrainsMonoNL-ExtraLight.ttf | Bin 0 -> 209072 bytes extras/fonts/JetBrainsMonoNL-Regular.ttf | Bin 0 -> 208576 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 extras/fonts/JetBrainsMonoNL-Bold.ttf create mode 100644 extras/fonts/JetBrainsMonoNL-ExtraLight.ttf create mode 100644 extras/fonts/JetBrainsMonoNL-Regular.ttf diff --git a/extras/fonts/JetBrainsMonoNL-Bold.ttf b/extras/fonts/JetBrainsMonoNL-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f78f84fb433cb7179e11ebb85d92ebe9fca1dde5 GIT binary patch literal 210988 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

A*Gn0W7LJTJ^ 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 MKE+@1AmrQs0SBL!IsgCw literal 0 HcmV?d00001 diff --git a/extras/fonts/JetBrainsMonoNL-ExtraLight.ttf b/extras/fonts/JetBrainsMonoNL-ExtraLight.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6da7b759877236cef91edd9bad9b89ca0a23ef22 GIT binary patch literal 209072 zcmd442YgjUxA(th@0o<&d*E>~fMw&~cxMU3)ZKQk%3nj8f%umQ*aCy27*9?CNWD4>Dh^yuego<|3aznV@!|6?xomlv$jK*3Fz?{~=T*#YbNT@< zbLu&Ex735pCtI2`m)NFFFWv{ABwWaNbn=a2j?zdIdA!@SFVhR9Kaal z9nrA|W8XS??)sBv)gSbW)DOQTM?U^?{^4E^e0j$uJC_H4+HyW;Nsu~&=0w6jcD~KY zr8_REnil+-&exMt|FZgMPF5dtzbut~#7Yoc7;clZL|l2jI@sEX4NB#Can!Mjl*nkW zW~THoh2)CV^mVPaK~*F9Z3j7nG-p&1|9f2OR#o{vgnyWVsF-U$ewVZIgAE*wN)~la zg~9(1iBh++0OtP#daPEujOz0L1;(W7H~^jfZ>Zk(O3M9r7({tR>rhUEqtmKsr3p-e z-N!yJo%iqh_CGmRK>do=(H^vab6{3Fo$0gc_&E4_a@UA@l#&9vH~dm61bk#0|8SC1W4 z4UMttaa296eP0Xx_JG#)|B?~ZpRs3k9Y%ife}Ua&LB}%WAIK+vcZQPpPt507nyMYd z)gF)%%BXF3r}{cSg5zU$~xWBXC0wa#f!z2DkDT|cxBwIDMF&Cm2x>({kY=g~qqE6o|G&a2G4%^|Jj zGIi+Mpu{0#4=tNHu4Ae0>%M%}*w*={Wis~A^uf?No##;XmzJ9cWuW6yw0=FV=W1MO zTIa6Tp=I?vMfu0rx)~)?hn`Hd0n(43FMD3&Xo|aDQ@l4;&6){i4S-j@2F-)0yKL)xPO5{j7Cr-P%qQ(DA8FwGKtgYM!c+$;%wqdg`b1 zwOrSV^Is^isp^fA1b*0)ey>$avj16=}I z<|)uM{2frcX&-gHxDpaTnW}B5`ax-+c_LM<;ds)|!-1gw(m9Z+XHu|V>hn_aE(Tru zw10YBxdF62pN6!a0N_*63{+O0bOe*LOae$ zqP5cX^-nA1w5<#}cT#>GPFbx(NzeOK{y;t}I;Koo`>cJTjZ}Uqs(ET_&DZ{Do}&HB zr1eOcaT9@`o{gv)_%BF{;ZHcPAQohsvDcT1;=Wfvc7Nybr>QuLd z+EL5vd77_&R9os8^jPLRjV+BMe5T_}*+7qB15N)sQuncaD676zZ4Wx1h!54&xHL~c z?}?@9d{u2TQ%3DZI@6b3s~7*hdq7PK4kh= z{dj5((Du^D_gF^zl`fO&S0-I;{F&pKx~tch$@?d*Zs$yy-N*U2{D0_c^?It?wt8Pu z{nXeRpGN2Jwmp-I9bLyV^zrFbJnGu1bySPf)ZR+h-oiAeq8fj!rP}{p`PI+)-%M*; z3qb4Cw9e04LHnWWp025T>bI6>f1a^JYTeN_bZ^K9T}PWiZ{S*(ih(Jp?q#~CX^dVD ztVeo%-F2PNa(jWQ)}wvWdh|M@>s$LYTF5Pe=T$IbZLSU^om`iu}0>csjqcHEn3TdxYfPoG=l#5Br4&hsT7g!ZX8j!)wD^!esbD_*(d` ztz%o+gdJdu?LKz8onqRpc5 zXl^t=+AZ2EIv_eUIwHC}dU*7R=uy$rqqj%bM(>V35`8Qd#OlTx$C|}j#oEN;vD{df zSYhmp*k!S+W2<9pVmHNZjolG@H1*vN8;7Q&fHjTZr+7?*W_KBcU#`ed9UTI&-*;@o4oJy zw&gF$UzUGr{E=r|U(A1}Z$5D| z-ve)Ew42K|&)%|5k8e5w9)}0u^v$bra>ZMa9>QSmiD#ib8 z+!okwb_A*EaEiUsuCsSDj~=#<+NbTa_IdlFecdvu6r2C5&8_ljcPZbCU+z}_b!7Kc zrlikz$GH>Sg?}&OPNR;q)5ll2>-dCa-R-b8Q_}HM3+WQKyZhaX?p61p`%Y*7PicKKI_%&2H9zg)aX@%2>PdgHOA|a8WTMKR7&&1 z!@@4%qHsWXZ1^v?EIc4A4u^-mxT16n_X|6OgTqc?LHJJiR=7Uw=9c2uR+1wz$&-Fu z*9xVWpD@^0CQ6x1m2x>kj*_G0csX6pmTToYxrr-aWjHb%67Cg#6i#l^>3^& zp3Ithsyp1Ra9_BU=Gkyw_(53e4s<`dgTwc^Ryy}}__bRe_Hh3SL-SlXKa7VluAJSa z5kJ^aOPcdDA@kdYFXS#p3>$Q(IL7KU%gA#$OdBj?Haa*G^k zM#-!4s5~og$;ZG>v4EX(CfhbD3DIgV-3Irrd)>X}K5*~3x7<5f&9hnt3&VqgMZp2V;$Ug8 zEI2n<9;^s14lW5U4bBcO2+j%44=xPO3oZ&)2A2m{1eb9|-)3GmTg`Xo2lJ!(7kjU7 z%}?ybK4BmBym`UAXkKE6_L_NvJ=$CB(${UhVDVHpm)$G z=o)lm578>f4LX@uf`(>$Fwp!O3^Kn3gU#>35VIo~%1)!u{22^0JA)$jhsA*e!vhnP z1VJz&2!oM<4fc{7%~Dxo4v-tn5@{%}NMm_TYRhx%XkL(d?B46kOHzlQ_p$OgKS%T= z`_iYRhCI#B|2!exxchB)+sSseU2RX>%l6<3(1mM2Z`;?7VD~%Rme`T*I(MyY%MSUg z@Os-i{5bq9ydk_Yd?vigHV>Z;uL(a7&kw%{Uk~rH+3e1~3@;8Z4ZpE%!ZWxY{Tg1z zZtc-=$g4@V)Te@SgB)c5~0Ni+e77DSV#&+>PNj+brB}o7$G)E8(l* z4z6a8g^!2#+4{DjZD1SOnq0*?+IF_R&9@!cq35yltIKY^o~>;i`@mKufZA`vZLMFaG!8OI6j={PIITaliewHj9cxlc5U5Mx3?SN zO5A8S%(ZiQuFS>VzOK-Xb)(!Mx1Ss1#=C^;=?dIlZn*2==C}!Nw(I03x?)%1dbyEq zvg_=+x&f}eo8>0Cd{^YkT}L;~^>?|hyBp|cxIV6f>*D6R>8{j`bNje%Zl>$&rntc_ z=6bt+ZitI=1wF?d&$a*C@VoHG@cZxw?n~B&cXC}1Y#81i-p20t0xMxvxYOO@Zgsc2 zJKW9gZg-D6&zOrP)pgnSW&5kkaW!nEYhmwm_3WE=yKCjL?47Q;y~owDZ`jZ5+xB;Rm%YRO zY2USv*?-yfc89C&oZZPj{Uy82zGMGzEuFRNTr<1DiG9odX76{kY!!E0uiMS+LbljP z*xTR8J=pE`TJ|Nk+10L*3+)ZAp$qKwF5;TnTU;C0#NKQlu(#T4Tmxt98rRx2wl{Gv z@PYlvZnT^1C#gHQAMAJB9X!RJ<~jB^U)vwqi^keu@7U_ zNf91_Mm^zSXv`Dpt~l-q7oiDHH~`J{=udI7!$=Y89x31BmZ9xD;Q?rS=)fMP813i@ zc`Cxnl_Go%E%1bTyt60V57mA^$ocF6QiMEB;L0oPY$SLa)jkcRjMg{E6Y73h%R%@S z${m0bu1AM@Lan3F!=6dFT6?%abM+Q>P5c-u3{RuBDM_Q_Ry&S_ey~@XLUivmdj6<1 z`=F!K@YAU>Ce1{Y-M@^3GSG5LIq2?CQ6K3!>=W6!3HvzD@#v&9r=ye8oQ+NawcoX% ze%HEhf~jeEf|Yt=!c&t_$1vR!s-0$dLLJjgPxui!%M)tZau0h&VK3%+1f30YK!enAutWl#U8^GG+6@p&8Ux-d5p&Fa*r8| zu7H)4QJ){^G3w8QJVyP%lP<-mjSqoCNo!wpJ{(S3>sB9t;jbdF<2)m-!c|tvJjVC-Az1|aQ9XEKwQ_&kePU}%$g46Nc>~UY9w|E?5 zmRmjMS@bqfI1jzu6Mlf+;R!WH)_R=U=}wRP5lwoW+NshLzK^bhyBLc_@AkN_(R)0h zrtkGQ^~rsnum^g-Cv|W20BHzA^g)k#4t>ZIYP>w`3Dv)kc)}R^s3%OIk9oL<(4T(x zG(w+96QEC~sf9k3raAg_8jZ1M(lkTWc1jD-J}D7+K8=p$g*5r-i)lKbFQrjmzno?i z`brv&!&l)o7y+-R(J{V}M(5m{X>=aEm8JrHJIx$)eHx8JoqLML@Vg%FlZ1O2&mpM# zPq`2_q&WxGn9!I#4?aqxF|{#`#{S11?zMPqkw(X{DUJGMa~ieXmNeS;Pt&M9K1-wH z`#g<~>5DYluP@VVMZZd;b$^{k>-eS`-;xGX1O3ip465gUPrkU*yq~PvUbUdjs5ii_Rrr?fMOd6dBI?mKso1)I6F=etm+}R5E3n?@%)Lto@ zwMA=sG#0pTO(9XVwnyWGd)gG-6{ptd)H+Q(nR*`GFK~~WLgPi(?$r97i#GIV>~II1 zf;(!_H9fVi;~(ydQ|Laz=omobh`Zzzdj03FIYr9fEl2}*Y9VUG*(jaf}gopPoet= zljl+2Y7C{~Xc($v1NFcD#*Cu-0Pfp7YU7R`-7jz-=TV;!bE&v1K|80>SRi&&@jDjn znnwMm_5$6fa3AR5qy83+qWcW)2|en!J|5k3@a#c&2H^eH9|hfa@GQWizEXRE?mKus z;ZgsneL?po8q+D%hiXUAJ&Gwzqdru-fbLm%w&78K7JGEhqSx;f>O&nr=$?gVA0GAF zNRRGocsAlu-|n5J4LZuBdmNs9c%rD<8g!4qGZc^7Kz#$c$Ke@^NByj}1KnTf9wLR> zPi?1j{cv<*8nunu4s?&8^FM`-TWtq&9IAFvblhqSkYmxZG-{iv9ytM3yC`Z89W%(u zsM5;2Z^^Kx^RKJ4m zvv|hg(KZk9=)TDunnvq5%%giK-T$Tbfa}mBs&OP~(0ve3)BfUU(xCe!qyAR3tol;X zxI4$g(>F0XX5cxTnDafM`uB=7P0`gJ-T#_v({w}c^vK0%G7bJVuXyyg#muW7-Q$?o z(}d`oY4Xsw(@a9&Nu#m$UK)+d4QVtsKTM;s`MF2$!^{^Ry&jscJ*j>6H>8z*@Uutn z;mj`{y{?)+JUn$2^QTAmIA*6OwMVZat#EG8!Xu}koTKPm4_bNj_v(TikIvPghe!9h zK~InRJm~Au>sY{e6x|C14|p8*3m){im(hnk?j`hDc#b{!x9AHVhwX#+JZ>xczQ=uu zZt%G8(GNUM+rplT`vLvP?LhE=OaS_({IQkkk@;Le%VrRu|L=ztOF-mNO z?aBWH?F0DVeTp6g2b0ET;W26W9G>LKYL1@l$!dw>V=?R!4 z;n{Ew`AgArJ%Q?Z!2AhVv%@uT3u)H7@K(5u^m6oeSWEh1^iEHp^(8&Q1!yJE_dxsn zq9>rekeE;c=5hG4C%6zLCX_(if7KIQgudnpR-)?x8wZ!8>N5x~~whs&-P57_8V)6->61PSQvz*&q$kjR z?FD<2PoL~47)@H+AL9wMUt>MGe%Nua4`qmHOFSuo+Gc_$pdWUkCs6xM^5{BbCwqeK z=oBdBTpdRlOeM`Y?KF?BPj-)_&-LiqZ_o1t4bk&GW;=R;Cs5m5 z?lHfjS9pR!=ye|R8@k353`W;_%&krKkdH5DdB3duVYv}bJzFCrp)(iT~BBFf) zeeN5%$)nFLA~$>Z21+8gc=Q=Y*gN=f84kGzE5?$Ia8kvly4EF?laD1v<=#DgM_ zqr`(ESt#+K=rfqeI*(+dcX{-AOyq8l)Ijg?=(Cv!@uP@Ci62Fu>qPGN@C}(n9`NXW ze}uSF_|{A!#Fe7=|B;71e3K@TM?8ApA9>WH&!;1gdGwh?CItI{Z z)e-GC=<|t)_7$WH`iw`PRYack=riw#`UCViM?`H0`fNC&{s6uIj;IenpCw1s?x6SU zk(WLCY&7zUNALe4uXe8wAXG{+M%u4rp$Lm6xpjd;SDXj@N6yhWoPcLW;qxTDax zC&cg3Tu(R<&G&@FbF`Z$#5Pg<8l|k$vGnqU3(@{CfIbkb(LpenbU$>6C)B*5o=|nT zC)9qGzzE6{OVQ;X-8)CIb@XuZvrz3fg!mz<{f2NgdK{e2b>UO=Ho#Y*=HVMf_omUi zJ>iMyBOcw)Mj!Kp)D@#WCAbc)>j`c`@r&Y)M4Ng7;v|NT6n8X=e`2jT_f8Z)C_yC} z_c+E8%k}8JORS5>9fKBn^yjl;t2|E2oZ)fzqvv`ob2fIKNB3m0^F6v3i(TN+eOT;5 zxQOK+KgBNgSo{`aUMaedi(Tr`y<6-ukM7-KS9x^b7Q5PGiNhGSRxCb^sg2f#a$_aD^l3DsPX9iM?CO^U!kEVydJe4+ZuJAkT&DQ zq7u?xJlhlAfY$JY+Ez_Z_zYUh6Jpmmb6>H|(K?>+X|$dvyauiB2|q_0ctZRfZ|Dgb zU%Zhg#C~yNQwi@viBBcO$8q9GvD(L$9=-R96Q@dujp7kch+X3ePe{DPb3Gw363_F5 z-=OV)xC=i)dwDFe9w%0m@C+1xE8*`baifI4qWwG}u@)z8l#m#T5Ax`}P#pg$;Y}!U zpy)khyu_pTi1Cr0@KJOxPq+ca-%9utI@)6+=vYrk%)}>o^!_uxpGWV*;h%kJdfTV#us_Qd(Zg5}3Qzbvy3(WfyYT}(;f?4K9^PIgan>wF?*-#WdBW}J2_C&yjGySS zEzy(UWNi2fdJ3FMdIx$MoKE^NRAUIj`%twb=>2G1=Mq?rQ}q+*y=h!y7xbr6;}^h% zq-&xVdG!7=elc7^emhiS4)oqMewjz_MdMd^^gcGOa}4x8Hm>su^u9KJwa3;)buNM4 zL&sUS6upOzt1m(Cv*Q{Qp!enRH6FcJj$iN5`{(!#9vef|e-J*2-tP(TMIZ9mIQpzv5>GHz28n?BgL&nYk0zaP<*L`6VO_o za6F2Am2e{3!sD=UqP52nQwi1%#Sv!-=4zrX>66i1kKW%W@;nazC5Q>dF|I^=kHg1_ zP98@bB>H$9btU?G+*Gum$L)=>_9$)yI>6&f(19MO;~nI2!_dJVM|>uRc%1fYsK=F| zg&s!?B=j6``=Ui2r^kyuZY(<7<3^#{HaKll`vh)3bfm|r9rp4#wXKc;Tmsee!SzJ7 z-{1;RJqMhgr|p5$Hph8f4^;gJZVsyTf>S?gzroE$^)ooNvHB96>LicTF-`Wk3UrFc z^+I(F;B*|N9;ap1Uf?>T>Kkxf(PgO3AHw&HVaoWCq21iUJ$~{i)t^EL} zc{&Dg9Z?-8IBjRH#}NmKc^;>6H{avBqYFGv<6?i0)4nY9IE}SM9@haqz~j20i#<-; zS>kazrllUI_E-kX>5uwkg~xS6S9+X|^+1o)SU$+()W!#UoW|xM9v4Fo^|;>XVIHTk zf4IkK{2t+PQS@|=yBuBRap$0Cc--;mMINW|euXF8ie3pCRakD494ZXz^-ioFPFCeYQfNCV6=RjD6 z-r)&%qOW?Kwz&iTz~)-tpTKd)Ik}v#INHoLKwsS5Xb4p9&O@EYU5I9R++sA_p|w1YvF6tHxQEa>9(M^^*W*q^>v`Ndw7$nxq76I_zvVXcxHHj49(Oj{ z*yGMZn|RzAXj6~F*163*?mo1+$6?Rh79Mv3+S23BMO%5?y=V@!#wNr?ZX1ug6peV? zooHK+dk~F!++8R!syJdTH{o%|p%`Cr_&*OnDEjO#4__$uNfe(b`php6zbN)K6#po8 zE9yMkiKRSzq}a76K2q%CC_Ym3xn>?dQk>R@j})hU#7ByK6~#x2 z{RzcKiqn4KBgN@h@sVO*M)8$me?{?^;`BKFQk>cYe<_w2%ZqxPwiEMM;v_HbaXM~% zr`R`9{HECLD2`K{_9frr@IhWXkG&IZ?{PY&4jy|C+R@|G-km)54Ya^xKSMiv?AvG; zkNq9(>aoOFUN?`u1MTjy%=Nq;9{VoZ(_h6~ zJ#Xbs=wmk2B~(k6nW<^0?OM0Up;FUF@+pp-Vjay-VIwkNp5$2Fsa)AE7He zb`!eNV?RL;^yv37c?Ws)JC(eHJ@yCm5Rd&1J=CM$+2kGOu}`6gd+dwo5gz*-dZfob ziXP>$U!zBR?2qU%9{V(UtjE5B9_O*@tK;D`#-ed?y2q-GS9z@3{tS;*pPcEj73f(W zt3Ev2W7W6kc&z&TT#r>>od*}tmfGw>kJT8t2=JR#AFhULNuPk;3dEy53Dr3XR{L_7 z$7(xwd+a6XJs$lYFYjKD)&Ab+(eDQHbWVc36xA34dnKxK04)8>d&pz8Uk`h%j`b0b z)p4lZ!CrQyOAO{O z@i<~Hf0@V8zx-1@4*%xkyL^1-@MF8i9>@G^*VN;ff9;xk+#R#Cld2ems`Br-VPFRi2P|sG8;p_eN)ULfWsQABs!zqh}3L zNN|mq_5Gkf&&*e&17Qg1HE1CWCw((IB83EN(NQp-{B`IAIDj<|Jn4#9~P)OG;IFkykt(&b&PSaIJzpjinc1dxjZbiZ)y4XoQer$rHQgwSu|NVv6N#uYL|3ZIw!LW zk~NDvt&_mJxdtB-MG3+sQB;u(X3tNWIdmkM-LZ4BWiAkrC%RC~(95GGs}dFJ)ReI$M;(%k=FrJZFL7<6 zVz_Uj?mwKK%;hXj-Zix9C)LyVPZZr%msi%8;G&#FtgItJT)&_)2uhN3D~5MYHYi{S z(P*-M@hBY`2|Sc+pr0o2sX@wL4XLO>$|zB6Fo%vO8y1&GSCvPT4KZ8iWTS%7lS(V? z+~H-p$-46rhjmUiE*QOU>F9|*GbcuV<5Yf=f=X#rJh`;8QKRCdsVGV|?4(nU&?>5| zum5Yn|B|K|z6kTimsaXL#9T$I@G#9b=om|IS|&|A=y5%TnXE_47|BTbKa$+PJL?}@ zSSivtfsu=oGGv`GCN&G27D%N8C6h{%jS@xCl4L!?uWo{nD~gui*P?}yhSFGyii*?% zO*m#MDx1{klsuzTPMq*=#u%G+>YQv|P-#?KU~koy1(l&{tAa|anp05eR9hERW~sI* zsLWQ46jatwZCg-TQ?*k8*6{XEW|d>29rdL6}8tjSo>fP2C&C-%9$(`{W>T67IbMosB^O4e^!*hoXLwI_g=MXWMU*sP$?HaR$Z=0{fuea1Pc#f?P`{6PBF`JnwKh8Sx1VJ zwTnB=Th%2IjSgBxodf?~EZW7_m&{5OWlBer<+`R6?pu17jk;*gT{hpfDl5{Jwib&v z?bCzAi1K6>-v0Y^WoDU9{;Fh)%jYurxTvz&+2V>E(&c5W54)dJLDyLS6C*16S1avA$p6zT>0fOTEQ2z(h|&X>pSDF} z5M~;@>rk>5i%B#(A~8}MRWA<797_$xTRJI|O1ne{aY5JK2R@TZcex^&mB**OIkao< z;+^;(Bd_7*FD=j6~#Ybooe-Bqp|oZW|R;E zO_;aC{&sXi&iKC_E&AKh%(>O;+x?8iG2&! znN-dM5~-YtT4p4NCTST>Ox7}*n4)Dgv0nlA5>ia6loZ!?Qe_2q8J{UC55MSR3KB)yx^hqsn5@m<(s_*2~ zr&N8X_@ov;)hD(1X`DIK*LS*4YJpWgsRhm`SXVo>vrT5@tg}H_!c7y`va+I1$r|&L zVea_DG8gpD!VTc_6WC6gv$@v!TfXI$l3jGK$gu7)Cmr=eVV!Zj0Hsfj{2DE?U9EK1 zgkV%KB&$nSTbIhJQ}k%##~VIg_wkyKXBF}zueB-Gu;@`K-1VR4Js=_1^vYaw+P>T^ zoK~uz=MJxIub=O)AwENfm*rHp)2s(;94E#Wo;GJvsw4;WUtyi`!CpbXtoB*0oU7OI zep7XF(w@bIeE3~%Zk7z^UiiQDuSkky0PmmP!2NMP_ugZIPkH-ix2o+`V>t5Hu?^LZ zej0TBcgMpZeSTl*D?RwzR|Bh#G=)`%@G12<9Ab_Miw#d_Qvc@i|2KiB6()dIFaRdN zA~*pq2WF&s5hxc>E})$LG=4A&X2TJ1KHSRF27L;{6Ab-nDI0};uz{xv3*cC|gr^fc zDamFL$!-a!h}7U|PmRvNle3!S)$9&Dov2v>^tI-Bz>Pu87hn_o#!r$rgbpwa%3uYY zE>gQhqz=dGaI6kbJL)zDo{ZEj2A+J>JrK@-HSnuQJ)U^gGyE>na4M{XweT!#gl!^?7)PVS;5%+;ctX_}TQ{by# z0kntP;c4JWQxl%jG_3;#KqNJt4hO-Ra6LQ>Z;Ld;w#~3@v-{vR_yTyk)4Vx!6=@L> zX;~9u&|jn#_2)32oaaPZF9OQ9rhFU9x1oF+o?vl`L|TZny#Q{5r$nMWeTp)U70k z7rHcn_D~3=@C-19!P|MkOMRFM#O{z)KwpMD2yepIy!fRS#9;tT5GllVg{Q(bz<7o+ zo?*-3G@viTz85LVh7;g&SO>IKT+G5Nz?>Vt2ACtmvCnW~tK=qljGf9**biu91Z|9< zjS<*r#JfPfBdK>}Tj&e>zydgyUBV1F7|wzl;1QtBy}sj@0UV&C=*KAHZq#Oeao}5# zF~srMN&NCS^JCmS@Ctkee~RqGE@q#XU<)si`3QdDMKX2a0bU{#z)JXyU+B&enLG^2 zfMb*20OD>6aW|zU5O-5pYo?qGcf$LC-}hr)?nk@(Jqqu@R*}*yU;>u*fpIWjq%0qX zz!X?3G8G$6rM{`GT~o2+RO~nndrUhDE`-~GIW&zqG>thlojEj}IW&C`FsG*zYtx^C z58xY-8MHNnwr0@QjAP(hUS3ll@Z&6OJd1Iab51$u%q{`!JR3XDJ_~LD>^vJg&&IxU z=+7MbGq*8xf?}YrbN}EM9ZnLNKNcAOe8#_k@h@Qf3;M$qfV~&c#{R_E{x<@4*&n;? zk6jkdghSwL;MhWrE#%ljjxEZ92r%vg=7}sOz?Kl}OMAc$k!8fr@@M!3iCf?ap#2rJ zzmoP>(*8Msd4Ww1FrFi5`v{I5@sr4rwc#Kj zE{<~02C&`HOW+mw3^;a7T{sUoc1$JEhhypUvCSYK`oQ^ctH^N+;c&p7$J5^NN5dwO z6Q%-jdm>{y@g;r{oqnCnd_0-Hp8S@`Df8hFz&@v3EplpW_*LYzqeM<`0SCk9BCE#0 zba+$bjG=I)$eDv-GSKfcPll^R&cX+0O@P;d_2Vq+I-9x(z2O0oi)%qEm<7v#d3^DcK>sfOTI7<| zz&V%JfSEx0GU~jHabC7vuJ29&$KDRc(vy`6gRn8u5VXz$J#94C@2 z0Blpa9QeGh4IB*Aw~iRQ>lVN#chl#)>GM6<_Fe(nzOO#exBEDDKXG~gK)}8aQ~ia0f5?X~s)_=J0YK z&i&v!UhG30Zp;JLkB`6R+cn}~Qve6?;vQme^E13`g)wb;j2HHh_bH!08wuF=^I`A? zzr02}UwqFm!@bTgzO7)pO?zLj=4Cwe^;^dCEq43vPQZuXVaKgmkO1trbp~LUt(O4( z-b#I2xAF^mwV^$fz-%}ct_1w~{X6gzFYl=b*yo4gFbk;Xhl>E4{O}TdF7l&+6JR|r z^_c>U@u$7uOAAH_2)vqoqQ19g)g`hvT!=j8wy}0JjpYKLGXf@ zfH(GrIlysyniw|=j)LdKWG#o6#bn1}Asj2F#${q^4u-LCCOi(mh^aLOsIS)NVrugj zgli9jqs7$e1|Ny3n-9x?I_jPSuZgM0x1#m-h7;f^G4(C*O=$hk#5ACM1L|&A6UM`- za0$FBrV-^DHGv60nMVArtgmNruWBA3x@!9Uqri$IByYc9YD-2rk=$dU)mV3-7@;RjJ_-*7FKis zVt(bFynJR3FP&)uzl%Be5iy4_wnIJ?b13y4N_~fgz}OFaK+NIz`tU>HPccW#6mw*M zF-OtPQH=NK`9S_L^zRt@a4d0iEH*lBGJG%Q_!Hql9&@aK=fs?N0O0qN@W;uF^<>6$ z%HBXsp7NELQyJf>jQKR`J8iv~(_6zDF{`lYD(X8U52nDWa6fR)nXOfZnaemGpV$LNt&*k&E#Q%9l%mvha$(KB) zq1@%ii@BmH+#=>m>c5h6u39PP>KnvdL;I_-`Lz~00%N)MW--@wh8cj}ufsNLx&n4u z^R}4l@$L1*;`R9DhT6~p#=+_83dHVgrWMEFcu$@PI zli(`&mzbA&0X})@C0>-$9*EVKUl8*OHhpC_5L2(#1#Ix@17cpoudiX7*RbE~Q(z7J zAm)vI;A;3z%$vmRn~du%>VAv9yp0{!)8F;x>!tL-dFHz|&W;6ZW%=ugJ_m^=NSpr*I0@oBaNRTxPj)Gg^0|~Nw z!kH4(D1wJ1sQH!zwa${Db}2j|L7k-%)SV(hy@^1%de2HwzXlA4QzU3G2-Zu`@N5Yh z4UwSnB3{-qOoFCuV5qtL4-X}q) zk0dB~MS{*RO3(!xbjy~Ydrb*?bdjLvG6{OoM(+r$k)Y3w67=m1*rV@v67;)Cg8tZG z0DT&iE5TsKI)pI}y-tF{JRm)6EPO3NQCsK=i{NqKoZ`B$3N}hGyah~v+knp{?O`P_ z{t;yojBE__c_el26$8e!S5kt#LpT+vb5u{b1m2ZkbQ9PY=D@)~nbDU4^^bl8UIXkj z`X>p-IA{(XU?7YJ>Kj`JhQM-oLV|I$H4eXwyGDY2TEnXnjL(AO;Asi=%>nGc?>hKX zf(a`CTTJW>H^5E_CiRAqz?dc-07t_)a4p;g&j9_O^cC!oU~(^5Ailud^FC79X{zLa1ZaXWoKz-BY>)yy9ym^BHWlA!z~2`cWBU^e5MP1!jQ1IOo5 z@7#mnK?&x~0Bn^el&QjG;d_-(vZSVTFYHp2ucHDpMnnQ^v4D4gnQ%YhuW8J(q;!*3 zBRk7cK5Xc+ns@5iFxD{7@F$`gPBqu>JlhoPe7gyMNOHrU`AdRv^bZLmKL^&9JGl0TU-PNZfHie)!!*f6VR%T7HT_iUVKm&k71GtAF# zmz9-0_~|K67x(_YSMeJo>NgC6M)kF!mtQu{)E+RdPMvWB_-jt7*1~)FCW!kr$#%c$ z_bz+L|05`^mj8#e%SvcYkfrBo`KoR~PI#}hbE%TM>eIhK_E&v>Wb(6e{~=%h+T)(e z>tEmdEB~+l?)Zm%{mYD*@?*lk+SR|jm&)JO-&Dy=zuZ6dSN}R+roOh->g!M~Kc`xL z$G_#@wyXYMg0jEb5A++jl-;x3-^%|rzU={S-sO)sc9kdKtL2}T$#+$nuTfMrAQ(mz zHIX(ludr4tlO+ue5j19Wvi11V!nOpkHCfgNRJPNAVqprxSp@Ika9mDd>s=)R34@R) z7et;fXvUQl@^qtFQ)+M0G?v@2VU3zOKK!zpHfh$gXVXMHzjv>`yT@YvA+1{u8Qrz- z$X>g}WZ#13Io-Ro8_@5iJq713Be_5SHt5P-gWj1Qbd-_zXVCTeslB0vTwo-u5rhl) zx!){XBWpoTep*0yT){xZS~sg!cHsEq4H&p_qlOJQt3ESH|JAP9hT+7TCK@sni1pT4 z)i4pg%`AQPrkkGK`TI59ho09v*f414jzK#=9`xp$rnb2NFQqz=noTWeCOw;&{R`+= zO*+<4T1i6s7xt-XFgYuuI2-T{W*Gj}FEcBPex{~(BGx9SRf{H#IIlr0yQZ!mJ$p23 z+Jw2?G!meRuxF1xy?f;+=w&*w;OUvmqWyC_6y_Z`=Zq7IMvWSF;;ADiOc;4;uwnj` z{NgUzVOGy^ou@A`7mpk~WW=9Wk0~li*~(X2`Ry0vT7$dVkBlU=h}Cx_n~_UfaZOwg-%R?~*W13l~6 zB+K-kwS4)kSu2Xh6b&0Qx~O<`(TZA2XPPN9m#!=yIezT$owp7jJAP#OO3aw*Ov;Qo zX)|KLJ>>5QW^i0PKOoil&a%F+R!x)b@{P&XP;XAC_mR+M*)Z!k$#OQ!9mC@r$>zPJ z{Jo6|BA!7xmt7&**+Y4cnYDPLW@16E;-~4~JZz9`=#HVALw;9~4`Iyqb8+-Zm znk{?f4eb7Grxx{_wH{b^;l%%F`W9iM+}5!!d$9EHYUy41x}15>Y)g3{&;U2v2=Lm{ zRN58tCmweNbP%Mjg+8F0Hm+BPGPPnZ6U@zskgTjkI~`y{4dey4mCWzoe}2irg`-MK zM=cCC^qpP2b7Rq*zJsQWGV#5+noF&8WA$0v`WE(Ly6~mHHFUzcfNfupn&0898Ybj# z;xN72w9aYOvUww&;`L$;8`ji|Wy3`8)NJ|>9nd+yV8)EUcjNHGO<6y)_ilaJ`BOh^ zk{Wv|T4SkbOsmfC}$V=Ja*I-#HUUtv_Bj8c*9?I|dhy35G z<(H){uc`X8+GX;&j0d~gZO3Jl`dN6ZpI5KidF?ajVT^)m`5mg|2i5XB{w-hQ-jDB> zfJfN7#_?DFwoG~LSL*Wa`ba zGh511zfQ4J-=jxs*3fI*SmBZ}i#2X=HkbDNU1hT*J1cw6Zb9Hraa`neDQd}2d~k)= zf4US^kA=kFuJ+X;qg(nyKVnyiWUlbsaLO1iHEp=mbe3_2qqB{(dLiV`(FOK6JeTFN zS*oq@cZX6J#>|x`D@!VBWUf3NJG9G-wT-mq0@S!cJ?U&Z*YsB(wjF)?_GXpr)km*F zyDmfNT}i6L{&JLM`ixjOaNN+|#l2?^DXi#QG_kmFpYcP-jv6(6Ius4uzgDjqgG=_W z8`haNxZjlSy=M+Bo;+sI;4uRy6%|jKSTtm2uU-Dsorw3(&a{6HAinD2pPJI4nz?sP zHvVvt?XSNhMuD1Y+N_$bs+slxbKTBsOwrEA)P6q<-gzfhn~l{BR%`7B>ys2~WoLSqZBM@117&Fk-f?tQPeQ~>Au#O_XR-FojX=bn4c|7@u)>SO*d z^1GUki=V)5Oov1saWazI|0*wVicW6-%O>q_MB8&{-dJJ&e4|OdiNtg0w_B+zUFUUz4#QU6bGr>V=TR-bgLOg@C`;!ps;BD{si>l}A~4-NP1@&k9y9 zPvN09$wBfFDPZYFTtxIb3sgKy+M1rxy^~>0kE5{0;%zd@r4fZh30w-CU_DPeu+;Q zqz3(ysaGH_L}^owj=Rt869VqZPkxfU|WT&dV)1x^{U$xS+M#wg>KIFV7R3;t=1Nop$}<&n`XAig4|AT%5% z`7gZ2r;shx1p%HyF=O&6NL!G2;6S-bd(IDjMtT}#UMZWQj++q6+k_wvI>!;W?mH2l zibSTuCoL!Ujn2-F$l2?!>?P3~FOV&hLuv@tnoz_OOnbA# zl>tY|T+qCb9Ux@^k+8XSZk()Q$HVr1D@1S};+fa7-JT9x+gZWUyNG<^r58x|_~~**sv5Jw(S>(s%h> zU`Hp`#D31{SbZkmCEA~4uZnhz0q@e z_b5N`;B*LX4zC#dG9aI0Whph#*<0-;-ma67tOx`Xe>DYCx8y;*H7g4blKRe>mK`BX8zl#GBnVgz>>d}XOkBxKwV6}xx%nMsMXuy6tuDw550=-N+s8NAS`3+{ zctjFMM_ck{no6`?12e@GWBp&3;kYA61pR4A_;YZ9f}=*;iLAx*l~_Bw5Z!W<;m@(H z1}V^mE0$aXA@|_IrDISIS^we(48R|mia$C@RTuCJttnq#;4cIl5WLhUK}{)>bof~( z?M>B}Fi3~9f=Sh$iUwyxSxHWo*(Ak@xb2;Q6=HA{4wK1bR27z_op@(cXOGcp6o;$1 z-dbJ?obu!98T(eFx828>K&p-|Dfa|+6=fCs>_9AEk3Vr3X#IsBqk{2o0D+WA9_d6d zyUJadVP=4x@<2v}M->23DmBuzeJzL5h@S=~p#zD<=$A2VCs;2#9oGq4oY-eRm{(B_ zZ+cIKr=$pPvwLzqX<)&QP8A(;bhZhSbGy8z&OC>WLvc1@CO%z${kZ+;!k*5Wz_9hm z;zCDr4_kL`3yz!#4gc9)eY(DzaG}28_f)qk_beUl*!th;7WQxuY^9K3Z@ z@KHhz;e%AgZB4`OR!0ckfJ8A0?;~zYI$VT_2V*E*62YE@K^gCqeE6)sfkOL8WD&g!qo?$K32-w`FJIkr|av z2$%%qL6uSmX4i01_ulZ`OUI5a-FzxKA0M%WrRfOL5+Em z3vm)Y8@LQuzRHFId@#}~M%X_|Ytbi9!PFs@7TaC#m=4rxnWhW!W?v~IO8}&Boal93gs|)IP7MVK@V0@ zry3PJFd%R{Lc7Q7O@;0_91!CGB(s*m{avA*BLiEzS`Q9Rwe9x%7urKpeSH&cjfaM3 zJ60|2OTodp$w2#5c6r`K16^C2T6T8(Cx$wkhO#Q`M@Rj;TCo6p;Cunzm#_fI?E>m$ z=-Q@aAI@}m>1_(&m;B}`6wUKpE1BB72Uj@-|Ch}$mh*aN(0phK`4g=AQ&Hs2QCN`HcJBID?`x7eeYr6PGtH1Ts9 zGzr=RO^PklXp(3+2M4R1PJW@0L_AHCJs3MzAWV7HWQ^)L}{=w<#!P>8UA}}gD<`4BNx+C+!m3IGZ zWMHOS84aw%sX^KcW#NxFCHWZBKrjfEju-FVn=yF zxivd8!;*&clF#y07}V!;(tw~gxP>)N)g=J=n@Uan!qh8O4#;xIyS4B6lU_jM-lY1K>j%MSvK+E%-)xbW8PPDa94RcXC=@g5T z$?b8o{CE_Km2wFK95>O0X-*(wj2%QQ=A;qvevl05yjH0)=pQ^5^rl{BQ#QOK#V6$K-bH5Q=uv z-NbV=-EBW~M~pw(t|=qQX=qeE|f!JgRVw02(2sE)e3PwAh=0;le&?bhDCLj z=i760GBco}xtL2^)ToLUTU={iOiN>$UUqSKFccaL&kMyYs*n-265c`ozNbUg$)dy? zBQDKrL`<2MNK9G7RQtf*$l)r3*qbp9=Zb-h5H|}r$mrCy+4A!p0MmeJGU*$G*JtMF z^|=|>g}(u8=(kNXcKd9ToU=}DJr#Iv7oJ-#!4grNZRDUGc)N<$X{HEVE!M&Uf!4)6 zon8}=={0WEolE!b`M!RAnyfeLCnrboH`E)s&%bMa*nq|~0}K@FFO+U8#sB3J{*$e} zJr6&6AllyZD#k89-?P^ThA$fvs zTPD=|l*pk&a^x1|a^%paYlHYki`q#*F$6sFUNbd6{qN(Knu{&wV)MI4{{89ktHsaP zvdh?>XRIwbIW5*_2tj@|r`2k0&3P5?MywDt@bglZJWfkNS`s%dC zt+&p~(w`f;B^}$DopHiKh`r(U$vDHhM?r#L!JB6ZQOkvd=^S;G3538n_A z)AC><>U|DLLkGV_jWA)F%(aRg@-Y~x?96H3$#yGWU^gjuvHf9r!9TQqHv#SZv3yzX zPgs`Zc1>Rp?X)bSKQ{nj`&<}a2ZmQbP_Bbcj4(4mMb+^On#0`M_zI)~YeDLRBhIH= zr#n8?-vJ*m*rS4V`Qylk0~!P+obXbR;&z!*_C7{RIbLfJQ#k=n(|c|zG_V&taE}9AXfl< z3TEV7*bKnop(Kb@w8C zP5AyLslXo&jgIdi)OvZwsI@#t_AbK;^HE( z?y{oF;!3)+vNF@5i%Ny8(4q=bB>Vf?AzPc=+{Xac1D}y2^*$1~Az$ma?OB;RcdB<- z7uH|Ab7@~FYj?}g-2E+mBbMdy(S_Fcw$_HXuIyCKEH`&|kM!;GH~NCuG(KCM6*Tk+ zr@1F&psy*~f23N#MgPmS{>I{Hdoz0_`W!D@S{M2AHv3*l^m|xs-KV3^D@|y>E!tj| z&>kD_)0?zE6>FDw>#m7Dr##x8dc5)9%ZmG6Mf7`QNQjNs8EeNpV&iosw9DH24L^vs z-VyEp)97=ET7MR8KTqx8x06snszJqGB+hw7kguhRrJ3za zN|PswgX#1Oo3O)+ZG2vQ-Wo@<<}_xGBky?plY}tDWf+ZpM$KOl-i}fAG3lFd|49HR z6TS^_Gx>`K=%2>Dn)(@G>|Lsh9lFK z;5zhH2T0aT<(ZqEq^RvY)sgCqZpn}1w@Q~0ZT|`1DxFjbeWDFp)gX09A?aZ7B0EHg zI%dK?MVBYdXfmdmPFWbsWX3co=;^pe^{ZrJ3{7Td!2d&9HD?L#)78nOzTVDISE#+U zsS!>~m97dH7aTTgc2OZt#!xG=&YOa6|vpi%s52{L|MMHk*bI-__`;YP`YQyy~uPwk(Vf z&(GI)v{r{^n!VoUZIKUO*5GTa4$ZcBJS}V(A9d6#f8Wt?S#NV&ABdi>3}-4&s?6yC zC+;B8JY(>iAz+*g9f_ag;^|g9srnjB zJbBO_iVJNOc@>%Ih@{Xi_B z;Lxze*R)GM|EYI0b{t)}YvD-u=`V^fjOM&MS!-HsV{|IK`$aSY;2fSdV16UDdY zJKP?=O=AB#+W=3(2l~X)!Z8+RWBs9tiBSI-emn+0=sT89ruJN z2-zexwr=JHz1a%8T^jEALk_GIM7E?@@C6er8onxjv+#xv}v9LPvSI8jp1C3;_f0} z%?!w?<-qU zV)^`Vz|sXh&kO$-Z<_=DFJu@K0~X`OaO(&6b)8&sb$ZQd29JCA^Bc=+Uly zgG1YP3=VJIYU$cPxc{<(%ACw_^Xg<*|AEP&uC4>OTsyed6__6%*)=~lHV?z>7R+KN zW|7AQ-}gOewa771vJ$Zva2r>F3zJD*dJ7jLp*yHsQ=PgS-yzXADngbQ720vR3z^wo zV8^1V_P#upm#(sVb*I|IR<(eu!)VKhp-1=YPm>D^lbs`(jP`5fhxSmp@_2VB)ZG;d zSq|_1;=Sn^uE0oAgT|2n5T^N*O8xmDZNkCfPVkScxVF#O4evRC9s! zVeX_e#O4h;-Lq%5drOwg?!7m>XHPh5+S@-A2?mCSK&%%p9L2nY-HVIe>knh@AlS9Y z)a1|_csLA6xQ|{36C^O59Azm!Pp^Xu2OOvjm@jxRX*ggvM61A{iB=hmdj+^^tl8u@ zM>x9X$00^+w-auTJD7O5PJ`B2!}5`%ON&R8FOG(NBc`zB;%8XiNN8Zha(v}eE60y5 zt{}9gsdjJ+8?23NnHmDi;G^R#{rT7}nxg$js$)fR|ED);e=624Z|9;if4;Fi+TP4w zkG_{w0;u4)QsTd7j{9Ck^n0(#MO?%d&vVAw@jMc-MY}7Zomirn-w!rve=ORLadFXG z^ylMBu^x}B4k%(hNc0x{e;R!b?K+9xqWwIzgBpYbN;9EW!fBT!P% zuRPCkhr$EH07f0YGTpJoI~I=-@kOSZ>L#o6xM<8S)FqH0iN0c~exfdwutJH015O_m zcayA8AsA}@W-FAYDTBlFlODA~%?u563}l2e56*Bq)R6MK2+R>;=!0AMOkjqp!`Q*7 z2&YX4N3)Sj9bkT3G>{W1cup2UKiqC(oWjnN-?hyNM+IT7BW^?DHR2MDcJ6rni#zWe z3*T}}rRSxW*zLVn_6_-~TvzrgAOMb$5a>`W)kw!4v?E3k79+tpD=>Eq#J~=MkH|1E zaB`90U`Vnp91M$tm9Z{5T`$F5XjB!~Z9Zr(g)?iVtE8s11}`eIRe7D}s7oTuh{Cl% z<(Ih3Dbz24M}FZG9leaDPxo%!yLW5vbb5Gcd!BlspYwNjG#zZ|JhJ=Jg`-_9%j=KN z&I2imToRd@7`P%Vd;=#`h~ST$4?IC(3pjU#4+-c%wEsxnma_fnP1>JIXg>}j6VG`z zp`G}HXn%~_v7#`_a;pR1S}ZHMV{iu%^5)^}I?=t=ZF6hxtyT?$q3AL4lUxg9Rc7~u zhx~yNIJf?~wd=r6<)iGP$mEuYatkJD5HFLBawkph!b|kK?%yz|zv3q_MRra)C#Au? z_r7!R?!`9{qXVP?!v-rLw)q$?5_A>q_@0>%ehib-Vecdi1FFyI#uyJSn32!Q?r-1s z`>*-gy?!O1AXM=RfGO%Lo{%r)E1%r{BYJg;{!eex{!~JHYzjZvq@7QVo)3gNHf66m zWfN|W)bD>>)vU#M!J*Z8{4~BlacH&uJhkJr?FKl4_aGp{Ej>7XpAFbv1G!G|Z4c5d zjWS+(eJ}UKF)pW@Vf27))?`Xs2HTCrX~GE`UxWYq!ME`ha-G+Dn-IQ%V9b>7fmIg> zM@9ydGTa#)-H3T_L3vMS=_J`OfpBnl8(nmN6Mgh^wia+bL?cde#4EaOl#l;mB z#l_|8m#DN5MKYqB3|_4++E3KQT*Wc{8mGrBl^zM^XAmzY*gc@fOsOj9iqRuJ6SzK1 z+4vdWQ(%r{c@ZAa6o5hu=AugnMwCCZ(IYG8{3BuZWB>ZE7Y<<*c&c1R!UGd;dkTe_ z=xvATRDd66NJxYL1{fC-fX}%_8jfADn41k@0o>Yyuzrn)n6%Z zC_iV?1)}o9uz%wfcy$gQX)l{MqpPGHgb@E#tIY;@Z|Xc4%UI-^BXo*?w0jH#g)`Zq|mxS40fyNx7Z# zgIcTtJmYR7}~1a`ueLXDm*>(m+TqyHq=*n z>PGvN?d&d3V}nG>_&U^tCa{Twu#6DDTtrw# zSen`_EJM=;Hz1Ami${+x(x1@CXfQZBVm`Kd6Gdggfh@yjKVUbelMo}y)M*0wLPZ((fgtP zsqHcKkJ?Gd5c7+vf28I$McZR)UgA7rY96(d5Fwt!)jWyspKO7dlFXMU9Wb4G<3~~Q;A)LXr3~tBdHr8=a{`SJ1d>yI$-fkzylnF#%qBcnobi%Z5Stq za7zYUf+|XClBlAz0A4{A^=Tb*si;G?@ZE+B1wYYCDs?o|tg#xRJ#O_9`adp2LY;Uy;m8N{M; zw)d7%9r1m6R7XWQA&2Gl74@aXTxl+2W!m~9x;sH>=20Eu`bol&-r3Yu;>^qyK^=9T zBGQ!OVmch{Wim(I@mJ4|A_o_{UYi)YgH9{{0&3WD;lE@r)`-G6ywZ4Z#LV=Pr>d|Z zLksE95&oGRt3mTomjUq{6%?r9t?+IL)ZpAi1ZseUHUw(;+P%8`mdTQ%3p2j9@Jz*# z#cjT(Cew?Rfzar6p;7ZMtICcxhXGpGjh<{B!oN)eKQAq0LzR;ep&M?W`ERrsBK&`fh>|R}+Elo8YwH;2f3l`Y(tl2nB)vP*Gg+PVt0D$0t9B=3% zkPWhg$Gai;A!_)#FEp_w>}@ZG_)y$d6`uTMlgHJh51OWWs@sYoH|Jlv`B=v8dLOF1 z!9@eN9;&8r%hrJha}q6E1c8X_o-}{1;`ej>TlE$tK_HP4CH6rGPaXs~VcEhfa;x0H zDj<mC@nF3~n?&YvSj}u zs%V`J$ruaZXloJ&`9~&aO?T5;cTdA)@*T{i9}9l&QzshQx%IHUVaK}X7uMkH?TiDI|D zC!9IaGrv3h{@{S@S#0iHTWo2$eqxy89ehlj1q87)Bq^c=tRcDmX;o#Yhbnp0gEejK4b`27 zT=QsPXl5edZfva^Nw=D}g~qmFmVDHF_P8DS>;(f%Zs)QUpJfl9rJrqm08tzWCKjH> zos!X{GZ}TK;QwvXAt@F^H>8m=nGCBq=^Qqek)cGE!z2frmo3a}?lY5LMkchIxBqpX zhARH+_P^=t8{SS?th!PT9zi5;Ir^Y)v#%oi1v~`zrh0@-VQ=%nT&x2ENorejds}m@ zdCqiXz=%&}^>*n%v*@1Z7Tx@@`L`m9^7v?yZo_owO-Q6Ln)51|A~dObC(Z-t9_K+& z5Cz#Iy$is%5Cn|L6}DrV1vn-~R>Xkb9CR9oq+bT(9Kfh6Q8 zK&DTVePcL@I3ohpq)?{at>N~-RM%>#xqfi_+(2`ke|+5UpOB0FyV{zzb@_K^=+f6l zdUv(?XF{QwUVJvbrGNcJjP+g|;6LILNS7#$0&Xr5>KAj0MZPDeTcjk2BIVY5X9vFg z<*G(`G`yv^*|Yu?Jg5r~x*-1xv{zq{yp(jO;Ux~>lgy{M@?bCl7Ony=r#wisQ*%M5k7656EuLE6I%6?NPIagFydj60ip|z^RzHk(xa4vF3nWN z7~F;gq}hlxH2Tvh8X%>yljL`+LrMa!9jibl*PY`JJ)PR7xNk|P-p1F0^$FjQ)FYbm zn`wk?(h04SDuIyTe|B*~4O%!8Pc|1_GJ%t6N0DXlvshf;qHWwKL^z9Zs2ENUx5e$F z8rDMV2#5izB-W8b3?Ii3cpwL$2Tv@Z1++wAfqKvqH_*OiKug`ip)fKUj)V_ejxDo2 z%59M;gjC|++_Au?i>%qM`K>^A$QL z%E#g&&Bc6^0&vKXrsbL0BmhT#c=&2dHX=4G?;mI!3~UY}{aV)CJHOkQKkGU&5S*RUd% z@vzxpGC9l-E3Yaqealj4G8J0Bg?A6YQe?-wGbLBB+=R`84FR$SbYa>_#L;8M2vHZ& zH;&G@=o|L+ng1L;ZL#SMR`Zp^%5Tp7L}tpJg>Bi{?S*Wf$29PV^MyN}uyD!k+QNx; zS~$^PTetz7b__Dw{+#@Ke%h0tqn&oqPN!WwM?3Ajou6LO&QC8kSo9|<7wsCA?*Zd~ z4U3a1_J-efZxws9hxIAnW2cm_v&kU4#~)O-lZ}c$mM_b@6P6{pUAw_VJ1vXouess~ zY4$winh)SPObURGT#y(OY}>GFVLL@Wr8lu{2cG)!tN%%9%|sq9{wQunyNVC-Px3fl zarG4#ifDfl_H$B90}#0B)n3E%WL1`p^f|TT=g(8Su7=e!n~t}`w1L7IS{^R-k&q+W zgDvomOo!;HOM}1*q)wRUH%`GSS?&0br^^BgKpDAIyB5Hhz*9Hg_~lnW^{M~#v;2!f z7qN7|^3tKuA>|PgPCd9F9FX}630UF6Fru0fjbc2NAemA;is~GQgikyWGAb4$utba5 zrnkn#V(pS+N4G5Aatnmx?w026;4aJ342y69`D-14Ku1o_%u?JyoYF`zA_ihMrJ2lW zkQ$|oblGIyC@ou7C5xrsLTAz`Im=243!?Her7BD*FKdIst?TpcI>5*E_~T+^Ted7l z1?L^w*p_B?VB`2Yaq0OQF8w?y=O#(d9=HL}N;XJ8Ch6I1@-SwOWpL)wa~d+9!towu zwvfOeS&BBVLiXpXvt>D*SuA}PEh3^*$ixZX-XKk<`Z|1A;OB{ zaAD1(lD1CjzYs=@9l6A{NevG5KxnAZ?U2^*%s z;W8-y4!{lJ6gPff3lx>s4c`DNpc*|Pt*CA>iQf!1ZTJ#8;JIlMVG7CL*3rV^fK+>t z1hKm<=nFR1dt0kpkuIc==hMlAiMvWgmgBO(wzWE->$Py*8X!BRis6pN+?`6;Z1VDL zs-n%&r~DV2$LnVL+j|e}tSNl*zS{czJF+s~-!xuVH{NuhHxlXfMFWNQEf6;|7`wh3+eT-AeWAab& zFGKu6m_3UNizn})Z7z#TIH`K&a3xKR6C`OKKE=4|PXPpF1U+N(MMrF3(8?srdz5ZQ zK@2;ytJ&_rNRV}w2e_z?C`RV$+S(i*?C=dLe`J%*TOVzl>)5)rGZN`!ulU!0*fA$E zl!xURzKUYhPl-`q_zQS)J}wEH)Jh68q-S#fjWU0XDC(llq?~NkDFo<5H2WSge=#5$ znUU??y82Il?CbFLg;p%9bL>_B`eU8paOdpo+$y}s`1|IH9zT`% z8zp`!Hn45(d>@@wz~>8uR>xg+buRpgPA?SdY;B!eWmUWx9|82y7PgoYryweu+(b-J z?%=Hl+mH_1t;5FScgpC*y??mfzh6J)w!vk@0P}v5%Sepvfe75!|I;5o|9P>@b6Zz` z9a?6&e&x9np%dTNR(o~sGa$>D1Ia#eAffcp!UkMQakJ&{B|D#9B}opC*832Z&`OK(zB!vwdB9XpDw5{g&{g zAwyCbc`5e=OzQ3awqjf5j;N><@aEE1rDJCL9jMM()ugrGQd z`|Y=ng>Sf_((~-I&-&Tk-mCf|y;ZKOdX-yARGh$TtFhTO;Vg$EG69D(nKeh9|#Go`di13iVHhl@~}Q;P28| zu@v0YgDHNNFGZ}Kn|fmHSUMUTEnNx5$@^o>Lc^g80P0-20oojes8hN&EDK*PSUcSX zc@^XiMotl(@hY7TR$TYkLP3qi_1MT6v&{et&E>-{TZiiQTvlGVUCvQ%D)41z`-<2_ z>t`A$si4rD2&B6UFNhIga=S)^qMe9P^w)?mrs0Y9jT)Y4->Bh<_Kg~zXy2&eiFQrH zBYfi(zQ^PprsJj~@@%tlmoSdV2&*yN5#b%CwE``VVLAlXWMcMl-eC;%Cj7x;APsvZ z9Pb{sex5ss;V^%S+??4yZug~dZY!STkPan`rwqwj45tygDjQFm$XhLWXs#3;HjL7q z2RS#-k%z!7ZM5XVo@%sS3T=uX@jZvej>(=4qh3CHHg4dV&`U0d!x`fHRSxe0kB}Mi zvQpfIEFH8^hDQwEWD@bW+?wjyq!Wy-)KkMA=YyqL$iJKA%;LI_-IkM0m26A?Y_F^LbqAou8)g_cJtIKUcLpuc6amx2 zO;(*F{6&~_8YwFf-*DPY6^bxHL>+NIJMItZPSpc<9Cg#KTtuHB4p}l4nUG8`*P4}q zN?}IHNHrV^>JVw>aC=RL6jQqHy^&Lq#oeqTemht*%<-rEiY2;T8P zvAS90#_hDgrwl_~#eT5hB+tf~v{&NZE=LF67rN@fRNaE^R6UaSb3W)SD9D7bc0pZ1 zT{SM|^3tM0n>E9c=}7IXO-igL4W(KO_Q|61@}i=$vR4bs%M0-{D~Ml}sOz@o!o9X} zg~!?O`x%N zNLg?(x$}WsoHp77N<8a^!5&(!d=eW0F+f^Nb>ak>BC>~fHJp00zQO8EyCok{Y+*KX z#$~&*IjQF7p#~Xp6FDpCjIvI+NAT2wP*;JqrrN~}Uygg*a%FvP-JJ=mFr1%J*yJuN zE$B_L8ZjG9iS&^NihyC$T2K;QXpf7zOJ?{1@2Yp#|W*yKKww9XDrRtH)=Ykb!X>?Z7iql}@=E>^JdXpYT zb}lhz(22o)>&BmyTy6aD$jSeMKP)|gXsF&u3UW~okNh({e8a)Vnb$lCQXl*j9sY)c zZ$r+hRD^#Mt8R%O`<-1~r#7-IZby>~!FwyDy9Di85TOow$6rXhqW*$fE)#0jl~UD- zfxs>TZ~-T3{tT4lP9(x}s-1XMCF%*OIH@B}5&$*aw>%pj=j@3R9zOu(rThqhaa+=) z3Ra;VfcDM}(jGJpEh6;$D4!UU{KA4$v+|<+4)ZA0+E-k67EGcy#*hmT51&{%Wt5N#X17&b&C8kGGN;M+H;k25jmkwbg zb=Y^EE;yNiaQQTBoY`yy*WyZ<%Kkj)AOTWB2x#<+se3o#>9udto3ll;*~Ci^QdzDp zIM_0sft`YaiiZPfj=m`!uqZ~Ty(sCc94lhFQ^1pf(Lm>?yhg${0#7MkdJd&j)b!|T2^$nu zAd!Y4yv{A?ge%;roy3)JcFELAu&<>h@bb&yPkwTb{KC>yTOiQ(X{g=M!9P7k))Ard z{~Tk0qgG7OhvpCcn=*X&!e#sahtmI#yG7ECch+|R=U5=XOy~X8K>|Yzb z-o~<`vO;@RT}#b3I*XkZURQZ>K>?BsNsq8c*v;~P!L(dV=!(Xxu(Ocq=4peuBatl4 zYzXa9$EWH6fJKvhfa_bqc<4`s*IR)i{!3>{b+~lrm8d4Ayi6v7zK*%viz8V}knK z2iP^rqh~^^9UZHoGiL^7W(LlnM%*8LE5ZI1xWo=dwqhu2cr~icVki_kCu%5FVJM=8 zQgi^MYZS`_aUr`PYABf~$3IniJi~5PU}uH(77sgvhgETW`+Mj~_1)eTd#J7(a?Y^u zaCOkcVe`gnlXGDaPY;c`6$kV232E&~AIt|c=!v|3wL#1ofIGc@F-Y%Uz8R^bWyyQt z9dJgbqP`*%J_1T5-5i;S2xu;vM3QbYN#k4>Q-vSm9%>3{yVY#sF=d35B4;8PpVQun ztjvI>yq?U`JZ5HFhkKPHEiCVeH0C|~E!)7ZHulK+%D2v*{g%96xoY~|SOG#1sg|P= zu5yHl^51oo>k+?WMR+YpOfen(CNWUE)Ddh$y(I7#6e2G* z7#-~}4^pKpYi_y;)!~o`6~&tHpH?snTuzt%k<*dO`nm&`MXvp5+$7Z?>0;CD~C5cA1ET|q9} z6=kS7oS&PMoyn8%BSV?l#C?ULa0n5i<|K&w1S!UoomiP`@IY^v>L}vRWdHP*V0de| zb2S)PLb=8MsosM~!ygFGZ5;@2?VafJPi!0LU-GqV@9KjGYvzGS-(oxFvLEC`sfc;~ zscal(;Yr)5o25n;~<*x*{%eQfsKnsEjB6#TK{3Vni3$>&1JHjn7s2+Sy zS<8()Yq_`vDZz5GTTl^q3lc0yxCIdlipP-IcgKD-`hm=RgTa<@#jx`FqjHIIvunU+ z8*s7x+$)H)UA~FW(cne(c?eD&7haZKK&BiZ>KbV{I0)@tK5b!Ob=Trh;@ZQ_doT^I z5%|_T{fo4HdfbiDOhJJp)l|Ej1r-GqMTK|*&syu`>w04M0Ml8L5rK4k|KP>(UhPGD^9;_Rz-X1EPZe0kx+`rH|KHj>}|1v6r zOn*?$nhn2PH&9hIQ1^0p7E9QSB}5WsEa6>z->}bo-?DjRKQTN6D3ShM1ZhI$e4OjK zZJdUjHbS?AE=?ST-OE0-?@)Mb2=(!bR(4U1$v}vm=6R|QfWcDI2TfI#fHk;W>y zn@y$IwCGrA#CADb>FB$z`?|gmAF=j|<$t5|ap7vd&gpcf2_Pz@1(6IV#9H$c11bTb z<5U;KFIN0V^TDhQ>jfJT|Ick_mOCO!h@Y0U(Jwf48 zJO+{ixloW8!;gwu|0dmOHS!x9kJWq{Vq!x0<6)8!!XN*;$n0$7@4x`RPvt0MyHr!;pyM(qwE>DOC#sv0@OwXb%EVqBVtqWZ6tGGZ&Fci}OWk+A2t!R*Q)$nyCN9 zMrG}cE@@BTo;sRF=LOtp_RZ9^MF%fENtnvz2@mzR(AUyuU3lkxX>cp}b;CF_n zCkJo#zc*HOW$7r@U_FULNOf?HRQy%@oeP}!oeP}evPZ2}wI9`L#ZH3?C_$EkoFDTM zkxOx&I`VoDgrL$iqLH*419uzcpg^81P6VPPa3@J~R1=ftVKP}Sznpbm;U3=x`*LG# zXJ1IZy|-6+wrYCE7%IVsyZ!xx%70*)B9H=Fv5e#|Y5l1-JpMABaeWP!U&-3m1_pM`eTmBN1|bc0RrW z!OoLL`VEyBCAR@C*-=$i2n~7p;ZKjuU9$RA_}Wi>=!P3Y(_7eZ_Q9#e;}BJONiOEv z5)M=PGYQVsw7Wd7p&hC0$*C3ECiIMhgj#VG2rH<{mnQHblc|hKQR6FRw8==aA?`yu z+1l=6#h?|rt?I6WpRzPxc#Q9KnD6}9w&3LPC7x}gP3$(OfS*+o1$=!TxS3Q5%B$n+ zlQK115r;X7xn~1k4-6(sazf`MCyEarIz*c1op-XiUN(Ws=e^25;Ni=-_j~a09J(wZ zwb8tBWdKJoJbg6Hiqrz3S0GeHk%Z2;SI9hsP>HRhta?@}BuwHK z$r2{5E&E(l%4`ZG$eEZnUPhP*`Q8XA7Qevt20?s!J!t}(0zwO_O0m#~qnwCN_C3+Z zW7l3<*+s?D10m%KJW@s`vDet2z<=JNj8=JE0z)vBP0DC#{6tH@7-QxfAmRxOYgdl3 z-Q%IqMEKYW0*sbJR6554+O8td?s`VE&HVJ=NiS@@x(CUa0lPZ_GgB@5DsGumNsG2FtaSX{b zj>MFNsgubS_bVJ9($tB^syal|o!ZDvbu#dFq3VB?-?XIJR_Y#vClpumaW>J8W!!^P(uPr5pzPyrg{4Dq9#7^5jWmS^*2D@Nuu9{U=ohUc zb^fxVu>?(8_+LeJY1z#8hyxi!B6E0;bXZuWY~fT|(}<03qG&%PUTsMfFyOrWG>}NL-iX!X0DSfBzdvz z@q!mpz{=~2c4Tk zwV;i$v($+sX(&FdWo_61GdHXpzG(0Lca6=Y&jlCvUcB5tI@%u|8M7SU$1KOL%FGYj z%}cYx?fzr?R`wn5ogH2oncX_HGCYgrIEazz!3(mb0?A3I9+E#i&*IKLSBy(|T3ZzC zQrWDtytt51K723B3I77RB*AN=ap-QaUQyJL$6JzSb@2JA#ongQ@SeHPe;S2Lnm_${ zUm)Q7Je*vEjUl*CPWBGZvF_%Ynr3C%*I3_yMfwm12O~L-XPsg4k&!7T#y`vnyU5lf= z%7G4+`%}GKcJ|x(d$zGM#s2NHXTQzve_dVzsLW0enweQ z82;e>lSrzjAT7w>069Bjkh6;*XL#Th7YfLk9Pk=gy{6}pTBQ-92024)=2oOcdS%9K z`@+G_zRqBvq+x_j0t$r3}%QKC0s~z?2f&JUfQ(;eIM`KG@PfKlmTU}*897me^ z^?Lml|L6|P1l*tdYGq56L1z}(6$Ii8x``pqB%Y)~oI7=ELD}%vZS)tstskn{Rl;6| zfAwhfu2Q7{`^lfq$(iy3nhZR=18+Tw{c~aeG6>ef1ueu|j{cBb3o=vD2Yf4= z4y;}5nAdGT8ovB9lmGO{)EBOhJ-^}^G!bf`=E>ymEadNeLI%6QJ6#w4%x9WOFqbnP zx(1)Xcv3;v_(WALlAvqKCz=YncDt-|IulzB|IB3gs3~}stztR;TlvX%F#v&Edytd} zzVBJ-xH;)QRf7m%p~AEwx^M^x<3a8lJM1I`j$_s~Qk|ekb?V$YLSVNpyyuF=pkDvJ z;3<5^qx^`~te<~$?Mv+_Mcv+V=b=aAwl-ZtC@_9cy}Su{B$n679j~4CHIm}Pkl{W5 z^FQn7*Vp;!q~vH#P`+GzMK#(<0MYC_q`- z4bXX`%#m|wEA}#(1LvkFa875O+(1}5FiIemVewBtK*aYEka+GKYg-7M?OSMN4?MtH z7y8Zy7TVakU$KX_gg-toJw5R8@D|J_gatzIGiG;;FW62H`>(NJ8(?#gS4!9%)pWFg zBvR$rJ-5%Tg!_HBguk_Q^c&x3XlIo?vV2Xw8ImA#+6i!t6}@KCw{aUWKPmDLFS*0V14cY zX6{i6iLVl7{!Z+6C3aV2*o#A^3HooT` zits}Y<;NGcOfC3(+I>BE5d}q%AVAtf$4dEuz&zw^2zV&>+I;GDPH&sU>8ax z;M^1-2OVK&-xMHMyKDxKJIjj-@QQo@-cvcM7B=Z;(yNEh`D z0)}6u70HSl-@?-IV-_0T)L?IKePoh`$8&gMU3X)9WBKaU6#XgMwY>M6rBH{lk2@Wd zkSc|eKZren6b7YF2e%2>0br`q8z~r*Finjqmq;a)e;R^6tSM!6(DR85BLZ(?S@UDtx{fm=3=2reHc{rxIYg&ke5+wG7_G^?f4;c0C)u;r*B2 zd~;7E@?RN9p+3KU{+VZ(-cx>b-lz|L_ki6T829 zWSOVgFVZ$VMg>1xAWXdr6kQC4l}UFuv;ueyg4ssPos@w7G+;InQ|AYYyN`haZ`rqx zbn1s5TKE5t|9<~E9!$bZ9UlDVcsc~UH^I}n=0TD598X^hzw554f4;FNQ2B*Rx&HB& zmjH7kg+Jc5A8#wg+cpE!6W)_3g^-3rA~=5ygxURJrXOeuw8I(2^V{E&w)~gB;D`@F zR7LtAM0j4xS*rSbY9Rdpp=kX6gt&_C2|zmbG8K^iZ;=mJG7ZK|^XY+q1CZX`4I$*J zqW1j!_9FKF_4D0VT!DFR#XR%*{Q`{!RGti^$M07nke(!S(rnqCx6iI}xwA14l{{&} zc+p|dg~S(>iag*K4MZ2hqVVF02hqiq#eng;%x!!r;d3WW+}niDW889c`25HVEN3Jb961vjR(>~(vPZmZ6aHd-Es;q| z<2-?4b{stCY7C#EH#THUJ$2>=9fU>#)d_Y>392I~{(lFmr$6|`;5`qmKm64%^?&Ir z-|S+AEK~WT@*+IP(v?3bFO&2LIwJo_FMoS-ZEM6iYjNI$&jHYjQN;A+8p1@?VWZ%OybR&d>FdRv$CZLERu${3Qaw${;lk{l-nQd)0 zrgMtYCw<@C{!QgKm$UB6GjjEM_=>^7Fh{9lPc_Zj?c@YUJ00(Mi(>%JM;6ojwE;qq zpx=XdtqxY2*BDhdCqHnt`X7Pe`j`c*5l5I1d(v8(Bouuohwzf}5>zkD&&w*#E*4fW zbDBtw7qfyTx)JCg-m!X-TK>qQTGG7at8peU*!|*bnX^j29}`M;?4T7E<|lZXV%60h zzDjISgPy}F7V`?KoP;QNF{r0Ov(%|?@s7IEOZoZMXN2gL%0wrvZo{|+xpb`8A< zZ}>f5tzCSz=J0X@Y+4kmmd>LyWXM3Mm$*ho0&X(tmY2mZ!FdCQxo%WgE{f_-udB-3A zz|QuuE>_*=SAMK~i*|#YrlM}D_&vcOkKa`nQVj2TKD=i1kN3&cb_-!u!D;|MAS#4P z9^^iW)vz*~Of}s50!}tI7|!v>oK{-rgbS(am2k$@kNK8PoLEx6=LX z*0~OIf_pG-3=9|!4+R&H#SQ2+4mm&m9+=;FyYfw~osPZaH5O2dIR2tPxkJUZ120AU z<0@OA{x9(UE4=+P_?i4(sr?*pzgzUj&sbyp0fEwZ=vx>kKfSsy!Z^$=@pvzPzMz|g zc031j0h%j!;rRs;;8PQVy+OOkAP#f(DST?uAqa=IsCp9GrO{YJn2vrG2d;s_81StE z3J0R-083g~yblXuA_S5^bA~U=8hlws?z^>R+qB2i)ZzTX>6k;y^yF->ugOkcEf{`` z*$A694X+i$vqHZN2Kx~AhZBYo0&zyT5J6`!zVpP@WD?LL4vv>N%*_QJZ_l-(K7dsM z-vMfatPdi&na|D5+>|xRT?M*kYZ#JCHFf{CXWO)LK75W3=}K~fQ69wzQM&*ZZy|kB z*+m=RrjI=st(r_exK7YP9W4(h>=wfIYT{%uFmg3GuaNg43BN`CTnE!Rae7g0{LLSN zC^`q_Qz|LS1Mg64D^uEP^)^s3l{PP#A8_?1DZ-A~efy|VfXu=uf`E#(!ziyjG9t<= zQ>lRSqF61eD^Ctl!Es(<0zT3dw$(!LPX>-~0kL3|+JJ=uVgZMHu=Jodt_KH&KLDi?##|un*2bBR?(G>mQ|DZ3aJ4hge*8-> z%?}Ol>>lp!9-a&+_YaW?P1C)yBzLeP6ZeT`L#yLPUkn?wfsGU?KrvKZnAOXzZ!k#LN4} zwiNz&$nHwF1z#%KRFox91t|u@e9O+B9QR@`LTjJh^TDBmtDzxxbzk4aD2(&_5Vhi( zXzJ@8yXN}sS6$V+yeGJ?b?eZ+(P@ln7s@51Yj#m!MPSu$<^KxO*6_VnX-byrYOAZ9 zlIga1h~00ywAL2)V~F0(Eg^#)OdeoU0Z!^OHWq|Or@Ui6lQYSg&DaDt6nA* z1ns#H^G30W9Qm%6rmST$?WC9T6?naTNS&RiD99Zi@YY9qs7Rg@vO>UQE!@;NmpFU7XG>9c7<(;zz8_=51qfwFbvWS!P_B!AId{y5FUi z7sMRM0{JTDP#|6TpdG9Xj}~zdC3IEs$>5?=OS&}y{WlmIkjGm%1r?}$D2|$oWzo-r zZ~ApG-Yje{ZoEn>ypc_52-+j5h{MD9fpc4xg{_4nNcJ5LvGl>t&Tu-z^`YFtQ@tbn z7!0<(VfjlS976j!CIlpp?&4LDa3MHtqtp}ZEGK1aBF`qvqvU)HA&M?!a^(WXCh1nO zV~w;|^++QFzaxXx$Qq5=6y*QAZ_Y(5Xh67u+1kRov-gWwh zzA{%sdt-KH(G5$xWFOTroeu4Cd#&>wV`UQsRVHuYuA%VW zOnv&+?vB}}>XF8}PE1NIUx(A+;*%kY zWeQVw0A->Bg|KbXfu0a7P581bgAnKy6grL1DF_{DJvP*Q&`ujcPr@S2X-Qe3UbSB<@k=Zs?rp96{=X&hGI$wT6Xz&9o{qBJDtf+2Zl!ceIrBXz5Ff}!RTN^ZT5y(iwsLG|%U{N_^qX3K9wYYP{u;eLMZk-Mah(V(YRb~J+ zs5gqB8n(AFE2HR4Xe`bS(^7kesN`c41(j(Y+wSm3mX5CN2n>!#K2qn;@aFF97!wzu zT!Jm9Voq>QCUY}q#C3c{L}p8fJ9#$v1r^#V@+zRKnWS8nYf|?C1Hz3bGNNt-^XnFl zw(aVB<+_HBqYJ^2{?Q=hmt%{!;r8#fjCJ0&c&ukKa@*j@$lz^|U$kN%gzZ8DB7L9V zzaTyA69Sf0mPg5_cnOefmQBYwNER z?b|zz;k2=qJNl>CZ(DZs&@!F-)l~l-eUlh`2plNh6+sN1%&CC$`AMo1-U1wqsNwoz zLkfM72Af)6Ts{_la zY@(tZzLZ!rFuc>WX>edfZapg>vDSh9;dUqt}-++(B0@a8vT|XV^426m>xDqnt$5V+1YgdJpKLCrU6Sh z{lL`IV>`NIN@ zLRIjL%2+F&!HFpbAB*0225;A%kyxoydj?-jK05d&(v$N@C?Ur@O0-7_a;l_%elRaf zMsTTmZvs?cNasd^>S-JcoDB+v!3_gh52y+pXNY#m@3jem!r~sSjQuyDio)g(@vwxATuLH0N`O+e+pY{gnu!di{UpM z2j8jkF(seIjnmjDON}j!EzM0E<>U-vcc99*FDL6LN8ww`%AY$ldHhY~W%b{ zZKJ3>`BjnR3R0<|O(mT>5A3^`tjk5h!w_8E03_}d4k83B#Cs4~fK)h@G;m}Kx*cT$ zwS#+!SUnNw&h=~!3V_z9xgfd)7T}KeL{#h=8W43zR9(CvR}#J=OSxbbs9^y)tXUcj z4&`&>H*AiG%`}`M_)TN)CJV+0u3?rr*Pwc-b=7WXS!rQ&QFC6dsQE-yQ`6%(2*3N| zxdmslalFK>-jLuTuJU7Y`>}Etm`6`qS`YTI$KwLec74}fRb`nQ{zYwHj^CftSNn_M zx%P&Jb|j#G?z!fcmgYaJe_;buD+FdoW&(tb@ujZ=*fIW03j|UKZ8^qpL{SAF?&2~D4`w>j6f$+(sH>6NVX(V zAzRJqImO46SX9eJkm6(dcCa|^xd^M^m-Q-L*7%f!IHc*u9gu6yhH(U$gVeOxUV+)0 zbV%kbW{e3#kdRAT2D9eUa`c8A%lk&YTVrbtk1SSv#oFOCG}Qx3Y0t^_6)Jbhy2CC0 z-Rm#6piBaUa7nI(K1sN99tq@DN|8aqY{*0}Q(_7Z@FLcM;&2fO%%eY0I)qaezGea_ zMo|?U3HQ29Rc&wuZBs|sc+cJU+|>GHD_aQM)OX##3}j@<-l&BYh5p(FKu9 zjaH!G6dc|fPi09FRCVD8o(W(q&aIx~G4MA-Y!f*+Ss@X+ZAcb?OBAm5_&xgT`0p1E z`+b4PJNACh@4sj*v%q30$Xxq+xyx1l^+Sa=Tj8Ovd+Y0w>v-Sxft^{I3&Xn))4YCy zbt;v0%5QT+b#=kq^|N}`rdOV}jkLB7+i<+caJ;ji0u@S5X)HKgoC5+Wvcft7xJlMQ zA~66LCe-OFP$izFLl`u0zj;o4z_#_$402xZtWrE07nLha#soVFkH$4wx!MNg!E1$Z z1rd+cuU&D)+QE0%?%Cd0S=qRKPwl&3EUBolT)Lli?7#HV{d23?>!-3;=k{N^MV>Ag zZdAV8IE=T^-eiGF$eu@DsPKU+FR z@+Ql&yxX#@-McKwj$~Vw*LdHOIApP%ggE<7nvfC#lt2rVK-l2|g|<*Ag|?JZD3m2F zgi_ku0_Ac`=|)hkd#YJQbq{u?uneQi!RW}rN}ceKCQPmq7dleEMreeudy`g?<^qgh{eP=z0%uW=^I{*0C$JahGQy01GxzFJcNbMyK1mm zU_M3#Y1CsQ`>_H8BRwq*2HN?j5g5)>pEa9&(9QH5O%h9rVPW$N!|{Pq!V_1C&4Sr* zOhH%iB8 zIZCB#XOU~K(dbv;O|O|U0j7ElvZ>V?WXTmX>v_aItPubo{v#+dy!wybbL`kX8)Grn zK%kVq!unxSnU!wkh{Km|1cOLZ27%O0PS3ca1PX#O9)j#(`v4?SBG4%Yiyk?0Y;NF;~6+$9+l_7+KiAQ(_0XGZqa_h3r&X+0QPI##l zK8Bh|MF>ge=jrUUFq9gctB+twEY8!L5BbkuR#*8ccJszVHhCGadBw}UUa9>2kBr!R zYS>Q{sCQv7=?F2(6*}T^s{yS7a*^5q1X92bF<6+wYJiN&phy1^r6Cv5Pts^thCe)8*R-E$58BG6Rq#uu+Jxc9CK_? zZkY>!7tO z`)JYf^Mg_^+qCk3=k{~d!z|f9F!3zdh(M*xauaJB5Hta7UJOUO0^ks*u&W_^D437m zQ<958Pld>M+B#u9C0ihdm^r6D`VWohKm0e0C%Z%XMFL=Xp?su>eE|;qC63`@Y0M*D z4GOMu9GQN5h|_z@k#%OXWW(76hOgLgS`my-CKNJ~0xQWUpPQ3u&$7$j_+(=a9_9d! z0?!Na%L=fXRGLB5oKB36UfkU}!bN|H1~dI@AbOFWWAY{w&x*n5fP^xE;x z!gyDB4N~$v*?uy8@wHa0^56ene&1z+_NSS&vO6 zU^`)Z&LVCI^%wNw<}^?grUmIHF%hjm@DZ?gS5`Q<01GOD+htht9A=Kl@&e4$5XfPC z4RpX8OE?SxQtx#3Gwt-Aq0R^IyR(p%V_zu>fbV0)E=Re$yW?83xti8xV53F)GV4|r zCyh0x-BaCVlm2Y$mO5D(Ovyq!=&>EbmPcqOv~Pp?vH{zUNCRqnYJ?-$m@qvbroBg& zE3i*Qc+P-_qb+6tR>X>I-t|%`D}oWqHfD-GSBjqG=Ba(ME8N!P2XtpAky5cp>-Fva znXx6E^?~iJOE1~JdaHj$UnJfT*wH?4bnnKGgrdRi;WlSkeRErATT{EIyf*So-->~F zW!zd{Jlit8`~2md!)@WRW@~-Pp6=O$+u2v@m)RQ%#%lw8xjAcFmrU8~3Wof?7PEN* zlU8XW$@MS@>aeF}HxZZQ-ut%f@y2mJDJUUuoZ^(RxHpV+&X77FxkQcuM?luJE z$9-iwLIoi5sHu+ydb4Z{mV=BGo<=GR=V{iQjC5YQE}H>}ii8@J#Zu5Q5;Vy2NCL(& zE{7VWq^%G)1N+7%QY_IbVW*9sWFac+%9mM4 zs(;f1E#<9;Z@D-FiNskM7gs%esO2`QarKKx!eZ$Ni^X$pnlH90o;ZmomO&$_CiJQH zp?jr{V$s1xh;0I}$T$ag(GW{f_@=AUS>Y(hRb|x9lCzYQ$Iq*$PC^d&ui?DFh?uH3 z8CI^mz6<)VPODwsG)0AQL`~ek=9AvE3{fAOsRZ-z8 z!ocT`+^^M~@9=JPzXldCw~zhK(_LEJ>xlx6C=<_jI7!T~Me;mw% zoRgEo(S)-5<;sW}VnY?*{_f{4zo-7GH$L~tFS6C$(qmn$gWW8>kCrgsl~z!j8yS6I zq!T*<&P;Gyh|akd_@xntD7zERx`^<$@=V_R99a%X0iy=wI|L>8m*2nVdQ+B0lViHR z_LYsXM-xwg`n)bZk>@v=tMX7#q)Ym#_iyaDG>xgt-Y8j>iN%{qZzP``u7D9%m^EOh z0Et%6J5+vPn5Y?E7^0YC$w?z37GmUDWe`i4lXbHi=|_;{zt4gw09n^AeXmM9>aCi) zkc7gy{a_VgkfCf?e+xM#H3(ml4UCp@5YXD1K)zO=1|?muK{@P&-=WdHS{2(z${^VF z5pa_+x+&1NX4o+y`@!VNuR$9QS0!4t zdMm44)o|6$myd<*f!c78G)i&)WRagw5dp=}>meUBe z;npEj_Gn1Dudi*F2FANL%KL^$7~r&A4wP|1DY{bzVy3^cFb%uK0P`0@Hj3gYUqG%` z!RN%B6=`2J{k9MCL?dAa4Z;<`1FbD43X-=tw1TZhCgM>Jo9L1+>VW^D2$(@IC zHo($|TR^cQ5!R~M9OM8|IO~Z^upN|@8W2O>kOR!Lur#r|l_NlVKyw)OR09fQPF z=O2Mceac_AZS{kzwlx5$wn66mnJ6yrdvNLUJm2(#wLQ7OZ-P(;(2PtAkVZbtw4jK5 z?XtQEvw}>sQ&dH=D=1W(7G7m|i|h(;+OXQqhYoGtc)&k1Uh8tzj?efHkb-F1J$>`c z?%gv(t23pB%vD3vy9e1_c^!e90|_i9F=o;TDe5V8Fdj5#Z-QU#ng~B?_VvZoGB$Ji>dfu$R1B3xQz6?ccHQ$EP1jFY|H&E)^JE!&!e%} zm$8U#d^tOd%T3!>J-B*Xou6sv+#~)vzLLwAKG?Th6s1y8%wtdI_S8N&4fu2eJ~>!Q z8-&XW*#b~mQJjwovd#=D^Z`2GoqP);mbh;8 z)0wo{eUahStA`_f*~cdP_r-g9;4p%>Lfob!`D?bVmTp1Syybn;Eu6Qq z_%s!+BiwRp3Lx)NmaI#-N^UApjq1-R*^k&m3QFV46Xz-Nazz}%Gp#mlDnrIIS}Vok zI)5D{)Sva&E8{M?%@K)v`Hp-?IfB>8nvmM+C=&#f$&8b0opMwg%{4bqBb$_Dymhju zufE<#FMCmu9j~8%`8MXiNBTQvev!Yj(oZjEz7>&Nxz_x-X~Jqr^x_TE??;fvQ_A!! z5#MyxW3FP*1huz9V7{xwJQygLT$vb1q5;i%4TctKe{hx_6Cd!~WTz*eH@`C9NdQ2w z!-sTwN}WCfLUY3w;V}3h@OJ$o5J;!*D$aX~4Q^b$`m9hm^?9#e{Fry{7c0+?yC>PZ z3XW1Rt!(lF4>u2tt?IjEicU}tRL>hhn zVd>*cBhAU!>8}M>R@E^R1a4%lo8f|1n+`&RTy%nNKXVi#rAj;pVjaLZU5v)Xd4Tuz4H5)Y3W|V^AnhiW!bUP3Ih;ct1 zBu~14Y)t?;r-ob?8&l3n7cF-dOhDV5sQDb(&l&K|z1QoN$LIUV-uA~ImOB(x#F zLMBzA;$Im8+t1AqsLBs#7y?1vxbuL7h^j3g{pc2Y)w^8vb#C_v83K#RwWA7%H&5^O zX0eyEvZTf=H@j075%aj*(2*xoH`s9G5Hu1MZ;@HG*0qIBx}var7l z!v2Z}V1^8HA(8VvIMYesr|7&?(6}l~iZfC1RR&ElK!a~G;VD`K8g+LPXn5${hl7Ue zPb9sZ_19+wjn(BO(CDyl$*4ImxwurZMGv_JQ7&9=;o{~+^Po8<{VFLwf1QMuSoxz& z%k`kuTcH)rxxc>x;`1_DeCDuWPjht$bhjGhunxc}5K7PiOs?o8qmC1yreya!0;&(G zlZ$X*1eBv-fYfO)G!r8XsJ{YwXed;Oq&y|~V)3tevw33wcv=B!5Xf>WN}kGcs)`oL zPQ|hpsd{Sak6H2BpoTV$b?jB?;)*Jumt0|+()Z754Morj`BMIEYiRYx zj~uJ?jZOLY|A<>d*@UFeM7#3|>GS7*WQaW>y;`$WL2fD@aCU1b9{%rGLx1$}t@|yx zqG-#$py~^kwBFE$jE_%-dd=pgjcm`{nuj?posxFWX3bVi%D)T)gyCsdG z9yiIyxX58CEJ!tmrgY7Aha)g2k~tK?i>cO7ZX8{=?)s(BZ_%nsJJ2`0>vrx<2XU-ruw4Z+zqD(o-+KNB{+W0`aCLr1JZa3$5AIBTO}@gDz1| zM>vUqLYz;bPfad`iRX*D+eKn`bgV89F`aH}7#(l*$O6bdN zUle(z7)3SQcc2C~z#__x!t)kUOuidM6o1DalYYT`(z+g2((PlfdHqrqr)C;n$mTS> zGL#_f5nAI>0lp=kf2~SMtq`DS`zVH~5}qK83@cBGXF-CnVxUrD8MsR_H6PNNqI3QHsMZwSFY8njJ+`&*Ap zel8|%INpEh+&bz?MrpNX9tZ?$I0dHmllln*!x1by7gXSlqI%*~B8>-=5Oc9RbKH7z zQ-`eNVIp19*@_l&Jg&)LaM;$IUN_p=IhJ7InK&9$MO%Kv*2Y-Yrga@-;Huzs?N>Ai`O_V$sXj?QPK7uh9GuHL@av}=k|P-BUK=GSAb zKhSJFFE+J{Mh3L|vG`xuj)<fjmeoTDI=&Gi6icFm{ z1rnhJyF6o$GUI`cud|OxFR+W(C1+gQGs1>rKis*Y7V{N_UYPsHwqgUNq~gn*zvFuf z!$lDqAepRODC~sl@1uK!!|p(Ls5G+aDW+N;XbWO0>r0e+$kQWbo4p>swvO2)mBo+t zJ+H}%2U^yKmTc_oJ@35U-j$4tevT6G3hIsoZ_YpiO$(*bnU>vT6zIyD}a^A z4@PC4F-TJopb%PZghH5)b3ofYgte6S*TkbYd5i1<`IL;&3(m;_oM}QD40?R0z?VYa zNA@Dil%7wp6VhMBJFkARZSH*BdjQa(ZdxUe*fbQ6 zbOhJLT2==;BJrW7^E+Ax23qOWvtmV0_vEArSw)@aXKK>Vi#4yPuV2v|J13&Z~~10;~+GZ407 zM}-x6`EiBKU1^{w87r74BsZE=ayA-rH-tHn$j$rCi<*qiKx}nm^Tv*jjm@PcU(4y8 z#JczPtX#?ZHI}lb^@;9H(IuO@fCbVCHnC=4aB6C(e+^cEN{`7D+lE!Z5Q_@4vw)nm zE5+pCKoe&mSrdUE49zRCm*m1GNM$S$bc%bNF~- zSo-vaV1+NJ+wQ^Dx+xi>+mYo$*Gv3rH}fKwX4=Mbpo&%Yv~kVT4|IewXlB3he* zs?H>&Wczm5){n(5@P&rs@sR|w=UZE+LVe8_RJXA8J4bgFN2~+&9TO8BSl7n2Elal) zgmag*AhK2z)&gNg45(NL2ngY}$|2lpRJ~ffOfg9k(vp^{kk--?Cb*m>fzklQP;#67 z8Bu$As?4q`7Nml6UlIT+8|~|+_w1UEt!&UFv^}kfe)D+Cs%^Vx5<^1?SHd@B+OwW@ ztlL+$G~j6+Tl#RYWzV|0^?Rb@J$2pVWgU^a9>U7ySahnpT>@JYW|1z>LLrtIGmumV z2BCDj2eTrMt;~Wpp2t;MRaTXsXUXDW04W>Kqt=|OPgM&kqzD^Nod;J2Jt2a!GH;p2pFd z+RKUx~lNq*9(o}3@;b*HysKw(S;b&cl! zLi5x-KKB=Sp2u{Lh?!WxO(z7 zoP3^N2?#Adc_VK70>2UvT72?WT=^J32?#AdNdr2;PXa=VPhN+UFY=RskbF{HFrbtC zBp`IQD_`KF1%%|2n&g$oF`yItBp|f-w#S)`eN%iJVZowshYX+7cPQ{-h3tpon>eMB zPqD|1sj$xeOr_2j(2-19<9R#2{xCVthMpbPZOEKJz%MqNZ>XQCn zw%P4mwycw0RpD?|AQE8*CpzvR7Kc9#P1SdxOB4M83Azi-Pk*RsJwqEBQOey=0?#N< zno_hOa{<-kRJEbIKJl^bLmy#>8`#WbY^k)T0k^yjw|pLR%BQd-(uYVHA<1%HAsU-k zh(^`wEO`|<9=*8`cTZvDGQ~oAmLX`n_p7$T2Cp|9VawX$WA5@B-(rWGK9^f-^EL$i z@!^5ivW}8Z&;V`(P+!2D3Wbh%+?I=|BGQNO2ekDFyur|bDNv9T)DfB6k)R1cGajg( zna(u>1k4x|Kr5O7Xeo3d5^oJ$%49X2%bLQ0KsX%m9DI}I9%|`d#tx3Q2SQ%<;)sovWOB%JIiDt%-e`(K<%sQTowT`g+hUk zv9uoyca2Z5gZ-`E+EBnBdbNJvP#p6Vh3hbq7cmkGqzx!QWDX$NGN}NKq$ofbg*At= zqjE~DB^hSKiX%!x1$koxMi`~ut1K0%yqQ&ZFLxh~U7<_&7qkv6?an8<%(afwKTVsf(9xp4d#4g#wwNeWF>;OH#{s!;p;aa)0usREq&B}J1=*Cnm^oF zRTT=c!^+x@ca*f2edXJ_~hN-2QsU$E#@LOgZG@|tRim# ztH2zu#i?icDf@y`K=8YPbcAQ6yqda7YaydSuZB*INGS@Z=LRT^7A6_|u(Y5;R-LS& z##XJWH!16psYN8tXDdRnP({$~3pXuKw2nH$`1BigxVE;%Q(WRHtE_4C$48b%eW8lt zvRW5qY~2iWKZ#+GF%SYRywqe=R<$JzOG$#`C7(&}5Ogb(Dw9qaEkW0N**0jmDS1w? z&X7P$u@{QVNiF?wcG6JSxoo_#REaEJH1tr zT9G2XSZclQ^gk6;#z`3==LNRwSPl^KEeKvk!fmp&d-^uWWSoQ@;HXuENQ4l@PS=&# z46@FJU|Xmt)GLvaA$STQSq+d4;rB7Y7xKealLgZ-DNIpMeT{rP*f7t96pXLi)jTTm>jow|~b0gtH0J6GypHQ-oO%1V_@pkk4t)Pe0d70Uq_bRfP=*Q5=5{o$~` zwAvVA>91!tl(!6mPj^Qg{-!`xbAHZW8*Z@L$AS15YbFr54~9UEP!OkDzhnVd(mwH> z#-gEgPncjc**_DK9s%lZ3{Sl%2Y%U&U(|2tjIS~o5j`e)az(^p4M4bJ;^ipwXVe>v zM5MA`qfs}NZZd0hM%}O#9Ku>{t*%1297P@xpU6Rja7zX< z)xM|~I)ez(4kA?3pqSv{C<#JHREd@%BN_|@il8l%6-cM{Yc1)m-2?kx#K7OZpu4iP z+#O_zaAW(b@eEJK1?;DRGis9a6^w#9Ur1P+ko!jS#H@8`dVE?u-%=}&GRsGWymOha12Q1w zA(8?41poFCoyFYNGqCxGm>|39OP4lZd2ujxRwXPv=kD(N%JbRlU&CUmt5yia^b0@W zbIFiJV;6#m%%W0WBO!~)doUZ6@--hpwE~E4IxW&WQO$G(vOkgVNle9TGMHCDYe+Mg z(l!ZZvtcSLJyT;a8-|PG9Z6aH|9+R1abHdCI2C}m!R+fPFLS%fN|)X7%4BtO;yI4tNjM%`Qd?BvEGep} z@2slt)kggFQE3<9zXDJYj}JA4C|aFJIxf{pIez*VunK%Zu?lRJwO(l}Q4A5%=~e7$ zO)pmgsTqpGCn@6${DlH(xiJ=mffD%^sDVfqpXZF^n;~YRYzvuq!aLT1m%qN=j~BaY zp#9VFfr0p^+Xw0!{GX<;KkX;hJqgpAfMgj8;)d6-JkyNg{ZQOM5U9`!r|=LV_((wD zi9}_jn~dbK(8)>b3U%kcQ<SMF(C^PQo1 ze5fRU<#~mLruvDHZ^XOvrT_Skle=7_fzU+#H<|_qo61^>XE&8B0aV_GvFxC540u_H zKr_&l8S>Y09~MfAnVDImI1yE$l2ug%0u^|f_+K31E^nNkX0yWem{CZMAxQ_}V@LsF ztc5}Fx8M_Zk;q>P41E(};z-g%J2bI3nwR(7P3^h?I6f)_r%=Qy?<;`o$;OYk4S4S1 z^F^4FIFykN%`zpRa-Jc|%9SS7zgbo3^Hrw2*qvS!|Dl&OsUG3UKfp{5;mMTYhuxbG zg~m=sd-d_;Qkj-aWC*9}VBSwp8JIjWCp7|PE{E4w zo>}homQQ2u>~3#49hZCOp5b872xy%x77Gt>B=(W7k5^LFNp6aEz5orYp2NjTk{b<&*8Cb0* z-XO3Zr3rMp1g}*{kUE!NBPG8m?on>5Kl0)C1t78dXgyVs>#&t$U{;%>lGnzKP{agL zIV#n|}VsleWj!0YdDU^|3; zay=MiwUf@Y2TO=5_qr`)HsM1 z^$ELCLu(tnWGJ-mL#hul&oUt@v2oJhp@xNi3vgrz?Ts_ zI0TGpcDsRx4;k)jSZ=PcB>LiRr51t@!8hm=9|>n256Eiht$C`w_Wl%7Jb*MD>0efNE4hvxH9>3CGyL(a=v zaqmm{y{iy=uZm4*!3erb)iDH!Pcq3sSOk?3vG9~+9k3XQNc_bv{ncl1-{0(rvQI|Y zcFOX+7I!7v6;+k5h?jxoq5PTL^x(-5FF)9u_G15Gcft(yFViEBGedPS?c~X!i zE}*i1G$*v}{o`F1UWh%jXRWR@NesRtZP+lP9cq&a!m91!1>aYxA|T@gctU^-H9kQ0 z0WwK7S!wW)Ys5{NMvORgp5hu_i-H_;e3|(lV_6^w z%dz}|VUvuTHYa~MBh+vy;+*tPZFX+nI$-??C*|67*j-2&^HXBf1DniBclc&fdB5#v8Ak z-M4S{faArRpSk&Dd28VVho3q800pz{#ns1@tBrKEJtX_x)k>0k=|bG#fO=7D`AOX5 zMO-@p(()%PxLat6FDapQpm1DJLexnIU4)?;5maQOLmU+k#es>ALK>j5B1INuP~FU} zhAScXLgvR|#3OSx903fdr$96v1S1c6IeV&c*lQ?E3$!0P)K;BVXz&g<27|TD`ogqO zV`C_-P~Th|+~Ml3e>_whtqFgvzT1V;+FxtzNHg{{K3>BEL^c6OwS36%Eg*bdjwZvd zL|I}C9dvva1J(&EfnGX9525x9)vR<2E{EGuh5A*X;v_xLAi;=|qfQP|8MWTIsi8KS zR+82b2sGd=THDYN8usF-y6xhN!m6<^_p%PAGJCpz zqlZ<9v;ym2F2DTL<(IRqY^QWwI*#AngdczNT&{QU>siSaSKNQa6)88^j2rxx-vE`- zk-ZNBM!rK32tnANgTTi8fWt{;3)uO1@~O+&cD7x*4!=>LTfc z%D4koEG8bstyHo}&!!dPHH@@)x-0{L`}5Vg7Uvh-0GA4vW1&UP>qYeJ!3`JRfW(Ic z-Qd)v?II(*5^xiz@aeHogaY?24#iFLpj)gO*$GOYDehcJmv23=n#XLkLw+0Af&eNZWFyahbf!)q-G;M$|MwldVH_F{UPI zARhw7Iv{9rDSF8_%k$hMo-bU!)X#qtNud z{63E5Yu7G6pm|2UQ@iW-EzfMdgGkQRteU;dHh~sm1E=6IIJu0-D*LAfLszpntByt? zNhp_rE^ui<7-2QMXX82DW`sS?YPbX;uxfGgT%K;h)A7r*KRkB&3u5uQ>ispx(0wdfT#TpPjhS5fCA|?YYvlGeTaRI{RqS;3&JC)3dkrVFj;1A5{9y~ z1tGgEy9`n-J(Q$&WTw;RrC>nf{E!D1er7)knlnlY2MUTT8U9OBj>R_@4r$>h4Db+p zki8}TNbqRZoW4oyhkUX|*dX=`Ipod|`yrovktqiN-rE@XUOsTyAt2kuFlKC36+nx} z%J!-d!q^s%2P1d~_dJM@8G16(T4l*dTq^6J^AEJf0TzG>v=`5_XNw4hWt2)n06|3q z0uS3e;LorWENzj}1 zW`ukbN96`04>SV1ga2i3z4YzDZ+}}l`O-_n-~P7uPk;KupXr4uR^utyn*aBwL_9&e z!NLEsypt~tzx0xH^5n^(m*^?-KcK;<1TS!cp5lsE%!>gkQ%n*QE)9@zOCI%>lPCL6 zzKk3F{xAQBo4_-Op?&(~%Y!eS^#1-Yf1;LaK6Wq63aLGMDA*a0l|3oqhx z5y#>V6^r?Sh@sN~F29p~fjt3)aBH?Ax=ydzx{*kt7T-?bTkiED6-PGzQN>w&CwsjZ z%yrCc7}4Xms4y&OrOi;4kMXOh8drhvsH`sg(9#d_n%sJT9BL}AjoRc%iz4aD<^{U) zIbOgO<#YTk6me+D6&dMrL%Cc_dO=2h+Tyly>9kOoRs_@%?dWZ~1$wgd30NcFVDC!l z?A^JXq>{|7lHZF)e;tiJoz#x?r-~K;gNh+Kgx6(&)B;~Jbr~oD3YZ`zKiilEuaMp_ zi{3&>u$axJ84EL+5+>Dz@NZq#jLYKx))jaVK-7TzvFvmOOtM`u+nNn`QhHW8(hJW3 zSxySbf(qF9`vTCNigD1rbAY|`{?m-!{(0gI0CEtf0+9(9oxTQ&UoG-;V1I+M1*v9{ zw5=EPR+6@L8pMAAd^+mF{IXUWiIq)lxl3!Um{BeyBu<&L;;1st({@2xpT? zPtsO|5>bL7!+`3s_@y3|QE*#E`8D{Tzp)F@Bh(T>icM)x@@NP9dJqM%{K&CW5Aevl zA&>nLkEESIL5rw1O^H3?EHoPIp%r-JC7m_Ga9SEcm71<)8z7VEs6a0i90m!G{Slpu zh97=d`gshpaP_G#XvXLT(y_wW|uQ#4LwU>RD{Xp7& zp|lmFtidSXRRB{SFF`#93=_RL*#LL~gis>M`*ToFM+-sP?j%6inEdwh2yXbZ2)d>2 zR*!bD*O6-25kx^k`2bJYj3+#IHggb);tTRbh6+dRdt{kNF>~%J6e_3 z?Q)jMH5^L0`6|O$f+1t9FuBo7mW~wTJNgOPP;*G77s?9x z;^<`<>R@}2| ziuD`V(}q5(!5b6~p;^%`h?up)mUua`{xqyKKZ7!M$#pDh2JCrRnOfFYhT3z&(*8%h zn7S3znIu#sV`8P!#&_O11dGyW- zkHN#+#lxU)r|1hi%=a=bpu#DS zFVZv{ffZEpX?3z>qEqrZkvEO_|JWGOx$hXd-NH5DduTGYIHZd6ui-zdrM# zm2poXKxs~anm|o;6_TC&rGB~aiCl9UDPu@^%7PKs1(qpm+~|XXSQbu4zzLioWDYHi zS}=gqGW*!Nbz{xL=$LldWr=m`64d{(yDQ$>-F+3irD6N(+SNN6t9Qqn*Q{xt`@7r+ zGC+MG16_lkSwbGELO7&#$ax9~)A2P3J<=NV+9TxQW*O;65S0w64K!pH6_wETD1+>2 z27`|3#UlMFJzbcAr;e}#t}U;-(xKFZvQyu{Orqqx|5AVjXl^7)@hQ=?WP6NKQq~4* z41dXi5Y#;|G_`90|8`AH?M@6N+6TUZfBlJ${={x{J8o^**3i3l$DZk)k-^Shd}!?) z9O;?fgZT(Bnp0wFA!!%b;Ch+WVD;vmGX|7G;l-bTvM69-$w7}3YA0F}uyL0unPzB! zWFxZCxTs{)hPJNHezq@h#~ppY{N=Xu9*uRiv8LD$Tf3sYKa5GwEho!*6JS{mSmuN1 zoEL}j5_?D#jtE9Wn!%WM1R({KQYKI(;S95AK;RerT}(3rA_HiqrI}_>HK@%rRDga$ z1;K(~b-?QZvQU)`^r%DJzsr&dvI(2S89`mpz=K>|b;v3)cLHRJa(-ka(!{Kx`i@B3 zKtkNPdVJPVo_AErXTO&I+f|U?9cddzvfrAP$nv^&J-eYX;Asd16Oqw%W1Z#Ah1SNa z8yickHTi)^cO*PsW8A| zMcJC2Ymk+CUi2Y$(Qu-JI;BxPXDWbPB_!f)7zoLVN=5^Ebb)naXz*Za#TnSv0Cj^Q zZOW()4p&v#EdaFJl5gSzYZb{1hM~b$#ZlIttb&XhE;c8p=6YnI_ZK#Kbh@1@GD~x} zuUWrW>>TZE>&+|6eEBO{tvgb{uIRQzIx2FV+0mlLsAqEH#>tlMp0>*7#*%1Oh1I{b zDVuDZVT`_l!xUM22PBv0QNKaO@e>LkENX+3`KxxH}5MuxMi(>7awusHZ zUo8D${Cl1K&ufq1-*@Z7^*izUYc%>ZyM#!#dCI-G0kmftC8yn8wax>{Du?q`G2mjS^MP@go-$6$Y;>d8on6%hT%EAu0p26e(=jn$!0 z9jsqO9K_9_qns?EEK@~pNkuOAbTckCCh<(Ewr#LENnA>X?!h&~Z9dGB=wH=7ge>b| z&6b|Ab>oT2&Fz!D9TQCrn>&Z5hcq9%*E~BI8|aSIc4wB`b}Sv+V*32&jXNhh#|K** zhqB6YH+BqeFapwJ!q-smJjfx94NaH^k_9IhgQ^5xhsYL?8T|@`br`T`40^+GF?s>Z z@Fl^n(wS4~G(mll&F!U-b>+wfXGM*MNGY+bvDQ#!owL-L-`Emsbk#dcE9{XL_9)x8 zG#oGX`HI_?CJ&y3wNxXxfB-@Cvn79}lZpXBqD8P2!cE9&3E7rA-n59bL7Du~0>s-P z7_ubaS%3;R>Glk}9G_uC^c{shs(t{9ol=iADaRX1Dk@6wVtbW?choPQC@(B3FE1)A zSKpJ%V=-BP`?(WEy z-vB@KEJIcA+hL`GJ|mdEYBm}`1~m-ReD zZf4fI+0o~}dEzPPI;`w$ZFB#25G&jZ5_J-04I#YL3d%~RCN z81#h&U5Kzh<@^NdE(zTZ0x#s4`nLZ5wzmF+8VQ)_H}$nLe`{Y~Yj}yn<8er@(BCED z);_G&n6MsO@F?GcPU=LEvI%*Q7`_Qnx-yMOUYgOEhS2FW<5W5`rWuFJ%V|HBJIkFF zjzzmN<6rDbvUGjG&XfkQJ6}j{%H+YVO-3F%dx z_n&WIRpH4IW1<(eb73XV%|;(F9aWkT_M?Utew_&?5v>unVyS3HJti^MyLHJx^QNA` z{at!P&w)Yq8`JCqJEo_1JTPl&GfrN+X3e#eL>ccAo@QTTZ(t|}Y;J0v1FsXTxpqSY zVR}_i(65=8n0Q)#gDa0ApO*~+Bp*C>2XPoPx^2w4vAdudQ-%SkS~0^~bTm<kpl8J-vX`#>3TrAK#0T}3C?6;1SGZaq{)FPD`+p0*-9rM88#oau`SsgtV%1j zMPQ{mAP(}8L%%e}*EKb*i!-nEM%OrdMv9MjF~p;+ZoR2>bz^iqQMIHhG0wg7!ei_y z_A`L%+(v;;HE3A@&yHTOGXyoxtG=XlVHHVW#2B!Wh2gfg@V)nzRsQmqm1Xxn))r2L z+o~(eEPhK_Wi=-Hd!&4B`+sq*7NB{GXrRQ-@^xd?$|4mndjA)TbpX5jCrrYqKZvNI zVUOhi+r%UZR7SX+y~VyE-jClK1TvjMB7;f^Eqw8QT^!?RMqgFXbfW9Gvr4pUs1z^u z`R?)gaI00qdNwDbX9BlOqp&rcKI&}^s+T4i<4IA7IvA+w31^u8jUcS*bLd&C*geu( z`NjU;-29TvBSfJ~I4D}hBJS$#jJJcDA({3;Xf&lRFP(K&Q(|KSWGTyi4-e zj@oQvwd^$vcKoyiGt&!rgqK8kYN!eE-5~U(2sqH-D6(2JLv7=jW;7!s!<*rCIm=6n z3bFohj36{R;-XoSGrhtcG`t-e3o zZmKPF2Lc}caUeV2R9iwHzuw=`G1yd>D04Pc`5PJr5}gB)`i{~HMB3FOi1iUflHV^@ z0)$vIS}l?Z1PwM5#zt{-!ZZ#9^Z>+9sBbCB2d;<%(t*RkE`Dlm-*4hiiC6z-_w#>x z{!jR!N%)=E$vy{3q>#!{;2V;ODOwOA`#gXb9$|Fyl1p=G*=Tka6zan4!ko$qtPCOs z9CB$Ru2k6_I(g!Js$!>fsUhg}Mj~D(njIgOT=`{X`FOFA!x!=T!am0U|BUZQc!Im= zXAu0%f;*02bRPCf0H;aKfCcl^Pg5GQN07{<1yYb<5#p50Egl|TmIxw1a;#7D%Bco9 z9I{yvCG#lY6_pf7mV!}11sN3G)R=RC4B^wcj!FUJo;zweVG@<%~9kfn*owB3cQ2} z=Wx=l!sBGSBdUHg^Ri(Ceg>siHLvuIA%^l4WuU3*94T`Mr81H^Kj1RBpvt-II;e8u zWQFus;C&S{JEXspLU)1tJ?ZzP)cv{gPtfL+QTu_!#e4MYDI;d?p~?QIZn z@7tl>^8SB9Lg0`fKcgBT_b(y{A>708%FMsHPkL3mCHnqkB|!N$)I~{e^Urb2VQCRU!i&Gxhj`WJs2! zijIrlv6P*s|A%)6&*CBm8gPN~qu?RQ8SsmcVnEeVc`g+KammPsf1K7?dEFC8YH)3m z&99ri{KCnT?ce&=3DF%n6@B^T=qZk}eXtKK1@SKc%GxtbTz#VQHL#9&JfP&d)DJB4 zm0WK|y4(H=>zliO{fSwK^;E2Zsa{zB9 z>jv6XfjP(~W~~T9NqrfKRD!r>R#sT3p%!E&atQKhOK^qMG9lu9QJ`&u1Qi# zzXNpA8}T_RlB7~hHuxf|OGi8oq|#$!!a{nviNV7M@68cZgeNx+Pfbp8SaR`==H}*> z<(AP}=Ay@Gwpm{mu*y^vw40MUNK)<)+}T)KxU;d$-3_CC4Sk~xo7RWdZ~Fd$1KtA% z!0i9fH#*uU=FI(JW_EUF??LxL{Lgi$2Ix?Ca+xn6z#I=?!AAfyqFViS0Vjoi0?O_v zw?OLixXKZqT42vEvy>r#K8t0MOvUw-`D%~k4FBx8{Ca)PCy=HRd)uW?V zuk733*}1<@{+nN3o{v{U@+5xPkUWduyv)zzHyCde6o;G~1_7ZFTxv~~iZEc2_5%-% zusTps8?Pw)SwgypYxd%ubL$q|1Pl#p#EB=?g7TbrR65g;ab%uPlUale1knUrOE&@( zxu_NvM#Ks@H#8{1jec(FB##g$ zeN{1$_?b9E03m*cEJUCb@lSNCkOgx9M-j~}(e0a>Hf>J~_BQqoil+0oZashQJ<-%V zIM_S)-hyWU<|*Kkg+q?Igs&8iayER8$~R8%hX8o*(TzpZ+c3-!Xr z_T||pRY#SjnBl9RU9zkQEQjZ2$DbPA&v+Vu^q!FGaWMl{{@FrwTWoL@lC~B$6}%xlqlsiwZh@kWpNHDn8iDDw8~^AgSpLG@x*uPCFu_xq0aTq*Ee018+37tc}1P= z_tLvseyl&g>H6juUch41BIv0eJeR^THi3$u*OP%l^ng!jbc%Oa`~f^vEvQRgV>)_Hmmo6@p#hG0Kas`aLD338#?Ij) z+jN3Ts+R`F2l&$*1~QFXNmkzOo7@o|pWeUWW6e#?+b%uAMCsRIHYDBQZS0O8+0i?) zV@K=;^R{J8Q#n?+QAlg&Z zqKbu9`@s|>D|0agNpxS4iEsS${lyLZ zAW(o7ou4sh%HNuH*s99-VX-$?`X@l|15^T_fh7<}{lam1Q#jO3K}D{WO+f%pZVI$N z1`vn}Qj;;gumW#_ekwf;;ez`4O##PXa#MWxCA2d^q~- zl4n>{yyh0$`8{O3yy_~pu6}9uV@sYLM==*r$`hcJ1d&QWV{WVO7P$$!ea3f zJP3=($PH!+3ISP+zsN@GsPGsxAR%P;0LhFv4~JWN0f4Olz?J{e@sq!Hq@|Jl)|ykF zc(8Lt*LaPu?WWkRw)4AXFsOiG&jJ$H*Y{?B1*7i5F13oc3O->)d;%0xbh9)gc%)X; zA}Wlc#L~?O20(<5=?M13#{~F?$v#fx(r6SQ{|bU}MlcFS5(j(&a^0PdoQj-WO9lQC z*^7`|fKe-EJWLA09ObQIW~vFdgc4=2B%nwS)B0eb)b ze6;iO-@N#n!sCtHu*4sIJyPb=q4bpt+v7QP9Hvu8Bu!A8cwkTez{z6NLcg7Fo$VwgrVk-cREaE%`fgqTO4uHi(I9GK>tjWo& z9eChG!+Xrw6&l?0^d!rZUat(fewtS1;j@apv$A8uO&51w_1#}ZJJ(D9ASUt~?V4P9 zW=vRh`XyM9Uxml*8hLXBWgePtHmC0f7lFkTR?1CippFhgL@M+w(=S|mab$2xUZguDEp9yt7>-}=KIx|%ywadsu0$7ksl!D1<PN8`iVuO?8B!Sjqp>bjhTF($B0B1}Z%O$(0E`!aC6+hG0V*?0>`otjPmB5uXG% z0<2U@uj?pP&OsD2lJZx~pN8R>yGKMFid0b$I;amP85D%>N-=LR^NACQ6DQWaOqQ#c z;g?^W@VOn|{1*6UMiBx%l@UN>H^KlA2!MJlH~Vk6!GFVz{u^%y9KRaJz8h}BvHu20 z7aN3D_O7@Z*JT0iRd+I$ACC8b+q;BN+EnindEytiCRMNe@7S>y6$d?gN%hX(9*h02 zdW?l#g?NBD_9G1O-}Emcvu5La8331%9Evq}diOphcG=)KW1Ys%GNF#^AnGyDuQA z>NSd1GwZBxuhXO2} z5CwC^CBWR}a=d&obVaf)k^7OFJHv1%7^W$tnzs=w=9FXpHw#X$f;N~eJ3Ibd?y7uz0P9MQYHubD4(DIVlDdzl#l>Yoe<9#sVFeP`%Ur32=3NtVe&?|Ua&4fyOJMh z;hIA_iB=e`uA*KjjSW@J)y?k8(g5}``nn*_1N~6U&jEk{YTn3;!Xe2u>dX|$ zqKnG6iZ0`Tawo^s=}`dpv(247v0$4;qj!WV`EksGT5+M`vZ^9oSy6puAizrTr;>jz zynAVDf9ulbI(uEk{862wA%7@d=jr#<@jv_{H&qKTRlf=UgcGs5!|?$#GGD5Yvw^0f zI&D4${K$NpT)=R$V%jKN1!V^beL8SNu%8(OIEkaKNeff%(*wC=~7o9vSoW%UhZgP6t-#qU`3*3S*R7(>#AXAOF_WR3c~TOo$+_^ zs_{s_Y})U?s2}ESYtGC?{)-1-#kN_`W1E)DRIuAi61%0R61#h&8!Ds?<-nJ21cB!8 z_K8TM{9s%m{U;Sqx>HTU4QE(`7u*#-B48lV1>tgREFPK$49vHXUlSR%YODYKV}&Te|Ng7!9k@h0g6SZ~)v6JiQ@Xw=7F;TJ) z_0NNW6v!bBh(dwD370(ToC9?=tnldmPj9CX=QQKz+keD<7nNomHAZ8NLmcEjl=bk& zQV+l)5V^K^3>ICahsck^NFbzZH)E4yjS%dB>Q&47=Gw%Po6c!e(-kX~OmyD!ms@d3IE z4F`9mOL(RZ*0%jSXTRm<+gW z+}i(04V03qbc%Bq3|dI`2DlUqM#}MEGh{4i8q7qZk!B`CZ`Q~S=HrcL`8hQdNLU#U)Ydr4tvOWGG~9?vT2ZgNyxLJMH|SQ%)bcKLly*mvate|H zHL1okc#XnW$zn*lM957(DHJSQgt|Akba%JJdRPx+swOGDufpf6aQb|#pT6TKTJX_{ zui3Gl7W~Km$TgtZiGZueh4#q!BSq%VhWzT+enF3taPN!Tl8|hMnzu~&>SGZ$qs?lg_T(xin)w*k#wzj+o$q7Y;`13SMp%xaFvoiL0TO=B3Dxm!btMt)G^Dod2RT;+)}*ZdK7%|+OC|IOBe&ht!u1X1ze z{-a>(I73P|G&+dFXEGbAEUv~8Fv|@$gm1Xvw%Xh9KYn{Rt4BGKrMN5A1pQ$39XmA1 zzsx9ICEt=v;Wn1NYgZH7y^GcFZP<(dan~h61SwdPs2h)5P|i>&f*Zsgxw|~EnK%u3 zm4z9iC1j~aNqwu;g0c^V0T=wWA(BUfnIc>?cJ{n+_Q4%H9-K9{8CM)zv*y?eV?@ax z7}$sWf!+g@ioXQ(*@#jsIk2dpAm)OnA}9p3L#sQ2hmpDf(trZN6rHVy5)6ZoT;e~^ zim(uMB*wFhgyKohG8(CgefQBtBYG4noK|Q-3RThnL*ARfw^dzv!0)~%=}EFITb503!UOJ zY-MODgefqg9l9{3EwnSie*XUF-uL7uFIgxvzwh^b0b8>4-hJnud+xbsKZrUO@kg}; z7#7NbR5hMNMFKsts7Q>pjHK9{3MEp7OGGSEWqC<$xOQej6{Y5w%@9Elx1fEHzUjUB zbM{KGvZ6RxQK8+2UqRv~`YS6fuHfIWt@sRCJN!HTs(r!y7k!Hv@epRH9~Af!LV)J} z#SayLRkTBH7qys4+#v-O2RZC($Xr9}t!hJ{4j70X3Aw21;B@i^3(oa!1|uRYiXHmh zw%u6B6TN*n9xf>^Ef3 z;VW$Er{JF}ucGcfxmlh}M9h1=uZZAkId>)Xa;|JfQ>lub8R_X6^m9pD8&Yy0FzD6R zaZFYM129J7SH1jC0K-p#BQ!aP=uqFGoKtwG$^1yfU|p7($)rqwCXA#R=pYY?$IHBS z5rV@H6EZ$>e-j)~99YNb`R9+4*>Sk^ zhXWner_iiNPt5{{q{9K&GaxCGK7}kWokNnLk*Cvz2#5$Pqo#yJFZLfggA^ek9aTWMuzU?lcPbR0j;(_4hKaS= zHsU&FTLGjZ;v)j9ryo6uGssv4LtvB|A^VY~8A*N%=L6UX8gp>pW#aA7H@>m$((B>g zQ*%<+Y`Zkuc(-@&wl&UNM{1cT`%>fG^_MOl8@o%99k!hGvy9iVu^p)>q`{QCj8`n| z`G}q+iAY4xk`#>(4K_#YkBXDpRm9ut(X)P{Lp|W@0g5;6If)8(QuOR1RGA@>OD@EK z$mEGfC^-nyG6Dv!!OoIk8&2d6k=bWiuq2xY<}gT5Jok}Hgjrmrp=ut3JY2RXt+Har zj><|m#mzR(cR2bQDQvc+Dzn{JSwfTGvKd9qiu!!?AXuh{Vaa79^z`MyP`UzApywDn z34;Ur=(3Y2U>1SDD;9yilEY=4B3#xJvm#v98VOrHY6t~jkou_otr&)l!h`bK@Lxpk zRr6P?M@&=FU6BD=M12HiQ z*ru9pGDA3-F)^$QrgYzL5&v3ChB*8~80A{Xl~@RZL!^O0&BM*~a2Xw^Md{0_P%MA)I-i z4pmZu44V%)U&Cr1kX~i`*fSjLqxS%rQM_1ZUd9n+hKN-)_VqP3_4YP}s;fizc~$(? z*jL8?#7AU<1k;4k4?GptMt z@`T2Is!=X0IVOF0(! zL_r)I(pD%Y)k?*RK_Y_EDBXuGLs>lu4RO5=FHT0Bk_Zm8LtShFj3~|!ByrV1m%Mi3 zO)~!+(W58vtcm-{a`RFmSTY%e6axf|i{k~S3i95OwlWO_gjVTEMYDqdu5LVf9g8QP z`df%KR@0Pih%|7)LJc{O9JLfsL{9SbR@Ap_E zo|qcMCi%C2)wcZY=h~r{|K}jv&mYRxz3}nR*+2dKWo_dUHvK%{e7X{LxW#<@e#R|`^# zvmb3>uaS=s#A}EQG(S436Qj{l&FlCjJeERam|99apE6GPQLPV8$Fu&32~Cz?5|7~r zGK7K+5DExt*fKzcU_w~685~ta*@kiCQ#O-aj_redL|NWIPD21}$QA~`2@!5C*qpF^d`8_E1)@4UxpmN2zow5`-R+`k&(fpNFWWw{0O~>94;6< zIY0m8!GeWvp5A=wsm-VNa`w9!@e`E1D9C4dd@1$;_6E1A;Y3eVN}Lv0B-pP}n{SSK zd@j(B;hdv+(2prGj}r9QL|xr=b#>SC-<)zT1Ldp$9aHJxgm?%RLOX|RbjZzR(v&nv z?TiqRJwqB~(9XSG{ z>H+*-qV;!AOmvSQXkfRpJq0$_K?<4Y;)SiHJ^MOpTe?9V94?VJ@ z{tpE#;Tef4S71OC=8Z~_Jj`2NpX!hSGZaKUD3ZeYj`N=3cs8Pyc&rkjm~wBsp)tT1 z;)RSy(GnD_pxi;=r^b_@D&BZfrbbghr+m~zBePmRrz&5i*F{OxM==Vf zu071Lw6xS=1mUNRWP0SZ)U@R-EmZcRWo66Cp{0u#_RsH$cedxn@?wn* zwbd2ns7h9dhXq0i&<**pq4nZ4vt*5`T-=#06Kw8p2II}4mfGrEo?BYnQd>jsj`K72 za$2lAJD6P%$VzMOLH=n$z(00eA7Kj{X}c<-sKH5LCx#n??=b{uDi+#$$kikfl1gwf z3e`a-lGuAT?C+ogbrm@X5u_qOCH00F`$=!hZ)3eb8FWz!h^zNs2(ma5AL>`rXY#aV)UTzKX=zfYW#(5gl+f2cR z!Qjaek*|@6%?cW6YK(}0Mzw*u(?(DXDk~|?>M7oUs&`91InB|8>gxP0z1qK5hF6LX zRae{D87sn-_N#eksx<@cD|u(CmF=14R4lezw5PgGUC<&LRModEP&KV>W9VGb!K%J! z`?;Zwu+Z1@zExwvb9vjU^NKiu8u-eVf>KW$IcG>RgRP4)nGrilWv6-20$vcZK;|!L zd2SBnoE7Bf1andMB0bxaEpRnk&Y40|N3cdl6Y=I)us}{i!0`OD2Pm0n;OzPHclE0i zN7VjZNt2V?+PC!dY-ykP?~bj#y<0mZi)n?kq#_*Dq({IckpweBKExjk2tr#IDkc4%SpU8i&X7MCUCnYHUCuzSXfc-GwM4+(s$9s{1 zhDiIu9Fz`B5tcgQQ6PWFln~~1pEh(B__WK*h;+(o%WKp99=|}kUWjD|$x!-%!g)Yx z#7c|-PAj6E2$GeOCsDVuc;CL@O548N{QO+4Hb3X?yL0m4m0A(J`|jYXq)Ewb`GLFd z$;sEo_XStg)~*Wft6fP~t<+x3%iVW(Za!ZY2@G&M7+@h{k@RK30r#nsNa2r2njH*5 zL`Xac2j0-E6G|dAGp?j1n#v(HFO(00NDxc4IKIH|gV8RMkBBK*m{U0`x)#EjjLhLR z^eUqfy&Yu(Ehw`GEK8x{ykK51E07iNq#uPrp;To=ZGz9r>VvWr43X=~OlB?b+B!FO z^mL5Ov$0U;#!j2|)_>rW&ZMPbCv}d@Qx6|j=Z$o>|3;m6`aJxPVww{A%E)y{L3K;M zcm{>V!!65Gw~Q)VbTYuq1um&Jg{^YkkKI0{&64T=GEvfwmD@E26uSkR-Ad6`AP2tylN*%h4@ zMf+SOyVhRlk-yoheXf($c=A>4q6&6BXdSK$gg-5nH{v)(fC;jej#&T#=QiAcqz8p# z;Ezo~vgvyjR(fBySIc9Ez5aWb96Ho+ut05d6uhSWPWug?i6rN--vBqT;{h`^)Mha! zwc!%BEVqu^2jI8xvls&{qJwvEBP;e4+O>--*)@u#Q@gwskN*TrPZi+~IXq^;hXi+O7YTzejwZQIJECbnc4u1J6m-H45B|sD!Ed>; zRr&K1=i9Sf7_b8?Snt#KUGyhMl814?KF2`7kxpg_#+;E|AnP zc<9iQd;MN^Sj+QfH?Ulm^;&_WO{Jum4$w|9N6Hk&7vl3IW4ypP!^V$57@+DM5l@i) zRr?iC&aSQ0J_nSuE97r7i*{iJyAC+lUhRZ`gIq-oD6+B<-JYA`4e3?{`0=9nT+V_K z5Vi^g{*gu12rmb+e3B0?*QUwY+Y zebeEuEc^JiAcJoW(hhVY+H)!U0a(+eai<68MJD77BRjSnF&E5YQ>no#nPxU)j^I`3 zP>;f^+@zU``N6!@E)hTx)u5Xj<+O_ zUw|qAC9buSnQE>}(b*U{Lie#y2 zDGA7t$J5*(Cj&^xp_Ko&QzQoL!U0dFN4zL74wJM37z?>}bq!s@D3@UR6^Pr`4J^Di zNthBv!MVv7E0E3pc*PYPuGc0b=DmBjT*@RJQI9=(la8kyc-Zd{Oq@#gRGb{pt8Dy8#Z#`K)keVMeAB3z+$BdFgna%>)94QV@|nKbB2LjB#;UVEwONX@Et~%rMH*UI`Z38Qjr0eAtnM{@$Qcb)P3B_}sG#ex$xJ+cy z>I;WvBUWg16mx(jB&}3#>Fk^sW9LJW-m>tHI~HzrWZ1ROU(c?-SN6KEdghsHQ!)_v z1m1WqgrYYQeTy_5%B3QEG^Qi5-Johp{1O}=oIV-J0JlIYC=HfGGq{DE+FIc-q9_8x z8PDwsA(Th=`}YBYE$A~nzI0?{X>IMmS)H9{4UF3}99z$Q=9#P9Uip+IOHOHN-xTlN z)S_ghkjZ!oGSo^cAkdbe92o>d%Wj~W&Rw`RWm3)X9Tf~@8vr94$}9<%mI!j@m_Try zko75|TC{x>h++pgQpN=^wY3D=xIovrgq@a6z41-$Ed&`y86G-GF}TVAwl_I_Ajnvz z;#ZL?Lh-B6qCnJ>A3u9Q`Q*R4e=vRlO=a>8AbAD)9$palq`F{;bz^O1R1QHPntlp} z5rYHXM}c$_4k6(I+k%^u#F#)lgzGGNyxm+^2?FPQ8oY*<$I6+Y&Ix^#49srasO7W6 z8};8K_!qfg=z?>HF1WPs;!FE3mE_64BJg`7pDiz3hE1;0obA#gD3jnL=feWQTeATl zR$haR&pkw2+r!TK_}Sk)`>}xq<%S=0|JS&c<|BpRAlLEltp@FtFH6HowF+f`! zyp3Z3W$$2OkMOeqGQ7G?yO}-I)uj!wUE8+4|DU1jhVbt??G5b>KJy;Tyc6?Ep_L}r zEchGBehBv-`p3YU$D*{Wm8b{%nw`~vxi)8i*I`?lCTD&VCViIL$IcCwh{baT23J9^&qoZ~M>p zw{By*w4tsp_KMcl&lS^r2upE4UkWcM)8S2ri3ftcz8(E?xRqD#}F*cS|390=~y4nO(i_qXrGpiXG7OWA7dD%+!I zNQ>sLDBv0Pp{Cy3pvrvbU$_3x5twL^oADsbJtDIqRkWd?a|yMF7NNI1PWWpngbjx+ zUdT3pGZ@D$_vEMAksqHFMWUc;S&*Wryxvembsk_(95^uX?r(oP@XdYlH`?3V5sQVU zg}?X(!6#h^Hl2qcH-t53aaw}V#1_x(d(5hj@FPB)2=2r3Plf-nuivuTmFM!7rf5&F zzT8rqH9LLH7azKCOIn^CQqc~S+p*?&x4w#JTcuGvyAF0CxEI3NoGqekg8pzwl>Ed4 zOr|I?Sc8JF`y>62MGQ}TV~kFJ3NwVNOR7`?9R62>A7z%=dH!Oz9pHG&Jle-Op->J} zb1PiVP^Krf*q`rt@H^?F#s186M?nOqs#4_l7lCm(LOySLroSlX#h3jYSz7^cCCtyT z*g$2#0s&d5`OoPm>Co~Zs$Nf_1gE@N`y9LGhg+ZSfBN0eV3_?o_G6gIUm~7!x4aNb z2SYO{2OeY)$t(lE6bLj&3zMS+`({x&U6)~euxo&%VJbkpzTbb}%P(!dmSQo>)7d*( zQF=MWYTmGTa`GNmt_qeuWMK%kFZbH?TDHsL%0Qv1Rke7g3pGE?gl7zU> zwUekJsE2%?~B2Goc<_662F0=r-QvGKX%OP$IREWs$*P_$Q2wQ2A)7y7aaSB3zBYl=GZqpW4=L7J?0H^s&NAWcZ{WD z*b%(J3v+86?HF9M@t@(V#vJtCSx{!5|z0 zT$YAtgAiHB-8{J;Cll@0DGW?($F7Aop1^@Q)SB#L5RS;2qA2H60H-NrllsJBtQ=Vk zCg7OZZh(J6&=7~BCFIbs$-gGu3zLlDy(9#@pLCrva z`uX!!)3J#N3VJXWd=4bcJrDDe=(C7P9h2$$ER1+tis%x#Kb3HOMiEWaj_8P9BoHo! z(_$q={FC9qI32kyXG&*F{~%o;eNMVux=OlEx>34W`igX$bSL_{+>Kn?Z%O|wJt}=y zdQ$qK^sMxp^smy((!WWsONT%=BtcT`ThovK|0AEtc^wn)br}EtFW)LZGM?JeapC{z zTM1@7)8-bD+y57o^tN?(F0yOG_@zQS%}cd~D=yV-s0 zTkN0NqwKqaZlUi_4XaS)lT7me<;Ucc4~>g)jaJmb_R-(;Ex(8!j4wXK-?+U)yysu@r|<{RjYtr9tpm{UulTt5 z1EU|H8(+i2`Q?193ylZjFPe@HR^k#G=pExzelG!mH|PXr;t?45{}2D5cp1#8Q|d+u z&V>k;U56FdhV<`}KO!b5mS_wV)e?bue}itd9ph~-;|i>t4L|f$_SZ~mk-SE?ka&L9sRQq>f%><+@Y#A z$Ixvg9LvH7)<(RiRi^hM#x(}=K$BMbB+Rc=V^l$$-iC?~g{#nQHoZ6l1vvk;d{Itk zh@FwMsJtqqIh}QA*k!46$_?VxIq@%5s3f+CZS4$Il`r}r)f3FfC{9ns2=cA^)f?#6 z&JFlFr}IaNfm6fTQ`d$U;~`b$3Jq1BuRkMcl?#Ech4FsFXA9R743F|g&YhT4Qxx z^<6WkNV(F}vuMvMP^CQ&F4NqAUoq`x2{uPpnOn6YzKeHi6<2G|zyJRG z`YrFj|J&atXjj}uO_H5<>hg*v$#@9e>PMAV<6->v_tEUtGz9+o0`NmIm3i_jcy>Sv z$BVQ52$6-M9r64|aYl-)BnuQ0alB-~jw($kxaU(MRKG0NM6rA!3heVCl=H&_2QGW? z!Cs3RNZYtEEudP|ytLC#PY3* zWoPHIQd5SvycSnY+z+6quGh_7bTBC9Ty41EkS-3OjWls1Z<^A?jr?pr98$so!5*aP zKXcSBmq|s@}k}(h`2sRl8q7(rUA)rXC;Eb zv`aM?jCOqb6pdsi4PFBfMo;+FKphbI2uPCr7>;W}9~3N+pb_db#9@tkLP*d=a^}RF z@4m}EdiPxeX!HXiNwq^JNmZ5*P!9i2q9`2dCs0sLgqm$&i{q+^uXE}a>{tdHz^>wL z%;k*@@^n#E@jVqF5%WU>_Q$M{ z9MG5yt=FyLFlO`$<*;+$4O?0M7=z7O#q#!28_CmX-;${KuoH`!Z$v~P*AzsUrBlDU@HiIM9C9mW@pN~ z(cr+nUwdsobF+P;qvJ2guZ&LIDsLa1KxH<9fjt8lDCnvs-lU=m6Fe=X8GzqVc`C%m zQJkN$9$`?*G9&nm*p2Yz*eNJWbh_maWT$CgWC!`QPLiLy5>h&D1?&= z!y!CqDwz{cwaoD-FE49BDWf4AV+XY_j?(0IDz_UGqd7@$>3BWC(&{??sA>c7HnCgY zO&A*+9fh322eoYAh)R=s<8hz|&Mk0whZR)?uterIG)`Wu$K@h?iCPi16dPyK0&6K8 zYt*R|21o=E(IeSuqx&az?;q9vOwW~{nz(;-6q~+}p3f)6p3$F=g@Ry!^bbiv1rSKY zh^>OyOR-fljs&otIk1P!H#{uNADPL{8PzKGkG?gk6pddp#vjGE36MAS9B@qw3|>@5 zhEW+AI&~xW0u=?7{8-$pvbq%sc2SMyllYtmBO3RMiiN~Ky|SR)jOK?bL) z+RzRKq8=KnA=hPDMuu3Y41Wfh1H3K|8ZBdYC9haIR!rfDqxC|ERr4m>KRP$?l z^j*l;b`+al;0imDKms&;<11n}a{TLnfI}-fAT|nF2Oy%4Jzx-(5~*F+u>kP`5c)9? zv}X!4e9e?bGgffY@zrDdz0L}Wo#Od1o#?wn*0j* z8Xp#i&pvQg)ZIYy59|rf)Hv}<>w$HVVTJAp6ii4JPWYhuknEs7A}t>cDDY(-aJJ}k zY`~-e6EL!a97L>w8A5qG1{77Szyg!zZAdz#t^hugl8s4^y(RB{%b2b{)h}TnemX+h zPM#^aD^Dd$INrrH$KGQ5_!#3a7(*bw!68-0D<~2ju6C-^N&5)07hX(BX-PArGX|^e z!FcY`20kL_?0yWP<970A;^rYZBWL3z^#X9rJYT@ko$}Ym#;AQMKb%j)PzC~zxw06Dh5^H+LB>(wm5=cyjzLl2)mT~}*O01b-wfhl z3ek9PjnT?}eN6uR_=CK!>Jh%OQ-B@E$^tMt2e7nf@W~14NB{;wU#B^+L%okW?NXT& zZ_>&_qoH%tbEIMHErBj&#l-mujPcX!)2ytRFdvzwtdEUJi@~|9q{|h&Fc*$Q8L1i) zbTA>mKuDvSO){#TL533jUsEi)YQ`lrD)OdFXne^@I{Ttnc3n2x4jy)^vGkD39F&zJ zHX}xuwLsT&$_Ek9f1D89Ix%2aNMcxXzH+8L^d(8RGmGGJ*+d*6WVSGMk;pOB!^d@UTB1GYV4>sMXYjVd`|F=hA-=ONq8HP{U{gWX~J` z-o+sh@kb~`K>e0EdGR+OuoTs4bwJc3B0G)>Z3fX%3;_MGL!%RKj^c6P=0rO54^JMO z>;w_s$BB^QRsJ_h#YKIPDHA{9(PLxsE3dzBXL9cLZjSY~{&$1a=r^JR-JGcX10j7^4t zr~NvfsPPowMY0sJbga3IyiqU!=nz&5y02NS=O5)!#tt@iF>o=;`nB(CE7&IOPVH=Z zPrI4L869fJ+RZEu-R2!Z$NXGSr3mE!39syw1VQ#mE<%{;5vL5!nM|Anm@Gd9^bJ8z z=0`Fg$fSC4;fo}ZgiIqe28_Xn7=MsphvGvcs1h2&BtYRMWfk2%Jtgn~1f0MP{QP}| z=E7xBjHc^ou#s_WoAfdOAxhCEfFPtsePc8aeo~r%I2Hnh@*vKmPkpc==z&83p7a*5 zNwO=+5~ed-M+ljBN%-W;VHVeEj)d2#;FbN;T znlKbq5W|?<+67}5;RDtupvEk8Qs9o*MMS~O-9Q5W`TT?=Q5Xc5B5`D3Oe2MN#>m{P zg@KciVT^3r9bBE5Cefx!;NB)0oCVp$$N4syMuLW58v;_eH2>CHhCELzYEm`!AxjV} z#iT?gH)+7Y!4mF6NAYjH`ZqlAN7}Y72!+nrvl6WBorT-mM^}AyvsMIPgq|=ps-Y(g z0}E^f7w~4@=24Lagq=ds7M>$3Z`%|K4Qy+pQ8#~e)oAY6}xrlz{lz7X?`wgN%6a-+F7jC+3_qMdfPgJit{a+o<*qV*KM>Rp6lQQC`_m}_=iH?=-i39+Ka6%{ z@?>_Jaw+)9r&0orU=;QQ`xmVpO2Bg(wO#-@LYh665^w~zq$DNaglsgNA=5U~b$M=- zBGl^7=7NK1gJIcByxnwW8!Fs6U@))1x-H;8QG<%EuF;J2vxdl=xWjruGV0Uc8q`3Mw&)BYC}0f7zp zLsw`IYFp9&`4MfDE!X~8Fl~Mm99@n*GHNISCnSCI6W>F6C~Y6I@CnNR?I12LzLuRFl*qZbLDYf)kK{feBIz1crsx^)nHIjkOav1_^zZaSu;(kBAyyS8sP0C6(1}N~*r^vy;{jbO4*@4MRXS-zb@<3nyY=OcDxACdS07{@u=40io~%k|iIr zKXFlmATunNdk)?1;9Wg3!ffH&!BV;SlvPH;g zdi)Q$vv~{FCp=Z!j<@T zfvXR85t86^U&&NR6n4-ItCWbcAuAopb2KbsY$$4oD{MLk^HNwB$tE%t+k~2Rtrg}6 zJZ25OLiM!U=(wO0!rUf<3TGNNR>6CWXbaBJjerZ{mz-znVGZ0#$^%?T%|Pu|@ni}s zgN1#DNq5#pK<3Bp*-ww-8Zb$7JmQDP4kgx`KZB6QpD~N2ch+YxemGH(91khlkN7w| zMHlk;Q@F;?pYrMWg@Lq$$vf!;(6{&rO1R?0)=l0t-e+j?o+ep*nn}+g!6mUtUDY_j ziHngFqCJiHnTqz)Y^`32yja+9*Ekuhz*O=SQFSm?pb|abI(VU-LxRTa8;5UqL({kVau(=Yk`? zpF?h}2f~0jAPd2eUhM;vcYO0*h%xwxv*;;V<&ajHaFMS#$qWOhh87r zxM46nrhTOS=I5o$H??)gUXOM2Ur?%tCeK0>ECF??bZUIvvEWAJ9krOCPUbvV5mA6D z`qxpcA_{wA2BFeWX}DziJgDi!am<5Spv*a!bJ%M~oz63@WJm3oyhYAKcPGIl=(HtL zNe;>qp?tJEk|?w(szhPdMoS>2e1v7CqB)UE@;_R6;~oF4_-VnhI-tVAni2sZFp^NcW5N*qRFn9VYR+%TI3?G{8s z<@(yPSa~d1m>tQ99Ia<271}e}FQOG=Qi|J*{I9R(78d5_78HDxQ&^aT_bb5?u^%clI zwB19^be?1DmaXu&MLhFl=3Q~cqD5D%Xb>;jVdU5%e^$1O*B#%qt-OBKs_R$UzB%=d z9i%*4*+!YT^lst^-VwUNm?%MpNGv3E$LC>dLnh>DqQov`Fd$2!*CawW(4PA5>AOOl zXHN9KB-hQ2*S~@7P-?}+>;+W6CL1=jFa)Rwv_tnoMY$U1qLHtIK(X0_&B!9oyiw&Q z7T4Y%+;%zpptV)|0#9E=r*@E1KxZ!jsf64M4yHGuw#zCG5^5W70au}P2-|w_CEGI5 zi#J#_vk$Km%-GzJSY~g~o0auLop1a|=Od3k%YOB2r6t4lIqkX6rKZoq zHlCN?oG5Mdt*8ahtf*ZMbaaB&0-PVaku(j+(_BcV;RhoHQ&8NtWZg}%H&=sYqQE{k zi`dq~XvAz_(Vld7YJyEueOPM~I^lr|qe=*!3__^liAtW&9&9-HthYwK`q68zMgO}u zaoU&eK)Wuq)5Qjy4h4E;dE7{g(4nB`G7A5Ztk;sQO0uoNi;efUw2=^Hv|Oaf3DkDw zFnBo(-jFYXpz^4~ya#`h(U9?zgO6WbfA!S~5FTKY8bcP6A~l1csVRkmDy!+#Zk>{X zX|o~19+l$}r%6_^DW!^+wKp{l(^K;(e-4L~Hyl*3>97l-8~Qqbvic|5xvceK^k}nq zUH``ZK+Ax0OEhVlI29xc9B?Xn7(K&i*WbSQp>$NmZALmavslle*b8i`-8jnaD%JP~ zLqnpv1v#oX?6*layPb#p+t*8Wn;j*7V{{|(op+z$ox}0`Kmg?@LxF-oL4KY;D>EZ4 z6@F)nl*@8SOkl-4Y2SxZI=t}%IwLe;xig`qnMjkJmtUG6$ng3b>dX1NNJH({rjciD zPB16i7YtU`<4rZaj{kf*ed>(H$nlNDOK?(SDQrnST1XkCFf(-|UBUkfER|tMv`EI7Po``x1O1 z>g7*`UHK)y&*vlOyA^%pg$)93v!8bw_{ft3>+JI5 z6N~KYC^Ps+r=4g285S1*AOWuh^Unik#a19tV53FdDLYPptxzkVP$&+W+HoPdiuYTf z%FfX7i-Sdlfm|=D%zHd2X77R`4qrP2Q?!5aK{$qdFL;R`$FZ-WIf8-(O~p2}&ui@M zZ4@o^qP;zhU#<#;s@|>)6<5h?zuMc>*voEhZ@;y#v9a&MQ1xACuU*CNBB5HsrV+hE zKfUpUBzMvacp8)F<0r3em-Erc?<-tllu(73R0208+){Kgv<{$zJ57+xO3o6*3G-xD znm7KbDDP~g6l2|*io!Ll`e%1ePOh7rywmx>y+f3UJ#;T7FpLQ}>L?fLPrH!qU!|8OaksJ=^dKYs#oXcuz zWT~dUroIj}Cd$IW!h*bP9~$JOsy3-wu1>}Nu?i6}MwEgL6h(d35XHmjrS20o?@=it ziu4(x;04XAHg&c~TSkT&SDlj5=V)zetew|Vci9z9o!yPiO>swG%IVs_v8x?x`&$RR}DPU~x>Mc}tGOsWIwq?J!eF^kn|J;!SS@B zOp0{j)A?rq(id4;McL(AG5gh$UUqVawzaIXgI3#uN`J4ipUd}iQJo5S9KWa@E)k-7 zWqC<$xVA7qJCqYT0a1N+X?2E(KCS7z9GxzjYu}hz2SJf;nmh|p<p^vkVXo@2*y4}wm#C3aP*)6PKsTo zCI`dxYUSdxmDFJgC4+qVS^2n^a~w}e&_z4XqbouD1V-E#`OZ*vUr;!!sM~bG1)J&` z(ER*Yo12=J3=i*Mmh(1lJnzVnYVF(A+BmCct4>+E^c3=Ob6!YWA3>DF^=O+zC_xhj z&IpJ#&cO%3{-{F=a@ZjP#C*C*jSa86VDH`wzz5j;yT-=u;*0=;#KB{-p=Vc7IqC}H zB}EiLXc{D!A7v{0*)NZ4HaBoulqSE7dZF`h2nrh?qBX&+j#<;f z2UD!Mrp4LHcg9y%D=X2IHy z=$Jq8M$fJR{yqJENNew(kM5?X`KU1L7fMUwlz*=vTX?f%1y2Bm(Bv6;u(FDdVi3N# zXO2$;6-RuT4m;Xs=VTW83e!^UUI)6W=_sWvb7Qs48jfPpaA4EqJ5w{PmJIhnG%t4P&`xB^j{(*{ zOmwktG@hK5wXSjErJf{c?a+)o#E9vPPjT8Qb^WM2$xTuZ0cGqYhKgSvFADQ0=mp6s z^@!#=g0emt?4u(`1R(BD*jd_Fw6{n+U(I$LIRcq$YJU+uQeiJxLSY<)e#1%91@sX~ zqPrX1RGTG7Dzn=hcJmH%@*S3wjim*B3*mq=wgrKjmfM{`AlBMMmRR~AaYnLRLtE=bMRr;P zSsR}F+4`(}3)s<%99}TYi63V{M9t4wzV(3zwhm?FtEtslau-IQg4K<~9;M(iVTT46 zp!G*G0IKC-cafr*#8F9UCXNdE7Y1_COgLML=28~Pq4=#dUDUS|r{f?Qf^yTR=ZUWBumPA1-)BV=mX0j*EW?IU!V zaO67IY}>nc+nUrI6^%O###GI&RG0((J9dnXot2(rbD$>F75^JpM+pRG1*fv1H?jgw zFCZhNYd3JTZ!=*XErM)UXwA>EpZ(aGX|;N_v#x|i!px{dk?Mf7IX;@kV6Z^vv)vN7 zW{S&6TZJ<&Xs%R6LRPmxBuix}E?dfG35?3QMshmYdNx=BVqoIHKivEi)?j32aKe@9ar>H0=Ew`{JC&3t>dT?1!&$7|teqresQT0t z%*?kC2}3e6UJ^pG3egt)z@a+eA`?eE**%5a!60^Uy#6w8N>DziRE&Q|DIb4*8p2S- zBpnWNYBEOW$P&c#!`Yy4G}#o%mRzxnpL{q_z-a>hET=%+qAvVY%W<50YJSELoqNkO@@+WxCVn(cfpCDg z_r~Ly=`K4=ALt4PjNq(Ru(XCUF(psp=+ouNB&!K_3K!#QJ$9wbeI$92uuTPxfiW`bF(uFy@j~XgO;+WzvK6m zqIPRS0T20ov4o4>4<&sIJM+|&&)m48b(tHG&+G4>7w>2N2jsx1+qa*3-zhs9tJi<~ z@L>Pl^9Kj#-#vdREC96Z+qqp55g%y%B|Bl5Kod|2o1UyFBK$&_4)ii8WV#@S1q>Q) zZZe_9aIlOBJ7tq!Z3=nd#O5{%HlLd*$x5L;i3Jzfevez^d{q4hD*(Ad!AjEtTTrN# z{FvO+l(5YS$6H1QS?4l*8PFDljm}P)XfD$BSrS7;Z$E{*+QPxI@*;OpSy|Dg@OEuv zad}l)5&cl50~EU(^mmqE5b)^*aG3EN^&g0CwNx;R?`qj`?SvJjRo1e%KV z(oH=ocoErps4i+jJ}m1Vmp|1HK`4c#ka1H-o;XZQ$^mqoXv~iu!4WpyfapxPf@d)u z-e>rLnKTHyTngqMlKSG^P5>h1<$&ElK?Dt5gA>;ZP~i%LvknKX#ln*fEhE%-SGG_N zV@L`iQiA@YZiil>xR6(ZS0NTI8xqTqB+ly@`+S4(W`CKd!5i@f3Ojom{gDjuo~dcE z?i2_6iI(rmCdC`ES1`~ z+3?a+PFbqm_nR3uR7`*XT??}Ug_abO1r^3qi!h$Td8FIkU~Z#%w#28Y*TtBmMEcf;?#h`1eIVqQ8j2E;{^Fw{=#%)^u#~N`R(l!hYdgzekG_( zE^g%o=KwcFcp8qZDGw9WDd5`S;Kp7D`WZ;Y+_jXG4ZoC6_b)+JtTY@-6glP#Lc}Mr z%I8hEm!dFBv6RN1-lzbP{7lQZcd4p4RQXkMDUoZ5^)@#3ewBHIcd7a=Rz-pWp;rFA zL`t5X-cPMQdEPwe%<$RMj%CZZ zBxG~T3WD{>nFNm-Ua1lf5}^3F!llIga3sN&jsK8?6JpiR=`JPtJ@}NgC&97r1)?{i zALd_WV$=ojU#yO=%x7u{7+#DALt_@@rlA``Qigkh+hogH25^2a>0jOwp|B zlpQ-xIc3LLcjuKAm1Nf}h{qSCUDQ3078QRFIL{toOGnN=dqjI=%Y*(t(YAWjKuE&>E0hKM*plurbC zE~6;B+-zT7R-Vv?CAaW|MT?snW4wU87rP`Bj(X8i!`sl*h&9S=pYQ#1dN7#&r_A}< zU+bNH!K$jNmfRY7UTNvXGc~y_W6VD=pq*BMe*hs9heMyT0EChk&jJ0zJe$}K_}VBr z%V4@j$=QPkSnsC?pyiYK0^{NDD8$G@k) ze**WFN*m<{dB^PcEw6a886B? zz{jm5^a{>;=dZl5`-Y3ox_m`{|BAk@sy0R#{tHiJwOoT(yo3UjMc0 z&ei_7Xw69rE*V%FE?Ri%mdkc&kDhgTD=TWQzofPyT60M~s$5H9cq%tzb|r{d_(nVx zq`}IA1p$j{m(fT&8zDoDbfiN;-HpA3x>hiQLpmIR7AB@T0vnnnbqzvJQE|NUKcuAr z#Ec*9HVRs^wdyw^=t%04mLgQBG|Z%`ig0~teNkb49%6+&X=L;-VI?WRnC?l8`Xh!6 z6A~v>rr#^}iOM6T5kX1LVH{MiEIVc0l9Wi}@S>sh-5m{8O~o&5TlA$pi_eJ{tOysh zWDZdx26B2&1*UrG*?$vYM<M`!ut#-d!-cIcE_WMyn0;vD z#-VxJ=N(|bTQjg_V9oeB$`{8GlO?U0+yo)vJ*f@hNL}%c1|JEpI3}%#iJ%2Q;22bJ zgtFnL0>bs*6d*-`VLb?sAtHNC0dR|N<|M6 z=2^bU(r1Y`bTrLttl2bwsJ*eWcVuPt;E391?X0bCoL5(QcK6bGwOP^d$jXAoqWZFh zh0VncRd=rFEo*41D(`Uk(oUWiTjEk2104e^mvn`yqgAC*XLj1U&e));Sc|)A7OjN| zB(JTcY@R($&Btqp1DmW~+QB!U2l_{swDn=zXkYv^*uG$*bL^I&_&dP4ba?^Hn9KH( zog6rJ#2LUxilAJ)$kIk=)3UT8T;k1OQfEgSwQZ@Xswn9Scje_~K+1R8B@gqY0&x%9 zq(0t@1KW{=ey-$G1U?VJF9m6F+R7pgK$oR;I@F!>(M%hwTD+^PYu94&yYu8|^yJQt zQ=-vRx|_SZo140uO7aUzV1F!W>fX_@eZigu+dK4^%KG8mtQHdkLB}qFLn^3`y1*$BtpxPlI+Tr`-c;VG# zI9isMlrX8SrLm!;z67C0HPwjGF7W#VN?dcIBuwRIlF$NuQ1E+xW+e=!N!ZYS7d@pT zfsxbCYUnJ^?~Qe~w&e$d`EAp%@!=FEfRH2Xw3gaXz3aA{Z+@~UkXM9xc-c8}EkC78 zDYmCL2f-9>Xd*bI$q%9`yV1qN0T;y8fPX6S8`s zI-_PtcO;_ykZn05ttJispP}7;*dNdGHn}&9q(!}1asOdV;tn>(p2oH(rLUDQ<waDUUtY^VnlMAP4qsf=RG*#auPc_9 z{ZD>+cg09WZLJ9%e^*kOqfj8ngdoyl2}vAHKoqmJv*z|AN7}XL+qEOuh7nNITA(Wx z(JWEvqPQ~%Dar>S*$^@cV2OdI3hO^2K~%OLXDOYk4l7JitrmzA#Zwm`(q3*Eq|1cB zWn45IFN~CuWwHimOC;(JyTc@ElLwKjx!5MOMRb-8Y=d&V1+t%f+1S}ijZ7OFF)=96 zCFBYSU~IfR8ZF0!8WaCTQlPEH1XSXEQye^)l~U+66Rrl$H@ zTYUxVLhQ&yDf>%STYFaCx)ROChI6tQGAwd^lTua=NTLJMS03<^i{lLuCIta-Za6R~ zZo}|{Q^-7nO%B#8M2aE82xhKfsyID@8lwuujTIN^an)`xY(!O)B@y~OpQ(O+1%;I^ z7A3L@B2<)Us%qe@j*hbi7M|ImUF}*JYu}jJkluIlk65;AK}&3*v-|wP-z+_^yZhW_ z7ikl|s?PeF{)oK$-~ZiLRfY4U2`ft4ksB0K(P zUNgBw2FnBMUnpFX*>pBAX(x>T3QuuVHsBOx%1|Kg=f?)JqNjZ`9Cz^%i~{LKzuTG~ zc45zf0~cL%0IQuTt(KR{H^9MJL?Ieb!r<{Cw-1&Z>x;Yq1YN@dkM|+~1)?QiYc>KO z3mg%4l{~i|gv+Q!_9Ac`@^_%sEHr0Y@2GJeQ$f5Y5?qkC!`8jK>3_EU$D*Z|F6d|( znKy5w1;3YFvS7g_EdQ6A{%7kOe;T-CaNg;yt*6h!@1}u^mkwSs0AS0oz+w4q^suUy zHpEXYE0pa#jRWo=*$NQJ3war(Pe7)y?@mGTo1HkW;C$SO0X;!N+8c;vd0rlq@~ZQy zBUogLGs((KcOxze9kN(}vcF8JZCvpa!OJ3K8N3~t9xyOtiy{@t_iFuMRn=g9>*~~) zvpHPf(^DUAcE(ayr+5DdJEe*LX4h6NZHO+dYH!F34Yb4tLV5Ka+QnG#Uk9q%>bGhS zvp{ZnOa0l{Ks3)7pJ%z$Ae|ZCQo`&`FmZUhOcPB-AP^-=Bqj(8K5`fk5(MSgma;{1 z+U?xWP6-oE`!bqvLtRxxUU?pp#!AD5(CR5K2a`BqCmVtp1(cC06Q|(t|$7E3ILqHBi)cQ|8S-$_< z>>%X}KlK!D{3%ZOKTA*JDp9(P3I!xeJ>ftnLua}IDJn)sXz-^!ztdiO`cLh+b35+5 zo!?m!5Avc=xRvBG+H&jhhC8(IbdQIsJBF!-NfWzWd+m2mYp=Ec3E!U~XRupvs3)F{ zY927Kl4Fpq2N-0$<%;7tQ~?-dtq9Nans+`2!X+_8jCIUsuS6PR5E z1=L9Qez&|Vq^Qsq#gW&7Q`u@)&w&{e2`MIHAZQvL7Rd-mx;AW@jK@zo?qY|fnk84f3%VL@z)!F%Ep2F7VfVcza# zO%3Id`ua%0+5;b~jdm@Yj-h4qn~N*L`S~UF-F3}9wzkR!ich3HUZUfwl0+LHypT8( ztcb3gPLl`;23BCALF3OEq7A3X%FN1&a?G$WKaiN*Tr}xzBB5VMpCN92K-X7w#&UoC zpK|hQO3Uh-<)vNo7B4^R`RVgo6ZErXG!I>~DCwPb;HmEvGWI#?Cb zvf!wm>cdNU5ex>+soX@wMOci|px zWEWt=I#<4MVP6V*sX0>m7Bni3(;H5=TiN$?&aA<1|Anlq)YL5hP1?ij`_3qR`GwMT zgXqs_nou!OU_rJw6&z2@C|Tr6nu_rKp{Z2zREk~2NZW~fqPe{=Q%TjYwo-Mq>S9u)Ep0v zWIm5x?4=Z(JTTDU6tp==j+zNI;vm4!VO$~Qz=k+bn`#pa;dN0fYJ@7z2|ZlB@XtaE zHL%Xu?d*)(P0+ET+FI=$2%|(P4ICiSx~j;tlZo&PuD2%v*Z@0qUNPX2U|prSqxteaa(Z%;1JO+#P1x zna!m^IG_BfJfBaoR{Cz-RUXJy9L^dB<2=}X8f^OWAg?0H@Ei%9;ASiapSM^H$g(O7 z{tlbXF^sH4+eUbP9JUpKcoz*|cVb_Cx)H$oVIY^PtB}@MT3qDwx@uEv6RSHNX;9nA z;xClhOce?1I*X)Zfao?9fo^R`L3u(!!0)24&E8W_LXtP5tMiujrot(L=n)!1)zWB3 zb)_@tjV)LZiw)S8ezzx;WAGEXnPV^_ZHz;vcOZ)+1+#@G%t;pKnUtbqjBL_~S+&`m z!w9?OzA~o`5kCkm(N8%{Hj)}Sp2^P8g{CH1I)@fCV}fQC2oqbVy8|82;Dt|9u`3ok z_@mQ?AajZTF7B1i$5d%u;zDGm@WS9`a!cXL=*%aP%z{(ya41{dzT9YHrka9n+5or#5Qeyb18U zluq?rf&>LvpVlH1v$mbl` z^B|W4Xdt(QFUQ+Bju%Ut;v31sg9<{RGnd_!f>p6QTy_Vo2J8+zdWqC-I=2uQ0i%$U zV!&P4psLC@s0!CCd?VvkrHiwy1Dsj=HllGG^`tM)E?fm z2gx}4fnpM?f-rPeQvz01D2HOTAbvoY0E4v)nF>}U`0RM^Y3q8Y%>e?mE-Nc5E+*ls zth%haI8q!TS42AE&4rLf!8zO+m0*818-y(6<0Qn68riGPlVd@cG9$?%R{yR6>jlH^ z92aD);q$EnyEfbuKVzPC;)u0#wCl!c64tyk`)!4N3&7-H=&{Y(5E&;XJt27XvVo@5ZLf zqGGYoCJiniyI?~|RC18c$EqvHyucR4;sqHCQsiK!ErLK76>a2IgrCSY+9}%4S(M#X z)zp;rwL9kD@zq6l-ac^K9o?*oH8)pj8!KbC-FfHyJMLI`=k5Ks-+|}<49}mK_4$q& z&xgrde?ECB$-w|H!W8zR!@&JM>@F77e*XXT_9gIj71jTDwwq?(+N5ooHfhqPOPaoS z@4N3MZPR9Z>Ats=LZQ4SuW3k{ge+ZHWUUIKB8os!Hbn%tf`Gds3Me3gf*>FwDlUi$ zf`HJM|96)A@{$H9KmGg*xy!t{GiT16IdkUBIcE~Bs}5he{HkkKT@5H2BlF3%)i_f* z@z|9s52NO5Rvtbay~au(z6I5P4b|r=pSe=29J>6uD$+rFL(C!>X#!`q5!Qj7Mn>~; zXqHX0I&!l!;nY!(Zx?jHn$m(q2rHP=3JG2|K>Z~58X*EG6&bX@unE)_j7j&Dblb`$ zITL}$WIHr2D+o;Hilx~cM(ZTE0#67Nqf%5V%=IQNToRs7TY%r{qt|tJU)9}B&g{Nx z)$`rmFQ_*pBtA%9NK9>9vXER+Es-9ZA12qHciwr4$4Irj;!)i&0>Jm7yp`ranHD1c zz#=^jj@zJ8%#q2%>ZCH4=}kp-dX?EuoB%~wIa3D8>VPe>|Gt}_xbNnN9-`MRJ{nt$ ztJI7Q3_nl)NS_9EVe7wuOjrrM5<7$#9qQaz88ZgeL5qOd*Mb%S3TqjO%}RrX7`*+= zzdRK!6PSRiKfb>1un>YPnJq=yC zBwMyVn{?((1XIY%0(-DnXFdY{6i%4L;0j~I5+^MqBW*iwX&JGCBAStwu`w7ZnVOfo z`Ns&NwZKHNTP$FMN?Rx+r#kWcUXVKQelGmU(sdrL52L;&VaCG{dInzt$eEICN zhoW;z@j@=r_rwp)Pf@qI*^R2J(|mTbGy0WQMXRPy$F}lcKe!-@JD#62_o)75OJgwD z_(6GT3`V2!I_gy&;q1Wd=P3-ssTRx-r@%sjPsJo9=$ZoPQCETgj(6wM?aK^$W zg>r1CSexQN$^85R7#zxo2(xf3jB2lJCzxDCISl@lO=}t{P5hh$*OZrhP;$}4E7fHA z^*7(^kWx~5(-SIbUrBjG7r8a@_wH|Eh#_={lF$TrjC4o<5Fmd^fBp=bT(LvfvoeRBx@yQh1zGHVSB*@0Tk77I32fEm5ZfH`B)rVWhn<{A%1DHNpu_f4(N9lMtzp^~abfP`JmSqhI8R%=7^D3D-} z4-psfhY%6xP>MED+u%zJ{IVI-rWO}TlN*<{(k4zR4V|)N$tj^}Qzxe7KWerGtmv%Y#Y_WSel(~9N|G&c2bgUZ)5s~hum1uTZ( z4B*d%8(xSuzmzC-^u=X za)!ny$@A{J9cAr#&N7`CC^FO zX`MRr=!W-L(#imsuPM)fiC98e8ZxterR;DH86o}Bu7TZJ+ zBXF*HY+A|V75MjfPWH6NX0Gt6-KE~LWz)*br?&yEbbAdU>jrN3Yi0%4m1|~ z>^PqemWxsln2^>1GoZ{&8~SbA&V=?A+Q;?P)nHVS>IgWj>!>9KW)Or@QpT|J$vm^y ze%$IOCAms%GQ`%qkE6Tio^uWf;O|54-pPrB3twJ{|1sF+V=r!zYW!krxm3f+E>5-Z zO*S9q6BznXyFmjDy&~M*r4c@Eu);@NVOZhUFIj;0H#aU>UccOPs~0a=Ji7HVMjXs5 zj=%Mzbgj0EJnc)s$AgU@2G&(quai0;D2Jr#6@TxEn!yF@g3h`H3)VTobqi`%sJOl1 z6%tcQx{+iOhT>joVn<_2`v1e@B8e}=(Sr-4G|PZ8GXuN>iZK~aFKwsvFIS|ptiCQ% z9j*?0?!pECC8~@rA3}bTxf~CQ!r$^58@&rJlBODm-V-+m$@(P=YZjk%OZn82nP%k7 zG9yRE7#xid$aWwW*k5I5()0}IHIt~37AuOBuuPIWEEzkokCE}eA3Z55wBtcWwN|ga z=iu=bZw3P)g@GnX5=(2{1!`+-3@XMNCnYffn%bUX{H*v#Q*{#*rs0J(qe;RTCmsLj z8Gje;co0$g4jXLmiJ9^C-MAV#jzZERs~LVjdmBziL{7QQHJV_KC6M>p?UMLfv#PbF zxv_pR)VFnGhtd1yx9_zjc0Aatd57Jy_r%`#enF$gS-k}VxY~u<0B$t)-WQG4SJ%r) zs%8w^dEYcPW)*on=&4Rwza0<98M|bHK-z|3lMY+eX>uh2+gP2&@*d zDFL-F=4`5LQ!V%h!BH9K&WSqdp@PuA(3c`Wmh@4XMy5@W_PCJGQhX<1#{nl>50b64 z(k0>32AVcBHf~tg+;TUmO`Q9k9eW4pANqE-Y}nAUq-jmvua+$RCF?qA$xc{m!omID z&`>`GwGp&)(pnOLAs`8{0GK{XnZsxpZHNKDWpo`Lry$^DMZs)4U21)pT)Ifn2R5=$ z)<|6rOc*@!*6^;4EiIdxNI2He7z;11e&<`EdT)-f#l!H)Yt03F#tzg0hcEm$o%@%%q;O3f49?(nTd$Qw?w364)^n)E6$n z&e{YB#c)tD#G?G|6}ZsyO|;+71pkxd+V}&5GjQ`gFgv)*0C0Sctsq}-dyf_5Ll zFM$GtM8F~lx*RB!h&&yR+3=A>r^x8#454-r(FT#PvnOUlg9ziPMsbQHse*>%!HYm#A z10*1={a|4Zqh;89V4udSv(`;7C06;2(pl4INf%8-P|J~onhruOSIWI`M2E$PSDw-T zNt**18$xLV$>h_9W;M*MtSjp}@w)34Enl&SRQG-N%rl!dZ0J1|_Ihv_tZA;=x_ilr z#fw%fPTaVJ%#`E}-;3`Jr;}@jAH?qJb25M~kag*B4S8tz2-I_Xr9;T-BQ@BzF9ELn zNZnY9A^IP;b|F*(mP*)@pNr-Fs1V&4k+Ruv|3MC&8ERwX-QEBV{OC~J(ql|IKFQ^= zYz;O|qz+U2flCq_F9P>3j)}N!kwiIsE{$U{6%7RxqgP;cU=9x2~k>cnG zkOJf9$)*BGfF-wtyA^Om|`XUn?N*0GB| zH=!bNSIe_4S0nfqFU%lCb6X<|TXV`L^{(7_dd8Q(oZfq4%jUK9q4l{lChl%t+n$bA zrlFPpMk^!M4GqO;6^BzE<1&aH8phUyLGY_rAIUFV>Z;K9c=z8J8t99!Fu@w>RXV@Q4+eIk9vh+z(6U7kjg-W_hy^QCvFW77HD* z1L`Q~qa>RH3xP_?_oW;`?(m)qj=n;^n0QVZB{tUNxx_Mj5SL~5O%}oGCS5TS(8NT`aRiSvB+Bw0f|ooi4E3A8m0h=j8;oy z=}hTLlYy<2HOofODBUGsv&B--hh;IZhjWNV-!U1Mt@SfB9P?X~|C>QqgVo>$fi62; z1zmqnbiFH4CVp%X_p6EX5MXa2`C{Wx&AM$sT=V+V)}@eUR<OuI5cVdo;yhbz2Sw6EY_a8`M!)e~!%6~sL!aT3NRx!_CSIp@;@x~j~b8G+G zPhEaFI4S*pTJ@llZtiG=C%52@wcut_}O4> zw{}@w*1m>;671xWH3;sSHnAWt2azXoVN!_bSJ+_KsUlR@uAN+1oL?kzb8$ojox~KT z+S^V(X%n1pI^u0z?OmttIBD0(yS8rLxP8<1_3PHIULI{}s$U%OLe7Hu@Qt5|nCezAC5SRISrHy=A5EI%^}k>iL^|jXa$~YRAmsi?D;skG^4ji%uZVVBXb%M6vmS=`S4?R&aGw z2H-N1mNWndX{BYrlt;jJaDs{#^t?PDqKU;5p+L+l%meYh19Sy|PO5;h+dc|H3FQ*<(3@A0hb{%6&!`(f*036A z0WY<#7=D@j2>qV}Ne3<&xe(d0`>3Tw$PU{vSyD*sgl?><%$E)&GUOCu(aPOMNG0%| zg#OZO(O%I+Gs1HgFNcdH93yM0s%moSUlMoBtlHQjy&|V7Psq7}z+BYZ2)Zjqy(KWc zf)zA&b%?S(fDyW~>X2uYKm|!j5jdmV)z{`7_zH3?CMxU4{wdsJy;j1`_^?EzxXlSlh0(@gBu@2+ixR> z$sYPB=x9nqk=llr_Gxo0xo81`^4SES9l_3SlP3oqmf_Q+|L*WgQGMe-Fs9q=shX(C5w7g9Y6%(nOu!yEFM871Ws2U&(IRQ3_gkP z)kXmP7hvim%dt&4@<5|<{E^LoEAdSU+|{x~1K?Hk3*>HSB+|rFM#vp$=W&CmT5Hk7 zLi*9+gRlaSF4L|8agJPSB%|uXaTJ234z-pV56cEekZopa&KlX9_c!c+Fy;)kV`E@J z_`3p?7plsuRMpc^6KYn1okA2Q1|8Lnnd(SNb&1DHXU;6e-$>agb1OYGoWt^uqq_(U zUK98CukEIXF1-|AeimPDJiafn*PQt5>8pCxmo%{kU*4>~OtT!-k}3&4c71SzKa}cj zf8%GI{zh>XvdDjRuju~^{$#Ndq~YCk_V9Nxx_kmwo?TWgNfIz9hT+S@lNx8x*>~K5 zRycrVA7HU9gHvhofhC(HS_V#_sMfY@IA$TDhU`KTk%qr%3FqACdC^l&mX*h1W}loX3e%+}KjhPwb$wiQ&^nQa#IUne)W+Itiy^Wy;$@NHKbTa0@1Oj^w?=VAfmTJRP&BwOkmJCw?%c?vM zHI*WJ*dz)3CGKqMUqK3SQNs?cxfEqBWql(oM4{jiU>nQv8OH5B+qWNNeJ{R<;aW&u zAHG(F$f{N#l%s{vTS4T4n2cLYwOe{R!b!2P+;1dPyBqg}<( z_4(In(2wFQTO75Ng)mFGB$pfRrBQ@>lvdQ8lz4JsWbV9B=F(|XmflxWHGSFij7W8H z3A*{{C8QbwElzuXWANxD^iu>}5Z^yF{QU64blvgb6XvprH+OqeV(oO=EzkE&OdGy@ z_)<{rdkZ-NA19`f#a`mx9!B3zKw|n3{U~`9)A-1-RWBi>OQk#_MHJ-u3Oz)2V|=EG zM@`CWNV!F&{KBMs9x1~r<(DSq5~Mt=QXW4h+DrN=?Te6^XvOf_addWTi72-d$oES6X6-vZ79{m4k3A;?U%{8Utu`eUkiUH&n>w zHI=cMlX3egTPRBK^|v^=t)*b&1x}7bu~w4`T{s3J7Wu9ls%8$w8@UTGUHQ zL8%hZ-xd@UhuwMfOXEpE@5S*_MUrtPpM?;n4k}@)*g9^G4bvZEp04cRw4PS4dB?7E zlTubv+Desl-igV+qlB~WPA%N5J~9mw^~4bwM@u)Xo&mj5D?h&Iqr>TpNI(CLqS)mVg%%U}PVWUt^C!)u23 z3}5sf`~oJKQcEb8ICs?6N*RZRA>(`rvH+r1D~aYM=0V1hDL4mJ%Q$QvWSqN@^14ZR z4Jo&%ls8Pu=aDk3Qr|GLpN6dTE@B>3Vp2wyfk1zI`r1CZCc=j=(K^ya ze~k~dCT%=Lg#6^C+SX;X?)vMIQA>pq(YeqL?w4}2X0(+`LhrL-TtLAS&ckLb_M^7r z#^^4bRD)ECZP*HAv*0A~Zn?HMOvMH#%xMu4wj{qKGo9y(TzrND*GxO46j7YA97-L# zBx^(ci6@RxR55blg@gX!_3x77CUqFcIpKpK-*LhprMn2z3y1sJnE*TA!YNg%*%Bx6 zKwY`hk8NkFww>uN7?^XqNj5k)CkrRh@O&XV6Q_(p5hR-`*;L99xUp~5fxPA0B6T%2 zb&+lKjSDUqYOSlBKfkiB71HbftYXMWV=BJ)z^Xp?Ju1E)gi&f8&_pp8+I+AvPH}FA zJYhhZq9B?EOc1f>Ew;n>g&_nx96b>!W!{*)LK@(YpLu&jaef|7J)DYAS%rBB8jU)0 z%PZ5Nuo^XA+qrZ!=DrrlEpKX_y&yZIq9~;u%L;R+E~qTYDa{F_Vsa5Q20iRrSi)3U zSFAo#1zx=XhPLqbPMaX5Lr0L5k4! zE3J11R|hF6;!QJJOw58(5&6S`HD@Khc5dsr(NlKNH!i(&Knd+sX*O>&Rlu{)RH3In zAX#FW!Nr^UtAAM=mjB~d2a+|_ee(P@2NUOyU)?=S5^0e&bSDh85bImh>MTHwO>}x5 zLcD-z`{2OHxeVIo>#ilM1)a_woeyE&#?83BVNxDwG_NQRG+L0aDRcrTl%-0P*k>{T z-yX=F+0ax~la*1KxYdVy*~A+(Bi!0uZ%K+@)1ES;2bEB39@ z(k@CN&=G4G1fW*dFvlENKl)oVajb0&b`+IuOzBk6k!b5I>Gyg-WIJ^puku$ThD(B%|fQ{$Md6zcS z!uWD#Z38IN!LWE$4U7MpH{a8__6(mls{!EiW>j&Dsp5ago3GiwrZ;i18TN9#rBru6 zsvFIlCDp$RZ%)~1cz52MlJWiW<}WSGDO$d^Y*toAdE!O`cb}V^RZu;Ba!yG`MSDsE z_Mrh&t#a#;JIf4jmd6CV58kW^+#5~c$H|^c8vf6W9p?*_fUrx-OF-B%WNs>1kI&f+ zSsT_q4mBrU+IQl<)*U<8IFvjzv<0!Pt&HrL!)P#M0#7%+69pd^)qg;EZGz{U!t$MmWed-h$>>@i$AG8N&uN22>L@_Ud&ls$d zV3|?D{8JJ;H~i-1Q_jztBoO3x!s;F8Wfj{QB9mN3{+fubK6*QDPfuH39B3>dg^40E z3(qAR%MvdEH_q@8I-7L?T@{GPieLoJY#kC(9zBl}&!yT3Q3(hRJhHKoD~~)^2X5Hb zdYnN&e-`)_0@W4dWWnchDw*P+K`(<~NJn*PIs)4fsRohm>WCwu-J1%1S2%59+9Q22 zGXfi3Z(~h{^2>boCy@mUB9ZL{v*mqO!3KD2-ae(`Pwv`zFz)>mymQx0si5;;K%NCh z&$vEq&dfQ%ATDXpH$924&?jQtaH+4x^1u%lg4ON5{5OW7u9}w`lf?zs%zAsS;C{!6oPe0m&QcfOTM6u5g z#qdr&_Mx)HiCED4EnX{?F?^>q4(4_8>=bn}NWBg1%na%BDD1ZJ^KzUQ0_hWF7MEA5 z$P?-5rSo<09#{xXsxUiOYT+C?`TirXeCGkVd$oFDq;(1T>XJm!619U>Q?)1pJ;}+# z0SO|V4RGLBDSk_3>;v_0GMOzgAqS0&SYw_E+^Q#daVe;n@O0$8&q5Rr z^-N&?AeZ{f8JIvo{gqi;kP=7ADqIJxCgh4C zUyn6_w6*xM2Y+QSlUjr82K?HKC2Jg>E3%YEYY6u}Nb6Vm=cv*LQQH7c&{&B7I#8C( zF=XwsYVcLBwHK+!)-_(5U%RY(?l|8Z3t!YafZAjW)+F1y3D9<+{%)l9qs=u4?+~y; z)?$>{q^@Jzom%e#YrHZ~K$)_|ooG)F@Q_++86X(6cB3|ln_jeCVpC#k4r~U3sJ|9} zA^b%U>BqC$@waQ-_PsY8$Ko*+C!MNKVyIc;q#aQ2RaodkS}$N6zt;xmLc$(#LEEcjj6WF^fF*u=8EIF3%~C>hF11l^1m8I zUxUEO2qpTIBWYE)s#Vn>vAP*gyHV4A)iO!RI){X&P1QDlYdg}1P_x8AKb|E`%DkJw zOeAHmM_VLhW!6Z^l7>b~knI}V@3J@LpB_cy)$2nOLwn`8l2o`$VWA8V>#*tN=I`1jW-IKRci(m zByE6Lj&9xSk{%?7(Bnhq>qRcz3-6Rma-LpLhVF&9bq30a;Y-PfWM6hD%t%^`BW)Aj z{1SKJS@!8}IiX-@RQ?-|V^ErTMJ1Sv9mYeY^;69JSPH_9UmmS6!MY!UTLuo-%p%#= zE|Oz?h2)Yvl8;7w)w+xnz~O1Ob<`TR+DRdi;ROCdCXpfx=r|7Kn{54rOd(TA37JMp ztp~_-GQ)b1l#y~WlT?sO4DESjmh}diO{&NoGS`CpJeiMS@(_$Xer7#v{f8{Deokr# zqD+vWwSa(`5Z78rLOAX|Od{6vU{^s>OX|oXvKWnYtVhTa>rqlqmXc+pfizkjq{;dv zX(lZsN?OTsvVyE6tH^4y#`*+VYkkc+0+#m@SdK^5k@aK)ybU&5f3V&no5*Ieg>1DV zLh2AbI1qCx#T=@ zKDof^A{Ua2$RYAU@*%66eAqgjTud$@9|0NdwXP?Zg6vwY1hK4M@=+LMEVuqjK8{&) zh1Cb4_Y+n>xtx5Ge2QE_K5Y$i5z zeo7u750Zzh8_3VBbFACIZ2pevb}M<9{G2>uoj@M7{%E~TenEa|T}&Rcwvoqi8o(3e zNd#^B0Qog}$~wlXA49ZR- ze2ms|F@@s_F(mKRwSWK6|DQzhn zMjNcpTG!G>+63>$7DU%=rOW9Gx{|J6P>*)3L26`j?9Q{1KiGG3Jj3btBp|{d6(J#}l(61u6 z-w}Eny`6rY-a+rAchPUqZ_;nkZ`1G4@6zwl@6#X9yXg<CfpS^ilc?`b+v4eVqP^K0%+Pzot*or|C2FH}qNhTlyUR9etkup8kRU zk-k9xME^|xLjOu%q<^C?(ZADw(0|gG=_~YK^i}#A{WpD`zCqul|DkWux2eTyR>G#SQZ}8< zU}dbF&14mJJw6t zGSbjmtz@g%YPA+Xq#mpTCSx;YDmD(Mu{CThTgTS34QwOZ#5S`n zY%4o~ZDS|0?d&9WGTXsUVW+a4>@*f*yI31*XK}Whb+A3Glbz1GSU20tdRQ;(V`s2_ zHoyki5ZlN0vjglPJCmKo&SvMZ53qCDdF*_40lSc0#163!vJbHjvy0g!>?7<__EGD* z)~nWQ*1y@u*vHvr>=W#A?A6KLtLfI4uonHCHPgD$`VkH?&t{)wpJG?APqQl#X67n( zHB1kevBT^d_8InBtZ1^VQ?1jmu4!P`vg_FO>;`rt`yBf`yNP{)-ORqoZeh1#OF55y z*}C2OI{OO5rypDQT6b7?T6bCBU|(flvu?3&#i<`ZU`Md3%V4*$+u7II9qdka7yAbL zCi@oqHv10yE=(Z5$G*>g!0xs#vc8AY+kVLIvA)25#C{CR?R%|Hv-{Zn>?iD}>;d*5 zdx-svJOdciapJqVZUL|vfr}j*zef$?Dy;s?2qgP z_9ymd_80b7_9FWmdx`y>{e%6Jz06)=|6;GQ*Vw<=>+B8oCi@S2i@nW`vIHBJ!SQhh zI>O;2jG7JC9Gs-bGk7M?f(H2?)<3OpVmkl0RSrjzE38jhpR{haK95Ph(Yl;x^BkVb z^LW1X8D3x=wyw5rvaaHVd?KI3i+C}g%%||F*lfFxm+)!4luzd~co{F}GkFEC_^Kjjbb2l+$%XZ&IQbN&c_ zl>dVNl0U{D=fC1l@F)4N`BVI9{tW*Of0qB2KgWN^pXa~lf8c-QFYrI{Kl8uvzw#IP z-}p=X@BAP9pZsP13jY^>mA}US&0ptl@HhE?_*?vKev~KpFqASxP(=3S0@@73$etk5 zMTW=}St48Hh+L5;@7Ji3{fV^#Y|BlD#a`@TU3cT zVy>7c=8I~vK-7qZA|Qgo5v~XcPlQE8)FQsZBC%L3fiLk=u}n0GM$sgiMT>}vR#U`;?Y!O?<31XW#QEV3{iIc?+af&!q>=dVonAj!SM7xNK z-J(P65uM_6(IvXYUeP0ZMV~lB^os#8D2Bv7v0oez2gRAE6x+=iwnes z;v#WKd{BHyd{|s8E)gFQmx_;ykBN_q%fu(d<>Hgj?xkBFMs(zlSeICrS{I5>i7OE9 z^Uu}=;?veW;!1IqxLO<**ND%E&x&isb>ez)gSb(APJCY6B)%YS7GD&%h+D;%#Fxca z#8<`F#1V0uxLtf*+#&81cZqL^Z;Ee;Z;S7U?~3no~=$KqabpSWNA zMEq1dARZJCiJysw#m~hf;!*Jn@k{ZTcwGESJRzPGzZOr4r^PekH{x0GTk)Luop@gS zUi?A)QM@4jB>pV^BK|5~6n_&hiNA|~h<}Qg#Vg`p;#KjQ__ugnydmBc{}FGAx5ZJB z5W~<_e$09X3XYFjzqOvUerG*x{l@yW^_2Cj^_)#`U?+pdRoFIS22Mbb{R}(P&a$)Z z96Q&}v-9l&yU?C!PqK^bVtcYZ#hz-H*wgG%d%8WtF0;$+nRbO;Y0t7}+g0`)d#*jt zo^My%3+x(up&hV;wqv_?$oA~89kFZeI(w15*j{4S+e__bc7xq$H`$H5`s4fJX+u4o z!DwSt-P=DW}m%Yup=a>+kJJYwYdl z?TL4#HAZ7?Lxb_m=C;oMwxPYdyWPi>2D+xkw5Wk5YM@cAtMgl}S``SkhV134#?0j-K+2*5 zLC48ho-CcOfHEs{#Yi4|WeRSa4KA8%(^i^VSL#~rm4lt#?eWZ2BVX#$-LSnzVaHyR zY;hpyHt{v6(_W{4T9@)u$Yar-4tsq{wJoMGEvC^e1}`n9>soxgnJ#ROiuHSX`+GF1 zS`5%p|0|QL#b7-e$X>r^sHY>=KeV?yHZ+*F-ZV{NC)${~egHbcJsQ$Y=9U7m7q&O6 z)XdFe8t()Rz;&vsK(MxzZvlSoEh(Re6<7f$*l2G}X>-)HEgBYEN7@oK1-2TDME$mz zHbtY^TSv8Jt7*$t-A!U^e-d5ALFA&Mp^{MB)luA`XPO@f`SJk1O?bY&D zo2B~04XYP>BW}U49ZNx3W2*+KDPrzHb9c?%lXr}K)A5b!9V6f81m?TOI-S3<$=ppj zjc!`ZpfhI1S}d+n*fxTtjJA<>x2t}(;|fSSp6vBtw8_BQZ0c+_bu=4To4t&9vK#}x z0jsGgEpEVwj|_PfshSaRJe3ba-m^PYjhP)I&}j@fZbnD4biPLp`8^|f?9L=o1HqO+ zdS^{{Z(H}4O{+B=%?2&ab!nXjj!we_Iu%{1Ivh8WdHP71x?VSu)z#4-kN0%PdfGeN z>~4iU{aam=-JL`bI7Bn=28ec#MsQE8uNV6H-o8C?yC)@ED9qv@=-yO_{c&zk+G6n5 zVo=*+y1m6mz3KkuR?#~$(ppR_qyASWSBvSmXfV5X)JW?!xX@gqDYG|)YxJu|*!?Mh zdl7p;H*H`HmYiUn=@!ud8D}P`Hn$_*zZX=rt9ziPE!I6~cT2ty%+w@ho)zlU zvtb_1>Lp!LmdT=eNj=*t$w`-3mkCa$M!kC0--q3i7j%Mpu{-3=)frkn^^)14ddEB` zp>Xq3Mqir*7^-hKwf+~;sKvixs zwFXmvk(3tnKW|BWX;m);qXww?U5`@pqKB$_$x!1}J!a}btDaTY1S6TchiV1}oB)#K zP4VYY(7!7-5eNmf+!6|Eo)ik0yOuohyJkwEpq_O@0slKKFoc47kcYI4g#3Ei3I#Ru z3I#Ot3I!EA!tegOp5{V9EmMVpiXjI=KAeuJ$1(6ZK71y>W8iWOT#kXmF>pCb#6o!n zo`7Gzsoyd1IR>tPpU;QeZ?9jEfj3~v519G_rk;Q)$MNAa^#u(4b^hIykM)O~VnTYI z69_e#e$ne4yqkPxG6rhV0w53LV>8HCq2AEj-=x{gCf^}>Y6UnGGid5`FtRRAGdg3SHClEcZI)YMyTBWSjQ%ip`xJdt+=%Y$$E3 zE{bi~)5)6gw_%`DSJPORq3R#(?dcuJGBv7~38+y$q{|BR@1}hHV#-u68SD4PVMn40 zk=gx8B-do}-*u(Utr-gbkum5tOYR@26)}a3U1+E1kjN12@$SJ`THK)GO#Hy)kAn&o zoe~vY3KiW76}tSUX4*4E4|JyWYJ9N%J-w!8M+_*W3<4=b1}S|&NE`m}Dtcu*(q*~2 zG4ja=K0ozE|7?m-FS+K$&pvU?yZ*v}q+T*qZTe9)TxT(jRWB3JSoNUc*Mfe))q+3n z;SAM$g}e-fF+4(2(CARl_E0cf2jOEV*y6dh`ld!R!n8a36*9Q|v02|*^i7RGPgWCxPJ^iZ2HeO9FdK$#LDXCHC(v^mEr6KcMRR7khZk}RdPS6SI zS6!*6EA>pGt`nLI*#s;_)J-?jtJ80~LQhxd=?Xnvp{FbKbcJEv$gpl?Sl1WU^@VkP zVO?KX*M|ciWPM>>Us%@{*7b#(($9?d_twbEgu(s2vNLKY40Ik)59vLfJ#qDv5%28S zBL((gUHb0MeKJuC08XG*BOp+#xEkIS7sOq0J=`_o1GS2a;ay`sP^-8Z-W6BHy-tJD z-qX8x0`z<}>OsOJA2J5_U?Hm>(|7j{^_wRNipnQJR`~{?ne5Sz8fKZQ8={_6b9;vN z_NzM7gRDb7m^$R6u0ub`I#fPchsvkxP>;F}l~Ex}KFML=1R{EN3pD9jDbS>6hd`6T zOT^#>0l{>BgO`ZGOT^$MQYU#i@Z+eSFfUSS2rBk1F{fU#eO&1`A0z55M*$}hFp^b* zI+8W{rn4qr)kFf|RZd-bB(-vQ-laeyXQE(T?g-{n-~BR8gCaV!X^<4(oj{HvE(53k zYQA&SLIsG`S)@xUaoaV+Y z>bIitf0LE8wrY_AcQy4p5luW!B&-=+B%%jbB&vwm?AZ;LzMa_8CKHn$+j_!?sd4S(Q>X6F^G<6`4{h+;YPID1MiXaSPvlRj&~ZVA`-QuYhn1=o^w)k)B0^ITehs& zyrEHR5dnFCHg8f$i?(WH1e#iTI}|uPI@GVGP$$r2#+KI6If2G#y6h84jG@f--tKOt za?ndA$Ih5qfuqeTN zp%+CcNp};f)Zb}I+HthT-Ep830wVS%%QfBWL^T;W0eufdnlsTOo%>?l@t(H0E-R!- z$8qa2;|DqiK(2$GvF-_24r8+S0fhstYLcPeIxQMI5xr`0T&;`6T{qor)Xd0%@=<>0 z>eUeLx*WGr)1?zp%*}D4x=S3rN(Cx49Xerym?neLTHTPwfJR(nKqID6ui6}^$?pPF zuGZ56Zw4MSX*ji}YfMKwrsEyG6mXnCbA~3a5uAn%p3G2k%+PZ5#sEMzxHd!3i8|>h zVqj?3K-~0ptv4aQw{P$u5;D4bJ365cgJvw{0(isTmBPANlLnf6 zGBBgIPPf*r)1bL^8f$Ky8SRaRy!5_CYt(=mh#0IU?*?mnq2@SxAq2t>XZ6SBHkock zj{gFV7hu|gn^;9J%f8< zy32y0K#rd)rO}Swj6|gdxIic!LOamY+wYI6rgVTSnPW`P2aetg!Z)T9_390P8AO>* zbWEo@b%x~Y!Z}iph2cHaJ=odTebC^gE<-2xbq@`s#rpeu_Yd`{pMrIf4E5eGWiOLd zo34`Dd-rRa3f9%>l#I!Hcsyi#vs;MT@s`-d#gjUZ8tsaEd_MTnX zf9X>7dq!yWjL_=UMuhpbFC~|$-7_@n8SduQwxo6MPRUoRNyMww*z&-=`Ug{fuhUR^ zbs9>q&Om8M$kU1)>^Pb44as??)t+g!XIkxHY;_M}E44i?)HSWWOW)-P^qO03O?kSh zhIM;-m)G(1@(n!10Mo3Qi)W?+uQ{55Vb`;3sJq)RM$bqap5A3c4YgP-;OF*Ty$5t9 zX4HFzUOdBHJk!6P>0i%C37(N2JV*N0 zMw0WiiVeRTc!PT0_O#X&`3;`5HrK)7ZyN5f55Hf(=Dwa0HoTB2FJdTLs}=!|flq65 zQNF3qENZ-no@6~EuX;va^~_A>8F|3d+FML225(xmi1JN+5x+eKUab`e{N{J9HAcG) zJVxC29MfJS@_DZRZrbOX5oY8g#I`s1FmM|o!ZSjIXM_dM$XA|`hdd)(cp)=*w8{|e zG4MJjU2FS+C-ZLPBF`)my@;Q#`JZP5LoZ_J&G19d$WJoLv>M|Pzg?yuwe}zQGw)jK z?Le)f^BaEZY3)DoXv){xa^y4bMt=0PY8mOKe~jGaX_YPL*TAb)!=PI~pP_3b0DF2j z0B{++>)i&toBFhh7xnmf^YfYV^zH-ln|6myKE19&y#@{=k9tOe@{ELp@cX9yCZADm zcv@8r`Z47O4L*%L>xB(nYgILNw=}%2p<~zdkE>PPj%)DahIM(a!J}*7a19;024AkJ z$2IV}TE&cVG<~}UpRQ?_Yxs$4=nmn}Rl8h6cdnslII!w;Lx-;6ORk|`*NjuwjDOeQ z(KUE=%{X!mow;Uwx@HD*4L)5%SFYh>@SrvDXgs=RoVkX6T*EhAGhSRnAFiP%*NlJH z@F&-dOV?i)n{ntGdT|ZkbB&e`PM^AdzrPG!xMrNWhTdJX2yjjRyN2#u!b42gnIT1Hp5Nqq|>D`Y> z6$eW6_P|D?J8u`#2Kr)ceuBNXvj+xpHkKg0J?*N+K~rK-DmVrPVM#I=Z_nHn@9s8* zs9Yh#C*9hn?6w$|mj17kuv;wW-}t6D95H)Rzi|!EbN~Z`ORFDY~{!?CBjE(90GWS?N?W{~^kTdDr~SHT*27x0sxu-mP?8Ge5Y^(cEt6 zepBF@+9Nkluo7xKhW>JT;`?Q815aiTM8Z+9wHj{Ks%M!df7G=aF3_rHRX5-j^`n&j z_OZ>+?2q@s(nM)Sat8Kv?jBs}w?0?Bt{?I{E-Q5)Od1%B^$)J!y#k6m7~&bA3QTHB zcjwF1<6!3?Mvci-G;pw|Z4Wl8fYg=k-F~t{W6%il!P>@&m}UpZf;$E4#X+eSIHs?1 zVteKK6Y2t~i&D%X;It~HgnMMN)=lk%(H6#MzgDCZCcedR57^kzYriM)FM=$(N!8l)z6??_;%pB`K+6e^bZ{8{Qe#JUd``FYX2% zTK5xh%+9*eJ>gx=^#P;%#66O(Y(3g~_wGtprX%u6)`8!eGWET=2F6MzP0jK6O;I84 zYE0nXn67N8Qoasl@9FLBitXy%hkj3%sbtN7Yb-I`U{e;f!eF7j`$sYvGY2!^0DM@2BG&$)m8nN1WqMos-h&(v>h~b8b-GVQ=S7U&vhx! zu6c%XKAB%W`}yUwpI<(^d77kD`3jVjguvJY?BxLZlpHV&7)eldj!hU-5RUB=B`x*Q{ZiH#8%v20?g^ zT-*^gLpw&3=kUB1DW~9XCp=ty2t+#Pazz>>`BKSHJ zQVzdl0)OO{xUL~*8Ti|bFwPjGzzey{|7ufM|eN%*!B__aQV>+|IIxc-Iw z71x&t%2yt%guG6U;(3@NrXT!MWxOt%X5gAdvv7rPDz1feDz4M%bX?15C9bn6Vurx? z6rr-=dm6?SKBu@YrhpJ$r}elt&{kaGXNv1;x*pe!bTh77DS|yo?^0ahU5e{Y#8V+O zMq{|P(RN&S)7`jsQbb^ZXXy~G2kAjv&!T7H3Xf7;&!^|(dLg|K*Nf@JxPF9w1lNxt zraplW>D9P?hJFUuBlHNa4^dzSeuwAadOpLq@HfO)(hCXKc7b}~0dy{|mxxPny-D1J z>&@b3T;YLZQTW-sU@`HkooO-nu*}01o+;=f85Ie^1o0=2FKWPhX42>8)udkxykgMz b45j?WvczjPg0!kqfK{YECZ0v)NbCOrL^8n0 literal 0 HcmV?d00001 diff --git a/extras/fonts/JetBrainsMonoNL-Regular.ttf b/extras/fonts/JetBrainsMonoNL-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..70d2ec9e28d6e06e923629b78b8a12c12e841589 GIT binary patch literal 208576 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

M*a5~oB;oGMxw@F(#} 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 Date: Sat, 26 Jul 2025 08:28:35 -0300 Subject: [PATCH 56/63] feat: set default email to SSH key --- install | 80 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 67 insertions(+), 13 deletions(-) diff --git a/install b/install index a240239..0cbc7e2 100755 --- a/install +++ b/install @@ -5,14 +5,64 @@ set -euo pipefail # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' +YELLOW='\033[1;33m' NC='\033[0m' # Get current location DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# Global variable for user email +USER_EMAIL="" + # Array to store completed steps declare -a completed_steps=() +# Show usage information +# @param $1 Exit code (optional) +show_usage() { + local exit_code="${1:-0}" + echo "Usage: $0 --ssh-email " + echo "" + echo "Options:" + echo " --ssh-email Email address for SSH key generation (required)" + echo " -h, --help Show this help message" + echo "" + echo "Example:" + echo " $0 --ssh-email user@example.com" + exit "$exit_code" +} + +# Parse command line arguments +parse_arguments() { + while [[ $# -gt 0 ]]; do + case $1 in + --ssh-email) + USER_EMAIL="$2" + shift 2 + ;; + -h|--help) + show_usage 0 + ;; + *) + echo -e "${RED}[ERROR]${NC} Unknown option: $1" + show_usage 1 + ;; + esac + done + + # Validate required arguments + if [[ -z "$USER_EMAIL" ]]; then + echo -e "${RED}[ERROR]${NC} Email address is required" + show_usage 1 + fi + + # Validate email format (basic validation) + if [[ ! "$USER_EMAIL" =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ ]]; then + echo -e "${RED}[ERROR]${NC} Invalid email format: $USER_EMAIL" + exit 1 + fi +} + # Register a completed step # @param $1 Step name register_completed_step() { @@ -227,8 +277,8 @@ setup_ssh() { return fi - log "Generating SSH key..." - ssh-keygen -t ed25519 -C $USER_EMAIL + log "Generating SSH key for email: $USER_EMAIL" + ssh-keygen -t ed25519 -C "$USER_EMAIL" log "SSH key generated successfully!" log "Adding SSH agent in background..." @@ -351,19 +401,23 @@ ask_continue() { } main() { + # Parse command line arguments first + parse_arguments "$@" + log "Starting installation from $DIR..." + log "Email for SSH key: $USER_EMAIL" log "This script will configure your environment with the following steps:" echo "1. Configure Zsh" echo "2. Configure Homebrew and install packages" echo "3. Configure Git" - echo "4. Configure NPM" - echo "5. Install global npm packages" - echo "6. Configure SSH" + echo "4. Configure SSH" + echo "5. Configure NPM" + echo "6. Install global npm packages" # echo "7. Set custom fonts" if [[ "$OSTYPE" == "darwin"* ]]; then - echo "7. Settings for macOS" + echo "7. Configure macOS" fi if ask_continue "Configure Zsh" "1"; then @@ -378,16 +432,16 @@ main() { setup_git fi - if ask_continue "Configure NPM" "4"; then - setup_npm + if ask_continue "Configure SSH" "4"; then + setup_ssh fi - if ask_continue "Install global npm packages" "5"; then - setup_global_npm_packages + if ask_continue "Configure NPM" "5"; then + setup_npm fi - if ask_continue "Configure SSH" "6"; then - setup_ssh + if ask_continue "Install global npm packages" "6"; then + setup_global_npm_packages fi # if ask_continue "Set custom fonts" "7"; then @@ -395,7 +449,7 @@ main() { # fi if [[ "$OSTYPE" == "darwin"* ]]; then - if ask_continue "Settings for macOS" "7"; then + if ask_continue "Configure macOS" "7"; then setup_macos fi fi From 0258573532e86ed7e498f09a5e81636a748dc248 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 26 Jul 2025 08:30:45 -0300 Subject: [PATCH 57/63] chore: rename email ssh variable --- install | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/install b/install index 0cbc7e2..098f8cd 100755 --- a/install +++ b/install @@ -12,7 +12,7 @@ NC='\033[0m' DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # Global variable for user email -USER_EMAIL="" +SSH_EMAIL="" # Array to store completed steps declare -a completed_steps=() @@ -37,7 +37,7 @@ parse_arguments() { while [[ $# -gt 0 ]]; do case $1 in --ssh-email) - USER_EMAIL="$2" + SSH_EMAIL="$2" shift 2 ;; -h|--help) @@ -51,14 +51,14 @@ parse_arguments() { done # Validate required arguments - if [[ -z "$USER_EMAIL" ]]; then + if [[ -z "$SSH_EMAIL" ]]; then echo -e "${RED}[ERROR]${NC} Email address is required" show_usage 1 fi # Validate email format (basic validation) - if [[ ! "$USER_EMAIL" =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ ]]; then - echo -e "${RED}[ERROR]${NC} Invalid email format: $USER_EMAIL" + if [[ ! "$SSH_EMAIL" =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ ]]; then + echo -e "${RED}[ERROR]${NC} Invalid email format: $SSH_EMAIL" exit 1 fi } @@ -277,8 +277,8 @@ setup_ssh() { return fi - log "Generating SSH key for email: $USER_EMAIL" - ssh-keygen -t ed25519 -C "$USER_EMAIL" + log "Generating SSH key for email: $SSH_EMAIL" + ssh-keygen -t ed25519 -C "$SSH_EMAIL" log "SSH key generated successfully!" log "Adding SSH agent in background..." @@ -405,7 +405,7 @@ main() { parse_arguments "$@" log "Starting installation from $DIR..." - log "Email for SSH key: $USER_EMAIL" + log "Email for SSH key: $SSH_EMAIL" log "This script will configure your environment with the following steps:" echo "1. Configure Zsh" From db9871f86a0387962a6694e3e5393d69b4681090 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 26 Jul 2025 08:33:13 -0300 Subject: [PATCH 58/63] docs: update to usage install --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7e8210f..a67b630 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/too 7. Run the install script: ```bash -./install +./install --ssh-email ``` ## Apps and dev tools From 84f10e5b95ccd1ab25543e3e8f1bcb311502490b Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 26 Jul 2025 08:46:23 -0300 Subject: [PATCH 59/63] chore: rename alias to list npm update packages --- zsh/aliases.zsh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh index 876a71a..cd841a0 100755 --- a/zsh/aliases.zsh +++ b/zsh/aliases.zsh @@ -24,8 +24,7 @@ alias npm-lk="npm link" alias npm-run="npm run" alias npm-ri="rm -rf node_modules && npm i" alias npm-reset='rm -rf node_modules && rm -f package-lock.json && npm install && npx node-notifier-cli -t "Done" -m "npm modules reinstalled" -s Glass -i https://cdn.rawgit.com/npm/logos/31945b5c/npm%20square/n-64.png' - -alias npm-update="ncu -i --format group" #update list using npm-check-update +alias npm-outdated="ncu -i --format group" #update package list using npm-check-update # git-cz alias commit="git-cz --disable-emoji" From 9c70663b1e12ddfee74753342c3463aa1ba73672 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Sat, 26 Jul 2025 09:14:11 -0300 Subject: [PATCH 60/63] docs: remove Docker for list app --- docs/dev-tools.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/dev-tools.md b/docs/dev-tools.md index f299286..4952476 100644 --- a/docs/dev-tools.md +++ b/docs/dev-tools.md @@ -7,12 +7,11 @@ My dev tools for macOS and Linux | Beekeeper Studio | Database management tool | [https://www.beekeeperstudio.io/](https://www.beekeeperstudio.io/) | | Cursor | AI-powered code editor | [https://www.cursor.com/](https://www.cursor.com/) | | Deno | Runtime for JavaScript and TypeScript | [https://deno.com/](https://deno.com/) | -| Docker | Containerization tool | [https://www.docker.com/](https://www.docker.com/) | | Flatpak | Package manager for Linux | [https://flatpak.org/](https://flatpak.org/) | | Git | Distributed version control system | [https://git-scm.com/](https://git-scm.com/) | | MongoDB Compass | Database management tool | [https://www.mongodb.com/products/compass](https://www.mongodb.com/products/compass) | | Node.js | JavaScript runtime for application development | [https://nodejs.org/](https://nodejs.org/) | -| OrbStack | Docker manager | [https://orbstack.com/](https://orbstack.com/) | +| OrbStack | Containerization tool | [https://orbstack.com/](https://orbstack.com/) | | Redis | Database | [https://redis.io/](https://redis.io/) | | VSCode | Code editor | [https://code.visualstudio.com/](https://code.visualstudio.com/) | | Yaak | API client | [https://yaak.app/](https://yaak.app/) | From 2b632e874c180cd45c939277ed14a70603ee49a5 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Mon, 28 Jul 2025 15:43:40 -0300 Subject: [PATCH 61/63] refactor: use NPM_TOKEN instead of GH_TOKEN --- .npmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.npmrc b/.npmrc index 0c1972d..2c11950 100644 --- a/.npmrc +++ b/.npmrc @@ -6,4 +6,4 @@ init-license=MIT scope=@${NPM_SCOPE} # set value NPM_SCOPE in .zshrc loglevel=notice registry=https://registry.npmjs.org/ -npm.pkg.github.com/:_authToken=${GH_TOKEN} # set value GH_TOKEN in .zshrc +npm.pkg.github.com/:_authToken=${NPM_TOKEN} # set value NPM_TOKEN in .zshrc From 6f2e0c7f62966fe41707d4edfe8da175ee04ceb8 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Tue, 29 Jul 2025 08:04:58 -0300 Subject: [PATCH 62/63] feat: add mdn source --- linux/.zshrc | 1 + macos/.zshrc | 1 + 2 files changed, 2 insertions(+) diff --git a/linux/.zshrc b/linux/.zshrc index a31d30b..19624fa 100644 --- a/linux/.zshrc +++ b/linux/.zshrc @@ -41,6 +41,7 @@ fi ZSH_WEB_SEARCH_ENGINES=( reddit "https://www.reddit.com/search/?q=" linkedin "https://www.linkedin.com/search/results/all/?keywords=" + mdn "https://developer.mozilla.org/search?q=" ) # deno settings diff --git a/macos/.zshrc b/macos/.zshrc index 1efd5d2..4586d0c 100644 --- a/macos/.zshrc +++ b/macos/.zshrc @@ -43,6 +43,7 @@ fi ZSH_WEB_SEARCH_ENGINES=( reddit "https://www.reddit.com/search/?q=" linkedin "https://www.linkedin.com/search/results/all/?keywords=" + mdn "https://developer.mozilla.org/search?q=" ) source $ZSH/oh-my-zsh.sh From 95151d4262c7e4de937116500959e0b6b5178076 Mon Sep 17 00:00:00 2001 From: Tiago Celestino Date: Tue, 29 Jul 2025 08:05:33 -0300 Subject: [PATCH 63/63] perf: improve performance zsh load --- linux/.zshrc | 11 +++++++++++ macos/.zshrc | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/linux/.zshrc b/linux/.zshrc index 19624fa..67e02c5 100644 --- a/linux/.zshrc +++ b/linux/.zshrc @@ -1,3 +1,14 @@ +DISABLE_AUTO_UPDATE="true" +DISABLE_MAGIC_FUNCTIONS="true" +DISABLE_COMPFIX="true" + +autoload -Uz compinit +if [ "$(date +'%j')" != "$(stat -f '%Sm' -t '%j' ~/.zcompdump 2>/dev/null)" ]; then + compinit +else + compinit -C +fi + export ZSH=$HOME/.oh-my-zsh ZSH_THEME="dracula" diff --git a/macos/.zshrc b/macos/.zshrc index 4586d0c..2464206 100644 --- a/macos/.zshrc +++ b/macos/.zshrc @@ -1,3 +1,14 @@ +DISABLE_AUTO_UPDATE="true" +DISABLE_MAGIC_FUNCTIONS="true" +DISABLE_COMPFIX="true" + +autoload -Uz compinit +if [ "$(date +'%j')" != "$(stat -f '%Sm' -t '%j' ~/.zcompdump 2>/dev/null)" ]; then + compinit +else + compinit -C +fi + export ZSH=$HOME/.oh-my-zsh ZSH_THEME="dracula"