commit 4b1cbb4fa43437ddf84dc3c42beb5659b8f099e3
Author: Franek <me@sador.me>
Date:   Sat Apr 12 17:09:18 2025 +0200

    Initial commit

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/hyprland.conf b/hyprland.conf
new file mode 120000
index 0000000..5ecc9ab
--- /dev/null
+++ b/hyprland.conf
@@ -0,0 +1 @@
+/nix/store/12y9lzd0yn89nhgv7grvjg1zn9fjyxqs-home-manager-files/.config/hypr/hyprland.conf
\ No newline at end of file
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