Compare commits

...

174 Commits

Author SHA1 Message Date
7c93f25a5d Add output for why dev branch shows up twice during load-prod. 2025-10-15 06:45:49 -07:00
8445b64d6b Check if the dev branch exists before moving to it. 2025-10-15 06:42:16 -07:00
8dfb3fe2a6 Change rollback aliases to only go down 1 layer. Add reset aliases for going all the way back to main. 2025-10-15 06:38:50 -07:00
5b749d2100 Fix failed branch switch. Hardcode to dev! 2025-10-15 06:35:02 -07:00
57ca267aa5 Add back the display of the current local branch we're on. Add newlines for readability. 2025-10-15 06:32:28 -07:00
2ca308c287 Re-do changes lost between branch pointing. 2025-10-15 06:28:38 -07:00
40ee72b587 Only continue each commnd if they are successful. 2025-10-15 06:15:13 -07:00
13bc98d7ef Further enhancments to load-branch. Better output and branch choices. 2025-10-15 06:06:05 -07:00
d916637798 Complete the conditional branches. 2025-10-15 05:53:48 -07:00
71d236d0ba Add aliases to roll branches back to main, AKA the last official pull request. 2025-10-15 05:48:18 -07:00
d81c424878 Allow using load-prod and load-stage with any branch, and default to dev if nothing is provided. 2025-10-15 05:47:01 -07:00
73e527640f Add heads back onto the ls-remote command. 2025-10-15 05:41:12 -07:00
aa3075a9fc Do not do switch back to sender if did not switch to receiver. 2025-10-15 05:33:17 -07:00
89cdf8157f Add other missing then. 2025-10-15 05:19:57 -07:00
4e0ff86295 Add missing then. 2025-10-15 05:19:21 -07:00
305b8df6ff Ensure user is on dev branch if it exists. 2025-10-15 05:09:56 -07:00
6a78933875 Add helper for reorienting a git branch. 2025-10-15 04:52:15 -07:00
7095636915 Remove trailing s. 2025-10-14 15:03:43 -07:00
80bba3b21b Merge pull request 'Fixes & Enhancements' (#6) from dev into main
Reviewed-on: #6
2025-10-14 15:01:20 -07:00
d98bbb02a9 Quote the backup contents with an * so that backups get ignored properly. 2025-10-14 12:21:38 -07:00
00c87328ab Don't back up backup files. 2025-10-14 11:16:52 -07:00
b4cdea984e Add sleep to ansible-pull commands. Change weekly force to daily. Use explicit command rather than rarely used file. 2025-10-14 11:09:24 -07:00
4651726268 Do a full truncate of backup directory so that partial zips with weird hash names and no file extension get deleted as well. 2025-10-14 08:36:53 -07:00
3410cf4426 Ensure backup's TRASH folder gets created and used properly. 2025-10-14 08:35:21 -07:00
d5393f60f3 Add cleanup for backups. 2025-10-14 08:34:33 -07:00
5f882df33f Add ability to use aliases with sudo. 2025-10-14 08:22:16 -07:00
0dfbd0bd68 Add ls alias for only showing size, not all the file data. 2025-10-14 08:18:20 -07:00
0d5b095ad6 Remove directory from basename variable. 2025-10-14 08:14:47 -07:00
07e32decf8 Fixes and enhancements for system backups. 2025-10-14 08:12:19 -07:00
afc3b20785 Reference script version of backup with function and add aliases. 2025-10-14 07:44:52 -07:00
ed160da316 Move backup function into script so that cron can access it. 2025-10-14 07:44:26 -07:00
2f08b1414e Use more standardized backup directory, outside of RAM. 2025-10-14 07:07:28 -07:00
c279884da2 Fix extra '. Really need to permanently turn off autocompletion type stuff, it keeps coming back on. 2025-10-09 13:30:06 -07:00
df8b330893 Add and use functions for simpler and more readable logging. 2025-10-09 12:38:56 -07:00
08a7a22dde Add to TBD. 2025-10-09 12:27:46 -07:00
57243f65e3 Do not use OR, .list file was not getting changed. 2025-10-09 11:12:29 -07:00
35469851b3 Fix find command to use OR when checking for multiple extensions. Fix sources extension to be plural. 2025-10-09 11:08:08 -07:00
2cf4a348c3 Fix backup function not removing old files. 2025-10-09 10:41:40 -07:00
4a33adf073 Add TBD for timezones. 2025-10-09 10:41:27 -07:00
fb00d3e6bc Separate file sections with periods. 2025-10-09 07:49:24 -07:00
267a260e90 Use hyphen not underscore for timestamp. 2025-10-09 07:48:52 -07:00
03b9f7e1b2 Add function for just the date. 2025-10-09 07:48:27 -07:00
57dc62a74a Change filename to match new Docker format. 2025-10-09 07:47:09 -07:00
f7c321bf23 Sort the cleanup by filesize. 2025-10-09 06:59:41 -07:00
130b243be3 Add method to clean up hidden trashed files, usually from Android. 2025-10-09 06:54:36 -07:00
400ef8400c Change what clean does to be much safer. 2025-10-06 18:35:20 -07:00
d35d9ccdd2 Add cleaning of generated PDF files. 2025-10-06 18:21:24 -07:00
a730919b43 Purge existing PDFs first so that old names get removed. 2025-10-04 14:10:31 -07:00
4e9e714504 Add comment! 2025-10-04 06:56:22 -07:00
c0ba27e782 Add command to regenerate all ebooks. 2025-10-04 06:55:42 -07:00
6d2a822323 Add System to local system backup file. 2025-10-04 06:33:37 -07:00
a8e6e0b6c6 Ensure that debian.source files also get modified by debian-upgrade. 2025-10-04 06:32:37 -07:00
93b919f48b Remove bool filter where it does not always makes sense. Should fix swap files from not getting created. 2025-10-03 18:53:20 -07:00
215e7dee69 Add more eBooks to the reseed list. 2025-09-30 14:04:34 -07:00
70ac7bff94 Merge pull request 'General Improvements & Fixes' (#5) from dev into main
Reviewed-on: #5
2025-09-19 13:31:52 -07:00
54589ca033 Add verbosity to ansible-pull command. 2025-09-16 12:28:32 -07:00
2dd0303176 Change URL for HTTP to include the S so that ansible-pull can correctly detect the changes to the repo. 2025-09-16 12:23:38 -07:00
411f203024 Add new project to rewrite my site in Hugo. 2025-09-02 14:20:21 -07:00
9f22385040 Simplex Desktop does not work without phone scan each time, do not keep on Favorite bar. 2025-08-31 11:57:34 -07:00
103a79a7ee Add Simplex to favorites. 2025-08-31 11:50:19 -07:00
602376df5f Remove Element from Favorites. 2025-08-31 11:31:57 -07:00
95c87448c8 Add aliases for remembering the Flatpak app size checking command. 2025-08-31 11:30:13 -07:00
df5421defe Ensure name of code-oss executable does not interfere with any ~/Code shortcuts. 2025-08-31 11:28:23 -07:00
1e7e11ed91 Change the order of generic apps based on importance. 2025-08-31 11:27:38 -07:00
07dc365410 Add the Matrix protocol messenger Element back to the list, as well as Simplex. 2025-08-31 11:03:11 -07:00
c248a3c048 Add extra dialog to show where we're at when next apt prompt comes up. 2025-08-22 15:54:38 -07:00
16466fb0c8 Finalize backup list. Fixes for debian-upgrade. 2025-08-22 14:04:21 -07:00
86e3f40d36 Added and tested now and backup. Still need to test debian-upgrade. 2025-08-22 13:43:40 -07:00
8038e10364 Add purge to autoremove so that unused config files also get removed. 2025-08-22 11:54:22 -07:00
295f29dece Do not check services if host is a Docker container. 2025-08-21 15:31:40 -07:00
8181ee0848 Remove extra space. 2025-08-21 15:27:14 -07:00
c87c4468b3 Fix command to work locally. 2025-08-21 15:26:26 -07:00
e19902074a Try starting the necessary services multiple times. 2025-08-21 14:55:36 -07:00
c12b54d0dc Only use fastfetch for Trixie. 2025-08-21 14:40:35 -07:00
a5023b2ef7 Add shortcut to remembering how to see Ansible facts. 2025-08-21 14:40:25 -07:00
ad6601f17e neofetch is no longer available in Debian 13 (Trixie). Use fastfetch instead. 2025-08-21 14:31:07 -07:00
8e3e284753 Ensure boolean values are treated as booleans in Debian Trixie. 2025-08-21 14:27:07 -07:00
df4efb2beb Move the Connect software to Workstation. 2025-08-21 14:06:19 -07:00
c7d06da91e Add dig to default installs. 2025-08-19 14:48:23 -07:00
3e1b0cc961 Do not include an extra newline when working with HTML, causes whitespace issues. 2025-08-19 11:52:38 -07:00
2b551cbff5 Add hugo website to project list. 2025-08-18 18:24:08 -07:00
64c77cbd20 Add hugo to workstation packages. 2025-08-13 16:55:07 -07:00
c8186d30da Add Telegram back to install list. 2025-08-12 05:41:09 -07:00
68e1e5a48f Fix unnecessary s in name. 2025-07-26 11:40:46 -07:00
f61fe14a94 Add the speed boost to other stat checks as well. 2025-07-26 11:38:52 -07:00
a03a1b6493 Fix lag of stat building checksum and other data on large swapfile. 2025-07-26 11:35:28 -07:00
d1f50523fb Add output that the log is being followed. 2025-07-26 11:27:09 -07:00
9339b590e0 Add more projects t the reseed list. 2025-07-23 06:49:43 -07:00
dfe0b26498 Add more Android versions for testing. Only download them on devices marked for additional sdks. Move the lists into facts so that they can be reused. Add uninstallation tasks. 2025-07-23 06:44:35 -07:00
57f14fed8d Add alias for nethogs so that base user can hit it. 2025-07-22 16:19:09 -07:00
23b16f5db4 Enable and start chrony service. 2025-07-22 10:03:12 -07:00
a15e0017a6 Add nethogs and chrony to package list. 2025-07-22 10:03:02 -07:00
a7e1d0d25a Move old files somewhere that they'll get purged and not cause warnings. 2025-07-17 14:06:05 -07:00
b203eab7b5 Also refresh the preferences file. 2025-07-17 09:52:29 -07:00
6d4ac9bb69 Allow the moving of apt resources to fail. 2025-07-17 09:39:51 -07:00
5c8eb77f95 Add aliases for ls and ps. 2025-07-17 09:39:24 -07:00
544519bbfa Update Android SDKs. 2025-07-13 19:43:31 -07:00
1ab1594f6c Add the default image so that degoogled emulators can be tested. 2025-07-13 12:49:09 -07:00
ae4967bc04 Add sdk to Flutter report extension. 2025-07-13 10:52:22 -07:00
0d72bc1ea9 Move from Android 34+35 to 35+36. Add task for removal of old versions. Add report of installed modules. 2025-07-13 10:52:01 -07:00
de9c886af2 Add the UPDATE field to ensure that the repo gets any updates. Change YES's to TRUE based on documentation. 2025-07-13 10:35:32 -07:00
8033efce93 Add hostname to Flutter report. 2025-07-13 09:43:35 -07:00
2d9317e9de Add iftop and an alias to call it as a user. 2025-07-13 09:30:26 -07:00
b6066558e7 Add ability to leave off Night Light through Workstation provisioning file. 2025-07-13 09:06:37 -07:00
42306e4287 Add code-sync to do code-check since that's usually why the command is called. 2025-07-11 12:24:04 -07:00
f3cb825981 Add project to current projects. 2025-07-11 12:20:10 -07:00
1db8c0b7b0 Fix tabs in usage to spaces. 2025-06-16 18:07:23 -06:00
116087928d Strip metadata from converted images. 2025-06-16 18:01:59 -06:00
b6e820570f Allow re-expanding the filename in a consistent way so it's not one big number. 2025-06-16 18:01:41 -06:00
1f41651409 Merge pull request 'General Enhancements' (#4) from dev into main
Reviewed-on: #4
2025-06-16 12:33:14 -07:00
5f63ad1a59 Enahnce the docker aliases to all allow logging after the requested action. 2025-06-16 13:59:19 -06:00
7305e3a90c Add lsusb for Debian. 2025-05-18 11:37:49 -07:00
1e65b565cd Add GS Connect. 2025-05-09 17:41:02 -07:00
c828131bad Change expense tracker to DEV branch. Add the new version of the Buddy project. 2025-04-25 08:43:15 -07:00
3bca080de1 UNTESTED: Add cleaning of the video filename. 2025-04-03 14:50:01 -07:00
e308beec07 Do the size as an extra extension so that it is no longer cleaned into the date. 2025-04-03 10:34:51 -07:00
e155d36ab4 Fix null size variable bug with determining the default bitrate. 2025-03-31 15:09:00 -07:00
4bb075b747 Add a TBD file. 2025-03-21 15:07:22 -07:00
204a1fbb16 Hide Android Studio from taskbar. 2025-03-21 11:07:21 -07:00
9bb813ea78 Add aliases for chmod and chown showing changes. 2025-03-21 10:43:45 -07:00
066c8132e9 No longer using the LBRY folder. 2025-03-19 05:30:44 -07:00
9e61af8aa4 Add aliases for update-firmware. 2025-03-08 20:38:40 -07:00
69c1093289 Update usage for update. 2025-03-08 20:36:38 -07:00
c7c21bc2f8 Add note as to why -g is for shutdown. 2025-03-08 20:35:58 -07:00
466d8b5de5 Update already has code to skip Flatpaks if shutting down. 2025-03-08 20:33:41 -07:00
1eb41df822 Change parameter to not be an alias / function name. 2025-03-08 20:24:10 -07:00
152635e0b3 Don't do Flatpaks during goodbye. 2025-03-08 11:21:24 -07:00
17b78cc361 Goodbye isn't working anymore, try adding the shopt right before the attempt at bye. 2025-03-08 11:19:47 -07:00
a4ff66a9c9 Use dev branches on social traveler project so main is empty until a working version exists. 2025-03-07 12:11:17 -07:00
ea4d4070a6 Continue improving output text. 2025-03-07 12:10:36 -07:00
48777cf25c Attempt to fix Flutter project detection. 2025-03-07 12:02:02 -07:00
e4d784b6c7 Add output for what happens initially. 2025-03-07 12:01:11 -07:00
d6cf29d51d Further enhancements to code-reseed, including specifying the branch and providing better output. 2025-03-07 11:52:01 -07:00
51f8cae0ec Remove extra newline. 2025-03-07 09:06:03 -07:00
6e1884b912 Add -flatpak to the Flatpak's executable. 2025-03-07 09:05:43 -07:00
695a7fc30b No real need to update the key every time, recombine the step. 2025-03-07 08:48:00 -07:00
a447389af2 Move keyring to share while also modifying playbook to only do Debian steps when PPA does not already exist. 2025-03-07 08:46:53 -07:00
048d4d16c1 Update settings based on recent Codium development. 2025-03-07 08:26:26 -07:00
f9421585c9 Clean up log: Remove reference to old Lynis install directory. 2025-03-07 08:22:13 -07:00
660429eab0 Clean up log: No longer allow failures in Brave playbook. 2025-03-07 08:19:43 -07:00
05bf09c557 Add comments. 2025-03-07 08:13:06 -07:00
5c72168a7b Add the apt version of VS Codium for enhanced Flutter development over Flatpak version of Code OSS. Does ot compete with the Flatpak version of VS Codium. 2025-03-07 08:11:04 -07:00
87037148a7 Add URL which had the added commands for Debian. 2025-03-07 07:24:27 -07:00
aacb53081a Add Lutris to favorites if it's installed. 2025-03-06 14:44:16 -07:00
fd156c6382 Move lutris to its own playbook while adding Debian support. 2025-03-06 12:52:16 -07:00
82269f8cc2 Also add the Lutris ppa for Debian. 2025-03-06 12:41:01 -07:00
3c5617e64a Merge pull request 'Move Test Branch To Dev' (#3) from test-then-move-to-dev into dev
Reviewed-on: #3
2025-03-06 07:51:50 -07:00
c796d62fc3 Add flutter projects to reseed list. Also remove projects not being touched much. 2025-02-26 15:16:50 -07:00
50d499e91f Add fun output script for some Ansible provision facts. 2025-02-26 10:47:00 -07:00
72f48d64ab Add alias sdk-updater for update-sdks 2025-02-26 10:25:25 -07:00
bc0cb93b02 Get the END messages up against the license messages. 2025-02-26 10:24:38 -07:00
5a3c700380 Contain the output a little better. 2025-02-26 10:21:22 -07:00
2e223c5e28 Fix newline in output. 2025-02-26 10:19:49 -07:00
2c19c63a09 Fix if statement, Ansible variable was True rather than true. 2025-02-26 10:19:34 -07:00
af13e2c3a4 Create shortcut for updating SDKs. Remove updating Android SDK from its playbook. 2025-02-26 10:10:04 -07:00
02c153d260 Add aliases for using stress. 2025-02-26 09:21:13 -07:00
6eb48e4d9f Fix having sdkmanager in $PATH. 2025-02-26 09:10:26 -07:00
5ffe4d5b63 Fix typo in option. 2025-02-26 08:59:57 -07:00
f9ffc9839f Become user more often; make life easier. 2025-02-26 08:59:45 -07:00
659d46d088 Fix sdk location option for sdkmanager. 2025-02-26 08:55:51 -07:00
a6c819a086 Ensure directory exists to untar into. 2025-02-26 08:37:13 -07:00
e3887098a0 Modify variable names and attempt to get the tar extracted to the correct ansible/ subdirectory. 2025-02-26 08:36:36 -07:00
2e8c2205c3 Enhance comment. Fix typo. Fix conditional. 2025-02-26 08:33:54 -07:00
4bc52d984c adb and fastboot were moved to android.yml. 2025-02-26 08:30:17 -07:00
f64a9584be Save a little time in the script if system is not for coding. 2025-02-26 08:29:55 -07:00
2708e367df Attempt to fix when Sdk/ already exists but latest/sdkmanager is not present yet. 2025-02-26 08:29:31 -07:00
d0d5a5306b Create playbook which installs and configures an Android SDK. Ensures Flutter has everything it needs for Android deployment. 2025-02-26 07:54:41 -07:00
07ba3e8e35 Place commands which may be reused in other plybooks into more specific cmmands. 2025-02-26 07:53:51 -07:00
59704e4c6e Add gparted for disk editing. 2025-02-26 05:23:17 -07:00
4aa5e90dd9 Ensure the group gets set too. 2025-02-25 15:42:14 -07:00
79050c8ba6 Ensure aliases are understood in all functions and scripts. 2025-02-25 13:38:22 -07:00
2c6c4fee25 Add cleaning of flutter projects. 2025-01-30 16:37:24 -07:00
85ba9946c3 Add a newline before the final message. 2025-01-29 13:33:59 -07:00
76bc8535c1 Add newline between repos and extra before/after messaging. 2025-01-29 12:17:08 -07:00
25 changed files with 1333 additions and 206 deletions

View File

@@ -6,6 +6,11 @@
set_fact:
sshfs: sshfs
tar: tar
iftop: iftop
nethogs: nethogs
ntp_server: chrony
dig: dig
neofetch: neofetch
- name: General | Facts | Packages | Parrot OS Fixes
set_fact:
@@ -21,8 +26,14 @@
microcode_intel: intel-microcode
cron: cron
encfs: encfs
dig: dnsutils
when: ansible_pkg_mgr == "apt"
- name: General | Facts | Package | apt | Debian Trixie
set_fact:
neofetch: fastfetch
when: ansible_pkg_mgr == "apt" and ansible_distribution_release == "trixie"
- name: General | Facts | Package | pacman
set_fact:
locate: mlocate
@@ -98,7 +109,7 @@
echo -e "******* Apt *******\n*** Update Cache ***" &&
sudo apt update &&
echo -e "\n*** Auto Remove ***" &&
sudo apt autoremove {{ update_accept_var }} &&
sudo apt autoremove --purge {{ update_accept_var }} &&
echo -e "\n*** Clean ***" &&
sudo apt clean {{ update_accept_var }} &&
echo -e "Cleaned!\n\n*** Configure DPKG ***" &&
@@ -113,7 +124,7 @@
echo -e "******* Parrot *******\n*** Update Cache ***" &&
sudo apt update &&
echo -e "\n*** Auto Remove ***" &&
sudo apt autoremove {{ update_accept_var }} &&
sudo apt autoremove --purge {{ update_accept_var }} &&
parrot_mirrors_suck=true &&
while [[ $parrot_mirrors_suck ]]; do
unset parrot_mirrors_suck

View File

@@ -8,7 +8,7 @@
st_install_dir: /usr/local/src/st
global_bin: /usr/local/bin
x_desktops: /usr/share/xsessions
git_repo_http: http://{{ git_host }}/{{ git_user }}/{{ git_project }}
git_repo_http: https://{{ git_host }}/{{ git_user }}/{{ git_project }}
git_repo_ssh: ssh://git@{{ git_host }}:{{ git_ssh_port }}/{{ git_user }}/{{ git_project }}

57
files/scripts/backup_system.sh Executable file
View 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

View File

@@ -60,7 +60,8 @@ while getopts ":s:l:rfFdcAhx" opt; do
F) super_force="Y" ;;
d) delete="Y" ;;
c) clean="Y" ;;
A) recurse="Y" && search="find" && force="Y" && delete="Y" && clean="Y" ;;
e) expand="Y" ;;
A) recurse="Y" && search="find" && force="Y" && delete="Y" && expand="Y" ;;
h) usage 0 ;;
x) set -x ;;
*) echo "ERROR: Option $OPTARG not recognized." >&2 && usage 1 ;;
@@ -74,7 +75,7 @@ if [[ -n "$in_size" && "$size" != "$in_size" ]]; then
usage 1
fi
convert_exe="`which convert`"
convert_exe="`which convert` -strip"
if [[ "$convert_exe" == "" ]]; then
echo "ERROR: 'convert' command could not be found, "
echo "please install 'imagemagick'."
@@ -110,8 +111,7 @@ $search "$location" | sort | while read image; do
continue
fi
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD-$size.$extension"
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$size.$extension"
## Clean Filename ##
# Prevent directory from having its name cleaned too.
@@ -124,13 +124,31 @@ $search "$location" | sort | while read image; do
new_image_clean="${new_image_clean//-/}"
new_image_clean="${new_image_clean// /}"
# Add directory back to the full path.
## Expanded Filename ##
# Add back in the dashes so that the year, month, date, and time are exposed.
TEMP="$new_image_clean"
# Date Data
new_image_exp="${TEMP:0:4}-${TEMP:4:2}-${TEMP:6:2}"
# Time Data
new_image_exp="${new_image_exp}_${TEMP:8:2}-${TEMP:10:2}-${TEMP:12:2}"
# Remainder Data
if [[ "${TEMP:14:1}" == "." ]]; then
SEP=""
else
SEP="_"
fi
new_image_exp="${new_image_exp}${SEP}${TEMP:14}"
unset TEMP SEP
# Add directory back to the full paths.
new_image_clean="$image_dirname/$new_image_clean"
new_image_exp="$image_dirname/$new_image_exp"
# Delete the existing shrunk image if we are forcing a new compression.
if [[ -n "$force" && (-e "$new_image" || -e $new_image_clean) ]]; then
if [[ -n "$force" &&
(-e "$new_image" || -e $new_image_clean || -e $new_image_exp ) ]]; then
echo -n " FORCE: "
rm -v "$new_image" "$new_image_clean" 2>/dev/null
rm -v "$new_image" "$new_image_clean" "$new_image_exp" 2>/dev/null
fi
# Skip if a compressed image was already created today.
@@ -139,10 +157,14 @@ $search "$location" | sort | while read image; do
continue
fi
# Whether or not to use the cleaned version or the normal version.
# Whether or not to use the cleaned version.
if [[ -n $clean ]]; then
new_image="$new_image_clean"
# Whether or not to use the expanded version.
elif [[ -n $expand ]]; then
new_image="$new_image_exp"
fi
# Otherwise uses the same name as before.
###### TBD Instead of this, only alter the file names, and set a dirname var?
#### Create a new directory if the directory names were altered.

