Compare commits

...

87 Commits

Author SHA1 Message Date
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
8289e2a0ca Merge pull request 'General Enhancements' (#2) from dev into main
Reviewed-on: #2
2025-01-29 11:38:56 -07:00
b387fe2c2a Pull from the git repo rather than creating a local directory. 2025-01-29 11:22:15 -07:00
3370552070 Need to have Code OSS back since Flutter wipes the workspace setup. Either it or Codium should be dedicated to Flutter, and the other will be all the other projects. 2025-01-20 17:40:04 -07:00
135ef241da Remove extra text. 2025-01-20 17:26:35 -07:00
127820d971 Disable analytics as part of the report. 2025-01-20 17:20:20 -07:00
95d1f71491 Add flutter and dependencies. 2025-01-20 17:17:32 -07:00
e69b5d2d33 Determine default video bitrates based on dimensions. Add file options to extension. Fix shrinking to certain sizes by using -2 as width. Tested successfully! 2025-01-19 16:37:02 -07:00
4a3ac3622f Allow shrinking a shrunk image. Add size to tag. Add defaults to usage. Tested successfully! 2025-01-19 12:41:16 -07:00
8fc05c43b5 Add fastboot too! 2025-01-09 17:24:36 -07:00
aa97e9ba6e Add adb to the default workstation packages. 2025-01-09 17:23:37 -07:00
7cd8fc4eac Add alias for command so that it is consistent with code-check, code-reseed, etc. 2025-01-09 16:26:40 -07:00
658f13d74a Add helper to clean up Code folder. 2025-01-09 13:25:23 -07:00
eba289c1d7 Automatically exclude unnecessary Android files when copying data. 2025-01-09 11:37:42 -07:00
3dffbc11db Fancify the editing setting to allow only audio or only video programs. Move GIMP to Generic so that it's always installed.. 2025-01-05 16:59:37 -07:00
391129e19b Give the desktop update function nice output like just done in Termux. 2025-01-03 12:31:51 -07:00
ae3112d969 Fix the new summarize feature on check-trash. 2025-01-02 15:59:50 -07:00
db3e610c91 Add a prod alias similar to how the env-termux project does it. 2025-01-02 15:51:41 -07:00
76ec891138 Add summarize parameter to check-trash. 2025-01-02 13:37:22 -07:00
752969e2fa Add Music Studio, Migrate from GitHub to Personal Gitea (#1)
Reviewed-on: #1
2025-01-02 13:03:50 -07:00
30 changed files with 1188 additions and 561 deletions

View File

@ -45,7 +45,7 @@ Workstation: Currently failing at `[Workstation | Linux | Flatpak Distro | Packa
### NixOS
99%, still need to get Telegraf going and refactor local.yml but everything else
is working well. It is automatically implementing github.com/Hyperling/NixOS.
is working well. It is automatically implementing git.hyperling.com/me/env-nixos.
## Currently Supported Unix Systems
### FreeBSD 12, 13

View File

@ -95,30 +95,39 @@
case $pkg_mgr in
apt)
if [[ $distribution != "ParrotOS" ]]; then
echo "*** Apt ***" &&
echo -e "******* Apt *******\n*** Update Cache ***" &&
sudo apt update &&
echo -e "\n*** Auto Remove ***" &&
sudo apt autoremove {{ update_accept_var }} &&
echo -e "\n*** Clean ***" &&
sudo apt clean {{ update_accept_var }} &&
echo -e "Cleaned!\n\n*** Configure DPKG ***" &&
sudo dpkg --configure -a &&
echo -e "\n*** Fix Broken/Missing ***" &&
sudo apt --fix-broken --fix-missing install &&
echo -e "\n*** Upgrade ***" &&
sudo apt dist-upgrade --allow-downgrades --fix-broken \
--fix-missing {{ update_accept_var }} ||
return 1
else
echo "*** Parrot ***"
echo -e "******* Parrot *******\n*** Update Cache ***" &&
sudo apt update &&
echo -e "\n*** Auto Remove ***" &&
sudo apt autoremove {{ update_accept_var }} &&
parrot_mirrors_suck=true &&
while [[ $parrot_mirrors_suck ]]; do
unset parrot_mirrors_suck
echo -e "\n*** Upgrade ***"
sudo parrot-upgrade
if [[ $? != 0 ]]; then
parrot_mirrors_suck=true
echo -e "*** Update Cache, Again ***"
sudo apt update --fix-missing
fi
done ||
return 1
fi
echo -e "\n******* Mission Complete!! *******"
;;
pacman)

View File

@ -8,17 +8,8 @@
st_install_dir: /usr/local/src/st
global_bin: /usr/local/bin
x_desktops: /usr/share/xsessions
repo_github: https://github.com/Hyperling/ansible.git
#repo_local: https://git.hyperling.com/ansible.git
# Local server not working yet, go back to Github even though they throttle me.
repo_local: https://github.com/Hyperling/ansible.git
- name: General | Facts | System | Dev
set_fact:
#repo_local: https://git.hyperling.com/ansible-dev.git
# Local server not working yet, go back to Github even though they throttle me.
repo_local: https://github.com/Hyperling/ansible.git
when: branch == "dev"
git_repo_http: http://{{ git_host }}/{{ git_user }}/{{ git_project }}
git_repo_ssh: ssh://git@{{ git_host }}:{{ git_ssh_port }}/{{ git_user }}/{{ git_project }}
- name: General | Facts | System | Linux

View File

@ -34,9 +34,12 @@ function usage() {
Parameters:
-s SIZE : Integer for the maximum length of either image dimension.
Default size is 2000.
-l LOCATION : The specific image or folder which needs images shrunk.
Default location is the current directory.
-r : Recursively shrink images based on the location passed.
-f : Force the image to be shrunk even if a file already exists for it.
-F : FORCE the image to be shrunk even if the file is already shrunk.
-d : Delete the original image if the compressed image is smaller.
-c : Clean the filename of underscores, dashes, 'IMG', etc.
-A : Resursively Force, Delete, and Clean.
@ -48,15 +51,17 @@ function usage() {
## Parameters ##
while getopts ":s:l:rfdcAhx" opt; do
while getopts ":s:l:rfFdcAhx" opt; do
case $opt in
s) in_size="$OPTARG" && size="$in_size" ;;
l) location="$OPTARG" ;;
r) recurse="Y" && search="find" ;;
f) force="Y" ;;
F) super_force="Y" ;;
d) delete="Y" ;;
c) clean="Y" ;;
A) recurse="Y" && search="find" && force="Y" && delete="Y" && clean="Y" ;;
e) expand="Y" ;;
A) recurse="Y" && search="find" && force="Y" && delete="Y" && expand="Y" ;;
h) usage 0 ;;
x) set -x ;;
*) echo "ERROR: Option $OPTARG not recognized." >&2 && usage 1 ;;
@ -70,7 +75,7 @@ if [[ -n "$in_size" && "$size" != "$in_size" ]]; then
usage 1
fi
convert_exe="`which convert`"
convert_exe="`which convert` -strip"
if [[ "$convert_exe" == "" ]]; then
echo "ERROR: 'convert' command could not be found, "
echo "please install 'imagemagick'."
@ -90,8 +95,8 @@ $search "$location" | sort | while read image; do
# Avoid processing directories no matter the name.
[ -d "$image" ] && continue
# Avoid processing files previously shrunk.
[[ "$image" == *"$tag"* ]] && continue
# Avoid processing files previously shrunk, unless we are FORCEing.
[[ "$image" == *"$tag"* && -z "$super_force" ]] && continue
echo -e "\n$image"
@ -106,8 +111,7 @@ $search "$location" | sort | while read image; do
continue
fi
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$extension"
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$size.$extension"
## Clean Filename ##
# Prevent directory from having its name cleaned too.
@ -120,13 +124,31 @@ $search "$location" | sort | while read image; do
new_image_clean="${new_image_clean//-/}"
new_image_clean="${new_image_clean// /}"
# Add directory back to the full path.
## Expanded Filename ##
# Add back in the dashes so that the year, month, date, and time are exposed.
TEMP="$new_image_clean"
# Date Data
new_image_exp="${TEMP:0:4}-${TEMP:4:2}-${TEMP:6:2}"
# Time Data
new_image_exp="${new_image_exp}_${TEMP:8:2}-${TEMP:10:2}-${TEMP:12:2}"
# Remainder Data
if [[ "${TEMP:14:1}" == "." ]]; then
SEP=""
else
SEP="_"
fi
new_image_exp="${new_image_exp}${SEP}${TEMP:14}"
unset TEMP SEP
# Add directory back to the full paths.
new_image_clean="$image_dirname/$new_image_clean"
new_image_exp="$image_dirname/$new_image_exp"
# Delete the existing shrunk image if we are forcing a new compression.
if [[ -n "$force" && (-e "$new_image" || -e $new_image_clean) ]]; then
if [[ -n "$force" &&
(-e "$new_image" || -e $new_image_clean || -e $new_image_exp ) ]]; then
echo -n " FORCE: "
rm -v "$new_image" "$new_image_clean" 2>/dev/null
rm -v "$new_image" "$new_image_clean" "$new_image_exp" 2>/dev/null
fi
# Skip if a compressed image was already created today.
@ -135,10 +157,14 @@ $search "$location" | sort | while read image; do
continue
fi
# Whether or not to use the cleaned version or the normal version.
# Whether or not to use the cleaned version.
if [[ -n $clean ]]; then
new_image="$new_image_clean"
# Whether or not to use the expanded version.
elif [[ -n $expand ]]; then
new_image="$new_image_exp"
fi
# Otherwise uses the same name as before.
###### TBD Instead of this, only alter the file names, and set a dirname var?
#### Create a new directory if the directory names were altered.

View File

@ -32,7 +32,14 @@ function usage {
-i input : The input file or folder with which to search for video files.
If nothing is provided, current directory (.) is assumed.
-v bitrate : The video bitrate to convert to.
Defaults to '2000k'.
Defaults are based on the size passed.
>= 2160: '30M'
>= 1440: '12M'
>= 1080: '5M'
>= 720: '2000k'
>= 480: '750k'
>= 360: '250k'
< 360: '100k'
-a bitrate : The audio bitrate to convert to.
Defaults to '192k'.
-c vcodec : The video codec you'd like to use, such as libopenh264.
@ -41,7 +48,8 @@ function usage {
-r : Recurse the entire directory structure, compressing all video files.
-f : Force recompressing any files by deleting it if it already exists.
-d : Delete the original video if the compressed version is smaller.
-A : Recursively Force and Delete.
-l : Clean the filename of dashes and underscores so dates line up.
-A : Recursively Force, Delete, and Clean.
-m : Measure the time it takes to compress each video and do the loop.
-V : Add verbosity, such as printing all the variable values.
-x : Set the shell's x flag to display every action which is taken.
@ -52,7 +60,7 @@ function usage {
## Parameters ##
while getopts ":i:v:a:c:s:rfdAmVxh" opt; do
while getopts ":i:v:a:c:s:rfdlAmVxh" opt; do
case $opt in
i) input="$OPTARG"
;;
@ -70,7 +78,9 @@ while getopts ":i:v:a:c:s:rfdAmVxh" opt; do
;;
d) delete="Y"
;;
A) search_command="find" && force="Y" && delete="Y"
l) clean="Y"
;;
A) search_command="find" && force="Y" && delete="Y" #&& clean="Y"
;;
m) time_command="`which time`"
;;
@ -95,14 +105,44 @@ if [[ -z "$input" ]]; then
input="."
fi
if [[ -z "$video_bitrate" ]]; then
video_bitrate="2000k"
if [[ -z $size ]]; then
size="720"
fi
typeset -i size_int
size_int="$size"
# Ensure the filenames sort properly between 3 and 4 digit resolutions.
while (( ${#size} < 4 )); do
size="0$size"
done
compress_tags="$size"
size="-filter:v scale=-2:$size"
if [[ -z "$video_bitrate" ]]; then
# Based roughly on the 2.5 step iteration used for 720 and 1080.
if (( size_int >= 2160 )); then
video_bitrate="30M"
elif (( size_int >= 1440 )); then
video_bitrate="12M"
elif (( size_int >= 1080 )); then
video_bitrate="5M"
elif (( size_int >= 720 )); then
video_bitrate="2000k"
elif (( size_int >= 480 )); then
video_bitrate="750k"
elif (( size_int >= 360 )); then
video_bitrate="250k"
else
video_bitrate="100k"
fi
fi
compress_tags="$compress_tags-$video_bitrate"
video_bitrate="-b:v $video_bitrate -minrate 0 -maxrate $video_bitrate -bufsize $video_bitrate"
if [[ -z "$audio_bitrate" ]]; then
audio_bitrate="192k"
fi
compress_tags="$compress_tags-$audio_bitrate"
audio_bitrate="-b:a $audio_bitrate"
if [[ -z "$codec" ]]; then
@ -121,11 +161,6 @@ else
time_command="$time_command -p"
fi
if [[ -z $size ]]; then
size="720"
fi
size="-filter:v scale=-1:$size"
## Main ##
if [[ "$verbose" == "Y" ]]; then
@ -172,26 +207,41 @@ $search_command "$input" | sort | while read file; do
# Build the new filename to signify it is different than the original.
newfile="${file//$extension/$filename_flag-$date_YYYYMMDD.$extension_lower}"
# Add the size, video, and audio quality it was converted to.
newfile="${newfile//\.$extension_lower/_$compress_tags.$extension_lower}"
if [[ $newfile == $file ]]; then
echo "ERROR: The new calculated filename matches the old, skipping." >&2
continue
fi
# TBD / TODO: Test this functionality!
new_video_clean="${newfile}"
new_video_clean="${new_video_clean//_/}"
new_video_clean="${new_video_clean//-/}"
new_video_clean="${new_video_clean// /}"
# More exception checks based on the new file.
if [[ -e "$newfile" ]]; then
if [[ -e "$newfile" || -e "$new_video_clean" ]]; then
if [[ "$force" == "Y" ]]; then
echo "FORCE: Removing '$newfile'."
if [[ -d ~/TRASH ]]; then
mv -v "$newfile" ~/TRASH/
mv -v "$newfile" "$new_video_clean" ~/TRASH/ 2>/dev/null
else
rm -v "$newfile"
rm -v "$newfile" "$new_video_clean" 2>/dev/null
fi
else
echo "SKIP: Already has a compressed version ($newfile)."
echo "SKIP: Already has a compressed version."
ls -sh "$newfile" "$new_video_clean" 2>/dev/null
continue
fi
fi
# Whether or not to use the cleaned version or the normal version.
if [[ -n $clean ]]; then
newfile="$new_video_clean"
fi
# Convert the file.
echo "Converting to '$newfile'."
echo "*** `date` ***"

View File

@ -15,7 +15,7 @@ nixos_working_exe=activate.sh
function usage {
echo -e "\nUsage: $PROG -b BRANCH" >&2
cat <<- EOF
Run a setup script for NixOS based on the https://github.com/Hyperling/NixOS project.
Run a setup script for NixOS based on the https://git.hyperling.com/me/env-nixos project.
Parameters:
-b BRANCH: The branch which should be installed, likely 'main' or 'dev'.
@ -48,7 +48,7 @@ fi
cleanup
# Install the Hyperling NixOS configurations.
git clone https://github.com/Hyperling/NixOS --branch $branch $nixos_working_dir
git clone https://git.hyperling.com/me/env-nixos --branch $branch $nixos_working_dir
chmod 755 $nixos_working_dir/$nixos_working_exe
$nixos_working_dir/$nixos_working_exe

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,14 @@
"editor.tabSize": 3,
"editor.insertSpaces": false,
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true
"files.trimFinalNewlines": true,
"git.confirmSync": false,
"[dart]": {
"editor.formatOnSave": true,
"editor.formatOnType": true,
"editor.selectionHighlight": false,
"editor.tabCompletion": "onlySnippets",
"editor.wordBasedSuggestions": "off"
}
}

View File

@ -75,7 +75,6 @@
- include_tasks: tasks/general/software/sendmail.yml
when: ansible_system == "FreeBSD"
# Gather again in case missing programs have now been installed.
- include_tasks: facts/general/gather.yml
@ -124,8 +123,11 @@
- include_tasks: tasks/workstation/linux/software/packages.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/flatpaks.yml
when: ansible_system == "Linux" and flatpak_distro
- include_tasks: tasks/workstation/linux/software/lutris.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/vscodium.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/brave.yml
when: ansible_pkg_mgr in ("apt", "dnf", "zypper") and not mobile
@ -156,6 +158,16 @@
- include_tasks: tasks/workstation/shared/settings/services.yml
# Final Tasks (SLOW) #
- include_tasks: tasks/workstation/linux/software/flutter.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/android.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/flatpaks.yml
when: ansible_system == "Linux" and flatpak_distro
when: workstation == true
@ -228,12 +240,6 @@
- include_tasks: tasks/server/software/hugo.yml
when: hugo == true
- include_tasks: tasks/server/software/gitlab.yml
when: gitlab and ansible_pkg_mgr in ("apt", "dnf") and ansible_distribution not in ("Fedora")
- include_tasks: tasks/server/software/git.yml
when: git and ansible_pkg_mgr in ("apt")
when: server == true

View File

@ -6,7 +6,7 @@
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
PROG="$(basename -- "${BASH_SOURCE[0]}")"
LOCAL=$DIR/local.yml
URL="https://github.com/Hyperling/ansible"
URL="https://git.hyperling.com/me/env-ansible"
BRANCH="main"
## Functions ##

View File

@ -26,35 +26,55 @@
blockinfile:
path: "{{ gen_file }}"
block: |
;;;;;;; Available options - all require lowercase values ;;;;;;
; Please note that all potions require lowercase keys and values.
;
;;;;;;;;;;;;;;;;;;;; Basic Options ;;;;;;;;;;;;;;;;;;;;
;
; enable : Provide true for the provision to occur.
; Default: false
;
; user : Provide the name of the user account.
; Example: tom, jerry, kim, sarah
; Default: ling
; Default: user
;
; user_desc : Provide the description of the user account.
; Example: Thomas, Jerry, Kimberly, Sarah
; Default: Hyperling
; Default: User
;
; branch : Provide the Github branch that the machine should poll.
; Example: main, dev
; Default: main
; sshd_port : Determine the port which SSHD should listen on.
; Example: 12345
; Default: 22
;
; pentesting : Set to true to install tools such as metasploit.
; nmap is already provided for reporting
; Default: false
;
; no_telem : Set to true to avoid setting up telemetry services.
; Disables GitHub updates to this project.
; Disables all telegraf pings.
; Default: false
;;;;;;;;;;;;;;;;;;;; Git Polling ;;;;;;;;;;;;;;;;;;;;
;
; battery : Set to true to attempt to save battery life.
; Slows down the rate of services such as telegraf and cron.
; Default: false
; For syncing this machine to a Git repository of this Ansible project
; in this fashion: ssh://git@GIT_HOST:GIT_SSH_PORT/GIT_USER/GIT_PROJECT
;
; branch : Branch to use on this machine.
; Example: main, dev, prod
; Default: main
;
; git_host : Provide the git host that the machine should poll.
; Example: github.com, gitlab.com. gitea.com
; Default: git.hyperling.com
;
; git_ssh_port : Port of the server host to use for SSH requests.
; Example: 22, 222, 2222
; Default: 22
;
; git_user : Provide the git user which projects are found under.
; Example: Hyperling, JimBobMcGeeJr
; Default: me
;
; git_project : Name of this project on the server host.
; Example: Ansible, ansible-setup, my-env
; Default: env-ansible
;
;;;;;;;;;;;;;;;;;;;; Swap File ;;;;;;;;;;;;;;;;;;;;
;
; swap_block : Set to the block size if dd should create a swapfile.
; Preferably keep this under 2G for integrity sakes, the
@ -70,10 +90,33 @@
; Example: /usr/local/swap
; Default: /swapfile
;
; sshd_port : Determine the port which SSHD should listen on.
; Example: 12345
;;;;;;;;;;;;;;;;;;;; Sync Frequency ;;;;;;;;;;;;;;;;;;;;
;
; no_telem : Set to true to avoid setting up telemetry services.
; Disables GitHub updates to this project.
; Disables all telegraf pings.
; Default: false
;
; battery : Set to true to attempt to save battery life.
; Slows down the rate of services such as telegraf and cron.
; Default: false
;
;;;;;;;;;;;;;;;;;;;; Server Shortcut ;;;;;;;;;;;;;;;;;;;;
;
; For typing `prod` and getting straight to a server, like in env-termux.
;
; prod_host : Branch to use on this machine.
; Example: myserver.com, mywebhost.net
; Default: hyperling.com
;
; prod_port : Provide the git host that the machine should poll.
; Example: 22, 222, 2222
; Default: 22
;
; prod_user : Port of the server host to use for SSH requests.
; Example: jim, bob, jeff, anne
; Default: user
;
[global]
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config'
state: present
@ -93,6 +136,13 @@
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') }}"
git_host: "{{ lookup('ini', 'git_host file={{gen_file}} default=git.hyperling.com') }}"
git_user: "{{ lookup('ini', 'git_user file={{gen_file}} default=me') }}"
git_project: "{{ lookup('ini', 'git_project file={{gen_file}} default=env-ansible') }}"
git_ssh_port: "{{ lookup('ini', 'git_ssh_port file={{gen_file}} default=22') }}"
prod_host: "{{ lookup('ini', 'prod_host file={{gen_file}} default=hyperling.com') }}"
prod_port: "{{ lookup('ini', 'prod_port file={{gen_file}} default=22') }}"
prod_user: "{{ lookup('ini', 'prod_user file={{gen_file}} default=user') }}"
- name: General | Account Management | Provisioning Configuration | General | List
set_fact:
@ -109,6 +159,13 @@
- { 'swap_count': "{{ swap_count }}" }
- { 'swap_file': "{{ swap_file }}" }
- { 'sshd_port': "{{ sshd_port }}" }
- { 'git_host': "{{ git_host }}" }
- { 'git_user': "{{ git_user }}" }
- { 'git_project': "{{ git_project }}" }
- { 'git_ssh_port': "{{ git_ssh_port }}" }
- { 'prod_host': "{{ prod_host }}" }
- { 'prod_port': "{{ prod_port }}" }
- { 'prod_user': "{{ prod_user }}" }
## Workstation ##
@ -124,6 +181,10 @@
; coding : Set to true for installation of code editors (VSCode, PyCharm, Android Studio)
;
; editing : Set to true for installation of Audio/Video editors (Shotcut, Audacity, OBS Stdio, GIMP)
; Set to video for only the video related portions.
; - Shotcut, OpenShot, OBS Studio, etc.
; Set to audio for only the music related portions.
; - Audacity (or similar), LMMS, VMPK, etc.
;
; gaming : Set to true for installation of gaming software (Steam, Lutris)
;
@ -279,28 +340,6 @@
;
; hugo : Set to true to install HUGO static website generator.
;
; gitlab : ee - Installs Enterprise Edition Free Tier. Basically CE with an easier upgrade path for Paid Features.
; ce - Installs Community Edition. Excludes paid features if you'll never use them. Supposedly difficult to move to EE.
; Example: ce
;
; gitlab_url : The URL prefix for the server. Using 'http://mygitlabserver' would result in "http://mygitlabserver.((domain))".
; Regardless of whether you choose http or https, the Certbot config will be skipped since the maintainer uses a reverse proxy.
; Example: https://gitlab
;
; git : Set to true for this server to be configured as an HTTP git server.
;
; git_name : Name(s) of project(s) that the Git server should host.
; Example: ansible#ansible-dev
;
; git_branch : Branch(es) of project(s) corresponding with git_name.
; Example: main#dev
;
; git_url : URL(s) of project(s) corresponding with git_name.
; Example: https://github.com/Hyperling/ansible#https://github.com/Hyperling/ansible
;
; git_sep : Separator for git variables above.
; Example: #
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[global]
marker: '; {mark} MANAGED BY ANSIBLE | Server Config'
@ -318,13 +357,6 @@
influxdb2: "{{ lookup('ini', 'influxdb2 file={{srv_file}} default=false') }}"
certbot: "{{ lookup('ini', 'certbot file={{srv_file}} default=false') }}"
hugo: "{{ lookup('ini', 'hugo file={{srv_file}} default=false') }}"
gitlab: "{{ lookup('ini', 'gitlab file={{srv_file}} default=false') }}"
gitlab_url: "{{ lookup('ini', 'gitlab_url file={{srv_file}} default=false') }}"
git: "{{ lookup('ini', 'git file={{srv_file}} default=false') }}"
git_name: "{{ lookup('ini', 'git_name file={{srv_file}} default=false') }}"
git_branch: "{{ lookup('ini', 'git_branch file={{srv_file}} default=false') }}"
git_url: "{{ lookup('ini', 'git_url file={{srv_file}} default=false') }}"
git_sep: "{{ lookup('ini', 'git_sep file={{srv_file}} default=false') }}"
- name: General | Account Management | Provisioning Configuration | Server | List
set_fact:
@ -338,13 +370,6 @@
- { 'influxdb2': "{{ influxdb2 }}" }
- { 'certbot': "{{ certbot }}" }
- { 'hugo': "{{ hugo }}" }
- { 'gitlab': "{{ gitlab }}" }
- { 'gitlab_url': "{{ gitlab_url }}" }
- { 'git': "{{ git }}" }
- { 'git_name': "{{ git_name }}" }
- { 'git_branch': "{{ git_branch }}" }
- { 'git_url': "{{ git_url }}" }
- { 'git_sep': "{{ git_sep }}" }
## Exit if not turned on yet ##

View File

@ -100,13 +100,22 @@
mode: '0755'
loop:
- "{{ user_user.home }}/bin"
- "{{ user_user.home }}/LBRY"
- "{{ user_user.home }}/TRASH"
- "{{ user_user.home }}/Downloads"
- "{{ user_user.home }}/Reports"
become_user: "{{ user }}"
when: user_user.home != ""
- name: General | Account Management | Users | User | Create Folders | Coding
file:
path: "{{ item }}"
state: directory
mode: '0755'
loop:
- "{{ user_user.home }}/Code"
become_user: "{{ user }}"
when: user_user.home != "" and coding == true
- name: General | Account Management | Users | Home Permissions
shell: "chmod 700 {{ user_user.home }}/../*"
@ -118,8 +127,6 @@
alias_cp: alias cp='cp -v'
alias_mv: alias mv='mv -v'
alias_rm: alias rm='echo "Use mv ~/TRASH/ instead!"'
alias_clean_dir: alias clean-dir='mv * ~/TRASH/'
alias_clean_trash: alias clean-trash='sh -c "rm -rfv ~/TRASH/*"'
export_path_additions: export PATH="~/bin:"{{ global_bin }}":$PATH"
function_wttr: |
function weather() {
@ -131,7 +138,7 @@
Useful location types:
$zip_code | Ex: 12345
$city,$state | Ex: Austin,Texas
@$domain_dot_extension | Ex: @github.com
@$domain_dot_extension | Ex: @gitea.com
~$special_location | Ex: ~Manitou Incline
Full documentation: https://github.com/chubin/wttr.in'
return 1
@ -150,23 +157,27 @@
function_update: |
function update() {
PROG=$FUNCNAME
usage="Usage: $PROG [-y]
usage="Usage: $PROG [-y] [-g] [-s] [-f]
$PROG is used to run all the system's package manager commands
in one swoop. Flow stops if any command returns a failure code.
The hope is to run something as easy as 'pacman -Syyu'.
-y : Assume yes to any prompts.
-g : Shutdown after updating.
-g : Goodbye - Shutdown after updating.
-s : System updates only, no Flatpaks.
-f : Flatpaks only, no system updates."
unset OPTIND
unset accept
unset shutdown
unset only_sys
unset only_flat
while getopts ":hygsf" opt; do
case $opt in
h) echo -e "$usage"
return 0 ;;
y) accept="-y" ;;
g) goodbye="Y" ;;
g) shutdown="Y" ;;
s) only_sys="Y" ;;
f) only_flat="Y" ;;
*) echo "ERROR: -$OPTARG is not a recognized option." >&2
@ -181,7 +192,7 @@
{{ update_package_manager }}
fi
if [[ "$goodbye" == "Y" && "{{ battery }}" == "True" ]]; then
if [[ "$shutdown" == "Y" && "{{ battery }}" == "True" ]]; then
echo -e "\n*** Only System Updates - Skipping Flatpak ***\n\n"
elif [[ "$only_sys" == "Y" ]]; then
echo -e "\n*** Manually Skipping Flatpak ***\n\n"
@ -191,7 +202,8 @@
echo "*** Completed Successfully ***"
if [[ $goodbye == "Y" ]]; then
if [[ $shutdown == "Y" ]]; then
shopt -s expand_aliases
bye
fi
@ -223,6 +235,8 @@
echo "*** Completed Successfully ***"
return 0
}
alias firmware-update="update-firmware"
alias firmware-updater="update-firmware"
alias_sync: alias sync='date && echo "Syncing!" && sync && date'
export_editor: export EDITOR='vi'
init_aliases: |
@ -240,8 +254,12 @@
'
alias init-prog=init-program
bye_aliases: |
alias bye="{{ shutdown_command }}"
alias goodbye="update -yg"
function bye {
{{ shutdown_command }}
}
function goodbye {
update -yg
}
metasploit_aliases: |
alias metasploit="msfconsole"
alias hax="metasploit"
@ -270,16 +288,20 @@
unset OPTIND
unset clean
unset network
du_params="-ha"
while (( $# > 0 )); do
case $1 in
-c | -y | --clean )
clean="Y" ;;
-n | -net | --network )
network="Y" ;;
-s | -sum | --summarize )
du_params="-sh" ;;
* )
echo "
ERROR: Option '$1' with value '$2' not recognized.
$PROG [-c|-y|--clean] [-n|-net|--network]
$PROG [-c | -y | --clean] [-n | -net | --network] \
[-s | -sum | --summarize]
" >&2
return 1
;;
@ -307,8 +329,8 @@
echo "Checking $dir..."
$sudo find $dir -name TRASH | while read trash; do
if [[ "$trash" != "" && `$sudo ls -a $trash` ]]; then
echo "Found $trash with contents:"
$sudo du -ha $trash | sort -h
echo "Found $trash:"
$sudo du $du_params $trash | sort -h
if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..."
$sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@ -317,8 +339,8 @@
done
$sudo find $dir $maxdepth -name "*"Trash"*" | while read trash; do
if [[ "$trash" != "" && `$sudo ls -a $trash` ]]; then
echo "Found $trash with contents:"
$sudo du -ha $trash | sort -h
echo "Found $trash:"
$sudo du $du_params $trash | sort -h
if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..."
$sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@ -334,8 +356,8 @@
echo "Checking $dir..."
sudo find $dir -name TRASH | while read trash; do
if [[ "$trash" != "" && `sudo ls -a $trash` ]]; then
echo "Found $trash with contents:"
sudo du -ha $trash | sort -h
echo "Found $trash:"
sudo du $du_params $trash | sort -h
if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..."
sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@ -344,8 +366,8 @@
done
sudo find $dir -name .Trash"*" | while read trash; do
if [[ "$trash" != "" && `sudo ls -a $trash` ]]; then
echo "Found $trash with contents:"
sudo du -ha $trash | sort -h
echo "Found $trash:"
sudo du $du_params $trash | sort -h
if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..."
sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@ -359,11 +381,23 @@
return 0
}
alias check_trash="check-trash"
alias_clean_trash: alias clean-trash='check-trash --clean'
alias_trash_check: alias trash-check='check-trash'
alias_trash_clean: alias trash-clean='trash-check --clean'
alias_clean_dir: |
function clean-dir() {
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
}
function_clean: |
function clean() {
sudo df -h
check-trash --clean
sudo df -h
sudo du -hs
clean-dir
sudo du -hs
}
function_flatpak_usage: |
function flatpak-usage() {
@ -386,23 +420,63 @@
}
alias_vim: alias vi=vim
alias_here: alias here='ls -alh `pwd`/*'
alias_docker_reload: |
alias docker-reload='
function_docker_reload: |
function docker-reload() {
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<- EOF
Usage: docker-reload [container_name]
Providing the container name starts a log follow after the command.
A reload is characterized by a DOWN, BUILD, and UP.
EOF
return 0
fi
docker compose down &&
docker compose build &&
docker compose up -d
'
alias_docker_update: |
alias docker-update='
if [[ -n "$1" ]]; then
docker logs -f $1
fi
return 0
}
function_docker_update: |
function docker-update() {
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<- EOF
Usage: docker-update [container_name]
Providing the container name starts a log follow after the command.
An update is characterized by a DOWN, PULL, BUILD, and UP.
EOF
return 0
fi
docker compose down &&
docker compose pull &&
docker compose build &&
docker compose up -d
'
if [[ -n "$1" ]]; then
docker logs -f $1
fi
return 0
}
function_docker_upgrade: |
function docker-upgrade() {
# Wrapper for a full-scale upgrade and log view of a container.
# Paramaters:
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<- EOF
Usage: docker-upgrade [container_name]
Providing the container name starts a log follow after the command.
An upgrade is characterized by a DOWN, PULL, BUILD, and UP.
EOF
return 0
fi
# Parameters:
# 1) Container ID or Container Name, as seen in 'docker ps' command.
container=$1
if [[ -z $container ]]; then
@ -432,17 +506,46 @@
echo "*** Following Log ***" &&
echo "Press ^C to escape." &&
docker logs -f $container
return 0
}
function_docker_restart: |
function docker-restart() {
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<- EOF
Usage: docker-restart [container_name]
Providing the container name starts a log follow after the command.
A restart is characterized by a DOWN and UP.
EOF
return 0
fi
docker compose down &&
docker compose up -d
if [[ -n "$1" ]]; then
docker logs -f $1
fi
return 0
}
alias_docker_restart: |
alias docker-restart='docker compose down && docker compose up -d'
alias_code_check: |
alias code-check='
echo "Checking ~/Code directory for git changes."
ls -d ~/Code/* | while read project; do
echo "*** `basename $project` ***"
if [[ ! -d $project ]]; then
continue
fi
echo -e "\n*** `basename $project` ***"
cd $project
if [[ -d .git ]]; then
git pull
git push
else
echo "Not a Git project, skipping!"
fi
done
echo -e "\nDone!"
'
alias_code_reset: |
alias code-reset='
@ -456,23 +559,50 @@
git checkout dev
done
'
alias_code_reseed: |
alias code-reseed='
unseed_dir="$HOME/TRASH/`date +%Y-%m-%d`_UnseededCodeProjects"
function_code_reseed: |
function git_projects_to_sync {
# Projects should be followed by the current development branch name.
cat <<- EOF
env-ansible dev
env-docker dev
env-termux dev
nodejs-website dev
ebook-health-protocol dev
flutter-expense-tracker dev
flutter-social-traveler-app dev
nodejs-social-traveler-server dev
misc-spare-change main
flutter-buddy-website dev
EOF
}
function code-reseed {
# Unseed current projects.
echo -e "\n*** Move old projects to TRASH ***"
unseed_dir="$HOME/TRASH/`date +%Y%m%d_%H%M%S`_UnseededCodeProjects"
mkdir -pv "$unseed_dir"
mv -v ~/Code/*{ansible,docker,nix,break,website,www,tictactoe,-dev}* \
"$unseed_dir"/ 2>/dev/null
git clone git@github.com:Hyperling/Ansible \
--branch dev ~/Code/ansible-dev
git clone git@github.com:Hyperling/Docker \
--branch dev ~/Code/docker-dev
git clone git@github.com:Hyperling/Website \
--branch dev ~/Code/website-dev
git clone git@github.com:Hyperling/BreakTheHabit \
--branch dev ~/Code/breakthehabit-dev
git clone git@github.com:Hyperling/TicTacToeAndroid \
--branch dev ~/Code/tictactoe-dev
'
mv -v ~/Code/* "$unseed_dir"/ 2>/dev/null
# Git repo information.
git_repo_ssh={{ git_repo_ssh }}
git_main_project={{ git_project }}
git_repo_ssh_basename=${git_repo_ssh//$git_main_project/}
# Loop over project list.
git_projects_to_sync | while read git_project git_branch; do
echo -e "\n*** $git_project ***"
# Project folder manipulation.
dest_folder="$git_project"
if [[ "$dest_folder" == "flutter-"* ]]; then
echo "Using '_' for Flutter Project"
dest_folder="${dest_folder//-/_}"
fi
# Download of the project.
git clone ${git_repo_ssh_basename}${git_project} \
--branch $git_branch ~/Code/$dest_folder
done
}
function_clean_filenames: |
function clean-filenames() {
# Must provide the directory you'd like to clean all the filenames in.
@ -503,7 +633,7 @@
echo -e "\nDone!\n"
}
alias_clone: |
alias clone="rsync -auPh --delete"
alias clone="rsync -auPhz --delete --exclude '.gradle' --exclude 'app/build'"
export_hyperling: |
export HYPERLING6="2a07:e03:3:80::1"
export HYPERLING4="185.130.47.173"
@ -513,10 +643,102 @@
if [[ -e $DOCKER_SOURCE && $LOGNAME == "root" ]]; then
source $DOCKER_SOURCE
fi
alias_scan: |
alias scan="nmap -A -p- --script=vuln"
alias_prod: |
alias prod="ssh -p {{ prod_port }} {{ prod_user }}@{{ prod_host }}"
function_clean_code: |
function clean-code {
echo -e "******* Android *******\n*** Build Caches ***"
find ~/Code/android-*/app -maxdepth 1 -type d -name "build" \
-exec du -hs {} \; -exec rm -rf {} \;
echo -e "\n*** Gradle Caches ***"
find ~/Code/android-*/ -maxdepth 1 -type d -name ".gradle" \
-exec du -hs {} \; -exec rm -rf {} \;
echo -e "******* Flutter *******"
ls ~/Code | grep flutter | while read project; do
cd ~/Code/$project
pwd
flutter clean
echo -e "\n"
done
cd
echo -e "\n*** Done! ***"
}
alias code-clean="clean-code"
alias_kill_battery: |
alias kill-battery="stress -c 1k"
alias waste-battery="kill-battery"
alias battery-killer="kill-battery"
alias battery-waster="kill-battery"
alias_kill_system: |
alias kill-system="stress -c 1k -i 1k -m 1k -d 1k"
alias die="kill-system"
alias lockup="kill-system"
alias freeze="kill-system"
alias system-killer="kill-system"
function_update_sdks: |
if [[ "$workstation" == "true" && "$coding" == "true" ]]; then
function update-sdks {
echo -e "******* Update SDKs *******\n*** Android - START ***"
yes | sdkmanager --update
yes | sdkmanager --licenses
echo -ne "*** Android - END ***"
echo -e "\n*** Flutter - START ***"
flutter upgrade
yes | flutter doctor --android-licenses
echo -ne "*** Flutter - END ***"
echo -e "\n******* Done! *******"
}
alias update-sdk="update-sdks"
alias sdk-update="update-sdks"
alias sdk-updater="update-sdks"
fi
function_ansible_vars: |
function ansible-var-list {
cat << EOF
provision
battery
workstation
coding
editing
gaming
mobile
server
domain
EOF
}
function ansible-vars {
ansible-var-list | while read var; do
echo "$var = ${!var}"
done
}
alias_permission_commands: |
alias chown='chown -c'
alias chmod='chmod -c'
- name: General | Account Management | Users | Files | Common Variable
set_fact:
rc_common: |
# Fixes "command not found" when using aliases within functions.
shopt -s expand_aliases
# Variables for conditionals and quickly checking system setup.
typeset -l provision battery workstation coding editing gaming mobile server domain
export provision="{{ provision }}"
export battery="{{ battery }}"
export workstation="{{ workstation }}"
export coding="{{ coding }}"
export editing="{{ editing }}"
export gaming="{{ gaming }}"
export mobile="{{ mobile }}"
export server="{{ server }}"
export domain="{{ domain }}"
{{ export_path_additions }}
{{ alias_cp }}
{{ alias_mv }}
@ -541,18 +763,26 @@
{{ function_flatpak_purge }}
{{ alias_vim }}
{{ alias_here }}
{{ alias_docker_reload }}
{{ alias_docker_update }}
{{ function_docker_reload }}
{{ function_docker_update }}
{{ function_docker_upgrade }}
{{ alias_docker_restart }}
{{ function_docker_restart }}
{{ alias_code_check }}
{{ alias_code_reset }}
{{ alias_code_reseed }}
{{ function_code_reseed }}
{{ function_clean_filenames }}
{{ function_clean_filenames_tree }}
{{ alias_clone }}
{{ export_hyperling }}
{{ source_docker_env }}
{{ alias_scan }}
{{ alias_prod }}
{{ function_clean_code }}
{{ alias_kill_battery }}
{{ alias_kill_system }}
{{ function_update_sdks }}
{{ function_ansible_vars }}
{{ alias_permission_commands }}
- name: General | Account Management | Users | Files | .bashrc
blockinfile:

View File

@ -6,7 +6,7 @@
user: ansible
name: "Ansible Sync"
minute: "*/30"
job: "sudo {{ ansible_pull_exec.stdout }} -o -U {{ repo_local }} --checkout {{ branch }}"
job: "sudo {{ ansible_pull_exec.stdout }} -o -U {{ git_repo_http }} --checkout {{ branch }}"
state: present
disabled: "{{ 'yes' if no_telem else 'no' }}"

View File

@ -6,9 +6,7 @@
path: "{{ user_root.home }}/bin/scm.sh"
block: |
# 20210211 - Make life easier!
git clone {{ repo_github }} ansible-pull
ansible-pull/setup.sh
mv ansible-pull ~/TRASH/
time {{ ansible_pull_exec.stdout }} -U {{ git_repo_http }}
marker: '{mark}'
marker_begin: "#!{{ bash_exec.stdout }}"
marker_end: "exit 0"
@ -37,7 +35,7 @@
## Main ##
time {{ ansible_pull_exec.stdout }} -U {{ repo_github }} --checkout $branch
time {{ ansible_pull_exec.stdout }} -U {{ git_repo_http }} --checkout $branch
marker: '{mark}'
marker_begin: "#!{{ bash_exec.stdout }}"

View File

@ -6,9 +6,7 @@
path: "{{ user_user.home }}/bin/scm.sh"
block: |
# 20210211 - Make life easier!
git clone {{ repo_github }} ansible-pull
ansible-pull/setup.sh
mv ansible-pull ~/TRASH/
time {{ ansible_pull_exec.stdout }} -U {{ git_repo_http }}
marker: '{mark}'
marker_begin: "#!{{ bash_exec.stdout }}"
marker_end: "exit 0"
@ -37,7 +35,7 @@
## Main ##
time sudo {{ ansible_pull_exec.stdout }} -U {{ repo_github }} --checkout $branch
time sudo {{ ansible_pull_exec.stdout }} -U {{ git_repo_http }} --checkout $branch
marker: '{mark}'
marker_begin: "#!{{ bash_exec.stdout }}"

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

@ -1,5 +1,5 @@
---
# Update the Nix configuration at github.com/Hyperling/NixOS.
# Update the Nix configuration at git.hyperling.com/me/env-nixos.
# This is also done in setup.sh if ansible is not found.
- name: General | Software | NixOS | Facts
@ -19,7 +19,7 @@
blockinfile:
path: /etc/nixos/ansible.nix
block: |
# This file was created by https://github.com/Hyperling/Ansible
# This file was created by https://git.hyperling.com/me/env-ansible
# Please do not alter it by hand. Use the proper ini files instead.
{ config, pkgs, nix, ... }:

View File

@ -55,6 +55,7 @@
- vim
- "{{ cron }}"
- "{{ encfs }}"
- rsync
state: present
- name: General | Software | Packages | Install Software (DEV)
@ -136,3 +137,19 @@
state: absent
when: ansible_distribution != "Ubuntu"
ignore_errors: yes
- name: General | Software | Packages | GS Connect (KDE Connect, Android Tool)
package:
name:
- gnome-shell-extension-gsconnect
state: present
when: ansible_distribution in ("Debian")
ignore_errors: yes
- name: General | Software | Packages | Other Debian Packages
package:
name:
- usbutils
state: present
when: ansible_distribution in ("Debian")
ignore_errors: yes

View File

@ -9,10 +9,6 @@
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:
repo: https://github.com/CISOfy/lynis

View File

@ -1,191 +0,0 @@
---
# Webserver to replace calling GitHub for projects.
# https://www.howtoforge.com/how-to-install-http-git-server-with-nginx-on-debian-11/
#TODO: Use gitweb instead??? I knew there was an easier way than apache/nginx/python stuff...
# https://git-scm.com/docs/gitweb
# Gitweb is nice but doesn;t seem like it allowes cloning.
# Need to figure out how to get git:// to work, fix SSL locally, or somehow use http local and https when external..
## Variables ##
- name: Server | Software | HTTPS Git Server | Check Config Variables
debug:
var: "{{ item }}"
loop:
- git_name
- git_branch
- git_url
- git_sep
- name: Server | Software | HTTPS Git Server | Split Config Variables To Array
set_fact:
git_names: "{{ git_name.split(git_sep) }}"
git_branches: "{{ git_branch.split(git_sep) }}"
git_urls: "{{ git_url.split(git_sep) }}"
git_projects: []
- name: Server | Software | HTTPS Git Server | Check Arrays
debug:
var: "{{ item }}"
loop:
- git_names
- git_branches
- git_urls
- name: Server | Software | HTTPS Git Server | Build Dictionary
set_fact:
git_projects: "{{ git_projects + [{ 'name': git_names[item], 'branch': git_branches[item], 'url': git_urls[item] }] }}"
loop: "{{ range(0, git_names|length) | list }}"
- name: Server | Software | HTTPS Git Server | Display Dictionary
debug:
var: git_projects
- name: Server | Software | HTTPS Git Server | Variables 1
set_fact:
git_web_root: /var/www/html/git
git_config_file: /etc/nginx/conf.d/git.conf
git_nginx_user: www-data
git_ssl_dir: /usr/local/etc/ssl/private
git_ssl_cert_name: cert.pem
git_ssl_key_name: key.pem
- name: Server | Software | HTTPS Git Server | Variables 2
set_fact:
git_cron_commands: "git pull --rebase && cd {{ git_web_root }}/ && chown -R {{ git_nginx_user }} . && chmod -R 775 ."
git_ssl_cert: "{{ git_ssl_dir }}/{{ git_ssl_cert_name }}"
git_ssl_key: "{{ git_ssl_dir }}/{{ git_ssl_key_name }}"
## Pre-reqs ##
- name: Server | Software | HTTPS Git Server | Install
package:
name:
- nginx
- git
- fcgiwrap
- apache2-utils
- unzip
state: present
when: ansible_pkg_mgr == "apt"
- name: Server | Software | HTTPS Git Server | SSL Certificate
shell: "{{ item }}"
loop:
- mkdir -p {{ git_ssl_dir }}
- openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout {{ git_ssl_key }} -out {{ git_ssl_cert }} -subj "/C=XX/ST=STATELESS/L=HOMELAB/O={{ domain }}/OU=Git Server/CN={{ domain }}"
## Repositories ##
- name: Server | Software | HTTPS Git Server | Delete
file:
path: "{{ git_web_root }}"
state: absent
- name: Server | Software | HTTPS Git Server | Download
git:
repo: "{{ item.url }}"
dest: "{{ git_web_root }}/{{ item.name }}.git"
version: "{{ item.branch }}"
clone: yes
force: yes
ignore_errors: yes
loop: "{{ git_projects }}"
- name: Server | Software | HTTPS Git Server | Permissions
file:
path: "{{ git_web_root }}/{{ item.name }}.git"
state: directory
mode: '755'
owner: "{{ git_nginx_user }}"
group: "{{ git_nginx_user }}"
recurse: yes
loop: "{{ git_projects }}"
## NGINX ##
- name: Server | Software | HTTPS Git Server | Index
blockinfile:
path: "{{ git_web_root }}/index.html"
block: |
{{ item.name }}.git is cloned from {{ item.url }} using branch {{ item.branch }}.
state: present
mode: '755'
owner: "{{ git_nginx_user }}"
group: "{{ git_nginx_user }}"
create: yes
backup: yes
marker: "<!-- {mark} {{ item.name }} -->"
loop: "{{ git_projects }}"
- name: Server | Software | HTTPS Git Server | Config
blockinfile:
path: "{{ git_config_file }}"
block: |
server {
listen 443;
server_name {{ ansible_hostname }}.{{ domain }};
ssl_certificate {{ git_ssl_cert }};
ssl_certificate_key {{ git_ssl_key }};
root {{ git_web_root }};
# Add index.php to the list if you are using PHP
index index.html;
#autoindex on;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location ~ (/.*) {
client_max_body_size 0;
#auth_basic "Hyperling's Git Login";
#auth_basic_user_file "{{ git_web_root }}/htpasswd";
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
fastcgi_param GIT_PROJECT_ROOT {{ git_web_root }};
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param PATH_INFO $1;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
}
state: present
mode: '755'
create: yes
backup: yes
marker: "# {mark} Managed By Ansible Git Server Playbook -->"
- name: Server | Software | HTTPS Git Server | Service
service:
name: nginx
pattern: nginx
enabled: yes
state: restarted
## Cron ##
- name: Server | Software | HTTPS Git Server | Cron | Hourly
cron:
name: "{{ item.name }} hourly"
special_time: hourly
job: "cd {{ git_web_root }}/{{ item.name }}.git && {{ git_cron_commands }}"
loop: "{{ git_projects }}"
- name: Server | Software | HTTPS Git Server | Cron | Reboot
cron:
name: "{{ item.name }} reboot"
special_time: reboot
job: "cd {{ git_web_root }}/{{ item.name }}.git && {{ git_cron_commands }}"
loop: "{{ git_projects }}"

View File

@ -1,106 +0,0 @@
---
# Install a Gitlab server for hosting software projects.
## Checks ##
- name: "Server | Software | GitLab | Checks | Host Variable [gitlab]={{ gitlab }}"
shell: echo "ERROR! Variable has an invalid value!" && exit 1
when: gitlab not in ("ee", "ce")
- name: "Server | Software | GitLab | Checks | Host Variable [gitlab_url]={{ gitlab_url }}"
set_fact:
gitlab_url: "https://gitlab"
when: gitlab_url is not defined or not gitlab
- name: Server | Software | GitLab | Checks | Play Variables
set_fact:
gitlab_bundle: "gitlab-{{ gitlab }}"
gitlab_config: /etc/gitlab/gitlab.rb
# Ensure other version is not installed.
- name: Server | Software | GitLab | Checks | Remove EE
package:
name: gitlab-ee
state: absent
when: gitlab == "ce"
- name: Server | Software | GitLab | Checks | Remove CE
package:
name: gitlab-ce
state: absent
when: gitlab == "ee"
## Install ##
# https://about.gitlab.com/install/?version=ce#ubuntu
# https://about.gitlab.com/install/?version=ce#centos-8 (Fedora)
- name: Server | Software | GitLab | Install | Check
shell: which gitlab-ctl
ignore_errors: yes
register: gitlab_installed
- name: Server | Software | GitLab | Install | Pre-Reqs
package:
update_cache: yes
name:
- curl
- openssh-server
- ca-certificates
- tzdata
- perl
- postfix
state: present
when: gitlab_installed.failed
- name: Server | Software | GitLab | Install | Add Repo (apt)
shell: curl https://packages.gitlab.com/install/repositories/gitlab/{{ gitlab_bundle }}/script.deb.sh | bash
when: gitlab_installed.failed and ansible_pkg_mgr == "apt"
- name: Server | Software | GitLab | Install | Add Repo (dnf)
shell: curl https://packages.gitlab.com/install/repositories/gitlab/{{ gitlab_bundle }}/script.rpm.sh | bash
when: gitlab_installed.failed and ansible_pkg_mgr == "dnf"
- name: Server | Software | GitLab | Install | Install
shell: EXTERNAL_URL="{{ gitlab_url | replace("https","http") }}.{{ domain }}" {{ ansible_pkg_mgr }} install -y {{ gitlab_bundle }}
when: gitlab_installed.failed
- name: Server | Software | GitLab | Install | Get Password
shell: cat /etc/gitlab/initial_root_password && cp /etc/gitlab/initial_root_password ~/
register: gitlab_passwd
when: gitlab_installed.failed
- name: Server | Software | GitLab | Install | Print Password
debug:
var: gitlab_passwd.stdout_lines
when: gitlab_installed.failed
## Configuration ##
# https://docs.gitlab.com/ee/install/next_steps.html
# Need to make server think it's https but not actually listen for it, otherwise reverse proxy doesn't work.
# https://www.itsfullofstars.de/2019/06/gitlab-behind-a-reverse-proxy/
- name: Server | Software | GitLab | Configure | Check External URL
lineinfile:
path: "{{ gitlab_config }}"
regexp: '^external_url '
line: "external_url '{{ gitlab_url }}.{{ domain }}' # Managed by Ansible"
state: present
create: yes
backup: yes
- name: Server | Software | GitLab | Configure | Turn Off Serving Local SSL
blockinfile:
path: "{{ gitlab_config }}"
block: |
nginx['listen_port'] = 80
nginx['listen_https'] = false
marker: "# {mark} MANAGED BY ANSIBLE - {{ gitlab_config }}"
state: present
create: yes
backup: yes
- name: Server | Software | GitLab | Configure | Reconfigure
shell: gitlab-ctl reconfigure

View File

@ -44,7 +44,7 @@
- shotcut
- obs-studio
state: present
when: editing == true
when: editing in (true, "video")
- name: Workstation | FreeBSD | Software | Packages | Editing | Install
package:
@ -53,7 +53,7 @@
- shotcut
- obs-studio
state: absent
when: not editing == true
when: not editing in (true, "video")
# Gaming #

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-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
@ -40,19 +39,21 @@
- { app: "org.signal.Signal", name: "signal", extra: "" }
- { app: "org.mozilla.firefox", name: "firefox-flatpak", extra: "" }
- { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" }
- { app: "org.gnome.Geary", name: "geary", extra: "" }
- { app: "org.gimp.GIMP", name: "gimp", extra: "" }
flatpaks_coding:
- { app: "com.vscodium.codium", name: "codium", extra: "" }
- { app: "com.vscodium.codium", name: "codium-flatpak", extra: "" }
- { app: "com.google.AndroidStudio", name: "android-studio", extra: "" }
- { app: "io.dbeaver.DBeaverCommunity", name: "dbeaver", extra: "" }
- { app: "org.godotengine.Godot", name: "godot", extra: "" }
- { app: "com.visualstudio.code-oss", name: "code", extra: "" }
flatpaks_editing:
flatpaks_editing_video:
- { app: "org.shotcut.Shotcut", name: "shotcut", extra: "" }
- { app: "com.obsproject.Studio", name: "obs", extra: "" }
- { app: "org.gimp.GIMP", name: "gimp", extra: "" }
- { app: "org.openshot.OpenShot", name: "openshot", extra: "" }
flatpaks_editing_audio:
- { app: "org.tenacityaudio.Tenacity", name: "tenacity", extra: "" }
- { app: "io.lmms.LMMS", name: "lmms", extra: "" }
- { app: "net.sourceforge.VMPK", name: "vmpk", extra: "" }
flatpaks_gaming:
- { app: "com.valvesoftware.Steam", name: "steam", extra: "" }
- { app: "com.play0ad.zeroad", name: "zeroad", extra: "" }
@ -72,6 +73,8 @@
# 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.
# Generic #
@ -155,14 +158,62 @@
# Media Editors #
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Installs
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Installs
flatpak:
name: "{{ item.app }}"
remote: flathub
state: present
loop: "{{ flatpaks_editing }}"
loop: "{{ flatpaks_editing_video }}"
ignore_errors: yes
when: editing == true
when: editing in (true, "video")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Executables
blockinfile:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
block: |
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
marker: '{mark}'
marker_begin: "#!{{ bash_exec.stdout }}"
marker_end: "exit 0"
state: present
create: yes
loop: "{{ flatpaks_editing_video }}"
become_user: "{{ user }}"
when: editing in (true, "video")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Executable Permissions
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
state: file
mode: '0755'
loop: "{{ flatpaks_editing_video }}"
when: editing in (true, "video")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editor Uninstalls
flatpak:
name: "{{ item.app }}"
remote: flathub
state: absent
loop: "{{ flatpaks_editing_video }}"
ignore_errors: yes
when: not editing in (true, "video")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Remove Executables
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
state: absent
loop: "{{ flatpaks_editing_video }}"
ignore_errors: yes
when: not editing in (true, "video")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio Editors | Installs
flatpak:
name: "{{ item.app }}"
remote: flathub
state: present
loop: "{{ flatpaks_editing_audio }}"
ignore_errors: yes
when: editing in (true, "audio")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executables
blockinfile:
@ -174,34 +225,34 @@
marker_end: "exit 0"
state: present
create: yes
loop: "{{ flatpaks_editing }}"
loop: "{{ flatpaks_editing_audio }}"
become_user: "{{ user }}"
when: editing == true
when: editing in (true, "audio")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executable Permissions
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
state: file
mode: '0755'
loop: "{{ flatpaks_editing }}"
when: editing == true
loop: "{{ flatpaks_editing_audio }}"
when: editing in (true, "audio")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editor Uninstalls
flatpak:
name: "{{ item.app }}"
remote: flathub
state: absent
loop: "{{ flatpaks_editing }}"
loop: "{{ flatpaks_editing_audio }}"
ignore_errors: yes
when: not editing == true
when: not editing in (true, "audio")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Remove Executables
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
state: absent
loop: "{{ flatpaks_editing }}"
loop: "{{ flatpaks_editing_audio }}"
ignore_errors: yes
when: not editing == true
when: not editing in (true, "audio")
# Gaming #

View File

@ -0,0 +1,171 @@
---
# Packages specific to workstations developing Flutter apps.
## Facts ##
- name: Workstation | Linux | Software | Flutter | Facts [1/4]
set_fact:
flutter_url: "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.27.2-stable.tar.xz"
flutter_download_file: "{{ user_user.home }}/Downloads/flutter.tar.xz"
flutter_sdk_location: "{{ user_user.home }}/SDKs/Flutter"
flutter_report: "{{ user_user.home }}/Reports/flutter.txt"
when: coding == true
- name: Workstation | Linux | Software | Flutter | Facts [2/4]
set_fact:
flutter_bin_location: "{{ flutter_sdk_location }}/flutter/bin"
when: coding == true
- name: Workstation | Linux | Software | Flutter | Facts [3/4]
set_fact:
flutter: "{{ flutter_bin_location }}/flutter"
when: coding == true
- name: Workstation | Linux | Software | Flutter | Facts [3/3]
set_fact:
flutter_report_commands:
- "date > {{ flutter_report }}"
- "{{ flutter }} --disable-analytics >> {{ flutter_report }}"
- "date >> {{ flutter_report }}"
- "{{ flutter }} doctor -v >> {{ flutter_report }}"
- "date >> {{ flutter_report }}"
when: coding == true
## Checks ##
- name: Workstation | Linux | Software | Flutter | Check SDK Exists
stat:
path: "{{ flutter_sdk_location }}"
register: flutter_sdk_stat
when: coding == true
- name: Workstation | Linux | Software | Flutter | Check Download Exists
stat:
path: "{{ flutter_download_file }}"
register: flutter_download_stat
when: coding == true
## Packages ##
- name: Workstation | Linux | Software | Flutter | Necessities
package:
name:
- curl
- git
- unzip
- xz-utils
- zip
- libglu1-mesa
state: present
when: coding == true
# https://docs.flutter.dev/get-started/install/linux/desktop
- name: Workstation | Linux | Software | Flutter | Linux App Dependencies
package:
name:
- clang
- cmake
- git
- ninja-build
- pkg-config
- libgtk-3-dev
- liblzma-dev
- libstdc++-12-dev
state: present
when: coding == true
# https://docs.flutter.dev/get-started/install/linux/android
- name: Workstation | Linux | Software | Flutter | Android App Dependencies
package:
name:
- libc6:amd64
- libstdc++6
- lib32z1
- libbz2-1.0
state: present
when: coding == true
## Install SDK ##
- name: Workstation | Linux | Software | Flutter | SDK
block:
- name: Workstation | Linux | Software | Flutter | Download SDK
get_url:
url: "{{ flutter_url }}"
dest: "{{ flutter_download_file }}"
owner: "{{ user }}"
group: "{{ user }}"
mode: '0664'
when: not flutter_download_stat.stat.exists
- name: Workstation | Linux | Software | Flutter | Create Folder
file:
path: "{{ flutter_sdk_location }}"
state: directory
owner: "{{ user }}"
group: "{{ user }}"
mode: '0755'
- name: Workstation | Linux | Software | Flutter | Extract SDK
unarchive:
src: "{{ flutter_download_file }}"
dest: "{{ flutter_sdk_location }}"
owner: "{{ user }}"
group: "{{ user }}"
become_user: "{{ user }}"
when: coding == true and not flutter_sdk_stat.stat.exists
- name: Workstation | Linux | Software | Flutter | Delete Archive
file:
path: "{{ flutter_download_file }}"
state: absent
## Configure Environment ##
- name: Workstation | Linux | Software | Flutter | Modify PATH (.bashrc)
blockinfile:
path: "{{ item }}/.bashrc"
block: |
export PATH="$PATH:{{ flutter_bin_location }}"
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
state: present
create: yes
backup: yes
loop:
- "{{ user_root.home }}"
- "{{ user_user.home }}"
ignore_errors: yes
when: coding == true and user_root.home != "" and user_user.home != ""
- name: Workstation | Linux | Software | Flutter | Modify PATH (.zshrc)
blockinfile:
path: "{{ item }}/.zshrc"
block: |
export PATH="$PATH:{{ flutter_bin_location }}"
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
state: present
create: yes
backup: yes
loop:
- "{{ user_root.home }}"
- "{{ user_user.home }}"
ignore_errors: yes
when: coding == true and user_root.home != "" and user_user.home != ""
## Test SDK ##
- name: Workstation | Linux | Software | Flutter | Doctor Report
shell: "{{ item }}"
loop: "{{ flutter_report_commands }}"
become_user: "{{ user }}"
when: coding == true
## Uninstall SDK ##
- name: Workstation | Linux | Software | Flutter | Remove SDK
file:
path: "{{ flutter_sdk_location }}"
state: absent
when: not coding == true

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

@ -24,7 +24,7 @@
name:
- "{{ ffmpeg }}"
state: present
when: editing == true
when: editing in (true, "video", "audio")
## Other Stuff
@ -38,42 +38,9 @@
- "{{ appimagelauncher }}"
- "{{ evolution }}"
- "{{ evolution }}*"
- gparted
state: present
# Lutris #
- name: Workstation | Linux | Software | Packages | Add Lutris PPA (Ubuntu)
apt_repository:
repo: ppa:lutris-team/lutris
update_cache: yes
state: present
when: ansible_distribution == "Ubuntu" and gaming == true
ignore_errors: yes
- name: Workstation | Linux | Software | Packages | Add Lutris (besides ARM)
package:
name:
- lutris
state: present
when: ansible_architecture != "aarch64" and gaming == true
ignore_errors: yes
- name: Workstation | Linux | Software | Packages | Remove Lutris (besides ARM)
package:
name:
- lutris
state: absent
when: ansible_architecture != "aarch64" and gaming is not defined
ignore_errors: yes
- name: Workstation | Linux | Software | Packages | Remove Lutris PPA (Ubuntu)
apt_repository:
repo: ppa:lutris-team/lutris
update_cache: yes
state: absent
when: ansible_distribution == "Ubuntu" and gaming is not defined
ignore_errors: yes
# Remove Repo Software #
- name: Workstation | Linux | Software | Packages | Remove Applications

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

@ -22,13 +22,19 @@
status: present
when: coding == true
- name: Workstation | Mac OS | Software | Brew | Install Packages (Editing)
- name: Workstation | Mac OS | Software | Brew | Install Packages (Editing:Video)
package:
name:
- shotcut
status: present
when: editing in (true, "video")
- name: Workstation | Mac OS | Software | Brew | Install Packages (Editing:Audio)
package:
name:
- audacity
- shotcut
status: present
when: editing == true
when: editing in (true, "audio")
- name: Workstation | Mac OS | Software | Brew | Install Packages (Gaming)
package:

View File

@ -12,25 +12,33 @@
, 'org.gnome.Nautilus.desktop'
, 'io.gitlab.librewolf-community.desktop', 'librewolf.desktop'
, 'org.mozilla.firefox.desktop', 'firefox.desktop'
, 'com.visualstudio.code-oss.desktop', 'code-oss.desktop'
, 'com.google.AndroidStudio.desktop'
, 'org.godotengine.Godot.desktop'
, 'org.shotcut.Shotcut.desktop'
, 'io.lbry.lbry-app.desktop', 'lbry.desktop'
, 'org.signal.Signal.desktop', 'signal-desktop.desktop'
, 'im.riot.Riot.desktop'
, 'org.telegram.desktop.desktop'
, 'com.discordapp.Discord.desktop'
, 'com.vscodium.codium.desktop'
, 'codium.desktop'
, 'org.shotcut.Shotcut.desktop'
, 'io.lmms.LMMS.desktop'
, 'io.lbry.lbry-app.desktop', 'lbry.desktop'
, 'com.valvesoftware.Steam.desktop'
, 'net.lutris.Lutris.desktop'
]"
dconf_terminal: gnome-terminal
dconf_theme: Adwaita-dark
dconf_icons: Adwaita
# 2024-01-28 No longer using local email clients.
# 2024-01-28 Not currently using local email clients.
#, 'org.gnome.Evolution.desktop'
#, 'chat.delta.desktop.desktop', 'deltachat.desktop'
#, 'org.gnome.Geary.desktop'
#, 'org.mozilla.Thunderbird.desktop'
# 2025-01-01
# Reduce the amount of icons on the sidebar, things that may get added back.
#, 'org.godotengine.Godot.desktop'
# 2025-03-07 Removed in place of a 2nd VS Codium install (apt version).
#, 'com.visualstudio.code-oss.desktop', 'code-oss.desktop'
# 2025-03-21 Not really using Android Studio now that Flutter is working.
#, 'com.google.AndroidStudio.desktop'
- name: Workstation | Account Management | GNOME | Facts (NixOS)
set_fact: