#!/usr/bin/env bash # Ensure required directories exist mkdir -p "$HOME/.config" echo "Symlinking dotfiles..." # Get the dotfiles directory (parent of modules directory) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DOTFILES_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" # Symlink regular dotfiles (excluding .config directory) for file in $(find "$DOTFILES_DIR" -maxdepth 1 -name ".*"); do [ "$file" = "$DOTFILES_DIR/.git" ] && continue [ "$file" = "$DOTFILES_DIR/.github" ] && continue [ "$file" = "$DOTFILES_DIR/.vscode" ] && continue [ "$file" = "$DOTFILES_DIR/.config" ] && continue # Handle .config separately basefile="$(basename "$file")" if [ -f "$file" ] || [ -d "$file" ]; then ln -sf "$file" "$HOME/$basefile" echo "Linked $basefile" fi done # Symlink .config directory contents CONFIG_DIR="$DOTFILES_DIR/.config" if [ -d "$CONFIG_DIR" ]; then echo "Symlinking .config contents..." for item in "$CONFIG_DIR"/*; do [ -e "$item" ] || continue baseitem="$(basename "$item")" target_dir="$HOME/.config/$baseitem" # Remove existing symlink or directory to avoid conflicts [ -L "$target_dir" ] && rm "$target_dir" [ -d "$target_dir" ] && [ ! -L "$target_dir" ] && rm -rf "$target_dir" ln -sf "$item" "$target_dir" echo "Linked .config/$baseitem" done # Device-specific symlinks for Hyprland and Waybar using host-profiles.conf HOSTNAME=$(hostname) PROFILE="" if [ -f "$DOTFILES_DIR/host-profiles.conf" ]; then PROFILE=$(awk -F= -v h="$HOSTNAME" '$1==h{print $2}' "$DOTFILES_DIR/host-profiles.conf") fi if [ -z "$PROFILE" ]; then echo "ERROR: No profile mapping found for hostname '$HOSTNAME' in $DOTFILES_DIR/host-profiles.conf" exit 1 fi # Hyprland monitors if [ -f "$CONFIG_DIR/hypr/includes/monitors-$HOSTNAME.conf" ]; then ln -sf "$CONFIG_DIR/hypr/includes/monitors-$HOSTNAME.conf" "$CONFIG_DIR/hypr/includes/monitors.conf" echo "Linked monitors-$HOSTNAME.conf as monitors.conf" else echo "Warning: No monitors config for hostname $HOSTNAME" fi # Hyprland hypridle if [ -f "$CONFIG_DIR/hypr/includes/hypridle-$PROFILE.conf" ]; then ln -sf "$CONFIG_DIR/hypr/includes/hypridle-$PROFILE.conf" "$CONFIG_DIR/hypr/hypridle.conf" echo "Linked hypridle-$PROFILE.conf as hypridle.conf" fi # Waybar config if [ -f "$CONFIG_DIR/waybar/config-$PROFILE" ]; then ln -sf "$CONFIG_DIR/waybar/config-$PROFILE" "$CONFIG_DIR/waybar/config" echo "Linked config-$PROFILE as waybar config" fi fi echo "Dotfiles setup complete!" # Symlink .local/bin scripts LOCAL_BIN_REPO="$DOTFILES_DIR/.local/bin" LOCAL_BIN_HOME="$HOME/.local/bin" if [ -d "$LOCAL_BIN_REPO" ]; then mkdir -p "$LOCAL_BIN_HOME" echo "Symlinking .local/bin scripts..." for script in "$LOCAL_BIN_REPO"/*; do [ -e "$script" ] || continue base_script="$(basename "$script")" ln -sf "$script" "$LOCAL_BIN_HOME/$base_script" echo "Linked .local/bin/$base_script" done fi