WIP
This commit is contained in:
parent
be825f91d5
commit
e8d0950852
85
CLAUDE.md
Normal file
85
CLAUDE.md
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## Repository Overview
|
||||||
|
|
||||||
|
This is an Arch Linux Hyprland desktop setup automation repository based on [omarchy.org](https://omarchy.org). It provides a comprehensive collection of shell scripts to set up a fresh Arch Linux installation with the Hyprland window manager and various desktop applications.
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
### Main Scripts
|
||||||
|
- `base_install.sh` - The main entry point script (currently empty, but serves as the base installer)
|
||||||
|
- `scripts/` - Contains all installation and configuration scripts organized by category:
|
||||||
|
- `config/` - System configuration scripts (keyboard, network, timezones, etc.)
|
||||||
|
- `desktop/` - Desktop environment installation scripts (Hyprland, themes, applications)
|
||||||
|
- `aur.sh`, `development.sh`, `firewall.sh`, etc. - Specialized installation scripts
|
||||||
|
|
||||||
|
### Theme System
|
||||||
|
- `themes/` - Contains multiple theme configurations, each including:
|
||||||
|
- Color schemes for various applications (alacritty, waybar, mako, etc.)
|
||||||
|
- Hyprland configuration files (`hyprland.conf`, `hyprlock.conf`)
|
||||||
|
- Background images and icon themes
|
||||||
|
- Application-specific styling (CSS, config files)
|
||||||
|
|
||||||
|
Available themes: catppuccin, catppuccin-latte, everforest, gruvbox, kanagawa, matte-black, nord, osaka-jade, ristretto, rose-pine, tokyo-night
|
||||||
|
|
||||||
|
## Development Commands
|
||||||
|
|
||||||
|
This repository consists entirely of shell scripts for system configuration. There are no build, test, or lint commands as this is a collection of installation scripts.
|
||||||
|
|
||||||
|
### Running Scripts
|
||||||
|
```bash
|
||||||
|
# Make scripts executable
|
||||||
|
chmod +x script_name.sh
|
||||||
|
|
||||||
|
# Run installation scripts
|
||||||
|
./base_install.sh
|
||||||
|
./scripts/desktop/hyprlandia.sh
|
||||||
|
./scripts/desktop/theme.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture and Key Components
|
||||||
|
|
||||||
|
### Package Management
|
||||||
|
All scripts use `yay` (AUR helper) for package installation with standard flags:
|
||||||
|
- `--noconfirm` - Non-interactive installation
|
||||||
|
- `--needed` - Only install if not already present
|
||||||
|
|
||||||
|
### Theme Management System
|
||||||
|
The theme system uses symlinks to manage active themes:
|
||||||
|
- Themes are linked from `~/.local/share/omarchy/themes/` to `~/.config/omarchy/themes/`
|
||||||
|
- Active theme is symlinked to `~/.config/omarchy/current/theme`
|
||||||
|
- Individual application configs are symlinked from the current theme
|
||||||
|
|
||||||
|
### Configuration Approach
|
||||||
|
- Configurations are copied from `~/.local/share/omarchy/config/` to `~/.config/`
|
||||||
|
- GPG configurations are set up system-wide in `/etc/gnupg/`
|
||||||
|
- Git aliases and user information are configured globally
|
||||||
|
- PAM faillock settings are modified for security
|
||||||
|
|
||||||
|
### Key Installation Categories
|
||||||
|
1. **System Config** - Keyboard layout detection, network setup, timezone configuration
|
||||||
|
2. **Desktop Environment** - Hyprland compositor and related tools
|
||||||
|
3. **Applications** - File managers, media players, web browsers
|
||||||
|
4. **Development Tools** - Available via `development.sh`
|
||||||
|
5. **Theming** - Comprehensive theme support across all applications
|
||||||
|
|
||||||
|
### GPU-Aware Installation
|
||||||
|
Scripts detect GPU type and install appropriate software:
|
||||||
|
- NVIDIA GPUs: `wf-recorder` for screen recording
|
||||||
|
- Other GPUs: `wl-screenrec` for screen recording
|
||||||
|
|
||||||
|
## Working with Themes
|
||||||
|
|
||||||
|
Each theme directory contains configuration files for:
|
||||||
|
- Terminal emulator (alacritty)
|
||||||
|
- Status bar (waybar)
|
||||||
|
- Notifications (mako)
|
||||||
|
- Application launcher (walker)
|
||||||
|
- Screen locker (hyprlock)
|
||||||
|
- System monitor (btop)
|
||||||
|
- Text editor (neovim)
|
||||||
|
- Volume/brightness OSD (swayosd)
|
||||||
|
|
||||||
|
Theme switching is handled through the symlink system managed by `scripts/desktop/theme.sh`.
|
@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Arch Hyprland Setup - Base Installer
|
||||||
|
# Runs all installation scripts in the correct order
|
||||||
|
|
||||||
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
|
||||||
|
|
||||||
|
echo "Starting Arch Hyprland Setup..."
|
||||||
|
|
||||||
|
# Function to run a script and check for errors
|
||||||
|
run_script() {
|
||||||
|
local script="$1"
|
||||||
|
local name="$2"
|
||||||
|
|
||||||
|
if [[ -f "$script" ]]; then
|
||||||
|
echo "Running $name..."
|
||||||
|
chmod +x "$script"
|
||||||
|
bash "$script"
|
||||||
|
echo " $name completed"
|
||||||
|
else
|
||||||
|
echo "<EFBFBD> Warning: $name not found at $script"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Step 1: Install AUR helper (yay)
|
||||||
|
run_script "$SCRIPTS_DIR/aur.sh" "AUR helper installation"
|
||||||
|
|
||||||
|
# Step 2: System configuration
|
||||||
|
echo "Configuring system settings..."
|
||||||
|
run_script "$SCRIPTS_DIR/config/detect-keyboard-layout.sh" "Keyboard layout detection"
|
||||||
|
run_script "$SCRIPTS_DIR/config/network.sh" "Network configuration"
|
||||||
|
run_script "$SCRIPTS_DIR/config/nvidia.sh" "NVIDIA configuration"
|
||||||
|
run_script "$SCRIPTS_DIR/config/power.sh" "Power management"
|
||||||
|
run_script "$SCRIPTS_DIR/config/fix-fkeys.sh" "Function keys configuration"
|
||||||
|
run_script "$SCRIPTS_DIR/config/config.sh" "General system configuration"
|
||||||
|
|
||||||
|
# Step 3: Desktop environment
|
||||||
|
echo "Installing desktop environment..."
|
||||||
|
run_script "$SCRIPTS_DIR/desktop/fonts.sh" "Font installation"
|
||||||
|
run_script "$SCRIPTS_DIR/desktop/hyprlandia.sh" "Hyprland installation"
|
||||||
|
run_script "$SCRIPTS_DIR/desktop/uwsm.sh" "Universal Wayland Session Manager"
|
||||||
|
run_script "$SCRIPTS_DIR/desktop/desktop.sh" "Desktop applications"
|
||||||
|
run_script "$SCRIPTS_DIR/desktop/bluetooth.sh" "Bluetooth setup"
|
||||||
|
run_script "$SCRIPTS_DIR/desktop/theme.sh" "Theme configuration"
|
||||||
|
|
||||||
|
# Step 4: Additional software and configurations
|
||||||
|
echo "Installing additional software..."
|
||||||
|
run_script "$SCRIPTS_DIR/development.sh" "Development tools"
|
||||||
|
run_script "$SCRIPTS_DIR/firewall.sh" "Firewall configuration"
|
||||||
|
run_script "$SCRIPTS_DIR/mimetypes.sh" "MIME types configuration"
|
||||||
|
run_script "$SCRIPTS_DIR/xtras.sh" "Extra applications"
|
||||||
|
|
||||||
|
echo "<<3C> Arch Hyprland Setup completed successfully!"
|
||||||
|
echo "Please reboot your system to ensure all changes take effect."
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
export OMARCHY_USER_NAME=$(gum input --placeholder "Enter full name" --prompt "Name> ")
|
|
||||||
export OMARCHY_USER_EMAIL=$(gum input --placeholder "Enter email address" --prompt "Email> ")
|
|
@ -1,267 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Hyprland launched via UWSM and login directly as user, rely on disk encryption + hyprlock for security
|
|
||||||
if ! command -v uwsm &>/dev/null || ! command -v plymouth &>/dev/null; then
|
|
||||||
yay -S --noconfirm --needed uwsm plymouth
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# PLYMOUTH SETUP
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
if ! grep -Eq '^HOOKS=.*plymouth' /etc/mkinitcpio.conf; then
|
|
||||||
# Backup original mkinitcpio.conf just in case
|
|
||||||
backup_timestamp=$(date +"%Y%m%d%H%M%S")
|
|
||||||
sudo cp /etc/mkinitcpio.conf "/etc/mkinitcpio.conf.bak.${backup_timestamp}"
|
|
||||||
|
|
||||||
# Add plymouth to HOOKS array after 'base udev' or 'base systemd'
|
|
||||||
if grep "^HOOKS=" /etc/mkinitcpio.conf | grep -q "base systemd"; then
|
|
||||||
sudo sed -i '/^HOOKS=/s/base systemd/base systemd plymouth/' /etc/mkinitcpio.conf
|
|
||||||
elif grep "^HOOKS=" /etc/mkinitcpio.conf | grep -q "base udev"; then
|
|
||||||
sudo sed -i '/^HOOKS=/s/base udev/base udev plymouth/' /etc/mkinitcpio.conf
|
|
||||||
else
|
|
||||||
echo "Couldn't add the Plymouth hook"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Regenerate initramfs
|
|
||||||
sudo mkinitcpio -P
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add kernel parameters for Plymouth
|
|
||||||
if [ -d "/boot/loader/entries" ]; then # systemd-boot
|
|
||||||
echo "Detected systemd-boot"
|
|
||||||
|
|
||||||
for entry in /boot/loader/entries/*.conf; do
|
|
||||||
if [ -f "$entry" ]; then
|
|
||||||
# Skip fallback entries
|
|
||||||
if [[ "$(basename "$entry")" == *"fallback"* ]]; then
|
|
||||||
echo "Skipped: $(basename "$entry") (fallback entry)"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Skip if splash it already present for some reason
|
|
||||||
if ! grep -q "splash" "$entry"; then
|
|
||||||
sudo sed -i '/^options/ s/$/ splash quiet/' "$entry"
|
|
||||||
else
|
|
||||||
echo "Skipped: $(basename "$entry") (splash already present)"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
elif [ -f "/etc/default/grub" ]; then # Grub
|
|
||||||
echo "Detected grub"
|
|
||||||
|
|
||||||
# Backup GRUB config before modifying
|
|
||||||
backup_timestamp=$(date +"%Y%m%d%H%M%S")
|
|
||||||
sudo cp /etc/default/grub "/etc/default/grub.bak.${backup_timestamp}"
|
|
||||||
|
|
||||||
# Check if splash is already in GRUB_CMDLINE_LINUX_DEFAULT
|
|
||||||
if ! grep -q "GRUB_CMDLINE_LINUX_DEFAULT.*splash" /etc/default/grub; then
|
|
||||||
# Get current GRUB_CMDLINE_LINUX_DEFAULT value
|
|
||||||
current_cmdline=$(grep "^GRUB_CMDLINE_LINUX_DEFAULT=" /etc/default/grub | cut -d'"' -f2)
|
|
||||||
|
|
||||||
# Add splash and quiet if not present
|
|
||||||
new_cmdline="$current_cmdline"
|
|
||||||
if [[ ! "$current_cmdline" =~ splash ]]; then
|
|
||||||
new_cmdline="$new_cmdline splash"
|
|
||||||
fi
|
|
||||||
if [[ ! "$current_cmdline" =~ quiet ]]; then
|
|
||||||
new_cmdline="$new_cmdline quiet"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Trim any leading/trailing spaces
|
|
||||||
new_cmdline=$(echo "$new_cmdline" | xargs)
|
|
||||||
|
|
||||||
sudo sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT=\".*\"/GRUB_CMDLINE_LINUX_DEFAULT=\"$new_cmdline\"/" /etc/default/grub
|
|
||||||
|
|
||||||
# Regenerate grub config
|
|
||||||
sudo grub-mkconfig -o /boot/grub/grub.cfg
|
|
||||||
else
|
|
||||||
echo "GRUB already configured with splash kernel parameters"
|
|
||||||
fi
|
|
||||||
elif [ -d "/etc/cmdline.d" ]; then # UKI
|
|
||||||
echo "Detected a UKI setup"
|
|
||||||
# Relying on mkinitcpio to assemble a UKI
|
|
||||||
# https://wiki.archlinux.org/title/Unified_kernel_image
|
|
||||||
if ! grep -q splash /etc/cmdline.d/*.conf; then
|
|
||||||
# Need splash, create the omarchy file
|
|
||||||
echo "splash" | sudo tee -a /etc/cmdline.d/omarchy.conf
|
|
||||||
fi
|
|
||||||
if ! grep -q quiet /etc/cmdline.d/*.conf; then
|
|
||||||
# Need quiet, create or append the omarchy file
|
|
||||||
echo "quiet" | sudo tee -a /etc/cmdline.d/omarchy.conf
|
|
||||||
fi
|
|
||||||
elif [ -f "/etc/kernel/cmdline" ]; then # UKI Alternate
|
|
||||||
# Alternate UKI kernel cmdline location
|
|
||||||
echo "Detected a UKI setup"
|
|
||||||
|
|
||||||
# Backup kernel cmdline config before modifying
|
|
||||||
backup_timestamp=$(date +"%Y%m%d%H%M%S")
|
|
||||||
sudo cp /etc/kernel/cmdline "/etc/kernel/cmdline.bak.${backup_timestamp}"
|
|
||||||
|
|
||||||
current_cmdline=$(cat /etc/kernel/cmdline)
|
|
||||||
|
|
||||||
# Add splash and quiet if not present
|
|
||||||
new_cmdline="$current_cmdline"
|
|
||||||
if [[ ! "$current_cmdline" =~ splash ]]; then
|
|
||||||
new_cmdline="$new_cmdline splash"
|
|
||||||
fi
|
|
||||||
if [[ ! "$current_cmdline" =~ quiet ]]; then
|
|
||||||
new_cmdline="$new_cmdline quiet"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Trim any leading/trailing spaces
|
|
||||||
new_cmdline=$(echo "$new_cmdline" | xargs)
|
|
||||||
|
|
||||||
# Write new file
|
|
||||||
echo $new_cmdline | sudo tee /etc/kernel/cmdline
|
|
||||||
else
|
|
||||||
echo ""
|
|
||||||
echo " None of systemd-boot, GRUB, or UKI detected. Please manually add these kernel parameters:"
|
|
||||||
echo " - splash (to see the graphical splash screen)"
|
|
||||||
echo " - quiet (for silent boot)"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$(plymouth-set-default-theme)" != "omarchy" ]; then
|
|
||||||
sudo cp -r "$HOME/.local/share/omarchy/default/plymouth" /usr/share/plymouth/themes/omarchy/
|
|
||||||
sudo plymouth-set-default-theme -R omarchy
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# SEAMLESS LOGIN
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
if [ ! -x /usr/local/bin/seamless-login ]; then
|
|
||||||
# Compile the seamless login helper -- needed to prevent seeing terminal between loader and desktop
|
|
||||||
cat <<'CCODE' >/tmp/seamless-login.c
|
|
||||||
/*
|
|
||||||
* Seamless Login - Minimal SDDM-style Plymouth transition
|
|
||||||
* Replicates SDDM's VT management for seamless auto-login
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <linux/kd.h>
|
|
||||||
#include <linux/vt.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
int vt_fd;
|
|
||||||
int vt_num = 1; // TTY1
|
|
||||||
char vt_path[32];
|
|
||||||
|
|
||||||
if (argc < 2) {
|
|
||||||
fprintf(stderr, "Usage: %s <session_command>\n", argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open the VT (simple approach like SDDM)
|
|
||||||
snprintf(vt_path, sizeof(vt_path), "/dev/tty%d", vt_num);
|
|
||||||
vt_fd = open(vt_path, O_RDWR);
|
|
||||||
if (vt_fd < 0) {
|
|
||||||
perror("Failed to open VT");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Activate the VT
|
|
||||||
if (ioctl(vt_fd, VT_ACTIVATE, vt_num) < 0) {
|
|
||||||
perror("VT_ACTIVATE failed");
|
|
||||||
close(vt_fd);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait for VT to be active
|
|
||||||
if (ioctl(vt_fd, VT_WAITACTIVE, vt_num) < 0) {
|
|
||||||
perror("VT_WAITACTIVE failed");
|
|
||||||
close(vt_fd);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Critical: Set graphics mode to prevent console text
|
|
||||||
if (ioctl(vt_fd, KDSETMODE, KD_GRAPHICS) < 0) {
|
|
||||||
perror("KDSETMODE KD_GRAPHICS failed");
|
|
||||||
close(vt_fd);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear VT and close (like SDDM does)
|
|
||||||
const char *clear_seq = "\33[H\33[2J";
|
|
||||||
if (write(vt_fd, clear_seq, strlen(clear_seq)) < 0) {
|
|
||||||
perror("Failed to clear VT");
|
|
||||||
}
|
|
||||||
|
|
||||||
close(vt_fd);
|
|
||||||
|
|
||||||
// Set working directory to user's home
|
|
||||||
const char *home = getenv("HOME");
|
|
||||||
if (home) chdir(home);
|
|
||||||
|
|
||||||
// Now execute the session command
|
|
||||||
execvp(argv[1], &argv[1]);
|
|
||||||
perror("Failed to exec session");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
CCODE
|
|
||||||
|
|
||||||
gcc -o /tmp/seamless-login /tmp/seamless-login.c
|
|
||||||
sudo mv /tmp/seamless-login /usr/local/bin/seamless-login
|
|
||||||
sudo chmod +x /usr/local/bin/seamless-login
|
|
||||||
rm /tmp/seamless-login.c
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f /etc/systemd/system/omarchy-seamless-login.service ]; then
|
|
||||||
cat <<EOF | sudo tee /etc/systemd/system/omarchy-seamless-login.service
|
|
||||||
[Unit]
|
|
||||||
Description=Omarchy Seamless Auto-Login
|
|
||||||
Documentation=https://github.com/basecamp/omarchy
|
|
||||||
Conflicts=getty@tty1.service
|
|
||||||
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
|
|
||||||
PartOf=graphical.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
ExecStart=/usr/local/bin/seamless-login uwsm start -- hyprland.desktop
|
|
||||||
Restart=always
|
|
||||||
RestartSec=2
|
|
||||||
User=$USER
|
|
||||||
TTYPath=/dev/tty1
|
|
||||||
TTYReset=yes
|
|
||||||
TTYVHangup=yes
|
|
||||||
TTYVTDisallocate=yes
|
|
||||||
StandardInput=tty
|
|
||||||
StandardOutput=journal
|
|
||||||
StandardError=journal+console
|
|
||||||
PAMName=login
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical.target
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f /etc/systemd/system/plymouth-quit.service.d/wait-for-graphical.conf ]; then
|
|
||||||
# Make plymouth remain until graphical.target
|
|
||||||
sudo mkdir -p /etc/systemd/system/plymouth-quit.service.d
|
|
||||||
sudo tee /etc/systemd/system/plymouth-quit.service.d/wait-for-graphical.conf <<'EOF'
|
|
||||||
[Unit]
|
|
||||||
After=multi-user.target
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Mask plymouth-quit-wait.service only if not already masked
|
|
||||||
if ! systemctl is-enabled plymouth-quit-wait.service | grep -q masked; then
|
|
||||||
sudo systemctl mask plymouth-quit-wait.service
|
|
||||||
sudo systemctl daemon-reload
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Enable omarchy-seamless-login.service only if not already enabled
|
|
||||||
if ! systemctl is-enabled omarchy-seamless-login.service | grep -q enabled; then
|
|
||||||
sudo systemctl enable omarchy-seamless-login.service
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Disable getty@tty1.service only if not already disabled
|
|
||||||
if ! systemctl is-enabled getty@tty1.service | grep -q disabled; then
|
|
||||||
sudo systemctl disable getty@tty1.service
|
|
||||||
fi
|
|
@ -1,9 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if ! command -v tzupdate &>/dev/null; then
|
|
||||||
yay -S --noconfirm --needed tzupdate
|
|
||||||
sudo tee /etc/sudoers.d/omarchy-tzupdate >/dev/null <<EOF
|
|
||||||
%wheel ALL=(root) NOPASSWD: /usr/bin/tzupdate, /usr/bin/timedatectl
|
|
||||||
EOF
|
|
||||||
sudo chmod 0440 /etc/sudoers.d/omarchy-tzupdate
|
|
||||||
fi
|
|
@ -1,16 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
sudo pacman -S --noconfirm cups cups-pdf cups-filters cups-browsed system-config-printer avahi nss-mdns
|
|
||||||
sudo systemctl enable --now cups.service
|
|
||||||
|
|
||||||
# Disable multicast dns in resolved. Avahi will provide this for better network printer discovery
|
|
||||||
sudo mkdir -p /etc/systemd/resolved.conf.d
|
|
||||||
echo -e "[Resolve]\nMulticastDNS=no" | sudo tee /etc/systemd/resolved.conf.d/10-disable-multicast.conf
|
|
||||||
sudo systemctl enable --now avahi-daemon.service
|
|
||||||
|
|
||||||
# Enable automatically adding remote printers
|
|
||||||
if ! grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf; then
|
|
||||||
echo 'CreateRemotePrinters Yes' | sudo tee -a /etc/cups/cups-browsed.conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo systemctl enable --now cups-browsed.service
|
|
@ -17,22 +17,4 @@ fi
|
|||||||
|
|
||||||
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
|
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
|
||||||
gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
|
gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
|
||||||
gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue"
|
gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue"
|
||||||
|
|
||||||
# Setup theme links
|
|
||||||
mkdir -p ~/.config/omarchy/themes
|
|
||||||
for f in ~/.local/share/omarchy/themes/*; do ln -nfs "$f" ~/.config/omarchy/themes/; done
|
|
||||||
|
|
||||||
# Set initial theme
|
|
||||||
mkdir -p ~/.config/omarchy/current
|
|
||||||
ln -snf ~/.config/omarchy/themes/tokyo-night ~/.config/omarchy/current/theme
|
|
||||||
ln -snf ~/.config/omarchy/current/theme/backgrounds/1-scenery-pink-lakeside-sunset-lake-landscape-scenic-panorama-7680x3215-144.png ~/.config/omarchy/current/background
|
|
||||||
|
|
||||||
# Set specific app links for current theme
|
|
||||||
ln -snf ~/.config/omarchy/current/theme/neovim.lua ~/.config/nvim/lua/plugins/theme.lua
|
|
||||||
|
|
||||||
mkdir -p ~/.config/btop/themes
|
|
||||||
ln -snf ~/.config/omarchy/current/theme/btop.theme ~/.config/btop/themes/current.theme
|
|
||||||
|
|
||||||
mkdir -p ~/.config/mako
|
|
||||||
ln -snf ~/.config/omarchy/current/theme/mako.ini ~/.config/mako/config
|
|
90
scripts/desktop/uwsm.sh
Normal file
90
scripts/desktop/uwsm.sh
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Install and configure UWSM (Universal Wayland Session Manager) for Hyprland
|
||||||
|
|
||||||
|
# Install UWSM and dbus-broker (recommended)
|
||||||
|
yay -S --noconfirm --needed uwsm dbus-broker
|
||||||
|
|
||||||
|
# Enable and start dbus-broker
|
||||||
|
sudo systemctl enable dbus-broker.service
|
||||||
|
sudo systemctl --global enable dbus-broker.service
|
||||||
|
|
||||||
|
# Create uwsm config directory
|
||||||
|
mkdir -p ~/.config/uwsm
|
||||||
|
|
||||||
|
# Create common environment variables file
|
||||||
|
cat > ~/.config/uwsm/env << 'EOF'
|
||||||
|
# Common environment variables for all graphical sessions
|
||||||
|
export GTK_THEME=Adwaita:dark
|
||||||
|
export QT_STYLE_OVERRIDE=Adwaita-Dark
|
||||||
|
export XCURSOR_THEME=Yaru
|
||||||
|
export XCURSOR_SIZE=24
|
||||||
|
export MOZ_ENABLE_WAYLAND=1
|
||||||
|
export QT_QPA_PLATFORM=wayland
|
||||||
|
export SDL_VIDEODRIVER=wayland
|
||||||
|
export _JAVA_AWT_WM_NONREPARENTING=1
|
||||||
|
export XDG_CURRENT_DESKTOP=Hyprland
|
||||||
|
export XDG_SESSION_TYPE=wayland
|
||||||
|
export XDG_SESSION_DESKTOP=Hyprland
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create Hyprland-specific environment variables file
|
||||||
|
cat > ~/.config/uwsm/env-hyprland << 'EOF'
|
||||||
|
# Hyprland-specific environment variables
|
||||||
|
export HYPRLAND_LOG_WLR=1
|
||||||
|
export HYPRLAND_NO_RT=1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create desktop entry for display manager
|
||||||
|
sudo mkdir -p /usr/share/wayland-sessions
|
||||||
|
sudo tee /usr/share/wayland-sessions/hyprland-uwsm.desktop > /dev/null << 'EOF'
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Hyprland (with UWSM)
|
||||||
|
Comment=Hyprland managed by Universal Wayland Session Manager
|
||||||
|
Exec=uwsm start hyprland.desktop
|
||||||
|
Type=Application
|
||||||
|
DesktopNames=Hyprland
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Add UWSM startup to .profile if not already present
|
||||||
|
if ! grep -q "uwsm check may-start" ~/.profile 2>/dev/null; then
|
||||||
|
echo "Adding UWSM startup to ~/.profile"
|
||||||
|
cat >> ~/.profile << 'EOF'
|
||||||
|
|
||||||
|
# Start UWSM if conditions are met
|
||||||
|
if uwsm check may-start && uwsm select; then
|
||||||
|
exec uwsm start default
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create a UWSM service to handle Hyprland autostart applications
|
||||||
|
mkdir -p ~/.config/systemd/user
|
||||||
|
cat > ~/.config/systemd/user/uwsm-app-daemon.service << 'EOF'
|
||||||
|
[Unit]
|
||||||
|
Description=UWSM Application Daemon
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
ExecStart=/bin/bash -c 'uwsm finalize'
|
||||||
|
RemainAfterExit=yes
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical-session.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Enable the UWSM service
|
||||||
|
systemctl --user enable uwsm-app-daemon.service
|
||||||
|
|
||||||
|
echo "UWSM installation and configuration completed!"
|
||||||
|
echo ""
|
||||||
|
echo "Usage:"
|
||||||
|
echo " - From TTY: The system will automatically start UWSM when logging in"
|
||||||
|
echo " - From display manager: Select 'Hyprland (with UWSM)' from the session menu"
|
||||||
|
echo " - Launch applications: Use 'uwsm app -- command' instead of just 'command'"
|
||||||
|
echo " - Stop session: Use 'uwsm stop' (do not use Hyprland's exit command)"
|
||||||
|
echo ""
|
||||||
|
echo "Note: Update your Hyprland config to use 'uwsm app --' for exec-once commands"
|
||||||
|
echo "Example: exec-once = uwsm app -- waybar"
|
Loading…
x
Reference in New Issue
Block a user