picom: switch to mainline with spring physics animations

Update picom from dccsillag fork to colonelpanic8/picom spring-physics
branch, which adds spring physics animation support to mainline picom.

Spring curve syntax: spring(stiffness, dampening, mass, clamping)
- stiffness: spring constant (higher = faster)
- dampening: resistance (higher = less oscillation)
- mass: inertia (higher = slower)
- clamping: prevent overshoot (false for bounce effects)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-01 13:07:30 -08:00
parent 5b92b7ee01
commit 68d554d2b2
2 changed files with 68 additions and 21 deletions

View File

@@ -168,16 +168,15 @@ in
}; };
}); });
# Using mainline picom with spring physics animation support
# Branch: spring-physics on colonelpanic8/picom
picom = prev.picom.overrideAttrs (old: { picom = prev.picom.overrideAttrs (old: {
src = prev.fetchFromGitHub { src = prev.fetchFromGitHub {
repo = "picom"; repo = "picom";
owner = "dccsillag"; owner = "colonelpanic8";
rev = "51b21355696add83f39ccdb8dd82ff5009ba0ae5"; rev = "spring-physics";
sha256 = "sha256-crCwRJd859DCIC0pEerpDqdX2j8ZrNAzVaSSB3mTPN8=="; sha256 = "sha256-sN15PffeRV6x+K2XjCxx2bIh0ujb/C1GAGTUuo2wPL4=";
}; };
nativeBuildInputs = old.nativeBuildInputs ++ [final.pcre final.gnugrep.pcre2 final.asciidoc];
buildInputs = old.buildInputs ++ [final.pcre];
nativeInstallCheckInputs = [];
doCheck = false; doCheck = false;
dontCheck = true; dontCheck = true;
}); });

View File

@@ -98,25 +98,73 @@ makeEnable config "myModules.xmonad" true {
backend = "glx"; backend = "glx";
settings = { settings = {
animations = true; # Spring physics animations (mainline picom with spring-physics branch)
animation-window-mass = 1; # Syntax: spring(stiffness, dampening, mass) or spring(stiffness, dampening, mass, clamping)
animation-dampening = 20; # Set clamping to false for bounce/overshoot effects
animation-stiffness = 250; animations = [
animation-clamping = false; # Window move/resize animation with spring physics
animation-for-open-window = "zoom"; {
animation-for-unmap-window = "zoom"; triggers = ["geometry"];
animation-for-transient-window = "slide-down"; offset-x = {
curve = "spring(250, 20, 1, false)";
start = "window-x-before - window-x";
end = 0;
};
offset-y = {
curve = "spring(250, 20, 1, false)";
start = "window-y-before - window-y";
end = 0;
};
}
# Opacity fade animation
{
triggers = ["open" "show"];
opacity = {
curve = "cubic-bezier(0.25, 0.1, 0.25, 1)";
duration = 0.2;
start = 0;
end = "window-raw-opacity";
};
scale-x = {
curve = "cubic-bezier(0.25, 0.1, 0.25, 1)";
duration = 0.2;
start = 0.9;
end = 1;
};
scale-y = {
curve = "cubic-bezier(0.25, 0.1, 0.25, 1)";
duration = 0.2;
start = 0.9;
end = 1;
};
}
{
triggers = ["close" "hide"];
opacity = {
curve = "cubic-bezier(0.25, 0.1, 0.25, 1)";
duration = 0.2;
start = "window-raw-opacity";
end = 0;
};
scale-x = {
curve = "cubic-bezier(0.25, 0.1, 0.25, 1)";
duration = 0.2;
start = 1;
end = 0.9;
};
scale-y = {
curve = "cubic-bezier(0.25, 0.1, 0.25, 1)";
duration = 0.2;
start = 1;
end = 0.9;
};
}
];
fade-in-step = 0.028; fade-in-step = 0.028;
fade-out-step = 0.028; fade-out-step = 0.028;
fading = true; fading = true;
};
wintypes = {
dock = {animation = "slide-down";};
toolbar = {animation = "slide-down";};
};
settings = {
focus-exclude = ["class_g ?= 'rofi'" "class_g ?= 'Steam'"]; focus-exclude = ["class_g ?= 'rofi'" "class_g ?= 'Steam'"];
rounded-corners-exclude = [ rounded-corners-exclude = [
"! name~=''" # Qtile == empty wm_class.. "! name~=''" # Qtile == empty wm_class..