Compare commits

..

17 Commits

Author SHA1 Message Date
734bc70c1d Upgrade code-reseed and have it use new Gitea server. Change files which pull to use the new provisioning variable. 2025-01-02 12:32:21 -07:00
5b67610fca Migrate project from using GitHub to hitting my Gitea. 2025-01-02 10:15:46 -07:00
cb27764a5b Add alias for a full intensive scan of a host. 2025-01-02 09:56:15 -07:00
b8e5382601 Comment command which pulls from Github. 2025-01-01 17:42:02 -07:00
a985059401 Remove a few listings to reduce the amount of icons. 2025-01-01 12:19:27 -07:00
1a83508f90 Codium may have been removed in the past due to bugs -- put it back in preference of OSS since it seems to be fine again. 2025-01-01 08:41:26 -07:00
38882a9940 Add explicit call for rsync. 2025-01-01 08:36:41 -07:00
040e37e2d8 Automatically create Code folder on coding workstations. 2025-01-01 08:36:27 -07:00
8c0dd0f96c Change flatpak to be last so first install at least get their configs before waiting. 2024-12-31 16:27:59 -07:00
ee73f5321a Add compression to rsync command. 2024-12-31 02:28:56 -07:00
bd5f44f4a0 Move chat clients to be where email clients used to be. 2024-12-28 09:05:26 -07:00
2b743dbff6 Check if a project uses Git before syncing. 2024-12-28 08:59:15 -07:00
76bdc4660f Remove synths from favorites. 2024-12-15 13:47:03 -07:00
f659b2482b Replace QSynth with VMPK. 2024-12-15 13:46:44 -07:00
47be01ed29 Add QSynth and LMMS to Editing profile. 2024-12-15 12:03:36 -07:00
ff8af7f799 More love to some of the other cleaning helpers, such as cleaning out a directory. 2024-09-24 07:24:13 -07:00
598c2bb15f Ensure all variables get reset between function runs. 2024-09-24 06:28:52 -07:00
44 changed files with 276 additions and 2381 deletions

View File

@@ -1,5 +1,4 @@
# ansible # ansible
Getting real with system management via ansible-pull. Getting real with system management via ansible-pull.
Per-system configuration is handled via local files to the provisioned machine, Per-system configuration is handled via local files to the provisioned machine,
@@ -11,124 +10,59 @@ accessed via the show-config and edit-config aliases.
This setup is specific to the maintainer's devices and needs. You're welcome to This setup is specific to the maintainer's devices and needs. You're welcome to
use it as an example for your needs, but do not expect it to work as-is. use it as an example for your needs, but do not expect it to work as-is.
## Currently Supported Systems ## Currently Supported Linux Systems
This information is as of 2025-11-21.
### Primary
These are the operating systems used as my daily driver.
#### Debian Trixie
This has been used as my primary server and workstation OS since at least 2024.
The `apt` version of `ansible` in both Bookworm and Trixie are sufficient,
no longer need to use `ansible` out of `pip`.
### Secondary
These are tested via my Docker project's `ProvisionsTests` container but not currently used as daily drivers.
#### Arch
TBD
#### Fedora
TBD
#### OpenSUSE
TBD
#### Ubuntu
TBD
## Previusly Supported Systems
### Debian Family ### Debian Family
#### Debian #### Debian
100%, but only if using a recent enough version of Ansible. `pip` usually has a 100%, but only if using a recent enough version of Ansible. `pip` usually has a
better version than `apt`. better version than `apt`.
#### Ubuntu #### Ubuntu
100%, both server and desktop. 100%, both server and desktop.
#### Pop!_OS #### Pop!_OS
100%, have not used for a while though. 100%, have not used for a while though.
#### Mint #### Mint
100%, but not really used, just tested once for fun. 100%, but not really used, just tested once for fun.
#### Parrot Security OS (MATE) #### Parrot Security OS (MATE)
100% for a while, but OS did not serve maintainer's needs and 404 errors were 100% for a while, but OS did not serve maintainer's needs and 404 errors were
terrible while updating. Ubuntu Rolling Rhino filled the gap. terrible while updating. Ubuntu Rolling Rhino filled the gap.
### Arch Family ### Arch Family
#### Arch
100% at some point, including installation and configuration of a Desktop Environment.
#### Manjaro #### Manjaro
100% at some point. 100% at some point.
### Fedora Family ### Fedora Family
#### Fedora 35 #### Fedora 35
Workstation: 100%
Workstation: 100%,
Server: 100% Server: 100%
## Suse Family ## Suse Family
### openSUSE Tumbleweed v2022-02-17 ### openSUSE Tumbleweed v2022-02-17
Generic: 100%
Generic: 100%,
Workstation: 100% Workstation: 100%
### openSUSE Leap 15.4 ### openSUSE Leap 15.4
Generic: 100% Generic: 100%
Workstation: Currently failing at `[Workstation | Linux | Flatpak Distro | Package Manager | Install From Repo]` with message `Problem: nothing provides libedataserver-1.2.so.24 needed by the to be installed evolution-data-server-32bit-3.34.4-3.3.1.x86_64`. Workstation: Currently failing at `[Workstation | Linux | Flatpak Distro | Package Manager | Install From Repo]` with message `Problem: nothing provides libedataserver-1.2.so.24 needed by the to be installed evolution-data-server-32bit-3.34.4-3.3.1.x86_64`.
### NixOS ### NixOS
99%, still need to get Telegraf going and refactor local.yml but everything else 99%, still need to get Telegraf going and refactor local.yml but everything else
is working well. It is automatically implementing git.hyperling.com/me/env-nixos. is working well. It is automatically implementing git.hyperling.com/me/env-nixos.
## Currently Supported Unix Systems
### FreeBSD 12, 13 ### FreeBSD 12, 13
100%, although GUI is not working completely on 13 yet (dash-to-dock doesn't compile). 100%, although GUI is not working completely on 13 yet (dash-to-dock doesn't compile).
Software choices are slightly more limited since not `flatpak`-enabled and not feeling a `ports` setup. Software choices are slightly more limited since not `flatpak`-enabled and not feeling a `ports` setup.
## Waiting To Be Tested ## Waiting To Be Tested
### Kali Linux ### Kali Linux
### Arch Linux ARM ### Arch Linux ARM
Specifically for the Pinephone. Specifically for the Pinephone.
### Arch Linux x86 ### Arch Linux x86
Would be great to have Arch get built up by this. Used for many years but left Would be great to have Arch get built up by this. Used for many years but left
after update problems due to a long computer hiatus. after update problems due to a long computer hiatus.
### Fedora Mobile ### Fedora Mobile
Specifically for the Pinephone. Specifically for the Pinephone.
## Future Goals ## Future Goals
Eventually some of the scripts and install files will be put into the files Eventually some of the scripts and install files will be put into the files
folder. This will allow initializing systems outside of the maintainer's home folder. This will allow initializing systems outside of the maintainer's home
network. network.
@@ -140,8 +74,6 @@ benefit has yet to be seen for some tasks. Shared facts will definitely continue
to exist under the facts tree. to exist under the facts tree.
## Other Notes ## Other Notes
### Get Setup Values ### Get Setup Values
Use this command to see the variables for a system: Use this command to see the variables for a system:
`ansible localhost -m setup --connection=local`. `ansible localhost -m setup --connection=local`.

View File

@@ -2,17 +2,12 @@
# Define program names for package builtin. # Define program names for package builtin.
# This file is for ALL systems and should not include UI components. # This file is for ALL systems and should not include UI components.
- name: General | Facts | Package | Shared Defaults - name: General | Facts | Packages | Shared Defaults
set_fact: set_fact:
sshfs: sshfs sshfs: sshfs
tar: tar tar: tar
iftop: iftop
nethogs: nethogs
ntp_server: chrony
dig: dig
neofetch: neofetch
- name: General | Facts | Package | Parrot OS Fixes - name: General | Facts | Packages | Parrot OS Fixes
set_fact: set_fact:
ansible_pkg_mgr: "apt" ansible_pkg_mgr: "apt"
ansible_python_interpreter: "/usr/bin/python3" ansible_python_interpreter: "/usr/bin/python3"
@@ -26,14 +21,8 @@
microcode_intel: intel-microcode microcode_intel: intel-microcode
cron: cron cron: cron
encfs: encfs encfs: encfs
dig: dnsutils
when: ansible_pkg_mgr == "apt" 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 - name: General | Facts | Package | pacman
set_fact: set_fact:
locate: mlocate locate: mlocate
@@ -56,15 +45,10 @@
encfs: fusefs-encfs encfs: fusefs-encfs
when: ansible_system == "FreeBSD" when: ansible_system == "FreeBSD"
- name: General | Facts | Package | dnf (Fixes) # TBD: Fix + test package names: mlocate, dig, neofetch
set_fact:
ansible_pkg_mgr: dnf
when: ansible_pkg_mgr in ("dnf5")
- name: General | Facts | Package | dnf - name: General | Facts | Package | dnf
set_fact: set_fact:
sshfs: fuse-sshfs sshfs: fuse-sshfs
locate: plocate locate: mlocate
opensshd: openssh opensshd: openssh
microcode_amd: microcode_ctl microcode_amd: microcode_ctl
microcode_intel: microcode_ctl microcode_intel: microcode_ctl
@@ -111,39 +95,30 @@
case $pkg_mgr in case $pkg_mgr in
apt) apt)
if [[ $distribution != "ParrotOS" ]]; then if [[ $distribution != "ParrotOS" ]]; then
echo -e "******* Apt *******\n*** Update Cache ***" && echo "*** Apt ***" &&
sudo apt update && 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 }} && sudo apt clean {{ update_accept_var }} &&
echo -e "Cleaned!\n\n*** Configure DPKG ***" &&
sudo dpkg --configure -a && sudo dpkg --configure -a &&
echo -e "\n*** Fix Broken/Missing ***" &&
sudo apt --fix-broken --fix-missing install && sudo apt --fix-broken --fix-missing install &&
echo -e "\n*** Upgrade ***" &&
sudo apt dist-upgrade --allow-downgrades --fix-broken \ sudo apt dist-upgrade --allow-downgrades --fix-broken \
--fix-missing {{ update_accept_var }} || --fix-missing {{ update_accept_var }} ||
return 1 return 1
else else
echo -e "******* Parrot *******\n*** Update Cache ***" && echo "*** Parrot ***"
sudo apt update && 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 && parrot_mirrors_suck=true &&
while [[ $parrot_mirrors_suck ]]; do while [[ $parrot_mirrors_suck ]]; do
unset parrot_mirrors_suck unset parrot_mirrors_suck
echo -e "\n*** Upgrade ***"
sudo parrot-upgrade sudo parrot-upgrade
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
parrot_mirrors_suck=true parrot_mirrors_suck=true
echo -e "*** Update Cache, Again ***"
sudo apt update --fix-missing sudo apt update --fix-missing
fi fi
done || done ||
return 1 return 1
fi fi
echo -e "\n******* Mission Complete!! *******"
;; ;;
pacman) pacman)

View File

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

View File

