Merge pull request #4841 from Cprakhar/feat/first-day-of-week-calendar

feat: add support for configurable first day of the week in calendar
This commit is contained in:
Alexis Rouillard
2026-07-03 22:43:11 +02:00
committed by GitHub
2 changed files with 23 additions and 5 deletions
+7 -1
View File
@@ -138,6 +138,11 @@ View all valid format options in *strftime(3)* or have a look https://en.cpprefe
:[ When enabled, the calendar follows the ISO 8601 standard: weeks begin on :[ When enabled, the calendar follows the ISO 8601 standard: weeks begin on
Monday, and the first week of the year is numbered 1. The default week format is Monday, and the first week of the year is numbered 1. The default week format is
'{:%V}'. '{:%V}'.
|[ *first-day-of-week*
:[ integer
:[
:[ The first day of the week, where 0 is Sunday and 6 is Saturday.
When not set, the first day of the week is determined by the locale settings.
3. Addressed by *clock: calendar: format* 3. Addressed by *clock: calendar: format*
[- *Option* [- *Option*
@@ -210,8 +215,9 @@ View all valid format options in *strftime(3)* or have a look https://en.cpprefe
"mode" : "year", "mode" : "year",
"mode-mon-col" : 3, "mode-mon-col" : 3,
"weeks-pos" : "right", "weeks-pos" : "right",
"first-day-of-week": 1,
"on-scroll" : 1, "on-scroll" : 1,
"on-click-right": "mode", "on-click-right" : "mode",
"format": { "format": {
"months": "<span color='#ffead3'><b>{}</b></span>", "months": "<span color='#ffead3'><b>{}</b></span>",
"days": "<span color='#ecc6d9'><b>{}</b></span>", "days": "<span color='#ecc6d9'><b>{}</b></span>",
+12
View File
@@ -514,6 +514,18 @@ using deleting_unique_ptr = std::unique_ptr<T, deleter_from_fn<fn>>;
// Computations done similarly to Linux cal utility. // Computations done similarly to Linux cal utility.
auto waybar::modules::Clock::first_day_of_week() -> weekday { auto waybar::modules::Clock::first_day_of_week() -> weekday {
const auto firstdow = config_[kCldPlaceholder]["first-day-of-week"];
if (firstdow.isInt()) {
const int firstDay = firstdow.asInt();
if (!(firstDay >= 0 && firstDay <= 6)) {
spdlog::warn(
"Clock calender configuration first-day-of-week = {0} must be in range [0, 6]. Default "
"value is used instead",
firstDay);
} else {
return weekday{static_cast<unsigned>(firstDay)};
}
}
if (iso8601Calendar_) { if (iso8601Calendar_) {
return Monday; return Monday;
} }