hyprland-dots/stow.sh
2024-02-28 22:18:59 +03:30

137 lines
3.2 KiB
Bash
Executable file

#!/bin/bash
configs_dir="$(pwd)/configs"
shortcuts_dir="$(pwd)/configs/shortcuts"
display_help() {
echo "Usage: [-s | -u] [-h]"
echo " -s Stow dotfiles"
echo " -u Unstow dotfiles"
echo " -h Display this help message"
}
create_symlinks() {
source_dir=$1
target_dir=$2
if [ ! -d "$source_dir" ] || [ ! -d "$target_dir" ]; then
echo "Source or target directory does not exist."
return 1
fi
for item in "$source_dir"/* "$source_dir"/.*; do
[ -e "$item" ] && [ "$item" != "$source_dir/." ] && [ "$item" != "$source_dir/.." ] && ln -sfn "$item" "$target_dir/"
done
}
create_target_dir() {
mkdir -p ~/.local/share/applications
mkdir -p ~/.config
}
stow_shortcuts() {
create_symlinks $shortcuts_dir ~/.local/share/applications
echo "Shortcuts stowed successfully!"
}
unstow_shortcuts() {
for file in $shortcuts_dir/*; do
local file_name=$(basename $file)
local target_file=~/.local/share/applications/$file_name
if [ -e $target_file ]; then
rm -f $target_file
echo "Removed: $target_file"
else
echo "Not found: $target_file"
fi
done
}
stow_dotfiles() {
create_symlinks $configs_dir/dotfiles ~/.config
create_symlinks $configs_dir/zsh ~/
echo "Dotfiles stowed successfully!"
}
unstow_dotfiles() {
for folder in $configs_dir/dotfiles/*; do
local folder_name=$(basename $folder)
local target_folder=~/.config/$folder_name
if [ -e $target_folder ]; then
rm -rf $target_folder
echo "Removed: $target_folder"
else
echo "Not found: $target_folder"
fi
done
for config in $configs_dir/zsh/.*; do
if [ -f $config ]; then
local file_name=$(basename $config)
local target_file=~/$file_name
if [ -e $target_file ]; then
rm $target_file
echo "Removed: $target_file"
else
echo "Not found: $target_file"
fi
elif [ -d "$config" ]; then
local folder_name=$(basename $config)
local target_folder=~/$folder_name
if [ -e $target_folder ]; then
rm -rf $target_folder
echo "Removed: $target_folder"
else
echo "Not found: $target_folder"
fi
fi
done
}
stow_hyprland() {
create_symlinks $configs_dir/hyprland ~/.config
echo "Hyprland stowed successfully!"
}
unstow_hyprland() {
for config in $configs_dir/hyprland/*; do
config_name=$(basename $config)
target_config=~/.config/$config_name
if [ -e $target_config ]; then
rm -rf $target_config
echo "Removed: $target_config"
else
echo "Not found: $target_config"
fi
done
}
while getopts ":suh" opt; do
case $opt in
s)
create_target_dir
stow_dotfiles
stow_shortcuts
stow_hyprland
;;
u)
unstow_dotfiles
unstow_shortcuts
unstow_hyprland
echo "All configs stowed successfully !"
;;
*)
display_help
;;
esac
done