@@ -104,11 +104,7 @@ static Key keys[] = {
{ MODKEY|ShiftMask, XK_q, quit, {0} }, { MODKEY|ShiftMask, XK_q, quit, {0} },
// Mine // Mine
{ MODKEY, XK_q, killclient, {0} }, { MODKEY, XK_q, killclient, {0} },
// extra search shortcut // Volume (https://varunbpatil.github.io/2013/09/28/dwm.html)
{ MODKEY, XK_s, spawn, {.v = dmenucmd } },
// fullscreen shortcut for m onocle
{ MODKEY, XK_f, setlayout, {.v = &layouts[2]} },
// Volume (https://varunbpatil.github.io/2013/09/28/dwm.html)
{ 0, 0x1008ff12,spawn, {.v = mutecmd } }, { 0, 0x1008ff12,spawn, {.v = mutecmd } },
{ 0, 0x1008ff11,spawn, {.v = lowervolcmd } }, { 0, 0x1008ff11,spawn, {.v = lowervolcmd } },
{ 0, 0x1008ff13,spawn, {.v = raisevolcmd } }, { 0, 0x1008ff13,spawn, {.v = raisevolcmd } },

View File

@@ -1,9 +0,0 @@
#!/usr/bin/env bash
# 2025-11-10 Hyperling
# Icons: https://fontawesome.com/v4/cheatsheet/
source "`which status.function`"
function dwm-status {
status-display --dwm
}

View File

@@ -5,17 +5,17 @@
## Load System Libs ## ## Load System Libs ##
if [ -d /etc/X11/xinit/xinitrc.d ]; then if [ -d /etc/X11/xinit/xinitrc.d ]; then
for f in /etc/X11/xinit/xinitrc.d/*; do for f in /etc/X11/xinit/xinitrc.d/*; do
[ -x "$f" ] && . "$f" [ -x "$f" ] && . "$f"
done done
unset f unset f
fi fi
if [ -d /usr/local/etc/X11/xinit/xinitrc.d ]; then if [ -d /usr/local/etc/X11/xinit/xinitrc.d ]; then
for f in /usr/local/etc/X11/xinit/xinitrc.d/*; do for f in /usr/local/etc/X11/xinit/xinitrc.d/*; do
[ -x "$f" ] && . "$f" [ -x "$f" ] && . "$f"
done done
unset f unset f
fi fi
@@ -34,9 +34,10 @@ xsetroot -solid "$purple"
# slstatus, from Suckless # # slstatus, from Suckless #
#exec slstatus & #exec slstatus &
# Custom Setup # # Custom #
source "`which dwm-status.function`" while true; do
dwm-status & xsetroot -name "`whoami`@`hostname` `date +"%Y-%m-%d %H:%M:%S"`"
done &
## Start ## ## Start ##

View File

@@ -1,22 +0,0 @@
#!/usr/bin/env bash
# 2025-11-10 Hyperling
function battery-display {
detailed="N"
if [[ -n $1 ]]; then
detailed="Y"
fi
if [[ "$detailed" == "Y" ]]; then
upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep percentage | grep -o "[0-9.%]*"
else
int="`upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep percentage | grep -o "[0-9]*" | head -n 1`"
echo "${int}%"
fi
}
alias show-battery="battery-display"
alias battery="battery-display"
alias battery-use="battery-display"
alias battery-usage="battery-display"
alias battery-level="battery-display"
alias battery-levels="battery-display"

View File

@@ -1,3 +0,0 @@
#/usr/local/bin env
# TBD/TODO

View File

@@ -1,3 +0,0 @@
#/usr/local/bin env
# TBD/TODO

View File

@@ -1,85 +0,0 @@
#!/usr/bin/env bash
# 2025-11-10 Hyperling
# Icons: https://fontawesome.com/v4/cheatsheet/
source "`which volume.function`"
source "`which battery.function`"
source "`which storage.function`"
function datetime {
date +"%Y-%m-%d %H:%M:%S"
}
function status-display {
# Defaults
cmd="echo"
sleep=0.2
if [[ "`storage-root`" == "`storage-home`" ]]; then
function status-display-storage {
echo "`storage-root`"
}
else
function status-display-storage {
echo "Root (`storage-root`), Home (`storage-home`)"
}
fi
# Test Config
if [[ $1 == "-t" || $1 == "--test" || $1 == "test" ]]; then
sleep=5
fi
# DWM Config
if [[ $1 == "-d" || $1 == "--dwm" || $1 == "dwm" ]]; then
cmd="xsetroot -name"
if [[ "`storage-root`" == "`storage-home`" ]]; then
function status-display-storage {
echo "`storage-root-dwm`)"
}
else
function status-display-storage {
echo "(Root `storage-root-dwm`, Home `storage-home-dwm`)"
}
fi
fi
battery=""; storage=""; volume=""; datetime="";
userhost="`whoami`@`hostname`"
while true; do
# Exit if parent process is gone.
#TBD/TODO
# Reset Variables
if [[ $datetime == *"00" ]]; then
unset battery
unset storage
fi
if [[ $datetime != "`datetime`" ]]; then
unset volume
unset datetime
fi
# Set Variables
if [[ -z $battery ]]; then
battery="`battery-display`"
fi
if [[ -z $storage ]]; then
storage="`status-display-storage`"
fi
if [[ -z $volume ]]; then
volume="`volume-display`"
fi
if [[ -z $datetime ]]; then
datetime="`datetime`"
fi
# Display Variables
readout="$readout  $battery"
readout="$readout |  $storage"
readout="$readout |  $volume"
readout="$readout |  $userhost"
readout="$readout |  $datetime"
$cmd "$readout"
readout=""
sleep $sleep
done
}
alias status="status-display --test"

View File

@@ -1,38 +0,0 @@
#!/usr/bin/env bash
# 2025-11-10 Hyperling
function storage-display {
location="$1"
style="$2"
if [[ -z "$location" ]]; then
echo "ERROR: Location must be passed. $location"
fi
if [[ "$style" == "%" || "$style" == "pct" || "$style" == "percent" ]]; then
df -h "$location" | tail -n 1 | awk '{print $5" Used"}'
elif [[ "$style" == "/" || "$style" == "use" || "$style" == "usage" ]]; then
df -h "$location" | tail -n 1 | awk '{print $4"/"$2" Free"}'
elif [[ "$style" == "G" || "$style" == "S" || "$style" == "F" ]]; then
df -h "$location" | tail -n 1 | awk '{print $4" Free"}'
else
df -h "$location" | tail -n 1 | awk '{print $5" Used - "$4"/"$2" Free"}'
fi
}
alias storage='echo -n "Root: " && storage-display "/" "F" && echo -n "Home: " && storage-display "/home" "F"'
export dwm_storage_style="F"
function storage-root {
storage-display / "$1"
}
function storage-root-dwm {
storage-root "$dwm_storage_style"
}
function storage-home {
storage-display /home "$1"
}
function storage-home-dwm {
storage-home "$dwm_storage_style"
}

View File

@@ -1,3 +0,0 @@
#/usr/local/bin env
# TBD/TODO

View File

@@ -1,173 +0,0 @@
#!/usr/bin/env bash
# 2025-11-10 Hyperling
# Volume management for systems without working volume buttons.
# Written for ease of use in terminal and simple window management systems.
function volume-usage {
cat <<- EOF
Usage: volume [%int] [(+/-)%int] [-d] [-r] [-t] [-h]
Set to a static value:
volume 100, volume 65
Increment or decrement. Passing only + or - and no number defaults to 5.
volume -5, volume 5-, volume - 5, volume 5 -
volume +20, volume 20+, volume + 20, volume 20 +
Display the current volume:
volume,
volume-display, volume display, volume --display, volume -d,
volume +d
Set volume to a random number between 0 and 100.
volume-random, volume random, volume --random, volume -r
Be silly and oscillate volume in a loop:
volume-trip, volume trip, volume --trip, volume -t
Display this help text:
volume-usage,
volume-help volume help, volume --help, volume -h
EOF
return $1
}
alias volume-help="volume-usage"
alias vol-h="volume-help"
function volume {
## Check Params ##
if [[ "$1" == "--help" || "$1" == "help" || "$1" == "-h" ]]; then
volume-usage 1
return 1
fi
if [[ (-z "$1" && -z "$2")
|| "$1" == "--display" || "$1" == "display" || "$1" == "-d" || "$1" == "+d"
]]; then
volume-display
return 0
fi
## Parse Params ##
dir=""
amt=""
# Remove percent signs.
if [[ "$1" == *"%"* || "$2" == *"%"* ]]; then
set -- "${1//%/}" "${2//%/}"
fi
# Check if format is written text.
if [[ "$1" == "full" || "$1" == "max" ]]; then
amt=100
fi
if [[ "$1" == "mute" || "$1" == "none" ]]; then
amt=0
fi
# Check if the format is "volume +/- %int"
if [[ -z "$amt" && -z "$dir" ]]; then
if [[ "$1" == "+" || "$1" == "-" ]]; then
dir="$1"
amt="$2"
if [[ -z "$2" ]]; then
amt="5"
else
amt="$2"
fi
fi
fi
# Check if the format is "volume +/- %int".
if [[ -z "$amt" && -z "$dir" ]]; then
if [[ "$2" == "+" || "$2" == "-" ]]; then
amt="$1"
dir="$2"
fi
fi
# Check if amount and direction are adjacent, and if so, pull the values.
if [[ -z "$amt" && -z "$dir" ]]; then
if [[ "$1" == *"+"* ]]; then
dir="+"
elif [[ "$1" == *"-"* ]]; then
dir="-"
fi
if [[ -n "$dir" && -z "$amt" ]]; then
amt="$1"
amt=${amt//-/}
amt=${amt//+/}
fi
fi
# Check if format is direct volume.
if [[ -z "$dir" && -z "$amt" && -n "$1" && -z "$2" ]]; then
amt="$1"
fi
## Error Checking ##
regex='^[0-9]+$'
if ! [[ $amt =~ $regex ]]; then
echo "> ERROR: Amount '$amt' does not seem like a integer."
volume-usage 2
return 2
fi
## Main ##
if [[ -n "$dir" && -n "$amt" ]]; then
echo "> Changing volume by '$dir$amt%'."
amixer -q sset Master ${amt}%${dir}
echo "> Volume is now '`volume-display`'."
return 0
fi
if [[ -z "$dir" && -n "$1" ]]; then
echo "> Setting volume to '$amt'."
amixer -q sset Master ${amt}%
echo "> Volume has been set to '`volume-display`'."
return 0
fi
echo "> ERROR: Should not have made it here. Please report this to the developer."
echo "$0 $1 $2"
return 7
}
alias vol="volume "
alias vol-="volume - "
alias vol+="volume + "
function volume-display {
if [[ "$1" == "-v" || "$1" == "--verbose" || "$1" == "verbose" ]]; then
amixer sget Master
else
amixer sget Master | egrep -o '[0-9]{1,3}%' | head -n 1
fi
}
alias "vol-d"="volume-display"
## TBD/TODO ##
# Go up and down until cancelled.
#function volume-trip {
# curr eq amixer current readout
# if curr lt 50 then dir eq + else dir eq -
# while true; do
# if vol is 0 then dir eq +
# if vol is 100 then dir eq -
# curr eq \$curr $dir 1
# amixer set volume to curr
# sleep 0.1
# done
#}
#alias vol-t="volume-trip"
#alias volume-wub="volume-trip"
#alias vol-w="volume-wub"
#function volume-random {
# v eq $RANDOM % 101
# amixer set volume eq v
#}
#alias vol-r="volume-random"

View File

@@ -1,3 +0,0 @@
#/usr/local/bin env
# TBD/TODO

View File

@@ -1,3 +0,0 @@
#/usr/local/bin env
# TBD/TODO

View File

@@ -1,57 +0,0 @@
#!/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/*" -x "/srv/sftp/*"
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

@@ -28,44 +28,37 @@ function usage() {
# Parameters: # Parameters:
# 1) The exit status to use. # 1) The exit status to use.
status=$1 status=$1
echo "Usage: $PROG [-s SIZE] [-l LOCATION] [-A | [-r] [-f] [-d] [-c]] [-h] [-x] [-t]" >&2 echo "Usage: $PROG [-s SIZE] [-l LOCATION] [-A | [-r] [-f] [-d] [-c]] [-h] [-x]" >&2
cat <<- EOF cat <<- EOF
Compress JPG or PNG image(s). Can handle folders and work recursively. Compress JPG or PNG image(s). Can handle folders and work recursively.
Parameters: Parameters:
-s SIZE : Integer for the maximum length of either image dimension. -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. -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. -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 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. -d : Delete the original image if the compressed image is smaller.
-c : Clean the filename of underscores, dashes, 'IMG', etc. -c : Clean the filename of underscores, dashes, 'IMG', etc.
-A : Resursively Force, Delete, and Clean. -A : Resursively Force, Delete, and Clean.
-h : Display this usage text. -h : Display this usage text.
-x : Enable BASH debugging. -x : Enable BASH debugging.
-t : Format timestamp.
EOF EOF
exit $status exit $status
} }
## Parameters ## ## Parameters ##
while getopts ":s:l:rfFdcAhxt" opt; do while getopts ":s:l:rfdcAhx" opt; do
case $opt in case $opt in
s) in_size="$OPTARG" && size="$in_size" ;; s) in_size="$OPTARG" && size="$in_size" ;;
l) location="$OPTARG" ;; l) location="$OPTARG" ;;
r) recurse="Y" && search="find" ;; r) recurse="Y" && search="find" ;;
f) force="Y" ;; f) force="Y" ;;
F) super_force="Y" ;;
d) delete="Y" ;; d) delete="Y" ;;
c) clean="Y" ;; c) clean="Y" ;;
e) expand="Y" ;; A) recurse="Y" && search="find" && force="Y" && delete="Y" && clean="Y" ;;
A) recurse="Y" && search="find" && force="Y" && delete="Y" && expand="Y" ;;
h) usage 0 ;; h) usage 0 ;;
x) set -x ;; x) set -x ;;
t) format_time="Y" ;;
*) echo "ERROR: Option $OPTARG not recognized." >&2 && usage 1 ;; *) echo "ERROR: Option $OPTARG not recognized." >&2 && usage 1 ;;
esac esac
done done
@@ -77,7 +70,7 @@ if [[ -n "$in_size" && "$size" != "$in_size" ]]; then
usage 1 usage 1
fi fi
convert_exe="`which convert` -strip" convert_exe="`which convert`"
if [[ "$convert_exe" == "" ]]; then if [[ "$convert_exe" == "" ]]; then
echo "ERROR: 'convert' command could not be found, " echo "ERROR: 'convert' command could not be found, "
echo "please install 'imagemagick'." echo "please install 'imagemagick'."
@@ -97,8 +90,8 @@ $search "$location" | sort | while read image; do
# Avoid processing directories no matter the name. # Avoid processing directories no matter the name.
[ -d "$image" ] && continue [ -d "$image" ] && continue
# Avoid processing files previously shrunk, unless we are FORCEing. # Avoid processing files previously shrunk.
[[ "$image" == *"$tag"* && -z "$super_force" ]] && continue [[ "$image" == *"$tag"* ]] && continue
echo -e "\n$image" echo -e "\n$image"
@@ -113,7 +106,8 @@ $search "$location" | sort | while read image; do
continue continue
fi fi
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$size.$extension"
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$extension"
## Clean Filename ## ## Clean Filename ##
# Prevent directory from having its name cleaned too. # Prevent directory from having its name cleaned too.
@@ -126,33 +120,13 @@ $search "$location" | sort | while read image; do
new_image_clean="${new_image_clean//-/}" new_image_clean="${new_image_clean//-/}"
new_image_clean="${new_image_clean// /}" new_image_clean="${new_image_clean// /}"
## Expanded Filename ## # Add directory back to the full path.
# 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
if [[ "$format_time" == "Y" ]]; then
new_image_exp="${new_image_exp}_${TEMP:8:2}-${TEMP:10:2}-${TEMP:12:2}"
fi
# 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_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. # Delete the existing shrunk image if we are forcing a new compression.
if [[ -n "$force" && if [[ -n "$force" && (-e "$new_image" || -e $new_image_clean) ]]; then
(-e "$new_image" || -e $new_image_clean || -e $new_image_exp ) ]]; then
echo -n " FORCE: " echo -n " FORCE: "
rm -v "$new_image" "$new_image_clean" "$new_image_exp" 2>/dev/null rm -v "$new_image" "$new_image_clean" 2>/dev/null
fi fi
# Skip if a compressed image was already created today. # Skip if a compressed image was already created today.
@@ -161,14 +135,10 @@ $search "$location" | sort | while read image; do
continue continue
fi fi
# Whether or not to use the cleaned version. # Whether or not to use the cleaned version or the normal version.
if [[ -n $clean ]]; then if [[ -n $clean ]]; then
new_image="$new_image_clean" new_image="$new_image_clean"
# Whether or not to use the expanded version.
elif [[ -n $expand ]]; then
new_image="$new_image_exp"
fi fi
# Otherwise uses the same name as before.
###### TBD Instead of this, only alter the file names, and set a dirname var? ###### TBD Instead of this, only alter the file names, and set a dirname var?
#### Create a new directory if the directory names were altered. #### Create a new directory if the directory names were altered.

View File

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

View File

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

@@ -75,6 +75,7 @@
- include_tasks: tasks/general/software/sendmail.yml - include_tasks: tasks/general/software/sendmail.yml
when: ansible_system == "FreeBSD" when: ansible_system == "FreeBSD"
# Gather again in case missing programs have now been installed. # Gather again in case missing programs have now been installed.
- include_tasks: facts/general/gather.yml - include_tasks: facts/general/gather.yml
@@ -123,12 +124,6 @@
- include_tasks: tasks/workstation/linux/software/packages.yml - include_tasks: tasks/workstation/linux/software/packages.yml
when: ansible_system == "Linux" when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/lutris.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/vscodium.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/brave.yml - include_tasks: tasks/workstation/linux/software/brave.yml
when: ansible_pkg_mgr in ("apt", "dnf", "zypper") and not mobile when: ansible_pkg_mgr in ("apt", "dnf", "zypper") and not mobile
@@ -159,12 +154,6 @@
- include_tasks: tasks/workstation/shared/settings/services.yml - include_tasks: tasks/workstation/shared/settings/services.yml
# Final Tasks (SLOW) # # 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 - include_tasks: tasks/workstation/linux/software/flatpaks.yml
when: ansible_system == "Linux" and flatpak_distro when: ansible_system == "Linux" and flatpak_distro

103
setup.sh
View File

@@ -9,18 +9,13 @@ LOCAL=$DIR/local.yml
URL="https://git.hyperling.com/me/env-ansible" URL="https://git.hyperling.com/me/env-ansible"
BRANCH="main" BRANCH="main"
config_dir="/usr/local/etc/hyperling-scm"
general_config="$config_dir/general.ini"
workstation_config="$config_dir/workstation.ini"
server_config="$config_dir/server.ini"
## Functions ## ## Functions ##
# Accepts 1 parameter, it is used as the exit status. # Accepts 1 parameter, it is used as the exit status.
function usage { function usage {
cat <<- EOF cat <<- EOF
$PROG [-l] [-b branch_name] [-g] [-w] [-s] [-f] [-h] $PROG [-l] [-b branch_name] [-h]
Program to initialize synchronization with Hyperling's Ansible configuration. Program to initialize synchronization with Hyperling's Ansible configuration.
$URL $URL
@@ -28,12 +23,8 @@ function usage {
-l : Run the local playbook associated with this $PROG. -l : Run the local playbook associated with this $PROG.
This is helpful for development or just saving bandwidth. This is helpful for development or just saving bandwidth.
It also provides prettier colors than the plaintext from ansible-pull. ;) It also provides prettier colors than the plaintext from ansible-pull. ;)
-b branch_name : Download and run a specific branch. Default is $BRANCH. -b branch_name: Download and run a specific branch. Default is $BRANCH.
-g : Enable the General config with test contents. -h : Display this help text
-w : Enable the Workstation config with test contents.
-s : Enable the Server config with test contents.
-f : Display this system's facts.
-h : Display this help text.
EOF EOF
exit $1 exit $1
@@ -41,14 +32,10 @@ function usage {
## Parameter Parsing ## ## Parameter Parsing ##
while getopts ":lb:gwsfh" arg; do while getopts ":lb:h" arg; do
case $arg in case $arg in
l) local="Y" && echo "Running $LOCAL as the playbook." ;; l) local="Y" && echo "Running $LOCAL as the playbook." ;;
b) branch="$OPTARG" && echo "Using branch $branch instead of $BRANCH." ;; b) branch="$OPTARG" && echo "Using branch $branch instead of $BRANCH." ;;
g) create_general="Y" && echo "Requested '$general_config'." ;;
w) create_workstation="Y" && echo "Requested '$workstation_config'." ;;
s) create_server="Y" && echo "Requested '$server_config'." ;;
f) show_facts="Y" ;;
h) usage ;; h) usage ;;
*) echo "ERROR: Parameter $OPTARG was not recognized." && usage 1 ;; *) echo "ERROR: Parameter $OPTARG was not recognized." && usage 1 ;;
esac esac
@@ -60,32 +47,15 @@ if [[ ! -z $1 && $1 != "-"* ]]; then
usage 1 usage 1
fi fi
if [[ -z "$local" && "$branch" == "" ]]; then if [[ $branch == "" ]]; then
echo "Using default branch $BRANCH." echo "Using default branch $BRANCH."
branch="$BRANCH" branch="$BRANCH"
fi fi
if [[ -n "$create_general" && -f "$general_config" ]]; then
echo "WARNING: General configuration already exists, will not overwrite."
ls -lh "$general"
fi
if [[ -n "$create_workstation" && -f "$workstation_config" ]]; then
echo "WARNING: Workstation configuration already exists, will not overwrite."
ls -lh "$workstation_config"
fi
if [[ -n "$create_server" && -f "$server_config" ]]; then
echo "WARNING: Server configuration already exists, will not overwrite."
ls -lh "$server_config"
fi
## Main ## ## Main ##
os="$(cat /etc/os-release)" os="$(cat /etc/os-release)"
if [[ ! -f /.dockerenv ]]; then os="$os $(uname -a)"
# If we are not in a Docker container, also check what the kernel says.
os="$os $(uname -a)"
# Docker containers use the host kernel which gives an incorrect reading.
fi
echo "Making sure all necessary packages are installed..." echo "Making sure all necessary packages are installed..."
if [[ `which ansible > /dev/null; echo $?` != 0 ]]; then if [[ `which ansible > /dev/null; echo $?` != 0 ]]; then
@@ -127,71 +97,10 @@ if [[ `which ansible > /dev/null; echo $?` != 0 ]]; then
fi fi
echo "Installed!" echo "Installed!"
if [[ "$show_facts" == "Y" ]]; then
echo "Showing Ansible Facts"
ansible localhost -m setup --connection=local
fi
#echo "Adding Ansible Collections..." #echo "Adding Ansible Collections..."
#ansible-galaxy collection install community.general #ansible-galaxy collection install community.general
#echo "Added!" #echo "Added!"
# Create basic layouts if configs do not exist and are requested.
if [[ -n "$create_general"
|| -n "$create_workstation"
|| -n "$create_server" ]]
then
sudo mkdir -pv "$config_dir"
MARK1="BEGIN"
MARK2="END"
fi
if [[ -n "$create_general" && ! -f "$general_config" ]]; then
function print_general_contents {
cat <<- EOF
; $MARK1 MANAGED BY ANSIBLE | Generic Config
; $MARK2 MANAGED BY ANSIBLE | Generic Config
; TEST DATA
enable=true
user=test
user_desc=Test
branch=$branch
; TEST DATA
EOF
}
print_general_contents | sudo tee "$general_config"
ls -lh "$general_config"
fi
if [[ -n "$create_workstation" && ! -f "$workstation_config" ]]; then
function print_workstation_contents {
cat <<- EOF
; $MARK1 MANAGED BY ANSIBLE | Workstation Config
; $MARK2 MANAGED BY ANSIBLE | Workstation Config
; TEST DATA
enable=true
coding=true
editing=false
gaming=false
; TEST DATA
EOF
}
print_workstation_contents | sudo tee "$workstation_config"
ls -lh "$workstation_config"
fi
if [[ -n "$create_server" && ! -f "$server_config" ]]; then
function print_server_contents {
cat <<- EOF
; $MARK1 MANAGED BY ANSIBLE | Server Config
; $MARK2 MANAGED BY ANSIBLE | Server Config
; TEST DATA
enable=true
; TEST DATA
EOF
}
print_server_contents | sudo tee "$server_config"
ls -lh "$server_config"
fi
echo "Provisioning Ansible..." echo "Provisioning Ansible..."
if [[ $local == "Y" ]]; then if [[ $local == "Y" ]]; then
sudo ansible-playbook $LOCAL sudo ansible-playbook $LOCAL

View File

@@ -26,7 +26,7 @@
blockinfile: blockinfile:
path: "{{ gen_file }}" path: "{{ gen_file }}"
block: | block: |
; Please note that all portions require lowercase keys and values. ; Please note that all potions require lowercase keys and values.
; ;
;;;;;;;;;;;;;;;;;;;; Basic Options ;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;; Basic Options ;;;;;;;;;;;;;;;;;;;;
; ;
@@ -35,11 +35,11 @@
; ;
; user : Provide the name of the user account. ; user : Provide the name of the user account.
; Example: tom, jerry, kim, sarah ; Example: tom, jerry, kim, sarah
; Default: user ; Default: ling
; ;
; user_desc : Provide the description of the user account. ; user_desc : Provide the description of the user account.
; Example: Thomas, Jerry, Kimberly, Sarah ; Example: Thomas, Jerry, Kimberly, Sarah
; Default: User ; Default: Hyperling
; ;
; sshd_port : Determine the port which SSHD should listen on. ; sshd_port : Determine the port which SSHD should listen on.
; Example: 12345 ; Example: 12345
@@ -51,8 +51,7 @@
; ;
;;;;;;;;;;;;;;;;;;;; Git Polling ;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;; Git Polling ;;;;;;;;;;;;;;;;;;;;
; ;
; For syncing this machine to a Git repository of this Ansible project ; 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. ; branch : Branch to use on this machine.
; Example: main, dev, prod ; Example: main, dev, prod
@@ -62,10 +61,6 @@
; Example: github.com, gitlab.com. gitea.com ; Example: github.com, gitlab.com. gitea.com
; Default: git.hyperling.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. ; git_user : Provide the git user which projects are found under.
; Example: Hyperling, JimBobMcGeeJr ; Example: Hyperling, JimBobMcGeeJr
; Default: me ; Default: me
@@ -74,6 +69,10 @@
; Example: Ansible, ansible-setup, my-env ; Example: Ansible, ansible-setup, my-env
; Default: env-ansible ; Default: env-ansible
; ;
; git_ssh_port : Port of the server host to use for SSH requests.
; Example: 22, 222, 2222
; Default: 22
;
;;;;;;;;;;;;;;;;;;;; Swap File ;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;; Swap File ;;;;;;;;;;;;;;;;;;;;
; ;
; swap_block : Set to the block size if dd should create a swapfile. ; swap_block : Set to the block size if dd should create a swapfile.
@@ -101,22 +100,6 @@
; Slows down the rate of services such as telegraf and cron. ; Slows down the rate of services such as telegraf and cron.
; Default: false ; 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] [global]
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config' marker: '; {mark} MANAGED BY ANSIBLE | Generic Config'
state: present state: present
@@ -125,24 +108,21 @@
- name: General | Account Management | Provisioning Configuration | General | Load - name: General | Account Management | Provisioning Configuration | General | Load
set_fact: set_fact:
provision: "{{ lookup('ini', 'enable file={{gen_file}} default=false') | bool }}" provision: "{{ lookup('ini', 'enable file={{gen_file}} default=false') }}"
user: "{{ lookup('ini', 'user file={{gen_file}} default=ling') }}" user: "{{ lookup('ini', 'user file={{gen_file}} default=ling') }}"
user_desc: "{{ lookup('ini', 'user_desc file={{gen_file}} default=Hyperling') }}" user_desc: "{{ lookup('ini', 'user_desc file={{gen_file}} default=Hyperling') }}"
branch: "{{ lookup('ini', 'branch file={{gen_file}} default=main') }}" branch: "{{ lookup('ini', 'branch file={{gen_file}} default=main') }}"
pentesting: "{{ lookup('ini', 'pentesting file={{gen_file}} default=false') | bool }}" pentesting: "{{ lookup('ini', 'pentesting file={{gen_file}} default=false') }}"
no_telem: "{{ lookup('ini', 'no_telem file={{gen_file}} default=false') | bool }}" no_telem: "{{ lookup('ini', 'no_telem file={{gen_file}} default=false') }}"
battery: "{{ lookup('ini', 'battery file={{gen_file}} default=false') | bool }}" battery: "{{ lookup('ini', 'battery file={{gen_file}} default=false') }}"
swap_block: "{{ lookup('ini', 'swap_block file={{gen_file}} default=false') }}" swap_block: "{{ lookup('ini', 'swap_block file={{gen_file}} default=false') }}"
swap_count: "{{ lookup('ini', 'swap_count file={{gen_file}} default=1') }}" swap_count: "{{ lookup('ini', 'swap_count file={{gen_file}} default=1') }}"
swap_file: "{{ lookup('ini', 'swap_file file={{gen_file}} default=/swapfile') }}" 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_host: "{{ lookup('ini', 'git_host file={{gen_file}} default=git.hyperling.com') }}"
git_user: "{{ lookup('ini', 'git_user file={{gen_file}} default=me') }}" git_user: "{{ lookup('ini', 'git_user file={{gen_file}} default=me') }}"
git_project: "{{ lookup('ini', 'git_project file={{gen_file}} default=env-ansible') }}" 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') }}" 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 - name: General | Account Management | Provisioning Configuration | General | List
set_fact: set_fact:
@@ -163,9 +143,6 @@
- { 'git_user': "{{ git_user }}" } - { 'git_user': "{{ git_user }}" }
- { 'git_project': "{{ git_project }}" } - { 'git_project': "{{ git_project }}" }
- { 'git_ssh_port': "{{ git_ssh_port }}" } - { 'git_ssh_port': "{{ git_ssh_port }}" }
- { 'prod_host': "{{ prod_host }}" }
- { 'prod_port': "{{ prod_port }}" }
- { 'prod_user': "{{ prod_user }}" }
## Workstation ## ## Workstation ##
@@ -179,13 +156,8 @@
; enable : Set to true for system to be considered a workstation. ; enable : Set to true for system to be considered a workstation.
; ;
; coding : Set to true for installation of code editors (VSCode, PyCharm, Android Studio) ; 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) ; 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) ; gaming : Set to true for installation of gaming software (Steam, Lutris)
; ;
@@ -201,9 +173,6 @@
; mobile : Set to true if not using an amd64 processor. ; mobile : Set to true if not using an amd64 processor.
; Also used to disable tasks not helpful for Pinephone. ; Also used to disable tasks not helpful for Pinephone.
; ;
; redmode : Set to true/false for automatially using Night Light in GNOME.
; Default: true
;
[global] [global]
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config' marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config'
state: present state: present
@@ -212,16 +181,14 @@
- name: General | Account Management | Provisioning Configuration | Workstation | Load - name: General | Account Management | Provisioning Configuration | Workstation | Load
set_fact: set_fact:
workstation: "{{ lookup('ini', 'enable file={{wrk_file}} default=false') | bool }}" workstation: "{{ lookup('ini', 'enable file={{wrk_file}} default=false') }}"
coding: "{{ lookup('ini', 'coding file={{wrk_file}} default=false') | bool }}" coding: "{{ lookup('ini', 'coding file={{wrk_file}} default=false') }}"
sdks: "{{ lookup('ini', 'sdks file={{wrk_file}} default=false') | bool }}"
editing: "{{ lookup('ini', 'editing file={{wrk_file}} default=false') }}" editing: "{{ lookup('ini', 'editing file={{wrk_file}} default=false') }}"
gaming: "{{ lookup('ini', 'gaming file={{wrk_file}} default=false') | bool }}" gaming: "{{ lookup('ini', 'gaming file={{wrk_file}} default=false') }}"
rdp: "{{ lookup('ini', 'rdp file={{wrk_file}} default=false') | bool }}" rdp: "{{ lookup('ini', 'rdp file={{wrk_file}} default=false') }}"
vnc: "{{ lookup('ini', 'vnc file={{wrk_file}} default=false') | bool }}" vnc: "{{ lookup('ini', 'vnc file={{wrk_file}} default=false') }}"
bsd_gpu: "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') | bool }}" bsd_gpu: "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') }}"
mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') | bool }}" mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') }}"
redmode: "{{ lookup('ini', 'redmode file={{wrk_file}} default=true' ) | bool }}"
- name: General | Account Management | Provisioning Configuration | Workstation | List - name: General | Account Management | Provisioning Configuration | Workstation | List
set_fact: set_fact:
@@ -229,14 +196,12 @@
loop: loop:
- { 'workstation': "{{ workstation }}" } - { 'workstation': "{{ workstation }}" }
- { 'coding': "{{ coding }}" } - { 'coding': "{{ coding }}" }
- { 'sdks': "{{ sdks }}" }
- { 'editing': "{{ editing }}" } - { 'editing': "{{ editing }}" }
- { 'gaming': "{{ gaming }}" } - { 'gaming': "{{ gaming }}" }
- { 'rdp': "{{ rdp }}" } - { 'rdp': "{{ rdp }}" }
- { 'vnc': "{{ vnc }}" } - { 'vnc': "{{ vnc }}" }
- { 'bsd_gpu': "{{ bsd_gpu }}" } - { 'bsd_gpu': "{{ bsd_gpu }}" }
- { 'mobile': "{{ mobile }}" } - { 'mobile': "{{ mobile }}" }
- { 'redmode': "{{ redmode }}" }
# No longer mining, this is now considered deprecated. # No longer mining, this is now considered deprecated.
### Miner ## ### Miner ##
@@ -288,18 +253,18 @@
# #
#- name: General | Account Management | Provisioning Configuration | Miner | Load #- name: General | Account Management | Provisioning Configuration | Miner | Load
# set_fact: # set_fact:
# miner: "{{ lookup('ini', 'enable file={{mnr_file}} default=false') | bool }}" # miner: "{{ lookup('ini', 'enable file={{mnr_file}} default=false') }}"
# amdgpu: "{{ lookup('ini', 'amdgpu file={{mnr_file}} default=false') | bool }}" # amdgpu: "{{ lookup('ini', 'amdgpu file={{mnr_file}} default=false') }}"
# nanominer: "{{ lookup('ini', 'nanominer file={{mnr_file}} default=false') | bool }}" # nanominer: "{{ lookup('ini', 'nanominer file={{mnr_file}} default=false') }}"
# nanominer_cpu: "{{ lookup('ini', 'nanominer_cpu file={{mnr_file}} default=false') | bool }}" # nanominer_cpu: "{{ lookup('ini', 'nanominer_cpu file={{mnr_file}} default=false') }}"
# nanominer_cpu_pool: "{{ lookup('ini', 'nanominer_cpu_pool file={{mnr_file}} default=false') | bool }}" # nanominer_cpu_pool: "{{ lookup('ini', 'nanominer_cpu_pool file={{mnr_file}} default=false') }}"
# nanominer_gpu: "{{ lookup('ini', 'nanominer_gpu file={{mnr_file}} default=false') | bool }}" # nanominer_gpu: "{{ lookup('ini', 'nanominer_gpu file={{mnr_file}} default=false') }}"
# nanominer_gpus: "{{ lookup('ini', 'nanominer_gpus file={{mnr_file}} default=false') | bool }}" # nanominer_gpus: "{{ lookup('ini', 'nanominer_gpus file={{mnr_file}} default=false') }}"
# nanominer_gpu_pool: "{{ lookup('ini', 'nanominer_gpu_pool file={{mnr_file}} default=false') | bool }}" # nanominer_gpu_pool: "{{ lookup('ini', 'nanominer_gpu_pool file={{mnr_file}} default=false') }}"
# eth_minhashrate: "{{ lookup('ini', 'eth_minhashrate file={{mnr_file}} default=false') | bool }}" # eth_minhashrate: "{{ lookup('ini', 'eth_minhashrate file={{mnr_file}} default=false') }}"
# ethminer: "{{ lookup('ini', 'ethminer file={{mnr_file}} default=false') | bool }}" # ethminer: "{{ lookup('ini', 'ethminer file={{mnr_file}} default=false') }}"
# nvidia: "{{ lookup('ini', 'nvidia file={{mnr_file}} default=false') | bool }}" # nvidia: "{{ lookup('ini', 'nvidia file={{mnr_file}} default=false') }}"
# xmr_stak_cpu: "{{ lookup('ini', 'xmr_stak_cpu file={{mnr_file}} default=false') | bool }}" # xmr_stak_cpu: "{{ lookup('ini', 'xmr_stak_cpu file={{mnr_file}} default=false') }}"
# #
#- name: General | Account Management | Provisioning Configuration | Miner | List #- name: General | Account Management | Provisioning Configuration | Miner | List
# set_fact: # set_fact:
@@ -357,14 +322,14 @@
- name: General | Account Management | Provisioning Configuration | Server | Load - name: General | Account Management | Provisioning Configuration | Server | Load
set_fact: set_fact:
server: "{{ lookup('ini', 'enable file={{srv_file}} default=false') | bool }}" server: "{{ lookup('ini', 'enable file={{srv_file}} default=false') }}"
domain: "{{ lookup('ini', 'domain file={{srv_file}} default=hyperling.com') }}" domain: "{{ lookup('ini', 'domain file={{srv_file}} default=hyperling.com') }}"
onlyoffice: "{{ lookup('ini', 'onlyoffice file={{srv_file}} default=false') | bool }}" onlyoffice: "{{ lookup('ini', 'onlyoffice file={{srv_file}} default=false') }}"
grafana: "{{ lookup('ini', 'grafana file={{srv_file}} default=false') | bool }}" grafana: "{{ lookup('ini', 'grafana file={{srv_file}} default=false') }}"
influxdb1: "{{ lookup('ini', 'influxdb1 file={{srv_file}} default=false') | bool }}" influxdb1: "{{ lookup('ini', 'influxdb1 file={{srv_file}} default=false') }}"
influxdb2: "{{ lookup('ini', 'influxdb2 file={{srv_file}} default=false') | bool }}" influxdb2: "{{ lookup('ini', 'influxdb2 file={{srv_file}} default=false') }}"
certbot: "{{ lookup('ini', 'certbot file={{srv_file}} default=false') | bool }}" certbot: "{{ lookup('ini', 'certbot file={{srv_file}} default=false') }}"
hugo: "{{ lookup('ini', 'hugo file={{srv_file}} default=false') | bool }}" hugo: "{{ lookup('ini', 'hugo file={{srv_file}} default=false') }}"
- name: General | Account Management | Provisioning Configuration | Server | List - name: General | Account Management | Provisioning Configuration | Server | List
set_fact: set_fact:

View File

@@ -100,6 +100,7 @@
mode: '0755' mode: '0755'
loop: loop:
- "{{ user_user.home }}/bin" - "{{ user_user.home }}/bin"
- "{{ user_user.home }}/LBRY"
- "{{ user_user.home }}/TRASH" - "{{ user_user.home }}/TRASH"
- "{{ user_user.home }}/Downloads" - "{{ user_user.home }}/Downloads"
- "{{ user_user.home }}/Reports" - "{{ user_user.home }}/Reports"
@@ -157,27 +158,26 @@
function_update: | function_update: |
function update() { function update() {
PROG=$FUNCNAME PROG=$FUNCNAME
usage="Usage: $PROG [-y] [-g] [-s] [-f] usage="Usage: $PROG [-y]
$PROG is used to run all the system's package manager commands $PROG is used to run all the system's package manager commands
in one swoop. Flow stops if any command returns a failure code. in one swoop. Flow stops if any command returns a failure code.
The hope is to run something as easy as 'pacman -Syyu'. The hope is to run something as easy as 'pacman -Syyu'.
-y : Assume yes to any prompts. -y : Assume yes to any prompts.
-g : Goodbye - Shutdown after updating. -g : Shutdown after updating.
-s : System updates only, no Flatpaks. -s : System updates only, no Flatpaks.
-f : Flatpaks only, no system updates." -f : Flatpaks only, no system updates."
unset OPTIND unset OPTIND
unset accept unset accept
unset shutdown unset goodbye
unset only_sys unset only_sys
unset only_flat unset only_flat
while getopts ":hygsf" opt; do while getopts ":hygsf" opt; do
case $opt in case $opt in
h) echo -e "$usage" h) echo -e "$usage"
return 0 ;; return 0 ;;
y) accept="-y" ;; y) accept="-y" ;;
g) shutdown="Y" ;; g) goodbye="Y" ;;
s) only_sys="Y" ;; s) only_sys="Y" ;;
f) only_flat="Y" ;; f) only_flat="Y" ;;
*) echo "ERROR: -$OPTARG is not a recognized option." >&2 *) echo "ERROR: -$OPTARG is not a recognized option." >&2
@@ -192,7 +192,7 @@
{{ update_package_manager }} {{ update_package_manager }}
fi fi
if [[ "$shutdown" == "Y" && "{{ battery }}" == "True" ]]; then if [[ "$goodbye" == "Y" && "{{ battery }}" == "True" ]]; then
echo -e "\n*** Only System Updates - Skipping Flatpak ***\n\n" echo -e "\n*** Only System Updates - Skipping Flatpak ***\n\n"
elif [[ "$only_sys" == "Y" ]]; then elif [[ "$only_sys" == "Y" ]]; then
echo -e "\n*** Manually Skipping Flatpak ***\n\n" echo -e "\n*** Manually Skipping Flatpak ***\n\n"
@@ -202,8 +202,7 @@
echo "*** Completed Successfully ***" echo "*** Completed Successfully ***"
if [[ $shutdown == "Y" ]]; then if [[ $goodbye == "Y" ]]; then
shopt -s expand_aliases
bye bye
fi fi
@@ -235,8 +234,6 @@
echo "*** Completed Successfully ***" echo "*** Completed Successfully ***"
return 0 return 0
} }
alias firmware-update="update-firmware"
alias firmware-updater="update-firmware"
alias_sync: alias sync='date && echo "Syncing!" && sync && date' alias_sync: alias sync='date && echo "Syncing!" && sync && date'
export_editor: export EDITOR='vi' export_editor: export EDITOR='vi'
init_aliases: | init_aliases: |
@@ -254,12 +251,8 @@
' '
alias init-prog=init-program alias init-prog=init-program
bye_aliases: | bye_aliases: |
function bye { alias bye="{{ shutdown_command }}"
{{ shutdown_command }} alias goodbye="update -yg"
}
function goodbye {
update -yg
}
metasploit_aliases: | metasploit_aliases: |
alias metasploit="msfconsole" alias metasploit="msfconsole"
alias hax="metasploit" alias hax="metasploit"
@@ -283,38 +276,21 @@
alias edit-config-wrk="sudo $EDITOR {{ wrk_file }}" alias edit-config-wrk="sudo $EDITOR {{ wrk_file }}"
alias edit-config-mnr="sudo $EDITOR {{ mnr_file }}" alias edit-config-mnr="sudo $EDITOR {{ mnr_file }}"
alias edit-config-srv="sudo $EDITOR {{ srv_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: |
function check-trash() { function check-trash() {
unset OPTIND unset OPTIND
unset clean unset clean
unset network unset network
du_params="-ha"
while (( $# > 0 )); do while (( $# > 0 )); do
case $1 in case $1 in
-c | -y | --clean ) -c | -y | --clean )
clean="Y" ;; clean="Y" ;;
-n | -net | --network ) -n | -net | --network )
network="Y" ;; network="Y" ;;
-s | -sum | --summarize )
du_params="-sh" ;;
* ) * )
echo " echo "
ERROR: Option '$1' with value '$2' not recognized. 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 " >&2
return 1 return 1
;; ;;
@@ -342,8 +318,8 @@
echo "Checking $dir..." echo "Checking $dir..."
$sudo find $dir -name TRASH | while read trash; do $sudo find $dir -name TRASH | while read trash; do
if [[ "$trash" != "" && `$sudo ls -a $trash` ]]; then if [[ "$trash" != "" && `$sudo ls -a $trash` ]]; then
echo "Found $trash:" echo "Found $trash with contents:"
$sudo du $du_params $trash | sort -h $sudo du -ha $trash | sort -h
if [[ "$clean" == "Y" ]]; then if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..." echo "Cleaning trash..."
$sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *" $sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@@ -352,8 +328,8 @@
done done
$sudo find $dir $maxdepth -name "*"Trash"*" | while read trash; do $sudo find $dir $maxdepth -name "*"Trash"*" | while read trash; do
if [[ "$trash" != "" && `$sudo ls -a $trash` ]]; then if [[ "$trash" != "" && `$sudo ls -a $trash` ]]; then
echo "Found $trash:" echo "Found $trash with contents:"
$sudo du $du_params $trash | sort -h $sudo du -ha $trash | sort -h
if [[ "$clean" == "Y" ]]; then if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..." echo "Cleaning trash..."
$sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *" $sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@@ -369,8 +345,8 @@
echo "Checking $dir..." echo "Checking $dir..."
sudo find $dir -name TRASH | while read trash; do sudo find $dir -name TRASH | while read trash; do
if [[ "$trash" != "" && `sudo ls -a $trash` ]]; then if [[ "$trash" != "" && `sudo ls -a $trash` ]]; then
echo "Found $trash:" echo "Found $trash with contents:"
sudo du $du_params $trash | sort -h sudo du -ha $trash | sort -h
if [[ "$clean" == "Y" ]]; then if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..." echo "Cleaning trash..."
sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *" sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@@ -379,8 +355,8 @@
done done
sudo find $dir -name .Trash"*" | while read trash; do sudo find $dir -name .Trash"*" | while read trash; do
if [[ "$trash" != "" && `sudo ls -a $trash` ]]; then if [[ "$trash" != "" && `sudo ls -a $trash` ]]; then
echo "Found $trash:" echo "Found $trash with contents:"
sudo du $du_params $trash | sort -h sudo du -ha $trash | sort -h
if [[ "$clean" == "Y" ]]; then if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..." echo "Cleaning trash..."
sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *" sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@@ -391,9 +367,6 @@
fi fi
echo "Checking but not cleaning /var/mail..." echo "Checking but not cleaning /var/mail..."
du -ha /var/mail | sort -h du -ha /var/mail | sort -h
if [[ $clean == "Y" ]]; then
clean-trashed "~/"
fi
return 0 return 0
} }
alias check_trash="check-trash" alias check_trash="check-trash"
@@ -402,20 +375,18 @@
alias_trash_clean: alias trash-clean='trash-check --clean' alias_trash_clean: alias trash-clean='trash-check --clean'
alias_clean_dir: | alias_clean_dir: |
function clean-dir() { function clean-dir() {
sudo du -hs
clean_dir="`date '+%Y%m%d_%H%M%S'`_CLEANED" clean_dir="`date '+%Y%m%d_%H%M%S'`_CLEANED"
trash_dir="$HOME/TRASH/$clean_dir" trash_dir="$HOME/TRASH/$clean_dir"
curr_dir="`pwd`" curr_dir="`pwd`"
mkdir -pv "$trash_dir" mkdir -pv "$trash_dir"
echo "$curr_dir is being cleaned at `date`." | tee "$trash_dir"/INFO.txt echo "$curr_dir is being cleaned at `date`." | tee "$trash_dir"/INFO.txt
mv -v ..?* .[!.]* * "$trash_dir"/ | tee -a "$trash_dir"/INFO.txt mv -v ..?* .[!.]* * "$trash_dir"/ | tee -a "$trash_dir"/INFO.txt
sudo du -hs
} }
function_clean: | function_clean: |
function clean() { function clean() {
clean-trash sudo du -hs
clean-code clean-dir
clean-backups sudo du -hs
} }
function_flatpak_usage: | function_flatpak_usage: |
function flatpak-usage() { function flatpak-usage() {
@@ -427,10 +398,6 @@
fi fi
done | sort -n 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: |
function flatpak-purge() { function flatpak-purge() {
flatpak remove --all --delete-data && flatpak remove --all --delete-data &&
@@ -442,65 +409,23 @@
} }
alias_vim: alias vi=vim alias_vim: alias vi=vim
alias_here: alias here='ls -alh `pwd`/*' alias_here: alias here='ls -alh `pwd`/*'
function_docker_reload: | alias_docker_reload: |
function docker-reload() { alias 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 build &&
docker compose down && docker compose down &&
docker compose build &&
docker compose up -d docker compose up -d
'
if [[ -n "$1" ]]; then alias_docker_update: |
echo "Following logs of '$1':" alias docker-update='
docker logs -f $1 docker compose down &&
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 pull && docker compose pull &&
docker compose build && docker compose build &&
docker compose down &&
docker compose up -d 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: |
function docker-upgrade() { function docker-upgrade() {
# Wrapper for a full-scale upgrade and log view of a container. # Wrapper for a full-scale upgrade and log view of a container.
# Paramaters:
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<- EOF
Usage: docker-upgrade [container_name]
Providing the container name starts a log follow after the command.
An upgrade is characterized by a DOWN, PULL, BUILD, and UP.
EOF
return 0
fi
# Parameters:
# 1) Container ID or Container Name, as seen in 'docker ps' command. # 1) Container ID or Container Name, as seen in 'docker ps' command.
container=$1 container=$1
if [[ -z $container ]]; then if [[ -z $container ]]; then
@@ -519,74 +444,33 @@
docker ps docker ps
return; return;
fi fi
echo "*** Going Down ***" &&
docker compose down &&
echo "*** Upgrading Images ***" && echo "*** Upgrading Images ***" &&
docker compose pull && docker compose pull &&
echo "*** Building Containers ***" && echo "*** Building Containers ***" &&
docker compose build && docker compose build &&
echo "*** Going Down ***" &&
docker compose down &&
echo "*** Starting Daemons ***" && echo "*** Starting Daemons ***" &&
docker compose up -d && docker compose up -d &&
echo "*** Following Log ***" && echo "*** Following Log ***" &&
echo "Press ^C to escape." && echo "Press ^C to escape." &&
docker logs -f $container docker logs -f $container
return 0
} }
function_docker_restart: | alias_docker_restart: |
function docker-restart() { alias docker-restart='docker compose down && docker compose up -d'
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_other: |
alias docker-stop="docker compose down"
alias docker-start="docker compose up -d && docker compose start"
alias docker-prep="docker compose pull && docker compose build"
alias_code_check: | alias_code_check: |
alias code-check=' alias code-check='
echo "Checking ~/Code directory for git changes."
ls -d ~/Code/* | while read project; do ls -d ~/Code/* | while read project; do
if [[ ! -d $project ]]; then echo "*** `basename $project` ***"
continue
fi
echo -e "\n*** `basename $project` ***"
cd $project cd $project
if [[ -d .git ]]; then 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 pull
git push git push
else else
echo "Not a Git project, skipping!" echo "Not a Git project, skipping!"
fi fi
done done
echo -e "\nDone!"
' '
alias code-sync='code-check'
alias_code_reset: | alias_code_reset: |
alias code-reset=' alias code-reset='
ls -d ~/Code/* | while read project ls -d ~/Code/* | while read project
@@ -601,60 +485,29 @@
' '
function_code_reseed: | function_code_reseed: |
function git_projects_to_sync { function git_projects_to_sync {
# Projects should be followed by the current development branch name.
cat <<- EOF cat <<- EOF
env-ansible dev env-ansible
env-docker dev env-docker
env-termux dev env-termux
env-obtainium-hyperling dev nodejs-website
nodejs-website dev android-break-the-habit
ebook-health-protocol dev android-tictactoe
ebook-freedom-flyer dev android-expense-tracker
ebook-technology-alternatives dev android-example-database-room
ebook-narcissism-healing dev android-carb-up
ebook-forest-howto dev ebook-health-protocol
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 EOF
} }
function code-reseed { function code-reseed {
# Unseed current projects. unseed_dir="$HOME/TRASH/`date +%Y-%m-%d`_UnseededCodeProjects"
echo -e "\n*** Move old projects to TRASH ***"
unseed_dir="$HOME/TRASH/`date +%Y%m%d_%H%M%S`_UnseededCodeProjects"
mkdir -pv "$unseed_dir" mkdir -pv "$unseed_dir"
mv -v ~/Code/* "$unseed_dir"/ 2>/dev/null mv -v ~/Code/* "$unseed_dir"/ 2>/dev/null
# Git repo information.
git_repo_ssh={{ git_repo_ssh }} git_repo_ssh={{ git_repo_ssh }}
git_main_project={{ git_project }} git_main_project={{ git_project }}
git_repo_ssh_basename=${git_repo_ssh//$git_main_project/} git_repo_ssh_basename=${git_repo_ssh//$git_main_project/}
git_projects_to_sync | while read git_project; do
# Loop over project list.
git_projects_to_sync | while read git_project git_branch; do
echo -e "\n*** $git_project ***"
# Project folder manipulation.
dest_folder="$git_project"
if [[ "$dest_folder" == "flutter-"* ]]; then
echo "Using '_' for Flutter Project"
dest_folder="${dest_folder//-/_}"
fi
# Download of the project.
git clone ${git_repo_ssh_basename}${git_project} \ git clone ${git_repo_ssh_basename}${git_project} \
--branch $git_branch ~/Code/$dest_folder --branch dev ~/Code/$git_project
done done
} }
function_clean_filenames: | function_clean_filenames: |
@@ -687,7 +540,7 @@
echo -e "\nDone!\n" echo -e "\nDone!\n"
} }
alias_clone: | alias_clone: |
alias clone="rsync -auPhz --delete --exclude '.gradle' --exclude 'app/build'" alias clone="rsync -auPhz --delete"
export_hyperling: | export_hyperling: |
export HYPERLING6="2a07:e03:3:80::1" export HYPERLING6="2a07:e03:3:80::1"
export HYPERLING4="185.130.47.173" export HYPERLING4="185.130.47.173"
@@ -699,389 +552,10 @@
fi fi
alias_scan: | alias_scan: |
alias scan="nmap -A -p- --script=vuln" alias scan="nmap -A -p- --script=vuln"
alias_prod: |
alias prod="ssh -p {{ prod_port }} {{ prod_user }}@{{ prod_host }}"
function_clean_code: |
function clean-code {
echo -e "******* Android *******\n*** Build Caches ***"
find ~/Code/android-*/app -maxdepth 1 -type d -name "build" \
-exec du -hs {} \; -exec rm -rf {} \;
echo -e "\n*** Gradle Caches ***"
find ~/Code/android-*/ -maxdepth 1 -type d -name ".gradle" \
-exec du -hs {} \; -exec rm -rf {} \;
echo -e "******* Flutter *******"
ls ~/Code | grep flutter | while read project; do
cd ~/Code/$project
pwd
flutter clean
echo -e "\n"
done
cd
echo -e "******* PDFs *******"
find ~/Code/ebook-* -name "*.pdf" -exec du -h {} \; -delete | sort -h
echo -e "\n*** Done! ***"
}
alias code-clean="clean-code"
alias_kill_battery: |
alias kill-battery="stress -c 1k"
alias waste-battery="kill-battery"
alias battery-killer="kill-battery"
alias battery-waster="kill-battery"
alias_kill_system: |
alias kill-system="stress -c 1k -i 1k -m 1k -d 1k"
alias die="kill-system"
alias lockup="kill-system"
alias freeze="kill-system"
alias system-killer="kill-system"
function_update_sdks: |
if [[ "$workstation" == "true" && "$coding" == "true" ]]; then
function update-sdks {
echo -e "******* Update SDKs *******\n*** Android - START ***"
yes | sdkmanager --update
yes | sdkmanager --licenses
echo -ne "*** Android - END ***"
echo -e "\n*** Flutter - START ***"
flutter upgrade
yes | flutter doctor --android-licenses
echo -ne "*** Flutter - END ***"
echo -e "\n******* Done! *******"
}
alias update-sdk="update-sdks"
alias sdk-update="update-sdks"
alias sdk-updater="update-sdks"
fi
function_ansible_vars: |
function ansible-var-list {
cat << EOF
provision
battery
workstation
coding
editing
gaming
mobile
server
domain
EOF
}
function ansible-vars {
ansible-var-list | while read var; do
echo "$var = ${!var}"
done
}
alias_permission_commands: |
alias chown='chown -c'
alias chmod='chmod -c'
alias_iftop: |
alias iftop='sudo iftop'
alias_ls: |
alias l='ls'
alias ll='ls -alh'
alias lh='ls -ash'
alias_progs: |
alias progs='ps -ef'
alias_nethogs: |
alias nethogs='sudo nethogs'
alias_ansible_facts: |
alias ansible-facts='ansible localhost -m setup --connection=local'
function_now: |
function now {
date "+%Y%m%d-%H%M%S"
}
function today {
date "+%Y%m%d"
}
function_backup: |
export BACKUP_DIR="/srv/backup"
function backup {
/usr/local/bin/backup_system.sh
}
alias backup-system="backup"
alias system-backup="backup"
alias check-backups="ll $BACKUP_DIR"
function clean-backup {
sh -c "rm -rfv $BACKUP_DIR/*"
}
alias clean-backups="clean-backup"
function_pull_prod_backups: |
export DOCKER="Docker"
export SYSTEM="System"
function pull_prod_backup {
if [[ -z "$1" || ("$1" != "$DOCKER" && "$1" != "$SYSTEM") ]]; then
echo "ERROR: Parameter 1 not correct, expecting '$DOCKER' or '$SYSTEM'."
return 1
fi
backup_type="$1"
echo "Looking for '*${backup_type}*.zip'"
ls -lh *${backup_type}*.zip 2>/dev/null
status="$?"
if [[ "$status" == "0" ]]; then
echo "File already downloaded, skipping."
return 0
else
echo "File still needed, downloading to local tmp/."
fi
mkdir -pv tmp
scp -P {{ prod_port }} \
{{ prod_user }}@{{ prod_host }}:"$BACKUP_DIR/*${backup_type}*.zip" \
tmp/
if [[ "$?" == "0" ]]; then
echo "Succeeded!"
mv -v tmp/*.zip ./
rmdir -v tmp
else
echo "Failed!"
mv tmp ~/TRASH/"tmp_`now`"
fi
}
function pull_prod_backups {
dir="ProductionBackups-Pulled`today`"
mkdir -pv "$dir"
cd "$dir"
pull_prod_backup "$DOCKER"
pull_prod_backup "$SYSTEM"
du -h *.zip | sort -h
status="$?"
cd ..
if [[ "$status" != 0 ]]; then
echo "Failed to find zip files, removing folder."
rmdir -v "$dir"
return 1
fi
echo "Done!"
}
alias pull-prod-backups="pull_prod_backups"
alias pull-backups="pull_prod_backups"
alias prod-backups="pull_prod_backups"
alias prod-backup="pull_prod_backups"
alias pull-prod="pull_prod_backups"
alias prod-pull="pull_prod_backups"
function_log: |
function log {
echo -e "$1"
}
function blog {
echo -e "\n\n$1\n\n"
}
function_debian_upgrade: |
function debian-upgrade {
typeset -l OLD NEW
OLD="$1"
NEW="$2"
blog "*** Upgrading from '$OLD' to '$NEW' ***"
if [[ -z "$OLD" || -z "$NEW" ]]; then
echo -n "ERROR: Please pass the OLD and NEW version names"
echo ", such as 'debian-upgrade bookworm trixie'. "
return 1
fi
blog "*** Running 'backup' before starting upgrade. ***"
sleep 1
backup
blog "*** Listing the current apt listing for '$OLD' ***"
sudo grep "$OLD" /etc/apt/sources.list /etc/apt/sources.list.d/*
echo -en "\nAre these the entries you'd like changed to '$NEW'? (y/N) "
typeset -u confirm_change
read confirm_change
if [[ -z "$confirm_change" || "$confirm_change" == "N"* ]]; then
blog "*** Aborting upgrade, change rejected. ***"
return 1
fi
unset confirm_change
blog "*** Continuing with upgrade. ***"
sudo sed -i "s/$OLD/$NEW/g" /etc/apt/sources.list
find /etc/apt/sources.list.d/ -name "*.list" \
-exec sudo sed -i "s/$OLD/$NEW/g" {} \;
find /etc/apt/sources.list.d/ -name "*.sources" \
-exec sudo sed -i "s/$OLD/$NEW/g" {} \;
sudo grep $OLD /etc/apt/sources.list /etc/apt/sources.list.d/*.{list,sources}
sudo grep $NEW /etc/apt/sources.list /etc/apt/sources.list.d/*.{list,sources}
echo -en "\nDo the source files look correct? (y/N) "
typeset -u confirm_correct
read confirm_correct
if [[ -z "$confirm_correct" || "$confirm_correct" == "N"* ]]; then
blog "*** Aborting upgrade, confirmation rejected. ***"
return 1
fi
unset confirm_correct
blog "*** Starting the upgrade. ***"
sleep 1
sudo apt update
sudo apt upgrade --without-new-pkgs
blog -e "*** Upgrades complete, now add new packages. ***"
sleep 1
sudo apt full-upgrade
blog "*** New packages complete, clean apt files. ***"
sleep 1
sudo apt autoremove --purge
sudo apt clean
blog "*** All done! '$OLD' is now '$NEW'. Please reboot. ***"
sleep 1
unset OLD NEW
}
alias upgrade-debian="debian-upgrade"
function_ebook_convert: |
# Regenerate all eBook projects at once.
function ebook-convert {
find ~/Code/ebook-* -name "*.pdf" -print -delete
find ~/Code/ebook-* -name convert.sh -print -exec bash "{}" \;
}
alias ebooks="ebook-convert"
alias convert="ebook-convert"
alias_sudo: |
# Allows for alias expansions when using sudo, such as doing "sudo ll".
alias sudo="sudo "
function_load_branch: |
# Change a branch to point at another.
function load-branch {
rcvr="$1" # branch which we want to modify
base="$2" # branch with the changes we want
if [[ "$rcvr" == "main" ]]; then
echo "*** ERROR: Are you nuts, fool!? Not main! Do it manually! ***"
return 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."
return 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"
function check-code-branches {
for dir in ~/Code/*/; do
cd $dir
pwd
git ls-remote --heads
echo " "
cd ..
done
}
alias check-branches="check-code-branches"
alias check-branch="git ls-remote --heads"
alias branch-check="check-branch"
alias_reload_bash: |
alias reload-bash="source ~/.bashrc"
alias bash-reload="reload-bash"
alias shell-reload="reload-bash"
alias reload-shell="reload-bash"
alias reload="reload-bash"
alias_hugo_server: |
alias hugo-server-dev="hugo server -D --gc" # --ignoreCache --noHTTPCache --disableFastRender"
alias hugo-server-stage="hugo server --gc" # --noHTTPCache --disableFastRender"
alias hugo-server-prod="hugo server --gc --minify"
alias hugo-server="hugo-server-dev"
global_functions: |
for global_function in "{{ global_bin }}/"*".function"; do
if [[ -f "$global_function" ]]; then
. "$global_function"
fi
done
alias_flatpak_clean: |
alias flatpak-clean="flatpak uninstall --unused"
alias_commit: |
function commit_usage {
echo 'Usage: commit "This is a commit message"'
}
function commit {
if [[ -z "$1" ]]; then
echo "ERROR: Message must be provided."
commit_usage
return 1
fi
if [[ "$1" == "-h"* || "$1" == "--h"* ]]; then
commit_usage
fi
message="$1"
git add . &&
git commit -m "$message" &&
git push
status="$?"
return "$status"
}
- name: General | Account Management | Users | Files | Common Variable - name: General | Account Management | Users | Files | Common Variable
set_fact: set_fact:
rc_common: | rc_common: |
# Fixes "command not found" when using aliases within functions.
shopt -s expand_aliases
# Variables for conditionals and quickly checking system setup.
typeset -l provision battery workstation coding editing gaming mobile server domain
export provision="{{ provision }}"
export battery="{{ battery }}"
export workstation="{{ workstation }}"
export coding="{{ coding }}"
export editing="{{ editing }}"
export gaming="{{ gaming }}"
export mobile="{{ mobile }}"
export server="{{ server }}"
export domain="{{ domain }}"
{{ export_path_additions }} {{ export_path_additions }}
{{ alias_cp }} {{ alias_cp }}
{{ alias_mv }} {{ alias_mv }}
@@ -1100,17 +574,16 @@
{{ metasploit_aliases }} {{ metasploit_aliases }}
{{ show_config_aliases }} {{ show_config_aliases }}
{{ edit_config_aliases }} {{ edit_config_aliases }}
{{ function_clean_trashed }}
{{ function_check_trash }} {{ function_check_trash }}
{{ function_clean }} {{ function_clean }}
{{ function_flatpak_usage }} {{ function_flatpak_usage }}
{{ function_flatpak_purge }} {{ function_flatpak_purge }}
{{ alias_vim }} {{ alias_vim }}
{{ alias_here }} {{ alias_here }}
{{ function_docker_reload }} {{ alias_docker_reload }}
{{ function_docker_update }} {{ alias_docker_update }}
{{ function_docker_upgrade }} {{ function_docker_upgrade }}
{{ function_docker_restart }} {{ alias_docker_restart }}
{{ alias_code_check }} {{ alias_code_check }}
{{ alias_code_reset }} {{ alias_code_reset }}
{{ function_code_reseed }} {{ function_code_reseed }}
@@ -1120,32 +593,6 @@
{{ export_hyperling }} {{ export_hyperling }}
{{ source_docker_env }} {{ source_docker_env }}
{{ alias_scan }} {{ alias_scan }}
{{ alias_prod }}
{{ function_clean_code }}
{{ alias_kill_battery }}
{{ alias_kill_system }}
{{ function_update_sdks }}
{{ function_ansible_vars }}
{{ alias_permission_commands }}
{{ alias_iftop }}
{{ alias_ls }}
{{ alias_progs }}
{{ alias_nethogs }}
{{ alias_ansible_facts }}
{{ function_now }}
{{ function_backup }}
{{ function_pull_prod_backups }}
{{ function_log }}
{{ function_debian_upgrade }}
{{ function_ebook_convert }}
{{ alias_sudo }}
{{ function_load_branch }}
{{ alias_reload_bash }}
{{ alias_hugo_server }}
{{ global_functions }}
{{ alias_docker_other }}
{{ alias_flatpak_clean }}
{{ alias_commit }}
- name: General | Account Management | Users | Files | .bashrc - name: General | Account Management | Users | Files | .bashrc
blockinfile: blockinfile:
@@ -1215,17 +662,3 @@
- .bashrc - .bashrc
- .zshrc - .zshrc
- .vimrc - .vimrc
- name: General | Account Management | Users | Files | Helper Functions (Reset)
shell: "rm -v {{ global_bin }}/*.function"
- name: General | Account Management | Users | Files | Helper Functions
copy:
src: "{{ item }}"
dest: "{{ global_bin }}"
owner: root
group: "{{ root_group }}"
mode: 0755
with_fileglob:
- "functions/*.function"

View File

@@ -1,18 +1,12 @@
--- ---
# Jobs relating to the ansible user. # 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 - name: General | Cron | Ansible | Create Subscriber Job
cron: cron:
user: ansible user: ansible
name: "Ansible Sync" name: "Ansible Sync"
minute: "*/30" minute: "*/30"
job: "bash -c 'sleep $(( $RANDOM / 20 )); sudo {{ ansible_pull_exec.stdout }} -v -o -U {{ git_repo_http }} --checkout {{ branch }}'" job: "sudo {{ ansible_pull_exec.stdout }} -o -U {{ git_repo_http }} --checkout {{ branch }}"
state: present state: present
disabled: "{{ 'yes' if no_telem else 'no' }}" disabled: "{{ 'yes' if no_telem else 'no' }}"
@@ -20,7 +14,7 @@
cron: cron:
user: ansible user: ansible
name: "Ansible Weekly Forced Sync" name: "Ansible Weekly Forced Sync"
special_time: daily special_time: weekly
job: "bash -c 'sleep $(( $RANDOM / 1 )); sudo {{ ansible_pull_exec.stdout }} -v -U {{ git_repo_http }} --checkout {{ branch }}'" job: "{{ user_root.home }}/bin/scm.sh"
state: present state: present
disabled: "{{ 'yes' if no_telem else 'no' }}" disabled: "{{ 'yes' if no_telem else 'no' }}"

