Compare commits
	
		
			120 Commits
		
	
	
		
			42306e4287
			...
			stage
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 71ca410123 | |||
| c46c78519b | |||
| 816a0d4f69 | |||
| f8a60b4287 | |||
| a7f395a62a | |||
| f02aec2cdb | |||
| a94959bcf9 | |||
| 5004250f85 | |||
| 4c4d4bbef7 | |||
| d32b636a99 | |||
| a7083733cc | |||
| 97ddcc4573 | |||
| dc2ae57bd6 | |||
| 82ab31b9ea | |||
| 49ababedc5 | |||
| 0d3931d738 | |||
| 7c93f25a5d | |||
| 8445b64d6b | |||
| 8dfb3fe2a6 | |||
| 5b749d2100 | |||
| 57ca267aa5 | |||
| 2ca308c287 | |||
| 40ee72b587 | |||
| 13bc98d7ef | |||
| d916637798 | |||
| 71d236d0ba | |||
| d81c424878 | |||
| 73e527640f | |||
| aa3075a9fc | |||
| 89cdf8157f | |||
| 4e0ff86295 | |||
| 305b8df6ff | |||
| 6a78933875 | |||
| 7095636915 | |||
| 80bba3b21b | |||
| d98bbb02a9 | |||
| 00c87328ab | |||
| b4cdea984e | |||
| 4651726268 | |||
| 3410cf4426 | |||
| d5393f60f3 | |||
| 5f882df33f | |||
| 0dfbd0bd68 | |||
| 0d5b095ad6 | |||
| 07e32decf8 | |||
| afc3b20785 | |||
| ed160da316 | |||
| 2f08b1414e | |||
| c279884da2 | |||
| df8b330893 | |||
| 08a7a22dde | |||
| 57243f65e3 | |||
| 35469851b3 | |||
| 2cf4a348c3 | |||
| 4a33adf073 | |||
| fb00d3e6bc | |||
| 267a260e90 | |||
| 03b9f7e1b2 | |||
| 57dc62a74a | |||
| f7c321bf23 | |||
| 130b243be3 | |||
| 400ef8400c | |||
| d35d9ccdd2 | |||
| a730919b43 | |||
| 4e9e714504 | |||
| c0ba27e782 | |||
| 6d2a822323 | |||
| a8e6e0b6c6 | |||
| 93b919f48b | |||
| 215e7dee69 | |||
| 70ac7bff94 | |||
| 54589ca033 | |||
| 2dd0303176 | |||
| 411f203024 | |||
| 9f22385040 | |||
| 103a79a7ee | |||
| 602376df5f | |||
| 95c87448c8 | |||
| df5421defe | |||
| 1e7e11ed91 | |||
| 07dc365410 | |||
| c248a3c048 | |||
| 16466fb0c8 | |||
| 86e3f40d36 | |||
| 8038e10364 | |||
| 295f29dece | |||
| 8181ee0848 | |||
| c87c4468b3 | |||
| e19902074a | |||
| c12b54d0dc | |||
| a5023b2ef7 | |||
| ad6601f17e | |||
| 8e3e284753 | |||
| df4efb2beb | |||
| c7d06da91e | |||
| 3e1b0cc961 | |||
| 2b551cbff5 | |||
| 64c77cbd20 | |||
| c8186d30da | |||
| 68e1e5a48f | |||
| f61fe14a94 | |||
| a03a1b6493 | |||
| d1f50523fb | |||
| 9339b590e0 | |||
| dfe0b26498 | |||
| 57f14fed8d | |||
| 23b16f5db4 | |||
| a15e0017a6 | |||
| a7e1d0d25a | |||
| b203eab7b5 | |||
| 6d4ac9bb69 | |||
| 5c8eb77f95 | |||
| 544519bbfa | |||
| 1ab1594f6c | |||
| ae4967bc04 | |||
| 0d72bc1ea9 | |||
| de9c886af2 | |||
| 8033efce93 | |||
| 2d9317e9de | |||
| b6066558e7 | 
@@ -6,6 +6,11 @@
 | 
			
		||||
  set_fact:
 | 
			
		||||
    sshfs: sshfs
 | 
			
		||||
    tar: tar
 | 
			
		||||
    iftop: iftop
 | 
			
		||||
    nethogs: nethogs
 | 
			
		||||
    ntp_server: chrony
 | 
			
		||||
    dig: dig
 | 
			
		||||
    neofetch: neofetch
 | 
			
		||||
 | 
			
		||||
- name: General | Facts | Packages | Parrot OS Fixes
 | 
			
		||||
  set_fact:
 | 
			
		||||
@@ -21,8 +26,14 @@
 | 
			
		||||
    microcode_intel: intel-microcode
 | 
			
		||||
    cron: cron
 | 
			
		||||
    encfs: encfs
 | 
			
		||||
    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
 | 
			
		||||
@@ -98,7 +109,7 @@
 | 
			
		||||
            echo -e "******* Apt *******\n*** Update Cache ***" &&
 | 
			
		||||
            sudo apt update &&
 | 
			
		||||
            echo -e "\n*** Auto Remove ***" &&
 | 
			
		||||
            sudo apt autoremove {{ update_accept_var }} &&
 | 
			
		||||
            sudo apt autoremove --purge {{ update_accept_var }} &&
 | 
			
		||||
            echo -e "\n*** Clean ***" &&
 | 
			
		||||
            sudo apt clean {{ update_accept_var }} &&
 | 
			
		||||
            echo -e "Cleaned!\n\n*** Configure DPKG ***" &&
 | 
			
		||||
@@ -113,7 +124,7 @@
 | 
			
		||||
            echo -e "******* Parrot *******\n*** Update Cache ***" &&
 | 
			
		||||
            sudo apt update &&
 | 
			
		||||
            echo -e "\n*** Auto Remove ***" &&
 | 
			
		||||
            sudo apt autoremove {{ update_accept_var }} &&
 | 
			
		||||
            sudo apt autoremove --purge {{ update_accept_var }} &&
 | 
			
		||||
            parrot_mirrors_suck=true &&
 | 
			
		||||
            while [[ $parrot_mirrors_suck ]]; do
 | 
			
		||||
              unset parrot_mirrors_suck
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    st_install_dir: /usr/local/src/st
 | 
			
		||||
    global_bin: /usr/local/bin
 | 
			
		||||
    x_desktops: /usr/share/xsessions
 | 
			
		||||
    git_repo_http: http://{{ git_host }}/{{ git_user }}/{{ git_project }}
 | 
			
		||||
    git_repo_http: https://{{ git_host }}/{{ git_user }}/{{ git_project }}
 | 
			
		||||
    git_repo_ssh: ssh://git@{{ git_host }}:{{ git_ssh_port }}/{{ git_user }}/{{ git_project }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										57
									
								
								files/scripts/backup_system.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										57
									
								
								files/scripts/backup_system.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
## Variables ##
 | 
			
		||||
 | 
			
		||||
if [[ -z "$HOSTNAME" ]]; then
 | 
			
		||||
	echo "*** Pulling Hostname From Command ***"
 | 
			
		||||
	export HOSTNAME="`hostname`"
 | 
			
		||||
fi
 | 
			
		||||
if [[ -z "$HOSTNAME" ]]; then
 | 
			
		||||
	echo "*** Pulling Hostname From /etc/ File ***"
 | 
			
		||||
	export HOSTNAME="`cat /etc/hostname`"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
EXTRA="$1"
 | 
			
		||||
TAG="System"
 | 
			
		||||
DATE="`date "+%Y%m%d-%H%M%S"`"
 | 
			
		||||
BACKUP_DIR="/srv/backup"
 | 
			
		||||
BASENAME="Backup"
 | 
			
		||||
BACKUP="$BACKUP_DIR/$BASENAME.$DATE.$HOSTNAME.$TAG.zip"
 | 
			
		||||
 | 
			
		||||
## Initialization ##
 | 
			
		||||
 | 
			
		||||
echo "*** Creating Backup Directory ***"
 | 
			
		||||
sudo mkdir -pv "$BACKUP_DIR"
 | 
			
		||||
sudo mkdir -pv "$BACKUP_DIR/TRASH"
 | 
			
		||||
sudo chmod -Rv 775 "$BACKUP_DIR"
 | 
			
		||||
sudo chown -Rv root:root "$BACKUP_DIR"
 | 
			
		||||
 | 
			
		||||
## Cleanup ##
 | 
			
		||||
 | 
			
		||||
echo "*** Removing Old Backups ***"
 | 
			
		||||
cd "$BACKUP_DIR"
 | 
			
		||||
sudo mv -v "$BASENAME"*"$TAG"* TRASH/
 | 
			
		||||
