Skip to content

staticdev/linux-workstation-playbook

Repository files navigation

Linux Workstation Playbook

pre-commit Tests

Features

  • Support processor architectures: x86_64 (only one for now, may be extended in the future).
  • IDEs: VSCodium installation (via Nixpkgs), Neovim (via NixVim).
  • Browsers: Brave and Mullvad Browser (via Nix).
  • Containers and virtualization: Docker, Podman and libvirtd.
  • Your favorite programs via Nixpkgs.
  • Configurations: dotfiles, zsh (via Nix), Guake terminal, Gnome (and extensions), 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.

Requirements

  1. Install latest stable, recommended Minimal ISO image from NixOS download ISO page.
  2. [Ansible] installed. Make sure you have it in you local.nix either in systemWidePkgs or mainUser.pkgs.

Installation

  1. Create a local.nix file from eg folder and change:
  • git variables.
  • main Linux username.
  • timezone.
  • browser configurations.
  1. 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
  2. Rebuild hardware config with sudo nixos-generate-config.

  3. Rebuild your system with sudo nixos-rebuild boot --upgrade-all.

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)

It installs packages with Nix package manager:

- kubectl
- helm
- k9s
- htop
- libvirt
- nmap
- qemu
- thefuck
- tmux
- vagrant
- 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.

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.

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.