{"id":13563712,"url":"https://github.com/thoughtbot/laptop","last_synced_at":"2025-05-10T06:48:43.894Z","repository":{"id":1454741,"uuid":"1688596","full_name":"thoughtbot/laptop","owner":"thoughtbot","description":"A shell script to set up a macOS laptop for web and mobile development.","archived":false,"fork":false,"pushed_at":"2025-04-30T10:40:46.000Z","size":451,"stargazers_count":8540,"open_issues_count":1,"forks_count":1908,"subscribers_count":234,"default_branch":"main","last_synced_at":"2025-05-08T20:58:43.630Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://thoughtbot.com","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thoughtbot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"thoughtbot"}},"created_at":"2011-05-01T18:18:44.000Z","updated_at":"2025-05-07T02:35:39.000Z","dependencies_parsed_at":"2023-07-06T01:52:54.081Z","dependency_job_id":"1f1a1466-ea8a-4b72-853c-cb810c5b5404","html_url":"https://github.com/thoughtbot/laptop","commit_stats":{"total_commits":370,"total_committers":99,"mean_commits":"3.7373737373737375","dds":0.7864864864864864,"last_synced_commit":"2f85cba52ca2bb8ddedd086397af6653eebd99fb"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Flaptop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Flaptop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Flaptop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Flaptop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","download_url":"https://codeload.github.com/thoughtbot/laptop/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253157588,"owners_count":21863137,"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":[],"created_at":"2024-08-01T13:01:22.487Z","updated_at":"2025-05-08T22:30:49.827Z","avatar_url":"https://github.com/thoughtbot.png","language":"Shell","funding_links":["https://github.com/sponsors/thoughtbot"],"categories":["Shell","HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"Laptop\n======\n\nLaptop is a script to set up a macOS laptop for web and mobile development.\n\nIt can be run multiple times on the same machine safely.\nIt installs, upgrades, or skips packages\nbased on what is already installed on the machine.\n\nRequirements\n------------\n\nWe support:\n\n* macOS Sequoia (15.x) on Apple Silicon and Intel\n* macOS Sonoma (14.x) on Apple Silicon and Intel\n* macOS Ventura (13.x) on Apple Silicon and Intel\n* macOS Monterey (12.x) on Apple Silicon and Intel\n\nOlder versions may work but aren't regularly tested.\nBug reports for older versions are welcome.\n\nInstall\n-------\n\nDownload the script:\n\n```sh\ncurl --remote-name https://raw.githubusercontent.com/thoughtbot/laptop/main/mac\n```\n\nReview the script (avoid running scripts you haven't read!):\n\n```sh\nless mac\n```\n\nExecute the downloaded script:\n\n```sh\nsh mac 2\u003e\u00261 | tee ~/laptop.log\n```\n\nOptionally, review the log:\n\n```sh\nless ~/laptop.log\n```\n\nOptionally, [install thoughtbot/dotfiles][dotfiles].\n\n[dotfiles]: https://github.com/thoughtbot/dotfiles#install\n\nDebugging\n---------\n\nYour last Laptop run will be saved to `~/laptop.log`.\nRead through it to see if you can debug the issue yourself.\nIf not, copy the lines where the script failed into a\n[new GitHub Issue](https://github.com/thoughtbot/laptop/issues/new) for us.\nOr, attach the whole log file as an attachment.\n\nWhat it sets up\n---------------\n\nmacOS tools:\n\n* [Homebrew] for managing operating system libraries.\n\n[Homebrew]: http://brew.sh/\n\nUnix tools:\n\n* [Universal Ctags] for indexing files for vim tab completion\n* [Git] for version control\n* [OpenSSL] for Transport Layer Security (TLS)\n* [RCM] for managing company and personal dotfiles\n* [The Silver Searcher] for finding things in files\n* [Tmux] for saving project state and switching between projects\n* [Watchman] for watching for filesystem events\n* [Zsh] as your shell\n\n[Universal Ctags]: https://ctags.io/\n[Git]: https://git-scm.com/\n[OpenSSL]: https://www.openssl.org/\n[RCM]: https://github.com/thoughtbot/rcm\n[The Silver Searcher]: https://github.com/ggreer/the_silver_searcher\n[Tmux]: http://tmux.github.io/\n[Watchman]: https://facebook.github.io/watchman/\n[Zsh]: http://www.zsh.org/\n\nHeroku tools:\n\n* [Heroku CLI] and [Parity] for interacting with the Heroku API\n\n[Heroku CLI]: https://devcenter.heroku.com/articles/heroku-cli\n[Parity]: https://github.com/thoughtbot/parity\n\nGitHub tools:\n\n* [GitHub CLI] for interacting with the GitHub API\n\n[GitHub CLI]: https://cli.github.com/\n\nImage tools:\n\n* [ImageMagick] for cropping and resizing images\n\nProgramming languages, package managers, and configuration:\n\n* [asdf-vm] for managing programming language versions\n* [Bundler] for managing Ruby libraries\n* [Node.js] and [npm], for running apps and installing JavaScript packages\n* [Ruby] stable for writing general-purpose code\n* [Yarn] for managing JavaScript packages\n* [Rosetta 2] for running tools that are not supported in Apple silicon processors\n\n[Bundler]: http://bundler.io/\n[ImageMagick]: http://www.imagemagick.org/\n[Node.js]: http://nodejs.org/\n[npm]: https://www.npmjs.org/\n[asdf-vm]: https://github.com/asdf-vm/asdf\n[Ruby]: https://www.ruby-lang.org/en/\n[Yarn]: https://yarnpkg.com/en/\n[Rosetta 2]: https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment\n\nDatabases:\n\n* [Postgres] for storing relational data\n* [Redis] for storing key-value data\n\n[Postgres]: http://www.postgresql.org/\n[Redis]: http://redis.io/\n\nIt should take less than 15 minutes to install (depends on your machine).\n\nCustomize in `~/.laptop.local`\n------------------------------\n\nYour `~/.laptop.local` is run at the end of the Laptop script.\nPut your customizations there.\nFor example:\n\n```sh\n#!/bin/sh\n\nbrew bundle --file=- \u003c\u003cEOF\nbrew \"Caskroom/cask/dockertoolbox\"\nbrew \"go\"\nbrew \"ngrok\"\nbrew \"watch\"\nEOF\n\ndefault_docker_machine() {\n  docker-machine ls | grep -Fq \"default\"\n}\n\nif ! default_docker_machine; then\n  docker-machine create --driver virtualbox default\nfi\n\ndefault_docker_machine_running() {\n  default_docker_machine | grep -Fq \"Running\"\n}\n\nif ! default_docker_machine_running; then\n  docker-machine start default\nfi\n\nfancy_echo \"Cleaning up old Homebrew formulae ...\"\nbrew cleanup\n\nif [ -r \"$HOME/.rcrc\" ]; then\n  fancy_echo \"Updating dotfiles ...\"\n  rcup\nfi\n```\n\nWrite your customizations such that they can be run safely more than once.\nSee the `mac` script for examples.\n\nLaptop functions such as `fancy_echo` and\n`gem_install_or_update`\ncan be used in your `~/.laptop.local`.\n\nSee the [wiki](https://github.com/thoughtbot/laptop/wiki)\nfor more customization examples.\n\nContributing\n------------\n\nThank you, [contributors]!\n\n[contributors]: https://github.com/thoughtbot/laptop/graphs/contributors\n\nBy participating in this project,\nyou agree to abide by the thoughtbot [code of conduct].\n\n[code of conduct]: https://thoughtbot.com/open-source-code-of-conduct\n\nEdit the `mac` file.\nDocument in the `README.md` file.\nUpdate the `CHANGELOG`.\nFollow shell style guidelines by using [ShellCheck] and [ALE] or deprecated [Syntastic].\n\n```sh\nbrew install shellcheck\n```\n\n[ShellCheck]: http://www.shellcheck.net/about.html\n[Syntastic]: https://github.com/scrooloose/syntastic\n[ALE]: https://github.com/dense-analysis/ale\n\n\n### Testing your changes\n\nTest your changes by running the script on a fresh install of macOS.\nYou can use the free and open source emulator [UTM].\n\nTip: Make a fresh virtual machine with the installation of macOS completed and\nyour user created and first launch complete. Then duplicate that machine to test\nthe script each time on a fresh install that's ready to go.\n\n[UTM]: https://mac.getutm.app\n\nLicense\n-------\n\nCopyright © 2011 thoughtbot, inc.\nIt is free software,\nand may be redistributed under the terms specified in the [LICENSE] file.\n\n[LICENSE]: LICENSE\n\n\u003c!-- START /templates/footer.md --\u003e\n## About thoughtbot\n\n![thoughtbot](https://thoughtbot.com/thoughtbot-logo-for-readmes.svg)\n\nThis repo is maintained and funded by thoughtbot, inc.\nThe names and logos for thoughtbot are trademarks of thoughtbot, inc.\n\nWe love open source software!\nSee [our other projects][community].\nWe are [available for hire][hire].\n\n[community]: https://thoughtbot.com/community?utm_source=github\n[hire]: https://thoughtbot.com/hire-us?utm_source=github\n\n\n\u003c!-- END /templates/footer.md --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthoughtbot%2Flaptop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthoughtbot%2Flaptop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthoughtbot%2Flaptop/lists"}