sudo rm -v TRASH/*
 | 
			
		||||
 | 
			
		||||
## Main
 | 
			
		||||
 | 
			
		||||
echo "*** Creating backup at '$BACKUP' ***"
 | 
			
		||||
sudo zip -rv "$BACKUP" \
 | 
			
		||||
	/etc /var/{log,mail,spool} /srv /boot \
 | 
			
		||||
	/usr/local/etc $EXTRA \
 | 
			
		||||
	-x "/srv/backup/*"
 | 
			
		||||
status="$?"
 | 
			
		||||
 | 
			
		||||
if [[ "$status" != 0 ]]; then
 | 
			
		||||
	echo "*** ERROR: Failed to create '$BACKUP', file may be incorrect. ***"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ -e "$BACKUP" ]]; then
 | 
			
		||||
	ls -alh "$BACKUP"
 | 
			
		||||
	echo "*** '$BACKUP' created successfully! ***"
 | 
			
		||||
else
 | 
			
		||||
	echo "*** '$BACKUP' not found! ***"
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
@@ -12,6 +12,9 @@
 | 
			
		||||
	"editor.tabSize": 3,
 | 
			
		||||
	"editor.insertSpaces": false,
 | 
			
		||||
	"files.insertFinalNewline": true,
 | 
			
		||||
	"[html]": {
 | 
			
		||||
		"files.insertFinalNewline": false
 | 
			
		||||
	},
 | 
			
		||||
	"files.trimFinalNewlines": true,
 | 
			
		||||
	"git.confirmSync": false,
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								setup.sh
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								setup.sh
									
									
									
									
									
								
							@@ -15,7 +15,7 @@ BRANCH="main"
 | 
			
		||||
function usage {
 | 
			
		||||
	cat <<- EOF
 | 
			
		||||
 | 
			
		||||
	  $PROG [-l] [-b branch_name] [-h]
 | 
			
		||||
	  $PROG [-l] [-b branch_name] [-g] [-w] [-s] [-h]
 | 
			
		||||
	    Program to initialize synchronization with Hyperling's Ansible configuration.
 | 
			
		||||
	      $URL
 | 
			
		||||
 | 
			
		||||
@@ -23,7 +23,10 @@ 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. ;)
 | 
			
		||||
	      -b branch_name: Download and run a specific branch. Default is $BRANCH.
 | 
			
		||||
	      -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.
 | 
			
		||||
			-s : Enable the Server config with test contents.
 | 
			
		||||
	      -h : Display this help text
 | 
			
		||||
 | 
			
		||||
	EOF
 | 
			
		||||
@@ -32,10 +35,13 @@ function usage {
 | 
			
		||||
 | 
			
		||||
## Parameter Parsing ##
 | 
			
		||||
 | 
			
		||||
while getopts ":lb:h" arg; do
 | 
			
		||||
while getopts ":lb:gwsh" arg; do
 | 
			
		||||
	case $arg in
 | 
			
		||||
		l) local="Y" && echo "Running $LOCAL as the playbook." ;;
 | 
			
		||||
		b) branch="$OPTARG" && echo "Using branch $branch instead of $BRANCH." ;;
 | 
			
		||||
		l) create_general="Y" && echo "Creating basic '$general_config'." ;;
 | 
			
		||||
		l) create_workstation="Y" && echo "Creating basic '$workstation_config'." ;;
 | 
			
		||||
		l) create_server="Y" && echo "Creating basic '$server_config'." ;;
 | 
			
		||||
		h) usage ;;
 | 
			
		||||
		*) echo "ERROR: Parameter $OPTARG was not recognized." && usage 1 ;;
 | 
			
		||||
	esac
 | 
			
		||||
@@ -47,15 +53,32 @@ if [[ ! -z $1 && $1 != "-"* ]]; then
 | 
			
		||||
	usage 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $branch == "" ]]; then
 | 
			
		||||
if [[ -z "$local" && "$branch" == "" ]]; then
 | 
			
		||||
	echo "Using default branch $BRANCH."
 | 
			
		||||
	branch="$BRANCH"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ -n "$create_general" && -f "$general_config" ]]; then
 | 
			
		||||
	echo "WARNING: General configuration already exists, will not overwrite."
 | 
			
		||||
	ls -lh "$general"
 | 
			
		||||
fi
 | 
			
		||||
if [[ -n "$create_workstation" && -f "$workstation_config" ]]; then
 | 
			
		||||
	echo "WARNING: Workstation configuration already exists, will not overwrite."
 | 
			
		||||
	ls -lh "$workstation_config"
 | 
			
		||||
fi
 | 
			
		||||
if [[ -n "$create_server" && -f "$server_config" ]]; then
 | 
			
		||||
	echo "WARNING: Server configuration already exists, will not overwrite."
 | 
			
		||||
	ls -lh "$server_config"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
## Main ##
 | 
			
		||||
 | 
			
		||||
os="$(cat /etc/os-release)"
 | 
			
		||||
os="$os $(uname -a)"
 | 
			
		||||
if [[ ! -f /.dockerenv ]]; then
 | 
			
		||||
	# If we are not in a Docker container, also check what the kernel says.
 | 
			
		||||
	os="$os $(uname -a)"
 | 
			
		||||
	# Docker containers use the host kernel which gives an incorrect reading.
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "Making sure all necessary packages are installed..."
 | 
			
		||||
if [[ `which ansible > /dev/null; echo $?` != 0 ]]; then
 | 
			
		||||
@@ -101,6 +124,41 @@ echo "Installed!"
 | 
			
		||||
#ansible-galaxy collection install community.general
 | 
			
		||||
#echo "Added!"
 | 
			
		||||
 | 
			
		||||
# Create basic layouts if configs do not exist and are requested.
 | 
			
		||||
if [[ -n "$create_general" && ! -f "$general_config" ]]; then
 | 
			
		||||
	function print_general_contents {
 | 
			
		||||
		cat <<- EOF
 | 
			
		||||
			enable=true
 | 
			
		||||
			user=test
 | 
			
		||||
			user_desc=Test
 | 
			
		||||
			branch=$branch
 | 
			
		||||
		EOF
 | 
			
		||||
	}
 | 
			
		||||
	print_general_contents > "$general_config"
 | 
			
		||||
fi
 | 
			
		||||
if [[ -n "$create_workstation" && ! -f "$workstation_config" ]]; then
 | 
			
		||||
	function print_workstation_contents {
 | 
			
		||||
		cat <<- EOF
 | 
			
		||||
			enable=true
 | 
			
		||||
			user=test
 | 
			
		||||
			user_desc=Test
 | 
			
		||||
			branch=$branch
 | 
			
		||||
		EOF
 | 
			
		||||
	}
 | 
			
		||||
	print_workstation_contents > "$workstation_config"
 | 
			
		||||
fi
 | 
			
		||||
if [[ -n "$create_server" && ! -f "$server_config" ]]; then
 | 
			
		||||
	function print_server_contents {
 | 
			
		||||
		cat <<- EOF
 | 
			
		||||
			enable=true
 | 
			
		||||
			user=test
 | 
			
		||||
			user_desc=Test
 | 
			
		||||
			branch=$branch
 | 
			
		||||
		EOF
 | 
			
		||||
	}
 | 
			
		||||
	print_server_contents > "$server_config"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "Provisioning Ansible..."
 | 
			
		||||
if [[ $local == "Y" ]]; then
 | 
			
		||||
	sudo ansible-playbook $LOCAL
 | 
			
		||||
 
 | 
			
		||||
@@ -125,17 +125,17 @@
 | 
			
		||||
 | 
			
		||||
- name: General | Account Management | Provisioning Configuration | General | Load
 | 
			
		||||
  set_fact:
 | 
			
		||||
    provision:  "{{ lookup('ini', 'enable     file={{gen_file}} default=false') }}"
 | 
			
		||||
    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') }}"
 | 
			
		||||
    pentesting: "{{ lookup('ini', 'pentesting file={{gen_file}} default=false') }}"
 | 
			
		||||
    no_telem:   "{{ lookup('ini', 'no_telem   file={{gen_file}} default=false') }}"
 | 
			
		||||
    battery:    "{{ lookup('ini', 'battery    file={{gen_file}} default=false') }}"
 | 
			
		||||
    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') }}"
 | 
			
		||||
    sshd_port:  "{{ lookup('ini', 'sshd_port  file={{gen_file}} default=22') }}"
 | 
			
		||||
    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') }}"
 | 
			
		||||
@@ -179,6 +179,7 @@
 | 
			
		||||
      ;  enable : Set to true for system to be considered a workstation.
 | 
			
		||||
      ;
 | 
			
		||||
      ;  coding : Set to true for installation of code editors (VSCode, PyCharm, Android Studio)
 | 
			
		||||
      ;  - sdks : Set to true to download additional SDKs to test against.
 | 
			
		||||
      ;
 | 
			
		||||
      ; editing : Set to true for installation of Audio/Video editors (Shotcut, Audacity, OBS Stdio, GIMP)
 | 
			
		||||
      ;           Set to video for only the video related portions.
 | 
			
		||||
@@ -200,6 +201,9 @@
 | 
			
		||||
      ;  mobile : Set to true if not using an amd64 processor.
 | 
			
		||||
      ;             Also used to disable tasks not helpful for Pinephone.
 | 
			
		||||
      ;
 | 
			
		||||
      ; redmode : Set to true/false for automatially using Night Light in GNOME.
 | 
			
		||||
      ;             Default: true
 | 
			
		||||
      ;
 | 
			
		||||
      [global]
 | 
			
		||||
    marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config'
 | 
			
		||||
    state: present
 | 
			
		||||
@@ -208,14 +212,16 @@
 | 
			
		||||
 | 
			
		||||
- name: General | Account Management | Provisioning Configuration | Workstation | Load
 | 
			
		||||
  set_fact:
 | 
			
		||||
    workstation: "{{ lookup('ini', 'enable  file={{wrk_file}} default=false') }}"
 | 
			
		||||
    coding:      "{{ lookup('ini', 'coding  file={{wrk_file}} default=false') }}"
 | 
			
		||||
    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') }}"
 | 
			
		||||
    rdp:         "{{ lookup('ini', 'rdp     file={{wrk_file}} default=false') }}"
 | 
			
		||||
    vnc:         "{{ lookup('ini', 'vnc     file={{wrk_file}} default=false') }}"
 | 
			
		||||
    bsd_gpu:     "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') }}"
 | 
			
		||||
    mobile:      "{{ lookup('ini', 'mobile  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 }}"
 | 
			
		||||
 | 
			
		||||
- name: General | Account Management | Provisioning Configuration | Workstation | List
 | 
			
		||||
  set_fact:
 | 
			
		||||
@@ -223,12 +229,14 @@
 | 
			
		||||
  loop:
 | 
			
		||||
    - { 'workstation': "{{ workstation }}" }
 | 
			
		||||
    - { 'coding': "{{ coding }}" }
 | 
			
		||||
    - { 'sdks': "{{ sdks }}" }
 | 
			
		||||
    - { 'editing': "{{ editing }}" }
 | 
			
		||||
    - { 'gaming': "{{ gaming }}" }
 | 
			
		||||
    - { 'rdp': "{{ rdp }}" }
 | 
			
		||||
    - { 'vnc': "{{ vnc }}" }
 | 
			
		||||
    - { 'bsd_gpu': "{{ bsd_gpu }}" }
 | 
			
		||||
    - { 'mobile': "{{ mobile }}" }
 | 
			
		||||
    - { 'redmode': "{{ redmode }}" }
 | 
			
		||||
 | 
			
		||||
# No longer mining, this is now considered deprecated.
 | 
			
		||||
### Miner ##
 | 
			
		||||
@@ -280,18 +288,18 @@
 | 
			
		||||
#
 | 
			
		||||
#- name: General | Account Management | Provisioning Configuration | Miner | Load
 | 
			
		||||
#  set_fact:
 | 
			
		||||
#    miner:              "{{ lookup('ini', 'enable             file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    amdgpu:             "{{ lookup('ini', 'amdgpu             file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    nanominer:          "{{ lookup('ini', 'nanominer          file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    nanominer_cpu:      "{{ lookup('ini', 'nanominer_cpu      file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    nanominer_cpu_pool: "{{ lookup('ini', 'nanominer_cpu_pool file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    nanominer_gpu:      "{{ lookup('ini', 'nanominer_gpu      file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    nanominer_gpus:     "{{ lookup('ini', 'nanominer_gpus     file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    nanominer_gpu_pool: "{{ lookup('ini', 'nanominer_gpu_pool file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    eth_minhashrate:    "{{ lookup('ini', 'eth_minhashrate    file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    ethminer:           "{{ lookup('ini', 'ethminer           file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    nvidia:             "{{ lookup('ini', 'nvidia             file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    xmr_stak_cpu:       "{{ lookup('ini', 'xmr_stak_cpu       file={{mnr_file}} default=false') }}"
 | 
			
		||||
#    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 }}"
 | 
			
		||||
#    nanominer_cpu:      "{{ lookup('ini', 'nanominer_cpu      file={{mnr_file}} default=false') | bool }}"
 | 
			
		||||
#    nanominer_cpu_pool: "{{ lookup('ini', 'nanominer_cpu_pool file={{mnr_file}} default=false') | bool }}"
 | 
			
		||||
#    nanominer_gpu:      "{{ lookup('ini', 'nanominer_gpu      file={{mnr_file}} default=false') | bool }}"
 | 
			
		||||
#    nanominer_gpus:     "{{ lookup('ini', 'nanominer_gpus     file={{mnr_file}} default=false') | bool }}"
 | 
			
		||||
#    nanominer_gpu_pool: "{{ lookup('ini', 'nanominer_gpu_pool file={{mnr_file}} default=false') | bool }}"
 | 
			
		||||
#    eth_minhashrate:    "{{ lookup('ini', 'eth_minhashrate    file={{mnr_file}} default=false') | bool }}"
 | 
			
		||||
#    ethminer:           "{{ lookup('ini', 'ethminer           file={{mnr_file}} default=false') | bool }}"
 | 
			
		||||
#    nvidia:             "{{ lookup('ini', 'nvidia             file={{mnr_file}} default=false') | bool }}"
 | 
			
		||||
#    xmr_stak_cpu:       "{{ lookup('ini', 'xmr_stak_cpu       file={{mnr_file}} default=false') | bool }}"
 | 
			
		||||
#
 | 
			
		||||
#- name: General | Account Management | Provisioning Configuration | Miner | List
 | 
			
		||||
#  set_fact:
 | 
			
		||||
@@ -349,14 +357,14 @@
 | 
			
		||||
 | 
			
		||||
- name: General | Account Management | Provisioning Configuration | Server | Load
 | 
			
		||||
  set_fact:
 | 
			
		||||
    server:     "{{ lookup('ini', 'enable     file={{srv_file}} default=false') }}"
 | 
			
		||||
    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') }}"
 | 
			
		||||
    grafana:    "{{ lookup('ini', 'grafana    file={{srv_file}} default=false') }}"
 | 
			
		||||
    influxdb1:  "{{ lookup('ini', 'influxdb1  file={{srv_file}} default=false') }}"
 | 
			
		||||
    influxdb2:  "{{ lookup('ini', 'influxdb2  file={{srv_file}} default=false') }}"
 | 
			
		||||
    certbot:    "{{ lookup('ini', 'certbot    file={{srv_file}} default=false') }}"
 | 
			
		||||
    hugo:       "{{ lookup('ini', 'hugo       file={{srv_file}} default=false') }}"
 | 
			
		||||
    onlyoffice: "{{ lookup('ini', 'onlyoffice file={{srv_file}} default=false') | bool }}"
 | 
			
		||||
    grafana:    "{{ lookup('ini', 'grafana    file={{srv_file}} default=false') | bool }}"
 | 
			
		||||
    influxdb1:  "{{ lookup('ini', 'influxdb1  file={{srv_file}} default=false') | bool }}"
 | 
			
		||||
    influxdb2:  "{{ lookup('ini', 'influxdb2  file={{srv_file}} default=false') | bool }}"
 | 
			
		||||
    certbot:    "{{ lookup('ini', 'certbot    file={{srv_file}} default=false') | bool }}"
 | 
			
		||||
    hugo:       "{{ lookup('ini', 'hugo       file={{srv_file}} default=false') | bool }}"
 | 
			
		||||
 | 
			
		||||
- name: General | Account Management | Provisioning Configuration | Server | List
 | 
			
		||||
  set_fact:
 | 
			
		||||
 
 | 
			
		||||
@@ -283,6 +283,19 @@
 | 
			
		||||
      alias edit-config-wrk="sudo $EDITOR {{ wrk_file }}"
 | 
			
		||||
      alias edit-config-mnr="sudo $EDITOR {{ mnr_file }}"
 | 
			
		||||
      alias edit-config-srv="sudo $EDITOR {{ srv_file }}"
 | 
			
		||||
    function_clean_trashed: |
 | 
			
		||||
      function clean-trashed {
 | 
			
		||||
        dir="$1"
 | 
			
		||||
        if [[ -z $dir ]]; then
 | 
			
		||||
          dir="./"
 | 
			
		||||
        fi
 | 
			
		||||
        cd $dir
 | 
			
		||||
        dir="`pwd`"
 | 
			
		||||
        echo "Removing '.trashed*' files in '$dir'."
 | 
			
		||||
        find "$dir" -name ".trashed*" -exec du -h {} \; -delete | sort -h
 | 
			
		||||
      }
 | 
			
		||||
      alias trashed-cleanup="clean-trashed"
 | 
			
		||||
      alias trashed-clean="clean-trashed"
 | 
			
		||||
    function_check_trash: |
 | 
			
		||||
      function check-trash() {
 | 
			
		||||
        unset OPTIND
 | 
			
		||||
@@ -378,6 +391,9 @@
 | 
			
		||||
        fi
 | 
			
		||||
        echo "Checking but not cleaning /var/mail..."
 | 
			
		||||
        du -ha /var/mail | sort -h
 | 
			
		||||
        if [[ $clean == "Y" ]]; then
 | 
			
		||||
          clean-trashed "~/"
 | 
			
		||||
        fi
 | 
			
		||||
        return 0
 | 
			
		||||
      }
 | 
			
		||||
      alias check_trash="check-trash"
 | 
			
		||||
@@ -386,18 +402,20 @@
 | 
			
		||||
    alias_trash_clean: alias trash-clean='trash-check --clean'
 | 
			
		||||
    alias_clean_dir: |
 | 
			
		||||
      function clean-dir() {
 | 
			
		||||
        sudo du -hs
 | 
			
		||||
        clean_dir="`date '+%Y%m%d_%H%M%S'`_CLEANED"
 | 
			
		||||
        trash_dir="$HOME/TRASH/$clean_dir"
 | 
			
		||||
        curr_dir="`pwd`"
 | 
			
		||||
        mkdir -pv "$trash_dir"
 | 
			
		||||
        echo "$curr_dir is being cleaned at `date`." | tee "$trash_dir"/INFO.txt
 | 
			
		||||
        mv -v ..?* .[!.]* * "$trash_dir"/ | tee -a "$trash_dir"/INFO.txt
 | 
			
		||||
        sudo du -hs
 | 
			
		||||
      }
 | 
			
		||||
    function_clean: |
 | 
			
		||||
      function clean() {
 | 
			
		||||
        sudo du -hs
 | 
			
		||||
        clean-dir
 | 
			
		||||
        sudo du -hs
 | 
			
		||||
        clean-trash
 | 
			
		||||
        clean-code
 | 
			
		||||
        clean-backups
 | 
			
		||||
      }
 | 
			
		||||
    function_flatpak_usage: |
 | 
			
		||||
      function flatpak-usage() {
 | 
			
		||||
@@ -409,6 +427,10 @@
 | 
			
		||||
          fi
 | 
			
		||||
        done | sort -n
 | 
			
		||||
      }
 | 
			
		||||
      alias flatpak-info="flatpak-usage"
 | 
			
		||||
      alias flatpak-space="flatpak-usage"
 | 
			
		||||
      alias flatpak-size="flatpak-usage"
 | 
			
		||||
      alias flatpak-sizes="flatpak-usage"
 | 
			
		||||
    function_flatpak_purge: |
 | 
			
		||||
      function flatpak-purge() {
 | 
			
		||||
        flatpak remove --all --delete-data &&
 | 
			
		||||
@@ -436,6 +458,7 @@
 | 
			
		||||
        docker compose up -d
 | 
			
		||||
 | 
			
		||||
        if [[ -n "$1" ]]; then
 | 
			
		||||
          echo "Following logs of '$1':"
 | 
			
		||||
          docker logs -f $1
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
@@ -458,6 +481,7 @@
 | 
			
		||||
        docker compose up -d
 | 
			
		||||
 | 
			
		||||
        if [[ -n "$1" ]]; then
 | 
			
		||||
          echo "Following logs of '$1':"
 | 
			
		||||
          docker logs -f $1
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
@@ -524,6 +548,7 @@
 | 
			
		||||
        docker compose up -d
 | 
			
		||||
 | 
			
		||||
        if [[ -n "$1" ]]; then
 | 
			
		||||
          echo "Following logs of '$1':"
 | 
			
		||||
          docker logs -f $1
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
@@ -539,6 +564,16 @@
 | 
			
		||||
          echo -e "\n*** `basename $project` ***"
 | 
			
		||||
          cd $project
 | 
			
		||||
          if [[ -d .git ]]; then
 | 
			
		||||
            git ls-remote --exit-code --heads origin dev
 | 
			
		||||
            dev_exists="$?"
 | 
			
		||||
            if [[ "$dev_exists" == 0 ]]; then
 | 
			
		||||
              git switch dev
 | 
			
		||||
            elif [[ "$dev_exists" == 2 ]]; then
 | 
			
		||||
              git switch main
 | 
			
		||||
            else
 | 
			
		||||
              echo "ERROR: Unknown status for dev_exists, '$dev_exists'."
 | 
			
		||||
              continue
 | 
			
		||||
            fi
 | 
			
		||||
            git pull
 | 
			
		||||
            git push
 | 
			
		||||
          else
 | 
			
		||||
@@ -567,14 +602,27 @@
 | 
			
		||||
          env-ansible dev
 | 
			
		||||
          env-docker dev
 | 
			
		||||
          env-termux dev
 | 
			
		||||
          env-obtainium-hyperling dev
 | 
			
		||||
          nodejs-website dev
 | 
			
		||||
          ebook-health-protocol dev
 | 
			
		||||
          ebook-freedom-flyer dev
 | 
			
		||||
          ebook-technology-alternatives dev
 | 
			
		||||
          ebook-narcissism-healing dev
 | 
			
		||||
          ebook-forest-howto dev
 | 
			
		||||
          ebook-template main
 | 
			
		||||
          flutter-expense-tracker dev
 | 
			
		||||
          flutter-social-traveler-app dev
 | 
			
		||||
          nodejs-social-traveler-server dev
 | 
			
		||||
          misc-spare-change main
 | 
			
		||||
          flutter-buddy-website dev
 | 
			
		||||
          flutter-sunset-alarm dev
 | 
			
		||||
          android-infinite-timer dev
 | 
			
		||||
          android-carb-up dev
 | 
			
		||||
          android-hypergames dev
 | 
			
		||||
          android-45-minute-rule dev
 | 
			
		||||
          android-tictactoe dev
 | 
			
		||||
          hugo-jackanope dev
 | 
			
		||||
          hugo-website dev
 | 
			
		||||
      EOF
 | 
			
		||||
      }
 | 
			
		||||
      function code-reseed {
 | 
			
		||||
@@ -667,6 +715,9 @@
 | 
			
		||||
        done
 | 
			
		||||
        cd
 | 
			
		||||
 | 
			
		||||
        echo -e "******* PDFs *******"
 | 
			
		||||
        find ~/Code/ebook-* -name "*.pdf" -exec du -h {} \; -delete | sort -h
 | 
			
		||||
 | 
			
		||||
        echo -e "\n*** Done! ***"
 | 
			
		||||
      }
 | 
			
		||||
      alias code-clean="clean-code"
 | 
			
		||||
@@ -722,6 +773,246 @@
 | 
			
		||||
    alias_permission_commands: |
 | 
			
		||||
      alias chown='chown -c'
 | 
			
		||||
      alias chmod='chmod -c'
 | 
			
		||||
    alias_iftop: |
 | 
			
		||||
      alias iftop='sudo iftop'
 | 
			
		||||
    alias_ls: |
 | 
			
		||||
      alias l='ls'
 | 
			
		||||
      alias ll='ls -alh'
 | 
			
		||||
      alias lh='ls -ash'
 | 
			
		||||
    alias_progs: |
 | 
			
		||||
      alias progs='ps -ef'
 | 
			
		||||
    alias_nethogs: |
 | 
			
		||||
      alias nethogs='sudo nethogs'
 | 
			
		||||
    alias_ansible_facts: |
 | 
			
		||||
      alias ansible-facts='ansible localhost -m setup --connection=local'
 | 
			
		||||
    function_now: |
 | 
			
		||||
      function now {
 | 
			
		||||
        date "+%Y%m%d-%H%M%S"
 | 
			
		||||
      }
 | 
			
		||||
      function today {
 | 
			
		||||
        date "+%Y%m%d"
 | 
			
		||||
      }
 | 
			
		||||
    function_backup: |
 | 
			
		||||
      export BACKUP_DIR="/srv/backup"
 | 
			
		||||
      function backup {
 | 
			
		||||
        /usr/local/bin/backup_system.sh
 | 
			
		||||
      }
 | 
			
		||||
      alias backup-system="backup"
 | 
			
		||||
      alias system-backup="backup"
 | 
			
		||||
      alias check-backups="ll $BACKUP_DIR"
 | 
			
		||||
      function clean-backup {
 | 
			
		||||
        sh -c "rm -rfv $BACKUP_DIR/*"
 | 
			
		||||
      }
 | 
			
		||||
      alias clean-backups="clean-backup"
 | 
			
		||||
    function_pull_prod_backups: |
 | 
			
		||||
      export DOCKER="Docker"
 | 
			
		||||
      export SYSTEM="System"
 | 
			
		||||
      function pull_prod_backup {
 | 
			
		||||
        if [[ -z "$1" || ("$1" != "$DOCKER" && "$1" != "$SYSTEM") ]]; then
 | 
			
		||||
          echo "ERROR: Parameter 1 not correct, expecting '$DOCKER' or '$SYSTEM'."
 | 
			
		||||
          return 1
 | 
			
		||||
        fi
 | 
			
		||||
        backup_type="$1"
 | 
			
		||||
        echo "Looking for '*${backup_type}*.zip'"
 | 
			
		||||
        ls -lh *${backup_type}*.zip 2>/dev/null
 | 
			
		||||
        status="$?"
 | 
			
		||||
        if [[ "$status" == "0" ]]; then
 | 
			
		||||
          echo "File already downloaded, skipping."
 | 
			
		||||
          return 0
 | 
			
		||||
        else
 | 
			
		||||
          echo "File still needed, downloading to local tmp/."
 | 
			
		||||
        fi
 | 
			
		||||
        mkdir -pv tmp
 | 
			
		||||
        scp -P {{ prod_port }} \
 | 
			
		||||
          {{ prod_user }}@{{ prod_host }}:"$BACKUP_DIR/*${backup_type}*.zip" \
 | 
			
		||||
          tmp/
 | 
			
		||||
        if [[ "$?" == "0" ]]; then
 | 
			
		||||
          echo "Succeeded!"
 | 
			
		||||
          mv -v tmp/*.zip ./
 | 
			
		||||
          rmdir -v tmp
 | 
			
		||||
        else
 | 
			
		||||
          echo "Failed!"
 | 
			
		||||
          mv tmp ~/TRASH/"tmp_`now`"
 | 
			
		||||
        fi
 | 
			
		||||
      }
 | 
			
		||||
      function pull_prod_backups {
 | 
			
		||||
        dir="ProductionBackups-Pulled`today`"
 | 
			
		||||
        mkdir -pv "$dir"
 | 
			
		||||
        cd "$dir"
 | 
			
		||||
        pull_prod_backup "$DOCKER"
 | 
			
		||||
        pull_prod_backup "$SYSTEM"
 | 
			
		||||
        du -h *.zip | sort -h
 | 
			
		||||
        status="$?"
 | 
			
		||||
        cd ..
 | 
			
		||||
        if [[ "$status" != 0 ]]; then
 | 
			
		||||
          echo "Failed to find zip files, removing folder."
 | 
			
		||||
          rmdir -v "$dir"
 | 
			
		||||
          return 1
 | 
			
		||||
        fi
 | 
			
		||||
        echo "Done!"
 | 
			
		||||
      }
 | 
			
		||||
      alias pull-prod-backups="pull_prod_backups"
 | 
			
		||||
      alias pull-backups="pull_prod_backups"
 | 
			
		||||
      alias prod-backups="pull_prod_backups"
 | 
			
		||||
      alias prod-backup="pull_prod_backups"
 | 
			
		||||
      alias pull-prod="pull_prod_backups"
 | 
			
		||||
      alias prod-pull="pull_prod_backups"
 | 
			
		||||
    function_log: |
 | 
			
		||||
      function log {
 | 
			
		||||
        echo -e "$1"
 | 
			
		||||
      }
 | 
			
		||||
      function blog {
 | 
			
		||||
        echo -e "\n\n$1\n\n"
 | 
			
		||||
      }
 | 
			
		||||
    function_debian_upgrade: |
 | 
			
		||||
      function debian-upgrade {
 | 
			
		||||
        typeset -l OLD NEW
 | 
			
		||||
        OLD="$1"
 | 
			
		||||
        NEW="$2"
 | 
			
		||||
        blog "*** Upgrading from '$OLD' to '$NEW' ***"
 | 
			
		||||
        if [[ -z "$OLD" || -z "$NEW" ]]; then
 | 
			
		||||
          echo -n "ERROR: Please pass the OLD and NEW version names"
 | 
			
		||||
          echo ", such as 'debian-upgrade bookworm trixie'. "
 | 
			
		||||
          return 1
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        blog "*** Running 'backup' before starting upgrade. ***"
 | 
			
		||||
        sleep 1
 | 
			
		||||
 | 
			
		||||
        backup
 | 
			
		||||
 | 
			
		||||
        blog "*** Listing the current apt listing for '$OLD' ***"
 | 
			
		||||
        sudo grep "$OLD" /etc/apt/sources.list /etc/apt/sources.list.d/*
 | 
			
		||||
 | 
			
		||||
        echo -en "\nAre these the entries you'd like changed to '$NEW'? (y/N) "
 | 
			
		||||
        typeset -u confirm_change
 | 
			
		||||
        read confirm_change
 | 
			
		||||
 | 
			
		||||
        if [[ -z "$confirm_change" || "$confirm_change" == "N"* ]]; then
 | 
			
		||||
          blog "*** Aborting upgrade, change rejected. ***"
 | 
			
		||||
          return 1
 | 
			
		||||
        fi
 | 
			
		||||
        unset confirm_change
 | 
			
		||||
 | 
			
		||||
        blog "*** Continuing with upgrade. ***"
 | 
			
		||||
        sudo sed -i "s/$OLD/$NEW/g" /etc/apt/sources.list
 | 
			
		||||
        find /etc/apt/sources.list.d/ -name "*.list" \
 | 
			
		||||
          -exec sudo sed -i "s/$OLD/$NEW/g" {} \;
 | 
			
		||||
        find /etc/apt/sources.list.d/ -name "*.sources" \
 | 
			
		||||
          -exec sudo sed -i "s/$OLD/$NEW/g" {} \;
 | 
			
		||||
 | 
			
		||||
        sudo grep $OLD /etc/apt/sources.list /etc/apt/sources.list.d/*.{list,sources}
 | 
			
		||||
        sudo grep $NEW /etc/apt/sources.list /etc/apt/sources.list.d/*.{list,sources}
 | 
			
		||||
 | 
			
		||||
        echo -en "\nDo the source files look correct? (y/N) "
 | 
			
		||||
        typeset -u confirm_correct
 | 
			
		||||
        read confirm_correct
 | 
			
		||||
 | 
			
		||||
        if [[ -z "$confirm_correct" || "$confirm_correct" == "N"* ]]; then
 | 
			
		||||
          blog "*** Aborting upgrade, confirmation rejected. ***"
 | 
			
		||||
          return 1
 | 
			
		||||
        fi
 | 
			
		||||
        unset confirm_correct
 | 
			
		||||
 | 
			
		||||
        blog "*** Starting the upgrade. ***"
 | 
			
		||||
        sleep 1
 | 
			
		||||
 | 
			
		||||
        sudo apt update
 | 
			
		||||
        sudo apt upgrade --without-new-pkgs
 | 
			
		||||
 | 
			
		||||
        blog -e "*** Upgrades complete, now add new packages. ***"
 | 
			
		||||
        sleep 1
 | 
			
		||||
        sudo apt full-upgrade
 | 
			
		||||
 | 
			
		||||
        blog "*** New packages complete, clean apt files. ***"
 | 
			
		||||
        sleep 1
 | 
			
		||||
        sudo apt autoremove --purge
 | 
			
		||||
        sudo apt clean
 | 
			
		||||
 | 
			
		||||
        blog "*** All done! '$OLD' is now '$NEW'. Please reboot. ***"
 | 
			
		||||
        sleep 1
 | 
			
		||||
        unset OLD NEW
 | 
			
		||||
      }
 | 
			
		||||
      alias upgrade-debian="debian-upgrade"
 | 
			
		||||
    function_ebook_convert: |
 | 
			
		||||
      # Regenerate all eBook projects at once.
 | 
			
		||||
      function ebook-convert {
 | 
			
		||||
        find ~/Code/ebook-* -name "*.pdf" -print -delete
 | 
			
		||||
        find ~/Code/ebook-* -name convert.sh -print -exec bash "{}" \;
 | 
			
		||||
      }
 | 
			
		||||
      alias ebooks="ebook-convert"
 | 
			
		||||
      alias convert="ebook-convert"
 | 
			
		||||
    alias_sudo: |
 | 
			
		||||
      # Allows for alias expansions when using sudo, such as doing "sudo ll".
 | 
			
		||||
      alias sudo="sudo "
 | 
			
		||||
    function_load_branch: |
 | 
			
		||||
      # Change a branch to point at another.
 | 
			
		||||
      function load-branch {
 | 
			
		||||
        rcvr="$1" # branch which we want to modify
 | 
			
		||||
        base="$2" # branch with the changes we want
 | 
			
		||||
 | 
			
		||||
        if [[ "$rcvr" == "main" ]]; then
 | 
			
		||||
          echo "*** ERROR: Are you nuts, fool!? Not main! Do it manually! ***"
 | 
			
		||||
          exit 1
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        if [[ -z "$base" ]]; then
 | 
			
		||||
          if [[ "$rcvr" == "prod" ]]; then
 | 
			
		||||
            base="stage"
 | 
			
		||||
          elif [[ "$rcvr" == "stage" ]]; then
 | 
			
		||||
            base="dev"
 | 
			
		||||
          else
 | 
			
		||||
            echo "* Unsure which branch to use for '$rcvr'. Please specify."
 | 
			
		||||
            exit 1
 | 
			
		||||
          fi
 | 
			
		||||
          echo "* Base was not specified, using '$base' for '$rcvr'."
 | 
			
		||||
        else
 | 
			
		||||
          echo "* Requested pointing '$rcvr' branch to '$base'."
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        echo -e "\n* Ensuring we are on base branch '$base'." &&
 | 
			
		||||
        git switch "$base" &&
 | 
			
		||||
        echo -e "\n* Changing pointer for '$rcvr' to '$base'." &&
 | 
			
		||||
        git branch -f "$rcvr" "$base" &&
 | 
			
		||||
        #echo -e "\n* Switching to branch '$rcvr'." &&
 | 
			
		||||
        #git switch "$rcvr" &&
 | 
			
		||||
        echo -e "\n* Forcing push on branch '$rcvr'." &&
 | 
			
		||||
        git push --force --set-upstream origin "$rcvr" &&
 | 
			
		||||
        echo -e "\n* Done! Displaying list of remote branches." &&
 | 
			
		||||
        git ls-remote --heads | sort
 | 
			
		||||
 | 
			
		||||
        if [[ "$base" != "dev" ]]; then
 | 
			
		||||
          echo -e "\n* Checking if a dev branch exists."
 | 
			
		||||
          git ls-remote --exit-code --heads origin dev
 | 
			
		||||
          dev_exists="$?"
 | 
			
		||||
          if [[ "$dev_exists" == 0 ]]; then
 | 
			
		||||
            echo -e "\n* Switching back to dev."
 | 
			
		||||
            git switch dev
 | 
			
		||||
          elif [[ "$dev_exists" == 2 ]]; then
 | 
			
		||||
            echo -e "\n* Switching back to main."
 | 
			
		||||
            git switch main
 | 
			
		||||
          else
 | 
			
		||||
            echo "*** ERROR: Unknown status for dev_exists, '$dev_exists'. ***"
 | 
			
		||||
          fi
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        echo -e "\n* Verifying which branch we're on."
 | 
			
		||||
        git branch
 | 
			
		||||
      }
 | 
			
		||||
      alias load-prod="load-branch prod"
 | 
			
		||||
      alias load-stage="load-branch stage"
 | 
			
		||||
      alias rollback-prod="load-branch prod main"
 | 
			
		||||
      alias rollback-stage="load-branch stage prod"
 | 
			
		||||
      alias rollback-dev="load-branch dev stage"
 | 
			
		||||
      alias reset-prod="load-branch prod main"
 | 
			
		||||
      alias reset-stage="load-branch stage main"
 | 
			
		||||
      alias reset-dev="load-branch dev main"
 | 
			
		||||
    alias_reload_bash: |
 | 
			
		||||
      alias reload-bash="source ~/.bashrc"
 | 
			
		||||
      alias bash-reload="reload-bash"
 | 
			
		||||
      alias shell-reload="reload-bash"
 | 
			
		||||
      alias reload-shell="reload-bash"
 | 
			
		||||
      alias reload="reload-bash"
 | 
			
		||||
 | 
			
		||||
- name: General | Account Management | Users | Files | Common Variable
 | 
			
		||||
  set_fact:
 | 
			
		||||
@@ -759,6 +1050,7 @@
 | 
			
		||||
      {{ metasploit_aliases }}
 | 
			
		||||
      {{ show_config_aliases }}
 | 
			
		||||
      {{ edit_config_aliases }}
 | 
			
		||||
      {{ function_clean_trashed }}
 | 
			
		||||
      {{ function_check_trash }}
 | 
			
		||||
      {{ function_clean }}
 | 
			
		||||
      {{ function_flatpak_usage }}
 | 
			
		||||
@@ -785,6 +1077,20 @@
 | 
			
		||||
      {{ function_update_sdks }}
 | 
			
		||||
      {{ function_ansible_vars }}
 | 
			
		||||
      {{ alias_permission_commands }}
 | 
			
		||||
      {{ alias_iftop }}
 | 
			
		||||
      {{ alias_ls }}
 | 
			
		||||
      {{ alias_progs }}
 | 
			
		||||
      {{ alias_nethogs }}
 | 
			
		||||
      {{ alias_ansible_facts }}
 | 
			
		||||
      {{ function_now }}
 | 
			
		||||
      {{ function_backup }}
 | 
			
		||||
      {{ function_pull_prod_backups }}
 | 
			
		||||
      {{ function_log }}
 | 
			
		||||
      {{ function_debian_upgrade }}
 | 
			
		||||
      {{ function_ebook_convert }}
 | 
			
		||||
      {{ alias_sudo }}
 | 
			
		||||
      {{ function_load_branch }}
 | 
			
		||||
      {{ alias_reload_bash }}
 | 
			
		||||
 | 
			
		||||
- name: General | Account Management | Users | Files | .bashrc
 | 
			
		||||
  blockinfile:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,18 @@
 | 
			
		||||
---
 | 
			
		||||
# Jobs relating to the ansible user.
 | 
			
		||||
 | 
			
		||||
# $RANDOM is anywhere from 0 to 32767 in BASH. This would be up to ~9 hours.
 | 
			
		||||
# $RANDOM /  10 can be up to about 3200 seconds, or ~55 minutes.
 | 
			
		||||
# $RANDOM /  20 can be up to about 1600 seconds, or ~27 minutes.
 | 
			
		||||
# $RANDOM /  50 can be up to about  650 seconds, or ~11 minutes.
 | 
			
		||||
# $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 | Create Subscriber Job
 | 
			
		||||
  cron:
 | 
			
		||||
    user: ansible
 | 
			
		||||
    name: "Ansible Sync"
 | 
			
		||||
    minute: "*/30"
 | 
			
		||||
    job: "sudo {{ ansible_pull_exec.stdout }} -o -U {{ git_repo_http }} --checkout {{ branch }}"
 | 
			
		||||
    job: "bash -c 'sleep $(( $RANDOM / 20 )); sudo {{ ansible_pull_exec.stdout }} -v -o -U {{ git_repo_http }} --checkout {{ branch }}'"
 | 
			
		||||
    state: present
 | 
			
		||||
    disabled: "{{ 'yes' if no_telem else 'no' }}"
 | 
			
		||||
 | 
			
		||||
