Rework for void + dms.
This commit is contained in:
+132
-101
@@ -12,143 +12,174 @@ DO_INSTALL=false
|
|||||||
CONFIRM_MODE=true # only true when no args are passed
|
CONFIRM_MODE=true # only true when no args are passed
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: $0 [-l] [-i]"
|
echo "Usage: $0 [-l] [-i]"
|
||||||
echo " -l Only create symlinks (no confirmation)"
|
echo " -l Only create symlinks (no confirmation)"
|
||||||
echo " -i Only install system packages (no confirmation)"
|
echo " -i Only install system packages (no confirmation)"
|
||||||
echo " (no args = do both, with confirmation)"
|
echo " (no args = do both, with confirmation)"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ $# -eq 0 ]; then
|
if [ $# -eq 0 ]; then
|
||||||
DO_LINKS=true
|
DO_LINKS=true
|
||||||
DO_INSTALL=true
|
DO_INSTALL=true
|
||||||
CONFIRM_MODE=true
|
CONFIRM_MODE=true
|
||||||
else
|
else
|
||||||
CONFIRM_MODE=false
|
CONFIRM_MODE=false
|
||||||
while getopts ":lih" opt; do
|
while getopts ":lih" opt; do
|
||||||
case $opt in
|
case $opt in
|
||||||
l) DO_LINKS=true ;;
|
l) DO_LINKS=true ;;
|
||||||
i) DO_INSTALL=true ;;
|
i) DO_INSTALL=true ;;
|
||||||
h) usage ;;
|
h) usage ;;
|
||||||
*) usage ;;
|
*) usage ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
## Helper function for linking
|
## Helper function for linking
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
link_file() {
|
link_file() {
|
||||||
local src="$1"
|
local src="$1"
|
||||||
local dest="$2"
|
local dest="$2"
|
||||||
|
|
||||||
if [ -L "$dest" ]; then
|
if [ -L "$dest" ]; then
|
||||||
if [ "$(readlink "$dest")" == "$src" ]; then
|
if [ "$(readlink "$dest")" == "$src" ]; then
|
||||||
echo "✅ Symlink already correct: $dest → $src"
|
echo "✅ Symlink already correct: $dest → $src"
|
||||||
((SKIPPED++))
|
((SKIPPED++))
|
||||||
else
|
else
|
||||||
echo "⚠️ $dest is a symlink but points to the wrong target."
|
echo "⚠️ $dest is a symlink but points to the wrong target."
|
||||||
echo " Replacing with correct symlink..."
|
echo " Replacing with correct symlink..."
|
||||||
rm "$dest"
|
rm "$dest"
|
||||||
ln -s "$src" "$dest"
|
ln -s "$src" "$dest"
|
||||||
echo "🔁 Fixed: $dest → $src"
|
echo "🔁 Fixed: $dest → $src"
|
||||||
((CREATED++))
|
((CREATED++))
|
||||||
fi
|
fi
|
||||||
elif [ -e "$dest" ]; then
|
elif [ -e "$dest" ]; then
|
||||||
echo "⚠️ $dest exists but is not a symlink. Skipping."
|
echo "⚠️ $dest exists but is not a symlink. Skipping."
|
||||||
((SKIPPED++))
|
((SKIPPED++))
|
||||||
else
|
else
|
||||||
mkdir -p "$(dirname "$dest")"
|
mkdir -p "$(dirname "$dest")"
|
||||||
ln -s "$src" "$dest"
|
ln -s "$src" "$dest"
|
||||||
echo "✅ Linked: $dest → $src"
|
echo "✅ Linked: $dest → $src"
|
||||||
((CREATED++))
|
((CREATED++))
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
## LINK SYMLINKS
|
## LINK SYMLINKS
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
if [ "$DO_LINKS" = true ]; then
|
if [ "$DO_LINKS" = true ]; then
|
||||||
if [ "$CONFIRM_MODE" = true ]; then
|
if [ "$CONFIRM_MODE" = true ]; then
|
||||||
read -p "❓ Do you want to create symlinks for your dotfiles? [y/N] " confirm
|
read -p "❓ Do you want to create symlinks for your dotfiles? [y/N] " confirm
|
||||||
case "$confirm" in
|
case "$confirm" in
|
||||||
[Yy]*) ;; # continue below
|
[Yy]*) ;; # continue below
|
||||||
*) DO_LINKS=false ;;
|
*) DO_LINKS=false ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$DO_LINKS" = true ]; then
|
if [ "$DO_LINKS" = true ]; then
|
||||||
echo "🔗 Checking and creating symlinks..."
|
echo "🔗 Checking and creating symlinks..."
|
||||||
CREATED=0
|
CREATED=0
|
||||||
SKIPPED=0
|
SKIPPED=0
|
||||||
|
|
||||||
link_file "$DOTFILES_DIR/config/fish/config.fish" "$HOME/.config/fish/config.fish"
|
# Modern shell & editor setup
|
||||||
link_file "$DOTFILES_DIR/config/vim" "$HOME/.vim"
|
link_file "$DOTFILES_DIR/config/niri/config.kdl" "$HOME/.config/niri/config.kdl"
|
||||||
link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata"
|
link_file "$DOTFILES_DIR/config/niri/dms/binds.kdl" "$HOME/.config/niri/dms/binds.kdl"
|
||||||
link_file "$DOTFILES_DIR/scripts/bin" "$HOME/.local/bin"
|
link_file "$DOTFILES_DIR/config/fish/config.fish" "$HOME/.config/fish/config.fish"
|
||||||
|
link_file "$DOTFILES_DIR/config/vim" "$HOME/.vim"
|
||||||
|
link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata"
|
||||||
|
link_file "$DOTFILES_DIR/scripts/bin" "$HOME/.local/bin"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "🧾 Summary: $CREATED symlink(s) created or fixed, $SKIPPED skipped."
|
echo "🧾 Summary: $CREATED symlink(s) created or fixed, $SKIPPED skipped."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "✅ Symlink setup complete."
|
echo "✅ Symlink setup complete."
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
## INSTALL SYSTEM PACKAGES
|
## INSTALL SYSTEM PACKAGES
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
if [ "$DO_INSTALL" = true ]; then
|
if [ "$DO_INSTALL" = true ]; then
|
||||||
if [ "$CONFIRM_MODE" = true ]; then
|
if [ "$CONFIRM_MODE" = true ]; then
|
||||||
read -p "❓ Do you want to install system packages? [y/N] " confirm
|
read -p "❓ Do you want to install system packages? [y/N] " confirm
|
||||||
case "$confirm" in
|
case "$confirm" in
|
||||||
[Yy]*) ;; # continue below
|
[Yy]*) ;; # continue below
|
||||||
*) DO_INSTALL=false ;;
|
*) DO_INSTALL=false ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$DO_INSTALL" = true ]; then
|
if [ "$DO_INSTALL" = true ]; then
|
||||||
REQUIRED_PACKAGES=(
|
|
||||||
# system
|
|
||||||
fuse3
|
|
||||||
# network & download
|
|
||||||
wget curl ca-certificates gnupg rsync
|
|
||||||
# core utilities
|
|
||||||
fish git vim fd-find jq fzf ripgrep tree direnv make bat
|
|
||||||
ark unzip p7zip-full tar gzip bzip2 xz-utils
|
|
||||||
# build & dev tools
|
|
||||||
build-essential valgrind nodejs
|
|
||||||
# fonts
|
|
||||||
fonts-noto-core fonts-noto-color-emoji
|
|
||||||
# desktop portal
|
|
||||||
xdg-desktop-portal xdg-desktop-portal-gtk
|
|
||||||
)
|
|
||||||
|
|
||||||
MISSING_PACKAGES=()
|
# -----------------------------------------------------------------------------
|
||||||
|
## ADD NONFREE REPOS
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
echo "📦 Checking nonfree repositories..."
|
||||||
|
|
||||||
echo "🔍 Checking for missing packages..."
|
REPO_PACKAGES=(void-repo-nonfree)
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Check which packages are missing using dpkg
|
# Only add multilib-nonfree on x86_64
|
||||||
for pkg in "${REQUIRED_PACKAGES[@]}"; do
|
if [ "$(uname -m)" = "x86_64" ]; then
|
||||||
if ! dpkg -s "$pkg" >/dev/null 2>&1; then
|
REPO_PACKAGES+=(void-repo-multilib-nonfree)
|
||||||
MISSING_PACKAGES+=("$pkg")
|
fi
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ ${#MISSING_PACKAGES[@]} -eq 0 ]; then
|
MISSING_REPOS=()
|
||||||
echo "✅ All required packages are already installed."
|
for repo in "${REPO_PACKAGES[@]}"; do
|
||||||
else
|
if ! xbps-query -p pkgver "$repo" >/dev/null 2>&1; then
|
||||||
echo "📦 Syncing package index..."
|
MISSING_REPOS+=("$repo")
|
||||||
sudo apt update
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
echo "📦 Installing missing packages: ${MISSING_PACKAGES[*]}"
|
if [ ${#MISSING_REPOS[@]} -eq 0 ]; then
|
||||||
sudo apt install -y "${MISSING_PACKAGES[@]}"
|
echo "✅ Nonfree repositories already enabled."
|
||||||
fi
|
else
|
||||||
|
echo "📦 Enabling repositories: ${MISSING_REPOS[*]}"
|
||||||
|
sudo xbps-install -Sy "${MISSING_REPOS[@]}"
|
||||||
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "✅ Package setup complete."
|
|
||||||
echo ""
|
# -----------------------------------------------------------------------------
|
||||||
|
## INSTALL REQUIRED PACKAGES
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
REQUIRED_PACKAGES=(
|
||||||
|
# system & shell
|
||||||
|
pfetch fuse3 fish-shell
|
||||||
|
# network & download
|
||||||
|
wget curl ca-certificates gnupg rsync
|
||||||
|
# core utilities & CLI tools
|
||||||
|
git vim fd jq fzf ripgrep tree direnv make bat
|
||||||
|
ark unzip p7zip tar gzip bzip2 xz kanata gitu
|
||||||
|
# build & dev tools
|
||||||
|
alacritty base-devel valgrind tree-sitter-cli go nodejs
|
||||||
|
)
|
||||||
|
|
||||||
|
MISSING_PACKAGES=()
|
||||||
|
|
||||||
|
echo "🔍 Checking for missing packages..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check which packages are missing using xbps-query
|
||||||
|
for pkg in "${REQUIRED_PACKAGES[@]}"; do
|
||||||
|
if ! xbps-query -p pkgver "$pkg" >/dev/null 2>&1; then
|
||||||
|
MISSING_PACKAGES+=("$pkg")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ${#MISSING_PACKAGES[@]} -eq 0 ]; then
|
||||||
|
echo "✅ All required packages are already installed."
|
||||||
|
else
|
||||||
|
echo "📦 Syncing repository indexes..."
|
||||||
|
sudo xbps-install -S
|
||||||
|
|
||||||
|
echo "📦 Installing missing packages: ${MISSING_PACKAGES[*]}"
|
||||||
|
sudo xbps-install "${MISSING_PACKAGES[@]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ Package setup complete."
|
||||||
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user