Compare commits
	
		
			133 Commits
		
	
	
		
			d6cf29d51d
			...
			prod
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 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 | |||
| 42306e4287 | |||
| f3cb825981 | |||
| 1db8c0b7b0 | |||
| 116087928d | |||
| b6e820570f | |||
| 1f41651409 | |||
| 5f63ad1a59 | |||
| 7305e3a90c | |||
| 1e65b565cd | |||
| c828131bad | |||
| 3bca080de1 | |||
| e308beec07 | |||
| e155d36ab4 | |||
| 4bb075b747 | |||
| 204a1fbb16 | |||
| 9bb813ea78 | |||
| 066c8132e9 | |||
| 9e61af8aa4 | |||
| 69c1093289 | |||
| c7c21bc2f8 | |||
| 466d8b5de5 | |||
| 1eb41df822 | |||
| 152635e0b3 | |||
| 17b78cc361 | |||
| a4ff66a9c9 | |||
| ea4d4070a6 | |||
| 48777cf25c | |||
| e4d784b6c7 | 
| @@ -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 | ||||
| @@ -60,7 +60,8 @@ while getopts ":s:l:rfFdcAhx" opt; do | ||||
| 		F) super_force="Y" ;; | ||||
| 		d) delete="Y" ;; | ||||
| 		c) clean="Y" ;; | ||||
| 		A) recurse="Y" && search="find" && force="Y" && delete="Y" && clean="Y" ;; | ||||
| 		e) expand="Y" ;; | ||||
| 		A) recurse="Y" && search="find" && force="Y" && delete="Y" && expand="Y" ;; | ||||
| 		h) usage 0 ;; | ||||
| 		x) set -x ;; | ||||
| 		*) echo "ERROR: Option $OPTARG not recognized." >&2 && usage 1 ;; | ||||
| @@ -74,7 +75,7 @@ if [[ -n "$in_size" && "$size" != "$in_size" ]]; then | ||||
| 	usage 1 | ||||
| fi | ||||
|  | ||||
| convert_exe="`which convert`" | ||||
| convert_exe="`which convert` -strip" | ||||
| if [[ "$convert_exe" == "" ]]; then | ||||
| 	echo "ERROR: 'convert' command could not be found, " | ||||
| 	echo "please install 'imagemagick'." | ||||
| @@ -110,8 +111,7 @@ $search "$location" | sort | while read image; do | ||||
| 		continue | ||||
| 	fi | ||||
|  | ||||
|  | ||||
| 	new_image="${image//.$extension/}.$tag-$date_YYYYMMDD-$size.$extension" | ||||
| 	new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$size.$extension" | ||||
|  | ||||
| 	## Clean Filename ## | ||||
| 	# Prevent directory from having its name cleaned too. | ||||
| @@ -124,13 +124,31 @@ $search "$location" | sort | while read image; do | ||||
| 	new_image_clean="${new_image_clean//-/}" | ||||
| 	new_image_clean="${new_image_clean// /}" | ||||
|  | ||||
| 	# Add directory back to the full path. | ||||
| 	## Expanded Filename ## | ||||
| 	# Add back in the dashes so that the year, month, date, and time are exposed. | ||||
| 	TEMP="$new_image_clean" | ||||
| 	# Date Data | ||||
| 	new_image_exp="${TEMP:0:4}-${TEMP:4:2}-${TEMP:6:2}" | ||||
| 	# Time Data | ||||
| 	new_image_exp="${new_image_exp}_${TEMP:8:2}-${TEMP:10:2}-${TEMP:12:2}" | ||||
| 	# Remainder Data | ||||
| 	if [[ "${TEMP:14:1}" == "." ]]; then | ||||
| 		SEP="" | ||||
| 	else | ||||
| 		SEP="_" | ||||
| 	fi | ||||
| 	new_image_exp="${new_image_exp}${SEP}${TEMP:14}" | ||||
| 	unset TEMP SEP | ||||
|  | ||||
| 	# Add directory back to the full paths. | ||||
| 	new_image_clean="$image_dirname/$new_image_clean" | ||||
| 	new_image_exp="$image_dirname/$new_image_exp" | ||||
|  | ||||
| 	# Delete the existing shrunk image if we are forcing a new compression. | ||||
| 	if [[ -n "$force" && (-e "$new_image" || -e $new_image_clean) ]]; then | ||||
| 	if [[ -n "$force" && | ||||
| 			(-e "$new_image" || -e $new_image_clean || -e $new_image_exp ) ]]; then | ||||
| 		echo -n "  FORCE: " | ||||
| 		rm -v "$new_image" "$new_image_clean" 2>/dev/null | ||||
| 		rm -v "$new_image" "$new_image_clean" "$new_image_exp" 2>/dev/null | ||||
| 	fi | ||||
|  | ||||
| 	# Skip if a compressed image was already created today. | ||||
| @@ -139,10 +157,14 @@ $search "$location" | sort | while read image; do | ||||
| 		continue | ||||
| 	fi | ||||
|  | ||||
| 	# Whether or not to use the cleaned version or the normal version. | ||||
| 	# Whether or not to use the cleaned version. | ||||
| 	if [[ -n $clean ]]; then | ||||
| 		new_image="$new_image_clean" | ||||
| 	# Whether or not to use the expanded version. | ||||
| 	elif [[ -n $expand ]]; then | ||||
| 		new_image="$new_image_exp" | ||||
| 	fi | ||||
| 	# Otherwise uses the same name as before. | ||||
|  | ||||
| 	###### TBD Instead of this, only alter the file names, and set a dirname var? | ||||
| 	#### Create a new directory if the directory names were altered. | ||||
|   | ||||
| @@ -48,7 +48,8 @@ function usage { | ||||
| 		  -r : Recurse the entire directory structure, compressing all video files. | ||||
| 		  -f : Force recompressing any files by deleting it if it already exists. | ||||
| 		  -d : Delete the original video if the compressed version is smaller. | ||||
| 		  -A : Recursively Force and Delete. | ||||
| 		  -l : Clean the filename of dashes and underscores so dates line up. | ||||
| 		  -A : Recursively Force, Delete, and Clean. | ||||
| 		  -m : Measure the time it takes to compress each video and do the loop. | ||||
| 		  -V : Add verbosity, such as printing all the variable values. | ||||
| 		  -x : Set the shell's x flag to display every action which is taken. | ||||
| @@ -59,7 +60,7 @@ function usage { | ||||
|  | ||||
| ## Parameters ## | ||||
|  | ||||
| while getopts ":i:v:a:c:s:rfdAmVxh" opt; do | ||||
| while getopts ":i:v:a:c:s:rfdlAmVxh" opt; do | ||||
| 	case $opt in | ||||
| 		i) input="$OPTARG" | ||||
| 			;; | ||||
| @@ -77,7 +78,9 @@ while getopts ":i:v:a:c:s:rfdAmVxh" opt; do | ||||
| 			;; | ||||
| 		d) delete="Y" | ||||
| 			;; | ||||
| 		A) search_command="find" && force="Y" && delete="Y" | ||||
| 		l) clean="Y" | ||||
| 			;; | ||||
| 		A) search_command="find" && force="Y" && delete="Y" #&& clean="Y" | ||||
| 			;; | ||||
| 		m) time_command="`which time`" | ||||
| 			;; | ||||
| @@ -102,25 +105,38 @@ if [[ -z "$input" ]]; then | ||||
| 	input="." | ||||
| fi | ||||
|  | ||||
| if [[ -z $size ]]; then | ||||
| 	size="720" | ||||
| fi | ||||
| typeset -i size_int | ||||
| size_int="$size" | ||||
|  | ||||
| # Ensure the filenames sort properly between 3 and 4 digit resolutions. | ||||
| while (( ${#size} < 4 )); do | ||||
|     size="0$size" | ||||
| done | ||||
| compress_tags="$size" | ||||
| size="-filter:v scale=-2:$size" | ||||
|  | ||||
| if [[ -z "$video_bitrate" ]]; then | ||||
| 	# Based roughly on the 2.5 step iteration used for 720 and 1080. | ||||
| 	if (( $size >= 2160 )); then | ||||
| 	if (( size_int >= 2160 )); then | ||||
| 		video_bitrate="30M" | ||||
| 	elif (( $size >= 1440 )); then | ||||
| 	elif (( size_int >= 1440 )); then | ||||
| 		video_bitrate="12M" | ||||
| 	elif (( $size >= 1080 )); then | ||||
| 	elif (( size_int >= 1080 )); then | ||||
| 		video_bitrate="5M" | ||||
| 	elif (( $size >= 720 )); then | ||||
| 	elif (( size_int >= 720 )); then | ||||
| 		video_bitrate="2000k" | ||||
| 	elif (( $size >= 480 )); then | ||||
| 	elif (( size_int >= 480 )); then | ||||
| 		video_bitrate="750k" | ||||
| 	elif (( $size >= 360 )); then | ||||
| 	elif (( size_int >= 360 )); then | ||||
| 		video_bitrate="250k" | ||||
| 	else | ||||
| 		video_bitrate="100k" | ||||
| 	fi | ||||
| fi | ||||
| compress_tags="$video_bitrate" | ||||
| compress_tags="$compress_tags-$video_bitrate" | ||||
| video_bitrate="-b:v $video_bitrate -minrate 0 -maxrate $video_bitrate -bufsize $video_bitrate" | ||||
|  | ||||
| if [[ -z "$audio_bitrate" ]]; then | ||||
| @@ -145,15 +161,6 @@ else | ||||
| 	time_command="$time_command -p" | ||||
| fi | ||||
|  | ||||
| if [[ -z $size ]]; then | ||||
| 	size="720" | ||||
| fi | ||||
| while (( ${#size} < 4 )); do | ||||
|     size="0$size" | ||||
| done | ||||
| compress_tags="$size-$compress_tags" | ||||
| size="-filter:v scale=-2:$size" | ||||
|  | ||||
| ## Main ## | ||||
|  | ||||
| if [[ "$verbose" == "Y" ]]; then | ||||
| @@ -208,21 +215,33 @@ $search_command "$input" | sort | while read file; do | ||||
| 		continue | ||||
| 	fi | ||||
|  | ||||
| 	# TBD / TODO: Test this functionality! | ||||
| 	new_video_clean="${newfile}" | ||||
| 	new_video_clean="${new_video_clean//_/}" | ||||
| 	new_video_clean="${new_video_clean//-/}" | ||||
| 	new_video_clean="${new_video_clean// /}" | ||||
|  | ||||
| 	# More exception checks based on the new file. | ||||
| 	if [[ -e "$newfile" ]]; then | ||||
| 	if [[ -e "$newfile" || -e "$new_video_clean" ]]; then | ||||
| 		if [[ "$force" == "Y" ]]; then | ||||
| 			echo "FORCE: Removing '$newfile'." | ||||
| 			if [[ -d ~/TRASH ]]; then | ||||
| 				mv -v "$newfile" ~/TRASH/ | ||||
| 				mv -v "$newfile" "$new_video_clean" ~/TRASH/ 2>/dev/null | ||||
| 			else | ||||
| 				rm -v "$newfile" | ||||
| 				rm -v "$newfile" "$new_video_clean" 2>/dev/null | ||||
| 			fi | ||||
| 		else | ||||
| 			echo "SKIP: Already has a compressed version ($newfile)." | ||||
| 			echo "SKIP: Already has a compressed version." | ||||
| 			ls -sh "$newfile" "$new_video_clean" 2>/dev/null | ||||
| 			continue | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	# Whether or not to use the cleaned version or the normal version. | ||||
| 	if [[ -n $clean ]]; then | ||||
| 		newfile="$new_video_clean" | ||||
| 	fi | ||||
|  | ||||
| 	# Convert the file. | ||||
| 	echo "Converting to '$newfile'." | ||||
| 	echo "*** `date` ***" | ||||
|   | ||||
| @@ -12,6 +12,9 @@ | ||||
| 	"editor.tabSize": 3, | ||||
| 	"editor.insertSpaces": false, | ||||
| 	"files.insertFinalNewline": true, | ||||
| 	"[html]": { | ||||
| 		"files.insertFinalNewline": false | ||||
| 	}, | ||||
| 	"files.trimFinalNewlines": true, | ||||
| 	"git.confirmSync": false, | ||||
|  | ||||
|   | ||||
| @@ -125,13 +125,13 @@ | ||||
|  | ||||
| - 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') }}" | ||||
| @@ -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: | ||||
|   | ||||
| @@ -100,7 +100,6 @@ | ||||
|     mode: '0755' | ||||
|   loop: | ||||
|     - "{{ user_user.home }}/bin" | ||||
|     - "{{ user_user.home }}/LBRY" | ||||
|     - "{{ user_user.home }}/TRASH" | ||||
|     - "{{ user_user.home }}/Downloads" | ||||
|     - "{{ user_user.home }}/Reports" | ||||
| @@ -158,18 +157,18 @@ | ||||
|     function_update: | | ||||
|       function update() { | ||||
|         PROG=$FUNCNAME | ||||
|         usage="Usage: $PROG [-y] | ||||
|         usage="Usage: $PROG [-y] [-g] [-s] [-f] | ||||
|         $PROG is used to run all the system's package manager commands | ||||
|           in one swoop. Flow stops if any command returns a failure code. | ||||
|           The hope is to run something as easy as 'pacman -Syyu'. | ||||
|         -y : Assume yes to any prompts. | ||||
|         -g : Shutdown after updating. | ||||
|         -g : Goodbye - Shutdown after updating. | ||||
|         -s : System updates only, no Flatpaks. | ||||
|         -f : Flatpaks only, no system updates." | ||||
|  | ||||
|         unset OPTIND | ||||
|         unset accept | ||||
|         unset goodbye | ||||
|         unset shutdown | ||||
|         unset only_sys | ||||
|         unset only_flat | ||||
|  | ||||
| @@ -178,7 +177,7 @@ | ||||
|               h) echo -e "$usage" | ||||
|                 return 0 ;; | ||||
|               y) accept="-y" ;; | ||||
|               g) goodbye="Y" ;; | ||||
|               g) shutdown="Y" ;; | ||||
|               s) only_sys="Y" ;; | ||||
|               f) only_flat="Y" ;; | ||||
|               *) echo "ERROR: -$OPTARG is not a recognized option." >&2 | ||||
| @@ -193,7 +192,7 @@ | ||||
|           {{ update_package_manager }} | ||||
|         fi | ||||
|  | ||||
|         if [[ "$goodbye" == "Y" && "{{ battery }}" == "True" ]]; then | ||||
|         if [[ "$shutdown" == "Y" && "{{ battery }}" == "True" ]]; then | ||||
|           echo -e "\n*** Only System Updates - Skipping Flatpak ***\n\n" | ||||
|         elif [[ "$only_sys" == "Y" ]]; then | ||||
|           echo -e "\n*** Manually Skipping Flatpak ***\n\n" | ||||
| @@ -203,7 +202,8 @@ | ||||
|  | ||||
|         echo "*** Completed Successfully ***" | ||||
|  | ||||
|         if [[ $goodbye == "Y" ]]; then | ||||
|         if [[ $shutdown == "Y" ]]; then | ||||
|           shopt -s expand_aliases | ||||
|           bye | ||||
|         fi | ||||
|  | ||||
| @@ -235,6 +235,8 @@ | ||||
|         echo "*** Completed Successfully ***" | ||||
|         return 0 | ||||
|       } | ||||
|       alias firmware-update="update-firmware" | ||||
|       alias firmware-updater="update-firmware" | ||||
|     alias_sync: alias sync='date && echo "Syncing!" && sync && date' | ||||
|     export_editor: export EDITOR='vi' | ||||
|     init_aliases: | | ||||
| @@ -252,8 +254,12 @@ | ||||
|       ' | ||||
|       alias init-prog=init-program | ||||
|     bye_aliases: | | ||||
|       alias bye="{{ shutdown_command }}" | ||||
|       alias goodbye="update -yg" | ||||
|       function bye { | ||||
|         {{ shutdown_command }} | ||||
|       } | ||||
|       function goodbye { | ||||
|         update -yg | ||||
|       } | ||||
|     metasploit_aliases: | | ||||
|       alias metasploit="msfconsole" | ||||
|       alias hax="metasploit" | ||||
| @@ -277,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 | ||||
| @@ -372,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" | ||||
| @@ -380,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() { | ||||
| @@ -403,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 && | ||||
| @@ -414,23 +442,65 @@ | ||||
|       } | ||||
|     alias_vim: alias vi=vim | ||||
|     alias_here: alias here='ls -alh `pwd`/*' | ||||
|     alias_docker_reload: | | ||||
|       alias docker-reload=' | ||||
|     function_docker_reload: | | ||||
|       function docker-reload() { | ||||
|         if [[ "$1" == "-h" || "$1" == "--help" ]]; then | ||||
|           cat <<- EOF | ||||
|             Usage: docker-reload [container_name] | ||||
|             Providing the container name starts a log follow after the command. | ||||
|             A reload is characterized by a DOWN, BUILD, and UP. | ||||
|       EOF | ||||
|           return 0 | ||||
|         fi | ||||
|  | ||||
|         docker compose down && | ||||
|         docker compose build && | ||||
|         docker compose up -d | ||||
|       ' | ||||
|     alias_docker_update: | | ||||
|       alias docker-update=' | ||||
|  | ||||
|         if [[ -n "$1" ]]; then | ||||
|           echo "Following logs of '$1':" | ||||
|           docker logs -f $1 | ||||
|         fi | ||||
|  | ||||
|         return 0 | ||||
|       } | ||||
|     function_docker_update: | | ||||
|       function docker-update() { | ||||
|         if [[ "$1" == "-h" || "$1" == "--help" ]]; then | ||||
|           cat <<- EOF | ||||
|             Usage: docker-update [container_name] | ||||
|             Providing the container name starts a log follow after the command. | ||||
|             An update is characterized by a DOWN, PULL, BUILD, and UP. | ||||
|       EOF | ||||
|           return 0 | ||||
|         fi | ||||
|  | ||||
|         docker compose down && | ||||
|         docker compose pull && | ||||
|         docker compose build && | ||||
|         docker compose up -d | ||||
|       ' | ||||
|  | ||||
|         if [[ -n "$1" ]]; then | ||||
|           echo "Following logs of '$1':" | ||||
|           docker logs -f $1 | ||||
|         fi | ||||
|  | ||||
|         return 0 | ||||
|       } | ||||
|     function_docker_upgrade: | | ||||
|       function docker-upgrade() { | ||||
|         # Wrapper for a full-scale upgrade and log view of a container. | ||||
|         # Paramaters: | ||||
|  | ||||
|         if [[ "$1" == "-h" || "$1" == "--help" ]]; then | ||||
|           cat <<- EOF | ||||
|             Usage: docker-upgrade [container_name] | ||||
|             Providing the container name starts a log follow after the command. | ||||
|             An upgrade is characterized by a DOWN, PULL, BUILD, and UP. | ||||
|       EOF | ||||
|           return 0 | ||||
|         fi | ||||
|  | ||||
|         # Parameters: | ||||
|         #   1) Container ID or Container Name, as seen in 'docker ps' command. | ||||
|         container=$1 | ||||
|         if [[ -z $container ]]; then | ||||
| @@ -460,9 +530,30 @@ | ||||
|         echo "*** Following Log ***" && | ||||
|           echo "Press ^C to escape." && | ||||
|           docker logs -f $container | ||||
|  | ||||
|         return 0 | ||||
|       } | ||||
|     function_docker_restart: | | ||||
|       function docker-restart() { | ||||
|         if [[ "$1" == "-h" || "$1" == "--help" ]]; then | ||||
|           cat <<- EOF | ||||
|             Usage: docker-restart [container_name] | ||||
|             Providing the container name starts a log follow after the command. | ||||
|             A restart is characterized by a DOWN and UP. | ||||
|       EOF | ||||
|           return 0 | ||||
|         fi | ||||
|  | ||||
|         docker compose down && | ||||
|         docker compose up -d | ||||
|  | ||||
|         if [[ -n "$1" ]]; then | ||||
|           echo "Following logs of '$1':" | ||||
|           docker logs -f $1 | ||||
|         fi | ||||
|  | ||||
|         return 0 | ||||
|       } | ||||
|     alias_docker_restart: | | ||||
|       alias docker-restart='docker compose down && docker compose up -d' | ||||
|     alias_code_check: | | ||||
|       alias code-check=' | ||||
|         echo "Checking ~/Code directory for git changes." | ||||
| @@ -473,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 | ||||
| @@ -481,6 +582,7 @@ | ||||
|         done | ||||
|         echo -e "\nDone!" | ||||
|       ' | ||||
|       alias code-sync='code-check' | ||||
|     alias_code_reset: | | ||||
|       alias code-reset=' | ||||
|         ls -d ~/Code/* | while read project | ||||
| @@ -500,16 +602,32 @@ | ||||
|           env-ansible dev | ||||
|           env-docker dev | ||||
|           env-termux dev | ||||
|           env-obtainium-hyperling dev | ||||
|           nodejs-website dev | ||||
|           ebook-health-protocol dev | ||||
|           flutter-expense-tracker main | ||||
|           flutter-social-traveler-app main | ||||
|           nodejs-social-traveler-server main | ||||
|           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 { | ||||
|         # Move old projects to TRASH. | ||||
|         # Unseed current projects. | ||||
|         echo -e "\n*** Move old projects to TRASH ***" | ||||
|         unseed_dir="$HOME/TRASH/`date +%Y%m%d_%H%M%S`_UnseededCodeProjects" | ||||
|         mkdir -pv "$unseed_dir" | ||||
|         mv -v ~/Code/* "$unseed_dir"/ 2>/dev/null | ||||
| @@ -525,8 +643,8 @@ | ||||
|  | ||||
|           # Project folder manipulation. | ||||
|           dest_folder="$git_project" | ||||
|           if [[ "$dest_folder" == "flutter-*" ]]; then | ||||
|             echo "- Using '_' for Flutter Project" | ||||
|           if [[ "$dest_folder" == "flutter-"* ]]; then | ||||
|             echo "Using '_' for Flutter Project" | ||||
|             dest_folder="${dest_folder//-/_}" | ||||
|           fi | ||||
|  | ||||
| @@ -597,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" | ||||
| @@ -649,6 +770,189 @@ | ||||
|           echo "$var = ${!var}" | ||||
|         done | ||||
|       } | ||||
|     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: | | ||||
|       function backup { | ||||
|         /usr/local/bin/backup_system.sh | ||||
|       } | ||||
|       alias backup-system="backup" | ||||
|       alias system-backup="backup" | ||||
|       alias check-backups="ll /srv/backup" | ||||
|       function clean-backup { | ||||
|         sh -c "rm -rfv /srv/backup/*" | ||||
|       } | ||||
|       alias clean-backups="clean-backup" | ||||
|     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" | ||||
|  | ||||
| - name: General | Account Management | Users | Files | Common Variable | ||||
|   set_fact: | ||||
| @@ -686,16 +990,17 @@ | ||||
|       {{ metasploit_aliases }} | ||||
|       {{ show_config_aliases }} | ||||
|       {{ edit_config_aliases }} | ||||
|       {{ function_clean_trashed }} | ||||
|       {{ function_check_trash }} | ||||
|       {{ function_clean }} | ||||
|       {{ function_flatpak_usage }} | ||||
|       {{ function_flatpak_purge }} | ||||
|       {{ alias_vim }} | ||||
|       {{ alias_here }} | ||||
|       {{ alias_docker_reload }} | ||||
|       {{ alias_docker_update }} | ||||
|       {{ function_docker_reload }} | ||||
|       {{ function_docker_update }} | ||||
|       {{ function_docker_upgrade }} | ||||
|       {{ alias_docker_restart }} | ||||
|       {{ function_docker_restart }} | ||||
|       {{ alias_code_check }} | ||||
|       {{ alias_code_reset }} | ||||
|       {{ function_code_reseed }} | ||||
| @@ -711,6 +1016,19 @@ | ||||
|       {{ alias_kill_system }} | ||||
|       {{ 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_log }} | ||||
|       {{ function_debian_upgrade }} | ||||
|       {{ function_ebook_convert }} | ||||
|       {{ alias_sudo }} | ||||
|       {{ function_load_branch }} | ||||
|  | ||||
| - 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
									
								
								tasks/general/software/hyperling.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								tasks/general/software/hyperling.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| --- | ||||
| # Software that I've written for personal use, to be placed in `~/bin/`. | ||||
|  | ||||
| # TODO TBD - Add content here and place this in local.yml! :) | ||||
|  | ||||
| # Refactor Music Library | ||||
| @@ -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) | ||||
| @@ -137,3 +141,11 @@ | ||||
|     state: absent | ||||
|   when: ansible_distribution != "Ubuntu" | ||||
|   ignore_errors: yes | ||||
|  | ||||
| - name: General | Software | Packages | Other Debian Packages | ||||
|   package: | ||||
|     name: | ||||
|     - usbutils | ||||
|     state: present | ||||
|   when: ansible_distribution in ("Debian") | ||||
|   ignore_errors: yes | ||||
|   | ||||
| @@ -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!) | ||||
|   | ||||
| @@ -121,7 +121,7 @@ | ||||
|   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 | ||||
|   | ||||
| @@ -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,20 @@ | ||||
| - 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: "" } | ||||
|     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 +69,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,12 +13,10 @@ | ||||
|                       , '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' | ||||
|                       , 'com.google.AndroidStudio.desktop' | ||||
|                       , 'org.shotcut.Shotcut.desktop' | ||||
|                       , 'io.lmms.LMMS.desktop' | ||||
|                       , 'io.lbry.lbry-app.desktop', 'lbry.desktop' | ||||
| @@ -38,6 +36,11 @@ | ||||
| #, '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 | GNOME | Facts (NixOS) | ||||
|   set_fact: | ||||
| @@ -216,7 +219,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 && | ||||
|  | ||||
|       # 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