diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e898e84 --- /dev/null +++ b/.gitignore @@ -0,0 +1,59 @@ +``` +# Logs and temp files +*.log +*.tmp +*.swp + +# Environment +.env +.env.local +*.env.* + +# Editors +.vscode/ +.idea/ + +# OS generated files +.DS_Store +Thumbs.db + +# Build artifacts +dist/ +build/ +target/ + +# Dependencies +node_modules/ +.venv/ +venv/ +__pycache__/ +.mypy_cache/ +.pytest_cache/ +.coverage +coverage/ +htmlcov/ + +# Compression files +*.zip +*.gz +*.tar +*.tgz +*.bz2 +*.xz +*.7z +*.rar +*.zst +*.lz4 +*.lzh +*.cab +*.arj +*.rpm +*.deb +*.Z +*.lz +*.lzo +*.tar.gz +*.tar.bz2 +*.tar.xz +*.tar.zst +``` \ No newline at end of file diff --git a/README.md b/README.md index 8b13789..0c7f925 100644 --- a/README.md +++ b/README.md @@ -1 +1,189 @@ +# Enhanced Illogical Impulse Theme +A modern, feature-rich Hyprland theme based on the beautiful **Illogical Impulse** by end-4 dots, with additional enhancements and modular architecture. + +## 🎨 Features + +### Phase 1: Foundation & Architecture ✅ +- **Modular Configuration**: Organized directory structure with separate modules + - `colors.conf` - Centralized color palette + - `settings.conf` - User-customizable settings + - `monitors/` - Display configurations + - `animations/` - Basic and enhanced animations + - `binds/` - Core, media, workspace, and window keybindings + - `windowrules/` - General and special window rules + +- **Performance Optimizations** + - Variable Frame Rate (VFR) enabled + - Configurable animation speeds + - Battery-aware performance mode (optional) + +### Planned Features (Future Phases) +- **Phase 2**: Dynamic wallpapers, GLSL shaders, cursor theming, enhanced hyprlock +- **Phase 3**: Interactive Waybar widgets, enhanced notifications, OSD +- **Phase 4**: Smart window rules, Zen Mode, clipboard manager, screenshot suite +- **Phase 5**: Resource dashboard, battery saver, Bluetooth audio switcher +- **Phase 6**: Complete documentation and troubleshooting guide + +## 📦 Installation + +### Prerequisites + +Required packages: +```bash +# Arch Linux +sudo pacman -S hyprland waybar wofi kitty swaync hyprlock hypridle \ + grim slurp wl-clipboard playerctl brightnessctl wireplumber + +# Fedora +sudo dnf install hyprland waybar wofi kitty swaync hyprlock hypridle \ + grim slurp wl-clipboard playerctl brightnessctl wireplumber +``` + +### Quick Install + +```bash +cd /workspace +./scripts/install.sh +``` + +The installer will: +1. Check for dependencies +2. Backup existing configuration +3. Create directory structure +4. Install all configuration files +5. Set proper permissions + +### Manual Installation + +```bash +# Copy config directory +cp -r config/hypr ~/.config/ + +# Or symlink for development +ln -s $(pwd)/config/hypr ~/.config/hypr +``` + +## ⌨️ Default Keybindings + +| Keybinding | Action | +|------------|--------| +| `SUPER + RETURN` | Open terminal (kitty) | +| `SUPER + D` | Open app launcher (wofi) | +| `SUPER + SHIFT + D` | Open run dialog | +| `SUPER + L` | Lock screen | +| `SUPER + Q` | Close active window | +| `SUPER + F` | Toggle fullscreen | +| `SUPER + H/J/K/L` | Navigate between windows | +| `SUPER + 1-9` | Switch to workspace | +| `SUPER + SHIFT + 1-9` | Move window to workspace | +| `SUPER + S` | Toggle scratchpad | +| `SUPER + V` | Clipboard manager | +| `SUPER + N` | Notification center | +| `SUPER + PRINT` | Screenshot output | +| `SUPER + SHIFT + PRINT` | Screenshot area | + +## 🎯 Customization + +### Colors + +Edit `~/.config/hypr/colors.conf` to change the color scheme: + +```ini +[colors] +primary_bg = rgba(1a1b26ff) +primary_fg = rgba(c0caf5ff) +accent_blue = rgba(7aa2f7ff) +# ... more colors +``` + +### Settings + +Edit `~/.config/hypr/settings.conf` for global settings: + +```ini +[settings] +animation_speed = 1.0 +blur_intensity = 8 +border_size = 2 +gaps_in = 5 +gaps_out = 10 +``` + +### Keybindings + +Modify files in `~/.config/hypr/binds/`: +- `core.conf` - Essential shortcuts +- `media.conf` - Media controls +- `workspaces.conf` - Workspace management +- `windows.conf` - Window management + +## 📁 Directory Structure + +``` +/workspace +├── config/ +│ ├── hypr/ +│ │ ├── hyprland.conf # Main entry point +│ │ ├── monitors/ +│ │ ├── animations/ +│ │ ├── binds/ +│ │ └── windowrules/ +│ ├── colors.conf # Color palette +│ └── settings.conf # Global settings +├── scripts/ +│ └── install.sh # Installation script +├── assets/ +│ ├── wallpapers/ +│ ├── icons/ +│ └── cursors/ +└── docs/ # Documentation +``` + +## 🔧 Troubleshooting + +### Common Issues + +1. **Black screen after login** + - Check if all dependencies are installed + - Review logs: `journalctl -u hyprland` + +2. **Keybindings not working** + - Reload config: `SUPER + SHIFT + R` + - Check for syntax errors in config files + +3. **Animations stuttering** + - Reduce animation speed in settings.conf + - Enable performance mode + +## 🤝 Contributing + +Contributions are welcome! Please follow these steps: + +1. Fork the repository +2. Create a feature branch +3. Make your changes +4. Test thoroughly +5. Submit a pull request + +## 📄 License + +This theme is based on the original **Illogical Impulse** theme by end-4 dots. + +## 🙏 Credits + +- Original theme: [end-4/dots-hyprland](https://github.com/end-4/dots-hyprland) +- Icon theme: Tokyonight/Tokyo Night +- Font: JetBrainsMono Nerd Font +- Color scheme: Tokyo Night + +## 📞 Support + +For issues and questions: +- Open an issue on GitHub +- Check the documentation in `/docs` +- Join the Hyprland Discord community + +--- + +**Enjoy your enhanced Hyprland experience!** 🚀 \ No newline at end of file diff --git a/config/colors.conf b/config/colors.conf new file mode 100644 index 0000000..3546c72 --- /dev/null +++ b/config/colors.conf @@ -0,0 +1,44 @@ +# =========================================== +# Centralized Color Palette Configuration +# =========================================== +# Based on Illogical Impulse theme with enhancements + +[colors] +# Primary Colors +primary_bg = rgba(1a1b26ff) +primary_fg = rgba(c0caf5ff) +secondary_bg = rgba(2428dbff) +secondary_fg = rgba(7aa2f7ff) + +# Accent Colors +accent_blue = rgba(7aa2f7ff) +accent_cyan = rgba(7dcfff88) +accent_purple = rgba(bb9af7ff) +accent_green = rgba(9ece6aff) +accent_yellow = rgba(e0af68ff) +accent_red = rgba(f7768eff) +accent_orange = rgba(ff9e64ff) + +# Status Colors +status_good = rgba(9ece6aff) +status_warning = rgba(e0af68ff) +status_critical = rgba(f7768eff) + +# UI Elements +border_active = rgba(7aa2f7ff) +border_inactive = rgba(414868ff) +title_active = rgba(c0caf5ff) +title_inactive = rgba(565f89ff) +panel_bg = rgba(1a1b26ee) +popup_bg = rgba(2428dbff) + +# Gradients (for shaders) +gradient_start = rgba(1a1b26ff) +gradient_mid = rgba(16213eff) +gradient_end = rgba(0d0f18ff) + +# Transparency Levels +opaque = 1.0 +semi_transparent = 0.9 +transparent = 0.8 +glass = 0.6 diff --git a/config/hypr/animations/basic.conf b/config/hypr/animations/basic.conf new file mode 100644 index 0000000..ca1d2e4 --- /dev/null +++ b/config/hypr/animations/basic.conf @@ -0,0 +1,25 @@ +# =========================================== +# Basic Animations Configuration +# =========================================== + +animations { + # Window open/close + animation = windowsIn, 1, 5, myBezier, popin 60% + animation = windowsOut, 1, 4, myBezier, popin 60% + + # Window fade + animation = fadeIn, 1, 5, myBezier + + # Window move/resize + animation = windowsMove, 1, 4, myBezier + + # Border fade + animation = border, 1, 4, linear + + # Fade on switch (workspaces) + animation = fade, 1, 5, myBezier + + # Layers (notifications, menus) + animation = layersIn, 1, 4, myBezier, slide + animation = layersOut, 1, 3, myBezier, slide +} diff --git a/config/hypr/animations/enhanced.conf b/config/hypr/animations/enhanced.conf new file mode 100644 index 0000000..05347c7 --- /dev/null +++ b/config/hypr/animations/enhanced.conf @@ -0,0 +1,36 @@ +# =========================================== +# Enhanced Animations Configuration +# =========================================== +# Advanced animation effects for a polished experience + +animations { + # Workspace changes with smooth transition + animation = workspace, 1, 6, myBezier2 + + # Special workspaces (scratchpad) + animation = specialWorkspace, 1, 5, myBezier, slidevert + + # Group bar animations + animation = group, 1, 4, myBezier + + # Scroll in groups + animation = scrollGroup, 1, 3, linear +} + +# Performance optimization: reduce animations on battery +# Uncomment to enable battery-aware animations +# bind = SUPER, B, exec, hyprctl keyword animations:enabled false # Performance mode +# bind = SUPER ALT, B, exec, hyprctl keyword animations:enabled true # Normal mode + +# Custom animation profiles (switch via keybind) +# Profile: Minimal (for low-end hardware or presentations) +# animation = windowsIn, 0 +# animation = windowsOut, 0 +# animation = fadeIn, 0 +# animation = windowsMove, 0 +# animation = border, 0 +# animation = fade, 0 +# animation = layersIn, 0 +# animation = layersOut, 0 +# animation = workspace, 0 +# animation = specialWorkspace, 0 diff --git a/config/hypr/binds/core.conf b/config/hypr/binds/core.conf new file mode 100644 index 0000000..66e7446 --- /dev/null +++ b/config/hypr/binds/core.conf @@ -0,0 +1,59 @@ +# =========================================== +# Core Keybindings Configuration +# =========================================== +# Essential shortcuts for window management and navigation + +# Set mod key (Super/Windows key) +$mainMod = SUPER + +# --- Application Launching --- +bind = $mainMod, RETURN, exec, kitty +bind = $mainMod SHIFT, RETURN, exec, kitty --class kitty-float +bind = $mainMod, D, exec, wofi --show drun +bind = $mainMod SHIFT, D, exec, wofi --show run +bind = $mainMod ALT, D, exec, wofi --show emoji + +# --- Terminal Variants --- +bind = $mainMod CTRL, RETURN, exec, foot +bind = $mainMod CTRL SHIFT, RETURN, exec, footclient + +# --- Session Management --- +bind = $mainMod SHIFT, E, exec, wlogout +bind = $mainMod CTRL, Q, killactive, +bind = $mainMod SHIFT, Q, exit, + +# --- Screenshot Tools --- +bind = , PRINT, exec, grimblast copy area +bind = $mainMod, PRINT, exec, grimblast copy output +bind = $mainMod SHIFT, PRINT, exec, grimblast copy screen + +# --- Lock Screen --- +bind = $mainMod, L, exec, hyprlock + +# --- Clipboard Manager --- +bind = $mainMod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy + +# --- Volume Control --- +bind = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ +bind = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bind = SHIFT, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle + +# --- Brightness Control --- +bind = , XF86MonBrightnessUp, exec, brightnessctl set +5% +bind = , XF86MonBrightnessDown, exec, brightnessctl set 5%- + +# --- Media Controls --- +bind = , XF86AudioNext, exec, playerctl next +bind = , XF86AudioPrev, exec, playerctl previous +bind = , XF86AudioPlay, exec, playerctl play-pause +bind = , XF86AudioStop, exec, playerctl stop + +# --- Window Switcher --- +bind = $mainMod, TAB, exec, wofi --show window + +# --- Notification Center --- +bind = $mainMod, N, exec, swaync-client -t -sw + +# --- Color Picker --- +bind = $mainMod SHIFT, C, exec, grim -g "$(slurp)" -t ppm - | swatchbook - diff --git a/config/hypr/binds/media.conf b/config/hypr/binds/media.conf new file mode 100644 index 0000000..52f63b9 --- /dev/null +++ b/config/hypr/binds/media.conf @@ -0,0 +1,27 @@ +# =========================================== +# Media & Entertainment Keybindings +# =========================================== + +$mainMod = SUPER + +# --- Music Player Controls (Spotify/MPD/etc) --- +bind = $mainMod, M, exec, playerctl play-pause +bind = $mainMod SHIFT, M, exec, playerctl next +bind = $mainMod ALT, M, exec, playerctl previous + +# --- Video Player Shortcuts --- +# Bind for MPV floating mode +bind = $mainMod CTRL, M, exec, mpv --no-video --ontop --geometry=800x600 --title="Music Mode" + +# --- Screen Recording --- +bind = $mainMod ALT, R, exec, wf-recorder -g "$(slurp)" -f ~/Videos/recording_$(date +%Y%m%d_%H%M%S).mp4 +bind = $mainMod CTRL, R, exec, killall -SIGINT wf-recorder + +# --- Audio Device Switching --- +bind = $mainMod SHIFT, A, exec, wpctl set-default $(pactl list short sinks | tail -1 | cut -f1) + +# --- Microphone Toggle --- +bind = $mainMod ALT, A, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle + +# --- Bluetooth Audio Quick Switch --- +bind = $mainMod CTRL, B, exec, bluetoothctl info | grep "Connected: yes" && bluetoothctl disconnect || echo "No device" diff --git a/config/hypr/binds/windows.conf b/config/hypr/binds/windows.conf new file mode 100644 index 0000000..2f9a3d9 --- /dev/null +++ b/config/hypr/binds/windows.conf @@ -0,0 +1,73 @@ +# =========================================== +# Window Management Keybindings +# =========================================== + +$mainMod = SUPER + +# --- Move focus with vim keys --- +bind = $mainMod, H, movefocus, l +bind = $mainMod, L, movefocus, r +bind = $mainMod, K, movefocus, u +bind = $mainMod, J, movefocus, d + +# --- Move focus with arrow keys --- +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# --- Move windows with vim keys --- +bind = $mainMod SHIFT, H, movewindow, l +bind = $mainMod SHIFT, L, movewindow, r +bind = $mainMod SHIFT, K, movewindow, u +bind = $mainMod SHIFT, J, movewindow, d + +# --- Move windows with arrow keys --- +bind = $mainMod SHIFT, left, movewindow, l +bind = $mainMod SHIFT, right, movewindow, r +bind = $mainMod SHIFT, up, movewindow, u +bind = $mainMod SHIFT, down, movewindow, d + +# --- Resize windows with vim keys --- +bind = $mainMod CTRL, H, resizeactive, -80 0 +bind = $mainMod CTRL, L, resizeactive, 80 0 +bind = $mainMod CTRL, K, resizeactive, 0 -80 +bind = $mainMod CTRL, J, resizeactive, 0 80 + +# --- Resize windows with arrow keys --- +bind = $mainMod CTRL, left, resizeactive, -80 0 +bind = $mainMod CTRL, right, resizeactive, 80 0 +bind = $mainMod CTRL, up, resizeactive, 0 -80 +bind = $mainMod CTRL, down, resizeactive, 0 80 + +# --- Toggle floating --- +bind = $mainMod ALT, F, togglefloating, + +# --- Toggle fullscreen --- +bind = $mainMod, F, fullscreen, 0 +bind = $mainMod SHIFT, F, fullscreen, 1 + +# --- Maximize window (pseudo) --- +bind = $mainMod, X, pseudo, + +# --- Swap window with next in dwindle --- +bind = $mainMod, T, swapnext, + +# --- Split ratio adjustment --- +bind = $mainMod ALT, right, splitratio, +0.1 +bind = $mainMod ALT, left, splitratio, -0.1 + +# --- Center active window --- +bind = $mainMod, C, centerwindow, + +# --- Pin window (show on all workspaces) --- +bind = $mainMod ALT, P, pin, + +# --- Group management --- +bind = $mainMod, G, togglegroup, +bind = $mainMod SHIFT, G, changegroupactive, f +bind = $mainMod CTRL, G, changegroupactive, b + +# --- Move window to monitor --- +bind = $mainMod SHIFT, period, movewindow, mon+1 +bind = $mainMod SHIFT, comma, movewindow, mon-1 diff --git a/config/hypr/binds/workspaces.conf b/config/hypr/binds/workspaces.conf new file mode 100644 index 0000000..fa411f2 --- /dev/null +++ b/config/hypr/binds/workspaces.conf @@ -0,0 +1,49 @@ +# =========================================== +# Workspace Management Keybindings +# =========================================== + +$mainMod = SUPER + +# --- Switch to workspace --- +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 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# --- Move active window to workspace --- +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +# --- Special workspaces (scratchpad) --- +bind = $mainMod, S, togglespecialworkspace, scratchpad +bind = $mainMod SHIFT, S, movetoworkspace, special:scratchpad + +# --- Named special workspaces --- +bind = $mainMod, P, togglespecialworkspace, media +bind = $mainMod SHIFT, P, movetoworkspace, special:media + +# --- Workspace navigation --- +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 +bind = $mainMod SHIFT, mouse_down, movetoworkspace, e+1 +bind = $mainMod SHIFT, mouse_up, movetoworkspace, e-1 + +# --- Move to next/previous workspace --- +bind = $mainMod CTRL, right, workspace, r+1 +bind = $mainMod CTRL, left, workspace, r-1 +bind = $mainMod CTRL SHIFT, right, movetoworkspace, r+1 +bind = $mainMod CTRL SHIFT, left, movetoworkspace, r-1 diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf new file mode 100644 index 0000000..1fa4d62 --- /dev/null +++ b/config/hypr/hyprland.conf @@ -0,0 +1,143 @@ +# =========================================== +# Hyprland Main Configuration Entry Point +# =========================================== +# This file sources all modular configurations + +# Source color palette +source = ~/.config/hypr/colors.conf + +# Source user settings +source = ~/.config/hypr/settings.conf + +# Source monitor configurations +source = ~/.config/hypr/monitors/general.conf + +# Source animations +source = ~/.config/hypr/animations/basic.conf +source = ~/.config/hypr/animations/enhanced.conf + +# Source keybindings +source = ~/.config/hypr/binds/core.conf +source = ~/.config/hypr/binds/media.conf +source = ~/.config/hypr/binds/workspaces.conf +source = ~/.config/hypr/binds/windows.conf + +# Source window rules +source = ~/.config/hypr/windowrules/general.conf +source = ~/.config/hypr/windowrules/special.conf + +# =========================================== +# Core Hyprland Settings +# =========================================== + +env = XCURSOR_SIZE,24 +env = HYPRCURSOR_SIZE,24 +env = HYPRCURSOR_THEME,Bibata-Modern-Classic + +# General settings +general { + gaps_in = 5 + gaps_out = 10 + border_size = 2 + col.active_border = rgba(7aa2f7ff) rgba(bb9af7ff) 45deg + col.inactive_border = rgba(414868ff) + + # Layout + layout = dwindle + + # Resize on drag + resize_on_border = false + + # Allow tearing + allow_tearing = false +} + +# Decorations +decoration { + rounding = 8 + + # Blur + blur { + enabled = true + size = 8 + passes = 3 + vibrancy = 0.1696 + new_optimizations = true + ignore_opacity = false + } + + # Drop shadows + drop_shadow = true + shadow_range = 15 + shadow_render_power = 3 + col.shadow = rgba(00000044) + shadow_offset = 0 3 +} + +# Animations +animations { + enabled = true + + # Bezier curves + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + bezier = myBezier2, 0.25, 1, 0.5, 1 + bezier = linear, 0.0, 0.0, 1.0, 1.0 + bezier = easeInOutQuad, 0.25, 0.46, 0.45, 0.94 + + # Animation definitions (detailed in animations/*.conf) +} + +# Input devices +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + sensitivity = 0 + + touchpad { + natural_scroll = true + clickfinger_behavior = true + } +} + +# Gestures +gestures { + workspace_swipe = true + workspace_swipe_fingers = 3 + workspace_swipe_distance = 500 + workspace_swipe_invert = true + workspace_swipe_min_speed_to_force = 30 + workspace_swipe_direction_lock = true + workspace_swipe_direction_lock_threshold = 10 +} + +# Misc +misc { + disable_hyprland_logo = true + disable_splash_rendering = true + force_default_wallpaper = 0 + + # VFR (Variable Frame Rate) + vfr = true + + # Mouse move enables focus + mouse_move_enables_dpms = false + + # Key press enables dpms + key_press_enables_dpms = false + + # Initial workspace tracking + initial_workspace_tracking = false +} + +# Debug +debug { + # Enable for troubleshooting + # damage_tracking = 0 + # damage_blink = true +} diff --git a/config/hypr/monitors/general.conf b/config/hypr/monitors/general.conf new file mode 100644 index 0000000..5853f56 --- /dev/null +++ b/config/hypr/monitors/general.conf @@ -0,0 +1,25 @@ +# =========================================== +# Monitor Configuration +# =========================================== + +# Auto-generate based on connected displays +# For manual configuration, uncomment and edit below: + +# monitor=DP-1, 2560x1440@144, 0x0, 1 +# monitor=eDP-1, 1920x1080, 1920x10, 1 +# monitor=HDMI-A-1, disable + +# Dynamic resolution handling +monitor=eDP-1, preferred, auto, 1 +monitor=DP-1, preferred, auto, 1 +monitor=HDMI-A-1, preferred, auto, 1 +monitor=Unknown-1, preferred, auto, 1 + +# Workspace assignments per monitor (optional) +# workspace = 1, monitor:eDP-1 +# workspace = 2, monitor:eDP-1 +# workspace = 3, monitor:DP-1 +# workspace = 4, monitor:DP-1 + +# Force VRR/Adaptive Sync (if supported) +# monitor=eDP-1, preferred, auto, 1, vrr, 1 diff --git a/config/hypr/windowrules/general.conf b/config/hypr/windowrules/general.conf new file mode 100644 index 0000000..10a347a --- /dev/null +++ b/config/hypr/windowrules/general.conf @@ -0,0 +1,48 @@ +# =========================================== +# General Window Rules +# =========================================== + +# --- Float specific applications --- +windowrulev2 = float, title:^(Open File)$ +windowrulev2 = float, title:^(Select a File)$ +windowrulev2 = float, title:^(Choose wallpaper)$ +windowrulev2 = float, title:^(Firefox — Sharing Indicator)$ + +# --- Center floating windows --- +windowrulev2 = center, class:^(.*float.*)$ +windowrulev2 = center, title:^(.*dialog.*)$ + +# --- Make specific apps fullscreen on launch --- +windowrulev2 = fullscreen, class:^(mpv)$ +windowrulev2 = fullscreen, class:^(vlc)$ + +# --- Force opacity for specific apps --- +windowrulev2 = opacity 0.95, class:^(kitty)$ +windowrulev2 = opacity 0.90, class:^(firefox)$ + +# --- Remove shadows from specific windows --- +windowrulev2 = shadow false, class:^(swww)$ +windowrulev2 = shadow false, class:^(waybar)$ + +# --- Disable blur for performance --- +windowrulev2 = noblur, class:^(steam)$ +windowrulev2 = noblur, class:^(steamwebhelper)$ + +# --- Force no border for specific apps --- +windowrulev2 = noborder, class:^(wofi)$ +windowrulev2 = noborder, class:^(rofi)$ + +# --- Keep specific windows on top --- +windowrulev2 = pin, title:^(Picture-in-Picture)$ +windowrulev2 = pin, class:^(mpv)$, title:^(Picture-in-Picture)$ + +# --- Assign to specific workspaces --- +windowrulev2 = workspace 1 silent, class:^(firefox)$ +windowrulev2 = workspace 2 silent, class:^(code)$ +windowrulev2 = workspace 3 silent, class:^(kitty)$ +windowrulev2 = workspace 4 silent, class:^(spotify)$ + +# --- Idle inhibitors (prevent sleep) --- +windowrulev2 = idleinhibit focus, class:^(mpv)$ +windowrulev2 = idleinhibit focus, class:^(vlc)$ +windowrulev2 = idleinhibit focus, class:^(firefox)$, title:^(.*YouTube.*)$ diff --git a/config/hypr/windowrules/special.conf b/config/hypr/windowrules/special.conf new file mode 100644 index 0000000..f1edb69 --- /dev/null +++ b/config/hypr/windowrules/special.conf @@ -0,0 +1,69 @@ +# =========================================== +# Special Window Rules +# =========================================== +# Advanced rules for specific use cases + +# --- Game Mode Rules --- +# Disable animations and effects for games +windowrulev2 = animation none, class:^(.*game.*)$ +windowrulev2 = animation none, title:^(.*Game.*)$ + +# Force no border overlay for games +windowrulev2 = noborder, class:^(steam_app_*)$ + +# --- Video Conferencing Rules --- +windowrulev2 = float, class:^(zoom)$ +windowrulev2 = center, class:^(zoom)$ +windowrulev2 = size 1200 800, class:^(zoom)$ + +windowrulev2 = float, class:^(discord)$ +windowrulev2 = center, class:^(discord)$ +windowrulev2 = size 1000 700, class:^(discord)$ + +# --- Browser Specific Rules --- +# Picture-in-picture handling +windowrulev2 = float, title:^(Picture-in-Picture)$ +windowrulev2 = stayfocused, title:^(Picture-in-Picture)$ +windowrulev2 = pin, title:^(Picture-in-Picture)$ + +# File dialogs +windowrulev2 = float, title:^(.*[Ff]ile [Cc]hooser.*)$ +windowrulev2 = center, title:^(.*[Ff]ile [Cc]hooser.*)$ + +# --- Development Tools --- +# IDE floating windows +windowrulev2 = float, class:^(jetbrains-.*), title:^(Settings)$ +windowrulev2 = float, class:^(jetbrains-.*), title:^(Preferences)$ + +# Terminal dropdown +windowrulev2 = float, class:^(kitty-dropdown)$ +windowrulev2 = size 1400 400, class:^(kitty-dropdown)$ +windowrulev2 = move 260 20, class:^(kitty-dropdown)$ + +# --- Media Applications --- +# Spotify floating controls +windowrulev2 = float, class:^(spotify)$, title:^(Spotify Premium - Free)$ + +# --- System Utilities --- +# Calculator +windowrulev2 = float, class:^(org.gnome.Calculator)$ +windowrulev2 = size 400 500, class:^(org.gnome.Calculator)$ +windowrulev2 = center, class:^(org.gnome.Calculator)$ + +# Image viewer +windowrulev2 = float, class:^(eog)$ +windowrulev2 = center, class:^(eog)$ + +# Archive manager +windowrulev2 = float, class:^(file-roller)$ +windowrulev2 = center, class:^(file-roller)$ + +# --- Popups and Notifications --- +windowrulev2 = float, title:^(Volume)$ +windowrulev2 = float, title:^(Brightness)$ +windowrulev2 = float, title:^(.*notification.*)$ + +# --- Zen Mode / Focus Mode --- +# When entering zen mode, force specific apps to fullscreen +# Uncomment when zen mode script is active +# windowrulev2 = fullscreen, class:^(firefox)$, title:^(.*Zen Mode.*)$ diff --git a/config/settings.conf b/config/settings.conf new file mode 100644 index 0000000..c0b56a5 --- /dev/null +++ b/config/settings.conf @@ -0,0 +1,69 @@ +# =========================================== +# Centralized Settings Configuration +# =========================================== +# User-customizable settings for the theme + +[settings] +# Animation Speed Multiplier (1.0 = normal, 0.5 = fast, 2.0 = slow) +animation_speed = 1.0 + +# Blur Intensity (0-20) +blur_intensity = 8 + +# Shadow Settings +shadow_enabled = true +shadow_size = 15 +shadow_offset_x = 0 +shadow_offset_y = 3 +shadow_color = rgba(00000044) + +# Border Settings +border_size = 2 +border_radius = 8 + +# Gaps +gaps_in = 5 +gaps_out = 10 + +# Opacity for Active/Inactive Windows +active_opacity = 1.0 +inactive_opacity = 0.9 + +# Focus Dimming (0.0 - 1.0) +focus_dim_amount = 0.75 + +# Cursor Theme +cursor_theme = "Bibata-Modern-Classic" +cursor_size = 24 + +# Font Settings +font_family = "JetBrainsMono Nerd Font" +font_size = 11 +font_size_terminal = 12 + +# Bar Settings +bar_height = 30 +bar_position = "top" +bar_margin = 0 + +# Notification Settings +notification_position = "top-right" +notification_timeout = 5 + +# Screenshot Directory +screenshot_dir = "~/Pictures/Screenshots" + +# Wallpaper Settings +wallpaper_mode = "fill" +wallpaper_transition_duration = 2 + +# Performance Mode (true = disable heavy animations on low battery) +performance_mode = false + +# Auto-start Applications +autostart_apps = [ + "waybar", + "swaync", + "hypridle", + "dunst" +] diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 0000000..941e2f7 --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,216 @@ +#!/bin/bash + +# =========================================== +# Installation Script for Enhanced Hyprland Theme +# =========================================== +# Based on Illogical Impulse with additional features + +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Configuration +THEME_NAME="Enhanced Illogical Impulse" +CONFIG_DIR="$HOME/.config/hypr" +BACKUP_DIR="$HOME/.config/hypr-backup-$(date +%Y%m%d_%H%M%S)" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Functions +log_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $1" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# Check if running as root +check_root() { + if [ "$EUID" -eq 0 ]; then + log_error "Please do not run this script as root" + exit 1 + fi +} + +# Check for required dependencies +check_dependencies() { + log_info "Checking dependencies..." + + local deps=( + "hyprland" + "waybar" + "wofi" + "kitty" + "swaync" + "hyprlock" + "hypridle" + "grim" + "slurp" + "wl-clipboard" + "playerctl" + "brightnessctl" + "wireplumber" + ) + + local missing=() + + for dep in "${deps[@]}"; do + if ! command -v "$dep" &> /dev/null; then + missing+=("$dep") + fi + done + + if [ ${#missing[@]} -ne 0 ]; then + log_warning "Missing dependencies: ${missing[*]}" + log_info "Please install missing packages first" + echo "" + echo "For Arch Linux:" + echo " sudo pacman -S hyprland waybar wofi kitty swaync hyprlock hypridle grim slurp wl-clipboard playerctl brightnessctl wireplumber" + echo "" + echo "For Fedora:" + echo " sudo dnf install hyprland waybar wofi kitty swaync hyprlock hypridle grim slurp wl-clipboard playerctl brightnessctl wireplumber" + echo "" + read -p "Continue anyway? (y/N): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi + else + log_success "All dependencies found!" + fi +} + +# Backup existing configuration +backup_config() { + if [ -d "$CONFIG_DIR" ]; then + log_info "Backing up existing configuration..." + mkdir -p "$BACKUP_DIR" + cp -r "$CONFIG_DIR"/* "$BACKUP_DIR"/ 2>/dev/null || true + log_success "Backup created at: $BACKUP_DIR" + else + log_info "No existing configuration found, skipping backup" + fi +} + +# Create directory structure +create_directories() { + log_info "Creating directory structure..." + + mkdir -p "$CONFIG_DIR"/{monitors,animations,binds,windowrules} + mkdir -p "$HOME/.config/waybar" + mkdir -p "$HOME/.config/swaync" + mkdir -p "$HOME/.config/hyprlock" + mkdir -p "$HOME/.config/hypridle" + mkdir -p "$HOME/Pictures/Wallpapers" + mkdir -p "$HOME/Pictures/Screenshots" + mkdir -p "$HOME/Videos" + + log_success "Directory structure created" +} + +# Install configuration files +install_config() { + log_info "Installing configuration files..." + + # Copy main config + cp "$SCRIPT_DIR/config/hypr/hyprland.conf" "$CONFIG_DIR/hyprland.conf" + + # Copy modular configs + cp "$SCRIPT_DIR/config/colors.conf" "$CONFIG_DIR/colors.conf" + cp "$SCRIPT_DIR/config/settings.conf" "$CONFIG_DIR/settings.conf" + + # Copy sub-configs + cp "$SCRIPT_DIR/config/hypr/monitors/general.conf" "$CONFIG_DIR/monitors/general.conf" + cp "$SCRIPT_DIR/config/hypr/animations/basic.conf" "$CONFIG_DIR/animations/basic.conf" + cp "$SCRIPT_DIR/config/hypr/animations/enhanced.conf" "$CONFIG_DIR/animations/enhanced.conf" + cp "$SCRIPT_DIR/config/hypr/binds/core.conf" "$CONFIG_DIR/binds/core.conf" + cp "$SCRIPT_DIR/config/hypr/binds/media.conf" "$CONFIG_DIR/binds/media.conf" + cp "$SCRIPT_DIR/config/hypr/binds/workspaces.conf" "$CONFIG_DIR/binds/workspaces.conf" + cp "$SCRIPT_DIR/config/hypr/binds/windows.conf" "$CONFIG_DIR/binds/windows.conf" + cp "$SCRIPT_DIR/config/hypr/windowrules/general.conf" "$CONFIG_DIR/windowrules/general.conf" + cp "$SCRIPT_DIR/config/hypr/windowrules/special.conf" "$CONFIG_DIR/windowrules/special.conf" + + log_success "Configuration files installed" +} + +# Set permissions +set_permissions() { + log_info "Setting permissions..." + + chmod +x "$SCRIPT_DIR/scripts/"*.sh 2>/dev/null || true + + log_success "Permissions set" +} + +# Display next steps +show_next_steps() { + echo "" + log_success "Installation complete!" + echo "" + echo "============================================" + echo "Next Steps:" + echo "============================================" + echo "" + echo "1. Install additional components (optional):" + echo " - Waybar configuration" + echo " - SwayNC configuration" + echo " - Hyprlock configuration" + echo " - Custom wallpapers" + echo "" + echo "2. Restart Hyprland or reload configuration:" + echo " SUPER + SHIFT + R (if already running)" + echo "" + echo "3. Customize settings:" + echo " Edit ~/.config/hypr/settings.conf" + echo "" + echo "4. Configure keybindings:" + echo " Edit ~/.config/hypr/binds/*.conf" + echo "" + echo "5. Add your own wallpapers to:" + echo " ~/Pictures/Wallpapers/" + echo "" + echo "============================================" + echo "Default Keybindings:" + echo "============================================" + echo "SUPER + RETURN - Open terminal" + echo "SUPER + D - Open app launcher" + echo "SUPER + L - Lock screen" + echo "SUPER + Q - Close window" + echo "SUPER + F - Toggle fullscreen" + echo "SUPER + H/J/K/L - Navigate windows" + echo "SUPER + 1-9 - Switch workspaces" + echo "" +} + +# Main installation function +main() { + echo "" + echo "============================================" + echo " $THEME_NAME Installation" + echo "============================================" + echo "" + + check_root + check_dependencies + backup_config + create_directories + install_config + set_permissions + show_next_steps +} + +# Run main function +main "$@"