309 lines
14 KiB
Bash
Executable File
309 lines
14 KiB
Bash
Executable File
#!/bin/bash
|
|
# =============================================================================
|
|
# hyprdrive.sh — HyprDrive Desktop Environment installer (Lua-based config)
|
|
# =============================================================================
|
|
# Part of the Dotfiles setup system for Arch Linux.
|
|
#
|
|
# HyprDrive is a leaner sibling of HyprLua: same Lua-based Hyprland config
|
|
# (hyprland.lua, hl.bind/hl.dsp), same CyberQueer theme, but WITHOUT the older
|
|
# shell-component stack hyprlua carries for compatibility/history — no EWW bar,
|
|
# no leftover nwg-shell pieces (nwg-dock/-drawer/-panel), no walker, waybar,
|
|
# wofi, or ulauncher. In their place, the "Cosmonaut Shell" component suite
|
|
# (all built specifically for this profile, all sharing one hologram/glow
|
|
# visual language):
|
|
# - orbit-menu — radial power/utility menu
|
|
# - horizon-dock — hover-scrollable orbital app dock
|
|
# - astro-menu — astal-menu re-themed as a hologram info display; same
|
|
# functionality (Location/Weather/Bluetooth/Network quads,
|
|
# taskbar, app drawer), so it still needs astal-menu's own
|
|
# Astal service deps (see below)
|
|
# - station-bar — the EWW top bar's replacement ("Voidstation Status Bar"):
|
|
# a thin, curved, always-on-top layer-shell bar. Tracks
|
|
# Hyprland workspaces/active window natively over the
|
|
# .socket2.sock IPC event stream (no external
|
|
# hyprland-workspaces binary, no socat), so it needs no
|
|
# extra packages beyond what's already listed below
|
|
# (pactl from pipewire-pulse, sysfs for battery).
|
|
# Vicinae remains the launcher.
|
|
#
|
|
# Differences from hyprlua.sh:
|
|
# - Config source paths point to desktopenvs/hyprdrive/
|
|
# - No EWW compilation step (no bar at all yet)
|
|
# - Drops libshumate (astal-menu never actually used it — Shumate doesn't
|
|
# paint tiles in this environment, so the Location quad already falls back
|
|
# to a static Pillow-stitched map; libshumate was dead weight even in
|
|
# hyprlua) and the GTK3 gtk-layer-shell build (that one WAS EWW-only)
|
|
# - Drops wofi, walker-bin, ulauncher, bzmenu, iwmenu, wofi-calc, hyprland-
|
|
# workspaces (all tied to the dropped shell stack)
|
|
# - wofi-calc's Super+Alt+F bind now opens qalculate-gtk instead (already a
|
|
# general-purpose package, not wofi-dependent)
|
|
# - Default wallpaper is a real ESA/Hubble image ("Rings of Relativity",
|
|
# CC BY 4.0 — desktopenvs/hyprdrive/wallpaper/, see its CREDITS.md) instead
|
|
# of the personal Nextcloud-hosted background hyprlua.sh fetches
|
|
#
|
|
# High-level install flow:
|
|
# 1. System update + Flatpak
|
|
# 2. pacman packages (compositor, audio, networking, tools, fonts, webcam)
|
|
# 3. systemd service enablement
|
|
# 4. AUR packages via yay
|
|
# 5. Themes, terminal symlink, SSH askpass, dark-mode preference
|
|
# 6. Nordzy left-hand cursor theme
|
|
# 7. Bluetooth / iwd services
|
|
# 8. Config file deployment (hyprdrive source tree)
|
|
# 9. Wallpaper + resource files
|
|
# 10. Python venv for helper scripts
|
|
# 11. Udiskie tray-icon symlink fix
|
|
# 12. config-updater symlinks + apply-theme.sh
|
|
#
|
|
# Prerequisites: internet access, yay (AUR helper), rustup, git, curl, cargo.
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh"
|
|
|
|
log "Starting HyprDrive installer (Lua-based config, minimal shell stack)..."
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 1. Update system and install Flatpak
|
|
# ---------------------------------------------------------------------------
|
|
log "Updating system and installing Flatpak..."
|
|
sudo pacman -Syu --noconfirm --needed flatpak
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 2. Install required packages
|
|
# ---------------------------------------------------------------------------
|
|
log "Installing required packages..."
|
|
HYPRDRIVE_PACKAGES=(
|
|
hyprland # Wayland compositor / window manager
|
|
hyprcursor # hardware-accelerated cursor rendering for Hyprland
|
|
wl-clipboard # wl-copy / wl-paste; Wayland clipboard CLI tools
|
|
hyprpaper # wallpaper utility with per-monitor support
|
|
hyprlock # GPU-accelerated screen locker (Hyprland-native)
|
|
kitty # GPU-accelerated terminal (default in this setup)
|
|
dunst # lightweight, scriptable notification daemon
|
|
|
|
nwg-look # GTK/cursor/icon theme picker for wlroots sessions (kept — theme picker, not a shell component)
|
|
|
|
# orbit-menu / horizon-dock / astro-menu / station-bar: all four are GTK4
|
|
# layer-shell Python apps (the Cosmonaut Shell)
|
|
python-gobject # PyGObject: GTK4 + Astal libs from Python
|
|
python-pillow # astro-menu's Location quad: stitches map tiles (backend/staticmap.py)
|
|
gtk4 # GTK4 toolkit (all four apps' frontend)
|
|
gtk4-layer-shell # wlr-layer-shell for GTK4 (their popup/dock/bar surfaces)
|
|
networkmanager # nmcli backend (Network quad/editor, orbit-menu Tools)
|
|
bluez-utils # bluetoothctl + bluez CLI (Bluetooth quad fallbacks)
|
|
iproute2 curl jq # ip/ss, HTTP fetches, JSON (helper scripts, astro-menu backends)
|
|
traceroute # path trace to 1.1.1.1 (astro-menu's Location quad)
|
|
|
|
# Build toolchain required for AUR package compilation
|
|
python cmake meson cpio pkgconf ruby-pkg-config
|
|
|
|
hyprsunset # blue-light filter / night-mode daemon
|
|
hypridle # idle daemon triggering lock/suspend after inactivity
|
|
hyprshutdown # graceful shutdown/reboot/sleep — orbit-menu's Power ring wraps this
|
|
ksshaskpass # Qt SSH passphrase dialog registered as ssh-askpass
|
|
|
|
nm-connection-editor # GTK editor for NetworkManager connection profiles
|
|
network-manager-applet # tray applet showing network connection status
|
|
blueman # GTK Bluetooth manager with tray icon support
|
|
bluez # core Linux Bluetooth protocol stack
|
|
|
|
pipewire # modern audio/video routing daemon (replaces PulseAudio)
|
|
alsa-utils # low-level ALSA CLI tools (amixer, aplay, arecord)
|
|
firefox # web browser
|
|
greetd-tuigreet # TUI login greeter (text-based, no GPU requirement)
|
|
|
|
grim # Wayland screenshot capture tool
|
|
slurp # interactive rectangular region selector for screenshots
|
|
gst-plugin-pipewire # GStreamer plugin routing through PipeWire
|
|
imagemagick # image processing toolkit for screenshot effects
|
|
|
|
nerd-fonts # all Nerd Font families (Cosmonaut Shell glyphs — orbit-menu, horizon-dock, station-bar)
|
|
otf-font-awesome # Font Awesome glyph set (notifications etc.)
|
|
|
|
pipewire-alsa pipewire-jack pipewire-pulse
|
|
|
|
qt5-wayland qt6-wayland
|
|
swww # smooth animated wallpaper daemon for wlroots (alternative to hyprpaper)
|
|
ttf-jetbrains-mono # monospace coding font used in terminals
|
|
wireplumber # PipeWire session and policy manager
|
|
|
|
xdg-desktop-portal-hyprland
|
|
xdg-utils
|
|
|
|
xorg-server xorg-xinit # XWayland support for legacy X11 apps
|
|
papirus-icon-theme
|
|
|
|
cool-retro-term
|
|
qalculate-gtk # full GTK calculator — also backs orbit-menu's Super+Alt+F / Tools>Calculator
|
|
iwd
|
|
dbus
|
|
|
|
thunar tumbler thunar-archive-plugin thunar-shares-plugin thunar-volman
|
|
|
|
hyprpicker
|
|
pcmanfm-qt
|
|
udisks2
|
|
kew
|
|
|
|
hyprpolkitagent
|
|
pavucontrol
|
|
playerctl
|
|
wf-recorder
|
|
sound-theme-freedesktop
|
|
|
|
python-opencv # webcam presence-detection daemon
|
|
v4l-utils
|
|
)
|
|
sudo pacman -Syu --noconfirm --needed -- "${HYPRDRIVE_PACKAGES[@]}"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 3. Enable essential services
|
|
# ---------------------------------------------------------------------------
|
|
log "Enabling essential services..."
|
|
enable_service NetworkManager.service
|
|
|
|
# Greeter: same LightDM + cyberqueer greeter module as hyprlua.
|
|
bash "$(dirname "${BASH_SOURCE[0]}")/../optional-Modules/apps/lightdm.sh"
|
|
|
|
enable_service udisks2.service
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 4. Install AUR packages
|
|
# ---------------------------------------------------------------------------
|
|
log "Installing AUR packages..."
|
|
|
|
rustup default stable
|
|
|
|
# Packages:
|
|
# vicinae-bin — pre-built vicinae (launcher)
|
|
# bluetuith — TUI Bluetooth manager
|
|
# wvkbd — on-screen virtual keyboard for Wayland (tablet use)
|
|
# pinta — accessible image editor
|
|
# udiskie — auto-mounter with tray icon
|
|
# bri — brightness control helper
|
|
# chamel — colour-palette / theme switcher
|
|
# libastal-apps-git — Astal apps service, consumed by horizon-dock's
|
|
# All Apps/Favorites orbits via PyGObject
|
|
# libastal-network-git,
|
|
# libastal-bluetooth-git,
|
|
# libastal-io-git — astro-menu's Network/Bluetooth quads (same libs
|
|
# astal-menu always needed)
|
|
yay -Syu --answerdiff None --answerclean All --noconfirm --needed \
|
|
vicinae-bin bluetuith wvkbd pinta udiskie \
|
|
bri chamel \
|
|
libastal-apps-git libastal-network-git libastal-bluetooth-git libastal-io-git
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 5. Theme and icon setup
|
|
# ---------------------------------------------------------------------------
|
|
log "Installing themes and icons..."
|
|
|
|
sudo cp -r ~/Dotfiles/gtk-themes/cyberqueer /usr/share/themes
|
|
sudo cp ~/Dotfiles/desktopenvs/hyprdrive/btop/themes/cyberqueer.theme /usr/share/btop/themes
|
|
|
|
sudo ln -sf /usr/bin/kitty /usr/bin/xdg-terminal-exec
|
|
sudo ln -sf /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass
|
|
|
|
if have_user_bus; then
|
|
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' || true
|
|
else
|
|
skip "No session bus — set GTK dark mode after first login (gsettings)."
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 6. Cursor setup
|
|
# ---------------------------------------------------------------------------
|
|
log "Installing cursor theme..."
|
|
mkdir -p ~/.icons
|
|
curl -fL -o ~/install-tmp/Nordzy-cursors-lefthand.tar.gz \
|
|
https://github.com/guillaumeboehm/Nordzy-cursors/releases/download/v2.3.0/Nordzy-cursors-lefthand.tar.gz
|
|
tar -zxf ~/install-tmp/Nordzy-cursors-lefthand.tar.gz -C ~/.icons/
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 7. Enable Bluetooth and wireless services
|
|
# ---------------------------------------------------------------------------
|
|
log "Enabling Bluetooth and wireless services..."
|
|
enable_service bluez
|
|
enable_service bluetooth.service
|
|
enable_service iwd.service
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 8. Copy configs
|
|
# ---------------------------------------------------------------------------
|
|
log "Copying configs..."
|
|
|
|
CONFIGS=(kitty mimeapps.list vicinae hypr xfce4 dunst alacritty orbit-menu horizon-dock astro-menu station-bar scripts btop gtk-3.0)
|
|
for cfg in "${CONFIGS[@]}"; do
|
|
rm -rf ~/.config/"$cfg"
|
|
cp -r ~/Dotfiles/desktopenvs/hyprdrive/"$cfg" ~/.config/
|
|
done
|
|
|
|
# Vicinae loads NAMED custom themes from ~/.local/share/vicinae/themes/*.toml —
|
|
# see hyprlua.sh for the same note.
|
|
mkdir -p ~/.local/share/vicinae/themes
|
|
cp -f ~/Dotfiles/desktopenvs/hyprdrive/vicinae/cyberqueer.toml \
|
|
~/.local/share/vicinae/themes/cyberqueer.toml
|
|
|
|
# Device-specific overrides live in hypr/usr/ (bundled inside hypr/ above).
|
|
|
|
cp ~/Dotfiles/colors.conf ~/.config/colors.conf
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 9. Wallpaper and resources
|
|
# ---------------------------------------------------------------------------
|
|
log "Copying wallpaper and resources..."
|
|
mkdir -p ~/Pictures
|
|
|
|
# Default wallpaper: ESA/Hubble "Rings of Relativity" (CC BY 4.0 — see
|
|
# desktopenvs/hyprdrive/wallpaper/CREDITS.md). hyprpaper.conf and hyprlock-
|
|
# backgrounds.conf both already default to ~/Pictures/background.jpg.
|
|
cp ~/Dotfiles/desktopenvs/hyprdrive/wallpaper/background.jpg ~/Pictures/background.jpg
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 10. Python venv for scripts
|
|
# ---------------------------------------------------------------------------
|
|
log "Setting up Python venv for scripts..."
|
|
python -m venv ~/.config/python-script
|
|
~/.config/python-script/bin/pip install \
|
|
speedtest-cli `# Internet speed test` \
|
|
requests `# HTTP client for helper scripts` \
|
|
pint `# Unit conversion library` \
|
|
simpleeval `# Safe maths expression evaluator` \
|
|
parsedatetime `# Natural-language date/time parser for timer scripts`
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 11. Udiskie icon fix
|
|
# ---------------------------------------------------------------------------
|
|
log "Applying Udiskie icon fix..."
|
|
PAPIRUS_DIR="/usr/share/icons/Papirus-Dark/status"
|
|
HICOLOR_DIR="/usr/share/icons/hicolor/scalable/status"
|
|
if [ -d "$PAPIRUS_DIR" ]; then
|
|
sudo ln -sf "$PAPIRUS_DIR/checkbox-checked.svg" "$HICOLOR_DIR/udiskie-checkbox-checked.svg"
|
|
sudo ln -sf "$PAPIRUS_DIR/checkbox-unchecked.svg" "$HICOLOR_DIR/udiskie-checkbox-unchecked.svg"
|
|
sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor
|
|
else
|
|
warn "Papirus-Dark not found — skipping udiskie icon fix."
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 12. Enable udiskie
|
|
# ---------------------------------------------------------------------------
|
|
log "Enabling udiskie service..."
|
|
enable_service udiskie.service
|
|
start_service udiskie.service
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 13. Install config updater and theme script
|
|
# ---------------------------------------------------------------------------
|
|
log "Installing config updater and theme script..."
|
|
mkdir -p ~/.config/config-updater
|
|
ln -sf ~/Dotfiles/desktopenvs/hyprdrive/config-updater/updater.conf ~/.config/config-updater/updater.conf
|
|
ln -sf ~/Dotfiles/desktopenvs/hyprdrive/config-updater/update-configs.sh ~/update-configs.sh
|
|
|
|
cp ~/Dotfiles/apply-theme.sh ~/apply-theme.sh
|
|
chmod +x ~/apply-theme.sh
|
|
|
|
log "HyprDrive installation complete. Reboot to start."
|