@@ -14,7 +20,7 @@
 | 
			
		||||
  cron:
 | 
			
		||||
    user: ansible
 | 
			
		||||
    name: "Ansible Weekly Forced Sync"
 | 
			
		||||
    special_time: weekly
 | 
			
		||||
    job: "{{ user_root.home }}/bin/scm.sh"
 | 
			
		||||
    special_time: daily
 | 
			
		||||
    job: "bash -c 'sleep $(( $RANDOM /  1 )); sudo {{ ansible_pull_exec.stdout }} -v    -U {{ git_repo_http }} --checkout {{ branch }}'"
 | 
			
		||||
    state: present
 | 
			
		||||
    disabled: "{{ 'yes' if no_telem else 'no' }}"
 | 
			
		||||
 
 | 
			
		||||
@@ -6,13 +6,22 @@
 | 
			
		||||
    metasploit_installer: msfinstall
 | 
			
		||||
  when: ansible_system in ("Linux", "Darwin")
 | 
			
		||||
 | 
			
		||||
- name: General | Software | Metasploit | Refresh Apt Files
 | 
			
		||||
  shell: "{{ item }}"
 | 
			
		||||
  loop:
 | 
			
		||||
    - "mkdir -p /tmp/apt/"
 | 
			
		||||
    - "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")
 | 
			
		||||
  ignore_errors: true
 | 
			
		||||
 | 
			
		||||
