30 Commits

Author SHA1 Message Date
5d6cb3a843 feat: Adds tmux config to devcontainer-env. 2026-02-01 16:56:30 -05:00
5561f3ccaf feat: Updates devcontainer-env to pull nvim submodule. 2026-02-01 15:57:24 -05:00
3a82ae15df feat: Updates neovim config. 2026-02-01 14:47:04 -05:00
d26ca008c0 feat: Adds devcontainer-env script, which installs minimal dotfiles when working in a devcontainer. 2026-02-01 13:00:13 -05:00
d29876b367 feat: Adds ste alias to perform swift tests with code coverage enabled. 2026-02-01 12:11:04 -05:00
24440f845b feat: Updates to nvim config 2026-01-30 10:08:41 -05:00
4a08de9573 fix: Fixes typo in hyprtoolkit config 2026-01-06 10:39:25 -05:00
b1c3b16cc6 feat: Updates neovim config. 2026-01-05 10:54:06 -05:00
b159565288 feat: Adds swiftly env support to zshrc. 2025-12-31 12:27:35 -05:00
df876d2cac feat: Adds repos script to clone a few repositories on new installation / machine. 2025-12-18 10:40:08 -05:00
e052f0c394 fix: Fixes dp function 2025-12-18 10:07:59 -05:00
0d916fe960 feat: Updates system to include cifs utils and mounts. 2025-12-16 13:06:09 -05:00
1b504cca65 fix: Moves aap script, so that it can be used from airflow assessment template scripts. 2025-12-15 12:29:43 -05:00
fb0e4d705b feat: Adds airflow assessment generation to hpa scripts. 2025-12-15 12:21:13 -05:00
b9f248926b feat: Updates to qcal configuration. 2025-12-10 14:57:20 -05:00
f798ef2e4e feat: Adds runs/calendar and updates hyprkeybinds. 2025-12-10 14:25:03 -05:00
fa47fcaed7 feat: Moves hyprland workspace configuration to it's own file. 2025-12-10 11:22:44 -05:00
f39a9113d6 feat: Moves hyprland workspace configuration to it's own file. 2025-12-10 11:21:50 -05:00
207e4469b2 feat: Adds jellyfin-tui run and configuration, updates ghostty font size. 2025-12-10 10:01:24 -05:00
047c241df8 feat: Adds localsend keybind. 2025-12-09 16:38:00 -05:00
b8bf70f117 feat: Adds todo for setting up pipewire. 2025-12-06 14:04:52 -05:00
bec884f866 feat: Adds mail todo, updates hyprland run to not use '-git' packages. 2025-12-05 13:26:21 -05:00
943427b3e1 feat: Adds runs/after/localsend to set firewall ports. 2025-12-04 08:36:54 -05:00
eae3bfbc90 feat: Adds github-cli to runs/dev. 2025-11-25 15:51:57 -05:00
6621475808 feat: Removes unused hyprworkspaces.conf 2025-11-24 08:01:09 -05:00
090a0681ca feat: Reverts to not including hyprworkspaces.conf. 2025-11-23 08:17:56 -05:00
3acaf486c0 feat: Updates nvim config. 2025-11-22 12:58:49 -05:00
80c6eefe8c feat: Updates nvim config. 2025-11-22 08:56:15 -05:00
0c80780ade feat: Changes prettier line width to be 100, which is better on my laptop. 2025-11-22 08:32:24 -05:00
5ea0ef74e4 feat: Updates nvim config. 2025-11-21 20:46:51 -05:00
39 changed files with 664 additions and 258 deletions

View File

@@ -14,6 +14,9 @@ A list of in-progress and completed todo's.
clipboard_history.json file and not letting clipse do it automatically).
- [x] Need to add the following system packages for neovim/render-markdown.nvim
- [x] `libtexprintf`
- [ ] Add pipewire-zeroconf to runs.
- [ ] Setup pipewire config to allow streaming output to homepod's.
- [See arch.wiki](https://wiki.archlinux.org/title/PipeWire)
### Bootstrapping a new machine
@@ -24,6 +27,7 @@ A list of in-progress and completed todo's.
- [ ] Need to ensure ssh keys are setup before private submodules are loaded / installed,
so I need to make sure that Yubikey setup runs early and works for ssh authentication.
- [ ] Setup a new machine / virtual machine to test, as it's hard to test the scripts once a machine is setup.
- [ ] Need to add `repos` script when bootstrapping.
### Keyboard / kanata
@@ -49,3 +53,7 @@ A list of in-progress and completed todo's.
- [ ] Look into install packages with `nvim --headless`, not sure if this possible when using the new package
manager builtin to neovim as it prompts for user input to install packages.
- With lazy this was done with `nvim --headless "+Lazy! sync" +qa`
### Mail
- [ ] Remove outlook / office email setup, this has been moved to proton.

76
devcontainer-env Executable file
View File

@@ -0,0 +1,76 @@
#!/usr/bin/env bash
set -e
set -o nounset
set -o pipefail
# Intsalls appropriate dotfiles inside a devcontainer context.
XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-"$HOME/.config"}
DEV_ENV=${DEV_ENV:-""}
if [ ! -d "$DEV_ENV" ]; then
echo "[ERROR]: DEV_ENV variable does not exist."
exit 1
fi
log() {
echo "$*"
}
copy_dir() {
local dir=${1:-""}
local path="${DEV_ENV}/${dir}"
if [ -z "$dir" ] || [ ! -d "$path" ]; then
log "[ERROR]: Directory does not exist: $dir"
exit 1
else
log "Copying dir: $dir"
cp -R "$path" "$XDG_CONFIG_HOME"
fi
}
copy_file() {
local file=${1:-""}
if [[ -z "$file" ]] || [[ ! -f "$file" ]]; then
log "[ERROR]: file does not exist: $file"
exit 1
else
log "Copying file: $file"
cp "$DEV_ENV/$file" "$HOME"
fi
}
# MAIN
dirs=(
env/.config/eza
env/.config/git
env/.config/ripgrep
env/.config/starship
env/.config/yazi
env/.config/zsh
)
files=(
env/.markdownlint.jsonc
env/.prettierrc
env/.tmux.conf
env/.zshenv
)
for dir in "${dirs[@]}"; do
copy_dir "$dir"
done
for file in "${files[@]}"; do
copy_file "$file"
done
# Install neovim config
git submodule update --init --remote env/.config/nvim
source env/.config/nvim/install.sh
# Install my scripts
cp -R env/.local/scripts "$HOME/.local"

