-
Notifications
You must be signed in to change notification settings - Fork 0
/
install-playbook.yml
289 lines (253 loc) · 10.2 KB
/
install-playbook.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
- name: Setup Debian 12
hosts: localhost
vars:
user_programs: /usr/local/bin
helix_src_folder: "{{ ansible_facts['user_dir'] }}/src/helix"
helix_config_folder: "{{ ansible_facts['user_dir'] }}/.config/helix"
helix_git_version: "fd89c3c8335399e344e038f1141ea0657653a591"
keyd_git_version: "201a077b2ccb8cd01b77396c1f88e07cbcb11d1e"
vars_files:
- packages.yml
tasks:
- name: Check if OS is Debian and version is 12
ansible.builtin.fail:
msg: "This playbook can only be run on Debian 12"
when: ansible_os_family != 'Debian' or ansible_distribution_major_version != '12'
- name: Add user to the pipewire group
become: true
block:
- name: Create pipewire group
ansible.builtin.group:
name: pipewire
- name: Add user to the pipewire group
ansible.builtin.user:
name: "{{ ansible_facts['user_id'] }}"
groups: pipewire
append: true
- name: Add the Flathub repository
community.general.flatpak_remote:
name: flathub
flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo
- name: Remove unwanted desktop apps
become: true
ansible.builtin.apt:
name: "{{ packages_to_remove }}"
state: absent
autoremove: true
purge: true
- name: Install Packages
become: true
block:
- name: Update and upgrade all Debian packages
ansible.builtin.apt:
upgrade: dist
update_cache: true
- name: Install Debian packages
ansible.builtin.apt:
name: "{{ packages_to_install }}"
- name: Install Flatpak packages
community.general.flatpak:
name: "{{ flatpak_packages }}"
- name: Install NPM global packages
loop: "{{ npm_packages }}"
community.general.npm:
name: "{{ item }}"
global: true
- name: Install Python packages
ansible.builtin.command: pipx install {{ item }}
loop: "{{ python_packages }}"
args:
creates: "{{ ansible_facts['user_dir'] }}/.local/pipx/venvs/{{ item }}"
- name: Run pipx ensurepath
ansible.builtin.command: pipx ensurepath
changed_when: false
- name: Clone keyd from GitHub
ansible.builtin.git:
repo: https://github.com/rvaiya/keyd
dest: "{{ playbook_dir }}/keyd"
version: "{{ keyd_git_version }}"
update: false
- name: Ensure the keyd directory exists
become: true
ansible.builtin.file:
path: /etc/keyd/
state: directory
mode: "0755"
- name: Copy keyd default.conf to /etc/keyd/
become: true
ansible.builtin.copy:
src: "{{ playbook_dir }}/extras/default.conf"
dest: /etc/keyd/default.conf
owner: root
group: root
mode: "0644"
- name: Install nnn
block:
- name: Install nnn with nerd font 3 support
become: true
ansible.builtin.apt:
deb: "{{ playbook_dir }}/extras/nnn_4.9-1_amd64.deb"
- name: Download the latest nnn plugins
ansible.builtin.get_url:
url: https://raw.githubusercontent.com/jarun/nnn/master/plugins/getplugs
dest: /tmp/getplugs
mode: "0755"
- name: Install nnn plugins
ansible.builtin.command: /tmp/getplugs
args:
creates: "{{ ansible_facts['user_dir'] }}/.config/nnn/plugins"
- name: Install nerd fonts
block:
- name: Create ~/.local/share/fonts directory
ansible.builtin.file:
path: "{{ ansible_facts['user_dir'] }}/.local/share/fonts"
state: directory
mode: "0755"
- name: Copy nerd fonts symbols only
ansible.builtin.copy:
src: "{{ playbook_dir }}/extras/SymbolsNerdFontMono-Regular.ttf"
dest: "{{ ansible_facts['user_dir'] }}/.local/share/fonts/SymbolsNerdFontMono-Regular.ttf"
- name: Refresh font cache
ansible.builtin.command: fc-cache -vf
changed_when: false
- name: Download and install GitHub binaries
become: true
block:
- name: Download and install delta
ansible.builtin.apt:
deb: https://github.com/dandavison/delta/releases/download/0.16.5/git-delta_0.16.5_amd64.deb
- name: Download and install marksman and tt
ansible.builtin.get_url:
url: "{{ item.url }}"
dest: "{{ item.dest }}"
mode: "{{ item.mode | default(omit) }}"
loop:
- {
url: "https://github.com/artempyanykh/marksman/releases/download/2023-12-09/marksman-linux-x64",
dest: "{{ user_programs }}/marksman",
mode: "0755",
}
- {
url: "https://github.com/lemnos/tt/releases/download/v0.4.2/tt-linux",
dest: "{{ user_programs }}/tt",
mode: "0755",
}
- {
url: "https://github.com/lemnos/tt/releases/download/v0.4.2/tt.1.gz",
dest: "/usr/share/man/man1/tt.1.gz",
}
- name: Download and install ltex-ls, vale and lazygit
ansible.builtin.unarchive:
src: "{{ item.src }}"
dest: "{{ user_programs }}"
remote_src: true
extra_opts: "{{ item.extra_opts | default(omit) }}"
include: "{{ item.include | default(omit) }}"
loop:
- {
src: "https://github.com/valentjn/ltex-ls/releases/download/16.0.0/ltex-ls-16.0.0.tar.gz",
extra_opts:
[
"--strip-components=1",
"ltex-ls-16.0.0/bin",
"ltex-ls-16.0.0/lib",
],
}
- {
src: "https://github.com/errata-ai/vale/releases/download/v2.27.0/vale_2.27.0_Linux_64-bit.tar.gz",
include: "vale",
}
- {
src: "https://github.com/jesseduffield/lazygit/releases/download/v0.40.2/lazygit_0.40.2_Linux_x86_64.tar.gz",
include: "lazygit",
}
- name: Create symlink to ltex-ls binary
ansible.builtin.file:
src: "{{ user_programs }}/bin/ltex-ls"
dest: "{{ user_programs }}/ltex-ls"
state: link
- name: Download and install yabridge
ansible.builtin.unarchive:
src: https://github.com/robbert-vdh/yabridge/releases/download/5.0.5/yabridge-5.0.5.tar.gz
dest: "{{ ansible_facts['user_dir'] }}/.local/share"
remote_src: true
- name: Clone Helix editor from GitHub
ansible.builtin.git:
repo: https://github.com/helix-editor/helix
dest: "{{ helix_src_folder }}"
version: "{{ helix_git_version }}"
clone: true
update: false
register: helix_cloned
- name: Install the latest stable rust, rust-analyzer, helix and AI Chat
ansible.builtin.shell: >
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
&& . "{{ ansible_facts['user_dir'] }}/.cargo/env"
&& rustup component add rust-analyzer
&& cargo install --locked --path "{{ helix_src_folder }}/helix-term"
&& cargo install aichat
args:
creates: "{{ ansible_facts['user_dir'] }}/.cargo/env"
# Stow * Stow will fail if you have run kitty or lazygit in advance as they both create non link config files on first run
- name: Stow dotfiles
block:
- name: Create ~/.dotfile directory
ansible.builtin.file:
path: "{{ ansible_facts['user_dir'] }}/.dotfiles"
state: directory
mode: "0755"
- name: Copy dotfiles
ansible.builtin.copy:
src: "{{ playbook_dir }}/dotfiles/"
dest: "{{ ansible_facts['user_dir'] }}/.dotfiles/"
- name: Run stow
ansible.builtin.command: >
stow --dir={{ ansible_facts['user_dir'] }}/.dotfiles
--target {{ ansible_facts['user_dir'] }} autostart helix mpv shell pandoc kitty lazygit keepassxc aichat
--verbose=2
register: result
changed_when: 'result.stderr is search("LINK: ")'
- name: Update .bashrc
ansible.builtin.blockinfile:
block: "{{ lookup('ansible.builtin.file', './bashrc.bash') }}"
path: "{{ ansible_facts['user_dir'] }}/.bashrc"
backup: true
- name: Set MOZ_ENABLE_WAYLAND to 1 in /etc/environment
become: true
ansible.builtin.lineinfile:
path: /etc/environment
line: "MOZ_ENABLE_WAYLAND=1"
- name: Setup Helix
when: helix_cloned.changed
block:
- name: Create Helix editor config symlink
ansible.builtin.file:
src: "{{ helix_src_folder }}/runtime"
dest: "{{ helix_config_folder }}/runtime"
state: link
- name: Ensure the icons directory exists
ansible.builtin.file:
path: "{{ ansible_facts['user_dir'] }}/.icons"
state: directory
mode: "0755"
- name: Copy Helix editor icons
ansible.builtin.copy:
src: "{{ helix_src_folder }}/contrib/helix.png"
dest: "{{ ansible_facts['user_dir'] }}/.icons/helix.png"
- name: Create Helix .desktop file
ansible.builtin.copy:
dest: "{{ ansible_facts['user_dir'] }}/.local/share/applications/helix.desktop"
content: |
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=kitty hx %F
Name=Helix
Comment=Open in Helix using the Kitty terminal
Icon=helix
Categories=Utility;TerminalEmulator;
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
- name: Update the desktop database
ansible.builtin.command: update-desktop-database "{{ ansible_facts['user_dir'] }}/.local/share/applications"
changed_when: false