An open API service indexing awesome lists of open source software.

https://github.com/professormanhattan/ansible-gas-station

An Ansible playbook that provisions your network with software from GitHub Awesome lists, developed with disaster recovery in mind ⛽🔥🤤
https://github.com/professormanhattan/ansible-gas-station

ansible ansible-playbook archlinux centos debian doctor fedora install installdoc installdoctor macos mblabs megabytelabs molecule playbook professormanhattan ubuntu washingtondc windows

Last synced: 3 months ago
JSON representation

An Ansible playbook that provisions your network with software from GitHub Awesome lists, developed with disaster recovery in mind ⛽🔥🤤

Awesome Lists containing this project

README

          




Gas Station logo




Ansible Playbook: Gas Station ⛽


Brought to you by Megabyte Labs





Homepage


Contributing


Slack


GitHub


GitLab






Version: 0.0.1


Build status


E2E test status


Documentation


License: MIT

>
**A no-stone-unturned Ansible playbook you can use to set up the ultimate home lab or on-premise addition to your cloud!**

## Table of Contents

- [Introduction](#introduction)
- [Quick Start](#quick-start)
- [Vagrant (Recommended)](#vagrant-recommended)
- [macOS/Linux](#macoslinux)
- [Windows](#windows)
- [Supported Operating Systems](#supported-operating-systems)
- [Requirements](#requirements)
- [Host Requirements](#host-requirements)
- [Easier Method of Installing the Host Requirements](#easier-method-of-installing-the-host-requirements)
- [Operating System](#operating-system)
- [Connection](#connection)
- [MAS on Mac OS X](#mas-on-mac-os-x)
- [Software](#software)
- [Binaries](#binaries)
- [NPM Packages](#npm-packages)
- [Python Packages](#python-packages)
- [Ruby Gems](#ruby-gems)
- [Visual Studio Code Extensions](#visual-studio-code-extensions)
- [Chrome Extensions](#chrome-extensions)
- [Homebrew Formulae (macOS and Linux only)](#homebrew-formulae-macos-and-linux-only)
- [Homebrew Casks (macOS only)](#homebrew-casks-macos-only)
- [Go, Rust, and System-Specific Packages](#go-rust-and-system-specific-packages)
- [Web Applications](#web-applications)
- [Helm Charts](#helm-charts)
- [Host Applications](#host-applications)
- [HTPC](#htpc)
- [Philosophy](#philosophy)
- [Architecture](#architecture)
- [Managing Environments](#managing-environments)
- [Switching Between Environments](#switching-between-environments)
- [Contributing](#contributing)
- [License](#license)

## Introduction

Welcome to a new way of doing things. Born out of complete paranoia and a relentless pursuit of the best of GitHub Awesome lists, Gas Station aims to add the capability of being able to completely wipe whole networks and restore them on a regular basis. It takes a unique approach to network provisioning because it supports desktop provisioning as a first-class citizen. By default, without much configuration, it is meant to provision and maintain the state of a network that includes development workstations and servers. One type of user that might benefit from this project is a web developer who wants to start saving the state of their desktop as code. Another type of user is one who wants to start hosting RAM-intensive web applications in their home-lab environment to save huge amounts on cloud costs. This project is also meant to be maintainable by a single person. Granted, if you look through our eco-system you will see we are well-equipped for supporting entire teams as well.

Gas Station a collection of Ansible playbooks, configurations, scripts, and roles meant to provision computers and networks with the "best of GitHub". By leveraging Ansible, you can provision your whole network relatively fast in the event of a disaster or scheduled network reset. This project is also intended to increase the security of your network by allowing you to frequently wipe, reinstall, and re-provision your network, bringing it back to its original state. This is done by backing up container storage volumes (like database files and Docker volumes) to encrypted S3 buckets, storing configurations in encrypted git repositories, and leveraging GitHub-sourced power tools to make the job easy-peasy.

This project started when a certain somebody changed their desktop wallpaper to an _cute_ picture of a cat 🐱 when, all of a sudden, their computer meowed. Well, it actually started before that but no one believes someone who claims that time travelers hacked them on a regular basis. _Tip: If you are stuck in spiritual darkness involving time travelers, save yourself some headaches by adopting an other-people first mentality that may include volunteering, tithing, and surrendering to Jesus Christ._ Anyway, enough preaching!

Gas Station is:

- Highly configurable - most roles come with optional variables that you can configure to change the behavior of the role
- Highly configured - in-depth research is done to ensure each software component is configured with bash completions, plugins that are well-received by the community, and integrated with other software used in the playbook
- Compatible with all major operating systems (i.e. Windows, Mac OS X, Ubuntu, Fedora, CentOS, Debian, and even Archlinux)
- The product of a team of experts
- An amazing way to learn about developer tools that many would consider to be "the best of GitHub"
- Open to new ideas - feel free to [open an issue](https://gitlab.com/megabyte-labs/gas-station/-/issues) or [contribute](https://github.com/ProfessorManhattan/Gas-Station/blob/master/CONTRIBUTING.md) with a [pull request](https://github.com/ProfessorManhattan/Gas-Station/issues)!

## Quick Start

The easiest way to run the entire playbook, outlined in the `main.yml` file, is to run the appropriate command listed below. These commands will run the playbook on the machine you run the command on. This is probably the best way to get your feet wet before you decide to give us a ⭐ and customize the playbook for your own needs. Ideally, this command should be run on the machine that you plan on running Ansible with to provision the other computers on your network. It is only guaranteed to work on fresh installs so testing it out with [Vagrant](https://www.vagrantup.com/) is highly encouraged.

### Vagrant (Recommended)

To test it out with Vagrant, you can run the following commands which will open up an interactive dialog where you can pick which operating system and virtualization provider you wish to test the installation with:

```shell
bash .config/scripts/start.sh # Only required if you do not have the dependencies (i.e. Task) already installed
task ansible:test:vagrant
```

### macOS/Linux

```shell
curl -sS https://gitlab.com/megabyte-labs/gas-station/-/raw/master/files/quickstart.sh | bash
```

### Windows

In an administrative PowerShell session, run:

```powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://gitlab.com/megabyte-labs/gas-station/-/raw/master/files/quickstart.ps1'))
```

## Supported Operating Systems

The following chart shows the operating systems that have been tested for compatibility using the `environments/dev/` environment. This chart is automatically generated using the Ansible Molecule tests you can view in the `molecule/default/` folder. We currently have logic in place to automatically handle the testing of Windows, Mac OS X, Ubuntu, Fedora, CentOS, Debian, and Archlinux. If your operating system is not listed but is a variant of one of the systems we test (i.e. a Debian-flavored system or a RedHat-flavored system) then it might still work.

compatibility_matrix

## Requirements

- **[Python >=3.7](https://www.python.org/)**
- **[Ansible >=2.9](https://www.ansible.com/)**
- Ansible controller should be a macOS/Linux environment (WSL/Docker can be used on Windows)

### Host Requirements

There are Python and Ansible package requirements need to be installed by running the following command (or equivalent) in the root of this repository:

```
if type poetry &> /dev/null; then poetry install --no-root; else pip3 install -r .config/requirements.txt; fi
ansible-galaxy install requirements.yml
```

#### Easier Method of Installing the Host Requirements

You can also run `bash .config/scripts/start.sh` if you do not mind development dependencies being installed as well. This method will even handle installing Python 3 and Ansible.

### Operating System

**This playbook is built and tested to run on fresh installs of Windows, Mac OS X, Ubuntu, Fedora, Debian, CentOS, and Archlinux**. It may still be possible to run the playbook on your current machine. However, installing the playbook on a fresh install is the only thing we actively support. That said, if you come across an issue with an environment that already has configurations and software present, please do not hesitate to [open an issue](https://gitlab.com/megabyte-labs/gas-stationrepository.location.issue.gitlab).

### Connection

SSH (or WinRM in the case of Windows) and Python should be available on the target systems you would like to provision. If you are attempting to provision a Windows machine, you can ensure that WinRM is enabled and configured so that you can remotely provision the Windows target by running the following command with PowerShell:

```powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://gitlab.com/megabyte-labs/gas-station/-/raw/master/files/client.ps1'))
```

### MAS on Mac OS X

We use [mas](https://github.com/mas-cli/mas) to install apps from the App Store in some of our roles. Sadly, automatically signing into the App Store is not possible on OS X 10.13+ via mas. This is because [mas no longer supports login functionality on OS X 10.13+](https://github.com/mas-cli/mas/issues/164).

There is another caveat with mas. In order to install an application using mas, the application has to have already been added via the App Store GUI. This means that the first time around you will have to install the apps via the App Store GUI so they are associated with your App Store account.

## Software

This project breaks down software into a role (found in the subdirectories of the `roles/` folder) if the software requires anything other than being added to the `PATH` variable. Below is a quick description of what each role does. Browsing through this list, along with the conditions laid out in `main.yml`, you will be able to get a better picture of what software will be installed by the default `main.yml` playbook.

role_descriptions

We encourage you to browse through the repositories that are linked to in the table above to learn about the configuration options they support.

### Binaries

A lot of nifty software does not require any configuration other than being added to the `PATH` or being installed with an installer like `brew`. For this kind of software that requires no configuration, we list the software we would like installed by the playbook as a variable in `group_vars/` or `host_vars/` as an array of keys assigned to the `software` variable ([example here](environments/prod/group_vars/desktop/vars.yml)). With those keys, we install the software using the `[professormanhattan.genericinstaller](https://galaxy.ansible.com/professormanhattan/genericinstaller)` role which determines how to install the binaries by looking up the keys against the `software_package` object ([example here](environments/prod/group_vars/all/software.yml)). For your convienience, the software we recommend and install by default is listed below:

| Package | Description |
| -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[act](https://github.com/nektos/act)** | To run Github Actions locally |
| **[altair](https://github.com/altair-graphql/altair)** | A beautiful feature-rich GraphQL Client for all platforms |
| **[askgit](https://github.com/askgitdev/askgit)** | Query git repositories with SQL. Generate reports, perform status checks, analyze codebases |
| **[bandwhich](https://github.com/imsnif/bandwhich)** | Terminal bandwidth utilization tool |
| **[bane](https://github.com/genuinetools/bane)** | Custom & better AppArmor profile generator for Docker containers |
| **[bat](https://github.com/sharkdp/bat)** | Clone of cat(1) with syntax highlighting and Git integration |
| **[betwixt](https://github.com/kdzwinel/betwixt)** | Web Debugging Proxy based on Chrome DevTools Network panel |
| **[bin](https://github.com/marcosnils/bin)** | Effortless binary manager |
| **[bitwarden](https://github.com/bitwarden/desktop)** | The desktop vault (Windows, macOS, & Linux) |
| **[bivac](https://github.com/camptocamp/bivac)** | Backup Interface for Volumes Attached to Containers |
| **[boilr](https://github.com/tmrts/boilr)** | boilerplate template manager that generates files or directories from template repositories |
| **[cerebro](https://github.com/cerebroapp/cerebro)** | Open-source productivity booster with a brain |
| **[clair](https://github.com/quay/clair)** | Vulnerability Static Analysis for Containers |
| **[consul-cli](https://github.com/mantl/consul-cli)** | Command line interface to Consul HTTP API |
| **[croc](https://github.com/schollz/croc)** | Easily and securely send things from one computer to another |
| **[ctop](https://github.com/bcicen/ctop)** | Top-like interface for container metrics |
| **[cumulus](https://github.com/gillesdemey/Cumulus)** | A SoundCloud player that lives in the menubar |
| **[dasel](https://github.com/TomWright/dasel)** | Select, put and delete data from JSON, TOML, YAML, XML and CSV files with a single tool |
| **[dat](https://github.com/datproject/dat)** | peer-to-peer sharing & live syncronization of files via command line |
| **[dat-desktop](https://github.com/datproject/dat-desktop)** | Peer to peer data syncronization |
| **[delta](https://github.com/dandavison/delta)** | A syntax-highlighting pager for git and diff output |
| **[dive](https://github.com/wagoodman/dive)** | A tool for exploring each layer in a docker image |
| **[desed](https://github.com/SoptikHa2/desed)** | Debugger for Sed: demystify and debug the sed scripts, from comfort of terminal |
| **[deta](https://github.com/deta/deta-cli)** | Command line interface for managing Deta micros and deployments |
| **[direnv](https://github.com/direnv/direnv)** | Extension to load and unload environment variables depending on the current directory |
| **[docker-slim](https://github.com/docker-slim/docker-slim)** | Extension to minify and secure Docker images |
| **[dockle](https://github.com/goodwithtech/dockle)** | Container Image Linter for Security, Helping build the Best-Practice Docker Image, Easy to start |
| **[doctl](https://github.com/digitalocean/doctl)** | The official command line interface for the DigitalOcean API |
| **[dog](https://github.com/ogham/dog)** | A command-line DNS client |
| **[duf](https://github.com/muesli/duf)** | a better 'df' alternative |
| **[dust](https://github.com/bootandy/dust)** | A more intuitive version of du in rust |
| **[envconsul](https://github.com/hashicorp/envconsul)** | Launch a subprocess with environment variables using data from @hashicorp Consul and Vault |
| **[fd](https://github.com/sharkdp/fd)** | A simple, fast and user-friendly alternative to 'find' |
| **[felony](https://github.com/henryboldi/felony)** | An open-source pgp keychain built on the modern web with Electron, React, and Redux |
| **[ffsend](https://github.com/timvisee/ffsend)** | Easily and securely share files from the command line, a fully featured Firefox Send client |
| **[filebrowser](https://github.com/filebrowser/filebrowser)** | Web file browser |
| **[fselect](https://github.com/jhspetersson/fselect)** | Extension to find files with SQL-like queries |
| **[fq](https://github.com/wader/fq)** | jq for binary formats |
| **[fuego](https://github.com/sgarciac/fuego)** | Fuego is a command line client for the firestore database |
| **[g-assist](https://github.com/Melvin-Abraham/Google-Assistant-Unofficial-Desktop-Client)** | A cross-platform unofficial Google Assistant Client for Desktop |
| **[ganache](https://github.com/trufflesuite/ganache-ui)** | Personal blockchain for Ethereum development |
| **[gitify](https://github.com/manosim/gitify)** | GitHub notifications on the menu bar |
| **[gitleaks](https://github.com/zricethezav/gitleaks)** | Extension to scan git repos (or files) for secrets using regex and entropy |
| **[gitomatic](https://github.com/muesli/gitomatic)** | A tool to monitor git repositories and automatically pull & push changes |
| **[glab](https://github.com/profclems/glab)** | An open-source GitLab command line tool bringing GitLab's cool features to your command line |
| **[glow](https://github.com/charmbracelet/glow)** | Glow is a terminal based markdown reader designed from the ground up to bring out the beauty—and power—of the CLI |
| **[go-chromecast](https://github.com/vishen/go-chromecast)** | cli for Google Chromecast, Home devices and Cast Groups |
| **[gping](https://github.com/orf/gping)** | Ping, but with a graph |
| **[grex](https://github.com/pemistahl/grex)** | A command-line tool and library for generating regular expressions from user-provided test cases |
| **[gron](https://github.com/tomnomnom/gron)** | Extension to make JSON greppable |
| **[hclq](https://github.com/mattolenik/hclq)** | Command-line processor for HashiCorp config files, like sed for HCL — Terraform, Consul, Nomad, Vault |
| **[hexyl](https://github.com/sharkdp/hexyl)** | A command-line hex viewer |
| **[hey](https://github.com/rakyll/hey)** | HTTP load generator, ApacheBench (ab) replacement, formerly known as rakyll/boom |
| **[hostctl](https://github.com/guumaster/hostctl)** | This tool gives more control over the use of hosts file |
| **[htmlq](https://github.com/mgdm/htmlq)** | A lightweight and flexible command-line JSON processor for HTML |
| **[hyperfine](https://github.com/sharkdp/hyperfine)** | A command-line benchmarking tool |
| **[jitsi-meet-electron](https://github.com/jitsi/jitsi-meet-electron)** | Desktop application for Jitsi Meet built with Electron |
| **[jo](https://github.com/jpmens/jo)** | JSON output from a shell |
| **[jq](https://github.com/stedolan/jq)** | Command-line JSON processor |
| **[kdash](https://github.com/kdash-rs/kdash)** | A simple and fast dashboard for Kubernetes |
| **[kubenav](https://github.com/kubenav/kubenav)** | kubenav is the navigator for your Kubernetes clusters right in your pocket |
| **[license](https://github.com/nishanths/license)** | Command-line license text generator |
| **[linuxkit](https://github.com/linuxkit/linuxkit)** | A toolkit for building secure, portable and lean operating systems for containers |
| **[manta](https://github.com/hql287/Manta)** | Flexible invoicing desktop app with beautiful & customizable templates |
| **[mark-text](https://github.com/marktext/marktext)** | A simple and elegant markdown editor, available for Linux, macOS and Windows |
| **[masscode](https://github.com/antonreshetov/massCode)** | A free and open source code snippets manager for developers |
| **[mc](https://github.com/minio/mc)** | MinIO Client is a replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage |
| **[mjml-app](https://github.com/mjmlio/mjml-app)** | The desktop app for MJML |
| **[mkcert](https://github.com/FiloSottile/mkcert)** | A simple zero-config tool to make locally trusted development certificates with any names |
| **[mockoon](https://github.com/mockoon/mockoon)** | Mockoon is the easiest and quickest way to run mock APIs locally. No remote deployment, no account required, open source |
| **[motrix](https://github.com/agalwood/Motrix)** | A full-featured download manager |
| **[mqttx](https://github.com/emqx/MQTTX)** | Elegant Cross-platform MQTT 5.0 Desktop Client |
| **[muffet](https://github.com/raviqqe/muffet)** | Fast website link checker in Go |
| **[mullvad-vpn](https://github.com/mullvad/mullvadvpn-app)** | The Mullvad VPN client app for desktop and mobile |
| **[nebula](https://github.com/slackhq/nebula)** | A scalable overlay networking tool |
| **[nnn](https://github.com/jarun/nnn)** | A full-featured terminal file manager |
| **[node-prune](https://github.com/tj/node-prune)** | Extension to remove unnecessary files from node_modules |
| **[nomino](https://github.com/yaa110/nomino)** | Batch rename utility for developers |
| **[nuclear](https://github.com/nukeop/nuclear)** | Streaming music player that finds free music |
| **[osquery](https://github.com/osquery/osquery)** | SQL powered operating system instrumentation, monitoring, and analytics |
| **[ots](https://github.com/sniptt-official/ots)** | Share end-to-end encrypted secrets with others via a one-time URL |
| **[oq](https://github.com/Blacksmoke16/oq)** | A performant, and portable jq wrapper to facilitate the consumption and output of formats other than JSON; using jq filters to transform the data |
| **[page-fetch](https://github.com/detectify/page-fetch)** | Fetch web pages using headless Chrome, storing all fetched resources including JavaScript files |
| **[pass](https://www.passwordstore.org/)** | Password manager |
| **[pastel](https://github.com/sharkdp/pastel)** | A command-line tool to generate, analyze, convert and manipulate colors |
| **[peco](https://github.com/peco/peco)** | Simplistic interactive filtering tool |
| **[pony](https://github.com/jessfraz/pony)** | Local file-based password, API key, secret, recovery code store backed by GPG |
| **[pretzel](https://github.com/amiechen/pretzel)** | Pretzel is Mac desktop app that shows and find keyboard shortcuts based on your current app |
| **[procs](https://github.com/dalance/procs)** | A modern replacement for ps written in Rust |
| **[psu](https://github.com/greenled/portainer-stack-utils)** | CLI client for Portainer |
| **[pup](https://github.com/ericchiang/pup)** | Parsing HTML at the command line |
| **[q](https://github.com/harelba/q)** | Run SQL directly on CSV or TSV files |
| **[responsively](https://github.com/responsively-org/responsively-app)** | A modified web browser that helps in responsive web development |
| **[rip](https://github.com/nivekuil/rip)** | A safe and ergonomic alternative to rm |
| **[runjs](https://github.com/lukehaas/RunJS)** | A JavaScript playground that auto-evaluates as you type |
| **[s5cmd](https://github.com/peak/s5cmd)** | Parallel S3 and local filesystem execution tool |
| **[schema](https://github.com/Confbase/schema)** | A tool to infer and instantiate schemas and translate between data formats |
| **[scrcpy](https://github.com/Tomotoes/scrcpy-gui)** | A simple & beautiful GUI application for scrcpy |
| **[sd](https://github.com/chmln/sd)** | Intuitive find & replace CLI (sed alternative) |
| **[shfmt](https://github.com/mvdan/sh/)** | A shell parser, formatter, and interpreter with bash support; includes shfmt |
| **[skm](https://github.com/TimothyYe/skm)** | A simple and powerful SSH keys manager |
| **[snitch](https://github.com/evilsocket/opensnitch)** | OpenSnitch is a GNU/Linux port of the Little Snitch application firewall |
| **[sqlectron](https://github.com/sqlectron/sqlectron-gui)** | A simple and lightweight SQL client desktop with cross database and platform support |
| **[ssh-vault](https://github.com/ssh-vault/ssh-vault)** | Encrypt/decrypt using ssh keys |
| **[ssl-proxy](https://github.com/suyashkumar/ssl-proxy)** | Simple zero-config SSL reverse proxy with real autogenerated certificates |
| **[switchhosts](https://github.com/oldj/SwitchHosts)** | Extension to switch hosts |
| **[sysbench](https://github.com/akopytov/sysbench)** | System performance benchmark tool |
| **[tabby](https://github.com/Eugeny/tabby)** | A terminal for a more modern age |
| **[task](https://github.com/go-task/task)** | A task runner / simpler Make alternative written in Go |
| **[teleport](https://github.com/gravitational/teleport)** | Modern SSH server for teams managing distributed infrastructure |
| **[tflint](https://github.com/terraform-linters/tflint)** | A Pluggable Terraform Linter |
| **[temps](https://github.com/jackd248/temps)** | Simple menubar application based on Electron with actual weather information and forecast |
| **[tokei](https://github.com/XAMPPRocky/tokei)** | Tokei is a program that displays statistics about the code |
| **[transfer](https://github.com/rinetd/transfer)** | Converts from one encoding to another |
| **[trivy](https://github.com/aquasecurity/trivy)** | Scanner for vulnerabilities in container images, file systems, and Git repositories, as well as for configuration issues |
| **[up](https://github.com/akavel/up)** | Ultimate Plumber is a tool for writing Linux pipes with instant live preview |
| **[udemy-downloader-gui](https://github.com/FaisalUmair/udemy-downloader-gui)** | A desktop application for downloading Udemy Courses |
| **[waypoint](https://github.com/hashicorp/waypoint)** | A tool to build, deploy, and release any application on any platform |
| **[websocat](https://github.com/vi/websocat)** | CLI for interacting with web sockets |
| **[webtorrent](https://github.com/webtorrent/webtorrent-desktop)** | Streaming torrent app for Mac, Windows, and Linux |
| **[wkhtmltopdf](https://github.com/wkhtmltopdf/wkhtmltopdf)** | Convert HTML to PDF using Webkit (QtWebKit) |
| **[xurls](https://github.com/mvdan/xurls)** | Extract urls from text |
| **[yq](https://github.com/mikefarah/yq/v4)** | Process YAML documents from the CLI |

### NPM Packages

NPM provides a huge catalog of useful CLIs and libraries so we also include a useful and interesting default set of NPM-hosted CLIs for hosts in the `desktop` group ([defined here](environments/prod/group_vars/desktop/npm-packages.yml), for example):

| Package | Description |
| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[@angular/cli](https://npmjs.com/package/@angular/cli)** | Official CLI for [Angular](https://angular.io/) capable of generating new projects, generating boilerplate files, and testing apps with LiveReload |
| **[@cloudflare/wrangler](https://npmjs.com/package/@cloudflare/wrangler)** | A CLI tool designed for folks who are interested in using Cloudflare Workers |
| **[@ionic/cli](https://npmjs.com/package/@ionic/cli)** | A command line interface (CLI) is go-to tool for developing Ionic apps |
| **[@nestjs/cli](https://npmjs.com/package/@nestjs/cli)** | A command-line interface tool that helps you to initialize, develop, and maintain your Nest applications |
| **[@prettier/plugin-ruby](https://npmjs.com/package/@prettier/plugin-ruby)** | A prettier plugin for the Ruby programming language and its ecosystem |
| **[@prettier/plugin-xml](https://npmjs.com/package/@prettier/plugin-xml)** | A prettier plugin for XML. prettier is an opinionated code formatter that supports multiple languages and integrates with most editors |
| **[@sentry/cli](https://npmjs.com/package/@sentry/cli)** | A Sentry command line client for some generic tasks |
| **[@vercel/ncc](https://npmjs.com/package/@vercel/ncc)** | CLI for compiling a Node.js module into a single file, together with all its dependencies, gcc-style |
| **[add-gitignore](https://npmjs.com/package/add-gitignore)** | CLI script that generates a .gitignore file for the projects |
| **[auto-install](https://npmjs.com/package/auto-install)** | Auto installs dependencies as you code |
| **[bitly-cli-client](https://npmjs.com/package/bitly-cli-client)** | Shorten links with Bitly in the terminal |
| **[browser-sync](https://browsersync.io/)** | test desktop and mobile versions of a website at the same time |
| **[caniuse-cmd](https://npmjs.com/package/caniuse-cmd)** | Caniuse command line tool |
| **[carbon-now-cli](https://npmjs.com/package/carbon-now-cli)** | Tool that generates beautiful images of source code through an intuitive UI, while customizing aspects like fonts, themes, window controls and much mor |
| **[commitizen](https://npmjs.com/package/commitizen)** | The commitizen command line utility |
| **[composerize](https://npmjs.com/package/composerize)** | Turns docker run commands into docker-compose files |
| **[cordova](https://npmjs.com/package/cordova)** | The command line tool to build, deploy and manage Cordova-based applications |
| **[deviceframe](https://npmjs.com/package/deviceframe)** | Put device frames around mobile/web/progressive app screenshots |
| **[editly](https://npmjs.com/package/editly)** | A tool and framework for declarative NLE (non-linear video editing) using Node.js and ffmpeg |
| **[electron](https://npmjs.com/package/electron)** | A tool that enables to write cross-platform desktop applications using JavaScript, HTML and CSS |
| **[emma-cli](https://npmjs.com/package/emma-cli)** | Install the package you are looking for |
| **[emoj](https://npmjs.com/package/emoj)** | Find relevant emoji from text on the command-line |
| **[empty-trash-cli](https://npmjs.com/package/empty-trash-cli)** | A CLI to empty the trash |
| **[eslint](https://npmjs.com/package/eslint)** | A tool for identifying and reporting on patterns found in ECMAScript/JavaScript code |
| **[fastify-cli](https://npmjs.com/package/fastify-cli)** | Command line tools for Fastify. Generate, write, and run an application with one single command |
| **[firebase-tools](https://npmjs.com/package/firebase-tools)** | The Firebase Command Line Interface (CLI) Tools can be used to test, manage, and deploy Firebase project from the command line |
| **[firetable](https://npmjs.com/package/firetable)** | The Firetable CLI automates the steps required to set up the Firetable app and other operations on computer |
| **[fkill-cli](https://npmjs.com/package/fkill-cli)** | Fabulously kill processes. Cross-platform. |
| **[fx](https://npmjs.com/package/fx)** | Command-line JSON processing tool |
| **[gistup](https://npmjs.com/package/gistup)** | Create a gist from the command line |
| **[git-open](https://npmjs.com/package/git-open)** | Type git open to open the repo website (GitHub, GitLab, Bitbucket) in browser |
| **[git-standup](https://npmjs.com/package/git-standup)** | Shows commits from the last working day in the current directory and the directories below current level plus it comes with several options to modify how it behaves |
| **[google-font-installer](https://npmjs.com/package/google-font-installer)** | Google Font Installer is a NodeJS module/CLI that lets you Search, Download and Install fonts offered by Google Web Fonts |
| **[gtop](https://npmjs.com/package/gtop)** | System monitoring dashboard for terminal |
| **[gulp](https://npmjs.com/package/gulp)** | A toolkit that helps you automate painful or time-consuming tasks in your development workflow |
| **[imgur-uploader-cli](https://npmjs.com/package/imgur-uploader-cli)** | CLI to upload images to imgur |
| **[ios-deploy](https://npmjs.com/package/ios-deploy)** | Command line tool to install aand debug iOS apps |
| **[ipfs-deploy](https://npmjs.com/package/ipfs-deploy)** | Upload static website to IPFS pinning services and optionally update DNS |
| **[is-up-cli](https://npmjs.com/package/is-up-cli)** | Check whether a website is up or down using the isitup.org API |
| **[jp-cli](https://npmjs.com/package/jp-cli)** | Simply parse JSON from any input source |
| **[jsfmt](https://npmjs.com/package/jsfmt)** | For formatting, searching, and rewriting JavaScript. Analogous to gofmt |
| **[localtunnel](https://npmjs.com/package/localtunnel)** | localtunnel exposes localhost to the world for easy testing and sharing |
| **[mjml](https://npmjs.com/package/mjml)** | A markup language created by Mailjet and designed to reduce the pain of coding a responsive email |
| **[mklicense](https://npmjs.com/package/mklicense)** | CLI tool for generating Licenses |
| **[movie-cli](https://npmjs.com/package/movie-cli)** | A CLI for getting information about a movies and comparing two movies |
| **[nativefier](https://npmjs.com/package/nativefier)** | Tool to make any web page a desktop application |
| **[navi](https://npmjs.com/package/navi)** | A JavaScript library for declaratively mapping URLs to asynchronous content |
| **[nectarjs](https://npmjs.com/package/nectarjs)** | A JavaScript native compiler |
| **[newman](https://npmjs.com/package/newman)** | A command-line collection runner for Postman |
| **[np](https://npmjs.com/package/np)** | A better npm publish |
| **[npm-check](https://npmjs.com/package/npm-check)** | Check for outdated, incorrect, and unused dependencies |
| **[nrm](https://npmjs.com/package/nrm)** | nrm can help you easy and fast switch between different npm registries |
| **[nve](https://npmjs.com/package/nve)** | Run any command on specific Node.js versions |
| **[oclif](https://npmjs.com/package/oclif)** | A framework for building CLIs in Node.js |
| **[package-size](https://npmjs.com/package/package-size)** | Tool to get the bundle size of an npm package |
| **[pageres-cli](https://npmjs.com/package/pageres-cli)** | A CLI to capture screenshots of websites in various resolutions |
| **[playwright](https://npmjs.com/package/playwright)** | Single API to automate Chromium, WebKit, and Firefox (available as a CLI and library) |
| **[pm2](https://npmjs.com/package/pm2)** | PM2 is a production process manager for Node.js applications with a built-in load balancer |
| **[pxi](https://npmjs.com/package/pxi)** | pxi (pixie) is a small, fast, and magical command-line data processor similar to jq, mlr, and awk |
| **[pkg](https://npmjs.com/package/pkg)** | This command line interface enables you to package your Node.js project into an executable that can be run even on devices without Node.js installed |
| **[prettier](https://npmjs.com/package/prettier)** | A code formatter |
| **[prettier-package-json](https://npmjs.com/package/prettier-package-json)** | A JSON formatter inspired by prettier |
| **[prettier-plugin-go-template](https://npmjs.com/package/prettier-plugin-go-template)** | Tool to fix formatting for go template files |
| **[prettier-plugin-java](https://npmjs.com/package/prettier-plugin-java)** | An opinionated code formatter which forces a certain coding style |
| **[prettier-plugin-properties](https://npmjs.com/package/prettier-plugin-properties)** | Adds support to Prettier for .properties files |
| **[prettier-plugin-sh](https://npmjs.com/package/prettier-plugin-sh)** | Prettier is an opinionated code formatter |
| **[prettier-plugin-toml](https://npmjs.com/package/prettier-plugin-toml)** | Prettier is an opinionated code formatter |
| **[psi](https://npmjs.com/package/psi)** | PageSpeed Insights with reporting |
| **[serve](https://npmjs.com/package/serve)** | Static file serving and directory listing |
| **[serverless](https://npmjs.com/package/serverless)** | Serverless Framework – Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions & more |
| **[share-cli](https://npmjs.com/package/share-cli)** | Quickly share files from your command line |
| **[sharp-cli](https://npmjs.com/package/sharp-cli)** | CLI for sharp, a high performance Node.js image processing module |
| **[speed-test](https://npmjs.com/package/speed-test)** | Test your internet connection speed and ping using speedtest.net from the CLI |
| **[stegcloak](https://npmjs.com/package/stegcloak)** | StegCloak is a pure JavaScript steganography module designed in functional programming style, to hide secrets inside text by compressing and encrypting the secret before cloaking it with special unicode invisible characters |
| **[surge](https://npmjs.com/package/surge)** | Publish web apps to a CDN with a single command and no setup required |
| **[svgo](https://npmjs.com/package/svgo)** | SVG Optimizer is a Node.js-based tool for optimizing SVG vector graphics files |
| **[terminalizer](https://npmjs.com/package/terminalizer)** | Record your terminal and generate animated gif images or share a web player link terminalizer.com |
| **[tinypng-cli](https://npmjs.com/package/tinypng-cli)** | Handy command line tool for shrinking PNG images using the TinyPNG API |
| **[tldr](https://npmjs.com/package/tldr)** | A Node.js based command-line client for tldr |
| **[typescript](https://npmjs.com/package/typescript)** | A language for application-scale JavaScript |
| **[wallace-cli](https://npmjs.com/package/wallace-cli)** | Pretty CSS analytics in terminal |
| **[wifi-password-cli](https://npmjs.com/package/wifi-password-cli)** | CLI to get current wifi password |
| **[wordpressify](https://npmjs.com/package/wordpressify)** | Automate your WordPress development workflow |
| **[zx](https://npmjs.com/package/zx)** | A tool for writing better scripts |

### Python Packages

In a similar fashion to the NPM packages, we include a great set of default Python packages that are included by default for the `desktop` group ([defined here](environments/prod/group_vars/desktop/pip-packages.yml)):

| Package | Description |
| ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[ansibleconnect](https://pypi.org/project/ansibleconnect/)** | Parses Ansible inventory and opens up a tmux session for each host |
| **[ansible-lint](https://pypi.org/project/ansible-lint/)** | Lint tool that checks [Ansible](https://www.ansible.com/) projects for best practices and problematic code |
| **[asciinema](https://pypi.org/project/asciinema/)** | Tool that records terminal session and replay them in a terminal as well as in a web browser |
| **[aws-shell](https://pypi.org/project/aws-shell/)** | AWS shell is the interactive productivity booster for the AWS CLI |
| **[cookiecutter](https://pypi.org/project/cookiecutter/)** | A command-line utility that creates projects from cookiecutters (project templates) |
| **[gdown](https://pypi.org/project/gdown)** | An alternative to wget and curl that can handle downloading large files from Google Drive |
| **[git-filter-repo](https://pypi.org/project/git-filter-repo)** | Tool that aids in wiping particular sections of a repository |
| **[gixy](https://pypi.org/project/gixy/)** | A tool to analyze Nginx configuration |
| **[httpstat](https://pypi.org/project/httpstat/)** | A script that reflects curl statistics in a fascinating and well-defined way, it is a single file which is compatible with Python 3 and requires no additional software (dependencies) to be installed on a users system |
| **[http-prompt](https://pypi.org/project/http-prompt/)** | An interactive command-line HTTP client featuring autocomplete and syntax highlighting, built on HTTPie and prompt_toolkit |
| **[iredis](https://pypi.org/project/iredis/)** | A terminal client for redis with auto-completion and syntax highlighting |
| **[kube-shell](https://pypi.org/project/kube-shell/)** | An integrated shell for working with the Kubernetes CLI |
| **[litecli](https://pypi.org/project/litecli/)** | A command-line client for SQLite databases that has auto-completion and syntax highlighting |
| **[netaddr](https://pypi.org/project/netaddr/)** | A system-independent network address manipulation library for Python 2.7 and 3.5+ |
| **[ngxtop](https://pypi.org/project/ngxtop/)** | ngxtop parses your nginx access log and outputs useful, top-like, metrics of your nginx server |
| **[molecule](https://pypi.org/project/molecule/)** | Molecule project is designed to aid in the development and testing of Ansible roles. Molecule provides support for testing with multiple instances, operating systems and distributions, virtualization providers, test frameworks and testing scenarios |
| **[mycli](https://pypi.org/project/mycli/)** | Command line interface for MySQL database with auto-completion and syntax highlighting |
| **[pre-commit](https://pypi.org/project/pre-commit/)** | A framework for managing and maintaining multi-language pre-commit hooks |
| **[pywhat](https://pypi.org/project/pywhat/)** | what is recursive |
| **[social-analyzer](https://pypi.org/project/social-analyzer/)** | API, CLI & Web App for analyzing & finding a person’s profile across social media websites |
| **[spotdl](https://pypi.org/project/spotdl/)** | A tool to download Spotify playlists and songs along with album art and metadata |
| **[starred](https://pypi.org/project/starred/)** | Generate a GitHub Awesome list directly from your starred repositories |
| **[statcode](https://pypi.org/project/statcode/)** | `man` pages for HTTP status codes (used by running `statcode 418`, for instance) |
| **[truffleHog](https://pypi.org/project/truffleHog/)** | A tool which makes it easier to search through the history of a git repository to discover passwords and other secrets |
| **[virtualenv](https://pypi.org/project/virtualenv/)** | A tool for creating isolated virtual python environments |
| **[yamllint](https://pypi.org/project/yamllint/)** | A linter for YAML files |

### Ruby Gems

A handful of Ruby gems are also installed on targets in the `desktop` group ([defined here](environments/prod/group_vars/desktop/ruby-gems.yml)):

| Package | Description |
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| **[bropages](https://rubygems.org/gems/bropages)** | Informative CLI tool that provides community-curated examples for most CLI programs |
| **[bundler](https://rubygems.org/gems/bundler)** | A tool that manages ruby application's gem dependencies through its entire life, across many machines, systematically and repeatably |
| **[chef](https://rubygems.org/gems/chef)** | A systems integration framework, built to bring the benefits of configuration management to the entire infrastructure |
| **[cocoapods](https://rubygems.org/gems/cocoapods)** | A tool that manages library dependencies for Xcode project |
| **[fpm](https://rubygems.org/gems/fpm)** | A tool that converts directories, rpms, python eggs, rubygems, and more to rpms, debs, solaris packages and more |
| **[gist](https://rubygems.org/gems/gist)** | A tool that provides a single function (Gist.gist) that uploads a gist |
| **[mdl](https://rubygems.org/gems/mdl)** | A style checker/lint tool for markdown files |
| **[t](https://rubygems.org/gems/t)** | A command-line power tool for Twitter |

### Visual Studio Code Extensions

A considerable amount of effort has gone into researching and finding the "best" VS Code extensions. They are [defined here](environments/prod/group_vars/desktop/vscode-extensions.yml) and Gas Station also installs a good baseline configuration which includes settings for these extensions:

| Package | Description |
| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[Angular.ng-template](https://marketplace.visualstudio.com/items?itemName=Angular.ng-template)** | Editor services for Angular template files |
| **[attilabuti.vscode-mjml](https://marketplace.visualstudio.com/items?itemName=attilabuti.vscode-mjml)** | MJML preview, lint, and compile |
| **[bierner.markdown-emoji](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-emoji)** | Adds emoji syntax support to VS Code's built-in Markdown preview |
| **[ChakrounAnas.turbo-console-log](https://marketplace.visualstudio.com/items?itemName=ChakrounAnas.turbo-console-log)** | This extension make debugging much easier by automating the operation of writing meaningful log message |
| **[ChFlick.firecode](https://marketplace.visualstudio.com/items?itemName=ChFlick.firecode)** | Firestore security rule support for Visual Studio Code |
| **[chrmarti.regex](https://marketplace.visualstudio.com/items?itemName=chrmarti.regex)** | Shows the current regular expression's matches in a side-by-side document |
| **[CoenraadS.bracket-pair-colorizer](https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer)** | This extension allows matching brackets to be identified with colours |
| **[cweijan.vscode-mysql-client2](https://marketplace.visualstudio.com/items?itemName=cweijan.vscode-mysql-client2)** | A database GUI for SQL, SQLite, MongoDB, Redis, and ElasticSearch |
| **[DavidAnson.vscode-markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint)** | Markdown/CommonMark linting and style checking for Visual Studio Code |
| **[dbaeumer.vscode-eslint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)** | Integrates ESLint into VS Code |
| **[denoland.vscode-deno](https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno)** | Adds support for Deno (powered by the Deno language server) |
| **[dracula-theme.theme-dracula](https://marketplace.visualstudio.com/items?itemName=dracula-theme.theme-dracula)** | A dark theme for Visual Studio Code |
| **[drewbourne.vscode-remark-lint](https://marketplace.visualstudio.com/items?itemName=drewbourne.vscode-remark-lint)** | Use Unified, Remark, and Retext plugins to lint Markdown |
| **[eamodio.gitlens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens)** | GitLens is a popular extension that supercharges the Git capabilities built into VS Code |
| **[EditorConfig.EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig)** | This plugin attempts to override user/workspace settings with setting found in .editorconfig files |
| **[esbenp.prettier-vscode](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)** | Prettier is an opinionated code formatter |
| **[ericadamski.carbon-now-sh](https://marketplace.visualstudio.com/items?itemName=ericadamski.carbon-now-sh)** | A VS Code extension to open the current editor content in carbon.now.sh |
| **[firefox-devtools.vscode-firefox-debug](https://marketplace.visualstudio.com/items?itemName=firefox-devtools.vscode-firefox-debug)** | A VS Code extension to debug web applications and extensions running in the Mozilla Firefox browser |
| **[firsttris.vscode-jest-runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner)** | Manage, run, and debug individual Jest tests |
| **[formulahendry.auto-rename-tag](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag)** | Automatically rename paired HTML/XML tag, same as Visual Studio IDE does |
| **[formulahendry.code-runner](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner)** | Run code snippet or code file |
| **[GitHub.vscode-pull-request-github](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github)** | Review and manage your GitHub pull requests and issues directly in VS Code |
| **[GitLab.gitlab-workflow](https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow)** | This extension integrates GitLab to VS Code |
| **[GoogleCloudTools.cloudcode](https://marketplace.visualstudio.com/items?itemName=GoogleCloudTools.cloudcode)** | This extension brings the power and convenience of IDEs to cloud-native application development |
| **[golang.Go](https://marketplace.visualstudio.com/items?itemName=golang.Go)** | This extension provides rich language support for the Go programming language, integrates with Google Cloud services like Google Kubernetes Engine, Cloud Run, Cloud APIs, and Secret Manager |
| **[HashiCorp.terraform](https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform)** | This extension adds syntax highlighting and other editing features for Terraform files using the Terraform Language Server |
| **[hediet.vscode-drawio](https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio)** | Allows editing draw.io images in VS Code by adding files ending with .drawio.png |
| **[IBM.output-colorizer](https://marketplace.visualstudio.com/items?itemName=IBM.output-colorizer)** | This extension adds syntax colorization for both the output/debug/extensions panel and \*.log files, other extension that colorize the output panel will disable this extension |
| **[johnpapa.vscode-peacock](https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock)** | This extension subtly changes the color of the Visual Studio workspace |
| **[Kelvin.vscode-sshfs](https://marketplace.visualstudio.com/items?itemName=Kelvin.vscode-sshfs)** | Allows mounting SSH destinations as file system mounts inside VS Code |
| **[KnisterPeter.vscode-commitizen](https://marketplace.visualstudio.com/items?itemName=KnisterPeter.vscode-commitizen)** | Adds support for commitizen |
| **[kruemelkatze.vscode-dashboard](https://marketplace.visualstudio.com/items?itemName=kruemelkatze.vscode-dashboard)** | This VS code extension organize the projects in a speed-dial like manner |
| **[mads-hartmann.bash-ide-vscode](https://marketplace.visualstudio.com/items?itemName=mads-hartmann.bash-ide-vscode)** | This extension utilizes the bash language server, that is based on Tree Sitter and its grammar for Bash and supports explainshell integration |
| **[mechatroner.rainbow-csv](https://marketplace.visualstudio.com/items?itemName=mechatroner.rainbow-csv)** | provides info about column on hover, transforms and filters tables using built-in SQL-like query language |
| **[msjsdiag.debugger-for-chrome](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome)** | This extension has been deprecated as Visual Studio Code now has a bundled JavaScript Debugger that covers the same functionality |
| **[msjsdiag.debugger-for-edge](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-f