Compare commits

...

216 Commits

Author SHA1 Message Date
8b52914683 Edit the show facts parameter to exit after it runs. Also fix its spacing in the usage. 2025-12-18 10:46:26 -07:00
b3e9f7584f Also add boolean check for swap_block. 2025-12-18 10:37:56 -07:00
1a2572870f Ensure that the editing variable is interpreted as a boolean if it is true or false. 2025-12-18 10:36:45 -07:00
d32c913a40 Add music tagger for audio editing machines. 2025-12-18 10:03:07 -07:00
b8fa688e52 Add a parameter to image compressing which does not use a big fancy tag. 2025-12-08 15:15:11 -07:00
ea3ce8d023 Change the t parameter to do what the e parameter does, and finish what the e parameter is supposed to do. 2025-12-08 14:54:08 -07:00
dd7325da39 Prevent date formatting if the time flag is not set. 2025-12-08 14:48:32 -07:00
195c315714 Add shortcut for running a command in a loop. 2025-12-02 16:38:57 -07:00
b91b43b56d Add wireless-tools package for workstations. 2025-12-02 16:29:35 -07:00
a64f2253b6 Add colors to PS2. 2025-12-01 19:19:06 -07:00
7f21a0fc7b Refactor the prompt colors. 2025-12-01 19:14:04 -07:00
87aca38811 Add time and colors to PS1. 2025-12-01 19:11:24 -07:00
9ce7c641af Merge pull request 'BASHrc Upgrades, Backup Script, DWM Enhancements, Hugo Helpers, Branch Controls' (#7) from dev into main
Reviewed-on: #7
2025-12-01 09:50:54 -07:00
71cf71e29b Ignore the /srv/sftp directory when making system backups. 2025-12-01 09:47:43 -07:00
58525e2a5c Fix function exits to be returns. 2025-12-01 09:05:20 -07:00
f7869fd453 Change the timestamp formatting to be optional. 2025-11-30 19:16:50 -07:00
95212b1c73 Add shortcuts for checking code project branches to easily see which have been promoted and which have dev/stage changes. 2025-11-30 17:56:56 -07:00
ad6b9d4794 Remove TBD from commit code by using commit. :) 2025-11-28 15:00:43 -07:00
c6e8290b43 Add commit function to bashrc. 2025-11-28 14:57:22 -07:00
4a9cd06654 Add code for commit function. 2025-11-28 14:07:34 -07:00
c36a689d8f Add TBD. 2025-11-28 13:50:03 -07:00
0790da74dc Add flatpak Xournal++. Remove flatpak Simplex. Improve comments. 2025-11-22 12:21:07 -07:00
7be9c3a82f Add alias for cleaning unused Flatpak dependencies. 2025-11-22 12:13:50 -07:00
650157478d Add a TBD for preventing annoying behavior in gnome-terminal. 2025-11-22 10:55:02 -07:00
f4c3cc8b8e Add a few small docker shortcuts. 2025-11-22 10:19:30 -07:00
8b6e665db3 Update formatting of README. Add comments on which OS's are truly currently supported. 2025-11-21 17:58:52 -07:00
d8a29952f6 Move messaging apps to the end of the favorites bar. 2025-11-21 15:33:40 -07:00
1d699ae4a5 Run pull and build before taking the container down. 2025-11-21 08:29:02 -07:00
c568e0efbb Ensure headers are always installed on Debian systems. They stopped being included on a Macbook which resulted in Broadcom wl not being available, meaning WiFi was not working. 2025-11-19 12:31:20 -07:00
f48fcaf610 Stop using the Hugo Server params recommended by YT videos, they seem to make things break and also cause caching issues which were not previously present. 2025-11-16 07:24:03 -07:00
8a4446f7e3 Add TBD. 2025-11-11 20:11:15 -07:00
477797e045 Change default non-DWM formatting. 2025-11-10 21:58:30 -07:00
88b602f8f4 Have DWM status call status with a parameter. 2025-11-10 21:58:13 -07:00
5274d6d94d Move status to be a normal function so it's available on non-workstations. 2025-11-10 21:57:59 -07:00
692df74d41 Add reset of function files in case of renames. 2025-11-10 21:57:20 -07:00
7af798a7c0 Add placeholder functions for later functionality. 2025-11-10 21:37:47 -07:00
683e03eab2 Move function files to their own folder. Move the copy to General from Workstation. Leave dwm-status function under Workstation. 2025-11-10 21:37:25 -07:00
91c0a412bf Change storage output to be shorter. 2025-11-10 21:29:46 -07:00
4584a1a4c3 Add clock icon. 2025-11-10 21:29:01 -07:00
a4378c2bb3 Use for loop and . to keep functions in current shell. 2025-11-10 21:25:14 -07:00
72ce1e2ab5 Prevent additional call in dwm-status. 2025-11-10 21:19:36 -07:00
dde5b35bef Ensure all function files get sourced rather than hardcoding them. 2025-11-10 21:19:16 -07:00
e6947d4a30 Only show the int value of the battery percentage by default, rather than including the decimals. 2025-11-10 21:12:53 -07:00
b0762c7baf Move the status generation to its own file and give it a testing mode. Greatly enhance the logic and reduce the amount of times each variable gets updated. 2025-11-10 21:11:10 -07:00
ce67c2a5b8 Correct the free and used wording. 2025-11-10 21:07:39 -07:00
4b73dc336c Remove colons after icons, did not look good. 2025-11-10 17:45:10 -07:00
f32074a387 Fix dwm home call to use home not root. 2025-11-10 17:40:24 -07:00
af49b5dc86 Change status bar words to icons. 2025-11-10 17:33:54 -07:00
5bee3a30f9 Add back the & which went missing while playing with test.sh. 2025-11-10 17:25:06 -07:00
baa52bdca6 Add more aliases for battery function. 2025-11-10 17:24:05 -07:00
b734f16af1 Fix function rename in lower calls. 2025-11-10 17:23:10 -07:00
6607438f85 Add comments and error consistency. 2025-11-10 17:21:09 -07:00
ee7aa402aa More testing and fixes for volume functions. 2025-11-10 17:18:24 -07:00
50d3104f9f Rename the function to be more consistent and add a sane default check. 2025-11-10 17:01:58 -07:00
dff1560f6f Properly call the storage commands, using more functions! 2025-11-10 16:56:50 -07:00
5c3d5dd41e Change the function name to be more consistent with other files. 2025-11-10 16:56:14 -07:00
f562c8aecd Create function files as executable. 2025-11-10 16:46:00 -07:00
407bdb2ddf Add single quotes around awk parameters. 2025-11-10 15:09:37 -07:00
d1cd9dddf1 Add quotes around location variable. 2025-11-10 15:08:26 -07:00
68eb84af52 Fix missing then. 2025-11-10 15:07:45 -07:00
46d1bfb70e Still thinking of rewording line 2. Modify spacing. 2025-11-10 15:05:42 -07:00
8970bb3a1b Add quotes in case path has spaces, which it shouldn't, but it's good practice to protect it anyways. 2025-11-10 14:58:21 -07:00
eae66f9967 Add back in direct volume assignment, may have been cut and not copied back in. Re-test to ensure all is working well. 2025-11-10 14:57:00 -07:00
2770bbac5f If the DWM helper functions are available, go ahead and source them for local usage. 2025-11-10 14:47:46 -07:00
a0f7773998 Add author and date. 2025-11-10 14:42:26 -07:00
6ccdb395cd Add calls to the dwm helper functions in the portion which sets the status bar time. Add a sleep so that a CPU is not always busy. 2025-11-10 14:42:10 -07:00
b48dbbeee1 Copy the new dwm function files into the global bin, usually /usr/local/bin/. 2025-11-10 14:41:38 -07:00
07cc51a5cc Make the storage functions more versatile. 2025-11-10 14:20:39 -07:00
428684b9b3 Change permissions for storage too. 2025-11-10 14:03:03 -07:00
e42e3b4fcd Change permissions. 2025-11-10 14:02:31 -07:00
856290c33f Add function to quickly check storage. 2025-11-10 14:02:16 -07:00
e7ae358fa9 Add function to check battery percentage. 2025-11-10 14:02:01 -07:00
16dfeca689 Add terminal based volume function! Tested to work great so far. 2025-11-10 13:44:23 -07:00
0e1cb8bacb Add slightly easier to remember shortcuts for DWM. 2025-11-09 20:59:02 -07:00
8898959a95 Fix typo in comment. 2025-11-09 20:01:14 -07:00
4c467fff6d Add multiple versions of calling hugo server. 2025-11-08 15:28:15 -07:00
c927a5bd2d Add alias for running hugo server with sane defaults. 2025-11-08 15:20:19 -07:00
32dfd0af25 Begin fixing package installs for DNF (Fedora). 2025-11-01 04:07:39 -07:00
8636a0e112 Add option to spit out facts. 2025-10-30 15:37:33 -07:00
4864ee3869 Convert dnf5 to dnf. 2025-10-30 15:37:17 -07:00
0d8d872bfc Fix typo in "portion". 2025-10-30 15:15:28 -07:00
b562308cf1 Remove header, ensure test data is after the blockinfile header by including the tags it's looking for. 2025-10-30 15:15:13 -07:00
c2790e2de4 Fix error "File contains no section headers." when creating test config. 2025-10-30 15:02:16 -07:00
2be7e028b6 Add Mullvad to the end of favorites list. 2025-10-30 12:13:55 -07:00
0920493634 Create the config directory so that tee can create the files. 2025-10-25 15:46:52 -07:00
03b8169401 Try adding the output to the files in a different way. 2025-10-25 15:38:12 -07:00
cfc2694737 Add that the file contains test data. Add output of the function for testing. 2025-10-25 15:30:40 -07:00
fca20b31bd Change wording so that user does not expect files to exist right away. 2025-10-25 15:20:59 -07:00
1f4abd2d6c Create the filepaths for the config files. Output the files and their contents after creation. 2025-10-25 15:18:55 -07:00
a42d1d05df Fix the parameter switches. 2025-10-25 15:16:50 -07:00
07d1adc926 Create the proper contents in each test file. 2025-10-25 15:15:30 -07:00
71ca410123 Add ability to spawn basic configurations for testing. 2025-10-25 15:12:03 -07:00
c46c78519b Do not mention using the default branch if using local. 2025-10-25 14:58:03 -07:00
816a0d4f69 Do not check the kernelfor the OS when inside of Docker containers. 2025-10-25 14:43:14 -07:00
f8a60b4287 Change final backup check to use du again, not ls -l. 2025-10-24 15:26:40 -07:00
a7f395a62a Remove test output. 2025-10-24 15:18:44 -07:00
f02aec2cdb Fix case of DOCKER value. 2025-10-24 15:16:57 -07:00
a94959bcf9 Add more verbosity. Change "BACKUP" to "DOCKER". 2025-10-24 15:15:05 -07:00
5004250f85 Add aliases for reloading shell like in Termux environment. 2025-10-24 14:55:11 -07:00
4c4d4bbef7 Additional enhancements to pulling Production backups. 2025-10-24 14:53:36 -07:00
d32b636a99 Add more output. 2025-10-23 20:02:52 -07:00
a7083733cc Add check on whether any zips were successful. 2025-10-23 19:59:56 -07:00
97ddcc4573 Properly handle removing the failed files. 2025-10-23 19:50:57 -07:00
dc2ae57bd6 Add command to pull production backups while making sure that failed downloads are easily identified. 2025-10-23 19:42:50 -07:00
82ab31b9ea Add Grayjay to GNOME favorites. 2025-10-20 19:33:09 -07:00
49ababedc5 Add the flatpak Grayjay. 2025-10-20 19:32:49 -07:00
0d3931d738 Fix cronjobs to use BASH for RANDOM variable. 2025-10-19 21:41:59 -07:00
7c93f25a5d Add output for why dev branch shows up twice during load-prod. 2025-10-15 06:45:49 -07:00
8445b64d6b Check if the dev branch exists before moving to it. 2025-10-15 06:42:16 -07:00
8dfb3fe2a6 Change rollback aliases to only go down 1 layer. Add reset aliases for going all the way back to main. 2025-10-15 06:38:50 -07:00
5b749d2100 Fix failed branch switch. Hardcode to dev! 2025-10-15 06:35:02 -07:00
57ca267aa5 Add back the display of the current local branch we're on. Add newlines for readability. 2025-10-15 06:32:28 -07:00
2ca308c287 Re-do changes lost between branch pointing. 2025-10-15 06:28:38 -07:00
40ee72b587 Only continue each commnd if they are successful. 2025-10-15 06:15:13 -07:00
13bc98d7ef Further enhancments to load-branch. Better output and branch choices. 2025-10-15 06:06:05 -07:00
d916637798 Complete the conditional branches. 2025-10-15 05:53:48 -07:00
71d236d0ba Add aliases to roll branches back to main, AKA the last official pull request. 2025-10-15 05:48:18 -07:00
d81c424878 Allow using load-prod and load-stage with any branch, and default to dev if nothing is provided. 2025-10-15 05:47:01 -07:00
73e527640f Add heads back onto the ls-remote command. 2025-10-15 05:41:12 -07:00
aa3075a9fc Do not do switch back to sender if did not switch to receiver. 2025-10-15 05:33:17 -07:00
89cdf8157f Add other missing then. 2025-10-15 05:19:57 -07:00
4e0ff86295 Add missing then. 2025-10-15 05:19:21 -07:00
305b8df6ff Ensure user is on dev branch if it exists. 2025-10-15 05:09:56 -07:00
6a78933875 Add helper for reorienting a git branch. 2025-10-15 04:52:15 -07:00
7095636915 Remove trailing s. 2025-10-14 15:03:43 -07:00
80bba3b21b Merge pull request 'Fixes & Enhancements' (#6) from dev into main
Reviewed-on: #6
2025-10-14 15:01:20 -07:00
d98bbb02a9 Quote the backup contents with an * so that backups get ignored properly. 2025-10-14 12:21:38 -07:00
00c87328ab Don't back up backup files. 2025-10-14 11:16:52 -07:00
b4cdea984e Add sleep to ansible-pull commands. Change weekly force to daily. Use explicit command rather than rarely used file. 2025-10-14 11:09:24 -07:00
4651726268 Do a full truncate of backup directory so that partial zips with weird hash names and no file extension get deleted as well. 2025-10-14 08:36:53 -07:00
3410cf4426 Ensure backup's TRASH folder gets created and used properly. 2025-10-14 08:35:21 -07:00
d5393f60f3 Add cleanup for backups. 2025-10-14 08:34:33 -07:00
5f882df33f Add ability to use aliases with sudo. 2025-10-14 08:22:16 -07:00
0dfbd0bd68 Add ls alias for only showing size, not all the file data. 2025-10-14 08:18:20 -07:00
0d5b095ad6 Remove directory from basename variable. 2025-10-14 08:14:47 -07:00
07e32decf8 Fixes and enhancements for system backups. 2025-10-14 08:12:19 -07:00
afc3b20785 Reference script version of backup with function and add aliases. 2025-10-14 07:44:52 -07:00
ed160da316 Move backup function into script so that cron can access it. 2025-10-14 07:44:26 -07:00
2f08b1414e Use more standardized backup directory, outside of RAM. 2025-10-14 07:07:28 -07:00
c279884da2 Fix extra '. Really need to permanently turn off autocompletion type stuff, it keeps coming back on. 2025-10-09 13:30:06 -07:00
df8b330893 Add and use functions for simpler and more readable logging. 2025-10-09 12:38:56 -07:00
08a7a22dde Add to TBD. 2025-10-09 12:27:46 -07:00
57243f65e3 Do not use OR, .list file was not getting changed. 2025-10-09 11:12:29 -07:00
35469851b3 Fix find command to use OR when checking for multiple extensions. Fix sources extension to be plural. 2025-10-09 11:08:08 -07:00
2cf4a348c3 Fix backup function not removing old files. 2025-10-09 10:41:40 -07:00
4a33adf073 Add TBD for timezones. 2025-10-09 10:41:27 -07:00
fb00d3e6bc Separate file sections with periods. 2025-10-09 07:49:24 -07:00
267a260e90 Use hyphen not underscore for timestamp. 2025-10-09 07:48:52 -07:00
03b9f7e1b2 Add function for just the date. 2025-10-09 07:48:27 -07:00
57dc62a74a Change filename to match new Docker format. 2025-10-09 07:47:09 -07:00
f7c321bf23 Sort the cleanup by filesize. 2025-10-09 06:59:41 -07:00
130b243be3 Add method to clean up hidden trashed files, usually from Android. 2025-10-09 06:54:36 -07:00
400ef8400c Change what clean does to be much safer. 2025-10-06 18:35:20 -07:00
d35d9ccdd2 Add cleaning of generated PDF files. 2025-10-06 18:21:24 -07:00
a730919b43 Purge existing PDFs first so that old names get removed. 2025-10-04 14:10:31 -07:00
4e9e714504 Add comment! 2025-10-04 06:56:22 -07:00
c0ba27e782 Add command to regenerate all ebooks. 2025-10-04 06:55:42 -07:00
6d2a822323 Add System to local system backup file. 2025-10-04 06:33:37 -07:00
a8e6e0b6c6 Ensure that debian.source files also get modified by debian-upgrade. 2025-10-04 06:32:37 -07:00
93b919f48b Remove bool filter where it does not always makes sense. Should fix swap files from not getting created. 2025-10-03 18:53:20 -07:00
215e7dee69 Add more eBooks to the reseed list. 2025-09-30 14:04:34 -07:00
70ac7bff94 Merge pull request 'General Improvements & Fixes' (#5) from dev into main
Reviewed-on: #5
2025-09-19 13:31:52 -07:00
54589ca033 Add verbosity to ansible-pull command. 2025-09-16 12:28:32 -07:00
2dd0303176 Change URL for HTTP to include the S so that ansible-pull can correctly detect the changes to the repo. 2025-09-16 12:23:38 -07:00
411f203024 Add new project to rewrite my site in Hugo. 2025-09-02 14:20:21 -07:00
9f22385040 Simplex Desktop does not work without phone scan each time, do not keep on Favorite bar. 2025-08-31 11:57:34 -07:00
103a79a7ee Add Simplex to favorites. 2025-08-31 11:50:19 -07:00
602376df5f Remove Element from Favorites. 2025-08-31 11:31:57 -07:00
95c87448c8 Add aliases for remembering the Flatpak app size checking command. 2025-08-31 11:30:13 -07:00
df5421defe Ensure name of code-oss executable does not interfere with any ~/Code shortcuts. 2025-08-31 11:28:23 -07:00
1e7e11ed91 Change the order of generic apps based on importance. 2025-08-31 11:27:38 -07:00
07dc365410 Add the Matrix protocol messenger Element back to the list, as well as Simplex. 2025-08-31 11:03:11 -07:00
c248a3c048 Add extra dialog to show where we're at when next apt prompt comes up. 2025-08-22 15:54:38 -07:00
16466fb0c8 Finalize backup list. Fixes for debian-upgrade. 2025-08-22 14:04:21 -07:00
86e3f40d36 Added and tested now and backup. Still need to test debian-upgrade. 2025-08-22 13:43:40 -07:00
8038e10364 Add purge to autoremove so that unused config files also get removed. 2025-08-22 11:54:22 -07:00
295f29dece Do not check services if host is a Docker container. 2025-08-21 15:31:40 -07:00
8181ee0848 Remove extra space. 2025-08-21 15:27:14 -07:00
c87c4468b3 Fix command to work locally. 2025-08-21 15:26:26 -07:00
e19902074a Try starting the necessary services multiple times. 2025-08-21 14:55:36 -07:00
c12b54d0dc Only use fastfetch for Trixie. 2025-08-21 14:40:35 -07:00
a5023b2ef7 Add shortcut to remembering how to see Ansible facts. 2025-08-21 14:40:25 -07:00
ad6601f17e neofetch is no longer available in Debian 13 (Trixie). Use fastfetch instead. 2025-08-21 14:31:07 -07:00
8e3e284753 Ensure boolean values are treated as booleans in Debian Trixie. 2025-08-21 14:27:07 -07:00
df4efb2beb Move the Connect software to Workstation. 2025-08-21 14:06:19 -07:00
c7d06da91e Add dig to default installs. 2025-08-19 14:48:23 -07:00
3e1b0cc961 Do not include an extra newline when working with HTML, causes whitespace issues. 2025-08-19 11:52:38 -07:00
2b551cbff5 Add hugo website to project list. 2025-08-18 18:24:08 -07:00
64c77cbd20 Add hugo to workstation packages. 2025-08-13 16:55:07 -07:00
c8186d30da Add Telegram back to install list. 2025-08-12 05:41:09 -07:00
68e1e5a48f Fix unnecessary s in name. 2025-07-26 11:40:46 -07:00
f61fe14a94 Add the speed boost to other stat checks as well. 2025-07-26 11:38:52 -07:00
a03a1b6493 Fix lag of stat building checksum and other data on large swapfile. 2025-07-26 11:35:28 -07:00
d1f50523fb Add output that the log is being followed. 2025-07-26 11:27:09 -07:00
9339b590e0 Add more projects t the reseed list. 2025-07-23 06:49:43 -07:00
dfe0b26498 Add more Android versions for testing. Only download them on devices marked for additional sdks. Move the lists into facts so that they can be reused. Add uninstallation tasks. 2025-07-23 06:44:35 -07:00
57f14fed8d Add alias for nethogs so that base user can hit it. 2025-07-22 16:19:09 -07:00
23b16f5db4 Enable and start chrony service. 2025-07-22 10:03:12 -07:00
a15e0017a6 Add nethogs and chrony to package list. 2025-07-22 10:03:02 -07:00
a7e1d0d25a Move old files somewhere that they'll get purged and not cause warnings. 2025-07-17 14:06:05 -07:00
b203eab7b5 Also refresh the preferences file. 2025-07-17 09:52:29 -07:00
6d4ac9bb69 Allow the moving of apt resources to fail. 2025-07-17 09:39:51 -07:00
5c8eb77f95 Add aliases for ls and ps. 2025-07-17 09:39:24 -07:00
544519bbfa Update Android SDKs. 2025-07-13 19:43:31 -07:00
1ab1594f6c Add the default image so that degoogled emulators can be tested. 2025-07-13 12:49:09 -07:00
ae4967bc04 Add sdk to Flutter report extension. 2025-07-13 10:52:22 -07:00
0d72bc1ea9 Move from Android 34+35 to 35+36. Add task for removal of old versions. Add report of installed modules. 2025-07-13 10:52:01 -07:00
de9c886af2 Add the UPDATE field to ensure that the repo gets any updates. Change YES's to TRUE based on documentation. 2025-07-13 10:35:32 -07:00
8033efce93 Add hostname to Flutter report. 2025-07-13 09:43:35 -07:00
2d9317e9de Add iftop and an alias to call it as a user. 2025-07-13 09:30:26 -07:00
b6066558e7 Add ability to leave off Night Light through Workstation provisioning file. 2025-07-13 09:06:37 -07:00
42306e4287 Add code-sync to do code-check since that's usually why the command is called. 2025-07-11 12:24:04 -07:00
f3cb825981 Add project to current projects. 2025-07-11 12:20:10 -07:00
1db8c0b7b0 Fix tabs in usage to spaces. 2025-06-16 18:07:23 -06:00
116087928d Strip metadata from converted images. 2025-06-16 18:01:59 -06:00
b6e820570f Allow re-expanding the filename in a consistent way so it's not one big number. 2025-06-16 18:01:41 -06:00
37 changed files with 1457 additions and 148 deletions

View File

@@ -1,4 +1,5 @@
# ansible
Getting real with system management via ansible-pull.
Per-system configuration is handled via local files to the provisioned machine,
@@ -10,59 +11,124 @@ accessed via the show-config and edit-config aliases.
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.
## Currently Supported Linux Systems
## Currently Supported 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
100%, but only if using a recent enough version of Ansible. `pip` usually has a
better version than `apt`.
#### Ubuntu
100%, both server and desktop.
#### Pop!_OS
100%, have not used for a while though.
#### Mint
100%, but not really used, just tested once for fun.
#### Parrot Security OS (MATE)
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.
### Arch Family
#### Arch
100% at some point, including installation and configuration of a Desktop Environment.
#### Manjaro
100% at some point.
### Fedora Family
#### Fedora 35
Workstation: 100%
Workstation: 100%,
Server: 100%
## Suse Family
### openSUSE Tumbleweed v2022-02-17
Generic: 100%
Generic: 100%,
Workstation: 100%
### openSUSE Leap 15.4
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`.
### NixOS
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.
## Currently Supported Unix Systems
### FreeBSD 12, 13
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.
## Waiting To Be Tested
### Kali Linux
### Arch Linux ARM
Specifically for the Pinephone.
### Arch Linux x86
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.
### Fedora Mobile
Specifically for the Pinephone.
## Future Goals
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
network.
@@ -74,6 +140,8 @@ benefit has yet to be seen for some tasks. Shared facts will definitely continue
to exist under the facts tree.
## Other Notes
### Get Setup Values
Use this command to see the variables for a system:
`ansible localhost -m setup --connection=local`.

View File

@@ -2,12 +2,17 @@
# Define program names for package builtin.
# This file is for ALL systems and should not include UI components.
- name: General | Facts | Packages | Shared Defaults
- name: General | Facts | Package | Shared Defaults
set_fact:
sshfs: sshfs
tar: tar
iftop: iftop
nethogs: nethogs
ntp_server: chrony
dig: dig
neofetch: neofetch
- name: General | Facts | Packages | Parrot OS Fixes
- name: General | Facts | Package | Parrot OS Fixes
set_fact:
ansible_pkg_mgr: "apt"
ansible_python_interpreter: "/usr/bin/python3"
@@ -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
@@ -45,10 +56,15 @@
encfs: fusefs-encfs
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
set_fact:
sshfs: fuse-sshfs
locate: mlocate
locate: plocate
opensshd: openssh
microcode_amd: microcode_ctl
microcode_intel: microcode_ctl
@@ -98,7 +114,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 +129,7 @@
echo -e "******* Parrot *******\n*** Update Cache ***" &&
sudo apt update &&
echo -e "\n*** Auto Remove ***" &&
sudo apt autoremove {{ update_accept_var }} &&
sudo apt autoremove --purge {{ update_accept_var }} &&
parrot_mirrors_suck=true &&
while [[ $parrot_mirrors_suck ]]; do
unset parrot_mirrors_suck

View File

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

View File

@@ -104,7 +104,11 @@ static Key keys[] = {
{ MODKEY|ShiftMask, XK_q, quit, {0} },
// Mine
{ MODKEY, XK_q, killclient, {0} },
// Volume (https://varunbpatil.github.io/2013/09/28/dwm.html)
// extra search shortcut
{ 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, 0x1008ff11,spawn, {.v = lowervolcmd } },
{ 0, 0x1008ff13,spawn, {.v = raisevolcmd } },

9
files/dwm/dwm-status.function Executable file
View File

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

View File

@@ -0,0 +1,22 @@
#!/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

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

View File

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

85
files/functions/status.function Executable file
View File

@@ -0,0 +1,85 @@
#!/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

@@ -0,0 +1,38 @@
#!/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

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

173
files/functions/volume.function Executable file
View File

@@ -0,0 +1,173 @@
#!/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

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

View File

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

57
files/scripts/backup_system.sh Executable file
View File

@@ -0,0 +1,57 @@
#!/usr/bin/env bash
## Variables ##
if [[ -z "$HOSTNAME" ]]; then
echo "*** Pulling Hostname From Command ***"
export HOSTNAME="`hostname`"
fi
if [[ -z "$HOSTNAME" ]]; then
echo "*** Pulling Hostname From /etc/ File ***"
export HOSTNAME="`cat /etc/hostname`"
fi
EXTRA="$1"
TAG="System"
DATE="`date "+%Y%m%d-%H%M%S"`"
BACKUP_DIR="/srv/backup"
BASENAME="Backup"
BACKUP="$BACKUP_DIR/$BASENAME.$DATE.$HOSTNAME.$TAG.zip"
## Initialization ##
echo "*** Creating Backup Directory ***"
sudo mkdir -pv "$BACKUP_DIR"
sudo mkdir -pv "$BACKUP_DIR/TRASH"
sudo chmod -Rv 775 "$BACKUP_DIR"
sudo chown -Rv root:root "$BACKUP_DIR"
## Cleanup ##
echo "*** Removing Old Backups ***"
cd "$BACKUP_DIR"
sudo mv -v "$BASENAME"*"$TAG"* TRASH/
sudo rm -v TRASH/*
## Main
echo "*** Creating backup at '$BACKUP' ***"
sudo zip -rv "$BACKUP" \
/etc /var/{log,mail,spool} /srv /boot \
/usr/local/etc $EXTRA \
-x "/srv/backup/*" -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

@@ -15,6 +15,7 @@ size=2000
# Strings
tag="shrunk"
use_tag="Y"
date_YYYYMMDD="`date "+%Y%m%d"`"
location="."
search="ls"
@@ -28,7 +29,7 @@ function usage() {
# Parameters:
# 1) The exit status to use.
status=$1
echo "Usage: $PROG [-s SIZE] [-l LOCATION] [-A | [-r] [-f] [-d] [-c]] [-h] [-x]" >&2
echo "Usage: $PROG [-s SIZE] [-l LOCATION] [-A | [-r] [-f] [-d] [-c] [-e | -t] [-h] [-x] [-n]" >&2
cat <<- EOF
Compress JPG or PNG image(s). Can handle folders and work recursively.
@@ -42,16 +43,18 @@ function usage() {
-F : FORCE the image to be shrunk even if the file is already shrunk.
-d : Delete the original image if the compressed image is smaller.
-c : Clean the filename of underscores, dashes, 'IMG', etc.
-e | -t : Format timestamp to the expanded model.
-A : Resursively Force, Delete, and Clean.
-h : Display this usage text.
-x : Enable BASH debugging.
-n : No file extension.
EOF
exit $status
}
## Parameters ##
while getopts ":s:l:rfFdcAhx" opt; do
while getopts ":s:l:rfFdcetAhxn" opt; do
case $opt in
s) in_size="$OPTARG" && size="$in_size" ;;
l) location="$OPTARG" ;;
@@ -60,9 +63,12 @@ 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" ;;
t) expand="Y" ;;
A) recurse="Y" && search="find" && force="Y" && delete="Y" ;;
h) usage 0 ;;
x) set -x ;;
n) use_tag="N" ;;
*) echo "ERROR: Option $OPTARG not recognized." >&2 && usage 1 ;;
esac
done
@@ -74,7 +80,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'."
@@ -111,6 +117,12 @@ $search "$location" | sort | while read image; do
fi
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$size.$extension"
if [[ "$use_tag" == "N" ]]; then
new_image="$image"
new_image="${new_image//.$extension/}"
new_image="${new_image//.$tag/}"
new_image="$new_image.$tag.$extension"
fi
## Clean Filename ##
# Prevent directory from having its name cleaned too.
@@ -123,25 +135,47 @@ $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.
if [[ -e "$new_image" || -e $new_image_clean ]]; then
if [[ (-e "$new_image" || -e $new_image_clean) && $use_tag == "Y" ]]; then
echo " SKIP: Image has already been shrunk previously, moving on."
continue
fi
# Whether or not to use the cleaned version or the normal version.
# Whether or not to use the cleaned version.
if [[ -n $clean ]]; then
new_image="$new_image_clean"
# Whether or not to use the expanded version.
elif [[ -n $expand ]]; then
new_image="$new_image_exp"
fi
# Otherwise uses the same name as before.
###### TBD Instead of this, only alter the file names, and set a dirname var?
#### Create a new directory if the directory names were altered.

View File

@@ -33,13 +33,13 @@ function usage {
If nothing is provided, current directory (.) is assumed.
-v bitrate : The video bitrate to convert to.
Defaults are based on the size passed.
>= 2160: '30M'
>= 1440: '12M'
>= 1080: '5M'
>= 720: '2000k'
>= 480: '750k'
>= 360: '250k'
< 360: '100k'
>= 2160: '30M'
>= 1440: '12M'
>= 1080: '5M'
>= 720: '2000k'
>= 480: '750k'
>= 360: '250k'
< 360: '100k'
-a bitrate : The audio bitrate to convert to.
Defaults to '192k'.
-c vcodec : The video codec you'd like to use, such as libopenh264.

View File

@@ -12,6 +12,9 @@
"editor.tabSize": 3,
"editor.insertSpaces": false,
"files.insertFinalNewline": true,
"[html]": {
"files.insertFinalNewline": false
},
"files.trimFinalNewlines": true,
"git.confirmSync": false,

104
setup.sh
View File

@@ -9,13 +9,18 @@ LOCAL=$DIR/local.yml
URL="https://git.hyperling.com/me/env-ansible"
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 ##
# Accepts 1 parameter, it is used as the exit status.
function usage {
cat <<- EOF
$PROG [-l] [-b branch_name] [-h]
$PROG [-l] [-b branch_name] [-g] [-w] [-s] [-f] [-h]
Program to initialize synchronization with Hyperling's Ansible configuration.
$URL
@@ -23,8 +28,12 @@ function usage {
-l : Run the local playbook associated with this $PROG.
This is helpful for development or just saving bandwidth.
It also provides prettier colors than the plaintext from ansible-pull. ;)
-b branch_name: Download and run a specific branch. Default is $BRANCH.
-h : Display this help text
-b branch_name : Download and run a specific branch. Default is $BRANCH.
-g : Enable the General config with test contents.
-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
exit $1
@@ -32,10 +41,14 @@ function usage {
## Parameter Parsing ##
while getopts ":lb:h" arg; do
while getopts ":lb:gwsfh" arg; do
case $arg in
l) local="Y" && echo "Running $LOCAL as the playbook." ;;
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 ;;
*) echo "ERROR: Parameter $OPTARG was not recognized." && usage 1 ;;
esac
@@ -47,15 +60,32 @@ if [[ ! -z $1 && $1 != "-"* ]]; then
usage 1
fi
if [[ $branch == "" ]]; then
if [[ -z "$local" && "$branch" == "" ]]; then
echo "Using default branch $BRANCH."
branch="$BRANCH"
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 ##
os="$(cat /etc/os-release)"
os="$os $(uname -a)"
if [[ ! -f /.dockerenv ]]; then
# 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..."
if [[ `which ansible > /dev/null; echo $?` != 0 ]]; then
@@ -97,10 +127,72 @@ if [[ `which ansible > /dev/null; echo $?` != 0 ]]; then
fi
echo "Installed!"
if [[ "$show_facts" == "Y" ]]; then
echo "Showing Ansible Facts"
ansible localhost -m setup --connection=local
exit 0
fi
#echo "Adding Ansible Collections..."
#ansible-galaxy collection install community.general
#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..."
if [[ $local == "Y" ]]; then
sudo ansible-playbook $LOCAL

View File

@@ -26,7 +26,7 @@
blockinfile:
path: "{{ gen_file }}"
block: |
; Please note that all potions require lowercase keys and values.
; Please note that all portions require lowercase keys and values.
;
;;;;;;;;;;;;;;;;;;;; Basic Options ;;;;;;;;;;;;;;;;;;;;
;
@@ -125,17 +125,17 @@
- name: General | Account Management | Provisioning Configuration | General | Load
set_fact:
provision: "{{ lookup('ini', 'enable file={{gen_file}} default=false') }}"
provision: "{{ lookup('ini', 'enable file={{gen_file}} default=false') | bool }}"
user: "{{ lookup('ini', 'user file={{gen_file}} default=ling') }}"
user_desc: "{{ lookup('ini', 'user_desc file={{gen_file}} default=Hyperling') }}"
branch: "{{ lookup('ini', 'branch file={{gen_file}} default=main') }}"
pentesting: "{{ lookup('ini', 'pentesting file={{gen_file}} default=false') }}"
no_telem: "{{ lookup('ini', 'no_telem file={{gen_file}} default=false') }}"
battery: "{{ lookup('ini', 'battery file={{gen_file}} default=false') }}"
pentesting: "{{ lookup('ini', 'pentesting file={{gen_file}} default=false') | bool }}"
no_telem: "{{ lookup('ini', 'no_telem file={{gen_file}} default=false') | bool }}"
battery: "{{ lookup('ini', 'battery file={{gen_file}} default=false') | bool }}"
swap_block: "{{ lookup('ini', 'swap_block file={{gen_file}} default=false') }}"
swap_count: "{{ lookup('ini', 'swap_count file={{gen_file}} default=1') }}"
swap_file: "{{ lookup('ini', 'swap_file file={{gen_file}} default=/swapfile') }}"
sshd_port: "{{ lookup('ini', 'sshd_port file={{gen_file}} default=22') }}"
sshd_port: "{{ lookup('ini', 'sshd_port file={{gen_file}} default=22') }}"
git_host: "{{ lookup('ini', 'git_host file={{gen_file}} default=git.hyperling.com') }}"
git_user: "{{ lookup('ini', 'git_user file={{gen_file}} default=me') }}"
git_project: "{{ lookup('ini', 'git_project file={{gen_file}} default=env-ansible') }}"
@@ -144,6 +144,11 @@
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 | Boolean Check | Swap Block
set_fact:
swap_block: "{{ swap_block | bool }}"
when: swap_block in ("true", "false")
- name: General | Account Management | Provisioning Configuration | General | List
set_fact:
provision_variables: "{{ provision_variables | combine(item) }}"
@@ -179,6 +184,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 +206,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 +217,21 @@
- name: General | Account Management | Provisioning Configuration | Workstation | Load
set_fact:
workstation: "{{ lookup('ini', 'enable file={{wrk_file}} default=false') }}"
coding: "{{ lookup('ini', 'coding file={{wrk_file}} default=false') }}"
workstation: "{{ lookup('ini', 'enable file={{wrk_file}} default=false') | bool }}"
coding: "{{ lookup('ini', 'coding file={{wrk_file}} default=false') | bool }}"
sdks: "{{ lookup('ini', 'sdks file={{wrk_file}} default=false') | bool }}"
editing: "{{ lookup('ini', 'editing file={{wrk_file}} default=false') }}"
gaming: "{{ lookup('ini', 'gaming file={{wrk_file}} default=false') }}"
rdp: "{{ lookup('ini', 'rdp file={{wrk_file}} default=false') }}"
vnc: "{{ lookup('ini', 'vnc file={{wrk_file}} default=false') }}"
bsd_gpu: "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') }}"
mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') }}"
gaming: "{{ lookup('ini', 'gaming file={{wrk_file}} default=false') | bool }}"
rdp: "{{ lookup('ini', 'rdp file={{wrk_file}} default=false') | bool }}"
vnc: "{{ lookup('ini', 'vnc file={{wrk_file}} default=false') | bool }}"
bsd_gpu: "{{ lookup('ini', 'bsd_gpu file={{wrk_file}} default=false') | bool }}"
mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') | bool }}"
redmode: "{{ lookup('ini', 'redmode file={{wrk_file}} default=true' ) | bool }}"
- name: General | Account Management | Provisioning Configuration | Workstation | Boolean Check | Editing
set_fact:
editing: "{{ editing | bool }}"
when: editing in ("true", "false")
- name: General | Account Management | Provisioning Configuration | Workstation | List
set_fact:
@@ -223,12 +239,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 +298,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 +367,14 @@
- name: General | Account Management | Provisioning Configuration | Server | Load
set_fact:
server: "{{ lookup('ini', 'enable file={{srv_file}} default=false') }}"
server: "{{ lookup('ini', 'enable file={{srv_file}} default=false') | bool }}"
domain: "{{ lookup('ini', 'domain file={{srv_file}} default=hyperling.com') }}"
onlyoffice: "{{ lookup('ini', 'onlyoffice file={{srv_file}} default=false') }}"
grafana: "{{ lookup('ini', 'grafana file={{srv_file}} default=false') }}"
influxdb1: "{{ lookup('ini', 'influxdb1 file={{srv_file}} default=false') }}"
influxdb2: "{{ lookup('ini', 'influxdb2 file={{srv_file}} default=false') }}"
certbot: "{{ lookup('ini', 'certbot file={{srv_file}} default=false') }}"
hugo: "{{ lookup('ini', 'hugo file={{srv_file}} default=false') }}"
onlyoffice: "{{ lookup('ini', 'onlyoffice file={{srv_file}} default=false') | bool }}"
grafana: "{{ lookup('ini', 'grafana file={{srv_file}} default=false') | bool }}"
influxdb1: "{{ lookup('ini', 'influxdb1 file={{srv_file}} default=false') | bool }}"
influxdb2: "{{ lookup('ini', 'influxdb2 file={{srv_file}} default=false') | bool }}"
certbot: "{{ lookup('ini', 'certbot file={{srv_file}} default=false') | bool }}"
hugo: "{{ lookup('ini', 'hugo file={{srv_file}} default=false') | bool }}"
- name: General | Account Management | Provisioning Configuration | Server | List
set_fact:

View File

@@ -145,7 +145,50 @@
fi
curl "https://wttr.in/${1//\ /+}"
}
export_PS1: export PS1='[\u@\h \w]\$ '
export_PS1: |
## Prompts ##
# Old Trusty
#export PS1='[\u@\h \w]\$ '
# 20251201 - Add time.
#export PS1='[\t \u@\h \w]\$ '
# 20251201 - Add colors.
# This helps to determine the color palette numbers:
# https://robotmoon.com/bash-prompt-generator/
PURPLE=`tput setaf 5`
ORANGE=`tput setaf 214`
GREEN=`tput setaf 2`
RED=`tput setaf 9`
SCARLET=`tput setaf 1`
YELLOW=`tput setaf 226` # 11 does not seem to work
GRAY=`tput setaf 8`
RESET=`tput sgr0`
BOLD=`tput bold`
if [[ "$USER" == "root" || $UID == 0 ]]; then
CLR_BRACKETS=$BOLD$YELLOW
CLR_TIME=$BOLD$ORANGE
CLR_USER=$BOLD$SCARLET
CLR_DIR=$BOLD$RED
CLR_PROMPT=$BOLD$GRAY
else
CLR_BRACKETS=$RESET
CLR_TIME=$BOLD$PURPLE
CLR_USER=$BOLD$ORANGE
CLR_DIR=$BOLD$GREEN
CLR_PROMPT=$RESET
fi
export PS1='\[$CLR_BRACKETS\][\[$CLR_TIME\]\t \[$CLR_USER\]\u@\h \[$CLR_DIR\]\w\[$CLR_BRACKETS\]]\[$CLR_PROMPT\]\$ \[$RESET\]'
export PS2='\[$CLR_BRACKETS\](\[$CLR_TIME\]>\[$CLR_USER\]^\[$CLR_DIR\].\[$CLR_USER\]^\[$CLR_BRACKETS\])\[$CLR_TIME\]> \[$RESET\]'
## End Prompts ##
alias_remount: |
alias remount='
sudo umount /mnt/*
@@ -283,6 +326,19 @@
alias edit-config-wrk="sudo $EDITOR {{ wrk_file }}"
alias edit-config-mnr="sudo $EDITOR {{ mnr_file }}"
alias edit-config-srv="sudo $EDITOR {{ srv_file }}"
function_clean_trashed: |
function clean-trashed {
dir="$1"
if [[ -z $dir ]]; then
dir="./"
fi
cd $dir
dir="`pwd`"
echo "Removing '.trashed*' files in '$dir'."
find "$dir" -name ".trashed*" -exec du -h {} \; -delete | sort -h
}
alias trashed-cleanup="clean-trashed"
alias trashed-clean="clean-trashed"
function_check_trash: |
function check-trash() {
unset OPTIND
@@ -378,6 +434,9 @@
fi
echo "Checking but not cleaning /var/mail..."
du -ha /var/mail | sort -h
if [[ $clean == "Y" ]]; then
clean-trashed "~/"
fi
return 0
}
alias check_trash="check-trash"
@@ -386,18 +445,20 @@
alias_trash_clean: alias trash-clean='trash-check --clean'
alias_clean_dir: |
function clean-dir() {
sudo du -hs
clean_dir="`date '+%Y%m%d_%H%M%S'`_CLEANED"
trash_dir="$HOME/TRASH/$clean_dir"
curr_dir="`pwd`"
mkdir -pv "$trash_dir"
echo "$curr_dir is being cleaned at `date`." | tee "$trash_dir"/INFO.txt
mv -v ..?* .[!.]* * "$trash_dir"/ | tee -a "$trash_dir"/INFO.txt
sudo du -hs
}
function_clean: |
function clean() {
sudo du -hs
clean-dir
sudo du -hs
clean-trash
clean-code
clean-backups
}
function_flatpak_usage: |
function flatpak-usage() {
@@ -409,6 +470,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 &&
@@ -431,11 +496,12 @@
return 0
fi
docker compose down &&
docker compose build &&
docker compose down &&
docker compose up -d
if [[ -n "$1" ]]; then
echo "Following logs of '$1':"
docker logs -f $1
fi
@@ -452,12 +518,13 @@
return 0
fi
docker compose down &&
docker compose pull &&
docker compose build &&
docker compose down &&
docker compose up -d
if [[ -n "$1" ]]; then
echo "Following logs of '$1':"
docker logs -f $1
fi
@@ -495,12 +562,12 @@
docker ps
return;
fi
echo "*** Going Down ***" &&
docker compose down &&
echo "*** Upgrading Images ***" &&
docker compose pull &&
echo "*** Building Containers ***" &&
docker compose build &&
echo "*** Going Down ***" &&
docker compose down &&
echo "*** Starting Daemons ***" &&
docker compose up -d &&
echo "*** Following Log ***" &&
@@ -524,11 +591,16 @@
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='
echo "Checking ~/Code directory for git changes."
@@ -539,6 +611,16 @@
echo -e "\n*** `basename $project` ***"
cd $project
if [[ -d .git ]]; then
git ls-remote --exit-code --heads origin dev
dev_exists="$?"
if [[ "$dev_exists" == 0 ]]; then
git switch dev
elif [[ "$dev_exists" == 2 ]]; then
git switch main
else
echo "ERROR: Unknown status for dev_exists, '$dev_exists'."
continue
fi
git pull
git push
else
@@ -547,6 +629,7 @@
done
echo -e "\nDone!"
'
alias code-sync='code-check'
alias_code_reset: |
alias code-reset='
ls -d ~/Code/* | while read project
@@ -566,13 +649,27 @@
env-ansible dev
env-docker dev
env-termux dev
env-obtainium-hyperling dev
nodejs-website dev
ebook-health-protocol dev
ebook-freedom-flyer dev
ebook-technology-alternatives dev
ebook-narcissism-healing dev
ebook-forest-howto dev
ebook-template main
flutter-expense-tracker dev
flutter-social-traveler-app dev
nodejs-social-traveler-server dev
misc-spare-change main
flutter-buddy-website dev
flutter-sunset-alarm dev
android-infinite-timer dev
android-carb-up dev
android-hypergames dev
android-45-minute-rule dev
android-tictactoe dev
hugo-jackanope dev
hugo-website dev
EOF
}
function code-reseed {
@@ -665,6 +762,9 @@
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"
@@ -720,6 +820,301 @@
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"
}
function_loop: |
function loop {
cmd="$1"
while true; do
$cmd
done;
}
alias try="loop "
- name: General | Account Management | Users | Files | Common Variable
set_fact:
@@ -757,6 +1152,7 @@
{{ metasploit_aliases }}
{{ show_config_aliases }}
{{ edit_config_aliases }}
{{ function_clean_trashed }}
{{ function_check_trash }}
{{ function_clean }}
{{ function_flatpak_usage }}
@@ -783,6 +1179,26 @@
{{ 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 }}
{{ function_loop }}
- name: General | Account Management | Users | Files | .bashrc
blockinfile:
@@ -852,3 +1268,17 @@
- .bashrc
- .zshrc
- .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,12 +1,18 @@
---
# Jobs relating to the ansible user.
# $RANDOM is anywhere from 0 to 32767 in BASH. This would be up to ~9 hours.
# $RANDOM / 10 can be up to about 3200 seconds, or ~55 minutes.
# $RANDOM / 20 can be up to about 1600 seconds, or ~27 minutes.
# $RANDOM / 50 can be up to about 650 seconds, or ~11 minutes.
# $RANDOM / 100 can be up to about 320 seconds, or ~5 minutes.
# This prevents multiple systems from hitting it at the exact same time.
- name: General | Cron | Ansible | Create Subscriber Job
cron:
user: ansible
name: "Ansible Sync"
minute: "*/30"
job: "sudo {{ ansible_pull_exec.stdout }} -o -U {{ git_repo_http }} --checkout {{ branch }}"
job: "bash -c 'sleep $(( $RANDOM / 20 )); sudo {{ ansible_pull_exec.stdout }} -v -o -U {{ git_repo_http }} --checkout {{ branch }}'"
state: present
disabled: "{{ 'yes' if no_telem else 'no' }}"
@@ -14,7 +20,7 @@
cron:
user: ansible
name: "Ansible Weekly Forced Sync"
special_time: weekly
job: "{{ user_root.home }}/bin/scm.sh"
special_time: daily
job: "bash -c 'sleep $(( $RANDOM / 1 )); sudo {{ ansible_pull_exec.stdout }} -v -U {{ git_repo_http }} --checkout {{ branch }}'"
state: present
disabled: "{{ 'yes' if no_telem else 'no' }}"

View File

@@ -6,13 +6,22 @@
metasploit_installer: msfinstall
when: ansible_system in ("Linux", "Darwin")
- name: General | Software | Metasploit | Refresh Apt Files
shell: "{{ item }}"
loop:
- "mkdir -p /tmp/apt/"
- "mv -fv /usr/share/keyrings/metasploit-framework.gpg /tmp/apt/metasploit-framework.gpg.old"
- "mv -fv /etc/apt/sources.list.d/metasploit-framework.list /tmp/apt/metasploit-framework.list.old"
- "mv -fv /etc/apt/preferences.d/pin-metasploit.pref /tmp/apt/pin-metasploit.pref.old"
when: ansible_system in ("Linux")
ignore_errors: true
- name: General | Software | Metasploit | Install
shell: "{{ item }}"
loop:
- "mv -fv /usr/share/keyrings/metasploit-framework.gpg /usr/share/keyrings/metasploit-framework.gpg.old"
- "curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > {{ metasploit_installer }}"
- "chmod 755 {{ metasploit_installer }}"
- "mkdir -p {{ global_bin }}"
- "mv -fv ./msfinstall {{ global_bin }}/{{ metasploit_installer }}"
- "{{ global_bin }}/{{ metasploit_installer }}"
- yes y | "{{ global_bin }}/{{ metasploit_installer }}"
when: ansible_system in ("Linux", "Darwin")

View File

@@ -43,7 +43,7 @@
- bash
- sudo
- nmap
- neofetch
- "{{ neofetch }}"
- "{{ sshfs }}"
- "{{ locate }}"
- zsh
@@ -56,6 +56,10 @@
- "{{ cron }}"
- "{{ encfs }}"
- rsync
- "{{ iftop }}"
- "{{ nethogs }}"
- "{{ ntp_server }}"
- "{{ dig }}"
state: present
- name: General | Software | Packages | Install Software (DEV)
@@ -78,6 +82,15 @@
when: ansible_distribution == "Ubuntu"
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)
package:
name: psmisc
@@ -138,14 +151,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:

View File

@@ -9,6 +9,11 @@
pattern: "{{ crond_pattern }}"
state: started
enabled: yes
when: ansible_virtualization_type != 'docker'
register: cron_status
until: cron_status.state == "started"
retries: 3
delay: 3
## CUPS ##
@@ -76,6 +81,11 @@
pattern: "{{ sshd_pattern }}"
state: reloaded
enabled: yes
when: ansible_virtualization_type != 'docker'
register: sshd_status
until: sshd_status.state == "started"
retries: 3
delay: 3
## JournalCTL ##
@@ -96,3 +106,24 @@
state: stopped
enabled: no
ignore_errors: yes
## NTP ##
- name: General | Software | Services | NTP | Enable
service:
name: "{{ ntp_server }}"
pattern: "{{ ntp_server }}"
state: started
enabled: yes
when: ansible_virtualization_type != 'docker'
register: ntp_status
until: ntp_status.state == "started"
retries: 3
delay: 3
## Timezone ##
# TBD/TODO:
# Add a field to general.yml config file which gets applied via timedatectl and /etc/localtime.
# Example of what to do to file:
# /etc/localtime -> ../usr/share/zoneinfo/America/Phoenix

View File

@@ -9,6 +9,9 @@
- name: General | Software | Swap | Check For Swapfile
stat:
path: "{{ swap_file }}"
get_attributes: false
get_checksum: false
get_mime: false
register: swap_check
- name: General | Software | Swap | Install Block

View File

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

View File

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

View File

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

View File

@@ -34,18 +34,21 @@
- name: Workstation | Linux | Flatpak Distro | Flatpak | Arrays
set_fact:
flatpaks_generic:
- { app: "org.libreoffice.LibreOffice", name: "office", extra: "" }
- { app: "org.mozilla.firefox", name: "firefox-flatpak", 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: "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: "" }
- { app: "app.grayjay.Grayjay", name: "grayjay", extra: "" }
- { app: "com.github.xournalpp.xournalpp", name: "xournal", 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: "" }
@@ -54,6 +57,7 @@
- { app: "org.tenacityaudio.Tenacity", name: "tenacity", extra: "" }
- { app: "io.lmms.LMMS", name: "lmms", extra: "" }
- { app: "net.sourceforge.VMPK", name: "vmpk", extra: "" }
- { app: "org.musicbrainz.Picard", name: "picard", extra: "" }
flatpaks_gaming:
- { app: "com.valvesoftware.Steam", name: "steam", extra: "" }
- { app: "com.play0ad.zeroad", name: "zeroad", extra: "" }
@@ -67,14 +71,14 @@
- { 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: "io.lbry.lbry-app", name: "lbry", extra: "dbus-launch" } # 2023-09-01, Noticed it is no longer supported.
- { app: "chat.delta.desktop", name: "deltachat", extra: "" } # 2023-12-18, No longer used.
- { app: "org.gnome.Geary", name: "geary", extra: "" } # 2024-12-15, No longer used.
- { 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 #

View File

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

View File

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

View File

@@ -39,8 +39,18 @@
- "{{ evolution }}"
- "{{ evolution }}*"
- gparted
- hugo
- wireless-tools
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

View File

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

View File

@@ -12,17 +12,18 @@
, 'org.gnome.Nautilus.desktop'
, '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'
, '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.telegram.desktop.desktop'
, 'com.discordapp.Discord.desktop'
]"
dconf_terminal: gnome-terminal
dconf_theme: Adwaita-dark
@@ -39,6 +40,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 +221,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
@@ -265,6 +274,13 @@
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 ##
sleep 0 ||

View File

@@ -3,7 +3,7 @@
# https://dwm.suckless.org/
# https://sites.google.com/site/lazyboxx/-articles/dwm-a-newbie-s-guide#TOC-Status-Bar
#TODO: Move this to tasks/shared/ pasth rather than tasks/linux/.
#TODO: Move this to tasks/shared/ path rather than tasks/linux/.
#TODO: Generate files based on blockinfile.
#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.
@@ -23,14 +23,14 @@
## Download ##
- name: Workstation | Linux | Software | DWM | Git Clone
git:
git:
repo: https://git.suckless.org/dwm
dest: "{{ dwm_install_dir }}"
clone: yes
force: yes
- name: Workstation | Linux | Software | DWM | Git Clone (st)
git:
git:
repo: https://git.suckless.org/st
dest: "{{ st_install_dir }}"
clone: yes
@@ -78,3 +78,16 @@
owner: root
group: "{{ root_group }}"
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"