- name: General | Software | Metasploit | Install
 | 
			
		||||
  shell: "{{ item }}"
 | 
			
		||||
  loop:
 | 
			
		||||
    - "mv -fv /usr/share/keyrings/metasploit-framework.gpg /usr/share/keyrings/metasploit-framework.gpg.old"
 | 
			
		||||
    - "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 }}"
 | 
			
		||||
    - "{{ global_bin }}/{{ metasploit_installer }}"
 | 
			
		||||
    - yes y | "{{ global_bin }}/{{ metasploit_installer }}"
 | 
			
		||||
  when: ansible_system in ("Linux", "Darwin")
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
    - bash
 | 
			
		||||
    - sudo
 | 
			
		||||
    - nmap
 | 
			
		||||
    - neofetch
 | 
			
		||||
    - "{{ neofetch }}"
 | 
			
		||||
    - "{{ sshfs }}"
 | 
			
		||||
    - "{{ locate }}"
 | 
			
		||||
    - zsh
 | 
			
		||||
@@ -56,6 +56,10 @@
 | 
			
		||||
    - "{{ cron }}"
 | 
			
		||||
    - "{{ encfs }}"
 | 
			
		||||
    - rsync
 | 
			
		||||
    - "{{ iftop }}"
 | 
			
		||||
    - "{{ nethogs }}"
 | 
			
		||||
    - "{{ ntp_server }}"
 | 
			
		||||
    - "{{ dig }}"
 | 
			
		||||
    state: present
 | 
			
		||||
 | 
			
		||||