View File

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

View File

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

View File

@@ -1,6 +0,0 @@
---
# 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,22 +6,13 @@
metasploit_installer: msfinstall metasploit_installer: msfinstall
when: ansible_system in ("Linux", "Darwin") 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 - name: General | Software | Metasploit | Install
shell: "{{ item }}" shell: "{{ item }}"
loop: 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 }}" - "curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > {{ metasploit_installer }}"
- "chmod 755 {{ metasploit_installer }}" - "chmod 755 {{ metasploit_installer }}"
- "mkdir -p {{ global_bin }}" - "mkdir -p {{ global_bin }}"
- "mv -fv ./msfinstall {{ global_bin }}/{{ metasploit_installer }}" - "mv -fv ./msfinstall {{ global_bin }}/{{ metasploit_installer }}"
- yes y | "{{ global_bin }}/{{ metasploit_installer }}" - "{{ global_bin }}/{{ metasploit_installer }}"
when: ansible_system in ("Linux", "Darwin") when: ansible_system in ("Linux", "Darwin")

View File

@@ -43,7 +43,7 @@
- bash - bash
- sudo - sudo
- nmap - nmap
- "{{ neofetch }}" - neofetch
- "{{ sshfs }}" - "{{ sshfs }}"
- "{{ locate }}" - "{{ locate }}"
- zsh - zsh
@@ -56,10 +56,6 @@
- "{{ cron }}" - "{{ cron }}"
- "{{ encfs }}" - "{{ encfs }}"
- rsync - rsync
- "{{ iftop }}"
- "{{ nethogs }}"
- "{{ ntp_server }}"
- "{{ dig }}"
state: present state: present
- name: General | Software | Packages | Install Software (DEV) - name: General | Software | Packages | Install Software (DEV)
@@ -82,15 +78,6 @@
when: ansible_distribution == "Ubuntu" when: ansible_distribution == "Ubuntu"
ignore_errors: yes ignore_errors: yes
- name: General | Software | Packages | Add Generic Kernel + Headers (Debian)
package:
name:
- linux-image-amd64
- linux-headers-amd64
state: present
when: ansible_distribution == "Debian"
ignore_errors: yes
- name: General | Software | Services | Install killall (Looking at you, Debian) - name: General | Software | Services | Install killall (Looking at you, Debian)
package: package:
name: psmisc name: psmisc
@@ -150,11 +137,3 @@
state: absent state: absent
when: ansible_distribution != "Ubuntu" when: ansible_distribution != "Ubuntu"
ignore_errors: yes 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,11 +9,6 @@
pattern: "{{ crond_pattern }}" pattern: "{{ crond_pattern }}"
state: started state: started
enabled: yes enabled: yes
when: ansible_virtualization_type != 'docker'
register: cron_status
until: cron_status.state == "started"
retries: 3
delay: 3
## CUPS ## ## CUPS ##
@@ -81,11 +76,6 @@
pattern: "{{ sshd_pattern }}" pattern: "{{ sshd_pattern }}"
state: reloaded state: reloaded
enabled: yes enabled: yes
when: ansible_virtualization_type != 'docker'
register: sshd_status
until: sshd_status.state == "started"
retries: 3
delay: 3
## JournalCTL ## ## JournalCTL ##
@@ -106,24 +96,3 @@
state: stopped state: stopped
enabled: no enabled: no
ignore_errors: yes 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,9 +9,6 @@
- name: General | Software | Swap | Check For Swapfile - name: General | Software | Swap | Check For Swapfile
stat: stat:
path: "{{ swap_file }}" path: "{{ swap_file }}"
get_attributes: false
get_checksum: false
get_mime: false
register: swap_check register: swap_check
- name: General | Software | Swap | Install Block - name: General | Software | Swap | Install Block

