diff --git a/.github/README.md b/.github/README.md
index 02e9e7f36..e74e09295 100644
--- a/.github/README.md
+++ b/.github/README.md
@@ -17,26 +17,35 @@
-
+
+ What this is/isn't
+
+ - Technically, configuration files
+ - Realistically, mostly the custom graphical shell
+ - NOT a system setup script: no graphic drivers, no zram setup, etc.
+
+
+
+
Notable features
- - **Overview**: Shows open apps with live previews. Type to search/calculate/run
- - **AI**: Gemini API and Ollama models
- - **Autogenerated colors**: Accessible and beautiful Material colors based on wallpaper
+ - **Overview**: Shows open apps with live previews
+ - **AI**: Gemini, Ollama, and more
+ - **QoL**: screen translation, anti-flashbang, Google Lens
+ - **Material themes**: Choose your wallpaper, done, enjoy
- **Transparent installation**: Every command is shown before it's run
+
- Installation (illogical-impulse Quickshell)
+ Installation
- _If you're new to Linux and decide to use Hyprland, you're in for a tough ride._
- Just run `bash <(curl -s https://ii.clsty.link/get)`
- Or, clone this repo and run `./setup install`
- - See [document](https://ii.clsty.link/en/ii-qs/01setup/) for details.
- - **Default keybinds**: Should be somewhat familiar to Windows or GNOME users. Important ones:
+ - See [the wiki](https://ii.clsty.link/en/ii-qs/01setup/) for more details
+ - **Keybinds**: Should be somewhat familiar to Windows or GNOME users. Important ones:
- `Super`+`/` = keybind list
- `Super`+`Enter` = terminal
- - Should look something like this:
-
@@ -50,13 +59,11 @@
| [Quickshell](https://quickshell.outfoxxed.me/) | A QtQuick-based widget system, used for the status bar, sidebars, etc. |
| Others | See [deps-info.md](https://github.com/end-4/dots-hyprland/blob/main/sdata/deps-info.md) |
- [not every bar is waybar] [not every bar is waybar] [not every bar is waybar] [not every bar is waybar] [not every bar is waybar]
-
Discord
- Server link | I hope this provides a friendlier environment for support without needing me to personally accept every friend request/DM. For real issues, prefer GitHub
+ Server link | I hope this provides a friendlier environment for support without needing me to personally accept every friend request/DM. For real issues, prefer GitHub
@@ -69,21 +76,15 @@
-### illogical-impulseQuickshell
-
-This is the latest and only supported style. Other stuff are still there mostly for viewing pleasure and not actual use, but code is still available, see below.
-
Widget system: Quickshell | Support: Yes
[Showcase video](https://www.youtube.com/watch?v=RPwovTInagE)
| AI, settings app | Some widgets |
|:---|:---------------|
-|
|
|
-| Window management | Built with love |
-|
|
|
-
-#### Other older styles are available at the end of the readme
+|
|
|
+| Window management | wow look its orange |
+|
|
|
• thank you •
@@ -111,15 +112,15 @@ Widget system: Quickshell | Support: Yes
---
-
• old, UNSUPPORTED stuff •
+ • previous styles •
+- **Unsupported!**
- **Source**: illogical-impulse AGS in `ii-ags` branch, others in `archive` branch.
-- **No support** will be provided
-- **Reverse chronological order** list. Older = more naive & spaghetti code
+- List is in reverse chronological order
-### illogical-impulse
AGS
+### illogical-impulse (AGS)
Widget system: AGS | Support: No
@@ -131,7 +132,7 @@ Widget system: AGS | Support: No
#### m3ww
-Widget system: EWW | Support: No, dead
+Widget system: EWW | Support: No
diff --git a/dots/.config/matugen/templates/gtk-4.0/gtk.css b/dots/.config/matugen/templates/gtk-4.0/gtk.css
index 07c8099f5..84cd38ee1 100644
--- a/dots/.config/matugen/templates/gtk-4.0/gtk.css
+++ b/dots/.config/matugen/templates/gtk-4.0/gtk.css
@@ -6,6 +6,10 @@
@media (prefers-color-scheme: light) {
/* Accents */
@define-color accent_color {{colors.primary.light.hex}};
+ @define-color accent_hover_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.08);
+ @define-color accent_vibrant_hover_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.18);
+ @define-color accent_active_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.1);
+ @define-color accent_vibrant_active_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.26);
@define-color accent_fg_color {{colors.on_primary.light.hex}};
@define-color accent_bg_color {{colors.primary.light.hex}};
@define-color destructive_bg_color {{colors.error_container.light.hex}};
@@ -22,11 +26,13 @@
@define-color headerbar_fg_color {{colors.on_surface.light.hex}};
@define-color card_bg_color {{colors.surface_container.light.hex}};
@define-color card_fg_color {{colors.on_surface.light.hex}};
- @define-color sidebar_bg_color {{colors.surface_container.light.hex}};
+ @define-color sidebar_bg_color {{colors.background.light.hex}};
@define-color sidebar_fg_color {{colors.on_surface.light.hex}};
+ @define-color sidebar_row_active_bg_color {{colors.secondary_container.light.hex}};
+ @define-color sidebar_row_active_fg_color {{colors.on_secondary_container.light.hex}};
@define-color secondary_sidebar_bg_color {{colors.surface_container_low.light.hex}};
@define-color secondary_sidebar_backdrop_color {{colors.surface_container_low.light.hex}};
- @define-color secondary_sidebar_fg_color {{colors.on_surface.light.hex}};
+ @define-color secondary_sidebar_fg_color {{colors.on_surface_variant.light.hex}};
@define-color sidebar_border_color @sidebar_bg_color;
@define-color sidebar_backdrop_color @sidebar_bg_color;
@define-color view_bg_color {{colors.surface_container_lowest.light.hex}};
@@ -36,16 +42,37 @@
/* Popups */
@define-color popover_bg_color {{colors.surface_container_highest.light.hex}};
@define-color popover_fg_color {{colors.on_surface.light.hex}};
+ @define-color popover_fg_hover_color rgba({{colors.on_surface.light.red}}, {{colors.on_surface.light.green}}, {{colors.on_surface.light.blue}}, 0.08);
@define-color dialog_bg_color {{colors.surface_container_high.light.hex}};
@define-color dialog_fg_color {{colors.on_surface.light.hex}};
@define-color thumbnail_bg_color {{colors.surface_container_high.light.hex}};
@define-color thumbnail_fg_color {{colors.on_surface.light.hex}};
+
+ /* Material */
+ @define-color inverse_on_surface {{colors.inverse_on_surface.light.hex}};
+ @define-color inverse_primary {{colors.inverse_primary.light.hex}};
+ @define-color inverse_surface {{colors.inverse_surface.light.hex}};
+ @define-color surface_container_highest {{colors.surface_container_highest.light.hex}};
+ @define-color surface_container_high {{colors.surface_container_high.light.hex}};
+ @define-color on_surface_variant {{colors.on_surface_variant.light.hex}};
+ @define-color surface_variant {{colors.surface_variant.light.hex}};
+
+ @define-color outline {{colors.outline.light.hex}};
+
+ /* Material state layers */
+ @define-color inverse_on_surface_hover rgba({{colors.inverse_on_surface.light.red}}, {{colors.inverse_on_surface.light.green}}, {{colors.inverse_on_surface.light.blue}}, 0.08);
+ @define-color inverse_on_surface_active rgba({{colors.inverse_on_surface.light.red}}, {{colors.inverse_on_surface.light.green}}, {{colors.inverse_on_surface.light.blue}}, 0.18);
+ @define-color inverse_primary_hover rgba({{colors.inverse_primary.light.red}}, {{colors.inverse_primary.light.green}}, {{colors.inverse_primary.light.blue}}, 0.08);
+ @define-color inverse_primary_active rgba({{colors.inverse_primary.light.red}}, {{colors.inverse_primary.light.green}}, {{colors.inverse_primary.light.blue}}, 0.18);
}
@media (prefers-color-scheme: dark) {
-
/* Accents */
@define-color accent_color {{colors.primary.dark.hex}};
+ @define-color accent_hover_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.08);
+ @define-color accent_vibrant_hover_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.18);
+ @define-color accent_active_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.1);
+ @define-color accent_vibrant_active_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.2);
@define-color accent_fg_color {{colors.on_primary.dark.hex}};
@define-color accent_bg_color {{colors.primary.dark.hex}};
@define-color destructive_bg_color {{colors.error_container.dark.hex}};
@@ -62,11 +89,13 @@
@define-color headerbar_fg_color {{colors.on_surface.dark.hex}};
@define-color card_bg_color {{colors.surface_container.dark.hex}};
@define-color card_fg_color {{colors.on_surface.dark.hex}};
- @define-color sidebar_bg_color {{colors.surface_container.dark.hex}};
+ @define-color sidebar_bg_color {{colors.background.dark.hex}};
@define-color sidebar_fg_color {{colors.on_surface.dark.hex}};
+ @define-color sidebar_row_active_bg_color {{colors.secondary_container.dark.hex}};
+ @define-color sidebar_row_active_fg_color {{colors.on_secondary_container.dark.hex}};
@define-color secondary_sidebar_bg_color {{colors.surface_container_low.dark.hex}};
@define-color secondary_sidebar_backdrop_color {{colors.surface_container_low.dark.hex}};
- @define-color secondary_sidebar_fg_color {{colors.on_surface.dark.hex}};
+ @define-color secondary_sidebar_fg_color {{colors.on_surface_variant.dark.hex}};
@define-color sidebar_border_color @sidebar_bg_color;
@define-color sidebar_backdrop_color @sidebar_bg_color;
@define-color view_bg_color {{colors.surface_container_lowest.dark.hex}};
@@ -76,8 +105,423 @@
/* Popups */
@define-color popover_bg_color {{colors.surface_container_highest.dark.hex}};
@define-color popover_fg_color {{colors.on_surface.dark.hex}};
+ @define-color popover_fg_hover_color rgba({{colors.on_surface.dark.red}}, {{colors.on_surface.dark.green}}, {{colors.on_surface.dark.blue}}, 0.08);
@define-color dialog_bg_color {{colors.surface_container_high.dark.hex}};
@define-color dialog_fg_color {{colors.on_surface.dark.hex}};
@define-color thumbnail_bg_color {{colors.surface_container_high.dark.hex}};
@define-color thumbnail_fg_color {{colors.on_surface.dark.hex}};
+
+ /* Material */
+ @define-color inverse_on_surface {{colors.inverse_on_surface.dark.hex}};
+ @define-color inverse_primary {{colors.inverse_primary.dark.hex}};
+ @define-color inverse_surface {{colors.inverse_surface.dark.hex}};
+ @define-color surface_container_highest {{colors.surface_container_highest.dark.hex}};
+ @define-color surface_container_high {{colors.surface_container_high.dark.hex}};
+ @define-color on_surface_variant {{colors.on_surface_variant.dark.hex}};
+ @define-color surface_variant {{colors.surface_variant.dark.hex}};
+
+ @define-color outline {{colors.outline.dark.hex}};
+
+ /* Material state layers */
+ @define-color inverse_on_surface_hover rgba({{colors.inverse_on_surface.dark.red}}, {{colors.inverse_on_surface.dark.green}}, {{colors.inverse_on_surface.dark.blue}}, 0.08);
+ @define-color inverse_on_surface_active rgba({{colors.inverse_on_surface.dark.red}}, {{colors.inverse_on_surface.dark.green}}, {{colors.inverse_on_surface.dark.blue}}, 0.18);
+ @define-color inverse_primary_hover rgba({{colors.inverse_primary.dark.red}}, {{colors.inverse_primary.dark.green}}, {{colors.inverse_primary.dark.blue}}, 0.08);
+ @define-color inverse_primary_active rgba({{colors.inverse_primary.dark.red}}, {{colors.inverse_primary.dark.green}}, {{colors.inverse_primary.dark.blue}}, 0.18);
+}
+
+* {
+ caret-color: @accent_color;
+}
+
+window {
+ background: @window_bg_color;
+}
+
+.text-button {
+ border-radius: 999px;
+}
+
+.text-button,
+.text-button * {
+ font-weight: 500;
+}
+
+splitbutton {
+ background-color: transparent;
+}
+
+splitbutton button {
+ border-top-left-radius: 999px;
+ border-bottom-left-radius: 999px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+splitbutton separator {
+ color: transparent;
+}
+
+splitbutton menubutton {
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ border-top-right-radius: 999px;
+ border-bottom-right-radius: 999px;
+}
+
+.popup-menu-item {
+ background-color: transparent;
+ border-radius: 999px;
+}
+
+#NautilusPathBar #NautilusPathButton * {
+ color: @accent_color;
+ font-weight: 400;
+}
+
+#NautilusPathBar #NautilusPathButton {
+ background: @accent_active_color;
+ border-radius: 4px;
+ margin: 0;
+ margin-right: 2px;
+}
+
+#NautilusPathBar {
+ background: transparent;
+}
+
+#NautilusPathBar box box:first-child #NautilusPathButton {
+ border-radius: 24px 4px 4px 24px;
+}
+
+#NautilusPathBar box box:last-child #NautilusPathButton {
+ border-radius: 4px 24px 24px 4px;
+}
+
+#NautilusPathBar #NautilusPathButton.current-dir.current-dir {
+ border-radius: 999px;
+}
+
+#NautilusPathBar #NautilusPathButton * {
+ color: @sidebar_row_active_fg_color;
+}
+
+#NautilusPathBar .dim-label {
+ font-size: 0;
+}
+
+#NautilusPathBar button .dim-label {
+ font-size: 14px;
+ opacity: 100%;
+}
+
+#NautilusPathBar button {
+ border-radius: 8px;
+}
+
+
+#NautilusPathBar button:checked {
+ background: @accent_vibrant_hover_color;
+}
+
+headerbar button {
+ border-radius: 999px;
+}
+
+headerbar >windowhandle box stack > box:nth-child(2) {
+ background: @accent_active_color;
+ border-radius: 8px;
+}
+
+.nautilus-list-view,
+.nautilus-grid-view {
+ background: @secondary_sidebar_bg_color;
+ border-radius: 16px;
+}
+
+.navigation-sidebar row * {
+ color: @sidebar_fg_color;
+ font-weight: 500;
+ font-size: 13px;
+}
+
+.navigation-sidebar row {
+ border-radius: 999px;
+ padding: 2px;
+}
+
+.navigation-sidebar row:hover {
+ background: @accent_hover_color;
+}
+
+.navigation-sidebar row:active {
+ background: @accent_active_color;
+}
+
+.navigation-sidebar row:selected {
+ background: @sidebar_row_active_bg_color;
+}
+
+.navigation-sidebar row:selected * {
+ color: @sidebar_row_active_fg_color;
+}
+
+banner widget {
+ border-radius: 16px 0 0 16px;
+ margin-bottom: 8px;
+ background-color: @secondary_sidebar_bg_color;
+}
+
+.boxed-list {
+ box-shadow: none;
+ background-color: @window_bg_color;
+}
+
+.boxed-list row {
+ background: @card_bg_color;
+ border-radius: 4px;
+ border: none;
+ margin-bottom: 2px;
+}
+
+.boxed-list row.activatable:hover {
+ background-color: @thumbnail_bg_color;
+}
+
+.boxed-list row.activatable:active {
+ background-color: @popover_bg_color;
+}
+
+.horizontal>listview>row {
+ background-color: transparent;
+}
+
+.boxed-list row:insensitive {
+ background-color: @card_bg_color;
+}
+
+.text-button.toggle {
+ border-radius: 4px;
+ background-color: @surface_container_highest;
+ margin-left: 2px;
+}
+
+.text-button.toggle:hover {
+ background-color: @surface_variant;
+}
+
+.text-button.toggle:active {
+ background-color: @surface_container_highest;
+}
+
+.text-button.toggle * {
+ color: @on_surface_variant;
+ font-weight: 400;
+}
+
+.boxed-list row:first-child {
+ border-radius: 16px 16px 4px 4px;
+}
+
+.boxed-list row:last-child {
+ border-radius: 4px 4px 16px 16px;
+ margin-bottom: 0;
+}
+
+.text-button.toggle:first-child {
+ border-radius: 16px 4px 4px 16px;
+}
+
+.text-button.toggle:last-child {
+ border-radius: 4px 16px 16px 4px;
+}
+
+.boxed-list row:first-child:last-child,
+.text-button.toggle:first-child:last-child {
+ border-radius: 16px;
+}
+
+.text-button.toggle:checked {
+ background-color: @accent_bg_color;
+ border-radius: 999px;
+}
+
+.text-button.toggle:checked * {
+ color: @accent_fg_color;
+ font-weight: 500;
+}
+
+button.back {
+ border-radius: 999px;
+ background-color: @accent_hover_color;
+ padding-left: 4px;
+ padding-right: 6px;
+}
+
+button.back * {
+ font-size: 12px;
+}
+
+button.back:hover {
+ background-color: @accent_hover_color;
+}
+
+button.back:active {
+ background-color: @accent_active_color;
+}
+
+/* switch */
+
+switch {
+ background: @secondary_sidebar_bg_color;
+ border: @outline 2px solid;
+ padding: 0;
+}
+
+switch:checked {
+ background: @accent_color;
+ border-color: @accent_color;
+}
+
+switch slider {
+ background: @outline;
+ margin: 3px;
+ min-width: 0;
+ min-height: 0;
+}
+
+switch:checked slider {
+ background: @accent_fg_color;
+ outline: transparent 2px solid;
+ margin: 0px;
+}
+
+/* toast */
+
+toast {
+ border-radius: 999px;
+ padding: 6px 6px 6px 10px;
+ background-color: @inverse_surface;
+ color: @inverse_on_surface;
+}
+
+toast .heading {
+ font-weight: 400;
+}
+
+toast button {
+ background-color: transparent;
+ color: @inverse_primary;
+}
+
+toast button:hover {
+ background-color: @inverse_primary_hover;
+}
+
+toast button:active {
+ background-color: @inverse_primary_active;
+}
+
+toast button:last-child {
+ color: @inverse_on_surface;
+}
+
+toast button:last-child:hover {
+ background-color: @inverse_on_surface_hover;
+}
+
+toast button:last-child:active {
+ background-color: @inverse_on_surface_active;
+}
+
+.collapse-spacing.vertical {
+ padding-bottom: 0;
+}
+
+tabbox {
+ padding: 0;
+}
+
+tabbox tabboxchild tab,
+tabbox tabboxchild {
+ background: transparent;
+ padding: 0 8px 3px;
+ border-radius: 999px;
+}
+
+tabbox tabboxchild tab {
+ padding: 3px 8px;
+}
+
+tab:hover {
+ background: @accent_hover_color;
+}
+
+tab:active,
+tab:selected {
+ background: @accent_active_color;
+}
+
+tab .tab-title {
+ padding: 0 12px;
+ color: @secondary_sidebar_fg_color;
+}
+
+tab .tab-title label {
+ border: none;
+ font-weight: 500;
+}
+
+tab:selected .tab-title label {
+ padding: 6px 0;
+ color: @accent_color;
+}
+
+/* popup menu */
+
+popover listview.view row,
+popover listview.view row:first-child,
+popover listview.view row:last-child {
+ background: transparent;
+ border-radius: 8px;
+}
+
+popover contents,
+popover arrow {
+ background: @secondary_sidebar_bg_color;
+}
+
+popover listview.view row:hover {
+ background: @popover_fg_hover_color;
+}
+
+popover listview.view row:active {
+ background: @popover_fg_active_color;
+}
+
+modelbutton {
+ padding: 2px 10px;
+}
+
+modelbutton * {
+ color: @popover_fg_color;
+}
+
+modelbutton:hover {
+ background-color: @popover_fg_hover_color;
+}
+
+tooltip {
+ background-color: @inverse_surface;
+ color: @inverse_on_surface;
+ font-size: 11px;
+ padding: 5px 9px;
+}
+
+/* search */
+
+.entry-completion.entry-completion.entry-completion contents {
+ padding: 0;
+}
+.image-button.flat arrow {
+ background: transparent;
}
diff --git a/dots/.config/quickshell/ii/modules/ii/verticalBar/BatteryIndicator.qml b/dots/.config/quickshell/ii/modules/ii/verticalBar/BatteryIndicator.qml
index 0302486dd..104baa35c 100644
--- a/dots/.config/quickshell/ii/modules/ii/verticalBar/BatteryIndicator.qml
+++ b/dots/.config/quickshell/ii/modules/ii/verticalBar/BatteryIndicator.qml
@@ -21,14 +21,15 @@ MouseArea {
id: batteryProgress
anchors.centerIn: parent
vertical: true
- valueBarWidth: 21
- valueBarHeight: 40
+ valueBarWidth: 20
+ valueBarHeight: 36
value: percentage
+ // value: 1
highlightColor: (isLow && !isCharging) ? Appearance.m3colors.m3error : Appearance.colors.colOnSecondaryContainer
font {
- pixelSize: text.length > 2 ? 11 : 13
- weight: text.length > 2 ? Font.Medium : Font.DemiBold
+ pixelSize: 13
+ weight: Font.DemiBold
}
textMask: Item {
@@ -36,20 +37,29 @@ MouseArea {
width: batteryProgress.valueBarWidth
height: batteryProgress.valueBarHeight
- ColumnLayout {
+ Column {
anchors.centerIn: parent
- spacing: 0
+ spacing: -4
MaterialSymbol {
id: boltIcon
- Layout.alignment: Qt.AlignHCenter
+ anchors.horizontalCenter: parent.horizontalCenter
fill: 1
- text: isCharging ? "bolt" : Icons.getBatteryIcon(Battery.percentage * 100)
+ text: {
+ if (batteryProgress.value == 1) {
+ return "check";
+ } else if (root.isCharging) {
+ return "bolt";
+ } else {
+ return Icons.getBatteryIcon(Battery.percentage * 100);
+ }
+ }
iconSize: Appearance.font.pixelSize.normal
animateChange: true
}
StyledText {
- Layout.alignment: Qt.AlignHCenter
+ visible: text.length <= 2
+ anchors.horizontalCenter: parent.horizontalCenter
font: batteryProgress.font
text: batteryProgress.text
}
diff --git a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalBarContent.qml b/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalBarContent.qml
index 5b7f248ca..3369a8d54 100644
--- a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalBarContent.qml
+++ b/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalBarContent.qml
@@ -140,13 +140,6 @@ Item { // Bar content region
Layout.fillHeight: false
}
- HorizontalBarSeparator {}
-
- VerticalDateWidget {
- Layout.fillWidth: true
- Layout.fillHeight: false
- }
-
HorizontalBarSeparator {
visible: Battery.available
}
diff --git a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalClockWidget.qml b/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalClockWidget.qml
index 3f9ca818a..6c8788715 100644
--- a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalClockWidget.qml
+++ b/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalClockWidget.qml
@@ -8,26 +8,44 @@ import qs.modules.ii.bar as Bar
Item {
id: root
property bool borderless: Config.options.bar.borderless
- implicitHeight: clockColumn.implicitHeight
+ implicitHeight: column.implicitHeight
implicitWidth: Appearance.sizes.verticalBarWidth
- ColumnLayout {
- id: clockColumn
- anchors.centerIn: parent
- spacing: 0
+ readonly property string dateTimeString: DateTime.time
+ readonly property bool hasAmPm: dateTimeString.toLowerCase().includes("am") || dateTimeString.toLowerCase().includes("pm")
- Repeater {
- model: DateTime.time.split(/[: ]/)
- delegate: StyledText {
- required property string modelData
- Layout.alignment: Qt.AlignHCenter
- font.pixelSize: modelData.match(/am|pm/i) ?
- Appearance.font.pixelSize.smaller // Smaller "am"/"pm" text
- : Appearance.font.pixelSize.large
- color: Appearance.colors.colOnLayer1
- text: modelData.padStart(2, "0")
+ Column {
+ id: column
+ anchors.centerIn: parent
+ spacing: root.hasAmPm ? 6 : 0
+
+ Column {
+ anchors.horizontalCenter: parent.horizontalCenter
+ spacing: -4
+
+ Repeater {
+ model: root.dateTimeString.split(/[: ]/)
+ delegate: StyledText {
+ required property string modelData
+ anchors.horizontalCenter: parent.horizontalCenter
+ font.pixelSize: {
+ if (modelData.match(/am|pm/i))
+ return Appearance.font.pixelSize.smaller;
+ else
+ // Smaller "am"/"pm" text
+ return Appearance.font.pixelSize.large;
+ }
+ color: Appearance.colors.colOnLayer1
+ text: modelData.padStart(2, "0")
+ }
}
}
+ StyledText {
+ anchors.horizontalCenter: parent.horizontalCenter
+ font.pixelSize: Appearance.font.pixelSize.smallest
+ color: Appearance.colors.colOnLayer1
+ text: DateTime.shortDate
+ }
}
MouseArea {
diff --git a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalDateWidget.qml b/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalDateWidget.qml
deleted file mode 100644
index bf76ebe67..000000000
--- a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalDateWidget.qml
+++ /dev/null
@@ -1,64 +0,0 @@
-import qs.modules.common
-import qs.modules.common.widgets
-import qs.services
-import QtQuick
-import QtQuick.Shapes
-import QtQuick.Layouts
-import qs.modules.ii.bar as Bar
-
-Item { // Full hitbox
- id: root
-
- implicitHeight: content.implicitHeight
- implicitWidth: Appearance.sizes.verticalBarWidth
- property var dayOfMonth: DateTime.shortDate.split(/[-\/]/)[0] // What if 🍔murica🦅? good question
- property var monthOfYear: DateTime.shortDate.split(/[-\/]/)[1]
-
- Item { // Boundaries for date numbers
- id: content
- anchors.centerIn: parent
- implicitWidth: 24
- implicitHeight: 30
-
- Shape {
- id: diagonalLine
- property real padding: 4
- anchors.fill: parent
- preferredRendererType: Shape.CurveRenderer
-
- ShapePath {
- strokeWidth: 1.2
- strokeColor: Appearance.colors.colSubtext
- fillColor: "transparent"
- startX: content.width - diagonalLine.padding
- startY: diagonalLine.padding
- PathLine {
- x: diagonalLine.padding
- y: content.height - diagonalLine.padding
- }
- }
- }
-
- StyledText {
- id: dayText
- anchors {
- top: parent.top
- left: parent.left
- }
- font.pixelSize: 13
- color: Appearance.colors.colOnLayer1
- text: dayOfMonth
- }
-
- StyledText {
- id: monthText
- anchors {
- bottom: parent.bottom
- right: parent.right
- }
- font.pixelSize: 13
- color: Appearance.colors.colOnLayer1
- text: monthOfYear
- }
- }
-}
diff --git a/dots/.config/quickshell/ii/scripts/colors/terminal/sequences.txt b/dots/.config/quickshell/ii/scripts/colors/terminal/sequences.txt
index 97459582e..a677181ed 100644
--- a/dots/.config/quickshell/ii/scripts/colors/terminal/sequences.txt
+++ b/dots/.config/quickshell/ii/scripts/colors/terminal/sequences.txt
@@ -1 +1 @@
-]4;0;#$term0 #\]1;0;#$term0 #\]4;1;#$term1 #\]4;2;#$term2 #\]4;3;#$term3 #\]4;4;#$term4 #\]4;5;#$term5 #\]4;6;#$term6 #\]4;7;#$term7 #\]4;8;#$term8 #\]4;9;#$term9 #\]4;10;#$term10 #\]4;11;#$term11 #\]4;12;#$term12 #\]4;13;#$term13 #\]4;14;#$term14 #\]4;15;#$term15 #\]10;#$term7 #\]11;[100]#$term0 #\]12;#$term7 #\]13;#$term7 #\]17;#$term7 #\]19;#$term0 #\]4;232;#$term7 #\]4;256;#$term7 #\]708;[100]#$term0 #\]11;#$term0 #\
\ No newline at end of file
+]4;0;#$term0 #\]1;0;#$term0 #\]4;1;#$term1 #\]4;2;#$term2 #\]4;3;#$term3 #\]4;4;#$term4 #\]4;5;#$term5 #\]4;6;#$term6 #\]4;7;#$term7 #\]4;8;#$term8 #\]4;9;#$term9 #\]4;10;#$term10 #\]4;11;#$term11 #\]4;12;#$term12 #\]4;13;#$term13 #\]4;14;#$term14 #\]4;15;#$term15 #\]4;232;#$term7 #\]4;255;#$primary #\]4;254;#$primaryContainer #\]4;253;#$secondary #\]4;252;#$secondaryContainer #\]4;251;#$tertiary #\]4;250;#$tertiaryContainer #\]4;249;#$error #\]4;248;#$errorContainer #\]4;232;#$onPrimary #\]4;233;#$onPrimaryContainer #\]4;234;#$onSecondary #\]4;235;#$onSecondaryContainer #\]4;236;#$onTertiary #\]4;237;#$onTertiaryContainer #\]4;238;#$onError #\]4;239;#$onErrorContainer #\]4;240;#$onPrimary #\]4;243;#$primary #\]4;244;#$error #\]4;245;#$outlineVariant #\]10;#$term7 #\]11;[100]#$term0 #\]12;#$term7 #\]13;#$term7 #\]17;#$term7 #\]19;#$term0 #\]708;[100]#$term0 #
\ No newline at end of file
diff --git a/sdata/dist-fedora/SPECS/matugen.spec b/sdata/dist-fedora/SPECS/matugen.spec
new file mode 100644
index 000000000..9f7bc70aa
--- /dev/null
+++ b/sdata/dist-fedora/SPECS/matugen.spec
@@ -0,0 +1,38 @@
+%global commit e65259d68edc034905da477b6c1a349e89e2aa8d
+%global shortcommit %(c=%{commit}; echo ${c:0:7})
+%global commits 719
+%global snapdate 20260213
+%global tag 4.0.0
+
+Name: matugen
+Version: %{tag}^%{commits}.%{shortcommit}
+Release: 0%{?dist}
+Summary: A cross-platform material you and base16 color generation tool
+
+License: GPL-2.0
+URL: https://github.com/InioX/matugen
+Source0: %{url}/archive/%{commit}/matugen-%{shortcommit}.tar.gz
+
+BuildRequires: rust-packaging
+BuildRequires: cargo
+BuildRequires: gcc
+
+%description
+A cross-platform material you and base16 color generation tool
+
+%prep
+%autosetup -n matugen-%{commit} -p1
+
+%build
+cargo build --release
+
+%install
+install -Dm0755 target/release/matugen %{buildroot}%{_bindir}/matugen
+
+%files
+%license LICENSE
+%doc README.md
+%{_bindir}/matugen
+
+%changelog
+%autochangelog
diff --git a/sdata/dist-fedora/feddeps.toml b/sdata/dist-fedora/feddeps.toml
index 7329cdfc5..e1b842e50 100644
--- a/sdata/dist-fedora/feddeps.toml
+++ b/sdata/dist-fedora/feddeps.toml
@@ -68,7 +68,6 @@ packages = [
"fish",
"fontconfig",
"kitty",
- "matugen",
"florian-karsten-space-grotesk-fonts",
"starship",
"jetbrains-mono-nerd-fonts",
diff --git a/sdata/dist-fedora/install-deps.sh b/sdata/dist-fedora/install-deps.sh
index 55c0d8112..cf0efb675 100644
--- a/sdata/dist-fedora/install-deps.sh
+++ b/sdata/dist-fedora/install-deps.sh
@@ -28,26 +28,46 @@ function install_RPMS() {
local local_specs local_rpms
rpmbuildroot="${rpmbuildroot:-${REPO_ROOT}/cache/rpmbuild}"
+ x rm -rf "${REPO_ROOT}/cache/rpmbuild"
x mkdir -p "$rpmbuildroot"/{BUILD,RPMS,SOURCES}
x cp -r "${REPO_ROOT}/sdata/dist-fedora/SPECS" "$rpmbuildroot/"
x cd $rpmbuildroot/SPECS
- # we need cpptrace BEFORE quickshell-git
- local_specs=(
- "$rpm_specs/cpptrace.spec"
- "$rpm_specs/quickshell-git.spec"
- "$rpm_specs/hyprland-qt-support.spec"
+ packages=(
+ "cpptrace"
+ "quickshell-git"
+ "hyprland-qt-support"
+ "matugen"
)
- for spec_file in ${local_specs[@]}; do
+ for package in "${packages[@]}"; do
+ echo "start $package"
+
+ spec="$rpm_specs/$package.spec"
+ installed_rpm_stamp=$(rpm -q --qf '%{NVRA}\n' "$package" 2>/dev/null || true)
+ spec_stamp=$(rpmspec -q --qf '%{NVRA}\n' "$spec")
+
+ [[ -f "$spec" ]] || {
+ echo "Missing spec: $spec"
+ continue
+ }
+
+ echo "rpm_specs=$rpm_specs"
+ echo "spec=$spec"
+ echo "spec_stamp=$spec_stamp"
+
+ if [[ "$installed_rpm_stamp" == "$spec_stamp" ]]; then
+ printf "$installed_rpm_stamp is installed and up to date. Skipping.\n"
+ continue
+ fi
# Download sources
- x spectool -g -C "$rpmbuildroot/SOURCES" "$spec_file"
+ x spectool -g -C "$rpmbuildroot/SOURCES" "$spec"
# Install build dependencies
- r x sudo dnf builddep -y "$spec_file"
+ r x sudo dnf builddep -y "$spec"
# Build the RPM package locally. If it fails, download it from COPR.
- if ! rpmbuild -bb --define "_topdir $rpmbuildroot" --define "debug_package %{nil}" "$spec_file"; then
- printf "${STY_RED}Local build encountered an issue. Downloading $(basename "$spec_file" .spec) from COPR. Report the issue to Discussions pls.${STY_RST}\n"
- sudo dnf install -y $(basename "$spec_file" .spec)
+ if ! rpmbuild -bb --define "_topdir $rpmbuildroot" --define "debug_package %{nil}" "$spec"; then
+ printf "${STY_RED}Local build encountered an issue. Downloading $(basename "$spec" .spec) from COPR. Report the issue to Discussions pls.${STY_RST}\n"
+ sudo dnf install -y $(basename "$spec" .spec)
nolock_qs=true
fi
done