// V0.981231

// Environment variables
environment {
    XDG_SESSION_TYPE "wayland"
    XDG_SESSION_DESKTOP "niri"
    XDG_CURRENT_DESKTOP "niri"
    MOZ_ENABLE_WAYLAND "1"
    QT_QPA_PLATFORM "wayland"
    QT_WAYLAND_DISABLE_WINDOWDECORATION "1"
    QT_AUTO_SCREEN_SCALE_FACTOR "0"
    QT_FONT_DPI "96"
    SDL_VIDEODRIVER "wayland"
    CLUTTER_BACKEND "wayland"
    _JAVA_AWT_WM_NONPARENTING "1"
    QT_QPA_PLATFORMTHEME "qt6ct"
    GTK_USE_PORTAL "1"
    ELECTRON_OZONE_PLATFORM_HINT "wayland"
}

// Layer rules
layer-rule {
  match namespace="^noctalia-overview*"
  place-within-backdrop true
}

// Input devices
input {
 workspace-auto-back-and-forth

     keyboard {
        repeat-rate 25
        repeat-delay 280

        xkb {
             layout "fi,us"
             options "grp:caps_toggle,ctrl:nocaps"
        }
    }

    mouse {
        accel-profile "flat"
        scroll-factor 1.0
    }

    // Warp to the center of newly focused windows
    //warp-mouse-to-focus

    // Change default Mod keys
    mod-key "Alt"
    mod-key-nested "Super"
}

cursor {
    xcursor-theme "Adwaita"
    xcursor-size 24
    hide-when-typing
    hide-after-inactive-ms 6000
}

// Overview
overview {
    zoom 0.25
    backdrop-color "#222222"
}

// Clipboard
clipboard {
    disable-primary
}

// Do not show hotkeys
hotkey-overlay {
    skip-at-startup
}

// Monitor
output "DP-1" {
    mode "1920x1080@180.061"
    variable-refresh-rate
}


layout {
    gaps 16
    center-focused-column "never"
    //always-center-single-column
    //empty-workspace-above-first
    //default-column-display "tabbed"
    default-column-width { proportion 0.5; }

    preset-column-widths {
        proportion 0.33333
        proportion 0.5
        proportion 0.66667
        fixed 1920
    }

    preset-window-heights {
        proportion 0.33333
        proportion 0.5
        proportion 0.66667
        fixed 1080
    }

    focus-ring {
        //off
        width 4
        //active-color "#353759"
        //inactive-color "#141921"
        active-gradient from="#ed8796" to="#f5bde6" angle=45
        inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
    }

    border {
        off
        width 4
        active-color "#ffc87f"
        inactive-color "#505050"
        urgent-color "#9b0000"
        // active-gradient from="#e5989b" to="#ffb4a2" angle=45 relative-to="workspace-view" in="oklch longer hue"
        // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
    }

    shadow {
        off
        draw-behind-window false
        softness 30
        spread 5
        offset x=0 y=5
        color "#0007"
    }

}


// Autostart
spawn-at-startup "/usr/libexec/polkit-mate-authentication-agent-1"
spawn-sh-at-startup "gentoo-pipewire-launcher restart &"
spawn-sh-at-startup "qs -c noctalia-shell"

// Disable title bars
prefer-no-csd

// Screenshots
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"

// Animations
animations {
     slowdown 0.9

    workspace-switch {
        spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001
    }

    window-open {
        duration-ms 150
        curve "ease-out-expo"
    }

    window-close {
        duration-ms 150
        curve "ease-out-quad"
    }

    horizontal-view-movement {
        spring damping-ratio=1.0 stiffness=800 epsilon=0.0001
    }

    window-movement {
        spring damping-ratio=1.0 stiffness=800 epsilon=0.0001
    }

    window-resize {
        spring damping-ratio=1.0 stiffness=800 epsilon=0.0001
    }

    config-notification-open-close {
        spring damping-ratio=0.6 stiffness=1000 epsilon=0.001
    }

    exit-confirmation-open-close {
        spring damping-ratio=0.6 stiffness=500 epsilon=0.01
    }

    screenshot-ui-open {
        duration-ms 200
        curve "ease-out-quad"
    }

    overview-open-close {
        spring damping-ratio=1.0 stiffness=800 epsilon=0.0001
    }

    recent-windows-close {
        spring damping-ratio=1.0 stiffness=800 epsilon=0.001
    }
}

window-rule {
    match app-id="Alacritty|foot|kitty"
    draw-border-with-background false
}

window-rule {
    geometry-corner-radius 12
    clip-to-geometry true
}