View File

@@ -9,17 +9,20 @@
set_fact: set_fact:
lynis_temp_file: "{{ lynis_file }}.tmp" lynis_temp_file: "{{ lynis_file }}.tmp"
- name: General | Tests | Lynis | Rename Old Install
shell: mv "/usr/local/lynis" "/usr/local/src/"
ignore_errors: yes
- name: General | Tests | Lynis | Install - name: General | Tests | Lynis | Install
git: git:
repo: https://github.com/CISOfy/lynis repo: https://github.com/CISOfy/lynis
dest: "{{ lynis_install_dir }}" dest: "{{ lynis_install_dir }}"
clone: true clone: yes
force: true force: yes
update: true
ignore_errors: yes ignore_errors: yes
- name: General | Tests | Lynis | Ensure Permissions (Looking at you Parrot OS!) - name: General | Tests | Lynis | Ensure Permissions (Looking at you Parrot OS!)
file: file:
path: "{{ lynis_install_dir }}" path: "{{ lynis_install_dir }}"
state: directory state: directory
mode: '0644' mode: '0644'
@@ -28,12 +31,12 @@
recurse: yes recurse: yes
- name: General | Tests | Lynis | Ensure Permissions 2 - name: General | Tests | Lynis | Ensure Permissions 2
file: file:
path: "{{ lynis_install_dir }}/lynis" path: "{{ lynis_install_dir }}/lynis"
mode: '0755' mode: '0755'
- name: General | Tests | Lynis | Ensure Folder Permissions - name: General | Tests | Lynis | Ensure Folder Permissions
file: file:
path: "{{ lynis_install_dir }}" path: "{{ lynis_install_dir }}"
state: directory state: directory
mode: '0755' mode: '0755'

