{"id":13941951,"url":"https://github.com/jasonwc/setup","last_synced_at":"2025-07-20T05:31:34.146Z","repository":{"id":51137600,"uuid":"195706363","full_name":"jasonwc/setup","owner":"jasonwc","description":"Ansible Playbooks for setting up WSL/Multipass VMs","archived":false,"fork":false,"pushed_at":"2025-05-08T17:13:12.000Z","size":48,"stargazers_count":43,"open_issues_count":3,"forks_count":12,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-08T18:26:27.394Z","etag":null,"topics":["ansible","ansible-playbooks","linux","multipass","setuptools","windows-10","workstation-management","wsl","wsl-ubuntu","wsl2"],"latest_commit_sha":null,"homepage":"","language":"Jinja","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/jasonwc.png","metadata":{"files":{"readme":"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}},"created_at":"2019-07-07T23:26:32.000Z","updated_at":"2025-05-08T17:21:30.000Z","dependencies_parsed_at":"2022-08-28T22:10:14.358Z","dependency_job_id":null,"html_url":"https://github.com/jasonwc/setup","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jasonwc/setup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jasonwc%2Fsetup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jasonwc%2Fsetup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jasonwc%2Fsetup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jasonwc%2Fsetup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jasonwc","download_url":"https://codeload.github.com/jasonwc/setup/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jasonwc%2Fsetup/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266071519,"owners_count":23871940,"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":["ansible","ansible-playbooks","linux","multipass","setuptools","windows-10","workstation-management","wsl","wsl-ubuntu","wsl2"],"created_at":"2024-08-08T02:01:37.607Z","updated_at":"2025-07-20T05:31:29.098Z","avatar_url":"https://github.com/jasonwc.png","language":"Jinja","readme":"# Setup\nAnsible Playbooks for setting up an ops/ruby/elixir focused workstation.\n\nUsed on:\n- [WSL2](https://devblogs.microsoft.com/commandline/announcing-wsl-2/) with the [Ubuntu app](https://www.microsoft.com/en-us/p/ubuntu/9nblggh4msv6).\n- [Multipass](https://github.com/CanonicalLtd/multipass) on Windows running latest Ubuntu.\n\n## (Required) Setting up a Linux Environment\nThere are a couple easy ways to get to a clean Linux environment on Windows: multipass and WSL.\n\n### (Recommended) WSL2\nFollow the [Windows Subsystem for Linux Installation Guide for Windows 10](https://docs.microsoft.com/en-us/windows/wsl/install-win10)\n\n### Multipass\nFollow the installation instructions on the [Multipass homepage](https://multipass.run)\n\n## (Required) Docker for Desktop\nThis setup repo won't install the Docker daemon in the Linux environment itself. Instead it assumes you have Docker for Desktop running either in WSL2.0 or on the Windows side and only installs client libs. I've gone with this approach because the Docker and WSL teams are constantly improving the connectivity and it was much harder to try to spin up Docker myself in WSL2.0 and nigh impossible in WSL1.0.\n\nTo install Docker for Desktop on Windows, check out [their instructions](https://docs.docker.com/docker-for-windows/install/).\n\nIf you're using WSL2.0, make sure to use the WSL backend setting in the Docker for Desktop client. Then it's pretty seamless.\n\nIf you're using Multipass, you might have to enable some settings to talk to the Docker socket running in either WSL2.0 or on Hyper V.\n\n## Quick Start\nYou'll need to get an ssh key into your new Linux environment. Afterwards, run the following:\n\n```bash\n# Clone to your home directory\ngit clone git@github.com:jasonwc/setup.git\n\n# (Required) Set your username in playbook.yaml. While you're at it, check out the roles and vars_files too.\n# (Required) Set your username, repo directory, and repos in user_environment.yml (or clone my repos, what do I care!)\n\n# Installs ansible and dependencies\nsudo sh bootstrap.sh\n\n# Run the playbook\nansible-playbook -K playbook.yaml\n```\n\n## What do you get?\nThis is a _somewhat_ opinionated but *lean* installation of tools that I want to have on a Linux environment. I do a lot of dev _in_ Docker containers, so often those containers will have specialized tools.\n\nGenerally, I'm running this on my primary WSL2 workspace. I also spin up a VM from time to time for specific tasks and provision it with these tools for consistency.\n\n### Shell\n\n\u003e Installs basic tools like vim and tmux and sets up zsh as the default shell. Uses my [dotfiles](https://github.com/jasonwc/dotfiles) repo to configure them.\n\n- [zsh](http://zsh.sourceforge.net/): \"Zsh is a shell designed for interactive use, although it is also a powerful scripting language.\"\n- [oh-my-zsh](https://ohmyz.sh/): \"Oh My Zsh is a delightful, open source, community-driven framework for managing your Zsh configuration.\"\n- [vim](https://www.vim.org/): \"Vim is a highly configurable text editor for efficiently creating and changing any kind of text.\"\n- [tmux](https://github.com/tmux/tmux): \"tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. \"\n- Syncs from my [dotfiles repo](https://github.com/jasonwc/dotfiles). Loads of config for the basics over there.\n- Clones some repos I'm working on\n- Runs `PlugInstall` in Vim\n\n### Ops tooling\n\n\u003e Tooling for doing operations and infrastructure type tasks. Mostly focused on interacting with cloud providers and working with Kubernetes and Docker.\n\n- [Docker](https://www.docker.com/): building and running containers\n- [Kubectl](https://kubernetes.io/): interacting with Kubernetes clusters\n- [Kubeadm](https://github.com/kubernetes/kubeadm): building and managing Kubernetes clusters\n- [Helm](https://helm.sh): building, deploying, and using Helm charts\n- [Krew](https://krew.sigs.k8s.io/): Plugin manager for `kubectl`\n- Configures `kubectl` with some `krew` plugins I like.\n\n### Dev tooling\n\n\u003e Tooling and programming languages for scripting and application development.\n\n- [asdf](https://asdf-vm.com/#/): version manager for multiple languages, frameworks, and plugings (think nvm, rbenv)\n- [ruby](https://www.ruby-lang.org/en/): \"A dynamic, open source programming language with a focus on simplicity and productivity.\"\n- [erlang](https://www.erlang.org/): \"Erlang is a programming language used to build massively scalable soft real-time systems with requirements on high availability.\"\n- [elixir](https://elixir-lang.org/): \"Elixir is a dynamic, functional language designed for building scalable and maintainable applications.\"\n- Handles dependency installation for various languages\n- Configurable language versions. Installs whatever is set and sets it globally for easy upgrades.\n\n## Troubleshooting\n\n\u003e  [WARNING] Ansible is in a world writable directory\n\nIf you see something like this, you need to set correct permissions on the `setup` directory:\n\n```bash\n chmod 700 /path/to/setup directory\n```\n\nThis often happens with WSL installs.\n\n## Inspiration\nI learned a lot about Ansible during my time at [Mavenlink](https://github.com/mavenlink). Much of the intial idea came from a great tool maintained by the team there called \"ansible-workstation\" and its successor \"bootstrap-workstation\".\n\nThese other resources helped me along the way:\n\n- [Quickstart on how to create local ansible playbooks](https://www.tricksofthetrades.net/2017/10/02/ansible-local-playbooks/)\n- [SteveEdson/dev-machine](https://github.com/SteveEdson/dev-machine)\n- [ballPointPenguin/ansible-develop](https://github.com/ballPointPenguin/ansible-develop)\n- [Wintus/Ansible-WSL](https://github.com/Wintus/Ansible-WSL)\n- [Sudo Science - Using Ansible to Set Up Zsh](https://sudo-science.com/using-ansible-to-set-up-zsh/)\n- [A Linux Dev Environment on Windows with WSL 2, Docker Desktop and More](https://www.youtube.com/watch?v=idW-an99TAM\u0026)\n- [Running Vim commands non-interactively](https://github.com/junegunn/vim-plug/issues/675)\n","funding_links":[],"categories":["Jinja"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjasonwc%2Fsetup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjasonwc%2Fsetup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjasonwc%2Fsetup/lists"}