diff --git a/dev-env b/dev-env index a297cbf..56ea28d 100755 --- a/dev-env +++ b/dev-env @@ -36,8 +36,8 @@ update_files() { log "copying over files from: $1" pushd $1 &>/dev/null ( - # Copy everything except systemd folder, it needs treated differently. - configs=$(find . -mindepth 1 -maxdepth 1 -name "systemd" -prune -o -type d -print) + # Copy everything except systemd and zsh folders, they need treated differently. + configs=$(find . -mindepth 1 -maxdepth 1 -type d \( -name "systemd" -o -name "zsh" \) -prune -o -type d -print) for c in $configs; do directory=${2%/}/${c#./} log " removing: rm -rf $directory" @@ -75,15 +75,24 @@ copy_files() { done } +############################## MAIN ############################## + update_files $DEV_ENV/env/.config $XDG_CONFIG_HOME update_files $DEV_ENV/env/.local $HOME/.local -# Systemd. +# SYSTEMD mkdir -p $XDG_CONFIG_HOME/systemd/user copy_files $DEV_ENV/env/.config/systemd/user $XDG_CONFIG_HOME/systemd/user -# copy $DEV_ENV/tmux-sessionizer/tmux-sessionizer $HOME/.local/scripts/tmux-sessionizer +# ZSH +# NOTE: This keeps from clobbering zsh history and plugins vs. wiping the entire directory and +# copying configuration. copy $DEV_ENV/env/.zshenv $HOME/.zshenv +mkdir -p $XDG_CONFIG_HOME/zsh +update_files $DEV_ENV/env/.config/zsh $XDG_CONFIG_HOME/zsh +copy_files $DEV_ENV/env/.config/zsh $XDG_CONFIG_HOME/zsh + +# TMUX copy $DEV_ENV/env/.tmux.conf $HOME/.tmux.conf # GPG diff --git a/env/.config/hypr/keybinds.conf b/env/.config/hypr/keybinds.conf index 793962b..7fbd037 100644 --- a/env/.config/hypr/keybinds.conf +++ b/env/.config/hypr/keybinds.conf @@ -19,7 +19,7 @@ $fileManager = $terminal -e yazi $fileBrowser = nautilus $menu = walker #$pwa = chromium --profile-directory=Default --enable-features=UseOzonePlatform --ozone-platform=wayland -$pwa = ~/.local/bin/launch-webapp +$pwa = ~/.local/scripts/launch-webapp # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more diff --git a/env/.local/scripts/install-webapp b/env/.local/scripts/install-webapp index 3831fb5..d8a2f1f 100755 --- a/env/.local/scripts/install-webapp +++ b/env/.local/scripts/install-webapp @@ -121,7 +121,7 @@ fi if [[ -n $CUSTOM_EXEC ]]; then EXEC_COMMAND="$CUSTOM_EXEC" else - EXEC_COMMAND="$HOME/.local/bin/launch-webapp $APP_URL" + EXEC_COMMAND="$HOME/.local/scripts/launch-webapp $APP_URL" fi # Create application .desktop file diff --git a/env/.zshenv b/env/.zshenv index c7c3422..883d02e 100755 --- a/env/.zshenv +++ b/env/.zshenv @@ -47,7 +47,7 @@ export NAP_CONFIG="$HOME/.config/nap/config.yaml" export PDFS="$HOME/Library/Mobile Documents/com~apple~Preview/Documents" export PROPOSALS="$HOME/Library/Mobile Documents/com~apple~CloudDocs/Work/Proposals" export SCREENSHOTS="$BUCKET/Pictures/Screenshots" -export SCRIPTS="$$HOME/.local/scripts" +export SCRIPTS="$HOME/.local/scripts" export SITES="$GHREPOS/sites" export SKELETONDIR="$DOTFILES/skeleton" export WORK="$HOME/Library/Mobile Documents/com~apple~CloudDocs/Work" diff --git a/scripts/arch/battery-monitor b/scripts/arch/battery-monitor deleted file mode 100755 index 8909589..0000000 --- a/scripts/arch/battery-monitor +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/zsh - -# Used with the systemd battery monitor service and timer to alert -# when the battery has dropped below the threshold and is not currently -# charging. - -THRESHOLD=20 # Notify when below 20% -NOTIFICATION_FLAG="/run/user/${UID}/user_battery_notified" - -function get-battery-percentage() { - local battery=$(upower --battery | grep percentage) - echo "${battery//[^0-9]/}" -} - -function send-battery-alert() { - notify-send -u critical \ - "Recharge battery!" "Batttery is down to ${1}" \ - -i battery-caution \ - -t 30000 -} - -battery_percentage=$(get-battery-percentage) -battery_state=$(upower --battery | grep -E state | awk '{print $2}') - -if [[ "$battery_state" == "discharging" && "$battery_percentage" -le "$THRESHOLD" ]]; then - if [ ! -f "$NOTIFICATION_FLAG" ]; then - send-battery-alert "$battery_percentage" - touch "$NOTIFICATION_FLAG" - fi -else - rm -f "$NOTIFICATION_FLAG" -fi diff --git a/scripts/arch/clear-clipboard-history b/scripts/arch/clear-clipboard-history deleted file mode 100755 index 057bebf..0000000 --- a/scripts/arch/clear-clipboard-history +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -#wl-copy --clear >/dev/null 2>&1 && \ -if [ -n "$WAYLAND_DISPLAY" ]; then - wl-copy --clear -fi - -rm ~/.local/share/clipse/clipboard_history.json >/dev/null 2>&1 diff --git a/scripts/arch/close-all-windows b/scripts/arch/close-all-windows deleted file mode 100755 index 8e64b99..0000000 --- a/scripts/arch/close-all-windows +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -hyprctl clients -j | \ - jq '.[] | .address' | \ - xargs -I{} hyprctl dispatch closewindow address:{} diff --git a/scripts/arch/install-webapp b/scripts/arch/install-webapp deleted file mode 100755 index 3831fb5..0000000 --- a/scripts/arch/install-webapp +++ /dev/null @@ -1,151 +0,0 @@ -#!/bin/zsh - -# Adapted from https://github.com/basecamp/omarchy/tree/master?tab=readme-ov-file - -function usage() { - cat <] [-u ] [-i ] [-e ] [-m ] [-h] [args...] - -OPTIONS: - -n | --name: The name of the application. - -u | --url: The url used to launch the application. - -i | --icon: The icon for the application. - -e | --exec: Custom execution command (optional). - -m | --mime-types: MIME-types for the application (optional). - -h | --help: Show usage information. - -EXAMPLES: - -If no options or arguments are supplied, then it will start an interactive session that prompts for the -values. - - $ install-webapp - -Calling the app with named arguments: - - $ install-webapp \\ - --name "My Awesome App" \\ - --url "https://awesome.com" \\ - --icon "https://awesome.com/assets/icon.png" - -It is also possible to use only positional arguments with out their key. They can be passed in the order as -they're listed. - - $ install-webapp "My Awesome App" \\ - "https://awesome.com" \\ - "https://awesome.com/assets/icon.png" - -NOTES: - -The icon option can either be a url where we will download a png from or a local file. Local files -can either be the full path to the file or a file name of an icon located in '~/.local/share/applications/icons/'. - -Interactive sessions do not give the option to use a custom execution command or supply the -MIME types, which are less frequently used options. - -EOF -} - -declare -a app_name -declare -a app_url -declare -a icon_ref -declare -a custom_exec # Optional custom exec command -declare -a mime_types # Optional mime types -declare -a help_flag -declare INTERACTIVE_MODE=false - -zparseopts -D -F -K -- \ - {n,-name}:=app_name \ - {u,-url}:=app_url \ - {i,-icon}:=icon_ref \ - {e,-exec}:=custom_exec \ - {m,-mime-types}:=mime_types \ - {h,-help}=help_flag - -[ ${#help_flag[@]} -gt 0 ] && usage && exit 0 - -# If passed in as positional arguments, without flags. -[ -n "$1" ] && app_name+=("$1") -[ -n "$2" ] && app_url+=("$2") -[ -n "$3" ] && icon_ref+=("$3") -[ -n "$4" ] && custom_exec+=("$4") -[ -n "$5" ] && mime_types+=("$5") - -# Check if proper arguments were passed in. Start interactive mode if not. -if [[ -z "$app_name[-1]" || -z "$app_url[-1]" || -z "$icon_ref[-1]" ]]; then - echo -e "\e[32mLet's create a new web app you can start with the app launcher.\n\e[0m" - app_name+=($(gum input --prompt "Name> " --placeholder "My favorite web app")) - app_url+=($(gum input --prompt "URL> " --placeholder "https://example.com")) - icon_ref+=($(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)")) - INTERACTIVE_MODE=true -else - INTERACTIVE_MODE=false -fi - -# Ensure valid execution -if [[ -z "$app_name[-1]" || -z "$app_url[-1]" || -z "$icon_ref[-1]" ]]; then - echo "You must set app name, app URL, and icon URL!" - exit 1 -fi - -APP_NAME=$app_name[-1] -APP_URL=$app_url[-1] -ICON_REF=$icon_ref[-1] -CUSTOM_EXEC=$custom_exec[-1] -MIME_TYPES=$mime_types[-1] - -# Refer to local icon or fetch remotely from URL -ICON_DIR="$HOME/.local/share/applications/icons" -if [[ $ICON_REF == https://* ]]; then - ICON_PATH="$ICON_DIR/$APP_NAME.png" - if curl -sL -o "$ICON_PATH" "$ICON_REF"; then - ICON_PATH="$ICON_DIR/$APP_NAME.png" - else - echo "Error: Failed to download icon." - exit 1 - fi -else - # Check if the icon path is a file. - if [ -f $ICON_REF ]; then - ICON_PATH=$ICON_REF - else - ICON_PATH="$ICON_DIR/$ICON_REF" - fi -fi - -# Use custom exec if provided, otherwise default behavior -if [[ -n $CUSTOM_EXEC ]]; then - EXEC_COMMAND="$CUSTOM_EXEC" -else - EXEC_COMMAND="$HOME/.local/bin/launch-webapp $APP_URL" -fi - -# Create application .desktop file -DESKTOP_FILE="$HOME/.local/share/applications/$APP_NAME.desktop" - -cat >"$DESKTOP_FILE" <>"$DESKTOP_FILE" -fi - -chmod +x "$DESKTOP_FILE" - -if [[ $INTERACTIVE_MODE == true ]]; then - echo -e "You can now find $APP_NAME using the app launcher (SUPER + SPACE)\n" -fi diff --git a/scripts/arch/launch-webapp b/scripts/arch/launch-webapp deleted file mode 100755 index 842ec4e..0000000 --- a/scripts/arch/launch-webapp +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Adapted from https://github.com/basecamp/omarchy/tree/master?tab=readme-ov-file -# -browser="chromium.desktop" - -exec setsid uwsm app -- $(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$browser 2>/dev/null | head -1) --app="$1" "${@:2}" diff --git a/scripts/arch/mv-all-workspaces-to-monitor b/scripts/arch/mv-all-workspaces-to-monitor deleted file mode 100755 index b956969..0000000 --- a/scripts/arch/mv-all-workspaces-to-monitor +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -# Moves all workspaces to the passed in monitor id, which can be useful when -# connecting or disconnecting from a monitor. - -MONITOR=$1 - -if [ ! $# = 1 ]; then - echo "Usage: mv-all-workspaces-to-monitor " - exit 1 -fi - -hyprctl workspaces -j | - jq '.[] | select(.monitorID != "$MONITOR") | .id' | - xargs -I{} hyprctl dispatch moveworkspacetomonitor {} "$MONITOR" >/dev/null 2>&1 diff --git a/scripts/arch/toggle-desktop b/scripts/arch/toggle-desktop deleted file mode 100755 index 13787a3..0000000 --- a/scripts/arch/toggle-desktop +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# Workspace to hide everything in -HIDE_WS="special:hidden" - -# File to store original workspace ID -STATE_FILE="/tmp/hypr_hide_state" - -# Get current workspace ID -CUR_WS=$(hyprctl -j activeworkspace | jq -r '.id') - -# Check if we're currently hidden -if [[ -f "$STATE_FILE" ]]; then - # Restore windows - ORIG_WS=$(cat "$STATE_FILE") - for win in $(hyprctl -j clients | jq -r ".[] | select(.workspace.name | contains(\"$HIDE_WS\")) | .address"); do - hyprctl dispatch movetoworkspace "$ORIG_WS,address:$win" - hyprctl dispatch workspace "$ORIG_WS" - done - rm "$STATE_FILE" -else - # Hide all windows (move to special hidden workspace) - for win in $(hyprctl -j clients | jq -r ".[] | select(.workspace.id == $CUR_WS) | .address"); do - hyprctl dispatch movetoworkspace "$HIDE_WS,address:$win" - hyprctl dispatch togglespecialworkspace "$HIDE_WS" - done - rm "$STATE_FILE" - echo "$CUR_WS" >"$STATE_FILE" -fi diff --git a/scripts/arch/toggle-internal-monitor b/scripts/arch/toggle-internal-monitor deleted file mode 100755 index f645e3e..0000000 --- a/scripts/arch/toggle-internal-monitor +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/zsh -# -# Toggles the state of the internal laptop monitor, which is useful -# when I'm connected to an external monitor / docks. - -monitor="eDP-1" - -if hyprctl monitors | grep -q "$monitor"; then - hyprctl keyword monitor "$monitor,disable" 1>/dev/null -else - hyprctl keyword monitor "$monitor,enable" 1>/dev/null -fi diff --git a/scripts/arch/toggle-waybar b/scripts/arch/toggle-waybar deleted file mode 100755 index d2a8cda..0000000 --- a/scripts/arch/toggle-waybar +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -WAYBAR_PID=$(pgrep -x waybar) - -if [ -n "$WAYBAR_PID" ]; then - # kill waybar process if it's running. - kill "$WAYBAR_PID" -else - # start waybar in the background. - waybar & -fi diff --git a/scripts/arch/waybar-restart b/scripts/arch/waybar-restart deleted file mode 100755 index a93feb1..0000000 --- a/scripts/arch/waybar-restart +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/zsh - -pkill -x waybar -setsid uwsm app -- waybar >/dev/null 2>&1 & diff --git a/scripts/arch/window-toggle-floating b/scripts/arch/window-toggle-floating deleted file mode 100755 index 1a5f35c..0000000 --- a/scripts/arch/window-toggle-floating +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# -# Float's a window, setting it's height and width and centering. - -# The percentage of the screen size for the floating window. -WIDTH_PERCENT=80 -HEIGHT_PERCENT=40 - -floating=$(hyprctl activewindow -j | jq '.floating') - -if [ "$floating" = "true" ]; then - hyprctl dispatch togglefloating -else - monitor=$(hyprctl monitors -j | jq '.[] | select(.focused == true)') - mw=$(echo "$monitor" | jq '.width') - mh=$(echo "$monitor" | jq '.height') - ms=$(echo "$monitor" | jq '.scale') - - echo "scale: $ms" - - neww=$(echo "scale=6; (($mw / $ms) * $WIDTH_PERCENT / 100)" | bc) - newh=$(echo "scale=6; (($mh / $ms) * $HEIGHT_PERCENT / 100)" | bc) - - hyprctl dispatch togglefloating && - hyprctl dispatch resizeactive exact $neww $newh && - hyprctl dispatch centerwindow -fi