104 Commits

Author SHA1 Message Date
me 8e46cb16a5 arch, change checks for Archlinux to looking for pacman in case forks decide to use their own name in the future. 2026-08-05 16:21:41 -07:00
me 785db7e893 setup, if BRANCH is already set, don't use main. 2026-08-05 15:40:35 -07:00
me 94431dff43 setup, refactor and reword a few sections, especially related to the getopts and hosts file. 2026-08-05 14:12:29 -07:00
me dcf4b3d451 setup, handle the lowercase branch variable more properly. 2026-08-05 13:40:21 -07:00
me 58f5f13b28 bash env, change how Firefox is found. 2026-08-05 13:29:31 -07:00
me fe022d7a9c setup, lowercase branch was not being set properly due to scope. 2026-08-05 12:38:28 -07:00
me 0ef5e0cc6a bash env, only run the keymap command if the X session is set. 2026-08-05 12:30:53 -07:00
me ccabad9c30 packages, move base-devel to general in the task section. 2026-08-05 12:25:02 -07:00
me f83fe61296 packages, move base-devel to general in the task section, indent all the lists. 2026-08-05 12:22:01 -07:00
me da9c34a9da base-devel, move back to General, it's for AUR which is done for all pacman-using devices. 2026-08-04 18:06:13 -07:00
me 8c3c3fb381 msmtp, mta version does not exist on Fedora. 2026-08-04 18:02:53 -07:00
me d617334a54 locate, put value back for apt. 2026-08-04 18:00:28 -07:00
me 52c6dba409 dig, add package name for OpenSUSE and Fedora. 2026-08-04 17:32:42 -07:00
me 21d69f230b README, update the supported distro list. 2026-08-04 17:23:25 -07:00
me 3a815d319c fedora, change all package managers to use fastfetch. 2026-08-04 17:23:02 -07:00
me 94b6db2000 setup, freebsd, allow pkg to see globs. 2026-08-04 14:47:53 -07:00
me 564485145e vscode, settings, hide release notes and fix dart indents to tabs. 2026-08-04 14:26:05 -07:00
me 814451fa44 Change i3 to be a shared playbook. Group more playbooks in blocks. 2026-08-04 14:09:03 -07:00
me bd9460c8bb i3, prepare to move playbook to shared from linux. 2026-08-04 14:02:31 -07:00
me 55a531f1b4 setup, change FreeBSD to take any version of Python. 2026-08-04 13:33:31 -07:00
me c2f910aabc mullvad, only link sv if runit is being used. 2026-08-04 11:09:27 -07:00
me ccfa27fcaf tlp, fix missing quote. 2026-08-04 10:59:45 -07:00
me 3c6c7de5e1 i3, allow the backlight checks to fail (such as VMs). 2026-08-04 10:47:43 -07:00
me 24c5a2973f pacman, fix the when clause for package names. 2026-08-04 10:45:03 -07:00
me 262cfa002e TLP, try a few more changes. 2026-08-04 10:37:01 -07:00
me 4fe8daf347 TLP, wifi, do not let the card go to sleep. 2026-08-04 10:15:16 -07:00
me ea589d09b2 reconnect, fix the connection test return status. 2026-08-04 10:05:51 -07:00
me dd0412d821 AUR, use shell rather than command, change user's name. 2026-08-04 10:04:45 -07:00
me 14a0d21633 sendmail, fix typo in mta variable. 2026-08-04 09:57:18 -07:00
me 0d42c2419c workstation, move the base-devel requirement from generic. 2026-08-04 09:55:43 -07:00
me ccd87b92bb service report, don't create the enabled file for inits other than systemd. 2026-08-04 09:52:13 -07:00
me 82e32c0f95 sendmail, ensure something is installed so that cronie can log mail. 2026-08-04 09:46:49 -07:00
me 73dfdce734 bashrc, reconnect, add a reboot of the wifi if rebooting Mullvad doesn't work. 2026-08-04 09:35:33 -07:00
me bf57faaac5 workstation, move development package names to the proper fact playbook. 2026-08-04 09:26:28 -07:00
me 9406d4aca2 AUR, only install if using pacman. 2026-08-04 09:08:21 -07:00
me 4cf848d4a9 workstation, add gnome-boxes. 2026-08-04 09:00:21 -07:00
me 09f6a1e96b firefox, add the BROWSER env variable. 2026-08-04 08:45:46 -07:00
me 2d5fa52294 flutter, fix fact task numbering. 2026-08-04 08:42:03 -07:00
me d54131a1b2 android, fix playbook to also work on Artix. 2026-08-04 08:41:07 -07:00
me 8a79822ae5 dunst, add program which handled DBUS for notify-send and fyi on non-systemd machines. 2026-08-04 08:15:08 -07:00
me c66938f738 flutter, get it installing on Artix by converting the rest of the package names to variables. 2026-08-04 08:05:20 -07:00
me be849d9c70 bashrc, add a reconnect function with aliases. 2026-08-04 07:35:46 -07:00
me b69be78382 workstation packages, use fyi and notify-send side by side. 2026-08-04 06:56:13 -07:00
me 845b042d21 Add notify-send as a workstation pre-req. 2026-08-03 11:55:40 -07:00
me 42b88fb8bd flutter, change ni ja to be a variable. Others will likely need changed too. 2026-08-03 11:49:57 -07:00
me e98ad94a90 flutter, fix the mesa variable to only hold one variable, create another for the utils. 2026-08-03 11:39:24 -07:00
me dfb72122a0 i3, ensure the flatpak version of firefox is last. 2026-08-03 11:33:30 -07:00
me 671d21b9d3 i3, add shortcut to start transmission if it gets closed. 2026-08-02 13:48:26 -07:00
me edec84400e runit, fix the enabling and disabling for services and tlp playbooks. 2026-08-02 13:47:44 -07:00
me b4eeff4386 services, fix the disabling of cupsd on runit. 2026-08-02 13:22:08 -07:00
me 331cf32737 flatpak, do the executable extension more programatically. 2026-08-02 13:10:22 -07:00
me 9fb39f8503 flatpak, add -flatpak to all the executable names. 2026-08-02 13:04:10 -07:00
me b1cc1473db android, only worry about adb and fastboot for apt distros. 2026-08-02 12:46:03 -07:00
me d0580925ac service tests, change runit to use the new variable. 2026-08-02 12:45:39 -07:00
me 5732c36d1d tlp, fix the -runit package installation. 2026-08-02 12:39:55 -07:00
me 29435e43e2 android, refactor and allow the removal on non-coding devices to fail. 2026-08-02 12:34:49 -07:00
me b051bce767 tlp, attempt to automate enabling with runit. 2026-08-02 12:28:24 -07:00
me fa732599fe Flutter, allow the facts to be set and registered so that the SDK and download can be deleted. 2026-08-02 12:07:39 -07:00
me bed26990bd Flutter, ensure all tasks have coding == true while refactoring. 2026-08-02 12:02:57 -07:00
me bcfc716b46 Flutter, change a few dependencies to be handled better across different distros. 2026-08-02 11:58:52 -07:00
me 33a645fea0 yay, change the command modules to shell so that || works properly. 2026-08-02 11:50:58 -07:00
me 8e0cc7fa45 TLP, change the package manager variable to be correct (pkg not package). 2026-08-02 11:46:39 -07:00
me 13459f8f4b Packages, firefox-esr exists on Artix, allow it to be installed too. 2026-08-02 11:40:53 -07:00
me 5155952dc7 Packages, last commit also changed yay to allow errors. This one fixes a messup in how the Firefox listings were pasted. 2026-08-02 11:39:50 -07:00
me 19970515ca Install the repo version of Firefox and uninstall mail clients. 2026-08-02 11:36:25 -07:00
me 1aaf64404f i3, change Internet shortcut to also prefer local Firefoxes over Flatpak. 2026-08-02 11:30:17 -07:00
me 65a0d8b670 Changes from 2 days ago to keep getting Artix closer to a complete provision. 2026-08-02 11:26:38 -07:00
me b6b0e620cf GNOME, fix the DELETEME note to be a comment. 2026-08-02 11:25:53 -07:00
me a10480c692 i3, remove old rogue yay attempt. 2026-07-31 15:18:44 -07:00
me 00218a447f i3, allow the AUR step to be skipped. 2026-07-31 15:10:31 -07:00
me b9d0e31631 i3, allow yay to run without prompts. 2026-07-31 15:09:52 -07:00
me 5435da309a i3, correct the syntax for the list to loop over. 2026-07-31 15:07:33 -07:00
me 5ebfa7e8bb Continue fixing i3 installation for Artix. 2026-07-31 14:59:31 -07:00
me 712b0b8ffe Begin adding yay as a package manager so that themes^Can be installed seamlessly. 2026-07-31 14:53:03 -07:00
me 99cf761528 Add commands to get Mullvad SUCCESSFULLY working on Artixgit add tasks/workstation/linux/software/vpn.yml :D 2026-07-31 12:57:23 -07:00
me dbb9528f26 Fix typo. 2026-07-31 12:56:53 -07:00
me 0122f086b2 Just remove the metasploit package, don't do autoremove since it does not work in non-interactive shells very well. 2026-07-31 11:36:11 -07:00
me 0b878674d3 Change how removal is done to properly handle multiple packages. 2026-07-31 11:35:36 -07:00
me 6e86149f59 Article had the wrong package name, use ttf-font-awesome. 2026-07-31 10:06:20 -07:00
me a2ec622582 Don't charge laptops unless the battery falls under 60%. 2026-07-31 10:04:38 -07:00
me ab478153ec Fix package name for font-awesome on Arch distros and also enable flatpak for Artix (and any Arch forks). 2026-07-31 10:02:25 -07:00
me caa7bd9285 Dig command is in the bind package on Arch. 2026-07-31 09:56:40 -07:00
me 19ce3dde3b Add notes of new distros being tested. 2026-07-31 09:12:19 -07:00
me 1bd66a0df9 Fix the dconf block from referencing NixOS. 2026-07-31 09:12:05 -07:00
me 73a6ea092b Add a configuration file for Cinnamon. 2026-07-31 09:10:13 -07:00
me 85c2a4d4b1 Do not enable tlp with runit (yet). 2026-07-30 13:39:03 -07:00
me 063928ebb8 Bulk of changes to continue getting Devuan to work. 2026-07-30 13:22:55 -07:00
me 1679eb2522 Change tabs to spaces. 2026-07-30 13:06:23 -07:00
Hyperling 65cf20f932 Allow firefox-esr to stay. 2026-07-30 12:42:47 -07:00
me a1935588a4 Refactor when clauses. 2026-07-30 11:06:39 -07:00
me 44060a6d1d Do not require runit to enable cron. It's already working anyways. 2026-07-30 11:06:28 -07:00
me f756182d12 Change spacing of services task. 2026-07-30 10:51:23 -07:00
me b41a381385 Refactor the services task to better handle systemd vs runit. 2026-07-30 10:50:38 -07:00
me faddea7492 Fix typo in ansible_service_mgr. 2026-07-30 09:41:41 -07:00
me a85cbf277f Fix quotes. 2026-07-30 09:39:02 -07:00
me 15a79578e6 Add a report for runit to list all services and their status. 2026-07-30 09:36:47 -07:00
me 57e8824d16 Only try removing Metasploit if it exists. 2026-07-30 09:25:46 -07:00
me f46b0bad96 Change services to properly handle runit now that fact has been found. 2026-07-30 09:23:08 -07:00
me f76b635e40 Also patch the other two modules which check if the service is running. 2026-07-30 09:16:24 -07:00
me 0fc27e94b0 Allow the service module to no longer have a state header. 2026-07-30 09:14:36 -07:00
me 08fbce5f44 Add nodejs playbook for having a more recent version on development machines with apt. 2026-07-30 07:58:38 -07:00
me 1ea368184d Change neofetch to fastfetch for all apt distros. 2026-07-29 17:34:03 -07:00
me 5710f284ba Add automatic removal of metasploit if it is no longer true. 2026-07-26 18:35:20 -07:00
me b4e8bf6f15 Use mullvad-vpn, not going to create an alias for mullvad-gui after all. 2026-07-26 18:18:02 -07:00
28 changed files with 1250 additions and 470 deletions
+23 -4
View File
@@ -19,15 +19,32 @@ This information is as of 2025-11-21.
These are the operating systems used as my daily driver.
#### Artix (`runit`)
2026-08-04: Completed adapting playbooks and now using this as a daily driver.
2026-07-31: Began experimenting and adapting playbooks using VMs.
#### Debian Trixie
This has been used as my primary server and workstation OS since at least 2024.
The `apt` version of `ansible` in both Bookworm and Trixie are sufficient,
no longer need to use `ansible` out of `pip`.
Stopped using as a workstation on all devices in August 2026.
#### Devuan (`runit`)
2026-07-30: Distribution has beed added with a few caveats.
- `runit` is the currently the expected init system (not OpenRC or SysVInit)
- Mullvad needs installed via .dev file [TBD: link here]().
### Secondary
These are tested via my Docker project's `ProvisionsTests` container but not currently used as daily drivers.
These are tested via my Docker project's `ProvisionsTests` containers
but not currently used as daily drivers. [TBD: Link]()
#### Arch
@@ -88,14 +105,14 @@ terrible while updating. Ubuntu Rolling Rhino filled the gap.
Workstation: 100%,
Server: 100%
## Suse Family
### Suse Family
### openSUSE Tumbleweed v2022-02-17
#### openSUSE Tumbleweed v2022-02-17
Generic: 100%,
Workstation: 100%
### openSUSE Leap 15.4
#### openSUSE Leap 15.4
Generic: 100%
Workstation: Currently failing at `[Workstation | Linux | Flatpak Distro | Package Manager | Install From Repo]` with message `Problem: nothing provides libedataserver-1.2.so.24 needed by the to be installed evolution-data-server-32bit-3.34.4-3.3.1.x86_64`.
@@ -127,6 +144,8 @@ after update problems due to a long computer hiatus.
Specifically for the Pinephone.
## Unsupported
## Future Goals
Eventually some of the scripts and install files will be put into the files
+1
View File
@@ -1,6 +1,7 @@
[defaults]
inventory=hosts
interpreter_python=auto_silent
inject_facts_as_vars=True
[inventory]
localhost_warning=False
+12 -7
View File
@@ -10,10 +10,15 @@
nethogs: nethogs
ntp_server: chrony
dig: dig
neofetch: neofetch
neofetch: fastfetch
lightdm: lightdm
sddm: sddm
tmux: tmux
base_devel: htop # Placeholder for Arch package.
sendmail: msmtp
sendmail_mta: msmtp-mta
ca_certificates: ca-certificates
locate: mlocate
- name: General | Facts | Package | Parrot OS Fixes
set_fact:
@@ -32,11 +37,6 @@
dig: dnsutils
when: ansible_pkg_mgr == "apt"
- name: General | Facts | Package | apt | Debian Trixie
set_fact:
neofetch: fastfetch
when: ansible_pkg_mgr == "apt" and ansible_distribution_release == "trixie"
- name: General | Facts | Package | pacman
set_fact:
locate: mlocate
@@ -45,6 +45,8 @@
microcode_intel: intel-ucode
cron: cronie
encfs: encfs
dig: bind
base_devel: base-devel
when: ansible_pkg_mgr == "pacman"
- name: General | Facts | Package | FreeBSD
@@ -59,7 +61,7 @@
encfs: fusefs-encfs
when: ansible_system == "FreeBSD"
- name: General | Facts | Package | dnf (Fixes) # TBD: Fix + test package names: mlocate, dig, neofetch
- name: General | Facts | Package | dnf (Fixes)
set_fact:
ansible_pkg_mgr: dnf
when: ansible_pkg_mgr in ("dnf5")
@@ -73,6 +75,8 @@
microcode_intel: microcode_ctl
cron: cronie
encfs: fuse-encfs
dig: bind-utils
sendmail_mta: msmtp
when: ansible_pkg_mgr == "dnf"
- name: General | Facts | Package | zypper
@@ -83,6 +87,7 @@
microcode_intel: ucode-intel
cron: cronie
encfs: encfs
dig: bind-utils
when: ansible_pkg_mgr == "zypper"
+1 -1
View File
@@ -21,7 +21,7 @@
set_fact:
crond: cronie
crond_pattern: cronie
when: ansible_distribution in ("Archlinux")
when: ansible_pkg_mgr == "pacman"
- name: General | Facts | Service | Fedora
set_fact:
+9 -3
View File
@@ -12,6 +12,8 @@
git_repo_ssh: ssh://git@{{ git_host }}:{{ git_ssh_port }}/{{ git_user }}/{{ git_project }}
shared_rc_install_dir: ~/.git-env-shared
notify_log: "ansible.notify.log"
runit_script_dir: /etc/runit/sv
runit_service_dir: /etc/runit/runsvdir/default
- name: General | Facts | System | Global [2/2]
set_fact:
@@ -27,7 +29,6 @@
shutdown_command: sudo shutdown -h now
when: ansible_system == "Linux"
- name: General | Facts | System | FreeBSD
set_fact:
rc_conf: /etc/rc.conf
@@ -35,14 +36,19 @@
shutdown_command: sudo shutdown -p now
when: ansible_system == "FreeBSD"
- name: General | Facts | System | Report File Names
set_fact:
lynis_report: "lynis_hardness_check.txt"
nmap_report: "nmap_port_check.txt"
- name: General | Facts | System | Ansible Branch
set_fact:
branch: main
when: branch is not defined
- name: General | Facts | System | runit (Devuan)
set_fact:
runit_script_dir: /etc/sv
runit_service_dir: /etc/services
when: ansible_pkg_mgr == "apt"
+59 -11
View File
@@ -26,15 +26,56 @@
dmenu: dmenu
sassc: sassc
ffmpeg: ffmpeg
wireless_tools: wireless-tools
macbook_wifi_driver: broadcom-sta-dkms
xz: xz
mesa: mesa
mesa_utils: mesa-utils
ninja: ninja
notify_send: libnotify
fyi: fyi
gtk3: gtk3
xz_libs: xz
cpp: libstdc++
c_libs: glibc
cpp_libs: libstdc++
z_libs: zlib
bzip: bzip2
dunst: dunst
android_jdk: openjdk
ncurses: ncurses
android_fastboot: fastboot
android_adb: adb
android_sdkmanager: sdkmanager
android_udev: android-udev
gnome_boxes: gnome-boxes
- name: Workstation | Facts | Package | apt (All Distros)
set_fact:
xz: xz-utils
mesa: libglu1-mesa
mesa_utils: libglu1-mesa
ninja: ninja-build
notify_send: libnotify-bin
gtk3: libgtk-3-dev
xz_libs: liblzma-dev
cpp: libstdc++-12-dev
c_libs: libc6:amd64
cpp_libs: libstdc++6
z_libs: lib32z1
bzip: libbz2-1.0
android_jdk: default-jdk
ncurses: libncurses5
android_udev: android-udev-rules
when: ansible_pkg_mgr == "apt"
- name: Workstation | Facts | Package | Pop_OS!
set_fact:
flatpak_distro: true
firefox_esr: firefox
when: ansible_distribution == "Pop!_OS"
- name: Workstation | Facts | Package | Ubuntu
set_fact:
flatpak_distro: true
@@ -42,13 +83,12 @@
dmenu: suckless-tools
when: ansible_distribution == "Ubuntu"
- name: Workstation | Facts | Package | Debian
- name: Workstation | Facts | Package | Debian & Devuan
set_fact:
flatpak_distro: true
dmenu: suckless-tools
when: ansible_distribution == "Debian"
firefox: firefox-esr
when: ansible_distribution in ("Debian", "Devuan")
- name: Workstation | Facts | Package | Mint
set_fact:
@@ -56,21 +96,29 @@
firefox_esr: firefox
when: ansible_distribution == "Linux Mint"
- name: Workstation | Facts | Package | Parrot OS
set_fact:
flatpak_distro: true
firefox_esr: firefox-esr
when: ansible_distribution == "Parrot OS"
- name: Workstation | Facts | Package | Arch + Manjaro
- name: Workstation | Facts | Package | pacman (All Distros)
set_fact:
macbook_wifi_driver: broadcom-wl-dkms
android_jdk: jdk-openjdk
android_fastboot: android-tools
android_adb: android-tools
when: ansible_pkg_mgr == "pacman"
- name: Workstation | Facts | Package | Arch / Manjaro / Artix
set_fact:
flatpak_distro: true
firefox_esr: firefox
psutil: python-psutil
appimagelauncher: appimagelauncher
when: ansible_distribution == "Archlinux"
#appimagelauncher: appimagelauncher # No longer in the repos, AUR.
font_awesome: ttf-font-awesome
wireless_tools: wireless_tools
nfs: nfs-utils
when: ansible_pkg_mgr == "pacman"
- name: Workstation | Facts | Package | FreeBSD
+8 -6
View File
@@ -131,8 +131,7 @@ bindsym $mod+t exec lxappearance
bindsym $mod+m exec thunar
# Internet.
#bindsym $mod+i exec firefox
bindsym $mod+i exec firefox-flatpak
bindsym $mod+i exec "firefox || firefox-esr || firefox-flatpak"
# Code.
bindsym $mod+c exec codium-flatpak
@@ -254,10 +253,11 @@ assign [class="(?i).*Mullvad.*"] $ws10
## Workspace Specific Workflows ##
bindsym $ctrl+$shift+1 workspace $ws1; exec i3-sensible-terminal;
bindsym $ctrl+$shift+2 workspace $ws2; exec firefox-flatpak;
bindsym $ctrl+$shift+2 workspace $ws2; exec "firefox || firefox-esr || firefox-flatpak";
bindsym $ctrl+$shift+3 workspace $ws3; exec codium-flatpak;
bindsym $ctrl+$shift+4 workspace $ws4; exec code-flatpak;
bindsym $ctrl+$shift+5 workspace $ws5; exec "session; dino"
bindsym $ctrl+$shift+7 workspace $ws7; exec "transmission || transmission-gtk || transmission-flatpak"
## Reloads, Restarts, Exit ##
@@ -324,12 +324,14 @@ bar {
## Startup Applications ##
exec mullvad-gui
exec mullvad-vpn
exec i3-sensible-terminal
#exec firefox-flatpak
exec transmission
exec "transmission || transmission-gtk || transmission-flatpak"
exec light -O
exec light -N 0
exec setxkbmap -layout us -variant altgr-intl
exec --no-startup-id dunst
+1
View File
@@ -4,6 +4,7 @@
"save_loc2": "~/.var/app/com.vscodium.codium/config/VSCodium/{{ user_desc }}/settings.json",
"END_COMMENTS": "",
"update.showReleaseNotes": false,
"workbench.startupEditor": "none",
"editor.rulers": [
80, 120, 200
+28 -32
View File
@@ -88,6 +88,9 @@
- 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
@@ -109,7 +112,6 @@
when: ansible_system == "FreeBSD"
- include_tasks: tasks/general/software/metasploit.yml
when: pentesting == true
when: provision == true
@@ -129,35 +131,32 @@
# Window Managers without true Desktop Environments #
- include_tasks: tasks/workstation/shared/software/dwm.yml
- include_tasks: tasks/workstation/linux/software/i3.yml
- include_tasks: tasks/workstation/shared/software/i3.yml
# Polished Desktop Environments #
- include_tasks: tasks/workstation/freebsd/software/gnome.yml
when: ansible_system == "FreeBSD"
- name: Main | Workstation | Fancy Desktop Environments
block:
- include_tasks: tasks/workstation/linux/software/gnome.yml
when: ansible_system == "Linux"
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
## Software Tasks ##
- block:
- include_tasks: tasks/workstation/linux/software/packages.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/tlp.yml
- include_tasks: tasks/workstation/linux/software/lutris.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/vscodium.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/vpn.yml
- include_tasks: tasks/workstation/linux/software/nodejs.yml
- include_tasks: tasks/workstation/linux/software/brave.yml
when: ansible_pkg_mgr in ("apt", "dnf", "zypper") and not mobile
- include_tasks: tasks/workstation/linux/software/vpn.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/freebsd/software/packages.yml
@@ -166,13 +165,16 @@
- include_tasks: tasks/workstation/mac-os/software/brew.yml
when: ansible_system == "Darwin"
## Configuration Tasks ##
- block:
- include_tasks: tasks/workstation/shared/settings/gnome.yml
when: not mobile
- include_tasks: tasks/workstation/shared/settings/cinnamon.yml
- include_tasks: tasks/workstation/linux/cron/ansible.yml
when: ansible_system == "Linux" and not mobile
when: ansible_system == "Linux"
when: not mobile
- include_tasks: tasks/workstation/shared/settings/nfs.yml
@@ -183,21 +185,16 @@
when: vnc == true
- include_tasks: tasks/workstation/shared/settings/services.yml
- include_tasks: tasks/workstation/linux/software/tlp.yml
- include_tasks: tasks/workstation/shared/settings/templates.yml
## Final Tasks (SLOW) ##
- block:
- include_tasks: tasks/workstation/linux/software/flutter.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/android.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/flatpaks.yml
when: ansible_system == "Linux" and flatpak_distro
when: flatpak_distro
when: ansible_system == "Linux"
when: workstation == true
@@ -251,22 +248,21 @@
- include_tasks: tasks/server/software/services.yml
- block:
- include_tasks: tasks/server/software/certbot.yml
when: certbot == true
- include_tasks: tasks/server/cron/certbot.yml
when: certbot == true
- block:
- include_tasks: tasks/server/software/onlyoffice.yml
when: onlyoffice == true and ansible_pkg_mgr == "apt"
when: onlyoffice == true
- include_tasks: tasks/server/software/influxdb1.yml
when: influxdb1 == true and ansible_pkg_mgr == "apt"
when: influxdb1 == true
- include_tasks: tasks/server/software/influxdb2.yml
when: influxdb2 == true and ansible_pkg_mgr == "apt"
when: influxdb2 == true
- include_tasks: tasks/server/software/grafana.yml
when: grafana == true and ansible_pkg_mgr == "apt"
when: grafana == true
when: ansible_pkg_mgr == "apt"
- include_tasks: tasks/server/software/hugo.yml
when: hugo == true
+38 -23
View File
@@ -7,12 +7,23 @@ DIR="$(dirname -- "${BASH_SOURCE[0]}")"
PROG="$(basename -- "${BASH_SOURCE[0]}")"
LOCAL=$DIR/local.yml
URL="https://git.hyperling.com/me/env-ansible"
BRANCH="main"
if [[ -z $BRANCH ]]; then
export BRANCH="main"
fi
LINUX_HOSTS_DIR=/etc/ansible
LINUX_HOSTS_FILE="$LINUX_HOSTS_DIR/hosts"
FREEBSD_HOSTS_DIR="/usr/local/etc/ansible"
FREEBSD_HOSTS_FILE="$FREEBSD_HOSTS_DIR/hosts"
HOSTS_DIR="$LINUX_HOSTS_DIR"
HOSTS_FILE="$LINUX_HOSTS_FILE"
config_dir="/usr/local/etc/hyperling-scm"
general_config="$config_dir/general.ini"
workstation_config="$config_dir/workstation.ini"
server_config="$config_dir/server.ini"
branch=""
## Functions ##
@@ -45,10 +56,10 @@ while getopts ":lb:gwsfh" arg; do
case $arg in
l) local="Y" && echo "Running $LOCAL as the playbook." ;;
b) branch="$OPTARG" && echo "Using branch $branch instead of $BRANCH." ;;
g) create_general="Y" && echo "Requested '$general_config'." ;;
w) create_workstation="Y" && echo "Requested '$workstation_config'." ;;
s) create_server="Y" && echo "Requested '$server_config'." ;;
f) show_facts="Y" ;;
g) create_general="Y" && echo "Generating test '$general_config'." ;;
w) create_workstation="Y" && echo "Generating test '$workstation_config'." ;;
s) create_server="Y" && echo "Generating test '$server_config'." ;;
f) show_facts="Y" && echo "Displaying ansible facts then exiting." ;;
h) usage ;;
*) echo "ERROR: Parameter $OPTARG was not recognized." && usage 1 ;;
esac
@@ -60,9 +71,13 @@ if [[ ! -z $1 && $1 != "-"* ]]; then
usage 1
fi
if [[ -z "$local" && "$branch" == "" ]]; then
echo "Using default branch $BRANCH."
if [[ "$branch" == "" ]]; then
branch="$BRANCH"
if [[ -z "$local" ]]; then
echo "Running against default branch '$branch'."
else
echo "Set branch to '$branch'."
fi
fi
if [[ -n "$create_general" && -f "$general_config" ]]; then
@@ -92,41 +107,41 @@ if [[ `which ansible > /dev/null; echo $?` != 0 ]]; then
if [[ $os == *Debian* || $os == *Ubuntu* || $os == *"Pop!_OS"* || $os == *Mint* || $os == *Parrot* ]]; then
sudo apt update
sudo apt install -y ansible git <<< N
sudo mkdir -p /etc/ansible
sudo sh -c 'echo "localhost ansible_connection=local" > /etc/ansible/hosts'
elif [[ $os == *FreeBSD* ]]; then
sudo pkg install -y py38-ansible git
sudo mkdir -p /usr/local/etc/ansible
sudo sh -c 'echo "localhost ansible_connection=local" > /usr/local/etc/ansible/hosts'
sudo pkg install -y -g py*-ansible git
HOSTS_DIR="$FREEBSD_HOSTS_DIR"
HOSTS_FILE="$FREEBSD_HOSTS_FILE"
elif [[ $os == *Arch* || $os == *Manjaro* || $os == *Artix* ]]; then
sudo pacman -Sy --noconfirm ansible git
sudo mkdir -p /etc/ansible
sudo sh -c 'echo "localhost ansible_connection=local" > /etc/ansible/hosts'
elif [[ $os == *Darwin* ]]; then
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo "TESTING - EXIT!"
exit 0
brew install ansible git
HOSTS_DIR=""
HOSTS_FILE=""
elif [[ $os == *Fedora* ]]; then
sudo dnf install -y ansible git python3-libselinux
sudo mkdir -p /etc/ansible
sudo sh -c 'echo "localhost ansible_connection=local" > /etc/ansible/hosts'
elif [[ $os == *openSUSE* ]]; then
sudo zypper install -y ansible git
sudo mkdir -p /etc/ansible
sudo sh -c 'echo "localhost ansible_connection=local" > /etc/ansible/hosts'
elif [[ $os == *NixOS* ]]; then
$DIR/files/scripts/nixos.sh -b $branch
sudo mkdir -p /etc/ansible
sudo sh -c 'echo "localhost ansible_connection=local" > /etc/ansible/hosts'
else
echo -e "ERROR: OS not detected."
echo -e "ERROR: OS not recognized."
echo -e "$os"
exit 1
fi
fi
echo "Installed!"
if [[ -n $HOSTS_DIR && -n $HOSTS_FILE ]]; then
echo "Ensuring hosts file exists..."
if [[ ! -e $HOSTS_FILE ]]; then
sudo mkdir -pv $HOSTS_DIR
sudo sh -c "echo 'localhost ansible_connection=local' > $HOSTS_FILE"
fi
echo "$HOSTS_FILE: '`cat $HOSTS_FILE`'"
echo "Hosts file created successfully!"
fi
if [[ "$show_facts" == "Y" ]]; then
echo "Showing Ansible Facts"
ansible localhost -m setup --connection=local
+78 -4
View File
@@ -16,12 +16,12 @@
backup: yes
create: no
state: present
when: ansible_distribution == "Archlinux"
when: ansible_pkg_mgr == "pacman"
#- name: General | Account Management | Users | Use ZSH (Arch+Manjaro)
# set_fact:
# user_shell: "{{ zsh_exec.stdout }}"
# when: ansible_distribution == "Archlinux"
# when: ansible_pkg_mgr == "pacman"
#
#- name: General | Account Management | Users | Allow ZSH (Arch)
# lineinfile:
@@ -32,7 +32,7 @@
# backup: yes
# create: no
# state: present
# when: ansible_distribution == "Archlinux"
# when: ansible_pkg_mgr == "pacman"
## Root ##
@@ -128,7 +128,17 @@
export_path_sbin: export PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin"
#export_terminal: export TERMINAL="alacritty" # colors look weird.
export_terminal: export TERMINAL="kitty"
keyboard_settings: setxkbmap -layout us -variant altgr-intl
export_browser: |
function find-firefox {
which firefox 2>/dev/null ||
which firefox-esr 2>/dev/null ||
which firefox-flatpak 2>/dev/null
}
export BROWSER="`find-firefox`"
keyboard_settings: |
if [[ -n "$XDG_SESSION_ID" ]]; then
setxkbmap -layout us -variant altgr-intl
fi
- name: General | Account Management | Users | Files | RC Variables
set_fact:
@@ -1116,6 +1126,68 @@
done
sh -c "rm '{{ notify_log_file_wip }}'"
fi
function_reconnect: |
function reconnect {
test_domain="git.hyperling.com"
test_connection() {
ping -c 3 $test_domain
status="$?"
echo "* Status Returned: '$status'"
return $status
}
test_connection &&
echo -e "\n* Looks good! Not trying anything." &&
return 0 ||
echo -e "\n* Connection failed, troubleshooting..."
show_connection() {
ip addr | grep ' UP '
ip addr | grep ' inet'
#ip addr | grep -i 'mullvad'
}
echo -e "\n* Current Connections:"
show_connection
reset_mullvad() {
mullvad disconnect && sleep 5 && mullvad connect && sleep 5
}
echo -e "\n* Turning Mullvad Off & On Again"
reset_mullvad
echo "Done!"
echo -e "\n* Checking Connections"
show_connection
echo -e "\n* Testing Again..."
test_connection &&
echo -e "\n* Looks good! Not trying anything else." &&
return 0 ||
echo -e "\n* Connection failed, troubleshooting more..."
reset_wifi() {
wifi off
sleep 5
wifi on
sleep 5
}
echo -e "\n* Turning WiFi Off & On Again"
reset_wifi
echo "Done!"
echo -e "\n* Testing Again..."
test_connection &&
echo -e "\n* Looks good now!" &&
return 0 ||
echo -e "\n* Connection still failed, maybe try rebooting?"
}
alias test_wifi="reconnect"
alias test_network="reconnect"
alias test_connection="reconnect"
alias test_connections="reconnect"
alias fix_wifi="reconnect"
alias fix_network="reconnect"
alias fix_connection="reconnect"
alias fix_connections="reconnect"
- name: General | Account Management | Users | Files | Common Variable
@@ -1124,6 +1196,7 @@
{{ export_path_additions }}
{{ export_path_sbin }}
{{ export_terminal }}
{{ export_browser }}
{{ keyboard_settings}}
rc_common: |
# Fixes "command not found" when using aliases within functions.
@@ -1203,6 +1276,7 @@
{{ alias_commit }}
{{ function_loop }}
{{ process_notify_log }}
{{ function_reconnect }}
- name: General | Account Management | Users | Files | .profile + .xsessionrc
blockinfile:
+51
View File
@@ -0,0 +1,51 @@
---
# 20260731 - Hyperling
# Install the AUR on pacman-related distros.
- name: General | Software | AUR | Facts 01
set_fact:
aur_user: aurbuilder
aur_build_dir: ~/src
aur_helper: yay
aur_helper_url: https://aur.archlinux.org/yay-bin.git
- name: General | Software | AUR | Facts 02
set_fact:
aur_helper_dir: "{{ aur_build_dir }}/{{ aur_helper }}"
aur_sudoers: "/etc/sudoers.d/sudoers_{{ aur_user }}"
- name: General | Software | AUR | User
user:
name: "{{ aur_user }}"
groups: wheel
create_home: true
- name: General | Software | AUR | Sudoers
lineinfile:
path: "{{ aur_sudoers }}"
line: "{{ aur_user }} ALL=(ALL) NOPASSWD: /usr/bin/pacman"
create: true
mode: '0440'
validate: 'visudo -cf %s'
- name: General | Software | AUR | Check
command: "which {{ aur_helper }}"
register: yay_check
changed_when: false
failed_when: false
- name: General | Software | AUR | Install
block:
- name: General | Software | AUR | Install | Clone Repo
git:
repo: "{{ aur_helper_url }}"
dest: "{{ aur_helper_dir }}"
- name: General | Software | AUR | Install | Build & Integrate
shell: "cd {{ aur_helper_dir }} && makepkg -si --noconfirm"
changed_when: true
when: yay_check.rc != 0
become_user: "{{ aur_user }}"
+24 -5
View File
@@ -5,6 +5,7 @@
set_fact:
metasploit_installer: msfinstall
when: ansible_system in ("Linux", "Darwin")
and pentesting == true
- name: General | Software | Metasploit | Check Install Status
stat:
@@ -18,8 +19,9 @@
- "mv -fv /usr/share/keyrings/metasploit-framework.gpg /tmp/apt/metasploit-framework.gpg.old"
- "mv -fv /etc/apt/sources.list.d/metasploit-framework.list /tmp/apt/metasploit-framework.list.old"
- "mv -fv /etc/apt/preferences.d/pin-metasploit.pref /tmp/apt/pin-metasploit.pref.old"
when: ansible_system in ("Linux") and
not metasploit_status.stat.exists
when: ansible_system in ("Linux") and ansible_pkg_mgr == "apt"
and not metasploit_status.stat.exists
and pentesting == true
ignore_errors: true
- name: General | Software | Metasploit | Install
@@ -28,7 +30,24 @@
- "curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > {{ metasploit_installer }}"
- "chmod 755 {{ metasploit_installer }}"
- "mkdir -p {{ global_bin }}"
- "mv -fv ./msfinstall {{ global_bin }}/{{ metasploit_installer }}"
- "mv -fv ./{{ metasploit_installer }} {{ global_bin }}/{{ metasploit_installer }}"
- yes y | "{{ global_bin }}/{{ metasploit_installer }}"
when: ansible_system in ("Linux", "Darwin") and
not metasploit_status.stat.exists
when: ansible_system in ("Linux", "Darwin")
and not metasploit_status.stat.exists
and pentesting == true
- name: General | Software | Metasploit | Remove (Darwin)
shell: "{{ item }}"
loop:
- "/opt/metasploit-framework/bin/msfremove"
when: ansible_system in ("Darwin")
and not metasploit_status.stat.exists
and pentesting == false
- name: General | Software | Metasploit | Remove
package:
name: "metasploit-framework"
state: absent
when: ansible_system in ("Linux")
and metasploit_status.stat.exists
and pentesting == false
+9 -5
View File
@@ -61,6 +61,10 @@
- "{{ ntp_server }}"
- "{{ dig }}"
- "{{ tmux }}"
- "{{ base_devel }}"
- "{{ sendmail }}"
- "{{ sendmail_mta }}"
- "{{ ca_certificates }}"
state: present
- name: General | Software | Packages | Install Software (DEV)
@@ -92,21 +96,21 @@
when: ansible_distribution == "Debian"
ignore_errors: yes
- name: General | Software | Services | Install killall (Looking at you, Debian)
- name: General | Software | Packages | Install killall (Looking at you, Debian)
package:
name: psmisc
state: present
when: ansible_distribution == "Debian"
- name: General | Software | Services | Install "Bloat" (Looking at you, Arch Base)
- name: General | Software | Packages | Install "Bloat" (Looking at you, Arch Base)
package:
name:
- which
- "{{ cron }}"
state: present
when: ansible_distribution == "Archlinux"
when: ansible_pkg_mgr == "pacman"
- name: General | Software | Services | Install Fix (Looking at you, openSUSE)
- name: General | Software | Packages | Install Fix (Looking at you, openSUSE)
package:
name:
# openSUSE Tumbleweed comes without gnome-control-center being able to open
@@ -135,7 +139,7 @@
state: absent
# Ubuntu still uses snap for critical components like GNOME, must keep.
- name: General | Software | Services | Disable Snap Daemon
- name: General | Software | Packages | Disable Snap Daemon
service:
name: snapd
pattern: snapd
+39 -20
View File
@@ -10,30 +10,20 @@
state: started
enabled: yes
when: ansible_virtualization_type != 'docker'
and ansible_service_mgr != "runit"
register: cron_status
until: cron_status.state == "started"
retries: 3
delay: 3
## CUPS ##
- name: General | Software | Services | CUPS | Disable
- name: General | Software | Services | CROND | Enable (runit)
service:
name: "{{ cups }}"
pattern: "{{ cups_pattern }}"
state: stopped
enabled: no
ignore_errors: yes
- name: General | Software | Services | CUPS-Browse | Disable
service:
name: "{{ cups_browse }}"
pattern: "{{ cups_browse_pattern }}"
state: stopped
enabled: no
ignore_errors: yes
name: "{{ crond }}"
state: started
enabled: yes
when: ansible_virtualization_type != 'docker'
and ansible_service_mgr == "runit"
ignore_errors: true # Service module seems experimental for this init system.
## SSHD ##
@@ -82,20 +72,20 @@
state: reloaded
enabled: yes
when: ansible_virtualization_type != 'docker'
and ansible_service_mgr != "runit"
register: sshd_status
until: sshd_status.state == "started"
retries: 3
delay: 3
## JournalCTL ##
- name: General | Software | Services | JournalCTL | Reduce Log Size
shell: journalctl --vacuum-size=100M
when: ansible_system == "Linux"
and ansible_service_mgr == "systemd"
ignore_errors: yes
## 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.
@@ -117,6 +107,7 @@
state: started
enabled: yes
when: ansible_virtualization_type != 'docker'
and ansible_service_mgr != "runit"
register: ntp_status
until: ntp_status.state == "started"
retries: 3
@@ -128,3 +119,31 @@
# Add a field to general.yml config file which gets applied via timedatectl and /etc/localtime.
# Example of what to do to file:
# /etc/localtime -> ../usr/share/zoneinfo/America/Phoenix
## Disable ##
- name: General | Software | Services | Disable
service:
name: "{{ item.name }}"
pattern: "{{ item.pattern }}"
state: stopped
enabled: no
ignore_errors: yes
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
rm -v {{ runit_service_dir }}/{{ item.name }}
fi
ignore_errors: yes
loop:
- {name: "{{ cups }}" }
- {name: "{{ cups_pattern }}" }
- {name: "{{ cups_browse }}" }
- {name: "{{ cups_browse_pattern }}"}
when: ansible_service_mgr == "runit"
+11
View File
@@ -5,7 +5,17 @@
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:
services_command: "systemctl list-unit-files"
when: ansible_service_mgr == "systemd"
- name: General | Tests | Services | Set Facts | runit
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 }}"
@@ -20,6 +30,7 @@
- "date > {{ services_enabled_file }}"
- "echo '\n-= Enabled + Sorted =-\n' >> {{ services_enabled_file }}"
- "grep 'enabled' {{ services_report_file }} | sort >> {{ services_enabled_file }}"
when: ansible_service_mgr == "systemd"
- name: General | Tests | Services | Make Viewable
file:
+28 -17
View File
@@ -173,21 +173,23 @@
- name: Workstation | Linux | Software | Android | Dependencies [Install]
package:
name:
- default-jdk
- libc6
- libncurses5
- libstdc++6
- lib32z1
- libbz2-1.0
- "{{ android_jdk }}"
- "{{ c_libs }}"
- "{{ ncurses }}"
- "{{ cpp_libs }}"
- "{{ z_libs }}"
- "{{ bzip }}"
- "{{ android_udev }}"
state: present
when: coding == true
- name: Workstation | Linux | Software | Android | Dependencies [Remove]
package:
name:
- sdkmanager
- "{{ android_sdkmanager }}"
state: absent
when: coding == true
and ansible_pkg_mgr == "apt"
## Install SDK ##
@@ -219,7 +221,8 @@
group: "{{ user }}"
become_user: "{{ user }}"
when: coding == true and not android_sdkmanager_temp_stat.stat.exists
when: coding == true
and not android_sdkmanager_temp_stat.stat.exists
- name: Workstation | Linux | Software | Android | Delete Archive
file:
@@ -237,7 +240,8 @@
- platform-tools
- emulator
become_user: "{{ user }}"
when: coding == true and not android_sdkmanager_final_stat.stat.exists
when: coding == true
and not android_sdkmanager_final_stat.stat.exists
# These are safe to run multiple times, and uses the new `latest` version.
- name: Workstation | Linux | Software | Android | Install | Required Modules
@@ -257,14 +261,17 @@
fi
loop: "{{ android_downloads_additional }}"
become_user: "{{ user }}"
when: coding == true and sdks == true
when: coding == true
and sdks == true
# Remove extra downloads if system is not meant for full amount of testing.
- name: Workstation | Linux | Software | Android | Uninstall | Additional Modules
shell: "yes | {{ android_sdkmanager_final }} --uninstall '{{ item }}' --sdk_root={{ android_sdk_location }}"
loop: "{{ android_downloads_additional }}"
become_user: "{{ user }}"
when: coding != true or sdks != true
when: coding != true
or sdks != true
ignore_errors: yes
# Remove any versions which used to be part of this script and no longer used.
- name: Workstation | Linux | Software | Android | Uninstall | Unused Modules
@@ -317,7 +324,9 @@
- "{{ user_root.home }}"
- "{{ user_user.home }}"
ignore_errors: yes
when: coding == true and user_root.home != "" and user_user.home != ""
when: coding == true
and user_root.home != ""
and user_user.home != ""
- name: Workstation | Linux | Software | Android | Modify PATH (.zshrc)
blockinfile:
@@ -332,7 +341,9 @@
- "{{ user_root.home }}"
- "{{ user_user.home }}"
ignore_errors: yes
when: coding == true and user_root.home != "" and user_user.home != ""
when: coding == true
and user_root.home != ""
and user_user.home != ""
## Uninstall SDK ##
@@ -349,15 +360,15 @@
- name: Workstation | Linux | Software | Android | System Tools [Install]
package:
name:
- fastboot
- adb
- "{{ android_fastboot }}"
- "{{ android_adb }}"
state: present
when: not coding == true
- name: Workstation | Linux | Software | Android | System Tools [Remove]
package:
name:
- fastboot
- adb
- "{{ android_fastboot }}"
- "{{ android_adb }}"
state: absent
when: coding == true
+22 -18
View File
@@ -10,6 +10,10 @@
# Then remove, autoremove, and purge flatpak executable with package manager.
# Source: https://softhints.com/how-to-completely-remove-flatpak-linux-mint/
- name: Workstation | Linux | Flatpak Distro | Flatpak | Facts
set_fact:
flatpak_extension: "-flatpak"
## Flatpak Pre-reqs ##
- name: Workstation | Linux | Flatpak Distro | Flatpak | Install
@@ -34,7 +38,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Arrays
set_fact:
flatpaks_generic:
- { app: "org.mozilla.firefox", name: "firefox-flatpak", extra: "" }
- { app: "org.mozilla.firefox", name: "firefox", extra: "" }
- { app: "io.gitlab.librewolf-community", name: "librewolf", extra: "" }
- { app: "org.signal.Signal", name: "signal", extra: "" }
- { app: "im.riot.Riot", name: "element", extra: "" }
@@ -50,10 +54,10 @@
- { app: "app.organicmaps.desktop", name: "organic-maps", extra: "" }
- { app: "im.dino.Dino", name: "dino", extra: "" }
flatpaks_coding:
- { app: "com.vscodium.codium", name: "codium-flatpak", extra: "" }
- { app: "com.vscodium.codium", name: "codium", extra: "" }
- { app: "com.google.AndroidStudio", name: "android-studio", extra: "" }
- { app: "io.dbeaver.DBeaverCommunity", name: "dbeaver", extra: "" }
- { app: "com.visualstudio.code-oss", name: "code-flatpak", extra: "" }
- { app: "com.visualstudio.code-oss", name: "code", extra: "" }
- { app: "org.gnome.Boxes", name: "boxes", extra: "" }
flatpaks_editing_video:
- { app: "org.shotcut.Shotcut", name: "shotcut", extra: "" }
@@ -98,7 +102,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Generic | Executables
blockinfile:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
block: |
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
marker: '{mark}'
@@ -111,7 +115,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Generic | Executable Permissions
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
state: file
mode: '0755'
loop: "{{ flatpaks_generic }}"
@@ -129,7 +133,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Coding | Executables
blockinfile:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
block: |
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
marker: '{mark}'
@@ -143,7 +147,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Coding | Executable Permissions
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
state: file
mode: '0755'
loop: "{{ flatpaks_coding }}"
@@ -160,7 +164,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Coding | Remove Executables
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
state: absent
loop: "{{ flatpaks_coding }}"
ignore_errors: yes
@@ -179,7 +183,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Executables
blockinfile:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
block: |
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
marker: '{mark}'
@@ -193,7 +197,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Executable Permissions
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
state: file
mode: '0755'
loop: "{{ flatpaks_editing_video }}"
@@ -210,7 +214,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Remove Executables
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
state: absent
loop: "{{ flatpaks_editing_video }}"
ignore_errors: yes
@@ -227,7 +231,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executables
blockinfile:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
block: |
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
marker: '{mark}'
@@ -241,7 +245,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executable Permissions
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
state: file
mode: '0755'
loop: "{{ flatpaks_editing_audio }}"
@@ -258,7 +262,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Remove Executables
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
state: absent
loop: "{{ flatpaks_editing_audio }}"
ignore_errors: yes
@@ -277,7 +281,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Gaming | Executables
blockinfile:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
block: |
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
marker: '{mark}'
@@ -291,7 +295,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Gaming | Executable Permissions
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
state: file
mode: '0755'
loop: "{{ flatpaks_gaming }}"
@@ -308,7 +312,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Gaming | Remove Executables
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
state: absent
loop: "{{ flatpaks_gaming }}"
ignore_errors: yes
@@ -326,7 +330,7 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Uninstalls | Remove Executables
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
path: "{{ flatpak_exec_dir }}/{{ item.name }}{{ flatpak_extension }}"
state: absent
loop: "{{ flatpaks_remove }}"
ignore_errors: yes
+24 -23
View File
@@ -3,25 +3,22 @@
## Facts ##
- name: Workstation | Linux | Software | Flutter | Facts [1/4]
- name: Workstation | Linux | Software | Flutter | Facts 1
set_fact:
flutter_url: "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.27.2-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"
when: coding == true
- name: Workstation | Linux | Software | Flutter | Facts [2/4]
- name: Workstation | Linux | Software | Flutter | Facts 2
set_fact:
flutter_bin_location: "{{ flutter_sdk_location }}/flutter/bin"
when: coding == true
- name: Workstation | Linux | Software | Flutter | Facts [3/4]
- name: Workstation | Linux | Software | Flutter | Facts 3
set_fact:
flutter: "{{ flutter_bin_location }}/flutter"
when: coding == true
- name: Workstation | Linux | Software | Flutter | Facts [3/3]
- name: Workstation | Linux | Software | Flutter | Facts 4
set_fact:
flutter_report_commands:
- "date > {{ flutter_report }}"
@@ -29,7 +26,6 @@
- "date >> {{ flutter_report }}"
- "{{ flutter }} doctor -v >> {{ flutter_report }}"
- "date >> {{ flutter_report }}"
when: coding == true
## Checks ##
@@ -40,7 +36,6 @@
get_checksum: false
get_mime: false
register: flutter_sdk_stat
when: coding == true
- name: Workstation | Linux | Software | Flutter | Check Download Exists
stat:
@@ -49,7 +44,6 @@
get_checksum: false
get_mime: false
register: flutter_download_stat
when: coding == true
## Packages ##
@@ -59,9 +53,10 @@
- curl
- git
- unzip
- xz-utils
- "{{ xz }}"
- zip
- libglu1-mesa
- "{{ mesa }}"
- "{{ mesa_utils }}"
state: present
when: coding == true
@@ -72,11 +67,11 @@
- clang
- cmake
- git
- ninja-build
- "{{ ninja }}"
- pkg-config
- libgtk-3-dev
- liblzma-dev
- libstdc++-12-dev
- "{{ gtk3 }}"
- "{{ xz_libs }}"
- "{{ cpp }}"
state: present
when: coding == true
@@ -84,10 +79,10 @@
- name: Workstation | Linux | Software | Flutter | Android App Dependencies
package:
name:
- libc6:amd64
- libstdc++6
- lib32z1
- libbz2-1.0
- "{{ c_libs }}"
- "{{ cpp_libs }}"
- "{{ z_libs }}"
- "{{ bzip }}"
state: present
when: coding == true
@@ -121,12 +116,14 @@
group: "{{ user }}"
become_user: "{{ user }}"
when: coding == true and not flutter_sdk_stat.stat.exists
when: coding == true
and not flutter_sdk_stat.stat.exists
- name: Workstation | Linux | Software | Flutter | Delete Archive
file:
path: "{{ flutter_download_file }}"
state: absent
when: coding == true
## Configure Environment ##
@@ -143,7 +140,9 @@
- "{{ user_root.home }}"
- "{{ user_user.home }}"
ignore_errors: yes
when: coding == true and user_root.home != "" and user_user.home != ""
when: coding == true
and user_root.home != ""
and user_user.home != ""
- name: Workstation | Linux | Software | Flutter | Modify PATH (.zshrc)
blockinfile:
@@ -158,7 +157,9 @@
- "{{ user_root.home }}"
- "{{ user_user.home }}"
ignore_errors: yes
when: coding == true and user_root.home != "" and user_user.home != ""
when: coding == true
and user_root.home != ""
and user_user.home != ""
## Test SDK ##
-122
View File
@@ -1,122 +0,0 @@
---
# 20260716 - Hyperling
# Add the setup for a simple i3 configuration. It´s pretty easy to use and
# functions super well. Very easy to get going and does not need a whole lot of
# work to change things around. Good alternative to DWM and so lightweight that
# it doesn´t even matter if both are installed!!
- name: Workstation | Linux | Software | i3 | Facts | General [1/2]
set_fact:
i3_config: "settings/i3.config"
i3_config_dir: "{{ user_user.home }}/.config/i3"
i3_package: i3
i3_light: light
i3_files: thunar
i3_term01: alacritty
i3_term02: kitty
i3_theming: lxappearance
i3_theme01: greybird-gtk-theme
i3_theme02: arc-theme
i3_theme03: numix-gtk-theme
- name: Workstation | Linux | Software | i3 | Facts | General [1/2]
set_fact:
i3_config_file: "{{ i3_config_dir }}/config"
#- name: Workstation | Linux | Software | i3 | Facts | TBD
# set_fact:
# i3_package: i3-wm
# when: ansible_distribution in ("TBD")
- name: Workstation | Linux | Software | i3 | Install
package:
name:
- "{{ i3_package }}"
- "{{ lightdm }}"
- "{{ i3_light }}"
- "{{ i3_files }}"
- "{{ i3_term01 }}"
- "{{ i3_term02 }}"
- "{{ i3_theming }}"
- "{{ i3_theme01 }}"
- "{{ i3_theme02 }}"
- "{{ i3_theme03 }}"
state: present
update_cache: yes
- name: Workstation | Linux | Software | i3 | Config | Create Dir
ansible.builtin.file:
path: "{{ i3_config_dir }}"
state: directory
mode: '0755'
owner: "{{ user }}"
group: "{{ user }}"
- name: Workstation | Linux | Software | i3 | Config | Copy File
copy:
src: "{{ i3_config }}"
dest: "{{ i3_config_file }}"
owner: "{{ user }}"
group: "{{ user }}"
mode: '0664'
# TBD: Automate getting the brightness keys to work.
#
# User is already part of the video group. Just need to configure udev rules.
#
# Get the folder name from here: `ls /sys/class/backlight/`
#
# That is your <DEVICE> for the following lines, which go here: /etc/udev/rules.d/backlight.rules
# ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="<DEVICE>", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness"
# ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="<DEVICE>", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
#
# So, for example:
# [18:12:20 root@device ~]# cat /etc/udev/rules.d/backlight.rules
# ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="intel_backlight", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness"
# ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="intel_backlight", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
# [18:12:21 root@device ~]#
#
# It then required a reboot. Doing the commands below was not enough.
#
# # sudo udevadm control --reload-rules
# # sudo udevadm trigger
#
- name: Workstation | Linux | Software | i3 | Light | Check Backlights
ansible.builtin.find:
paths: /sys/class/backlight
file_type: any # Options: file, directory, any
patterns: "*" # Wildcard patterns (e.g., "*.log")
recurse: no # Set to 'yes' for subdirectories
register: i3_light_device_check
#- name: Display var _ DELETEME
# ansible.builtin.debug:
# msg: "{{ i3_light_device_check }}"
- name: Workstation | Linux | Software | i3 | Light | Pull Backlight Name
set_fact:
i3_light_device_name: "{{ i3_light_device_check.files[0].path | basename }}"
#- name: Display var - DELETEME
# ansible.builtin.debug:
# msg: "{{ i3_light_device_name }}"
- name: Workstation | Linux | Software | i3 | Light | udev Rules | Create
ansible.builtin.copy:
dest: /etc/udev/rules.d/backlight.rules
content: |
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="{{ i3_light_device_name }}", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness"
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="{{ i3_light_device_name }}", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
owner: root
group: root
mode: '0644'
- name: Workstation | Linux | Software | i3 | Light | udev Rules | Reload
command: "{{ item }}"
loop:
- udevadm control --reload-rules
- udevadm trigger
#- name: FAIL - DELETEME
# meta: end_play
@@ -0,0 +1,35 @@
---
# 20260730 - Hyperling
# Install much more recent Node versions.
# https://linuxcapable.com/how-to-install-node-js-on-debian-linux/
- name: Workstation | Software | NodeJS
block:
- name: Workstation | Software | NodeJS | Facts
set_fact:
node_version: node_24.x
- name: Workstation | Software | NodeJS | Old | Remove
package:
name: npm
state: absent
- name: Workstation | Software | NodeJS | extrepo | Install
package:
name: extrepo
state: present
update_cache: yes
- name: Workstation | Software | NodeJS | extrepo | Enable {{ node_version }}
shell: "extrepo enable {{ node_version }}"
- name: Workstation | Software | NodeJS | Install
package:
name: nodejs
state: latest
update_cache: yes
when: ansible_pkg_mgr == "apt"
and coding == true
+22 -5
View File
@@ -36,13 +36,31 @@
name:
- vlc
- "{{ appimagelauncher }}"
- "{{ evolution }}"
- "{{ evolution }}*"
- gparted
- hugo
- wireless-tools
- "{{ firefox }}"
- "{{ firefox_esr }}"
- "{{ wireless_tools }}"
- "{{ notify_send }}"
- "{{ fyi }}"
- "{{ gnome_boxes }}"
state: present
- name: Workstation | Linux | Software | Packages | Extra For Liberated Init Systems
package:
name:
- "{{ dunst }}"
state: present
when: ansible_service_mgr != "systemd"
- name: Workstation | Linux | Software | Packages | Install From AUR
shell: "yay -Qs {{ item }} || yay --noconfirm -S {{ item }}"
loop:
- appimagelauncher
when: ansible_pkg_mgr == "pacman"
become_user: "{{ aur_user }}"
ignore_errors: yes
- name: Workstation | Linux | Software | Packages | GS Connect (KDE Connect, Android Tool)
package:
name:
@@ -56,9 +74,8 @@
- name: Workstation | Linux | Software | Packages | Remove Applications
package:
name:
- "{{ firefox }}"
- "{{ firefox_esr }}"
- "{{ thunderbird }}"
- "{{ evolution }}"
- steam
- vscode
- code
+34 -5
View File
@@ -7,16 +7,24 @@
- name: Workstation | Linux | Software | TLP | Facts
set_fact:
tlp: "tlp"
tlp_package: "tlp"
tlp_rdw: "tlp-rdw"
tlp_smart: "smartmontools"
tlp_config: "/etc/tlp.conf"
tlp_service: "tlp"
tlp_run_script: "tlp"
ppd_package: "power-profiles-daemon"
ppd_service: "power-profiles-daemon"
acf_package: "auto-cpufreq"
acf_service: "auto-cpufreq"
- name: Workstation | Linux | Software | TLP | Facts (Artix)
set_fact:
ppd_package: "power-profiles-daemon power-profiles-daemon-runit"
tlp_run_script: tlp-runit
when: ansible_pkg_mgr == "pacman"
and ansible_service_mgr == "runit"
## Conflicts ##
#- name: Workstation | Linux | Software | TLP | Conflicts | Disable
@@ -31,7 +39,9 @@
- name: Workstation | Linux | Software | TLP | Conflicts | Remove
package:
name: "{{ ppd_package }} {{ acf_package }}"
name:
- "{{ ppd_package }}"
- "{{ acf_package }}"
state: absent
## Install TLP + Associated Software ##
@@ -39,9 +49,10 @@
- name: Workstation | Linux | Software | TLP | Install
package:
name:
- "{{ tlp }}"
- "{{ tlp_package }}"
- "{{ tlp_rdw }}"
- "{{ tlp_smart }}"
- "{{ tlp_run_script }}"
update_cache: yes
## Configuration ##
@@ -64,16 +75,25 @@
create: yes
backup: yes
loop:
- { "key": '^[\#]?TLP_ENABLE', "value": 'TLP_ENABLE=1'}
- { "key": '^[\#]?TLP_DEFAULT_MODE', "value": 'TLP_DEFAULT_MODE=SAV'}
## Device Controls ##
- { "key": '^[\#]?DEVICES_TO_DISABLE_ON_STARTUP', "value": 'DEVICES_TO_DISABLE_ON_STARTUP="bluetooth nfc wwan"'}
# Ensure these stay commented, once the device is booted the user is in control. #
- { "key": '^[\#]?DEVICES_TO_ENABLE_ON_STARTUP', "value": '#DEVICES_TO_ENABLE_ON_STARTUP=""'}
- { "key": '^[\#]?DEVICES_TO_ENABLE_ON_AC', "value": '#DEVICES_TO_ENABLE_ON_AC=""'}
- { "key": '^[\#]?DEVICES_TO_DISABLE_ON_BAT', "value": '#DEVICES_TO_DISABLE_ON_BAT=""'}
# Help preserve battery life by not fully charging. #
- { "key": '^[\#]?START_CHARGE_THRESH_BAT0', "value": '{{ "" if battery else "#" }}START_CHARGE_THRESH_BAT0=75'}
- { "key": '^[\#]?START_CHARGE_THRESH_BAT0', "value": '{{ "" if battery else "#" }}START_CHARGE_THRESH_BAT0=60'}
- { "key": '^[\#]?STOP_CHARGE_THRESH_BAT0', "value": '{{ "" if battery else "#" }}STOP_CHARGE_THRESH_BAT0=80'}
- { "key": '^[\#]?START_CHARGE_THRESH_BAT1', "value": '{{ "" if battery else "#" }}START_CHARGE_THRESH_BAT1=75'}
- { "key": '^[\#]?START_CHARGE_THRESH_BAT1', "value": '{{ "" if battery else "#" }}START_CHARGE_THRESH_BAT1=60'}
- { "key": '^[\#]?STOP_CHARGE_THRESH_BAT1', "value": '{{ "" if battery else "#" }}STOP_CHARGE_THRESH_BAT1=80'}
# Do not let the WiFi device go DORMANT.
- { "key": '^[\#]?WIFI_PWR_ON_AC', "value": 'WIFI_PWR_ON_AC=off'}
- { "key": '^[\#]?WIFI_PWR_ON_BAT', "value": 'WIFI_PWR_ON_BAT=off'}
# Do not let USB devices go dormant.
- { "key": '^[\#]?USB_AUTOSUSPEND', "value": 'USB_AUTOSUSPEND=0'}
## Enable + Start ##
@@ -84,3 +104,12 @@
name: "{{ tlp_service }}"
state: started
enabled: true
when: ansible_service_mgr not in ("runit")
- name: Workstation | Linux | Software | TLP | Enable + Start (runit)
shell: |
if [[ ! -e {{ runit_service_dir }}/tlp ]]; then
ln -s {{ runit_script_dir }}/tlp {{ runit_service_dir }}/tlp
fi
when: ansible_service_mgr == "runit"
+30 -9
View File
@@ -1,8 +1,12 @@
---
# Install VPN client(s).
# https://mullvad.net/en/help/install-mullvad-app-linux
- name: Workstation | Software | VPN | Mullvad | Add Repo [apt]
- name: Workstation | Software | VPN | Mullvad
block:
# 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
@@ -10,24 +14,41 @@
- apt update
when: ansible_pkg_mgr == "apt"
- name: Workstation | Software | VPN | Mullvad | Add Repo [dnf]
- 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 | Install
- name: Workstation | Software | VPN | Install
package:
name:
- mullvad-vpn
state: present
- name: Workstation | Software | VPN | Mullvad | Symlink GUI
- name: Workstation | Software | VPN | Install (Artix, runit)
package:
name:
- mullvad-vpn-runit
state: present
when: ansible_distribution == "Artix"
and ansible_service_mgr == "runit"
- name: Workstation | Software | VPN | Mullvad | Symlink GUI
ansible.builtin.file:
src: "/opt/Mullvad VPN/mullvad-vpn"
dest: "{{ item }}"
dest: "{{ global_bin }}/mullvad-vpn"
state: link
force: true
loop:
- "{{ global_bin }}/mullvad-vpn"
- "{{ global_bin }}/mullvad-gui"
- name: Workstation | Software | VPN | Mullvad | Enable (Artix, runit)
ansible.builtin.file:
src: "/etc/runit/sv/mullvad-daemon"
dest: "/run/runit/services/mullvad"
state: link
force: true
when: ansible_service_mgr == "runit"
when: ansible_distribution in ("Debian", "Ubuntu", "Arch", "Artix")
# TBD: VPNs for distros like Devuan.
+27 -19
View File
@@ -7,30 +7,31 @@
# This also exists but was not utilized:
# https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo
## Facts ##
- name: Workstation | Linux | Software | VS Codium
block:
# Paths
## Facts ##
- name: Workstation | Linux | Software | VS Codium | Facts
# Paths
- name: Workstation | Linux | Software | VS Codium | Facts
set_fact:
vscodium_source_list: "/etc/apt/sources.list.d/vscodium.list"
vscodium_keyfile: "/usr/share/keyrings/vscodium.gpg"
when: ansible_pkg_mgr == "apt"
# Checks
# Checks
- name: Workstation | Linux | Software | VS Codium | Check PPA
- name: Workstation | Linux | Software | VS Codium | Check PPA
stat:
path: "{{ vscodium_source_list }}"
get_attributes: false
get_checksum: false
get_mime: false
register: vscodium_source_exists
when: ansible_pkg_mgr == "apt"
## Install Repo ##
## Install Repo ##
- name: Workstation | Linux | Software | VS Codium | Add PPA
- name: Workstation | Linux | Software | VS Codium | Add PPA
shell: "{{ item }}"
loop:
- "wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg \
@@ -39,32 +40,39 @@
- "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: ansible_pkg_mgr == "apt" and coding == true and not vscodium_source_exists.stat.exists
when: coding == true
and not vscodium_source_exists.stat.exists
## Install Package ##
## Install Package ##
- name: Workstation | Linux | Software | VS Codium | Install
- name: Workstation | Linux | Software | VS Codium | Install
package:
name:
- codium
state: present
when: ansible_pkg_mgr == "apt" and coding == true
when: ansible_pkg_mgr == "apt"
and coding == true
## Remove Package ##
## Remove Package ##
- name: Workstation | Linux | Software | VS Codium | Uninstall
- name: Workstation | Linux | Software | VS Codium | Uninstall
package:
name:
- codium
state: absent
when: ansible_pkg_mgr == "apt" and coding != true
when: coding != true
## Remove Repo ##
## Remove Repo ##
- name: Workstation | Linux | Software | VS Codium | Remove PPA
- name: Workstation | Linux | Software | VS Codium | Remove PPA
shell: "{{ item }}"
loop:
- "mv {{ vscodium_source_list }} ~/TRASH/"
- "mv /etc/apt/keyrings/vscodium*.gpg ~/TRASH/"
- "sudo apt update"
when: ansible_pkg_mgr == "apt" and coding != true and vscodium_source_exists.stat.exists
when: coding != true
and vscodium_source_exists.stat.exists
when: ansible_pkg_mgr == "apt"
and ansible_distribution in ("Debian", "Ubuntu")
@@ -0,0 +1,338 @@
---
# 20260731 - Hyperling
# Cinnakon settings, copied from GNOME settings.
# Temporarily removed while it's broken:
# , 'com.vscodium.codium.desktop', 'codium.desktop'
- name: Workstation | Account Management | Cinnamon | Facts
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'
, 'gnome-system-monitor.desktop', 'org.gnome.SystemMonitor.desktop'
, 'org.gnome.Nautilus.desktop'
, 'io.gitlab.librewolf-community.desktop', 'librewolf.desktop'
, 'org.mozilla.firefox.desktop', 'firefox.desktop'
, 'com.vscodium.codium.desktop'
, 'codium.desktop'
, 'org.shotcut.Shotcut.desktop'
, 'io.lmms.LMMS.desktop'
, 'app.grayjay.Grayjay.desktop'
, 'io.lbry.lbry-app.desktop', 'lbry.desktop'
, 'com.valvesoftware.Steam.desktop'
, 'net.lutris.Lutris.desktop'
, 'mullvad-vpn.desktop'
, 'network.loki.Session.desktop'
, 'org.signal.Signal.desktop', 'signal-desktop.desktop'
, 'org.telegram.desktop.desktop'
, 'com.discordapp.Discord.desktop'
]"
dconf_terminal: gnome-terminal
dconf_theme: Adwaita-dark
dconf_icons: Adwaita
# 2024-01-28 Not currently using local email clients.
#, 'org.gnome.Evolution.desktop'
#, 'chat.delta.desktop.desktop', 'deltachat.desktop'
#, 'org.gnome.Geary.desktop'
#, 'org.mozilla.Thunderbird.desktop'
# 2025-01-01
# Reduce the amount of icons on the sidebar, things that may get added back.
#, 'org.godotengine.Godot.desktop'
# 2025-03-07 Removed in place of a 2nd VS Codium install (apt version).
#, 'com.visualstudio.code-oss.desktop', 'code-oss.desktop'
# 2025-03-21 Not really using Android Studio now that Flutter is working.
#, 'com.google.AndroidStudio.desktop'
# 2025-08-31 Not used a whole lot, installed again just to explore.
#, 'im.riot.Riot.desktop'
#, 'chat.simplex.simplex.desktop'
- name: Workstation | Account Management | Cinnamon | Facts (NixOS)
set_fact:
dconf_terminal: kgx
when: ansible_distribution in ("NixOS")
- name: Workstation | Account Management | Cinnamon | Facts (Ubuntu)
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:
name:
- "{{ gnome_tweaks }}"
- "{{ dconf_editor }}"
- "{{ psutil }}"
state: present
when: ansible_distribution not in ("NixOS")
# 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:
path: "{{ user_user.home }}/{{ item }}"
block: |
# Disable Cinnamon Settings While Converting From GNOME
if [[ 1 == 0 ]]; then
## Temporary Variables + Functions ##
dconf_count=1
function inc_dconf() {
dconf_count=$(( dconf_count + 1 ))
}
## Dash to Dock ##
dconf write /org/gnome/shell/extensions/dash-to-dock/dock-position \
"'LEFT'" && inc_dconf &&
dconf write /org/gnome/shell/extensions/dash-to-dock/dock-fixed \
true && inc_dconf &&
dconf write /org/gnome/shell/extensions/dash-to-dock/dash-max-icon-size \
24 && inc_dconf &&
dconf write /org/gnome/shell/favorite-apps \
"{{ gnome_favorites }}" && inc_dconf &&
dconf write /org/gnome/shell/extensions/dash-to-dock/apply-custom-theme \
true && inc_dconf &&
dconf write /org/gnome/shell/extensions/dash-to-dock/custom-theme-shrink \
true && inc_dconf &&
dconf write /org/gnome/shell/extensions/dash-to-dock/dock-fixed \
false && inc_dconf &&
dconf write /org/gnome/shell/extensions/dash-to-dock/intellihide-mode \
"'ALL_WINDOWS'" && inc_dconf &&
## Generic ##
dconf write /org/gnome/desktop/interface/color-scheme \
"'prefer-dark'" && inc_dconf &&
dconf write /org/gnome/desktop/interface/gtk-theme \
"'{{ dconf_theme }}'" && inc_dconf &&
dconf write /org/gnome/desktop/interface/icon-theme \
"'{{ dconf_icons }}'" && inc_dconf &&
dconf write /org/gnome/desktop/interface/clock-show-date \
true && inc_dconf &&
dconf write /org/gnome/desktop/interface/clock-format \
"'24h'" && inc_dconf &&
dconf write /org/gnome/desktop/interface/clock-show-seconds \
true && inc_dconf &&
dconf write /org/gnome/desktop/interface/clock-show-weekday \
true && inc_dconf &&
dconf write /org/gnome/desktop/calendar/show-weekdate \
true && inc_dconf &&
dconf write /org/gnome/desktop/interface/show-battery-percentage \
true && inc_dconf &&
dconf write /org/gnome/desktop/wm/preferences/button-layout \
"'appmenu:minimize,maximize,close'" && inc_dconf &&
dconf write /org/gnome/desktop/wm/preferences/num-workspaces \
1 && inc_dconf &&
dconf write /org/gnome/mutter/dynamic-workspaces \
false && inc_dconf &&
dconf write /org/gnome/mutter/edge-tiling \
true && inc_dconf &&
dconf write /org/gnome/desktop/interface/enable-hot-corners \
false && inc_dconf &&
dconf write /org/gnome/mutter/center-new-windows \
true && inc_dconf &&
dconf write /org/gnome/desktop/notifications/show-banners \
true && inc_dconf &&
dconf write /org/gnome/desktop/notifications/application/org-gnome-evolution-alarm-notify/enable-sound-alerts \
false && inc_dconf &&
dconf write /org/gnome/desktop/notifications/application/org-gnome-evolution-alarm-notify/enable \
false && inc_dconf &&
dconf write /org/gnome/desktop/notifications/application/org-gnome-evolution/enable-sound-alerts \
false && inc_dconf &&
dconf write /org/gnome/desktop/notifications/application/org-gnome-evolution/enable \
false && inc_dconf &&
# Stop Update Notifications
dconf write /org/gnome/software/allow-updates \
false && inc_dconf &&
dconf write /org/gnome/software/download-updates \
false && inc_dconf &&
dconf write /org/gnome/software/download-updates-notify \
false && inc_dconf &&
# Red Mode (Night Light)
(
typeset -l redmode
redmode="{{ redmode }}"
if [[ $redmode == "true" ]]; then
dconf write /org/gnome/settings-daemon/plugins/color/night-light-enabled \
true && inc_dconf
fi
) &&
dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-automatic \
false && inc_dconf &&
#dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-from \
# 2.0 && inc_dconf &&
#dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-to \
# 1.99 && inc_dconf &&
dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-from \
19.00 && inc_dconf &&
dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-to \
07.00 && inc_dconf &&
# 1700 is max through GNOME Settings, looks pretty red but can still see green vs blue.
# 1200 is max on f.lux type apps, pretty difficult to see the difference between green and blue.
# 0500 is the max on Red Moon, super intense on a laptop, not as much on a phone screen.
# - Basically makes everything like the dash of a Z31 300ZX, lol.
dconf write /org/gnome/settings-daemon/plugins/color/night-light-temperature \
"uint32 1700" && inc_dconf &&
## Keyboard Shortcuts ##
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/binding \
"'<Control><Alt>t'" && inc_dconf &&
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/command \
"'{{ dconf_terminal }}'" && inc_dconf &&
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/name \
"'Open Terminal'" && inc_dconf &&
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/binding \
"'<Super>t'" && inc_dconf &&
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/command \
"'{{ dconf_terminal }}'" && inc_dconf &&
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/name \
"'Open Terminal 2'" && inc_dconf &&
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "
[ '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/'
, '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/'
]" && inc_dconf &&
## Privacy ##
dconf write /org/gnome/desktop/privacy/disable-camera \
true && inc_dconf &&
dconf write /org/gnome/desktop/privacy/disable-microphone \
true && inc_dconf &&
dconf write /org/gnome/desktop/privacy/recent-files-max-age \
7 && inc_dconf &&
dconf write /org/gnome/desktop/privacy/remember-recent-files \
false && inc_dconf &&
dconf write /org/gnome/desktop/privacy/old-files-age \
"uint32 14" && inc_dconf &&
dconf write /org/gnome/desktop/privacy/remove-old-trash-files \
true && inc_dconf &&
dconf write /org/gnome/desktop/privacy/remove-old-temp-files \
true && inc_dconf &&
dconf write /org/gnome/desktop/notifications/show-in-lock-screen \
false && inc_dconf &&
dconf write /org/gnome/desktop/screensaver/lock-enabled \
true && inc_dconf &&
dconf write /org/gnome/desktop/screensaver/lock-delay \
"uint32 0" && inc_dconf &&
dconf write /org/gnome/desktop/session/idle-delay \
"uint32 900" && inc_dconf &&
dconf write /org/gnome/settings-daemon/plugins/power/sleep-inactive-ac-type \
"'nothing'" && inc_dconf &&
dconf write /org/gnome/settings-daemon/plugins/power/power-button-action \
"'nothing'" && inc_dconf &&
dconf write /org/gnome/desktop/media-handling/autorun-never \
true && inc_dconf &&
## Gnome Terminal ##
# TBD: Do not start new tabs in previous tab's directory.
# The profile ID is likely unique and will need to be retrieved first.
#/org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/preserve-working-directory
#'never'
## Wellbeing ##
dconf write /org/gnome/desktop/screen-time-limits/daily-limit-enabled \
true && inc_dconf &&
dconf write /org/gnome/desktop/screen-time-limits/daily-limit-seconds \
"uint32 33333" && inc_dconf &&
dconf write /org/gnome/desktop/screen-time-limits/grayscale \
true && inc_dconf &&
dconf write /org/gnome/desktop/screen-time-limits/history-enabled \
true && inc_dconf &&
#dconf write /org/gnome/desktop/break-reminders/selected-breaks \
# "['eyesight', 'movement']" && inc_dconf &&
#dconf write /org/gnome/desktop/break-reminders/selected-breaks \
# "['movement']" && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/selected-breaks \
"@as []" && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/eyesight/duration-seconds \
"uint32 180" && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/eyesight/interval-seconds \
"uint32 1800" && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/eyesight/countdown \
false && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/eyesight/delay-seconds \
"uint32 180" && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/eyesight/fade-screen \
true && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/eyesight/notify \
false && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/eyesight/notify-overdue \
false && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/eyesight/notify-upcoming \
false && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/eyesight/play-sound \
false && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/eyesight/interval-seconds \
"uint32 1800" && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/movement/duration-seconds \
"uint32 180" && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/movement/interval-seconds \
"uint32 1800" && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/movement/countdown \
false && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/movement/delay-seconds \
"uint32 60" && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/movement/fade-screen \
false && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/movement/notify \
false && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/movement/notify-overdue \
false && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/movement/notify-upcoming \
false && inc_dconf &&
dconf write /org/gnome/desktop/break-reminders/movement/play-sound \
false && inc_dconf &&
## Success ##
sleep 0 ||
## Error Catch ##
echo "ERROR: DConf setting# $dconf_count failed!"
## Cleanup ##
unset -f inc_dconf
unset dconf_count
fi # End Disable Cinnamon Settings
marker: '# {mark} MANAGED BY ANSIBLE | Cinnamon Settings'
state: present
create: yes
backup: yes
become_user: "{{ user }}"
loop:
- .bashrc
- .zshrc
+16 -1
View File
@@ -428,7 +428,7 @@
unset -f inc_dconf
unset dconf_count
marker: '# {mark} MANAGED BY ANSIBLE | NixOS GNOME Settings'
marker: '# {mark} MANAGED BY ANSIBLE | GNOME Settings'
state: present
create: yes
backup: yes
@@ -436,3 +436,18 @@
loop:
- .bashrc
- .zshrc
# Remove the dconf settings which had the marker related to NixOS.
- name: Workstation | Account Management | GNOME | Settings (NixOS)
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
become_user: "{{ user }}"
loop:
- .bashrc
- .zshrc
+152
View File
@@ -0,0 +1,152 @@
---
# 20260716 - Hyperling
# Add the setup for a simple i3 configuration. It´s pretty easy to use and
# functions super well. Very easy to get going and does not need a whole lot of
# work to change things around. Good alternative to DWM and so lightweight that
# it doesn´t even matter if both are installed!!
- name: Workstation | Shared | Software | i3 | i3 | Facts 01
set_fact:
i3_config: "settings/i3.config"
i3_config_dir: "{{ user_user.home }}/.config/i3"
i3_package: i3
i3_light: light
i3_files: thunar
i3_term01: alacritty
i3_term02: kitty
i3_theming: lxappearance
i3_theme01: greybird-gtk-theme
i3_theme02: arc-theme
i3_theme03: numix-gtk-theme
- name: Workstation | Shared | Software | i3 | i3 | Facts 02
set_fact:
i3_config_file: "{{ i3_config_dir }}/config"
- name: Workstation | Shared | Software | i3 | i3 | Facts | non-apt
set_fact:
i3_theme01: htop
i3_theme02: htop
i3_theme03: htop
when: ansible_pkg_mgr != "apt"
- name: Workstation | Shared | Software | i3 | i3 | Facts | yay
set_fact:
i3_yay_packages:
- greybird-gtk-theme
#- enlightenment-arc-theme
- numix-gtk-theme
when: ansible_pkg_mgr == "pacman"
#- name: Workstation | Shared | Software | i3 | i3 | Facts | TBD
# set_fact:
# i3_package: i3-wm
# when: ansible_distribution in ("TBD")
- name: Workstation | Shared | Software | i3 | i3 | Install
package:
name:
- "{{ i3_package }}"
- "{{ lightdm }}"
- "{{ i3_light }}"
- "{{ i3_files }}"
- "{{ i3_term01 }}"
- "{{ i3_term02 }}"
- "{{ i3_theming }}"
- "{{ i3_theme01 }}"
- "{{ i3_theme02 }}"
- "{{ i3_theme03 }}"
state: present
update_cache: yes
- name: Workstation | Shared | Software | i3 | i3 | Install (yay)
shell: "yay -Qs {{ item }} || yay --noconfirm -S {{ item }}"
loop: "{{ i3_yay_packages }}"
when: ansible_pkg_mgr == "pacman"
become_user: "{{ aur_user }}"
ignore_errors: true
- name: Workstation | Shared | Software | i3 | i3 | Config | Create Dir
ansible.builtin.file:
path: "{{ i3_config_dir }}"
state: directory
mode: '0755'
owner: "{{ user }}"
group: "{{ user }}"
- name: Workstation | Shared | Software | i3 | i3 | Config | Copy File
copy:
src: "{{ i3_config }}"
dest: "{{ i3_config_file }}"
owner: "{{ user }}"
group: "{{ user }}"
mode: '0664'
# TBD: Automate getting the brightness keys to work.
#
# User is already part of the video group. Just need to configure udev rules.
#
# Get the folder name from here: `ls /sys/class/backlight/`
#
# That is your <DEVICE> for the following lines, which go here: /etc/udev/rules.d/backlight.rules
# ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="<DEVICE>", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness"
# ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="<DEVICE>", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
#
# So, for example:
# [18:12:20 root@device ~]# cat /etc/udev/rules.d/backlight.rules
# ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="intel_backlight", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness"
# ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="intel_backlight", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
# [18:12:21 root@device ~]#
#
# It then required a reboot. Doing the commands below was not enough.
#
# # sudo udevadm control --reload-rules
# # sudo udevadm trigger
#
- name: Workstation | Shared | Software | i3 | i3 | Light (Linux Only)
block:
- name: Workstation | Shared | Software | i3 | i3 | Light | Check Backlights
ansible.builtin.find:
paths: /sys/class/backlight
file_type: any # Options: file, directory, any
patterns: "*" # Wildcard patterns (e.g., "*.log")
recurse: no # Set to 'yes' for subdirectories
register: i3_light_device_check
ignore_errors: yes
#- name: Display var _ DELETEME
# ansible.builtin.debug:
# msg: "{{ i3_light_device_check }}"
- name: Workstation | Shared | Software | i3 | i3 | Light | Pull Backlight Name
set_fact:
i3_light_device_name: "{{ i3_light_device_check.files[0].path | basename }}"
ignore_errors: yes
#- name: Display var - DELETEME
# ansible.builtin.debug:
# msg: "{{ i3_light_device_name }}"
- name: Workstation | Shared | Software | i3 | i3 | Light | udev Rules | Create
ansible.builtin.copy:
dest: /etc/udev/rules.d/backlight.rules
content: |
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="{{ i3_light_device_name }}", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness"
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="{{ i3_light_device_name }}", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
owner: root
group: root
mode: '0644'
ignore_errors: yes
- name: Workstation | Shared | Software | i3 | i3 | Light | udev Rules | Reload
command: "{{ item }}"
loop:
- udevadm control --reload-rules
- udevadm trigger
when: ansible_system == "Linux"
#- name: FAIL - DELETEME
# meta: end_play