View File

@@ -33,13 +33,13 @@ function usage {
If nothing is provided, current directory (.) is assumed.
-v bitrate : The video bitrate to convert to.
Defaults are based on the size passed.
>= 2160: '30M'
>= 1440: '12M'
>= 1080: '5M'
>= 720: '2000k'
>= 480: '750k'
>= 360: '250k'
< 360: '100k'
>= 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.
@@ -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` ***"

View File

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

View File

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

View File

@@ -125,17 +125,17 @@
- name: General | Account Management | Provisioning Configuration | General | Load
set_fact:
provision: "{{ lookup('ini', 'enable file={{gen_file}} default=false') }}"
provision: "{{ lookup('ini', 'enable file={{gen_file}} default=false') | bool }}"
user: "{{ lookup('ini', 'user file={{gen_file}} default=ling') }}"
user_desc: "{{ lookup('ini', 'user_desc file={{gen_file}} default=Hyperling') }}"
branch: "{{ lookup('ini', 'branch file={{gen_file}} default=main') }}"
pentesting: "{{ lookup('ini', 'pentesting file={{gen_file}} default=false') }}"
no_telem: "{{ lookup('ini', 'no_telem file={{gen_file}} default=false') }}"
battery: "{{ lookup('ini', 'battery file={{gen_file}} default=false') }}"
pentesting: "{{ lookup('ini', 'pentesting file={{gen_file}} default=false') | bool }}"
no_telem: "{{ lookup('ini', 'no_telem file={{gen_file}} default=false') | bool }}"
battery: "{{ lookup('ini', 'battery file={{gen_file}} default=false') | bool }}"
swap_block: "{{ lookup('ini', 'swap_block file={{gen_file}} default=false') }}"
swap_count: "{{ lookup('ini', 'swap_count file={{gen_file}} default=1') }}"
swap_file: "{{ lookup('ini', 'swap_file file={{gen_file}} default=/swapfile') }}"
sshd_port: "{{ lookup('ini', 'sshd_port file={{gen_file}} default=22') }}"
sshd_port: "{{ lookup('ini', 'sshd_port file={{gen_file}} default=22') }}"
git_host: "{{ lookup('ini', 'git_host file={{gen_file}} default=git.hyperling.com') }}"
git_user: "{{ lookup('ini', 'git_user file={{gen_file}} default=me') }}"
git_project: "{{ lookup('ini', 'git_project file={{gen_file}} default=env-ansible') }}"
@@ -179,6 +179,7 @@
; enable : Set to true for system to be considered a workstation.
;
; coding : Set to true for installation of code editors (VSCode, PyCharm, Android Studio)
; - sdks : Set to true to download additional SDKs to test against.
;
; editing : Set to true for installation of Audio/Video editors (Shotcut, Audacity, OBS Stdio, GIMP)
; Set to video for only the video related portions.
@@ -200,6 +201,9 @@
; mobile : Set to true if not using an amd64 processor.
; Also used to disable tasks not helpful for Pinephone.
;
; redmode : Set to true/false for automatially using Night Light in GNOME.
; Default: true
;
[global]
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config'
state: present
@@ -208,14 +212,16 @@
- name: General | Account Management | Provisioning Configuration | Workstation | Load
set_fact:
workstation: "{{ lookup('ini', 'enable file={{wrk_file}} default=false') }}"
coding: "{{ lookup('ini', 'coding file={{wrk_file}} default=false') }}"
workstation: "{{ lookup('ini', 'enable file={{wrk_file}} default=false') | bool }}"
coding: "{{ lookup('ini', 'coding file={{wrk_file}} default=false') | bool }}"
sdks: "{{ lookup('ini', 'sdks file={{wrk_file}} default=false') | bool }}"
editing: "{{ lookup('ini', 'editing file={{wrk_file}} default=false') }}"
gaming: "{{ lookup('ini', 'gaming file={{wrk_file}} default=false') }}"
rdp: "{{ lookup('ini', 'rdp file={{wrk_file}} default=false') }}"
vnc: "{{ lookup('ini', 'vnc file={{wrk_file}} default=false') }}"
bsd_gpu: "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') }}"
mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') }}"
gaming: "{{ lookup('ini', 'gaming file={{wrk_file}} default=false') | bool }}"
rdp: "{{ lookup('ini', 'rdp file={{wrk_file}} default=false') | bool }}"
vnc: "{{ lookup('ini', 'vnc file={{wrk_file}} default=false') | bool }}"
bsd_gpu: "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') | bool }}"
mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') | bool }}"
redmode: "{{ lookup('ini', 'redmode file={{wrk_file}} default=true' ) | bool }}"
- name: General | Account Management | Provisioning Configuration | Workstation | List
set_fact:
@@ -223,12 +229,14 @@
loop:
- { 'workstation': "{{ workstation }}" }
- { 'coding': "{{ coding }}" }
- { 'sdks': "{{ sdks }}" }
- { 'editing': "{{ editing }}" }
- { 'gaming': "{{ gaming }}" }
- { 'rdp': "{{ rdp }}" }
- { 'vnc': "{{ vnc }}" }
- { 'bsd_gpu': "{{ bsd_gpu }}" }
- { 'mobile': "{{ mobile }}" }
- { 'redmode': "{{ redmode }}" }
# No longer mining, this is now considered deprecated.
### Miner ##
@@ -280,18 +288,18 @@
#
#- name: General | Account Management | Provisioning Configuration | Miner | Load
# set_fact:
# miner: "{{ lookup('ini', 'enable file={{mnr_file}} default=false') }}"
# amdgpu: "{{ lookup('ini', 'amdgpu file={{mnr_file}} default=false') }}"
# nanominer: "{{ lookup('ini', 'nanominer file={{mnr_file}} default=false') }}"
# nanominer_cpu: "{{ lookup('ini', 'nanominer_cpu file={{mnr_file}} default=false') }}"
# nanominer_cpu_pool: "{{ lookup('ini', 'nanominer_cpu_pool file={{mnr_file}} default=false') }}"
# nanominer_gpu: "{{ lookup('ini', 'nanominer_gpu file={{mnr_file}} default=false') }}"
# nanominer_gpus: "{{ lookup('ini', 'nanominer_gpus file={{mnr_file}} default=false') }}"
# nanominer_gpu_pool: "{{ lookup('ini', 'nanominer_gpu_pool file={{mnr_file}} default=false') }}"
# eth_minhashrate: "{{ lookup('ini', 'eth_minhashrate file={{mnr_file}} default=false') }}"
# ethminer: "{{ lookup('ini', 'ethminer file={{mnr_file}} default=false') }}"
# nvidia: "{{ lookup('ini', 'nvidia file={{mnr_file}} default=false') }}"
# xmr_stak_cpu: "{{ lookup('ini', 'xmr_stak_cpu file={{mnr_file}} default=false') }}"
# miner: "{{ lookup('ini', 'enable file={{mnr_file}} default=false') | bool }}"
# amdgpu: "{{ lookup('ini', 'amdgpu file={{mnr_file}} default=false') | bool }}"
# nanominer: "{{ lookup('ini', 'nanominer file={{mnr_file}} default=false') | bool }}"
# nanominer_cpu: "{{ lookup('ini', 'nanominer_cpu file={{mnr_file}} default=false') | bool }}"
# nanominer_cpu_pool: "{{ lookup('ini', 'nanominer_cpu_pool file={{mnr_file}} default=false') | bool }}"
# nanominer_gpu: "{{ lookup('ini', 'nanominer_gpu file={{mnr_file}} default=false') | bool }}"
# nanominer_gpus: "{{ lookup('ini', 'nanominer_gpus file={{mnr_file}} default=false') | bool }}"
# nanominer_gpu_pool: "{{ lookup('ini', 'nanominer_gpu_pool file={{mnr_file}} default=false') | bool }}"
# eth_minhashrate: "{{ lookup('ini', 'eth_minhashrate file={{mnr_file}} default=false') | bool }}"
# ethminer: "{{ lookup('ini', 'ethminer file={{mnr_file}} default=false') | bool }}"
# nvidia: "{{ lookup('ini', 'nvidia file={{mnr_file}} default=false') | bool }}"
# xmr_stak_cpu: "{{ lookup('ini', 'xmr_stak_cpu file={{mnr_file}} default=false') | bool }}"
#
#- name: General | Account Management | Provisioning Configuration | Miner | List
# set_fact:
@@ -349,14 +357,14 @@
- name: General | Account Management | Provisioning Configuration | Server | Load
set_fact:
server: "{{ lookup('ini', 'enable file={{srv_file}} default=false') }}"
server: "{{ lookup('ini', 'enable file={{srv_file}} default=false') | bool }}"
domain: "{{ lookup('ini', 'domain file={{srv_file}} default=hyperling.com') }}"
onlyoffice: "{{ lookup('ini', 'onlyoffice file={{srv_file}} default=false') }}"
grafana: "{{ lookup('ini', 'grafana file={{srv_file}} default=false') }}"
influxdb1: "{{ lookup('ini', 'influxdb1 file={{srv_file}} default=false') }}"
influxdb2: "{{ lookup('ini', 'influxdb2 file={{srv_file}} default=false') }}"
certbot: "{{ lookup('ini', 'certbot file={{srv_file}} default=false') }}"
hugo: "{{ lookup('ini', 'hugo file={{srv_file}} default=false') }}"
onlyoffice: "{{ lookup('ini', 'onlyoffice file={{srv_file}} default=false') | bool }}"
grafana: "{{ lookup('ini', 'grafana file={{srv_file}} default=false') | bool }}"
influxdb1: "{{ lookup('ini', 'influxdb1 file={{srv_file}} default=false') | bool }}"
influxdb2: "{{ lookup('ini', 'influxdb2 file={{srv_file}} default=false') | bool }}"
certbot: "{{ lookup('ini', 'certbot file={{srv_file}} default=false') | bool }}"
hugo: "{{ lookup('ini', 'hugo file={{srv_file}} default=false') | bool }}"
- name: General | Account Management | Provisioning Configuration | Server | List
set_fact:

View File

@@ -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"
@@ -276,6 +283,19 @@
alias edit-config-wrk="sudo $EDITOR {{ wrk_file }}"
alias edit-config-mnr="sudo $EDITOR {{ mnr_file }}"
alias edit-config-srv="sudo $EDITOR {{ srv_file }}"
function_clean_trashed: |
function clean-trashed {
dir="$1"
if [[ -z $dir ]]; then
dir="./"
fi
cd $dir
dir="`pwd`"
echo "Removing '.trashed*' files in '$dir'."
find "$dir" -name ".trashed*" -exec du -h {} \; -delete | sort -h
}
alias trashed-cleanup="clean-trashed"
alias trashed-clean="clean-trashed"
function_check_trash: |
function check-trash() {
unset OPTIND
@@ -371,6 +391,9 @@
fi
echo "Checking but not cleaning /var/mail..."
du -ha /var/mail | sort -h
if [[ $clean == "Y" ]]; then
clean-trashed "~/"
fi
return 0
}
alias check_trash="check-trash"
@@ -379,18 +402,20 @@
alias_trash_clean: alias trash-clean='trash-check --clean'
alias_clean_dir: |
function clean-dir() {
sudo du -hs
clean_dir="`date '+%Y%m%d_%H%M%S'`_CLEANED"
trash_dir="$HOME/TRASH/$clean_dir"
curr_dir="`pwd`"
mkdir -pv "$trash_dir"
echo "$curr_dir is being cleaned at `date`." | tee "$trash_dir"/INFO.txt
mv -v ..?* .[!.]* * "$trash_dir"/ | tee -a "$trash_dir"/INFO.txt
sudo du -hs
}
function_clean: |
function clean() {
sudo du -hs
clean-dir
sudo du -hs
clean-trash
clean-code
clean-backups
}
function_flatpak_usage: |
function flatpak-usage() {
@@ -402,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 &&
@@ -413,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
@@ -459,25 +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
if [[ ! -d $project ]]; then
continue
fi
echo "*** `basename $project` ***"
echo -e "\n*** `basename $project` ***"
cd $project
if [[ -d .git ]]; then
git ls-remote --exit-code --heads origin dev
dev_exists="$?"
if [[ "$dev_exists" == 0 ]]; then
git switch dev
elif [[ "$dev_exists" == 2 ]]; then
git switch main
else
echo "ERROR: Unknown status for dev_exists, '$dev_exists'."
continue
fi
git pull
git push
else
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
@@ -492,29 +597,60 @@
'
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
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_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 +706,272 @@
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: |
function backup {
/usr/local/bin/backup_system.sh
}
alias backup-system="backup"
alias system-backup="backup"
alias check-backups="ll /srv/backup"
function clean-backup {
sh -c "rm -rfv /srv/backup/*"
}
alias clean-backups="clean-backup"
function_log: |
function log {
echo -e "$1"
}
function blog {
echo -e "\n\n$1\n\n"
}
function_debian_upgrade: |
function debian-upgrade {
typeset -l OLD NEW
OLD="$1"
NEW="$2"
blog "*** Upgrading from '$OLD' to '$NEW' ***"
if [[ -z "$OLD" || -z "$NEW" ]]; then
echo -n "ERROR: Please pass the OLD and NEW version names"
echo ", such as 'debian-upgrade bookworm trixie'. "
return 1
fi
blog "*** Running 'backup' before starting upgrade. ***"
sleep 1
backup
blog "*** Listing the current apt listing for '$OLD' ***"
sudo grep "$OLD" /etc/apt/sources.list /etc/apt/sources.list.d/*
echo -en "\nAre these the entries you'd like changed to '$NEW'? (y/N) "
typeset -u confirm_change
read confirm_change
if [[ -z "$confirm_change" || "$confirm_change" == "N"* ]]; then
blog "*** Aborting upgrade, change rejected. ***"
return 1
fi
unset confirm_change
blog "*** Continuing with upgrade. ***"
sudo sed -i "s/$OLD/$NEW/g" /etc/apt/sources.list
find /etc/apt/sources.list.d/ -name "*.list" \
-exec sudo sed -i "s/$OLD/$NEW/g" {} \;
find /etc/apt/sources.list.d/ -name "*.sources" \
-exec sudo sed -i "s/$OLD/$NEW/g" {} \;
sudo grep $OLD /etc/apt/sources.list /etc/apt/sources.list.d/*.{list,sources}
sudo grep $NEW /etc/apt/sources.list /etc/apt/sources.list.d/*.{list,sources}
echo -en "\nDo the source files look correct? (y/N) "
typeset -u confirm_correct
read confirm_correct
if [[ -z "$confirm_correct" || "$confirm_correct" == "N"* ]]; then
blog "*** Aborting upgrade, confirmation rejected. ***"
return 1
fi
unset confirm_correct
blog "*** Starting the upgrade. ***"
sleep 1
sudo apt update
sudo apt upgrade --without-new-pkgs
blog -e "*** Upgrades complete, now add new packages. ***"
sleep 1
sudo apt full-upgrade
blog "*** New packages complete, clean apt files. ***"
sleep 1
sudo apt autoremove --purge
sudo apt clean
blog "*** All done! '$OLD' is now '$NEW'. Please reboot. ***"
sleep 1
unset OLD NEW
}
alias upgrade-debian="debian-upgrade"
function_ebook_convert: |
# Regenerate all eBook projects at once.
function ebook-convert {
find ~/Code/ebook-* -name "*.pdf" -print -delete
find ~/Code/ebook-* -name convert.sh -print -exec bash "{}" \;
}
alias ebooks="ebook-convert"
alias convert="ebook-convert"
alias_sudo: |
# Allows for alias expansions when using sudo, such as doing "sudo ll".
alias sudo="sudo "
function_load_branch: |
# Change a branch to point at another.
function load-branch {
rcvr="$1" # branch which we want to modify
base="$2" # branch with the changes we want
if [[ "$rcvr" == "main" ]]; then
echo "*** ERROR: Are you nuts, fool!? Not main! Do it manually! ***"
exit 1
fi
if [[ -z "$base" ]]; then
if [[ "$rcvr" == "prod" ]]; then
base="stage"
elif [[ "$rcvr" == "stage" ]]; then
base="dev"
else
echo "* Unsure which branch to use for '$rcvr'. Please specify."
exit 1
fi
echo "* Base was not specified, using '$base' for '$rcvr'."
else
echo "* Requested pointing '$rcvr' branch to '$base'."
fi
echo -e "\n* Ensuring we are on base branch '$base'." &&
git switch "$base" &&
echo -e "\n* Changing pointer for '$rcvr' to '$base'." &&
git branch -f "$rcvr" "$base" &&
#echo -e "\n* Switching to branch '$rcvr'." &&
#git switch "$rcvr" &&
echo -e "\n* Forcing push on branch '$rcvr'." &&
git push --force --set-upstream origin "$rcvr" &&
echo -e "\n* Done! Displaying list of remote branches." &&
git ls-remote --heads | sort
if [[ "$base" != "dev" ]]; then
echo -e "\n* Checking if a dev branch exists."
git ls-remote --exit-code --heads origin dev
dev_exists="$?"
if [[ "$dev_exists" == 0 ]]; then
echo -e "\n* Switching back to dev."
git switch dev
elif [[ "$dev_exists" == 2 ]]; then
echo -e "\n* Switching back to main."
git switch main
else
echo "*** ERROR: Unknown status for dev_exists, '$dev_exists'. ***"
fi
fi
echo -e "\n* Verifying which branch we're on."
git branch
}
alias load-prod="load-branch prod"
alias load-stage="load-branch stage"
alias rollback-prod="load-branch prod main"
alias rollback-stage="load-branch stage prod"
alias rollback-dev="load-branch dev stage"
alias reset-prod="load-branch prod main"
alias reset-stage="load-branch stage main"
alias reset-dev="load-branch dev main"
- name: General | Account Management | Users | Files | Common Variable
set_fact:
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 }}
@@ -595,16 +990,17 @@
{{ metasploit_aliases }}
{{ show_config_aliases }}
{{ edit_config_aliases }}
{{ function_clean_trashed }}
{{ function_check_trash }}
{{ function_clean }}
{{ function_flatpak_usage }}
{{ function_flatpak_purge }}
{{ alias_vim }}
{{ alias_here }}
{{ alias_docker_reload }}
{{ alias_docker_update }}
{{ function_docker_reload }}
{{ function_docker_update }}
{{ function_docker_upgrade }}
{{ alias_docker_restart }}
{{ function_docker_restart }}
{{ alias_code_check }}
{{ alias_code_reset }}
{{ function_code_reseed }}
@@ -616,6 +1012,23 @@
{{ 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_log }}
{{ function_debian_upgrade }}
{{ function_ebook_convert }}
{{ alias_sudo }}
{{ function_load_branch }}
- name: General | Account Management | Users | Files | .bashrc
blockinfile:

View File

@@ -1,12 +1,18 @@
---
# Jobs relating to the ansible user.
# $RANDOM is anywhere from 0 to 32767 in BASH. This would be up to ~9 hours.
# $RANDOM / 10 can be up to about 3200 seconds, or ~55 minutes.
# $RANDOM / 20 can be up to about 1600 seconds, or ~27 minutes.
# $RANDOM / 50 can be up to about 650 seconds, or ~11 minutes.
# $RANDOM / 100 can be up to about 320 seconds, or ~5 minutes.
# This prevents multiple systems from hitting it at the exact same time.
- name: General | Cron | Ansible | Create Subscriber Job
cron:
user: ansible
name: "Ansible Sync"
minute: "*/30"
job: "sudo {{ ansible_pull_exec.stdout }} -o -U {{ git_repo_http }} --checkout {{ branch }}"
job: "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: "sleep $(( $RANDOM / 1 )); sudo {{ ansible_pull_exec.stdout }} -v -U {{ git_repo_http }} --checkout {{ branch }}"
state: present
disabled: "{{ 'yes' if no_telem else 'no' }}"

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

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

View File

@@ -43,7 +43,7 @@
- bash
- sudo
- nmap
- neofetch
- "{{ neofetch }}"
- "{{ sshfs }}"
- "{{ locate }}"
- zsh
@@ -56,6 +56,10 @@
- "{{ cron }}"
- "{{ encfs }}"
- rsync
- "{{ iftop }}"
- "{{ nethogs }}"
- "{{ ntp_server }}"
- "{{ dig }}"
state: present
- name: General | Software | Packages | Install Software (DEV)
@@ -137,3 +141,11 @@
state: absent
when: ansible_distribution != "Ubuntu"
ignore_errors: yes
- name: General | Software | Packages | Other Debian Packages
package:
name:
- usbutils
state: present
when: ansible_distribution in ("Debian")
ignore_errors: yes

View File

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

View File

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

View File

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

View File

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

View 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

View File

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

View File

@@ -24,7 +24,6 @@
method: system
flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo
## Flatpak Installs ##
- name: Workstation | Linux | Flatpak Distro | Flatpak | Variables
@@ -35,18 +34,20 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Arrays
set_fact:
flatpaks_generic:
- { app: "org.libreoffice.LibreOffice", name: "office", extra: "" }
- { app: "io.gitlab.librewolf-community", name: "librewolf", extra: "" }
- { app: "org.signal.Signal", name: "signal", extra: "" }
- { app: "org.mozilla.firefox", name: "firefox-flatpak", extra: "" }
- { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" }
- { app: "io.gitlab.librewolf-community", name: "librewolf", extra: "" }
- { app: "chat.simplex.simplex", name: "simplex", extra: "" }
- { app: "org.signal.Signal", name: "signal", extra: "" }
- { app: "im.riot.Riot", name: "element", extra: "" }
- { app: "org.telegram.desktop", name: "telegram", extra: "" }
- { app: "org.gimp.GIMP", name: "gimp", extra: "" }
- { app: "org.libreoffice.LibreOffice", name: "office", extra: "" }
- { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" }
flatpaks_coding:
- { app: "com.vscodium.codium", name: "codium", 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: "" }
- { 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: "" }
@@ -68,14 +69,13 @@
- { app: "org.audacityteam.Audacity", name: "audacity", extra: "" } # Say "no thanks" to spyware.
- { app: "com.discordapp.Discord", name: "discord", extra: "" } # Stopped working, just spins and says Starting.
# 2022-11-20 No longer using any of these and they're taking up a lot of space. #
- { app: "im.riot.Riot", name: "element", extra: "" }
- { app: "org.telegram.desktop", name: "telegram", extra: "" }
- { app: "com.jetbrains.PyCharm-Community", name: "pycharm", extra: "" }
# End 2022-11-20 #
- { app: "io.lbry.lbry-app", name: "lbry", extra: "dbus-launch" } # No longer supported, noticed 2023-09-01.
- { app: "chat.delta.desktop", name: "deltachat", extra: "" } # No longer used, removed 2023-12-18.
- { app: "org.gnome.Geary", name: "geary", extra: "" } # No longer used, removed 2024-12-15
- { app: "org.rncbc.qsynth", name: "qsynth", extra: "" } # 2024-12-15, Not worth the setup, use LMMS or VMPK.
- { app: "org.godotengine.Godot", name: "godot", extra: "" } # 20250831 Stopped playing with this months / years ago.
# Generic #

View File

@@ -3,28 +3,53 @@
## 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"
flutter_report: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.sdk.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 ##
- 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 ##
@@ -60,9 +85,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 +101,7 @@
url: "{{ flutter_url }}"
dest: "{{ flutter_download_file }}"
owner: "{{ user }}"
group: "{{ user }}"
mode: '0664'
when: not flutter_download_stat.stat.exists
@@ -84,6 +110,7 @@
path: "{{ flutter_sdk_location }}"
state: directory
owner: "{{ user }}"
group: "{{ user }}"
mode: '0755'
- name: Workstation | Linux | Software | Flutter | Extract SDK
@@ -91,7 +118,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 +164,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 ##

View 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

View File

@@ -38,42 +38,16 @@
- "{{ appimagelauncher }}"
- "{{ evolution }}"
- "{{ evolution }}*"
- adb
- fastboot
- 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 #

View 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

View File

@@ -13,16 +13,15 @@
, 'io.gitlab.librewolf-community.desktop', 'librewolf.desktop'
, 'org.mozilla.firefox.desktop', 'firefox.desktop'
, 'org.signal.Signal.desktop', 'signal-desktop.desktop'
, 'im.riot.Riot.desktop'
, 'org.telegram.desktop.desktop'
, 'com.discordapp.Discord.desktop'
, 'com.vscodium.codium.desktop'
, '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 +34,13 @@
# 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:
@@ -213,7 +219,12 @@
dconf write /org/gnome/desktop/notifications/application/org-gnome-evolution/enable-sound-alerts false && inc_dconf &&
dconf write /org/gnome/desktop/notifications/application/org-gnome-evolution/enable false && inc_dconf &&
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