100 Commits
main ... dev

Author SHA1 Message Date
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
23 changed files with 738 additions and 42 deletions

View File

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

View File

@@ -2,7 +2,7 @@
# Define program names for package builtin. # Define program names for package builtin.
# This file is for ALL systems and should not include UI components. # This file is for ALL systems and should not include UI components.
- name: General | Facts | Packages | Shared Defaults - name: General | Facts | Package | Shared Defaults
set_fact: set_fact:
sshfs: sshfs sshfs: sshfs
tar: tar tar: tar
@@ -12,7 +12,7 @@
dig: dig dig: dig
neofetch: neofetch neofetch: neofetch
- name: General | Facts | Packages | Parrot OS Fixes - name: General | Facts | Package | Parrot OS Fixes
set_fact: set_fact:
ansible_pkg_mgr: "apt" ansible_pkg_mgr: "apt"
ansible_python_interpreter: "/usr/bin/python3" ansible_python_interpreter: "/usr/bin/python3"
@@ -56,10 +56,15 @@
encfs: fusefs-encfs encfs: fusefs-encfs
when: ansible_system == "FreeBSD" when: ansible_system == "FreeBSD"
- name: General | Facts | Package | dnf (Fixes) # TBD: Fix + test package names: mlocate, dig, neofetch
set_fact:
ansible_pkg_mgr: dnf
when: ansible_pkg_mgr in ("dnf5")
- name: General | Facts | Package | dnf - name: General | Facts | Package | dnf
set_fact: set_fact:
sshfs: fuse-sshfs sshfs: fuse-sshfs
locate: mlocate locate: plocate
opensshd: openssh opensshd: openssh
microcode_amd: microcode_ctl microcode_amd: microcode_ctl
microcode_intel: microcode_ctl microcode_intel: microcode_ctl

View File

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

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

@@ -34,10 +34,9 @@ xsetroot -solid "$purple"
# slstatus, from Suckless # # slstatus, from Suckless #
#exec slstatus & #exec slstatus &
# Custom # # Custom Setup #
while true; do source "`which dwm-status.function`"
xsetroot -name "`whoami`@`hostname` `date +"%Y-%m-%d %H:%M:%S"`" dwm-status &
done &
## Start ## ## 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

View File

@@ -48,7 +48,7 @@ fi
if [[ -e "$BACKUP" ]]; then if [[ -e "$BACKUP" ]]; then
ls -alh "$BACKUP" ls -alh "$BACKUP"
echo "*** '$BACKUP' created successfully! ***"s echo "*** '$BACKUP' created successfully! ***"
else else
echo "*** '$BACKUP' not found! ***" echo "*** '$BACKUP' not found! ***"
exit 1 exit 1

103
setup.sh
View File

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

View File

@@ -26,7 +26,7 @@
blockinfile: blockinfile:
path: "{{ gen_file }}" path: "{{ gen_file }}"
block: | block: |
; Please note that all potions require lowercase keys and values. ; Please note that all portions require lowercase keys and values.
; ;
;;;;;;;;;;;;;;;;;;;; Basic Options ;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;; Basic Options ;;;;;;;;;;;;;;;;;;;;
; ;

View File