- name: General | Software | Packages | Install Software (DEV)
 | 
			
		||||
@@ -138,14 +142,6 @@
 | 
			
		||||
  when: ansible_distribution != "Ubuntu"
 | 
			
		||||
  ignore_errors: yes
 | 
			
		||||
 | 
			
		||||
- name: General | Software | Packages | GS Connect (KDE Connect, Android Tool)
 | 
			
		||||
  package:
 | 
			
		||||
    name:
 | 
			
		||||
    - gnome-shell-extension-gsconnect
 | 
			
		||||
    state: present
 | 
			
		||||
  when: ansible_distribution in ("Debian")
 | 
			
		||||
  ignore_errors: yes
 | 
			
		||||
 | 
			
		||||
- name: General | Software | Packages | Other Debian Packages
 | 
			
		||||
  package:
 | 
			
		||||
    name:
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,11 @@
 | 
			
		||||
    pattern: "{{ crond_pattern }}"
 | 
			
		||||
    state: started
 | 
			
		||||
    enabled: yes
 | 
			
		||||
  when: ansible_virtualization_type != 'docker'
 | 
			
		||||
  register: cron_status
 | 
			
		||||
  until: cron_status.state == "started"
 | 
			
		||||
  retries: 3
 | 
			
		||||
  delay: 3
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## CUPS ##
 | 
			
		||||
