mirror of
https://github.com/oddlama/nix-config.git
synced 2025-10-11 07:10:39 +02:00
feat: fix wired padding for some notifications, add rudimentary button bar
This commit is contained in:
parent
d8138efbec
commit
34d96f6895
1 changed files with 196 additions and 120 deletions
|
@ -111,94 +111,210 @@
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
mkBody = name: ident: yOffset: summaryRightPadding: extra:
|
mkBody = name: ident: yOffset: summaryRightPadding: extra: let
|
||||||
map (x: extra // x) [
|
maxWFull = 580 - 12;
|
||||||
{
|
maxWImg = maxWFull - 128 - 12;
|
||||||
name = "${name}_${ident}_hint";
|
in
|
||||||
parent = "${name}_root";
|
map (x: extra // x) (
|
||||||
hook = mkHook "TL" "TL";
|
[
|
||||||
offset = mkVec2 0 yOffset;
|
{
|
||||||
params = struct "ImageBlock" (unnamedStruct {
|
name = "${name}_${ident}_hint";
|
||||||
filter_mode = mkLiteral "Lanczos3";
|
parent = "${name}_root";
|
||||||
image_type = mkLiteral "Hint";
|
hook = mkHook "TL" "TL";
|
||||||
padding = mkPaddingLrBt 12 0 12 12;
|
offset = mkVec2 0 yOffset;
|
||||||
rounding = globalScale * 9;
|
params = struct "ImageBlock" (unnamedStruct {
|
||||||
scale_height = floor (globalScale * 128);
|
filter_mode = mkLiteral "Lanczos3";
|
||||||
scale_width = floor (globalScale * 128);
|
image_type = mkLiteral "Hint";
|
||||||
});
|
padding = mkPaddingLrBt 12 0 12 12;
|
||||||
}
|
rounding = globalScale * 9;
|
||||||
{
|
scale_height = floor (globalScale * 128);
|
||||||
name = "${name}_${ident}_summary";
|
scale_width = floor (globalScale * 128);
|
||||||
parent = "${name}_${ident}_hint";
|
});
|
||||||
hook = mkHook "TR" "TL";
|
}
|
||||||
offset = mkVec2 0 0;
|
{
|
||||||
params = struct "TextBlock" (unnamedStruct {
|
name = "${name}_${ident}_summary";
|
||||||
text = "%s";
|
parent = "${name}_${ident}_hint";
|
||||||
font = "${fonts.sansSerif.name} Bold ${toString (globalScale * 16)}";
|
hook = mkHook "TR" "TL";
|
||||||
ellipsize = mkLiteral "End";
|
offset = mkVec2 0 0;
|
||||||
color = colors.base06;
|
params = struct "TextBlock" (unnamedStruct {
|
||||||
padding = mkPaddingLrBt 16 (summaryRightPadding + 16) 0 8;
|
text = "%s";
|
||||||
dimensions = mkDimensionsWH (580 - summaryRightPadding) (580 - summaryRightPadding) 0 30;
|
font = "${fonts.sansSerif.name} Bold ${toString (globalScale * 16)}";
|
||||||
dimensions_image_hint = mkDimensionsWH 440 440 0 30;
|
ellipsize = mkLiteral "End";
|
||||||
dimensions_image_both = mkDimensionsWH 440 440 0 30;
|
color = colors.base06;
|
||||||
});
|
padding = mkPaddingLrBt 16 16 0 8;
|
||||||
}
|
dimensions = mkDimensionsWH (maxWFull - summaryRightPadding) (maxWFull - summaryRightPadding) 0 30;
|
||||||
{
|
dimensions_image_hint = mkDimensionsWH (maxWImg - summaryRightPadding) (maxWImg - summaryRightPadding) 0 30;
|
||||||
name = "${name}_${ident}_body";
|
dimensions_image_both = mkDimensionsWH (maxWImg - summaryRightPadding) (maxWImg - summaryRightPadding) 0 30;
|
||||||
parent = "${name}_${ident}_summary";
|
});
|
||||||
hook = mkHook "BL" "TL";
|
}
|
||||||
offset = mkVec2 0 12;
|
{
|
||||||
|
name = "${name}_${ident}_body";
|
||||||
|
parent = "${name}_${ident}_summary";
|
||||||
|
hook = mkHook "BL" "TL";
|
||||||
|
offset = mkVec2 0 12;
|
||||||
|
render_criteria = [
|
||||||
|
(And [
|
||||||
|
(Or extra.render_criteria)
|
||||||
|
(mkLiteral "Body")
|
||||||
|
])
|
||||||
|
];
|
||||||
|
params = struct "TextBlock" (unnamedStruct {
|
||||||
|
text = "%b";
|
||||||
|
font = "${fonts.sansSerif.name} ${toString (globalScale * 16)}";
|
||||||
|
ellipsize = mkLiteral "End";
|
||||||
|
color = colors.base06;
|
||||||
|
padding = mkPaddingLrBt 16 16 12 0;
|
||||||
|
dimensions = mkDimensionsWH maxWFull maxWFull 0 88;
|
||||||
|
dimensions_image_hint = mkDimensionsWH maxWImg maxWImg 0 88;
|
||||||
|
dimensions_image_both = mkDimensionsWH maxWImg maxWImg 0 88;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
]
|
||||||
|
# We unfortunately cannot move these out of mkBody, because the depend
|
||||||
|
# on the specific name for the parent, which cannot be changed dynamically.
|
||||||
|
# So each call to mkBody creates these progress bars which only differ in
|
||||||
|
# their parent :/
|
||||||
|
++ (mkProgress name "${ident}_hint" 0 {
|
||||||
render_criteria = [
|
render_criteria = [
|
||||||
(And [
|
(And (extra.render_criteria
|
||||||
(Or extra.render_criteria)
|
++ [
|
||||||
(mkLiteral "Body")
|
(mkLiteral "Progress")
|
||||||
])
|
(mkLiteral "HintImage")
|
||||||
|
]))
|
||||||
];
|
];
|
||||||
params = struct "TextBlock" (unnamedStruct {
|
})
|
||||||
text = "%b";
|
++ (mkProgress name "${ident}_body" 0 {
|
||||||
font = "${fonts.sansSerif.name} ${toString (globalScale * 16)}";
|
render_criteria = [
|
||||||
ellipsize = mkLiteral "End";
|
(And (extra.render_criteria
|
||||||
color = colors.base06;
|
++ [
|
||||||
padding = mkPaddingLrBt 16 16 12 0;
|
(mkLiteral "Progress")
|
||||||
dimensions = mkDimensionsWH 580 580 0 88;
|
(mkLiteral "Body")
|
||||||
dimensions_image_hint = mkDimensionsWH 440 440 0 88;
|
(Not (mkLiteral "HintImage"))
|
||||||
dimensions_image_both = mkDimensionsWH 440 440 0 88;
|
]))
|
||||||
});
|
];
|
||||||
}
|
})
|
||||||
];
|
++ (mkProgress name "${ident}_summary" 9 {
|
||||||
|
render_criteria = [
|
||||||
|
(And (extra.render_criteria
|
||||||
|
++ [
|
||||||
|
(mkLiteral "Progress")
|
||||||
|
(mkLiteral "Summary")
|
||||||
|
(Not (Or [
|
||||||
|
(mkLiteral "Body")
|
||||||
|
(mkLiteral "HintImage")
|
||||||
|
]))
|
||||||
|
]))
|
||||||
|
];
|
||||||
|
})
|
||||||
|
# Each mkProgress includes a button bar. But if no progress is included in a notification,
|
||||||
|
# those won't be rendered, so we have to define bars for non-progress notifications.
|
||||||
|
# (And yes, we need 3 because we cannot have duplicate names or dynamic parents)
|
||||||
|
++ (mkButtonBar name "${ident}_hint" {
|
||||||
|
render_criteria = [
|
||||||
|
(And (extra.render_criteria
|
||||||
|
++ [
|
||||||
|
(Not (mkLiteral "Progress"))
|
||||||
|
(mkLiteral "HintImage")
|
||||||
|
]))
|
||||||
|
];
|
||||||
|
})
|
||||||
|
++ (mkButtonBar name "${ident}_body" {
|
||||||
|
render_criteria = [
|
||||||
|
(And (extra.render_criteria
|
||||||
|
++ [
|
||||||
|
(Not (mkLiteral "Progress"))
|
||||||
|
(mkLiteral "Body")
|
||||||
|
(Not (mkLiteral "HintImage"))
|
||||||
|
]))
|
||||||
|
];
|
||||||
|
})
|
||||||
|
++ (mkButtonBar name "${ident}_summary" {
|
||||||
|
render_criteria = [
|
||||||
|
(And (extra.render_criteria
|
||||||
|
++ [
|
||||||
|
(Not (mkLiteral "Progress"))
|
||||||
|
(mkLiteral "Summary")
|
||||||
|
(Not (Or [
|
||||||
|
(mkLiteral "Body")
|
||||||
|
(mkLiteral "HintImage")
|
||||||
|
]))
|
||||||
|
]))
|
||||||
|
];
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
mkProgress = name: parent: yOffset: extra:
|
mkProgress = name: parent: yOffset: extra:
|
||||||
|
map (x: extra // x) (
|
||||||
|
[
|
||||||
|
{
|
||||||
|
name = "${name}_progress_${parent}_text";
|
||||||
|
parent = "${name}_${parent}";
|
||||||
|
hook = mkHook "BL" "TL";
|
||||||
|
offset = mkVec2 0 0;
|
||||||
|
params = struct "TextBlock" (unnamedStruct {
|
||||||
|
text = "%p%";
|
||||||
|
font = "${fonts.monospace.name} Bold ${toString (globalScale * 14)}";
|
||||||
|
align = mkLiteral "Right";
|
||||||
|
ellipsize = mkLiteral "End";
|
||||||
|
color = colors.base06;
|
||||||
|
padding = mkPaddingLrBt 12 16 12 yOffset;
|
||||||
|
dimensions = mkDimensionsWH 48 48 24 24;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "${name}_progress_${parent}_bar";
|
||||||
|
parent = "${name}_${parent}";
|
||||||
|
hook = mkHook "BL" "TL";
|
||||||
|
offset = mkVec2 0 0;
|
||||||
|
params = struct "ProgressBlock" (unnamedStruct {
|
||||||
|
width = globalScale * 510;
|
||||||
|
height = globalScale * 12;
|
||||||
|
border_width = 0.0;
|
||||||
|
border_rounding = globalScale * 6;
|
||||||
|
border_color = colors.base03;
|
||||||
|
background_color = colors.base03;
|
||||||
|
fill_color = colors.base0D;
|
||||||
|
fill_rounding = globalScale * 6;
|
||||||
|
padding = mkPaddingLrBt 68 16 12 (yOffset + 8);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
]
|
||||||
|
++ (mkButtonBar name "progress_${parent}_text" extra)
|
||||||
|
);
|
||||||
|
|
||||||
|
mkButtonBar = name: parent: extra:
|
||||||
map (x: extra // x) [
|
map (x: extra // x) [
|
||||||
{
|
{
|
||||||
name = "${name}_progress_${parent}_text";
|
name = "${name}_action_0_for_${parent}";
|
||||||
parent = "${name}_${parent}";
|
parent = "${name}_${parent}";
|
||||||
hook = mkHook "BL" "TL";
|
hook = mkHook "BL" "TL";
|
||||||
offset = mkVec2 0 0;
|
offset = mkVec2 0 0;
|
||||||
params = struct "TextBlock" (unnamedStruct {
|
render_criteria = [
|
||||||
text = "%p%";
|
(And (extra.render_criteria
|
||||||
|
++ [
|
||||||
|
(Or [
|
||||||
|
(struct "ActionOther" 0)
|
||||||
|
#(struct "ActionOther" 1)
|
||||||
|
#(struct "ActionOther" 2)
|
||||||
|
#(struct "ActionOther" 3)
|
||||||
|
])
|
||||||
|
]))
|
||||||
|
];
|
||||||
|
params = struct "ButtonBlock" (unnamedStruct {
|
||||||
|
text = "%a";
|
||||||
font = "${fonts.monospace.name} Bold ${toString (globalScale * 14)}";
|
font = "${fonts.monospace.name} Bold ${toString (globalScale * 14)}";
|
||||||
align = mkLiteral "Right";
|
|
||||||
ellipsize = mkLiteral "End";
|
ellipsize = mkLiteral "End";
|
||||||
color = colors.base06;
|
action = struct "OtherAction" 0;
|
||||||
padding = mkPaddingLrBt 12 16 12 yOffset;
|
text_color = colors.base06;
|
||||||
dimensions = mkDimensionsWH 48 48 24 24;
|
text_color_hovered = colors.base06;
|
||||||
});
|
background_color = colors.base01;
|
||||||
}
|
background_color_hovered = colors.base02;
|
||||||
{
|
border_color = colors.base04;
|
||||||
name = "${name}_progress_${parent}_bar";
|
border_color_hovered = colors.base0F;
|
||||||
parent = "${name}_${parent}";
|
border_rounding = globalScale * 0;
|
||||||
hook = mkHook "BL" "TL";
|
border_width = globalScale * 2;
|
||||||
offset = mkVec2 0 0;
|
padding = mkPaddingLrBt 12 16 12 0;
|
||||||
params = struct "ProgressBlock" (unnamedStruct {
|
dimensions = mkDimensionsWH 144 48 24 24;
|
||||||
width = globalScale * 520;
|
|
||||||
height = globalScale * 12;
|
|
||||||
border_width = 0.0;
|
|
||||||
border_rounding = globalScale * 6;
|
|
||||||
border_color = colors.base03;
|
|
||||||
background_color = colors.base03;
|
|
||||||
fill_color = colors.base0D;
|
|
||||||
fill_rounding = globalScale * 6;
|
|
||||||
padding = mkPaddingLrBt 68 16 12 (yOffset + 8);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
@ -217,6 +333,7 @@
|
||||||
# https://github.com/Toqozz/wired-notify/wiki/Shortcuts
|
# https://github.com/Toqozz/wired-notify/wiki/Shortcuts
|
||||||
shortcuts = ShortcutsConfig {
|
shortcuts = ShortcutsConfig {
|
||||||
notification_interact = 1; # left click
|
notification_interact = 1; # left click
|
||||||
|
notification_pause = 1;
|
||||||
notification_close = 2; # right click
|
notification_close = 2; # right click
|
||||||
notification_action1 = 3; # middle click
|
notification_action1 = 3; # middle click
|
||||||
};
|
};
|
||||||
|
@ -240,7 +357,7 @@
|
||||||
offset = mkVec2 0 0;
|
offset = mkVec2 0 0;
|
||||||
params = struct "TextBlock" (unnamedStruct {
|
params = struct "TextBlock" (unnamedStruct {
|
||||||
color = colors.base05;
|
color = colors.base05;
|
||||||
dimensions = mkDimensionsWH 0 (-1) 28 28;
|
dimensions = mkDimensionsWH 100 100 28 28;
|
||||||
ellipsize = mkLiteral "End";
|
ellipsize = mkLiteral "End";
|
||||||
font = "${fonts.monospace.name} Bold ${toString (globalScale * 14)}";
|
font = "${fonts.monospace.name} Bold ${toString (globalScale * 14)}";
|
||||||
padding = mkPaddingLrBt 0 16 4 12;
|
padding = mkPaddingLrBt 0 16 4 12;
|
||||||
|
@ -253,54 +370,13 @@
|
||||||
render_criteria = [criterionHasTopBar];
|
render_criteria = [criterionHasTopBar];
|
||||||
})
|
})
|
||||||
# if no top bar present: A body with no offset and a summary padding to the right (to not overlay the time)
|
# if no top bar present: A body with no offset and a summary padding to the right (to not overlay the time)
|
||||||
(mkBody "general" "notop" 0 24 {
|
(mkBody "general" "notop" 0 (16 + 100) {
|
||||||
render_criteria = [(Not criterionHasTopBar)];
|
render_criteria = [(Not criterionHasTopBar)];
|
||||||
})
|
})
|
||||||
# if top bar present: A body with matching y offset and no summary padding to the right
|
# if top bar present: A body with matching y offset and no summary padding to the right
|
||||||
(mkBody "general" "withtop" 36 0 {
|
(mkBody "general" "withtop" 36 0 {
|
||||||
render_criteria = [criterionHasTopBar];
|
render_criteria = [criterionHasTopBar];
|
||||||
})
|
})
|
||||||
# We unfortunately need to duplicate each layout that has the body, summary or hint as
|
|
||||||
# a parent, since each name must be unique and we cannot select the correct parent dynamically.
|
|
||||||
(lib.flip map ["notop" "withtop"] (parent: let
|
|
||||||
parentCriterion =
|
|
||||||
if parent == "withtop"
|
|
||||||
then criterionHasTopBar
|
|
||||||
else (Not criterionHasTopBar);
|
|
||||||
in [
|
|
||||||
(mkProgress "general" "${parent}_hint" 0 {
|
|
||||||
render_criteria = [
|
|
||||||
(And [
|
|
||||||
parentCriterion
|
|
||||||
(mkLiteral "Progress")
|
|
||||||
(mkLiteral "HintImage")
|
|
||||||
])
|
|
||||||
];
|
|
||||||
})
|
|
||||||
(mkProgress "general" "${parent}_body" 0 {
|
|
||||||
render_criteria = [
|
|
||||||
(And [
|
|
||||||
parentCriterion
|
|
||||||
(mkLiteral "Progress")
|
|
||||||
(mkLiteral "Body")
|
|
||||||
(Not (mkLiteral "HintImage"))
|
|
||||||
])
|
|
||||||
];
|
|
||||||
})
|
|
||||||
(mkProgress "general" "${parent}_summary" 9 {
|
|
||||||
render_criteria = [
|
|
||||||
(And [
|
|
||||||
parentCriterion
|
|
||||||
(mkLiteral "Progress")
|
|
||||||
(mkLiteral "Summary")
|
|
||||||
(Not (Or [
|
|
||||||
(mkLiteral "Body")
|
|
||||||
(mkLiteral "HintImage")
|
|
||||||
]))
|
|
||||||
])
|
|
||||||
];
|
|
||||||
})
|
|
||||||
]))
|
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue