--- - 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'