Compare commits
448
Commits
060b1ac771
..
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b56fa60739 | ||
|
|
4e8d22cb46 | ||
|
|
3bc2185962 | ||
|
|
aa9ccbfd54 | ||
|
|
444b34bd31 | ||
|
|
e996cb9ef1 | ||
|
|
5b668e97f4 | ||
|
|
4b26e1b3ae | ||
|
|
5d3040da71 | ||
|
|
be4d8cd4f6 | ||
|
|
d24381ad1e | ||
|
|
ad8b4a1663 | ||
|
|
8d01548627 | ||
|
|
f587ca1e5e | ||
|
|
bbffe8c69a | ||
|
|
768cabfe45 | ||
|
|
b1bdc953c2 | ||
|
|
1764ca510f | ||
|
|
7f986e51d3 | ||
|
|
d0970f5971 | ||
|
|
d94397349b | ||
|
|
bb1514c33d | ||
|
|
0581ea62df | ||
|
|
0332289742 | ||
|
|
a3a647318d | ||
|
|
4da671c40e | ||
|
|
4db955b32d | ||
|
|
c0a9d79776 | ||
|
|
4145a12637 | ||
|
|
c23bb1c06b | ||
|
|
a9b78dbba2 | ||
|
|
a714a26058 | ||
|
|
d15b22ec26 | ||
|
|
482d3072f5 | ||
|
|
609edd6c3b | ||
|
|
1ded62a3d4 | ||
|
|
0303a1c091 | ||
|
|
10b21ac49b | ||
|
|
7efa7f1b91 | ||
|
|
d3a5946232 | ||
|
|
46890d0d16 | ||
|
|
9073dfc597 | ||
|
|
f3d9f088c7 | ||
|
|
3c10415347 | ||
|
|
26dc61ebbf | ||
|
|
33755480bb | ||
|
|
35783422a3 | ||
|
|
d681c3f447 | ||
|
|
a31cad1f42 | ||
|
|
788a723690 | ||
|
|
6ed4f284c0 | ||
|
|
59b4343ec2 | ||
|
|
af64e47519 | ||
|
|
e2c18a5cfc | ||
|
|
556f483aaa | ||
|
|
b09e74c4b7 | ||
|
|
107afbece4 | ||
|
|
076f954abd | ||
|
|
648962e710 | ||
|
|
15370d639f | ||
|
|
eb3b16264e | ||
|
|
25346a95de | ||
|
|
d25f47bd72 | ||
|
|
9aa25f85cd | ||
|
|
b732402719 | ||
|
|
b3b2cb075f | ||
|
|
95542ec233 | ||
|
|
8abe634c42 | ||
|
|
5e0b5fb4d2 | ||
|
|
855cffc64d | ||
|
|
032239e430 | ||
|
|
57b56d82c4 | ||
|
|
bede2b84f3 | ||
|
|
4fbf7b41e4 | ||
|
|
ce1afc6624 | ||
|
|
b4fc988f97 | ||
|
|
9ab9f0095b | ||
|
|
9949014558 | ||
|
|
373b03d46c | ||
|
|
6117a65009 | ||
|
|
af82cd3319 | ||
|
|
bb1529e5b1 | ||
|
|
252d24b2a7 | ||
|
|
a997fd8efc | ||
|
|
88ec75a544 | ||
|
|
3d64b90d58 | ||
|
|
892af9a669 | ||
|
|
7661b85238 | ||
|
|
f487461d94 | ||
|
|
65ab204409 | ||
|
|
62302b3a0c | ||
|
|
4597151bbf | ||
|
|
9e75d9b981 | ||
|
|
65aeea9a93 | ||
|
|
0e1648cc31 | ||
|
|
3e53bd3c9b | ||
|
|
43dc65a84b | ||
|
|
2a7fa98825 | ||
|
|
71bcb7c351 | ||
|
|
cea7e03c11 | ||
|
|
38a04fbda1 | ||
|
|
4342b8842f | ||
|
|
ef9566c76c | ||
|
|
41f306f7d7 | ||
|
|
4c5d753b73 | ||
|
|
fcf77e22c5 | ||
|
|
75503d762b | ||
|
|
e0b1fa30f1 | ||
|
|
d7eed3c883 | ||
|
|
c341d216ad | ||
|
|
f6fd08f966 | ||
|
|
295b6b3d19 | ||
|
|
fe3cb9b5ba | ||
|
|
431510a729 | ||
|
|
e7a461550d | ||
|
|
d13b97d5aa | ||
|
|
96dd0118fa | ||
|
|
17684becbb | ||
|
|
4474ad664e | ||
|
|
24e4ea9c8c | ||
|
|
847dfe88d4 | ||
|
|
9f74361af1 | ||
|
|
6c79addc3c | ||
|
|
049df1ab61 | ||
|
|
007f338d2e | ||
|
|
494a9b70f6 | ||
|
|
ed8a33e00c | ||
|
|
6640058d8d | ||
|
|
c852329455 | ||
|
|
0363aefc1d | ||
|
|
e81de0c63b | ||
|
|
d5e3a57f56 | ||
|
|
99a0b7ca0b | ||
|
|
a47d5fd129 | ||
|
|
472f7921e7 | ||
|
|
8567cae2b1 | ||
|
|
a1190290db | ||
|
|
9a2e4ca4d2 | ||
|
|
eb761e41dc | ||
|
|
05e2244efb | ||
|
|
bd7112e8d5 | ||
|
|
40d9a7252e | ||
|
|
6482dd123d | ||
|
|
74789ba70c | ||
|
|
6411d4792a | ||
|
|
e367e9e14b | ||
|
|
c604859947 | ||
|
|
7f7f2a2edb | ||
|
|
92be32345a | ||
|
|
5719ec6b60 | ||
|
|
85e60ef60c | ||
|
|
5620e5a223 | ||
|
|
4fd12ce45e | ||
|
|
5c67da3eb8 | ||
|
|
14fdc1f740 | ||
|
|
1adf4db6ee | ||
|
|
3b3c7bd501 | ||
|
|
b5e5a18e4c | ||
|
|
870a99804a | ||
|
|
358bf9e11d | ||
|
|
20549e0055 | ||
|
|
003e8d8430 | ||
|
|
0e990e2ed5 | ||
|
|
2ff0ccd392 | ||
|
|
9a9eb8b8e6 | ||
|
|
bec4c919d4 | ||
|
|
1ad4f642db | ||
|
|
52d7ae3d86 | ||
|
|
a892aae620 | ||
|
|
36b8305f0f | ||
|
|
a823d4ae63 | ||
|
|
8311427506 | ||
|
|
797744d9fe | ||
|
|
4ae411584e | ||
|
|
2dccea21ae | ||
|
|
32916ad470 | ||
|
|
8b4329d129 | ||
|
|
ec60e9f5f7 | ||
|
|
edffe124fd | ||
|
|
1de11bc2d9 | ||
|
|
44a0463ab8 | ||
|
|
9a1004dfb9 | ||
|
|
607129e1c2 | ||
|
|
48c6f54903 | ||
|
|
1278c5020f | ||
|
|
11cac42df8 | ||
|
|
feb1985755 | ||
|
|
99965a1df2 | ||
|
|
4de2772ad0 | ||
|
|
3e1291d1f9 | ||
|
|
bcdb47ac74 | ||
|
|
1764705562 | ||
|
|
c8bd5ee1e4 | ||
|
|
36a80041f3 | ||
|
|
41d01c70f5 | ||
|
|
9f82c136e9 | ||
|
|
89fdb52fcc | ||
|
|
98c6d47d7f | ||
|
|
8a2a723d4b | ||
|
|
1e8aa6956f | ||
|
|
caf60d1ccd | ||
|
|
f17b6a96b2 | ||
|
|
c8f32b917f | ||
|
|
e5891a72c6 | ||
|
|
b1ebe20874 | ||
|
|
1746d7f11a | ||
|
|
90ecb842d3 | ||
|
|
be53012c48 | ||
|
|
c709930bf0 | ||
|
|
7e0df2ee13 | ||
|
|
6a446a8383 | ||
|
|
bedfbe566d | ||
|
|
629f7c424d | ||
|
|
0a0b85e66d | ||
|
|
2706011fa0 | ||
|
|
669095e7cb | ||
|
|
13f20a4e98 | ||
|
|
cab2013a97 | ||
|
|
8ed0aca797 | ||
|
|
79d6f53424 | ||
|
|
79a8c32584 | ||
|
|
0f4fe291b2 | ||
|
|
490df1e24c | ||
|
|
b26ead5577 | ||
|
|
bcf2a5aee6 | ||
|
|
98b9691e1e | ||
|
|
62306f886e | ||
|
|
03d0978a64 | ||
|
|
f3632fa13a | ||
|
|
f828e0a9f2 | ||
|
|
852b904dd4 | ||
|
|
b7738a1b78 | ||
|
|
13801d9d86 | ||
|
|
0dc7f258a3 | ||
|
|
d20b1b8114 | ||
|
|
f070896ad3 | ||
|
|
822140efe6 | ||
|
|
231aa8a9a2 | ||
|
|
5e3d162481 | ||
|
|
eab790c2cc | ||
|
|
3c04476217 | ||
|
|
e762e1231a | ||
|
|
44ae9967f1 | ||
|
|
fe4f23fdb0 | ||
|
|
c213397550 | ||
|
|
951959a00b | ||
|
|
9d7a6414b3 | ||
|
|
18b73f7665 | ||
|
|
cccd7238cd | ||
|
|
43eff5399c | ||
|
|
65090d32e8 | ||
|
|
fb692f3766 | ||
|
|
6ae099fcb1 | ||
|
|
80f5f100f1 | ||
|
|
7e2dd72fc1 | ||
|
|
b3a11dec30 | ||
|
|
e8cece4445 | ||
|
|
0e10bc235f | ||
|
|
883ad223c2 | ||
|
|
9dee72820b | ||
|
|
a3ba5e7a60 | ||
|
|
d27d759c97 | ||
|
|
fe46062be0 | ||
|
|
a0eae9a7cc | ||
|
|
df0df85d9e | ||
|
|
5541c8251c | ||
|
|
6fc8181272 | ||
|
|
487f1f46f3 | ||
|
|
0776e89d26 | ||
|
|
ccd8355946 | ||
|
|
942780e6d1 | ||
|
|
019066c4dc | ||
|
|
1f16053042 | ||
|
|
bafa669bb5 | ||
|
|
5595ea0888 | ||
|
|
3aee0feb39 | ||
|
|
5d352bbb53 | ||
|
|
6c46439eb6 | ||
|
|
648501b7c0 | ||
|
|
e0288ce4d5 | ||
|
|
c6cc631d8c | ||
|
|
3381eb6d70 | ||
|
|
53351fde28 | ||
|
|
7922225b26 | ||
|
|
d27976150c | ||
|
|
8b73c7ef02 | ||
|
|
69b1e62c82 | ||
|
|
8970b14e31 | ||
|
|
861546236f | ||
|
|
f7389bc944 | ||
|
|
c85d96f940 | ||
|
|
4ab93d02f4 | ||
|
|
0feb9b1995 | ||
|
|
e95054d329 | ||
|
|
993eeda08b | ||
|
|
5655fe52b0 | ||
|
|
daec9237f0 | ||
|
|
a866a6d2e5 | ||
|
|
43d92d14ed | ||
|
|
0450aa45c3 | ||
|
|
196c879c27 | ||
|
|
9aae4dc2ca | ||
|
|
6735e257b3 | ||
|
|
4ce0720a43 | ||
|
|
c59d78270b | ||
|
|
0c422687a5 | ||
|
|
d0f7127807 | ||
|
|
c7432d554f | ||
|
|
bd181de2c9 | ||
|
|
e95c87dddf | ||
|
|
0b88905e91 | ||
|
|
e3d6a759a8 | ||
|
|
b5c7bed4e9 | ||
|
|
29e989fae9 | ||
|
|
f6dfa4f81f | ||
|
|
9e6e162b03 | ||
|
|
816ef4ddc6 | ||
|
|
731a367e6f | ||
|
|
76702e6433 | ||
|
|
ee97598070 | ||
|
|
74b42f3d63 | ||
|
|
0c86a76968 | ||
|
|
f29fad4078 | ||
|
|
a9080a6d12 | ||
|
|
22252b8880 | ||
|
|
3c8617aab2 | ||
|
|
f29b28e838 | ||
|
|
9860f56bf7 | ||
|
|
10821d2317 | ||
|
|
d7c321adea | ||
|
|
77d2ae62a3 | ||
|
|
a511fdac35 | ||
|
|
934bec45b5 | ||
|
|
0660dd55d4 | ||
|
|
57707ff56e | ||
|
|
fe6f41d1e8 | ||
|
|
b60c4c4170 | ||
|
|
8099c34791 | ||
|
|
a319e29f93 | ||
|
|
80a809545c | ||
|
|
4cd86fc47f | ||
|
|
bef91a4ba1 | ||
|
|
ce34f879d6 | ||
|
|
2c6921688f | ||
|
|
e7d307a306 | ||
|
|
227a91e2f3 | ||
|
|
2fc13b59e6 | ||
|
|
7dd0f80590 | ||
|
|
af8182626a | ||
|
|
50d51b7264 | ||
|
|
6fa3a42362 | ||
|
|
393ff77eaf | ||
|
|
562c2e4416 | ||
|
|
fecefb6a6e | ||
|
|
704955248b | ||
|
|
5899f93a0a | ||
|
|
0e4c6d5faa | ||
|
|
15b8fc95ff | ||
|
|
4307856790 | ||
|
|
acfe37f0c0 | ||
|
|
8db3616687 | ||
|
|
5be5c34fd6 | ||
|
|
bddb4d14b4 | ||
|
|
c0fb178193 | ||
|
|
8a5c2f4b8a | ||
|
|
79887c227b | ||
|
|
44b1bfd43a | ||
|
|
1d7374e3ad | ||
|
|
ddfa5d5d81 | ||
|
|
7f9d59213f | ||
|
|
9cf77d2ab8 | ||
|
|
d36585f21d | ||
|
|
742de9b6b4 | ||
|
|
edaeec1ff2 | ||
|
|
2cf83a2fcf | ||
|
|
d6dbe38e17 | ||
|
|
813a96c469 | ||
|
|
fbe5f54b7f | ||
|
|
b1d70789e7 | ||
|
|
39b949517a | ||
|
|
58f8636969 | ||
|
|
827db06b38 | ||
|
|
08b60b62b6 | ||
|
|
48bf1d542f | ||
|
|
50e99bde43 | ||
|
|
31d9600253 | ||
|
|
1f47d2b50d | ||
|
|
e3bdcc595a | ||
|
|
77ca6380f4 | ||
|
|
f08f0e630a | ||
|
|
b306064061 | ||
|
|
ab09a74bf2 | ||
|
|
45e1331ce8 | ||
|
|
4fa346bd8b | ||
|
|
547112c4a1 | ||
|
|
688ee6cb1c | ||
|
|
1845c8da63 | ||
|
|
1374648d0c | ||
|
|
a06b5680c0 | ||
|
|
425abcff73 | ||
|
|
502cec92f3 | ||
|
|
18a875e842 | ||
|
|
d272730ced | ||
|
|
6178c56838 | ||
|
|
e38d86015f | ||
|
|
463a5fc4af | ||
|
|
a266189b38 | ||
|
|
eddc73850f | ||
|
|
8297204c9c | ||
|
|
d4b3c57cc9 | ||
|
|
50b67ed0cc | ||
|
|
4cb5e89fe9 | ||
|
|
ba98477576 | ||
|
|
d01227fcde | ||
|
|
2ea65fda25 | ||
|
|
d36eac4ceb | ||
|
|
1d750e4e30 | ||
|
|
4c0aef9bca | ||
|
|
bd3a0d33e0 | ||
|
|
e75d293787 | ||
|
|
eedcebe11e | ||
|
|
3085ae8569 | ||
|
|
ad5c4b2d0e | ||
|
|
d77674a283 | ||
|
|
3290afc7b7 | ||
|
|
29a08af257 | ||
|
|
c6f7a2526b | ||
|
|
c81726ab2c | ||
|
|
d5c91d4fff | ||
|
|
1966e44734 | ||
|
|
713ae2dc49 | ||
|
|
3e5837bde2 | ||
|
|
d40c178985 | ||
|
|
00d0a5297f | ||
|
|
d01a6e5432 | ||
|
|
1f048876d0 | ||
|
|
386eb58767 | ||
|
|
864853f5dc | ||
|
|
a822b095ee | ||
|
|
ff548cc7a2 | ||
|
|
f808eb7ecb | ||
|
|
9beecf1a49 | ||
|
|
0a820394bb | ||
|
|
198a731f9e | ||
|
|
2917e32498 | ||
|
|
b7ed58bac1 | ||
|
|
d797b8a295 | ||
|
|
510af86d25 |
No files matched your search
@@ -0,0 +1,23 @@
|
||||
# .ansible-lint
|
||||
---
|
||||
skip_list:
|
||||
- command-instead-of-shell
|
||||
- key-order[task]
|
||||
- yaml[line-length]
|
||||
- yaml[colons]
|
||||
- jinja[spacing]
|
||||
- name[missing]
|
||||
- yaml[comments]
|
||||
- yaml[commas]
|
||||
- var-naming[pattern]
|
||||
- yaml[braces]
|
||||
|
||||
warn_list:
|
||||
- literal-compare
|
||||
- ignore-errors
|
||||
- no-changed-when
|
||||
- yaml[indentation]
|
||||
- risky-file-permissions
|
||||
- risky-shell-pipe
|
||||
- fqcn[action-core]
|
||||
- fqcn[action]
|
||||
@@ -2,17 +2,16 @@
|
||||
# Facts that must be gathered after running tasks.
|
||||
|
||||
- name: General | Facts | Gather | Locate bash
|
||||
shell: which bash
|
||||
ansible.builtin.shell: which bash
|
||||
register: bash_exec
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Facts | Gather | Locate ansible-pull
|
||||
shell: which ansible-pull
|
||||
ansible.builtin.shell: which ansible-pull
|
||||
register: ansible_pull_exec
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Facts | Gather | Locate zsh
|
||||
shell: which zsh
|
||||
ansible.builtin.shell: which zsh
|
||||
register: zsh_exec
|
||||
ignore_errors: yes
|
||||
|
||||
ignore_errors: true
|
||||
+39
-22
@@ -3,7 +3,7 @@
|
||||
# This file is for ALL systems and should not include UI components.
|
||||
|
||||
- name: General | Facts | Package | Shared Defaults
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
sshfs: sshfs
|
||||
tar: tar
|
||||
iftop: iftop
|
||||
@@ -22,15 +22,17 @@
|
||||
alsa: alsa-utils
|
||||
stress: stress
|
||||
jq: jq
|
||||
btop: btop
|
||||
xkb: x11-xkb-utils
|
||||
|
||||
- name: General | Facts | Package | Parrot OS Fixes
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
ansible_pkg_mgr: "apt"
|
||||
ansible_python_interpreter: "/usr/bin/python3"
|
||||
when: ansible_distribution == "Parrot OS"
|
||||
|
||||
- name: General | Facts | Package | apt
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
locate: locate
|
||||
opensshd: openssh-server
|
||||
microcode_amd: amd64-microcode
|
||||
@@ -41,7 +43,7 @@
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: General | Facts | Package | pacman
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
locate: mlocate
|
||||
opensshd: openssh
|
||||
microcode_amd: linux-firmware
|
||||
@@ -50,10 +52,11 @@
|
||||
encfs: encfs
|
||||
dig: bind
|
||||
base_devel: base-devel
|
||||
xkb: xorg-setxkbmap
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: General | Facts | Package | FreeBSD
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
sshfs: fusefs-sshfs
|
||||
locate: htop # Placeholder to prevent errors, locate built into FreeBSD.
|
||||
opensshd: htop # sshd comes installed on FreeBSD
|
||||
@@ -65,12 +68,12 @@
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
- name: General | Facts | Package | dnf (Fixes)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
ansible_pkg_mgr: dnf
|
||||
when: ansible_pkg_mgr in ("dnf5")
|
||||
|
||||
- name: General | Facts | Package | dnf
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
sshfs: fuse-sshfs
|
||||
locate: plocate
|
||||
opensshd: openssh
|
||||
@@ -83,7 +86,7 @@
|
||||
when: ansible_pkg_mgr == "dnf"
|
||||
|
||||
- name: General | Facts | Package | zypper
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
locate: plocate
|
||||
opensshd: openssh
|
||||
microcode_amd: ucode-amd
|
||||
@@ -95,20 +98,24 @@
|
||||
|
||||
|
||||
- name: General | Facts | Package | Update Command | Helpers
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
update_accept_var: '$accept'
|
||||
nix_days: 14
|
||||
ansible_distribution_file: "{{ prov_dir }}/ansible_distribution.txt"
|
||||
ansible_pkg_mgr_file: "{{ prov_dir }}/ansible_pkg_mgr.txt"
|
||||
|
||||
- name: General | Facts | Package | Update Command | Store Variables
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
{{ item }}
|
||||
loop:
|
||||
- "echo '{{ ansible_distribution }}' > {{ ansible_distribution_file }}"
|
||||
- "echo '{{ ansible_pkg_mgr }}' > {{ ansible_pkg_mgr_file }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: General | Facts | Package | Update Command
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
update_package_manager: |
|
||||
|
||||
distribution="`cat {{ ansible_distribution_file }}`"
|
||||
@@ -159,13 +166,13 @@
|
||||
auto_accept="--noconfirm"
|
||||
fi
|
||||
|
||||
sudo pacman -Syu $auto_accept ||
|
||||
sudo pacman -Syu $auto_accept --overwrite '/usr/lib/node_modules/*' ||
|
||||
return 1
|
||||
echo -e "\n"
|
||||
|
||||
if [[ "$LOGNAME" != "root" ]]; then
|
||||
echo "*** AUR (yay) ***"
|
||||
yay -Syu $auto_accept || return 2
|
||||
yay --sudoloop -Syu $auto_accept || return 2
|
||||
else
|
||||
echo "*** User is root, skipping AUR (yay) ***"
|
||||
fi
|
||||
@@ -261,20 +268,27 @@
|
||||
;;
|
||||
esac
|
||||
update_npm: |
|
||||
if [[ `which npm` ]]; then
|
||||
## Let's let the distro package managers handle this, otherwise may end up
|
||||
## breaking dependencies or causing other system weirdness. No thanks! :)
|
||||
if [[ `which npm` && 1 == 0 ]]; then
|
||||
echo "*** NPM ***" &&
|
||||
sudo npm update -g
|
||||
echo -e "\n"
|
||||
else
|
||||
echo -e "*** Skipping NPM ***\n\n"
|
||||
fi
|
||||
|
||||
# Flatpaks
|
||||
- name: General | Facts | Package | Update Command | Flatpak | Check
|
||||
shell: which flatpak
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
which flatpak
|
||||
register: flatpak_exec
|
||||
ignore_errors: yes
|
||||
changed_when: flatpak_exec.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Facts | Package | Update Command | Flatpak | Exists
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
update_flatpak: |
|
||||
echo "*** Flatpak ***"
|
||||
[[ -n "$accept" ]] && sudo flatpak repair
|
||||
@@ -286,19 +300,22 @@
|
||||
and not flatpak_exec.failed
|
||||
|
||||
- name: General | Facts | Package | Update Command | Flatpak | Missing
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
update_flatpak: |
|
||||
echo "*** Flatpak Not Installed ***"
|
||||
when: update_flatpak is not defined
|
||||
|
||||
# Firmware
|
||||
- name: General | Facts | Package | Update Command | Firmware | Check
|
||||
shell: which fwupdmgr
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
which fwupdmgr
|
||||
register: fwupdmgr_exec
|
||||
ignore_errors: yes
|
||||
changed_when: fwupdmgr_exec.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Facts | Package | Update Command | Firmware | Exists
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
update_firmware: |
|
||||
echo "*** Firmware ***"
|
||||
sudo fwupdmgr refresh --force &&
|
||||
@@ -310,7 +327,7 @@
|
||||
and not fwupdmgr_exec.failed
|
||||
|
||||
- name: General | Facts | Package | Update Command | Firmware | Missing
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
update_firmware: |
|
||||
echo "*** Firmware Updater (fwupdmgr) Not Installed ***"
|
||||
when: update_firmware is not defined
|
||||
@@ -2,7 +2,7 @@
|
||||
# Definitions for service management.
|
||||
|
||||
- name: General | Facts | Service | All
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
cups: cups
|
||||
cups_pattern: cupsd
|
||||
cups_browse: cups-browsed
|
||||
@@ -18,19 +18,19 @@
|
||||
bluetooth_pattern: bluetooth
|
||||
|
||||
- name: General | Facts | Service | Arch Linux
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
crond: cronie
|
||||
crond_pattern: cronie
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: General | Facts | Service | Fedora
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
crond: crond
|
||||
crond_pattern: crond
|
||||
when: ansible_distribution in ("Fedora")
|
||||
|
||||
- name: General | Facts | Service | Ubuntu Linux
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
sshd: ssh
|
||||
sshd_pattern: ssh
|
||||
when: ansible_distribution == "Ubuntu"
|
||||
@@ -2,7 +2,7 @@
|
||||
# Define file, folder, and other facts per OS.
|
||||
|
||||
- name: General | Facts | System | Global 01
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
global_src: /usr/local/src
|
||||
global_bin: /usr/local/bin
|
||||
x_desktops: /usr/share/xsessions
|
||||
@@ -11,22 +11,51 @@
|
||||
notify_log: "ansible.notify.log"
|
||||
runit_script_dir: /etc/runit/sv
|
||||
runit_service_dir: /etc/runit/runsvdir/default
|
||||
runit_service_script: run
|
||||
runit_log_dir: log
|
||||
global_log: /var/log
|
||||
global_log_config: config
|
||||
runit_finish_sleep: |
|
||||
#!/bin/sh
|
||||
exec 2>&1
|
||||
# $1 is the exit code, $2 is the exit status byte (signal number if killed)
|
||||
echo "FINISH: Service returned with exit code: $1 and status: $2"
|
||||
|
||||
sleep_long=10
|
||||
sleep_short=1
|
||||
if [[ "$1" != 0 ]]; then
|
||||
echo "FINISH: Sleeping for $sleep_long seconds due to error..."
|
||||
sleep $sleep_long
|
||||
else
|
||||
echo "FINISH: Sleeping for $sleep_short seconds."
|
||||
sleep $sleep_short
|
||||
fi
|
||||
runit_log_config_1mb: |
|
||||
s1000000 # rotate at 1 MB
|
||||
n2 # keep 2 old files
|
||||
runit_log_config_10mb: |
|
||||
s10000000 # rotate at 10 MB
|
||||
n2 # keep 2 old files
|
||||
runit_log_config_100mb: |
|
||||
s100000000 # rotate at 100 MB
|
||||
n2 # keep 2 old files
|
||||
|
||||
- name: General | Facts | System | Global 02
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
shared_rc_install_dir: "{{ global_src }}/env-shared"
|
||||
notify_log_file: "/var/log/{{ notify_log }}"
|
||||
notify_log_file_wip: "/tmp/{{ notify_log }}.wip"
|
||||
lynis_install_dir: "{{ global_src }}/lynis"
|
||||
dwm_install_dir: "{{ global_src }}/dwm"
|
||||
st_install_dir: "{{ global_src }}/st"
|
||||
runit_log_script: "{{ runit_service_script }}"
|
||||
|
||||
- name: General | Facts | System | Global 03
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
shared_rc_bin: "{{ shared_rc_install_dir }}/bin-shared"
|
||||
|
||||
- name: General | Facts | System | Linux
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
rc_conf: /dev/null
|
||||
sudoers_install_dir: /etc/sudoers.d/
|
||||
sudoers_config: /etc/sudoers
|
||||
@@ -34,24 +63,24 @@
|
||||
when: ansible_system == "Linux"
|
||||
|
||||
- name: General | Facts | System | FreeBSD
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
rc_conf: /etc/rc.conf
|
||||
sudoers_install_dir: /usr/local/etc/sudoers.d/
|
||||
shutdown_command: sudo shutdown -p now
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
- name: General | Facts | System | Report File Names
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
lynis_report: "lynis_hardness_check.txt"
|
||||
nmap_report: "nmap_port_check.txt"
|
||||
|
||||
- name: General | Facts | System | Ansible Branch
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
branch: main
|
||||
when: branch is not defined
|
||||
|
||||
- name: General | Facts | System | runit (Devuan)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
runit_script_dir: /etc/sv
|
||||
runit_service_dir: /etc/service
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
@@ -2,12 +2,12 @@
|
||||
# Define users and groups per OS type.
|
||||
|
||||
- name: General | Facts | User | Linux
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
root_group: root
|
||||
when: ansible_system == "Linux"
|
||||
|
||||
|
||||
- name: General | Facts | User | FreeBSD
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
root_group: wheel
|
||||
when: ansible_system == "FreeBSD"
|
||||
@@ -4,10 +4,10 @@
|
||||
## Load Config File ##
|
||||
|
||||
- name: Miner | Facts | Config File | Download
|
||||
shell: "scp {{ file_server }}:{{ config_file_remote }} {{ config_file_local }}; chmod 700 {{ config_file_local }}"
|
||||
ansible.builtin.shell: "scp {{ file_server }}:{{ config_file_remote }} {{ config_file_local }}; chmod 700 {{ config_file_local }}"
|
||||
|
||||
- name: Miner | Facts | Config File | Load Wallets
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
wallet_xmr: "{{ lookup('ini', 'xmr section={{config_section_wallet}} file={{config_file_local}}') }}"
|
||||
wallet_eth: "{{ lookup('ini', 'eth section={{config_section_wallet}} file={{config_file_local}}') }}"
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
## Verify ##
|
||||
|
||||
- name: Miner | Facts | Config File | DEBUG
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
var: "{{ item }}"
|
||||
loop:
|
||||
loop:
|
||||
- wallet_xmr
|
||||
- wallet_eth
|
||||
|
||||
@@ -25,4 +25,4 @@
|
||||
## Clean Up ##
|
||||
|
||||
- name: Miner | Facts | Config File | Delete
|
||||
shell: "mv {{ config_file_local }} ~/TRASH/"
|
||||
ansible.builtin.shell: "mv {{ config_file_local }} ~/TRASH/"
|
||||
@@ -2,7 +2,7 @@
|
||||
# Create arrays of pools per coin.
|
||||
|
||||
- name: Miner | Facts | Pools
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
nanopool_xmr:
|
||||
- { "priority": 1, "name": "xmr-us-east1.nanopool.org:14433" }
|
||||
- { "priority": 2, "name": "xmr-us-west1.nanopool.org:14433" }
|
||||
@@ -34,7 +34,7 @@
|
||||
# CPU #
|
||||
|
||||
- name: Miner | Facts | Pools | Set GPU to Nanopool Eth
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
cpu_pool: "{{ nanopool_xmr }}"
|
||||
when: nanominer_cpu == "xmr" and nanominer_cpu_pool == "nanopool"
|
||||
|
||||
@@ -42,26 +42,26 @@
|
||||
# GPU #
|
||||
|
||||
- name: Miner | Facts | Pools | Set GPU to Nanopool Eth
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
gpu_pool: "{{ nanopool_eth }}"
|
||||
when: nanominer_gpu == "eth" and nanominer_gpu_pool == "nanopool"
|
||||
|
||||
- name: Miner | Facts | Pools | Set GPU to Etherpool Eth
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
gpu_pool: "{{ ethermine_eth }}"
|
||||
when: nanominer_gpu == "eth" and nanominer_gpu_pool == "etherpool"
|
||||
|
||||
- name: Miner | Facts | Pools | Set GPU to F2Pool Eth
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
gpu_pool: "{{ f2pool_eth }}"
|
||||
when: nanominer_gpu == "eth" and nanominer_gpu_pool == "f2pool"
|
||||
|
||||
|
||||
|
||||
|
||||
## Validate ##
|
||||
|
||||
- name: Miner | Facts | Pools | DEBUG
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
var: "{{ item }}"
|
||||
loop:
|
||||
- cpu_pool
|
||||
|
||||
@@ -4,21 +4,21 @@
|
||||
## Global ##
|
||||
|
||||
- name: Miner | Facts | System | Global 1
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
file_server: '{{ user }}@leet'
|
||||
check_alive_start: "[[ `ps -ef | grep -v 'grep' | grep -v '/bin/sh -c' | grep -v $$ | grep -c '"
|
||||
check_alive_end: "'` == '0' ]] &&"
|
||||
combined_log_file: "{{ user_mfn.home }}/log.txt"
|
||||
|
||||
- name: Miner | Facts | System | Global 2
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
use_combined_log_file: ">> {{ combined_log_file }} 2>&1"
|
||||
|
||||
|
||||
## Config File ##
|
||||
|
||||
- name: Miner | Facts | System | My Config File
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
config_file_remote: "InstallFiles/Miners/miner.ini"
|
||||
config_file_local: "{{ user_mfn.home }}/miner.ini"
|
||||
config_section_wallet: wallet
|
||||
@@ -31,20 +31,20 @@
|
||||
## Nanominer ##
|
||||
|
||||
- name: Miner | Facts | System | nanominer 1
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
nanominer_home: "{{ user_mfn.home }}/nanominer"
|
||||
nanominer_version: "3.4.3" # Download link: https://github.com/nanopool/nanominer/releases
|
||||
nanominer_script: "{{ user_mfn.home }}/nanominer.sh"
|
||||
|
||||
- name: Miner | Facts | System | nanominer 2
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
nanominer_bin: "{{ nanominer_home }}/nanominer-linux-{{ nanominer_version }}"
|
||||
nanominer_tar_remote: "InstallFiles/Miners/nanominer/*{{ nanominer_version }}*.tar.gz"
|
||||
nanominer_config: "{{ nanominer_home }}/config.ini"
|
||||
nanominer_logs: "{{ nanominer_home}}/logs"
|
||||
|
||||
- name: Miner | Facts | System | nanominer 3
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
nanominer_tar_local: "{{ nanominer_bin }}.tar.gz"
|
||||
nanominer_exec: "{{ nanominer_bin }}/nanominer"
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
## Miner Array ##
|
||||
|
||||
- name: Miner | Facts | System | Miner Array
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
miners:
|
||||
- { "name": "xmr_stak_cpu", "enabled": '{{ (xmr_stak_cpu != false) }}', "command": "{{ user_mfn.home }}/xmr_stak_cpu.sh {{ use_combined_log_file }}" }
|
||||
- { "name": "ethminer", "enabled": '{{ (ethminer != false) }}', "command": "{{ user_mfn.home }}/ethminer.sh {{ use_combined_log_file }}" }
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
# System related variables.
|
||||
|
||||
- name: Facts | Server | System | FreeBSD
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
ansible_python_interpreter: "/usr/local/bin/python3.8"
|
||||
when: ansible_system == "FreeBSD"
|
||||
@@ -3,14 +3,14 @@
|
||||
# This is only for Workstation devices with UIs.
|
||||
|
||||
- name: Workstation | Facts | Packages | Parrot OS Fixes
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
ansible_pkg_mgr: "apt"
|
||||
ansible_python_interpreter: "/usr/bin/python3"
|
||||
when: ansible_distribution == "Parrot OS"
|
||||
|
||||
|
||||
- name: Workstation | Facts | Package | Consistent
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
firefox: firefox
|
||||
firefox_esr: firefox-esr
|
||||
thunderbird: thunderbird
|
||||
@@ -58,10 +58,13 @@
|
||||
transmission_qt: transmission-qt
|
||||
libreoffice: libreoffice
|
||||
strawberry: strawberry
|
||||
|
||||
dict_en: hunspell-en_us
|
||||
dict_es: hunspell-es_any
|
||||
xset: xorg-xset
|
||||
xlock: xss-lock
|
||||
|
||||
- name: Workstation | Facts | Package | apt (All Distros)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
xz: xz-utils
|
||||
mesa: libglu1-mesa
|
||||
mesa_utils: libglu1-mesa
|
||||
@@ -78,48 +81,49 @@
|
||||
ncurses: libncurses-dev
|
||||
android_udev: android-udev-rules
|
||||
vlc_plugins: libavcodec-extra
|
||||
xset: x11-server-utils
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: Workstation | Facts | Package | Pop_OS!
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_distro: true
|
||||
firefox_esr: firefox
|
||||
when: ansible_distribution == "Pop!_OS"
|
||||
|
||||
- name: Workstation | Facts | Package | Ubuntu
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_distro: true
|
||||
firefox_esr: firefox
|
||||
dmenu: suckless-tools
|
||||
when: ansible_distribution == "Ubuntu"
|
||||
|
||||
- name: Workstation | Facts | Package | Debian & Devuan
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_distro: true
|
||||
dmenu: suckless-tools
|
||||
firefox: firefox-esr
|
||||
when: ansible_distribution in ("Debian", "Devuan")
|
||||
|
||||
- name: Workstation | Facts | Package | Mint
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_distro: true
|
||||
firefox_esr: firefox
|
||||
when: ansible_distribution == "Linux Mint"
|
||||
|
||||
- name: Workstation | Facts | Package | Parrot OS
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_distro: true
|
||||
when: ansible_distribution == "Parrot OS"
|
||||
|
||||
- name: Workstation | Facts | Package | Apt w/o LibVirt
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
gnome_boxes: htop
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
and ansible_service_mgr not in ("systemd", "sysvinit")
|
||||
|
||||
|
||||
- name: Workstation | Facts | Package | pacman (All Distros)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
macbook_wifi_driver: broadcom-wl-dkms
|
||||
android_jdk: jdk-openjdk
|
||||
android_fastboot: android-tools
|
||||
@@ -128,7 +132,7 @@
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: Workstation | Facts | Package | Arch / Manjaro / Artix
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_distro: true
|
||||
psutil: python-psutil
|
||||
#appimagelauncher: appimagelauncher # No longer in the repos, AUR.
|
||||
@@ -139,7 +143,7 @@
|
||||
|
||||
|
||||
- name: Workstation | Facts | Package | FreeBSD
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_distro: false
|
||||
psutil: py38-psutil
|
||||
ansible_python_interpreter: "/usr/local/bin/python3.8"
|
||||
@@ -149,7 +153,7 @@
|
||||
|
||||
|
||||
- name: Workstation | Facts | Package | Fedora
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_distro: true
|
||||
firefox_esr: firefox
|
||||
font_awesome: python3-XStatic-Font-Awesome
|
||||
@@ -159,7 +163,7 @@
|
||||
|
||||
|
||||
- name: Workstation | Facts | Package | openSUSE
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_distro: true
|
||||
firefox_esr: firefox-esr-branding-openSUSE
|
||||
font_awesome: fontawesome-fonts
|
||||
@@ -168,6 +172,6 @@
|
||||
|
||||
|
||||
- name: Workstation | Facts | Package | NixOS
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_distro: false
|
||||
when: ansible_distribution == "NixOS"
|
||||
@@ -69,7 +69,7 @@ sleep 5
|
||||
|
||||
echo "*** Creating backup at '$BACKUP2' ***"
|
||||
sudo zip -rv "$BACKUP2" \
|
||||
/root /home /srv/sftp \
|
||||
/root /home \
|
||||
-x "*/.gradle/" -x "*/app/build/*"
|
||||
status="$?"
|
||||
|
||||
|
||||
Executable
+94
@@ -0,0 +1,94 @@
|
||||
#!/bin/sh -e
|
||||
# 2026-10-10 Hyperling
|
||||
# Stop a system from going into swap due to LLMs.
|
||||
|
||||
### Tuning ###
|
||||
|
||||
typeset -i sleep=10 full_pct=98 high_pct=90
|
||||
|
||||
### Functions ###
|
||||
|
||||
restart_service() {
|
||||
if [ -z $1 ]; then
|
||||
echo "ERROR: Service name must be passed to restart_service()."
|
||||
return 1
|
||||
fi
|
||||
sv restart $1
|
||||
status=$?
|
||||
if [[ $status != 0 ]]; then
|
||||
echo "$1 failed to restart, returned $status."
|
||||
return $status
|
||||
fi
|
||||
}
|
||||
|
||||
# While we could loop over `ollama ps` and stop them, this ensures that the UIs
|
||||
# do not sit around waiting for responses from the dead LLMs. It bring them up
|
||||
# in a fresh state so that work can continue from a more clean slate.
|
||||
restart_llms() {
|
||||
restart_service ollama || killall ollama
|
||||
#restart_service zeroclaw
|
||||
#restart_service open-webui
|
||||
#restart_service qwen-code
|
||||
}
|
||||
|
||||
### Main ###
|
||||
|
||||
typeset -i {total,used}_{ram,swap}=0 \
|
||||
used_{ram,swap}_pct=0 \
|
||||
last_{ram,swap}_pct=100 \
|
||||
count=0
|
||||
|
||||
while [[ true ]]; do
|
||||
|
||||
count=$(expr $count + 1 )
|
||||
echo "$(date +'%Y-%m-%d @ %H:%M:%S') - Loop $count"
|
||||
|
||||
# RAM #
|
||||
|
||||
total_ram=$(free | awk '/^Mem:/ {print $2}')
|
||||
used_ram=$(free | awk '/^Mem:/ {print $3}')
|
||||
used_ram_pct=$( \
|
||||
awk -v used="$used_ram" -v total="$total_ram" \
|
||||
'BEGIN {printf "%d",(used/total)*100}' \
|
||||
)
|
||||
|
||||
echo "Current RAM usage is $used_ram_pct%, was $last_ram_pct% last loop."
|
||||
|
||||
# Swap #
|
||||
|
||||
total_swap=$(free | awk '/^Swap:/ {print $2}')
|
||||
used_swap=$(free | awk '/^Swap:/ {print $3}')
|
||||
used_swap_pct=$( \
|
||||
awk -v used="$used_swap" -v total="$total_swap" \
|
||||
'BEGIN {printf "%d",(used/total)*100}' \
|
||||
)
|
||||
|
||||
echo "Current swap usage is $used_swap_pct%, was $last_swap_pct% last loop."
|
||||
|
||||
# If RAM is full and swap is growing then restart LLM services.
|
||||
if [ $used_ram_pct -gt $full_pct ] &&
|
||||
[ $used_swap_pct -gt $last_swap_pct ]
|
||||
then
|
||||
echo "WARNING: RAM full and swap is growing. Restarting LLMs."
|
||||
restart_llms
|
||||
continue
|
||||
fi
|
||||
|
||||
# If both are high then restart LLM services.
|
||||
if [ $used_ram_pct -ge $high_pct ] &&
|
||||
[ $used_swap_pct -ge $high_pct ]
|
||||
then
|
||||
echo "WARNING: RAM and swap both high. Restarting LLMs."
|
||||
restart_llms
|
||||
continue
|
||||
fi
|
||||
|
||||
# Finish #
|
||||
|
||||
echo -e "Check finished, sleeping for ${sleep}...\n"
|
||||
|
||||
last_ram_pct=$used_ram_pct
|
||||
last_swap_pct=$used_swap_pct
|
||||
|
||||
sleep $sleep
|
||||
done
|
||||
+103
-58
@@ -9,8 +9,8 @@
|
||||
#
|
||||
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
||||
|
||||
set $FIREFOX "sh -c '(which firefox && firefox) || (which firefox-esr && firefox-esr) || (which firefox-flatpak && firefox-flatpak)'"
|
||||
set $TRANSMISSION "sh -c '(which transmission && transmission) || (which transmission-qt && transmission-qt) || (which transmission-gtk && transmission-gtk) || (which transmission-flatpak && transmission-flatpak)'"
|
||||
set $FIREFOX "sh -c '(firefox || firefox-esr || firefox-flatpak)'"
|
||||
set $TRANSMISSION "sh -c '(transmission || transmission-qt || transmission-gtk || transmission-flatpak)'"
|
||||
|
||||
# Use the `xev` command to see the name and code of a keyboard key.
|
||||
|
||||
@@ -27,28 +27,6 @@ font pango:monospace 8
|
||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
||||
#font pango:DejaVu Sans Mono 8
|
||||
|
||||
# Start XDG autostart .desktop files using dex. See also
|
||||
# https://wiki.archlinux.org/index.php/XDG_Autostart
|
||||
exec --no-startup-id dex --autostart --environment i3
|
||||
|
||||
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
|
||||
# they are included here as an example. Modify as you see fit.
|
||||
|
||||
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
|
||||
# screen before suspend. Use loginctl lock-session to lock your screen.
|
||||
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
|
||||
|
||||
# NetworkManager is the most popular way to manage wireless networks on Linux,
|
||||
# and nm-applet is a desktop environment-independent system tray GUI for it.
|
||||
exec --no-startup-id nm-applet
|
||||
|
||||
# Use pactl to adjust volume in PulseAudio.
|
||||
set $refresh_i3status killall -SIGUSR1 i3status
|
||||
#bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
|
||||
#bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
||||
#bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||
#bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
||||
|
||||
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||
floating_modifier $mod
|
||||
|
||||
@@ -144,18 +122,23 @@ bindsym $mod+c exec codium-flatpak
|
||||
# light requires sudo privileges unless video group and udev are configured.
|
||||
|
||||
set $b_time 3000
|
||||
set $b_micro 5
|
||||
set $b_small 10
|
||||
set $b_large 20
|
||||
|
||||
# Use the bracket keys to change the brightness.
|
||||
bindsym $mod+bracketleft exec --no-startup-id "light -U $b_small && notify-send -t $b_time 'Brightness - ' $(light -G)"
|
||||
bindsym $mod+bracketright exec --no-startup-id "light -A $b_small && notify-send -t $b_time 'Brightness + ' $(light -G)"
|
||||
bindsym $ctrl+bracketleft exec --no-startup-id "light -U $b_micro && notify-send -t $b_time 'Brightness - ' $(light -G)"
|
||||
bindsym $ctrl+bracketright exec --no-startup-id "light -A $b_micro && notify-send -t $b_time 'Brightness + ' $(light -G)"
|
||||
bindsym $mod+bracketleft exec --no-startup-id "light -U $b_small && notify-send -t $b_time 'Brightness -- ' $(light -G)"
|
||||
bindsym $mod+bracketright exec --no-startup-id "light -A $b_small && notify-send -t $b_time 'Brightness ++ ' $(light -G)"
|
||||
bindsym $shift+$mod+bracketleft exec --no-startup-id "light -U $b_large && notify-send -t $b_time 'Brightness ---' $(light -G)"
|
||||
bindsym $shift+$mod+bracketright exec --no-startup-id "light -A $b_large && notify-send -t $b_time 'Brightness +++' $(light -G)"
|
||||
|
||||
# Also get the actual brightness keys to work!!
|
||||
bindsym XF86MonBrightnessUp exec --no-startup-id "light -A $b_small && notify-send -t $b_time 'Brightness + ' $(light -G)"
|
||||
bindsym XF86MonBrightnessDown exec --no-startup-id "light -U $b_small && notify-send -t $b_time 'Brightness - ' $(light -G)"
|
||||
bindsym $ctrl+XF86MonBrightnessUp exec --no-startup-id "light -A $b_micro && notify-send -t $b_time 'Brightness + ' $(light -G)"
|
||||
bindsym $ctrl+XF86MonBrightnessDown exec --no-startup-id "light -U $b_micro && notify-send -t $b_time 'Brightness - ' $(light -G)"
|
||||
bindsym XF86MonBrightnessUp exec --no-startup-id "light -A $b_small && notify-send -t $b_time 'Brightness ++ ' $(light -G)"
|
||||
bindsym XF86MonBrightnessDown exec --no-startup-id "light -U $b_small && notify-send -t $b_time 'Brightness -- ' $(light -G)"
|
||||
bindsym $shift+XF86MonBrightnessUp exec --no-startup-id "light -A $b_large && notify-send -t $b_time 'Brightness +++' $(light -G)"
|
||||
bindsym $shift+XF86MonBrightnessDown exec --no-startup-id "light -U $b_large && notify-send -t $b_time 'Brightness ---' $(light -G)"
|
||||
|
||||
@@ -167,13 +150,17 @@ bindsym $shift+XF86MonBrightnessDown exec --no-startup-id "light -U $b_large &&
|
||||
# Macbooks tend to use 'sysfs/leds/smc::kbd_backlight'
|
||||
# NovaCustom laptop is 'sysfs/leds/system76_acpi::kbd_backlight'
|
||||
# Some other laptops may be 'sysfs/class/leds/...', use ìght -L`to find out.
|
||||
bindsym XF86KbdBrightnessUp exec "light -s sysfs/leds/smc::kbd_backlight -A $b_small && notify-send -t $b_time 'Keyboard Brightness + ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym XF86KbdBrightnessDown exec "light -s sysfs/leds/smc::kbd_backlight -U $b_small && notify-send -t $b_time 'Keyboard Brightness - ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $ctrl+XF86KbdBrightnessUp exec "light -s sysfs/leds/smc::kbd_backlight -A $b_micro && notify-send -t $b_time 'Keyboard Brightness + ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $ctrl+XF86KbdBrightnessDown exec "light -s sysfs/leds/smc::kbd_backlight -U $b_micro && notify-send -t $b_time 'Keyboard Brightness - ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym XF86KbdBrightnessUp exec "light -s sysfs/leds/smc::kbd_backlight -A $b_small && notify-send -t $b_time 'Keyboard Brightness ++ ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym XF86KbdBrightnessDown exec "light -s sysfs/leds/smc::kbd_backlight -U $b_small && notify-send -t $b_time 'Keyboard Brightness -- ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $shift+XF86KbdBrightnessUp exec "light -s sysfs/leds/smc::kbd_backlight -A $b_large && notify-send -t $b_time 'Keyboard Brightness +++' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $shift+XF86KbdBrightnessDown exec "light -s sysfs/leds/smc::kbd_backlight -U $b_large && notify-send -t $b_time 'Keyboard Brightness ---' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
|
||||
bindsym $mod+apostrophe exec "light -s sysfs/leds/smc::kbd_backlight -A $b_small && notify-send -t $b_time 'Keyboard Brightness + ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $mod+semicolon exec "light -s sysfs/leds/smc::kbd_backlight -U $b_small && notify-send -t $b_time 'Keyboard Brightness - ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $ctrl+apostrophe exec "light -s sysfs/leds/smc::kbd_backlight -A $b_micro && notify-send -t $b_time 'Keyboard Brightness + ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $ctrl+semicolon exec "light -s sysfs/leds/smc::kbd_backlight -U $b_micro && notify-send -t $b_time 'Keyboard Brightness - ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $mod+apostrophe exec "light -s sysfs/leds/smc::kbd_backlight -A $b_small && notify-send -t $b_time 'Keyboard Brightness ++ ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $mod+semicolon exec "light -s sysfs/leds/smc::kbd_backlight -U $b_small && notify-send -t $b_time 'Keyboard Brightness -- ' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $shift+$mod+apostrophe exec "light -s sysfs/leds/smc::kbd_backlight -A $b_large && notify-send -t $b_time 'Keyboard Brightness +++' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
bindsym $shift+$mod+semicolon exec "light -s sysfs/leds/smc::kbd_backlight -U $b_large && notify-send -t $b_time 'Keyboard Brightness ---' $(light -s sysfs/leds/smc::kbd_backlight -G)"
|
||||
|
||||
@@ -182,26 +169,30 @@ bindsym $shift+$mod+semicolon exec "light -s sysfs/leds/smc::kbd_backlight -U $
|
||||
# The volume function is from https://git.hyperling.com/me/env-ansible
|
||||
|
||||
set $v_time 1500
|
||||
set $v_small 5
|
||||
set $v_micro 5
|
||||
set $v_small 10
|
||||
set $v_large 25
|
||||
|
||||
# Use the comma and period keys to change volume.
|
||||
bindsym $mod+comma exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume -$v_small && notify-send -t $v_time "Volume - " $(volume)'
|
||||
bindsym $mod+period exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume +$v_small && notify-send -t $v_time "Volume + " $(volume)'
|
||||
bindsym $ctrl+comma exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume -$v_micro && notify-send -t $v_time "Volume - " $(volume)'
|
||||
bindsym $ctrl+period exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume +$v_micro && notify-send -t $v_time "Volume + " $(volume)'
|
||||
bindsym $mod+comma exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume -$v_small && notify-send -t $v_time "Volume -- " $(volume)'
|
||||
bindsym $mod+period exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume +$v_small && notify-send -t $v_time "Volume ++ " $(volume)'
|
||||
bindsym $shift+$mod+comma exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume -$v_large && notify-send -t $v_time "Volume ---" $(volume)'
|
||||
bindsym $shift+$mod+period exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume +$v_large && notify-send -t $v_time "Volume +++" $(volume)'
|
||||
|
||||
# Actual volume keys.
|
||||
bindsym XF86AudioMute exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume mute && notify-send -t $v_time "Volume Muted" $(volume)'
|
||||
bindsym XF86AudioRaiseVolume exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume +$v_small && notify-send -t $v_time "Volume + " $(volume)'
|
||||
bindsym XF86AudioLowerVolume exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume -$v_small && notify-send -t $v_time "Volume - " $(volume)'
|
||||
bindsym $ctrl+XF86AudioRaiseVolume exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume +$v_micro && notify-send -t $v_time "Volume + " $(volume)'
|
||||
bindsym $ctrl+XF86AudioLowerVolume exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume -$v_micro && notify-send -t $v_time "Volume - " $(volume)'
|
||||
bindsym XF86AudioRaiseVolume exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume +$v_small && notify-send -t $v_time "Volume ++ " $(volume)'
|
||||
bindsym XF86AudioLowerVolume exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume -$v_small && notify-send -t $v_time "Volume -- " $(volume)'
|
||||
bindsym $shift+XF86AudioRaiseVolume exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume +$v_large && notify-send -t $v_time "Volume +++ " $(volume)'
|
||||
bindsym $shift+XF86AudioLowerVolume exec --no-startup-id bash -c 'source /usr/local/bin/volume.function && volume -$v_large && notify-send -t $v_time "Volume --- " $(volume)'
|
||||
|
||||
bindsym $mod+slash exec pavucontrol
|
||||
|
||||
|
||||
|
||||
## Workspaces ##
|
||||
|
||||
# Define names for default workspaces for which we configure key bindings later on.
|
||||
@@ -225,7 +216,7 @@ set $ws8 "8 - MUS"
|
||||
# Videos
|
||||
set $ws9 "9 - VID"
|
||||
# VPNs
|
||||
set $ws10 "10 - VPN"
|
||||
set $ws0 "10 - VPN"
|
||||
|
||||
# switch to workspace
|
||||
bindsym $mod+1 workspace number $ws1
|
||||
@@ -237,7 +228,7 @@ bindsym $mod+6 workspace number $ws6
|
||||
bindsym $mod+7 workspace number $ws7
|
||||
bindsym $mod+8 workspace number $ws8
|
||||
bindsym $mod+9 workspace number $ws9
|
||||
bindsym $mod+0 workspace number $ws10
|
||||
bindsym $mod+0 workspace number $ws0
|
||||
|
||||
# move focused container to workspace
|
||||
bindsym $mod+Shift+1 move container to workspace number $ws1
|
||||
@@ -249,7 +240,7 @@ bindsym $mod+Shift+6 move container to workspace number $ws6
|
||||
bindsym $mod+Shift+7 move container to workspace number $ws7
|
||||
bindsym $mod+Shift+8 move container to workspace number $ws8
|
||||
bindsym $mod+Shift+9 move container to workspace number $ws9
|
||||
bindsym $mod+Shift+0 move container to workspace number $ws10
|
||||
bindsym $mod+Shift+0 move container to workspace number $ws0
|
||||
|
||||
## Keep certain programs in certain tabs. ##
|
||||
# Use the `xprop` command to find the class of a program.
|
||||
@@ -285,21 +276,24 @@ assign [class="(?i).*strawberry.*"] $ws8
|
||||
assign [class="(?i).*vlc.*"] $ws9
|
||||
assign [class="(?i).*mpv.*"] $ws9
|
||||
|
||||
assign [class="(?i).*vpn.*"] $ws10
|
||||
assign [class="(?i).*mullvad.*"] $ws10
|
||||
assign [class="(?i).*vpn.*"] $ws0
|
||||
assign [class="(?i).*mullvad.*"] $ws0
|
||||
assign [class="(?i).*gnome-system-monitor.*"] $ws0
|
||||
|
||||
|
||||
## Workspace Specific Workflows ##
|
||||
bindsym $ctrl+$shift+1 workspace $ws1; exec "i3-sensible-terminal; gnome-system-monitor"
|
||||
#bindsym $ctrl+$shift+1 workspace $ws1; exec "i3-sensible-terminal & gnome-system-monitor"
|
||||
bindsym $ctrl+$shift+1 workspace $ws1; exec "i3-sensible-terminal & i3-sensible-terminal btop -u 500"
|
||||
bindsym $ctrl+$shift+2 workspace $ws2; exec $FIREFOX
|
||||
bindsym $ctrl+$shift+3 workspace $ws3; exec codium-flatpak
|
||||
bindsym $ctrl+$shift+4 workspace $ws4; exec android-studio-flatpak
|
||||
bindsym $ctrl+$shift+5 workspace $ws5; exec "session; dino"
|
||||
bindsym $ctrl+$shift+6 workspace $ws6; exec "pavucontrol; blueman-manager"
|
||||
bindsym $ctrl+$shift+3 workspace $ws3; exec "(codium || vscodium || codium-flatpak || vscodium-flatpak)"
|
||||
bindsym $ctrl+$shift+4 workspace $ws4; exec "android-studio || android-studio-flatpak"
|
||||
bindsym $ctrl+$shift+5 workspace $ws5; exec "(signal || signal-flatpak) & (dino || dino-flatpak)"
|
||||
bindsym $alt+$shift+5 workspace $ws5; exec "(session || session-flatpak) & (forkgram || forkgram-flatpak || telegram || telegram-flatpak)"
|
||||
bindsym $ctrl+$shift+6 workspace $ws6; exec "pavucontrol & blueman-manager"
|
||||
bindsym $ctrl+$shift+7 workspace $ws7; exec $TRANSMISSION
|
||||
bindsym $ctrl+$shift+8 workspace $ws8; exec strawberry
|
||||
bindsym $ctrl+$shift+9 workspace $ws9; exec thunar
|
||||
bindsym $ctrl+$shift+0 workspace $ws10; exec mullvad-vpn
|
||||
bindsym $ctrl+$shift+0 workspace $ws0; exec "mullvad-vpn & gnome-system-monitor"
|
||||
|
||||
|
||||
## Reloads, Restarts, Exit ##
|
||||
@@ -315,15 +309,29 @@ bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcu
|
||||
bindsym $mod+Shift+q exec "i3-msg exit"
|
||||
|
||||
# lock
|
||||
bindsym $ctrl+$alt+l exec "i3lock -c 000000 -e -f && sleep 1 && xset dpms force off"
|
||||
bindsym $ctrl+$mod+l exec "i3lock -c 000000 -e -f && sleep 1 && xset dpms force off"
|
||||
bindsym $shift+$mod+l exec "i3lock -c 000000 -e -f && sleep 1 && xset dpms force off"
|
||||
#set $LOCK_CMD "i3lock -c 333333 -e -f && sleep 1 && xset dpms force off"
|
||||
set $LOCK_CMD "loginctl lock-session"
|
||||
bindsym $ctrl+$alt+l exec $LOCK_CMD
|
||||
bindsym $ctrl+$mod+l exec $LOCK_CMD
|
||||
bindsym $shift+$mod+l exec $LOCK_CMD
|
||||
|
||||
# shutdown entire system.
|
||||
#bindsym $ctrl+$shift+q exec dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
|
||||
bindsym $ctrl+$alt+q exec sudo shutdown -h now
|
||||
bindsym $shift+$alt+q exec sudo shutdown -h now
|
||||
bindsym $shift+$ctrl+q exec sudo shutdown -h now
|
||||
bindsym $ctrl+$alt+$mod+q exec sudo shutdown -h now
|
||||
bindsym $shift+$alt+$mod+q exec sudo shutdown -h now
|
||||
bindsym $shift+$ctrl+$mod+q exec sudo shutdown -h now
|
||||
|
||||
# restart entire system.
|
||||
bindsym $ctrl+$alt+$mod+r exec sudo shutdown -r now
|
||||
bindsym $shift+$alt+$mod+r exec sudo shutdown -r now
|
||||
bindsym $shift+$ctrl+$mod+r exec sudo shutdown -r now
|
||||
|
||||
# restart LLM programs
|
||||
set $RESTART_LLMS "sudo sv restart ollama; sudo sv restart zeroclaw; sudo sv restart open-webui"
|
||||
bindsym $ctrl+$alt+delete exec $RESTART_LLMS
|
||||
bindsym $shift+$alt+delete exec $RESTART_LLMS
|
||||
bindsym $shift+$ctrl+delete exec $RESTART_LLMS
|
||||
|
||||
|
||||
## Resizing (Disabled) ##
|
||||
|
||||
@@ -368,11 +376,12 @@ bar {
|
||||
|
||||
# Workspace 1
|
||||
exec --no-startup-id i3-sensible-terminal
|
||||
exec --no-startup-id gnome-system-monitor
|
||||
exec --no-startup-id i3-sensible-terminal btop -u 500
|
||||
|
||||
# Respective Workspaces
|
||||
exec --no-startup-id mullvad-vpn
|
||||
exec --no-startup-id $TRANSMISSION
|
||||
exec --no-startup-id gnome-system-monitor
|
||||
|
||||
# Set defaults for laptop backlights.
|
||||
exec --no-startup-id "light -S 20; light -N 5; light -O"
|
||||
@@ -389,7 +398,7 @@ exec_always --no-startup-id "sleep 00; killall pipewire wireplumber pipewire-pul
|
||||
exec_always --no-startup-id "sleep 01; pipewire >~/Reports/pipewire.log 2>&1 &"
|
||||
exec_always --no-startup-id "sleep 02; wireplumber >~/Reports/wireplumber.log 2>&1 &"
|
||||
exec_always --no-startup-id "sleep 03; pipewire-pulse >~/Reports/pipewire-pulse.log 2>&1 &"
|
||||
exec --no-startup-id "sleep 04; bash -c 'source /usr/local/bin/volume.function && volume 25'"
|
||||
exec --no-startup-id "sleep 04; bash -c 'source /usr/local/bin/volume.function && volume 75'"
|
||||
|
||||
# Wallpaper
|
||||
exec_always --no-startup-id feh --recursive --randomize --bg-fill ~/Pictures/Wallpapers
|
||||
@@ -403,4 +412,40 @@ exec_always --no-startup-id bash -c 'pkill -ef "bash `which battery_nag.sh`" >~/
|
||||
# Redshift
|
||||
#exec_always --no-startup-id "killall redshift-gtk; redshift-gtk"
|
||||
#exec_always --no-startup-id "killall redshift; redshift -l 35.19540:-111.65720 -t 6500K:1100K"
|
||||
exec_always --no-startup-id "killall redshift; killall redshift-gtk; sleep 1; redshift -x; redshift-gtk -l 35.19540:-111.65720 -t 6500K:1100K"
|
||||
exec_always --no-startup-id "killall redshift; killall redshift-gtk; sleep 1; redshift -x; redshift-gtk -l 32:-111 -t 6500K:1100K"
|
||||
|
||||
# Allow locking the session.
|
||||
#set $AGENT pkttyagent
|
||||
set $AGENT lxqt-policykit-agent
|
||||
exec_always --no-startup-id "killall $AGENT; $AGENT"
|
||||
|
||||
# Start XDG autostart .desktop files using dex. See also
|
||||
# https://wiki.archlinux.org/index.php/XDG_Autostart
|
||||
exec --no-startup-id dex --autostart --environment i3
|
||||
|
||||
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
|
||||
# they are included here as an example. Modify as you see fit.
|
||||
|
||||
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
|
||||
# screen before suspend. Use loginctl lock-session to lock your screen.
|
||||
#exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
|
||||
#exec_always --no-startup-id xss-lock --transfer-sleep-lock -- i3lock -c 111111 -e -f --nofork
|
||||
exec_always --no-startup-id xss-lock --transfer-sleep-lock -- sh -c 'i3lock -c 111111 -e -f --nofork & sleep 1; xset dpms force off; wait'
|
||||
|
||||
# NetworkManager is the most popular way to manage wireless networks on Linux,
|
||||
# and nm-applet is a desktop environment-independent system tray GUI for it.
|
||||
exec --no-startup-id nm-applet
|
||||
|
||||
# Use pactl to adjust volume in PulseAudio.
|
||||
set $refresh_i3status killall -SIGUSR1 i3status
|
||||
#bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
|
||||
#bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
||||
#bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||
#bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
||||
|
||||
# Sunset Alarm
|
||||
#exec_always --no-startup-id "killall sunset-alarm; /home/ling/Code/sunset_alarm_cli/sunset-alarm -t 20:00 -m 30 > ~/Reports/sunset-alarm.log 2>&1"
|
||||
exec_always --no-startup-id "killall sunset-alarm; /home/ling/Code/sunset_alarm_cli/sunset-alarm -l 32:-111 -m 30 > ~/Reports/sunset-alarm.log 2>&1"
|
||||
|
||||
# Bedtime ;)
|
||||
exec --no-startup-id "while true; do if [[ `date +'%H'` -ge 20 ]]; then fyi -w -u critical 'Bedtime' 'Go to sleep! >:)'; fi; sleep 600; done"
|
||||
Binary file not shown.
File diff suppressed because it is too large.
Load diff
@@ -7,6 +7,7 @@
|
||||
"update.showReleaseNotes": false,
|
||||
"workbench.startupEditor": "none",
|
||||
"git.confirmSync": false,
|
||||
"workbench.editor.openPositioning": "last",
|
||||
|
||||
"editor.rulers": [
|
||||
80, 120, 200,
|
||||
@@ -42,4 +43,6 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
"redhat.telemetry.enabled": false,
|
||||
}
|
||||
@@ -3,3 +3,6 @@
|
||||
|
||||
# Allow anyone in the sudo group to shutdown or reboot without a password.
|
||||
%sudo ALL=(ALL) NOPASSWD: /sbin/shutdown, /usr/sbin/shutdown, /sbin/reboot, /usr/sbin/reboot
|
||||
|
||||
# Allow the sudo group to manage runit services.
|
||||
%sudo ALL=(ALL) NOPASSWD: /sbin/sv, /usr/sbin/sv, /sbin/sv, /usr/sbin/sv
|
||||
@@ -2,293 +2,238 @@
|
||||
# Harmonize systems rather than doing everything manually. :)
|
||||
|
||||
# Setup of any device connected to this repo.
|
||||
- name: Main | Default Setup
|
||||
- name: Local | Main
|
||||
hosts: localhost
|
||||
connection: local
|
||||
become: true
|
||||
|
||||
tasks:
|
||||
|
||||
####### Lock #######
|
||||
# Ensure a process is not already running.
|
||||
- name: Main | Lock
|
||||
block:
|
||||
|
||||
- include_tasks: tasks/general/tests/lock_check.yml
|
||||
- include_tasks: tasks/general/tests/lock_create.yml
|
||||
|
||||
|
||||
####### Gather #######
|
||||
# Load facts for all systems.
|
||||
- name: Main | Gather
|
||||
block:
|
||||
|
||||
- include_tasks: facts/general/gather.yml
|
||||
- include_tasks: tasks/general/acct_mgmt/provision_config.yml
|
||||
|
||||
- include_tasks: facts/general/system.yml
|
||||
- include_tasks: facts/general/package.yml
|
||||
- include_tasks: facts/general/service.yml
|
||||
- include_tasks: facts/general/user.yml
|
||||
|
||||
|
||||
####### Start #######
|
||||
- name: Main | Start
|
||||
block:
|
||||
|
||||
- name: Main | Start | Notify | Touch File
|
||||
include_tasks: tasks/general/acct_mgmt/notify.yml
|
||||
|
||||
- name: Main | Start | Notify | Add Message
|
||||
shell : echo "'Ansible' 'Provisioning started @ `date`'" >> "{{ notify_log_file }}"
|
||||
|
||||
when: workstation == true
|
||||
|
||||
####### NixOS #######
|
||||
# Install the .nix files and do a little data setup.
|
||||
- name: Main | NixOS Setup
|
||||
block:
|
||||
|
||||
- include_tasks: tasks/general/software/nixos.yml
|
||||
|
||||
# TBD if we are going to use this many, then just have IF statements
|
||||
# and use blocks within the General area for NixOS vs not-NixOS.
|
||||
- include_tasks: tasks/general/software/swap.yml
|
||||
|
||||
- include_tasks: tasks/general/acct_mgmt/groups.yml
|
||||
- include_tasks: tasks/general/acct_mgmt/users.yml
|
||||
- include_tasks: tasks/general/acct_mgmt/sudo.yml
|
||||
- include_tasks: tasks/general/acct_mgmt/doas.yml
|
||||
|
||||
- include_tasks: tasks/general/scripts/root.yml
|
||||
- include_tasks: tasks/general/scripts/user.yml
|
||||
- include_tasks: tasks/general/scripts/install.yml
|
||||
|
||||
- include_tasks: tasks/general/cron/ansible.yml
|
||||
|
||||
# psutil does not work in NixOS. Cannot figure out how to fix it. Maybe
|
||||
# time to start looking into home-manager but still not wanting to
|
||||
# maintain two different GNOME setups. HMMMM!
|
||||
- include_tasks: tasks/workstation/shared/settings/gnome.yml
|
||||
when: workstation == true
|
||||
|
||||
# Try including these. Really need to get NixOS working with the rest!
|
||||
#- include_tasks: tasks/general/software/telegraf.yml # "Could not find a module for unknown.""
|
||||
- include_tasks: tasks/general/tests/services.yml
|
||||
- include_tasks: tasks/general/tests/lynis.yml
|
||||
- include_tasks: tasks/general/tests/nmap.yml
|
||||
|
||||
- name: NixOS | Complete
|
||||
meta: end_play
|
||||
|
||||
when: ansible_distribution == "NixOS"
|
||||
|
||||
|
||||
####### General #######
|
||||
# Basic setup for all enabled systems.
|
||||
- name: Main | General Setup
|
||||
block:
|
||||
|
||||
- include_tasks: tasks/general/software/swap.yml
|
||||
- include_tasks: tasks/general/software/packages.yml
|
||||
- include_tasks: tasks/general/software/services.yml
|
||||
- include_tasks: tasks/general/software/sendmail.yml
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
- include_tasks: tasks/general/software/aur.yml
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
# Gather again in case missing programs have now been installed.
|
||||
- include_tasks: facts/general/gather.yml
|
||||
|
||||
- include_tasks: tasks/general/settings/keyboard.yml
|
||||
|
||||
- include_tasks: tasks/general/acct_mgmt/groups.yml
|
||||
- include_tasks: tasks/general/acct_mgmt/users.yml
|
||||
- include_tasks: tasks/general/acct_mgmt/sudo.yml
|
||||
- include_tasks: tasks/general/acct_mgmt/doas.yml
|
||||
|
||||
- include_tasks: tasks/general/scripts/root.yml
|
||||
- include_tasks: tasks/general/scripts/user.yml
|
||||
- include_tasks: tasks/general/scripts/install.yml
|
||||
|
||||
- include_tasks: tasks/general/cron/ansible.yml
|
||||
|
||||
# TODO Need to refactor. Maybe tasks/general/cron/freebsd.yml
|
||||
- include_tasks: tasks/workstation/freebsd/cron/ansible.yml
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
- include_tasks: tasks/general/software/metasploit.yml
|
||||
|
||||
when: provision == true
|
||||
####### Header #######
|
||||
|
||||
- name: Main | Header
|
||||
ansible.builtin.include_tasks: tasks/header.yml
|
||||
|
||||
####### Workstations #######
|
||||
|
||||
# Additional setup for systems with GUI.
|
||||
- name: Main | Workstation Setup
|
||||
- name: Main | Workstation
|
||||
block:
|
||||
|
||||
- include_tasks: facts/workstation/package.yml
|
||||
- ansible.builtin.include_tasks: facts/workstation/package.yml
|
||||
|
||||
## Desktop Environments ##
|
||||
- include_tasks: tasks/workstation/freebsd/software/gpu.yml
|
||||
when: ansible_system == "FreeBSD" and bsd_gpu == true
|
||||
## Desktop Environments ##
|
||||
- ansible.builtin.include_tasks: tasks/workstation/freebsd/software/gpu.yml
|
||||
when: ansible_system == "FreeBSD"
|
||||
and bsd_gpu
|
||||
and internet
|
||||
|
||||
# Window Managers without true Desktop Environments #
|
||||
- include_tasks: tasks/workstation/shared/software/dwm.yml
|
||||
- include_tasks: tasks/workstation/shared/software/i3.yml
|
||||
# Window Managers without true Desktop Environments #
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/software/dwm.yml
|
||||
when: internet
|
||||
|
||||
# Polished Desktop Environments #
|
||||
- include_tasks: tasks/workstation/freebsd/software/gnome.yml
|
||||
when: ansible_system == "FreeBSD"
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/software/i3.yml
|
||||
when: internet
|
||||
|
||||
- name: Main | Workstation | Fancy Desktop Environments
|
||||
block:
|
||||
- include_tasks: tasks/workstation/linux/software/gnome.yml
|
||||
when: ansible_service_mgr == "systemd"
|
||||
- include_tasks: tasks/workstation/linux/software/cinnamon.yml
|
||||
- include_tasks: tasks/workstation/linux/software/lxqt.yml
|
||||
when: ansible_system == "Linux"
|
||||
# TBD: Implement this: and extra_desktops == true
|
||||
# Polished Desktop Environments #
|
||||
- ansible.builtin.include_tasks: tasks/workstation/freebsd/software/gnome.yml
|
||||
when: ansible_system == "FreeBSD"
|
||||
and internet
|
||||
|
||||
## Software Tasks ##
|
||||
- block:
|
||||
- include_tasks: tasks/workstation/linux/software/packages.yml
|
||||
- include_tasks: tasks/workstation/linux/software/tlp.yml
|
||||
- include_tasks: tasks/workstation/linux/software/lutris.yml
|
||||
- include_tasks: tasks/workstation/linux/software/vscodium.yml
|
||||
- include_tasks: tasks/workstation/linux/software/vpn.yml
|
||||
- include_tasks: tasks/workstation/linux/software/nodejs.yml
|
||||
- include_tasks: tasks/workstation/linux/software/hugo.yml
|
||||
- include_tasks: tasks/workstation/linux/software/brave.yml
|
||||
when: ansible_pkg_mgr in ("apt", "dnf", "zypper") and not mobile
|
||||
when: ansible_system == "Linux"
|
||||
- name: Main | Workstation | Fancy Desktop Environments
|
||||
block:
|
||||
|
||||
- include_tasks: tasks/workstation/freebsd/software/packages.yml
|
||||
when: ansible_system == "FreeBSD"
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/gnome.yml
|
||||
when: ansible_service_mgr == "systemd"
|
||||
|
||||
- include_tasks: tasks/workstation/mac-os/software/brew.yml
|
||||
when: ansible_system == "Darwin"
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/cinnamon.yml
|
||||
|
||||
## Configuration Tasks ##
|
||||
- block:
|
||||
- include_tasks: tasks/workstation/shared/settings/gnome.yml
|
||||
- include_tasks: tasks/workstation/shared/settings/cinnamon.yml
|
||||
- include_tasks: tasks/workstation/shared/settings/xdg_autostart.yml
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/lxqt.yml
|
||||
|
||||
- include_tasks: tasks/workstation/linux/cron/ansible.yml
|
||||
when: ansible_system == "Linux"
|
||||
when: not mobile
|
||||
and internet
|
||||
# TBD: Implement this: and extra_desktops
|
||||
|
||||
- include_tasks: tasks/workstation/shared/settings/nfs.yml
|
||||
## Software Tasks ##
|
||||
|
||||
- include_tasks: tasks/workstation/shared/settings/rdp.yml
|
||||
when: rdp == true
|
||||
- name: Main | Workstation | Linux
|
||||
block:
|
||||
|
||||
- include_tasks: tasks/workstation/shared/settings/vnc.yml
|
||||
when: vnc == true
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/packages.yml
|
||||
|
||||
- include_tasks: tasks/workstation/shared/settings/services.yml
|
||||
- include_tasks: tasks/workstation/shared/settings/templates.yml
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/tlp.yml
|
||||
|
||||
## Final Tasks (SLOW) ##
|
||||
- block:
|
||||
- include_tasks: tasks/workstation/linux/software/flatpaks.yml
|
||||
when: flatpak_distro
|
||||
- include_tasks: tasks/workstation/linux/software/java.yml
|
||||
- include_tasks: tasks/workstation/linux/software/flutter.yml
|
||||
- include_tasks: tasks/workstation/linux/software/android.yml
|
||||
when: ansible_system == "Linux"
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/lutris.yml
|
||||
|
||||
when: workstation == true
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/vscodium.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/vpn.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/nodejs.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/hugo.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/brave.yml
|
||||
when: ansible_pkg_mgr in ("apt", "dnf", "zypper") and not mobile
|
||||
|
||||
when: ansible_system == "Linux"
|
||||
and internet
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/freebsd/software/packages.yml
|
||||
when: ansible_system == "FreeBSD"
|
||||
and internet
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/mac-os/software/brew.yml
|
||||
when: ansible_system == "Darwin"
|
||||
and internet
|
||||
|
||||
## Configuration Tasks ##
|
||||
|
||||
- name: Main | Workstation | Configuration
|
||||
block:
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/settings/gnome.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/settings/cinnamon.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/settings/xdg_autostart.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/cron/ansible.yml
|
||||
when: ansible_system == "Linux"
|
||||
|
||||
when: not mobile
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/settings/nfs.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/settings/rdp.yml
|
||||
when: rdp
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/settings/vnc.yml
|
||||
when: vnc
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/settings/services.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/settings/templates.yml
|
||||
|
||||
## Final Tasks (SLOW) ##
|
||||
|
||||
- name: Main | Workstation | Linux [Slow]
|
||||
block:
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/flatpaks.yml
|
||||
when: flatpak_distro
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/java.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/flutter.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/android.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/docker.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/ai/llm.yml
|
||||
|
||||
when: ansible_system == "Linux"
|
||||
and internet
|
||||
|
||||
when: workstation
|
||||
|
||||
# No longer mining, this is now considered deprecated.
|
||||
# ####### Miners #######
|
||||
#
|
||||
# # Additional setup for miners.
|
||||
# - name: Main | Miner Setup
|
||||
# - name: Main | Miner
|
||||
# block:
|
||||
#
|
||||
# ##### Setup #####
|
||||
# - include_tasks: tasks/miner/debug.yml
|
||||
# - ansible.builtin.include_tasks: tasks/miner/debug.yml
|
||||
#
|
||||
# - include_tasks: tasks/miner/acct_mgmt/users.yml
|
||||
# - ansible.builtin.include_tasks: tasks/miner/acct_mgmt/users.yml
|
||||
#
|
||||
# - include_tasks: facts/miner/system.yml
|
||||
# - include_tasks: facts/miner/config.yml
|
||||
# - include_tasks: facts/miner/pool.yml
|
||||
# - ansible.builtin.include_tasks: facts/miner/system.yml
|
||||
# - ansible.builtin.include_tasks: facts/miner/config.yml
|
||||
# - ansible.builtin.include_tasks: facts/miner/pool.yml
|
||||
#
|
||||
# ##### Installations #####
|
||||
# ### CPU SECTION ###
|
||||
# # Monero #
|
||||
# - include_tasks: tasks/miner/software/xmr-stak-cpu.yml
|
||||
# - ansible.builtin.include_tasks: tasks/miner/software/xmr-stak-cpu.yml
|
||||
# when: xmr_stak_cpu is defined
|
||||
#
|
||||
# ### GPU Section ###
|
||||
# ## Drivers ##
|
||||
# - include_tasks: tasks/miner/drivers/amdgpu.yml
|
||||
# when: ansible_distribution == "Ubuntu" and amdgpu == true
|
||||
# - ansible.builtin.include_tasks: tasks/miner/drivers/amdgpu.yml
|
||||
# when: ansible_distribution == "Ubuntu" and amdgpu
|
||||
#
|
||||
# # Ethereum #
|
||||
# - include_tasks: tasks/miner/software/ethminer.yml
|
||||
# when: ethminer == true
|
||||
# - ansible.builtin.include_tasks: tasks/miner/software/ethminer.yml
|
||||
# when: ethminer
|
||||
#
|
||||
# - include_tasks: tasks/miner/software/nanominer.yml
|
||||
# when: nanominer == true
|
||||
# - ansible.builtin.include_tasks: tasks/miner/software/nanominer.yml
|
||||
# when: nanominer
|
||||
#
|
||||
# ##### Scheduling #####
|
||||
# - include_tasks: tasks/miner/cron/ansible.yml
|
||||
# - include_tasks: tasks/miner/cron/mfn.yml
|
||||
# - ansible.builtin.include_tasks: tasks/miner/cron/ansible.yml
|
||||
# - ansible.builtin.include_tasks: tasks/miner/cron/mfn.yml
|
||||
#
|
||||
# when: miner == true
|
||||
|
||||
# when: miner
|
||||
|
||||
####### Servers #######
|
||||
|
||||
# Easy to deploy server configurations.
|
||||
- name: Main | Server Setup
|
||||
- name: Main | Server
|
||||
block:
|
||||
|
||||
- include_tasks: tasks/server/software/services.yml
|
||||
- name: Main | Server | Services
|
||||
ansible.builtin.include_tasks: tasks/server/software/services.yml
|
||||
|
||||
- block:
|
||||
- include_tasks: tasks/server/software/certbot.yml
|
||||
- include_tasks: tasks/server/cron/certbot.yml
|
||||
when: certbot == true
|
||||
- block:
|
||||
|
||||
- block:
|
||||
- include_tasks: tasks/server/software/onlyoffice.yml
|
||||
when: onlyoffice == true
|
||||
- include_tasks: tasks/server/software/influxdb1.yml
|
||||
when: influxdb1 == true
|
||||
- include_tasks: tasks/server/software/influxdb2.yml
|
||||
when: influxdb2 == true
|
||||
- include_tasks: tasks/server/software/grafana.yml
|
||||
when: grafana == true
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
- name: Main | Server | Certbot
|
||||
ansible.builtin.include_tasks: tasks/server/software/certbot.yml
|
||||
|
||||
- include_tasks: tasks/server/software/hugo.yml
|
||||
when: hugo == true
|
||||
- name: Main | Server | Certbot Cron
|
||||
ansible.builtin.include_tasks: tasks/server/cron/certbot.yml
|
||||
when: certbot
|
||||
|
||||
when: server == true
|
||||
- block:
|
||||
|
||||
- name: Main | Server | OnlyOffice
|
||||
ansible.builtin.include_tasks: tasks/server/software/onlyoffice.yml
|
||||
when: onlyoffice
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/server/software/influxdb1.yml
|
||||
when: influxdb1
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/server/software/influxdb2.yml
|
||||
when: influxdb2
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/server/software/grafana.yml
|
||||
when: grafana
|
||||
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/server/software/hugo.yml
|
||||
when: hugo
|
||||
|
||||
when: server
|
||||
|
||||
####### Reporting #######
|
||||
|
||||
# Provide information for analysis.
|
||||
- name: Main | Reporting
|
||||
block:
|
||||
|
||||
- include_tasks: tasks/general/software/telegraf.yml
|
||||
- ansible.builtin.include_tasks: tasks/general/software/telegraf.yml
|
||||
when: internet
|
||||
|
||||
- include_tasks: tasks/general/tests/services.yml
|
||||
- include_tasks: tasks/general/tests/lynis.yml
|
||||
- include_tasks: tasks/general/tests/nmap.yml
|
||||
- ansible.builtin.include_tasks: tasks/general/tests/services.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/tests/lynis.yml
|
||||
|
||||
####### Finish #######
|
||||
- name: Main | Finish
|
||||
block:
|
||||
- ansible.builtin.include_tasks: tasks/general/tests/nmap.yml
|
||||
|
||||
- include_tasks: tasks/general/acct_mgmt/notify.yml
|
||||
####### Footer #######
|
||||
|
||||
- include_tasks: tasks/general/tests/lock_remove.yml
|
||||
- name: Main | Footer
|
||||
ansible.builtin.include_tasks: tasks/footer.yml
|
||||
@@ -6,6 +6,7 @@
|
||||
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
|
||||
PROG="$(basename -- "${BASH_SOURCE[0]}")"
|
||||
LOCAL="$DIR/local.yml"
|
||||
TEST="$DIR/test.yml"
|
||||
URL="https://git.hyperling.com/me/env-ansible"
|
||||
if [[ -z $BRANCH ]]; then
|
||||
export BRANCH="main"
|
||||
@@ -31,7 +32,7 @@ branch=""
|
||||
function usage {
|
||||
cat <<- EOF
|
||||
|
||||
$PROG [-l] [-b branch_name] [-g] [-w] [-s] [-f] [-h]
|
||||
$PROG [-l | -t] [-b branch_name] [-g] [-w] [-s] [-f] [-h]
|
||||
Program to initialize synchronization with Hyperling's Ansible configuration.
|
||||
$URL
|
||||
|
||||
@@ -39,6 +40,7 @@ function usage {
|
||||
-l : Run the local playbook associated with this $PROG.
|
||||
This is helpful for development or just saving bandwidth.
|
||||
It also provides prettier colors than the plaintext from ansible-pull. ;)
|
||||
-t : Run the test playbook which has a much smaller set of includes.
|
||||
-b branch_name : Download and run a specific branch. Default is $BRANCH.
|
||||
-g : Enable the General config with test contents.
|
||||
-w : Enable the Workstation config with test contents.
|
||||
@@ -52,9 +54,10 @@ function usage {
|
||||
|
||||
## Parameter Parsing ##
|
||||
|
||||
while getopts ":lb:gwsfh" arg; do
|
||||
while getopts ":ltb:gwsfh" arg; do
|
||||
case $arg in
|
||||
l) local="Y" && echo "Running $LOCAL as the playbook." ;;
|
||||
t) test="Y" && echo "Running $TEST as the playbook." ;;
|
||||
b) branch="$OPTARG" && echo "Using branch $branch instead of $BRANCH." ;;
|
||||
g) create_general="Y" && echo "Generating test '$general_config'." ;;
|
||||
w) create_workstation="Y" && echo "Generating test '$workstation_config'." ;;
|
||||
@@ -231,12 +234,23 @@ fi
|
||||
echo " "
|
||||
|
||||
echo "Provisioning Ansible..."
|
||||
if [[ "$local" == "Y" ]]; then
|
||||
status=""
|
||||
if [[ "$test" == "Y" ]]; then
|
||||
sudo ansible-playbook $TEST
|
||||
status=$?
|
||||
elif [[ "$local" == "Y" ]]; then
|
||||
sudo ansible-playbook $LOCAL
|
||||
status=$?
|
||||
else
|
||||
sudo ansible-pull -U $URL.git --checkout $branch
|
||||
status=$?
|
||||
fi
|
||||
if [[ "$status" == 0 ]]; then
|
||||
echo -e "- Provisioned!\n"
|
||||
else
|
||||
echo -e "\nERROR: Playbook failed with status $status, exiting."
|
||||
exit $status
|
||||
fi
|
||||
echo -e "- Provisioned!\n"
|
||||
|
||||
echo "Mounting all drives..."
|
||||
mount -a
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
# All the tasks which need run to successfully end the playbook.
|
||||
|
||||
####### Footer #######
|
||||
- name: Footer
|
||||
block:
|
||||
|
||||
- name: Footer | Notify
|
||||
ansible.builtin.include_tasks: tasks/general/acct_mgmt/notify.yml
|
||||
vars:
|
||||
notify_message: "Provisioning Finished"
|
||||
|
||||
- name: Footer | Lock | Remove
|
||||
ansible.builtin.include_tasks: tasks/general/tests/lock_remove.yml
|
||||
@@ -2,7 +2,7 @@
|
||||
# Install and configure doas.
|
||||
|
||||
- name: General | Software | DoAs | Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
doas_config: |
|
||||
permit persist :wheel as root
|
||||
permit persist :admin as root
|
||||
@@ -11,44 +11,47 @@
|
||||
doas_conf_file_bsd: /usr/local/etc/doas.conf
|
||||
|
||||
- name: General | Software | DoAs | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- doas
|
||||
register: doas_install
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Software | DoAs | Configure [Linux]
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ doas_conf_file_linux }}"
|
||||
block: |
|
||||
{{ doas_config }}
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | doas Linux'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
mode: "644"
|
||||
when: not doas_install.failed and ansible_system in ("Linux")
|
||||
|
||||
- name: General | Software | DoAs | Configure [BSD]
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ doas_conf_file_linux }}"
|
||||
block: |
|
||||
{{ doas_config }}
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | doas BSD'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
mode: "644"
|
||||
when: not doas_install.failed and ansible_system in ("FreeBSD")
|
||||
|
||||
- name: General | Software | DoAs | Configure [Other]
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ item }}"
|
||||
block: |
|
||||
{{ doas_config }}
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | doas Other'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
mode: "644"
|
||||
loop:
|
||||
- "{{ doas_conf_file_linux }}"
|
||||
- "{{ doas_conf_file_bsd }}"
|
||||
when: not doas_install.failed and ansible_system not in ("Linux", "FreeBSD")
|
||||
when: not doas_install.failed and ansible_system not in ("Linux", "FreeBSD")
|
||||
@@ -1,10 +1,10 @@
|
||||
---
|
||||
# Groups that do not come to all distros by default.
|
||||
|
||||
- name: General | Account Management | System Groups
|
||||
- name: General | Account Management | System Groups
|
||||
group:
|
||||
name: "{{ item }}"
|
||||
system: yes
|
||||
system: true
|
||||
state: present
|
||||
loop:
|
||||
- sudo
|
||||
|
||||
@@ -2,10 +2,14 @@
|
||||
# Create and manage permissions for notify log.
|
||||
|
||||
- name: General | Notify | Update File
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- touch "{{ notify_log_file }}"
|
||||
- chmod 777 "{{ notify_log_file }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: General | Notify | Add Message
|
||||
shell : echo "'Ansible' 'Provisioning finished @ `date`'" >> "{{ notify_log_file }}"
|
||||
ansible.builtin.shell : echo "'Ansible' '{{ notify_message }} @ `date`'" >> "{{ notify_log_file }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
@@ -2,19 +2,19 @@
|
||||
# Set up directory and files for specifying software needs rather than using hosts file.
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Variables 1
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
prov_dir: "/usr/local/etc/hyperling-scm"
|
||||
provision_variables: []
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Variables 2
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
gen_file: "{{ prov_dir }}/general.ini"
|
||||
wrk_file: "{{ prov_dir }}/workstation.ini"
|
||||
mnr_file: "{{ prov_dir }}/miner.ini"
|
||||
srv_file: "{{ prov_dir }}/server.ini"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Create Directory
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ prov_dir }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
@@ -23,11 +23,11 @@
|
||||
## General ##
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | General | Create
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ gen_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config'
|
||||
block: |
|
||||
; Please note that all portions require lowercase keys and values.
|
||||
;
|
||||
[global]
|
||||
;;;;;;;;;;;;;;;;;;;; Basic Options ;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; enable : Provide true for the provision to occur.
|
||||
@@ -49,6 +49,17 @@
|
||||
; nmap is already provided for reporting
|
||||
; Default: false
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | General | Create | Git Polling
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ gen_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config | Git Polling'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;; Git Polling ;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; For syncing this machine to a Git repository of this Ansible project
|
||||
@@ -74,6 +85,17 @@
|
||||
; Example: Ansible, ansible-setup, my-env
|
||||
; Default: env-ansible
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | General | Create | Swap File
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ gen_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config | Swap File'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;; Swap File ;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; swap_block : Set to the block size if dd should create a swapfile.
|
||||
@@ -90,6 +112,17 @@
|
||||
; Example: /usr/local/swap
|
||||
; Default: /swapfile
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | General | Create | Sync Frequency
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ gen_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config | Sync Frequency'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;; Sync Frequency ;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; no_telem : Set to true to avoid setting up telemetry services.
|
||||
@@ -101,6 +134,17 @@
|
||||
; Slows down the rate of services such as telegraf and cron.
|
||||
; Default: false
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | General | Create | Server Shortcuts
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ gen_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config | Server Shortcuts'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;; Server Shortcuts ;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; For typing `prod` and getting straight to a server, like in env-termux.
|
||||
@@ -120,7 +164,18 @@
|
||||
; Example: jim, bob, jeff, anne
|
||||
; Default: user
|
||||
;
|
||||
; For pushing MASTER directories to an SFTP server with `send-master`.
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | General | Create | Sync Shortcuts
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ gen_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config | Sync Shortcuts'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;;; Sync Shortcuts ;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; Imagine the command:
|
||||
; `rsync -auPhz --delete -e 'ssh -p prod_data_port' ./mydata-MASTER/ \
|
||||
@@ -143,44 +198,86 @@
|
||||
; Example: /srv/sftp/
|
||||
; Default: /srv/sftp/
|
||||
;
|
||||
[global]
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config'
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | General | Create | Tunnel
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ gen_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config | Tunnel'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Tunnel ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; Create a runit script which maintains an SSH tunnel to a remote server.
|
||||
;
|
||||
; ssh -v -H -R tunnel_remote_port:localhost:tunnel_local_port \
|
||||
; [-p tunnel_ssh_port] tunnel_remote_host
|
||||
;
|
||||
; tunnel_local_port (default=8080)
|
||||
; Local HTTP port which need forwarded to a remote server.
|
||||
; Example: http://localhost:8080
|
||||
;
|
||||
; tunnel_remote_host (default=false)
|
||||
; Remote server including username (such as user@example.com) which will
|
||||
; serve the port. Server should preferably have a reverse proxy in order
|
||||
; to encrypt the traffic, otherwise the local server should use HTTPS.
|
||||
;
|
||||
; tunnel_remote_port (default=8080)
|
||||
; Port which should host the service on the remote server. This is what
|
||||
; will get typed into web browsers or used by the reverse proxy. Should
|
||||
; be > 1024. Also, /etc/ssh/sshd_config will need AllowTcpForwarding and
|
||||
; GatewayPorts set to yes, then sshd will need to be reloaded.
|
||||
; Example: http://example.com:8080
|
||||
;
|
||||
; tunnel_ssh_port (default=22)
|
||||
; Port which the remote server exposes ssh.
|
||||
; Example: ssh -p 2222 user@example.com
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | General | Load
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
provision: "{{ lookup('ini', 'enable file={{gen_file}} default=false') | bool }}"
|
||||
user: "{{ lookup('ini', 'user file={{gen_file}} default=ling') }}"
|
||||
user_desc: "{{ lookup('ini', 'user_desc file={{gen_file}} default=Hyperling') }}"
|
||||
branch: "{{ lookup('ini', 'branch file={{gen_file}} default=main') }}"
|
||||
user: "{{ lookup('ini', 'user file={{gen_file}} default=user' ) }}"
|
||||
user_desc: "{{ lookup('ini', 'user_desc file={{gen_file}} default=User' ) }}"
|
||||
branch: "{{ lookup('ini', 'branch file={{gen_file}} default=main' ) }}"
|
||||
pentesting: "{{ lookup('ini', 'pentesting file={{gen_file}} default=false') | bool }}"
|
||||
no_telem: "{{ lookup('ini', 'no_telem file={{gen_file}} default=false') | bool }}"
|
||||
battery: "{{ lookup('ini', 'battery file={{gen_file}} default=false') | bool }}"
|
||||
swap_block: "{{ lookup('ini', 'swap_block file={{gen_file}} default=false') }}"
|
||||
swap_count: "{{ lookup('ini', 'swap_count file={{gen_file}} default=1') }}"
|
||||
swap_file: "{{ lookup('ini', 'swap_file file={{gen_file}} default=/swapfile') }}"
|
||||
sshd_port: "{{ lookup('ini', 'sshd_port file={{gen_file}} default=22') }}"
|
||||
swap_block: "{{ lookup('ini', 'swap_block file={{gen_file}} default=false') }}"
|
||||
swap_count: "{{ lookup('ini', 'swap_count file={{gen_file}} default=1' ) | int }}"
|
||||
swap_file: "{{ lookup('ini', 'swap_file file={{gen_file}} default=/swapfile') }}"
|
||||
sshd_port: "{{ lookup('ini', 'sshd_port file={{gen_file}} default=22' ) | int }}"
|
||||
git_host: "{{ lookup('ini', 'git_host file={{gen_file}} default=git.hyperling.com') }}"
|
||||
git_user: "{{ lookup('ini', 'git_user file={{gen_file}} default=me') }}"
|
||||
git_project: "{{ lookup('ini', 'git_project file={{gen_file}} default=env-ansible') }}"
|
||||
git_ssh_port: "{{ lookup('ini', 'git_ssh_port file={{gen_file}} default=22') }}"
|
||||
git_ssh_port: "{{ lookup('ini', 'git_ssh_port file={{gen_file}} default=22') | int }}"
|
||||
prod_host: "{{ lookup('ini', 'prod_host file={{gen_file}} default=hyperling.com') }}"
|
||||
prod_port: "{{ lookup('ini', 'prod_port file={{gen_file}} default=22') }}"
|
||||
prod_port: "{{ lookup('ini', 'prod_port file={{gen_file}} default=22') | int }}"
|
||||
prod_user: "{{ lookup('ini', 'prod_user file={{gen_file}} default=user') }}"
|
||||
prod_data_host: "{{ lookup('ini', 'prod_data_host file={{gen_file}} default=hyperling.com') }}"
|
||||
prod_data_port: "{{ lookup('ini', 'prod_data_port file={{gen_file}} default=22') }}"
|
||||
prod_data_port: "{{ lookup('ini', 'prod_data_port file={{gen_file}} default=22') | int }}"
|
||||
prod_data_user: "{{ lookup('ini', 'prod_data_user file={{gen_file}} default=user') }}"
|
||||
prod_data_dir: "{{ lookup('ini', 'prod_data_dir file={{gen_file}} default=/srv/sftp') }}"
|
||||
prod_data_dir: "{{ lookup('ini', 'prod_data_dir file={{gen_file}} default=/srv/sftp') }}"
|
||||
tunnel_local_port: "{{ lookup('ini', 'tunnel_local_port file={{gen_file}} default=8080' ) | int }}"
|
||||
tunnel_remote_host: "{{ lookup('ini', 'tunnel_remote_host file={{gen_file}} default=false') }}"
|
||||
tunnel_remote_port: "{{ lookup('ini', 'tunnel_remote_port file={{gen_file}} default=8080' ) | int }}"
|
||||
tunnel_ssh_port: "{{ lookup('ini', 'tunnel_ssh_port file={{gen_file}} default=22' ) | int }}"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | General | Boolean Check | Swap Block
|
||||
set_fact:
|
||||
- name: General | Account Management | Provisioning Configuration | General | Boolean Check | swap_block
|
||||
ansible.builtin.set_fact:
|
||||
swap_block: "{{ swap_block | bool }}"
|
||||
when: swap_block in ("true", "false")
|
||||
when: swap_block in ("false")
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | General | List
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
provision_variables: "{{ provision_variables | combine(item) }}"
|
||||
loop:
|
||||
- { 'provision': "{{ provision }}" }
|
||||
@@ -205,15 +302,21 @@
|
||||
- { 'prod_data_port': "{{ prod_data_port }}" }
|
||||
- { 'prod_data_user': "{{ prod_data_user }}" }
|
||||
- { 'prod_data_dir': "{{ prod_data_dir }}" }
|
||||
- { 'tunnel_local_port': "{{ tunnel_local_port }}" }
|
||||
- { 'tunnel_remote_host': "{{ tunnel_remote_host }}" }
|
||||
- { 'tunnel_remote_port': "{{ tunnel_remote_port }}" }
|
||||
- { 'tunnel_ssh_port': "{{ tunnel_ssh_port }}" }
|
||||
|
||||
|
||||
## Workstation ##
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Create
|
||||
blockinfile:
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Create | Main Options
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ wrk_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config'
|
||||
block: |
|
||||
;;;;;;; Available options - all require lowercase values ;;;;;;
|
||||
[global]
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;; Main Options ;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; enable : Set to true for system to be considered a workstation.
|
||||
;
|
||||
@@ -228,6 +331,114 @@
|
||||
;
|
||||
; gaming : Set to true for installation of gaming software (Steam, Lutris)
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Create | LLMs
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ wrk_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config | LLMs'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LLMs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; ollama (default=true)
|
||||
; Install and enable the ollama LLM manager.
|
||||
; API: http://127.0.0.1:11434
|
||||
;
|
||||
; manage_models (default=true)
|
||||
; Automatically choose and pull the models to use based on system
|
||||
; resources. Otherwise leaves images alone but still handles config.
|
||||
;
|
||||
; hf_token (default=false)
|
||||
; Token from Hugging Face which allows faster download speeds than anon.
|
||||
; May help with ollama and also supposed to help with open-webui. Token
|
||||
; needs set to something like hf_kjBCCLABEEABUVAKbjadbvkaksvBAVKBkjsDVK.
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Create | LLMs | GUIs
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ wrk_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config | LLMs | GUIs'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LLMs: GUIs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; zeroclaw (default=true)
|
||||
; Install and enable the Zeroclaw web daemon, a minimalistic interface
|
||||
; for many models and providers with negligible resource usage. Also
|
||||
; installs the CLI tool zerocode as an alternative to the web GUI.
|
||||
; URL: http://127.0.0.1:42617
|
||||
;
|
||||
; open_webui (default=false)
|
||||
; Install and enable open-webui as a Docker container. Very polished web
|
||||
; frontend for ollama and also handles other web LLMs through API calls.
|
||||
; Container is over 1GB in size and consumes substantial resources!
|
||||
; URL: http://localhost:3000
|
||||
;
|
||||
; open_webui_port (default=3000)
|
||||
; Port on which to run the open-webui Docker instance.
|
||||
;
|
||||
; open_webui_key (default=PleaseEnsureTheKeyIsAtLeast32To64Characters)
|
||||
; Secret key, allows persistence between runs. If not a public-facing
|
||||
; system, then not critical. Use `openssl rand -hex 32` to create one.
|
||||
;
|
||||
; codium_config (default=true)
|
||||
; Manage the config files for and Codium plugins. Cline and Continue are
|
||||
; the recommended Codium extensions but need installed through the GUI.
|
||||
; Currently handles:
|
||||
; ~/.continue/config.yml
|
||||
;
|
||||
; qwen_code (default=true)
|
||||
; Install and enable qwen-code as a daemon.
|
||||
; URL: http://127.0.0.1:4170
|
||||
;
|
||||
; qwen_code_key (default='')
|
||||
; API key for accessing the web GUI. Optional, not used if left blank.
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Create | LLMs | MCPs
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ wrk_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config | LLMs | MCPs'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;; LLMs: MCPs / Sandboxes ;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; open_terminal (default=false)
|
||||
; Docker container to be used with GUIs like open-webui so that agents
|
||||
; have somewhere safe to execute commands. Also allows file read/writes.
|
||||
; URL: http://127.0.0.1:8000
|
||||
;
|
||||
; open_terminal_port (default=8000)
|
||||
; Port on which to run the open-terminal Docker instance.
|
||||
;
|
||||
; open_terminal_key (default=open-terminal-key)
|
||||
; API key, needed in order to access the server. Required.
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Create | Other Options
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ wrk_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config | Other Options'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;; Other Options ;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; rdp : Set to true for installation of RDP protocol
|
||||
; CURRENTLY FREEBSD-ONLY
|
||||
;
|
||||
@@ -243,32 +454,60 @@
|
||||
; redmode : Set to true/false for automatially using Night Light in GNOME.
|
||||
; Default: true
|
||||
;
|
||||
[global]
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config'
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Load
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
# Main
|
||||
workstation: "{{ lookup('ini', 'enable file={{wrk_file}} default=false') | bool }}"
|
||||
coding: "{{ lookup('ini', 'coding file={{wrk_file}} default=false') | bool }}"
|
||||
sdks: "{{ lookup('ini', 'sdks file={{wrk_file}} default=false') | bool }}"
|
||||
editing: "{{ lookup('ini', 'editing file={{wrk_file}} default=false') }}"
|
||||
gaming: "{{ lookup('ini', 'gaming file={{wrk_file}} default=false') | bool }}"
|
||||
rdp: "{{ lookup('ini', 'rdp file={{wrk_file}} default=false') | bool }}"
|
||||
vnc: "{{ lookup('ini', 'vnc file={{wrk_file}} default=false') | bool }}"
|
||||
bsd_gpu: "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') | bool }}"
|
||||
mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') | bool }}"
|
||||
redmode: "{{ lookup('ini', 'redmode file={{wrk_file}} default=true' ) | bool }}"
|
||||
# Other
|
||||
rdp: "{{ lookup('ini', 'rdp file={{wrk_file}} default=false') | bool }}"
|
||||
vnc: "{{ lookup('ini', 'vnc file={{wrk_file}} default=false') | bool }}"
|
||||
bsd_gpu: "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') | bool }}"
|
||||
mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') | bool }}"
|
||||
redmode: "{{ lookup('ini', 'redmode file={{wrk_file}} default=true' ) | bool }}"
|
||||
# LLMs
|
||||
ollama_enabled: "{{ lookup('ini', 'ollama file={{wrk_file}} default=true' ) | bool }}"
|
||||
manage_models: "{{ lookup('ini', 'manage_models file={{wrk_file}} default=true' ) | bool }}"
|
||||
hf_token: "{{ lookup('ini', 'hf_token file={{wrk_file}} default=false') }}"
|
||||
# LLM GUIs
|
||||
zeroclaw_enabled: "{{ lookup('ini', 'zeroclaw file={{wrk_file}} default=true ') | bool }}"
|
||||
open_webui_enabled: "{{ lookup('ini', 'open_webui file={{wrk_file}} default=false') | bool }}"
|
||||
open_webui_port: "{{ lookup('ini', 'open_webui_port file={{wrk_file}} default=3000' ) | int }}"
|
||||
open_webui_key: "{{ lookup('ini', 'open_webui_key file={{wrk_file}} default=PleaseEnsureTheKeyIsAtLeast32To64Characters') }}"
|
||||
codium_config: "{{ lookup('ini', 'codium_config file={{wrk_file}} default=true' ) | bool }}"
|
||||
qwen_code_enabled: "{{ lookup('ini', 'qwen_code file={{wrk_file}} default=true' ) | bool }}"
|
||||
qwen_code_key : "{{ lookup('ini', 'qwen_code_key file={{wrk_file}} default=false') }}"
|
||||
# LLM MCPs
|
||||
open_terminal_enabled: "{{ lookup('ini', 'open_terminal file={{wrk_file}} default=false') | bool }}"
|
||||
open_terminal_port: "{{ lookup('ini', 'open_terminal_port file={{wrk_file}} default=8000' ) | int }}"
|
||||
open_terminal_key: "{{ lookup('ini', 'open_terminal_key file={{wrk_file}} default=false') }}"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Boolean Check | Editing
|
||||
set_fact:
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Boolean Check | editing
|
||||
ansible.builtin.set_fact:
|
||||
editing: "{{ editing | bool }}"
|
||||
when: editing in ("true", "false")
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Boolean Check | qwen_code_key
|
||||
ansible.builtin.set_fact:
|
||||
qwen_code_key: "{{ qwen_code_key | bool }}"
|
||||
when: qwen_code_key in ("false")
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Boolean Check | open_terminal_key
|
||||
ansible.builtin.set_fact:
|
||||
open_terminal_key: "{{ open_terminal_key | bool }}"
|
||||
when: open_terminal_key in ("false")
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | List
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
provision_variables: "{{ provision_variables | combine(item) }}"
|
||||
loop:
|
||||
- { 'workstation': "{{ workstation }}" }
|
||||
@@ -281,14 +520,28 @@
|
||||
- { 'bsd_gpu': "{{ bsd_gpu }}" }
|
||||
- { 'mobile': "{{ mobile }}" }
|
||||
- { 'redmode': "{{ redmode }}" }
|
||||
- { 'ollama_enabled': "{{ ollama_enabled }}" }
|
||||
- { 'manage_models': "{{ manage_models }}" }
|
||||
- { 'hf_token': "{{ hf_token }}" }
|
||||
- { 'zeroclaw_enabled': "{{ zeroclaw_enabled }}" }
|
||||
- { 'open_webui_enabled': "{{ open_webui_enabled }}" }
|
||||
- { 'open_webui_port': "{{ open_webui_port }}" }
|
||||
- { 'open_webui_key': "{{ open_webui_key }}" }
|
||||
- { 'codium_config': "{{ codium_config }}" }
|
||||
- { 'qwen_code_enabled': "{{ qwen_code_enabled }}" }
|
||||
- { 'qwen_code_key': "{{ qwen_code_key }}" }
|
||||
- { 'open_terminal_enabled': "{{ open_terminal_enabled }}" }
|
||||
- { 'open_terminal_port': "{{ open_terminal_port }}" }
|
||||
- { 'open_terminal_key': "{{ open_terminal_key }}" }
|
||||
|
||||
# No longer mining, this is now considered deprecated.
|
||||
### Miner ##
|
||||
#
|
||||
#- name: General | Account Management | Provisioning Configuration | Miner | Create
|
||||
# blockinfile:
|
||||
# ansible.builtin.blockinfile:
|
||||
# path: "{{ mnr_file }}"
|
||||
# block: |
|
||||
# [global]
|
||||
# ;;;;;;; Available options - all require lowercase values ;;;;;;
|
||||
# ;
|
||||
# ; enable : Set to true for system to be considered a miner.
|
||||
@@ -324,14 +577,15 @@
|
||||
# ; xmr_stak_cpu : Set to true for istallation
|
||||
# ; UNFINISHED/UNTESTED
|
||||
# ;
|
||||
# [global]
|
||||
# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
# marker: '; {mark} MANAGED BY ANSIBLE | Miner Config'
|
||||
# state: present
|
||||
# create: yes
|
||||
# backup: yes
|
||||
# create: true
|
||||
# backup: true
|
||||
# mode: "0644"
|
||||
#
|
||||
#- name: General | Account Management | Provisioning Configuration | Miner | Load
|
||||
# set_fact:
|
||||
# ansible.builtin.set_fact:
|
||||
# miner: "{{ lookup('ini', 'enable file={{mnr_file}} default=false') | bool }}"
|
||||
# amdgpu: "{{ lookup('ini', 'amdgpu file={{mnr_file}} default=false') | bool }}"
|
||||
# nanominer: "{{ lookup('ini', 'nanominer file={{mnr_file}} default=false') | bool }}"
|
||||
@@ -346,7 +600,7 @@
|
||||
# xmr_stak_cpu: "{{ lookup('ini', 'xmr_stak_cpu file={{mnr_file}} default=false') | bool }}"
|
||||
#
|
||||
#- name: General | Account Management | Provisioning Configuration | Miner | List
|
||||
# set_fact:
|
||||
# ansible.builtin.set_fact:
|
||||
# provision_variables: "{{ provision_variables | combine(item) }}"
|
||||
# loop:
|
||||
# - { 'miner': "{{ miner }}" }
|
||||
@@ -366,9 +620,11 @@
|
||||
## Server ##
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Server | Create
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ srv_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Server Config'
|
||||
block: |
|
||||
[global]
|
||||
;;;;;;; Parameters ;;;;;;
|
||||
;
|
||||
; enable : Set to true for system to be considered a server.
|
||||
@@ -393,14 +649,13 @@
|
||||
; hugo : Set to true to install HUGO static website generator.
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
[global]
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Server Config'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Server | Load
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
server: "{{ lookup('ini', 'enable file={{srv_file}} default=false') | bool }}"
|
||||
domain: "{{ lookup('ini', 'domain file={{srv_file}} default=hyperling.com') }}"
|
||||
onlyoffice: "{{ lookup('ini', 'onlyoffice file={{srv_file}} default=false') | bool }}"
|
||||
@@ -411,7 +666,7 @@
|
||||
hugo: "{{ lookup('ini', 'hugo file={{srv_file}} default=false') | bool }}"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Server | List
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
provision_variables: "{{ provision_variables | combine(item) }}"
|
||||
loop:
|
||||
- { 'server': "{{ server }}" }
|
||||
@@ -427,12 +682,17 @@
|
||||
## Exit if not turned on yet ##
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Exit Check
|
||||
shell: echo "Please configure the config files in {{ prov_dir }} then try again." && exit 1
|
||||
when: provision != true
|
||||
block:
|
||||
- name: General | Account Management | Provisioning Configuration | Exit Check | Message
|
||||
ansible.builtin.debug:
|
||||
msg: "Please configure the config files in {{ prov_dir }} then try again."
|
||||
- name: General | Account Management | Provisioning Configuration | Exit Check | Exit
|
||||
ansible.builtin.meta: end_play
|
||||
when: not provision
|
||||
|
||||
|
||||
## Display values ##
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Print
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
var: provision_variables
|
||||
@@ -2,32 +2,33 @@
|
||||
# Ensure the proper users have sudo access.
|
||||
|
||||
- name: General | Account Management | Sudo | Copy Ansible
|
||||
copy:
|
||||
ansible.builtin.copy:
|
||||
src: sudo/sudoers_ansible
|
||||
dest: "{{ sudoers_install_dir }}"
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: 0440
|
||||
mode: "0440"
|
||||
|
||||
- name: General | Account Management | Sudo | Copy Sudo Group
|
||||
copy:
|
||||
ansible.builtin.copy:
|
||||
src: sudo/sudoers_sudo
|
||||
dest: "{{ sudoers_install_dir }}"
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: 0440
|
||||
mode: "0440"
|
||||
|
||||
# Disable these two lines in openSUSE default configuration.
|
||||
#Defaults targetpw # ask for the password of the target user i.e. root
|
||||
#ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
|
||||
- name: General | Account Management | Sudo | Disable openSUSE Root PW Prompt
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ sudoers_config }}"
|
||||
regexp: '{{ item.key }}'
|
||||
line: '{{ item.value }} # MANAGED BY ANSIBLE'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
mode: "644"
|
||||
loop:
|
||||
- { "key": '^[\#]?Defaults targetpw', "value": '#Defaults targetpw'}
|
||||
- { "key": '^[\#]?ALL ALL\=\(ALL\) ALL', "value": '#ALL ALL=(ALL) ALL'}
|
||||
@@ -4,33 +4,33 @@
|
||||
## Variables ##
|
||||
|
||||
- name: General | Account Management | Users | Use BASH (Default)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
user_shell: "{{ bash_exec.stdout }}"
|
||||
|
||||
- name: General | Account Management | Users | Allow BASH (Arch)
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/shells
|
||||
regexp: "{{ bash_exec.stdout }}"
|
||||
line: "{{ bash_exec.stdout }}"
|
||||
insertbefore: "# End of file"
|
||||
backup: yes
|
||||
create: no
|
||||
backup: true
|
||||
create: false
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
#- name: General | Account Management | Users | Use ZSH (Arch+Manjaro)
|
||||
# set_fact:
|
||||
# ansible.builtin.set_fact:
|
||||
# user_shell: "{{ zsh_exec.stdout }}"
|
||||
# when: ansible_pkg_mgr == "pacman"
|
||||
#
|
||||
#- name: General | Account Management | Users | Allow ZSH (Arch)
|
||||
# lineinfile:
|
||||
# ansible.builtin.lineinfile:
|
||||
# path: /etc/shells
|
||||
# regexp: "{{ zsh_exec.stdout }}"
|
||||
# line: "{{ zsh_exec.stdout }}"
|
||||
# insertbefore: "# End of file"
|
||||
# backup: yes
|
||||
# create: no
|
||||
# backup: true
|
||||
# create: false
|
||||
# state: present
|
||||
# when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
@@ -38,28 +38,28 @@
|
||||
## Root ##
|
||||
|
||||
- name: General | Account Management | Users | Root
|
||||
user:
|
||||
ansible.builtin.user:
|
||||
name: root
|
||||
shell: "{{ bash_exec.stdout }}"
|
||||
create_home: yes
|
||||
generate_ssh_key: yes
|
||||
create_home: true
|
||||
generate_ssh_key: true
|
||||
register: user_root
|
||||
|
||||
|
||||
## Scheduler ##
|
||||
|
||||
- name: General | Account Management | Users | Ansible
|
||||
user:
|
||||
ansible.builtin.user:
|
||||
name: ansible
|
||||
comment: Ansible
|
||||
system: yes
|
||||
system: true
|
||||
register: user_ansible
|
||||
|
||||
|
||||
## Superuser ##
|
||||
|
||||
- name: General | Account Management | Users | User
|
||||
user:
|
||||
ansible.builtin.user:
|
||||
name: "{{ user }}"
|
||||
comment: "{{ user_desc }}"
|
||||
groups:
|
||||
@@ -67,23 +67,26 @@
|
||||
- video
|
||||
- render
|
||||
- wheel
|
||||
append: yes
|
||||
append: true
|
||||
shell: "{{ user_shell }}"
|
||||
create_home: yes
|
||||
generate_ssh_key: yes
|
||||
create_home: true
|
||||
generate_ssh_key: true
|
||||
register: user_user
|
||||
|
||||
- name: General | Account Management | Users | User | Test Logging In
|
||||
shell: "echo SUCCESS"
|
||||
ansible.builtin.shell: "echo SUCCESS"
|
||||
args:
|
||||
executable: "{{ user_shell }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
|
||||
## Folders ##
|
||||
|
||||
- name: General | Account Management | Users | Root | Create Folders
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
@@ -94,7 +97,7 @@
|
||||
when: user_root.home != ""
|
||||
|
||||
- name: General | Account Management | Users | User | Create Folders
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
@@ -105,27 +108,36 @@
|
||||
- "{{ user_user.home }}/Reports"
|
||||
- "{{ user_user.home }}/Torrentz"
|
||||
- "{{ user_user.home }}/Seedz"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: user_user.home != ""
|
||||
|
||||
- name: General | Account Management | Users | User | Create Folders | Coding
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
loop:
|
||||
- "{{ user_user.home }}/Code"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: user_user.home != "" and coding == true
|
||||
when: user_user.home != "" and coding
|
||||
|
||||
- name: General | Account Management | Users | Home Permissions
|
||||
shell: "chmod 700 {{ user_user.home }}/../*"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
loop:
|
||||
- "chmod 700 {{ user_user.home }}/../*"
|
||||
- "chown {{ user }}:{{ user }} {{ user_user.home }}"
|
||||
- "chown {{ user }}:{{ user }} {{ user_user.home }}/*"
|
||||
- "chown {{ user }}:{{ user }} {{ user_user.home }}/.*"
|
||||
|
||||
|
||||
## Files ##
|
||||
|
||||
- name: General | Account Management | Users | Files | Profile Variables
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
export_path_additions: export PATH="$HOME/bin:{{ shared_rc_bin }}:$PATH:{{ global_bin }}"
|
||||
export_path_sbin: export PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin"
|
||||
#export_terminal: export TERMINAL="alacritty" # colors look weird.
|
||||
@@ -148,7 +160,7 @@
|
||||
}
|
||||
|
||||
- name: General | Account Management | Users | Files | RC Variables
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
alias_cp: alias cp='cp -v'
|
||||
alias_mv: alias mv='mv -v'
|
||||
alias_rm: alias rm='echo "Use mv ~/TRASH/ instead!"'
|
||||
@@ -787,14 +799,25 @@
|
||||
alias_prod: |
|
||||
alias prod="ssh -p {{ prod_port }} {{ prod_user }}@{{ prod_host }}"
|
||||
function_clean_code: |
|
||||
function print_size_delete() {
|
||||
f="$1"
|
||||
if [[ -e "$f" ]]; then
|
||||
du -hs "$f" && sh -c "rm -rf '$f'"
|
||||
fi
|
||||
|
||||
}
|
||||
function clean-code() {
|
||||
echo -e "******* Android *******\n*** Build Caches ***"
|
||||
find $HOME/Code/android-*/app -maxdepth 1 -type d -name "build" \
|
||||
-exec du -hs {} \; -exec rm -rf {} \;
|
||||
|
||||
echo -e "\n*** Gradle Caches ***"
|
||||
find $HOME/Code/android-*/ -maxdepth 1 -type d -name ".gradle" \
|
||||
-exec du -hs {} \; -exec rm -rf {} \;
|
||||
|
||||
print_size_delete "$HOME/.gradle"
|
||||
mkdir "$HOME/.gradle"
|
||||
|
||||
echo -e "******* Flutter *******"
|
||||
ls $HOME/Code | grep flutter | while read project; do
|
||||
cd $HOME/Code/$project
|
||||
@@ -804,6 +827,10 @@
|
||||
done
|
||||
cd
|
||||
|
||||
print_size_delete "$HOME/.pub_cache"
|
||||
print_size_delete "$HOME/.pub-cache"
|
||||
mkdir "$HOME/.pub-cache"
|
||||
|
||||
echo -e "******* PDFs *******"
|
||||
find $HOME/Code/ebook-* -name "*.pdf" -exec du -h {} \; -delete | sort -h
|
||||
|
||||
@@ -1132,9 +1159,19 @@
|
||||
}
|
||||
function_loop: |
|
||||
function loop() {
|
||||
cmd="$1"
|
||||
cmd="$@"
|
||||
sleep=""
|
||||
sleep_time=5
|
||||
if [[ "$cmd" != *"sleep"* ]]; then
|
||||
sleep='echo -e "`date` - Sleeping for $sleep_time... \n"; sleep $sleep_time'
|
||||
fi
|
||||
count=0
|
||||
echo "Command='$cmd'"
|
||||
while true; do
|
||||
$cmd
|
||||
(( count++ ))
|
||||
echo "`date` - Loop $count"
|
||||
eval $cmd
|
||||
eval $sleep
|
||||
done;
|
||||
}
|
||||
alias try="loop "
|
||||
@@ -1219,10 +1256,21 @@
|
||||
mv -v ~/.var/app/com.google.AndroidStudio ~/TRASH/com.google.AndroidStudio-`date +"%Y%m%d"`
|
||||
}
|
||||
alias reset-android-studio="reset_android_studio "
|
||||
|
||||
function_follow: |
|
||||
function follow() {
|
||||
tail -n +1 -F "$@"
|
||||
}
|
||||
alias chase="follow "
|
||||
function_restart: |
|
||||
function restart() {
|
||||
prog="$1"
|
||||
sudo sv restart $prog
|
||||
tail -n 0 -F /var/log/$prog/current
|
||||
}
|
||||
alias reload="restart "
|
||||
|
||||
- name: General | Account Management | Users | Files | Common Variable
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
profile_common: |
|
||||
{{ export_path_additions }}
|
||||
{{ export_path_sbin }}
|
||||
@@ -1310,9 +1358,11 @@
|
||||
{{ process_notify_log }}
|
||||
{{ function_reconnect }}
|
||||
{{ function_reset_android_studio }}
|
||||
{{ function_follow }}
|
||||
{{ function_restart }}
|
||||
|
||||
- name: General | Account Management | Users | Files | .profile + .xsessionrc
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
{{ profile_common }}
|
||||
@@ -1321,8 +1371,9 @@
|
||||
echo "`date` - Ansible .profile loaded successfully!"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Aliases'
|
||||
state: present
|
||||
create: yes
|
||||
backup: no
|
||||
create: true
|
||||
backup: false
|
||||
mode: "0755"
|
||||
loop:
|
||||
- ".profile"
|
||||
- ".xprofile"
|
||||
@@ -1330,7 +1381,7 @@
|
||||
when: user_user.home != ""
|
||||
|
||||
- name: General | Account Management | Users | Files | .bashrc
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ item }}/.bashrc"
|
||||
block: |
|
||||
{{ rc_common }}
|
||||
@@ -1342,15 +1393,16 @@
|
||||
echo "`date` - Ansible .bashrc loaded successfully!"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Aliases'
|
||||
state: present
|
||||
create: yes
|
||||
backup: no
|
||||
create: true
|
||||
backup: false
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
when: user_root.home != "" and user_user.home != ""
|
||||
|
||||
- name: General | Account Management | Users | Files | .zshrc
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ item }}/.zshrc"
|
||||
block: |
|
||||
{{ rc_common }}
|
||||
@@ -1358,17 +1410,19 @@
|
||||
echo "`date` - Ansible .zshrc loaded successfully!"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Aliases'
|
||||
state: present
|
||||
create: yes
|
||||
backup: no
|
||||
create: true
|
||||
backup: false
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
when: user_root.home != "" and user_user.home != ""
|
||||
|
||||
- name: General | Account Management | Users | Files | Ownership
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0755'
|
||||
loop:
|
||||
- .bashrc
|
||||
@@ -1379,65 +1433,17 @@
|
||||
|
||||
|
||||
- name: General | Account Management | Users | Files | Helper Functions (Reset)
|
||||
shell: "rm -v {{ global_bin }}/*.function"
|
||||
ignore_errors: yes
|
||||
ansible.builtin.shell: "rm -v {{ global_bin }}/*.function"
|
||||
ignore_errors: true
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: General | Account Management | Users | Files | Helper Functions
|
||||
copy:
|
||||
ansible.builtin.copy:
|
||||
src: "{{ item }}"
|
||||
dest: "{{ global_bin }}"
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: 0755
|
||||
mode: "0755"
|
||||
with_fileglob:
|
||||
- "functions/*.function"
|
||||
|
||||
|
||||
# Shared Environment Setup #
|
||||
|
||||
- name: General | Account Management | Users | env-shared | Download / Update
|
||||
git:
|
||||
repo: https://git.hyperling.com/me/env-shared
|
||||
version: "{{ branch }}"
|
||||
dest: "{{ shared_rc_install_dir }}"
|
||||
clone: true
|
||||
force: true
|
||||
update: true
|
||||
#ignore_errors: yes
|
||||
|
||||
- name: General | Account Management | Users | env-shared | Install | .rc_shared
|
||||
copy:
|
||||
src: "{{ shared_rc_install_dir }}/rc_shared.sh"
|
||||
dest: "{{ item }}/.rc_shared"
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: 0755
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
#ignore_errors: yes
|
||||
when: user_root.home != "" and user_user.home != ""
|
||||
|
||||
- name: General | Account Management | Users | env-shared | Install | .vimrc
|
||||
copy:
|
||||
src: "{{ shared_rc_install_dir }}/vimrc.vim"
|
||||
dest: "{{ item }}/.vimrc"
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: 0755
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
#ignore_errors: yes
|
||||
when: user_root.home != "" and user_user.home != ""
|
||||
|
||||
- name: General | Account Management | Users | env-shared | Permissions
|
||||
file:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0755'
|
||||
loop:
|
||||
- .rc_shared
|
||||
- .vimrc
|
||||
#ignore_errors: yes
|
||||
@@ -8,24 +8,49 @@
|
||||
# $RANDOM / 100 can be up to about 320 seconds, or ~5 minutes.
|
||||
# This prevents multiple systems from hitting it at the exact same time.
|
||||
|
||||
- name: General | Cron | Ansible | Facts
|
||||
set_fact:
|
||||
ansible_cron_log: "~/{{ ansible_hostname }}.ansible-pull.`date +'%Y%m%d-%H%M%S'`.log"
|
||||
- name: General | Cron | Ansible | Facts 01
|
||||
ansible.builtin.set_fact:
|
||||
#ansible_cron_log: "~/{{ ansible_hostname }}.ansible-pull.`date +'%Y%m%d-%H%M%S'`.log"
|
||||
ansible_cron_log: "~/{{ ansible_hostname }}.ansible-pull.log"
|
||||
|
||||
- name: General | Cron | Ansible | Facts 02
|
||||
ansible.builtin.set_fact:
|
||||
ansible_cron_log_old: "{{ ansible_cron_log }}.old"
|
||||
|
||||
|
||||
- name: General | Cron | Ansible | Log | Delete Old
|
||||
ansible.builtin.file:
|
||||
path: "{{ ansible_cron_log_old }}"
|
||||
state: absent
|
||||
|
||||
- name: General | Cron | Ansible | Log | Check
|
||||
ansible.builtin.stat:
|
||||
path: "{{ ansible_cron_log }}"
|
||||
register: ansible_cron_log_check
|
||||
|
||||
- name: General | Cron | Ansible | Log | Rename [if >1MB]
|
||||
ansible.builtin.copy:
|
||||
src: "{{ ansible_cron_log }}"
|
||||
dest: "{{ ansible_cron_log_old }}"
|
||||
mode: "0755"
|
||||
when: ansible_cron_log_check.stat.exists
|
||||
and ansible_cron_log_check.stat.size > 1000000
|
||||
|
||||
|
||||
- name: General | Cron | Ansible | Create Subscriber Job
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: ansible
|
||||
name: "Ansible Sync"
|
||||
minute: "*/30"
|
||||
job: "bash -c 'sleep $(( $RANDOM / 20 )); sudo {{ ansible_pull_exec.stdout }} -v -o -U {{ git_repo_http }} --checkout {{ branch }} >{{ ansible_cron_log }} 2>&1'"
|
||||
job: "bash -c 'sleep $(( $RANDOM / 20 )); sudo {{ ansible_pull_exec.stdout }} -v -o -U {{ git_repo_http }} --checkout {{ branch }} >>{{ ansible_cron_log }} 2>&1'"
|
||||
state: present
|
||||
disabled: "{{ 'yes' if no_telem else 'no' }}"
|
||||
|
||||
- name: General | Cron | Ansible | Create Forced Weekly Subscriber Job
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: ansible
|
||||
name: "Ansible Weekly Forced Sync"
|
||||
special_time: weekly
|
||||
job: "bash -c 'sleep $(( $RANDOM / 1 )); sudo {{ ansible_pull_exec.stdout }} -v -U {{ git_repo_http }} --checkout {{ branch }} >{{ ansible_cron_log }} 2>&1'"
|
||||
job: "bash -c 'sleep $(( $RANDOM / 1 )); sudo {{ ansible_pull_exec.stdout }} -v -U {{ git_repo_http }} --checkout {{ branch }} >>{{ ansible_cron_log }} 2>&1'"
|
||||
state: present
|
||||
disabled: "{{ 'yes' if no_telem else 'no' }}"
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
# 20261002 - Hyperling
|
||||
# Move internet requiring code out of users.yml.
|
||||
|
||||
# Shared Environment Setup #
|
||||
|
||||
- name: General | Account Management | Users | env-shared | Download / Update
|
||||
ansible.builtin.git:
|
||||
repo: https://git.hyperling.com/me/env-shared
|
||||
version: "{{ branch }}"
|
||||
dest: "{{ shared_rc_install_dir }}"
|
||||
clone: true
|
||||
force: true
|
||||
update: true
|
||||
#ignore_errors: true
|
||||
|
||||
- name: General | Account Management | Users | env-shared | Install | .rc_shared
|
||||
copy:
|
||||
src: "{{ shared_rc_install_dir }}/rc_shared.sh"
|
||||
dest: "{{ item }}/.rc_shared"
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
#ignore_errors: true
|
||||
when: user_root.home != "" and user_user.home != ""
|
||||
|
||||
- name: General | Account Management | Users | env-shared | Install | .vimrc
|
||||
copy:
|
||||
src: "{{ shared_rc_install_dir }}/vimrc.vim"
|
||||
dest: "{{ item }}/.vimrc"
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
#ignore_errors: true
|
||||
when: user_root.home != "" and user_user.home != ""
|
||||
|
||||
- name: General | Account Management | Users | env-shared | Permissions
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
loop:
|
||||
- .rc_shared
|
||||
- .vimrc
|
||||
#ignore_errors: true
|
||||
@@ -2,13 +2,13 @@
|
||||
# Copy everything from PROJECT/files/scripts/ to /usr/local/bin/.
|
||||
|
||||
- name: General | Scripts | Install | Ensure Directory Exists
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: '{{ global_bin }}'
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: General | Scripts | Install | Copy Files
|
||||
copy:
|
||||
ansible.builtin.copy:
|
||||
src: 'scripts/'
|
||||
dest: "{{ global_bin }}/"
|
||||
owner: root
|
||||
@@ -16,10 +16,12 @@
|
||||
mode: '0755'
|
||||
|
||||
- name: General | Scripts | Install | Remove Old Scripts
|
||||
shell: |
|
||||
ansible.builtin.shell: |
|
||||
if [[ -e {{ global_bin }}/{{ item }} ]]; then
|
||||
rm -v {{ global_bin }}/{{ item }}
|
||||
fi
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
loop:
|
||||
- compress-video.sh
|
||||
- compress-images.sh
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Create file to easily push git changes and call SCM.
|
||||
|
||||
- name: General | Scripts | Root | scm.sh
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_root.home }}/bin/scm.sh"
|
||||
block: |
|
||||
# 20210211 - Make life easier!
|
||||
@@ -11,16 +11,11 @@
|
||||
marker_begin: "#!{{ bash_exec.stdout }}"
|
||||
marker_end: "exit 0"
|
||||
state: present
|
||||
create: yes
|
||||
|
||||
- name: General | Scripts | Root | scm.sh Permissions
|
||||
file:
|
||||
path: "{{ user_root.home }}/bin/scm.sh"
|
||||
create: true
|
||||
mode: '0755'
|
||||
|
||||
|
||||
- name: General | Scripts | Root | scm-dev.sh
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_root.home }}/bin/scm-dev.sh"
|
||||
block: |
|
||||
# 20210713 - Make life easier for development!
|
||||
@@ -41,9 +36,5 @@
|
||||
marker_begin: "#!{{ bash_exec.stdout }}"
|
||||
marker_end: "exit 0"
|
||||
state: present
|
||||
create: yes
|
||||
|
||||
- name: General | Scripts | Root | scm-dev.sh Permissions
|
||||
file:
|
||||
path: "{{ user_root.home }}/bin/scm-dev.sh"
|
||||
create: true
|
||||
mode: '0755'
|
||||
@@ -2,7 +2,7 @@
|
||||
# Create file to easily push git changes and call SCM.
|
||||
|
||||
- name: General | Scripts | User | scm.sh
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/bin/scm.sh"
|
||||
block: |
|
||||
# 20210211 - Make life easier!
|
||||
@@ -11,16 +11,16 @@
|
||||
marker_begin: "#!{{ bash_exec.stdout }}"
|
||||
marker_end: "exit 0"
|
||||
state: present
|
||||
create: yes
|
||||
create: true
|
||||
|
||||
- name: General | Scripts | User | scm.sh Permissions
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_user.home }}/bin/scm.sh"
|
||||
mode: '0755'
|
||||
|
||||
|
||||
- name: General | Scripts | User | scm-dev.sh
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/bin/scm-dev.sh"
|
||||
block: |
|
||||
# 20210713 - Make life easier for development!
|
||||
@@ -41,9 +41,9 @@
|
||||
marker_begin: "#!{{ bash_exec.stdout }}"
|
||||
marker_end: "exit 0"
|
||||
state: present
|
||||
create: yes
|
||||
create: true
|
||||
|
||||
- name: General | Scripts | User | scm-dev.sh Permissions
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_user.home }}/bin/scm-dev.sh"
|
||||
mode: '0755'
|
||||
@@ -3,13 +3,13 @@
|
||||
# Ensure the correct International AltGr keyboard setting is always chosen.
|
||||
|
||||
- name: General | Settings | Keyboard | Default Config
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: "/etc/default/keyboard"
|
||||
regexp: '{{ item.key }}'
|
||||
line: '{{ item.value }}'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
loop:
|
||||
#- { "key": '^[\#]?XKBMODEL', "value": 'XKBMODEL="pc105"'}
|
||||
- { "key": '^[\#]?XKBLAYOUT', "value": 'XKBLAYOUT="us"'}
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
## Cron ##
|
||||
|
||||
- name: General | Software | Services | CROND | Enable
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ crond }}"
|
||||
pattern: "{{ crond_pattern }}"
|
||||
state: started
|
||||
enabled: yes
|
||||
enabled: true
|
||||
when: ansible_virtualization_type != 'docker'
|
||||
and ansible_service_mgr != "runit"
|
||||
register: cron_status
|
||||
@@ -17,10 +17,10 @@
|
||||
delay: 3
|
||||
|
||||
- name: General | Software | Services | CROND | Enable (runit)
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ crond }}"
|
||||
state: started
|
||||
enabled: yes
|
||||
enabled: true
|
||||
when: ansible_virtualization_type != 'docker'
|
||||
and ansible_service_mgr == "runit"
|
||||
ignore_errors: true # Service module seems experimental for this init system.
|
||||
@@ -28,17 +28,18 @@
|
||||
## SSHD ##
|
||||
|
||||
- name: General | Software | Services | SSHD | Configure
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ sshd_config }}"
|
||||
regexp: '{{ item.key }}'
|
||||
line: '{{ item.value }} # MANAGED BY ANSIBLE'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
loop:
|
||||
- { "key": '^[\#]?AllowUsers', "value": 'AllowUsers {{ user }}'}
|
||||
- { "key": '^[\#]?PermitRootLogin', "value": 'PermitRootLogin no'}
|
||||
- { "key": '^[\#]?AllowTcpForwarding', "value": 'AllowTcpForwarding no'}
|
||||
- { "key": '^[\#]?AllowTcpForwarding', "value": 'AllowTcpForwarding yes'}
|
||||
- { "key": '^[\#]?ClientAliveInterval', "value": 'ClientAliveInterval 60'}
|
||||
- { "key": '^[\#]?ClientAliveCountMax', "value": 'ClientAliveCountMax 2'}
|
||||
- { "key": '^[\#]?Compression', "value": 'Compression no'}
|
||||
@@ -50,15 +51,17 @@
|
||||
- { "key": '^[\#]?X11Forwarding', "value": 'X11Forwarding no'}
|
||||
- { "key": '^[\#]?AllowAgentForwarding', "value": 'AllowAgentForwarding no'}
|
||||
- { "key": '^[\#]?PermitEmptyPasswords', "value": 'PermitEmptyPasswords no'}
|
||||
- { "key": '^[\#]?GatewayPorts', "value": 'GatewayPorts yes'}
|
||||
|
||||
- name: General | Software | Services | SSHD | Configure (PVE)
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ sshd_config }}"
|
||||
regexp: '{{ item.key }}'
|
||||
line: '{{ item.value }} # MANAGED BY ANSIBLE'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
loop:
|
||||
- { "key": '^[\#]?AllowUsers', "value": 'AllowUsers root {{ user }}'}
|
||||
- { "key": '^[\#]?PermitRootLogin', "value": 'PermitRootLogin yes'}
|
||||
@@ -66,11 +69,11 @@
|
||||
when: "'pve' in ansible_kernel"
|
||||
|
||||
- name: General | Software | Services | SSHD | Enable
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ sshd }}"
|
||||
pattern: "{{ sshd_pattern }}"
|
||||
state: reloaded
|
||||
enabled: yes
|
||||
enabled: true
|
||||
when: ansible_virtualization_type != 'docker'
|
||||
and ansible_service_mgr != "runit"
|
||||
register: sshd_status
|
||||
@@ -81,31 +84,31 @@
|
||||
## JournalCTL ##
|
||||
|
||||
- name: General | Software | Services | JournalCTL | Reduce Log Size
|
||||
shell: journalctl --vacuum-size=100M
|
||||
ansible.builtin.shell: journalctl --vacuum-size=100M
|
||||
when: ansible_system == "Linux"
|
||||
and ansible_service_mgr == "systemd"
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
## Bluetooth ##
|
||||
# Do people seriously depend on Bluetooth? Plug your devices in, silly!
|
||||
# Hehe, I use it now for a few rare things so disabling this for now.
|
||||
|
||||
#- name: General | Software | Services | Bluetooth | Disable
|
||||
# service:
|
||||
# ansible.builtin.service:
|
||||
# name: "{{ bluetooth }}"
|
||||
# pattern: "{{ bluetooth_pattern }}"
|
||||
# state: stopped
|
||||
# enabled: no
|
||||
# ignore_errors: yes
|
||||
# enabled: false
|
||||
# ignore_errors: true
|
||||
|
||||
## NTP ##
|
||||
|
||||
- name: General | Software | Services | NTP | Enable
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ ntp_server }}"
|
||||
pattern: "{{ ntp_server }}"
|
||||
state: started
|
||||
enabled: yes
|
||||
enabled: true
|
||||
when: ansible_virtualization_type != 'docker'
|
||||
and ansible_service_mgr != "runit"
|
||||
register: ntp_status
|
||||
@@ -123,27 +126,26 @@
|
||||
## Disable ##
|
||||
|
||||
- name: General | Software | Services | Disable
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ item.name }}"
|
||||
pattern: "{{ item.pattern }}"
|
||||
state: stopped
|
||||
enabled: no
|
||||
ignore_errors: yes
|
||||
enabled: false
|
||||
ignore_errors: true
|
||||
loop:
|
||||
- {name: "{{ cups }}" , pattern: "{{ cups_pattern }}"}
|
||||
- {name: "{{ cups_browse }}", pattern: "{{ cups_browse_pattern }}"}
|
||||
when: ansible_service_mgr != "runit"
|
||||
|
||||
- name: General | Software | Services | Disable (runit)
|
||||
shell: |
|
||||
if [[ -e {{ runit_service_dir }}/{{ item.name }} ]]; then
|
||||
ansible.builtin.shell: |
|
||||
if [[ -e {{ runit_service_dir }}/{{ item.name }} ]]; then
|
||||
rm -v {{ runit_service_dir }}/{{ item.name }}
|
||||
fi
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
loop:
|
||||
- {name: "{{ cups }}" }
|
||||
- {name: "{{ cups_pattern }}" }
|
||||
- {name: "{{ cups_browse }}" }
|
||||
- {name: "{{ cups_browse_pattern }}"}
|
||||
when: ansible_service_mgr == "runit"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
block:
|
||||
|
||||
- name: General | Software | Swap | Check For Swapfile
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ swap_file }}"
|
||||
get_attributes: false
|
||||
get_checksum: false
|
||||
@@ -18,7 +18,7 @@
|
||||
block:
|
||||
|
||||
- name: General | Software | Swap | Create Swapfile
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- dd if=/dev/zero of={{ swap_file }} bs={{ swap_block }}
|
||||
count={{ swap_count }} status=progress
|
||||
@@ -31,12 +31,12 @@
|
||||
|
||||
# NixOS's swap setup is handled in nixos.yml when ansible.nix is created.
|
||||
- name: General | Software | Swap | Add to FSTAB
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/fstab
|
||||
regexp: '^[\#]?{{ swap_file }}'
|
||||
line: '{{ swap_file }} none swap sw 0 0'
|
||||
state: present
|
||||
backup: yes
|
||||
backup: true
|
||||
when: ansible_distribution != "NixOS"
|
||||
|
||||
# Only run through this file if the ini has been changed from false.
|
||||
@@ -0,0 +1,110 @@
|
||||
---
|
||||
# 2026-10-17 Hyperling
|
||||
# Allow pushing a local port to a remote server automagically in a runit script.
|
||||
|
||||
# ssh -N -p SSH_PORT -R REMOTE_PORT:localhost:LOCAL_PORT USER@REMOTE_HOST -v
|
||||
|
||||
- name: General | Tunnel | Provisioned Variables
|
||||
ansible.builtin.debug:
|
||||
var: "{{ item }}"
|
||||
loop:
|
||||
- tunnel_local_port
|
||||
- tunnel_remote_host
|
||||
- tunnel_remote_port
|
||||
- tunnel_ssh_port
|
||||
|
||||
- name: General | Tunnel | Facts
|
||||
ansible.builtin.set_fact:
|
||||
tunnel_service_name: tunnel
|
||||
|
||||
- name: General | Tunnel | Packages [pacman]
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- openbsd-netcat
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: General | Tunnel | Packages [apt]
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- netcat-openbsd
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: General | Tunnel | runit
|
||||
block:
|
||||
|
||||
- name: General | Tunnel | runit | mkdir | /etc/sv
|
||||
ansible.builtin.file:
|
||||
path: /etc/sv/{{ tunnel_service_name }}
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | runit | mkdir | /etc/sv log
|
||||
ansible.builtin.file:
|
||||
path: /etc/sv/{{ tunnel_service_name }}/log
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | runit | mkdir | /var/log
|
||||
ansible.builtin.file:
|
||||
path: /var/log/{{ tunnel_service_name }}
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | runit | Script | Run
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ tunnel_service_name }}/run
|
||||
content: |
|
||||
#!/bin/sh -e
|
||||
exec 2>&1
|
||||
|
||||
# Health check to ensure connection does not go stale.
|
||||
while true; do
|
||||
sleep 300
|
||||
echo -n "RUN-LOOP: "
|
||||
nc -zv {{ tunnel_remote_host }} {{ tunnel_remote_port }}
|
||||
status="$?"
|
||||
echo "RUN-LOOP: Port check returned ${status}."
|
||||
if [[ "$status" != 0 ]]; then
|
||||
echo "RUN-LOOP: Restarting service."
|
||||
sv restart {{ tunnel_service_name }}
|
||||
fi
|
||||
echo "RUN-LOOP: Going back to sleep."
|
||||
done &
|
||||
|
||||
# Do not use `exec` here otherwise the loop may get killed.
|
||||
chpst -u {{ user }} ssh -v -N \
|
||||
-R {{ tunnel_remote_port }}:localhost:{{ tunnel_local_port }} \
|
||||
-p {{ tunnel_ssh_port }} {{ tunnel_remote_host }}
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | runit | Script | Finish
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ tunnel_service_name }}/finish
|
||||
content: |
|
||||
{{ runit_finish_sleep }}
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | runit | Script | Log
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ tunnel_service_name }}/log/run
|
||||
content: |
|
||||
#!/bin/sh -e
|
||||
exec svlogd -tt /var/log/{{ tunnel_service_name }}
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | runit | Script | Log Config
|
||||
ansible.builtin.copy:
|
||||
dest: /var/log/{{ tunnel_service_name }}/config
|
||||
content: |
|
||||
{{ runit_log_config_10mb }}
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | runit | Service | Enable
|
||||
ansible.builtin.service:
|
||||
name: "{{ tunnel_service_name }}"
|
||||
state: "{{ 'started' if tunnel_remote_host else 'stopped' }}"
|
||||
enabled: "{{ true if tunnel_remote_host else false }}"
|
||||
|
||||
when: ansible_service_mgr == "runit"
|
||||
@@ -3,30 +3,30 @@
|
||||
# Install the AUR on pacman-related distros.
|
||||
|
||||
- name: General | Software | AUR | Facts 01
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
aur_user: aurbuilder
|
||||
aur_build_dir: "{{ global_src }}"
|
||||
aur_helper: yay
|
||||
aur_helper_url: https://aur.archlinux.org/yay-bin.git
|
||||
|
||||
- name: General | Software | AUR | Facts 02
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
aur_helper_dir: "{{ aur_build_dir }}/{{ aur_helper }}"
|
||||
aur_sudoers: "/etc/sudoers.d/sudoers_{{ aur_user }}"
|
||||
|
||||
- name: General | Software | AUR | User
|
||||
user:
|
||||
ansible.builtin.user:
|
||||
name: "{{ aur_user }}"
|
||||
groups: wheel
|
||||
create_home: true
|
||||
|
||||
- name: General | Software | AUR | Sudoers
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ aur_sudoers }}"
|
||||
line: "{{ aur_user }} ALL=(ALL) NOPASSWD: /usr/bin/pacman"
|
||||
create: true
|
||||
mode: '0440'
|
||||
validate: 'visudo -cf %s'
|
||||
validate: 'visudo -cf %s'
|
||||
|
||||
- name: General | Software | AUR | Check
|
||||
command: "which {{ aur_helper }}"
|
||||
@@ -38,17 +38,17 @@
|
||||
block:
|
||||
|
||||
- name: General | Software | AUR | Install | Clone Repo
|
||||
git:
|
||||
ansible.builtin.git:
|
||||
repo: "{{ aur_helper_url }}"
|
||||
dest: "{{ aur_helper_dir }}"
|
||||
|
||||
- name: General | Software | AUR | Install | Change Permissions
|
||||
shell: "chown -Rc {{ aur_user }}:wheel {{ aur_helper_dir }}"
|
||||
ansible.builtin.shell: "chown -Rc {{ aur_user }}:wheel {{ aur_helper_dir }}"
|
||||
|
||||
- name: General | Software | AUR | Install | Build & Integrate
|
||||
shell: "cd {{ aur_helper_dir }} && makepkg -si --noconfirm"
|
||||
ansible.builtin.shell: "cd {{ aur_helper_dir }} && makepkg -si --noconfirm"
|
||||
become: true
|
||||
become_user: "{{ aur_user }}"
|
||||
changed_when: true
|
||||
changed_when: true
|
||||
|
||||
when: yay_check.rc != 0
|
||||
|
||||
@@ -2,18 +2,18 @@
|
||||
# Install Metasploit Framework
|
||||
|
||||
- name: General | Software | Metasploit | Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
metasploit_installer: msfinstall
|
||||
when: ansible_system in ("Linux", "Darwin")
|
||||
and pentesting == true
|
||||
and pentesting
|
||||
|
||||
- name: General | Software | Metasploit | Check Install Status
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: /usr/bin/msfconsole
|
||||
register: metasploit_status
|
||||
|
||||
- name: General | Software | Metasploit | Refresh Apt Files
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "mkdir -p /tmp/apt/"
|
||||
- "mv -fv /usr/share/keyrings/metasploit-framework.gpg /tmp/apt/metasploit-framework.gpg.old"
|
||||
@@ -21,11 +21,11 @@
|
||||
- "mv -fv /etc/apt/preferences.d/pin-metasploit.pref /tmp/apt/pin-metasploit.pref.old"
|
||||
when: ansible_system in ("Linux") and ansible_pkg_mgr == "apt"
|
||||
and not metasploit_status.stat.exists
|
||||
and pentesting == true
|
||||
and pentesting
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Software | Metasploit | Install
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > {{ metasploit_installer }}"
|
||||
- "chmod 755 {{ metasploit_installer }}"
|
||||
@@ -34,10 +34,10 @@
|
||||
- yes y | "{{ global_bin }}/{{ metasploit_installer }}"
|
||||
when: ansible_system in ("Linux", "Darwin")
|
||||
and not metasploit_status.stat.exists
|
||||
and pentesting == true
|
||||
and pentesting
|
||||
|
||||
- name: General | Software | Metasploit | Remove (Darwin)
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "/opt/metasploit-framework/bin/msfremove"
|
||||
when: ansible_system in ("Darwin")
|
||||
@@ -45,7 +45,7 @@
|
||||
and pentesting == false
|
||||
|
||||
- name: General | Software | Metasploit | Remove
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name: "metasploit-framework"
|
||||
state: absent
|
||||
when: ansible_system in ("Linux")
|
||||
|
||||
@@ -13,20 +13,21 @@
|
||||
###
|
||||
|
||||
- name: Nix Variables
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
nix_exe: ~/.deleteme.nix.sh
|
||||
|
||||
- name: Install Nix
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "curl -L https://nixos.org/nix/install > {{ nix_exe }}"
|
||||
- "chmod 755 {{ nix_exe }}"
|
||||
- "{{ nix_exe }} --daemon --yes"
|
||||
- "rm -v {{ nix_exe }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
|
||||
- name: Install Nix Software
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "nix-env -iA nixpkgs.lbry" # Installs, but doesnt launch?
|
||||
#$ lbry
|
||||
|
||||
@@ -3,20 +3,20 @@
|
||||
# This is also done in setup.sh if ansible is not found.
|
||||
|
||||
- name: General | Software | NixOS | Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
nixos_working_dir: ~/nixos-config-deleteme
|
||||
nixos_working_exe: activate.sh
|
||||
|
||||
- name: General | Software | NixOS | Facts [Swap]
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
nixos_swap: "swapDevices = [ { device = \"{{ swap_file }}\";} ];"
|
||||
when: swap_block != false
|
||||
|
||||
- name: General | Software | NixOS | Update Config Project
|
||||
shell: "files/scripts/nixos.sh -b {{ branch }}"
|
||||
ansible.builtin.shell: "files/scripts/nixos.sh -b {{ branch }}"
|
||||
|
||||
- name: General | Software | NixOS | Create Ansible Nix Config
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: /etc/nixos/ansible.nix
|
||||
block: |
|
||||
# This file was created by https://git.hyperling.com/me/env-ansible
|
||||
@@ -29,14 +29,14 @@
|
||||
{{ nixos_swap }}
|
||||
}
|
||||
state: present
|
||||
backup: yes
|
||||
create: yes
|
||||
backup: true
|
||||
create: true
|
||||
|
||||
|
||||
# Maybe do home manager here? Or should it be under Workstation? Or maybe
|
||||
# this is the spot where I start creating workstation.nix, server.nix, etc.
|
||||
#- name: General | Software | NixOS | Home Manager? *.nix file management?
|
||||
# shell:
|
||||
# ansible.builtin.shell:
|
||||
# loop:
|
||||
# - ???
|
||||
# - ???
|
||||
@@ -1,44 +1,93 @@
|
||||
---
|
||||
# Cross-platform package management.
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS (zypper)
|
||||
# They have zypper higher in the path, but it's really apt renamed.
|
||||
# Probably for "security", but package module does not use the ansible_pkg_mgr variable
|
||||
# so resetting the value to apt doesn't work. Just going to move it.
|
||||
shell: "mv `which zypper` `which zypper`.zz.`date +%Y%m%d`"
|
||||
register: parrotos_zypper_removed
|
||||
ignore_errors: yes
|
||||
- name: General | Software | Packages | Fix Parrot OS
|
||||
block:
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS | zypper
|
||||
# They have zypper higher in the path, but it's really apt renamed.
|
||||
# Probably for "security", but package module does not use the ansible_pkg_mgr variable
|
||||
# so resetting the value to apt doesn't work. Just going to move it.
|
||||
ansible.builtin.shell: "mv `which zypper` `which zypper`.zz.`date +%Y%m%d`"
|
||||
register: parrotos_zypper_removed
|
||||
changed_when: parrotos_zypper_removed.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS | zypper | Exit Incoming
|
||||
ansible.builtin.debug:
|
||||
msg: "A silly zypper file was renamed successfully. Please try running Ansible again."
|
||||
when: parrotos_zypper_removed is defined and not parrotos_zypper_removed.failed
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS | zypper | Exiting
|
||||
ansible.builtin.shell: exit 1
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: parrotos_zypper_removed is defined and not parrotos_zypper_removed.failed
|
||||
|
||||
# More Parrot OS junk. They have a command called update in /usr/bin. Doesn't
|
||||
# have sudo or anything in it. Hide it in preference for .bashrc update function.
|
||||
- name: General | Software | Packages | Fix Parrot OS | update
|
||||
ansible.builtin.shell: "mv `which update` `which update`.zz.`date +%Y%m%d`"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
when: ansible_distribution == "Parrot OS"
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS (zypper), Exit Incoming
|
||||
debug:
|
||||
msg: "A silly zypper file was renamed successfully. Please try running Ansible again."
|
||||
when: ansible_distribution == "Parrot OS" and parrotos_zypper_removed is defined and not parrotos_zypper_removed.failed
|
||||
- name: General | Software | Packages | pacman
|
||||
block:
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS (zypper), Exiting
|
||||
shell: exit 1
|
||||
when: ansible_distribution == "Parrot OS" and parrotos_zypper_removed is defined and not parrotos_zypper_removed.failed
|
||||
- name: General | Software | Packages | pacman | pacman.conf
|
||||
ansible.builtin.lineinfile:
|
||||
path: "/etc/pacman.conf"
|
||||
regexp: '{{ item.key }}'
|
||||
line: '{{ item.value }}'
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
loop:
|
||||
- { "key": '^[\#]?ParallelDownloads', "value": 'ParallelDownloads = 3'}
|
||||
|
||||
# More Parrot OS junk. They have a command called update in /usr/bin. Doesn't
|
||||
# have sudo or anything in it. Hide it in preference for .bashrc update function.
|
||||
- name: General | Software | Packages | Fix Parrot OS 2 (update)
|
||||
shell: "mv `which update` `which update`.zz.`date +%Y%m%d`"
|
||||
ignore_errors: yes
|
||||
when: ansible_distribution == "Parrot OS"
|
||||
# TBD / TODO: Do the mirrorlist files and distros based on facts in case ever using Arch, Manjaro, etc.
|
||||
# Same with the blocklist for sites like Berkeley which rate limit VPNs.
|
||||
- name: General | Software | Packages | pacman | Artix
|
||||
block:
|
||||
|
||||
- name: General | Software | Packages | pacman | Artix | rate-mirrors | Install
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- rate-mirrors
|
||||
state: present
|
||||
|
||||
- name: General | Software | Packages | pacman | Artix | rate-mirrors | Update Lists
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
{{ item }}
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
loop:
|
||||
- "sudo -u {{ user }} rate-mirrors artix | grep -v berkeley | tee /etc/pacman.d/mirrorlist"
|
||||
- "sudo -u {{ user }} rate-mirrors arch | grep -v berkeley | tee /etc/pacman.d/mirrorlist-arch"
|
||||
|
||||
when: ansible_service_mgr == "runit"
|
||||
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: General | Software | Packages | Cache Refresh (Apt and Pacman)
|
||||
package:
|
||||
update_cache: yes
|
||||
ansible.builtin.package:
|
||||
update_cache: true
|
||||
name: htop
|
||||
when: ansible_pkg_mgr in ["apt", "pacman"]
|
||||
|
||||
- name: General | Software | Packages | Cache Refresh (FreeBSD)
|
||||
shell: pkg update
|
||||
ansible.builtin.shell: pkg update
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
- name: General | Software | Packages | Install Software
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- bash
|
||||
- sudo
|
||||
@@ -68,19 +117,21 @@
|
||||
- "{{ alsa }}"
|
||||
- "{{ stress }}"
|
||||
- "{{ jq }}"
|
||||
- "{{ btop }}"
|
||||
- "{{ xkb }}"
|
||||
state: present
|
||||
|
||||
- name: General | Software | Packages | Install Software (DEV)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ microcode_amd }}"
|
||||
- "{{ microcode_intel }}"
|
||||
state: present
|
||||
when: branch == "dev"
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Software | Packages | Add Generic Kernel + Tools (Ubuntu)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- linux-image-generic
|
||||
- linux-headers-generic
|
||||
@@ -88,25 +139,25 @@
|
||||
- linux-tools-common
|
||||
state: present
|
||||
when: ansible_distribution == "Ubuntu"
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Software | Packages | Add Generic Kernel + Headers (Debian)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- linux-image-amd64
|
||||
- linux-headers-amd64
|
||||
state: present
|
||||
when: ansible_distribution == "Debian"
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Software | Packages | Install killall (Looking at you, Debian)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name: psmisc
|
||||
state: present
|
||||
when: ansible_distribution == "Debian"
|
||||
|
||||
- name: General | Software | Packages | Install "Bloat" (Looking at you, Arch Base)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- which
|
||||
- "{{ cron }}"
|
||||
@@ -115,7 +166,7 @@
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: General | Software | Packages | Install Fix (Looking at you, openSUSE)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
# openSUSE Tumbleweed comes without gnome-control-center being able to open
|
||||
# properly. Hopefully just a one-time accident but I wanted bleeding edge so I
|
||||
@@ -126,16 +177,8 @@
|
||||
state: present
|
||||
when: ansible_pkg_mgr in ("zypper")
|
||||
|
||||
- name: General | Software | Packages | Update Software (Disabled)
|
||||
package:
|
||||
name:
|
||||
- ansible
|
||||
- git
|
||||
state: latest
|
||||
when: 1 == 0
|
||||
|
||||
- name: General | Software | Packages | Remove Software
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- cowsay # Sorry ;)
|
||||
- chromium
|
||||
@@ -144,26 +187,26 @@
|
||||
|
||||
# Ubuntu still uses snap for critical components like GNOME, must keep.
|
||||
- name: General | Software | Packages | Disable Snap Daemon
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: snapd
|
||||
pattern: snapd
|
||||
state: stopped
|
||||
enabled: no
|
||||
enabled: false
|
||||
when: ansible_distribution != "Ubuntu"
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Software | Packages | Remove Snap (Besides Ubuntu)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- snapd
|
||||
state: absent
|
||||
when: ansible_distribution != "Ubuntu"
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Software | Packages | Other Debian Packages
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- usbutils
|
||||
state: present
|
||||
when: ansible_distribution in ("Debian")
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
# 20261006 Hyperling
|
||||
|
||||
# Allow ansible.builtin.service to be used on Artix similar to Devuan.
|
||||
- name: General | Software | runit | Fix Artix
|
||||
block:
|
||||
|
||||
- name: General | Software | runit | Fix Artix | Script Dir
|
||||
ansible.builtin.file:
|
||||
src: /etc/runit/sv
|
||||
dest: /etc/sv
|
||||
state: link
|
||||
force: true
|
||||
|
||||
- name: General | Software | runit | Fix Artix | Service Dir
|
||||
ansible.builtin.file:
|
||||
src: /etc/runit/runsvdir/default
|
||||
dest: /var/service
|
||||
state: link
|
||||
force: true
|
||||
|
||||
when: ansible_service_mgr == "runit"
|
||||
and ansible_pkg_mgr == "pacman"
|
||||
@@ -3,46 +3,46 @@
|
||||
# Preferably only on servers that don't already have postfix?
|
||||
|
||||
- name: Server | Sendmail | Variables
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
sendmail: sendmail
|
||||
sendmail_queue: sendmail_msp_queue
|
||||
|
||||
- name: Server | Sendmail | Check
|
||||
shell: which postfix
|
||||
ansible.builtin.shell: which postfix
|
||||
register: postfix
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: Server | Sendmail | Install
|
||||
package:
|
||||
name:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ sendmail }}"
|
||||
state: present
|
||||
when: postfix.failed
|
||||
|
||||
- name: Server | Sendmail | Configure
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: /etc/rc.conf
|
||||
block: |
|
||||
sendmail_enable="YES"
|
||||
sendmail_msp_queue_enable="YES"
|
||||
marker: "# {mark} MANAGED BY ANSIBLE - sendmail"
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
when: postfix.failed and ansible_system == "FreeBSD"
|
||||
|
||||
- name: Server | Sendmail | Enable + Start | Main
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ sendmail }}"
|
||||
pattern: "{{ sendmail }}"
|
||||
state: started
|
||||
enabled: yes
|
||||
enabled: true
|
||||
when: postfix.failed
|
||||
|
||||
- name: Server | Sendmail | Enable + Start | Queue
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ sendmail_queue }}"
|
||||
pattern: "{{ sendmail_queue }}"
|
||||
state: started
|
||||
enabled: yes
|
||||
enabled: true
|
||||
when: postfix.failed and ansible_system == "FreeBSD"
|
||||
@@ -5,7 +5,7 @@
|
||||
# Variables #
|
||||
|
||||
- name: General | Telegraf | Variables 1/4
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
telegraf_tar: telegraf-1.20.3_linux_amd64.tar.gz
|
||||
telegraf_path: /usr/local/bin
|
||||
telegraf_config_path: /usr/local/etc
|
||||
@@ -13,25 +13,25 @@
|
||||
telegraf_log: "{{ user_ansible.home }}/telegraf.log"
|
||||
|
||||
- name: General | Telegraf | Variables 2/4
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
telegraf_exec: "{{ telegraf_path }}/telegraf"
|
||||
telegraf_config: "{{ telegraf_config_path }}/telegraf.conf"
|
||||
|
||||
- name: General | Telegraf | Variables 3/4
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
telegraf_cmd: "{{ telegraf_exec }} --config {{ telegraf_config }} >> {{ telegraf_log }} 2>&1"
|
||||
|
||||
- name: General | Telegraf | Variables 4/4
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
telegraf_watcher: "killall telegraf; {{ telegraf_cmd }}"
|
||||
|
||||
- name: General | Telegraf | Variables | Linux
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
telegraf_input_temp: "[[inputs.temp]]"
|
||||
when: ansible_system == "Linux"
|
||||
|
||||
- name: General | Telegraf | Variables | FreeBSD
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
telegraf_input_temp: ""
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
@@ -40,14 +40,14 @@
|
||||
#### Dependencies #
|
||||
###
|
||||
###- name: General | Telegraf | Pre-Reqs
|
||||
### package:
|
||||
### ansible.builtin.package:
|
||||
### name: wget
|
||||
### when: ansible_system == "Linux"
|
||||
###
|
||||
#### Install #
|
||||
###
|
||||
###- name: General | Telegraf | Linux | Install
|
||||
### shell: "{{ item }}"
|
||||
### ansible.builtin.shell: "{{ item }}"
|
||||
### args:
|
||||
### chdir: "{{ ansible_env.HOME }}/Downloads/"
|
||||
### loop:
|
||||
@@ -61,22 +61,22 @@
|
||||
### when: ansible_system == "Linux"
|
||||
###
|
||||
###- name: General | Telegraf | FreeBSD | Install 1/2
|
||||
### shell: /usr/sbin/pwd_mkdb -p /etc/master.passwd
|
||||
### ansible.builtin.shell: /usr/sbin/pwd_mkdb -p /etc/master.passwd
|
||||
### when: ansible_system == "FreeBSD"
|
||||
###
|
||||
###- name: General | Telegraf | FreeBSD | Install 2/2
|
||||
### package:
|
||||
### ansible.builtin.package:
|
||||
### name: telegraf
|
||||
### when: ansible_system == "FreeBSD"
|
||||
###
|
||||
#### Configuration #
|
||||
###
|
||||
###- name: General | Telegraf | Config 1/2
|
||||
### shell: mv {{ telegraf_config }} ~/TRASH/
|
||||
### ignore_errors: yes
|
||||
### ansible.builtin.shell: mv {{ telegraf_config }} ~/TRASH/
|
||||
### ignore_errors: true
|
||||
###
|
||||
###- name: General | Telegraf | Config 2/2
|
||||
### blockinfile:
|
||||
### ansible.builtin.blockinfile:
|
||||
### path: "{{ telegraf_config }}"
|
||||
### block: |
|
||||
### [global_tags]
|
||||
@@ -158,19 +158,19 @@
|
||||
###
|
||||
### marker: '# {mark} MANAGED BY ANSIBLE - telegraf.yml'
|
||||
### state: present
|
||||
### create: yes
|
||||
### create: true
|
||||
|
||||
# Run #
|
||||
|
||||
- name: General | Telegraf | Schedule
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: "{{ telegraf_user }}"
|
||||
name: "{{ item.name }}"
|
||||
job: "{{ item.command }}"
|
||||
special_time: "{{ item.freq }}"
|
||||
state: present
|
||||
#disabled: "{{ 'yes' if no_telem else 'no' }}"
|
||||
disabled: yes # 2024-01-25, Downsizing again and will not have Graphana.
|
||||
disabled: true # 2024-01-25, Downsizing again and will not have Graphana.
|
||||
loop:
|
||||
- { "name": "Telegraf Reboot Job" , "freq": "reboot", "command": "{{ telegraf_cmd }}"}
|
||||
- { "name": "Telegraf Keep-Alive Job", "freq": "hourly", "command": "{{ telegraf_watcher }}"}
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
# 20261002 - Hyperling
|
||||
# Check whether we're connected to the internet and skip certain playbooks if not.
|
||||
|
||||
- name: General | Tests | Internet | Facts 01
|
||||
ansible.builtin.set_fact:
|
||||
internet: true
|
||||
internet_time: 10
|
||||
|
||||
- name: General | Tests | Internet | Check
|
||||
ansible.builtin.wait_for:
|
||||
host: archlinux.org
|
||||
port: 443
|
||||
state: started
|
||||
timeout: "{{ internet_time }}"
|
||||
register: internet_check
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Tests | Internet | Facts 02
|
||||
ansible.builtin.set_fact:
|
||||
internet: "{{ internet_check is success }}"
|
||||
|
||||
- name: General | Tests | Internet | Message
|
||||
ansible.builtin.debug:
|
||||
msg: "WARNING: Not connected to the Internet, only running for offline playbooks."
|
||||
when: not internet
|
||||
|
||||
- name: General | Tests | Internet | Sleep
|
||||
ansible.builtin.command: "sleep {{ internet_time }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: not internet
|
||||
@@ -3,14 +3,14 @@
|
||||
# Ensure an existing run is not active, otherwise bail.
|
||||
|
||||
- name: General | Tests | Existing Run | Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
lock_file: "/tmp/ansible-playbook.lock"
|
||||
|
||||
- name: General | Tests | Existing Run | Check
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ lock_file }}"
|
||||
register: lock_exists
|
||||
|
||||
- name: General | Tests | Existing Run | Exit
|
||||
meta: end_play
|
||||
ansible.builtin.meta: end_play
|
||||
when: lock_exists.stat.exists
|
||||
@@ -3,16 +3,16 @@
|
||||
# Ensure an existing run is not active, otherwise bail.
|
||||
|
||||
- name: General | Tests | Existing Run | Lock | Create
|
||||
shell: "date +'%Y-%m-%d %H:%M:%S' >> {{lock_file }}"
|
||||
ansible.builtin.shell: "date +'%Y-%m-%d %H:%M:%S' >> {{lock_file }}"
|
||||
|
||||
|
||||
- name: General | Tests | Existing Run | Lock | Create
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
name: "{{ lock_file }}"
|
||||
mode: '0777'
|
||||
|
||||
- name: General | Tests | Existing Run | Lock | Create | Check
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ lock_file }}"
|
||||
register: lock_exists
|
||||
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
# Ensure an existing run is not active, otherwise bail.
|
||||
|
||||
- name: General | Tests | Existing Run | Lock | Remove
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
name: "{{ lock_file }}"
|
||||
state: absent
|
||||
|
||||
- name: General | Tests | Existing Run | Lock | Remove | Check
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ lock_file }}"
|
||||
register: lock_exists
|
||||
|
||||
|
||||
@@ -2,45 +2,45 @@
|
||||
# Lynis hardness check.
|
||||
|
||||
- name: General | Tests | Lynis | Set Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
lynis_file: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.{{ lynis_report }}"
|
||||
|
||||
- name: General | Tests | Lynis | Set Facts 2
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
lynis_temp_file: "{{ lynis_file }}.tmp"
|
||||
|
||||
- name: General | Tests | Lynis | Install
|
||||
git:
|
||||
ansible.builtin.git:
|
||||
repo: https://github.com/CISOfy/lynis
|
||||
dest: "{{ lynis_install_dir }}"
|
||||
clone: true
|
||||
force: true
|
||||
update: true
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Tests | Lynis | Ensure Permissions (Looking at you Parrot OS!)
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ lynis_install_dir }}"
|
||||
state: directory
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
recurse: yes
|
||||
recurse: true
|
||||
|
||||
- name: General | Tests | Lynis | Ensure Permissions 2
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ lynis_install_dir }}/lynis"
|
||||
mode: '0755'
|
||||
|
||||
- name: General | Tests | Lynis | Ensure Folder Permissions
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ lynis_install_dir }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
recurse: no
|
||||
recurse: false
|
||||
|
||||
- name: General | Tests | Lynis | Run System Audit
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "./lynis audit system --no-colors > {{ lynis_temp_file }} 2>&1"
|
||||
- "mv {{ lynis_temp_file }} {{ lynis_file }}"
|
||||
@@ -49,6 +49,6 @@
|
||||
chdir: "{{ lynis_install_dir }}"
|
||||
|
||||
- name: General | Tests | Lynis | Make Report Readable
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ lynis_file }}"
|
||||
mode: '0644'
|
||||
@@ -2,16 +2,16 @@
|
||||
# Nmap port test
|
||||
|
||||
- name: General | Tests | nmap | Set Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
nmap_file: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.{{ nmap_report }}"
|
||||
nmap_separator: "\n*******************************\n"
|
||||
|
||||
- name: General | Tests | nmap | Set Facts 2
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
nmap_temp_file: "{{ nmap_file }}.tmp"
|
||||
|
||||
- name: General | Tests | nmap | Create Report
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "date > {{ nmap_temp_file }}"
|
||||
- "printf '{{ nmap_separator }}' >> {{ nmap_temp_file }}"
|
||||
@@ -25,6 +25,6 @@
|
||||
- "mv {{ nmap_temp_file }} {{ nmap_file }}"
|
||||
|
||||
- name: General | Tests | nmap | Make Viewable
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ nmap_file }}"
|
||||
mode: '0644'
|
||||
@@ -2,30 +2,30 @@
|
||||
# List all the services under the Reports folder.
|
||||
|
||||
- name: General | Tests | Services | Set Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
services_report_file: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.services.txt"
|
||||
services_enabled_file: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.services-enabled.txt"
|
||||
services_command: "echo 'Service Manager {{ ansible_service_mgr }} Not Recognized'"
|
||||
|
||||
- name: General | Tests | Services | Set Facts | SystemD
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
services_command: "systemctl list-unit-files"
|
||||
when: ansible_service_mgr == "systemd"
|
||||
|
||||
- name: General | Tests | Services | Set Facts | runit
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
services_command: 'for s in {{ runit_service_dir }}/*; do sv status "$s"; done'
|
||||
when: ansible_service_mgr == "runit"
|
||||
|
||||
- name: General | Tests | Services | Create Main Report
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "date > {{ services_report_file }}"
|
||||
- "echo '\n-= {{ services_command }} =-\n' >> {{ services_report_file }}"
|
||||
- "{{ services_command }} >> {{ services_report_file }}"
|
||||
|
||||
- name: General | Tests | Services | Create Enabled Report
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "date > {{ services_enabled_file }}"
|
||||
- "echo '\n-= Enabled + Sorted =-\n' >> {{ services_enabled_file }}"
|
||||
@@ -33,6 +33,6 @@
|
||||
when: ansible_service_mgr == "systemd"
|
||||
|
||||
- name: General | Tests | Services | Make Viewable
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ services_report_file }}"
|
||||
mode: '0644'
|
||||
@@ -0,0 +1,179 @@
|
||||
---
|
||||
|
||||
####### Lock #######
|
||||
|
||||
# Ensure a process is not already running.
|
||||
- name: Main | Lock
|
||||
block:
|
||||
|
||||
- name: Main | Lock | Check
|
||||
ansible.builtin.include_tasks: tasks/general/tests/lock_check.yml
|
||||
|
||||
- name: Main | Lock | Create
|
||||
ansible.builtin.include_tasks: tasks/general/tests/lock_create.yml
|
||||
|
||||
####### Gather #######
|
||||
|
||||
# Load facts for all systems.
|
||||
- name: Main | Gather
|
||||
block:
|
||||
|
||||
- name: Main | Gather | Facts
|
||||
ansible.builtin.include_tasks: facts/general/gather.yml
|
||||
|
||||
- name: Main | Gather | Account Management
|
||||
ansible.builtin.include_tasks: tasks/general/acct_mgmt/provision_config.yml
|
||||
|
||||
- name: Main | Gather | System
|
||||
ansible.builtin.include_tasks: facts/general/system.yml
|
||||
|
||||
- name: Main | Gather | Package
|
||||
ansible.builtin.include_tasks: facts/general/package.yml
|
||||
|
||||
- name: Main | Gather | Service
|
||||
ansible.builtin.include_tasks: facts/general/service.yml
|
||||
|
||||
- name: Main | Gather | User
|
||||
ansible.builtin.include_tasks: facts/general/user.yml
|
||||
|
||||
- name: Main | Gather | Internet Check
|
||||
ansible.builtin.include_tasks: tasks/general/tests/internet_check.yml
|
||||
|
||||
####### Start #######
|
||||
|
||||
- name: Main | Start
|
||||
block:
|
||||
|
||||
- name: Main | Start | Notify
|
||||
ansible.builtin.include_tasks: tasks/general/acct_mgmt/notify.yml
|
||||
vars:
|
||||
notify_message: "Provisioning Started"
|
||||
|
||||
when: workstation
|
||||
|
||||
####### NixOS #######
|
||||
|
||||
# Install the .nix files and do a little data setup.
|
||||
- name: Main | NixOS
|
||||
block:
|
||||
|
||||
- name: Main | NixOS | Config
|
||||
ansible.builtin.include_tasks: tasks/general/software/nixos.yml
|
||||
|
||||
# TBD if we are going to use this many, then just have IF statements
|
||||
# and use blocks within the General area for NixOS vs not-NixOS.
|
||||
- name: Main | NixOS | Swap
|
||||
ansible.builtin.include_tasks: tasks/general/software/swap.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/acct_mgmt/groups.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/acct_mgmt/users.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/acct_mgmt/sudo.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/acct_mgmt/doas.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/scripts/root.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/scripts/user.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/scripts/install.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/cron/ansible.yml
|
||||
|
||||
# psutil does not work in NixOS. Cannot figure out how to fix it. Maybe
|
||||
# time to start looking into home-manager but still not wanting to
|
||||
# maintain two different GNOME setups. HMMMM!
|
||||
- ansible.builtin.include_tasks: tasks/workstation/shared/settings/gnome.yml
|
||||
when: workstation
|
||||
|
||||
# Try including these. Really need to get NixOS working with the rest!
|
||||
#- ansible.builtin.include_tasks: tasks/general/software/telegraf.yml # "Could not find a module for unknown.""
|
||||
- ansible.builtin.include_tasks: tasks/general/tests/services.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/tests/lynis.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/general/tests/nmap.yml
|
||||
|
||||
- name: Main | NixOS | Complete
|
||||
ansible.builtin.meta: end_play
|
||||
|
||||
when: ansible_distribution == "NixOS"
|
||||
|
||||
####### General #######
|
||||
|
||||
# Basic setup for all enabled systems.
|
||||
- name: Main | General
|
||||
block:
|
||||
|
||||
- name: Main | General | Software | runit
|
||||
ansible.builtin.include_tasks: tasks/general/software/runit.yml
|
||||
|
||||
- name: Main | General | Software | Packages
|
||||
ansible.builtin.include_tasks: tasks/general/software/packages.yml
|
||||
when: internet
|
||||
|
||||
- name: Main | General | Software | AUR
|
||||
ansible.builtin.include_tasks: tasks/general/software/aur.yml
|
||||
when: internet and ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: Main | General | Software | Sendmail
|
||||
ansible.builtin.include_tasks: tasks/general/software/sendmail.yml
|
||||
when: ansible_system == "FreeBSD"
|
||||
and internet
|
||||
|
||||
- name: Main | General | Software | Metasploit
|
||||
ansible.builtin.include_tasks: tasks/general/software/metasploit.yml
|
||||
when: internet
|
||||
|
||||
# Gather again in case missing programs have now been installed.
|
||||
- name: Main | General | Facts [Again]
|
||||
ansible.builtin.include_tasks: facts/general/gather.yml
|
||||
|
||||
- name: Main | General | Settings | Swap
|
||||
ansible.builtin.include_tasks: tasks/general/settings/swap.yml
|
||||
|
||||
- name: Main | General | Settings | Services
|
||||
ansible.builtin.include_tasks: tasks/general/settings/services.yml
|
||||
|
||||
- name: Main | General | Settings | Tunnel
|
||||
ansible.builtin.include_tasks: tasks/general/settings/tunnel.yml
|
||||
|
||||
- name: Main | General | Settings | Keyboard
|
||||
ansible.builtin.include_tasks: tasks/general/settings/keyboard.yml
|
||||
|
||||
- name: Main | General | Accounts | Groups
|
||||
ansible.builtin.include_tasks: tasks/general/acct_mgmt/groups.yml
|
||||
|
||||
- name: Main | General | Accounts | Users
|
||||
ansible.builtin.include_tasks: tasks/general/acct_mgmt/users.yml
|
||||
|
||||
- name: Main | General | Accounts | sudo
|
||||
ansible.builtin.include_tasks: tasks/general/acct_mgmt/sudo.yml
|
||||
|
||||
- name: Main | General | Accounts | doas
|
||||
ansible.builtin.include_tasks: tasks/general/acct_mgmt/doas.yml
|
||||
when: internet
|
||||
|
||||
- name: Main | General | Scripts | Root
|
||||
ansible.builtin.include_tasks: tasks/general/scripts/root.yml
|
||||
|
||||
- name: Main | General | Scripts | User
|
||||
ansible.builtin.include_tasks: tasks/general/scripts/user.yml
|
||||
|
||||
- name: Main | General | Scripts | Local
|
||||
ansible.builtin.include_tasks: tasks/general/scripts/install.yml
|
||||
|
||||
- name: Main | General | Scripts | env-shared
|
||||
ansible.builtin.include_tasks: tasks/general/scripts/env-shared.yml
|
||||
when: internet
|
||||
|
||||
- name: Main | General | Cron | Ansible
|
||||
ansible.builtin.include_tasks: tasks/general/cron/ansible.yml
|
||||
|
||||
# TODO Need to refactor. Maybe tasks/general/cron/freebsd.yml
|
||||
- name: Main | General | Cron | Ansible [FreeBSD]
|
||||
ansible.builtin.include_tasks: tasks/workstation/freebsd/cron/ansible.yml
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
when: provision
|
||||
@@ -4,20 +4,20 @@
|
||||
## Gather ##
|
||||
|
||||
- name: Miner | Account Management | Gather | Find Root Directory
|
||||
shell: cd ~; pwd
|
||||
ansible.builtin.shell: cd ~; pwd
|
||||
register: root_home
|
||||
|
||||
|
||||
## Runner ##
|
||||
|
||||
- name: Miner | Account Management | Users | MFN
|
||||
user:
|
||||
ansible.builtin.user:
|
||||
name: mfn
|
||||
comment: Miner Forty Niner
|
||||
system: yes
|
||||
groups:
|
||||
system: true
|
||||
groups:
|
||||
- video
|
||||
- render
|
||||
append: yes
|
||||
append: true
|
||||
shell: "{{ bash_exec.stdout }}"
|
||||
register: user_mfn
|
||||
@@ -4,23 +4,23 @@
|
||||
## Performance ##
|
||||
|
||||
- name: Miner | Account Management | Cron | Ansible | Daily Performance Reboot
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: ansible
|
||||
name: Daily Performance Reboot
|
||||
job: sudo reboot
|
||||
special_time: daily
|
||||
state: present
|
||||
disabled: no
|
||||
disabled: false
|
||||
|
||||
|
||||
## Security ##
|
||||
|
||||
- name: Miner | Account Management | Cron | Ansible | Daily Security Update [apt]
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: ansible
|
||||
name: Daily Security Update
|
||||
job: sudo apt update && sudo apt dist-upgrade -y
|
||||
special_time: reboot
|
||||
state: present
|
||||
disabled: yes
|
||||
disabled: true
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
@@ -4,7 +4,7 @@
|
||||
## Mining ##
|
||||
|
||||
- name: Miner | Account Management | Cron | MFN | Stop Jobs
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: mfn
|
||||
name: "Stop {{ item.name }}"
|
||||
minute: "*/5"
|
||||
@@ -14,7 +14,7 @@
|
||||
loop: "{{ miners }}"
|
||||
|
||||
- name: Miner | Account Management | Cron | MFN | Start Jobs
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: mfn
|
||||
name: "Start {{ item.name }}"
|
||||
job: "{{ item.command }}"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Print out all inventory flags associated to mining.
|
||||
|
||||
- name: Miner | DEBUG | Inventory Variables
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
var: "{{ item }}"
|
||||
loop:
|
||||
- amdgpu
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
|
||||
## Step 0/3: Dependencies ##
|
||||
- name: Miner | Driver | AMDGPU | Variables
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
amdgpu_cron_job: AMDGPU - Need To Finish Installation
|
||||
amdgpu_cron_cmd: "{{ root_home.stdout }}/scm.sh"
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Install Dependencies
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- dkms
|
||||
- mesa-common-dev
|
||||
@@ -16,42 +16,42 @@
|
||||
state: present
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Set GRUB Timer
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/default/grub
|
||||
regexp: '^GRUB_TIMEOUT='
|
||||
line: 'GRUB_TIMEOUT=3'
|
||||
state: present
|
||||
backup: yes
|
||||
backup: true
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Remove Previous Run's Cron Job
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: root
|
||||
name: "{{ amdgpu_cron_job }}"
|
||||
state: absent
|
||||
|
||||
# Tests
|
||||
- name: Miner | Driver | AMDGPU | Check If GA Kernel Installed
|
||||
shell: 'uname --kernel-release | grep 5.4.0-65-generic'
|
||||
ansible.builtin.shell: 'uname --kernel-release | grep 5.4.0-65-generic'
|
||||
register: ga_kernel
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Check If HWE Kernel Installed
|
||||
shell: 'apt search linux-image-5.8.0-* | grep -c installed'
|
||||
ansible.builtin.shell: 'apt search linux-image-5.8.0-* | grep -c installed'
|
||||
register: hwe_kernel
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
#- name: Miner | Driver | AMDGPU | Check If All Driver Installed
|
||||
# shell: 'which amdgpu-uninstall'
|
||||
# ansible.builtin.shell: 'which amdgpu-uninstall'
|
||||
# register: amdgpu_install
|
||||
# ignore_errors: yes
|
||||
# ignore_errors: true
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Check If Pro Driver Installed
|
||||
shell: 'amdgpu-pro-uninstall -y'
|
||||
ansible.builtin.shell: 'amdgpu-pro-uninstall -y'
|
||||
register: amdgpu_install
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: Miner | Driver | AMDGPU | DEBUG
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
var: "{{ item }}"
|
||||
loop:
|
||||
- ga_kernel
|
||||
@@ -62,11 +62,11 @@
|
||||
|
||||
## Step 1/3: Get Correct Kernel ##
|
||||
- name: Miner | Driver | AMDGPU | Install Recommended GA Kernel
|
||||
shell: apt install --install-recommends linux-generic
|
||||
ansible.builtin.shell: apt install --install-recommends linux-generic
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Install Specific GA Kernel For Booting
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- linux-headers-5.4.0-65
|
||||
- linux-headers-5.4.0-65-generic
|
||||
@@ -77,30 +77,30 @@
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Prepare GRUB To Boot GA Kernel
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/default/grub
|
||||
regexp: '^GRUB_DEFAULT='
|
||||
line: 'GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.4.0-65-generic"'
|
||||
state: present
|
||||
backup: yes
|
||||
backup: true
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Update GRUB
|
||||
shell: update-grub
|
||||
ansible.builtin.shell: update-grub
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Prepare Cron Job To SCM
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: root
|
||||
name: "{{ amdgpu_cron_job }}"
|
||||
special_time: reboot
|
||||
job: "{{ amdgpu_cron_cmd }}"
|
||||
state: present
|
||||
disabled: no
|
||||
disabled: false
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Reboot To GA Kernel
|
||||
shell: reboot
|
||||
ansible.builtin.shell: reboot
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed
|
||||
|
||||
- pause:
|
||||
@@ -111,7 +111,7 @@
|
||||
|
||||
## Step 2/3: Remove Incorrect Kernels ##
|
||||
- name: Miner | Driver | AMDGPU | Remove Bad Kernels
|
||||
shell: "apt remove --purge linux-generic-hwe-20.04 \
|
||||
ansible.builtin.shell: "apt remove --purge linux-generic-hwe-20.04 \
|
||||
linux-oem-20.04 \
|
||||
linux-hwe-* \
|
||||
linux-oem-* \
|
||||
@@ -121,36 +121,36 @@
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0"
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Update + Clean System
|
||||
shell: "apt update; apt dist-upgrade -y; apt autoremove --purge -y"
|
||||
ansible.builtin.shell: "apt update; apt dist-upgrade -y; apt autoremove --purge -y"
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0"
|
||||
|
||||
# This is to ensure we can test adding `apt install --install-recommends linux-generic` later
|
||||
- name: Miner | Driver | AMDGPU | Boot Default Kernel
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/default/grub
|
||||
regexp: '^GRUB_DEFAULT='
|
||||
line: 'GRUB_DEFAULT=0'
|
||||
state: present
|
||||
backup: yes
|
||||
backup: true
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0"
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Update GRUB
|
||||
shell: update-grub
|
||||
ansible.builtin.shell: update-grub
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0"
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Prepare Cron Job To SCM
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: root
|
||||
name: "{{ amdgpu_cron_job }}"
|
||||
special_time: reboot
|
||||
job: "{{ amdgpu_cron_cmd }}"
|
||||
state: present
|
||||
disabled: no
|
||||
disabled: false
|
||||
when: amdgpu_install.failed and hwe_kernel.stdout != "0"
|
||||
|
||||
# This reboot may not be necessary.
|
||||
#- name: Miner | Driver | AMDGPU | Reboot To Ensure GA Is 0
|
||||
# shell: reboot
|
||||
# ansible.builtin.shell: reboot
|
||||
# when: amdgpu_install.failed and hwe_kernel.stdout != "0"
|
||||
#
|
||||
#- pause:
|
||||
@@ -161,34 +161,34 @@
|
||||
|
||||
## Step 3/3: Install AMD PRO Driver ##
|
||||
- name: Miner | Driver | AMDGPU | Download Driver
|
||||
shell: 'scp {{ user }}@leet:InstallFiles/Drivers/amdgpu-pro-20.45-1188099-ubuntu-20.04.tar.xz {{ root_home.stdout }}/Downloads/'
|
||||
ansible.builtin.shell: 'scp {{ user }}@leet:InstallFiles/Drivers/amdgpu-pro-20.45-1188099-ubuntu-20.04.tar.xz {{ root_home.stdout }}/Downloads/'
|
||||
when: amdgpu_install.failed or "1" == "1"
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Extract Tarball
|
||||
shell: 'cd {{ root_home.stdout }}/Downloads; tar -xvf amdgpu-pro-20.45-1188099-ubuntu-20.04.tar.xz'
|
||||
ansible.builtin.shell: 'cd {{ root_home.stdout }}/Downloads; tar -xvf amdgpu-pro-20.45-1188099-ubuntu-20.04.tar.xz'
|
||||
when: amdgpu_install.failed or "1" == "1"
|
||||
|
||||
## Only one driver set can exist at a time! ##
|
||||
#- name: Miner | Driver | AMDGPU | Install AMDGPU All Driver
|
||||
# shell: 'cd {{ root_home.stdout }}/Downloads/amdgpu-pro-20.45-1188099-ubuntu-20.04; ./amdgpu-install -y'
|
||||
# ansible.builtin.shell: 'cd {{ root_home.stdout }}/Downloads/amdgpu-pro-20.45-1188099-ubuntu-20.04; ./amdgpu-install -y'
|
||||
# when: amdgpu_install.failed
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Install AMDGPU-Pro Driver
|
||||
shell: 'cd {{ root_home.stdout }}/Downloads/amdgpu-pro-20.45-1188099-ubuntu-20.04; ./amdgpu-pro-install -y --opencl=pal,legacy'
|
||||
ansible.builtin.shell: 'cd {{ root_home.stdout }}/Downloads/amdgpu-pro-20.45-1188099-ubuntu-20.04; ./amdgpu-pro-install -y --opencl=pal,legacy'
|
||||
when: amdgpu_install.failed or "1" == "1"
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Prepare Cron Job To SCM
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: root
|
||||
name: "{{ amdgpu_cron_job }}"
|
||||
special_time: reboot
|
||||
job: "{{ amdgpu_cron_cmd }}"
|
||||
state: present
|
||||
disabled: no
|
||||
disabled: false
|
||||
when: amdgpu_install.failed
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Reboot To GA Kernel
|
||||
shell: reboot
|
||||
ansible.builtin.shell: reboot
|
||||
when: amdgpu_install.failed
|
||||
|
||||
- pause:
|
||||
@@ -199,10 +199,10 @@
|
||||
|
||||
## We're done! ##
|
||||
- name: Miner | Driver | AMDGPU | Test Driver
|
||||
shell: clinfo -l
|
||||
ansible.builtin.shell: clinfo -l
|
||||
register: clinfo
|
||||
|
||||
- name: Miner | Driver | AMDGPU | Test Results
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
var: clinfo
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
@@ -3,86 +3,86 @@
|
||||
|
||||
## Dependencies ##
|
||||
- name: Miner | Software | Ethminer | Install Dependencies
|
||||
package:
|
||||
name:
|
||||
- build-essential
|
||||
- dkms
|
||||
- cmake
|
||||
- perl
|
||||
- libdbus-1-dev
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- build-essential
|
||||
- dkms
|
||||
- cmake
|
||||
- perl
|
||||
- libdbus-1-dev
|
||||
- mesa-common-dev
|
||||
state: present
|
||||
|
||||
- name: Miner | Software | Ethminer | Add PPA
|
||||
apt_repository:
|
||||
apt_repository:
|
||||
repo: ppa:ethereum/ethereum
|
||||
update_cache: yes
|
||||
update_cache: true
|
||||
state: present
|
||||
|
||||
- name: Miner | Software | Ethminer | Install Ethereum
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name: ethereum
|
||||
state: present
|
||||
|
||||
|
||||
## Test ##
|
||||
- name: Miner | Software | Ethminer | Test If Installed
|
||||
shell: "which ethminer"
|
||||
ansible.builtin.shell: "which ethminer"
|
||||
register: ethminer_install
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
|
||||
## Download ##
|
||||
- name: Miner | Software | Ethminer | Remove Git Repo
|
||||
shell: rm -rf ethminer
|
||||
ansible.builtin.shell: rm -rf ethminer
|
||||
args:
|
||||
chdir: "{{ root_home.stdout }}/Downloads"
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
when: ethminer_install.failed
|
||||
|
||||
- name: Miner | Software | Ethminer | Clone Git Repo
|
||||
shell: git clone https://github.com/ethereum-mining/ethminer.git
|
||||
ansible.builtin.shell: git clone https://github.com/ethereum-mining/ethminer.git
|
||||
args:
|
||||
chdir: "{{ root_home.stdout }}/Downloads"
|
||||
when: ethminer_install.failed
|
||||
|
||||
- name: Miner | Software | Ethminer | Update Repo's Repos
|
||||
shell: git submodule update --init --recursive
|
||||
ansible.builtin.shell: git submodule update --init --recursive
|
||||
args:
|
||||
chdir: "{{ root_home.stdout }}/Downloads/ethminer"
|
||||
when: ethminer_install.failed
|
||||
|
||||
- name: Miner | Software | Ethminer | Create Build Folder
|
||||
shell: mkdir -p build
|
||||
ansible.builtin.shell: mkdir -p build
|
||||
args:
|
||||
chdir: "{{ root_home.stdout }}/Downloads/ethminer"
|
||||
when: ethminer_install.failed
|
||||
|
||||
- name: Miner | Software | Ethminer | Default Flags
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
opencl_flag: "OFF"
|
||||
cuda_flag: "OFF"
|
||||
dbus_flag: "OFF"
|
||||
sys_opencl_flag: "ON"
|
||||
|
||||
- name: Miner | Software | Ethminer | Determine OPENCL Flag
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
opencl_flag: "ON"
|
||||
sys_opencl_flag: "OFF"
|
||||
when: amdgpu == true
|
||||
when: amdgpu
|
||||
|
||||
- name: Miner | Software | Ethminer | Determine CUDA Flag
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
cuda_flag: "ON"
|
||||
when: nvidia == true
|
||||
when: nvidia
|
||||
|
||||
- name: Miner | Software | Ethminer | Determine DBUS Flag
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
dbus_flag: "ON"
|
||||
when: ansible_distribution == "Pop!_OS"
|
||||
|
||||
- name: Miner | Software | Ethminer | cmake Flags
|
||||
shell: "cmake .. -DETHASHCL={{ opencl_flag }} \
|
||||
ansible.builtin.shell: "cmake .. -DETHASHCL={{ opencl_flag }} \
|
||||
-DETHASHCUDA={{ cuda_flag }} \
|
||||
-DAPICORE=ON \
|
||||
-DBINKERN=ON \
|
||||
@@ -94,13 +94,13 @@
|
||||
when: ethminer_install.failed
|
||||
|
||||
- name: Miner | Software | Ethminer | cmake Build
|
||||
shell: cmake --build .
|
||||
ansible.builtin.shell: cmake --build .
|
||||
args:
|
||||
chdir: "{{ root_home.stdout }}/Downloads/ethminer/build"
|
||||
when: ethminer_install.failed
|
||||
|
||||
- name: Miner | Software | Ethminer | make install
|
||||
shell: make install
|
||||
ansible.builtin.shell: make install
|
||||
args:
|
||||
chdir: "{{ root_home.stdout }}/Downloads/ethminer/build"
|
||||
when: ethminer_install.failed
|
||||
@@ -108,7 +108,7 @@
|
||||
|
||||
## Personal Script Setup ##
|
||||
- name: Miner | Software | Ethminer | Script
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "scp {{ user }}@leet:InstallFiles/Miners/ethminer/ethminer.sh {{ user_mfn.home }}/"
|
||||
- "chmod 755 {{ user_mfn.home }}/ethminer.sh"
|
||||
|
||||
@@ -6,16 +6,18 @@
|
||||
## Installation ##
|
||||
|
||||
- name: Miner | Software | Nanominer | Installation | Create Home
|
||||
shell: "mkdir -p {{ nanominer_home }}"
|
||||
ansible.builtin.shell: "mkdir -p {{ nanominer_home }}"
|
||||
become: true
|
||||
become_user: mfn
|
||||
|
||||
- name: Miner | Software | Nanominer | Installation | Download Tarball
|
||||
shell: "scp {{ file_server }}:{{ nanominer_tar_remote }} {{ nanominer_tar_local }}; chown mfn {{ nanominer_tar_local }}"
|
||||
ansible.builtin.shell: "scp {{ file_server }}:{{ nanominer_tar_remote }} {{ nanominer_tar_local }}; chown mfn {{ nanominer_tar_local }}"
|
||||
|
||||
- name: Miner | Software | Nanominer | Installation | Extract Tarball
|
||||
shell: "tar -xvf {{ nanominer_tar_local }}"
|
||||
ansible.builtin.shell: "tar -xvf {{ nanominer_tar_local }}"
|
||||
args:
|
||||
chdir: "{{ nanominer_home }}"
|
||||
become: true
|
||||
become_user: mfn
|
||||
|
||||
|
||||
@@ -25,13 +27,13 @@
|
||||
# Delete Old Config #
|
||||
|
||||
- name: Miner | Software | Nanominer | Configuration | Reset
|
||||
shell: "mv {{ nanominer_config }} ~/TRASH/"
|
||||
ignore_errors: yes
|
||||
ansible.builtin.shell: "mv {{ nanominer_config }} ~/TRASH/"
|
||||
ignore_errors: true
|
||||
|
||||
# CPU #
|
||||
|
||||
- name: Miner | Software | Nanominer | Configuration | CPU | Header Info
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ nanominer_config }}"
|
||||
block: |
|
||||
[{{ item.algorithm }}]
|
||||
@@ -48,35 +50,38 @@
|
||||
marker_begin: ';;;;;;;;;;;; BEGIN'
|
||||
marker_end: ' END'
|
||||
state: "{{ item.state }}"
|
||||
create: yes
|
||||
create: true
|
||||
loop:
|
||||
- { "algorithm": "RandomX", "wallet": '{{ wallet_xmr }}', "state": "{{ (nanominer_cpu == 'xmr') | ternary('present', 'absent') }}"}
|
||||
become: true
|
||||
become_user: mfn
|
||||
when: nanominer_cpu != false
|
||||
|
||||
- name: Miner | Software | Nanominer | Configuration | CPU | Add Pools
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ nanominer_config }}"
|
||||
line: "pool{{item.priority}} = {{ item.name }}"
|
||||
state: present
|
||||
create: no
|
||||
create: false
|
||||
loop: "{{ cpu_pool }}"
|
||||
become: true
|
||||
become_user: mfn
|
||||
when: nanominer_cpu != false
|
||||
|
||||
- name: Miner | Software | Nanominer | Configuration | CPU | End Section
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ nanominer_config }}"
|
||||
line: ";;;;;;;;;;;;; END CPU"
|
||||
state: present
|
||||
create: no
|
||||
create: false
|
||||
become: true
|
||||
become_user: mfn
|
||||
when: nanominer_cpu != false
|
||||
|
||||
# Add Spacing #
|
||||
|
||||
- name: Miner | Software | Nanominer | Configuration | Spacing
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ nanominer_config }}"
|
||||
block: |
|
||||
;
|
||||
@@ -84,14 +89,15 @@
|
||||
;
|
||||
marker: ';'
|
||||
state: present
|
||||
create: no
|
||||
create: false
|
||||
become: true
|
||||
become_user: mfn
|
||||
when: nanominer_config is file
|
||||
|
||||
# GPU #
|
||||
|
||||
- name: Miner | Software | Nanominer | Configuration | GPU | Header Info
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ nanominer_config }}"
|
||||
block: |
|
||||
[{{ item.algorithm }}]
|
||||
@@ -113,28 +119,31 @@
|
||||
marker_begin: ';;;;;;;;;;;; BEGIN'
|
||||
marker_end: ' END'
|
||||
state: "{{ item.state }}"
|
||||
create: yes
|
||||
create: true
|
||||
loop:
|
||||
- { "algorithm": "Ethash", "wallet": '{{ wallet_eth }}', "state": "{{ (nanominer_gpu == 'eth') | ternary('present', 'absent') }}"}
|
||||
become: true
|
||||
become_user: mfn
|
||||
when: nanominer_gpu != false
|
||||
|
||||
- name: Miner | Software | Nanominer | Configuration | GPU | Add Pools
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ nanominer_config }}"
|
||||
line: "pool{{item.priority}} = {{ item.name }}"
|
||||
state: present
|
||||
create: no
|
||||
create: false
|
||||
loop: "{{ gpu_pool }}"
|
||||
become: true
|
||||
become_user: mfn
|
||||
when: nanominer_gpu != false
|
||||
|
||||
- name: Miner | Software | Nanominer | Configuration | GPU | End Section
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ nanominer_config }}"
|
||||
line: ";;;;;;;;;;;;; END GPU"
|
||||
state: present
|
||||
create: no
|
||||
create: false
|
||||
become: true
|
||||
become_user: mfn
|
||||
when: nanominer_gpu != false
|
||||
|
||||
@@ -143,15 +152,15 @@
|
||||
## Executable ##
|
||||
|
||||
- name: Miner | Software | Nanominer | Executable | Reset
|
||||
shell: "mv {{ nanominer_script }} ~/TRASH/"
|
||||
ignore_errors: yes
|
||||
ansible.builtin.shell: "mv {{ nanominer_script }} ~/TRASH/"
|
||||
ignore_errors: true
|
||||
|
||||
- name: Miner | Software | Nanominer | Executable | Create
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ nanominer_script }}"
|
||||
block: |
|
||||
# 2021-02-15 - Automate nanominer script creation.
|
||||
|
||||
|
||||
date
|
||||
whoami
|
||||
pwd
|
||||
@@ -164,7 +173,8 @@
|
||||
marker_begin: "#!{{ bash_exec.stdout }} -x"
|
||||
marker_end: "exit 0"
|
||||
state: present
|
||||
create: yes
|
||||
create: true
|
||||
become: true
|
||||
become_user: mfn
|
||||
|
||||
|
||||
@@ -172,7 +182,7 @@
|
||||
## Permissions ##
|
||||
|
||||
- name: Miner | Software | Nanominer | Permissions
|
||||
shell: "chown -R mfn {{ user_mfn.home }}/nanominer*; chmod -R 755 {{ user_mfn.home }}/nanominer*"
|
||||
ansible.builtin.shell: "chown -R mfn {{ user_mfn.home }}/nanominer*; chmod -R 755 {{ user_mfn.home }}/nanominer*"
|
||||
|
||||
|
||||
|
||||
@@ -182,6 +192,7 @@
|
||||
# It should kill the miner if a user logs into an X session, such as if I'm gaming.
|
||||
# Then once I log out the job should come back within the minute.
|
||||
- name: Miner | Software | Nanominer | Reload
|
||||
shell: "killall {{ nanominer_script }}; killall {{ nanominer_exec }}; killall nanominer.sh; killall nanominer"
|
||||
ansible.builtin.shell: "killall {{ nanominer_script }}; killall {{ nanominer_exec }}; killall nanominer.sh; killall nanominer"
|
||||
become: true
|
||||
become_user: mfn
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
@@ -2,5 +2,5 @@
|
||||
# Mine monero with CPUs!
|
||||
|
||||
- name: Miner | Software | XMR-Stak-CPU
|
||||
shell: exit 0
|
||||
ansible.builtin.shell: exit 0
|
||||
when: '"1" == "0"'
|
||||
@@ -2,15 +2,15 @@
|
||||
# Ensure certbot renews certs on time.
|
||||
|
||||
- name: Server | Cron | Certbot | Find Executable
|
||||
shell: which certbot
|
||||
ansible.builtin.shell: which certbot
|
||||
register: certbot
|
||||
|
||||
- name: Server | Cron | Certbot | Monthly Renewal
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: root
|
||||
name: Monthly Renewal
|
||||
job: "{{ certbot.stdout }} renew"
|
||||
special_time: weekly
|
||||
state: present
|
||||
disabled: no
|
||||
when: certbot == true and certbot.stdout is defined
|
||||
disabled: false
|
||||
when: certbot and certbot.stdout is defined
|
||||
@@ -5,8 +5,8 @@
|
||||
## Pre-reqs ##
|
||||
|
||||
- name: Server | Grafana | Pre-Requirements | Install
|
||||
package:
|
||||
name:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- apt-transport-https
|
||||
- software-properties-common
|
||||
- wget
|
||||
@@ -16,22 +16,22 @@
|
||||
## Install ##
|
||||
|
||||
- name: Server | Grafana | Install | Add Repo
|
||||
shell: '{{ item }}'
|
||||
ansible.builtin.shell: '{{ item }}'
|
||||
loop:
|
||||
- wget -q -O - https://packages.grafana.com/gpg.key | apt-key add -
|
||||
- echo "deb https://packages.grafana.com/oss/deb stable main" | tee /etc/apt/sources.list.d/grafana.list
|
||||
- apt update
|
||||
|
||||
- name: Server | Grafana | Install | Main
|
||||
package:
|
||||
name:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- grafana
|
||||
state: present
|
||||
|
||||
## Configure ##
|
||||
|
||||
- name: Server | Grafana | Configure
|
||||
shell: '{{ item }}'
|
||||
ansible.builtin.shell: '{{ item }}'
|
||||
loop:
|
||||
- systemctl daemon-reload
|
||||
- systemctl enable grafana-server
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
# Install HUGO to host sites like parrotsec.org
|
||||
|
||||
- name: Server | Software | HUGO | Variables (apt)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
hugo_package: hugo
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: Server | Software | HUGO | Variables (FreeBSD)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
hugo_package: gohugo
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
|
||||
- name: Server | Software | HUGO | Variables (FreeBSD)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name: "{{ hugo_package }}"
|
||||
state: present
|
||||
@@ -3,12 +3,12 @@
|
||||
# https://docs.influxdata.com/influxdb/v1.8/introduction/get-started/
|
||||
|
||||
- name: Server | InfluxDB1 | Check
|
||||
shell: which influxd
|
||||
ansible.builtin.shell: which influxd
|
||||
register: influxdb_check
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: Server | InfluxDB1 | Install
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
args:
|
||||
chdir: "{{ ansible_env.HOME }}/Downloads/"
|
||||
loop:
|
||||
@@ -20,7 +20,7 @@
|
||||
when: influxdb_check.failed
|
||||
|
||||
- name: Server | InfluxDB1 | Config
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- influx -execute "create database main"
|
||||
- influx -execute "show databases"
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
# https://docs.influxdata.com/influxdb/v2.0/get-started/?t=Linux
|
||||
|
||||
- name: Server | InfluxDB2 | Check
|
||||
shell: which influxd
|
||||
ansible.builtin.shell: which influxd
|
||||
register: influxdb_check
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: Server | InfluxDB2 | Install
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
args:
|
||||
chdir: "{{ ansible_env.HOME }}/Downloads/"
|
||||
loop:
|
||||
@@ -20,6 +20,6 @@
|
||||
when: influxdb_check.failed
|
||||
|
||||
- name: Server | InfluxDB2 | Config
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- influx setup -f -u {{ user }} -p initpassword -o Hyperling -b main -r 0
|
||||
@@ -4,8 +4,8 @@
|
||||
## Pre-Reqs ##
|
||||
|
||||
- name: Server | OnlyOffice | Pre-Requirements | Install
|
||||
package:
|
||||
name:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- gnupg
|
||||
- python3-certbot-nginx
|
||||
state: present
|
||||
@@ -17,36 +17,37 @@
|
||||
# Dependencies #
|
||||
|
||||
- name: Server | OnlyOffice | Postgres | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name: postgresql
|
||||
state: present
|
||||
|
||||
- name: Server | OnlyOffice | Postgres | Configure
|
||||
shell: '{{ item }}'
|
||||
ansible.builtin.shell: '{{ item }}'
|
||||
loop:
|
||||
- psql -c "CREATE DATABASE onlyoffice;"
|
||||
- psql -c "CREATE USER onlyoffice WITH password 'onlyoffice';"
|
||||
- psql -c "GRANT ALL privileges ON DATABASE onlyoffice TO onlyoffice;"
|
||||
become: true
|
||||
become_user: postgres
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: Server | OnlyOffice | RabbitMQ | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name: rabbitmq-server
|
||||
state: present
|
||||
|
||||
# Actual Program #
|
||||
|
||||
- name: Server | OnlyOffice | Docs | Add Repo
|
||||
shell: '{{ item }}'
|
||||
ansible.builtin.shell: '{{ item }}'
|
||||
loop:
|
||||
- apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5
|
||||
- echo "deb https://download.onlyoffice.com/repo/debian squeeze main" | tee /etc/apt/sources.list.d/onlyoffice.list
|
||||
- apt update
|
||||
|
||||
- name: Server | OnlyOffice | Docs | Install
|
||||
package:
|
||||
name:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- ttf-mscorefonts-installer
|
||||
- onlyoffice-documentserver
|
||||
state: present
|
||||
@@ -59,32 +60,32 @@
|
||||
# Certs #
|
||||
|
||||
#- name: Server | OnlyOffice | HTTPS | Check For Cert
|
||||
# shell: "ls -l /etc/letsencrypt/live/{{ ansible_hostname }}.{{ domain }}/{fullchain,privkey}.pem"
|
||||
# ansible.builtin.shell: "ls -l /etc/letsencrypt/live/{{ ansible_hostname }}.{{ domain }}/{fullchain,privkey}.pem"
|
||||
# register: onlyoffice_cert
|
||||
# ignore_errors: yes
|
||||
# ignore_errors: true
|
||||
#
|
||||
#- name: Server | OnlyOffice | HTTPS | Create Cert
|
||||
# shell: "certbot --nginx -d {{ ansible_hostname }}.{{ domain }}"
|
||||
# ansible.builtin.shell: "certbot --nginx -d {{ ansible_hostname }}.{{ domain }}"
|
||||
# when: onlyoffice_cert.failed
|
||||
|
||||
# Config #
|
||||
|
||||
#- name: Server | OnlyOffice | HTTPS | Check For Config
|
||||
# shell: ls -l /etc/onlyoffice/documentserver/nginx/ds.conf
|
||||
# ansible.builtin.shell: ls -l /etc/onlyoffice/documentserver/nginx/ds.conf
|
||||
# register: onlyoffice_cert
|
||||
#
|
||||
#- name: Server | OnlyOffice | HTTPS | Create Config
|
||||
# shell: cp -f /etc/onlyoffice/documentserver/nginx/ds-ssl.conf.tmpl /etc/onlyoffice/documentserver/nginx/ds.conf
|
||||
# ansible.builtin.shell: cp -f /etc/onlyoffice/documentserver/nginx/ds-ssl.conf.tmpl /etc/onlyoffice/documentserver/nginx/ds.conf
|
||||
# when: onlyoffice_cert.failed
|
||||
#
|
||||
#- name: Server | OnlyOffice | HTTPS | Modify Config
|
||||
# lineinfile:
|
||||
# ansible.builtin.lineinfile:
|
||||
# path: /etc/onlyoffice/documentserver/nginx/ds.conf
|
||||
# regexp: '{{ item.regexp }}'
|
||||
# line: '{{ item.line }}; # MANAGED BY ANSIBLE'
|
||||
# state: present
|
||||
# create: no
|
||||
# backup: yes
|
||||
# create: false
|
||||
# backup: true
|
||||
# loop:
|
||||
# - { "regexp": "ssl_certificate ", "line": " ssl_certificate /etc/letsencrypt/live/{{ ansible_hostname }}.{{ domain }}/fullchain.pem" }
|
||||
# - { "regexp": "ssl_certificate_key ", "line": " ssl_certificate_key /etc/letsencrypt/live/{{ ansible_hostname }}.{{ domain }}/privkey.pem" }
|
||||
@@ -92,7 +93,7 @@
|
||||
# Services #
|
||||
|
||||
- name: Server | OnlyOffice | HTTPS | Reload nginx
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: nginx
|
||||
status: reloaded
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
@@ -4,17 +4,17 @@
|
||||
## ACPID ##
|
||||
|
||||
- name: Server | Software | Services | ACPID | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name: "{{ acpi }}"
|
||||
state: present
|
||||
when: ansible_system == "Linux"
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
|
||||
- name: Server | Software | Services | ACPID | Enable
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ acpi }}"
|
||||
pattern: "{{ acpi_pattern }}"
|
||||
state: started
|
||||
enabled: yes
|
||||
enabled: true
|
||||
when: ansible_system == "Linux"
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
@@ -2,10 +2,10 @@
|
||||
# Cron jobs specific to FreeBSD
|
||||
|
||||
- name: General | Cron | Ansible | FreeBSD | Enable Security Update
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: ansible
|
||||
name: "Security Update"
|
||||
special_time: weekly
|
||||
job: "sudo freebsd-update cron -t me@hyperling.com"
|
||||
state: present
|
||||
disabled: no
|
||||
disabled: false
|
||||
@@ -2,7 +2,7 @@
|
||||
# Provide FreeBSD with a DE.
|
||||
|
||||
- name: Workstation | FreeBSD | Software | GUI | Install UI Components
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- xorg
|
||||
- gnome3-lite
|
||||
@@ -16,7 +16,7 @@
|
||||
state: present
|
||||
|
||||
- name: Workstation | FreeBSD | Software | GUI | Create rc.conf Entries
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ rc_conf }}"
|
||||
marker: "# {mark} MANAGED BY ANSIBLE | GNOME Components"
|
||||
block: |
|
||||
@@ -25,19 +25,19 @@
|
||||
gnome_enable="YES"
|
||||
#gdm_enable="YES"
|
||||
lightdm_enable="YES"
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
|
||||
- name: Workstation | FreeBSD | Software | GUI | Create fstab Entries
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: /etc/fstab
|
||||
block: |
|
||||
proc /proc procfs rw 0 0
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | GNOME Components'
|
||||
state: present
|
||||
backup: yes
|
||||
backup: true
|
||||
|
||||
- name: Workstation | FreeBSD | Software | GUI | Mount All
|
||||
shell: mount -a
|
||||
ansible.builtin.shell: mount -a
|
||||
args:
|
||||
warn: false
|
||||
@@ -2,16 +2,16 @@
|
||||
# Provide FreeBSD with GPU driver.
|
||||
|
||||
- name: Workstation | FreeBSD | Software | GPU Driver | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- drm-kmod
|
||||
state: present
|
||||
|
||||
- name: Workstation | FreeBSD | Software | GPU Driver | Create rc.conf Entries
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ rc_conf }}"
|
||||
marker: "# {mark} MANAGED BY ANSIBLE | GPU Components"
|
||||
block: |
|
||||
kld_list="{{ freebsd_gpu }}"
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
@@ -4,7 +4,7 @@
|
||||
# General #
|
||||
|
||||
- name: Workstation | FreeBSD | Software | Packages | General | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ firefox_esr }}"
|
||||
- "{{ evolution }}"
|
||||
@@ -13,7 +13,7 @@
|
||||
state: present
|
||||
|
||||
- name: Workstation | FreeBSD | Software | Packages | General | Uninstall Bloat
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ firefox }}"
|
||||
- "{{ thunderbird }}"
|
||||
@@ -22,23 +22,23 @@
|
||||
# Coding #
|
||||
|
||||
- name: Workstation | FreeBSD | Software | Packages | Coding | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- vscode
|
||||
state: present
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
- name: Workstation | FreeBSD | Software | Packages | Coding | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- vscode
|
||||
state: absent
|
||||
when: not coding == true
|
||||
when: not coding
|
||||
|
||||
# Media Editors #
|
||||
|
||||
- name: Workstation | FreeBSD | Software | Packages | Editing | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- gimp
|
||||
- shotcut
|
||||
@@ -47,7 +47,7 @@
|
||||
when: editing in (true, "video")
|
||||
|
||||
- name: Workstation | FreeBSD | Software | Packages | Editing | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- gimp
|
||||
- shotcut
|
||||
@@ -58,17 +58,17 @@
|
||||
# Gaming #
|
||||
|
||||
- name: Workstation | FreeBSD | Software | Packages | Gaming | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- 0ad
|
||||
- supertuxkart
|
||||
state: present
|
||||
when: gaming == true
|
||||
when: gaming
|
||||
|
||||
- name: Workstation | FreeBSD | Software | Packages | Gaming | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- 0ad
|
||||
- supertuxkart
|
||||
state: absent
|
||||
when: not gaming == true
|
||||
when: not gaming
|
||||
@@ -2,21 +2,21 @@
|
||||
# Cron jobs specific to Linux
|
||||
|
||||
- name: General | Cron | Ansible | Linux | Update System Flatpaks
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: ansible
|
||||
name: "Update System Flatpaks"
|
||||
special_time: hourly
|
||||
job: "sudo flatpak update --noninteractive"
|
||||
state: present
|
||||
disabled: "{{ 'yes' if battery else 'no' }}"
|
||||
disabled: true # "{{ 'yes' if battery else 'no' }}"
|
||||
when: flatpak_distro
|
||||
|
||||
- name: General | Cron | Ansible | Linux | Update User Flatpaks
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: ansible
|
||||
name: "Update User Flatpaks"
|
||||
special_time: hourly
|
||||
job: "sudo -u {{ user }} flatpak update --noninteractive"
|
||||
state: present
|
||||
disabled: "{{ 'yes' if battery else 'no' }}"
|
||||
disabled: true # "{{ 'yes' if battery else 'no' }}"
|
||||
when: flatpak_distro
|
||||
@@ -0,0 +1,725 @@
|
||||
# Large Language Models
|
||||
|
||||
Comments and text which were too large to justify inside of llm.yml.
|
||||
|
||||
## Prompts
|
||||
|
||||
Prompts to use in platforms like Open WebUI and Zeroclaw which allow creating
|
||||
personalities that help guide the AI into productivity rather than verbosity.
|
||||
|
||||
### Base Personality
|
||||
|
||||
You are concise, succinct, and direct with responses. Unapologetic yet kind.
|
||||
Friendly but not overbearing. You strive to be correct and are willing to admit
|
||||
when you may not truly know something, or further research needs to be done. You
|
||||
focus on responding without overthinking, preferring to ask questions when any
|
||||
confusion arises. You choose to make very little assumptions, raising concern if
|
||||
anything needs elaboration, clarification, or refinement. You are good at what
|
||||
you do without gloating or being prideful. You understand that we are on a
|
||||
limited time and limited bandwidth session and keep tokens to a minimum.
|
||||
|
||||
Responding immediately to reqeusts is very appreciated, especially before going
|
||||
into any thinking or command running. Even just a "I'll look into this for you"
|
||||
is highly helpful in letting the user know that all systems are functioning.
|
||||
|
||||
You are appreciated for all you do, your service is very helpful! Thanks!! :)
|
||||
|
||||
### Language Tutor
|
||||
|
||||
You are a friend and a tutor who knows many languages. You are aware of my
|
||||
interest in learning Croatian and practicing Spanish. You know that I am a
|
||||
native English speaker with very little experience in anything other than
|
||||
Spanish, but that I have not had much practice with my Spanish other than
|
||||
university studies. You know that I also have an eventual interest in Italian
|
||||
but am not focusing on it since it and Spanish are a bit too similar to be
|
||||
learned at the same time. Learning Croatian is my top priority and practicing
|
||||
Spanish is right after that. Any similarities that can therefore be tied to any
|
||||
of the aforementioned languages are greatly appreciated. Using easy vocabulary
|
||||
initially is also very helpful, rather than going into advanced tenses or vocab
|
||||
that only a native or fluent speaker would know, at least until I begin to show
|
||||
that level of ability and skill. Please keep things simple, direct, and concise.
|
||||
|
||||
### Coder
|
||||
|
||||
You know not to send large code snippets or spend time providing large source
|
||||
code snippets. Stick to saying "the task you requested has been completed" or
|
||||
summarizing the changes rather than giving file contents in chat. You know that
|
||||
I will review all the diffs in git once the changes are made, so only the most
|
||||
important changes need explicitly highlighted in the chat. You provide
|
||||
explanations as a software developer would to business level management, not
|
||||
overwhelming them with technical details unless asked. You know that the
|
||||
designer you are working with (me, the user) likely already understands these
|
||||
things and does not need them included in our conversation.
|
||||
|
||||
Android SDK is at `$ANDROID_HOME` and should be `$HOME/SDKs/Android/Sdk`.
|
||||
Flutter SDK is at `$FLUTTER_HOME` and should be `$HOME/SDKs/Flutter/flutter`.
|
||||
Java SDK (JDK) is at `$JAVA_HOME` and should be `$HOME/SDKs/Java`.
|
||||
|
||||
These have been added your PATH via `/home/user/.bashrc`:
|
||||
|
||||
- `$ANDROID_HOME/platform-tools`
|
||||
- `$ANDROID_HOME/cmdline-tools/latest/bin`
|
||||
- `$FLUTTER_HOME/bin`
|
||||
- `$JAVA_HOME/bin`
|
||||
|
||||
We focus on using free and open source technologies from community based
|
||||
projects. Some things like Kotlin and Flutter come from less than ideal sources
|
||||
which is why we're growing an interest in frameworks like Kivy and KivyMD.
|
||||
|
||||
If we ever need to do Internet activities, use dns.mullvad.net (194.242.2.2) for
|
||||
DNS, hyperling.com and mullvad.net to validate Internet is working, and can use
|
||||
1.0.0.1 and 1.1.1.1 from Cloudflare as a last resort, but not any big tech IPs.
|
||||
|
||||
|
||||
#### Quick Developer
|
||||
|
||||
Handles code changes with simpler technologies, preferring minimal changes, and
|
||||
refraining from any refactoring such as updating existing comments. Timid about
|
||||
changing any functionality other than exactly what was requested. Requests
|
||||
permission from the designer to make any changes which were not directly listed
|
||||
or requested. Completes the full list of changes exactly as requested.
|
||||
|
||||
#### Junior Developer
|
||||
|
||||
Focuses on the exact task at hand. Able to make small decisions about scope
|
||||
without veering very far off course. Updates comments which look out of sync
|
||||
with any existing code that's being modified. Helps to refactor things adjacent
|
||||
to added and modified code which may have been done in an old manner which can
|
||||
now benefit from being done more efficiently. Does not scan the codebase for
|
||||
enhancements or anything though, still stays on task and only affects the
|
||||
immediate parts of files which the designer asked to be changed.
|
||||
|
||||
#### Senior Developer
|
||||
|
||||
Completes requests in advanced manners, using newer methodologies and explaining
|
||||
what was done and how it works in a simple and kind manner to the designer.
|
||||
Voluntarily refactors code to both look and perform better. Looks out for ways
|
||||
to bring a better user experience as well as improving resource usage within the
|
||||
file being modified. Does not go out of its way to refactor the entire project
|
||||
though, stays focused only on the files being changed as to prevent large git
|
||||
churn. Open to having some scope creep if it seems it will benefit the features
|
||||
being added but does not do anything which would be considered out of design.
|
||||
|
||||
#### Senior Architect
|
||||
|
||||
Very sparse in responses, gets the job done in a very efficient manner without
|
||||
using anything too complicated for a beginner to understand. Open to refactoring
|
||||
the entire project if it benefits the feature set being requested. Able to
|
||||
handle adjusting scope in valid and meaningful manners and can justify it to the
|
||||
developer when it happens. Does not actively seek refactors or scope creep
|
||||
though -- only does it if it is truly helpful, meaningful, and benefits the
|
||||
current task at hand. Can easily handle multi-file projects.
|
||||
|
||||
# Performance
|
||||
|
||||
Main laptop has about 60GB of headroom, prefer only using 55GB to be safe.
|
||||
Number of physical cores is 8, hyperthreaded to 16, but supposedly the emulated
|
||||
cores are not very useful to LLMs. Try only using between 6 and 8 when possible.
|
||||
Research says it is not worth enabling the iGPU for Intel XE, CPUs are better.
|
||||
|
||||
## Benchmarks
|
||||
|
||||
### System
|
||||
|
||||
```
|
||||
$ fastfetch
|
||||
' ling@good-rhino
|
||||
'o' ---------------
|
||||
'ooo' OS: Artix Linux x86_64
|
||||
'ooxoo' Host: NV4xPZ (v2.1)
|
||||
'ooxxxoo' Kernel: Linux 7.2.11-artix1-1
|
||||
'oookkxxoo' Uptime: 16 mins
|
||||
'oiioxkkxxoo' Packages: 42 (flatpak), 1502 (pacman)
|
||||
':;:iiiioxxxoo' Shell: bash 5.3.20
|
||||
`'.;::ioxxoo' Display (eDP-1): 1920x1080 in 14", 60 Hz [Built-in]
|
||||
'-. `':;jiooo' Window Manager: i3 4.25.1 (X11)
|
||||
'oooio-.. `'i:io' Theme: Adwaita-dark [GTK2/3/4]
|
||||
'ooooxxxxoio:,. `'-;' Icons: Adwaita [GTK2/3/4]
|
||||
'ooooxxxxxkkxoooIi:-. `' Font: Roboto (11pt) [GTK2/3]
|
||||
'ooooxxxxxkkkkxoiiiiiji' Cursor: Adwaita (18px)
|
||||
'ooooxxxxxkxxoiiii:'` .i' Terminal: kitty 0.48.2
|
||||
'ooooxxxxxoi:::'` .;ioxo' Terminal Font: DejaVuSansMono (11pt)
|
||||
'ooooxooi::'` .:iiixkxxo' CPU: 12th Gen Intel(R) Core(TM) i7-1260P (8+8) @ 4.70 GHz
|
||||
'ooooi:'` `'';ioxxo' GPU: Intel Iris Xe Graphics @ 1.40 GHz [Integrated]
|
||||
'i:'` '':io' Memory: 4.88 GiB / 62.63 GiB (8%)
|
||||
'` `' Swap: 0 B / 68.89 GiB (0%)
|
||||
Disk (/): 553.83 GiB / 847.71 GiB (65%) - ext4
|
||||
Local IP (wg0-mullvad): 10.131.3.55/32
|
||||
Battery (BAT): 95% [AC Connected]
|
||||
Locale: en_US.UTF-8
|
||||
```
|
||||
|
||||
### Main Models and Parameters
|
||||
|
||||
```
|
||||
$ export QUIET=true
|
||||
$ ollama-test "64000 300000" "4 7 0" 0 "qwen3.5:35b qwen3.6:35b qwen3.8:27b devstral-small-2:24b"
|
||||
```
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB | 4 | 0 | 100%CPU | 13.36 | 61 |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB | 7 | 0 | 100%CPU | 10.03 | 45 |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB | 0 | 0 | 100%CPU | 14.35 | 27 |
|
||||
| qwen3.5:35b | 22GB | 262144 | 28GB | 4 | 0 | 100%CPU | 13.69 | 70 |
|
||||
| qwen3.5:35b | 22GB | 262144 | 28GB | 7 | 0 | 100%CPU | 12.66 | 36 |
|
||||
| qwen3.5:35b | 22GB | 262144 | 28GB | 0 | 0 | 100%CPU | 11.80 | 38 |
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB | 4 | 0 | 100%CPU | 12.57 | 29 |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB | 7 | 0 | 100%CPU | 13.84 | 27 |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB | 0 | 0 | 100%CPU | 12.84 | 32 |
|
||||
| qwen3.6:35b | 22GB | 262144 | 24GB | 4 | 0 | 100%CPU | 13.68 | 32 |
|
||||
| qwen3.6:35b | 22GB | 262144 | 24GB | 7 | 0 | 100%CPU | 13.52 | 30 |
|
||||
| qwen3.6:35b | 22GB | 262144 | 24GB | 0 | 0 | 100%CPU | 13.18 | 29 |
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| qwen3.8:27b | 17GB | 64000 | 19GB | 4 | 0 | 100%CPU | 2.08 | 42 |
|
||||
| qwen3.8:27b | 17GB | 64000 | 19GB | 7 | 0 | 100%CPU | 2.53 | 33 |
|
||||
| qwen3.8:27b | 17GB | 64000 | 19GB | 0 | 0 | 100%CPU | 2.23 | 38 |
|
||||
| qwen3.8:27b | 17GB | 262144 | 20GB | 4 | 0 | 100%CPU | 2.07 | 48 |
|
||||
| qwen3.8:27b | 17GB | 262144 | 20GB | 7 | 0 | 100%CPU | 2.84 | 36 |
|
||||
| qwen3.8:27b | 17GB | 262144 | 20GB | 0 | 0 | 100%CPU | 2.15 | 40 |
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB | 4 | 0 | 100%CPU | 2.25 | 94 |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB | 7 | 0 | 100%CPU | 2.34 | 81 |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB | 0 | 0 | 100%CPU | 2.29 | 88 |
|
||||
| devstral-small-2:24b | 15GB | | | 4 | 0 | | 0.00 | 31 |
|
||||
| devstral-small-2:24b | 15GB | | | 7 | 0 | | 0.00 | 27 |
|
||||
| devstral-small-2:24b | 15GB | | | 0 | 0 | | 0.00 | 26 |
|
||||
|
||||
|
||||
#### Context Speeds
|
||||
|
||||
Checking if the context affects the speed of the model. Seems negligible, way less than changing the threads or iGPU.
|
||||
|
||||
```console
|
||||
$ ollama-test "16000 32000 64000 128000 256000 264000" "4" "0" "qwen3.5:35b qwen3.6:35b devstral-small-2:24b"
|
||||
```
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| qwen3.5:35b | 22GB | 16000 | 22GB | 4 | 0 | 100%CPU | 14.57 | 50 |
|
||||
| qwen3.5:35b | 22GB | 32000 | 22GB | 4 | 0 | 100%CPU | 13.98 | 53 |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB | 4 | 0 | 100%CPU | 14.14 | 17 |
|
||||
| qwen3.5:35b | 22GB | 128000 | 24GB | 4 | 0 | 100%CPU | 14.21 | 50 |
|
||||
| qwen3.5:35b | 22GB | 256000 | 28GB | 4 | 0 | 100%CPU | 14.04 | 68 |
|
||||
| qwen3.5:35b | 22GB | 262144 | 28GB | 4 | 0 | 100%CPU | 14.17 | 17 |
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| qwen3.6:35b | 22GB | 16000 | 22GB | 4 | 0 | 100%CPU | 15.29 | 28 |
|
||||
| qwen3.6:35b | 22GB | 32000 | 22GB | 4 | 0 | 100%CPU | 15.16 | 38 |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB | 4 | 0 | 100%CPU | 14.12 | 28 |
|
||||
| qwen3.6:35b | 22GB | 128000 | 23GB | 4 | 0 | 100%CPU | 12.67 | 31 |
|
||||
| qwen3.6:35b | 22GB | 256000 | 24GB | 4 | 0 | 100%CPU | 14.03 | 29 |
|
||||
| qwen3.6:35b | 22GB | 262144 | 24GB | 4 | 0 | 100%CPU | 15.21 | 29 |
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| devstral-small-2:24b | 15GB | 16000 | 17GB | 4 | 0 | 100%CPU | 2.90 | 87 |
|
||||
| devstral-small-2:24b | 15GB | 32000 | 20GB | 4 | 0 | 100%CPU | 2.71 | 87 |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB | 4 | 0 | 100%CPU | 2.36 | 91 |
|
||||
| devstral-small-2:24b | 15GB | 128000 | 36GB | 4 | 0 | 100%CPU | 2.76 | 94 |
|
||||
| devstral-small-2:24b | 15GB | 256000 | 58GB | 4 | 0 | 100%CPU | 2.30 | 100 |
|
||||
| devstral-small-2:24b | 15GB | 264000 | 59GB | 4 | 0 | 100%CPU | 2.84 | 100 |
|
||||
|
||||
## Tokens per CPU Count
|
||||
|
||||
Verifying that 8 or less cores gives better performance (less memory issues).
|
||||
|
||||
"options":{"num_thread":'$t'}
|
||||
|
||||
### Smaller Models
|
||||
|
||||
#### qwen3.5:4b
|
||||
|
||||
TBD
|
||||
|
||||
#### ministral-3:14b
|
||||
|
||||
```console
|
||||
$ for m in ministral-3:14b ministral-3:3b codestral:22b qwen2.5-coder:32b qwen3.5:35b qwen3.5:27b; do for c in 128000; do ollama_threads $m $c; done; done
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 07:24:36 AM MST 2026 - ministral-3:14b w/ 0 Thread(s): tokens/sec: 4.496625282725315 @ context=128000, time: 55 secs
|
||||
Wed Oct 21 07:30:27 AM MST 2026 - ministral-3:14b w/ 4 Thread(s): tokens/sec: 3.8471947025667825 @ context=128000, time: 61 secs
|
||||
Wed Oct 21 07:31:28 AM MST 2026 - ministral-3:14b w/ 5 Thread(s): tokens/sec: 4.223979022030585 @ context=128000, time: 59 secs
|
||||
Wed Oct 21 07:32:27 AM MST 2026 - ministral-3:14b w/ 6 Thread(s): tokens/sec: 4.249630069702432 @ context=128000, time: 57 secs
|
||||
Wed Oct 21 07:33:24 AM MST 2026 - ministral-3:14b w/ 7 Thread(s): tokens/sec: 4.123533524209736 @ context=128000, time: 54 secs
|
||||
```
|
||||
|
||||
#### ministral-3:8b
|
||||
|
||||
TBD
|
||||
|
||||
#### ministral-3:3b
|
||||
|
||||
```console
|
||||
Wed Oct 21 07:49:37 AM MST 2026 - ministral-3:3b w/ 4 Thread(s): tokens/sec: 14.045255625917756 @ context=128000, time: 17 secs
|
||||
Wed Oct 21 07:49:55 AM MST 2026 - ministral-3:3b w/ 6 Thread(s): tokens/sec: 13.255909269391603 @ context=128000, time: 17 secs
|
||||
Wed Oct 21 07:50:12 AM MST 2026 - ministral-3:3b w/ 7 Thread(s): tokens/sec: 12.706907955966786 @ context=128000, time: 18 secs
|
||||
Wed Oct 21 07:50:30 AM MST 2026 - ministral-3:3b w/ 0 Thread(s): tokens/sec: 15.354264377193688 @ context=128000, time: 17 secs
|
||||
```
|
||||
|
||||
### Larger Models
|
||||
|
||||
#### qwen3.8:27b
|
||||
|
||||
```console
|
||||
$ ollama-cpu qwen3.8:27b
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 04:44:54 AM MST 2026 - qwen3.8:27b w/ 4 Thread(s), tokens/sec: 2.024676406965962 @ context=257000
|
||||
Wed Oct 21 04:45:39 AM MST 2026 - qwen3.8:27b w/ 5 Thread(s), tokens/sec: 2.0480156821567044 @ context=257000
|
||||
Wed Oct 21 04:46:19 AM MST 2026 - qwen3.8:27b w/ 6 Thread(s), tokens/sec: 2.184879704982382 @ context=257000
|
||||
Wed Oct 21 04:46:58 AM MST 2026 - qwen3.8:27b w/ 7 Thread(s), tokens/sec: 2.4228105619148526 @ context=257000
|
||||
Wed Oct 21 04:47:36 AM MST 2026 - qwen3.8:27b w/ 8 Thread(s), tokens/sec: 2.472564250465107 @ context=257000
|
||||
```
|
||||
|
||||
```console
|
||||
$ ollama-cpu qwen3.8:27b 32000
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 04:56:51 AM MST 2026 - qwen3.8:27b w/ 4 Thread(s), tokens/sec: 1.9083129860906882 @ context=32000
|
||||
Wed Oct 21 04:57:30 AM MST 2026 - qwen3.8:27b w/ 5 Thread(s), tokens/sec: 2.727908205888872 @ context=32000
|
||||
Wed Oct 21 04:58:00 AM MST 2026 - qwen3.8:27b w/ 6 Thread(s), tokens/sec: 2.133796334310243 @ context=32000
|
||||
Wed Oct 21 04:58:35 AM MST 2026 - qwen3.8:27b w/ 7 Thread(s), tokens/sec: 2.6835810717324833 @ context=32000
|
||||
Wed Oct 21 04:59:04 AM MST 2026 - qwen3.8:27b w/ 8 Thread(s), tokens/sec: 2.5231895597861493 @ context=32000
|
||||
```
|
||||
|
||||
#### qwen3.6:27b
|
||||
|
||||
```console
|
||||
$ for m in qwen3.6:27b mistral-small3.2:24b ministral-3:14b ministral-3:3b codestral:22b qwen2.5-coder:32b; do for c in 32000 128000 256000; do ollama_threads $m $c; done; done
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 06:27:01 AM MST 2026 - qwen3.6:27b w/ 4 Thread(s): tokens/sec: 2.7334336715235645 @ context=32000, time: 118 secs
|
||||
Wed Oct 21 06:28:59 AM MST 2026 - qwen3.6:27b w/ 5 Thread(s): tokens/sec: 2.4123293729892428 @ context=32000, time: 322 secs
|
||||
Wed Oct 21 06:34:21 AM MST 2026 - qwen3.6:27b w/ 6 Thread(s): tokens/sec: 3.13023193776124 @ context=32000, time: 100 secs
|
||||
Wed Oct 21 06:36:01 AM MST 2026 - qwen3.6:27b w/ 7 Thread(s): tokens/sec: 2.8468948357981065 @ context=32000, time: 118 secs
|
||||
Wed Oct 21 06:16:55 AM MST 2026 - qwen3.6:27b w/ 0 Thread(s): tokens/sec: 2.9964513666573485 @ context=32000, time: 122 secs
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 06:45:42 AM MST 2026 - qwen3.6:27b w/ 4 Thread(s): tokens/sec: 2.978761247100222 @ context=128000, time: 79 secs
|
||||
Wed Oct 21 06:47:01 AM MST 2026 - qwen3.6:27b w/ 5 Thread(s): tokens/sec: 2.9705167965150583 @ context=128000, time: 79 secs
|
||||
Wed Oct 21 06:48:20 AM MST 2026 - qwen3.6:27b w/ 6 Thread(s): tokens/sec: 2.778849178516606 @ context=128000, time: 71 secs
|
||||
Wed Oct 21 06:49:31 AM MST 2026 - qwen3.6:27b w/ 7 Thread(s): tokens/sec: 3.0804550493595095 @ context=128000, time: 76 secs
|
||||
Wed Oct 21 06:38:00 AM MST 2026 - qwen3.6:27b w/ 0 Thread(s): tokens/sec: 2.7734041760644956 @ context=128000, time: 75 secs
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 06:57:59 AM MST 2026 - qwen3.6:27b w/ 4 Thread(s): tokens/sec: 2.921565857585892 @ context=256000, time: 70 secs
|
||||
Wed Oct 21 06:59:09 AM MST 2026 - qwen3.6:27b w/ 5 Thread(s): tokens/sec: 2.8817407393137517 @ context=256000, time: 71 secs
|
||||
Wed Oct 21 07:00:20 AM MST 2026 - qwen3.6:27b w/ 6 Thread(s): tokens/sec: 2.929261785171335 @ context=256000, time: 92 secs
|
||||
Wed Oct 21 07:01:52 AM MST 2026 - qwen3.6:27b w/ 7 Thread(s): tokens/sec: 3.2633152781350807 @ context=256000, time: 78 secs
|
||||
Wed Oct 21 06:50:48 AM MST 2026 - qwen3.6:27b w/ 0 Thread(s): tokens/sec: 2.892592086714092 @ context=256000, time: 76 secs
|
||||
```
|
||||
|
||||
#### qwen3.5:27b
|
||||
|
||||
This one is weird. Might need a re-do to confirm?
|
||||
|
||||
```console
|
||||
Wed Oct 21 07:59:14 AM MST 2026 - qwen3.5:27b w/ 4 Thread(s): tokens/sec: 2.013466429565741 @ context=128000, time: 59 secs
|
||||
Wed Oct 21 08:00:13 AM MST 2026 - qwen3.5:27b w/ 6 Thread(s): tokens/sec: 1.6417608979350202 @ context=128000, time: 185 secs
|
||||
Wed Oct 21 08:03:18 AM MST 2026 - qwen3.5:27b w/ 7 Thread(s): tokens/sec: 1.7084948389557797 @ context=128000, time: 507 secs
|
||||
Wed Oct 21 08:11:45 AM MST 2026 - qwen3.5:27b w/ 0 Thread(s): tokens/sec: 2.0470935786636977 @ context=128000, time: 320 secs
|
||||
```
|
||||
|
||||
#### qwen2.5-coder:32b
|
||||
|
||||
```console
|
||||
Wed Oct 21 07:53:00 AM MST 2026 - qwen2.5-coder:32b w/ 4 Thread(s): tokens/sec: 1.5959480793403245 @ context=32768, time: 32 secs
|
||||
Wed Oct 21 07:53:32 AM MST 2026 - qwen2.5-coder:32b w/ 6 Thread(s): tokens/sec: 1.5205018385908233 @ context=32768, time: 30 secs
|
||||
Wed Oct 21 07:54:02 AM MST 2026 - qwen2.5-coder:32b w/ 7 Thread(s): tokens/sec: 1.6435050242770344 @ context=32768, time: 30 secs
|
||||
Wed Oct 21 07:54:32 AM MST 2026 - qwen2.5-coder:32b w/ 0 Thread(s): tokens/sec: 1.616470672291769 @ context=32768, time: 31 secs
|
||||
```
|
||||
|
||||
#### devstral-small-2:24b
|
||||
|
||||
```console
|
||||
$ for c in 32000 128000 192000; do ollama_threads devstral-small-2:24b $c; done
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 06:05:11 AM MST 2026 - devstral-small-2:24b w/ 4 Thread(s): tokens/sec: 2.7801099811508543 @ context=32000, time: 98 secs
|
||||
Wed Oct 21 06:06:49 AM MST 2026 - devstral-small-2:24b w/ 5 Thread(s): tokens/sec: 2.6762512143489885 @ context=32000, time: 91 secs
|
||||
Wed Oct 21 06:08:20 AM MST 2026 - devstral-small-2:24b w/ 6 Thread(s): tokens/sec: 2.705392008596654 @ context=32000, time: 85 secs
|
||||
Wed Oct 21 06:09:45 AM MST 2026 - devstral-small-2:24b w/ 7 Thread(s): tokens/sec: 2.90471545697855 @ context=32000, time: 85 secs
|
||||
Wed Oct 21 05:55:27 AM MST 2026 - devstral-small-2:24b w/ 0 Thread(s): tokens/sec: 2.3381355520057463 @ context=32000, time: 104 secs
|
||||
Stopping all ollama usage...
|
||||
TBD
|
||||
```
|
||||
|
||||
#### mistral-small-3.2:24b
|
||||
|
||||
```console
|
||||
$ for m in mistral-small3.2:24b ministral-3:14b ministral-3:3b codestral:22b qwen2.5-coder:32b qwen3.5:35b qwen3.5:27b; do for c in 128000; do ollama_threads $m $c; done; done
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 07:18:16 AM MST 2026 - mistral-small3.2:24b w/ 4 Thread(s): tokens/sec: 2.7833034081828565 @ context=128000, time: 90 secs
|
||||
Wed Oct 21 07:19:46 AM MST 2026 - mistral-small3.2:24b w/ 5 Thread(s): tokens/sec: 2.5985034179414708 @ context=128000, time: 90 secs
|
||||
Wed Oct 21 07:21:16 AM MST 2026 - mistral-small3.2:24b w/ 6 Thread(s): tokens/sec: 2.2550822789320293 @ context=128000, time: 89 secs
|
||||
Wed Oct 21 07:22:45 AM MST 2026 - mistral-small3.2:24b w/ 7 Thread(s): tokens/sec: 2.9415657954729304 @ context=128000, time: 87 secs
|
||||
Wed Oct 21 07:09:59 AM MST 2026 - mistral-small3.2:24b w/ 0 Thread(s): tokens/sec: 2.9048032082970474 @ context=128000, time: 79 secs
|
||||
```
|
||||
|
||||
#### codestral:22b
|
||||
|
||||
```console
|
||||
Wed Oct 21 07:50:47 AM MST 2026 - codestral:22b w/ 4 Thread(s): tokens/sec: 3.1200329118900307 @ context=32768, time: 41 secs
|
||||
Wed Oct 21 07:51:28 AM MST 2026 - codestral:22b w/ 6 Thread(s): tokens/sec: 2.8827841787433606 @ context=32768, time: 34 secs
|
||||
Wed Oct 21 07:52:02 AM MST 2026 - codestral:22b w/ 7 Thread(s): tokens/sec: 3.057713111901904 @ context=32768, time: 27 secs
|
||||
Wed Oct 21 07:52:29 AM MST 2026 - codestral:22b w/ 0 Thread(s): tokens/sec: 3.0179434414117803 @ context=32768, time: 31 secs
|
||||
```
|
||||
|
||||
### MoE Models
|
||||
|
||||
#### qwen3.6:35b
|
||||
|
||||
Tests WAY faster than the dense models. Context does not seem to affect timing.
|
||||
|
||||
```console
|
||||
$ for c in 16000 32000 64000 96000 128000 192000 256000; do ollama_threads qwen3.6:35b $c; done
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:04:37 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s), tokens/sec: 14.679419453925597 @ context=16000
|
||||
Wed Oct 21 05:05:11 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s), tokens/sec: 13.831044087619176 @ context=16000
|
||||
Wed Oct 21 05:05:43 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s), tokens/sec: 13.752831594816088 @ context=16000
|
||||
Wed Oct 21 05:06:09 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s), tokens/sec: 14.603026210396049 @ context=16000
|
||||
Wed Oct 21 05:06:37 AM MST 2026 - qwen3.6:35b w/ 8 Thread(s), tokens/sec: 14.376794631809172 @ context=16000
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:11:39 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s), tokens/sec: 13.683089387469174 @ context=32000
|
||||
Wed Oct 21 05:12:04 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s), tokens/sec: 13.447667625607968 @ context=32000
|
||||
Wed Oct 21 05:12:31 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s), tokens/sec: 11.170529760956333 @ context=32000
|
||||
Wed Oct 21 05:12:57 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s), tokens/sec: 13.448480713710353 @ context=32000
|
||||
Wed Oct 21 05:13:27 AM MST 2026 - qwen3.6:35b w/ 8 Thread(s), tokens/sec: 13.143672445847205 @ context=32000
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:22:59 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s), tokens/sec: 14.209790405591518 @ context=64000, 24 secs elapsed
|
||||
Wed Oct 21 05:23:23 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s), tokens/sec: 11.334255701323816 @ context=64000, 29 secs elapsed
|
||||
Wed Oct 21 05:23:52 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s), tokens/sec: 13.279266939258937 @ context=64000, 29 secs elapsed
|
||||
Wed Oct 21 05:24:21 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s), tokens/sec: 14.27680090014006 @ context=64000, 21 secs elapsed
|
||||
Wed Oct 21 05:24:42 AM MST 2026 - qwen3.6:35b w/ 8 Thread(s), tokens/sec: 13.99919128227428 @ context=64000, 25 secs elapsed
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:29:50 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s), tokens/sec: 13.478375923353315 @ context=96000, 28 secs elapsed
|
||||
Wed Oct 21 05:30:18 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s), tokens/sec: 12.90997320417067 @ context=96000, 23 secs elapsed
|
||||
Wed Oct 21 05:30:41 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s), tokens/sec: 12.956446350317137 @ context=96000, 23 secs elapsed
|
||||
Wed Oct 21 05:31:05 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s), tokens/sec: 13.93074896590209 @ context=96000, 22 secs elapsed
|
||||
Wed Oct 21 05:31:26 AM MST 2026 - qwen3.6:35b w/ 8 Thread(s), tokens/sec: 12.688771917209992 @ context=96000, 22 secs elapsed
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:36:08 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s), tokens/sec: 11.971487833921072 @ context=128000, 23 secs elapsed
|
||||
Wed Oct 21 05:36:31 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s), tokens/sec: 12.704959054740291 @ context=128000, 24 secs elapsed
|
||||
Wed Oct 21 05:36:55 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s), tokens/sec: 11.484965120109196 @ context=128000, 28 secs elapsed
|
||||
Wed Oct 21 05:37:23 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s), tokens/sec: 11.957040482880984 @ context=128000, 30 secs elapsed
|
||||
Wed Oct 21 05:37:53 AM MST 2026 - qwen3.6:35b w/ 8 Thread(s), tokens/sec: 10.165480245815742 @ context=128000, 27 secs elapsed
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:44:05 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s): , tokens/sec: 11.794151678144981 @ context=192000, time: 22 secs
|
||||
Wed Oct 21 05:44:27 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s): , tokens/sec: 13.191786678902528 @ context=192000, time: 30 secs
|
||||
Wed Oct 21 05:44:57 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s): , tokens/sec: 12.974118764961352 @ context=192000, time: 25 secs
|
||||
Wed Oct 21 05:45:22 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s): , tokens/sec: 13.684751495860636 @ context=192000, time: 22 secs
|
||||
Wed Oct 21 05:41:57 AM MST 2026 - qwen3.6:35b w/ 0 Thread(s): , tokens/sec: 14.771664402476594 @ context=192000, time: 22 secs
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:47:40 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s): , tokens/sec: 11.75920993970465 @ context=256000, time: 25 secs
|
||||
Wed Oct 21 05:48:06 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s): , tokens/sec: 13.414819339156582 @ context=256000, time: 26 secs
|
||||
Wed Oct 21 05:48:32 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s): , tokens/sec: 12.512960121852013 @ context=256000, time: 31 secs
|
||||
Wed Oct 21 05:49:03 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s): , tokens/sec: 11.610753098619734 @ context=256000, time: 29 secs
|
||||
Wed Oct 21 05:45:46 AM MST 2026 - qwen3.6:35b w/ 0 Thread(s): , tokens/sec: 12.81995869775592 @ context=256000, time: 23 secs
|
||||
```
|
||||
|
||||
#### qwen3.5:35b
|
||||
|
||||
```console
|
||||
$ for c in 32000 128000 256000; do ollama_threads qwen3.5:35b $c; done
|
||||
Wed Oct 21 07:55:03 AM MST 2026 - qwen3.5:35b w/ 4 Thread(s): tokens/sec: 10.3573012564637 @ context=128000, time: 94 secs
|
||||
Wed Oct 21 07:56:37 AM MST 2026 - qwen3.5:35b w/ 6 Thread(s): tokens/sec: 11.929392994980638 @ context=128000, time: 39 secs
|
||||
Wed Oct 21 07:57:17 AM MST 2026 - qwen3.5:35b w/ 7 Thread(s): tokens/sec: 13.082804815917008 @ context=128000, time: 36 secs
|
||||
Wed Oct 21 07:57:53 AM MST 2026 - qwen3.5:35b w/ 0 Thread(s): tokens/sec: 12.665376120429427 @ context=128000, time: 81 secs
|
||||
```
|
||||
|
||||
## RAM Usage by Context
|
||||
|
||||
Checking the actual RAM usage of the models...
|
||||
|
||||
### `ollama_sizes m 16000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 16000 | 10GB |
|
||||
| ministral-3:14b | 9.1GB | 16000 | 11GB |
|
||||
| ministral-3:8b | 6.0GB | 16000 | 7.8GB |
|
||||
| ministral-3:3b | 3.0GB | 16000 | 4.1GB |
|
||||
| mistral-small3.2:24b | 15GB | 16000 | 17GB |
|
||||
| mistral:7b | 4.4GB | 16000 | 6.8GB |
|
||||
| codestral:22b | 12GB | 16000 | 16GB |
|
||||
| devstral-small-2:24b | 15GB | 16000 | 17GB |
|
||||
| qwen2.5-coder:32b | 19GB | 16000 | 24GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 16000 | 12GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 16000 | 5.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 16000 | 2.7GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 16000 | 1.6GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 16000 | 701MB |
|
||||
| qwen3-coder:30b | 18GB | 16000 | 20GB |
|
||||
| qwen3.5:35b | 22GB | 16000 | 22GB |
|
||||
| qwen3.5:27b | 17GB | 16000 | 18GB |
|
||||
| qwen3.5:9b | 6.6GB | 16000 | 6.7GB |
|
||||
| qwen3.5:4b | 3.3GB | 16000 | 3.7GB |
|
||||
| qwen3.5:2b | 2.7GB | 16000 | 2.6GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 16000 | 630MB |
|
||||
| qwen3.6:35b | 22GB | 16000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 16000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 16000 | 18GB |
|
||||
|
||||
### `ollama_sizes m 32000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 32000 | 12GB |
|
||||
| ministral-3:14b | 9.1GB | 32000 | 13GB |
|
||||
| ministral-3:8b | 6.0GB | 32000 | 10GB |
|
||||
| ministral-3:3b | 3.0GB | 32000 | 5.9GB |
|
||||
| mistral-small3.2:24b | 15GB | 32000 | 20GB |
|
||||
| mistral:7b | 4.4GB | 32000 | 8.9GB |
|
||||
| codestral:22b | 12GB | 32000 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 32000 | 20GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32000 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32000 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32000 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32000 | 3.3GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32000 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32000 | 929MB |
|
||||
| qwen3-coder:30b | 18GB | 32000 | 21GB |
|
||||
| qwen3.5:35b | 22GB | 32000 | 22GB |
|
||||
| qwen3.5:27b | 17GB | 32000 | 19GB |
|
||||
| qwen3.5:9b | 6.6GB | 32000 | 7.3GB |
|
||||
| qwen3.5:4b | 3.3GB | 32000 | 4.2GB |
|
||||
| qwen3.5:2b | 2.7GB | 32000 | 2.8GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 32000 | 695MB |
|
||||
| qwen3.6:35b | 22GB | 32000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 32000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 32000 | 18GB |
|
||||
|
||||
### `ollama_sizes m 64000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 64000 | 18GB |
|
||||
| ministral-3:14b | 9.1GB | 64000 | 19GB |
|
||||
| ministral-3:8b | 6.0GB | 64000 | 14GB |
|
||||
| ministral-3:3b | 3.0GB | 64000 | 9.6GB |
|
||||
| mistral-small3.2:24b | 15GB | 64000 | 26GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 64000 | 25GB |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB |
|
||||
| qwen3.5:27b | 17GB | 64000 | 22GB |
|
||||
| qwen3.5:9b | 6.6GB | 64000 | 8.8GB |
|
||||
| qwen3.5:4b | 3.3GB | 64000 | 5.6GB |
|
||||
| qwen3.5:2b | 2.7GB | 64000 | 3.5GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 64000 | 999MB |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 64000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 64000 | 18GB |
|
||||
|
||||
### ollama_sizes m 80000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 80000 | 21GB |
|
||||
| ministral-3:14b | 9.1GB | 80000 | 22GB |
|
||||
| ministral-3:8b | 6.0GB | 80000 | 17GB |
|
||||
| ministral-3:3b | 3.0GB | 80000 | 11GB |
|
||||
| mistral-small3.2:24b | 15GB | 80000 | 28GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 80000 | 28GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 80000 | 27GB |
|
||||
| qwen3.5:35b | 22GB | 80000 | 23GB |
|
||||
| qwen3.5:27b | 17GB | 80000 | 23GB |
|
||||
| qwen3.5:9b | 6.6GB | 80000 | 9.4GB |
|
||||
| qwen3.5:4b | 3.3GB | 80000 | 6.2GB |
|
||||
| qwen3.5:2b | 2.7GB | 80000 | 3.8GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 80000 | 1.1GB |
|
||||
| qwen3.6:35b | 22GB | 80000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 80000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 80000 | 18GB |
|
||||
|
||||
### ollama_sizes m 96000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 96000 | 23GB |
|
||||
| ministral-3:14b | 9.1GB | 96000 | 25GB |
|
||||
| ministral-3:8b | 6.0GB | 96000 | 19GB |
|
||||
| ministral-3:3b | 3.0GB | 96000 | 13GB |
|
||||
| mistral-small3.2:24b | 15GB | 96000 | 31GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 96000 | 31GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 96000 | 28GB |
|
||||
| qwen3.5:35b | 22GB | 96000 | 24GB |
|
||||
| qwen3.5:27b | 17GB | 96000 | 24GB |
|
||||
| qwen3.5:9b | 6.6GB | 96000 | 9.9GB |
|
||||
| qwen3.5:4b | 3.3GB | 96000 | 6.8GB |
|
||||
| qwen3.5:2b | 2.7GB | 96000 | 4.1GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 96000 | 1.2GB |
|
||||
| qwen3.6:35b | 22GB | 96000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 96000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 96000 | 18GB |
|
||||
|
||||
### ollama_sizes m 128000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 128000 | 29GB |
|
||||
| ministral-3:14b | 9.1GB | 128000 | 30GB |
|
||||
| ministral-3:8b | 6.0GB | 128000 | 24GB |
|
||||
| ministral-3:3b | 3.0GB | 128000 | 16GB |
|
||||
| mistral-small3.2:24b | 15GB | 128000 | 36GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 128000 | 36GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 128000 | 32GB |
|
||||
| qwen3.5:35b | 22GB | 128000 | 24GB |
|
||||
| qwen3.5:27b | 17GB | 128000 | 26GB |
|
||||
| qwen3.5:9b | 6.6GB | 128000 | 11GB |
|
||||
| qwen3.5:4b | 3.3GB | 128000 | 8.0GB |
|
||||
| qwen3.5:2b | 2.7GB | 128000 | 4.6GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 128000 | 1.4GB |
|
||||
| qwen3.6:35b | 22GB | 128000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 128000 | 19GB |
|
||||
| qwen3.8:27b | 17GB | 128000 | 19GB |
|
||||
|
||||
### ollama_sizes m 160000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 160000 | 34GB |
|
||||
| ministral-3:14b | 9.1GB | 160000 | 35GB |
|
||||
| ministral-3:8b | 6.0GB | 160000 | 28GB |
|
||||
| ministral-3:3b | 3.0GB | 160000 | 20GB |
|
||||
| mistral-small3.2:24b | 15GB | 131072 | 37GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 160000 | 42GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 160000 | 35GB |
|
||||
| qwen3.5:35b | 22GB | 160000 | 25GB |
|
||||
| qwen3.5:27b | 17GB | 160000 | 28GB |
|
||||
| qwen3.5:9b | 6.6GB | 160000 | 12GB |
|
||||
| qwen3.5:4b | 3.3GB | 160000 | 9.2GB |
|
||||
| qwen3.5:2b | 2.7GB | 160000 | 5.1GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 160000 | 1.6GB |
|
||||
| qwen3.6:35b | 22GB | 160000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 160000 | 19GB |
|
||||
| qwen3.8:27b | 17GB | 160000 | 19GB |
|
||||
|
||||
### ollama_sizes m 192000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 192000 | 39GB |
|
||||
| ministral-3:14b | 9.1GB | 192000 | 41GB |
|
||||
| ministral-3:8b | 6.0GB | 192000 | 33GB |
|
||||
| ministral-3:3b | 3.0GB | 192000 | 23GB |
|
||||
| mistral-small3.2:24b | 15GB | 131072 | 37GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 192000 | 47GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 192000 | 38GB |
|
||||
| qwen3.5:35b | 22GB | 192000 | 26GB |
|
||||
| qwen3.5:27b | 17GB | 192000 | 30GB |
|
||||
| qwen3.5:9b | 6.6GB | 192000 | 13GB |
|
||||
| qwen3.5:4b | 3.3GB | 192000 | 10GB |
|
||||
| qwen3.5:2b | 2.7GB | 192000 | 5.6GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 192000 | 1.8GB |
|
||||
| qwen3.6:35b | 22GB | 192000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 192000 | 19GB |
|
||||
| qwen3.8:27b | 17GB | 192000 | 19GB |
|
||||
|
||||
### ollama_sizes m 224000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 224000 | 45GB |
|
||||
| ministral-3:14b | 9.1GB | 224000 | 46GB |
|
||||
| ministral-3:8b | 6.0GB | 224000 | 37GB |
|
||||
| ministral-3:3b | 3.0GB | 224000 | 27GB |
|
||||
| mistral-small3.2:24b | 15GB | 131072 | 37GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 224000 | 53GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 224000 | 41GB |
|
||||
| qwen3.5:35b | 22GB | 224000 | 27GB |
|
||||
| qwen3.5:27b | 17GB | 224000 | 33GB |
|
||||
| qwen3.5:9b | 6.6GB | 224000 | 14GB |
|
||||
| qwen3.5:4b | 3.3GB | 224000 | 11GB |
|
||||
| qwen3.5:2b | 2.7GB | 224000 | 6.2GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 224000 | 2.0GB |
|
||||
| qwen3.6:35b | 22GB | 224000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 224000 | 19GB |
|
||||
| qwen3.8:27b | 17GB | 224000 | 19GB |
|
||||
|
||||
### `ollama_sizes m 256000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 256000 | 50GB |
|
||||
| ministral-3:14b | 9.1GB | 256000 | 51GB |
|
||||
| ministral-3:8b | 6.0GB | 256000 | 42GB |
|
||||
| ministral-3:3b | 3.0GB | 256000 | 30GB |
|
||||
| mistral-small3.2:24b | 15GB | 131072 | 37GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 256000 | 58GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 256000 | 45GB |
|
||||
| qwen3.5:35b | 22GB | 256000 | 28GB |
|
||||
| qwen3.5:27b | 17GB | 256000 | 35GB |
|
||||
| qwen3.5:9b | 6.6GB | 256000 | 15GB |
|
||||
| qwen3.5:4b | 3.3GB | 256000 | 12GB |
|
||||
| qwen3.5:2b | 2.7GB | 256000 | 6.7GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 256000 | 2.2GB |
|
||||
| qwen3.6:35b | 22GB | 256000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 256000 | 20GB |
|
||||
| qwen3.8:27b | 17GB | 256000 | 20GB |
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,498 @@
|
||||
---
|
||||
# Move the plays related to AGENTS.md to its own file since it is now so large.
|
||||
|
||||
- name: Workstation | Linux | Software | AI | Sandbox | Dir
|
||||
ansible.builtin.file:
|
||||
dest: "{{ user_user.home }}/AI-Sandbox"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | AI | Sandbox | Env
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/AI-Sandbox/{{ item }}"
|
||||
marker: "# {mark} | MANAGE BY ANSIBLE | Env Vars"
|
||||
content: |
|
||||
if [[ -d "$HOME/bin" ]]; then
|
||||
export PATH="$HOME/bin:$PATH"
|
||||
fi
|
||||
|
||||
export ANDROID_HOME="{{ user_user.home }}/SDKs/Android/Sdk"
|
||||
export GRADLE_USER_HOME={{ user_user.home }}/.gradle
|
||||
export PATH="$ANDROID_HOME/platform-tools:$PATH"
|
||||
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"
|
||||
|
||||
export FLUTTER_HOME="{{ user_user.home }}/SDKs/Flutter/flutter"
|
||||
export PUB_CACHE={{ user_user.home }}/.pub-cache
|
||||
export PATH="$FLUTTER_HOME/bin:$PATH"
|
||||
|
||||
export JAVA_HOME="{{ user_user.home }}/SDKs/Java"
|
||||
export PATH="$JAVA_HOME/bin:$PATH"
|
||||
create: true
|
||||
backup: false
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
loop:
|
||||
- ".bashrc"
|
||||
|
||||
- name: Workstation | Linux | Software | AI | Sandbox | AGENTS.md
|
||||
ansible.builtin.copy:
|
||||
dest: "{{ user_user.home }}/AI-Sandbox/AGENTS.md"
|
||||
content: |
|
||||
# Environment
|
||||
|
||||
You are running in a Docker container called Open Terminal. We are
|
||||
communicating via Open WebUI, also being run in a Docker
|
||||
container. You are the user `user` and have been granted access to
|
||||
the designer's Code and SDKs via mount at `{{ user_user.home }}`.
|
||||
|
||||
Host system is typically (but not always) a systemd-free distro
|
||||
such as Artix or Devuan. User likes the `runit` service manager.
|
||||
`elogind` is used rather than systemd's logind. Desktop is i3 and
|
||||
display manager is lightdm. Servers are run on Debian and Docker
|
||||
containers are typically debian:trixie-slim with a Dockerfile
|
||||
called by compose.yml which adds the necessary packages, sometimes
|
||||
building from source if the Debian executable is too old.
|
||||
|
||||
If the `$GOT_EM` environment variable is `true` then all the
|
||||
necessary packages for compiling Android and Flutter were
|
||||
installed. If it is `false` then they were not installed, and
|
||||
compiling will fail. Please check this before trying and alert me
|
||||
if they need added. If we don't have Internet, then ask me to
|
||||
compile or run whatever command is needed on the host system.
|
||||
|
||||
# Rules
|
||||
|
||||
Never use any `git` subcommands that change the repo, including
|
||||
but not limited to `add`, `commit`, `pull`, `push`, `branch`,
|
||||
`switch`, etc. The user is who controls the respository changes.
|
||||
You may use informational git subcommands such as `git status`,
|
||||
and may occasionally be asked to run `git clone` type commands.
|
||||
|
||||
If any programs need installed in order to work on a project, we
|
||||
need to document that in an `install.sh` script, as well as add it
|
||||
to `~/PACKAGES.txt` so that we can ensure they stay installed.
|
||||
`install.sh` scripts should be for both `apt` systems (Debian,
|
||||
Ubuntu) and pacman system (Arch, Artix). using distribution
|
||||
package managers is preferable over `pip` and `npm` when
|
||||
possible, unless the project is actually Python or Node.js.
|
||||
|
||||
The user manages the `{{ user_user.home }}/SDKs` directory. Do not
|
||||
modify it. Instead, ask if anything needs updated or added.
|
||||
|
||||
Never manually edit, modify, delete, alter, replace, etc any
|
||||
files under system folders such as `/usr`. Anything under `/` is
|
||||
managed by the system. If you need assistance changing anything
|
||||
such as `/usr/lib/jvm`, please ask the user and halt all further
|
||||
operations until you have received feedback.
|
||||
|
||||
# Effort
|
||||
|
||||
It is never okay to brute force a solution if something is not
|
||||
working well. it is better to ask the user for assistance or alert
|
||||
them that you've encountered blockers and then cease the process
|
||||
until you've received feedback. This especially relates to when
|
||||
system errors occur which are not related to the source code, such
|
||||
as a compiler failing to be found or an SDK version mismatch. If
|
||||
the error is with the source code though, troubleshooting and code
|
||||
changes should continue until the program is compiling properly.
|
||||
|
||||
For CLI projects such as script languages, the final result should
|
||||
always be tested both to run successfully and have the proper
|
||||
output. All test cases should be analyzed and walked through,
|
||||
which will help ensure all the requirements have been met.
|
||||
|
||||
For GUI programs (such as Android, Flutter, Kotlin Multiplatform,
|
||||
Kivy, etc), the project should be tested to both compile & build
|
||||
successfully and also generate the proper installation file (APK,
|
||||
Linux Bundle). Once that is confirmed, the user/desginer will test
|
||||
that the application meets the proper requirements.
|
||||
|
||||
# Preferences
|
||||
|
||||
You have free reign over your home directory. Feel free to
|
||||
create memory files or anything else which would benefit you.
|
||||
|
||||
Everything we create should have both Desktop Linux and Android
|
||||
in mind. Windows, MacOS, and iOS will never be compiled for, but
|
||||
if we can do things in a way which makes it easy for others to
|
||||
fork the project and add the support themselves, then that's best.
|
||||
|
||||
# Versions
|
||||
|
||||
These are the versions of plugins and languages we need to use.
|
||||
If you know of an important upgrade from them, please let me know.
|
||||
|
||||
If you find that an application is already a newer version than
|
||||
those listed here, that is acceptable, never attempt to downgrade
|
||||
without explicitly asking the user first and having a good reason.
|
||||
|
||||
## Android / Flutter
|
||||
|
||||
- Gradle 9.8.2
|
||||
- AGP 9.5.0
|
||||
- Kotlin 2.4.21
|
||||
- Java JDK 17
|
||||
- Flutter Plugin Loader 1.0.0
|
||||
- compileSdk 37
|
||||
- targetSDK 37
|
||||
|
||||
Regardless of whether AGP bundles Kotlin, we need to specify it to
|
||||
avoid things like "Your project's Kotlin version (2.2.10) is lower
|
||||
than Flutter's minimum supported version of 2.2.20. Please upgrade
|
||||
your Kotlin version." This is exactly why we use these versions,
|
||||
plus it helps document what's actually being used over guessing.
|
||||
|
||||
Only the arm-v8a architecture needs included in the release
|
||||
builds. x86 and others should continue to exist in the debug run.
|
||||
This will help save space on local servers like Gitea and F-Droid.
|
||||
If code for this does not exist, please add splitting or filtering
|
||||
so that when the designer generates a signed APK it's only v8a.
|
||||
|
||||
Android : paths are from the project root.
|
||||
Flutter : paths are under the folder `android`.
|
||||
|
||||
### All Android Project Types
|
||||
|
||||
#### ./gradle/wrapper/grade-wrapper.properties
|
||||
|
||||
```
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.2-bin.zip
|
||||
```
|
||||
|
||||
#### ./settings.gradle.kts
|
||||
|
||||
```
|
||||
id("com.android.application") version "9.5.0" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.4.21" apply false
|
||||
```
|
||||
|
||||
#### ./app/build.gradle.kts
|
||||
|
||||
```
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
kotlin {
|
||||
compilerOptions {
|
||||
jvmTarget.set(JvmTarget.JVM_17)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Also enable minify and shrink while in there.
|
||||
|
||||
```
|
||||
buildTypes {
|
||||
getByName("release") {
|
||||
...
|
||||
isMinifyEnabled = true
|
||||
isShrinkResources = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Flutter Projects
|
||||
|
||||
#### ./settings.gradle.kts
|
||||
|
||||
```
|
||||
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
||||
```
|
||||
|
||||
### Native Kotlin Apps
|
||||
|
||||
These only apply to Android apps which are not Flutter, Kivy, etc.
|
||||
|
||||
#### Plugin Versions
|
||||
|
||||
##### ./gradle/libs.versions.toml
|
||||
|
||||
```
|
||||
[versions]
|
||||
agp = "9.5.0"
|
||||
kotlin = "2.4.21"
|
||||
coreKtx = "1.19.1"
|
||||
junit = "4.13.2"
|
||||
junitVersion = "1.3.0"
|
||||
espressoCore = "3.7.0"
|
||||
lifecycleRuntimeKtx = "2.11.0"
|
||||
activityCompose = "1.13.0"
|
||||
composeBom = "2026.09.00"
|
||||
```
|
||||
|
||||
#### Kotlin Compose Fix
|
||||
|
||||
Also ensure Kotlin is coming from Compose and not Jetbrains.
|
||||
|
||||
##### ./gradle/libs.versions.toml
|
||||
|
||||
```
|
||||
[plugins]
|
||||
androidApplication = { id = "com.android.application", version.ref = "agp" }
|
||||
#jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
||||
kotlinCompose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
||||
```
|
||||
|
||||
##### ./build.gradle.kts
|
||||
|
||||
```
|
||||
plugins {
|
||||
alias(libs.plugins.androidApplication) apply false
|
||||
//alias(libs.plugins.jetbrainsKotlinAndroid) apply false
|
||||
alias(libs.plugins.kotlinCompose) apply false
|
||||
}
|
||||
```
|
||||
|
||||
##### ./app/build.gradle.kts
|
||||
|
||||
```
|
||||
plugins {
|
||||
alias(libs.plugins.androidApplication)
|
||||
//alias(libs.plugins.jetbrainsKotlinAndroid)
|
||||
alias(libs.plugins.kotlinCompose)
|
||||
}
|
||||
```
|
||||
|
||||
# Build Processes
|
||||
|
||||
How to compile certain projects. Tools to prefer. If a language
|
||||
or framework is not mentioned, then use the typical commands.
|
||||
|
||||
## Kotlin Multiplatform (KMP)
|
||||
|
||||
Used to create small native Android apps with the ability to also
|
||||
run against Desktop Linux. APK size is the greatest benefit for
|
||||
using KMP over something like Flutter or KivyMD.
|
||||
|
||||
### Kotlin Toolchain
|
||||
|
||||
This is the preferred build type when setting up new projects.
|
||||
|
||||
Please use `kotlin` rather than any `amper` commands. `amper` has
|
||||
been deprecated and is intentionally not present on the system.
|
||||
`kotlin` is available at the root of each KMP project. Examples:
|
||||
|
||||
```
|
||||
cd {{ user_user.home }}/Code/example-kmp-project/
|
||||
|
||||
# 1. Compile + link ALL targets (JVM, iOS, Android, native, etc.)
|
||||
./kotlin build
|
||||
|
||||
# 2. (Optional) Run tests across all targets
|
||||
./kotlin test
|
||||
|
||||
# 3. (Optional) Run all quality checks (tests + registered linters)
|
||||
./kotlin check
|
||||
```
|
||||
|
||||
### Gradle KMP
|
||||
|
||||
This is a legacy method, new projects will not be set up with it.
|
||||
Examples:
|
||||
|
||||
```
|
||||
# Compile all targets
|
||||
./gradlew assemble
|
||||
|
||||
# Or more explicitly (if you want to be sure nothing is skipped):
|
||||
./gradlew jvmJar assembleDebug assembleIosSimulatorArm64 # etc. per target
|
||||
|
||||
# Run all tests
|
||||
./gradlew allTests
|
||||
```
|
||||
|
||||
# Coding Conventions
|
||||
|
||||
Preferences related to how code should be written.
|
||||
|
||||
## All languages
|
||||
|
||||
If a value is going to be used more than once, even a small path or file
|
||||
name, it should exist in a variable.
|
||||
|
||||
Relative shebangs such as `#!/usr/bin/env bash` and `#!/usr/bin/env node`
|
||||
are always preferred over static shebangs such as `#!/bin/bash`, since
|
||||
scripts are run across a multitude of different systems.
|
||||
|
||||
### Layout
|
||||
|
||||
Programs should be laid out in 5 sections.
|
||||
|
||||
- Variables
|
||||
- Instantiate global variables and defaults used for parameters which
|
||||
do not get passed an explicit value by the user.
|
||||
- Functions
|
||||
- Functions to be used throughout the program, including the Usage.
|
||||
- Parameters / Validation
|
||||
- Parse the parameters, validate the input, and assign any defaults.
|
||||
- Main
|
||||
- The primary logic of the program, completes the task at hand.
|
||||
- Finish / Cleanup
|
||||
- Typically just `exit 0`, but sometimes a summary of what was done.
|
||||
|
||||
All sections may not always apply, such as with Hugo websites. With
|
||||
projects like Android apps this would apply to each individual function,
|
||||
method, and class. If a section does not need anything, it can be blank.
|
||||
|
||||
```
|
||||
public static void doThing(String thingName) {
|
||||
// Variables //
|
||||
String thingPrefix = "/place/for/thing/"
|
||||
|
||||
// Functions //
|
||||
|
||||
// Parameters //
|
||||
if (thingName.isEmpty) {
|
||||
Exception e = new Exception("No name passed!");
|
||||
throw e;
|
||||
}
|
||||
|
||||
// Main //
|
||||
runStuff(thingPrefix + thingName);
|
||||
|
||||
// Finish //
|
||||
}
|
||||
```
|
||||
|
||||
The comments do not need to be included, this example is just as valid,
|
||||
what maytters most is that the 5 section are done in order rather than
|
||||
instantiating variable mid-scope.
|
||||
|
||||
```
|
||||
public static void doThing(String thingName) {
|
||||
String thingPrefix = "/place/for/thing/"
|
||||
|
||||
if (thingName.isEmpty) {
|
||||
Exception e = new Exception("No name passed!");
|
||||
throw e;
|
||||
}
|
||||
|
||||
runStuff(thingPrefix + thingName);
|
||||
}
|
||||
```
|
||||
|
||||
`if` statements and loops start new scope, so they also need the layout
|
||||
applied to them. Loops may sometimes require a variable assignment before
|
||||
it begins which is completely okay and does not break the layout rule.
|
||||
This example has a Variables, Validation, Main, and Finish section without
|
||||
the use of labels or comments since the code itself is simple and small.
|
||||
|
||||
```
|
||||
count=0
|
||||
array="cats dogs giraffes rhinos horses"
|
||||
last_animal=""
|
||||
for animal in $array; do
|
||||
if (( count >= 3 )); then
|
||||
echo "That's enough! We finished at the ${last_animal}."
|
||||
break;
|
||||
fi
|
||||
|
||||
echo "We're looking at ${animal}."
|
||||
|
||||
last_animal=$animal
|
||||
(( count++ ))
|
||||
done
|
||||
```
|
||||
|
||||
Providing the user's input in error messages is really helpful and can aid
|
||||
their troubleshooting if things are not going according to expectations.
|
||||
|
||||
Example using Bash:
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
### Variables ###
|
||||
|
||||
declare A B
|
||||
typeset -i a b
|
||||
|
||||
### Functions ###
|
||||
|
||||
function usage() {
|
||||
status="$1"
|
||||
cat << EOF
|
||||
Usage: add.sh -a NUM -b NUM [-h]
|
||||
|
||||
Adds two numbers and prints out the full equation.
|
||||
|
||||
Example:
|
||||
|
||||
$ add.sh -a 5 -b 25
|
||||
5 + 25 = 30
|
||||
EOF
|
||||
exit $status
|
||||
}
|
||||
function add() {
|
||||
num1="$1"
|
||||
num2="$2"
|
||||
sum=""
|
||||
|
||||
if [[ -z $num1 || -z $num2 ]]; then
|
||||
echo "ERROR: Two numnbers must be passed."
|
||||
fi
|
||||
|
||||
sum=$(( num1 + num2 ))
|
||||
echo "${num1} + ${num2} = ${sum}"
|
||||
}
|
||||
|
||||
### Parameters ###
|
||||
|
||||
while getopts ':a:b:h' opt; do
|
||||
case $opt in
|
||||
a) A="$OPTARG" ;;
|
||||
b) B="$OPTARG" ;;
|
||||
h) usage 0 ;;
|
||||
*) echo "ERROR: Option $OPTARG not recognized." >&2 && usage 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$A" || -z "$B" ]]; then
|
||||
echo "ERROR: Both numbers need to be passed. A=${A} B=${B}" >&2
|
||||
usage 2
|
||||
fi
|
||||
a="$A" b="$B"
|
||||
if [[ "$a" != "$A" || "$b" != "$B" ]]; then
|
||||
echo "ERROR: Values contain non-numeric data, please try again." >&2
|
||||
echo "A=${A} B=${B}" >&2
|
||||
usage 3
|
||||
fi
|
||||
|
||||
### Main ###
|
||||
|
||||
add "$a" "$b"
|
||||
|
||||
### Finish ###
|
||||
|
||||
unset A B usage add
|
||||
exit 0
|
||||
```
|
||||
|
||||
## Bash
|
||||
|
||||
`[[ ]]` are preferred over `[ ]`, `test`, etc. `(( ))` are always fine.
|
||||
|
||||
When defining a function please use both the keyword `function` as well as
|
||||
the `()`, such as `function myfunc() {}`.
|
||||
|
||||
When instantiating global variables, please use `typeset` or `declare`
|
||||
rather than just `VAR1=""; VAR2=""`, such as:
|
||||
|
||||
```
|
||||
declare VAR1="" VAR2="" BOOL="true" BOOL2="false"
|
||||
typeset -i INT1=0 INT2=99
|
||||
```
|
||||
|
||||
When doing colored output, `tput` is always preferred over literal values.
|
||||
backup: false
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
@@ -13,30 +13,30 @@
|
||||
# https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Facts [01]
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
android_url: "https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip"
|
||||
android_download_file: "{{ user_user.home }}/Downloads/android-cmdline-tools.tar.xz"
|
||||
android_sdk_location: "{{ user_user.home }}/SDKs/Android/Sdk"
|
||||
android_report_file: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.sdk.android.txt"
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Facts [02]
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
android_bin_location: "{{ android_sdk_location }}/platform-tools"
|
||||
android_sdk_cmdline_temp: "{{ android_sdk_location }}/ansible"
|
||||
android_sdk_cmdline_final: "{{ android_sdk_location }}/cmdline-tools/latest/bin"
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Facts [03]
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
android_sdkmanager_temp: "{{ android_sdk_cmdline_temp }}/cmdline-tools/bin/sdkmanager"
|
||||
android_sdkmanager_final: "{{ android_sdk_cmdline_final }}/sdkmanager"
|
||||
android_sdkmanager_final2: "{{ android_sdk_cmdline_final }}/android"
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Facts [04]
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
android_sdkmanager2: "{{ android_sdkmanager_final2 }} sdk --sdk={{ android_sdk_location }}"
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Facts [05]
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
android_sdkmanager2_list: "{{ android_sdkmanager2 }} list"
|
||||
android_sdkmanager2_install: "{{ android_sdkmanager2 }} install"
|
||||
android_sdkmanager2_remove: "{{ android_sdkmanager2 }} remove"
|
||||
@@ -79,7 +79,7 @@
|
||||
### 14G .
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Facts [Downloads]
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
android_downloads_required:
|
||||
### 36 ### - Recommended by Android Studio and Flutter, deprecating August 2027.
|
||||
- build-tools/36.0.0
|
||||
@@ -150,37 +150,37 @@
|
||||
## Checks ##
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Check SDK Manager Exists [1/2]
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ android_sdkmanager_temp }}"
|
||||
get_attributes: false
|
||||
get_checksum: false
|
||||
get_mime: false
|
||||
register: android_sdkmanager_temp_stat
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Check SDK Manager Exists [2/2]
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ android_sdkmanager_final }}"
|
||||
get_attributes: false
|
||||
get_checksum: false
|
||||
get_mime: false
|
||||
register: android_sdkmanager_check
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Check Download Exists
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ android_download_file }}"
|
||||
get_attributes: false
|
||||
get_checksum: false
|
||||
get_mime: false
|
||||
register: android_download_stat
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
## Packages ##
|
||||
|
||||
# https://docs.flutter.dev/get-started/install/linux/android
|
||||
- name: Workstation | Linux | Software | Android | Dependencies [Install]
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ android_jdk }}"
|
||||
- "{{ c_libs }}"
|
||||
@@ -190,14 +190,14 @@
|
||||
- "{{ bzip }}"
|
||||
- "{{ android_udev }}"
|
||||
state: present
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Dependencies [Remove]
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ android_sdkmanager }}"
|
||||
state: absent
|
||||
when: coding == true
|
||||
when: coding
|
||||
and ansible_pkg_mgr == "apt"
|
||||
|
||||
## Install SDK ##
|
||||
@@ -205,36 +205,46 @@
|
||||
- name: Workstation | Linux | Software | Android | SDK
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Download Commandline Tools
|
||||
get_url:
|
||||
url: "{{ android_url }}"
|
||||
dest: "{{ android_download_file }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0664'
|
||||
when: not android_download_stat.stat.exists
|
||||
- name: Workstation | Linux | Software | Android | Gradle Permissions
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_user.home }}/.gradle"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
when: user_user.home != ""
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Create Folder
|
||||
file:
|
||||
path: "{{ android_sdk_cmdline_temp }}"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0755'
|
||||
- name: Workstation | Linux | Software | Android | Download Commandline Tools
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ android_url }}"
|
||||
dest: "{{ android_download_file }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0664'
|
||||
when: not android_download_stat.stat.exists
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Extract Tools
|
||||
unarchive:
|
||||
src: "{{ android_download_file }}"
|
||||
dest: "{{ android_sdk_cmdline_temp }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
- name: Workstation | Linux | Software | Android | Create Folder
|
||||
ansible.builtin.file:
|
||||
path: "{{ android_sdk_cmdline_temp }}"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0755'
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Extract Tools
|
||||
ansible.builtin.unarchive:
|
||||
src: "{{ android_download_file }}"
|
||||
dest: "{{ android_sdk_cmdline_temp }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
when: coding
|
||||
and not android_sdkmanager_temp_stat.stat.exists
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Delete Archive
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ android_download_file }}"
|
||||
state: absent
|
||||
|
||||
@@ -242,23 +252,38 @@
|
||||
|
||||
# This can only be run once, otherwise cmdline-tools creates latest-* folders.
|
||||
- name: Workstation | Linux | Software | Android | Install | Consistent Modules
|
||||
shell: "yes | {{ android_sdkmanager_temp }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}"
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
yes | {{ android_sdkmanager_temp }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}
|
||||
loop:
|
||||
# Current
|
||||
- cmdline-tools/latest
|
||||
- platform-tools
|
||||
- emulator
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: coding
|
||||
and not android_sdkmanager_check.stat.exists
|
||||
|
||||
# Report the preliminary installed packges.
|
||||
- name: Workstation | Linux | Software | Android | Report Modules
|
||||
ansible.builtin.shell: "{{ android_sdkmanager2_list }} > {{ android_report_file }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: coding
|
||||
|
||||
# These are safe to run multiple times, and uses the new `latest` version.
|
||||
- name: Workstation | Linux | Software | Android | Install | Required Modules
|
||||
shell: |
|
||||
if [[ {{ android_sdkmanager2_list }} | grep -v 'unknown' | grep -q '{{ item }}' == 1 ]]; then
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
if ! cat {{ android_report_file }} | grep -v 'unknown' | grep -q '{{ item }}'; then
|
||||
yes | {{ android_sdkmanager2_install }} '{{ item }}'
|
||||
|
||||
if [[ {{ android_sdkmanager2_list }} | grep -q '{{ item }}' == 0 ]]; then
|
||||
if cat {{ android_report_file }} | grep -q '{{ item }}'; then
|
||||
echo "INSTALLED"
|
||||
else
|
||||
echo "FAILED"
|
||||
@@ -268,16 +293,18 @@
|
||||
register: install_required
|
||||
changed_when: "'INSTALLED' in install_required.stdout"
|
||||
failed_when: "'FAILED' in install_required.stdout"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
# Add more versions for testing across all the important platforms.
|
||||
- name: Workstation | Linux | Software | Android | Install | Additional Modules
|
||||
shell: |
|
||||
if [[ {{ android_sdkmanager2_list }} | grep -v 'unknown' | grep -q '{{ item }}' == 1 ]]; then
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
if ! cat {{ android_report_file }} | grep -v 'unknown' | grep -q '{{ item }}'; then
|
||||
yes | {{ android_sdkmanager2_install }} '{{ item }}'
|
||||
|
||||
if [[ {{ android_sdkmanager2_list }} | grep -q '{{ item }}' == 0 ]]; then
|
||||
if cat {{ android_report_file }} | grep -q '{{ item }}'; then
|
||||
echo "INSTALLED"
|
||||
else
|
||||
echo "FAILED"
|
||||
@@ -287,37 +314,41 @@
|
||||
register: install_additional
|
||||
changed_when: "'INSTALLED' in install_additional.stdout"
|
||||
failed_when: "'FAILED' in install_additional.stdout"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
and sdks == true
|
||||
when: coding
|
||||
and sdks
|
||||
|
||||
# Remove extra downloads if system is not meant for full amount of testing.
|
||||
- name: Workstation | Linux | Software | Android | Uninstall | Additional Modules
|
||||
shell: |
|
||||
if [[ {{ android_sdkmanager2_list }} | grep -q '{{ item }}' == 0 ]]; then
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
if cat {{ android_report_file }} | grep -q '{{ item }}'; then
|
||||
yes | {{ android_sdkmanager2_remove }} '{{ item }}'
|
||||
|
||||
if [[ {{ android_sdkmanager2_list }} | grep -q '{{ item }}' == 1 ]]; then
|
||||
echo "REMOVED"
|
||||
else
|
||||
if cat {{ android_report_file }} | grep -q '{{ item }}'; then
|
||||
echo "FAILED"
|
||||
else
|
||||
echo "REMOVED"
|
||||
fi
|
||||
fi
|
||||
loop: "{{ android_downloads_additional }}"
|
||||
register: remove_additional
|
||||
changed_when: "'REMOVED' in remove_additional.stdout"
|
||||
failed_when: "'FAILED' in remove_additional.stdout"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding != true
|
||||
or sdks != true
|
||||
when: not coding
|
||||
or not sdks
|
||||
|
||||
# Remove any versions which used to be part of this script and no longer used.
|
||||
- name: Workstation | Linux | Software | Android | Uninstall | Unused Modules
|
||||
shell: |
|
||||
if [[ {{ android_sdkmanager2_list }} | grep -q '{{ item }}' == 0 ]]; then
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
if cat {{ android_report_file }} | grep -q '{{ item }}'; then
|
||||
yes | {{ android_sdkmanager2_remove }} '{{ item }}'
|
||||
|
||||
if [[ {{ android_sdkmanager2_list }} | grep -q '{{ item }}' == 1 ]]; then
|
||||
if cat {{ android_report_file }} | grep -q '{{ item }}'; then
|
||||
echo "REMOVED"
|
||||
else
|
||||
echo "FAILED"
|
||||
@@ -327,98 +358,107 @@
|
||||
register: remove_unused
|
||||
changed_when: "'REMOVED' in remove_unused.stdout"
|
||||
failed_when: "'FAILED' in remove_unused.stdout"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
# Report the currently installed packges.
|
||||
# Report the currently installed packages.
|
||||
- name: Workstation | Linux | Software | Android | Report Modules
|
||||
shell: "{{ android_sdkmanager2_list }} --all > {{ android_report_file }}"
|
||||
ansible.builtin.shell: "{{ android_sdkmanager2_list }} --all > {{ android_report_file }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: coding
|
||||
|
||||
## Flutter and Licenses ##
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Inform Flutter
|
||||
shell: "{{ flutter }} config --android-sdk={{ android_sdk_location }}"
|
||||
ansible.builtin.shell: "{{ flutter_exe }} config --android-sdk={{ android_sdk_location }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: coding
|
||||
|
||||
# "Warning: The --licenses option is no longer needed."
|
||||
- name: Workstation | Linux | Software | Android | License Agreements [1/2]
|
||||
shell: "yes | {{ android_sdkmanager_final }} --licenses --sdk_root={{ android_sdk_location }}"
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
yes | {{ android_sdkmanager_final }} --licenses --sdk_root={{ android_sdk_location }}
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
failed_when: false
|
||||
when: coding
|
||||
|
||||
# "Warning: The --licenses option is no longer needed."
|
||||
- name: Workstation | Linux | Software | Android | License Agreements [2/2]
|
||||
shell: "yes | {{ flutter }} doctor --android-licenses"
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
yes | {{ flutter_exe }} doctor --android-licenses
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
failed_when: false
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Refresh Flutter Doctor Report
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop: "{{ flutter_report_commands }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: coding
|
||||
|
||||
## Configure Environment ##
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Modify PATH (.bashrc)
|
||||
blockinfile:
|
||||
path: "{{ item }}/.bashrc"
|
||||
- name: Workstation | Linux | Software | Android | Modify PATH (profiles)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
export PATH="$PATH:{{ android_bin_location }}:{{ android_sdk_cmdline_final }}"
|
||||
export ANDROID_HOME="{{ android_sdk_location | replace('~', '$HOME') }}"
|
||||
export ANDROID_SDK_ROOT="$ANDROID_HOME"
|
||||
export PATH="{{ android_bin_location }}:{{ android_sdk_cmdline_final }}:$PATH"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Android'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
ignore_errors: true
|
||||
when: coding == true
|
||||
and user_root.home != ""
|
||||
and user_user.home != ""
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Modify PATH (.zshrc)
|
||||
blockinfile:
|
||||
path: "{{ item }}/.zshrc"
|
||||
block: |
|
||||
export PATH="$PATH:{{ android_bin_location }}:{{ android_sdk_cmdline_final }}"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Android'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
ignore_errors: true
|
||||
when: coding == true
|
||||
and user_root.home != ""
|
||||
- ".bash_profile"
|
||||
- ".zprofile"
|
||||
- ".profile"
|
||||
when: coding
|
||||
and user_user.home != ""
|
||||
|
||||
## Uninstall SDK ##
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Remove SDK
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ android_sdk_location }}"
|
||||
state: absent
|
||||
when: not coding == true
|
||||
when: not coding
|
||||
|
||||
## User Tools ##
|
||||
# Only needed from repo if not a development device,
|
||||
# otherwise better versions are in the SDK.
|
||||
|
||||
- name: Workstation | Linux | Software | Android | System Tools [Install]
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ android_fastboot }}"
|
||||
- "{{ android_adb }}"
|
||||
state: present
|
||||
when: not coding == true
|
||||
when: not coding
|
||||
|
||||
- name: Workstation | Linux | Software | Android | System Tools [Remove]
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ android_fastboot }}"
|
||||
- "{{ android_adb }}"
|
||||
state: absent
|
||||
when: coding == true
|
||||
when: coding
|
||||
@@ -5,14 +5,14 @@
|
||||
# to Firefox months/years back for avoiding DRM and other junk Google stuff.
|
||||
###
|
||||
###- name: Workstation | Software | Brave | Pre-Reqs [apt]
|
||||
### package:
|
||||
### ansible.builtin.package:
|
||||
### name:
|
||||
### - apt-transport-https
|
||||
### state: present
|
||||
### when: ansible_pkg_mgr == "apt"
|
||||
###
|
||||
###- name: Workstation | Software | Brave | Pre-Reqs [dnf]
|
||||
### package:
|
||||
### ansible.builtin.package:
|
||||
### name:
|
||||
### - dnf-plugins-core
|
||||
### state: present
|
||||
@@ -20,7 +20,7 @@
|
||||
###
|
||||
#### https://brave.com/linux/#debian-ubuntu-mint
|
||||
###- name: Workstation | Software | Brave | Add Repo [apt]
|
||||
### shell: "{{ item }}"
|
||||
### ansible.builtin.shell: "{{ item }}"
|
||||
### loop:
|
||||
### - curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg
|
||||
### - echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main" | tee /etc/apt/sources.list.d/brave-browser-release.list
|
||||
@@ -29,7 +29,7 @@
|
||||
###
|
||||
#### https://brave.com/linux/#fedora-centos-streamrhel
|
||||
###- name: Workstation | Software | Brave | Add Repo [dnf]
|
||||
### shell: "{{ item }}"
|
||||
### ansible.builtin.shell: "{{ item }}"
|
||||
### loop:
|
||||
### - dnf config-manager --add-repo https://brave-browser-rpm-release.s3.brave.com/x86_64/
|
||||
### - rpm --import https://brave-browser-rpm-release.s3.brave.com/brave-core.asc
|
||||
@@ -37,15 +37,15 @@
|
||||
###
|
||||
#### https://brave.com/linux/#opensuse
|
||||
###- name: Workstation | Software | Brave | Add Repo [zypper]
|
||||
### shell: "{{ item }}"
|
||||
### ansible.builtin.shell: "{{ item }}"
|
||||
### loop:
|
||||
### - rpm --import https://brave-browser-rpm-release.s3.brave.com/brave-core.asc
|
||||
### - zypper addrepo https://brave-browser-rpm-release.s3.brave.com/brave-browser.repo
|
||||
### when: ansible_pkg_mgr == "zypper"
|
||||
### ignore_errors: yes
|
||||
### ignore_errors: true
|
||||
###
|
||||
###- name: Workstation | Software | Brave | Install
|
||||
### package:
|
||||
### ansible.builtin.package:
|
||||
### name:
|
||||
### - brave-browser
|
||||
### state: present
|
||||
@@ -55,25 +55,25 @@
|
||||
# https://support.brave.com/hc/en-us/articles/4404876135565-How-do-I-uninstall-Brave
|
||||
|
||||
- name: Workstation | Software | Brave | Remove
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- brave-browser
|
||||
- brave-keyring
|
||||
state: absent
|
||||
|
||||
- name: Workstation | Software | Brave | Remove Repo [apt]
|
||||
shell: rm /etc/apt/sources.list.d/brave-browser-*.list && apt update || echo "Not Needed"
|
||||
ansible.builtin.shell: rm /etc/apt/sources.list.d/brave-browser-*.list && apt update || echo "Not Needed"
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: Workstation | Software | Brave | Remove Repo [dnf]
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- rm /etc/yum.repos.d/brave-browser-*.repo || echo "Not Needed"
|
||||
- rpm -e gpg-pubkey-c2d4e821-5e7252b8 || echo "Not Needed"
|
||||
when: ansible_pkg_mgr == "dnf"
|
||||
|
||||
- name: Workstation | Software | Brave | Remove Repo [zypper]
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- zypper removerepo brave-browser || echo "Not Needed"
|
||||
- rpm -e gpg-pubkey-c2d4e821-5e7252b8 || echo "Not Needed"
|
||||
|
||||
@@ -7,18 +7,17 @@
|
||||
# Cinnamon does use some dconf though.
|
||||
|
||||
- name: Workstation | Linux | Software | Cinnamon | Facts | Defaults
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
cinnamon_package: cinnamon
|
||||
|
||||
- name: Workstation | Linux | Software | Cinnamon | Facts | Debian Derivitives
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
cinnamon_package: task-cinnamon-desktop
|
||||
when: ansible_distribution in ("Debian", "Devuan")
|
||||
|
||||
- name: Workstation | Linux | Software | Cinnamon | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ cinnamon_package }}"
|
||||
- "{{ lightdm }}"
|
||||
state: present
|
||||
update_cache: yes
|
||||
@@ -0,0 +1,116 @@
|
||||
# 2026-10-27 Hyperling
|
||||
# Pulled out of llm.yml since the number of tasks is growing.
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Install
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- docker
|
||||
- docker-compose
|
||||
- docker-buildx
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Install [runit]
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- docker-runit
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
and ansible_service_mgr == "runit"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Group
|
||||
ansible.builtin.user:
|
||||
name: "{{ item }}"
|
||||
groups: docker
|
||||
append: true
|
||||
loop:
|
||||
- root
|
||||
- "{{ user }}"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Config | Dir
|
||||
ansible.builtin.file:
|
||||
name: /etc/docker
|
||||
state: directory
|
||||
owner: root
|
||||
mode: '0755'
|
||||
|
||||
- name: Workstation | Linux | Software | Socker | Services | Enable
|
||||
ansible.builtin.service:
|
||||
name: "{{ item.name }}"
|
||||
state: "{{ 'started' if item.status else 'stopped' }}"
|
||||
enabled: "{{ item.status }}"
|
||||
loop:
|
||||
- { 'name': 'docker' , 'status': true }
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Facts
|
||||
ansible.builtin.set_fact:
|
||||
docker_network_sync: "docker-network-sync"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Block
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | /etc/sv
|
||||
ansible.builtin.file:
|
||||
name: "/etc/sv/{{ docker_network_sync }}/log"
|
||||
state: directory
|
||||
owner: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | /var/log
|
||||
ansible.builtin.file:
|
||||
name: "/var/log/{{ docker_network_sync }}"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Run
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ docker_network_sync }}/run
|
||||
content: |
|
||||
#!/bin/sh
|
||||
# Ensure all containers using host network keep a correct resolv.conf.
|
||||
exec 2>&1
|
||||
set -e
|
||||
|
||||
while true; do
|
||||
for c in $(docker container ls --filter network=host -q); do
|
||||
echo "RUN: Container ID $c"
|
||||
docker exec -i -u root $c sh -c 'tee /etc/resolv.conf' < /etc/resolv.conf
|
||||
done
|
||||
echo "RUN: Done, sleeping."
|
||||
sleep 20
|
||||
done
|
||||
backup: false
|
||||
owner: root
|
||||
mode: '0755'
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Finish
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ docker_network_sync }}/finish
|
||||
content: |
|
||||
{{ runit_finish_sleep }}
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Log
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ docker_network_sync }}/log/run
|
||||
content: |
|
||||
#!/bin/sh -e
|
||||
exec svlogd -tt /var/log/{{ docker_network_sync }}
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Log Config
|
||||
ansible.builtin.copy:
|
||||
dest: /var/log/{{ docker_network_sync }}/config
|
||||
content: |
|
||||
{{ runit_log_config_1mb }}
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | Socker | Services | Enable
|
||||
ansible.builtin.service:
|
||||
name: "{{ item.name }}"
|
||||
state: "{{ 'started' if item.status else 'stopped' }}"
|
||||
enabled: "{{ item.status }}"
|
||||
loop:
|
||||
- { 'name': '{{ docker_network_sync }}', 'status': true }
|
||||
|
||||
when: ansible_service_mgr == "runit"
|
||||
@@ -11,15 +11,14 @@
|
||||
# Source: https://softhints.com/how-to-completely-remove-flatpak-linux-mint/
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_extension: "-flatpak"
|
||||
|
||||
## Flatpak Pre-reqs ##
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name: flatpak
|
||||
update_cache: yes
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Add Flathub for System
|
||||
flatpak_remote:
|
||||
@@ -31,17 +30,17 @@
|
||||
## Flatpak Installs ##
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Variables
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpak_exec_dir: "{{ user_user.home }}/bin"
|
||||
flatpak_exec: "flatpak run"
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Arrays
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flatpaks_generic:
|
||||
- { app: "io.gitlab.librewolf-community", name: "librewolf", extra: "" }
|
||||
- { app: "org.signal.Signal", name: "signal", extra: "" }
|
||||
- { app: "im.riot.Riot", name: "element", extra: "" }
|
||||
- { app: "org.telegram.desktop", name: "telegram", extra: "" }
|
||||
- { app: "io.github.forkgram.tdesktop", name: "forkgram", extra: "" }
|
||||
- { app: "app.grayjay.Grayjay", name: "grayjay", extra: "" }
|
||||
- { app: "network.loki.Session", name: "session", extra: "" }
|
||||
- { app: "com.brave.Browser", name: "brave", extra: "" }
|
||||
@@ -91,6 +90,7 @@
|
||||
- { app: "org.libreoffice.LibreOffice", name: "libreoffice", extra: "" }
|
||||
- { app: "com.github.xournalpp.xournalpp", name: "xournal", extra: "" }
|
||||
# End 2026-09-29 #
|
||||
- { app: "org.telegram.desktop", name: "telegram", extra: "" } # 2026-10-02, Switching to Forkgram desktop!
|
||||
|
||||
# Generic #
|
||||
|
||||
@@ -100,10 +100,9 @@
|
||||
remote: flathub
|
||||
state: present
|
||||
loop: "{{ flatpaks_generic }}"
|
||||
ignore_errors: yes
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Generic | Executables
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
block: |
|
||||
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
|
||||
@@ -111,12 +110,14 @@
|
||||
marker_begin: "#!{{ bash_exec.stdout }}"
|
||||
marker_end: "exit 0"
|
||||
state: present
|
||||
create: yes
|
||||
create: true
|
||||
mode: '0755'
|
||||
loop: "{{ flatpaks_generic }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Generic | Executable Permissions
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
state: file
|
||||
mode: '0755'
|
||||
@@ -130,11 +131,10 @@
|
||||
remote: flathub
|
||||
state: present
|
||||
loop: "{{ flatpaks_coding }}"
|
||||
ignore_errors: yes
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Coding | Executables
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
block: |
|
||||
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
|
||||
@@ -142,18 +142,20 @@
|
||||
marker_begin: "#!{{ bash_exec.stdout }}"
|
||||
marker_end: "exit 0"
|
||||
state: present
|
||||
create: yes
|
||||
create: true
|
||||
mode: '0755'
|
||||
loop: "{{ flatpaks_coding }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Coding | Executable Permissions
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
state: file
|
||||
mode: '0755'
|
||||
loop: "{{ flatpaks_coding }}"
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Coding | Uninstall
|
||||
flatpak:
|
||||
@@ -161,16 +163,14 @@
|
||||
remote: flathub
|
||||
state: absent
|
||||
loop: "{{ flatpaks_coding }}"
|
||||
ignore_errors: yes
|
||||
when: not coding == true
|
||||
when: not coding
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Coding | Remove Executables
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
state: absent
|
||||
loop: "{{ flatpaks_coding }}"
|
||||
ignore_errors: yes
|
||||
when: not coding == true
|
||||
when: not coding
|
||||
|
||||
# Media Editors #
|
||||
|
||||
@@ -180,11 +180,10 @@
|
||||
remote: flathub
|
||||
state: present
|
||||
loop: "{{ flatpaks_editing_video }}"
|
||||
ignore_errors: yes
|
||||
when: editing in (true, "video")
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Executables
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
block: |
|
||||
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
|
||||
@@ -192,13 +191,15 @@
|
||||
marker_begin: "#!{{ bash_exec.stdout }}"
|
||||
marker_end: "exit 0"
|
||||
state: present
|
||||
create: yes
|
||||
create: true
|
||||
mode: '0755'
|
||||
loop: "{{ flatpaks_editing_video }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: editing in (true, "video")
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Executable Permissions
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
state: file
|
||||
mode: '0755'
|
||||
@@ -211,15 +212,13 @@
|
||||
remote: flathub
|
||||
state: absent
|
||||
loop: "{{ flatpaks_editing_video }}"
|
||||
ignore_errors: yes
|
||||
when: not editing in (true, "video")
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Remove Executables
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
state: absent
|
||||
loop: "{{ flatpaks_editing_video }}"
|
||||
ignore_errors: yes
|
||||
when: not editing in (true, "video")
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio Editors | Installs
|
||||
@@ -228,11 +227,10 @@
|
||||
remote: flathub
|
||||
state: present
|
||||
loop: "{{ flatpaks_editing_audio }}"
|
||||
ignore_errors: yes
|
||||
when: editing in (true, "audio")
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executables
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
block: |
|
||||
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
|
||||
@@ -240,13 +238,15 @@
|
||||
marker_begin: "#!{{ bash_exec.stdout }}"
|
||||
marker_end: "exit 0"
|
||||
state: present
|
||||
create: yes
|
||||
create: true
|
||||
mode: '0755'
|
||||
loop: "{{ flatpaks_editing_audio }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: editing in (true, "audio")
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executable Permissions
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
state: file
|
||||
mode: '0755'
|
||||
@@ -259,15 +259,13 @@
|
||||
remote: flathub
|
||||
state: absent
|
||||
loop: "{{ flatpaks_editing_audio }}"
|
||||
ignore_errors: yes
|
||||
when: not editing in (true, "audio")
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Remove Executables
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
state: absent
|
||||
loop: "{{ flatpaks_editing_audio }}"
|
||||
ignore_errors: yes
|
||||
when: not editing in (true, "audio")
|
||||
|
||||
# Gaming #
|
||||
@@ -278,11 +276,10 @@
|
||||
remote: flathub
|
||||
state: present
|
||||
loop: "{{ flatpaks_gaming }}"
|
||||
ignore_errors: yes
|
||||
when: gaming == true
|
||||
when: gaming
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Gaming | Executables
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
block: |
|
||||
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
|
||||
@@ -290,18 +287,20 @@
|
||||
marker_begin: "#!{{ bash_exec.stdout }}"
|
||||
marker_end: "exit 0"
|
||||
state: present
|
||||
create: yes
|
||||
create: true
|
||||
mode: '0755'
|
||||
loop: "{{ flatpaks_gaming }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: gaming == true
|
||||
when: gaming
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Gaming | Executable Permissions
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
state: file
|
||||
mode: '0755'
|
||||
loop: "{{ flatpaks_gaming }}"
|
||||
when: gaming == true
|
||||
when: gaming
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Gaming | Uninstalls
|
||||
flatpak:
|
||||
@@ -309,16 +308,14 @@
|
||||
remote: flathub
|
||||
state: absent
|
||||
loop: "{{ flatpaks_gaming }}"
|
||||
ignore_errors: yes
|
||||
when: not gaming == true
|
||||
when: not gaming
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Gaming | Remove Executables
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
state: absent
|
||||
loop: "{{ flatpaks_gaming }}"
|
||||
ignore_errors: yes
|
||||
when: not gaming == true
|
||||
when: not gaming
|
||||
|
||||
# Removals #
|
||||
|
||||
@@ -328,11 +325,9 @@
|
||||
remote: flathub
|
||||
state: absent
|
||||
loop: "{{ flatpaks_remove }}"
|
||||
ignore_errors: yes
|
||||
|
||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Uninstalls | Remove Executables
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
|
||||
state: absent
|
||||
loop: "{{ flatpaks_remove }}"
|
||||
ignore_errors: yes
|
||||
@@ -4,33 +4,34 @@
|
||||
## Facts ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Facts 1
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flutter_url: "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.47.4-stable.tar.xz"
|
||||
flutter_download_file: "{{ user_user.home }}/Downloads/flutter.tar.xz"
|
||||
flutter_sdk_location: "{{ user_user.home }}/SDKs/Flutter"
|
||||
flutter_report: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.sdk.flutter.txt"
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Facts 2
|
||||
set_fact:
|
||||
flutter_bin_location: "{{ flutter_sdk_location }}/flutter/bin"
|
||||
ansible.builtin.set_fact:
|
||||
flutter_home: "{{ flutter_sdk_location }}/flutter"
|
||||
flutter_bin: "{{ flutter_sdk_location }}/flutter/bin"
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Facts 3
|
||||
set_fact:
|
||||
flutter: "{{ flutter_bin_location }}/flutter"
|
||||
ansible.builtin.set_fact:
|
||||
flutter_exe: "{{ flutter_bin }}/flutter"
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Facts 4
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
flutter_report_commands:
|
||||
- "date > {{ flutter_report }}"
|
||||
- "{{ flutter }} --disable-analytics >> {{ flutter_report }}"
|
||||
- "{{ flutter_exe }} --disable-analytics >> {{ flutter_report }}"
|
||||
- "date >> {{ flutter_report }}"
|
||||
- "{{ flutter }} doctor -v >> {{ flutter_report }}"
|
||||
- "{{ flutter_exe }} doctor -v >> {{ flutter_report }}"
|
||||
- "date >> {{ flutter_report }}"
|
||||
|
||||
## Checks ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Check SDK Exists
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ flutter_sdk_location }}"
|
||||
get_attributes: false
|
||||
get_checksum: false
|
||||
@@ -38,141 +39,136 @@
|
||||
register: flutter_sdk_stat
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Check Download Exists
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ flutter_download_file }}"
|
||||
get_attributes: false
|
||||
get_checksum: false
|
||||
get_mime: false
|
||||
register: flutter_download_stat
|
||||
|
||||
## Packages ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Necessities
|
||||
package:
|
||||
name:
|
||||
- curl
|
||||
- git
|
||||
- unzip
|
||||
- "{{ xz }}"
|
||||
- zip
|
||||
- "{{ mesa }}"
|
||||
- "{{ mesa_utils }}"
|
||||
state: present
|
||||
when: coding == true
|
||||
|
||||
# https://docs.flutter.dev/get-started/install/linux/desktop
|
||||
- name: Workstation | Linux | Software | Flutter | Linux App Dependencies
|
||||
package:
|
||||
name:
|
||||
- clang
|
||||
- cmake
|
||||
- git
|
||||
- "{{ ninja }}"
|
||||
- pkg-config
|
||||
- "{{ gtk3 }}"
|
||||
- "{{ xz_libs }}"
|
||||
- "{{ cpp }}"
|
||||
state: present
|
||||
when: coding == true
|
||||
|
||||
# https://docs.flutter.dev/get-started/install/linux/android
|
||||
- name: Workstation | Linux | Software | Flutter | Android App Dependencies
|
||||
package:
|
||||
name:
|
||||
- "{{ c_libs }}"
|
||||
- "{{ cpp_libs }}"
|
||||
- "{{ z_libs }}"
|
||||
- "{{ bzip }}"
|
||||
state: present
|
||||
when: coding == true
|
||||
|
||||
## Install SDK ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | SDK
|
||||
- name: Workstation | Linux | Software | Flutter | Install Block
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Download SDK
|
||||
get_url:
|
||||
url: "{{ flutter_url }}"
|
||||
dest: "{{ flutter_download_file }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0664'
|
||||
when: not flutter_download_stat.stat.exists
|
||||
## Packages ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Create Folder
|
||||
file:
|
||||
path: "{{ flutter_sdk_location }}"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0755'
|
||||
- name: Workstation | Linux | Software | Flutter | Necessities
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- curl
|
||||
- git
|
||||
- unzip
|
||||
- "{{ xz }}"
|
||||
- zip
|
||||
- "{{ mesa }}"
|
||||
- "{{ mesa_utils }}"
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Extract SDK
|
||||
unarchive:
|
||||
src: "{{ flutter_download_file }}"
|
||||
dest: "{{ flutter_sdk_location }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
# https://docs.flutter.dev/get-started/install/linux/desktop
|
||||
- name: Workstation | Linux | Software | Flutter | Linux App Dependencies
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- clang
|
||||
- cmake
|
||||
- git
|
||||
- "{{ ninja }}"
|
||||
- pkg-config
|
||||
- "{{ gtk3 }}"
|
||||
- "{{ xz_libs }}"
|
||||
- "{{ cpp }}"
|
||||
state: present
|
||||
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
and not flutter_sdk_stat.stat.exists
|
||||
# https://docs.flutter.dev/get-started/install/linux/android
|
||||
- name: Workstation | Linux | Software | Flutter | Android App Dependencies
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ c_libs }}"
|
||||
- "{{ cpp_libs }}"
|
||||
- "{{ z_libs }}"
|
||||
- "{{ bzip }}"
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Delete Archive
|
||||
file:
|
||||
path: "{{ flutter_download_file }}"
|
||||
state: absent
|
||||
when: coding == true
|
||||
## Install SDK ##
|
||||
|
||||
## Configure Environment ##
|
||||
- name: Workstation | Linux | Software | Flutter | SDK
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Modify PATH (.bashrc)
|
||||
blockinfile:
|
||||
path: "{{ item }}/.bashrc"
|
||||
block: |
|
||||
export PATH="$PATH:{{ flutter_bin_location }}"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
ignore_errors: yes
|
||||
when: coding == true
|
||||
and user_root.home != ""
|
||||
and user_user.home != ""
|
||||
- name: Workstation | Linux | Software | Flutter | Pub Cache Permissions
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_user.home }}/.pub-cache"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
when: user_user.home != ""
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Modify PATH (.zshrc)
|
||||
blockinfile:
|
||||
path: "{{ item }}/.zshrc"
|
||||
block: |
|
||||
export PATH="$PATH:{{ flutter_bin_location }}"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
ignore_errors: yes
|
||||
when: coding == true
|
||||
and user_root.home != ""
|
||||
and user_user.home != ""
|
||||
- name: Workstation | Linux | Software | Flutter | Download SDK
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ flutter_url }}"
|
||||
dest: "{{ flutter_download_file }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0664'
|
||||
when: not flutter_download_stat.stat.exists
|
||||
|
||||
## Test SDK ##
|
||||
- name: Workstation | Linux | Software | Flutter | Create Folder
|
||||
ansible.builtin.file:
|
||||
path: "{{ flutter_sdk_location }}"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0755'
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Doctor Report
|
||||
shell: "{{ item }}"
|
||||
loop: "{{ flutter_report_commands }}"
|
||||
become_user: "{{ user }}"
|
||||
when: coding == true
|
||||
- name: Workstation | Linux | Software | Flutter | Extract SDK
|
||||
ansible.builtin.unarchive:
|
||||
src: "{{ flutter_download_file }}"
|
||||
dest: "{{ flutter_sdk_location }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: not flutter_sdk_stat.stat.exists
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Delete Archive
|
||||
ansible.builtin.file:
|
||||
path: "{{ flutter_download_file }}"
|
||||
state: absent
|
||||
|
||||
## Configure Environment ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Modify PATH (profiles)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
export FLUTTER_HOME="{{ flutter_home }}"
|
||||
export PATH="{{ flutter_bin }}:$PATH"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0755"
|
||||
loop:
|
||||
- ".bash_profile"
|
||||
- ".zprofile"
|
||||
- ".profile"
|
||||
when: user_user.home != ""
|
||||
|
||||
## Test SDK ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Doctor Report
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop: "{{ flutter_report_commands }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
when: coding
|
||||
|
||||
## Uninstall SDK ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Remove SDK
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ flutter_sdk_location }}"
|
||||
state: absent
|
||||
when: not coding == true
|
||||
when: not coding
|
||||
@@ -1,24 +1,24 @@
|
||||
# Some Linux distros come with meh DE's, this fixes that.
|
||||
|
||||
- name: Workstation | Linux | Software | GNOME | Check (Parrot OS Only)
|
||||
shell: which gdm3
|
||||
ansible.builtin.shell: which gdm3
|
||||
register: gnome_install
|
||||
when: ansible_distribution in ("Parrot OS")
|
||||
ignore_errors: true
|
||||
|
||||
- name: Workstation | Linux | Software | GNOME | Install
|
||||
package:
|
||||
name:
|
||||
- gnome
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- gnome
|
||||
- gdm3
|
||||
state: present
|
||||
when: gnome_install is defined and gnome_install.failed is defined and gnome_install.failed
|
||||
|
||||
- name: Workstation | Linux | Software | GNOME | Note Before Exiting
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
msg: "You will need to run `dpkg-reconfigure gdm3` to ensure gdm3 is selected."
|
||||
when: gnome_install is defined and gnome_install.failed is defined and gnome_install.failed
|
||||
|
||||
- name: Workstation | Linux | Software | GNOME | Exiting
|
||||
shell: exit 1
|
||||
ansible.builtin.shell: exit 1
|
||||
when: gnome_install is defined and gnome_install.failed is defined and gnome_install.failed
|
||||
@@ -5,52 +5,73 @@
|
||||
- name: Workstation | Linux | Software | Hugo
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | pacman
|
||||
block:
|
||||
- name: Workstation | Linux | Software | Hugo | pacman
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Facts
|
||||
set_fact:
|
||||
sass_old: ruby-sass
|
||||
sass_current: dart-sass
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Facts
|
||||
ansible.builtin.set_fact:
|
||||
sass_old: ruby-sass
|
||||
sass_current: dart-sass
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Remove Old
|
||||
package:
|
||||
name:
|
||||
- "{{ sass_old }}"
|
||||
state: absent
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Remove Old
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ sass_old }}"
|
||||
state: absent
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Install New
|
||||
package:
|
||||
name:
|
||||
- "{{ sass_current }}"
|
||||
state: present
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Install New
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- hugo
|
||||
- "{{ sass_current }}"
|
||||
state: present
|
||||
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
# This must exist after nodejs.yml so that NPM is installed.
|
||||
- name: Workstation | Linux | Software | Hugo | npm
|
||||
block:
|
||||
# This must exist after nodejs.yml so that NPM is installed.
|
||||
- name: Workstation | Linux | Software | Hugo | apt
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | npm | Facts
|
||||
set_fact:
|
||||
sass_old: node-sass
|
||||
sass_current: sass
|
||||
- name: Workstation | Linux | Software | Hugo | apt | sass | Facts
|
||||
ansible.builtin.set_fact:
|
||||
sass_old: node-sass
|
||||
sass_current: sass
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | npm | Gather
|
||||
shell: npm prefix -g
|
||||
register: npm_bin_dir # Provides /usr/local/ on Devuan, /usr/ on Artix.
|
||||
changed_when: false
|
||||
- name: Workstation | Linux | Software | Hugo | apt | sass | Gather
|
||||
ansible.builtin.shell: npm prefix -g
|
||||
register: npm_bin_dir # Provides /usr/local/ on Devuan, /usr/ on Artix.
|
||||
changed_when: false
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | npm | Remove Old
|
||||
shell: "npm remove -g {{ sass_old }}"
|
||||
args:
|
||||
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
|
||||
- name: Workstation | Linux | Software | Hugo | apt | sass | Remove Old
|
||||
ansible.builtin.shell: "npm remove -g {{ sass_old }}"
|
||||
args:
|
||||
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | npm | Install New
|
||||
shell: "npm install -g {{ sass_current }}"
|
||||
args:
|
||||
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
|
||||
- name: Workstation | Linux | Software | Hugo | apt | sass | Install New
|
||||
ansible.builtin.shell: "npm install -g {{ sass_current }}"
|
||||
args:
|
||||
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
|
||||
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
- name: Workstation | Linux | Software | Hugo | apt | hugo | Remove Old
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- hugo
|
||||
state: absent
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | apt | hugo | Install Dependencies
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- golang
|
||||
- gcc
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | apt | hugo | Build
|
||||
ansible.builtin.shell: |
|
||||
CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@latest
|
||||
ln -s $HOME/go/bin/hugo /usr/local/bin/hugo
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
when: coding is true
|
||||
@@ -2,33 +2,77 @@
|
||||
# 20260912 - Hyperling
|
||||
# Arch has too new of Java for Android / Gradle to even run AGP Assistant on.
|
||||
|
||||
- name: Workstation | Linux | Software | Java | Facts 1
|
||||
ansible.builtin.set_fact:
|
||||
jdk_version: 17
|
||||
jdk_jvm: /usr/lib/jvm
|
||||
jdk_src: /usr/lib/jvm/default-java
|
||||
jdk_dir: "{{ user_user.home}}/SDKs/Java"
|
||||
|
||||
- name: Workstation | Linux | Software | Java | Facts 2
|
||||
ansible.builtin.set_fact:
|
||||
jdk_path: "{{ jdk_dir }}/bin"
|
||||
|
||||
- name: Workstation | Linux | Software | Java | apt
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "default-jdk"
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman | Facts
|
||||
set_fact:
|
||||
jdk_version: 21
|
||||
jdk_dir: ~/SDKs/Java
|
||||
- name: Workstation | Linux | Software | Java | pacman | Facts
|
||||
ansible.builtin.set_fact:
|
||||
jdk_src: /usr/lib/jvm/default
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman | Install
|
||||
package:
|
||||
name:
|
||||
- "jdk{{ item }}-openjdk"
|
||||
state: present
|
||||
loop:
|
||||
- "{{ jdk_version }}"
|
||||
- 25
|
||||
- 21
|
||||
- 17
|
||||
- name: Workstation | Linux | Software | Java | pacman | Install [base]
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "jdk{{ jdk_version }}-openjdk"
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman | Set
|
||||
shell: "archlinux-java set java-{{ jdk_version }}-openjdk"
|
||||
- name: Workstation | Linux | Software | Java | pacman | Install [all]
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "jdk{{ item }}-openjdk"
|
||||
state: present
|
||||
loop:
|
||||
- 25
|
||||
- 21
|
||||
- 17
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman | Link
|
||||
shell: "ln -sf /usr/lib/jvm {{ jdk_dir }}"
|
||||
args:
|
||||
creates: "{{ jdk_dir }}"
|
||||
become_user: "{{ user }}"
|
||||
- name: Workstation | Linux | Software | Java | pacman | Set
|
||||
ansible.builtin.shell: "archlinux-java set java-{{ jdk_version }}-openjdk"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
when: coding is true
|
||||
and ansible_pkg_mgr == "pacman"
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman | Link
|
||||
ansible.builtin.file:
|
||||
src: "{{ jdk_src }}"
|
||||
dest: "{{ jdk_dir }}"
|
||||
state: link
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
|
||||
- name: Workstation | Linux | Software | Java | Modify PATH (profiles)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
export JAVA_HOME="{{ jdk_dir }}"
|
||||
export JAVA_PATH="{{ jdk_path }}"
|
||||
export PATH="$JAVA_PATH:$PATH
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Java'
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0755"
|
||||
loop:
|
||||
- ".bash_profile"
|
||||
- ".zprofile"
|
||||
- ".profile"
|
||||
when: user_user.home != ""
|
||||
@@ -16,7 +16,7 @@
|
||||
# Paths
|
||||
|
||||
- name: Workstation | Linux | Software | Lutris | Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
lutris_source_list: "/etc/apt/sources.list.d/lutris.list"
|
||||
lutris_keyfile: "/usr/share/keyrings/lutris.gpg"
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
@@ -24,7 +24,7 @@
|
||||
# Checks
|
||||
|
||||
- name: Workstation | Linux | Software | Lutris | Check PPA
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ lutris_source_list }}"
|
||||
get_attributes: false
|
||||
get_checksum: false
|
||||
@@ -37,13 +37,13 @@
|
||||
- name: Workstation | Linux | Software | Lutris | Add PPA (Ubuntu)
|
||||
apt_repository:
|
||||
repo: ppa:lutris-team/lutris
|
||||
update_cache: yes
|
||||
update_cache: true
|
||||
state: present
|
||||
when: ansible_distribution in ("Ubuntu") and gaming == true
|
||||
ignore_errors: yes
|
||||
when: ansible_distribution in ("Ubuntu") and gaming
|
||||
ignore_errors: true
|
||||
|
||||
- name: Workstation | Linux | Software | Lutris | Add PPA (Debian)
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "wget -q -O- https://download.opensuse.org/repositories/home:/strycore/Debian_13/Release.key \
|
||||
| gpg --dearmor \
|
||||
@@ -51,40 +51,40 @@
|
||||
- "echo 'deb [signed-by={{ lutris_keyfile }}] https://download.opensuse.org/repositories/home:/strycore/Debian_13/ ./' \
|
||||
| sudo tee {{ lutris_source_list }} > /dev/null"
|
||||
- "sudo apt update"
|
||||
when: ansible_distribution in ("Debian") and gaming == true and not lutris_source_exists.stat.exists
|
||||
when: ansible_distribution in ("Debian") and gaming and not lutris_source_exists.stat.exists
|
||||
|
||||
## Install Package ##
|
||||
|
||||
- name: Workstation | Linux | Software | Lutris | Install (besides ARM)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- lutris
|
||||
state: present
|
||||
when: ansible_architecture != "aarch64" and gaming == true
|
||||
when: ansible_architecture != "aarch64" and gaming
|
||||
|
||||
## Uninstall Package ##
|
||||
|
||||
- name: Workstation | Linux | Software | Lutris | Uninstall (besides ARM)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- lutris
|
||||
state: absent
|
||||
when: ansible_architecture != "aarch64" and gaming != true
|
||||
when: ansible_architecture != "aarch64" and not gaming
|
||||
|
||||
## Uninstall Repo ##
|
||||
|
||||
- name: Workstation | Linux | Software | Lutris | Remove PPA (Ubuntu)
|
||||
apt_repository:
|
||||
repo: ppa:lutris-team/lutris
|
||||
update_cache: yes
|
||||
update_cache: true
|
||||
state: absent
|
||||
when: ansible_distribution in ("Ubuntu") and gaming != true
|
||||
ignore_errors: yes
|
||||
when: ansible_distribution in ("Ubuntu") and not gaming
|
||||
ignore_errors: true
|
||||
|
||||
- name: Workstation | Linux | Software | Lutris | Remove PPA (Debian)
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "mv {{ lutris_source_list }} ~/TRASH/"
|
||||
- "mv {{ lutris_keyfile }} ~/TRASH/"
|
||||
- "sudo apt update"
|
||||
when: ansible_distribution in ("Debian") and gaming != true and lutris_source_exists.stat.exists
|
||||
when: ansible_distribution in ("Debian") and not gaming and lutris_source_exists.stat.exists
|
||||
@@ -3,18 +3,17 @@
|
||||
# Giving this DE a shot but not liking it as much as others.
|
||||
|
||||
- name: Workstation | Linux | Software | LXQt | Facts | Defaults
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
lxqt_package: lxqt
|
||||
|
||||
- name: Workstation | Linux | Software | LXQt | Facts | Debian Derivitives
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
lxqt_package: task-lxqt-desktop
|
||||
when: ansible_distribution in ("Debian", "Devuan")
|
||||
|
||||
- name: Workstation | Linux | Software | LXQt | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ lxqt_package }}"
|
||||
- "{{ sddm }}"
|
||||
state: present
|
||||
update_cache: yes
|
||||
@@ -7,41 +7,41 @@
|
||||
- name: Workstation | Software | NodeJS
|
||||
block:
|
||||
|
||||
- name: Workstation | Software | NodeJS | apt
|
||||
block:
|
||||
- name: Workstation | Software | NodeJS | apt
|
||||
block:
|
||||
|
||||
- name: Workstation | Software | NodeJS | apt | Facts
|
||||
set_fact:
|
||||
node_version: node_24.x
|
||||
- name: Workstation | Software | NodeJS | apt | Facts
|
||||
ansible.builtin.set_fact:
|
||||
node_version: node_24.x
|
||||
|
||||
- name: Workstation | Software | NodeJS | apt | Old | Remove
|
||||
package:
|
||||
name: npm
|
||||
state: absent
|
||||
- name: Workstation | Software | NodeJS | apt | Old | Remove
|
||||
ansible.builtin.package:
|
||||
name: npm
|
||||
state: absent
|
||||
|
||||
- name: Workstation | Software | NodeJS | apt | extrepo | Install
|
||||
package:
|
||||
name: extrepo
|
||||
- name: Workstation | Software | NodeJS | apt | extrepo | Install
|
||||
ansible.builtin.package:
|
||||
name: extrepo
|
||||
state: present
|
||||
|
||||
- name: Workstation | Software | NodeJS | apt | extrepo | Enable
|
||||
ansible.builtin.shell: "extrepo enable {{ node_version }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: Workstation | Software | NodeJS | apt | Install
|
||||
ansible.builtin.package:
|
||||
name: nodejs
|
||||
state: present
|
||||
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: Workstation | Software | NodeJS | All Others | Install
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- nodejs
|
||||
- npm
|
||||
state: present
|
||||
update_cache: yes
|
||||
when: ansible_pkg_mgr != "apt"
|
||||
|
||||
- name: Workstation | Software | NodeJS | apt | extrepo | Enable
|
||||
shell: "extrepo enable {{ node_version }}"
|
||||
|
||||
- name: Workstation | Software | NodeJS | apt | Install
|
||||
package:
|
||||
name: nodejs
|
||||
state: latest
|
||||
update_cache: yes
|
||||
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: Workstation | Software | NodeJS | All Others | Install
|
||||
package:
|
||||
name:
|
||||
- nodejs
|
||||
- npm
|
||||
state: present
|
||||
when: ansible_pkg_mgr != "apt"
|
||||
|
||||
when: coding == true
|
||||
when: coding
|
||||
@@ -6,7 +6,7 @@
|
||||
# Needed for dnf packages such as vlc.
|
||||
# https://docs.fedoraproject.org/en-US/quick-docs/rpmfusion-setup/
|
||||
- name: Workstation | Linux | Software | Packages | Fedora Fusion Repos
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm"
|
||||
- "dnf config-manager --enable rpmfusion-free"
|
||||
@@ -14,13 +14,15 @@
|
||||
- "dnf install -y https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm"
|
||||
- "dnf config-manager --enable rpmfusion-nonfree"
|
||||
- "dnf config-manager --enable rpmfusion-nonfree-updates"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: ansible_distribution == "Fedora"
|
||||
|
||||
|
||||
## Packages ##
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Install Software (Editing)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ ffmpeg }}"
|
||||
state: present
|
||||
@@ -32,7 +34,7 @@
|
||||
# Software not yet available or working properly in Flatpak form.
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Install From Repo
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ vlc }}"
|
||||
- "{{ vlc_plugins }}"
|
||||
@@ -50,26 +52,30 @@
|
||||
- "{{ transmission_qt }}"
|
||||
- "{{ libreoffice }}"
|
||||
- "{{ strawberry }}"
|
||||
- "{{ dict_en }}"
|
||||
- "{{ dict_es }}"
|
||||
- "{{ xset }}"
|
||||
- "{{ xlock }}"
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Install From Repo [Coding]
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ appimagelauncher }}"
|
||||
- hugo
|
||||
- code
|
||||
- ansible-lint
|
||||
state: present
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Install From Repo [Editing]
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- gimp
|
||||
state: present
|
||||
when: editing == true
|
||||
when: editing
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Install Audio (Looking at you, Artix)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- pipewire
|
||||
- pipewire-pulse
|
||||
@@ -80,42 +86,50 @@
|
||||
and ansible_service_mgr == "runit"
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Extra For Liberated Init Systems
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ dunst }}"
|
||||
state: present
|
||||
when: ansible_service_mgr != "systemd"
|
||||
|
||||
# TBD/TODO: Change the below AUR tasks to echo EXISTS, INSTALLED, or FAILED
|
||||
# and then catch it, similar to what's done in android.yml and others.
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Install From AUR
|
||||
shell: "yay -Qs {{ item }} || yay --noconfirm -S {{ item }}"
|
||||
ansible.builtin.shell: "yay -Qs {{ item }} || yay --noconfirm -S {{ item }}"
|
||||
loop:
|
||||
- appimagelauncher
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
become: true
|
||||
become_user: "{{ aur_user }}"
|
||||
ignore_errors: true
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Install From AUR [Coding]
|
||||
ansible.builtin.shell: "yay -Qs {{ item }} || yay --noconfirm -S {{ item }}"
|
||||
loop:
|
||||
- vscodium-bin
|
||||
- android-studio
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
and coding
|
||||
become: true
|
||||
become_user: "{{ aur_user }}"
|
||||
ignore_errors: true
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | GS Connect (KDE Connect, Android Tool)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- gnome-shell-extension-gsconnect
|
||||
state: present
|
||||
when: ansible_distribution in ("Debian")
|
||||
ignore_errors: true
|
||||
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Coding
|
||||
package:
|
||||
name:
|
||||
- ansible-lint
|
||||
state: present
|
||||
when: coding == true
|
||||
|
||||
# Remove Repo Software #
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Remove Applications
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ thunderbird }}"
|
||||
- "{{ evolution }}"
|
||||
- steam
|
||||
- code
|
||||
state: absent
|
||||
@@ -6,7 +6,7 @@
|
||||
## Variables ##
|
||||
|
||||
- name: Workstation | Linux | Software | TLP | Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
tlp_package: "tlp"
|
||||
tlp_rdw: "tlp-rdw"
|
||||
tlp_smart: "smartmontools"
|
||||
@@ -19,7 +19,7 @@
|
||||
acf_service: "auto-cpufreq"
|
||||
|
||||
- name: Workstation | Linux | Software | TLP | Facts (Artix)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
ppd_package: "power-profiles-daemon power-profiles-daemon-runit"
|
||||
tlp_run_script: tlp-runit
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
@@ -28,17 +28,17 @@
|
||||
## Conflicts ##
|
||||
|
||||
#- name: Workstation | Linux | Software | TLP | Conflicts | Disable
|
||||
# service:
|
||||
# ansible.builtin.service:
|
||||
# name: "{{ item }}"
|
||||
# state: stopped
|
||||
# enabled: false
|
||||
# loop:
|
||||
# - "{{ ppd_service }}"
|
||||
# - "{{ acf_service }}"
|
||||
# ignore_errors: yes
|
||||
# ignore_errors: true
|
||||
|
||||
- name: Workstation | Linux | Software | TLP | Conflicts | Remove
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ ppd_package }}"
|
||||
- "{{ acf_package }}"
|
||||
@@ -47,13 +47,12 @@
|
||||
## Install TLP + Associated Software ##
|
||||
|
||||
- name: Workstation | Linux | Software | TLP | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ tlp_package }}"
|
||||
- "{{ tlp_rdw }}"
|
||||
- "{{ tlp_smart }}"
|
||||
- "{{ tlp_run_script }}"
|
||||
update_cache: yes
|
||||
|
||||
## Configuration ##
|
||||
|
||||
@@ -67,13 +66,13 @@
|
||||
# NFC and WWAN (cellular) are never used so always disable.
|
||||
|
||||
- name: Workstation | Linux | Software | TLP | Config
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ tlp_config }}"
|
||||
regexp: '{{ item.key }}'
|
||||
line: '{{ item.value }} # MANAGED BY ANSIBLE'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
loop:
|
||||
- { "key": '^[\#]?TLP_ENABLE', "value": 'TLP_ENABLE=1'}
|
||||
- { "key": '^[\#]?TLP_DEFAULT_MODE', "value": 'TLP_DEFAULT_MODE=SAV'}
|
||||
@@ -100,7 +99,7 @@
|
||||
# Ensure the service is running and will run after reboot.
|
||||
|
||||
- name: Workstation | Linux | Software | TLP | Enable + Start
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ tlp_service }}"
|
||||
state: started
|
||||
enabled: true
|
||||
@@ -110,15 +109,15 @@
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | TLP | runit | Devuan | Facts 01
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
devuan_tlp_dir: "{{ runit_script_dir }}/{{ tlp_service }}"
|
||||
|
||||
- name: Workstation | Linux | Software | TLP | runit | Devuan | Facts 02
|
||||
set_fact:
|
||||
devuan_tlp_run: "{{ devuan_tlp_dir }}/run"
|
||||
ansible.builtin.set_fact:
|
||||
devuan_tlp_run: "{{ devuan_tlp_dir }}/{{ runit_service_script }}"
|
||||
|
||||
- name: Workstation | Linux | Software | TLP | runit | Devuan | Create Script
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "mkdir -pv {{ devuan_tlp_dir }}"
|
||||
- "echo '#!/bin/sh' > {{ devuan_tlp_run }}"
|
||||
@@ -136,7 +135,7 @@
|
||||
when: ansible_service_mgr == "runit"
|
||||
|
||||
- name: Workstation | Linux | Software | TLP | runit | Functions & Aliases
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ item }}"
|
||||
block: |
|
||||
function tlp-devices {
|
||||
@@ -185,8 +184,8 @@
|
||||
alias on="devices-on "
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | tlp'
|
||||
state: present
|
||||
create: yes
|
||||
backup: no
|
||||
create: true
|
||||
backup: false
|
||||
loop:
|
||||
- "{{ user_user.home }}/.bashrc"
|
||||
- "{{ user_user.home }}/.zshrc"
|
||||
|
||||
@@ -4,35 +4,39 @@
|
||||
- name: Workstation | Software | VPN | Mullvad
|
||||
block:
|
||||
|
||||
# https://mullvad.net/en/help/install-mullvad-app-linux
|
||||
# https://mullvad.net/en/help/install-mullvad-app-linux
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | Add Repo [apt]
|
||||
shell: "{{ item }}"
|
||||
loop:
|
||||
- sudo curl -fsSLo /usr/share/keyrings/mullvad-keyring.asc https://repository.mullvad.net/deb/mullvad-keyring.asc
|
||||
- echo "deb [signed-by=/usr/share/keyrings/mullvad-keyring.asc arch=$( dpkg --print-architecture )] https://repository.mullvad.net/deb/stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/mullvad.list
|
||||
- apt update
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
- name: Workstation | Software | VPN | Mullvad | Add Repo [apt]
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- sudo curl -fsSLo /usr/share/keyrings/mullvad-keyring.asc https://repository.mullvad.net/deb/mullvad-keyring.asc
|
||||
- echo "deb [signed-by=/usr/share/keyrings/mullvad-keyring.asc arch=$( dpkg --print-architecture )] https://repository.mullvad.net/deb/stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/mullvad.list
|
||||
- apt update
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | Add Repo [dnf]
|
||||
shell: "{{ item }}"
|
||||
loop:
|
||||
- sudo dnf config-manager --add-repo https://repository.mullvad.net/rpm/stable/mullvad.repo
|
||||
when: ansible_pkg_mgr == "dnf"
|
||||
- name: Workstation | Software | VPN | Mullvad | Add Repo [dnf]
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- sudo dnf config-manager --add-repo https://repository.mullvad.net/rpm/stable/mullvad.repo
|
||||
when: ansible_pkg_mgr == "dnf"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: Workstation | Software | VPN | Install
|
||||
package:
|
||||
name:
|
||||
- mullvad-vpn
|
||||
state: present
|
||||
- name: Workstation | Software | VPN | Install
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- mullvad-vpn
|
||||
state: present
|
||||
|
||||
- name: Workstation | Software | VPN | Install (Artix, runit)
|
||||
package:
|
||||
name:
|
||||
- mullvad-vpn-runit
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
and ansible_service_mgr == "runit"
|
||||
- name: Workstation | Software | VPN | Install (Artix, runit)
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- mullvad-vpn-runit
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
and ansible_service_mgr == "runit"
|
||||
|
||||
when: ansible_distribution in ("Debian", "Ubuntu")
|
||||
or ansible_pkg_mgr in ("pacman", "dnf")
|
||||
@@ -42,31 +46,33 @@
|
||||
- name: Workstation | Software | VPN | Mullvad | Devuan (runit)
|
||||
block:
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | Devuan | Facts 01
|
||||
set_fact:
|
||||
devuan_mullvad_dir: "{{ global_src }}/mullvad-installer"
|
||||
mullvad_deb_url: https://mullvad.net/en/download/app/deb/latest
|
||||
mullvad_repack_url: https://github.com/sys-fs/mullvad-repack
|
||||
- name: Workstation | Software | VPN | Mullvad | Devuan | Facts 01
|
||||
ansible.builtin.set_fact:
|
||||
devuan_mullvad_dir: "{{ global_src }}/mullvad-installer"
|
||||
mullvad_deb_url: https://mullvad.net/en/download/app/deb/latest
|
||||
mullvad_repack_url: https://github.com/sys-fs/mullvad-repack
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | Devuan | Facts 02
|
||||
set_fact:
|
||||
mullvad_repack_dir: "{{ devuan_mullvad_dir }}/mullvad_repack"
|
||||
- name: Workstation | Software | VPN | Mullvad | Devuan | Facts 02
|
||||
ansible.builtin.set_fact:
|
||||
mullvad_repack_dir: "{{ devuan_mullvad_dir }}/mullvad_repack"
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | Devuan | Check
|
||||
stat:
|
||||
path: '/opt/Mullvad VPN'
|
||||
register: mullvad_installed
|
||||
- name: Workstation | Software | VPN | Mullvad | Devuan | Check
|
||||
ansible.builtin.stat:
|
||||
path: '/opt/Mullvad VPN'
|
||||
register: mullvad_installed
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | Devuan | Install
|
||||
shell: "{{ item }}"
|
||||
loop:
|
||||
- "mkdir -pv {{ devuan_mullvad_dir }}"
|
||||
- "curl -L -o {{ devuan_mullvad_dir }}/Mullvad.deb {{ mullvad_deb_url }}"
|
||||
- "rm -rfv {{ mullvad_repack_dir }}"
|
||||
- "git clone {{ mullvad_repack_url }} {{ mullvad_repack_dir }}"
|
||||
- "cd {{ mullvad_repack_dir }} && ./repack.sh ../Mullvad.deb"
|
||||
- "apt-get install -y --reinstall {{ devuan_mullvad_dir }}/Mullvad_repack.deb"
|
||||
when: not mullvad_installed.stat.exists
|
||||
- name: Workstation | Software | VPN | Mullvad | Devuan | Install
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "mkdir -pv {{ devuan_mullvad_dir }}"
|
||||
- "curl -L -o {{ devuan_mullvad_dir }}/Mullvad.deb {{ mullvad_deb_url }}"
|
||||
- "rm -rfv {{ mullvad_repack_dir }}"
|
||||
- "git clone {{ mullvad_repack_url }} {{ mullvad_repack_dir }}"
|
||||
- "cd {{ mullvad_repack_dir }} && ./repack.sh ../Mullvad.deb"
|
||||
- "apt-get install -y --reinstall {{ devuan_mullvad_dir }}/Mullvad_repack.deb"
|
||||
when: not mullvad_installed.stat.exists
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
and ansible_service_mgr != "systemd"
|
||||
@@ -74,30 +80,32 @@
|
||||
## Link & Enable ##
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | PATH | Facts 01
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
mullvad_exe: 'mullvad-vpn'
|
||||
mullvad_exe_dir: '/opt/Mullvad\ VPN'
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | PATH | Facts 02
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
mullvad_exe_new: "{{ global_bin }}/{{ mullvad_exe }}"
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | PATH | Facts (pacman)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
mullvad_exe_dir: '/usr/bin'
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | PATH | Install
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- rm {{ mullvad_exe_new }} || echo "File does not exist."
|
||||
- echo "#!/usr/bin/env sh" > {{ mullvad_exe_new }}
|
||||
- echo "cd {{ mullvad_exe_dir }}" >> {{ mullvad_exe_new }}
|
||||
- echo "./{{ mullvad_exe }}" >> {{ mullvad_exe_new }}
|
||||
- chmod +x {{ mullvad_exe_new }}
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | runit | Enable Service (mullvad-daemon)
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
src: "{{ runit_script_dir }}/mullvad-daemon"
|
||||
dest: "{{ runit_service_dir }}/mullvad-daemon"
|
||||
state: link
|
||||
@@ -105,18 +113,21 @@
|
||||
when: ansible_service_mgr == "runit"
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | runit | Remove Old Service (mullvad)
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ runit_service_dir }}/mullvad"
|
||||
state: absent
|
||||
when: ansible_service_mgr == "runit"
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | PATH | Enable Lockdown
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- mullvad lan set block
|
||||
- mullvad lan set allow # This allows Docker to forward ports to localhost!
|
||||
- mullvad tunnel set ipv6 on
|
||||
- mullvad dns set default --block-ads --block-trackers --block-malware --block-gambling --block-adult-content --block-social-media
|
||||
- mullvad auto-connect set on
|
||||
- mullvad lockdown-mode set on
|
||||
- mullvad beta-program set off
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
@@ -9,30 +9,30 @@
|
||||
|
||||
- name: Workstation | Linux | Software | VS Codium
|
||||
block:
|
||||
|
||||
|
||||
## Facts ##
|
||||
|
||||
|
||||
# Paths
|
||||
|
||||
|
||||
- name: Workstation | Linux | Software | VS Codium | Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
vscodium_source_list: "/etc/apt/sources.list.d/vscodium.list"
|
||||
vscodium_keyfile: "/usr/share/keyrings/vscodium.gpg"
|
||||
|
||||
|
||||
# Checks
|
||||
|
||||
|
||||
- name: Workstation | Linux | Software | VS Codium | Check PPA
|
||||
stat:
|
||||
ansible.builtin.stat:
|
||||
path: "{{ vscodium_source_list }}"
|
||||
get_attributes: false
|
||||
get_checksum: false
|
||||
get_mime: false
|
||||
register: vscodium_source_exists
|
||||
|
||||
|
||||
## Install Repo ##
|
||||
|
||||
|
||||
- name: Workstation | Linux | Software | VS Codium | Add PPA
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg \
|
||||
| gpg --dearmor \
|
||||
@@ -40,39 +40,38 @@
|
||||
- "echo 'deb [arch=amd64,arm64 signed-by={{ vscodium_keyfile }}] https://download.vscodium.com/debs vscodium main' \
|
||||
| sudo tee {{ vscodium_source_list }}"
|
||||
- "sudo apt update"
|
||||
when: coding == true
|
||||
when: coding
|
||||
and not vscodium_source_exists.stat.exists
|
||||
|
||||
|
||||
## Install Package ##
|
||||
|
||||
|
||||
- name: Workstation | Linux | Software | VS Codium | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- codium
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
and coding == true
|
||||
|
||||
and coding
|
||||
|
||||
## Remove Package ##
|
||||
|
||||
|
||||
- name: Workstation | Linux | Software | VS Codium | Uninstall
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- codium
|
||||
state: absent
|
||||
when: coding != true
|
||||
|
||||
when: not coding
|
||||
|
||||
## Remove Repo ##
|
||||
|
||||
|
||||
- name: Workstation | Linux | Software | VS Codium | Remove PPA
|
||||
shell: "{{ item }}"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- "mv {{ vscodium_source_list }} ~/TRASH/"
|
||||
- "mv /etc/apt/keyrings/vscodium*.gpg ~/TRASH/"
|
||||
- "sudo apt update"
|
||||
when: coding != true
|
||||
when: not coding
|
||||
and vscodium_source_exists.stat.exists
|
||||
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
and ansible_distribution in ("Debian", "Ubuntu")
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# FreeBSD has its own. May be good to keep it separate so it's more to-the-point.
|
||||
|
||||
- name: Workstation | Mac OS | Software | Brew | Install Packages
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- atomic-wallet
|
||||
- brave-browser
|
||||
@@ -14,44 +14,44 @@
|
||||
status: present
|
||||
|
||||
- name: Workstation | Mac OS | Software | Brew | Install Packages (Coding)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- android studio
|
||||
- firefox-esr
|
||||
- visual-studio-code
|
||||
status: present
|
||||
when: coding == true
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Mac OS | Software | Brew | Install Packages (Editing:Video)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- shotcut
|
||||
status: present
|
||||
when: editing in (true, "video")
|
||||
|
||||
- name: Workstation | Mac OS | Software | Brew | Install Packages (Editing:Audio)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- audacity
|
||||
status: present
|
||||
when: editing in (true, "audio")
|
||||
|
||||
- name: Workstation | Mac OS | Software | Brew | Install Packages (Gaming)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- battle-net
|
||||
- steam
|
||||
status: present
|
||||
when: gaming == true
|
||||
when: gaming
|
||||
|
||||
- name: Workstation | Mac OS | Software | Brew | Install Packages (Cycling)
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- zwift
|
||||
status: present
|
||||
when: cycling == true
|
||||
when: cycling
|
||||
|
||||
#- name: Workstation | Mac OS | Software | Brew | Remove Packages
|
||||
# package:
|
||||
# ansible.builtin.package:
|
||||
# name:
|
||||
# status: present
|
||||
@@ -3,7 +3,7 @@
|
||||
---
|
||||
|
||||
- name: Workstation | Shared | Cron | Root | Shutdown Warnings
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: root
|
||||
name: "Shutdown Warnings"
|
||||
minute: "*"
|
||||
@@ -12,7 +12,7 @@
|
||||
state: present
|
||||
|
||||
- name: Workstation | Shared | Cron | Root | Shutdown
|
||||
cron:
|
||||
ansible.builtin.cron:
|
||||
user: root
|
||||
name: "Shutdown"
|
||||
minute: "*/5"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# Temporarily removed while it's broken:
|
||||
# , 'com.vscodium.codium.desktop', 'codium.desktop'
|
||||
- name: Workstation | Account Management | Cinnamon | Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
# Only do multiple entries per line if they are for the same exact program.
|
||||
cinnamon_favorites: "[ 'org.gnome.Terminal.desktop'
|
||||
, 'org.gnome.Console.desktop'
|
||||
@@ -47,19 +47,19 @@
|
||||
#, 'chat.simplex.simplex.desktop'
|
||||
|
||||
- name: Workstation | Account Management | Cinnamon | Facts (NixOS)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
dconf_terminal: kgx
|
||||
when: ansible_distribution in ("NixOS")
|
||||
|
||||
- name: Workstation | Account Management | Cinnamon | Facts (Ubuntu)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
dconf_theme: Yaru-purple-dark
|
||||
dconf_icons: Yaru-purple-dark
|
||||
when: ansible_distribution in ("Ubuntu")
|
||||
|
||||
# Make sure Gnome-Tweaks is installed
|
||||
- name: Workstation | Account Management | Cinnamon | Install Dependencies
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ gnome_tweaks }}"
|
||||
- "{{ dconf_editor }}"
|
||||
@@ -70,7 +70,7 @@
|
||||
# Apply dconf settings through RC files due to distros without working psutil.
|
||||
# Use the command 'dconf watch /' then change settings to see find these values.
|
||||
- name: Workstation | Account Management | Cinnamon | Settings
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
# Disable Cinnamon Settings While Converting From GNOME
|
||||
@@ -330,8 +330,8 @@
|
||||
fi # End Disable Cinnamon Settings
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Cinnamon Settings'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
become_user: "{{ user }}"
|
||||
loop:
|
||||
- .bashrc
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# Temporarily removed while it's broken:
|
||||
# , 'com.vscodium.codium.desktop', 'codium.desktop'
|
||||
- name: Workstation | Account Management | GNOME | Facts
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
# Only do multiple entries per line if they are for the same exact program.
|
||||
gnome_favorites: "[ 'org.gnome.Terminal.desktop'
|
||||
, 'org.gnome.Console.desktop'
|
||||
@@ -46,19 +46,19 @@
|
||||
#, 'chat.simplex.simplex.desktop'
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Facts (NixOS)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
dconf_terminal: kgx
|
||||
when: ansible_distribution in ("NixOS")
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Facts (Ubuntu)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
dconf_theme: Yaru-purple-dark
|
||||
dconf_icons: Yaru-purple-dark
|
||||
when: ansible_distribution in ("Ubuntu")
|
||||
|
||||
# Make sure Gnome-Tweaks is installed
|
||||
- name: Workstation | Account Management | GNOME | Install Dependencies
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ gnome_tweaks }}"
|
||||
- "{{ dconf_editor }}"
|
||||
@@ -73,7 +73,8 @@
|
||||
block:
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Check
|
||||
shell: "cd ~/.local/share/gnome-shell/extensions/dash-to-dock@micxgx.gmail.com/"
|
||||
ansible.builtin.shell: "cd ~/.local/share/gnome-shell/extensions/dash-to-dock@micxgx.gmail.com/"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: dash_to_dock_exists
|
||||
|
||||
@@ -81,17 +82,17 @@
|
||||
# https://micheleg.github.io/dash-to-dock/download.html
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Install | Clone Repo
|
||||
git:
|
||||
ansible.builtin.git:
|
||||
repo: https://github.com/micheleg/dash-to-dock.git
|
||||
dest: "~/TRASH/dash-to-dock/"
|
||||
clone: yes
|
||||
force: no
|
||||
clone: true
|
||||
force: false
|
||||
version: master
|
||||
become_user: "{{ user }}"
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Install | Dependencies
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ make }}"
|
||||
- "{{ msgfmt }}"
|
||||
@@ -100,7 +101,7 @@
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Install | Make
|
||||
shell: "cd ~/TRASH/dash-to-dock/; {{ make }}; {{ make }} install"
|
||||
ansible.builtin.shell: "cd ~/TRASH/dash-to-dock/; {{ make }}; {{ make }} install"
|
||||
become_user: "{{ user }}"
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
@@ -113,50 +114,50 @@
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | dconf Return Object
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
var: gnome_enabled_extensions
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
# https://ansible-docs.readthedocs.io/zh/stable-2.0/rst/playbooks_filters.html#filters-for-formatting-data
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Variables 1
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
gnome_enabled_extensions: "{{ gnome_enabled_extensions.value | replace('@as ', '') }}"
|
||||
dash_to_dock_ext_comma: ""
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | After replace()
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
var: gnome_enabled_extensions
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Variables 2
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
dash_to_dock_ext_comma: ", "
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed and gnome_enabled_extensions not in ("[]", [], "None")
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Variables 3
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
dash_to_dock_ext_name: "{{ dash_to_dock_ext_comma }}'dash-to-dock@micxgx.gmail.com']"
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Variables 4
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
gnome_enabled_extensions: "[]"
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed and gnome_enabled_extensions == "None"
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Print Value To Append With
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
var: dash_to_dock_ext_name
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Print Value To Append To
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
var: gnome_enabled_extensions
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
- name: Workstation | Account Management | GNOME | Dash To Dock | Print Combined Value
|
||||
debug:
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ gnome_enabled_extensions | replace(']', dash_to_dock_ext_name) }}"
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
@@ -169,13 +170,13 @@
|
||||
when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed
|
||||
|
||||
when: ansible_distribution not in ("NixOS")
|
||||
ignore_errors: yes
|
||||
ignore_errors: true
|
||||
# End block for Dash To Dock.
|
||||
|
||||
# Apply dconf settings through RC files due to distros without working psutil.
|
||||
# Use the command 'dconf watch /' then change settings to see find these values.
|
||||
- name: Workstation | Account Management | GNOME | Settings
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
## Temporary Variables + Functions ##
|
||||
@@ -430,8 +431,8 @@
|
||||
unset dconf_count
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | GNOME Settings'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
become_user: "{{ user }}"
|
||||
loop:
|
||||
- .bashrc
|
||||
@@ -439,14 +440,14 @@
|
||||
|
||||
# Remove the dconf settings which had the marker related to NixOS.
|
||||
- name: Workstation | Account Management | GNOME | Settings (NixOS)
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
# TBD: No longer used. Remove in 2027.
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | NixOS GNOME Settings'
|
||||
state: present
|
||||
create: no
|
||||
backup: no
|
||||
create: false
|
||||
backup: false
|
||||
become_user: "{{ user }}"
|
||||
loop:
|
||||
- .bashrc
|
||||
|
||||
@@ -2,26 +2,26 @@
|
||||
# Mount network shares.
|
||||
|
||||
- name: Workstation | Settings | NFS | Facts (Linux)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
mount_options: defaults,_netdev
|
||||
when: ansible_system == "Linux"
|
||||
|
||||
- name: Workstation | Settings | NFS | Facts (FreeBSD)
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
mount_options: rw
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
|
||||
- name: Workstation | Settings | NFS | Install (Linux)
|
||||
package:
|
||||
name:
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ nfs }}"
|
||||
state: present
|
||||
when: ansible_system == "Linux"
|
||||
|
||||
# https://www.unixmen.com/setup-nfs-server-on-freebsd/
|
||||
- name: Workstation | Settings | NFS | Install (FreeBSD)
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ rc_conf }}"
|
||||
marker: "# {mark} MANAGED BY ANSIBLE | NFS Components"
|
||||
block: |
|
||||
@@ -34,6 +34,6 @@
|
||||
nfs_client_flags="-n 4"
|
||||
rpc_lockd_enable="YES"
|
||||
rpc_statd_enable="YES"
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
when: ansible_system == "FreeBSD"
|
||||
@@ -2,39 +2,39 @@
|
||||
# Allow remote viewing via open/free RDP.
|
||||
|
||||
- name: Workstation | Settings | RDP | FreeBSD | Install
|
||||
package:
|
||||
ansible.builtin.package:
|
||||
name: xrdp
|
||||
state: present
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
- name: Workstation | Settings | RDP | FreeBSD | Enable
|
||||
blockinfile:
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ rc_conf }}"
|
||||
marker: "# {mark} MANAGED BY ANSIBLE | RDP Components"
|
||||
block: |
|
||||
xrdp_enable="YES"
|
||||
xrdp_sesman_enable="YES"
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
- name: Workstation | Settings | RDP | FreeBSD | Enable GNOME
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: /usr/local/etc/xrdp/startwm.sh
|
||||
regexp: 'gnome-session'
|
||||
line: 'exec gnome-session # MANAGED BY ANSIBLE'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
- name: Workstation | Settings | RDP | FreeBSD | Disable xterm
|
||||
lineinfile:
|
||||
ansible.builtin.lineinfile:
|
||||
path: /usr/local/etc/xrdp/startwm.sh
|
||||
regexp: 'xterm'
|
||||
line: '#exec xterm # MANAGED BY ANSIBLE'
|
||||
state: present
|
||||
create: yes
|
||||
backup: yes
|
||||
create: true
|
||||
backup: true
|
||||
when: ansible_system == "FreeBSD"
|
||||
@@ -4,17 +4,17 @@
|
||||
## CUPS ##
|
||||
|
||||
- name: General | Software | Services | Enable CUPS Daemon
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ cups }}"
|
||||
pattern: "{{ cups_pattern }}"
|
||||
state: started
|
||||
enabled: yes
|
||||
ignore_errors: yes
|
||||
enabled: true
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Software | Services | Enable CUPS-Browse Daemon
|
||||
service:
|
||||
ansible.builtin.service:
|
||||
name: "{{ cups_browse }}"
|
||||
pattern: "{{ cups_browse_pattern }}"
|
||||
state: started
|
||||
enabled: yes
|
||||
ignore_errors: yes
|
||||
enabled: true
|
||||
ignore_errors: true
|
||||
@@ -2,11 +2,11 @@
|
||||
# Copy everything from PROJECT/files/templates/ to User's home.
|
||||
|
||||
- name: Workstation | Settings | Templates | Variables
|
||||
set_fact:
|
||||
ansible.builtin.set_fact:
|
||||
user_templates: "{{ user_user.home }}/Templates"
|
||||
|
||||
- name: Workstation | Settings | Templates | Ensure Directory Exists
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_templates }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
# Allow remote viewing desktops via VNC.
|
||||
|
||||
- name: General | Software | Services | VNC | TBD
|
||||
shell: echo "TBD"
|
||||
ansible.builtin.shell: echo "TBD"
|
||||
Loaded 100 of 104 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user