Skip to content

staticdev/linux-workstation-playbook

Repository files navigation

Linux Workstation Playbook

pre-commit Tests

Features

Note: this is an opinionated setup I personally use for software development on Debian 12. You can customize all the changes following instructions in Overriding Defaults.

Requirements

  1. Ansible installed:

    sudo apt install ansible-core

    If you get an error saying no installation candidate, edit your apt sources files with:

    sudo gedit /etc/apt/sources.list

    Remove DVD repos (if you see them) and make sure you have:

    deb http://deb.debian.org/debian/ bookworm main contrib non-free-firmware
    deb-src http://deb.debian.org/debian/ bookworm main contrib non-free-firmware
    
    deb http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware
    deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware
    
    # bookworm-updates, to get updates before a point release is made;
    # see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports
    deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free-firmware
    deb-src http://deb.debian.org/debian/ bookworm-updates main contrib non-free-firmware
    1. If ~/.local/bin is not on echo $PATH, you can add it with the command:
    sudo echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc && source ~/.bashrc

Installation

  1. Download and extract this playbook or clone this repository to your local drive.

    git clone git@github.com:staticdev/linux-workstation-playbook.git
  2. Install dependencies by entering the terminal in the playbook folder and run the command:

    ansible-galaxy install -fr requirements.yml

Usage

  1. Make a copy of default.config.yml with the name config.yml and change the configurations you want to use.

  2. Run the command:

    ansible-playbook main.yml -i inventory --ask-become-pass

Included Applications / Configuration (Default)

Packages (installed with apt):

- apache2-utils
- cmake
- dconf-editor # visual gnome configs
- gir1.2-clutter-1.0 # dep gnome extension system monitor
- gir1.2-clutter-gst-3.0 # dep gnome extension system monitor
- gir1.2-gtkclutter-1.0 # dep gnome extension system monitor
- git
- locales-all
- openssl
- podman
- poedit

It also installs with Nix package manager:

- kubectl
- helm
- k9s
- htop
- libvirt
- nmap
- qemu
- thefuck
- tmux
- vagrant
- vim
- wget
- xclip

Finally, there are a few other preferences and settings added on for various apps and services.

Overriding Defaults

Not everyone's workstation and preferred software configuration is the same.

You can override any of the defaults configured in default.config.yml by creating a config.yml file and setting the overrides in that file.

The first thing one can customize is the list of installed packages with apt (Debian's package manager):

installed_packages:
  - go

For Nix packages, it is necessary to specify a command that will verify if it is already installed, most binaries support --version or just version, eg:

nix_packages:
  - name: git
    check_cmd: git --version
  - name: kubectl
    check_cmd: kubectl version --client

Other package managers:

# requires snapd
snap_packages:
  - name: code
    classic: true
  - name: postman

npm_packages:
  - name: webpack

To have you own dotfiles, just fork the dotfiles eg. repo and change the url of dotfiles_repo or just change configure_dotfiles to false if you do not want it.

Any variable can be overridden in config.yml; see the supporting roles' documentation for a complete list of available variables.

Use with a remote machine

You can use this playbook to manage other machine as well; the playbook doesn't even need to be run from a Linux computer at all! If you want to manage a remote Linux, either another Linux on your network, or a hosted Linux in the cloud, you just need to make sure you can connect to it with SSH.

Edit the inventory file in this repository and change the line that starts with 127.0.0.1 to:

[ip address or hostname of linux]  ansible_user=[linux ssh username]

If you need to supply an SSH password (if you don't use SSH keys), make sure to pass the --ask-pass parameter to the ansible-playbook command.

Contributing

Contributions are very welcome. To learn more, see the Contributor Guide.

License

Distributed under the terms of the MIT license, Linux Workstation Playbook is free and open source software.

Issues

If you encounter any problems, please file an issue along with a detailed description.

Credits

This project was inspired by @geerlingguy's Mac Development Ansible Playbook.