Ansible playbook for quick and painless DevOps/SysAdmin workstation based on Linux Mint 19
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Ansible playbook for your super-admin/devops Linux Mint 19.x based workstation

       _/ \_
      \     /
      /_' '_\
       /  @\
      /@  . \
     / -'   .\
    /+      . \
   /--@ @.o .o \
  / '''. +@.o+ @\
 /.'+ - *o-  *-- \
/. @.   o**  . -  \


  • installed Linux Mint 19, 19.1, 64-bit, standard options with extra codecs (selectable during install)

  • access to Internet

  • openssh-server installed and running

  • Ansible in version 2.7 higher

  • ssh server for Ansible ready and running

    sudo apt install openssh-server;systemctl enable ssh && systemctl start ssh


  • 5GB free space on OS drive
  • ssh private key or password method
  • user specified in group_vars or passed in variable ansible_ssh_user Startup Applications`
  • by default extra binaries (outside packages) will be installed in /usr/local/bin. If you prefer to keep them in cloud (syn between computers), down below I'll attach info how to replace binaries with proper symlinks (not done yet)
  • adds repositories with codename and filename
  • adds missing pgp keys for repositories
  • installs essential packages
  • installs main packages
  • installs extra/optional packages
  • downloads outside repository software and puts it in proper path /usr/local/bin by default


ansible-playbook ../linux_mint.yaml -i myhost.lst

or change user you're using

ansible-playbook ../linux_mint.yaml -i myhost.lst --extra-vars "ansible_ssh_user=myuser"

or start at specific step

ansible-playbook ../linux_mint.yaml -i myhost.lst --start-at-task="taskname"

or with specific tags

ansible-playbook ../linux_mint.yaml -i myhost.lst --tags "base"


Most variables are stored in variables.yml file. Feel free to adjust them to suit your needs. For these variables in playbook:

variable default description
install_optional true should optional packages be installed
install_deb true should extra deb packages should be installed
install_vscode_extensions true should we install extra vscode extensions
modify_grub false don't touch grub settings, unless told so
active_user "{{ ansible_ssh_user }}" user for which you're setting folders. By default taken from group_vars
codename bionic codename of version you're setting PPAs for
retries_count 3 how many retries
delay_time 10 delay time in seconds between retries
bin_path /usr/local/bin Where to put all downloaded execs
reboot_required false force reboot even if apt upgrade won't change anything


Repositories: Basic

  • ansible - Ansible
  • remmina - Best Connection manager - RDP/SSH/VNC
  • y-ppa-manager - manage your PPA as human being
  • vscode - suprisingly good product from Microsoft
  • palemoon - chrome based Java+Flash+nonsecure websites access
  • google chrome - best browser
  • virtualbox - virtualization
  • puppet5 -Puppet5 and PDK for easy module writing
  • kubernetes - kubeadm & kubectl
  • docker - Docker-CE
  • veeam - Veeam Agent for Linux

Repositories: Optional

  • grub-customizer - customize black screen to something useful
  • shutter (screenshot & image manipulation) - screenshoot, manipulate, publish
  • sublime text 3 (vscode alternative)
  • enpass (keepass alternative)
  • spotify - music for atmosphere


Packages: Essential

Packages: Basic (not complete list)

Software Type Link
AngryIP Scanner Network Scanner
GitKraken Git Client
Remmina Remote Connection Manager
Helm Package manager for Kubernetes
Hashicorp Packer Image creator
Hashicorp Vault Secrets Manager
Hashicorp Vagrant Unified Workflow
Docker/Docker Compose Docker manager
Google Kubectl/Kubeadm Kubernetes Manager
Synapse Symantic Launcher
XCA Certificate Manager
Shutter Screenshot Manipulation
Palemoon Browser alternative (Java_+Flash)
Google Chrome Browser
Keepass Password Manager
Redshift Monitor temperature changer
Boostnote Notes for developers
Franz Multi IM
Diodon Clipboard Manager
Dropbox/Nemo Integration Tool
Team Viewer Remote desktop
WPS Office for Linux Productivity Tools
ctop Container process monitor
rke Rancher Kubernetes Engine
htop/atop/nmon/stress Monitoring tools

Packages: Optional (not complete list)

Software Type Link
Spotify Music Player
Enpass Password manager
Kodi Open Source Home Theater
Cairo-Dock Desktop interface
PDK/Puppet Agent Puppet Development Kit
Thunderbird Email client
Pinta Drawing/Image Editing
Skype for Linux Communicator
WoeUSB USB Image writer
Veeam Agent for Linux Backup tool
Sublime Text 3 Text Editor
Veracrypt Source disk encryption
GIMP GNU Image Manipulation Program

3-rd party apps




Some applications are copied to autostart folder

  • Remmina
  • Diodon
  • Cairo-Dock
  • Synapse
  • Redshift
  • Shutter

OS Tweaks

  • handle *.local domain with avahi
  • handle mDNS with .local domains
  • change IO Scheduler for SSD Drives
  • initial Timeshift launch
  • change fstrim schedule to daily


  • Q: Will it work with specific version WSL/Ubuntu/PidgeonOS?

  • A: Don't know, don't care. Do your own variables.yml and check

  • Q: What will happen if I'll run it multiple times?

  • A: I hope - your applications will be upgraded, same for repos and keys. But, due to DEB/APT dependency you have to look for possible downgrade related errors. See Known Issues for it.

  • Q: Can i check this in Ubuntu

  • A: Yes, but be prepared to create your own variables.yml and pass it as a parameter

  • Q: Can I participate?

  • A: Yes, but please create your own branch and do PR. Do not merge to master. Please keep master branch clean.

  • Q: I don't know how to do the above

  • A: Then don't do it ;)

  • Q: Why there is so many Ubuntu:Bionic/Xenial, not so many LinuxMint:Tara repositories?

  • A: Tara is built over Bionic packages, so rarely it requires to have specific repo.

To Do

  • better download file versioning (switch to latest where possible, separate version from URL, use separate folder for downloads)
  • better docs
  • services handling part (by default in Ubuntu/Debian, installed service is set to enabled/started)
  • more idempotency
  • fix Bionic's broken apps like Asbru-CM
  • more OS tweaks (i/o scheduler)
  • add AWS/GCE repositories for their tools
  • add Visual Studio Code extra extensions
  • add Vagrant plugins
  • more variables or tags never
  • better grub defaults handing
  • continue to use tagging
  • manual handle 3rd party deb files - pre-download and re-usage on demand
  • configure neofetch

Known issues

  • Due to how deb packages are treated by app, we should find a way to install always 'latest' version not specific version. If (after initial run) we'll upgrade package outside this script, next time deb part will fail trying to 'downgrade' package.
  • Downloading & installing all packages can be time consuming, depending on your Internet connection speed (aprox 40-60 minut)