View File

@@ -8,9 +8,9 @@
amdgpu_cron_cmd: "{{ root_home.stdout }}/scm.sh" amdgpu_cron_cmd: "{{ root_home.stdout }}/scm.sh"
- name: Miner | Driver | AMDGPU | Install Dependencies - name: Miner | Driver | AMDGPU | Install Dependencies
package: package:
name: name:
- dkms - dkms
- mesa-common-dev - mesa-common-dev
- clinfo - clinfo
state: present state: present
@@ -62,16 +62,16 @@
## Step 1/3: Get Correct Kernel ## ## Step 1/3: Get Correct Kernel ##
- name: Miner | Driver | AMDGPU | Install Recommended GA 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 when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed
- name: Miner | Driver | AMDGPU | Install Specific GA Kernel For Booting - name: Miner | Driver | AMDGPU | Install Specific GA Kernel For Booting
package: package:
name: name:
- linux-headers-5.4.0-65 - linux-headers-5.4.0-65
- linux-headers-5.4.0-65-generic - linux-headers-5.4.0-65-generic
- linux-headers-generic - linux-headers-generic
- linux-image-generic - linux-image-generic
- linux-modules-extra-5.4.0-65-generic - linux-modules-extra-5.4.0-65-generic
state: present state: present
when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed 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" when: amdgpu_install.failed and hwe_kernel.stdout != "0"
- name: Miner | Driver | AMDGPU | Update + Clean System - name: Miner | Driver | AMDGPU | Update + Clean System
shell: "apt update; apt dist-upgrade -y; apt autoremove --purge -y" shell: "apt update; apt dist-upgrade -y; apt autoremove -y"
when: amdgpu_install.failed and hwe_kernel.stdout != "0" 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 - name: Miner | Driver | AMDGPU | Boot Default Kernel
lineinfile: lineinfile:
path: /etc/default/grub path: /etc/default/grub