75
env/.config/aap/config.toml vendored Normal file
View File

@@ -0,0 +1,75 @@
# This config is setup for running inside the docker container.
#
# NOTE:
# Configuration settings for the `hpa` command line tool.
# You can delete settings that are not applicable to your use case.
# Default arguments / options that get passed into `ansible-playbook` commands.
# WARNING: Do not put arguments / options that contain spaces in the same string,
# they should be separate strings, for example do not do something like
# ['--tags debug'], instead use ['--tags', 'debug'].
#
args = ['--tags', 'debug']
# Set to true if you want to pass the vault args to `ansible-playbook` commands.
useVaultArgs = true
# NOTE:
# Configuration for running the generate command(s). This allows custimizations
# to the files that get used to generate the final output (generally a pdf).
# See `pandoc --help`. Below are the defaults that get used, which only need
# adjusted if your template does not follow the default template design or if
# you add extra files to your template that need to be included in the final
# output. Also be aware that any of the files specified in the `files` or
# `includeInHeader` options, need to be inside the `buildDirectory` when generating
# the final output file.
# [generate]
# this relative to the project directory.
# buildDirectory = '.build'
# pdfEngine = 'xelatex'
# includeInHeader = [
# 'head.tex',
# 'footer.tex'
# ]
# files = [
# 'Report.md',
# 'Definitions.md'
# ]
# outputFileName = 'Report'
# NOTE:
# These are more for local development of the ansible playbook and should not be needed
# in most cases. Uncomment the lines if you want to customize the playbook and use it
# instead of the provided / default playbook.
[playbook]
directory = '/root/.local/share/hpa/playbook'
inventory = '/root/.local/share/hpa/playbook/inventory.ini'
version = 'main'
# NOTE:
# These are to declare where your template files are either on your local system or
# a remote git repository.
[template]
# The directory path on your local system to the template files.
directory = '/root/.local/share/hpa/airflow-assessment-template'
vars = 'repo_vars'
# The url to a git repository that contains your template files.
# url = 'https://git.example.com/consult-template.git'
# The version, tag, branch, or sha of the template files to clone from the remote
# template repository. In general it is best practice to use a version instead of a
# branch.
# version = '1.0.0'
# NOTE:
# Holds settings for `ansible-vault` commands.
[vault]
# Arguments to pass to commands that use `ansible-vault`, such as encrypting or decrypting
# files.
args = ['--vault-password-file=/run/secrets/vault-pass']
# An id to use when encrypting `ansible-vault` files.
#encryptId = 'myId'

View File

@@ -3,7 +3,7 @@ theme = Catppuccin Mocha
confirm-close-surface = false
font-family = "Fira Code"
font-size = 13
font-size = 18
font-thicken = false
window-save-state = always

View File

@@ -6,7 +6,7 @@
# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:
exec-once = pidof hyprpaper | uwsm app -- hyprpaper
exec-once = uwsm app -- hyprpaper
exec-once = pidof hypridle | uwsm app -- hypridle
exec-once = pidof hyprlauncher | uwsm app -- hyprlauncher -d
exec-once = pidof swaync | uwsm app -- swaync

View File

