diff --git a/config/animations.conf b/config/animations.conf new file mode 100644 index 0000000..12578b3 --- /dev/null +++ b/config/animations.conf @@ -0,0 +1,20 @@ +animations { + enabled = yes + + bezier = menuOpen, 0.1, 1, 0, 1 + bezier = menuClose, 0.38, 0.04, 1, 0.07 + + bezier = bezier, 0.05, 1, 0, 1 + animation = windows, 1, 3, bezier + animation = windowsOut, 1, 7, bezier, popin 80% + + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default + + animation = layersIn, 1, 3, menuOpen, slide + animation = layersOut, 1, 1.6, menuClose + animation = fadeLayersIn, 1, 2, menuOpen + animation = fadeLayersOut, 1, 4.5, menuClose +} diff --git a/config/autostart.conf b/config/autostart.conf new file mode 100644 index 0000000..06dcb75 --- /dev/null +++ b/config/autostart.conf @@ -0,0 +1,12 @@ +exec-once = $SHELL -c 'hypridle' + +# Wallpaper engine +exec-once = swww-daemon & +exec-once = ~/.config/hypr/scripts/random-wallpaper.sh + +# Clipboard +exec-once = wl-paste --watch cliphist store + +# AGS + Birdtray +exec-once = $SHELL -c 'ags run --gtk4 &' +exec-once = $SHELL -c 'sleep 10 && birdtray &' diff --git a/config/binds.conf b/config/binds.conf new file mode 100644 index 0000000..00c8b2d --- /dev/null +++ b/config/binds.conf @@ -0,0 +1,78 @@ +$mainMod = SUPER + +bindd = $mainMod, Return, Run terminal, exec, $terminal +bindd = $mainMod, Q, Kill active window, killactive, +bindd = $mainMod + Shift, Q, Exit Hyprland, exit, +bindd = $mainMod, E, File manager, exec, $fileManager +bindd = $mainMod, B, Browser, exec, $browser +bindd = $mainMod, P, Open e-mail client, exec, $email +bindd = $mainMod, J, Toggle split, togglesplit, + +bindd = $mainMod + Shift, V, Toggle floating state, togglefloating, +bindd = $mainMod, F, Toggle fullscreen, fullscreen, +bindd = $mainMod + Shift, F, Toggle fullscreen (bars), fullscreen, 1 + +bindd = $mainMod, Left, Move focus left, movefocus, l +bindd = $mainMod, Right, Move focus right, movefocus, r +bindd = $mainMod, Up, Move focus up, movefocus, u +bindd = $mainMod, Down, Move focus down, movefocus, d + +bindd = Alt, Tab, Go to next window, cyclenext +bindd = Alt + Shift, Tab, Go to previous window, cyclenext, prev +bind = Alt, Tab, bringactivetotop +bind = Alt + Shift, Tab, bringactivetotop + +bindd = $mainMod, 1, Switch to workspace 1, workspace, 1 +bindd = $mainMod, 2, Switch to workspace 2, workspace, 2 +bindd = $mainMod, 3, Switch to workspace 3, workspace, 3 +bindd = $mainMod, 4, Switch to workspace 4, workspace, 4 +bindd = $mainMod, 5, Switch to workspace 5, workspace, 5 +bindd = $mainMod, 6, Switch to workspace 6, workspace, 6 +bindd = $mainMod, 7, Switch to workspace 7, workspace, 7 +bindd = $mainMod, 8, Switch to workspace 8, workspace, 8 +bindd = $mainMod, 9, Switch to workspace 9, workspace, 9 +bindd = $mainMod, 0, Switch to workspace 10, workspace, 10 + +bindd = $mainMod + Shift, 1, Move to workspace 1, movetoworkspace, 1 +bindd = $mainMod + Shift, 2, Move to workspace 2, movetoworkspace, 2 +bindd = $mainMod + Shift, 3, Move to workspace 3, movetoworkspace, 3 +bindd = $mainMod + Shift, 4, Move to workspace 4, movetoworkspace, 4 +bindd = $mainMod + Shift, 5, Move to workspace 5, movetoworkspace, 5 +bindd = $mainMod + Shift, 6, Move to workspace 6, movetoworkspace, 6 +bindd = $mainMod + Shift, 7, Move to workspace 7, movetoworkspace, 7 +bindd = $mainMod + Shift, 8, Move to workspace 8, movetoworkspace, 8 +bindd = $mainMod + Shift, 9, Move to workspace 9, movetoworkspace, 9 +bindd = $mainMod + Shift, 0, Move to workspace 10, movetoworkspace, 10 + +bindd = $mainMod, Tab, Toggle workspace overview, overview:toggle +bindd = $mainMod, S, Toggle special workspace, togglespecialworkspace, magic +bindd = $mainMod + Shift, S, Move to special workspace, movetoworkspace, special:magic + +bindd = $mainMod, mouse_down, Switch to next workspace, workspace, e+1 +bindd = $mainMod, mouse_up, Switch to prev workspace, workspace, e-1 + +bindmd = $mainMod, mouse:272, Move window, movewindow +bindmd = $mainMod, mouse:273, Resize window, resizewindow + +bindd = , PRINT, Take partial screenshot, exec, hyprshot -zm region -o $screenshot_dir +bindd = $mainMod, PRINT, Take fullscreen screenshot, exec, hyprshot -zm output -o $screenshot_dir + +bindd = $mainMod, Space, Open app launcher, exec, ags toggle launcher +bindd = $mainMod + Shift, T, Toggle bar, exec, ~/.config/hypr/scripts/toggle-bar-visibility.sh +bindd = $mainMod, SUPER_L, Open quick settings, exec, ags toggle quick_settings +bindd = Ctrl+Shift, R, Reload AGS, exec, ags quit; ags run --gtk4 & + +bindd = , XF86AudioRaiseVolume, Raise volume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ +bindd = , XF86AudioLowerVolume, Lower volume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindd = , XF86AudioMute, Mute audio, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindd = , XF86AudioMicMute, Mute mic, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindd = , XF86MonBrightnessUp, Increase brightness, exec, light -A 15 +bindd = , XF86MonBrightnessDown, Decrease brightness, exec, light -U 15 + +bindd = , XF86AudioNext, Next track, exec, playerctl next +bindd = , XF86AudioPause, Play/pause track, exec, playerctl play-pause +bindd = , XF86AudioPlay, Play/pause track, exec, playerctl play-pause +bindd = , XF86AudioPrev, Previous track, exec, playerctl previous + +bindd = , XF86RFKill, Toggle wireless, exec, nmcli radio all toggle +bindd = , XF86Bluetooth, Toggle Bluetooth, exec, bluetoothctl power toggle diff --git a/config/io.conf b/config/io.conf new file mode 100644 index 0000000..922d032 --- /dev/null +++ b/config/io.conf @@ -0,0 +1,17 @@ +input { + kb_layout = pl + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + sensitivity = 0.7 + + touchpad { + natural_scroll = false + } +} + +monitor = eDP-1, 3840x2160@60, 0x0, 1 +#monitor = HDMI-A-2, 1920x1080@60, 0x3840, 1 diff --git a/config/misc.conf b/config/misc.conf new file mode 100644 index 0000000..5caa473 --- /dev/null +++ b/config/misc.conf @@ -0,0 +1,38 @@ +general { + gaps_in = 5 + gaps_out = 5 + + layout = master +} + +decoration { + rounding = 10 + + active_opacity = 1.0 + inactive_opacity = 0.8 + + shadow { + enabled = false + } + + blur { + enabled = false + } +} + +gestures { + workspace_swipe = true + workspace_swipe_fingers = 3 + workspace_swipe_create_new = true +} + +misc { + vfr = true + allow_session_lock_restore = true + force_default_wallpaper = 0 + disable_hyprland_logo = true +} + +xwayland { + force_zero_scaling = true +} diff --git a/config/rules.conf b/config/rules.conf new file mode 100644 index 0000000..7538ad8 --- /dev/null +++ b/config/rules.conf @@ -0,0 +1,20 @@ +windowrule = center, title:^(Open File)(.*)$ +windowrule = center, title:^(Select a File)(.*)$ +windowrule = center, title:^(Choose wallpaper)(.*)$ +windowrule = center, title:^(Open Folder)(.*)$ +windowrule = center, title:^(Save As)(.*)$ +windowrule = center, title:^(Library)(.*)$ +windowrule = center, title:^(File Upload)(.*)$ + +windowrule = float, title:^(Open File)(.*)$ +windowrule = float, title:^(Select a File)(.*)$ +windowrule = float, title:^(Choose wallpaper)(.*)$ +windowrule = float, title:^(Open Folder)(.*)$ +windowrule = float, title:^(Save As)(.*)$ +windowrule = float, title:^(Library)(.*)$ +windowrule = float, title:^(File Upload)(.*)$ + +windowrulev2 = size 1280 720, title:(.*)(Mozilla Thunderbird) +windowrulev2 = float, initialClass:thunderbird + +layerrule = noanim, selection diff --git a/config/workspaces.conf b/config/workspaces.conf new file mode 100644 index 0000000..2fe2837 --- /dev/null +++ b/config/workspaces.conf @@ -0,0 +1,10 @@ +workspace=1,monitor:eDP-1 +workspace=2,monitor:eDP-1 +workspace=3,monitor:eDP-1 +workspace=4,monitor:eDP-1 +workspace=5,monitor:eDP-1 +workspace=6,monitor:HDMI-A-2 +workspace=7,monitor:HDMI-A-2 +workspace=8,monitor:HDMI-A-2 +workspace=9,monitor:HDMI-A-2 +workspace=10,monitor:HDMI-A-2 diff --git a/hypridle.conf b/hypridle.conf new file mode 100644 index 0000000..0fcd45f --- /dev/null +++ b/hypridle.conf @@ -0,0 +1,30 @@ +$lock_cmd = pidof hyprlock || hyprlock +$suspend_cmd = pidof steam || systemctl suspend || loginctl suspend + +general { + lock_cmd = $lock_cmd + before_sleep_cmd = loginctl lock-session + after_sleep_cmd = hyprctl dispatch dpms on +} + +listener { + timeout = 180 + on-timeout = loginctl lock-session +} + +listener { + timeout = 240 + on-timeout = hyprctl dispatch dpms off + on-resume = hyprctl dispatch dpms on +} + +listener { + timeout = 320 + on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 + on-resume = brightnessctl -rd rgb:kbd_backlight +} + +listener { + timeout = 540 + on-timeout = $suspend_cmd +} diff --git a/hyprlock.conf b/hyprlock.conf new file mode 100644 index 0000000..6e6a4f1 --- /dev/null +++ b/hyprlock.conf @@ -0,0 +1,61 @@ +general { + enable_fingerprint = true + fingerprint_ready_message = Place your finger on the sensor + fingerprint_present_message = Scanning finger +} + +background { + color = rgba(00000085) + blur_size = 5 + blur_passes = 4 +} + +input-field { + monitor = + size = 250, 50 + outline_thickness = 2 + dots_size = 0.1 + dots_spacing = 0.3 + font_color = rgb(FFFFFF) + fade_on_empty = true + + position = 0, 20 + halign = center + valign = center +} + +label { + monitor = + text = $TIME + color = rgb(FFFFFF) + font_size = 65 + font_family = SF Pro Display Bold + + position = 0, 300 + halign = center + valign = center +} + +label { + monitor = + text = hello, $USER + color = rgb(FFFFFF) + font_size = 20 + font_family = SF Pro Display Bold + + position = 0, 240 + halign = center + valign = center +} + +label { + monitor = + text = $FPRINTMESSAGE + color = rgb(FFFFFF) + font_size = 15 + + position = 0, 180 + halign = center + valign = center +} + diff --git a/scripts/idle-inhibitor.py b/scripts/idle-inhibitor.py new file mode 100755 index 0000000..5a6d0e4 --- /dev/null +++ b/scripts/idle-inhibitor.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +import sys +from dataclasses import dataclass +from signal import SIGINT, SIGTERM, signal +from threading import Event + +from pywayland.client.display import Display +from pywayland.protocol.idle_inhibit_unstable_v1.zwp_idle_inhibit_manager_v1 import ( + ZwpIdleInhibitManagerV1, +) +from pywayland.protocol.wayland.wl_compositor import WlCompositor +from pywayland.protocol.wayland.wl_registry import WlRegistryProxy +from pywayland.protocol.wayland.wl_surface import WlSurface + + +@dataclass +class GlobalRegistry: + surface: WlSurface | None = None + inhibit_manager: ZwpIdleInhibitManagerV1 | None = None + + +def handle_registry_global( + wl_registry: WlRegistryProxy, id_num: int, iface_name: str, version: int +) -> None: + global_registry: GlobalRegistry = wl_registry.user_data or GlobalRegistry() + + if iface_name == "wl_compositor": + compositor = wl_registry.bind(id_num, WlCompositor, version) + global_registry.surface = compositor.create_surface() # type: ignore + elif iface_name == "zwp_idle_inhibit_manager_v1": + global_registry.inhibit_manager = wl_registry.bind( + id_num, ZwpIdleInhibitManagerV1, version + ) + + +def main() -> None: + done = Event() + signal(SIGINT, lambda _, __: done.set()) + signal(SIGTERM, lambda _, __: done.set()) + + global_registry = GlobalRegistry() + + display = Display() + display.connect() + + registry = display.get_registry() # type: ignore + registry.user_data = global_registry + registry.dispatcher["global"] = handle_registry_global + + def shutdown() -> None: + display.dispatch() + display.roundtrip() + display.disconnect() + + display.dispatch() + display.roundtrip() + + if global_registry.surface is None or global_registry.inhibit_manager is None: + print("Wayland seems not to support idle_inhibit_unstable_v1 protocol.") + shutdown() + sys.exit(1) + + inhibitor = global_registry.inhibit_manager.create_inhibitor( # type: ignore + global_registry.surface + ) + + display.dispatch() + display.roundtrip() + + print("Inhibiting idle...") + done.wait() + print("Shutting down...") + + inhibitor.destroy() + + shutdown() + + +if __name__ == "__main__": + main() diff --git a/scripts/random-wallpaper.sh b/scripts/random-wallpaper.sh new file mode 100755 index 0000000..e604c9b --- /dev/null +++ b/scripts/random-wallpaper.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env -S bash + +WALLPAPER_DIR="$HOME/images/wallpapers" +THEME=$(darkman get) +FLAGS=() + +if [ ! -d "$WALLPAPER_DIR" ]; then + echo "Wallpaper directory does not exist: $WALLPAPER_DIR" + exit 1 +fi + +if [[ "$THEME" == "light" ]]; then + FLAGS+=("-l") +fi + +WALLPAPER=$(find "$WALLPAPER_DIR" -type f \( -iname "*.jpg" -o -iname "*.png" -o -iname "*.jpeg" \) | shuf -n 1) + +swww img "$WALLPAPER" \ + --transition-type random \ + --transition-duration 0.8 \ + --transition-fps 60 + +if command -v "wal" &> /dev/null; then + wal -i "$WALLPAPER" -n ${FLAGS[@]} + cp ~/.cache/wal/colors.scss ~/.config/ags/styles/colors.scss +fi + +if command -v "pywalfox" &> /dev/null; then + pywalfox $THEME + pywalfox update +fi diff --git a/scripts/toggle-bar-visibility.sh b/scripts/toggle-bar-visibility.sh new file mode 100755 index 0000000..b8ede31 --- /dev/null +++ b/scripts/toggle-bar-visibility.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env -S bash + +monitors=$(hyprctl monitors -j | jq -r '.[].id') + +for monitor in $monitors; do + ags toggle "bar_$monitor" +done