window-rule {
     match app-id=r#"^mpv$"#
     match app-id=r#"^thunar$"#
     match app-id=r#"^steam$"#
     match app-id=r#"^net.lutris.Lutris$"#
     match app-id=r#"^thunar$"# title=r#"Rename"#
     match app-id=r#"^deadbeef$"#
     match app-id=r#"^gimp$"# title=r#"Preferences"#
     open-floating true
}

// Custom keybinds
binds {
    Mod+Shift+s { show-hotkey-overlay; }
    Mod+Q hotkey-overlay-title="Open a Terminal: Alacritty" { spawn "alacritty"; }
    Mod+p hotkey-overlay-title="Run an Application: fuzzel" { spawn "fuzzel"; }

    XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+ -l 1.0"; }
    XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
    XF86AudioMute        allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
    XF86AudioMicMute     allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }

    Mod+O repeat=false { toggle-overview; }
    Mod+Shift+C repeat=false { close-window; }

    Mod+Left  { focus-column-left; }
    Mod+Down  { focus-window-down; }
    Mod+Up    { focus-window-up; }
    Mod+Right { focus-column-right; }

    Mod+Ctrl+Left  { move-column-left; }
    Mod+Ctrl+Down  { move-window-down; }
    Mod+Ctrl+Up    { move-window-up; }
    Mod+Ctrl+Right { move-column-right; }

    Mod+Home { focus-column-first; }
    Mod+End  { focus-column-last; }
    Mod+Ctrl+Home { move-column-to-first; }
    Mod+Ctrl+End  { move-column-to-last; }

    Mod+L { focus-workspace-down; }
    Mod+K { focus-workspace-up; }
    Mod+Shift+Down { move-column-to-workspace-down; }
    Mod+Shift+Up { move-column-to-workspace-up; }

    Mod+Ctrl+U         { move-workspace-down; }
    Mod+Ctrl+I         { move-workspace-up; }

    Mod+WheelScrollDown      cooldown-ms=150 { focus-workspace-down; }
    Mod+WheelScrollUp        cooldown-ms=150 { focus-workspace-up; }
    Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
    Mod+Ctrl+WheelScrollUp   cooldown-ms=150 { move-column-to-workspace-up; }

    Mod+WheelScrollRight      { focus-column-right; }
    Mod+WheelScrollLeft       { focus-column-left; }
    Mod+Ctrl+WheelScrollRight { move-column-right; }
    Mod+Ctrl+WheelScrollLeft  { move-column-left; }

    Mod+Shift+WheelScrollDown      { focus-column-right; }
    Mod+Shift+WheelScrollUp        { focus-column-left; }
    Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
    Mod+Ctrl+Shift+WheelScrollUp   { move-column-left; }

    Mod+1 { focus-workspace 1; }
    Mod+2 { focus-workspace 2; }
    Mod+3 { focus-workspace 3; }
    Mod+4 { focus-workspace 4; }
    
    Mod+Shift+1 { move-window-to-workspace 1; }
    Mod+Shift+2 { move-window-to-workspace 2; }
    Mod+Shift+3 { move-window-to-workspace 3; }
    Mod+Shift+4 { move-window-to-workspace 4; }

    Control+Tab { focus-workspace-previous; }

    Mod+Shift+Comma { consume-or-expel-window-left; }
    Mod+Shift+Period { consume-or-expel-window-right; }

    // Consume one window from the right to the bottom of the focused column.
    Mod+Comma  { consume-window-into-column; }
    // Expel the bottom window from the focused column to the right.
    Mod+Period { expel-window-from-column; }

    Mod+R { switch-preset-column-width; }
    //Mod+R { switch-preset-column-width-back; }
    Mod+Shift+R { switch-preset-window-height; }

    Mod+Control+R { reset-window-height; }

    Mod+m { maximize-column; }
    Mod+C { center-column; }
    Mod+Ctrl+C { center-visible-columns; }
    Mod+Shift+F { fullscreen-window; }

    Mod+Ctrl+F { expand-column-to-available-width; }

    Mod+Shift+n { set-column-width "-5%"; }
    Mod+Shift+m { set-column-width "+5%"; }

    Mod+Control+n { set-window-height "-5%"; }
    Mod+Control+m { set-window-height "+5%"; }

    Mod+f       { toggle-window-floating; }
    Mod+Shift+V { switch-focus-between-floating-and-tiling; }

    Mod+W { toggle-column-tabbed-display; }

    Print { screenshot; }
    Ctrl+Print { screenshot-screen; }
    Alt+Print { screenshot-window; }

    Mod+Shift+E { quit; }
    Ctrl+Alt+Delete { quit; }

    Mod+Shift+P { power-off-monitors; }
}

// Noctalia shell
include "./noctalia.kdl"