@@ -41,9 +41,9 @@ bindd = $mainMod, A, [A]i - launch / focus, exec,
bindd = $mainMod SHIFT, A, [A]i - new window, exec, $pwa "https://ollama.housh.dev"
bindd = $mainMod, B, New [b]rowser, exec, $browser
bindd = $mainMod SHIFT, B, New private [b]rowser, exec, $browser --incognito
bindd = $mainMod, C, [C]alendar, exec, $pwa --or-focus "https://www.icloud.com/calendar"
bindd = $mainMod, C, [C]alendar, togglespecialworkspace, calendar
bindd = $mainMod SHIFT, C, [C]onfig folder in tmux session, exec, $terminal -e $tmuxSessionator ~/.config
bindd = $mainMod, D, [D]ispatch app - special workspace, exec, $pwa --special dispatch $housecallPro
bindd = $mainMod, D, [D]ispatch app - special workspace, togglespecialworkspace, dispatch
bindd = $mainMod SHIFT, D, [D]ispatch app - new window, exec, $pwa --new $housecallPro
bindd = $mainMod, E, [E]mail - personal, exec, $pwa --or-focus "https://mail.proton.me"
bindd = $mainMod SHIFT, E, [E]mail - work, exec, $scripts/launch --or-focus thunderbird uwsm app -- thunderbird
@@ -53,14 +53,15 @@ bindd = $mainMod, G, [G]itea, exec,
bindd = $mainMod SHIFT, G, [G]ithub, exec, $pwa --or-focus "https://github.com"
bindd = $mainMod, H, Focus window - left, movefocus, l # move window focus using vim keys
bindd = $mainMod SHIFT, H, Workspace - back, workspace, -1
bindd = $mainMod, I, Localsend, exec, $scripts/launch --or-close localsend uwsm app -- localsend
bindd = $mainMod, J, Focus window - down, movefocus, d # move window focus using vim keys
bindd = $mainMod, K, Focus window - up, movefocus, u # move window focus using vim keys
bindd = $mainMod, L, Focus window - right, movefocus, r # move window focus using vim keys
bindd = $mainMod SHIFT, L, Workspace - forward, workspace, +1
bindd = $mainMod, M, [M]usic - apple, exec, $pwa --special music "https://music.apple.com"
bindd = $mainMod, M, [M]usic - jellyfin-tui, togglespecialworkspace, music
bindd = $mainMod SHIFT, M, [M]enu bar - toggle visible, exec, $scripts/waybarctl --toggle
bindd = $mainMod, O, Purchase [o]rders, exec, $pwa --special dispatch "https://po.housh.dev"
bindd = $mainMod, P, [P]assword manager, exec, $pwa --special pass "https://pass.proton.me"
bindd = $mainMod, P, [P]assword manager, togglespecialworkspace, pass
bindd = $mainMod SHIFT, P, [P]hotos, exec, $pwa --or-focus "https://photos.housh.dev"
bindd = $mainMod SHIFT, R, [R]estart menu bar, exec, $scripts/waybarctl --restart
bindd = $mainMod, S, Toggle [s]pecial workspace, togglespecialworkspace, magic # use $windowMod S to send window to the special workspace

View File

@@ -9,6 +9,7 @@
source = ~/.config/hypr/hyprenv.conf
source = ~/.config/hypr/hyprmonitors.conf
source = ~/.config/hypr/hyprwindows.conf
source = ~/.config/hypr/hyprworkspaces.conf
source = ~/.config/hypr/hyprkeybinds.conf
source = ~/.config/hypr/hyprinput.conf
source = ~/.config/hypr/hyprautostart.conf

View File

@@ -4,7 +4,5 @@
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor= ,preferred,auto,auto
#monitor = HDMI-A-1, preferred, 0x0, auto
#monitor = HDMI-A-1, preferred, 0x0, 1.66667

View File

@@ -1,6 +1,6 @@
background = rgb(1e1e2e)
base = rgb(b4befe)
alternate_base = rgb(cdd6f4))
alternate_base = rgb(cdd6f4)
text = rgb(cdd6f4)
bright_text = rgb(89b4fa)
accent = rgb(b4befe)

View File

