{"id":43485044,"url":"https://github.com/markosamuli/linux-machine","last_synced_at":"2026-02-03T09:07:26.749Z","repository":{"id":52168491,"uuid":"137289956","full_name":"markosamuli/linux-machine","owner":"markosamuli","description":"Linux development machine setup","archived":false,"fork":false,"pushed_at":"2024-07-10T08:57:08.000Z","size":376,"stargazers_count":6,"open_issues_count":11,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-07-10T10:48:31.321Z","etag":null,"topics":["ansible","linux","ubuntu"],"latest_commit_sha":null,"homepage":"","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/markosamuli.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2018-06-14T01:23:10.000Z","updated_at":"2024-02-22T13:12:52.000Z","dependencies_parsed_at":"2024-07-10T10:33:57.433Z","dependency_job_id":"dded4bb9-2308-4315-bfc2-57c62b6aa843","html_url":"https://github.com/markosamuli/linux-machine","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/markosamuli/linux-machine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markosamuli%2Flinux-machine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markosamuli%2Flinux-machine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markosamuli%2Flinux-machine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markosamuli%2Flinux-machine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/markosamuli","download_url":"https://codeload.github.com/markosamuli/linux-machine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markosamuli%2Flinux-machine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29039342,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T08:41:49.363Z","status":"ssl_error","status_checked_at":"2026-02-03T08:40:19.255Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["ansible","linux","ubuntu"],"created_at":"2026-02-03T09:07:25.999Z","updated_at":"2026-02-03T09:07:26.742Z","avatar_url":"https://github.com/markosamuli.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Development Linux Setup\n\n[![GitHub release](https://img.shields.io/github/release/markosamuli/linux-machine.svg)](https://github.com/markosamuli/linux-machine/releases)\n[![License](https://img.shields.io/github/license/markosamuli/linux-machine.svg)](https://github.com/markosamuli/linux-machine/blob/master/LICENSE)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\u0026logoColor=white)](https://github.com/pre-commit/pre-commit)\n[![Known Vulnerabilities](https://snyk.io/test/github/markosamuli/linux-machine/badge.svg?targetFile=requirements.txt)](https://snyk.io/test/github/markosamuli/linux-machine?targetFile=requirements.txt)\n\n| Branch  | Build Status                              | Coding Style                |\n| ------- | ----------------------------------------- | --------------------------- |\n| master  | [![Build Status][travis-master]][travis]  | ![Coding Style][cs-master]  |\n| develop | [![Build Status][travis-develop]][travis] | ![Coding Style][cs-develop] |\n\nThis is a collection of Ansible roles and tasks to setup a Linux development\nmachine.\n\nRead my [Machine Setup Guide][machine-setup-guide] for instructions.\n\n[machine-setup-guide]: https://machine.msk.io/\n[travis]: https://travis-ci.org/markosamuli/linux-machine/branches\n[travis-master]: https://travis-ci.org/markosamuli/linux-machine.svg?branch=master\n[travis-develop]: https://travis-ci.org/markosamuli/linux-machine.svg?branch=develop\n[cs-master]: https://github.com/markosamuli/linux-machine/workflows/Code%20Quality/badge.svg?branch=master\n[cs-develop]: https://github.com/markosamuli/linux-machine/workflows/Code%20Quality/badge.svg?branch=develop\n\n## Requirements\n\n- [Ubuntu][ubuntu] or [Debian][debian] Linux\n- Git installed\n- Bash shell\n- [Ansible][ansible] 2.8 or newer\n- [Python][python] 3.7 or newer as required by Ansible\n\nSee [markosamuli/macos-machine] for my macOS setup.\n\n[ubuntu]: https://www.ubuntu.com\n[debian]: https://www.debian.org\n[ansible]: https://www.ansible.com\n[markosamuli/macos-machine]: https://github.com/markosamuli/macos-machine\n\n### Ubuntu\n\nThis setup has been tested on the following Linux releases:\n\n- [Ubuntu 20.04 LTS (Focal Fossa)][focal]\n- [Debian 10 \"buster\"][buster]\n\nOlder releases are only tested using Travis CI builds and might not be fully\nsupported:\n\n- [Ubuntu 18.04 LTS (Bionic Beaver)][bionic]\n- [Ubuntu 16.04 LTS (Xenial Xerus)][xenial]\n\n[xenial]: http://releases.ubuntu.com/16.04/\n[bionic]: http://releases.ubuntu.com/18.04/\n[focal]: http://releases.ubuntu.com/20.04/\n[buster]: https://www.debian.org/releases/buster/\n\n### Ubuntu on WSL\n\nI've used this playbook to install packages on Ubuntu running on\n[Windows Subsystem for Linux][wsl] on Windows 10.\n\nI'm currently running Ubuntu 20.04 LTS on WSL2 and will not be testing any\nfuture configuration on WSL1.\n\nSome packages are known not to work so I've added custom fact `is_wsl`\nthat can be used to check if we're running Linux on Windows and these\nwill be skipped during the set up.\n\n[wsl]: https://docs.microsoft.com/en-us/windows/wsl/install-win10\n\n### Pengwin on WSL\n\nI'm no longer using or testing the playbooks on Pengwin Linux since I've\nupgraded to WSL2 and Ubuntu 20.04 LTS and Debian buster on my Windows 10\nenvironment.\n\n## Install\n\nInstall Git and curl:\n\n```bash\nsudo apt update\nsudo apt install curl git\n```\n\nYou can run the installer script that will clone the code from GitHub and run\nthe `setup` script.\n\n```bash\ncurl -s https://raw.githubusercontent.com/markosamuli/linux-machine/master/install.sh | bash -\n```\n\n## Getting Started\n\nClone this project locally and run the `./setup` script.\n\n```bash\ngit clone https://github.com/markosamuli/linux-machine\ncd linux-machine\n./setup\n```\n\n## Local options\n\nYou can pass custom variables to the Ansible playbook and roles by creating\na [`machine.yaml`][machine.yaml] file to customise your configuration.\n\n```bash\ncp machine.yaml.example machine.yaml\n```\n\nYou can also use my customizations:\n\n```bash\nln -s machine.msk.yaml machine.yaml\n```\n\nThe `setup` script will detect if this file exists and passes it to the\nAnsible Playbook with `--extra-vars`.\n\n[machine.yaml]: machine.yaml\n\n## Ansible\n\nThe setup script will try to install Ansible\n\n### Ansible version\n\nAnsible version 2.9 is installed by default.\n\nYou can define `MACHINE_ANSIBLE_VERSION` environment variable to change\nthe installed version.\n\nExample to use Ansible 2.8 instead of Ansible 2.9:\n\n```bash\nexport MACHINE_ANSIBLE_VERSION=2.8\n```\n\n### Force Ansible reinstall\n\nTo remove existing Ansible versions and force installation of Ansible, you\ncan use the `--reinstall-ansible` argument, for example:\n\n```bash\n./setup --reinstall-ansible\n```\n\n### Installing Ansible with APT\n\nThe setup script will install Ansible using APT from\n[Ansible PPAs][ansible-ppa] if the `ansible` command is not found on your\nsystem.\n\nUbuntu 20.04 LTS will not use Ansible PPAs as the builds for this release\nare missing.\n\n| Version         | PPA                   |\n| --------------- | --------------------- |\n| `2.8`           | [ansible/ansible-2.8] |\n| `2.9` (default) | [ansible/ansible-2.9] |\n\n[ansible-ppa]: https://launchpad.net/~ansible\n[ansible/ansible-2.8]: https://launchpad.net/~ansible/+archive/ubuntu/ansible-2.8\n[ansible/ansible-2.9]: https://launchpad.net/~ansible/+archive/ubuntu/ansible-2.9\n\n### Installing Ansible from PyPI into virtualenv\n\nIf an acceptable Ansible APT package installation candidate can't be found\nthe setup script will try to install Ansible with [pip] in a local virtuelenv.\n\nIf [virtuelenv] can't be found the setup script the setup will fail.\n\nYou can disable installation from PyPI with `--disable-ansible-pypi` argument,\nfor example:\n\n```bash\n./setup --disable-ansible-pypi\n```\n\n[pip]: https://pypi.org/project/pip/\n[virtuelenv]: https://virtualenv.pypa.io/en/latest/\n\n### Installing Ansible from PyPI into pyenv environment\n\nIf the user has set up a local development environment with [pyenv] and this is\ndefined in a `.python-version` file in the repository root, the setup script\nwill install Ansible into this environment.\n\nSame as with the local virtualenv, you can disable installation from PyPI\nwith `--disable-ansible-pypi` argument, for example:\n\n```bash\n./setup --disable-ansible-pypi\n```\n\n[pyenv]: https://github.com/pyenv/pyenv\n\n## Software installed by the playbooks\n\n### Zsh\n\nZsh is installed by default. You can disable this in the configuration:\n\n```yaml\ninstall_zsh: false\n```\n\n### Homebrew on Linux (aka Linuxbrew)\n\n[Homebrew][homebrew] can be installed on Linux by enabled the following option:\n\n```yaml\ninstall_linuxbrew: true\n```\n\nTo enable and install:\n\n```bash\nmake install-linuxbrew\n```\n\nInstallation will be done using [markosamuli.linuxbrew] Ansible role.\n\n[homebrew]: https://docs.brew.sh/Homebrew-on-Linux\n\n### Terminals for desktop environments\n\nInstalled on all non-WSL environments:\n\n- [Terminator][terminator]\n- [Hyper][hyper]\n- [Terminus][terminus]\n\n[terminator]: https://gnometerminator.blogspot.com/p/introduction.html\n[hyper]: https://hyper.is/\n[terminus]: https://eugeny.github.io/terminus/\n\n### Developer tools\n\nInstalled on all non-WSL environments:\n\n- [Meld][meld], a visual diff and merge tool\n\n[meld]: https://meldmerge.org/\n\n### Slack\n\nTo install [Slack][slack] desktop application via Snap package:\n\n```yaml\ninstall_slack: true\n```\n\n[slack]: https://snapcraft.io/slack\n\n### Productivity applications\n\nInstalled on non-WSL environments:\n\n- [LibreOffice][libreoffice]\n\nTo enable and install:\n\n```bash\nmake install-productivity\n```\n\nTo disable:\n\n```yaml\ninstall_productivity: false\n```\n\n[libreoffice]: https://www.libreoffice.org/\n\n### Antivirus\n\nAntivirus software can be installed:\n\n- [ClamAV][clamav]\n\nTo enable and install:\n\n```bash\nmake install-antivirus\n```\n\nTo enable manually:\n\n```yaml\ninstall_antivirus: true\n```\n\n[clamav]: https://www.clamav.net/\n\n### Security tools\n\nSecurity tools that can be installed:\n\n- [Lynis][lynis] security tool\n\nTo enable and run the security playbook:\n\n```bash\nmake install-security\n```\n\nTo enable manually:\n\n```yaml\ninstall_security: true\n```\n\n[lynis]: https://cisofy.com/lynis/\n\n### Security hardening\n\nInstall optional security hardening tools:\n\n- [passwdqc][passwdqc] for password/passphrase strength checking and enforcement\n- [USBGuard][usbguard] for protecting system against rogue USB devices\n- [debsums][debsums] tool for verification of installed package files against\n  MD5 checksums\n\nTo enable and run the security hardening playbook:\n\n```bash\nmake install-security-hardening\n```\n\nTo enable manually:\n\n```yaml\ninstall_security_hardening: true\n```\n\n[passwdqc]: https://www.openwall.com/passwdqc/\n[usbguard]: https://usbguard.github.io/\n[debsums]: https://packages.ubuntu.com/eoan/debsums\n\n### Monitoring\n\nInstall optional system monitoring tools:\n\n- [GNU Accounting utilities][acct] for process and login accounting\n- [sysstat] - Performance monitoring tools for Linux\n\nTo enable and run the monitoring playbook:\n\n```bash\nmake install-monitoring\n```\n\nTo enable manually:\n\n```yaml\ninstall_monitoring: true\n```\n\n[acct]: https://www.gnu.org/software/acct/\n[sysstat]: https://github.com/sysstat/sysstat\n\n### Command line tools\n\n- [GNU Wget][wget]\n- [curl]\n- [jq] command-line JSON processor\n- [The Silver Searcher][ag] (`ag` command) code searching utility similar\n  to `ack`\n- [htop] process viewer for console\n- [pass] — the standard unix password manager\n- [ShellCheck][shellcheck], a static analysis tool for shell scripts\n\nRun the tools playbook:\n\n```bash\nmake install-tools\n```\n\n[wget]: https://www.gnu.org/software/wget/\n[curl]: https://curl.haxx.se/\n[jq]: https://stedolan.github.io/jq/\n[htop]: https://hisham.hm/htop/\n[ag]: https://github.com/ggreer/the_silver_searcher\n[pass]: https://www.passwordstore.org/\n[shellcheck]: https://github.com/koalaman/shellcheck\n\n### Visual Studio Code\n\n[Visual Studio Code][vscode] will be installed on non-WSL environments via Snap\npackage.\n\nSee [Developing on WSL][vscode-dev-wsl] for instructions how to install and use\nVisual Studio Code [Remote - WSL][vscode-remote-wsl] extension.\n\n[vscode]: https://code.visualstudio.com/\n[vscode-dev-wsl]: https://code.visualstudio.com/docs/remote/wsl\n[vscode-remote-wsl]: https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl\n\n### Vim\n\nLatest version of [Vim] will be installed using the package manager.\n\nTo install [Neovim] enable it in `machine.yaml`:\n\n```yaml\ninstall_neovim: true\n```\n\n[vim]: https://www.vim.org/\n[neovim]: https://neovim.io/\n\n### asdf version manager\n\nYou can install [asdf] version manager by adding the following\noption to your [`machine.yaml`][machine.yaml]:\n\n```yaml\ninstall_asdf: true\n```\n\nTo configure [asdf plugins] and package versions to install, add them\ninto your [`machine.yaml`][machine.yaml] configuration.\n\n```yaml\nasdf_plugins:\n  - name: kubectl\n  - name: concourse\n```\n\n[asdf]: https://asdf-vm.com\n[asdf plugins]: https://asdf-vm.com/#/plugins-all\n\n### Python\n\nUse Ubuntu/Debian packages to install Python on the system:\n\n- [Python] with `python3` package — installed Python version will depend on the\n  OS release version\n- [pip] with `python3-pip` package\n- [virtualenv] from PyPI\n\nUse [pyenv] to install and manage Python versions for the current user:\n\n- [pyenv]\n- [pyenv-virtualenv]\n- [Python] 3.7 and 3.8 installed with pyenv\n\nRun Python playbook:\n\n```bash\nmake install-python\n```\n\nYou can disable installation by adding the following option to\nyour [`machine.yaml`][machine.yaml]:\n\n```yaml\ninstall_python: false\n```\n\nThe [markosamuli.pyenv] role will modify your `.bashrc` and `.zshrc` files\nduring the setup. If you want to disable this, edit `machine.yaml` file\nand disable the following configuration option.\n\n```yaml\npyenv_init_shell: false\n```\n\n[python]: https://www.python.org/\n[pyenv]: https://github.com/pyenv/pyenv\n[pyenv-virtualenv]: https://github.com/pyenv/pyenv-virtualenv\n\n### Ruby\n\nTo install Ruby for development, enable it in your `machine.yaml` configuration:\n\n```yaml\ninstall_ruby: true\n```\n\nThis will install:\n\n- [rbenv] using [zzet.rbenv] role\n- [Ruby] version 2.6.3 with rbenv\n\nRun Ruby playbook:\n\n```bash\nmake install-ruby\n```\n\nTo change the installed rubies and default version, add the following to your\n`machine.yaml` file and customize it to your needs:\n\n```yaml\nrbenv:\n  env: user\n  version: v1.1.2\n  default_ruby: 2.6.3\n  rubies:\n    - version: 2.6.3\n```\n\nThe role doesn't update your `.bashrc` or `.zshrc` files but adds a global\ninitialization script in `/etc/profile.d/rbenv.sh`. If this doesn't work on\nyour environment, add something like below to initialize rbenv in your shell:\n\n```bash\nif [ -z \"${RBENV_ROOT}\" ]; then\n  if [ -d \"$HOME/.rbenv\" ]; then\n    export PATH=$HOME/.rbenv/bin:$PATH;\n    export RBENV_ROOT=$HOME/.rbenv;\n    eval \"$(rbenv init -)\";\n  fi\nfi\n```\n\n[zzet.rbenv]: https://github.com/zzet/ansible-rbenv-role\n[rbenv]: https://github.com/rbenv/rbenv\n[ruby]: https://www.ruby-lang.org/en/\n\n### Rust\n\nInstall [Rust] programming language with [markosamuli.rust] role.\n\nEnable with:\n\n```yaml\ninstall_rust: true\n```\n\nTo avoid modifying path during install:\n\n```yaml\nrust_modify_path: false\n```\n\nRun Rust playbook:\n\n```bash\nmake install-rust\n```\n\nTo uninstall Rust, run:\n\n```bash\nrustup self uninstall\n```\n\n[rust]: https://www.rust-lang.org/\n[markosamuli.rust]: https://github.com/markosamuli/ansible-rust\n\n### Node.js\n\n- [Node Version Manager](NVM)\n- [Node.js] LTS installed with NMV\n\nRun Node.js playbook:\n\n```bash\nmake install-node\n```\n\nYou can disable installation by adding the following option to\nyour [`machine.yaml`][machine.yaml]:\n\n```yaml\ninstall_nodejs: false\n```\n\n[node version manager]: https://github.com/creationix/nvm\n[node.js]: https://nodejs.org/en/\n\n### Go\n\n[Go programming language] installed using [markosamuli.golang]\nAnsible role.\n\nRun Go playbook:\n\n```bash\nmake install-golang\n```\n\nYou can disable installation by adding the following option to\nyour [`machine.yaml`][machine.yaml]:\n\n```yaml\ninstall_golang: false\n```\n\n[go programming language]: https://golang.org/\n\nGo tools installed for development:\n\n- [golint] is a linter for Go source code\n- [goimports] is a tool for updating your Go import lines\n- [errcheck] is a program for checking for unchecked errors in go programs\n- [go-callvis] is a development tool to help visualize call graph of a Go\n  program using interactive view\n- [gopkgs] is a tool that provides list of available Go packages that can be\n  imported\n- [Stringer][stringer] is a tool to automate the creation of methods that\n  satisfy the fmt.Stringer interface\n- [guru] is a tool for answering questions about Go source code\n- [staticcheck] is a linter for Go source code\n\n[golint]: https://godoc.org/golang.org/x/lint\n[goimports]: https://godoc.org/golang.org/x/tools/cmd/goimports\n[errcheck]: https://github.com/kisielk/errcheck\n[go-callvis]: https://github.com/TrueFurby/go-callvis\n[gopkgs]: https://github.com/uudashr/gopkgs\n[stringer]: https://godoc.org/golang.org/x/tools/cmd/stringer\n[guru]: https://godoc.org/golang.org/x/tools/cmd/guru\n[staticcheck]: https://godoc.org/honnef.co/go/tools/staticcheck\n\n### Lua\n\nYou can install [Lua][lua] programming language by adding the following option\nto your [`machine.yaml`][machine.yaml] file:\n\n```yaml\ninstall_lua: true\n```\n\nRun Lua playbook:\n\n```bash\nmake install-lua\n```\n\nThis will also install [LuaRocks][luarocks] package manager and [luacheck]\nrock using the custom [luarocks module][luarocks-py].\n\n[lua]: https://www.lua.org/\n[luarocks]: https://luarocks.org/\n[luacheck]: https://github.com/mpeterv/luacheck\n[luarocks-py]: playbooks/library/luarocks.py\n\n### Git\n\nLatest version of [Git][git] will be installed.\n\n[git]: https://git-scm.com/\n\n### Vagrant and VirtualBox\n\n[Vagrant][vagrant] and [VirtualBox][virtualbox] are no longer installed by\ndefault, but you can enable them by adding:\n\n```yaml\ninstall_vagrant: true\n```\n\n[vagrant]: https://www.vagrantup.com/\n[virtualbox]: https://www.virtualbox.org/\n\n### Docker\n\n[Docker][docker] will be installed by default.\n\nRun Docker playbook:\n\n```bash\nmake install-docker\n```\n\nTo disable installation, add:\n\n```yaml\ninstall_docker: false\n```\n\n[docker]: https://docs.docker.com/engine/\n\n### Packer\n\nTo install [Packer][packer] add:\n\n```yaml\ninstall_packer: true\n```\n\n[packer]: https://packer.io/\n\n### Terraform\n\nTerraform is installed using [`tfenv`][tfenv] Terraform version manager.\n\nRun Terraform playbook:\n\n```bash\nmake install-terraform\n```\n\nDisable [Terraform][terraform] installation with:\n\n```yaml\ninstall_terraform: false\n```\n\n[tfenv]: https://github.com/tfutils/tfenv\n[terraform]: https://www.terraform.io/\n\n### Amazon Web Services\n\n- [AWS CLI](https://aws.amazon.com/cli/)\n- [aws-shell](https://github.com/awslabs/aws-shell) - interactive shell for\n  AWS CLI\n- [AWS Vault](https://github.com/99designs/aws-vault) - a vault for securely\n  storing and accessing AWS credentials in development environments\n- [cli53](https://github.com/barnybug/cli53) - command line tool for Amazon\n  Route 53\n\nYou can disable installation by adding the following option to\nyour [`machine.yaml`][machine.yaml]:\n\n```yaml\ninstall_aws: false\n```\n\n### Google Cloud Platform\n\n[Google Cloud SDK][cloud-sdk] installed from the archive file under user home\ndirectory.\n\nRun Google Cloud SDK playbook:\n\n```bash\nmake install-gcloud\n```\n\nDefault install path is in `~/google-cloud-sdk`, but you can\ninstall it to another location, for example if you prefer\n`~/opt/google-cloud-sdk` add the following option:\n\n```yaml\ngcloud_install_path: ~/opt\n```\n\nTo prefer `python3` over `python2` during Google Cloud SDK install:\n\n```yaml\ngcloud_prefer_python3: true\n```\n\nThe [markosamuli.gcloud] role will modify your `.bashrc` and `.zshrc` files.\nTo disable this and manage the configuration yourself, disable the following\nconfiguration option in the [`machine.yaml`][machine.yaml] file:\n\n```yaml\ngcloud_setup_shell: false\n```\n\nYou can disable installation by adding the following option to\nyour [`machine.yaml`][machine.yaml]:\n\n```yaml\ninstall_gcloud: false\n```\n\nIf you prefer to install Google Cloud SDK using package manager, enable it in\nthe `machine.yaml` configuration file:\n\n```yaml\ngcloud_install_from_package_manager: true\n```\n\n[cloud-sdk]: https://cloud.google.com/sdk/\n\n## Changes to existing configuration\n\nThe installer makes changes to your `~/.bashrc` and `~/.zshrc` files, so take\nbackup copies of them before running the script.\n\n## Ansible Roles\n\nThe following external Ansible roles are installed and used. See\n[requirements.yml] file for the installed versions.\n\nTo install roles:\n\n```bash\nmake install-roles\n```\n\nTo update roles to the latest release versions:\n\n```bash\nmake update-roles\n```\n\nTo remove any outdated roles:\n\n```bash\nmake clean-roles\n```\n\n| Role                    | Build status                                                                                                                                  |\n| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |\n| [markosamuli.asdf]      | [![Build Status](https://travis-ci.org/markosamuli/ansible-asdf.svg?branch=master)](https://travis-ci.org/markosamuli/ansible-asdf)           |\n| [markosamuli.aws_tools] | [![Build Status](https://travis-ci.org/markosamuli/ansible-aws-tools.svg?branch=master)](https://travis-ci.org/markosamuli/ansible-aws-tools) |\n| [markosamuli.gcloud]    | [![Build Status](https://travis-ci.org/markosamuli/ansible-gcloud.svg?branch=master)](https://travis-ci.org/markosamuli/ansible-gcloud)       |\n| [markosamuli.golang]    | [![Build Status](https://travis-ci.org/markosamuli/ansible-golang.svg?branch=master)](https://travis-ci.org/markosamuli/ansible-golang)       |\n| [markosamuli.linuxbrew] | [![Build Status](https://travis-ci.org/markosamuli/ansible-linuxbrew.svg?branch=master)](https://travis-ci.org/markosamuli/ansible-linuxbrew) |\n| [markosamuli.nvm]       | [![Build Status](https://travis-ci.org/markosamuli/ansible-nvm.svg?branch=master)](https://travis-ci.org/markosamuli/ansible-nvm)             |\n| [markosamuli.packer]    | [![Build Status](https://travis-ci.org/markosamuli/ansible-packer.svg?branch=master)](https://travis-ci.org/markosamuli/ansible-packer)       |\n| [markosamuli.pyenv]     | [![Build Status](https://travis-ci.org/markosamuli/ansible-pyenv.svg?branch=master)](https://travis-ci.org/markosamuli/ansible-pyenv)         |\n| [markosamuli.vagrant]   | [![Build Status](https://travis-ci.org/markosamuli/ansible-vagrant.svg?branch=master)](https://travis-ci.org/markosamuli/ansible-vagrant)     |\n| [markosamuli.hyper]     | [![Build Status](https://travis-ci.org/markosamuli/ansible-hyper.svg?branch=master)](https://travis-ci.org/markosamuli/ansible-hyper)         |\n\n[markosamuli.asdf]: https://github.com/markosamuli/ansible-asdf\n[markosamuli.aws_tools]: https://github.com/markosamuli/ansible-aws-tools\n[markosamuli.gcloud]: https://github.com/markosamuli/ansible-gcloud\n[markosamuli.golang]: https://github.com/markosamuli/ansible-golang\n[markosamuli.hyper]: https://github.com/markosamuli/ansible-hyper\n[markosamuli.linuxbrew]: https://github.com/markosamuli/ansible-linuxbrew\n[markosamuli.nvm]: https://github.com/markosamuli/ansible-nvm\n[markosamuli.packer]: https://github.com/markosamuli/ansible-packer\n[markosamuli.pyenv]: https://github.com/markosamuli/ansible-pyenv\n[markosamuli.vagrant]: https://github.com/markosamuli/ansible-vagrant\n[requirements.yml]: requirements.yml\n\n## Development\n\nYou should have Python 3.7 or newer installed for the development tools and\npre-commit hooks to work.\n\nInstall development environment, including Git [pre-commit] hooks:\n\n```bash\nmake setup-dev\n```\n\nLint code and configuration:\n\n```bash\nmake lint\n```\n\n[pre-commit]: https://pre-commit.com/\n\n## References\n\nThis is based on my previous setup [markosamuli/machine] that was forked off\nfrom [caarlos0/machine] to suit my needs.\n\n[markosamuli/machine]: https://github.com/markosamuli/machine\n[caarlos0/machine]: https://github.com/caarlos0/machine\n\n## License\n\n- [MIT](LICENSE)\n\n## Authors\n\n- [@markosamuli](https://github.com/markosamuli)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkosamuli%2Flinux-machine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarkosamuli%2Flinux-machine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkosamuli%2Flinux-machine/lists"}