{ concatStringsSep, elemAt, optionals, ... }: rec { pointToStr = p: "${toString (elemAt p 0)}, ${toString (elemAt p 1)}"; mkBezier = { name, p0, p1, }: concatStringsSep "," [name (pointToStr p0) (pointToStr p1)]; mkAnimation = { name, enable ? true, duration ? 0, # in ds (100ms) bezier ? "default", style ? null, }: concatStringsSep "," ( [ name ( if enable then "1" else "0" ) ] ++ optionals enable ( [ (toString duration) bezier ] ++ optionals (style != null) [style] ) ); mkLayerRule = { rule, namespace, }: concatStringsSep "," [rule namespace]; mkBind = { modifier ? "", key, dispatcher ? "exec", command ? null, }: concatStringsSep "," ( [modifier key dispatcher] ++ optionals (command != null) [command] ); }