diff --git a/files/scripts/compress_image.sh b/files/scripts/compress_image.sh
index 0bc32cc..66d897c 100755
--- a/files/scripts/compress_image.sh
+++ b/files/scripts/compress_image.sh
@@ -110,8 +110,7 @@ $search "$location" | sort | while read image; do
 		continue
 	fi
 
-
-	new_image="${image//.$extension/}.$tag-$date_YYYYMMDD-$size.$extension"
+	new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$size.$extension"
 
 	## Clean Filename ##
 	# Prevent directory from having its name cleaned too.
diff --git a/files/scripts/compress_video.sh b/files/scripts/compress_video.sh
index f172177..4d14a04 100755
--- a/files/scripts/compress_video.sh
+++ b/files/scripts/compress_video.sh
@@ -48,7 +48,8 @@ function usage {
 		  -r : Recurse the entire directory structure, compressing all video files.
 		  -f : Force recompressing any files by deleting it if it already exists.
 		  -d : Delete the original video if the compressed version is smaller.
-		  -A : Recursively Force and Delete.
+		  -l : Clean the filename of dashes and underscores so dates line up.
+		  -A : Recursively Force, Delete, and Clean.
 		  -m : Measure the time it takes to compress each video and do the loop.
 		  -V : Add verbosity, such as printing all the variable values.
 		  -x : Set the shell's x flag to display every action which is taken.
@@ -59,7 +60,7 @@ function usage {
 
 ## Parameters ##
 
-while getopts ":i:v:a:c:s:rfdAmVxh" opt; do
+while getopts ":i:v:a:c:s:rfdlAmVxh" opt; do
 	case $opt in
 		i) input="$OPTARG"
 			;;
@@ -77,7 +78,9 @@ while getopts ":i:v:a:c:s:rfdAmVxh" opt; do
 			;;
 		d) delete="Y"
 			;;
-		A) search_command="find" && force="Y" && delete="Y"
+		l) clean="Y"
+			;;
+		A) search_command="find" && force="Y" && delete="Y" #&& clean="Y"
 			;;
 		m) time_command="`which time`"
 			;;
@@ -102,25 +105,38 @@ if [[ -z "$input" ]]; then
 	input="."
 fi
 
