General Enhancements #4

Merged
me merged 64 commits from dev into main 2025-06-16 12:33:16 -07:00
16 changed files with 699 additions and 131 deletions

View File

@ -110,8 +110,7 @@ $search "$location" | sort | while read image; do
continue continue
fi fi
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$size.$extension"
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD-$size.$extension"
## Clean Filename ## ## Clean Filename ##
# Prevent directory from having its name cleaned too. # Prevent directory from having its name cleaned too.

View File

@ -48,7 +48,8 @@ function usage {
-r : Recurse the entire directory structure, compressing all video files. -r : Recurse the entire directory structure, compressing all video files.
-f : Force recompressing any files by deleting it if it already exists. -f : Force recompressing any files by deleting it if it already exists.
-d : Delete the original video if the compressed version is smaller. -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. -m : Measure the time it takes to compress each video and do the loop.
-V : Add verbosity, such as printing all the variable values. -V : Add verbosity, such as printing all the variable values.
-x : Set the shell's x flag to display every action which is taken. -x : Set the shell's x flag to display every action which is taken.
@ -59,7 +60,7 @@ function usage {
## Parameters ## ## Parameters ##
while getopts ":i:v:a:c:s:rfdAmVxh" opt; do while getopts ":i:v:a:c:s:rfdlAmVxh" opt; do
case $opt in case $opt in
i) input="$OPTARG" i) input="$OPTARG"
;; ;;
@ -77,7 +78,9 @@ while getopts ":i:v:a:c:s:rfdAmVxh" opt; do
;; ;;
d) delete="Y" 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`" m) time_command="`which time`"
;; ;;
@ -102,25 +105,38 @@ if [[ -z "$input" ]]; then
input="." input="."
fi 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 if [[ -z "$video_bitrate" ]]; then
# Based roughly on the 2.5 step iteration used for 720 and 1080. # 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" video_bitrate="30M"
elif (( $size >= 1440 )); then elif (( size_int >= 1440 )); then
video_bitrate="12M" video_bitrate="12M"
elif (( $size >= 1080 )); then elif (( size_int >= 1080 )); then
video_bitrate="5M" video_bitrate="5M"
elif (( $size >= 720 )); then elif (( size_int >= 720 )); then
video_bitrate="2000k" video_bitrate="2000k"
elif (( $size >= 480 )); then elif (( size_int >= 480 )); then
video_bitrate="750k" video_bitrate="750k"
elif (( $size >= 360 )); then elif (( size_int >= 360 )); then
video_bitrate="250k" video_bitrate="250k"
else else
video_bitrate="100k" video_bitrate="100k"
fi fi
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" video_bitrate="-b:v $video_bitrate -minrate 0 -maxrate $video_bitrate -bufsize $video_bitrate"
if [[ -z "$audio_bitrate" ]]; then if [[ -z "$audio_bitrate" ]]; then
@ -145,15 +161,6 @@ else
time_command="$time_command -p" time_command="$time_command -p"
fi 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 ## ## Main ##
if [[ "$verbose" == "Y" ]]; then if [[ "$verbose" == "Y" ]]; then
@ -208,21 +215,33 @@ $search_command "$input" | sort | while read file; do
continue continue
fi 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. # More exception checks based on the new file.
if [[ -e "$newfile" ]]; then if [[ -e "$newfile" || -e "$new_video_clean" ]]; then
if [[ "$force" == "Y" ]]; then if [[ "$force" == "Y" ]]; then
echo "FORCE: Removing '$newfile'." echo "FORCE: Removing '$newfile'."
if [[ -d ~/TRASH ]]; then if [[ -d ~/TRASH ]]; then
mv -v "$newfile" ~/TRASH/ mv -v "$newfile" "$new_video_clean" ~/TRASH/ 2>/dev/null
else else
rm -v "$newfile" rm -v "$newfile" "$new_video_clean" 2>/dev/null
fi fi
else 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 continue
fi fi
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. # Convert the file.
echo "Converting to '$newfile'." echo "Converting to '$newfile'."
echo "*** `date` ***" echo "*** `date` ***"

View File

@ -3,6 +3,7 @@
"save_loc1": "~/.var/app/com.visualstudio.code-oss/config/Code - OSS/{{ user_desc }}/settings.json", "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", "save_loc2": "~/.var/app/com.vscodium.codium/config/VSCodium/{{ user_desc }}/settings.json",
"END_COMMENTS": "", "END_COMMENTS": "",
"workbench.startupEditor": "none", "workbench.startupEditor": "none",
"editor.rulers": [ "editor.rulers": [
80, 120, 200 80, 120, 200
@ -11,5 +12,14 @@
"editor.tabSize": 3, "editor.tabSize": 3,
"editor.insertSpaces": false, "editor.insertSpaces": false,
"files.insertFinalNewline": true, "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"
}
} }

View File

@ -123,6 +123,12 @@
- include_tasks: tasks/workstation/linux/software/packages.yml - include_tasks: tasks/workstation/linux/software/packages.yml
when: ansible_system == "Linux" 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 - include_tasks: tasks/workstation/linux/software/brave.yml
when: ansible_pkg_mgr in ("apt", "dnf", "zypper") and not mobile when: ansible_pkg_mgr in ("apt", "dnf", "zypper") and not mobile
@ -156,6 +162,9 @@
- include_tasks: tasks/workstation/linux/software/flutter.yml - include_tasks: tasks/workstation/linux/software/flutter.yml
when: ansible_system == "Linux" when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/android.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/flatpaks.yml - include_tasks: tasks/workstation/linux/software/flatpaks.yml
when: ansible_system == "Linux" and flatpak_distro when: ansible_system == "Linux" and flatpak_distro

View File

@ -100,7 +100,6 @@
mode: '0755' mode: '0755'
loop: loop:
- "{{ user_user.home }}/bin" - "{{ user_user.home }}/bin"
- "{{ user_user.home }}/LBRY"
- "{{ user_user.home }}/TRASH" - "{{ user_user.home }}/TRASH"
- "{{ user_user.home }}/Downloads" - "{{ user_user.home }}/Downloads"
- "{{ user_user.home }}/Reports" - "{{ user_user.home }}/Reports"
@ -158,26 +157,27 @@
function_update: | function_update: |
function update() { function update() {
PROG=$FUNCNAME 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 $PROG is used to run all the system's package manager commands
in one swoop. Flow stops if any command returns a failure code. in one swoop. Flow stops if any command returns a failure code.
The hope is to run something as easy as 'pacman -Syyu'. The hope is to run something as easy as 'pacman -Syyu'.
-y : Assume yes to any prompts. -y : Assume yes to any prompts.
-g : Shutdown after updating. -g : Goodbye - Shutdown after updating.
-s : System updates only, no Flatpaks. -s : System updates only, no Flatpaks.
-f : Flatpaks only, no system updates." -f : Flatpaks only, no system updates."
unset OPTIND unset OPTIND
unset accept unset accept
unset goodbye unset shutdown
unset only_sys unset only_sys
unset only_flat unset only_flat
while getopts ":hygsf" opt; do while getopts ":hygsf" opt; do
case $opt in case $opt in
h) echo -e "$usage" h) echo -e "$usage"
return 0 ;; return 0 ;;
y) accept="-y" ;; y) accept="-y" ;;
g) goodbye="Y" ;; g) shutdown="Y" ;;
s) only_sys="Y" ;; s) only_sys="Y" ;;
f) only_flat="Y" ;; f) only_flat="Y" ;;
*) echo "ERROR: -$OPTARG is not a recognized option." >&2 *) echo "ERROR: -$OPTARG is not a recognized option." >&2
@ -192,7 +192,7 @@
{{ update_package_manager }} {{ update_package_manager }}
fi fi
if [[ "$goodbye" == "Y" && "{{ battery }}" == "True" ]]; then if [[ "$shutdown" == "Y" && "{{ battery }}" == "True" ]]; then
echo -e "\n*** Only System Updates - Skipping Flatpak ***\n\n" echo -e "\n*** Only System Updates - Skipping Flatpak ***\n\n"
elif [[ "$only_sys" == "Y" ]]; then elif [[ "$only_sys" == "Y" ]]; then
echo -e "\n*** Manually Skipping Flatpak ***\n\n" echo -e "\n*** Manually Skipping Flatpak ***\n\n"
@ -202,7 +202,8 @@
echo "*** Completed Successfully ***" echo "*** Completed Successfully ***"
if [[ $goodbye == "Y" ]]; then if [[ $shutdown == "Y" ]]; then
shopt -s expand_aliases
bye bye
fi fi
@ -234,6 +235,8 @@
echo "*** Completed Successfully ***" echo "*** Completed Successfully ***"
return 0 return 0
} }
alias firmware-update="update-firmware"
alias firmware-updater="update-firmware"
alias_sync: alias sync='date && echo "Syncing!" && sync && date' alias_sync: alias sync='date && echo "Syncing!" && sync && date'
export_editor: export EDITOR='vi' export_editor: export EDITOR='vi'
init_aliases: | init_aliases: |
@ -251,8 +254,12 @@
' '
alias init-prog=init-program alias init-prog=init-program
bye_aliases: | bye_aliases: |
alias bye="{{ shutdown_command }}" function bye {
alias goodbye="update -yg" {{ shutdown_command }}
}
function goodbye {
update -yg
}
metasploit_aliases: | metasploit_aliases: |
alias metasploit="msfconsole" alias metasploit="msfconsole"
alias hax="metasploit" alias hax="metasploit"
@ -413,23 +420,63 @@
} }
alias_vim: alias vi=vim alias_vim: alias vi=vim
alias_here: alias here='ls -alh `pwd`/*' alias_here: alias here='ls -alh `pwd`/*'
alias_docker_reload: | function_docker_reload: |
alias 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 down &&
docker compose build && docker compose build &&
docker compose up -d docker compose up -d
'
alias_docker_update: | if [[ -n "$1" ]]; then
alias docker-update=' 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 down &&
docker compose pull && docker compose pull &&
docker compose build && docker compose build &&
docker compose up -d docker compose up -d
'
if [[ -n "$1" ]]; then
docker logs -f $1
fi
return 0
}
function_docker_upgrade: | function_docker_upgrade: |
function docker-upgrade() { function docker-upgrade() {
# Wrapper for a full-scale upgrade and log view of a container. # 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. # 1) Container ID or Container Name, as seen in 'docker ps' command.
container=$1 container=$1
if [[ -z $container ]]; then if [[ -z $container ]]; then
@ -459,16 +506,37 @@
echo "*** Following Log ***" && echo "*** Following Log ***" &&
echo "Press ^C to escape." && echo "Press ^C to escape." &&
docker logs -f $container 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: |
alias code-check=' alias code-check='
echo "Checking ~/Code directory for git changes."
ls -d ~/Code/* | while read project; do ls -d ~/Code/* | while read project; do
if [[ ! -d $project ]]; then if [[ ! -d $project ]]; then
continue continue
fi fi
echo "*** `basename $project` ***" echo -e "\n*** `basename $project` ***"
cd $project cd $project
if [[ -d .git ]]; then if [[ -d .git ]]; then
git pull git pull
@ -477,6 +545,7 @@
echo "Not a Git project, skipping!" echo "Not a Git project, skipping!"
fi fi
done done
echo -e "\nDone!"
' '
alias_code_reset: | alias_code_reset: |
alias code-reset=' alias code-reset='
@ -492,29 +561,46 @@
' '
function_code_reseed: | function_code_reseed: |
function git_projects_to_sync { function git_projects_to_sync {
# Projects should be followed by the current development branch name.
cat <<- EOF cat <<- EOF
env-ansible env-ansible dev
env-docker env-docker dev
env-termux env-termux dev
nodejs-website nodejs-website dev
android-break-the-habit ebook-health-protocol dev
android-tictactoe flutter-expense-tracker dev
android-expense-tracker flutter-social-traveler-app dev
android-example-database-room nodejs-social-traveler-server dev
android-carb-up misc-spare-change main
ebook-health-protocol flutter-buddy-website dev
EOF EOF
} }
function code-reseed { 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" mkdir -pv "$unseed_dir"
mv -v ~/Code/* "$unseed_dir"/ 2>/dev/null mv -v ~/Code/* "$unseed_dir"/ 2>/dev/null
# Git repo information.
git_repo_ssh={{ git_repo_ssh }} git_repo_ssh={{ git_repo_ssh }}
git_main_project={{ git_project }} git_main_project={{ git_project }}
git_repo_ssh_basename=${git_repo_ssh//$git_main_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} \ git clone ${git_repo_ssh_basename}${git_project} \
--branch dev ~/Code/$git_project --branch $git_branch ~/Code/$dest_folder
done done
} }
function_clean_filenames: | function_clean_filenames: |
@ -570,13 +656,89 @@
find ~/Code/android-*/ -maxdepth 1 -type d -name ".gradle" \ find ~/Code/android-*/ -maxdepth 1 -type d -name ".gradle" \
-exec du -hs {} \; -exec rm -rf {} \; -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! ***" echo -e "\n*** Done! ***"
} }
alias code-clean="clean-code" 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 - name: General | Account Management | Users | Files | Common Variable
set_fact: set_fact:
rc_common: | 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 }} {{ export_path_additions }}
{{ alias_cp }} {{ alias_cp }}
{{ alias_mv }} {{ alias_mv }}
@ -601,10 +763,10 @@
{{ function_flatpak_purge }} {{ function_flatpak_purge }}
{{ alias_vim }} {{ alias_vim }}
{{ alias_here }} {{ alias_here }}
{{ alias_docker_reload }} {{ function_docker_reload }}
{{ alias_docker_update }} {{ function_docker_update }}
{{ function_docker_upgrade }} {{ function_docker_upgrade }}
{{ alias_docker_restart }} {{ function_docker_restart }}
{{ alias_code_check }} {{ alias_code_check }}
{{ alias_code_reset }} {{ alias_code_reset }}
{{ function_code_reseed }} {{ function_code_reseed }}
@ -616,6 +778,11 @@
{{ alias_scan }} {{ alias_scan }}
{{ alias_prod }} {{ alias_prod }}
{{ function_clean_code }} {{ 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 - name: General | Account Management | Users | Files | .bashrc
blockinfile: blockinfile:

View 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

View File

@ -137,3 +137,19 @@
state: absent state: absent
when: ansible_distribution != "Ubuntu" when: ansible_distribution != "Ubuntu"
ignore_errors: yes 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

View File

@ -9,10 +9,6 @@
set_fact: set_fact:
lynis_temp_file: "{{ lynis_file }}.tmp" 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 - name: General | Tests | Lynis | Install
git: git:
repo: https://github.com/CISOfy/lynis repo: https://github.com/CISOfy/lynis

View File

@ -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

View File

@ -60,28 +60,21 @@
- brave-browser - brave-browser
- brave-keyring - brave-keyring
state: absent state: absent
ignore_errors: yes
- name: Workstation | Software | Brave | Remove Repo [apt] - name: Workstation | Software | Brave | Remove Repo [apt]
shell: "{{ item }}" shell: rm /etc/apt/sources.list.d/brave-browser-*.list && apt update || echo "Not Needed"
loop:
- rm /etc/apt/sources.list.d/brave-browser-*.list
- apt update
when: ansible_pkg_mgr == "apt" when: ansible_pkg_mgr == "apt"
ignore_errors: yes
- name: Workstation | Software | Brave | Remove Repo [dnf] - name: Workstation | Software | Brave | Remove Repo [dnf]
shell: "{{ item }}" shell: "{{ item }}"
loop: loop:
- rm /etc/yum.repos.d/brave-browser-*.repo - rm /etc/yum.repos.d/brave-browser-*.repo || echo "Not Needed"
- rpm -e gpg-pubkey-c2d4e821-5e7252b8 - rpm -e gpg-pubkey-c2d4e821-5e7252b8 || echo "Not Needed"
when: ansible_pkg_mgr == "dnf" when: ansible_pkg_mgr == "dnf"
ignore_errors: yes
- name: Workstation | Software | Brave | Remove Repo [zypper] - name: Workstation | Software | Brave | Remove Repo [zypper]
shell: "{{ item }}" shell: "{{ item }}"
loop: loop:
- zypper removerepo brave-browser - zypper removerepo brave-browser || echo "Not Needed"
- rpm -e gpg-pubkey-c2d4e821-5e7252b8 - rpm -e gpg-pubkey-c2d4e821-5e7252b8 || echo "Not Needed"
when: ansible_pkg_mgr == "zypper" when: ansible_pkg_mgr == "zypper"
ignore_errors: yes

View File

@ -24,7 +24,6 @@
method: system method: system
flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo
## Flatpak Installs ## ## Flatpak Installs ##
- name: Workstation | Linux | Flatpak Distro | Flatpak | Variables - name: Workstation | Linux | Flatpak Distro | Flatpak | Variables
@ -42,7 +41,7 @@
- { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" } - { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" }
- { app: "org.gimp.GIMP", name: "gimp", extra: "" } - { app: "org.gimp.GIMP", name: "gimp", extra: "" }
flatpaks_coding: 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: "com.google.AndroidStudio", name: "android-studio", extra: "" }
- { app: "io.dbeaver.DBeaverCommunity", name: "dbeaver", extra: "" } - { app: "io.dbeaver.DBeaverCommunity", name: "dbeaver", extra: "" }
- { app: "org.godotengine.Godot", name: "godot", extra: "" } - { app: "org.godotengine.Godot", name: "godot", extra: "" }

View File

@ -3,16 +3,33 @@
## Facts ## ## Facts ##
- name: Workstation | Linux | Software | Flutter | Facts [1/2] - name: Workstation | Linux | Software | Flutter | Facts [1/4]
set_fact: set_fact:
flutter_url: "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.27.2-stable.tar.xz" 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_download_file: "{{ user_user.home }}/Downloads/flutter.tar.xz"
flutter_sdk_location: "{{ user_user.home }}/SDKs/Flutter" flutter_sdk_location: "{{ user_user.home }}/SDKs/Flutter"
flutter_report: "{{ user_user.home }}/Reports/flutter.txt" 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: set_fact:
flutter_bin_location: "{{ flutter_sdk_location }}/flutter/bin" 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 ## ## Checks ##
@ -20,11 +37,13 @@
stat: stat:
path: "{{ flutter_sdk_location }}" path: "{{ flutter_sdk_location }}"
register: flutter_sdk_stat register: flutter_sdk_stat
when: coding == true
- name: Workstation | Linux | Software | Flutter | Check Download Exists - name: Workstation | Linux | Software | Flutter | Check Download Exists
stat: stat:
path: "{{ flutter_download_file }}" path: "{{ flutter_download_file }}"
register: flutter_download_stat register: flutter_download_stat
when: coding == true
## Packages ## ## Packages ##
@ -60,9 +79,9 @@
package: package:
name: name:
- libc6:amd64 - libc6:amd64
- libstdc++6:amd64 - libstdc++6
- lib32z1 - lib32z1
- libbz2-1.0:amd64 - libbz2-1.0
state: present state: present
when: coding == true when: coding == true
@ -76,6 +95,7 @@
url: "{{ flutter_url }}" url: "{{ flutter_url }}"
dest: "{{ flutter_download_file }}" dest: "{{ flutter_download_file }}"
owner: "{{ user }}" owner: "{{ user }}"
group: "{{ user }}"
mode: '0664' mode: '0664'
when: not flutter_download_stat.stat.exists when: not flutter_download_stat.stat.exists
@ -84,6 +104,7 @@
path: "{{ flutter_sdk_location }}" path: "{{ flutter_sdk_location }}"
state: directory state: directory
owner: "{{ user }}" owner: "{{ user }}"
group: "{{ user }}"
mode: '0755' mode: '0755'
- name: Workstation | Linux | Software | Flutter | Extract SDK - name: Workstation | Linux | Software | Flutter | Extract SDK
@ -91,7 +112,9 @@
src: "{{ flutter_download_file }}" src: "{{ flutter_download_file }}"
dest: "{{ flutter_sdk_location }}" dest: "{{ flutter_sdk_location }}"
owner: "{{ user }}" owner: "{{ user }}"
group: "{{ user }}"
become_user: "{{ user }}"
when: coding == true and not flutter_sdk_stat.stat.exists when: coding == true and not flutter_sdk_stat.stat.exists
- name: Workstation | Linux | Software | Flutter | Delete Archive - name: Workstation | Linux | Software | Flutter | Delete Archive
@ -135,12 +158,8 @@
- name: Workstation | Linux | Software | Flutter | Doctor Report - name: Workstation | Linux | Software | Flutter | Doctor Report
shell: "{{ item }}" shell: "{{ item }}"
loop: loop: "{{ flutter_report_commands }}"
- "date > {{ flutter_report }}" become_user: "{{ user }}"
- "{{ flutter_bin_location }}/flutter --disable-analytics >> {{ flutter_report }}"
- "date >> {{ flutter_report }}"
- "{{ flutter_bin_location }}/flutter doctor -v >> {{ flutter_report }}"
- "date >> {{ flutter_report }}"
when: coding == true when: coding == true
## Uninstall SDK ## ## Uninstall SDK ##

View File

@ -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

View File

@ -38,44 +38,9 @@
- "{{ appimagelauncher }}" - "{{ appimagelauncher }}"
- "{{ evolution }}" - "{{ evolution }}"
- "{{ evolution }}*" - "{{ evolution }}*"
- adb - gparted
- fastboot
state: present 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 # # Remove Repo Software #
- name: Workstation | Linux | Software | Packages | Remove Applications - name: Workstation | Linux | Software | Packages | Remove Applications

View File

@ -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

View File

@ -17,12 +17,12 @@
, 'org.telegram.desktop.desktop' , 'org.telegram.desktop.desktop'
, 'com.discordapp.Discord.desktop' , 'com.discordapp.Discord.desktop'
, 'com.vscodium.codium.desktop' , 'com.vscodium.codium.desktop'
, 'com.visualstudio.code-oss.desktop', 'code-oss.desktop' , 'codium.desktop'
, 'com.google.AndroidStudio.desktop'
, 'org.shotcut.Shotcut.desktop' , 'org.shotcut.Shotcut.desktop'
, 'io.lmms.LMMS.desktop' , 'io.lmms.LMMS.desktop'
, 'io.lbry.lbry-app.desktop', 'lbry.desktop' , 'io.lbry.lbry-app.desktop', 'lbry.desktop'
, 'com.valvesoftware.Steam.desktop' , 'com.valvesoftware.Steam.desktop'
, 'net.lutris.Lutris.desktop'
]" ]"
dconf_terminal: gnome-terminal dconf_terminal: gnome-terminal
dconf_theme: Adwaita-dark dconf_theme: Adwaita-dark
@ -35,6 +35,10 @@
# 2025-01-01 # 2025-01-01
# Reduce the amount of icons on the sidebar, things that may get added back. # Reduce the amount of icons on the sidebar, things that may get added back.
#, 'org.godotengine.Godot.desktop' #, '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) - name: Workstation | Account Management | GNOME | Facts (NixOS)
set_fact: set_fact: