{"id":22242653,"url":"https://github.com/gabrielecanepa/dotfiles","last_synced_at":"2025-07-21T11:33:54.650Z","repository":{"id":38391983,"uuid":"191037109","full_name":"gabrielecanepa/dotfiles","owner":"gabrielecanepa","description":"My macOS configuration and preferences","archived":false,"fork":false,"pushed_at":"2025-07-03T21:08:43.000Z","size":4596,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"dotfiles","last_synced_at":"2025-07-03T22:20:32.253Z","etag":null,"topics":["dotfiles","dotfiles-mac","git","homebrew","macos","macos-setup","oh-my-zsh","zsh"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gabrielecanepa.png","metadata":{"files":{"readme":".github/README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-06-09T17:44:02.000Z","updated_at":"2025-07-03T21:08:46.000Z","dependencies_parsed_at":"2023-12-07T09:23:48.934Z","dependency_job_id":"42d38723-f182-4ebe-8ee9-1ddbb8491f74","html_url":"https://github.com/gabrielecanepa/dotfiles","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gabrielecanepa/dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielecanepa%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielecanepa%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielecanepa%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielecanepa%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabrielecanepa","download_url":"https://codeload.github.com/gabrielecanepa/dotfiles/tar.gz/refs/heads/dotfiles","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielecanepa%2Fdotfiles/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266291963,"owners_count":23906375,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotfiles","dotfiles-mac","git","homebrew","macos","macos-setup","oh-my-zsh","zsh"],"created_at":"2024-12-03T04:16:45.441Z","updated_at":"2025-07-21T11:33:54.644Z","avatar_url":"https://github.com/gabrielecanepa.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e [!WARNING]\n\u003e If you want to try the following dotfiles, you should first fork this repository, review the code and remove things you don’t want or need. **Don’t blindly use my settings** unless you know what you are doing. Use at your own risk!\n\n## Installation\n\n\u003c!-- no toc --\u003e\n1. [SSH](#1-ssh)\n2. [Homebrew](#2-homebrew)\n3. [Oh My Zsh](#3-oh-my-zsh)\n4. [Dotfiles](#4-dotfiles)\n5. [Configuration](#5-configuration)\n    - [Shell profile](#shell-profile)\n6. [Languages and dependencies](#6-languages-and-dependencies)\n    - [Node.js](#nodejs)\n    - [Ruby](#ruby)\n    - [Python](#python)\n7. [VSCode](#7-vscode)\n    - [Settings, snippets and extensions](#settings-snippets-and-extensions)\n    - [Keybindings](#keybindings)\n8. [Assets](#8-resources)\n   - [Fonts](#fonts)\n   - [iCloud](#icloud)\n\n### 1. SSH\n\nIf not already present, generate a new SSH key and copy it to the clipboard:\n\n```sh\nssh-keygen -t ed25519 -C \"\u003ccomment\u003e\"\ntr -d '\\n' \u003c ~/.ssh/id_ed25519.pub | pbcopy\n```\n\nAdd the key to [GitHub](https://github.com/settings/ssh/new), [GitLab](https://gitlab.com/-/profile/keys) and any other services you use.\n\n### 2. Homebrew\n\nInstall [Homebrew](https://brew.sh):\n\n```sh\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\n```\n\n### 3. Oh My Zsh\n\nInstall [Oh My Zsh](https://ohmyz.sh) and some essential plugins from [zsh-users](https://github.com/zsh-users):\n\n```sh\n/bin/bash -c \"$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/HEAD/tools/install.sh)\"\n\nfor plugin in zsh-autosuggestions zsh-completions zsh-syntax-highlighting; do\n  git clone https://github.com/zsh-users/${plugin}.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/${plugin}\ndone\n\n# Restart\nzsh\n```\n\n### 4. Dotfiles\n\nClone this repository:\n\n```sh\ngh repo clone gabrielecanepa/dotfiles\n# or\ngit clone git@github.com:gabrielecanepa/dotfiles.git\n```\n\nCopy the files to your home directory, manually or in bulk.\n\n\u003e [!WARNING]\n\u003e The following bulk operation will overwrite all existing files in your home directory. Existing files will be backed up in `~/.bak`.\n\n```sh\ncd dotfiles\nbak=$(mkdir -p ~/.bak/dotfiles/$(date +%Y%m%d) \u0026\u0026 echo $_)\n\nfor config in $(ls -A); do\n  [[ -e ~/$config ]] \u0026\u0026 cp -fr ~/$config $bak\n  cp -fr $config ~/$config\ndone\n```\n\nInstall the packages listed in the [Brewfile](/.Brewfile):\n\n```sh\nbrew bundle --file ~/.Brewfile\n```\n\n### 5. Configuration\n\n#### Shell profile\n\nUse the custom [`profile` plugin](/.zsh/plugins/profile/profile.plugin.zsh) to create your shell profile with a guided prompt:\n\n```sh\nprofile install\n```\n\n#### Environment variables\n\nCopy the `.env.example` file to `.env` and fill in the environment-specific values you need:\n\n```sh\ncp ~/.env.example ~/.env\n```\n\n### 6. Languages and dependencies\n\n#### Node.js\n\nInstall the [Node.js](https://nodejs.org) version in use with [nodenv](https://github.com/nodenv/nodenv) and all saved global packages:\n\n```sh\nnodenv install $(cat ~/.node_version) --skip-existing\nnpm -g install\n```\n\nLink the nodeenv version to the tracked one:\n\n```sh\nnodenv global $(cat ~/.node-version)\nrm -f $NODENV_ROOT/version \u0026\u0026 ln -sf ~/.node-version $NODENV_ROOT/version\n```\n\n#### Ruby\n\nInstall and link the [Ruby](https://ruby-lang.org) version in use with [rbenv](https://github.com/rbenv/rbenv):\n\n```sh\nrbenv install $(cat ~/.ruby-version) --skip-existing\nrm -f $RBENV_ROOT/version \u0026\u0026 ln -sf ~/.ruby-version $RBENV_ROOT/version\n```\n\n#### Python\n\nInstall and link the [Python](https://python.org) version in use with [pyenv](https://github.com/pyenv/pyenv):\n\n```sh\npyenv install $(cat ~/.python-version) --skip-existing\nrm -f $PYENV_ROOT/version \u0026\u0026 ln -sf ~/.python-version $PYENV_ROOT/version\n```\n\n### 7. VSCode\n\n#### Settings, snippets and extensions\n\nUse symlinks to backup keybindings, settings, snippets and extensions.\n\n\u003e [!WARNING]\n\u003e The following operations will permanently replace some system folders with symlinks to the corresponding files in the repository. Make sure to back up your data before proceeding.\n\n```sh\nfor config in keybindings.json settings.json snippets; do\n  file=~/Library/Application\\ Support/Code/User/$config\n  rm -rf $file\n  ln -sf ~/.vscode/user/$config $file\ndone\n\nrm -rf ~/.vscode/extensions/extensions.json\nln -sf ~/.vscode/user/extensions.json ~/.vscode/extensions/extensions.json\n```\n\n#### Keybindings\n\nTo avoid emitting beeps in Electron-based applications when using the keyboard combinations `^⌘←`, `^⌘↓` and `^⌘` (see https://github.com/electron/electron/issues/2617) create the keybinding settings file:\n\n```sh\n[[ ! -d ~/Library/KeyBindings ]] \u0026\u0026 mkdir ~/Library/KeyBindings\ntouch ~/Library/KeyBindings/DefaultKeyBinding.dict\n```\n\nAnd populate it with the following content:\n\n```\n{\n  \"^@\\UF701\" = \"noop\";\n  \"^@\\UF702\" = \"noop\";\n  \"^@\\UF703\" = \"noop\";\n}\n```\n\n### 8. Assets\n\n#### Fonts\n    \nTo display icons in your terminal, download a font supporting [Nerd Fonts](https://nerdfonts.com), like [Monaco](https://github.com/Karmenzind/monaco-nerd-fonts/tree/master/fonts). Activate the fonts in apps supporting command line interfaces (Terminal, iTerm, VSCode, etc).\n\n#### iCloud\n\nUse the following script to:\n- Replace the home `Downloads`, `Movies` and `Music` folders with a symbolic link to the corresponding (new or existing) folder on iCloud. This grants continuous synchronization between the cloud and your local machine.\n- Replace the home `Applications` folder with a symlink to the system applications folder.\n- Create a symlink named `iCloud`, pointing to the related cloud folder, in `Applications`, `Developer` and `Pictures`.\n\n\u003e [!WARNING]\n\u003e The following operations will permanently replace some system folders with symbolic links to iCloud Drive. Make sure to back up your data before proceeding.\n\n\u003cbr\u003e\n\n```sh\nfor folder in Applications Developer Downloads Movies Music Pictures; do\n  # Create the folder in iCloud Drive if it doesn't exist.\n  cloud_folder=~/Library/Mobile\\ Documents/com~apple~CloudDocs/$folder\n  [[ ! -d $cloud_folder ]] \u0026\u0026 mkdir $cloud_folder\n\n  case $folder in\n    # Replace with a symlink to the system folder.\n    Applications)\n      rm -rf ~/Applications \n      ln -sf /Applications ~/Applications\n      ln -sf $cloud_folder /Applications/iCloud\n      ;;\n    # Create a symlink named `iCloud`.\n    Developer|Pictures)\n      ln -sf $cloud_folder ~/$folder/iCloud\n      ;;\n    # Replace with a symlink to the cloud folder.\n    Downloads|Movies|Music)\n      [[ -d ~/$folder ]] \u0026\u0026 mv ~/$folder/* $cloud_folder 2\u003e/dev/null\n      rm -rf ~/$folder \u0026\u0026 ln -sf $cloud_folder ~/$folder\n      ;;\n  esac\ndone\n```\n\nThe new folder icons can be replaced manually with the system icons stored here:\n\n```sh\nopen /System/Library/Extensions/IOStorageFamily.kext/Contents/Resources\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrielecanepa%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabrielecanepa%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrielecanepa%2Fdotfiles/lists"}