@@ -76,6 +81,11 @@
 | 
			
		||||
    pattern: "{{ sshd_pattern }}"
 | 
			
		||||
    state: reloaded
 | 
			
		||||
    enabled: yes
 | 
			
		||||
  when: ansible_virtualization_type != 'docker'
 | 
			
		||||
  register: sshd_status
 | 
			
		||||
  until: sshd_status.state == "started"
 | 
			
		||||
  retries: 3
 | 
			
		||||
  delay: 3
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## JournalCTL ##
 | 
			
		||||
@@ -96,3 +106,24 @@
 | 
			
		||||
    state: stopped
 | 
			
		||||
    enabled: no
 | 
			
		||||
  ignore_errors: yes
 | 
			
		||||
 | 
			
		||||
## NTP ##
 | 
			
		||||
 | 
			
		||||
- name: General | Software | Services | NTP | Enable
 | 
			
		||||
  service:
 | 
			
		||||
    name: "{{ ntp_server }}"
 | 
			
		||||
    pattern: "{{ ntp_server }}"
 | 
			
		||||
    state: started
 | 
			
		||||
    enabled: yes
 | 
			
		||||
  when: ansible_virtualization_type != 'docker'
 | 
			
		||||
  register: ntp_status
 | 
			
		||||
  until: ntp_status.state == "started"
 | 
			
		||||
  retries: 3
 | 
			
		||||
  delay: 3
 | 
			
		||||
 | 
			
		||||
## Timezone ##
 | 
			
		||||
 | 
			
		||||
# TBD/TODO:
 | 
			
		||||
# 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
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,9 @@
 | 
			
		||||
  - name: General | Software | Swap | Check For Swapfile
 | 
			
		||||
    stat:
 | 
			
		||||
      path: "{{ swap_file }}"
 | 
			
		||||
      get_attributes: false
 | 
			
		||||
      get_checksum: false
 | 
			
		||||
      get_mime: false
 | 
			
		||||
    register: swap_check
 | 
			
		||||
 | 
			
		||||
  - name: General | Software | Swap | Install Block
 | 
			
		||||
 
 | 
			
		||||
@@ -13,8 +13,9 @@
 | 
			
		||||
  git:
 | 
			
		||||
    repo: https://github.com/CISOfy/lynis
 | 
			
		||||
    dest: "{{ lynis_install_dir }}"
 | 
			
		||||
    clone: yes
 | 
			
		||||
    force: yes
 | 
			
		||||
    clone: true
 | 
			
		||||
    force: true
 | 
			
		||||
    update: true
 | 
			
		||||
  ignore_errors: yes
 | 
			
		||||
 | 
			
		||||
- name: General | Tests | Lynis | Ensure Permissions (Looking at you Parrot OS!)
 | 
			
		||||
 
 | 
			
		||||
@@ -8,9 +8,9 @@
 | 
			
		||||
    amdgpu_cron_cmd: "{{ root_home.stdout }}/scm.sh"
 | 
			
		||||
 | 
			
		||||
- name: Miner | Driver | AMDGPU | Install Dependencies
 | 
			
		||||
  package: 
 | 
			
		||||
    name: 
 | 
			
		||||
      - dkms 
 | 
			
		||||
  package:
 | 
			
		||||
    name:
 | 
			
		||||
      - dkms
 | 
			
		||||
      - mesa-common-dev
 | 
			
		||||
      - clinfo
 | 
			
		||||
    state: present
 | 
			
		||||
@@ -62,16 +62,16 @@
 | 
			
		||||
 | 
			
		||||
## Step 1/3: Get Correct Kernel ##
 | 
			
		||||
