3 Commits

25 changed files with 272 additions and 197 deletions

104
run
View File

@@ -2,81 +2,59 @@
# Adapted from https://github.com/ThePrimeagen/dev/blob/master/run # Adapted from https://github.com/ThePrimeagen/dev/blob/master/run
# #
# Runs scripts in the `./runs` directory, which will install or uninstall # Installs packages declared in the 'runs' directory, will run scripts matching the
# packages. It either runs a single script given an argument (filename in runs) # file name in the 'runs/before' and 'runs/after', respectively, to handle setting up or
# or all scripts in the runs directory. # tearing down based on the run mode.
# #
set -e
set -o nounset
set -o pipefail
if [ -z "$DEV_ENV" ]; then THIS_FILE=${BASH_SOURCE[0]}
echo "env var DEV_ENV needs to be present" LOG_LABEL=$(basename $THIS_FILE)
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
declare dry_run grepstr mode
log() {
logging log --source "$THIS_FILE" --echo "$@"
} && export -f log
############################## MAIN ##############################
# Setup logging file and label.
source "$SCRIPTS/hypr/logging"
setup-logging "$LOG_FILE" "$LOG_LABEL"
[ -z "$DEV_ENV" ] &&
log --error "env var DEV_ENV needs to be present" &&
exit 1 exit 1
fi
# if i just did DEV_ENV=$(pwd) ./run then this is needed for the rest of the grepstr=""
# scripts
export DEV_ENV="$DEV_ENV"
grep=""
dry_run="0" dry_run="0"
uninstall="0" mode="install"
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
echo "ARG: \"$1\""
# Handle a --dry or --dry-run argument
if [[ "$1" =~ ^--dry ]]; then if [[ "$1" =~ ^--dry ]]; then
dry_run="1" dry_run="1"
# Handle an --uninstall argument elif [[ "$1" == "uninstall" ]]; then
elif [[ "$1" =~ ^--u ]]; then mode="uninstall"
uninstall="1" yayflags=("-Rns")
# Handle an --install argument (default) elif [[ ! "$1" == "install" ]]; then
elif [[ ! "$1" =~ ^--i ]]; then grepstr="$1"
grep="$1"
fi fi
shift shift
done done
log() { export DEV_ENV="$DEV_ENV"
if [[ $dry_run == "1" ]]; then export LOG_ENABLE_DRY_RUN="$dry_run"
echo "[DRY_RUN]: $1" export RUN_GREP_STR="$grepstr"
else export RUN_MODE="$mode"
echo "$1"
fi
}
run() { log "RUN: -- grep: '$grepstr'"
local script=$1
local flag=$2
log "running script: $script $flag"
local actual_flags="-S --noconfirm" find "$DEV_ENV/runs" \
-mindepth 1 \
if [[ $flag == "--uninstall" ]]; then -maxdepth 1 \
actual_flags="-Rns" -type f \
fi -exec bash -xc "$DEV_ENV/runs/utils/run-handler {}" \;
log "ok, here's the actual script:: $s $actual_flags"
if [[ $dry_run == "0" ]]; then
$script $actual_flags
fi
}
############################## MAIN ##############################
log "RUN: env: $env -- grep: $grep"
runs_dir=$(find $DEV_ENV/runs -mindepth 1 -maxdepth 1 -executable)
for s in $runs_dir; do
if basename $s | grep -vq "$grep"; then
log "grep \"$grep\" filtered out $s"
continue
fi
if [[ $uninstall == "1" ]]; then
run $s --uninstall
else
run $s --install
fi
done

18
runs/after/clipse Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share}
install() {
log " Ensure clipse data directory exists, and start clipse."
mkdir -p "$XDG_DATA_HOME/clipse" &>/dev/null
setsid uwsm app -- clipse -listen
}
uninstall() {
log " Removing clipse data directory."
rm -rf "$XDG_DATA_HOME/clipse"
}
arg=${1:-""}
[[ $arg == "install" ]] && install && exit $?
[[ $arg == "uninstall" ]] && uninstall && exit $?

23
runs/after/dev Executable file
View File

@@ -0,0 +1,23 @@
#!/usr/bin/env bash
install() {
# TODO: Handle install / uninstall.
bob install nightly &&
bob install stable &&
bob use nightly
}
uninstall() {
echo "FIX ME!"
}
arg=${1:-""}
if [[ $arg == "install" ]]; then
install && exit $?
elif [[ $arg == "uninstall" ]]; then
uninstall && exit $?
else
# TODO: Using logging.
echo "Error, invalid option" && exit 1
fi

