2
This commit is contained in:
219
scripts/04i-shorin-hyprniri-quickshell.sh
Normal file
219
scripts/04i-shorin-hyprniri-quickshell.sh
Normal file
@ -0,0 +1,219 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user