View File

@@ -4,7 +4,7 @@
# General # # General #
- name: Workstation | FreeBSD | Software | Packages | General | Install - name: Workstation | FreeBSD | Software | Packages | General | Install
package: package:
name: name:
- "{{ firefox_esr }}" - "{{ firefox_esr }}"
- "{{ evolution }}" - "{{ evolution }}"
@@ -13,7 +13,7 @@
state: present state: present
- name: Workstation | FreeBSD | Software | Packages | General | Uninstall Bloat - name: Workstation | FreeBSD | Software | Packages | General | Uninstall Bloat
package: package:
name: name:
- "{{ firefox }}" - "{{ firefox }}"
- "{{ thunderbird }}" - "{{ thunderbird }}"
@@ -22,14 +22,14 @@
# Coding # # Coding #
- name: Workstation | FreeBSD | Software | Packages | Coding | Install - name: Workstation | FreeBSD | Software | Packages | Coding | Install
package: package:
name: name:
- vscode - vscode
state: present state: present
when: coding == true when: coding == true
- name: Workstation | FreeBSD | Software | Packages | Coding | Install - name: Workstation | FreeBSD | Software | Packages | Coding | Install
package: package:
name: name:
- vscode - vscode
state: absent state: absent
@@ -38,27 +38,27 @@
# Media Editors # # Media Editors #
- name: Workstation | FreeBSD | Software | Packages | Editing | Install - name: Workstation | FreeBSD | Software | Packages | Editing | Install
package: package:
name: name:
- gimp - gimp
- shotcut - shotcut
- obs-studio - obs-studio
state: present state: present
when: editing in (true, "video") when: editing == true
- name: Workstation | FreeBSD | Software | Packages | Editing | Install - name: Workstation | FreeBSD | Software | Packages | Editing | Install
package: package:
name: name:
- gimp - gimp
- shotcut - shotcut
- obs-studio - obs-studio
state: absent state: absent
when: not editing in (true, "video") when: not editing == true
# Gaming # # Gaming #
- name: Workstation | FreeBSD | Software | Packages | Gaming | Install - name: Workstation | FreeBSD | Software | Packages | Gaming | Install
package: package:
name: name:
- 0ad - 0ad
- supertuxkart - supertuxkart
@@ -66,7 +66,7 @@
when: gaming == true when: gaming == true
- name: Workstation | FreeBSD | Software | Packages | Gaming | Install - name: Workstation | FreeBSD | Software | Packages | Gaming | Install
package: package:
name: name:
- 0ad - 0ad
- supertuxkart - supertuxkart

View File

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

View File

