diff options
| author | Sam Chudnick <sam@chudnick.com> | 2023-07-03 13:33:58 -0400 | 
|---|---|---|
| committer | Sam Chudnick <sam@chudnick.com> | 2023-07-03 13:33:58 -0400 | 
| commit | cdbec69018beae559863818040edcfa817a8e732 (patch) | |
| tree | 8cc09d856a7707345f99709f35ca01a644836382 | |
| -rw-r--r-- | README.md | 100 | ||||
| -rw-r--r-- | group_vars/all/vars.yml | 88 | ||||
| -rw-r--r-- | inventory.yml | 3 | ||||
| -rw-r--r-- | run.yml | 170 | 
4 files changed, 361 insertions, 0 deletions
| diff --git a/README.md b/README.md new file mode 100644 index 0000000..d93c466 --- /dev/null +++ b/README.md | |||
| @@ -0,0 +1,100 @@ | |||
| 1 | # ansible-desktop | ||
| 2 | Ansible playbook to install a copy of my desktop setup | ||
| 3 | |||
| 4 | ## Features | ||
| 5 | Simple one-command deployment of a fully functional desktop | ||
| 6 | |||
| 7 | - Custom builds of: | ||
| 8 | |||
| 9 | - dwm | ||
| 10 | - dmenu | ||
| 11 | - st | ||
| 12 | - slock | ||
| 13 | - tabbed | ||
| 14 | |||
| 15 | - Configuration for a variety of programs including: | ||
| 16 | |||
| 17 | - abook | ||
| 18 | - calcurse | ||
| 19 | - cava | ||
| 20 | - cmus | ||
| 21 | - dunst | ||
| 22 | - firejail | ||
| 23 | - fontconfig | ||
| 24 | - gtk2 & gtk3 | ||
| 25 | - htop | ||
| 26 | - khard | ||
| 27 | - mutt/neomutt | ||
| 28 | - newsboat | ||
| 29 | - picom | ||
| 30 | - ranger | ||
| 31 | - sxhkd | ||
| 32 | - ufw | ||
| 33 | - vim | ||
| 34 | - zathura | ||
| 35 | - zsh | ||
| 36 | |||
| 37 | - Custom shell scripts for: | ||
| 38 | |||
| 39 | - dwm status bar | ||
| 40 | - document compilation | ||
| 41 | - encrypted usb management | ||
| 42 | - getting passwords from `pass` via dmenu | ||
| 43 | - mounting and unmounting removable drives | ||
| 44 | - screenshots | ||
| 45 | - volume control | ||
| 46 | and more | ||
| 47 | |||
| 48 | ## Distros | ||
| 49 | |||
| 50 | This playbook has been specifically designed to run on Debian systems. The current Debian stable version is considered to be the supported distro. | ||
| 51 | |||
| 52 | The playbook should work for other distros; most seamlessly on Debian-derivatives. | ||
| 53 | However, updates to package names may be necessary when not running against Debian stable. | ||
| 54 | |||
| 55 | ## Usage | ||
| 56 | |||
| 57 | ### Prerequisite non-root user | ||
| 58 | The playbook assumes you have a non-root user that was created during the installation. | ||
| 59 | |||
| 60 | The playbook will add this user to the sudo group and deploy the dotfiles in their home directory. | ||
| 61 | |||
| 62 | If you do not have a non-root user please create one prior to running the playbook. | ||
| 63 | |||
| 64 | ### Clone the repository | ||
| 65 | ``` | ||
| 66 | git clone https://git.chudnick.com/ansible-desktop | ||
| 67 | ``` | ||
| 68 | |||
| 69 | ### Modify the inventory | ||
| 70 | Modify the inventory.yml for your deployment. | ||
| 71 | At a minimum, change `desktop.local` to the name of your desktop to configure. This could also `localhost` if you are running the playbook on the machine to be configured. | ||
| 72 | |||
| 73 | ### Modify vars.yml | ||
| 74 | Modify group\_vars/all/vars.yml for your deployment. | ||
| 75 | Below is a list of the variables and there function: | ||
| 76 | |||
| 77 | - amdcpu - installs amd cpu microcode | ||
| 78 | - amdgpu - installs amd gpu firmware | ||
| 79 | - intelcpu - install intel cpu firmware | ||
| 80 | - nvidiagpu - installs nvidia gpu firmware and drivers | ||
| 81 | - amd_microcode_package - package that install amd cpu microcode | ||
| 82 | - intel_microcode_package - package that install intel cpu microcode | ||
| 83 | - amdgpu_firwamre_package - package that installs amdgpu firmware | ||
| 84 | - nvidia_firmware_package - package that installs nvidia firmware | ||
| 85 | - user - the username of your non-root user on the desktop | ||
| 86 | - build_packages - packages needed to build suckless programs | ||
| 87 | - packages - list of packages to install | ||
| 88 | |||
| 89 | |||
| 90 | Make sure to modify the hardware variables for your machine. | ||
| 91 | Set user to the non-root user you created during installation. | ||
| 92 | |||
| 93 | ### Run the playbook | ||
| 94 | From the repo root directory run: | ||
| 95 | ``` | ||
| 96 | ansible-playbook run.yml -i inventory.yml | ||
| 97 | ``` | ||
| 98 | |||
| 99 | ### Login to the desktop | ||
| 100 | When the playbook finishes you can login to your desktop. If you were already logged in you will need to logout and back in to load the changes. | ||
| diff --git a/group_vars/all/vars.yml b/group_vars/all/vars.yml new file mode 100644 index 0000000..3c952f9 --- /dev/null +++ b/group_vars/all/vars.yml | |||
| @@ -0,0 +1,88 @@ | |||
| 1 | amdcpu: yes | ||
| 2 | amdgpu: yes | ||
| 3 | intelcpu: no | ||
| 4 | nvidiagpu: no | ||
| 5 | |||
| 6 | amd_microcode_package: amd64-microcode | ||
| 7 | intel_microcode_package: intel-microcode | ||
| 8 | amdgpu_firware_package: firmware-amdgpu | ||
| 9 | nvidia_firmware_package: firmware-misc-nonfree | ||
| 10 | |||
| 11 | user: user | ||
| 12 | |||
| 13 | # Don't change these unless you know what you are doing | ||
| 14 | build_packages: | ||
| 15 | - build-essential | ||
| 16 | - libx11-dev | ||
| 17 | - libx11-xcb-dev | ||
| 18 | - libxcb-res0-dev | ||
| 19 | - libxft-dev | ||
| 20 | - libxinerama-dev | ||
| 21 | - libxrender-dev | ||
| 22 | - libx11-dev | ||
| 23 | - libx11-xcb-dev | ||
| 24 | - libxcb-res0-dev | ||
| 25 | - libxft-dev | ||
| 26 | - libxinerama-dev | ||
| 27 | - libxrender-dev | ||
| 28 | - fontconfig | ||
| 29 | - libharfbuzz-dev | ||
| 30 | |||
| 31 | |||
| 32 | packages: | ||
| 33 | - acl | ||
| 34 | - apt-file | ||
| 35 | - arc-theme | ||
| 36 | - bc | ||
| 37 | - calcurse | ||
| 38 | - cava | ||
| 39 | - cmus | ||
| 40 | - cryptsetup | ||
| 41 | - curl | ||
| 42 | - diffutils | ||
| 43 | - dunst | ||
| 44 | - feh | ||
| 45 | - ffmpeg | ||
| 46 | - findutils | ||
| 47 | - firefox-esr | ||
| 48 | - firejail | ||
| 49 | - fonts-inconsolata | ||
| 50 | - fonts-liberation | ||
| 51 | - fonts-noto-color-emoji | ||
| 52 | - fzf | ||
| 53 | - gcc | ||
| 54 | - gdb | ||
| 55 | - git | ||
| 56 | - gpg | ||
| 57 | - groff | ||
| 58 | - htop | ||
| 59 | - imagemagick | ||
| 60 | - keepassxc | ||
| 61 | - lm-sensors | ||
| 62 | - locate | ||
| 63 | - maim | ||
| 64 | - make | ||
| 65 | - mpv | ||
| 66 | - neofetch | ||
| 67 | - neomutt | ||
| 68 | - network-manager | ||
| 69 | - newsboat | ||
| 70 | - pass-extension-otp | ||
| 71 | - pass | ||
| 72 | - picom | ||
| 73 | - pulseaudio | ||
| 74 | - ranger | ||
| 75 | - rsync | ||
| 76 | - sshfs | ||
| 77 | - suckless-tools | ||
| 78 | - sudo | ||
| 79 | - sxhkd | ||
| 80 | - sysstat | ||
| 81 | - ufw | ||
| 82 | - unclutter-xfixes | ||
| 83 | - vim | ||
| 84 | - xclip | ||
| 85 | - xorg | ||
| 86 | - zathura | ||
| 87 | - zsh-syntax-highlighting | ||
| 88 | - zsh | ||
| diff --git a/inventory.yml b/inventory.yml new file mode 100644 index 0000000..564430d --- /dev/null +++ b/inventory.yml | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | all: | ||
| 2 | hosts: | ||
| 3 | desktop.local: | ||
| @@ -0,0 +1,170 @@ | |||
| 1 | - name: deployment | ||
| 2 | hosts: all | ||
| 3 | become: yes | ||
| 4 | |||
| 5 | tasks: | ||
| 6 | - name: use https repos | ||
| 7 | when: ansible_facts['os_family'] == 'Debian' | ||
| 8 | replace: | ||
| 9 | path: /etc/apt/sources.list | ||
| 10 | regexp: "http://" | ||
| 11 | replace: "https://" | ||
| 12 | |||
| 13 | - name: temporarily enable non-free suites | ||
| 14 | when: ansible_facts['os_family'] == 'Debian' | ||
| 15 | replace: | ||
| 16 | path: /etc/apt/sources.list | ||
| 17 | regexp: "main" | ||
| 18 | replace: "main contrib non-free non-free-firmware" | ||
| 19 | |||
| 20 | - name: update and upgrade | ||
| 21 | when: ansible_facts['os_family'] == 'Debian' | ||
| 22 | apt: | ||
| 23 | name: "*" | ||
| 24 | state: latest | ||
| 25 | update_cache: yes | ||
| 26 | register: apt_upgrade | ||
| 27 | retries: 100 | ||
| 28 | until: apt_upgrade is success or ('Failed to lock apt for exclusive operation' not in apt_upgrade.msg and '/var/lib/dpkg/lock' not in apt_upgrade.msg) | ||
| 29 | |||
| 30 | - name: install amdgpu firmware | ||
| 31 | when: "{{ amdgpu }}|bool" | ||
| 32 | package: | ||
| 33 | name: "{{ amdgpu_firmware_package }}" | ||
| 34 | state: latest | ||
| 35 | |||
| 36 | - name: install nvidia gpu firmware | ||
| 37 | when: "{{ nvidiagpu }}|bool" | ||
| 38 | package: | ||
| 39 | name: "{{ nvidia_firmware_package }}" | ||
| 40 | state: latest | ||
| 41 | |||
| 42 | - name: install amd cpu microcode | ||
| 43 | when: "{{ amdcpu }}|bool" | ||
| 44 | package: | ||
| 45 | name: "{{ amd_microcode_package }}" | ||
| 46 | state: latest | ||
| 47 | |||
| 48 | - name: install intel cpu microcode | ||
| 49 | when: "{{ intelcpu }}|bool" | ||
| 50 | package: | ||
| 51 | name: "{{ intel_microcode_package }}" | ||
| 52 | state: latest | ||
| 53 | |||
| 54 | - name: remove non-free suites | ||
| 55 | when: ansible_facts['os_family'] == 'Debian' | ||
| 56 | replace: | ||
| 57 | path: /etc/apt/sources.list | ||
| 58 | regexp: "main contrib non-free non-free-firmware" | ||
| 59 | replace: "main" | ||
| 60 | |||
| 61 | - name: update and upgrade | ||
| 62 | when: ansible_facts['os_family'] == 'Debian' | ||
| 63 | apt: | ||
| 64 | name: "*" | ||
| 65 | state: latest | ||
| 66 | update_cache: yes | ||
| 67 | register: apt_upgrade | ||
| 68 | retries: 100 | ||
| 69 | until: apt_upgrade is success or ('Failed to lock apt for exclusive operation' not in apt_upgrade.msg and '/var/lib/dpkg/lock' not in apt_upgrade.msg) | ||
| 70 | |||
| 71 | - name: install packages | ||
| 72 | package: | ||
| 73 | name: "{{ packages }}" | ||
| 74 | state: latest | ||
| 75 | |||
| 76 | - name: enable ufw | ||
| 77 | ufw: | ||
| 78 | state: enabled | ||
| 79 | |||
| 80 | - name: default deny incoming | ||
| 81 | ufw: | ||
| 82 | default: deny | ||
| 83 | direction: incoming | ||
| 84 | |||
| 85 | - name: default allow outgoing | ||
| 86 | ufw: | ||
| 87 | default: allow | ||
| 88 | direction: outgoing | ||
| 89 | |||
| 90 | - name: reload ufw | ||
| 91 | ufw: | ||
| 92 | state: reloaded | ||
| 93 | |||
| 94 | - name: add user to sudo group and change shell | ||
| 95 | user: | ||
| 96 | name: "{{ username }}" | ||
| 97 | shell: /usr/bin/zsh | ||
| 98 | groups: sudo | ||
| 99 | append: yes | ||
| 100 | |||
| 101 | - name: clone dotfiles repo | ||
| 102 | git: | ||
| 103 | repo: https://git.chudnick.com/dwm | ||
| 104 | dest: /tmp/dotfiles | ||
| 105 | |||
| 106 | - name: copy dotfiles into home directory | ||
| 107 | become_user: "{{ username }}" | ||
| 108 | command: | ||
| 109 | cmd: "rsync --exclude .git/ --exclude LICENSE -av /tmp/dotfiles/ /home/{{ username }}" | ||
| 110 | |||
| 111 | # ------ | ||
| 112 | |||
| 113 | - name: install packages for building suckless tools | ||
| 114 | package: | ||
| 115 | name: "{{ build_packages }}" | ||
| 116 | state: latest | ||
| 117 | |||
| 118 | - name: clone dwm repo | ||
| 119 | git: | ||
| 120 | repo: https://git.chudnick.com/dwm | ||
| 121 | dest: /tmp/dwm | ||
| 122 | |||
| 123 | - name: build dwm | ||
| 124 | make: | ||
| 125 | chdir: /tmp/dwm | ||
| 126 | target: clean install | ||
| 127 | |||
| 128 | |||
| 129 | - name: clone dmenu repo | ||
| 130 | git: | ||
| 131 | repo: https://git.chudnick.com/dmenu | ||
| 132 | dest: /tmp/dmenu | ||
| 133 | |||
| 134 | - name: build dmenu | ||
| 135 | make: | ||
| 136 | chdir: /tmp/dmenu | ||
| 137 | target: clean install | ||
| 138 | |||
| 139 | |||
| 140 | - name: clone st repo | ||
| 141 | git: | ||
| 142 | repo: https://git.chudnick.com/st | ||
| 143 | dest: /tmp/st | ||
| 144 | |||
| 145 | - name: build st | ||
| 146 | make: | ||
| 147 | chdir: /tmp/st | ||
| 148 | target: clean install | ||
| 149 | |||
| 150 | |||
| 151 | - name: clone slock repo | ||
| 152 | git: | ||
| 153 | repo: https://git.chudnick.com/slock | ||
| 154 | dest: /tmp/slock | ||
| 155 | |||
| 156 | - name: build slock | ||
| 157 | make: | ||
| 158 | chdir: /tmp/slock | ||
| 159 | target: clean install | ||
| 160 | |||
| 161 | |||
| 162 | - name: clone tabbed repo | ||
| 163 | git: | ||
| 164 | repo: https://git.chudnick.com/tabbed | ||
| 165 | dest: /tmp/tabbed | ||
| 166 | |||
| 167 | - name: build tabbed | ||
| 168 | make: | ||
| 169 | chdir: /tmp/tabbed | ||
| 170 | target: clean install | ||
