Compare commits
	
		
			209 Commits
		
	
	
		
			734bc70c1d
			...
			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 | |||
| 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 | |||
| d6cf29d51d | |||
| 51f8cae0ec | |||
| 6e1884b912 | |||
| 695a7fc30b | |||
| a447389af2 | |||
| 048d4d16c1 | |||
| f9421585c9 | |||
| 660429eab0 | |||
| 05bf09c557 | |||
| 5c72168a7b | |||
| 87037148a7 | |||
| aacb53081a | |||
| fd156c6382 | |||
| 82269f8cc2 | |||
| 3c5617e64a | |||
| c796d62fc3 | |||
| 50d499e91f | |||
| 72f48d64ab | |||
| bc0cb93b02 | |||
| 5a3c700380 | |||
| 2e223c5e28 | |||
| 2c19c63a09 | |||
| af13e2c3a4 | |||
| 02c153d260 | |||
| 6eb48e4d9f | |||
| 5ffe4d5b63 | |||
| f9ffc9839f | |||
| 659d46d088 | |||
| a6c819a086 | |||
| e3887098a0 | |||
| 2e8c2205c3 | |||
| 4bc52d984c | |||
| f64a9584be | |||
| 2708e367df | |||
| d0d5a5306b | |||
| 07ba3e8e35 | |||
| 59704e4c6e | |||
| 4aa5e90dd9 | |||
| 79050c8ba6 | |||
| 2c6c4fee25 | |||
| 85ba9946c3 | |||
| 76bc8535c1 | |||
| 8289e2a0ca | |||
| b387fe2c2a | |||
| 3370552070 | |||
| 135ef241da | |||
| 127820d971 | |||
| 95d1f71491 | |||
| e69b5d2d33 | |||
| 4a3ac3622f | |||
| 8fc05c43b5 | |||
| aa97e9ba6e | |||
| 7cd8fc4eac | |||
| 658f13d74a | |||
| eba289c1d7 | |||
| 3dffbc11db | |||
| 391129e19b | |||
| ae3112d969 | |||
| db3e610c91 | |||
| 76ec891138 | |||
| 752969e2fa | 
| @@ -45,7 +45,7 @@ Workstation: Currently failing at `[Workstation | Linux | Flatpak Distro | Packa | ||||
|  | ||||
| ### NixOS | ||||
| 99%, still need to get Telegraf going and refactor local.yml but everything else | ||||
| is working well. It is automatically implementing github.com/Hyperling/NixOS. | ||||
| is working well. It is automatically implementing git.hyperling.com/me/env-nixos. | ||||
|  | ||||
| ## Currently Supported Unix Systems | ||||
| ### FreeBSD 12, 13 | ||||
| @@ -76,4 +76,4 @@ to exist under the facts tree. | ||||
| ## Other Notes | ||||
| ### Get Setup Values | ||||
| Use this command to see the variables for a system: | ||||
| `ansible localhost -m setup --connection=local`. | ||||
| `ansible localhost -m setup --connection=local`. | ||||
|   | ||||
| @@ -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 | ||||
| @@ -95,30 +106,39 @@ | ||||
|       case $pkg_mgr in | ||||
|         apt) | ||||
|           if [[ $distribution != "ParrotOS" ]]; then | ||||
|             echo "*** Apt ***" && | ||||
|             echo -e "******* Apt *******\n*** Update Cache ***" && | ||||
|             sudo apt update && | ||||
|             sudo apt autoremove {{ update_accept_var }} && | ||||
|             echo -e "\n*** Auto Remove ***" && | ||||
|             sudo apt autoremove --purge {{ update_accept_var }} && | ||||
|             echo -e "\n*** Clean ***" && | ||||
|             sudo apt clean {{ update_accept_var }} && | ||||
|             echo -e "Cleaned!\n\n*** Configure DPKG ***" && | ||||
|             sudo dpkg --configure -a && | ||||
|             echo -e "\n*** Fix Broken/Missing ***" && | ||||
|             sudo apt --fix-broken --fix-missing install && | ||||
|             echo -e "\n*** Upgrade ***" && | ||||
|             sudo apt dist-upgrade --allow-downgrades --fix-broken \ | ||||
|               --fix-missing {{ update_accept_var }} || | ||||
|             return 1 | ||||
|           else | ||||
|             echo "*** Parrot ***" | ||||
|             echo -e "******* Parrot *******\n*** Update Cache ***" && | ||||
|             sudo apt update && | ||||
|             sudo apt autoremove {{ update_accept_var }} && | ||||
|             echo -e "\n*** Auto Remove ***" && | ||||
|             sudo apt autoremove --purge {{ update_accept_var }} && | ||||
|             parrot_mirrors_suck=true && | ||||
|             while [[ $parrot_mirrors_suck ]]; do | ||||
|               unset parrot_mirrors_suck | ||||
|               echo -e "\n*** Upgrade ***" | ||||
|               sudo parrot-upgrade | ||||
|               if [[ $? != 0 ]]; then | ||||
|                 parrot_mirrors_suck=true | ||||
|                 echo -e "*** Update Cache, Again ***" | ||||
|                 sudo apt update --fix-missing | ||||
|               fi | ||||
|             done || | ||||
|             return 1 | ||||
|           fi | ||||
|           echo -e "\n******* Mission Complete!! *******" | ||||
|         ;; | ||||
|  | ||||
|         pacman) | ||||
|   | ||||
| @@ -8,17 +8,8 @@ | ||||
|     st_install_dir: /usr/local/src/st | ||||
|     global_bin: /usr/local/bin | ||||
|     x_desktops: /usr/share/xsessions | ||||
|     repo_github: https://github.com/Hyperling/ansible.git | ||||
|     #repo_local: https://git.hyperling.com/ansible.git | ||||
|     # Local server not working yet, go back to Github even though they throttle me. | ||||
|     repo_local: https://github.com/Hyperling/ansible.git | ||||
|  | ||||
| - name: General | Facts | System | Dev | ||||
|   set_fact: | ||||
|     #repo_local: https://git.hyperling.com/ansible-dev.git | ||||
|     # Local server not working yet, go back to Github even though they throttle me. | ||||
|     repo_local: https://github.com/Hyperling/ansible.git | ||||
|   when: branch == "dev" | ||||
|     git_repo_http: https://{{ git_host }}/{{ git_user }}/{{ git_project }} | ||||
|     git_repo_ssh: ssh://git@{{ git_host }}:{{ git_ssh_port }}/{{ git_user }}/{{ git_project }} | ||||
|  | ||||
|  | ||||
| - name: General | Facts | System | Linux | ||||
|   | ||||
							
								
								
									
										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 | ||||
| @@ -34,9 +34,12 @@ function usage() { | ||||
|  | ||||
| 		Parameters: | ||||
| 		  -s SIZE : Integer for the maximum length of either image dimension. | ||||
| 		            Default size is 2000. | ||||
| 		  -l LOCATION : The specific image or folder which needs images shrunk. | ||||
| 		                Default location is the current directory. | ||||
| 		  -r : Recursively shrink images based on the location passed. | ||||
| 		  -f : Force the image to be shrunk even if a file already exists for it. | ||||
| 		  -F : FORCE the image to be shrunk even if the file is already shrunk. | ||||
| 		  -d : Delete the original image if the compressed image is smaller. | ||||
| 		  -c : Clean the filename of underscores, dashes, 'IMG', etc. | ||||
| 		  -A : Resursively Force, Delete, and Clean. | ||||
| @@ -48,15 +51,17 @@ function usage() { | ||||
|  | ||||
| ## Parameters ## | ||||
|  | ||||
| while getopts ":s:l:rfdcAhx" opt; do | ||||
| while getopts ":s:l:rfFdcAhx" opt; do | ||||
| 	case $opt in | ||||
| 		s) in_size="$OPTARG" && size="$in_size" ;; | ||||
| 		l) location="$OPTARG" ;; | ||||
| 		r) recurse="Y" && search="find" ;; | ||||
| 		f) force="Y" ;; | ||||
| 		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 ;; | ||||
| @@ -70,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'." | ||||
| @@ -90,8 +95,8 @@ $search "$location" | sort | while read image; do | ||||
| 	# Avoid processing directories no matter the name. | ||||
| 	[ -d "$image" ] && continue | ||||
|  | ||||
| 	# Avoid processing files previously shrunk. | ||||
| 	[[ "$image" == *"$tag"* ]] && continue | ||||
| 	# Avoid processing files previously shrunk, unless we are FORCEing. | ||||
| 	[[ "$image" == *"$tag"* && -z "$super_force" ]] && continue | ||||
|  | ||||
| 	echo -e "\n$image" | ||||
|  | ||||
| @@ -106,8 +111,7 @@ $search "$location" | sort | while read image; do | ||||
| 		continue | ||||
| 	fi | ||||
|  | ||||
|  | ||||
| 	new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$extension" | ||||
| 	new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$size.$extension" | ||||
|  | ||||
| 	## Clean Filename ## | ||||
| 	# Prevent directory from having its name cleaned too. | ||||
| @@ -120,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. | ||||
| @@ -135,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. | ||||
|   | ||||
| @@ -32,7 +32,14 @@ function usage { | ||||
| 		  -i input : The input file or folder with which to search for video files. | ||||
| 		             If nothing is provided, current directory (.) is assumed. | ||||
| 		  -v bitrate : The video bitrate to convert to. | ||||
| 		               Defaults to '2000k'. | ||||
| 		               Defaults are based on the size passed. | ||||
| 		                 >= 2160:   '30M' | ||||
| 		                 >= 1440:   '12M' | ||||
| 		                 >= 1080:    '5M' | ||||
| 		                 >=  720: '2000k' | ||||
| 		                 >=  480:  '750k' | ||||
| 		                 >=  360:  '250k' | ||||
| 		                  <  360:  '100k' | ||||
| 		  -a bitrate : The audio bitrate to convert to. | ||||
| 		               Defaults to '192k'. | ||||
| 		  -c vcodec : The video codec you'd like to use, such as libopenh264. | ||||
| @@ -41,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. | ||||
| @@ -52,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" | ||||
| 			;; | ||||
| @@ -70,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`" | ||||
| 			;; | ||||
| @@ -95,14 +105,44 @@ if [[ -z "$input" ]]; then | ||||
| 	input="." | ||||
| fi | ||||
|  | ||||
| if [[ -z "$video_bitrate" ]]; then | ||||
| 	video_bitrate="2000k" | ||||
| 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_int >= 2160 )); then | ||||
| 		video_bitrate="30M" | ||||
| 	elif (( size_int >= 1440 )); then | ||||
| 		video_bitrate="12M" | ||||
| 	elif (( size_int >= 1080 )); then | ||||
| 		video_bitrate="5M" | ||||
| 	elif (( size_int >= 720 )); then | ||||
| 		video_bitrate="2000k" | ||||
| 	elif (( size_int >= 480 )); then | ||||
| 		video_bitrate="750k" | ||||
| 	elif (( size_int >= 360 )); then | ||||
| 		video_bitrate="250k" | ||||
| 	else | ||||
| 		video_bitrate="100k" | ||||
| 	fi | ||||
| fi | ||||
| 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 | ||||
| 	audio_bitrate="192k" | ||||
| fi | ||||
| compress_tags="$compress_tags-$audio_bitrate" | ||||
| audio_bitrate="-b:a $audio_bitrate" | ||||
|  | ||||
| if [[ -z "$codec" ]]; then | ||||
| @@ -121,11 +161,6 @@ else | ||||
| 	time_command="$time_command -p" | ||||
| fi | ||||
|  | ||||
| if [[ -z $size ]]; then | ||||
| 	size="720" | ||||
| fi | ||||
| size="-filter:v scale=-1:$size" | ||||
|  | ||||
| ## Main ## | ||||
|  | ||||
| if [[ "$verbose" == "Y" ]]; then | ||||
| @@ -172,26 +207,41 @@ $search_command "$input" | sort | while read file; do | ||||
| 	# Build the new filename to signify it is different than the original. | ||||
| 	newfile="${file//$extension/$filename_flag-$date_YYYYMMDD.$extension_lower}" | ||||
|  | ||||
| 	# Add the size, video, and audio quality it was converted to. | ||||
| 	newfile="${newfile//\.$extension_lower/_$compress_tags.$extension_lower}" | ||||
|  | ||||
| 	if [[ $newfile == $file ]]; then | ||||
| 		echo "ERROR: The new calculated filename matches the old, skipping." >&2 | ||||
| 		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` ***" | ||||
|   | ||||
| @@ -15,7 +15,7 @@ nixos_working_exe=activate.sh | ||||
| function usage { | ||||
| 	echo -e "\nUsage: $PROG -b BRANCH" >&2 | ||||
| 	cat <<- EOF | ||||
| 		Run a setup script for NixOS based on the https://github.com/Hyperling/NixOS project. | ||||
| 		Run a setup script for NixOS based on the https://git.hyperling.com/me/env-nixos project. | ||||
|  | ||||
| 		Parameters: | ||||
| 		  -b BRANCH: The branch which should be installed, likely 'main' or 'dev'. | ||||
| @@ -48,7 +48,7 @@ fi | ||||
| cleanup | ||||
|  | ||||
| # Install the Hyperling NixOS configurations. | ||||
| git clone https://github.com/Hyperling/NixOS --branch $branch $nixos_working_dir | ||||
| git clone https://git.hyperling.com/me/env-nixos --branch $branch $nixos_working_dir | ||||
| chmod 755 $nixos_working_dir/$nixos_working_exe | ||||
| $nixos_working_dir/$nixos_working_exe | ||||
|  | ||||
|   | ||||
| @@ -3,6 +3,7 @@ | ||||
| 	"save_loc1": "~/.var/app/com.visualstudio.code-oss/config/Code - OSS/{{ user_desc }}/settings.json", | ||||
| 	"save_loc2": "~/.var/app/com.vscodium.codium/config/VSCodium/{{ user_desc }}/settings.json", | ||||
| 	"END_COMMENTS": "", | ||||
|  | ||||
| 	"workbench.startupEditor": "none", | ||||
| 	"editor.rulers": [ | ||||
| 		 80, 120, 200 | ||||
| @@ -11,5 +12,17 @@ | ||||
| 	"editor.tabSize": 3, | ||||
| 	"editor.insertSpaces": false, | ||||
| 	"files.insertFinalNewline": true, | ||||
| 	"files.trimFinalNewlines": true | ||||
| 	"[html]": { | ||||
| 		"files.insertFinalNewline": false | ||||
| 	}, | ||||
| 	"files.trimFinalNewlines": true, | ||||
| 	"git.confirmSync": false, | ||||
|  | ||||
|     "[dart]": { | ||||
|         "editor.formatOnSave": true, | ||||
|         "editor.formatOnType": true, | ||||
|         "editor.selectionHighlight": false, | ||||
|         "editor.tabCompletion": "onlySnippets", | ||||
|         "editor.wordBasedSuggestions": "off" | ||||
|     } | ||||
| } | ||||
|   | ||||
							
								
								
									
										24
									
								
								local.yml
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								local.yml
									
									
									
									
									
								
							| @@ -75,7 +75,6 @@ | ||||
|       - include_tasks: tasks/general/software/sendmail.yml | ||||
|         when: ansible_system == "FreeBSD" | ||||
|  | ||||
|  | ||||
|       # Gather again in case missing programs have now been installed. | ||||
|       - include_tasks: facts/general/gather.yml | ||||
|  | ||||
| @@ -124,8 +123,11 @@ | ||||
|       - include_tasks: tasks/workstation/linux/software/packages.yml | ||||
|         when: ansible_system == "Linux" | ||||
|  | ||||
|       - include_tasks: tasks/workstation/linux/software/flatpaks.yml | ||||
|         when: ansible_system == "Linux" and flatpak_distro | ||||
|       - include_tasks: tasks/workstation/linux/software/lutris.yml | ||||
|         when: ansible_system == "Linux" | ||||
|  | ||||
|       - include_tasks: tasks/workstation/linux/software/vscodium.yml | ||||
|         when: ansible_system == "Linux" | ||||
|  | ||||
|       - include_tasks: tasks/workstation/linux/software/brave.yml | ||||
|         when: ansible_pkg_mgr in ("apt", "dnf", "zypper") and not mobile | ||||
| @@ -156,6 +158,16 @@ | ||||
|  | ||||
|       - include_tasks: tasks/workstation/shared/settings/services.yml | ||||
|  | ||||
|       # Final Tasks (SLOW) # | ||||
|       - include_tasks: tasks/workstation/linux/software/flutter.yml | ||||
|         when: ansible_system == "Linux" | ||||
|  | ||||
|       - include_tasks: tasks/workstation/linux/software/android.yml | ||||
|         when: ansible_system == "Linux" | ||||
|  | ||||
|       - include_tasks: tasks/workstation/linux/software/flatpaks.yml | ||||
|         when: ansible_system == "Linux" and flatpak_distro | ||||
|  | ||||
|       when: workstation == true | ||||
|  | ||||
|  | ||||
| @@ -228,12 +240,6 @@ | ||||
|       - include_tasks: tasks/server/software/hugo.yml | ||||
|         when: hugo == true | ||||
|  | ||||
|       - include_tasks: tasks/server/software/gitlab.yml | ||||
|         when: gitlab and ansible_pkg_mgr in ("apt", "dnf") and ansible_distribution not in ("Fedora") | ||||
|  | ||||
|       - include_tasks: tasks/server/software/git.yml | ||||
|         when: git and ansible_pkg_mgr in ("apt") | ||||
|  | ||||
|       when: server == true | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										70
									
								
								setup.sh
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								setup.sh
									
									
									
									
									
								
							| @@ -6,7 +6,7 @@ | ||||
| DIR="$(dirname -- "${BASH_SOURCE[0]}")" | ||||
| PROG="$(basename -- "${BASH_SOURCE[0]}")" | ||||
| LOCAL=$DIR/local.yml | ||||
| URL="https://github.com/Hyperling/ansible" | ||||
| URL="https://git.hyperling.com/me/env-ansible" | ||||
| BRANCH="main" | ||||
|  | ||||
| ## Functions ## | ||||
| @@ -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 | ||||
|   | ||||
| @@ -26,35 +26,55 @@ | ||||
|   blockinfile: | ||||
|     path: "{{ gen_file }}" | ||||
|     block: | | ||||
|       ;;;;;;; Available options - all require lowercase values ;;;;;; | ||||
|       ; Please note that all potions require lowercase keys and values. | ||||
|       ; | ||||
|       ;;;;;;;;;;;;;;;;;;;;          Basic Options           ;;;;;;;;;;;;;;;;;;;; | ||||
|       ; | ||||
|       ;     enable : Provide true for the provision to occur. | ||||
|       ;                Default: false | ||||
|       ; | ||||
|       ;       user : Provide the name of the user account. | ||||
|       ;                Example: tom, jerry, kim, sarah | ||||
|       ;                Default: ling | ||||
|       ;                Default: user | ||||
|       ; | ||||
|       ;  user_desc : Provide the description of the user account. | ||||
|       ;                Example: Thomas, Jerry, Kimberly, Sarah | ||||
|       ;                Default: Hyperling | ||||
|       ;                Default: User | ||||
|       ; | ||||
|       ;     branch : Provide the Github branch that the machine should poll. | ||||
|       ;                Example: main, dev | ||||
|       ;                Default: main | ||||
|       ;  sshd_port : Determine the port which SSHD should listen on. | ||||
|       ;                Example: 12345 | ||||
|       ;                Default: 22 | ||||
|       ; | ||||
|       ; pentesting : Set to true to install tools such as metasploit. | ||||
|       ;              nmap is already provided for reporting | ||||
|       ;                Default: false | ||||
|       ; | ||||
|       ;   no_telem : Set to true to avoid setting up telemetry services. | ||||
|       ;              Disables GitHub updates to this project. | ||||
|       ;              Disables all telegraf pings. | ||||
|       ;                Default: false | ||||
|       ;;;;;;;;;;;;;;;;;;;;           Git Polling            ;;;;;;;;;;;;;;;;;;;; | ||||
|       ; | ||||
|       ;    battery : Set to true to attempt to save battery life. | ||||
|       ;              Slows down the rate of services such as telegraf and cron. | ||||
|       ;                Default: false | ||||
|       ;  For syncing this machine to a Git repository of this Ansible project | ||||
|       ;  in this fashion: ssh://git@GIT_HOST:GIT_SSH_PORT/GIT_USER/GIT_PROJECT | ||||
|       ; | ||||
|       ;       branch : Branch to use on this machine. | ||||
|       ;                  Example: main, dev, prod | ||||
|       ;                  Default: main | ||||
|       ; | ||||
|       ;     git_host : Provide the git host that the machine should poll. | ||||
|       ;                  Example: github.com, gitlab.com. gitea.com | ||||
|       ;                  Default: git.hyperling.com | ||||
|       ; | ||||
|       ; git_ssh_port : Port of the server host to use for SSH requests. | ||||
|       ;                  Example: 22, 222, 2222 | ||||
|       ;                  Default: 22 | ||||
|       ; | ||||
|       ;     git_user : Provide the git user which projects are found under. | ||||
|       ;                  Example: Hyperling, JimBobMcGeeJr | ||||
|       ;                  Default: me | ||||
|       ; | ||||
|       ;  git_project : Name of this project on the server host. | ||||
|       ;                  Example: Ansible, ansible-setup, my-env | ||||
|       ;                  Default: env-ansible | ||||
|       ; | ||||
|       ;;;;;;;;;;;;;;;;;;;;            Swap File             ;;;;;;;;;;;;;;;;;;;; | ||||
|       ; | ||||
|       ; swap_block : Set to the block size if dd should create a swapfile. | ||||
|       ;              Preferably keep this under 2G for integrity sakes, the | ||||
| @@ -70,9 +90,32 @@ | ||||
|       ;                Example: /usr/local/swap | ||||
|       ;                Default: /swapfile | ||||
|       ; | ||||
|       ;  sshd_port : Determine the port which SSHD should listen on. | ||||
|       ;                Example: 12345 | ||||
|       ;                Default: 22 | ||||
|       ;;;;;;;;;;;;;;;;;;;;          Sync Frequency          ;;;;;;;;;;;;;;;;;;;; | ||||
|       ; | ||||
|       ; no_telem : Set to true to avoid setting up telemetry services. | ||||
|       ;            Disables GitHub updates to this project. | ||||
|       ;            Disables all telegraf pings. | ||||
|       ;              Default: false | ||||
|       ; | ||||
|       ;  battery : Set to true to attempt to save battery life. | ||||
|       ;            Slows down the rate of services such as telegraf and cron. | ||||
|       ;              Default: false | ||||
|       ; | ||||
|       ;;;;;;;;;;;;;;;;;;;;         Server Shortcut          ;;;;;;;;;;;;;;;;;;;; | ||||
|       ; | ||||
|       ; For typing `prod` and getting straight to a server, like in env-termux. | ||||
|       ; | ||||
|       ; prod_host : Branch to use on this machine. | ||||
|       ;               Example: myserver.com, mywebhost.net | ||||
|       ;               Default: hyperling.com | ||||
|       ; | ||||
|       ; prod_port : Provide the git host that the machine should poll. | ||||
|       ;               Example: 22, 222, 2222 | ||||
|       ;               Default: 22 | ||||
|       ; | ||||
|       ; prod_user : Port of the server host to use for SSH requests. | ||||
|       ;               Example: jim, bob, jeff, anne | ||||
|       ;               Default: user | ||||
|       ; | ||||
|       [global] | ||||
|     marker: '; {mark} MANAGED BY ANSIBLE | Generic Config' | ||||
| @@ -82,17 +125,24 @@ | ||||
|  | ||||
| - 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') }}" | ||||
|     git_ssh_port: "{{ lookup('ini', 'git_ssh_port file={{gen_file}} default=22') }}" | ||||
|     prod_host: "{{ lookup('ini', 'prod_host   file={{gen_file}} default=hyperling.com') }}" | ||||
|     prod_port: "{{ lookup('ini', 'prod_port   file={{gen_file}} default=22') }}" | ||||
|     prod_user: "{{ lookup('ini', 'prod_user   file={{gen_file}} default=user') }}" | ||||
|  | ||||
| - name: General | Account Management | Provisioning Configuration | General | List | ||||
|   set_fact: | ||||
| @@ -109,6 +159,13 @@ | ||||
|     - { 'swap_count': "{{ swap_count }}" } | ||||
|     - { 'swap_file': "{{ swap_file }}" } | ||||
|     - { 'sshd_port': "{{ sshd_port }}" } | ||||
|     - { 'git_host': "{{ git_host }}" } | ||||
|     - { 'git_user': "{{ git_user }}" } | ||||
|     - { 'git_project': "{{ git_project }}" } | ||||
|     - { 'git_ssh_port': "{{ git_ssh_port }}" } | ||||
|     - { 'prod_host': "{{ prod_host }}" } | ||||
|     - { 'prod_port': "{{ prod_port }}" } | ||||
|     - { 'prod_user': "{{ prod_user }}" } | ||||
|  | ||||
|  | ||||
| ## Workstation ## | ||||
| @@ -122,8 +179,13 @@ | ||||
|       ;  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. | ||||
|       ;             - Shotcut, OpenShot, OBS Studio, etc. | ||||
|       ;           Set to audio for only the music related portions. | ||||
|       ;             - Audacity (or similar), LMMS, VMPK, etc. | ||||
|       ; | ||||
|       ;  gaming : Set to true for installation of gaming software (Steam, Lutris) | ||||
|       ; | ||||
| @@ -139,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 | ||||
| @@ -147,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: | ||||
| @@ -162,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 ## | ||||
| @@ -219,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: | ||||
| @@ -279,28 +348,6 @@ | ||||
|       ; | ||||
|       ;       hugo : Set to true to install HUGO static website generator. | ||||
|       ; | ||||
|       ;     gitlab : ee - Installs Enterprise Edition Free Tier. Basically CE with an easier upgrade path for Paid Features. | ||||
|       ;              ce - Installs Community Edition. Excludes paid features if you'll never use them. Supposedly difficult to move to EE. | ||||
|       ;                Example: ce | ||||
|       ; | ||||
|       ; gitlab_url : The URL prefix for the server. Using 'http://mygitlabserver' would result in "http://mygitlabserver.((domain))". | ||||
|       ;              Regardless of whether you choose http or https, the Certbot config will be skipped since the maintainer uses a reverse proxy. | ||||
|       ;                Example: https://gitlab | ||||
|       ; | ||||
|       ;        git : Set to true for this server to be configured as an HTTP git server. | ||||
|       ; | ||||
|       ;   git_name : Name(s) of project(s) that the Git server should host. | ||||
|       ;                Example: ansible#ansible-dev | ||||
|       ; | ||||
|       ; git_branch : Branch(es) of project(s) corresponding with git_name. | ||||
|       ;                Example: main#dev | ||||
|       ; | ||||
|       ;    git_url : URL(s) of project(s) corresponding with git_name. | ||||
|       ;                Example: https://github.com/Hyperling/ansible#https://github.com/Hyperling/ansible | ||||
|       ; | ||||
|       ;    git_sep : Separator for git variables above. | ||||
|       ;                Example: # | ||||
|       ; | ||||
|       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
|       [global] | ||||
|     marker: '; {mark} MANAGED BY ANSIBLE | Server Config' | ||||
| @@ -310,21 +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') }}" | ||||
|     gitlab:     "{{ lookup('ini', 'gitlab     file={{srv_file}} default=false') }}" | ||||
|     gitlab_url: "{{ lookup('ini', 'gitlab_url file={{srv_file}} default=false') }}" | ||||
|     git:        "{{ lookup('ini', 'git        file={{srv_file}} default=false') }}" | ||||
|     git_name:   "{{ lookup('ini', 'git_name   file={{srv_file}} default=false') }}" | ||||
|     git_branch: "{{ lookup('ini', 'git_branch file={{srv_file}} default=false') }}" | ||||
|     git_url:    "{{ lookup('ini', 'git_url    file={{srv_file}} default=false') }}" | ||||
|     git_sep:    "{{ lookup('ini', 'git_sep    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: | ||||
| @@ -338,13 +378,6 @@ | ||||
|     - { 'influxdb2': "{{ influxdb2 }}" } | ||||
|     - { 'certbot': "{{ certbot }}" } | ||||
|     - { 'hugo': "{{ hugo }}" } | ||||
|     - { 'gitlab': "{{ gitlab }}" } | ||||
|     - { 'gitlab_url': "{{ gitlab_url }}" } | ||||
|     - { 'git': "{{ git }}" } | ||||
|     - { 'git_name': "{{ git_name }}" } | ||||
|     - { 'git_branch': "{{ git_branch }}" } | ||||
|     - { 'git_url': "{{ git_url }}" } | ||||
|     - { 'git_sep': "{{ git_sep }}" } | ||||
|  | ||||
|  | ||||
| ## Exit if not turned on yet ## | ||||
|   | ||||
| @@ -100,13 +100,22 @@ | ||||
|     mode: '0755' | ||||
|   loop: | ||||
|     - "{{ user_user.home }}/bin" | ||||
|     - "{{ user_user.home }}/LBRY" | ||||
|     - "{{ user_user.home }}/TRASH" | ||||
|     - "{{ user_user.home }}/Downloads" | ||||
|     - "{{ user_user.home }}/Reports" | ||||
|   become_user: "{{ user }}" | ||||
|   when: user_user.home != "" | ||||
|  | ||||
| - name: General | Account Management | Users | User | Create Folders | Coding | ||||
|   file: | ||||
|     path: "{{ item }}" | ||||
|     state: directory | ||||
|     mode: '0755' | ||||
|   loop: | ||||
|     - "{{ user_user.home }}/Code" | ||||
|   become_user: "{{ user }}" | ||||
|   when: user_user.home != "" and coding == true | ||||
|  | ||||
| - name: General | Account Management | Users | Home Permissions | ||||
|   shell: "chmod 700 {{ user_user.home }}/../*" | ||||
|  | ||||
| @@ -118,8 +127,6 @@ | ||||
|     alias_cp: alias cp='cp -v' | ||||
|     alias_mv: alias mv='mv -v' | ||||
|     alias_rm: alias rm='echo "Use mv ~/TRASH/ instead!"' | ||||
|     alias_clean_dir: alias clean-dir='mv * ~/TRASH/' | ||||
|     alias_clean_trash: alias clean-trash='sh -c "rm -rfv ~/TRASH/*"' | ||||
|     export_path_additions: export PATH="~/bin:"{{ global_bin }}":$PATH" | ||||
|     function_wttr: | | ||||
|       function weather() { | ||||
| @@ -131,7 +138,7 @@ | ||||
|         Useful location types: | ||||
|           $zip_code              | Ex: 12345 | ||||
|           $city,$state           | Ex: Austin,Texas | ||||
|           @$domain_dot_extension | Ex: @github.com | ||||
|           @$domain_dot_extension | Ex: @gitea.com | ||||
|           ~$special_location     | Ex: ~Manitou Incline | ||||
|         Full documentation: https://github.com/chubin/wttr.in' | ||||
|           return 1 | ||||
| @@ -150,23 +157,27 @@ | ||||
|     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 shutdown | ||||
|         unset only_sys | ||||
|         unset only_flat | ||||
|  | ||||
|         while getopts ":hygsf" opt; do | ||||
|             case $opt in | ||||
|               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 | ||||
| @@ -181,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" | ||||
| @@ -191,7 +202,8 @@ | ||||
|  | ||||
|         echo "*** Completed Successfully ***" | ||||
|  | ||||
|         if [[ $goodbye == "Y" ]]; then | ||||
|         if [[ $shutdown == "Y" ]]; then | ||||
|           shopt -s expand_aliases | ||||
|           bye | ||||
|         fi | ||||
|  | ||||
| @@ -223,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: | | ||||
| @@ -240,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" | ||||
| @@ -265,21 +283,38 @@ | ||||
|       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 | ||||
|         unset clean | ||||
|         unset network | ||||
|         du_params="-ha" | ||||
|         while (( $# > 0 )); do | ||||
|           case $1 in | ||||
|             -c | -y | --clean ) | ||||
|               clean="Y" ;; | ||||
|             -n | -net | --network ) | ||||
|               network="Y" ;; | ||||
|             -s | -sum | --summarize ) | ||||
|               du_params="-sh" ;; | ||||
|             * ) | ||||
|               echo " | ||||
|                 ERROR: Option '$1' with value '$2' not recognized. | ||||
|                 $PROG [-c|-y|--clean] [-n|-net|--network] | ||||
|                 $PROG [-c | -y | --clean] [-n | -net | --network] \ | ||||
|                 [-s | -sum | --summarize] | ||||
|               " >&2 | ||||
|               return 1 | ||||
|               ;; | ||||
| @@ -307,8 +342,8 @@ | ||||
|           echo "Checking $dir..." | ||||
|           $sudo find $dir -name TRASH | while read trash; do | ||||
|             if [[ "$trash" != "" && `$sudo ls -a $trash` ]]; then | ||||
|               echo "Found $trash with contents:" | ||||
|               $sudo du -ha $trash | sort -h | ||||
|               echo "Found $trash:" | ||||
|               $sudo du $du_params $trash | sort -h | ||||
|               if [[ "$clean" == "Y" ]]; then | ||||
|                 echo "Cleaning trash..." | ||||
|                 $sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *" | ||||
| @@ -317,8 +352,8 @@ | ||||
|           done | ||||
|           $sudo find $dir $maxdepth -name "*"Trash"*" | while read trash; do | ||||
|             if [[ "$trash" != "" && `$sudo ls -a $trash` ]]; then | ||||
|               echo "Found $trash with contents:" | ||||
|               $sudo du -ha $trash | sort -h | ||||
|               echo "Found $trash:" | ||||
|               $sudo du $du_params $trash | sort -h | ||||
|               if [[ "$clean" == "Y" ]]; then | ||||
|                 echo "Cleaning trash..." | ||||
|                 $sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *" | ||||
| @@ -334,8 +369,8 @@ | ||||
|             echo "Checking $dir..." | ||||
|             sudo find $dir -name TRASH | while read trash; do | ||||
|               if [[ "$trash" != "" && `sudo ls -a $trash` ]]; then | ||||
|                 echo "Found $trash with contents:" | ||||
|                 sudo du -ha $trash | sort -h | ||||
|                 echo "Found $trash:" | ||||
|                 sudo du $du_params $trash | sort -h | ||||
|                 if [[ "$clean" == "Y" ]]; then | ||||
|                   echo "Cleaning trash..." | ||||
|                   sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *" | ||||
| @@ -344,8 +379,8 @@ | ||||
|             done | ||||
|             sudo find $dir -name .Trash"*" | while read trash; do | ||||
|               if [[ "$trash" != "" && `sudo ls -a $trash` ]]; then | ||||
|                 echo "Found $trash with contents:" | ||||
|                 sudo du -ha $trash | sort -h | ||||
|                 echo "Found $trash:" | ||||
|                 sudo du $du_params $trash | sort -h | ||||
|                 if [[ "$clean" == "Y" ]]; then | ||||
|                   echo "Cleaning trash..." | ||||
|                   sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *" | ||||
| @@ -356,14 +391,31 @@ | ||||
|         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" | ||||
|     alias_clean_trash: alias clean-trash='check-trash --clean' | ||||
|     alias_trash_check: alias trash-check='check-trash' | ||||
|     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 df -h | ||||
|         check-trash --clean | ||||
|         sudo df -h | ||||
|         clean-trash | ||||
|         clean-code | ||||
|         clean-backups | ||||
|       } | ||||
|     function_flatpak_usage: | | ||||
|       function flatpak-usage() { | ||||
| @@ -375,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 && | ||||
| @@ -386,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 | ||||
| @@ -432,18 +530,59 @@ | ||||
|         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." | ||||
|         ls -d ~/Code/* | while read project; do | ||||
|           echo "*** `basename $project` ***" | ||||
|           if [[ ! -d $project ]]; then | ||||
|             continue | ||||
|           fi | ||||
|           echo -e "\n*** `basename $project` ***" | ||||
|           cd $project | ||||
|           git pull | ||||
|           git push | ||||
|           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 | ||||
|             echo "Not a Git project, skipping!" | ||||
|           fi | ||||
|         done | ||||
|         echo -e "\nDone!" | ||||
|       ' | ||||
|       alias code-sync='code-check' | ||||
|     alias_code_reset: | | ||||
|       alias code-reset=' | ||||
|         ls -d ~/Code/* | while read project | ||||
| @@ -456,23 +595,64 @@ | ||||
|           git checkout dev | ||||
|         done | ||||
|       ' | ||||
|     alias_code_reseed: | | ||||
|       alias code-reseed=' | ||||
|         unseed_dir="$HOME/TRASH/`date +%Y-%m-%d`_UnseededCodeProjects" | ||||
|     function_code_reseed: | | ||||
|       function git_projects_to_sync { | ||||
|         # Projects should be followed by the current development branch name. | ||||
|         cat <<- EOF | ||||
|           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 { | ||||
|         # 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/*{ansible,docker,nix,break,website,www,tictactoe,-dev}* \ | ||||
|           "$unseed_dir"/ 2>/dev/null | ||||
|         git clone git@github.com:Hyperling/Ansible \ | ||||
|           --branch dev ~/Code/ansible-dev | ||||
|         git clone git@github.com:Hyperling/Docker \ | ||||
|           --branch dev ~/Code/docker-dev | ||||
|         git clone git@github.com:Hyperling/Website \ | ||||
|           --branch dev ~/Code/website-dev | ||||
|         git clone git@github.com:Hyperling/BreakTheHabit \ | ||||
|           --branch dev ~/Code/breakthehabit-dev | ||||
|         git clone git@github.com:Hyperling/TicTacToeAndroid \ | ||||
|           --branch dev ~/Code/tictactoe-dev | ||||
|       ' | ||||
|         mv -v ~/Code/* "$unseed_dir"/ 2>/dev/null | ||||
|  | ||||
|         # Git repo information. | ||||
|         git_repo_ssh={{ git_repo_ssh }} | ||||
|         git_main_project={{ git_project }} | ||||
|         git_repo_ssh_basename=${git_repo_ssh//$git_main_project/} | ||||
|  | ||||
|         # Loop over project list. | ||||
|         git_projects_to_sync | while read git_project git_branch; do | ||||
|           echo -e "\n*** $git_project ***" | ||||
|  | ||||
|           # Project folder manipulation. | ||||
|           dest_folder="$git_project" | ||||
|           if [[ "$dest_folder" == "flutter-"* ]]; then | ||||
|             echo "Using '_' for Flutter Project" | ||||
|             dest_folder="${dest_folder//-/_}" | ||||
|           fi | ||||
|  | ||||
|           # Download of the project. | ||||
|           git clone ${git_repo_ssh_basename}${git_project} \ | ||||
|             --branch $git_branch ~/Code/$dest_folder | ||||
|         done | ||||
|       } | ||||
|     function_clean_filenames: | | ||||
|       function clean-filenames() { | ||||
|         # Must provide the directory you'd like to clean all the filenames in. | ||||
| @@ -503,7 +683,7 @@ | ||||
|         echo -e "\nDone!\n" | ||||
|       } | ||||
|     alias_clone: | | ||||
|       alias clone="rsync -auPh --delete" | ||||
|       alias clone="rsync -auPhz --delete --exclude '.gradle' --exclude 'app/build'" | ||||
|     export_hyperling: | | ||||
|       export HYPERLING6="2a07:e03:3:80::1" | ||||
|       export HYPERLING4="185.130.47.173" | ||||
| @@ -513,10 +693,345 @@ | ||||
|       if [[ -e $DOCKER_SOURCE && $LOGNAME == "root" ]]; then | ||||
|         source $DOCKER_SOURCE | ||||
|       fi | ||||
|     alias_scan: | | ||||
|       alias scan="nmap -A -p- --script=vuln" | ||||
|     alias_prod: | | ||||
|       alias prod="ssh -p {{ prod_port }} {{ prod_user }}@{{ prod_host }}" | ||||
|     function_clean_code: | | ||||
|       function clean-code { | ||||
|         echo -e "******* Android *******\n*** Build Caches ***" | ||||
|         find ~/Code/android-*/app -maxdepth 1 -type d -name "build" \ | ||||
|           -exec du -hs {} \; -exec rm -rf {} \; | ||||
|         echo -e "\n*** Gradle Caches ***" | ||||
|         find ~/Code/android-*/ -maxdepth 1 -type d -name ".gradle" \ | ||||
|           -exec du -hs {} \; -exec rm -rf {} \; | ||||
|  | ||||
|         echo -e "******* Flutter *******" | ||||
|         ls ~/Code | grep flutter | while read project; do | ||||
|           cd ~/Code/$project | ||||
|           pwd | ||||
|           flutter clean | ||||
|           echo -e "\n" | ||||
|         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" | ||||
|     alias_kill_battery: | | ||||
|       alias kill-battery="stress -c 1k" | ||||
|       alias waste-battery="kill-battery" | ||||
|       alias battery-killer="kill-battery" | ||||
|       alias battery-waster="kill-battery" | ||||
|     alias_kill_system: | | ||||
|       alias kill-system="stress -c 1k -i 1k -m 1k -d 1k" | ||||
|       alias die="kill-system" | ||||
|       alias lockup="kill-system" | ||||
|       alias freeze="kill-system" | ||||
|       alias system-killer="kill-system" | ||||
|     function_update_sdks: | | ||||
|       if [[ "$workstation" == "true" && "$coding" == "true" ]]; then | ||||
|         function update-sdks { | ||||
|           echo -e "******* Update SDKs *******\n*** Android - START ***" | ||||
|           yes | sdkmanager --update | ||||
|           yes | sdkmanager --licenses | ||||
|           echo -ne "*** Android - END ***" | ||||
|  | ||||
|           echo -e "\n*** Flutter - START ***" | ||||
|           flutter upgrade | ||||
|           yes | flutter doctor --android-licenses | ||||
|           echo -ne "*** Flutter - END ***" | ||||
|  | ||||
|           echo -e "\n******* Done! *******" | ||||
|         } | ||||
|         alias update-sdk="update-sdks" | ||||
|         alias sdk-update="update-sdks" | ||||
|         alias sdk-updater="update-sdks" | ||||
|       fi | ||||
|     function_ansible_vars: | | ||||
|       function ansible-var-list { | ||||
|         cat << EOF | ||||
|           provision | ||||
|           battery | ||||
|           workstation | ||||
|           coding | ||||
|           editing | ||||
|           gaming | ||||
|           mobile | ||||
|           server | ||||
|           domain | ||||
|       EOF | ||||
|       } | ||||
|       function ansible-vars { | ||||
|         ansible-var-list | while read var; do | ||||
|           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: | | ||||
|       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: | ||||
|     rc_common: | | ||||
|       # Fixes "command not found" when using aliases within functions. | ||||
|       shopt -s expand_aliases | ||||
|  | ||||
|       # Variables for conditionals and quickly checking system setup. | ||||
|       typeset -l provision battery workstation coding editing gaming mobile server domain | ||||
|       export provision="{{ provision }}" | ||||
|       export battery="{{ battery }}" | ||||
|       export workstation="{{ workstation }}" | ||||
|       export coding="{{ coding }}" | ||||
|       export editing="{{ editing }}" | ||||
|       export gaming="{{ gaming }}" | ||||
|       export mobile="{{ mobile }}" | ||||
|       export server="{{ server }}" | ||||
|       export domain="{{ domain }}" | ||||
|  | ||||
|       {{ export_path_additions }} | ||||
|       {{ alias_cp }} | ||||
|       {{ alias_mv }} | ||||
| @@ -535,24 +1050,47 @@ | ||||
|       {{ 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 }} | ||||
|       {{ alias_code_reseed }} | ||||
|       {{ function_code_reseed }} | ||||
|       {{ function_clean_filenames }} | ||||
|       {{ function_clean_filenames_tree }} | ||||
|       {{ alias_clone }} | ||||
|       {{ export_hyperling }} | ||||
|       {{ source_docker_env }} | ||||
|       {{ alias_scan }} | ||||
|       {{ alias_prod }} | ||||
|       {{ function_clean_code }} | ||||
|       {{ alias_kill_battery }} | ||||
|       {{ 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_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 {{ repo_local }} --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,9 +6,7 @@ | ||||
|     path: "{{ user_root.home }}/bin/scm.sh" | ||||
|     block: | | ||||
|       # 20210211 - Make life easier! | ||||
|       git clone {{ repo_github }} ansible-pull | ||||
|       ansible-pull/setup.sh | ||||
|       mv ansible-pull ~/TRASH/ | ||||
|       time {{ ansible_pull_exec.stdout }} -U {{ git_repo_http }} | ||||
|     marker: '{mark}' | ||||
|     marker_begin: "#!{{ bash_exec.stdout }}" | ||||
|     marker_end: "exit 0" | ||||
| @@ -37,7 +35,7 @@ | ||||
|  | ||||
|       ## Main ## | ||||
|  | ||||
|       time {{ ansible_pull_exec.stdout }} -U {{ repo_github }} --checkout $branch | ||||
|       time {{ ansible_pull_exec.stdout }} -U {{ git_repo_http }} --checkout $branch | ||||
|  | ||||
|     marker: '{mark}' | ||||
|     marker_begin: "#!{{ bash_exec.stdout }}" | ||||
|   | ||||
| @@ -6,9 +6,7 @@ | ||||
|     path: "{{ user_user.home }}/bin/scm.sh" | ||||
|     block: | | ||||
|       # 20210211 - Make life easier! | ||||
|       git clone {{ repo_github }} ansible-pull | ||||
|       ansible-pull/setup.sh | ||||
|       mv ansible-pull ~/TRASH/ | ||||
|       time {{ ansible_pull_exec.stdout }} -U {{ git_repo_http }} | ||||
|     marker: '{mark}' | ||||
|     marker_begin: "#!{{ bash_exec.stdout }}" | ||||
|     marker_end: "exit 0" | ||||
| @@ -37,7 +35,7 @@ | ||||
|  | ||||
|       ## Main ## | ||||
|  | ||||
|       time sudo {{ ansible_pull_exec.stdout }} -U {{ repo_github }} --checkout $branch | ||||
|       time sudo {{ ansible_pull_exec.stdout }} -U {{ git_repo_http }} --checkout $branch | ||||
|  | ||||
|     marker: '{mark}' | ||||
|     marker_begin: "#!{{ bash_exec.stdout }}" | ||||
|   | ||||
							
								
								
									
										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") | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| --- | ||||
| # Update the Nix configuration at github.com/Hyperling/NixOS. | ||||
| # Update the Nix configuration at git.hyperling.com/me/env-nixos. | ||||
| # This is also done in setup.sh if ansible is not found. | ||||
|  | ||||
| - name: General | Software | NixOS | Facts | ||||
| @@ -19,7 +19,7 @@ | ||||
|   blockinfile: | ||||
|     path: /etc/nixos/ansible.nix | ||||
|     block: | | ||||
|       # This file was created by https://github.com/Hyperling/Ansible | ||||
|       # This file was created by https://git.hyperling.com/me/env-ansible | ||||
|       # Please do not alter it by hand. Use the proper ini files instead. | ||||
|       { config, pkgs, nix, ... }: | ||||
|  | ||||
|   | ||||
| @@ -43,7 +43,7 @@ | ||||
|     - bash | ||||
|     - sudo | ||||
|     - nmap | ||||
|     - neofetch | ||||
|     - "{{ neofetch }}" | ||||
|     - "{{ sshfs }}" | ||||
|     - "{{ locate }}" | ||||
|     - zsh | ||||
| @@ -55,6 +55,11 @@ | ||||
|     - vim | ||||
|     - "{{ cron }}" | ||||
|     - "{{ encfs }}" | ||||
|     - rsync | ||||
|     - "{{ iftop }}" | ||||
|     - "{{ nethogs }}" | ||||
|     - "{{ ntp_server }}" | ||||
|     - "{{ dig }}" | ||||
|     state: present | ||||
|  | ||||
| - name: General | Software | Packages | Install Software (DEV) | ||||
| @@ -136,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 | ||||
|   | ||||
| @@ -9,20 +9,17 @@ | ||||
|   set_fact: | ||||
|     lynis_temp_file: "{{ lynis_file }}.tmp" | ||||
|  | ||||
| - name: General | Tests | Lynis | Rename Old Install | ||||
|   shell: mv "/usr/local/lynis" "/usr/local/src/" | ||||
|   ignore_errors: yes | ||||
|  | ||||
| - name: General | Tests | Lynis | Install | ||||
|   git:  | ||||
|   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!) | ||||
|   file:  | ||||
|   file: | ||||
|     path: "{{ lynis_install_dir }}" | ||||
|     state: directory | ||||
|     mode: '0644' | ||||
| @@ -31,12 +28,12 @@ | ||||
|     recurse: yes | ||||
|  | ||||
| - name: General | Tests | Lynis | Ensure Permissions 2 | ||||
|   file:  | ||||
|   file: | ||||
|     path: "{{ lynis_install_dir }}/lynis" | ||||
|     mode: '0755' | ||||
|  | ||||
| - name: General | Tests | Lynis | Ensure Folder Permissions | ||||
|   file:  | ||||
|   file: | ||||
|     path: "{{ lynis_install_dir }}" | ||||
|     state: directory | ||||
|     mode: '0755' | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -1,191 +0,0 @@ | ||||
| --- | ||||
| # Webserver to replace calling GitHub for projects. | ||||
| # https://www.howtoforge.com/how-to-install-http-git-server-with-nginx-on-debian-11/ | ||||
|  | ||||
| #TODO: Use gitweb instead??? I knew there was an easier way than apache/nginx/python stuff... | ||||
| # https://git-scm.com/docs/gitweb | ||||
|  | ||||
| # Gitweb is nice but doesn;t seem like it allowes cloning.  | ||||
| # Need to figure out how to get git:// to work, fix SSL locally, or somehow use http local and https when external.. | ||||
|  | ||||
|  | ||||
| ## Variables ## | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Check Config Variables | ||||
|   debug:  | ||||
|     var: "{{ item }}" | ||||
|   loop: | ||||
|     - git_name | ||||
|     - git_branch | ||||
|     - git_url | ||||
|     - git_sep | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Split Config Variables To Array | ||||
|   set_fact: | ||||
|     git_names: "{{ git_name.split(git_sep) }}" | ||||
|     git_branches: "{{ git_branch.split(git_sep) }}" | ||||
|     git_urls: "{{ git_url.split(git_sep) }}" | ||||
|     git_projects: [] | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Check Arrays | ||||
|   debug:  | ||||
|     var: "{{ item }}" | ||||
|   loop: | ||||
|     - git_names | ||||
|     - git_branches | ||||
|     - git_urls | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Build Dictionary | ||||
|   set_fact: | ||||
|     git_projects: "{{ git_projects + [{ 'name': git_names[item], 'branch': git_branches[item], 'url': git_urls[item]  }] }}" | ||||
|   loop: "{{ range(0, git_names|length) | list }}" | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Display Dictionary | ||||
|   debug:  | ||||
|     var: git_projects | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Variables 1 | ||||
|   set_fact:  | ||||
|     git_web_root: /var/www/html/git | ||||
|     git_config_file: /etc/nginx/conf.d/git.conf | ||||
|     git_nginx_user: www-data | ||||
|     git_ssl_dir: /usr/local/etc/ssl/private | ||||
|     git_ssl_cert_name: cert.pem | ||||
|     git_ssl_key_name: key.pem | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Variables 2 | ||||
|   set_fact:  | ||||
|     git_cron_commands: "git pull --rebase && cd {{ git_web_root }}/ && chown -R {{ git_nginx_user }} . && chmod -R 775 ." | ||||
|     git_ssl_cert: "{{ git_ssl_dir }}/{{ git_ssl_cert_name }}" | ||||
|     git_ssl_key: "{{ git_ssl_dir }}/{{ git_ssl_key_name }}" | ||||
|  | ||||
|  | ||||
| ## Pre-reqs ## | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Install | ||||
|   package:  | ||||
|     name: | ||||
|       - nginx | ||||
|       - git | ||||
|       - fcgiwrap | ||||
|       - apache2-utils | ||||
|       - unzip | ||||
|     state: present | ||||
|   when: ansible_pkg_mgr == "apt" | ||||
|    | ||||
| - name: Server | Software | HTTPS Git Server | SSL Certificate | ||||
|   shell: "{{ item }}" | ||||
|   loop: | ||||
|     - mkdir -p {{ git_ssl_dir }}  | ||||
|     - openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout {{ git_ssl_key }} -out {{ git_ssl_cert }} -subj "/C=XX/ST=STATELESS/L=HOMELAB/O={{ domain }}/OU=Git Server/CN={{ domain }}" | ||||
|  | ||||
|  | ||||
| ## Repositories ## | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Delete | ||||
|   file: | ||||
|     path: "{{ git_web_root }}" | ||||
|     state: absent | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Download | ||||
|   git:  | ||||
|     repo: "{{ item.url }}" | ||||
|     dest: "{{ git_web_root }}/{{ item.name }}.git" | ||||
|     version: "{{ item.branch }}" | ||||
|     clone: yes | ||||
|     force: yes | ||||
|   ignore_errors: yes | ||||
|   loop: "{{ git_projects }}" | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Permissions | ||||
|   file: | ||||
|     path: "{{ git_web_root }}/{{ item.name }}.git" | ||||
|     state: directory | ||||
|     mode: '755' | ||||
|     owner: "{{ git_nginx_user }}" | ||||
|     group: "{{ git_nginx_user }}" | ||||
|     recurse: yes | ||||
|   loop: "{{ git_projects }}" | ||||
|  | ||||
|  | ||||
| ## NGINX ## | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Index | ||||
|   blockinfile: | ||||
|     path: "{{ git_web_root }}/index.html" | ||||
|     block: | | ||||
|       {{ item.name }}.git is cloned from {{ item.url }} using branch {{ item.branch }}. | ||||
|     state: present | ||||
|     mode: '755' | ||||
|     owner: "{{ git_nginx_user }}" | ||||
|     group: "{{ git_nginx_user }}" | ||||
|     create: yes | ||||
|     backup: yes | ||||
|     marker: "<!-- {mark} {{ item.name }} -->" | ||||
|   loop: "{{ git_projects }}" | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Config | ||||
|   blockinfile: | ||||
|     path: "{{ git_config_file }}" | ||||
|     block: | | ||||
|       server { | ||||
|         listen 443; | ||||
|         server_name {{ ansible_hostname }}.{{ domain }}; | ||||
|  | ||||
|         ssl_certificate {{ git_ssl_cert }}; | ||||
|         ssl_certificate_key {{ git_ssl_key }}; | ||||
|        | ||||
|         root {{ git_web_root }}; | ||||
|        | ||||
|         # Add index.php to the list if you are using PHP | ||||
|         index index.html; | ||||
|         #autoindex on; | ||||
|        | ||||
|         location / { | ||||
|           # First attempt to serve request as file, then | ||||
|           # as directory, then fall back to displaying a 404. | ||||
|           try_files $uri $uri/ =404; | ||||
|         } | ||||
|        | ||||
|         location ~ (/.*) { | ||||
|           client_max_body_size 0; | ||||
|           #auth_basic "Hyperling's Git Login"; | ||||
|           #auth_basic_user_file "{{ git_web_root }}/htpasswd"; | ||||
|           include /etc/nginx/fastcgi_params; | ||||
|           fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; | ||||
|           fastcgi_param GIT_HTTP_EXPORT_ALL ""; | ||||
|           fastcgi_param GIT_PROJECT_ROOT {{ git_web_root }}; | ||||
|           fastcgi_param REMOTE_USER $remote_user; | ||||
|           fastcgi_param PATH_INFO $1; | ||||
|           fastcgi_pass unix:/var/run/fcgiwrap.socket; | ||||
|         } | ||||
|       } | ||||
|     state: present | ||||
|     mode: '755' | ||||
|     create: yes | ||||
|     backup: yes | ||||
|     marker: "# {mark} Managed By Ansible Git Server Playbook -->" | ||||
|      | ||||
| - name: Server | Software | HTTPS Git Server | Service | ||||
|   service: | ||||
|     name: nginx | ||||
|     pattern: nginx | ||||
|     enabled: yes | ||||
|     state: restarted | ||||
|  | ||||
|  | ||||
| ## Cron ## | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Cron | Hourly | ||||
|   cron: | ||||
|     name: "{{ item.name }} hourly" | ||||
|     special_time: hourly | ||||
|     job: "cd {{ git_web_root }}/{{ item.name }}.git && {{ git_cron_commands }}" | ||||
|   loop: "{{ git_projects }}" | ||||
|  | ||||
| - name: Server | Software | HTTPS Git Server | Cron | Reboot | ||||
|   cron: | ||||
|     name: "{{ item.name }} reboot" | ||||
|     special_time: reboot | ||||
|     job: "cd {{ git_web_root }}/{{ item.name }}.git && {{ git_cron_commands }}" | ||||
|   loop: "{{ git_projects }}" | ||||
| @@ -1,106 +0,0 @@ | ||||
| --- | ||||
| # Install a Gitlab server for hosting software projects. | ||||
|  | ||||
| ##  Checks ## | ||||
|  | ||||
| - name: "Server | Software | GitLab | Checks | Host Variable [gitlab]={{ gitlab }}" | ||||
|   shell: echo "ERROR! Variable has an invalid value!" && exit 1 | ||||
|   when: gitlab not in ("ee", "ce") | ||||
|  | ||||
| - name: "Server | Software | GitLab | Checks | Host Variable [gitlab_url]={{ gitlab_url }}" | ||||
|   set_fact: | ||||
|     gitlab_url: "https://gitlab" | ||||
|   when: gitlab_url is not defined or not gitlab | ||||
|  | ||||
| - name: Server | Software | GitLab | Checks | Play Variables | ||||
|   set_fact: | ||||
|     gitlab_bundle: "gitlab-{{ gitlab }}" | ||||
|     gitlab_config: /etc/gitlab/gitlab.rb | ||||
|  | ||||
| # Ensure other version is not installed. | ||||
| - name: Server | Software | GitLab | Checks | Remove EE | ||||
|   package: | ||||
|     name: gitlab-ee | ||||
|     state: absent | ||||
|   when: gitlab == "ce" | ||||
|  | ||||
| - name: Server | Software | GitLab | Checks | Remove CE | ||||
|   package: | ||||
|     name: gitlab-ce | ||||
|     state: absent | ||||
|   when: gitlab == "ee" | ||||
|  | ||||
|  | ||||
| ## Install ## | ||||
| # https://about.gitlab.com/install/?version=ce#ubuntu | ||||
| # https://about.gitlab.com/install/?version=ce#centos-8 (Fedora) | ||||
|  | ||||
| - name: Server | Software | GitLab | Install | Check | ||||
|   shell: which gitlab-ctl | ||||
|   ignore_errors: yes | ||||
|   register: gitlab_installed | ||||
|  | ||||
| - name: Server | Software | GitLab | Install | Pre-Reqs | ||||
|   package: | ||||
|     update_cache: yes | ||||
|     name:  | ||||
|       - curl  | ||||
|       - openssh-server  | ||||
|       - ca-certificates  | ||||
|       - tzdata  | ||||
|       - perl | ||||
|       - postfix | ||||
|     state: present  | ||||
|   when:  gitlab_installed.failed | ||||
|    | ||||
| - name: Server | Software | GitLab | Install | Add Repo (apt) | ||||
|   shell: curl https://packages.gitlab.com/install/repositories/gitlab/{{ gitlab_bundle }}/script.deb.sh | bash | ||||
|   when:  gitlab_installed.failed and ansible_pkg_mgr == "apt" | ||||
|    | ||||
| - name: Server | Software | GitLab | Install | Add Repo (dnf) | ||||
|   shell: curl https://packages.gitlab.com/install/repositories/gitlab/{{ gitlab_bundle }}/script.rpm.sh | bash | ||||
|   when:  gitlab_installed.failed and ansible_pkg_mgr == "dnf" | ||||
|  | ||||
| - name: Server | Software | GitLab | Install | Install | ||||
|   shell: EXTERNAL_URL="{{ gitlab_url | replace("https","http") }}.{{ domain }}" {{ ansible_pkg_mgr }} install -y {{ gitlab_bundle }} | ||||
|   when:  gitlab_installed.failed | ||||
|  | ||||
| - name: Server | Software | GitLab | Install | Get Password | ||||
|   shell: cat /etc/gitlab/initial_root_password && cp /etc/gitlab/initial_root_password ~/ | ||||
|   register: gitlab_passwd | ||||
|   when:  gitlab_installed.failed | ||||
|  | ||||
| - name: Server | Software | GitLab | Install | Print Password | ||||
|   debug:  | ||||
|     var: gitlab_passwd.stdout_lines | ||||
|   when:  gitlab_installed.failed | ||||
|  | ||||
|  | ||||
| ## Configuration ## | ||||
| # https://docs.gitlab.com/ee/install/next_steps.html | ||||
|  | ||||
| # Need to make server think it's https but not actually listen for it, otherwise reverse proxy doesn't work. | ||||
| # https://www.itsfullofstars.de/2019/06/gitlab-behind-a-reverse-proxy/ | ||||
|  | ||||
| - name: Server | Software | GitLab | Configure | Check External URL | ||||
|   lineinfile: | ||||
|     path: "{{ gitlab_config }}" | ||||
|     regexp: '^external_url ' | ||||
|     line: "external_url '{{ gitlab_url }}.{{ domain }}' # Managed by Ansible" | ||||
|     state: present | ||||
|     create: yes | ||||
|     backup: yes | ||||
|  | ||||
| - name: Server | Software | GitLab | Configure | Turn Off Serving Local SSL | ||||
|   blockinfile: | ||||
|     path: "{{ gitlab_config }}" | ||||
|     block: | | ||||
|       nginx['listen_port'] = 80 | ||||
|       nginx['listen_https'] = false | ||||
|     marker: "# {mark} MANAGED BY ANSIBLE - {{ gitlab_config }}" | ||||
|     state: present | ||||
|     create: yes | ||||
|     backup: yes | ||||
|  | ||||
| - name: Server | Software | GitLab | Configure | Reconfigure | ||||
|   shell: gitlab-ctl reconfigure | ||||
| @@ -4,7 +4,7 @@ | ||||
| # General # | ||||
|  | ||||
| - name: Workstation | FreeBSD | Software | Packages | General | Install | ||||
|   package:  | ||||
|   package: | ||||
|     name: | ||||
|     - "{{ firefox_esr }}" | ||||
|     - "{{ evolution }}" | ||||
| @@ -13,7 +13,7 @@ | ||||
|     state: present | ||||
|  | ||||
| - name: Workstation | FreeBSD | Software | Packages | General | Uninstall Bloat | ||||
|   package:  | ||||
|   package: | ||||
|     name: | ||||
|     - "{{ firefox }}" | ||||
|     - "{{ thunderbird }}" | ||||
| @@ -22,14 +22,14 @@ | ||||
| # Coding # | ||||
|  | ||||
| - name: Workstation | FreeBSD | Software | Packages | Coding | Install | ||||
|   package:  | ||||
|   package: | ||||
|     name: | ||||
|     - vscode | ||||
|     state: present | ||||
|   when: coding == true | ||||
|  | ||||
| - name: Workstation | FreeBSD | Software | Packages | Coding | Install | ||||
|   package:  | ||||
|   package: | ||||
|     name: | ||||
|     - vscode | ||||
|     state: absent | ||||
| @@ -38,27 +38,27 @@ | ||||
| # Media Editors # | ||||
|  | ||||
| - name: Workstation | FreeBSD | Software | Packages | Editing | Install | ||||
|   package:  | ||||
|   package: | ||||
|     name: | ||||
|     - gimp | ||||
|     - shotcut | ||||
|     - obs-studio | ||||
|     state: present | ||||
|   when: editing == true | ||||
|   when: editing in (true, "video") | ||||
|  | ||||
| - name: Workstation | FreeBSD | Software | Packages | Editing | Install | ||||
|   package:  | ||||
|   package: | ||||
|     name: | ||||
|     - gimp | ||||
|     - shotcut | ||||
|     - obs-studio | ||||
|     state: absent | ||||
|   when: not editing == true | ||||
|   when: not editing in (true, "video") | ||||
|  | ||||
| # Gaming # | ||||
|  | ||||
| - name: Workstation | FreeBSD | Software | Packages | Gaming | Install | ||||
|   package:  | ||||
|   package: | ||||
|     name: | ||||
|     - 0ad | ||||
|     - supertuxkart | ||||
| @@ -66,7 +66,7 @@ | ||||
|   when: gaming == true | ||||
|  | ||||
| - name: Workstation | FreeBSD | Software | Packages | Gaming | Install | ||||
|   package:  | ||||
|   package: | ||||
|     name: | ||||
|     - 0ad | ||||
|     - supertuxkart | ||||
|   | ||||
							
								
								
									
										359
									
								
								tasks/workstation/linux/software/android.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										359
									
								
								tasks/workstation/linux/software/android.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,359 @@ | ||||
| --- | ||||
| # Android Studio (and SDK?). Copied and adjusted from Flutter playbook. | ||||
| # https://wiki.debian.org/AndroidStudio | ||||
| # https://developer.android.com/studio/install | ||||
|  | ||||
| ## Facts ## | ||||
|  | ||||
| # Studio download URLs: | ||||
| #   https://developer.android.com/studio/archive | ||||
| # Current version: | ||||
| #   https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2024.2.2.14/android-studio-2024.2.2.14-linux.tar.gz | ||||
| # Command-line tools is all Flutter actually needs: | ||||
| #   https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | Facts [1/3] | ||||
|   set_fact: | ||||
|     android_url: "https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip" | ||||
|     android_download_file: "{{ user_user.home }}/Downloads/android-cmdline-tools.tar.xz" | ||||
|     android_sdk_location: "{{ user_user.home }}/SDKs/Android/Sdk" | ||||
|     android_report_file: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.sdk.android.txt" | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | Facts [2/3] | ||||
|   set_fact: | ||||
|     android_bin_location: "{{ android_sdk_location }}/platform-tools" | ||||
|     android_sdk_cmdline_temp: "{{ android_sdk_location }}/ansible" | ||||
|     android_sdk_cmdline_final: "{{ android_sdk_location }}/cmdline-tools/latest/bin" | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | Facts [3/3] | ||||
|   set_fact: | ||||
|     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 | ||||
|  | ||||
| ## Packages ## | ||||
|  | ||||
| # https://docs.flutter.dev/get-started/install/linux/android | ||||
| - name: Workstation | Linux | Software | Android | Dependencies [Install] | ||||
|   package: | ||||
|     name: | ||||
|       - default-jdk | ||||
|       - libc6 | ||||
|       - libncurses5 | ||||
|       - libstdc++6 | ||||
|       - lib32z1 | ||||
|       - libbz2-1.0 | ||||
|     state: present | ||||
|   when: coding == true | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | Dependencies [Remove] | ||||
|   package: | ||||
|     name: | ||||
|       - sdkmanager | ||||
|     state: absent | ||||
|   when: coding == true | ||||
|  | ||||
| ## Install SDK ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | SDK | ||||
|   block: | ||||
|  | ||||
|   - name: Workstation | Linux | Software | Android | Download Commandline Tools | ||||
|     get_url: | ||||
|       url: "{{ android_url }}" | ||||
|       dest: "{{ android_download_file }}" | ||||
|       owner: "{{ user }}" | ||||
|       group: "{{ user }}" | ||||
|       mode: '0664' | ||||
|     when: not android_download_stat.stat.exists | ||||
|  | ||||
|   - name: Workstation | Linux | Software | Android | Create Folder | ||||
|     file: | ||||
|       path: "{{ android_sdk_cmdline_temp }}" | ||||
|       state: directory | ||||
|       owner: "{{ user }}" | ||||
|       group: "{{ user }}" | ||||
|       mode: '0755' | ||||
|  | ||||
|   - name: Workstation | Linux | Software | Android | Extract Tools | ||||
|     unarchive: | ||||
|       src: "{{ android_download_file }}" | ||||
|       dest: "{{ android_sdk_cmdline_temp }}" | ||||
|       owner: "{{ user }}" | ||||
|       group: "{{ user }}" | ||||
|  | ||||
|   become_user: "{{ user }}" | ||||
|   when: coding == true and not android_sdkmanager_temp_stat.stat.exists | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | Delete Archive | ||||
|   file: | ||||
|     path: "{{ android_download_file }}" | ||||
|     state: absent | ||||
|  | ||||
| ## Configure Modules ## | ||||
|  | ||||
| # This can only be run once, otherwise cmdline-tools creates latest-* folders. | ||||
| - name: Workstation | Linux | Software | Android | Install | Consistent Modules | ||||
|   shell: "yes | {{ android_sdkmanager_temp }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}" | ||||
|   loop: | ||||
|     # Current | ||||
|     - cmdline-tools;latest | ||||
|     - platform-tools | ||||
|     - emulator | ||||
|   become_user: "{{ user }}" | ||||
|   when: coding == true and not android_sdkmanager_final_stat.stat.exists | ||||
|  | ||||
| # These are safe to run multiple times, and uses the new `latest` version. | ||||
| - name: Workstation | Linux | Software | Android | Install | Required Modules | ||||
|   shell: "yes | {{ android_sdkmanager_final }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}" | ||||
|   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 | License Agreements [1/2] | ||||
|   shell: "yes | {{ android_sdkmanager_final }} --licenses --sdk_root={{ android_sdk_location }}" | ||||
|   become_user: "{{ user }}" | ||||
|   when: coding == true | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | License Agreements [2/2] | ||||
|   shell: "yes | {{ flutter }} doctor --android-licenses" | ||||
|   become_user: "{{ user }}" | ||||
|   when: coding == true | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | Refresh Flutter Doctor Report | ||||
|   shell: "{{ item }}" | ||||
|   loop: "{{ flutter_report_commands }}" | ||||
|   become_user: "{{ user }}" | ||||
|   when: coding == true | ||||
|  | ||||
| ## Configure Environment ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | Modify PATH (.bashrc) | ||||
|   blockinfile: | ||||
|     path: "{{ item }}/.bashrc" | ||||
|     block: | | ||||
|       export PATH="$PATH:{{ android_bin_location }}:{{ android_sdk_cmdline_final }}" | ||||
|     marker: '# {mark} MANAGED BY ANSIBLE | Android' | ||||
|     state: present | ||||
|     create: yes | ||||
|     backup: yes | ||||
|   loop: | ||||
|     - "{{ user_root.home }}" | ||||
|     - "{{ user_user.home }}" | ||||
|   ignore_errors: yes | ||||
|   when: coding == true and user_root.home != "" and user_user.home != "" | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | Modify PATH (.zshrc) | ||||
|   blockinfile: | ||||
|     path: "{{ item }}/.zshrc" | ||||
|     block: | | ||||
|       export PATH="$PATH:{{ android_bin_location }}:{{ android_sdk_cmdline_final }}" | ||||
|     marker: '# {mark} MANAGED BY ANSIBLE | Android' | ||||
|     state: present | ||||
|     create: yes | ||||
|     backup: yes | ||||
|   loop: | ||||
|     - "{{ user_root.home }}" | ||||
|     - "{{ user_user.home }}" | ||||
|   ignore_errors: yes | ||||
|   when: coding == true and user_root.home != "" and user_user.home != "" | ||||
|  | ||||
| ## Uninstall SDK ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | Remove SDK | ||||
|   file: | ||||
|     path: "{{ android_sdk_location }}" | ||||
|     state: absent | ||||
|   when: not coding == true | ||||
|  | ||||
| ## User Tools ## | ||||
| #   Only needed from repo if not a development device, | ||||
| #   otherwise better versions are in the SDK. | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | System Tools [Install] | ||||
|   package: | ||||
|     name: | ||||
|       - fastboot | ||||
|       - adb | ||||
|     state: present | ||||
|   when: not coding == true | ||||
|  | ||||
| - name: Workstation | Linux | Software | Android | System Tools [Remove] | ||||
|   package: | ||||
|     name: | ||||
|       - fastboot | ||||
|       - adb | ||||
|     state: absent | ||||
|   when: coding == true | ||||
| @@ -60,28 +60,21 @@ | ||||
|       - brave-browser | ||||
|       - brave-keyring | ||||
|     state: absent | ||||
|   ignore_errors: yes | ||||
|  | ||||
| - name: Workstation | Software | Brave | Remove Repo [apt] | ||||
|   shell: "{{ item }}" | ||||
|   loop: | ||||
|     - rm /etc/apt/sources.list.d/brave-browser-*.list | ||||
|     - apt update | ||||
|   shell: rm /etc/apt/sources.list.d/brave-browser-*.list && apt update || echo "Not Needed" | ||||
|   when: ansible_pkg_mgr == "apt" | ||||
|   ignore_errors: yes | ||||
|  | ||||
| - name: Workstation | Software | Brave | Remove Repo [dnf] | ||||
|   shell: "{{ item }}" | ||||
|   loop: | ||||
|     - rm /etc/yum.repos.d/brave-browser-*.repo | ||||
|     - rpm -e gpg-pubkey-c2d4e821-5e7252b8 | ||||
|     - rm /etc/yum.repos.d/brave-browser-*.repo || echo "Not Needed" | ||||
|     - rpm -e gpg-pubkey-c2d4e821-5e7252b8 || echo "Not Needed" | ||||
|   when: ansible_pkg_mgr == "dnf" | ||||
|   ignore_errors: yes | ||||
|  | ||||
| - name: Workstation | Software | Brave | Remove Repo [zypper] | ||||
|   shell: "{{ item }}" | ||||
|   loop: | ||||
|     - zypper removerepo brave-browser | ||||
|     - rpm -e gpg-pubkey-c2d4e821-5e7252b8 | ||||
|     - zypper removerepo brave-browser || echo "Not Needed" | ||||
|     - rpm -e gpg-pubkey-c2d4e821-5e7252b8 || echo "Not Needed" | ||||
|   when: ansible_pkg_mgr == "zypper" | ||||
|   ignore_errors: yes | ||||
|   | ||||
| @@ -24,7 +24,6 @@ | ||||
|     method: system | ||||
|     flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo | ||||
|  | ||||
|  | ||||
| ## Flatpak Installs ## | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Variables | ||||
| @@ -35,24 +34,29 @@ | ||||
| - 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: "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: "org.gnome.Geary", name: "geary", extra: "" } | ||||
|       - { app: "app.grayjay.Grayjay", name: "grayjay", extra: "" } | ||||
|     flatpaks_coding: | ||||
|       - { app: "com.vscodium.codium", name: "codium", extra: "" } | ||||
|       - { 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: "" } | ||||
|     flatpaks_editing: | ||||
|       - { 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: "" } | ||||
|       - { app: "org.gimp.GIMP", name: "gimp", extra: "" } | ||||
|       - { app: "org.openshot.OpenShot", name: "openshot", extra: "" } | ||||
|     flatpaks_editing_audio: | ||||
|       - { app: "org.tenacityaudio.Tenacity", name: "tenacity", extra: "" } | ||||
|       - { app: "io.lmms.LMMS", name: "lmms", extra: "" } | ||||
|       - { app: "net.sourceforge.VMPK", name: "vmpk", extra: "" } | ||||
|     flatpaks_gaming: | ||||
|       - { app: "com.valvesoftware.Steam", name: "steam", extra: "" } | ||||
|       - { app: "com.play0ad.zeroad", name: "zeroad", extra: "" } | ||||
| @@ -66,12 +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 # | ||||
|  | ||||
| @@ -155,14 +160,62 @@ | ||||
|  | ||||
| # Media Editors # | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Installs | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Installs | ||||
|   flatpak: | ||||
|     name: "{{ item.app }}" | ||||
|     remote: flathub | ||||
|     state: present | ||||
|   loop: "{{ flatpaks_editing }}" | ||||
|   loop: "{{ flatpaks_editing_video }}" | ||||
|   ignore_errors: yes | ||||
|   when: editing == true | ||||
|   when: editing in (true, "video") | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Executables | ||||
|   blockinfile: | ||||
|     path: "{{ flatpak_exec_dir }}/{{ item.name }}" | ||||
|     block: | | ||||
|       {{ item.extra }} {{ flatpak_exec }} {{ item.app }} | ||||
|     marker: '{mark}' | ||||
|     marker_begin: "#!{{ bash_exec.stdout }}" | ||||
|     marker_end: "exit 0" | ||||
|     state: present | ||||
|     create: yes | ||||
|   loop: "{{ flatpaks_editing_video }}" | ||||
|   become_user: "{{ user }}" | ||||
|   when: editing in (true, "video") | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Executable Permissions | ||||
|   file: | ||||
|     path: "{{ flatpak_exec_dir }}/{{ item.name }}" | ||||
|     state: file | ||||
|     mode: '0755' | ||||
|   loop: "{{ flatpaks_editing_video }}" | ||||
|   when: editing in (true, "video") | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editor Uninstalls | ||||
|   flatpak: | ||||
|     name: "{{ item.app }}" | ||||
|     remote: flathub | ||||
|     state: absent | ||||
|   loop: "{{ flatpaks_editing_video }}" | ||||
|   ignore_errors: yes | ||||
|   when: not editing in (true, "video") | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Remove Executables | ||||
|   file: | ||||
|     path: "{{ flatpak_exec_dir }}/{{ item.name }}" | ||||
|     state: absent | ||||
|   loop: "{{ flatpaks_editing_video }}" | ||||
|   ignore_errors: yes | ||||
|   when: not editing in (true, "video") | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio Editors | Installs | ||||
|   flatpak: | ||||
|     name: "{{ item.app }}" | ||||
|     remote: flathub | ||||
|     state: present | ||||
|   loop: "{{ flatpaks_editing_audio }}" | ||||
|   ignore_errors: yes | ||||
|   when: editing in (true, "audio") | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executables | ||||
|   blockinfile: | ||||
| @@ -174,34 +227,34 @@ | ||||
|     marker_end: "exit 0" | ||||
|     state: present | ||||
|     create: yes | ||||
|   loop: "{{ flatpaks_editing }}" | ||||
|   loop: "{{ flatpaks_editing_audio }}" | ||||
|   become_user: "{{ user }}" | ||||
|   when: editing == true | ||||
|   when: editing in (true, "audio") | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executable Permissions | ||||
|   file: | ||||
|     path: "{{ flatpak_exec_dir }}/{{ item.name }}" | ||||
|     state: file | ||||
|     mode: '0755' | ||||
|   loop: "{{ flatpaks_editing }}" | ||||
|   when: editing == true | ||||
|   loop: "{{ flatpaks_editing_audio }}" | ||||
|   when: editing in (true, "audio") | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editor Uninstalls | ||||
|   flatpak: | ||||
|     name: "{{ item.app }}" | ||||
|     remote: flathub | ||||
|     state: absent | ||||
|   loop: "{{ flatpaks_editing }}" | ||||
|   loop: "{{ flatpaks_editing_audio }}" | ||||
|   ignore_errors: yes | ||||
|   when: not editing == true | ||||
|   when: not editing in (true, "audio") | ||||
|  | ||||
| - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Remove Executables | ||||
|   file: | ||||
|     path: "{{ flatpak_exec_dir }}/{{ item.name }}" | ||||
|     state: absent | ||||
|   loop: "{{ flatpaks_editing }}" | ||||
|   loop: "{{ flatpaks_editing_audio }}" | ||||
|   ignore_errors: yes | ||||
|   when: not editing == true | ||||
|   when: not editing in (true, "audio") | ||||
|  | ||||
| # Gaming # | ||||
|  | ||||
|   | ||||
							
								
								
									
										177
									
								
								tasks/workstation/linux/software/flutter.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								tasks/workstation/linux/software/flutter.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,177 @@ | ||||
| --- | ||||
| # Packages specific to workstations developing Flutter apps. | ||||
|  | ||||
| ## Facts ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | Facts [1/4] | ||||
|   set_fact: | ||||
|     flutter_url: "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.27.2-stable.tar.xz" | ||||
|     flutter_download_file: "{{ user_user.home }}/Downloads/flutter.tar.xz" | ||||
|     flutter_sdk_location: "{{ user_user.home }}/SDKs/Flutter" | ||||
|     flutter_report: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.sdk.flutter.txt" | ||||
|   when: coding == true | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | Facts [2/4] | ||||
|   set_fact: | ||||
|     flutter_bin_location: "{{ flutter_sdk_location }}/flutter/bin" | ||||
|   when: coding == true | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | Facts [3/4] | ||||
|   set_fact: | ||||
|     flutter: "{{ flutter_bin_location }}/flutter" | ||||
|   when: coding == true | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | Facts [3/3] | ||||
|   set_fact: | ||||
|     flutter_report_commands: | ||||
|       - "date > {{ flutter_report }}" | ||||
|       - "{{ flutter }} --disable-analytics >> {{ flutter_report }}" | ||||
|       - "date >> {{ flutter_report }}" | ||||
|       - "{{ flutter }} doctor -v >> {{ flutter_report }}" | ||||
|       - "date >> {{ flutter_report }}" | ||||
|   when: coding == true | ||||
|  | ||||
| ## Checks ## | ||||
|  | ||||
| - 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 | ||||
|  | ||||
| ## Packages ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | Necessities | ||||
|   package: | ||||
|     name: | ||||
|     - curl | ||||
|     - git | ||||
|     - unzip | ||||
|     - xz-utils | ||||
|     - zip | ||||
|     - libglu1-mesa | ||||
|     state: present | ||||
|   when: coding == true | ||||
|  | ||||
| # https://docs.flutter.dev/get-started/install/linux/desktop | ||||
| - name: Workstation | Linux | Software | Flutter | Linux App Dependencies | ||||
|   package: | ||||
|     name: | ||||
|     - clang | ||||
|     - cmake | ||||
|     - git | ||||
|     - ninja-build | ||||
|     - pkg-config | ||||
|     - libgtk-3-dev | ||||
|     - liblzma-dev | ||||
|     - libstdc++-12-dev | ||||
|     state: present | ||||
|   when: coding == true | ||||
|  | ||||
| # https://docs.flutter.dev/get-started/install/linux/android | ||||
| - name: Workstation | Linux | Software | Flutter | Android App Dependencies | ||||
|   package: | ||||
|     name: | ||||
|       - libc6:amd64 | ||||
|       - libstdc++6 | ||||
|       - lib32z1 | ||||
|       - libbz2-1.0 | ||||
|     state: present | ||||
|   when: coding == true | ||||
|  | ||||
| ## Install SDK ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | SDK | ||||
|   block: | ||||
|  | ||||
|   - name: Workstation | Linux | Software | Flutter | Download SDK | ||||
|     get_url: | ||||
|       url: "{{ flutter_url }}" | ||||
|       dest: "{{ flutter_download_file }}" | ||||
|       owner: "{{ user }}" | ||||
|       group: "{{ user }}" | ||||
|       mode: '0664' | ||||
|     when: not flutter_download_stat.stat.exists | ||||
|  | ||||
|   - name: Workstation | Linux | Software | Flutter | Create Folder | ||||
|     file: | ||||
|       path: "{{ flutter_sdk_location }}" | ||||
|       state: directory | ||||
|       owner: "{{ user }}" | ||||
|       group: "{{ user }}" | ||||
|       mode: '0755' | ||||
|  | ||||
|   - name: Workstation | Linux | Software | Flutter | Extract SDK | ||||
|     unarchive: | ||||
|       src: "{{ flutter_download_file }}" | ||||
|       dest: "{{ flutter_sdk_location }}" | ||||
|       owner: "{{ user }}" | ||||
|       group: "{{ user }}" | ||||
|  | ||||
|   become_user: "{{ user }}" | ||||
|   when: coding == true and not flutter_sdk_stat.stat.exists | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | Delete Archive | ||||
|   file: | ||||
|     path: "{{ flutter_download_file }}" | ||||
|     state: absent | ||||
|  | ||||
| ## Configure Environment ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | Modify PATH (.bashrc) | ||||
|   blockinfile: | ||||
|     path: "{{ item }}/.bashrc" | ||||
|     block: | | ||||
|       export PATH="$PATH:{{ flutter_bin_location }}" | ||||
|     marker: '# {mark} MANAGED BY ANSIBLE | Flutter' | ||||
|     state: present | ||||
|     create: yes | ||||
|     backup: yes | ||||
|   loop: | ||||
|     - "{{ user_root.home }}" | ||||
|     - "{{ user_user.home }}" | ||||
|   ignore_errors: yes | ||||
|   when: coding == true and user_root.home != "" and user_user.home != "" | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | Modify PATH (.zshrc) | ||||
|   blockinfile: | ||||
|     path: "{{ item }}/.zshrc" | ||||
|     block: | | ||||
|       export PATH="$PATH:{{ flutter_bin_location }}" | ||||
|     marker: '# {mark} MANAGED BY ANSIBLE | Flutter' | ||||
|     state: present | ||||
|     create: yes | ||||
|     backup: yes | ||||
|   loop: | ||||
|     - "{{ user_root.home }}" | ||||
|     - "{{ user_user.home }}" | ||||
|   ignore_errors: yes | ||||
|   when: coding == true and user_root.home != "" and user_user.home != "" | ||||
|  | ||||
| ## Test SDK ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | Doctor Report | ||||
|   shell: "{{ item }}" | ||||
|   loop: "{{ flutter_report_commands }}" | ||||
|   become_user: "{{ user }}" | ||||
|   when: coding == true | ||||
|  | ||||
| ## Uninstall SDK ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Flutter | Remove SDK | ||||
|   file: | ||||
|     path: "{{ flutter_sdk_location }}" | ||||
|     state: absent | ||||
|   when: not coding == true | ||||
							
								
								
									
										79
									
								
								tasks/workstation/linux/software/lutris.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								tasks/workstation/linux/software/lutris.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| --- | ||||
| # Lutris for running Windows games not in Steam. | ||||
| #   https://lutris.net/downloads | ||||
|  | ||||
| # Paths | ||||
|  | ||||
| - name: Workstation | Linux | Software | Lutris | Facts | ||||
|   set_fact: | ||||
|     lutris_source_list: "/etc/apt/sources.list.d/lutris.list" | ||||
|     lutris_keyfile: "/usr/share/keyrings/lutris.gpg" | ||||
|   when: ansible_pkg_mgr == "apt" | ||||
|  | ||||
| # Checks | ||||
|  | ||||
| - 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" | ||||
|  | ||||
| ## Install Repo ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Lutris | Add PPA (Ubuntu) | ||||
|   apt_repository: | ||||
|     repo: ppa:lutris-team/lutris | ||||
|     update_cache: yes | ||||
|     state: present | ||||
|   when: ansible_distribution in ("Ubuntu") and gaming == true | ||||
|   ignore_errors: yes | ||||
|  | ||||
| - name: Workstation | Linux | Software | Lutris | Add PPA (Debian) | ||||
|   shell: "{{ item }}" | ||||
|   loop: | ||||
|     - "wget -q -O- https://download.opensuse.org/repositories/home:/strycore/Debian_12/Release.key \ | ||||
|       | gpg --dearmor \ | ||||
|       | sudo tee {{ lutris_keyfile }} > /dev/null" | ||||
|     - "echo 'deb [signed-by={{ lutris_keyfile }}] https://download.opensuse.org/repositories/home:/strycore/Debian_12/ ./' \ | ||||
|       | sudo tee {{ lutris_source_list }} > /dev/null" | ||||
|     - "sudo apt update" | ||||
|   when: ansible_distribution in ("Debian") and gaming == true and not lutris_source_exists.stat.exists | ||||
|  | ||||
| ## Install Package ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Lutris | Install (besides ARM) | ||||
|   package: | ||||
|     name: | ||||
|       - lutris | ||||
|     state: present | ||||
|   when: ansible_architecture != "aarch64" and gaming == true | ||||
|  | ||||
| ## Uninstall Package ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Lutris | Uninstall (besides ARM) | ||||
|   package: | ||||
|     name: | ||||
|       - lutris | ||||
|     state: absent | ||||
|   when: ansible_architecture != "aarch64" and gaming != true | ||||
|  | ||||
| ## Uninstall Repo ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | Lutris | Remove PPA (Ubuntu) | ||||
|   apt_repository: | ||||
|     repo: ppa:lutris-team/lutris | ||||
|     update_cache: yes | ||||
|     state: absent | ||||
|   when: ansible_distribution in ("Ubuntu") and gaming != true | ||||
|   ignore_errors: yes | ||||
|  | ||||
| - name: Workstation | Linux | Software | Lutris | Remove PPA (Debian) | ||||
|   shell: "{{ item }}" | ||||
|   loop: | ||||
|     - "mv {{ lutris_source_list }} ~/TRASH/" | ||||
|     - "mv {{ lutris_keyfile }} ~/TRASH/" | ||||
|     - "sudo apt update" | ||||
|   when: ansible_distribution in ("Debian") and gaming != true and lutris_source_exists.stat.exists | ||||
| @@ -24,7 +24,7 @@ | ||||
|     name: | ||||
|     - "{{ ffmpeg }}" | ||||
|     state: present | ||||
|   when: editing == true | ||||
|   when: editing in (true, "video", "audio") | ||||
|  | ||||
|  | ||||
| ## Other Stuff | ||||
| @@ -38,40 +38,16 @@ | ||||
|       - "{{ appimagelauncher }}" | ||||
|       - "{{ evolution }}" | ||||
|       - "{{ evolution }}*" | ||||
|       - gparted | ||||
|       - hugo | ||||
|     state: present | ||||
|  | ||||
| # Lutris # | ||||
|  | ||||
| - name: Workstation | Linux | Software | Packages | Add Lutris PPA (Ubuntu) | ||||
|   apt_repository: | ||||
|     repo: ppa:lutris-team/lutris | ||||
|     update_cache: yes | ||||
|     state: present | ||||
|   when: ansible_distribution == "Ubuntu" and gaming == true | ||||
|   ignore_errors: yes | ||||
|  | ||||
| - name: Workstation | Linux | Software | Packages | Add Lutris (besides ARM) | ||||
| - name: Workstation | Linux | Software | Packages | GS Connect (KDE Connect, Android Tool) | ||||
|   package: | ||||
|     name: | ||||
|       - lutris | ||||
|     - gnome-shell-extension-gsconnect | ||||
|     state: present | ||||
|   when: ansible_architecture != "aarch64" and gaming == true | ||||
|   ignore_errors: yes | ||||
|  | ||||
| - name: Workstation | Linux | Software | Packages | Remove Lutris (besides ARM) | ||||
|   package: | ||||
|     name: | ||||
|       - lutris | ||||
|     state: absent | ||||
|   when: ansible_architecture != "aarch64" and gaming is not defined | ||||
|   ignore_errors: yes | ||||
|  | ||||
| - name: Workstation | Linux | Software | Packages | Remove Lutris PPA (Ubuntu) | ||||
|   apt_repository: | ||||
|     repo: ppa:lutris-team/lutris | ||||
|     update_cache: yes | ||||
|     state: absent | ||||
|   when: ansible_distribution == "Ubuntu" and gaming is not defined | ||||
|   when: ansible_distribution in ("Debian") | ||||
|   ignore_errors: yes | ||||
|  | ||||
| # Remove Repo Software # | ||||
|   | ||||
							
								
								
									
										70
									
								
								tasks/workstation/linux/software/vscodium.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								tasks/workstation/linux/software/vscodium.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| --- | ||||
| # Install version of Codium which can use local compilers and SDKs like Flutter | ||||
| #   properly. Flatpaks need workarounds to do this. This also lets us remove | ||||
| #   CodeOSS and use Codium in 2 ways. | ||||
| # Commands sourced and modified based on: | ||||
| #   https://vscodium.com/#install-on-debian-ubuntu-deb-package | ||||
| # This also exists but was not utilized: | ||||
| #   https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo | ||||
|  | ||||
| ## Facts ## | ||||
|  | ||||
| # Paths | ||||
|  | ||||
| - name: Workstation | Linux | Software | VS Codium | Facts | ||||
|   set_fact: | ||||
|     vscodium_source_list: "/etc/apt/sources.list.d/vscodium.list" | ||||
|     vscodium_keyfile: "/usr/share/keyrings/vscodium.gpg" | ||||
|   when: ansible_pkg_mgr == "apt" | ||||
|  | ||||
| # Checks | ||||
|  | ||||
| - name: Workstation | Linux | Software | VS Codium | Check PPA | ||||
|   stat: | ||||
|     path: "{{ vscodium_source_list }}" | ||||
|     get_attributes: false | ||||
|     get_checksum: false | ||||
|     get_mime: false | ||||
|   register: vscodium_source_exists | ||||
|   when: ansible_pkg_mgr == "apt" | ||||
|  | ||||
| ## Install Repo ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | VS Codium | Add PPA | ||||
|   shell: "{{ item }}" | ||||
|   loop: | ||||
|     - "wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg \ | ||||
|       | gpg --dearmor \ | ||||
|       | sudo tee {{ vscodium_keyfile }} > /dev/null" | ||||
|     - "echo 'deb [arch=amd64,arm64 signed-by={{ vscodium_keyfile }}] https://download.vscodium.com/debs vscodium main' \ | ||||
|       | sudo tee {{ vscodium_source_list }}" | ||||
|     - "sudo apt update" | ||||
|   when: ansible_pkg_mgr == "apt" and coding == true and not vscodium_source_exists.stat.exists | ||||
|  | ||||
| ## Install Package ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | VS Codium | Install | ||||
|   package: | ||||
|     name: | ||||
|       - codium | ||||
|     state: present | ||||
|   when: ansible_pkg_mgr == "apt" and coding == true | ||||
|  | ||||
| ## Remove Package ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | VS Codium | Uninstall | ||||
|   package: | ||||
|     name: | ||||
|       - codium | ||||
|     state: absent | ||||
|   when: ansible_pkg_mgr == "apt" and coding != true | ||||
|  | ||||
| ## Remove Repo ## | ||||
|  | ||||
| - name: Workstation | Linux | Software | VS Codium | Remove PPA | ||||
|   shell: "{{ item }}" | ||||
|   loop: | ||||
|     - "mv {{ vscodium_source_list }} ~/TRASH/" | ||||
|     - "mv /etc/apt/keyrings/vscodium*.gpg ~/TRASH/" | ||||
|     - "sudo apt update" | ||||
|   when: ansible_pkg_mgr == "apt" and coding != true and vscodium_source_exists.stat.exists | ||||
| @@ -1,5 +1,5 @@ | ||||
| --- | ||||
| # Download packages from Homebrew.  | ||||
| # Download packages from Homebrew. | ||||
| # Should this just be done in a Generic view? Is this really mac-specific, or just the facts? | ||||
| # FreeBSD has its own. May be good to keep it separate so it's more to-the-point. | ||||
|  | ||||
| @@ -22,13 +22,19 @@ | ||||
|     status: present | ||||
|   when: coding == true | ||||
|  | ||||
| - name: Workstation | Mac OS | Software | Brew | Install Packages (Editing) | ||||
| - name: Workstation | Mac OS | Software | Brew | Install Packages (Editing:Video) | ||||
|   package: | ||||
|     name: | ||||
|       - shotcut | ||||
|     status: present | ||||
|   when: editing in (true, "video") | ||||
|  | ||||
| - name: Workstation | Mac OS | Software | Brew | Install Packages (Editing:Audio) | ||||
|   package: | ||||
|     name: | ||||
|       - audacity | ||||
|       - shotcut | ||||
|     status: present | ||||
|   when: editing == true | ||||
|   when: editing in (true, "audio") | ||||
|  | ||||
| - name: Workstation | Mac OS | Software | Brew | Install Packages (Gaming) | ||||
|   package: | ||||
|   | ||||
| @@ -12,25 +12,36 @@ | ||||
|                       , 'org.gnome.Nautilus.desktop' | ||||
|                       , 'io.gitlab.librewolf-community.desktop', 'librewolf.desktop' | ||||
|                       , 'org.mozilla.firefox.desktop', 'firefox.desktop' | ||||
|                       , 'com.visualstudio.code-oss.desktop', 'code-oss.desktop' | ||||
|                       , 'com.google.AndroidStudio.desktop' | ||||
|                       , 'org.godotengine.Godot.desktop' | ||||
|                       , 'org.shotcut.Shotcut.desktop' | ||||
|                       , 'io.lbry.lbry-app.desktop', 'lbry.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' | ||||
|                       ]" | ||||
|     dconf_terminal: gnome-terminal | ||||
|     dconf_theme: Adwaita-dark | ||||
|     dconf_icons: Adwaita | ||||
| # 2024-01-28 No longer using local email clients. | ||||
| # 2024-01-28 Not currently using local email clients. | ||||
| #, 'org.gnome.Evolution.desktop' | ||||
| #, 'chat.delta.desktop.desktop', 'deltachat.desktop' | ||||
| #, 'org.gnome.Geary.desktop' | ||||
| #, 'org.mozilla.Thunderbird.desktop' | ||||
| # 2025-01-01 | ||||
| # Reduce the amount of icons on the sidebar, things that may get added back. | ||||
| #, 'org.godotengine.Godot.desktop' | ||||
| # 2025-03-07 Removed in place of a 2nd VS Codium install (apt version). | ||||
| #, 'com.visualstudio.code-oss.desktop', 'code-oss.desktop' | ||||
| # 2025-03-21 Not really using Android Studio now that Flutter is working. | ||||
| #, 'com.google.AndroidStudio.desktop' | ||||
| # 2025-08-31 Not used a whole lot, installed again just to explore. | ||||
| #, 'im.riot.Riot.desktop' | ||||
| #, 'chat.simplex.simplex.desktop' | ||||
|  | ||||
| - name: Workstation | Account Management | GNOME | Facts (NixOS) | ||||
|   set_fact: | ||||
| @@ -209,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