Files
feresaria/packaging/config.kdl
Samuel Onoja ad00e55fe4 Add mouse window controls and finer display scaling (#63)
Add configurable mouse and wheel bindings, window move and resize, tab drops, cross-output dragging, and device settings. Adjust display scaling in 0.05 increments.

Preserve opposite-edge positioning during scrolling resizes and show rows for edge drops into tabbed columns.
2026-10-25 14:14:35 +01:00

250 lines
6.6 KiB
KDL

// Commands run directly, without a shell. Install optional apps before using them.
commands {
terminal "foot"
browser "firefox"
editor "zed"
lock "ferese-lock"
screenshot "ferese-screenshot"
screenshot-full "ferese-screenshot" "--full"
brightness-up "brightnessctl" "set" "2%+"
brightness-down "brightnessctl" "set" "2%-"
volume-up "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%+"
volume-down "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%-"
mute "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"
mic-mute "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"
}
xwayland {
enabled #true
startup on-demand
path "xwayland-satellite"
}
// These supplement the built-in shortcuts listed in docs/shortcuts.md.
binding "Super+B" "spawn" "browser"
binding "Super+Z" "spawn" "editor"
binding "Super+Alt+L" "spawn" "lock"
binding "XF86MonBrightnessUp" "spawn" "brightness-up"
binding "XF86MonBrightnessDown" "spawn" "brightness-down"
binding "XF86AudioRaiseVolume" "spawn" "volume-up"
binding "XF86AudioLowerVolume" "spawn" "volume-down"
binding "XF86AudioMute" "spawn" "mute"
binding "XF86AudioMicMute" "spawn" "mic-mute"
binding "Super+Left" "focus" "left"
binding "Super+Down" "focus" "down"
binding "Super+Up" "focus" "up"
binding "Super+Right" "focus" "right"
binding "Super+Ctrl+Left" "move" "left"
binding "Super+Ctrl+Down" "move" "down"
binding "Super+Ctrl+Up" "move" "up"
binding "Super+Ctrl+Right" "move" "right"
binding "Super+Alt+Left" "resize" "left"
binding "Super+Alt+Down" "resize" "down"
binding "Super+Alt+Up" "resize" "up"
binding "Super+Alt+Right" "resize" "right"
// Replace a swipe action with "toggle-overview", "move" "left", or another action.
binding "Swipe3Up" "workspace-next"
binding "Swipe3Down" "workspace-previous"
binding "Swipe3Left" "focus" "right"
binding "Swipe3Right" "focus" "left"
input {
xkb-layout "us"
xkb-variant ""
xkb-options
focus-follows-mouse #false
repeat-rate 25
repeat-delay-ms 600
touchpad {
tap #true
accel-speed 0.0
natural-scroll #true
disable-while-typing #true
disable-while-mouse-connected #false
swipe-threshold 80
}
mouse {
natural-scroll #false
accel-speed 0.0
left-handed #false
middle-emulation #false
scroll-factor 1.0
drag-threshold 4.0
scroll-cooldown-ms 150
}
}
layout {
mode "scrolling"
inner-gap 4
outer-gap 4
smart-gaps #false
}
workspaces {
// Press the current workspace's shortcut again to return to the previous one.
auto-back-and-forth #false
}
scrolling {
default-column-width 0.5
focus-strategy "paged"
width-presets 0.33333 0.5 0.66667 "full"
}
animations {
enabled #true
reduced-motion #false
speed 0.9
spring {
duration-ms 240.0
bounce 0.0
overshoot #false
}
viewport-spring {
duration-ms 350.0
bounce 0.0
overshoot #false
}
}
appearance {
focus-effect {
enabled #true
active-opacity 1.0
inactive-opacity 1.0
inactive-dim 0.0
duration-ms 150
}
}
theme {
mode "dark"
family "ferese-blue"
split #false
schedule { source "schedule"; timezone "system"; light-at "07:00"; dark-at "19:00"; }
accessibility { increase-contrast #false; reduce-transparency #false; }
background {
mode "fill"
// path "/absolute/path/to/wallpaper.png"
}
material {
style "translucent"
}
geometry {
window-radius 12
shell-radius 12
border-width 1
focus-ring-width 1
control-gap 12
}
shadow {
soft {
blur 10
offset-y 2
opacity 0.07
}
}
// typography { font-family "JetBrainsMono Nerd Font"; }
}
status {
keybinding-guide #true
low-battery-threshold 20
}
// Panel composition is explicit; visibility and item options belong to each item.
// Opacity follows the shell; corners follow the panel style unless overridden here.
panel "main" {
geometry {
height 30
side-margins 18
edge-margin 6
window-clearance 4
}
edge "top"
style "flat"
border #false
start {
spacing 3
group "overview" {
padding 0 0
item "overview" kind="overview" overflow="never" priority=100
}
group "workspaces" {
padding 2 3
item "workspaces" kind="workspaces" overflow="never" priority=100
}
}
center {
group "title" {
padding 0 0
item "focused-window" kind="focused-window" visible=#true overflow="never"
}
}
end {
spacing 8
group "status" {
padding 2 3
item "media" kind="media"
item "quick-settings" kind="quick-settings"
item "night-light" kind="night-light"
item "network" kind="network"
item "audio" kind="audio"
item "recording" kind="recording"
item "notifications" kind="notifications"
item "battery" kind="battery" percentage=#true
}
group "time" {
padding 2 3
item "clock" kind="clock"
}
group "display" {
padding 0 0
item "display-mode" kind="display-mode"
}
}
}
window-rule app-id="dev.ferese.Settings" floating=#true
window-rule app-id="dev.ferese.ScreenShare" floating=#true
window-rule app-id="dev.ferese.Authentication" floating=#true
window-rule app-id="org.gnome.Calculator" floating=#true
window-rule app-id="org.pulseaudio.pavucontrol" floating=#true
window-rule title="Picture-in-Picture" floating=#true
window-rule title="Choose a wallpaper" floating=#true
notifications {
show-popups #true
do-not-disturb #false
timeout-ms 6000
}
lock-screen {
clock-format "12h"
background-dim 0.26
background-blur 14
dim-after-seconds 30
sleep-after-seconds 120
}
// Install swayidle and test unlocking before enabling automatic locking.
// autostart "swayidle" "-w" "timeout" "300" "ferese-lock" "before-sleep" "ferese-lock" "lock" "ferese-lock"
// Fullscreen MPRIS playback keeps the session awake until paused or hidden.
// idle-inhibit { fullscreen-playback #false; }
// window-rule app-id="org.example.Presentation" idle-inhibit="visible"
// Find display names with feresectl outputs, then adjust and uncomment.
// output-profile "docked" {
// output "HDMI-A-1" scale=1.5 { position 0 0; }
// output "eDP-1" scale=1.5 { position 2560 0; }
// }
// output-profile "laptop" {
// output "eDP-1" scale=1.5
// }