- name: Miner | Driver | AMDGPU | Install Recommended GA Kernel
 | 
			
		||||
  shell: apt install --install-recommends linux-generic 
 | 
			
		||||
  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:
 | 
			
		||||
    name: 
 | 
			
		||||
      - linux-headers-5.4.0-65 
 | 
			
		||||
      - linux-headers-5.4.0-65-generic 
 | 
			
		||||
      - linux-headers-generic 
 | 
			
		||||
      - linux-image-generic 
 | 
			
		||||
    name:
 | 
			
		||||
      - linux-headers-5.4.0-65
 | 
			
		||||
      - linux-headers-5.4.0-65-generic
 | 
			
		||||
      - linux-headers-generic
 | 
			
		||||
      - linux-image-generic
 | 
			
		||||
      - linux-modules-extra-5.4.0-65-generic
 | 
			
		||||
    state: present
 | 
			
		||||
  when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed
 | 
			
		||||
@@ -121,10 +121,10 @@
 | 
			
		||||
  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 -y"
 | 
			
		||||
  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 
 | 
			
		||||
# This is to ensure we can test adding `apt install --install-recommends linux-generic` later
 | 
			
		||||
- name: Miner | Driver | AMDGPU | Boot Default Kernel
 | 
			
		||||
  lineinfile:
 | 
			
		||||
    path: /etc/default/grub
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,7 @@
 | 
			
		||||
    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 [2/3]
 | 
			
		||||
  set_fact:
 | 
			
		||||
@@ -29,23 +30,142 @@
 | 
			
		||||
    android_sdkmanager_temp: "{{ android_sdk_cmdline_temp }}/cmdline-tools/bin/sdkmanager"
 | 
			
		||||
    android_sdkmanager_final: "{{ android_sdk_cmdline_final }}/sdkmanager"
 | 
			
		||||
 | 
			
		||||
# Regarding images to download; the `default` is the smallest, then `playstore`.
 | 
			
		||||
# The `google_apis` images are significantly larger than the `playstore` option.
 | 
			
		||||
#
 | 
			
		||||
# This script was used to download and test the sizes:
 | 
			
		||||
#
 | 
			
		||||
### #!/bin/bash
 | 
			
		||||
###
 | 
			
		||||
### cd /home/ling/SDKs/Android/Sdk/cmdline-tools/latest/bin
 | 
			
		||||
###
 | 
			
		||||
### # Actually to be used
 | 
			
		||||
### echo "35 Play Store"
 | 
			
		||||
### ./sdkmanager --install "system-images;android-35;google_apis_playstore;x86_64"
 | 
			
		||||
### echo "36 Play Store"
 | 
			
		||||
### ./sdkmanager --install "system-images;android-36;google_apis_playstore;x86_64"
 | 
			
		||||
###
 | 
			
		||||
### # FORTESTING file size
 | 
			
		||||
### echo "35 AOSP"
 | 
			
		||||
### ./sdkmanager --install "system-images;android-35;default;x86_64"
 | 
			
		||||
### echo "36 APIs Only"
 | 
			
		||||
### ./sdkmanager --install "system-images;android-36;google_apis;x86_64"
 | 
			
		||||
### echo "35 APIs Only"
 | 
			
		||||
### ./sdkmanager --install "system-images;android-35;google_apis;x86_64"
 | 
			
		||||
###
 | 
			
		||||
### exit 0
 | 
			
		||||
#
 | 
			
		||||
# These were the results:
 | 
			
		||||
#
 | 
			
		||||
### ~/SDKs/Android/Sdk/system-images]$ du -had2 | sort -h
 | 
			
		||||
### 1.7G	./android-35/default
 | 
			
		||||
### 2.2G	./android-35/google_apis_playstore
 | 
			
		||||
### 2.3G	./android-36/google_apis_playstore
 | 
			
		||||
### 3.5G	./android-35/google_apis
 | 
			
		||||
### 4.3G	./android-36/google_apis
 | 
			
		||||
### 6.6G	./android-36
 | 
			
		||||
### 7.3G	./android-35
 | 
			
		||||
### 14G	.
 | 
			
		||||
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Facts [Downloads]
 | 
			
		||||
  set_fact:
 | 
			
		||||
    android_downloads_required:
 | 
			
		||||
      ### 36 ###
 | 
			
		||||
      - build-tools;36.0.0
 | 
			
		||||
      - platforms;android-36
 | 
			
		||||
      - sources;android-36
 | 
			
		||||
      # Images
 | 
			
		||||
      #- system-images;android-35;default;x86_64 # TODO: Switch once it exists.
 | 
			
		||||
      - system-images;android-36;google_apis_playstore;x86_64
 | 
			
		||||
      ### 16 ###
 | 
			
		||||
      - platforms;android-16
 | 
			
		||||
      - sources;android-16
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-16;default;x86
 | 
			
		||||
    android_downloads_additional:
 | 
			
		||||
      ### 35 ###
 | 
			
		||||
      - platforms;android-35
 | 
			
		||||
      - sources;android-35
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-35;default;x86_64
 | 
			
		||||
      ### 34 ###
 | 
			
		||||
      - platforms;android-34
 | 
			
		||||
      - sources;android-34
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-34;default;x86_64
 | 
			
		||||
      ### 33 ###
 | 
			
		||||
      - platforms;android-33
 | 
			
		||||
      - sources;android-33
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-33;default;x86_64
 | 
			
		||||
      ### 30 ###
 | 
			
		||||
      - platforms;android-30
 | 
			
		||||
      - sources;android-30
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-30;default;x86_64
 | 
			
		||||
      ### 27 ###
 | 
			
		||||
      - platforms;android-27
 | 
			
		||||
      - sources;android-27
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-27;default;x86_64
 | 
			
		||||
      ### 21 ###
 | 
			
		||||
      - platforms;android-21
 | 
			
		||||
      - sources;android-21
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-21;default;x86_64
 | 
			
		||||
    android_downloads_unused:
 | 
			
		||||
      ### 36 ###
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-36;google_apis;x86_64
 | 
			
		||||
      ### 35 ###
 | 
			
		||||
      - build-tools;35.0.0
 | 
			
		||||
      - build-tools;35.0.1
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-35;aosp_atd;x86_64 # ATD = Automated Test Device
 | 
			
		||||
      - system-images;android-35;google_apis;x86_64
 | 
			
		||||
      - system-images;android-35;google_apis_playstore;x86_64
 | 
			
		||||
      ### 34 ###
 | 
			
		||||
      - build-tools;34.0.0
 | 
			
		||||
      - platforms;android-34
 | 
			
		||||
      - sources;android-34
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-34;google_apis;x86_64
 | 
			
		||||
      - system-images;android-34;google_apis_playstore;x86_64
 | 
			
		||||
      ### 16 ###
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-16;google_apis;x86
 | 
			
		||||
      ### 15 ###
 | 
			
		||||
      - platforms;android-15
 | 
			
		||||
      - sources;android-15
 | 
			
		||||
      # Images
 | 
			
		||||
      - system-images;android-15;default;x86 # Not working in Android AVDs
 | 
			
		||||
 | 
			
		||||
## Checks ##
 | 
			
		||||
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Check SDK Manager Exists [1/2]
 | 
			
		||||
  stat:
 | 
			
		||||
    path: "{{ android_sdkmanager_temp }}"
 | 
			
		||||
    get_attributes: false
 | 
			
		||||
    get_checksum: false
 | 
			
		||||
    get_mime: false
 | 
			
		||||
  register: android_sdkmanager_temp_stat
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Check SDK Manager Exists [2/2]
 | 
			
		||||
  stat:
 | 
			
		||||
    path: "{{ android_sdkmanager_final }}"
 | 
			
		||||
    get_attributes: false
 | 
			
		||||
    get_checksum: false
 | 
			
		||||
    get_mime: false
 | 
			
		||||
  register: android_sdkmanager_final_stat
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Check Download Exists
 | 
			
		||||
  stat:
 | 
			
		||||
    path: "{{ android_download_file }}"
 | 
			
		||||
    get_attributes: false
 | 
			
		||||
    get_checksum: false
 | 
			
		||||
    get_mime: false
 | 
			
		||||
  register: android_download_stat
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 | 
			
		||||
@@ -111,7 +231,7 @@
 | 
			
		||||
## Configure Modules ##
 | 
			
		||||
 | 
			
		||||
# This can only be run once, otherwise cmdline-tools creates latest-* folders.
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Install Consistent Modules
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Install | Consistent Modules
 | 
			
		||||
  shell: "yes | {{ android_sdkmanager_temp }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}"
 | 
			
		||||
  loop:
 | 
			
		||||
    # Current
 | 
			
		||||
@@ -122,31 +242,47 @@
 | 
			
		||||
  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 Modules
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Install | Required Modules
 | 
			
		||||
  shell: "yes | {{ android_sdkmanager_final }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}"
 | 
			
		||||
  loop:
 | 
			
		||||
    # 34
 | 
			
		||||
    - build-tools;34.0.0
 | 
			
		||||
    - platforms;android-34
 | 
			
		||||
    - sources;android-34
 | 
			
		||||
    # 35
 | 
			
		||||
    - build-tools;35.0.0
 | 
			
		||||
    - build-tools;35.0.1
 | 
			
		||||
    - platforms;android-35
 | 
			
		||||
    - sources;android-35
 | 
			
		||||
    # Images
 | 
			
		||||
    #- system-images;android-35;default;x86_64
 | 
			
		||||
    #- system-images;android-35;aosp_atd;x86_64
 | 
			
		||||
    - system-images;android-35;google_apis_playstore;x86_64
 | 
			
		||||
  loop: "{{ android_downloads_required }}"
 | 
			
		||||
  become_user: "{{ user }}"
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 | 
			
		||||