@@ -453,8 +453,8 @@
return 0 return 0
fi fi
docker compose down &&
docker compose build && docker compose build &&
docker compose down &&
docker compose up -d docker compose up -d
if [[ -n "$1" ]]; then if [[ -n "$1" ]]; then
@@ -475,9 +475,9 @@
return 0 return 0
fi fi
docker compose down &&
docker compose pull && docker compose pull &&
docker compose build && docker compose build &&
docker compose down &&
docker compose up -d docker compose up -d
if [[ -n "$1" ]]; then if [[ -n "$1" ]]; then
@@ -519,12 +519,12 @@
docker ps docker ps
return; return;
fi fi
echo "*** Going Down ***" &&
docker compose down &&
echo "*** Upgrading Images ***" && echo "*** Upgrading Images ***" &&
docker compose pull && docker compose pull &&
echo "*** Building Containers ***" && echo "*** Building Containers ***" &&
docker compose build && docker compose build &&
echo "*** Going Down ***" &&
docker compose down &&
echo "*** Starting Daemons ***" && echo "*** Starting Daemons ***" &&
docker compose up -d && docker compose up -d &&
echo "*** Following Log ***" && echo "*** Following Log ***" &&
@@ -564,6 +564,16 @@
echo -e "\n*** `basename $project` ***" echo -e "\n*** `basename $project` ***"
cd $project cd $project
if [[ -d .git ]]; then if [[ -d .git ]]; then
git ls-remote --exit-code --heads origin dev
dev_exists="$?"
if [[ "$dev_exists" == 0 ]]; then
git switch dev
elif [[ "$dev_exists" == 2 ]]; then
git switch main
else
echo "ERROR: Unknown status for dev_exists, '$dev_exists'."
continue
fi
git pull git pull
git push git push
else else
@@ -783,16 +793,70 @@
date "+%Y%m%d" date "+%Y%m%d"
} }
function_backup: | function_backup: |
export BACKUP_DIR="/srv/backup"
function backup { function backup {
/usr/local/bin/backup_system.sh /usr/local/bin/backup_system.sh
} }
alias backup-system="backup" alias backup-system="backup"
alias system-backup="backup" alias system-backup="backup"
alias check-backups="ll /srv/backup" alias check-backups="ll $BACKUP_DIR"
function clean-backup { function clean-backup {
sh -c "rm -rfv /srv/backup/*" sh -c "rm -rfv $BACKUP_DIR/*"
} }
alias clean-backups="clean-backup" 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: |
function log { function log {
echo -e "$1" echo -e "$1"
@@ -881,6 +945,85 @@
alias_sudo: | alias_sudo: |
# Allows for alias expansions when using sudo, such as doing "sudo ll". # Allows for alias expansions when using sudo, such as doing "sudo ll".
alias sudo="sudo " alias sudo="sudo "
function_load_branch: |
# Change a branch to point at another.
function load-branch {
rcvr="$1" # branch which we want to modify
base="$2" # branch with the changes we want
if [[ "$rcvr" == "main" ]]; then
echo "*** ERROR: Are you nuts, fool!? Not main! Do it manually! ***"
exit 1
fi
if [[ -z "$base" ]]; then
if [[ "$rcvr" == "prod" ]]; then
base="stage"
elif [[ "$rcvr" == "stage" ]]; then
base="dev"
else
echo "* Unsure which branch to use for '$rcvr'. Please specify."
exit 1
fi
echo "* Base was not specified, using '$base' for '$rcvr'."
else
echo "* Requested pointing '$rcvr' branch to '$base'."
fi
echo -e "\n* Ensuring we are on base branch '$base'." &&
git switch "$base" &&
echo -e "\n* Changing pointer for '$rcvr' to '$base'." &&
git branch -f "$rcvr" "$base" &&
#echo -e "\n* Switching to branch '$rcvr'." &&
#git switch "$rcvr" &&
echo -e "\n* Forcing push on branch '$rcvr'." &&
git push --force --set-upstream origin "$rcvr" &&
echo -e "\n* Done! Displaying list of remote branches." &&
git ls-remote --heads | sort
if [[ "$base" != "dev" ]]; then
echo -e "\n* Checking if a dev branch exists."
git ls-remote --exit-code --heads origin dev
dev_exists="$?"
if [[ "$dev_exists" == 0 ]]; then
echo -e "\n* Switching back to dev."
git switch dev
elif [[ "$dev_exists" == 2 ]]; then
echo -e "\n* Switching back to main."
git switch main
else
echo "*** ERROR: Unknown status for dev_exists, '$dev_exists'. ***"
fi
fi
echo -e "\n* Verifying which branch we're on."
git branch
}
alias load-prod="load-branch prod"
alias load-stage="load-branch stage"
alias rollback-prod="load-branch prod main"
alias rollback-stage="load-branch stage prod"
alias rollback-dev="load-branch dev stage"
alias reset-prod="load-branch prod main"
alias reset-stage="load-branch stage main"
alias reset-dev="load-branch dev main"
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
- name: General | Account Management | Users | Files | Common Variable - name: General | Account Management | Users | Files | Common Variable
set_fact: set_fact:
@@ -952,10 +1095,15 @@
{{ alias_ansible_facts }} {{ alias_ansible_facts }}
{{ function_now }} {{ function_now }}
{{ function_backup }} {{ function_backup }}
{{ function_pull_prod_backups }}
{{ function_log }} {{ function_log }}
{{ function_debian_upgrade }} {{ function_debian_upgrade }}
{{ function_ebook_convert }} {{ function_ebook_convert }}
{{ alias_sudo }} {{ alias_sudo }}
{{ function_load_branch }}
{{ alias_reload_bash }}
{{ alias_hugo_server }}
{{ global_functions }}
- name: General | Account Management | Users | Files | .bashrc - name: General | Account Management | Users | Files | .bashrc
blockinfile: blockinfile:
@@ -1025,3 +1173,17 @@
- .bashrc - .bashrc
- .zshrc - .zshrc
- .vimrc - .vimrc
- name: General | Account Management | Users | Files | Helper Functions (Reset)
shell: "rm -v {{ global_bin }}/*.function"
- name: General | Account Management | Users | Files | Helper Functions
copy:
src: "{{ item }}"
dest: "{{ global_bin }}"
owner: root
group: "{{ root_group }}"
mode: 0755
with_fileglob:
- "functions/*.function"

View File

@@ -12,7 +12,7 @@
user: ansible user: ansible
name: "Ansible Sync" name: "Ansible Sync"
minute: "*/30" minute: "*/30"
job: "sleep $(( $RANDOM / 20 )); sudo {{ ansible_pull_exec.stdout }} -v -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 state: present
disabled: "{{ 'yes' if no_telem else 'no' }}" disabled: "{{ 'yes' if no_telem else 'no' }}"
@@ -21,6 +21,6 @@
user: ansible user: ansible
name: "Ansible Weekly Forced Sync" name: "Ansible Weekly Forced Sync"
special_time: daily special_time: daily
job: "sleep $(( $RANDOM / 1 )); sudo {{ ansible_pull_exec.stdout }} -v -U {{ git_repo_http }} --checkout {{ branch }}" job: "bash -c 'sleep $(( $RANDOM / 1 )); sudo {{ ansible_pull_exec.stdout }} -v -U {{ git_repo_http }} --checkout {{ branch }}'"
state: present state: present
disabled: "{{ 'yes' if no_telem else 'no' }}" disabled: "{{ 'yes' if no_telem else 'no' }}"

View File

@@ -82,6 +82,15 @@
when: ansible_distribution == "Ubuntu" when: ansible_distribution == "Ubuntu"
ignore_errors: yes ignore_errors: yes
- name: General | Software | Packages | Add Generic Kernel + Headers (Debian)
package:
name:
- linux-image-amd64
- linux-headers-amd64
state: present
when: ansible_distribution == "Debian"
ignore_errors: yes
- name: General | Software | Services | Install killall (Looking at you, Debian) - name: General | Software | Services | Install killall (Looking at you, Debian)
package: package:
name: psmisc name: psmisc

View File

@@ -43,6 +43,7 @@
- { app: "org.gimp.GIMP", name: "gimp", extra: "" } - { app: "org.gimp.GIMP", name: "gimp", extra: "" }
- { app: "org.libreoffice.LibreOffice", name: "office", extra: "" } - { app: "org.libreoffice.LibreOffice", name: "office", extra: "" }
- { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" } - { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" }
- { app: "app.grayjay.Grayjay", name: "grayjay", extra: "" }
flatpaks_coding: flatpaks_coding:
- { app: "com.vscodium.codium", name: "codium-flatpak", extra: "" } - { app: "com.vscodium.codium", name: "codium-flatpak", extra: "" }
- { app: "com.google.AndroidStudio", name: "android-studio", extra: "" } - { app: "com.google.AndroidStudio", name: "android-studio", extra: "" }

View File

@@ -12,16 +12,18 @@
, 'org.gnome.Nautilus.desktop' , 'org.gnome.Nautilus.desktop'
, 'io.gitlab.librewolf-community.desktop', 'librewolf.desktop' , 'io.gitlab.librewolf-community.desktop', 'librewolf.desktop'
, 'org.mozilla.firefox.desktop', 'firefox.desktop' , 'org.mozilla.firefox.desktop', 'firefox.desktop'
, 'org.signal.Signal.desktop', 'signal-desktop.desktop'
, 'org.telegram.desktop.desktop'
, 'com.discordapp.Discord.desktop'
, 'com.vscodium.codium.desktop' , 'com.vscodium.codium.desktop'
, 'codium.desktop' , 'codium.desktop'
, 'org.shotcut.Shotcut.desktop' , 'org.shotcut.Shotcut.desktop'
, 'io.lmms.LMMS.desktop' , 'io.lmms.LMMS.desktop'
, 'app.grayjay.Grayjay.desktop'
, 'io.lbry.lbry-app.desktop', 'lbry.desktop' , 'io.lbry.lbry-app.desktop', 'lbry.desktop'
, 'com.valvesoftware.Steam.desktop' , 'com.valvesoftware.Steam.desktop'
, 'net.lutris.Lutris.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_terminal: gnome-terminal
dconf_theme: Adwaita-dark dconf_theme: Adwaita-dark

View File

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