diff options
| author | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
|---|---|---|
| committer | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
| commit | 70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch) | |
| tree | ab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-hyprland-theme/theme-data/hypr | |
| parent | 5d94c0a7d44a2255b81815a52a7056a94a39842d (diff) | |
| download | RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip | |
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-hyprland-theme/theme-data/hypr')
9 files changed, 573 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/hypr/dms/colors.conf b/raveos-hyprland-theme/theme-data/hypr/dms/colors.conf new file mode 100644 index 0000000..16adcd2 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/hypr/dms/colors.conf @@ -0,0 +1,22 @@ +$primary = rgb(3d7839) +$outline = rgb(8a9386) +$error = rgb(f44336) + +general { + col.active_border = $primary + col.inactive_border = $outline +} + +group { + col.border_active = $primary + col.border_inactive = $outline + col.border_locked_active = $error + col.border_locked_inactive = $outline + + groupbar { + col.active = $primary + col.inactive = $outline + col.locked_active = $error + col.locked_inactive = $outline + } +} diff --git a/raveos-hyprland-theme/theme-data/hypr/dms/cursor.conf b/raveos-hyprland-theme/theme-data/hypr/dms/cursor.conf new file mode 100644 index 0000000..1054579 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/hypr/dms/cursor.conf @@ -0,0 +1,6 @@ +# Auto-generated by DMS - do not edit manually + +env = HYPRCURSOR_THEME,default +env = XCURSOR_THEME,default +env = HYPRCURSOR_SIZE,24 +env = XCURSOR_SIZE,24 diff --git a/raveos-hyprland-theme/theme-data/hypr/dms/layout.conf b/raveos-hyprland-theme/theme-data/hypr/dms/layout.conf new file mode 100644 index 0000000..b9a8ad9 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/hypr/dms/layout.conf @@ -0,0 +1,11 @@ +# Auto-generated by DMS - do not edit manually + +general { + gaps_in = 4 + gaps_out = 4 + border_size = 2 +} + +decoration { + rounding = 12 +} diff --git a/raveos-hyprland-theme/theme-data/hypr/dms/windowrules.conf b/raveos-hyprland-theme/theme-data/hypr/dms/windowrules.conf new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/hypr/dms/windowrules.conf diff --git a/raveos-hyprland-theme/theme-data/hypr/hyprland.conf b/raveos-hyprland-theme/theme-data/hypr/hyprland.conf new file mode 100644 index 0000000..efdfc7d --- /dev/null +++ b/raveos-hyprland-theme/theme-data/hypr/hyprland.conf @@ -0,0 +1,154 @@ +source = ./dms/colors.conf + +# +# ALT TAB# +# +bind = SUPER, TAB, exec, hyprswitch gui --mod-key super_l --key tab --close mod-key-release --sort-recent --filter-current-monitor + +# +# MONITORS# +# +source = ./monitors.conf +source = ./workspaces.conf + +# +# MY PROGRAMS# +# +$terminal = kitty +$fileManager = Thunar + +# +# AUTOSTART & ENVIRONMENT# +# +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = dbus-update-activation-environment --systemd --all +exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' +exec-once = bash -c "wl-paste --watch cliphist store &" +exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 +exec-once = sleep 1 && dms run --config ~/.config/dms/ +exec-once = sleep 3 && dms ipc call wallpaper set "/usr/share/backgrounds/raveos/raveos-main-bg.jpeg" +exec-once = sleep 1 && /usr/lib/pam_kwallet_init +exec-once = /usr/lib/mate-polkit/polkit-mate-authentication-agent-1 + +# Theme & VM Fixes +env = XCURSOR_SIZE,24 +env = HYPRCURSOR_SIZE,24 +env = WLR_NO_HARDWARE_CURSORS,1 +env = WLR_RENDERER_ALLOW_SOFTWARE,1 +env = XDG_CURRENT_DESKTOP,Hyprland +env = XDG_SESSION_TYPE,wayland +env = XDG_SESSION_DESKTOP,Hyprland +env = GDK_BACKEND,wayland +env = QT_QPA_PLATFORM,wayland +env = QT_QPA_PLATFORMTHEME,qt6ct +env = QT_AUTO_SCREEN_SCALE_FACTOR,1 +env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 +env = QT_STYLE_OVERRIDE,kvantum + +# +# LOOK AND FEEL# +# +general { + gaps_in = 5 + gaps_out = 2 + border_size = 2 + col.active_border = $primary + col.inactive_border = $outline + resize_on_border = true + layout = dwindle +} + +decoration { + rounding = 11 + active_opacity = 1.0 + inactive_opacity = 1.0 + shadow { + enabled = false + } + blur { + enabled = true + size = 3 + passes = 1 + vibrancy = 0.1696 + } +} + +animations { + enabled = yes + bezier = easeOutQuint,0.23,1,0.32,1 + animation = global, 1, 10, default + animation = windows, 1, 4.79, easeOutQuint + animation = layers, 1, 3.81, easeOutQuint + animation = workspaces, 1, 1.94, almostLinear, fade +} + +dwindle { + pseudotile = true + preserve_split = true +} + +master { + new_status = master +} + +misc { + force_default_wallpaper = 0 + disable_hyprland_logo = true +} + +input { + kb_layout = gb + follow_mouse = 1 + numlock_by_default = true +} + +cursor { + no_warps = true +} + +# +# KEYBINDINGS# +# +$mainMod = SUPER +bind = $mainMod, Q, killactive, +bind = $mainMod, M, exit, +bind = $mainMod, E, exec, nautilus +bind = $mainMod, V, togglefloating, +bind = $mainMod, P, pseudo, +bind = $mainMod, J, togglesplit, +bind = $mainMod, Return, exec, $terminal + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Switch workspaces with mainMod + [1-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 + +# Shell Binds +bind = SUPER, SUPER_L, exec, dms ipc call spotlight toggle +bind = $mainMod, V, exec, dms ipc call clipboard toggle +bind = $mainMod, comma, exec, dms ipc call settings toggle +bind = $mainMod, N, exec, dms ipc call notifications toggle +bind = $mainMod SHIFT, N, exec, dms ipc call notepad toggle +bind = $mainMod, Y, exec, dms ipc call wallpaper next + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Source remaining DMS configs +source = ./dms/cursor.conf +source = ./dms/layout.conf +source = ./dms/windowrules.conf diff --git a/raveos-hyprland-theme/theme-data/hypr/monitors.conf b/raveos-hyprland-theme/theme-data/hypr/monitors.conf new file mode 100644 index 0000000..12d095a --- /dev/null +++ b/raveos-hyprland-theme/theme-data/hypr/monitors.conf @@ -0,0 +1,5 @@ +# Auto-generated by raveos-monitor-setup +# Run raveos-monitor-setup to reconfigure monitors +# Format: monitor=NAME, RESxRES@HZ, POSxPOS, SCALE + +monitor=,preferred,auto,1 diff --git a/raveos-hyprland-theme/theme-data/hypr/scripts/alt-tab.sh b/raveos-hyprland-theme/theme-data/hypr/scripts/alt-tab.sh new file mode 100755 index 0000000..0a40f9d --- /dev/null +++ b/raveos-hyprland-theme/theme-data/hypr/scripts/alt-tab.sh @@ -0,0 +1,273 @@ +#!/bin/bash + +STATE_DIR="/tmp/hypr-alt-tab" +STATE_FILE="$STATE_DIR/state" +TIME_FILE="$STATE_DIR/last_press" +CURRENT_INDEX_FILE="$STATE_DIR/current_index" +WINDOW_LIST_FILE="$STATE_DIR/window_list" + +# Cooldown in seconds (time within which presses count as "continuous") +COOLDOWN=0.8 + +# Create state directory if it doesn't exist +mkdir -p "$STATE_DIR" + +# Parse arguments +same_type=false +reverse=false +visible_only=false + +for arg in "$@"; do + case $arg in + --same) same_type=true ;; + --reverse) reverse=true ;; + --visible) visible_only=true ;; + esac +done + +# Function to get window class +get_window_class() { + local window="$1" + hyprctl clients -j | jq -r --arg addr "$window" '.[] | select(.address == $addr) | .class' +} + +# Function to get window title +get_window_title() { + local window="$1" + hyprctl clients -j | jq -r --arg addr "$window" '.[] | select(.address == $addr) | .title' +} + +# Function to get window workspace ID +get_window_workspace() { + local window="$1" + hyprctl clients -j | jq -r --arg addr "$window" '.[] | select(.address == $addr) | .workspace.id' +} + +# Function to get active workspaces (visible on monitors) +get_active_workspaces() { + hyprctl monitors -j | jq -r '.[].activeWorkspace.id' +} + +# Function to get all windows sorted by focus history (most recent first) +get_windows_by_focus() { + hyprctl clients -j | jq -r 'sort_by(-.focusHistoryID) | .[].address' +} + +# Function to get visible windows (on active workspaces) +get_visible_windows() { + # Get all active workspace IDs + mapfile -t active_workspaces < <(get_active_workspaces) + + if [[ ${#active_workspaces[@]} -eq 0 ]]; then + return + fi + + # Convert active workspaces to JSON array for jq query + local workspaces_json="[" + for ws in "${active_workspaces[@]}"; do + workspaces_json+="$ws," + done + workspaces_json="${workspaces_json%,}]" + + # Get windows in active workspaces, sorted by focus history + hyprctl clients -j | jq -r --argjson workspaces "$workspaces_json" ' + [.[] | select(.workspace.id as $ws | $workspaces | index($ws))] + | sort_by(-.focusHistoryID) + | .[].address + ' +} + +# Function to get windows filtered by type (same class or title pattern) +get_same_type_windows() { + local current_window="$1" + local current_class=$(get_window_class "$current_window") + local current_title=$(get_window_title "$current_window") + + # Get all windows with same class + hyprctl clients -j | jq -r --arg class "$current_class" \ + '.[] | select(.class == $class) | .address' +} + +# Function to get currently focused window +get_focused_window() { + hyprctl activewindow -j | jq -r '.address' +} + +# Function to check if window exists +window_exists() { + local window="$1" + [[ -n "$window" ]] && hyprctl clients -j | jq -r '.[].address' | grep -q "^${window}$" +} + +# Function to validate and refresh window list +validate_window_list() { + local windows=("$@") + local valid_windows=() + + for window in "${windows[@]}"; do + if window_exists "$window"; then + valid_windows+=("$window") + fi + done + + printf '%s\n' "${valid_windows[@]}" +} + +# Get currently focused window +current_focused=$(get_focused_window) + +# Get appropriate window list based on mode +if [[ "$visible_only" == "true" ]]; then + # Get only windows in active workspaces (visible on monitors) + echo "Switching between visible windows only" >&2 + mapfile -t windows < <(get_visible_windows) + + # If no visible windows, fall back to all windows + if [[ ${#windows[@]} -eq 0 ]]; then + echo "No visible windows found, falling back to all windows" >&2 + mapfile -t windows < <(get_windows_by_focus) + fi + + # Apply same-type filter if requested + if [[ "$same_type" == "true" ]] && [[ -n "$current_focused" ]]; then + # Get windows of the same type as current (from visible windows) + mapfile -t same_type_windows < <(get_same_type_windows "$current_focused") + + # Filter visible windows to only include same-type windows + local filtered_windows=() + for visible_window in "${windows[@]}"; do + for same_window in "${same_type_windows[@]}"; do + if [[ "$visible_window" == "$same_window" ]]; then + filtered_windows+=("$visible_window") + break + fi + done + done + + # If filtered list has windows, use it + if [[ ${#filtered_windows[@]} -gt 0 ]]; then + windows=("${filtered_windows[@]}") + else + echo "No visible windows of same type, using all visible windows" >&2 + fi + fi +elif [[ "$same_type" == "true" ]] && [[ -n "$current_focused" ]]; then + # Get windows of the same type as current (from all windows) + mapfile -t windows < <(get_same_type_windows "$current_focused") + + # If no same-type windows or only current window, fall back to all windows + if [[ ${#windows[@]} -le 1 ]]; then + echo "No other windows of same type found, switching to all windows" >&2 + mapfile -t windows < <(get_windows_by_focus) + fi +else + # Get all windows + mapfile -t windows < <(get_windows_by_focus) +fi + +# Validate windows still exist +mapfile -t windows < <(validate_window_list "${windows[@]}") + +# Exit if no windows or only one window +if [[ ${#windows[@]} -le 1 ]]; then + echo "Not enough windows to switch" >&2 + exit 0 +fi + +# Get current time +current_time=$(date +%s.%N) + +# Read last press time +last_press=0 +[[ -f "$TIME_FILE" ]] && last_press=$(<"$TIME_FILE") + +# Calculate time difference +time_diff=$(echo "$current_time - $last_press" | bc -l 2>/dev/null || echo "1") + +# Check if we're continuing the Alt+Tab session +continuing_session=false +if (( $(echo "$time_diff <= $COOLDOWN" | bc -l 2>/dev/null || echo "0") )); then + continuing_session=true +fi + +# Find current window index in the list +current_index=-1 +for i in "${!windows[@]}"; do + if [[ "${windows[$i]}" == "$current_focused" ]]; then + current_index=$i + break + fi +done + +# If current window not in filtered list, start from beginning +if [[ $current_index -eq -1 ]]; then + current_index=0 +fi + +# Calculate target index +if [[ "$continuing_session" == "true" ]] && [[ -f "$CURRENT_INDEX_FILE" ]] && [[ -f "$WINDOW_LIST_FILE" ]]; then + # Read saved state + saved_index=$(<"$CURRENT_INDEX_FILE") + mapfile -t saved_windows < "$WINDOW_LIST_FILE" + + # Check if saved windows match current windows + same_list=true + if [[ ${#windows[@]} -ne ${#saved_windows[@]} ]]; then + same_list=false + else + for i in "${!windows[@]}"; do + if [[ "${windows[$i]}" != "${saved_windows[$i]}" ]]; then + same_list=false + break + fi + done + fi + + if [[ "$same_list" == "true" ]]; then + if [[ "$reverse" == "true" ]]; then + target_index=$(( (saved_index - 1 + ${#windows[@]}) % ${#windows[@]} )) + else + target_index=$(( (saved_index + 1) % ${#windows[@]} )) + fi + else + # List changed, recalculate from current + if [[ "$reverse" == "true" ]]; then + target_index=$(( (current_index - 1 + ${#windows[@]}) % ${#windows[@]} )) + else + target_index=$(( (current_index + 1) % ${#windows[@]} )) + fi + fi +else + # Start new session - move from current window + if [[ "$reverse" == "true" ]]; then + target_index=$(( (current_index - 1 + ${#windows[@]}) % ${#windows[@]} )) + else + target_index=$(( (current_index + 1) % ${#windows[@]} )) + fi +fi + +# Save state +echo "$current_time" > "$TIME_FILE" +echo "$target_index" > "$CURRENT_INDEX_FILE" +printf '%s\n' "${windows[@]}" > "$WINDOW_LIST_FILE" + +# Focus the target window +target_window="${windows[$target_index]}" +if window_exists "$target_window"; then + echo "Switching to window: $target_window (Class: $(get_window_class "$target_window"), Workspace: $(get_window_workspace "$target_window"))" >&2 + hyprctl dispatch focuswindow "address:$target_window" + hyprctl dispatch bringactivetotop +fi + +# Visual feedback: dim inactive windows temporarily +hyprctl keyword decoration:dim_inactive true 2>/dev/null + +# Clear any existing reset timer +[[ -f "$STATE_DIR/dim_timer" ]] && kill "$(<"$STATE_DIR/dim_timer")" 2>/dev/null || true + +# Start timer to reset dimming +( + sleep 1.2 + hyprctl keyword decoration:dim_inactive false 2>/dev/null +) & +echo $! > "$STATE_DIR/dim_timer" diff --git a/raveos-hyprland-theme/theme-data/hypr/scripts/raveos-monitor-setup.sh b/raveos-hyprland-theme/theme-data/hypr/scripts/raveos-monitor-setup.sh new file mode 100755 index 0000000..2790ee4 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/hypr/scripts/raveos-monitor-setup.sh @@ -0,0 +1,100 @@ +#!/bin/bash +# raveos-monitor-setup - Auto-detect monitors and generate Hyprland config +# Sets each monitor to max resolution at 60Hz +# +# Usage: raveos-monitor-setup.sh [--hypr-dir PATH] +# Default hypr dir: ~/.config/hypr + +HYPR_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/hypr" + +# Parse arguments +while [[ $# -gt 0 ]]; do + case "$1" in + --hypr-dir) HYPR_DIR="$2"; shift 2 ;; + *) shift ;; + esac +done + +MONITORS_CONF="$HYPR_DIR/monitors.conf" +WORKSPACES_CONF="$HYPR_DIR/workspaces.conf" + +# Find connected monitors via DRM sysfs +declare -a MON_NAMES +declare -a MON_RESOLUTIONS +declare -a MON_WIDTHS + +for card_output in /sys/class/drm/card*-*; do + [[ ! -d "$card_output" ]] && continue + + status=$(cat "$card_output/status" 2>/dev/null) + [[ "$status" != "connected" ]] && continue + + # Get output name: card0-DP-1 → DP-1, card1-HDMI-A-1 → HDMI-A-1 + raw_name=$(basename "$card_output") + name="${raw_name#card*-}" + + # Get available modes (first line = highest resolution) + modes_file="$card_output/modes" + if [[ -f "$modes_file" ]]; then + max_mode=$(head -1 "$modes_file") + if [[ -n "$max_mode" ]]; then + # Extract width from resolution (e.g., 2560x1440 → 2560) + width="${max_mode%%x*}" + MON_NAMES+=("$name") + MON_RESOLUTIONS+=("$max_mode") + MON_WIDTHS+=("$width") + fi + fi +done + +# If no monitors found, use fallback +if [[ ${#MON_NAMES[@]} -eq 0 ]]; then + cat > "$MONITORS_CONF" << 'EOF' +# Auto-generated by raveos-monitor-setup +# No monitors detected - using fallback +monitor=,preferred,auto,1 +EOF + cat > "$WORKSPACES_CONF" << 'EOF' +# Auto-generated by raveos-monitor-setup +# No monitors detected +EOF + echo "No monitors detected, using fallback config" + exit 0 +fi + +# Generate monitors.conf +cat > "$MONITORS_CONF" << 'EOF' +# Auto-generated by raveos-monitor-setup +# Run raveos-monitor-setup.sh to reconfigure monitors +EOF + +pos_x=0 +for ((i=0; i<${#MON_NAMES[@]}; i++)); do + echo "monitor=${MON_NAMES[$i]}, ${MON_RESOLUTIONS[$i]}@60, ${pos_x}x0, 1" >> "$MONITORS_CONF" + pos_x=$((pos_x + MON_WIDTHS[i])) +done + +# Generate workspaces.conf - distribute 10 workspaces across monitors +cat > "$WORKSPACES_CONF" << 'EOF' +# Auto-generated by raveos-monitor-setup +EOF + +num_monitors=${#MON_NAMES[@]} +ws_per_mon=$((10 / num_monitors)) +remaining=$((10 % num_monitors)) + +ws=1 +for ((i=0; i<num_monitors; i++)); do + count=$ws_per_mon + [[ $i -lt $remaining ]] && ((count++)) + + for ((j=0; j<count; j++)); do + echo "workspace=$ws, monitor:${MON_NAMES[$i]}, persistent:1" >> "$WORKSPACES_CONF" + ((ws++)) + done +done + +echo "Monitor setup complete: ${#MON_NAMES[@]} monitor(s) configured" +for ((i=0; i<${#MON_NAMES[@]}; i++)); do + echo " ${MON_NAMES[$i]}: ${MON_RESOLUTIONS[$i]}@60" +done diff --git a/raveos-hyprland-theme/theme-data/hypr/workspaces.conf b/raveos-hyprland-theme/theme-data/hypr/workspaces.conf new file mode 100644 index 0000000..328ed03 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/hypr/workspaces.conf @@ -0,0 +1,2 @@ +# Auto-generated by raveos-monitor-setup +# Workspace assignments are configured automatically based on connected monitors |