15
runs/audio Executable file → Normal file
View File

@@ -1,8 +1,7 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
pipewire
yay ${1:-"-S --noconfirm"} pipewire \ pavucontrol
pavucontrol \ wireplumber
wireplumber \ pipewire-jack
pipewire-jack \ pipewire-pulse
pipewire-pulse \ blueberry-wayland
blueberry-wayland

4
runs/before/dev Executable file
View File

@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# yay -S --noconfirm --needed rustup
# rustup default stable

9
runs/before/yay Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
if ! command -v yay >/dev/null 2>&1; then
sudo pacman -S --noconfirm --needed git base-devel
git clone https://aur.archlinux.org/yay.git ~/yay
cd ~/yay
makepkg -si
rm -rf ~/yay
fi

5
runs/brave Executable file → Normal file
View File

@@ -1,3 +1,2 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
brave-bin
yay ${1:-"-S --noconfirm"} brave-bin

7
runs/clipse Executable file → Normal file
View File

@@ -1,3 +1,4 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
#
yay ${1:-"-S --noconfirm"} clipse # Clipse manages clipboard history.
clipse

56
runs/dev Executable file → Normal file
View File

@@ -1,36 +1,24 @@
#!/usr/bin/env bash
if ! command -v yay >/dev/null 2>&1; then
sudo pacman -S --noconfirm --needed git base-devel
git clone https://aur.archlinux.org/yay.git ~/yay
cd ~/yay
makepkg -si
rm -rf ~/yay
fi
# Packages # Packages
yay -S --noconfirm --needed \ bat
bat \ bob
bob \ eza
eza \ fastfetch
fastfetch \ fzf
fzf \ git-lfs
git-lfs \ gum
gum \ jq
jq \ neovim
neovim \ nodejs
nodejs \ npm
npm \ pcre2
pcre2 \ ripgrep
ripgrep \ starship
starship \ tldr
tldr \ tmux
tmux \ tree-sitter-cli
tree-sitter-cli \ yazi
zoxide zoxide
# Fonts # Fonts
yay -S --noconfirm \ ttf-jetbrains-mono-nerd
ttf-jetbrains-mono-nerd \ ttf-firacode
ttf-firacode \ ttf-inconsolata-ne
ttf-inconsolata-nerd

5
runs/espanso Executable file → Normal file
View File

@@ -1,3 +1,2 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
espanso-wayland-git
yay ${1:-"-S --noconfirm"} espanso-wayland-git

8
runs/ghostty Executable file → Normal file
View File

@@ -1,6 +1,2 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
ghostty-git
# Flags get passed in from the run script, but if
# ran directly the default is going to be to install.
yay "${1:-"-S --noconfirm --needed"}" ghostty

6
runs/gopass Executable file → Normal file
View File

@@ -1,3 +1,3 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
gopass-git
yay ${1:-"-S --noconfirm --needed"} gopass-git git-credential-gopass git-credential-gopass

18
runs/hyprland Executable file → Normal file
View File

@@ -1,9 +1,9 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
hyprland-git
yay ${1:-"-S --noconfirm"} hyprland-git \ hyprpaper-git
hyprpaper-git \ hypridle-git
hypridle-git \ hyprlock-git
hyprlock-git \ hyprlauncher-git
hyprlauncher-git \ xdg-desktop-portal-hyprland-git
xdg-desktop-portal-hyprland-git \ bc # used for some scripts.
bc # used for some scripts. waybar

View File

@@ -1,5 +0,0 @@
#!/usr/bin/env bash
yay ${1:-"-S --noconfirm"} rustup
$DEV_ENV/env/.local/scripts/kanatactl bootstrap

5
runs/localsend Executable file → Normal file
View File

@@ -1,3 +1,2 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
localsend-bin
yay ${1:-"-S --noconfirm"} localsend-bin

7
runs/nautilus Executable file → Normal file
View File

@@ -1,3 +1,4 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
nautilus
yay ${1:-"-S --noconfirm"} nautilus nautilus-share gvfs-smb nautilus-share
gvfs-smb

32
runs/neomutt Executable file → Normal file
View File