# Add more versions for testing across all the important platforms.
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Install | Additional Modules
 | 
			
		||||
  shell: "yes | {{ android_sdkmanager_final }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}"
 | 
			
		||||
  loop: "{{ android_downloads_additional }}"
 | 
			
		||||
  become_user: "{{ user }}"
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
# Remove any versions which used to be part of this script and no longer used.
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Uninstall | Unused Modules
 | 
			
		||||
  shell: "yes | {{ android_sdkmanager_final }} --uninstall '{{ item }}' --sdk_root={{ android_sdk_location }}"
 | 
			
		||||
  loop: "{{ android_downloads_unused }}"
 | 
			
		||||
  become_user: "{{ user }}"
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 | 
			
		||||
# Report the currently installed packges.
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Report Modules
 | 
			
		||||
  shell: "{{ android_sdkmanager_final }} --list_installed --sdk_root={{ android_sdk_location }} > {{ android_report_file }}"
 | 
			
		||||
  become_user: "{{ user }}"
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 | 
			
		||||
## Flutter and Licenses ##
 | 
			
		||||
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Inform Flutter
 | 
			
		||||
  shell: "{{ flutter }} config --android-sdk={{ android_sdk_location }}"
 | 
			
		||||
  become_user: "{{ user }}"
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 | 
			
		||||
- name: Workstation | Linux | Software | Android | Licenses Agreements [1/2]
 | 
			
		||||
- name: Workstation | Linux | Software | Android | License Agreements [1/2]
 | 
			
		||||
  shell: "yes | {{ android_sdkmanager_final }} --licenses --sdk_root={{ android_sdk_location }}"
 | 
			
		||||
  become_user: "{{ user }}"
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 
 | 
			
		||||
@@ -34,18 +34,21 @@
 | 
			
		||||
- name: Workstation | Linux | Flatpak Distro | Flatpak | Arrays
 | 
			
		||||
  set_fact:
 | 
			
		||||
    flatpaks_generic:
 | 
			
		||||
      - { app: "org.libreoffice.LibreOffice", name: "office", extra: "" }
 | 
			
		||||
      - { app: "io.gitlab.librewolf-community", name: "librewolf", extra: "" }
 | 
			
		||||
      - { app: "org.signal.Signal", name: "signal", extra: "" }
 | 
			
		||||
      - { app: "org.mozilla.firefox", name: "firefox-flatpak", extra: "" }
 | 
			
		||||
      - { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" }
 | 
			
		||||
      - { app: "io.gitlab.librewolf-community", name: "librewolf", extra: "" }
 | 
			
		||||
      - { app: "chat.simplex.simplex", name: "simplex", extra: "" }
 | 
			
		||||
      - { app: "org.signal.Signal", name: "signal", extra: "" }
 | 
			
		||||
      - { app: "im.riot.Riot", name: "element", extra: "" }
 | 
			
		||||
      - { app: "org.telegram.desktop", name: "telegram", extra: "" }
 | 
			
		||||
      - { app: "org.gimp.GIMP", name: "gimp", extra: "" }
 | 
			
		||||
      - { app: "org.libreoffice.LibreOffice", name: "office", extra: "" }
 | 
			
		||||
      - { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" }
 | 
			
		||||
      - { app: "app.grayjay.Grayjay", name: "grayjay", extra: "" }
 | 
			
		||||
    flatpaks_coding:
 | 
			
		||||
      - { app: "com.vscodium.codium", name: "codium-flatpak", extra: "" }
 | 
			
		||||
      - { app: "com.google.AndroidStudio", name: "android-studio", extra: "" }
 | 
			
		||||
      - { app: "io.dbeaver.DBeaverCommunity", name: "dbeaver", extra: "" }
 | 
			
		||||
      - { app: "org.godotengine.Godot", name: "godot", extra: "" }
 | 
			
		||||
      - { app: "com.visualstudio.code-oss", name: "code", extra: "" }
 | 
			
		||||
      - { app: "com.visualstudio.code-oss", name: "code-flatpak", extra: "" }
 | 
			
		||||
    flatpaks_editing_video:
 | 
			
		||||
      - { app: "org.shotcut.Shotcut", name: "shotcut", extra: "" }
 | 
			
		||||
      - { app: "com.obsproject.Studio", name: "obs", extra: "" }
 | 
			
		||||
@@ -67,14 +70,13 @@
 | 
			
		||||
      - { app: "org.audacityteam.Audacity", name: "audacity", extra: "" } # Say "no thanks" to spyware.
 | 
			
		||||
      - { app: "com.discordapp.Discord", name: "discord", extra: "" } # Stopped working, just spins and says Starting.
 | 
			
		||||
      # 2022-11-20 No longer using any of these and they're taking up a lot of space. #
 | 
			
		||||
      - { app: "im.riot.Riot", name: "element", extra: "" }
 | 
			
		||||
      - { app: "org.telegram.desktop", name: "telegram", extra: "" }
 | 
			
		||||
      - { app: "com.jetbrains.PyCharm-Community", name: "pycharm", extra: "" }
 | 
			
		||||
      # End 2022-11-20 #
 | 
			
		||||
      - { app: "io.lbry.lbry-app", name: "lbry", extra: "dbus-launch" } # No longer supported, noticed 2023-09-01.
 | 
			
		||||
      - { app: "chat.delta.desktop", name: "deltachat", extra: "" } # No longer used, removed 2023-12-18.
 | 
			
		||||
      - { app: "org.gnome.Geary", name: "geary", extra: "" } # No longer used, removed 2024-12-15
 | 
			
		||||
      - { app: "org.rncbc.qsynth", name: "qsynth", extra: "" } # 2024-12-15, Not worth the setup, use LMMS or VMPK.
 | 
			
		||||
      - { app: "org.godotengine.Godot", name: "godot", extra: "" } # 20250831 Stopped playing with this months / years ago.
 | 
			
		||||
 | 
			
		||||
# Generic #
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    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/flutter.txt"
 | 
			
		||||
    flutter_report: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.sdk.flutter.txt"
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 | 
			
		||||
- name: Workstation | Linux | Software | Flutter | Facts [2/4]
 | 
			
		||||
@@ -36,12 +36,18 @@
 | 
			
		||||
- name: Workstation | Linux | Software | Flutter | Check SDK Exists
 | 
			
		||||
  stat:
 | 
			
		||||
    path: "{{ flutter_sdk_location }}"
 | 
			
		||||
    get_attributes: false
 | 
			
		||||
    get_checksum: false
 | 
			
		||||
    get_mime: false
 | 
			
		||||
  register: flutter_sdk_stat
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 | 
			
		||||
- name: Workstation | Linux | Software | Flutter | Check Download Exists
 | 
			
		||||
  stat:
 | 
			
		||||
    path: "{{ flutter_download_file }}"
 | 
			
		||||
    get_attributes: false
 | 
			
		||||
    get_checksum: false
 | 
			
		||||
    get_mime: false
 | 
			
		||||
  register: flutter_download_stat
 | 
			
		||||
  when: coding == true
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,9 @@
 | 
			
		||||
- name: Workstation | Linux | Software | Lutris | Check PPA
 | 
			
		||||
  stat:
 | 
			
		||||
    path: "{{ lutris_source_list }}"
 | 
			
		||||
    get_attributes: false
 | 
			
		||||
    get_checksum: false
 | 
			
		||||
    get_mime: false
 | 
			
		||||
  register: lutris_source_exists
 | 
			
		||||
  when: ansible_pkg_mgr == "apt"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,8 +39,17 @@
 | 
			
		||||
      - "{{ evolution }}"
 | 
			
		||||
      - "{{ evolution }}*"
 | 
			
		||||
      - gparted
 | 
			
		||||
      - hugo
 | 
			
		||||
    state: present
 | 
			
		||||
 | 
			
		||||
- name: Workstation | Linux | Software | Packages | GS Connect (KDE Connect, Android Tool)
 | 
			
		||||
  package:
 | 
			
		||||
    name:
 | 
			
		||||
    - gnome-shell-extension-gsconnect
 | 
			
		||||
    state: present
 | 
			
		||||
  when: ansible_distribution in ("Debian")
 | 
			
		||||
  ignore_errors: yes
 | 
			
		||||
 | 
			
		||||
# Remove Repo Software #
 | 
			
		||||
 | 
			
		||||
- name: Workstation | Linux | Software | Packages | Remove Applications
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,9 @@
 | 
			
		||||
- 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"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,13 +13,13 @@
 | 
			
		||||
                      , 'io.gitlab.librewolf-community.desktop', 'librewolf.desktop'
 | 
			
		||||
                      , 'org.mozilla.firefox.desktop', 'firefox.desktop'
 | 
			
		||||
                      , 'org.signal.Signal.desktop', 'signal-desktop.desktop'
 | 
			
		||||
                      , 'im.riot.Riot.desktop'
 | 
			
		||||
                      , 'org.telegram.desktop.desktop'
 | 
			
		||||
                      , 'com.discordapp.Discord.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'
 | 
			
		||||
@@ -39,6 +39,9 @@
 | 
			
		||||
#, '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 | GNOME | Facts (NixOS)
 | 
			
		||||
  set_fact:
 | 
			
		||||
@@ -217,7 +220,12 @@
 | 
			
		||||
      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 &&
 | 
			
		||||
 | 
			
		||||
      dconf write /org/gnome/settings-daemon/plugins/color/night-light-enabled true
 | 
			
		||||
      # 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
 | 
			
		||||
      fi
 | 
			
		||||
      dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-automatic false
 | 
			
		||||
      dconf write /org/gnome/settings-daemon/plugins/color/night-light-temperature "uint32 3170"
 | 
			
		||||
      dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-from 2.0
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user