@@ -1,53 +1,47 @@
##############################
### WINDOWS AND WORKSPACES ###
##############################
###############
### WINDOWS ###
###############
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# windowrule = float, tag:floating-window
# windowrule = center, tag:floating-window
# windowrule = size 60% 60%, tag:floating-window
#
windowrule = float, tag:floating-window
windowrule = center, tag:floating-window
windowrule = size 60% 60%, tag:floating-window
# Weather tui
windowrule = float, class:^(com.ghostty.weather)$
windowrule = center, class:^(com.ghostty.weather)$
windowrule = size 90% 80%, class:^(com.ghostty.weather)$
# Force windows to be a floating window
windowrule = tag +floating-window, class:^(blueberry.py|org.gnome.Nautilus|com.ghostty.float)$
windowrule = tag +floating-window, class:^(com.ghostty.windowctl)$
windowrule = tag +floating-window, class:^(com.ghostty.utils-launcher)$
windowrule = tag +floating-window, class:^(com.ghostty.homelab-launcher)$
# Force to stay focused when visible.
windowrule = stayfocused, class:(blueberry.py)
windowrule = stayfocused, class:Pinentry.gtk
windowrule = stayfocused, class:com.ghostty.float
windowrule = stayfocused, class:com.ghostty.windowctl
windowrule = stayfocused, class:^(com.ghostty.utils-launcher)$
# Clipboard history tui in floating window.
windowrule = tag +floating-window, class:.*clipse.*
windowrule = stayfocused, class:.*clipse.*
# Ignore maximize requests from apps. You'll probably like this.
windowrule = suppressevent maximize, class:.*
# Just a dash of opacity by default.
windowrule = opacity 0.97 0.92, class:.*
# No opacity on youtube.
windowrule = opacity 1.0, class:.*youtube.com.*
# Fix some dragging issues with XWayland
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
workspace = special:hidden, invisible
workspace = special:pass, class:.*pass.proton.me.*
workspace = special:dispatch, class:.*pro.housecallpro.com.*
# To get more information about a windows class, title, XWayland status or its size, you can use `hyprctl clients`. (From Hyprland Wiki)
windowrulev2 = float,class:^(one.alynx.showmethekey)$
windowrulev2 = float,class:^(showmethekey-gtk)$ # make window floating
windowrulev2 = pin,class:^(showmethekey-gtk)$ # pin window
# # Weather tui
# windowrule = float, class:^(com.ghostty.weather)$
# windowrule = center, class:^(com.ghostty.weather)$
# windowrule = size 90% 80%, class:^(com.ghostty.weather)$
#
# # Force windows to be a floating window
# windowrule = tag +floating-window, class:^(blueberry.py|org.gnome.Nautilus|com.ghostty.float)$
# windowrule = tag +floating-window, class:^(com.ghostty.windowctl)$
# windowrule = tag +floating-window, class:^(com.ghostty.utils-launcher)$
# windowrule = tag +floating-window, class:^(com.ghostty.homelab-launcher)$
#
# # Force to stay focused when visible.
# windowrule = stayfocused, class:(blueberry.py)
# windowrule = stayfocused, class:Pinentry.gtk
# windowrule = stayfocused, class:com.ghostty.float
# windowrule = stayfocused, class:com.ghostty.windowctl
# windowrule = stayfocused, class:^(com.ghostty.utils-launcher)$
#
# # Clipboard history tui in floating window.
# windowrule = tag +floating-window, class:.*clipse.*
# windowrule = stayfocused, class:.*clipse.*
#
# # Ignore maximize requests from apps. You'll probably like this.
# windowrule = suppressevent maximize, class:.*
#
# # Just a dash of opacity by default.
# windowrule = opacity 0.97 0.92, class:.*
# # No opacity on youtube.
# windowrule = opacity 1.0, class:.*youtube.com.*
#
# # Fix some dragging issues with XWayland
# windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
#
# # To get more information about a windows class, title, XWayland status or its size, you can use `hyprctl clients`. (From Hyprland Wiki)
# windowrulev2 = float,class:^(one.alynx.showmethekey)$
# windowrulev2 = float,class:^(showmethekey-gtk)$ # make window floating
# windowrulev2 = pin,class:^(showmethekey-gtk)$ # pin window

View File

@@ -1,14 +1,15 @@
##################
### WORKSPACES ###
##################
# Set work spaces 1-5 to be on external monitor
workspace = 1, monitor:1
workspace = 2, monitor:1
workspace = 3, monitor:1
workspace = 4, monitor:1
workspace = 5, monitor:1
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Set work spaces 6-10 to be on internal monitor
workspace = 6, monitor:0
workspace = 7, monitor:0
workspace = 8, monitor:0
workspace = 9, monitor:0
workspace = 10, monitor:0
$scripts = ~/.local/scripts/hypr
$pwa = $scripts/webapp launch
$housecallPro = $pwa "https://pro.housecallpro.com/app/calendar_new"
workspace = special:hidden, invisible
workspace = special:pass,on-created-empty: $pwa "https://pass.proton.me"
workspace = special:dispatch,on-created-empty: $housecallPro && $housecallPro
workspace = special:music,on-created-empty: ghostty --class=com.ghostty.music -e jellyfin-tui
workspace = special:calendar,on-created-empty: uwsm app -- gnome-calendar

View File

