Initial ThinkPad Hyprland dotfiles

This commit is contained in:
Pascal
2026-04-28 03:59:07 +02:00
commit 6eb922c417
56 changed files with 6587 additions and 0 deletions

221
install.sh Executable file
View File

@@ -0,0 +1,221 @@
#!/usr/bin/env bash
set -euo pipefail
REPO_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
BACKUP_DIR="${BACKUP_DIR:-$HOME/.dotfiles-backup/$(date +%Y%m%d-%H%M%S)}"
ORIGINAL_HOME="/home/pascal"
CONFIG_ITEMS=(
hypr
waybar
wofi
swaync
kitty
gtk-3.0
gtk-4.0
qt5ct
qt6ct
)
PACMAN_PACKAGES=(
hyprland
hyprpaper
hyprlock
waybar
wofi
swaync
kitty
nautilus
ags
brightnessctl
playerctl
wireplumber
pipewire
pipewire-pulse
networkmanager
bluez
bluez-utils
hyprshot
grim
slurp
swappy
wl-clipboard
libnotify
sshpass
papirus-icon-theme
qt5ct
qt6ct
starship
python-gobject
gtk3
gtk4
noto-fonts
noto-fonts-emoji
ttf-jetbrains-mono-nerd
)
SKIP_PACKAGES=0
WITH_SDDM=0
NO_APPLY_THEME=0
usage() {
printf '%s\n' \
"Usage: ./install.sh [--skip-packages] [--with-sddm] [--no-apply-theme]" \
"" \
" --skip-packages Only install dotfiles, do not install packages." \
" --with-sddm Install the bundled SDDM theme system-wide." \
" --no-apply-theme Do not run the Hypr theme script after copying."
}
for arg in "$@"; do
case "$arg" in
--skip-packages) SKIP_PACKAGES=1 ;;
--with-sddm) WITH_SDDM=1 ;;
--no-apply-theme) NO_APPLY_THEME=1 ;;
-h|--help) usage; exit 0 ;;
*) printf 'Unknown option: %s\n' "$arg" >&2; usage; exit 2 ;;
esac
done
log() {
printf '\033[1;32m==>\033[0m %s\n' "$1"
}
warn() {
printf '\033[1;33mWARN:\033[0m %s\n' "$1" >&2
}
have() {
command -v "$1" >/dev/null 2>&1
}
backup_path() {
local target="$1"
[[ -e "$target" || -L "$target" ]] || return 0
local relative="${target#"$HOME"/}"
local backup="$BACKUP_DIR/$relative"
mkdir -p "$(dirname "$backup")"
cp -a "$target" "$backup"
}
install_path() {
local source="$1"
local target="$2"
backup_path "$target"
rm -rf "$target"
mkdir -p "$(dirname "$target")"
cp -a "$source" "$target"
}
install_packages() {
if (( SKIP_PACKAGES )); then
log "Skipping package installation."
return
fi
if ! have pacman; then
warn "pacman not found; skipping package installation."
return
fi
log "Installing available pacman packages."
local installable=()
local missing=()
local pkg
for pkg in "${PACMAN_PACKAGES[@]}"; do
if pacman -Si "$pkg" >/dev/null 2>&1; then
installable+=("$pkg")
else
missing+=("$pkg")
fi
done
if ((${#installable[@]})); then
sudo pacman -S --needed "${installable[@]}"
fi
if ((${#missing[@]})); then
if have paru; then
log "Trying missing packages through paru: ${missing[*]}"
paru -S --needed "${missing[@]}" || warn "Some optional AUR packages were not installed."
elif have yay; then
log "Trying missing packages through yay: ${missing[*]}"
yay -S --needed "${missing[@]}" || warn "Some optional AUR packages were not installed."
else
warn "Missing from pacman and no paru/yay found: ${missing[*]}"
fi
fi
}
rewrite_home_paths() {
log "Rewriting absolute home paths."
local file
while IFS= read -r -d '' file; do
sed -i "s#${ORIGINAL_HOME}#${HOME}#g" "$file"
done < <(
find "$HOME/.config/hypr" "$HOME/.config/gtk-3.0" "$HOME/.config/gtk-4.0" \
"$HOME/.config/qt5ct" "$HOME/.config/qt6ct" \
-type f -print0 2>/dev/null
)
}
install_dotfiles() {
log "Installing dotfiles with backup at $BACKUP_DIR."
mkdir -p "$HOME/.config"
local item
for item in "${CONFIG_ITEMS[@]}"; do
install_path "$REPO_DIR/config/$item" "$HOME/.config/$item"
done
install_path "$REPO_DIR/config/starship.toml" "$HOME/.config/starship.toml"
install_path "$REPO_DIR/home/Bilder/Wallpaper" "$HOME/Bilder/Wallpaper"
chmod +x "$HOME/.config/hypr"/Scripts/*.sh
chmod +x "$HOME/.config/hypr"/Scripts/*.py
chmod +x "$HOME/.config/waybar"/scripts/*.sh 2>/dev/null || true
rewrite_home_paths
}
install_sddm() {
(( WITH_SDDM )) || return 0
log "Installing SDDM theme."
sudo mkdir -p /usr/share/sddm/themes /etc/sddm.conf.d
sudo cp -a "$REPO_DIR/config/hypr/sddm-theme/pascal-hypr" /usr/share/sddm/themes/
sudo cp -a "$REPO_DIR/config/hypr/sddm-theme/sddm.conf" /etc/sddm.conf.d/10-pascal-hypr.conf
}
enable_services() {
if have systemctl; then
sudo systemctl enable --now NetworkManager.service >/dev/null 2>&1 || true
sudo systemctl enable --now bluetooth.service >/dev/null 2>&1 || true
fi
}
apply_theme() {
(( NO_APPLY_THEME )) && return 0
local theme="$HOME/.config/hypr/Themes/rose-night.theme"
[[ -f "$theme" ]] || theme="$HOME/.config/hypr/Themes/forest-neon.theme"
[[ -f "$theme" ]] || return 0
log "Applying theme: $(basename "$theme")"
"$HOME/.config/hypr/Scripts/theme-menu.sh" --apply "$theme" || warn "Theme apply failed; dotfiles are still installed."
}
main() {
install_packages
install_dotfiles
install_sddm
enable_services
apply_theme
log "Done. Start Hyprland or reload with: hyprctl reload"
}
main "$@"