@@ -1,17 +1,17 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
yay ${1:-"-S --noconfirm"} neomutt \ neomutt
abook \ abook
mutt-wizard \ mutt-wizard
goimapnotify \ goimapnotify
lynx \ lynx
notmuch \ notmuch
urlview \ urlview
cronie \ cronie
protonmail-bridge \ protonmail-bridge
isync \ isync
msmtp \ msmtp
pass \ pass
ca-certificates \ ca-certificates
gettext \ gettext
cyrus-sasl-xoauth2-git cyrus-sasl-xoauth2-git

View File

@@ -1,8 +0,0 @@
#!/usr/bin/env bash
# Needs installed from AUR.
if [[ ! $(yay -Q libajantv2 2>/dev/null) ]]; then
yay -S libajantv2
fi
cd $HOME/pkgbuilds/obs-studio-arm && makepkg -si

7
runs/podman Executable file → Normal file
View File

@@ -1,3 +1,4 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run.
podman
yay ${1:-"-S --noconfirm"} podman podman-docker podman-compose podman-docker
podman-compose

24
runs/system Executable file → Normal file
View File

@@ -1,12 +1,12 @@
#!/usr/bin/env bash # Packages to install / uninstall with this run
catppuccin-gtk-theme-mocha
yay ${1:-"-S --noconfirm"} catppuccin-gtk-theme-mocha \ kanata
nwg-look \ nwg-look
wl-clipboard \ wl-clipboard
pam-u2f \ pam-u2f
pcsc-tools \ pcsc-tools
swaync \ swaync
yubikey-manager \ yubikey-manager
nfs-utils \ nfs-utils
firewalld \ firewalld
zsh zsh

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env bash
yay ${1:-"-S --noconfirm"} thunderbird

85
runs/utils/run-handler Executable file
View File

@@ -0,0 +1,85 @@
#!/usr/bin/env bash
set -e
set -o nounset
set -o pipefail
declare file
declare -a yayflags
THIS_FILE=${BASH_SOURCE[0]}
LOG_LABEL=${LOG_LABEL:-$(basename $THIS_FILE)}
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
DEV_ENV=${DEV_ENV:-""}
MODE=${RUN_MODE:-"install"}
DRY_RUN=${LOG_ENABLE_DRY_RUN:-"0"}
GREP_STR=${RUN_GREP_STR:-""}
log() {
logging log --source "$THIS_FILE" --echo "$@"
} && export -f log
run_before_or_after() {
local dir file run
dir=${1:-""}
run=${2:-""}
file=$(find "$dir" -mindepth 1 -maxdepth 1 -executable -name "$(basename "$run")" | head -1)
if [[ -n "$file" ]]; then
log " running $(basename "$dir") script: '$file'"
[[ $DRY_RUN == "0" ]] && source "$file" "$mode"
fi
}
main() {
local line pkg
log "RUN: file: $file"
if [[ -z $GREP_STR ]] || [[ $file =~ $GREP_STR ]]; then
log "${MODE}ing packages from: $file"
run_before_or_after "$DEV_ENV/runs/before" "$file"
# Loop over lines in the file and install the packages.
while IFS= read -r line; do
# Skip lines that begin with '#' (comments)
if [[ ! $line =~ ^# ]]; then
# Remove any inline comments.
pkg=${line%% \#*}
if [[ -n $pkg ]]; then
log " pkg: '$pkg'"
[[ $DRY_RUN == "0" ]] && yay "${yayflags[@]}" "$pkg"
fi
fi
done <"$file"
run_before_or_after "$DEV_ENV/runs/after" "$file"
else
log "Grep filtered out: '$file'"
fi
}
############################## MAIN ##############################
# Setup logging file and label.
source "$SCRIPTS/hypr/logging"
setup-logging "$LOG_FILE" "$LOG_LABEL"
file=${1:-""}
yayflags=("-S" "--noconfirm" "--needed")
[[ -z "$DEV_ENV" ]] &&
log --error "env var DEV_ENV needs to be present" && exit 1
[[ ! -r $file ]] &&
log --error "File not readable." && exit 1
# Change yay flags if mode is 'uninstall'
[[ $MODE == "uninstall" ]] && yayflags=("-Rns")
# Ensure yay is installed before proceeding.
[[ $DRY_RUN == "0" ]] && . "$DEV_ENV/runs/before/yay"
main

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env bash
yay ${1:-"-S --noconfirm"} waybar

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env bash
yay ${1:-"-S --noconfirm"} yazi

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env bash
yay ${1:-"-S --noconfirm"} zen-browser-bin