@@ -27,7 +27,7 @@
;; Variables
(defvar
tap-higher 400
tap-time 200
tap-time 150
tap-time-plus 300
hold-time-plus 300
hold-time 200

View File

@@ -176,6 +176,7 @@ alias pc='gopass show --clip' # get an attribute of a password file and
alias reload='exec zsh -l' # reload the shell, useful when making changes.
alias s='swift' # shorthand to access swift commands
alias st='swift test' # swift test
alias ste='swift test --enable-code-coverage' # swift test with code coverage enabled.
alias sb='swift build' # swift build
alias syu='yay -Syu' # Update packages.
alias t='tmux' # access tmux quickly
@@ -207,6 +208,7 @@ source <(fzf --zsh)
_source_if "$ZDOTDIR/.zshrc-local"
_source_if "$LOCAL_ENV"
_source_if "$SCRIPTS/catppuccin-colors"
_source_if "$XDG_DATA_HOME/swiftly/env.sh"
# pnpm
export PNPM_HOME="$XDG_DATA_HOME/pnpm"

View File

@@ -7,6 +7,6 @@ function dp() {
local temperature=$1
local humidity=$2
/opt/homebrew/bin/psychrometrics dew-point --dry-bulb "$temperature" --relative-humidity "$humidity"
psychrometrics dew-point --dry-bulb "$temperature" --relative-humidity "$humidity"
}

47
env/.local/scripts/aap vendored Executable file
View File

@@ -0,0 +1,47 @@
#!/usr/bin/env bash
set -e
set -o nounset
set -o pipefail
# A wrapper script to run swift-hpa in a docker container and
# mount the correct volumes, etc.
#
# Make sure to run 'hpa-init' first on this machine to setup
# dependencies, if you have not done so already.
#
# To attach to a shell inside the container run:
# `hpa bash`
#
# To run ansible vault commands inside the container run:
# `hpa ansible-vault ...`
#
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
. "$SCRIPTS/utils/hpa/hpa.env"
############################## MAIN ##############################
# Don't pull images if they're prefixed with 'localhost'.
if echo "$HPA_DOCKER_IMAGE" | grep -vq "localhost"; then
# Check if we should pull the image prior to running.
last_pull="0"
if [[ -f "$HPA_AIRFLOW_CONFIG_DIR/.lastpull" ]]; then
last_pull=$(cat "$HPA_AIRFLOW_CONFIG_DIR/.lastpull")
fi
curr=$(date +%s)
diff=$((curr - last_pull))
if [[ $HPA_AUTO_PULL == "1" ]] && [[ $diff -gt "$HPA_AUTO_PULL_INTERVAL" ]]; then
. "$SCRIPTS/hpa-pull" "$HPA_AUTO_PULL_OPTS"
fi
fi
podman run --rm --interactive --tty \
--volume "$HPA_AIRFLOW_CONFIG_DIR":/root/.config/hpa:ro \
--volume "$HPA_DATA_DIR":/root/.local/share/hpa:ro \
--volume "$HPA_CONSULTS_DIR":/consults \
--volume "$PWD":/root/project \
--secret "$HPA_VAULT_SECRET_KEY" \
"$HPA_DOCKER_IMAGE:$HPA_DOCKER_TAG" "$@"

View File

@@ -38,6 +38,8 @@ if echo "$HPA_DOCKER_IMAGE" | grep -vq "localhost"; then
fi
fi
echo "ARGS: $@"
podman run --rm --interactive --tty \
--volume "$HPA_CONFIG_DIR":/root/.config/hpa:ro \
--volume "$HPA_DATA_DIR":/root/.local/share/hpa:ro \

View File

@@ -6,5 +6,6 @@ first_arg=${1:-""}
if [[ $first_arg == "-h" ]] || [[ $first_arg == "--help" ]]; then
. "$script" $*
else
# bash -c "$script $*" | tr -d '\r' | head -1
gum spin --show-output --title "$title" -- bash -c "$script $*" | tr -d '\r' | head -1
fi

View File

@@ -94,4 +94,5 @@ else
log "Cloning required template and playbook, if they don't exist"
[[ ! -d "$HPA_PLAYBOOK_DIR" ]] && git clone "$HPA_PLAYBOOK_URL" "$HPA_PLAYBOOK_DIR"
[[ ! -d "$HPA_CONSULT_TEMPLATE_DIR" ]] && git clone "$HPA_CONSULT_TEMPLATE_URL" "$HPA_CONSULT_TEMPLATE_DIR"
[[ ! -d "$HPA_AIRFLOW_TEMPLATE_DIR" ]] && git clone "$HPA_AIRFLOW_TEMPLATE_URL" "$HPA_AIRFLOW_TEMPLATE_DIR"
fi

View File

@@ -63,6 +63,9 @@ pull-playbook() {
pull-template() {
log --echo "Pulling template: '$HPA_CONSULT_TEMPLATE_DIR'"
pull-repo "$HPA_CONSULT_TEMPLATE_DIR"
log --echo "Pulling airflow assessment template: '$HPA_AIRFLOW_TEMPLATE_DIR'"
pull-repo "$HPA_AIRFLOW_TEMPLATE_DIR"
}
################################################################################
@@ -106,3 +109,4 @@ fi
[[ $playbook_flag == "1" ]] && pull-playbook
[[ $template_flag == "1" ]] && pull-template
date +%s >"$HPA_CONFIG_DIR/.lastpull"
date +%s >"$HPA_AIRFLOW_CONFIG_DIR/.lastpull"

View File

@@ -110,8 +110,8 @@ toggle_special() {
launch_application() {
log "Launching..."
log "'${launch_cmd[@]}'"
eval exec ${launch_cmd[@]}
log "'${launch_cmd[*]}'"
eval exec "${launch_cmd[*]}"
}
################################################################################

View File

@@ -17,7 +17,8 @@ LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
# Load environment / shared variables.
. "$SCRIPTS/utils/hpa/hpa.env"
declare no_git_flag no_push_flag date_opt
declare airflow_flag no_git_flag no_push_flag date_opt
airflow_flag="0"
no_git_flag="0"
no_push_flag="0"
date_opt=$(date '+%Y.%m.%d')
@@ -25,7 +26,8 @@ date_opt=$(date '+%Y.%m.%d')
usage() {
cat <<EOF
A utility script to generate a new home performance assessment project.
A utility script to generate a new home performance assessment project or
airflow assessment project.
All output from the 'hpa' command get suppressed so that this script can
be piped / used to automatically cd into the directory after creation to
@@ -41,6 +43,7 @@ USAGE:
$ $THIS <flags> <customer>
FLAGS:
-a | --airflow: Generate using the airflow assessment project template.
-d | --date: Override the date the project was started.
-g | --no-git: Do not initialize a git repository for the project.
-h | --help: Show this help page.
@@ -62,21 +65,32 @@ log() {
}
create() {
local customer container_dir
local customer container_dir script suffix
customer=${1:-""}
[[ -z $customer ]] &&
log --error "Must supply a customer name for the project" &&
exit 1
[[ ! -f $SCRIPTS/hpa ]] &&
log --error "Unable to find the 'hpa' script." &&
exit 1
log "Generating project for: '$customer'"
# Setup approriate configuration and project suffix.
if [[ $airflow_flag == "1" ]]; then
suffix="AAP"
script="$SCRIPTS/aap"
else
suffix="HPA"
script="$SCRIPTS/hpa"
fi
[[ ! -f $SCRIPTS/hpa ]] &&
log --error "Unable to find the script: '$script'." &&
exit 1
log "Using script: '$script'"
container_dir=$(
"$SCRIPTS/hpa" create --quiet "/consults/$date_opt.$customer"
"$script" create --quiet "/consults/$date_opt.$customer.$suffix"
)
echo "$HPA_CONSULTS_DIR/$(basename "$container_dir")"
}
@@ -129,6 +143,8 @@ declare customer output
while [[ $# -gt 0 ]]; do
if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
usage && exit 0
elif [[ $1 == "-a" ]] || [[ $1 == "--airflow" ]]; then
airflow_flag="1"
elif [[ $1 == "-d" ]] || [[ $1 == "--date" ]]; then
shift
date_opt="$1"

View File

@@ -33,6 +33,11 @@ HPA_CONSULT_ORIGIN_BASE_URL=${CONSULT_ORIGIN_BASE_URL:-"ssh://git@git.housh.dev:
HPA_CONSULT_TEMPLATE_DIR=${HPA_DATA_DIR}/template
HPA_CONSULT_TEMPLATE_URL="ssh://git@git.housh.dev:2222/hhe/consult-template.git"
# Airflow assessment vars.
HPA_AIRFLOW_CONFIG_DIR="${XDG_CONFIG_HOME}/aap"
HPA_AIRFLOW_TEMPLATE_DIR="${HPA_DATA_DIR}/airflow-assessment-template"
HPA_AIRFLOW_TEMPLATE_URL="ssh://git@git.housh.dev:2222/hhe/airflow-assessment-template.git"
export HPA_AUTO_PULL
export HPA_AUTO_PULL_INTERVAL
export HPA_AUTO_PULL_OPTS
@@ -47,3 +52,6 @@ export HPA_DOCKER_TAG
export HPA_PLAYBOOK_URL
export HPA_PLAYBOOK_DIR
export HPA_VAULT_SECRET_KEY
export HPA_AIRFLOW_CONFIG_DIR
export HPA_AIRFLOW_TEMPLATE_DIR
export HPA_AIRFLOW_TEMPLATE_URL

4
env/.prettierrc vendored Normal file
View File

@@ -0,0 +1,4 @@
{
"proseWrap": "always"
"printWidth": 100
}

View File

@@ -1,2 +0,0 @@
proseWrap: always
printWidth: 120

3
env/.zshenv vendored
View File

@@ -87,5 +87,8 @@ export STARSHIP_CONFIG="$XDG_CONFIG_HOME/starship/starship.toml"
export _ZO_DATA_DIR="$XDG_DATA_HOME"
unset _ZO_ECHO
# Suppress swift backtrace warnings.
export SWIFT_BACTRACE=enable=no
[ -f "$LOCAL_ENV" ] && source "$LOCAL_ENV"
[ -f "$ZDOTDIR/personal.env" ] && source "$ZDOTDIR/personal.env"

11
env/jellyfin-tui/config.gpg vendored Normal file
View File

@@ -0,0 +1,11 @@
-----BEGIN PGP MESSAGE-----
hF4DAAAAAAAAAAASAQdATOWmZnUO2KsVWqDMIPkJPBvEskExyaYdpYxcl4xqwyUw
8rPCTjCdJSbB36d7ly5+UaayXBZFn2IrGXfai7+IP11G92ocj4a8xHSwKZX9mSd8
0sABAVlTrLOO4BVWBpGnAsagfzXMGyYPi843KdnZg43b4IAx3hdR46NnjfjGjAZc
Ggf4kC+DuTT+Y0BRH8qRLU6kizxRvi13GEnxt0sTQqhNRA+hLbkXYWlZ3fLnf6YD
CIpMYowZmqwd6KH3ofFeNr+E5+HAaygU/61VH2pkZRzwwltiEZ4aQ+eWULELs6BF
z7nIB49nOZi2m7boSVVnfmknD6Z/QwZSmqakySZRlNNC19IqEoDl02H5cgHCNbQV
cTnyHQ==
=LRvL
-----END PGP MESSAGE-----

12
env/qcal/config.json.gpg vendored Normal file
View File

@@ -0,0 +1,12 @@
-----BEGIN PGP MESSAGE-----
hF4DAAAAAAAAAAASAQdAuiXPHaZd/bWttw/D3LtIXio0V9z5aKrqAKDCHofqDmow
F90ZOG8wwm3wsmoTSswSifiUUE8AK96ATgphvlxIf/bH+X9pVUPlgZRCPYR7hteI
0sBbAWWIYpJA43P5ndpuIUGiGwthRyxQLwWRVFkfZ5v5HLsf0FMVfO2f1azzape9
i+0Dz6XoTkDzmApQO46NrOHoI83RUQ7Tbe+AElnDfJT6tj2YaajkCPnvnqO55z54
38XOIP3t3eOt+JFugiJDblZCAI/fdzhxCAmqzyU0QZOR3Yl8B/d/8g1PQjPAObiG
F+spskYpIXZ0U+YNne4PWThhk0tMgq2rJUovQ6kCGjCnPnRR41UWBkGciXfvOR39
BbrBK4wsBTRmrM3Hvs41sZlYkIc6mS/PEs1H7gId8vKt3BGqTHN39+qv6aoSwbi8
GaNSRSuuMRsQnnUXBzgilXEnWA2oYncSD8pcorPDAe/gaRNV5+/dpQJrYjbYig==
=8rxb
-----END PGP MESSAGE-----

9
env/smbcredentials.gpg vendored Normal file
View File

@@ -0,0 +1,9 @@
-----BEGIN PGP MESSAGE-----
hF4DAAAAAAAAAAASAQdAvYM4C8bwyey5d33bXjxKnWe0dIsnk0j5KTpe3TzrLHUw
xWF1m3TwpgyRA6LiRHukJ9McoNwRQ7xCdp6XSF+7crNBQWj64/fm1fVymBcv5EkK
0ngBJ3I46PcNoVfjCh+1PmSzHFh3ahLU8u95FCL+IbvIrD0DdzntdNAthFSaiHuH
DrXiHhGkxuRj0UHi95DF3xi6ODrvC56xTg1jWKzzB+/LuZ6GKSPYd3u/iYmPn76y
wiFck8SezOvP0o71tcLa56SQgzSBiDTHL3A=
=8OSr
-----END PGP MESSAGE-----

56
repos Executable file
View File

@@ -0,0 +1,56 @@
#!/usr/bin/env bash
set -e
set -o nounset
set -o pipefail
DEST="$HOME/dev"
dry_run_flag="0"
log() {
if [[ $dry_run_flag == "1" ]]; then
echo "[DRY RUN]: $*"
else
echo "$*"
fi
}
clone() {
local src=${1:-""}
local dest=${2:-$DEST}
log "Cloning '$src' in '$dest'"
if [[ $dry_run_flag == "0" ]]; then
pushd "$dest" || exit 1 &>/dev/null
(
git clone "$src"
)
popd &>/dev/null
fi
}
install-psychrometrics() {
log "Installing psychrometrics cli."
if [[ $dry_run_flag == "0" ]]; then
local src="$DEST/psychrometrics-cli"
pushd "$src" || exit 1 &>/dev/null
(
./install-linux.sh
)
popd &>/dev/null
rm -rf "$src"
fi
}
##### MAIN #####
while [[ $# -gt 0 ]]; do
if [[ $1 =~ ^-d ]] || [[ $1 =~ ^--dry ]]; then
dry_run_flag="1"
fi
shift
done
mkdir -p "$DEST/sites" &>/dev/null
clone "git@github.com:m-housh/mhoush.com.git" "$DEST/sites"
clone "git@github.com:swift-psychrometrics/psychrometrics-cli.git" && install-psychrometrics

31
runs/after/calendar Executable file
View File

@@ -0,0 +1,31 @@
#!/usr/bin/env bash
DEV_ENV=${DEV_ENV:-""}
XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-"$HOME/.config"}
install() {
[[ -z $DEV_ENV ]] && echo -e "\e[031m[ERROR]:\e[0m 'DEV_ENV' not set." && exit 1
# Clone and build qcal locally, as it didn't work for me when downloading from the aur.
mkdir ~/pkgbuilds &>/dev/null
git clone https://github.com/psic4t/qcal.git ~/pkgbuilds/qcal
pushd ~/pkgbuilds/qcal &>/dev/null || exit 1
(
make && sudo make install
)
popd &>/dev/null || exit 1
# Decrypt and copy configuration file for qcal.
mkdir "$XDG_CONFIG_HOME"/qcal &>/dev/null
gpg --output "$XDG_CONFIG_HOME"/qcal/config.json --decrypt "$DEV_ENV"/env/qcal/config.json.gpg
}
uninstall() {
sudo rm /usr/local/bin/qcal
rm -rf ~/pkgbuilds/qcal
}
arg=${1:-""}
[[ $arg == "install" ]] && install
[[ $arg == "uninstall" ]] && uninstall

18
runs/after/jellyfin-tui Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
DEV_ENV=${DEV_ENV:-""}
XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-"$HOME/.config"}
install() {
[[ -z $DEV_ENV ]] && echo "[ERROR]: DEV_ENV not set" && exit 1
mkdir -p "$XDG_CONFIG_HOME"/jellyfin-tui &>/dev/null
gpg --output "$XDG_CONFIG_HOME"/jellyfin-tui/config.yaml --decrypt "$DEV_ENV"/env/jellyfin-tui/config.gpg
}
uninstall() {
rm -rf ~/.config/jellyfin-tui
}
arg=${1:-""}
[[ $arg == "install" ]] && install
[[ $arg == "uninstall" ]] && uninstall

17
runs/after/localsend Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env bash
install() {
sudo firewall-cmd --zone=public --permanent --add-port=53317/tcp
sudo firewall-cmd --zone=public --permanent --add-port=53317/udp
sudo firewall-cmd --reload
}
uninstall() {
sudo firewall-cmd --zone=public --permanent --remove-port=53317/tcp
sudo firewall-cmd --zone=public --permanent --remove-port=53317/udp
sudo firewall-cmd --reload
}
arg=${1:-""}
[[ $arg == "install" ]] && install
[[ $arg == "uninstall" ]] && uninstall

View File

@@ -8,25 +8,29 @@ set -o pipefail
# installed yet.
SCRIPTS="${DEV_ENV}/env/.local/scripts"
_ensure_mount() {
local line=${1:-""}
local mount=${2:-""}
if [[ -n $line ]] && [[ -d $mount ]]; then
if sudo cat /etc/fstab | grep -vq "$line"; then
log " Setting up nas mount."
# sudo mkdir -p $mount &>/dev/null
echo "$line" | sudo tee --append /etc/fstab
sudo systemctl daemon-reload
sudo mount -a ||
log --warning "You will need to make sure this computer's ip is in the allow list, then run 'sudo mount -a'"
fi
fi
}
_setup-mounts() {
local line="nas.housh.dev:/var/nfs/shared/michael_share /mnt/michael nfs defaults 0 0"
if sudo cat /etc/fstab | grep -vq "$line"; then
log " Setting up nas mount."
sudo mkdir -p /mnt/michael &>/dev/null
echo "$line" | sudo tee --append /etc/fstab
sudo systemctl daemon-reload
sudo mount -a ||
log --warning "You will need to make sure this computer's ip is in the allow list, then run 'sudo mount -a'"
fi
line="nas.housh.dev:/var/nfs/shared/Customer_Share /mnt/customers nfs defaults 0 0"
if sudo cat /etc/fstab | grep -vq "$line"; then
log " Setting up nas mount."
sudo mkdir -p /mnt/customers &>/dev/null
echo "$line" | sudo tee --append /etc/fstab
sudo systemctl daemon-reload
sudo mount -a ||
log --warning "You will need to make sure this computer's ip is in the allow list, then run 'sudo mount -a'"
fi
sudo mkdir -p /mnt/{michael,customers} &>/dev/null
mkdir -p "$HOME/work" &>/dev/null
_ensure_mount "nas.housh.dev:/var/nfs/shared/michael_share /mnt/michael nfs defaults 0 0" /mnt/michael
_ensure_mount "//nas.housh.dev/michael_share/work $HOME/work cifs credentials=$HOME/.config/.smbcredentials,uid=$(id -u),gid=$(id -g),iocharset=utf8 0 0" "$HOME/work"
_ensure_mount "nas.housh.dev:/var/nfs/shared/Customer_Share /mnt/customers nfs defaults 0 0" /mnt/customers
}
_setup-kanata() {
@@ -65,7 +69,9 @@ _setup-home-dir() {
log " Setting up home directory."
rm -rf "$HOME/Desktop" &>/dev/null
mkdir "$HOME/{containers,dev}" &>/dev/null
mkdir -p "$HOME/work/consults" &>/dev/null
mkdir -p "$HOME/work" &>/dev/null
gpg --decrypt --output "$HOME/.config/.smbcredentials" "$DEV_ENV/env/smbcredentials.gpg"
chmod 600 "$HOME/.config/.smbcredentials"
}
install() {

3
runs/calendar Normal file
View File

@@ -0,0 +1,3 @@
go
gnome-calendar
gnome-keyring

View File

@@ -5,6 +5,7 @@ eza
fastfetch
fzf
git-lfs
github-cli
gum
jq
libtexprintf

View File

@@ -1,10 +1,10 @@
# Packages to install / uninstall with this run.
hyprland-git
hyprpaper-git
hypridle-git
hyprlock-git
hyprlauncher-git
hyprshot-git
hyprland
hyprpaper
hypridle
hyprlock
hyprlauncher
hyprshot
xdg-desktop-portal-hyprland-git
bc # used for some scripts.
waybar

1
runs/jellyfin-tui Executable file
View File

@@ -0,0 +1 @@
jellyfin-tui

View File

@@ -1,5 +1,6 @@
# Packages to install / uninstall with this run
catppuccin-gtk-theme-mocha
cifs-utils
kanata
nwg-look
wl-clipboard