- Development: Golang, NodeJs and Python tools.
- Browsers: Firefox ESR replacement with official PPA and configuration; and Brave installation.
- Package manager installation: Nix and Home Manager.
- Packages intallation: apt, nix, snap, npm and ruby gems.
- Note: pip packages are enforced to not be installed globally on Debian 12 by PEP-668.
- Replaces LibreOffice with OnlyOffice.
- Assorted FOSS programs: Cryptomator, KeyPass, OBS, OpenRGB, RClone, and Signal messenger installation.
- Configurations: dotfiles, shell/terminals, Gnome, Git, ssh, keyboard...
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.
-
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
- 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
-
Download and extract this playbook or clone this repository to your local drive.
git clone git@github.com:staticdev/linux-workstation-playbook.git
-
Install dependencies by entering the terminal in the playbook folder and run the command:
ansible-galaxy install -fr requirements.yml
-
Make a copy of default.config.yml with the name config.yml and change the configurations you want to use.
-
Run the command:
ansible-playbook main.yml -i inventory --ask-become-pass
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.
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.
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.
Contributions are very welcome. To learn more, see the Contributor Guide.
Distributed under the terms of the MIT license, Linux Workstation Playbook is free and open source software.
If you encounter any problems, please file an issue along with a detailed description.
This project was inspired by @geerlingguy's Mac Development Ansible Playbook.