diff --git a/facts/general/package.yml b/facts/general/package.yml index bcfd018..d65af26 100644 --- a/facts/general/package.yml +++ b/facts/general/package.yml @@ -6,6 +6,11 @@ set_fact: sshfs: sshfs tar: tar + iftop: iftop + nethogs: nethogs + ntp_server: chrony + dig: dig + neofetch: neofetch - name: General | Facts | Packages | Parrot OS Fixes set_fact: @@ -21,8 +26,14 @@ microcode_intel: intel-microcode cron: cron encfs: encfs + dig: dnsutils when: ansible_pkg_mgr == "apt" +- name: General | Facts | Package | apt | Debian Trixie + set_fact: + neofetch: fastfetch + when: ansible_pkg_mgr == "apt" and ansible_distribution_release == "trixie" + - name: General | Facts | Package | pacman set_fact: locate: mlocate @@ -98,7 +109,7 @@ echo -e "******* Apt *******\n*** Update Cache ***" && sudo apt update && echo -e "\n*** Auto Remove ***" && - sudo apt autoremove {{ update_accept_var }} && + sudo apt autoremove --purge {{ update_accept_var }} && echo -e "\n*** Clean ***" && sudo apt clean {{ update_accept_var }} && echo -e "Cleaned!\n\n*** Configure DPKG ***" && @@ -113,7 +124,7 @@ echo -e "******* Parrot *******\n*** Update Cache ***" && sudo apt update && echo -e "\n*** Auto Remove ***" && - sudo apt autoremove {{ update_accept_var }} && + sudo apt autoremove --purge {{ update_accept_var }} && parrot_mirrors_suck=true && while [[ $parrot_mirrors_suck ]]; do unset parrot_mirrors_suck diff --git a/facts/general/system.yml b/facts/general/system.yml index ee2aa18..37b0846 100644 --- a/facts/general/system.yml +++ b/facts/general/system.yml @@ -8,7 +8,7 @@ st_install_dir: /usr/local/src/st global_bin: /usr/local/bin x_desktops: /usr/share/xsessions - git_repo_http: http://{{ git_host }}/{{ git_user }}/{{ git_project }} + git_repo_http: https://{{ git_host }}/{{ git_user }}/{{ git_project }} git_repo_ssh: ssh://git@{{ git_host }}:{{ git_ssh_port }}/{{ git_user }}/{{ git_project }} diff --git a/files/scripts/compress_image.sh b/files/scripts/compress_image.sh index 66d897c..7b48afb 100755 --- a/files/scripts/compress_image.sh +++ b/files/scripts/compress_image.sh @@ -60,7 +60,8 @@ while getopts ":s:l:rfFdcAhx" opt; do F) super_force="Y" ;; d) delete="Y" ;; c) clean="Y" ;; - A) recurse="Y" && search="find" && force="Y" && delete="Y" && clean="Y" ;; + e) expand="Y" ;; + A) recurse="Y" && search="find" && force="Y" && delete="Y" && expand="Y" ;; h) usage 0 ;; x) set -x ;; *) echo "ERROR: Option $OPTARG not recognized." >&2 && usage 1 ;; @@ -74,7 +75,7 @@ if [[ -n "$in_size" && "$size" != "$in_size" ]]; then usage 1 fi -convert_exe="`which convert`" +convert_exe="`which convert` -strip" if [[ "$convert_exe" == "" ]]; then echo "ERROR: 'convert' command could not be found, " echo "please install 'imagemagick'." @@ -123,13 +124,31 @@ $search "$location" | sort | while read image; do new_image_clean="${new_image_clean//-/}" new_image_clean="${new_image_clean// /}" - # Add directory back to the full path. + ## Expanded Filename ## + # Add back in the dashes so that the year, month, date, and time are exposed. + TEMP="$new_image_clean" + # Date Data + new_image_exp="${TEMP:0:4}-${TEMP:4:2}-${TEMP:6:2}" + # Time Data + new_image_exp="${new_image_exp}_${TEMP:8:2}-${TEMP:10:2}-${TEMP:12:2}" + # Remainder Data + if [[ "${TEMP:14:1}" == "." ]]; then + SEP="" + else + SEP="_" + fi + new_image_exp="${new_image_exp}${SEP}${TEMP:14}" + unset TEMP SEP + + # Add directory back to the full paths. new_image_clean="$image_dirname/$new_image_clean" + new_image_exp="$image_dirname/$new_image_exp" # Delete the existing shrunk image if we are forcing a new compression. - if [[ -n "$force" && (-e "$new_image" || -e $new_image_clean) ]]; then + if [[ -n "$force" && + (-e "$new_image" || -e $new_image_clean || -e $new_image_exp ) ]]; then echo -n " FORCE: " - rm -v "$new_image" "$new_image_clean" 2>/dev/null + rm -v "$new_image" "$new_image_clean" "$new_image_exp" 2>/dev/null fi # Skip if a compressed image was already created today. @@ -138,10 +157,14 @@ $search "$location" | sort | while read image; do continue fi - # Whether or not to use the cleaned version or the normal version. + # Whether or not to use the cleaned version. if [[ -n $clean ]]; then new_image="$new_image_clean" + # Whether or not to use the expanded version. + elif [[ -n $expand ]]; then + new_image="$new_image_exp" fi + # Otherwise uses the same name as before. ###### TBD Instead of this, only alter the file names, and set a dirname var? #### Create a new directory if the directory names were altered. diff --git a/files/scripts/compress_video.sh b/files/scripts/compress_video.sh index 4d14a04..280b833 100755 --- a/files/scripts/compress_video.sh +++ b/files/scripts/compress_video.sh @@ -33,13 +33,13 @@ function usage { If nothing is provided, current directory (.) is assumed. -v bitrate : The video bitrate to convert to. Defaults are based on the size passed. - >= 2160: '30M' - >= 1440: '12M' - >= 1080: '5M' - >= 720: '2000k' - >= 480: '750k' - >= 360: '250k' - < 360: '100k' + >= 2160: '30M' + >= 1440: '12M' + >= 1080: '5M' + >= 720: '2000k' + >= 480: '750k' + >= 360: '250k' + < 360: '100k' -a bitrate : The audio bitrate to convert to. Defaults to '192k'. -c vcodec : The video codec you'd like to use, such as libopenh264. diff --git a/files/settings/vscode.json b/files/settings/vscode.json index 7b04606..efe8ff4 100644 --- a/files/settings/vscode.json +++ b/files/settings/vscode.json @@ -12,6 +12,9 @@ "editor.tabSize": 3, "editor.insertSpaces": false, "files.insertFinalNewline": true, + "[html]": { + "files.insertFinalNewline": false + }, "files.trimFinalNewlines": true, "git.confirmSync": false, diff --git a/tasks/general/acct_mgmt/provision_config.yml b/tasks/general/acct_mgmt/provision_config.yml index b1de527..52c5727 100644 --- a/tasks/general/acct_mgmt/provision_config.yml +++ b/tasks/general/acct_mgmt/provision_config.yml @@ -125,17 +125,17 @@ - name: General | Account Management | Provisioning Configuration | General | Load set_fact: - provision: "{{ lookup('ini', 'enable file={{gen_file}} default=false') }}" + provision: "{{ lookup('ini', 'enable file={{gen_file}} default=false') | bool }}" user: "{{ lookup('ini', 'user file={{gen_file}} default=ling') }}" user_desc: "{{ lookup('ini', 'user_desc file={{gen_file}} default=Hyperling') }}" branch: "{{ lookup('ini', 'branch file={{gen_file}} default=main') }}" - pentesting: "{{ lookup('ini', 'pentesting file={{gen_file}} default=false') }}" - no_telem: "{{ lookup('ini', 'no_telem file={{gen_file}} default=false') }}" - battery: "{{ lookup('ini', 'battery file={{gen_file}} default=false') }}" - swap_block: "{{ lookup('ini', 'swap_block file={{gen_file}} default=false') }}" + pentesting: "{{ lookup('ini', 'pentesting file={{gen_file}} default=false') | bool }}" + no_telem: "{{ lookup('ini', 'no_telem file={{gen_file}} default=false') | bool }}" + battery: "{{ lookup('ini', 'battery file={{gen_file}} default=false') | bool }}" + swap_block: "{{ lookup('ini', 'swap_block file={{gen_file}} default=false') | bool }}" swap_count: "{{ lookup('ini', 'swap_count file={{gen_file}} default=1') }}" swap_file: "{{ lookup('ini', 'swap_file file={{gen_file}} default=/swapfile') }}" - sshd_port: "{{ lookup('ini', 'sshd_port file={{gen_file}} default=22') }}" + sshd_port: "{{ lookup('ini', 'sshd_port file={{gen_file}} default=22') }}" git_host: "{{ lookup('ini', 'git_host file={{gen_file}} default=git.hyperling.com') }}" git_user: "{{ lookup('ini', 'git_user file={{gen_file}} default=me') }}" git_project: "{{ lookup('ini', 'git_project file={{gen_file}} default=env-ansible') }}" @@ -179,6 +179,7 @@ ; enable : Set to true for system to be considered a workstation. ; ; coding : Set to true for installation of code editors (VSCode, PyCharm, Android Studio) + ; - sdks : Set to true to download additional SDKs to test against. ; ; editing : Set to true for installation of Audio/Video editors (Shotcut, Audacity, OBS Stdio, GIMP) ; Set to video for only the video related portions. @@ -200,6 +201,9 @@ ; mobile : Set to true if not using an amd64 processor. ; Also used to disable tasks not helpful for Pinephone. ; + ; redmode : Set to true/false for automatially using Night Light in GNOME. + ; Default: true + ; [global] marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config' state: present @@ -208,14 +212,16 @@ - name: General | Account Management | Provisioning Configuration | Workstation | Load set_fact: - workstation: "{{ lookup('ini', 'enable file={{wrk_file}} default=false') }}" - coding: "{{ lookup('ini', 'coding file={{wrk_file}} default=false') }}" - editing: "{{ lookup('ini', 'editing file={{wrk_file}} default=false') }}" - gaming: "{{ lookup('ini', 'gaming file={{wrk_file}} default=false') }}" - rdp: "{{ lookup('ini', 'rdp file={{wrk_file}} default=false') }}" - vnc: "{{ lookup('ini', 'vnc file={{wrk_file}} default=false') }}" - bsd_gpu: "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') }}" - mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') }}" + workstation: "{{ lookup('ini', 'enable file={{wrk_file}} default=false') | bool }}" + coding: "{{ lookup('ini', 'coding file={{wrk_file}} default=false') | bool }}" + sdks: "{{ lookup('ini', 'sdks file={{wrk_file}} default=false') | bool }}" + editing: "{{ lookup('ini', 'editing file={{wrk_file}} default=false') | bool }}" + gaming: "{{ lookup('ini', 'gaming file={{wrk_file}} default=false') | bool }}" + rdp: "{{ lookup('ini', 'rdp file={{wrk_file}} default=false') | bool }}" + vnc: "{{ lookup('ini', 'vnc file={{wrk_file}} default=false') | bool }}" + bsd_gpu: "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') | bool }}" + mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') | bool }}" + redmode: "{{ lookup('ini', 'redmode file={{wrk_file}} default=true' ) | bool }}" - name: General | Account Management | Provisioning Configuration | Workstation | List set_fact: @@ -223,12 +229,14 @@ loop: - { 'workstation': "{{ workstation }}" } - { 'coding': "{{ coding }}" } + - { 'sdks': "{{ sdks }}" } - { 'editing': "{{ editing }}" } - { 'gaming': "{{ gaming }}" } - { 'rdp': "{{ rdp }}" } - { 'vnc': "{{ vnc }}" } - { 'bsd_gpu': "{{ bsd_gpu }}" } - { 'mobile': "{{ mobile }}" } + - { 'redmode': "{{ redmode }}" } # No longer mining, this is now considered deprecated. ### Miner ## @@ -280,18 +288,18 @@ # #- name: General | Account Management | Provisioning Configuration | Miner | Load # set_fact: -# miner: "{{ lookup('ini', 'enable file={{mnr_file}} default=false') }}" -# amdgpu: "{{ lookup('ini', 'amdgpu file={{mnr_file}} default=false') }}" -# nanominer: "{{ lookup('ini', 'nanominer file={{mnr_file}} default=false') }}" -# nanominer_cpu: "{{ lookup('ini', 'nanominer_cpu file={{mnr_file}} default=false') }}" -# nanominer_cpu_pool: "{{ lookup('ini', 'nanominer_cpu_pool file={{mnr_file}} default=false') }}" -# nanominer_gpu: "{{ lookup('ini', 'nanominer_gpu file={{mnr_file}} default=false') }}" -# nanominer_gpus: "{{ lookup('ini', 'nanominer_gpus file={{mnr_file}} default=false') }}" -# nanominer_gpu_pool: "{{ lookup('ini', 'nanominer_gpu_pool file={{mnr_file}} default=false') }}" -# eth_minhashrate: "{{ lookup('ini', 'eth_minhashrate file={{mnr_file}} default=false') }}" -# ethminer: "{{ lookup('ini', 'ethminer file={{mnr_file}} default=false') }}" -# nvidia: "{{ lookup('ini', 'nvidia file={{mnr_file}} default=false') }}" -# xmr_stak_cpu: "{{ lookup('ini', 'xmr_stak_cpu file={{mnr_file}} default=false') }}" +# miner: "{{ lookup('ini', 'enable file={{mnr_file}} default=false') | bool }}" +# amdgpu: "{{ lookup('ini', 'amdgpu file={{mnr_file}} default=false') | bool }}" +# nanominer: "{{ lookup('ini', 'nanominer file={{mnr_file}} default=false') | bool }}" +# nanominer_cpu: "{{ lookup('ini', 'nanominer_cpu file={{mnr_file}} default=false') | bool }}" +# nanominer_cpu_pool: "{{ lookup('ini', 'nanominer_cpu_pool file={{mnr_file}} default=false') | bool }}" +# nanominer_gpu: "{{ lookup('ini', 'nanominer_gpu file={{mnr_file}} default=false') | bool }}" +# nanominer_gpus: "{{ lookup('ini', 'nanominer_gpus file={{mnr_file}} default=false') | bool }}" +# nanominer_gpu_pool: "{{ lookup('ini', 'nanominer_gpu_pool file={{mnr_file}} default=false') | bool }}" +# eth_minhashrate: "{{ lookup('ini', 'eth_minhashrate file={{mnr_file}} default=false') | bool }}" +# ethminer: "{{ lookup('ini', 'ethminer file={{mnr_file}} default=false') | bool }}" +# nvidia: "{{ lookup('ini', 'nvidia file={{mnr_file}} default=false') | bool }}" +# xmr_stak_cpu: "{{ lookup('ini', 'xmr_stak_cpu file={{mnr_file}} default=false') | bool }}" # #- name: General | Account Management | Provisioning Configuration | Miner | List # set_fact: @@ -349,14 +357,14 @@ - name: General | Account Management | Provisioning Configuration | Server | Load set_fact: - server: "{{ lookup('ini', 'enable file={{srv_file}} default=false') }}" + server: "{{ lookup('ini', 'enable file={{srv_file}} default=false') | bool }}" domain: "{{ lookup('ini', 'domain file={{srv_file}} default=hyperling.com') }}" - onlyoffice: "{{ lookup('ini', 'onlyoffice file={{srv_file}} default=false') }}" - grafana: "{{ lookup('ini', 'grafana file={{srv_file}} default=false') }}" - influxdb1: "{{ lookup('ini', 'influxdb1 file={{srv_file}} default=false') }}" - influxdb2: "{{ lookup('ini', 'influxdb2 file={{srv_file}} default=false') }}" - certbot: "{{ lookup('ini', 'certbot file={{srv_file}} default=false') }}" - hugo: "{{ lookup('ini', 'hugo file={{srv_file}} default=false') }}" + onlyoffice: "{{ lookup('ini', 'onlyoffice file={{srv_file}} default=false') | bool }}" + grafana: "{{ lookup('ini', 'grafana file={{srv_file}} default=false') | bool }}" + influxdb1: "{{ lookup('ini', 'influxdb1 file={{srv_file}} default=false') | bool }}" + influxdb2: "{{ lookup('ini', 'influxdb2 file={{srv_file}} default=false') | bool }}" + certbot: "{{ lookup('ini', 'certbot file={{srv_file}} default=false') | bool }}" + hugo: "{{ lookup('ini', 'hugo file={{srv_file}} default=false') | bool }}" - name: General | Account Management | Provisioning Configuration | Server | List set_fact: diff --git a/tasks/general/acct_mgmt/users.yml b/tasks/general/acct_mgmt/users.yml index c41d31f..a612ec9 100644 --- a/tasks/general/acct_mgmt/users.yml +++ b/tasks/general/acct_mgmt/users.yml @@ -409,6 +409,10 @@ fi done | sort -n } + alias flatpak-info="flatpak-usage" + alias flatpak-space="flatpak-usage" + alias flatpak-size="flatpak-usage" + alias flatpak-sizes="flatpak-usage" function_flatpak_purge: | function flatpak-purge() { flatpak remove --all --delete-data && @@ -436,6 +440,7 @@ docker compose up -d if [[ -n "$1" ]]; then + echo "Following logs of '$1':" docker logs -f $1 fi @@ -458,6 +463,7 @@ docker compose up -d if [[ -n "$1" ]]; then + echo "Following logs of '$1':" docker logs -f $1 fi @@ -524,6 +530,7 @@ docker compose up -d if [[ -n "$1" ]]; then + echo "Following logs of '$1':" docker logs -f $1 fi @@ -547,6 +554,7 @@ done echo -e "\nDone!" ' + alias code-sync='code-check' alias_code_reset: | alias code-reset=' ls -d ~/Code/* | while read project @@ -566,6 +574,7 @@ env-ansible dev env-docker dev env-termux dev + env-obtainium-hyperling dev nodejs-website dev ebook-health-protocol dev flutter-expense-tracker dev @@ -573,6 +582,14 @@ nodejs-social-traveler-server dev misc-spare-change main flutter-buddy-website dev + flutter-sunset-alarm dev + android-infinite-timer dev + android-carb-up dev + android-hypergames dev + android-45-minute-rule dev + android-tictactoe dev + hugo-jackanope dev + hugo-website dev EOF } function code-reseed { @@ -720,6 +737,110 @@ 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_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_backup: | + function backup { + EXTRA="$1" + BACKUP_DIR="/tmp" + BACKUP_FILENAME="Backup-`now`.zip" + BACKUP="$BACKUP_DIR/$BACKUP_FILENAME" + echo "*** Creating backup at '$BACKUP' ***" + sudo zip -rv "$BACKUP" \ + /etc /var/{log,mail,spool} /srv /boot \ + /usr/local/etc $EXTRA + 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! ***" + fi + } + function_debian_upgrade: | + function debian-upgrade { + typeset -l OLD NEW + OLD="$1" + NEW="$2" + echo "*** 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 + + echo "*** Running 'backup' before starting upgrade. ***" + sleep 1 + + backup + + echo "*** 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 + echo "*** Aborting upgrade, change rejected. ***" + return 1 + fi + unset confirm_change + + echo "*** 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" {} \; + + sudo grep $OLD /etc/apt/sources.list /etc/apt/sources.list.d/* + sudo grep $NEW /etc/apt/sources.list /etc/apt/sources.list.d/* + + 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 + echo "*** Aborting upgrade, confirmation rejected. ***" + return 1 + fi + unset confirm_correct + + echo "*** Starting the upgrade. ***" + sleep 1 + + sudo apt update + sudo apt upgrade --without-new-pkgs + + echo "*** Upgrades complete, now add new packages. ***" + sleep 1 + sudo apt full-upgrade + + echo "*** New packages complete, clean apt files. ***" + sleep 1 + sudo apt autoremove --purge + sudo apt clean + + echo "*** All done! '$OLD' is now '$NEW'. Please reboot. ***" + sleep 1 + unset OLD NEW + } + alias upgrade-debian="debian-upgrade" - name: General | Account Management | Users | Files | Common Variable set_fact: @@ -783,6 +904,14 @@ {{ 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_debian_upgrade }} - name: General | Account Management | Users | Files | .bashrc blockinfile: diff --git a/tasks/general/cron/ansible.yml b/tasks/general/cron/ansible.yml index f646d9f..907041e 100644 --- a/tasks/general/cron/ansible.yml +++ b/tasks/general/cron/ansible.yml @@ -6,7 +6,7 @@ user: ansible name: "Ansible Sync" minute: "*/30" - job: "sudo {{ ansible_pull_exec.stdout }} -o -U {{ git_repo_http }} --checkout {{ branch }}" + job: "sudo {{ ansible_pull_exec.stdout }} -v -o -U {{ git_repo_http }} --checkout {{ branch }}" state: present disabled: "{{ 'yes' if no_telem else 'no' }}" diff --git a/tasks/general/software/metasploit.yml b/tasks/general/software/metasploit.yml index f9d56a7..f2884f3 100644 --- a/tasks/general/software/metasploit.yml +++ b/tasks/general/software/metasploit.yml @@ -6,13 +6,22 @@ metasploit_installer: msfinstall when: ansible_system in ("Linux", "Darwin") +- name: General | Software | Metasploit | Refresh Apt Files + shell: "{{ item }}" + loop: + - "mkdir -p /tmp/apt/" + - "mv -fv /usr/share/keyrings/metasploit-framework.gpg /tmp/apt/metasploit-framework.gpg.old" + - "mv -fv /etc/apt/sources.list.d/metasploit-framework.list /tmp/apt/metasploit-framework.list.old" + - "mv -fv /etc/apt/preferences.d/pin-metasploit.pref /tmp/apt/pin-metasploit.pref.old" + when: ansible_system in ("Linux") + ignore_errors: true + - name: General | Software | Metasploit | Install shell: "{{ item }}" loop: - - "mv -fv /usr/share/keyrings/metasploit-framework.gpg /usr/share/keyrings/metasploit-framework.gpg.old" - "curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > {{ metasploit_installer }}" - "chmod 755 {{ metasploit_installer }}" - "mkdir -p {{ global_bin }}" - "mv -fv ./msfinstall {{ global_bin }}/{{ metasploit_installer }}" - - "{{ global_bin }}/{{ metasploit_installer }}" + - yes y | "{{ global_bin }}/{{ metasploit_installer }}" when: ansible_system in ("Linux", "Darwin") diff --git a/tasks/general/software/packages.yml b/tasks/general/software/packages.yml index 9c78d63..5f0d05f 100644 --- a/tasks/general/software/packages.yml +++ b/tasks/general/software/packages.yml @@ -43,7 +43,7 @@ - bash - sudo - nmap - - neofetch + - "{{ neofetch }}" - "{{ sshfs }}" - "{{ locate }}" - zsh @@ -56,6 +56,10 @@ - "{{ cron }}" - "{{ encfs }}" - rsync + - "{{ iftop }}" + - "{{ nethogs }}" + - "{{ ntp_server }}" + - "{{ dig }}" state: present - name: General | Software | Packages | Install Software (DEV) @@ -138,14 +142,6 @@ when: ansible_distribution != "Ubuntu" ignore_errors: yes -- name: General | Software | Packages | GS Connect (KDE Connect, Android Tool) - package: - name: - - gnome-shell-extension-gsconnect - state: present - when: ansible_distribution in ("Debian") - ignore_errors: yes - - name: General | Software | Packages | Other Debian Packages package: name: diff --git a/tasks/general/software/services.yml b/tasks/general/software/services.yml index 43e3ffc..f55a4a2 100644 --- a/tasks/general/software/services.yml +++ b/tasks/general/software/services.yml @@ -9,6 +9,11 @@ pattern: "{{ crond_pattern }}" state: started enabled: yes + when: ansible_virtualization_type != 'docker' + register: cron_status + until: cron_status.state == "started" + retries: 3 + delay: 3 ## CUPS ## @@ -76,6 +81,11 @@ pattern: "{{ sshd_pattern }}" state: reloaded enabled: yes + when: ansible_virtualization_type != 'docker' + register: sshd_status + until: sshd_status.state == "started" + retries: 3 + delay: 3 ## JournalCTL ## @@ -96,3 +106,17 @@ state: stopped enabled: no ignore_errors: yes + +## NTP ## + +- name: General | Software | Services | NTP | Enable + service: + name: "{{ ntp_server }}" + pattern: "{{ ntp_server }}" + state: started + enabled: yes + when: ansible_virtualization_type != 'docker' + register: ntp_status + until: ntp_status.state == "started" + retries: 3 + delay: 3 diff --git a/tasks/general/software/swap.yml b/tasks/general/software/swap.yml index 201e681..c25c9f3 100644 --- a/tasks/general/software/swap.yml +++ b/tasks/general/software/swap.yml @@ -9,6 +9,9 @@ - name: General | Software | Swap | Check For Swapfile stat: path: "{{ swap_file }}" + get_attributes: false + get_checksum: false + get_mime: false register: swap_check - name: General | Software | Swap | Install Block diff --git a/tasks/general/tests/lynis.yml b/tasks/general/tests/lynis.yml index 4923594..bf78817 100644 --- a/tasks/general/tests/lynis.yml +++ b/tasks/general/tests/lynis.yml @@ -13,8 +13,9 @@ git: repo: https://github.com/CISOfy/lynis dest: "{{ lynis_install_dir }}" - clone: yes - force: yes + clone: true + force: true + update: true ignore_errors: yes - name: General | Tests | Lynis | Ensure Permissions (Looking at you Parrot OS!) diff --git a/tasks/miner/drivers/amdgpu.yml b/tasks/miner/drivers/amdgpu.yml index 22a7471..498f66c 100644 --- a/tasks/miner/drivers/amdgpu.yml +++ b/tasks/miner/drivers/amdgpu.yml @@ -8,9 +8,9 @@ amdgpu_cron_cmd: "{{ root_home.stdout }}/scm.sh" - name: Miner | Driver | AMDGPU | Install Dependencies - package: - name: - - dkms + package: + name: + - dkms - mesa-common-dev - clinfo state: present @@ -62,16 +62,16 @@ ## Step 1/3: Get Correct Kernel ## - name: Miner | Driver | AMDGPU | Install Recommended GA Kernel - shell: apt install --install-recommends linux-generic + shell: apt install --install-recommends linux-generic when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed - name: Miner | Driver | AMDGPU | Install Specific GA Kernel For Booting package: - name: - - linux-headers-5.4.0-65 - - linux-headers-5.4.0-65-generic - - linux-headers-generic - - linux-image-generic + name: + - linux-headers-5.4.0-65 + - linux-headers-5.4.0-65-generic + - linux-headers-generic + - linux-image-generic - linux-modules-extra-5.4.0-65-generic state: present when: amdgpu_install.failed and hwe_kernel.stdout != "0" and ga_kernel.failed @@ -121,10 +121,10 @@ when: amdgpu_install.failed and hwe_kernel.stdout != "0" - name: Miner | Driver | AMDGPU | Update + Clean System - shell: "apt update; apt dist-upgrade -y; apt autoremove -y" + shell: "apt update; apt dist-upgrade -y; apt autoremove --purge -y" when: amdgpu_install.failed and hwe_kernel.stdout != "0" -# This is to ensure we can test adding `apt install --install-recommends linux-generic` later +# This is to ensure we can test adding `apt install --install-recommends linux-generic` later - name: Miner | Driver | AMDGPU | Boot Default Kernel lineinfile: path: /etc/default/grub diff --git a/tasks/workstation/linux/software/android.yml b/tasks/workstation/linux/software/android.yml index 6daaf98..55c92db 100644 --- a/tasks/workstation/linux/software/android.yml +++ b/tasks/workstation/linux/software/android.yml @@ -17,6 +17,7 @@ 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: @@ -29,23 +30,142 @@ 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 @@ -111,7 +231,7 @@ ## Configure Modules ## # This can only be run once, otherwise cmdline-tools creates latest-* folders. -- name: Workstation | Linux | Software | Android | Install Consistent Modules +- name: Workstation | Linux | Software | Android | Install | Consistent Modules shell: "yes | {{ android_sdkmanager_temp }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}" loop: # Current @@ -122,31 +242,47 @@ when: coding == true and not android_sdkmanager_final_stat.stat.exists # These are safe to run multiple times, and uses the new `latest` version. -- name: Workstation | Linux | Software | Android | Install Modules +- name: Workstation | Linux | Software | Android | Install | Required Modules shell: "yes | {{ android_sdkmanager_final }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}" - loop: - # 34 - - build-tools;34.0.0 - - platforms;android-34 - - sources;android-34 - # 35 - - build-tools;35.0.0 - - build-tools;35.0.1 - - platforms;android-35 - - sources;android-35 - # Images - #- system-images;android-35;default;x86_64 - #- system-images;android-35;aosp_atd;x86_64 - - system-images;android-35;google_apis_playstore;x86_64 + 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 | Licenses Agreements [1/2] +- 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 diff --git a/tasks/workstation/linux/software/flatpaks.yml b/tasks/workstation/linux/software/flatpaks.yml index 471ff31..9e986e0 100644 --- a/tasks/workstation/linux/software/flatpaks.yml +++ b/tasks/workstation/linux/software/flatpaks.yml @@ -34,18 +34,20 @@ - name: Workstation | Linux | Flatpak Distro | Flatpak | Arrays set_fact: flatpaks_generic: - - { app: "org.libreoffice.LibreOffice", name: "office", extra: "" } - - { app: "io.gitlab.librewolf-community", name: "librewolf", extra: "" } - - { app: "org.signal.Signal", name: "signal", extra: "" } - { app: "org.mozilla.firefox", name: "firefox-flatpak", extra: "" } - - { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" } + - { app: "io.gitlab.librewolf-community", name: "librewolf", extra: "" } + - { app: "chat.simplex.simplex", name: "simplex", extra: "" } + - { app: "org.signal.Signal", name: "signal", extra: "" } + - { app: "im.riot.Riot", name: "element", extra: "" } + - { app: "org.telegram.desktop", name: "telegram", extra: "" } - { app: "org.gimp.GIMP", name: "gimp", extra: "" } + - { app: "org.libreoffice.LibreOffice", name: "office", extra: "" } + - { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" } flatpaks_coding: - { app: "com.vscodium.codium", name: "codium-flatpak", extra: "" } - { app: "com.google.AndroidStudio", name: "android-studio", extra: "" } - { app: "io.dbeaver.DBeaverCommunity", name: "dbeaver", extra: "" } - - { app: "org.godotengine.Godot", name: "godot", extra: "" } - - { app: "com.visualstudio.code-oss", name: "code", extra: "" } + - { app: "com.visualstudio.code-oss", name: "code-flatpak", extra: "" } flatpaks_editing_video: - { app: "org.shotcut.Shotcut", name: "shotcut", extra: "" } - { app: "com.obsproject.Studio", name: "obs", extra: "" } @@ -67,14 +69,13 @@ - { app: "org.audacityteam.Audacity", name: "audacity", extra: "" } # Say "no thanks" to spyware. - { app: "com.discordapp.Discord", name: "discord", extra: "" } # Stopped working, just spins and says Starting. # 2022-11-20 No longer using any of these and they're taking up a lot of space. # - - { app: "im.riot.Riot", name: "element", extra: "" } - - { app: "org.telegram.desktop", name: "telegram", extra: "" } - { app: "com.jetbrains.PyCharm-Community", name: "pycharm", extra: "" } # End 2022-11-20 # - { app: "io.lbry.lbry-app", name: "lbry", extra: "dbus-launch" } # No longer supported, noticed 2023-09-01. - { app: "chat.delta.desktop", name: "deltachat", extra: "" } # No longer used, removed 2023-12-18. - { app: "org.gnome.Geary", name: "geary", extra: "" } # No longer used, removed 2024-12-15 - { app: "org.rncbc.qsynth", name: "qsynth", extra: "" } # 2024-12-15, Not worth the setup, use LMMS or VMPK. + - { app: "org.godotengine.Godot", name: "godot", extra: "" } # 20250831 Stopped playing with this months / years ago. # Generic # diff --git a/tasks/workstation/linux/software/flutter.yml b/tasks/workstation/linux/software/flutter.yml index dba5551..93932b3 100644 --- a/tasks/workstation/linux/software/flutter.yml +++ b/tasks/workstation/linux/software/flutter.yml @@ -8,7 +8,7 @@ flutter_url: "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.27.2-stable.tar.xz" flutter_download_file: "{{ user_user.home }}/Downloads/flutter.tar.xz" flutter_sdk_location: "{{ user_user.home }}/SDKs/Flutter" - flutter_report: "{{ user_user.home }}/Reports/flutter.txt" + flutter_report: "{{ user_user.home }}/Reports/{{ ansible_hostname }}.sdk.flutter.txt" when: coding == true - name: Workstation | Linux | Software | Flutter | Facts [2/4] @@ -36,12 +36,18 @@ - 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 diff --git a/tasks/workstation/linux/software/lutris.yml b/tasks/workstation/linux/software/lutris.yml index 756ca83..9d19188 100644 --- a/tasks/workstation/linux/software/lutris.yml +++ b/tasks/workstation/linux/software/lutris.yml @@ -15,6 +15,9 @@ - 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" diff --git a/tasks/workstation/linux/software/packages.yml b/tasks/workstation/linux/software/packages.yml index f398af7..52ff1b8 100644 --- a/tasks/workstation/linux/software/packages.yml +++ b/tasks/workstation/linux/software/packages.yml @@ -39,8 +39,17 @@ - "{{ evolution }}" - "{{ evolution }}*" - gparted + - hugo state: present +- name: Workstation | Linux | Software | Packages | GS Connect (KDE Connect, Android Tool) + package: + name: + - gnome-shell-extension-gsconnect + state: present + when: ansible_distribution in ("Debian") + ignore_errors: yes + # Remove Repo Software # - name: Workstation | Linux | Software | Packages | Remove Applications diff --git a/tasks/workstation/linux/software/vscodium.yml b/tasks/workstation/linux/software/vscodium.yml index 446369b..a503844 100644 --- a/tasks/workstation/linux/software/vscodium.yml +++ b/tasks/workstation/linux/software/vscodium.yml @@ -22,6 +22,9 @@ - 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" diff --git a/tasks/workstation/shared/settings/gnome.yml b/tasks/workstation/shared/settings/gnome.yml index 9dc7169..9d28198 100644 --- a/tasks/workstation/shared/settings/gnome.yml +++ b/tasks/workstation/shared/settings/gnome.yml @@ -13,7 +13,6 @@ , 'io.gitlab.librewolf-community.desktop', 'librewolf.desktop' , 'org.mozilla.firefox.desktop', 'firefox.desktop' , 'org.signal.Signal.desktop', 'signal-desktop.desktop' - , 'im.riot.Riot.desktop' , 'org.telegram.desktop.desktop' , 'com.discordapp.Discord.desktop' , 'com.vscodium.codium.desktop' @@ -39,6 +38,9 @@ #, 'com.visualstudio.code-oss.desktop', 'code-oss.desktop' # 2025-03-21 Not really using Android Studio now that Flutter is working. #, 'com.google.AndroidStudio.desktop' +# 2025-08-31 Not used a whole lot, installed again just to explore. +#, 'im.riot.Riot.desktop' +#, 'chat.simplex.simplex.desktop' - name: Workstation | Account Management | GNOME | Facts (NixOS) set_fact: @@ -217,7 +219,12 @@ dconf write /org/gnome/desktop/notifications/application/org-gnome-evolution/enable-sound-alerts false && inc_dconf && dconf write /org/gnome/desktop/notifications/application/org-gnome-evolution/enable false && inc_dconf && - dconf write /org/gnome/settings-daemon/plugins/color/night-light-enabled true + # Red Mode (Night Light) + typeset -l redmode + redmode="{{ redmode }}" + if [[ $redmode == "true" ]]; then + dconf write /org/gnome/settings-daemon/plugins/color/night-light-enabled true + fi dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-automatic false dconf write /org/gnome/settings-daemon/plugins/color/night-light-temperature "uint32 3170" dconf write /org/gnome/settings-daemon/plugins/color/night-light-schedule-from 2.0