- Support processor architectures: x86_64 (only one for now, may be extended in the future).
- Development: Golang, NodeJs and Python tools.
- IDEs: VSCodium installation (via Nixpkgs).
- Browsers: Brave, Firefox and Mullvad Browser (via Nix).
- Containers and virtualization: Docker, Podman and libvirtd.
- Office: installs OnlyOffice (via Nixpkgs).
- Assorted FOSS programs: Cryptomator, KeyPass, OBS (via Nixpkgs), OpenRGB, RClone, and Signal (via Nixpkgs) messenger installation.
- Configurations: dotfiles, zsh (via Nix), terminals, Gnome, Git, ssh, keyboard...
Note: this is an opinionated setup I personally use for software development on NixOS. You can customize all the changes following instructions in Overriding Defaults.
- Install latest stable, recommended Minimal ISO image from NixOS download ISO page.
- [Ansible] installed. Make sure you have it in you
local.nix
either insystemWidePkgs
ormainUser.pkgs
.
- Create a
local.nix
file from eg folder and change:
- git variables.
- main Linux username.
- timezone.
- browser configurations.
-
Create at /etc/nixos a
flake.nix
file eg folder.curl -s "https://raw.githubusercontent.com/staticdev/linux-workstation-playbook/main/eg/flake.nix?token=$(date +%s)" -o /etc/nixos/flake.nix nixos-generate-config nixos-rebuild boot --upgrade-all
-
Rebuild hardware config with
sudo nixos-generate-config
. -
Rebuild your system with
sudo nixos-rebuild boot --upgrade-all
.
-
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
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.
For Nix packages, update your Home Manager config on your dotfiles repo.
Other package managers:
# requires snapd
snap_packages:
- name: code
classic: true
- name: postman
npm_packages:
- name: webpack
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.