Files
arch/scripts/04i-shorin-hyprniri-quickshell.sh
2026-03-31 20:13:15 +08:00

219 lines
7.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# --- Import Utilities ---
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PARENT_DIR="$(dirname "$SCRIPT_DIR")"
if [[ -f "$SCRIPT_DIR/00-utils.sh" ]]; then
source "$SCRIPT_DIR/00-utils.sh"
else
echo "Error: 00-utils.sh not found in $SCRIPT_DIR."
exit 1
fi
check_root
# ========================================================================
# 初始化验证清单
# ========================================================================
VERIFY_LIST="/tmp/shorin_install_verify.list"
rm -f "$VERIFY_LIST"
# --- Identify User & DM Check ---
log "Identifying target user..."
detect_target_user
if [[ -z "$TARGET_USER" || ! -d "$HOME_DIR" ]]; then
error "Target user invalid or home directory does not exist."
exit 1
fi
info_kv "Target User" "$TARGET_USER"
check_dm_conflict
# --- Temporary Sudo Privileges ---
log "Granting temporary sudo privileges..."
SUDO_TEMP_FILE="/etc/sudoers.d/99_shorin_installer_temp"
echo "$TARGET_USER ALL=(ALL) NOPASSWD: ALL" > "$SUDO_TEMP_FILE"
chmod 440 "$SUDO_TEMP_FILE"
cleanup_sudo() {
if [[ -f "$SUDO_TEMP_FILE" ]]; then
rm -f "$SUDO_TEMP_FILE"
log "Security: Temporary sudo privileges revoked."
fi
}
trap cleanup_sudo EXIT INT TERM
# ========================================================================
# exec
# ========================================================================
AUR_HELPER="paru"
# --- Installation: Core Components ---
section "Shorin Hyprniri" "Core Components & Utilities"
# 清理可能冲突的依赖
declare -a target_pkgs=(
"hyprcursor-git"
"hyprgraphics-git"
"hyprland-git"
"hyprland-guiutils-git"
"hyprlang-git"
"hyprlock-git"
"hyprpicker-git"
"hyprtoolkit-git"
"hyprutils-git"
"xdg-desktop-portal-hyprland-git"
)
# 2. 过滤出系统中实际已安装的包
declare -a installed_pkgs=()
for pkg in "${target_pkgs[@]}"; do
# 使用 pacman -Qq 检查是否安装,抑制输出以保持终端干净
if pacman -Qq "$pkg" >/dev/null 2>&1; then
installed_pkgs+=("$pkg")
fi
done
# 3. 只有当存在已安装的包时,才执行卸载命令
if [[ ${#installed_pkgs[@]} -gt 0 ]]; then
exe as_user "$AUR_HELPER" -Rns --noconfirm "${installed_pkgs[@]}"
fi
log "Installing Hyprland core components..."
CORE_PKGS="vulkan-headers hyprland quickshell-git dms-shell-bin matugen cava cups-pk-helper kimageformats kitty adw-gtk-theme nwg-look breeze-cursors wl-clipboard cliphist dsearch"
echo "$CORE_PKGS" >> "$VERIFY_LIST"
exe as_user "$AUR_HELPER" -S --noconfirm --needed $CORE_PKGS
log "Installing terminal utilities..."
TERM_PKGS="fish jq zoxide socat imagemagick imv starship eza ttf-jetbrains-maple-mono-nf-xx-xx fuzzel shorin-contrib-git timg wl-screenrec-git wf-recorder "
echo "$TERM_PKGS" >> "$VERIFY_LIST"
exe as_user "$AUR_HELPER" -S --noconfirm --needed $TERM_PKGS
log "Installing file manager and dependencies..."
FM_PKGS="xdg-terminal-exec xdg-desktop-portal-gtk thunar tumbler ffmpegthumbnailer poppler-glib gvfs-smb file-roller thunar-archive-plugin gnome-keyring thunar-volman gvfs-mtp gvfs-gphoto2 webp-pixbuf-loader "
echo "$FM_PKGS" >> "$VERIFY_LIST"
exe as_user "$AUR_HELPER" -S --noconfirm --needed $FM_PKGS
log "Installing screenshot and screencast tools..."
SCREEN_PKGS="satty grim slurp xdg-desktop-portal-hyprland"
echo "$SCREEN_PKGS" >> "$VERIFY_LIST"
exe as_user "$AUR_HELPER" -S --noconfirm --needed $SCREEN_PKGS
# --- Environment Configurations ---
section "Shorin Hyprniri" "Environment Configuration"
log "Configuring default terminal and templates..."
# 默认终端处理
if ! grep -q "kitty" "$HOME_DIR/.config/xdg-terminals.list"; then
echo 'kitty.desktop' >> "$HOME_DIR/.config/xdg-terminals.list"
fi
as_user mkdir -p "$HOME_DIR/Templates"
as_user touch "$HOME_DIR/Templates/new" "$HOME_DIR/Templates/new.sh"
if [[ -f "$HOME_DIR/Templates/new.sh" ]] && grep -q "#!" "$HOME_DIR/Templates/new.sh"; then
log "Template new.sh already initialized."
else
as_user bash -c "echo '#!/usr/bin/env bash' >> '$HOME_DIR/Templates/new.sh'"
fi
chown -R "$TARGET_USER:" "$HOME_DIR/Templates"
# --- Dotfiles & Wallpapers ---
section "Shorin Hyprniri" "Dotfiles & Wallpapers"
log "Deploying user dotfiles from repository..."
DOTFILES_REPO_LINK="https://github.com/SHORiN-KiWATA/shorin-dms-hyprniri.git"
exe git clone --depth 1 "$DOTFILES_REPO_LINK" "$PARENT_DIR/shorin-dms-hyprniri-dotfiles"
chown -R "$TARGET_USER:" "$PARENT_DIR/shorin-dms-hyprniri-dotfiles"
force_copy "$PARENT_DIR/shorin-dms-hyprniri-dotfiles/dotfiles/." "$HOME_DIR"
as_user shorin link
log "Deploying wallpapers..."
WALLPAPER_SOURCE_DIR="$PARENT_DIR/resources/Wallpapers"
WALLPAPER_DIR="$HOME_DIR/Pictures/Wallpapers"
chown -R "$TARGET_USER:" "$WALLPAPER_SOURCE_DIR"
as_user mkdir -p "$WALLPAPER_DIR"
force_copy "$WALLPAPER_SOURCE_DIR/." "$WALLPAPER_DIR/"
# --- Browser Setup ---
section "Shorin Hyprniri" "Browser Setup"
log "Installing Firefox and Pywalfox..."
BROWSER_PKGS="firefox python-pywalfox"
echo "$BROWSER_PKGS" >> "$VERIFY_LIST"
exe as_user "$AUR_HELPER" -S --noconfirm --needed $BROWSER_PKGS
log "Configuring Firefox Pywalfox extension policy..."
POL_DIR="/etc/firefox/policies"
exe mkdir -p "$POL_DIR"
cat << 'EOF' > "$POL_DIR/policies.json"
{
"policies": {
"Extensions": {
"Install": [
"https://addons.mozilla.org/firefox/downloads/latest/pywalfox/latest.xpi",
"https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"
]
}
}
}
EOF
exe chmod 755 "$POL_DIR"
exe chmod 644 "$POL_DIR/policies.json"
# --- Flatpak & Theme Integration ---
section "Shorin Hyprniri" "Flatpak & Theme Integration"
if command -v flatpak &>/dev/null; then
log "Configuring Flatpak overrides and theme integrations..."
echo "bazaar" >> "$VERIFY_LIST"
exe as_user "$AUR_HELPER" -S --noconfirm --needed bazaar
as_user flatpak override --user --filesystem=xdg-data/themes
as_user flatpak override --user --filesystem="$HOME_DIR/.themes"
as_user flatpak override --user --filesystem=xdg-config/gtk-4.0
as_user flatpak override --user --filesystem=xdg-config/gtk-3.0
as_user flatpak override --user --env=GTK_THEME=adw-gtk3-dark
as_user flatpak override --user --filesystem=xdg-config/fontconfig
as_user ln -sf /usr/share/themes "$HOME_DIR/.local/share/themes"
else
warn "Flatpak is not installed. Skipping overrides."
fi
log "Applying file manager bookmarks..."
as_user sed -i "s/shorin/$TARGET_USER/g" "$HOME_DIR/.config/gtk-3.0/bookmarks"
# === update module ===
if command -v kitty &>/dev/null; then
exe ln -sf /usr/bin/kitty /usr/local/bin/xterm
fi
# --- Desktop Cleanup & Tutorials ---
section "Config" "Desktop Cleanup"
log "Hiding unnecessary .desktop icons..."
run_hide_desktop_file
chown -R "$TARGET_USER:" "$HOME_DIR/.local/share"
log "Copying tutorial files..."
force_copy "$PARENT_DIR/resources/必看-shoirn-hyprniri使用方法.txt" "$HOME_DIR"
# ========================================================================
# exec-end
# ========================================================================
# --- Finalization & Auto-Login ---
section "Final" "Auto-Login & Cleanup"
rm -f "$SUDO_TEMP_FILE"
# 1. 清理旧的 TTY 自动登录残留(无论是否启用 greetd旧版残留都应清除
log "Cleaning up legacy TTY autologin configs..."
rm -f /etc/systemd/system/getty@tty1.service.d/autologin.conf 2>/dev/null
if [ "$SKIP_DM" = true ]; then
log "Display Manager setup skipped (Conflict found or user opted out)."
warn "You will need to start your session manually from the TTY."
else
setup_ly
fi