4f953200 |
---
- hosts: 'all'
vars:
prefix: '{{ ansible_env.HOME }}/.local'
pre_tasks:
## APT cache update
- name: 'Update APT'
become: yes
apt:
update_cache: yes
cache_valid_time: 86400 # One day.
## APT repository dependencies
- name: 'Install APT repository dependencies'
become: yes
apt:
name:
- 'gnupg'
## APT repositories
# https://github.com/Airblader/i3/wiki/installation#ubuntu
# NOTE: This always uses `impish` (Ubuntu 20.10) because newer versions are
# not available at the time of writing.
# The URLs at https://regolith-desktop.com/#get-regolith-21 is probably
# better.
- name: 'Add APT Regolith repository'
become: yes
apt_repository:
repo: 'ppa:regolith-linux/release'
codename: 'impish'
## APT packages
# TODO: 'manpages-posix' and 'manpages-posix-dev' are in Debian
# non-free. Do equivalent of `add-apt-repository non-free`?
- name: 'Install APT packages'
become: yes
apt:
name:
### Support files
- 'locales-all'
- 'sensible-utils'
- 'fonts-dejavu'
- 'fonts-symbola'
- 'fonts-unifont'
- 'fonts-font-awesome'
### Mail
- 'mailutils' # Recommends `default-mta`, i.e. `postfix`
### Hardware
- 'xsane'
# TODO: Break stuff out to benchmarking section?
- 'sysstat'
### I/O
- 'iozone3'
#### S.M.A.R.T
- 'smartmontools'
- 'smart-notifier'
- 'gsmartcontrol'
#### NVMe
- 'nvme-cli'
#### Sensors
# - 'lm-sensors'
#### Brightness
- 'brightnessctl'
- 'brightness-udev'
#### Video decoding
- 'libvdpau-va-gl1'
#### GPU
# - 'intel-gpu-tools' # `intel_gpu_top`
- 'radeontop'
# - 'nvtop'
#### Power
# - 'tlp'
- 'powertop'
#### Performance
- 'iotop'
- 'fio'
- 'iperf3'
### Python
- 'python3'
- 'python3-pip'
- 'python3-venv'
- 'python3-tk'
- 'python3-matplotlib'
- 'python3-numpy'
- 'python3-scipy'
# - 'python3-ipython'
# - 'jupyter'
# - 'jupyter-qtconsole'
### Dotfile dependencies
- 'git'
- 'stow'
# - 'libglib2.0-bin' # `gsettings`
### CLI session
- 'bash'
### X session
- 'xinit'
- 'i3-gaps-wm'
- 'compton'
- 'polybar'
- 'rofi'
- 'dunst'
- 'sxhkd'
- 'hsetroot'
- 'mpv'
### CLI applications
- 'apt-file'
- 'apt-rdepends'
- 'aptitude'
- 'tree'
- 'renameutils'
- 'moreutils'
- 'curl'
- 'jq'
- 'sshfs'
- 'autossh'
# TODO: `git-autofixup` might be better than `git-absorb`
# (https://news.ycombinator.com/item?id=26501396), but was only
# introduced in Debian 12 Bookworm, Ubuntu 22.04.
- 'git-absorb'
# - 'tig'
- 'avahi-utils'
- 'mpc'
- 'pandoc'
# - 'timg'
- 'graphviz'
- 'par'
- 'pass'
# - 'dict-gcide'
- 'ncal'
- 'inotify-tools'
- 'rlwrap'
- 'adb'
- 'fdupes'
- 'pdfgrep'
# - 'pass-extension-otp'
# - 'pass-extension-tomb'
# - 'pass-git-helper'
### TUI applications
- 'vim-gtk3'
- 'tmux'
- 'htop'
# - 'atop'
# - 'bpytop'
- 'pulsemixer'
- 'ncdu'
- 'ncmpcpp'
- 'khal'
### GUI applications
- 'xdotool'
- 'xdg-utils'
- 'gnome-terminal'
# - 'xfce4-terminal'
# - 'kitty' # TODO?
# - 'firefox'
- 'vlc'
- 'gimp'
- 'inkscape'
# - 'krita'
# - 'mypaint'
# - 'xournal'
- 'pavucontrol'
- 'zathura'
# - 'flameshot'
- 'screenkey'
- 'p7zip-full'
# - 'zeal'
- 'network-manager-gnome' # `nm-applet`
# - 'pasystray'
# - 'xdot' # Use `rcrnstn/xdot.py` pip package instead.
### LaTex
# TODO: Some of these might be redundant.
- 'texlive'
- 'texlive-latex-extra'
- 'texlive-lang-english'
- 'texlive-lang-european'
- 'latexmk'
### Development
#### Profiling
# - 'linux-tools-generic' # `perf`
- 'valgrind' # valgrind, cachegrind, callgrind
##### Visualization
- 'hotspot'
- 'kcachegrind'
# - 'eclipse-tracecompass'
# - 'uftrace'
#### Navigation
- 'exuberant-ctags'
#### Math
- 'octave'
# - 'maxima'
- 'asymptote' # TODO: https://github.com/cjquines/tsqx
- 'geogebra'
#### Shell
# - 'manpages-posix'
- 'shellcheck'
- 'devscripts' # `checkbashisms`
#### C/C++
# - 'manpages-posix-dev'
- 'manpages-dev'
# - 'libstdc++-11-doc'
- 'cppman'
- 'cppreference-doc-en-html'
- 'gcc'
- 'g++'
- 'make'
- 'cmake'
- 'cppcheck'
- 'clang-tidy'
# Note that apt dependency declaration for `iwyu` might be broken,
# manually make sure the right version of `clang` is installed.
- 'iwyu'
#### OpenGL
- 'opengl-4-man-doc'
- 'libgl-dev'
- 'libglew-dev'
- 'libglfw3-dev'
- 'libsdl2-dev'
# - 'libwxgtk3.0-gtk3-dev'
- 'libglm-dev'
- 'libimgui-dev'
- 'mesa-utils' # `glxinfo`, `glxgears`
- 'glew-utils' # `glewinfo`
- 'glbinding-tools' # `glqueries`
- 'glslang-tools' # `glslangValidator`
- 'nvidia-cg-toolkit' # `cgc` also does GLSL
- 'renderdoc'
- 'apitrace-gui'
# - 'glmark2' # `glmark2`
#### OpenCV
# - 'libopencv-calib3d-dev'
#### JavaScript
# - 'libjavascriptcoregtk-4.0-bin'
- 'nodejs'
- 'npm'
### DevOps
- 'docker.io'
- 'docker-compose'
# - 'virtualbox-qt'
- 'vagrant'
- 'vagrant-sshfs'
- 'ansible'
- 'ansible-lint'
### Android
- 'scrcpy'
## Hardware
- name: 'Add user "{{ ansible_user_id }}" to video and docker groups'
become: yes
user:
name: '{{ ansible_user_id }}'
groups:
- 'video'
- 'docker'
append: yes
## Prefix
- name: 'Create prefix "{{ prefix }}"'
file:
path: '{{ prefix }}'
state: directory
recurse: yes
## Dotfiles
- name: 'Move skeleton dotfiles'
shell: |
cd '/etc/skel'
for path in '.'*
do
path="$HOME/$path"
if [ -e "$path" ] && ! [ -d "$path" ] && ! [ -L "$path" ]
then
printf 'Moving "%s" to "%s"\n' "$path" "$path.skel"
mv "$path" "$path.skel"
fi
done
register: result
changed_when: result.stdout != ''
roles:
## Unattended
# TODO: Using `pre_tasks` above results in `etckeeper` getting installed
# after all other packages, which might do configuration at install time.
# We moved to `pre_tasks` from `post_tasks` for a reason...what was it?
- role: 'unattended'
## Xsession
# For Display Managers that don't offer a `/etc/X11/Xsession` natively.
- role: 'xsession'
## xwinwrap
# For `background`.
- role: 'xwinwrap'
xwinwrap_prefix: '{{ prefix }}'
## Home dotfiles
- role: 'dotfiles'
dotfiles:
### User
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-rcrnstn'
### Hardware
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-input'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-pulseaudio'
### Session
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-profile'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-path'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-locale'
### CLI session
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-sh'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-colors'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-prompt'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-readline'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-bash'
### GUI session
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-xsession'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-xresources'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-i3-gaps'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-compton-picom'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-polybar'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-rofi'
# - 'https://git.rcrnstn.net/rcrnstn/dotfiles-dunst'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-sxhkd'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-xdg-user-dirs'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-recently-used'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-gtk'
### CLI applications
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-coreutils'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-diffutils'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-man'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-mpd'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-youtube-dl'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-graphviz'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-stow'
### TUI applications
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-less'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-vim'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-tmux'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-ncmpcpp'
### GUI applications
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-xdg-utils'
# - 'https://git.rcrnstn.net/rcrnstn/dotfiles-gnome-terminal'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-xfce4-terminal'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-firefox'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-zathura'
### Development
#### Git
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-git'
#### C/C++
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-cmake'
#### JavaScript
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-nodejs'
### DevOps
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-docker'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-virtualbox'
- 'https://git.rcrnstn.net/rcrnstn/dotfiles-ansible'
## Prefix dotfiles
- role: 'dotfiles'
dotfiles_dir: '{{ prefix }}/stow'
dotfiles:
### GUI session
- 'https://git.rcrnstn.net/rcrnstn/background'
### Development
#### Git
- 'https://git.rcrnstn.net/rcrnstn/git-gitolite'
## Firefox extensions
- role: 'firefox-extensions'
firefox_extensions:
### Mozilla recommended
- 'ublock-origin'
- 'enhancer-for-youtube'
- 'clearurls'
- 'tree-style-tab'
- 'auto-tab-discard'
- 'turbo-download-manager'
# - 'https-everywhere'
# - 'languagetool'
# - 'styl-us'
### Usability
- 'tridactyl-vim'
- 'multiple-highlight' # Less permissions than alternatives.
- 'old-reddit-redirect'
### Customizability
# - 'violentmonkey'
### Password management
# - 'passff'
# - 'browserpass-ce'
### Dictionaries
# Swedish, linked from
# https://addons.mozilla.org/en-US/firefox/language-tools/
- 'görans-hemmasnickrade-ordli'
post_tasks:
## pip packages
- name: 'Install pip packages'
pip:
extra_args: '--user'
name:
- 'pipx'
# Not installed with `pipx` because the resulting venv does not
# include PyGObject bindings for GTK3.
- 'git+https://git.rcrnstn.net/rcrnstn/xdot.py'
## pipx packages
- name: 'Install pipx packages'
community.general.pipx:
name: '{{ item }}'
loop:
# - 'youtube-dl'
- 'yt-dlp'
- 'proselint'
- 'asciinema'
- 'vim-vint'
- 'vimgolf'
- 'git+https://github.com/google/vimdoc'
- 'git+https://git.rcrnstn.net/rcrnstn/glregistry'
- 'vosk'
# - 'openai-whisper'
# - 'ruff'
## NPM packages
- name: 'Install NPM packages'
community.general.npm:
name: '{{ item }}'
global: yes
environment:
NPM_CONFIG_PREFIX: '{{ prefix }}'
loop:
- 'n'
- 'svg-term-cli'
|