@@ -24,6 +24,7 @@
method: system method: system
flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo
## Flatpak Installs ## ## Flatpak Installs ##
- name: Workstation | Linux | Flatpak Distro | Flatpak | Variables - name: Workstation | Linux | Flatpak Distro | Flatpak | Variables
@@ -34,26 +35,22 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Arrays - name: Workstation | Linux | Flatpak Distro | Flatpak | Arrays
set_fact: set_fact:
flatpaks_generic: flatpaks_generic:
- { app: "org.mozilla.firefox", name: "firefox-flatpak", extra: "" } - { app: "org.libreoffice.LibreOffice", name: "office", extra: "" }
- { app: "io.gitlab.librewolf-community", name: "librewolf", extra: "" } - { app: "io.gitlab.librewolf-community", name: "librewolf", extra: "" }
- { app: "org.signal.Signal", name: "signal", extra: "" } - { app: "org.signal.Signal", name: "signal", extra: "" }
- { app: "im.riot.Riot", name: "element", extra: "" } - { app: "org.mozilla.firefox", name: "firefox-flatpak", extra: "" }
- { app: "org.telegram.desktop", name: "telegram", extra: "" }
- { app: "org.gimp.GIMP", name: "gimp", extra: "" }
- { app: "org.libreoffice.LibreOffice", name: "office", extra: "" }
- { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" } - { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" }
- { app: "app.grayjay.Grayjay", name: "grayjay", extra: "" }
- { app: "com.github.xournalpp.xournalpp", name: "xournal", extra: "" }
flatpaks_coding: flatpaks_coding:
- { app: "com.vscodium.codium", name: "codium-flatpak", extra: "" } - { app: "com.vscodium.codium", name: "codium", extra: "" }
- { app: "com.google.AndroidStudio", name: "android-studio", extra: "" } - { app: "com.google.AndroidStudio", name: "android-studio", extra: "" }
- { app: "io.dbeaver.DBeaverCommunity", name: "dbeaver", extra: "" } - { app: "io.dbeaver.DBeaverCommunity", name: "dbeaver", extra: "" }
- { app: "com.visualstudio.code-oss", name: "code-flatpak", extra: "" } - { app: "org.godotengine.Godot", name: "godot", extra: "" }
flatpaks_editing_video: - { app: "com.visualstudio.code-oss", name: "code", extra: "" }
flatpaks_editing:
- { app: "org.shotcut.Shotcut", name: "shotcut", extra: "" } - { app: "org.shotcut.Shotcut", name: "shotcut", extra: "" }
- { app: "com.obsproject.Studio", name: "obs", extra: "" } - { app: "com.obsproject.Studio", name: "obs", extra: "" }
- { app: "org.gimp.GIMP", name: "gimp", extra: "" }
- { app: "org.openshot.OpenShot", name: "openshot", extra: "" } - { app: "org.openshot.OpenShot", name: "openshot", extra: "" }
flatpaks_editing_audio:
- { app: "org.tenacityaudio.Tenacity", name: "tenacity", extra: "" } - { app: "org.tenacityaudio.Tenacity", name: "tenacity", extra: "" }
- { app: "io.lmms.LMMS", name: "lmms", extra: "" } - { app: "io.lmms.LMMS", name: "lmms", extra: "" }
- { app: "net.sourceforge.VMPK", name: "vmpk", extra: "" } - { app: "net.sourceforge.VMPK", name: "vmpk", extra: "" }
@@ -70,14 +67,14 @@
- { app: "org.audacityteam.Audacity", name: "audacity", extra: "" } # Say "no thanks" to spyware. - { 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. - { 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. # # 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: "" } - { app: "com.jetbrains.PyCharm-Community", name: "pycharm", extra: "" }
# End 2022-11-20 # # End 2022-11-20 #
- { app: "io.lbry.lbry-app", name: "lbry", extra: "dbus-launch" } # 2023-09-01, Noticed it is no longer supported. - { app: "io.lbry.lbry-app", name: "lbry", extra: "dbus-launch" } # No longer supported, noticed 2023-09-01.
- { app: "chat.delta.desktop", name: "deltachat", extra: "" } # 2023-12-18, No longer used. - { app: "chat.delta.desktop", name: "deltachat", extra: "" } # No longer used, removed 2023-12-18.
- { app: "org.gnome.Geary", name: "geary", extra: "" } # 2024-12-15, No longer used. - { 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.rncbc.qsynth", name: "qsynth", extra: "" } # 2024-12-15, Not worth the setup, use LMMS or VMPK.
- { app: "org.godotengine.Godot", name: "godot", extra: "" } # 2025-08-31, Stopped playing with this months / years ago. Seemed cool but Flutter is working well for this purpose.
- { app: "chat.simplex.simplex", name: "simplex", extra: "" } # 2025-11-22, Takes a ton of space and does not work without interacting with phone.
# Generic # # Generic #
@@ -161,62 +158,14 @@
# Media Editors # # Media Editors #
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Installs - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Installs
flatpak: flatpak:
name: "{{ item.app }}" name: "{{ item.app }}"
remote: flathub remote: flathub
state: present state: present
loop: "{{ flatpaks_editing_video }}" loop: "{{ flatpaks_editing }}"
ignore_errors: yes ignore_errors: yes
when: editing in (true, "video") when: editing == true
- 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 - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executables
blockinfile: blockinfile:
@@ -228,34 +177,34 @@
marker_end: "exit 0" marker_end: "exit 0"
state: present state: present
create: yes create: yes
loop: "{{ flatpaks_editing_audio }}" loop: "{{ flatpaks_editing }}"
become_user: "{{ user }}" become_user: "{{ user }}"
when: editing in (true, "audio") when: editing == true
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executable Permissions - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executable Permissions
file: file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}" path: "{{ flatpak_exec_dir }}/{{ item.name }}"
state: file state: file
mode: '0755' mode: '0755'
loop: "{{ flatpaks_editing_audio }}" loop: "{{ flatpaks_editing }}"
when: editing in (true, "audio") when: editing == true
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editor Uninstalls - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editor Uninstalls
flatpak: flatpak:
name: "{{ item.app }}" name: "{{ item.app }}"
remote: flathub remote: flathub
state: absent state: absent
loop: "{{ flatpaks_editing_audio }}" loop: "{{ flatpaks_editing }}"
ignore_errors: yes ignore_errors: yes
when: not editing in (true, "audio") when: not editing == true
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Remove Executables - name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Remove Executables
file: file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}" path: "{{ flatpak_exec_dir }}/{{ item.name }}"
state: absent state: absent
loop: "{{ flatpaks_editing_audio }}" loop: "{{ flatpaks_editing }}"
ignore_errors: yes ignore_errors: yes
when: not editing in (true, "audio") when: not editing == true
# Gaming # # Gaming #

View File

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

View File

@@ -1,79 +0,0 @@
---
# 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

@@ -24,7 +24,7 @@
name: name:
- "{{ ffmpeg }}" - "{{ ffmpeg }}"
state: present state: present
when: editing in (true, "video", "audio") when: editing == true
## Other Stuff ## Other Stuff
@@ -38,16 +38,40 @@
- "{{ appimagelauncher }}" - "{{ appimagelauncher }}"
- "{{ evolution }}" - "{{ evolution }}"
- "{{ evolution }}*" - "{{ evolution }}*"
- gparted
- hugo
state: present state: present
- name: Workstation | Linux | Software | Packages | GS Connect (KDE Connect, Android Tool) # 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: package:
name: name:
- gnome-shell-extension-gsconnect - lutris
state: present state: present
when: ansible_distribution in ("Debian") 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 ignore_errors: yes
# Remove Repo Software # # Remove Repo Software #

View File

@@ -1,70 +0,0 @@
---
# 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

@@ -1,5 +1,5 @@
--- ---
# Download packages from Homebrew. # Download packages from Homebrew.
# Should this just be done in a Generic view? Is this really mac-specific, or just the facts? # Should this just be done in a Generic view? Is this really mac-specific, or just the facts?
# FreeBSD has its own. May be good to keep it separate so it's more to-the-point. # FreeBSD has its own. May be good to keep it separate so it's more to-the-point.
@@ -22,19 +22,13 @@
status: present status: present
when: coding == true when: coding == true
- name: Workstation | Mac OS | Software | Brew | Install Packages (Editing:Video) - name: Workstation | Mac OS | Software | Brew | Install Packages (Editing)
package:
name:
- shotcut
status: present
when: editing in (true, "video")
- name: Workstation | Mac OS | Software | Brew | Install Packages (Editing:Audio)
package: package:
name: name:
- audacity - audacity
- shotcut
status: present status: present
when: editing in (true, "audio") when: editing == true
- name: Workstation | Mac OS | Software | Brew | Install Packages (Gaming) - name: Workstation | Mac OS | Software | Brew | Install Packages (Gaming)
package: package:

View File

@@ -12,18 +12,16 @@
, 'org.gnome.Nautilus.desktop' , 'org.gnome.Nautilus.desktop'
, 'io.gitlab.librewolf-community.desktop', 'librewolf.desktop' , 'io.gitlab.librewolf-community.desktop', 'librewolf.desktop'
, 'org.mozilla.firefox.desktop', 'firefox.desktop' , 'org.mozilla.firefox.desktop', 'firefox.desktop'
, 'com.vscodium.codium.desktop'
, 'codium.desktop'
, 'org.shotcut.Shotcut.desktop'
, 'io.lmms.LMMS.desktop'
, 'app.grayjay.Grayjay.desktop'
, 'io.lbry.lbry-app.desktop', 'lbry.desktop'
, 'com.valvesoftware.Steam.desktop'
, 'net.lutris.Lutris.desktop'
, 'mullvad-vpn.desktop'
, 'org.signal.Signal.desktop', 'signal-desktop.desktop' , 'org.signal.Signal.desktop', 'signal-desktop.desktop'
, 'im.riot.Riot.desktop'
, 'org.telegram.desktop.desktop' , 'org.telegram.desktop.desktop'
, 'com.discordapp.Discord.desktop' , 'com.discordapp.Discord.desktop'
, 'com.vscodium.codium.desktop'
, 'com.google.AndroidStudio.desktop'
, 'org.shotcut.Shotcut.desktop'
, 'io.lmms.LMMS.desktop'
, 'io.lbry.lbry-app.desktop', 'lbry.desktop'
, 'com.valvesoftware.Steam.desktop'
]" ]"
dconf_terminal: gnome-terminal dconf_terminal: gnome-terminal
dconf_theme: Adwaita-dark dconf_theme: Adwaita-dark
@@ -35,14 +33,8 @@
#, 'org.mozilla.Thunderbird.desktop' #, 'org.mozilla.Thunderbird.desktop'
# 2025-01-01 # 2025-01-01
# Reduce the amount of icons on the sidebar, things that may get added back. # Reduce the amount of icons on the sidebar, things that may get added back.
#, 'org.godotengine.Godot.desktop'
# 2025-03-07 Removed in place of a 2nd VS Codium install (apt version).
#, 'com.visualstudio.code-oss.desktop', 'code-oss.desktop' #, 'com.visualstudio.code-oss.desktop', 'code-oss.desktop'
# 2025-03-21 Not really using Android Studio now that Flutter is working. #, 'org.godotengine.Godot.desktop'
#, '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) - name: Workstation | Account Management | GNOME | Facts (NixOS)
set_fact: set_fact:
@@ -221,12 +213,7 @@
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-sound-alerts false && inc_dconf &&
dconf write /org/gnome/desktop/notifications/application/org-gnome-evolution/enable false && inc_dconf && dconf write /org/gnome/desktop/notifications/application/org-gnome-evolution/enable false && inc_dconf &&
# Red Mode (Night Light) dconf write /org/gnome/settings-daemon/plugins/color/night-light-enabled true
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-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-temperature "uint32 3170"
dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-from 2.0 dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-from 2.0
@@ -274,13 +261,6 @@
dconf write /org/gnome/desktop/media-handling/autorun-never true && inc_dconf && dconf write /org/gnome/desktop/media-handling/autorun-never true && inc_dconf &&
## Gnome Terminal ##
# TBD: Do not start new tabs in previous tab's directory.
# The profile ID is likely unique and will need to be retrieved first.
#/org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/preserve-working-directory
#'never'
## Success ## ## Success ##
sleep 0 || sleep 0 ||

View File

@@ -3,7 +3,7 @@
# https://dwm.suckless.org/ # https://dwm.suckless.org/
# https://sites.google.com/site/lazyboxx/-articles/dwm-a-newbie-s-guide#TOC-Status-Bar # https://sites.google.com/site/lazyboxx/-articles/dwm-a-newbie-s-guide#TOC-Status-Bar
#TODO: Move this to tasks/shared/ path rather than tasks/linux/. #TODO: Move this to tasks/shared/ pasth rather than tasks/linux/.
#TODO: Generate files based on blockinfile. #TODO: Generate files based on blockinfile.
#TODO: Fix config.mk for FreeBSD automatically (use /usr/local/ for libs not /usr/X11RC/) #TODO: Fix config.mk for FreeBSD automatically (use /usr/local/ for libs not /usr/X11RC/)
#TODO: scm.sh to use bash variable so that FreeBSD correctly hits /usr/local/bin/bash. #TODO: scm.sh to use bash variable so that FreeBSD correctly hits /usr/local/bin/bash.
@@ -23,14 +23,14 @@
## Download ## ## Download ##
- name: Workstation | Linux | Software | DWM | Git Clone - name: Workstation | Linux | Software | DWM | Git Clone
git: git:
repo: https://git.suckless.org/dwm repo: https://git.suckless.org/dwm
dest: "{{ dwm_install_dir }}" dest: "{{ dwm_install_dir }}"
clone: yes clone: yes
force: yes force: yes
- name: Workstation | Linux | Software | DWM | Git Clone (st) - name: Workstation | Linux | Software | DWM | Git Clone (st)
git: git:
repo: https://git.suckless.org/st repo: https://git.suckless.org/st
dest: "{{ st_install_dir }}" dest: "{{ st_install_dir }}"
clone: yes clone: yes
@@ -78,16 +78,3 @@
owner: root owner: root
group: "{{ root_group }}" group: "{{ root_group }}"
mode: 0644 mode: 0644
## Status Bar ##
- name: Workstation | Linux | Software | DWM | Status Bar Function
copy:
src: "{{ item }}"
dest: "{{ global_bin }}"
owner: root
group: "{{ root_group }}"
mode: 0755
with_fileglob:
- "dwm/*.function"