+if [[ -z $size ]]; then
+	size="720"
+fi
+typeset -i size_int
+size_int="$size"
+
+# Ensure the filenames sort properly between 3 and 4 digit resolutions.
+while (( ${#size} < 4 )); do
+    size="0$size"
+done
+compress_tags="$size"
+size="-filter:v scale=-2:$size"
+
 if [[ -z "$video_bitrate" ]]; then
 	# Based roughly on the 2.5 step iteration used for 720 and 1080.
-	if (( $size >= 2160 )); then
+	if (( size_int >= 2160 )); then
 		video_bitrate="30M"
-	elif (( $size >= 1440 )); then
+	elif (( size_int >= 1440 )); then
 		video_bitrate="12M"
-	elif (( $size >= 1080 )); then
+	elif (( size_int >= 1080 )); then
 		video_bitrate="5M"
-	elif (( $size >= 720 )); then
+	elif (( size_int >= 720 )); then
 		video_bitrate="2000k"
-	elif (( $size >= 480 )); then
+	elif (( size_int >= 480 )); then
 		video_bitrate="750k"
-	elif (( $size >= 360 )); then
+	elif (( size_int >= 360 )); then
 		video_bitrate="250k"
 	else
 		video_bitrate="100k"
 	fi
 fi
-compress_tags="$video_bitrate"
+compress_tags="$compress_tags-$video_bitrate"
 video_bitrate="-b:v $video_bitrate -minrate 0 -maxrate $video_bitrate -bufsize $video_bitrate"
 
 if [[ -z "$audio_bitrate" ]]; then
@@ -145,15 +161,6 @@ else
 	time_command="$time_command -p"
 fi
 
-if [[ -z $size ]]; then
-	size="720"
-fi
-while (( ${#size} < 4 )); do
-    size="0$size"
-done
-compress_tags="$size-$compress_tags"
-size="-filter:v scale=-2:$size"
-
 ## Main ##
 
 if [[ "$verbose" == "Y" ]]; then
@@ -208,21 +215,33 @@ $search_command "$input" | sort | while read file; do
 		continue
 	fi
 
+	# TBD / TODO: Test this functionality!
+	new_video_clean="${newfile}"
+	new_video_clean="${new_video_clean//_/}"
+	new_video_clean="${new_video_clean//-/}"
+	new_video_clean="${new_video_clean// /}"
+
 	# More exception checks based on the new file.
-	if [[ -e "$newfile" ]]; then
+	if [[ -e "$newfile" || -e "$new_video_clean" ]]; then
 		if [[ "$force" == "Y" ]]; then
 			echo "FORCE: Removing '$newfile'."
 			if [[ -d ~/TRASH ]]; then
-				mv -v "$newfile" ~/TRASH/
+				mv -v "$newfile" "$new_video_clean" ~/TRASH/ 2>/dev/null
 			else
-				rm -v "$newfile"
+				rm -v "$newfile" "$new_video_clean" 2>/dev/null
 			fi
 		else
-			echo "SKIP: Already has a compressed version ($newfile)."
+			echo "SKIP: Already has a compressed version."
+			ls -sh "$newfile" "$new_video_clean" 2>/dev/null
 			continue
 		fi
 	fi
 
+	# Whether or not to use the cleaned version or the normal version.
+	if [[ -n $clean ]]; then
+		newfile="$new_video_clean"
+	fi
+
 	# Convert the file.
 	echo "Converting to '$newfile'."
 	echo "*** `date` ***"
diff --git a/files/settings/vscode.json b/files/settings/vscode.json
index 0b27509..7b04606 100644
--- a/files/settings/vscode.json
+++ b/files/settings/vscode.json
@@ -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,14 @@
 	"editor.tabSize": 3,
 	"editor.insertSpaces": false,
 	"files.insertFinalNewline": true,
-	"files.trimFinalNewlines": true
+	"files.trimFinalNewlines": true,
+	"git.confirmSync": false,
+
+    "[dart]": {
+        "editor.formatOnSave": true,
+        "editor.formatOnType": true,
+        "editor.selectionHighlight": false,
+        "editor.tabCompletion": "onlySnippets",
+        "editor.wordBasedSuggestions": "off"
+    }
 }
diff --git a/local.yml b/local.yml
index 96db67f..516f871 100644
--- a/local.yml
+++ b/local.yml
@@ -123,6 +123,12 @@
       - include_tasks: tasks/workstation/linux/software/packages.yml
         when: ansible_system == "Linux"
 
+      - 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 +162,9 @@
       - 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
 
diff --git a/tasks/general/acct_mgmt/users.yml b/tasks/general/acct_mgmt/users.yml
index b80f432..c41d31f 100644
--- a/tasks/general/acct_mgmt/users.yml
+++ b/tasks/general/acct_mgmt/users.yml
@@ -100,7 +100,6 @@
     mode: '0755'
   loop:
     - "{{ user_user.home }}/bin"
-    - "{{ user_user.home }}/LBRY"
     - "{{ user_user.home }}/TRASH"
     - "{{ user_user.home }}/Downloads"
     - "{{ user_user.home }}/Reports"
@@ -158,26 +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 goodbye
+        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
@@ -192,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"
@@ -202,7 +202,8 @@
 
         echo "*** Completed Successfully ***"
 
-        if [[ $goodbye == "Y" ]]; then
+        if [[ $shutdown == "Y" ]]; then
+          shopt -s expand_aliases
           bye
         fi
 
@@ -234,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: |
@@ -251,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"
@@ -413,23 +420,63 @@
       }
     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
+          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
+          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
@@ -459,16 +506,37 @@
         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
+          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
           if [[ ! -d $project ]]; then
             continue
           fi
-          echo "*** `basename $project` ***"
+          echo -e "\n*** `basename $project` ***"
           cd $project
           if [[ -d .git ]]; then
             git pull
@@ -477,6 +545,7 @@
             echo "Not a Git project, skipping!"
           fi
         done
+        echo -e "\nDone!"
       '
     alias_code_reset: |
       alias code-reset='
@@ -492,29 +561,46 @@
       '
     function_code_reseed: |
       function git_projects_to_sync {
+        # Projects should be followed by the current development branch name.
         cat <<- EOF
-          env-ansible
-          env-docker
-          env-termux
-          nodejs-website
-          android-break-the-habit
-          android-tictactoe
-          android-expense-tracker
-          android-example-database-room
-          android-carb-up
-          ebook-health-protocol
+          env-ansible dev
+          env-docker dev
+          env-termux dev
+          nodejs-website dev
+          ebook-health-protocol dev
+          flutter-expense-tracker dev
+          flutter-social-traveler-app dev
+          nodejs-social-traveler-server dev
+          misc-spare-change main
+          flutter-buddy-website dev
       EOF
       }
       function code-reseed {
-        unseed_dir="$HOME/TRASH/`date ++%Y%m%d_%H%M%S`_UnseededCodeProjects"
+        # Unseed current projects.
+        echo -e "\n*** Move old projects to TRASH ***"
+        unseed_dir="$HOME/TRASH/`date +%Y%m%d_%H%M%S`_UnseededCodeProjects"
         mkdir -pv "$unseed_dir"
         mv -v ~/Code/* "$unseed_dir"/ 2>/dev/null
+
+        # Git repo information.
         git_repo_ssh={{ git_repo_ssh }}
         git_main_project={{ git_project }}
         git_repo_ssh_basename=${git_repo_ssh//$git_main_project/}
-        git_projects_to_sync | while read git_project; do
+
+        # 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 dev ~/Code/$git_project
+            --branch $git_branch ~/Code/$dest_folder
         done
       }
     function_clean_filenames: |
@@ -570,13 +656,89 @@
         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 "\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'
 
 - 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 }}
@@ -601,10 +763,10 @@
       {{ function_flatpak_purge }}
       {{ alias_vim }}
       {{ alias_here }}
-      {{ alias_docker_reload }}
-      {{ alias_docker_update }}
+      {{ function_docker_reload }}
+      {{ function_docker_update }}
       {{ function_docker_upgrade }}
-      {{ alias_docker_restart }}
+      {{ function_docker_restart }}
       {{ alias_code_check }}
       {{ alias_code_reset }}
       {{ function_code_reseed }}
@@ -616,6 +778,11 @@
       {{ alias_scan }}
       {{ alias_prod }}
       {{ function_clean_code }}
+      {{ alias_kill_battery }}
+      {{ alias_kill_system }}
+      {{ function_update_sdks }}
+      {{ function_ansible_vars }}
+      {{ alias_permission_commands }}
 
 - name: General | Account Management | Users | Files | .bashrc
   blockinfile:
diff --git a/tasks/general/software/hyperling.yml b/tasks/general/software/hyperling.yml
new file mode 100644
index 0000000..449a205
--- /dev/null
+++ b/tasks/general/software/hyperling.yml
@@ -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
diff --git a/tasks/general/software/packages.yml b/tasks/general/software/packages.yml
index 0796fce..9c78d63 100644
--- a/tasks/general/software/packages.yml
+++ b/tasks/general/software/packages.yml
@@ -137,3 +137,19 @@
     state: absent
   when: ansible_distribution != "Ubuntu"
   ignore_errors: yes
+
+- name: General | Software | Packages | GS Connect (KDE Connect, Android Tool)
+  package:
+    name:
+    - gnome-shell-extension-gsconnect
+    state: present
+  when: ansible_distribution in ("Debian")
+  ignore_errors: yes
+
+- name: General | Software | Packages | Other Debian Packages
+  package:
+    name:
+    - usbutils
+    state: present
+  when: ansible_distribution in ("Debian")
+  ignore_errors: yes
diff --git a/tasks/general/tests/lynis.yml b/tasks/general/tests/lynis.yml
index 87592cd..4923594 100644
--- a/tasks/general/tests/lynis.yml
+++ b/tasks/general/tests/lynis.yml
@@ -9,12 +9,8 @@
   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
@@ -22,7 +18,7 @@
   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 +27,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'
diff --git a/tasks/workstation/linux/software/android.yml b/tasks/workstation/linux/software/android.yml
new file mode 100644
index 0000000..6daaf98
--- /dev/null
+++ b/tasks/workstation/linux/software/android.yml
@@ -0,0 +1,223 @@
+---
+# 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"
+
+- 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"
+
+## Checks ##
+
+- name: Workstation | Linux | Software | Android | Check SDK Manager Exists [1/2]
+  stat:
+    path: "{{ android_sdkmanager_temp }}"
+  register: android_sdkmanager_temp_stat
+  when: coding == true
+
+- name: Workstation | Linux | Software | Android | Check SDK Manager Exists [2/2]
+  stat:
+    path: "{{ android_sdkmanager_final }}"
+  register: android_sdkmanager_final_stat
+  when: coding == true
+
+- name: Workstation | Linux | Software | Android | Check Download Exists
+  stat:
+    path: "{{ android_download_file }}"
+  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 Modules
+  shell: "yes | {{ android_sdkmanager_final }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}"
+  loop:
+    # 34
+    - build-tools;34.0.0
+    - platforms;android-34
+    - sources;android-34
+    # 35
+    - build-tools;35.0.0
+    - build-tools;35.0.1
+    - platforms;android-35
+    - sources;android-35
+    # Images
+    #- system-images;android-35;default;x86_64
+    #- system-images;android-35;aosp_atd;x86_64
+    - system-images;android-35;google_apis_playstore;x86_64
+  become_user: "{{ user }}"
+  when: coding == true
+
+- name: Workstation | Linux | Software | Android | Inform Flutter
+  shell: "{{ flutter }} config --android-sdk={{ android_sdk_location }}"
+  become_user: "{{ user }}"
+  when: coding == true
+
+- name: Workstation | Linux | Software | Android | Licenses Agreements [1/2]
+  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
diff --git a/tasks/workstation/linux/software/brave.yml b/tasks/workstation/linux/software/brave.yml
index 1dc5b40..e0d744a 100644
--- a/tasks/workstation/linux/software/brave.yml
+++ b/tasks/workstation/linux/software/brave.yml
@@ -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
diff --git a/tasks/workstation/linux/software/flatpaks.yml b/tasks/workstation/linux/software/flatpaks.yml
index 0041a47..471ff31 100644
--- a/tasks/workstation/linux/software/flatpaks.yml
+++ b/tasks/workstation/linux/software/flatpaks.yml
@@ -24,7 +24,6 @@
     method: system
     flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo
 
-
 ## Flatpak Installs ##
 
 - name: Workstation | Linux | Flatpak Distro | Flatpak | Variables
@@ -42,7 +41,7 @@
       - { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" }
       - { app: "org.gimp.GIMP", name: "gimp", 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: "" }
diff --git a/tasks/workstation/linux/software/flutter.yml b/tasks/workstation/linux/software/flutter.yml
index 50cd305..dba5551 100644
--- a/tasks/workstation/linux/software/flutter.yml
+++ b/tasks/workstation/linux/software/flutter.yml
@@ -3,16 +3,33 @@
 
 ## Facts ##
 
-- name: Workstation | Linux | Software | Flutter | Facts [1/2]
+- 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/flutter.txt"
+  when: coding == true
 
-- name: Workstation | Linux | Software | Flutter | Facts [2/2]
+- 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 ##
 
@@ -20,11 +37,13 @@
   stat:
     path: "{{ flutter_sdk_location }}"
   register: flutter_sdk_stat
+  when: coding == true
 
 - name: Workstation | Linux | Software | Flutter | Check Download Exists
   stat:
     path: "{{ flutter_download_file }}"
   register: flutter_download_stat
+  when: coding == true
 
 ## Packages ##
 
@@ -60,9 +79,9 @@
   package:
     name:
       - libc6:amd64
-      - libstdc++6:amd64
+      - libstdc++6
       - lib32z1
-      - libbz2-1.0:amd64
+      - libbz2-1.0
     state: present
   when: coding == true
 
@@ -76,6 +95,7 @@
       url: "{{ flutter_url }}"
       dest: "{{ flutter_download_file }}"
       owner: "{{ user }}"
+      group: "{{ user }}"
       mode: '0664'
     when: not flutter_download_stat.stat.exists
 
@@ -84,6 +104,7 @@
       path: "{{ flutter_sdk_location }}"
       state: directory
       owner: "{{ user }}"
+      group: "{{ user }}"
       mode: '0755'
 
   - name: Workstation | Linux | Software | Flutter | Extract SDK
@@ -91,7 +112,9 @@
       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
@@ -135,12 +158,8 @@
 
 - name: Workstation | Linux | Software | Flutter | Doctor Report
   shell: "{{ item }}"
-  loop:
-    - "date > {{ flutter_report }}"
-    - "{{ flutter_bin_location }}/flutter --disable-analytics >> {{ flutter_report }}"
-    - "date >> {{ flutter_report }}"
-    - "{{ flutter_bin_location }}/flutter doctor -v >> {{ flutter_report }}"
-    - "date >> {{ flutter_report }}"
+  loop: "{{ flutter_report_commands }}"
+  become_user: "{{ user }}"
   when: coding == true
 
 ## Uninstall SDK ##
diff --git a/tasks/workstation/linux/software/lutris.yml b/tasks/workstation/linux/software/lutris.yml
new file mode 100644
index 0000000..756ca83
--- /dev/null
+++ b/tasks/workstation/linux/software/lutris.yml
@@ -0,0 +1,76 @@
+---
+# 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 }}"
+  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
diff --git a/tasks/workstation/linux/software/packages.yml b/tasks/workstation/linux/software/packages.yml
index c0b0fd9..f398af7 100644
--- a/tasks/workstation/linux/software/packages.yml
+++ b/tasks/workstation/linux/software/packages.yml
@@ -38,44 +38,9 @@
       - "{{ appimagelauncher }}"
       - "{{ evolution }}"
       - "{{ evolution }}*"
-      - adb
-      - fastboot
+      - gparted
     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)
-  package:
-    name:
-      - lutris
-    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
-  ignore_errors: yes
-
 # Remove Repo Software #
 
 - name: Workstation | Linux | Software | Packages | Remove Applications
diff --git a/tasks/workstation/linux/software/vscodium.yml b/tasks/workstation/linux/software/vscodium.yml
new file mode 100644
index 0000000..446369b
--- /dev/null
+++ b/tasks/workstation/linux/software/vscodium.yml
@@ -0,0 +1,67 @@
+---
+# 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 }}"
+  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
diff --git a/tasks/workstation/shared/settings/gnome.yml b/tasks/workstation/shared/settings/gnome.yml
index d81bfb8..9dc7169 100644
--- a/tasks/workstation/shared/settings/gnome.yml
+++ b/tasks/workstation/shared/settings/gnome.yml
@@ -17,12 +17,12 @@
                       , 'org.telegram.desktop.desktop'
                       , 'com.discordapp.Discord.desktop'
                       , 'com.vscodium.codium.desktop'
-                      , 'com.visualstudio.code-oss.desktop', 'code-oss.desktop'
-                      , 'com.google.AndroidStudio.desktop'
+                      , 'codium.desktop'
                       , 'org.shotcut.Shotcut.desktop'
                       , 'io.lmms.LMMS.desktop'
                       , 'io.lbry.lbry-app.desktop', 'lbry.desktop'
                       , 'com.valvesoftware.Steam.desktop'
+                      , 'net.lutris.Lutris.desktop'
                       ]"
     dconf_terminal: gnome-terminal
     dconf_theme: Adwaita-dark
@@ -35,6 +35,10 @@
 # 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'
 
 - name: Workstation | Account Management | GNOME | Facts (NixOS)
   set_fact: