diff --git a/modules/theme/default.nix b/modules/theme/default.nix index 0ef17de..12884f9 100644 --- a/modules/theme/default.nix +++ b/modules/theme/default.nix @@ -5,7 +5,12 @@ kdePackages.breeze-icons qt6.qtsvg # needed to load breeze icons + # for testing kde things kdePackages.qqc2-desktop-style + kdePackages.kirigami + kdePackages.kirigami.unwrapped + kdePackages.kirigami-addons + kdePackages.sonnet ]; qt = { @@ -20,17 +25,19 @@ nixpkgs.overlays = [(final: prev: { qt6Packages = prev.qt6Packages.overrideScope (qfinal: qprev: { qt6ct = qprev.qt6ct.overrideAttrs (ctprev: { - nativeBuildInputs = (builtins.filter (p: p != qfinal.qmake) ctprev.nativeBuildInputs) ++ [ final.cmake ]; + src = pkgs.fetchFromGitLab { + domain = "www.opencode.net"; + owner = "ilya-fedin"; + repo = "qt6ct"; + rev = "6fa66ca94f1f8fa5119ad6669d5e3547f4077c1c"; # 'kde' branch + sha256 = "z84z4XhAVqIJpF3m6H9FwFiDR7Nk+AY2tLpsibNEzPY="; + }; buildInputs = ctprev.buildInputs ++ (with final.kdePackages; [ kconfig kcolorscheme kiconthemes ]); - - cmakeFlags = [ - (lib.cmakeFeature "PLUGINDIR" "lib/qt-6/plugins") - ]; }); }); })]; diff --git a/modules/user/general.nix b/modules/user/general.nix index 7478654..a93ac88 100644 --- a/modules/user/general.nix +++ b/modules/user/general.nix @@ -20,8 +20,10 @@ dejavu_fonts nerdfonts noto-fonts - noto-fonts-cjk + noto-fonts-cjk-sans ]) ++ (with pkgs; [ + material-symbols + font-awesome corefonts vistafonts ]); @@ -126,6 +128,7 @@ speedcrunch libreoffice-qt6 ripgrep + fd qbittorrent signal-desktop anki-bin @@ -133,6 +136,7 @@ wireshark mumble freetube + jujutsu distrobox xdg-utils @@ -142,6 +146,9 @@ unrar # used by ark libnotify # test with it a lot + + kdePackages.merkuro + kdePackages.akonadi ]; programs = { diff --git a/modules/user/modules/firefox/default.nix b/modules/user/modules/firefox/default.nix index 49f22e2..cc1f407 100755 --- a/modules/user/modules/firefox/default.nix +++ b/modules/user/modules/firefox/default.nix @@ -194,9 +194,10 @@ in { ''; }; in { - base = { - id = 10; + base = mkProfile { + id = 5; name = "base"; + settings = {}; }; schizo = mkProfile { diff --git a/modules/user/modules/firefox/sideberry_chrome.css b/modules/user/modules/firefox/sideberry_chrome.css index b668b3e..9efd2f0 100755 --- a/modules/user/modules/firefox/sideberry_chrome.css +++ b/modules/user/modules/firefox/sideberry_chrome.css @@ -54,13 +54,13 @@ See the above repository for updates as well as full license text. */ direction: rtl; } -#sidebar-box > #sidebar { +#sidebar-box #sidebar { transition: min-width 115ms linear !important; min-width: var(--uc-sidebar-width) !important; will-change: min-width; } -#sidebar-box:hover > #sidebar { +#sidebar-box:hover #sidebar { min-width: var(--uc-sidebar-hover-width) !important; transition: min-width 100ms linear var(--uc-autohide-sidebar-delay), box-shadow 500ms linear !important; box-shadow: 0 0 4px rgba(10,10,10, .5); @@ -90,10 +90,11 @@ See the above repository for updates as well as full license text. */ margin-inline: 0px !important; border-left-style: solid !important; } -#sidebar-splitter{ - width: 0px !important; +#sidebar-splitter { + display: none; + /*width: 0px !important; background-color: #f00 !important; - border: none !important; + border: none !important;*/ } /* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_bookmarks_toolbar.css made available under Mozilla Public License v. 2.0 diff --git a/modules/user/modules/keepassxc/default.nix b/modules/user/modules/keepassxc/default.nix index e394856..577b850 100644 --- a/modules/user/modules/keepassxc/default.nix +++ b/modules/user/modules/keepassxc/default.nix @@ -5,10 +5,6 @@ url = "https://patch-diff.githubusercontent.com/raw/keepassxreboot/keepassxc/pull/11692.patch"; sha256 = "S/Oy4dAxER2NkoJQYAdsz5rphn5SW2TH50F//5Xmf+Y="; }) - (pkgs.fetchpatch { - url = "https://patch-diff.githubusercontent.com/raw/keepassxreboot/keepassxc/pull/11693.patch"; - sha256 = "VveqhLfcw2WyYsD+3jTaqKp4d1EYX8pPL++hyGpsz1w="; - }) ]; }); in { diff --git a/modules/user/modules/quickshell/shell/ReloadPopup.qml b/modules/user/modules/quickshell/shell/ReloadPopup.qml deleted file mode 100644 index f1146ef..0000000 --- a/modules/user/modules/quickshell/shell/ReloadPopup.qml +++ /dev/null @@ -1,126 +0,0 @@ -import QtQuick -import QtQuick.Layouts -import Quickshell - -Scope { - id: root - property bool failed; - property string errorString; - - // Connect to the Quickshell global to listen for the reload signals. - Connections { - target: Quickshell - - function onReloadCompleted() { - root.failed = false; - popupLoader.loading = true; - } - - function onReloadFailed(error: string) { - // Close any existing popup before making a new one. - popupLoader.active = false; - - root.failed = true; - root.errorString = error; - popupLoader.loading = true; - } - } - - // Keep the popup in a loader because it isn't needed most of the timeand will take up - // memory that could be used for something else. - LazyLoader { - id: popupLoader - - PanelWindow { - id: popup - - anchors { - top: true - left: true - } - - margins { - top: 25 - left: 25 - } - - width: rect.width - height: rect.height - - // color blending is a bit odd as detailed in the type reference. - color: "transparent" - - Rectangle { - id: rect - color: failed ? "#40802020" : "#40009020" - - implicitHeight: layout.implicitHeight + 50 - implicitWidth: layout.implicitWidth + 30 - - // Fills the whole area of the rectangle, making any clicks go to it, - // which dismiss the popup. - MouseArea { - id: mouseArea - anchors.fill: parent - onClicked: popupLoader.active = false - - // makes the mouse area track mouse hovering, so the hide animation - // can be paused when hovering. - hoverEnabled: true - } - - ColumnLayout { - id: layout - anchors { - top: parent.top - topMargin: 20 - horizontalCenter: parent.horizontalCenter - } - - Text { - text: root.failed ? "Reload failed." : "Reloaded completed!" - color: "white" - } - - Text { - text: root.errorString - color: "white" - // When visible is false, it also takes up no space. - visible: root.errorString != "" - } - } - - // A progress bar on the bottom of the screen, showing how long until the - // popup is removed. - Rectangle { - id: bar - color: "#20ffffff" - anchors.bottom: parent.bottom - anchors.left: parent.left - height: 20 - - PropertyAnimation { - id: anim - target: bar - property: "width" - from: rect.width - to: 0 - duration: failed ? 10000 : 800 - onFinished: popupLoader.active = false - - // Pause the animation when the mouse is hovering over the popup, - // so it stays onscreen while reading. This updates reactively - // when the mouse moves on and off the popup. - paused: mouseArea.containsMouse - } - } - - // We could set `running: true` inside the animation, but the width of the - // rectangle might not be calculated yet, due to the layout. - // In the `Component.onCompleted` event handler, all of the component's - // properties and children have been initialized. - Component.onCompleted: anim.start() - } - } - } -} diff --git a/modules/user/modules/quickshell/shell/bar/Bar.qml b/modules/user/modules/quickshell/shell/bar/Bar.qml index 0d484a7..ac7edbf 100644 --- a/modules/user/modules/quickshell/shell/bar/Bar.qml +++ b/modules/user/modules/quickshell/shell/bar/Bar.qml @@ -7,11 +7,10 @@ import "systray" as SysTray import "audio" as Audio import "mpris" as Mpris import "power" as Power -import "root:notifications" as Notifs +import "../notifications" as Notifs BarContainment { id: root - property bool isSoleBar: Quickshell.screens.length == 1; ColumnLayout { diff --git a/modules/user/modules/quickshell/shell/bar/BarContainment.qml b/modules/user/modules/quickshell/shell/bar/BarContainment.qml index c3ea9f1..c9d9b25 100644 --- a/modules/user/modules/quickshell/shell/bar/BarContainment.qml +++ b/modules/user/modules/quickshell/shell/bar/BarContainment.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell +import Quickshell.Hyprland import Quickshell.Wayland import ".." import "../lock" as Lock @@ -15,41 +16,58 @@ PanelWindow { bottom: true } - width: 70 - exclusiveZone: width - margins.left + property real baseWidth: 55 + property real leftMargin: root.compactState * 10 + width: baseWidth + 15 + exclusiveZone: baseWidth + (isFullscreenWorkspace ? 0 : 15) - margins.left + + mask: Region { + height: root.height + width: root.exclusiveZone + } color: "transparent" WlrLayershell.namespace: "shell:bar" - readonly property var tooltip: tooltip; + readonly property Tooltip tooltip: tooltip; Tooltip { id: tooltip bar: root } - readonly property real tooltipXOffset: root.width + 2; + readonly property real tooltipXOffset: root.baseWidth + root.leftMargin + 5; function boundedY(targetY: real, height: real): real { return Math.max(barRect.anchors.topMargin + height, Math.min(barRect.height + barRect.anchors.topMargin - height, targetY)) } + readonly property bool isFullscreenWorkspace: Hyprland.monitorFor(screen).activeWorkspace.hasFullscreen + property real compactState: isFullscreenWorkspace ? 0 : 1 + Behavior on compactState { + NumberAnimation { + duration: 600 + easing.type: Easing.BezierSpline + easing.bezierCurve: [0.0, 0.75, 0.15, 1.0, 1.0, 1.0] + } + } + Rectangle { id: barRect - x: 10 - Lock.Controller.lockSlide * (barRect.width + 10) + x: root.leftMargin - Lock.Controller.lockSlide * (barRect.width + root.leftMargin) width: parent.width - 15 anchors { top: parent.top bottom: parent.bottom - margins: 10 + margins: root.compactState * 10 } color: ShellGlobals.colors.bar - radius: 5 + radius: root.compactState * 5 border.color: ShellGlobals.colors.barOutline - border.width: 1 + border.width: root.compactState Item { id: containment diff --git a/modules/user/modules/quickshell/shell/bar/Workspaces.qml b/modules/user/modules/quickshell/shell/bar/Workspaces.qml index 5c2a1f6..5dc18d4 100644 --- a/modules/user/modules/quickshell/shell/bar/Workspaces.qml +++ b/modules/user/modules/quickshell/shell/bar/Workspaces.qml @@ -61,7 +61,7 @@ FullwidthMouseArea { property int wsIndex: root.wsBaseIndex + index; property HyprlandWorkspace workspace: null; property bool exists: workspace != null; - property bool active: (root.monitor?.activeWorkspace ?? false) && root.monitor.activeWorkspace == workspace; + property bool active: workspace?.active ?? false onActiveChanged: { if (active) root.currentIndex = wsIndex; diff --git a/modules/user/modules/quickshell/shell/bar/audio/AudioControls.qml b/modules/user/modules/quickshell/shell/bar/audio/AudioControls.qml index 3b1bd27..737f721 100644 --- a/modules/user/modules/quickshell/shell/bar/audio/AudioControls.qml +++ b/modules/user/modules/quickshell/shell/bar/audio/AudioControls.qml @@ -16,7 +16,6 @@ BarWidgetInner { } id: column; - implicitHeight: childrenRect.height; spacing: 5; Loader { diff --git a/modules/user/modules/quickshell/shell/bar/mpris/MediaSlider.qml b/modules/user/modules/quickshell/shell/bar/mpris/MediaSlider.qml index 93f1162..5670051 100644 --- a/modules/user/modules/quickshell/shell/bar/mpris/MediaSlider.qml +++ b/modules/user/modules/quickshell/shell/bar/mpris/MediaSlider.qml @@ -9,6 +9,9 @@ T.Slider { implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, implicitHandleHeight + topPadding + bottomPadding) + property color barColor: "#80ceffff" + property color grooveColor: "#30ceffff" + background: Rectangle { x: control.leftPadding y: control.topPadding + control.availableHeight / 2 - height / 2 @@ -18,7 +21,7 @@ T.Slider { height: implicitHeight radius: 5 - color: "#30ceffff" + color: control.grooveColor border.width: 0 Rectangle { @@ -29,7 +32,7 @@ T.Slider { width: control.handle.x + (control.handle.width / 2) - parent.x radius: parent.radius - color: "#80ceffff" + color: control.barColor } } diff --git a/modules/user/modules/quickshell/shell/bar/mpris/Players.qml b/modules/user/modules/quickshell/shell/bar/mpris/Players.qml index fdf87b1..4f52d96 100644 --- a/modules/user/modules/quickshell/shell/bar/mpris/Players.qml +++ b/modules/user/modules/quickshell/shell/bar/mpris/Players.qml @@ -29,8 +29,15 @@ FullwidthMouseArea { property alias widgetOpen: persist.widgetOpen; - acceptedButtons: Qt.RightButton - onPressed: widgetOpen = !widgetOpen + acceptedButtons: Qt.RightButton | Qt.ForwardButton | Qt.BackButton + onPressed: event => { + if (event.button == Qt.RightButton) widgetOpen = !widgetOpen; + else if (event.button == Qt.ForwardButton) { + MprisController.next(); + } else if (event.button == Qt.BackButton) { + MprisController.previous(); + } + } onWheel: event => { event.accepted = true; @@ -664,6 +671,20 @@ FullwidthMouseArea { } } + ColorQuantizer { + id: quant + rescaleSize: 200 + depth: 0 + source: MprisController.activeTrack.artUrl + onColorsChanged: console.log(colors) + } + + grooveColor: quant.colors.length === 0 ? "#30ceffff" : Qt.alpha(quant.colors[0], 0.2) + barColor: quant.colors.length === 0 ? "#80ceffff" : Qt.alpha(Qt.lighter(quant.colors[0]), 0.5) + + Behavior on grooveColor { ColorAnimation { duration: 200 } } + Behavior on barColor { ColorAnimation { duration: 200 } } + Layout.fillWidth: true enabled: player.canSeek from: 0 diff --git a/modules/user/modules/quickshell/shell/notifications/NotificationWidget.qml b/modules/user/modules/quickshell/shell/notifications/NotificationWidget.qml index a63ff89..ec75697 100644 --- a/modules/user/modules/quickshell/shell/notifications/NotificationWidget.qml +++ b/modules/user/modules/quickshell/shell/notifications/NotificationWidget.qml @@ -1,6 +1,6 @@ import QtQuick import QtQuick.Controls -import "root:bar" +import "../bar" BarWidgetInner { id: root @@ -49,7 +49,7 @@ BarWidgetInner { } } - property var tooltip: TooltipItem { + property TooltipItem tooltip: TooltipItem { tooltip: bar.tooltip owner: root show: button.containsMouse @@ -65,7 +65,7 @@ BarWidgetInner { } } - property var rightclickMenu: TooltipItem { + property TooltipItem rightclickMenu: TooltipItem { tooltip: bar.tooltip owner: root isMenu: true diff --git a/modules/user/modules/quickshell/shell/shell.qml b/modules/user/modules/quickshell/shell/shell.qml index 19477cf..c2f5f4b 100644 --- a/modules/user/modules/quickshell/shell/shell.qml +++ b/modules/user/modules/quickshell/shell/shell.qml @@ -1,4 +1,5 @@ //@ pragma ShellId shell + import Quickshell import Quickshell.Io import Quickshell.Wayland @@ -14,8 +15,6 @@ import "background" ShellRoot { Component.onCompleted: [Lock.Controller, Launcher.Controller.init()] - ReloadPopup {} - Process { command: ["mkdir", "-p", ShellGlobals.rtpath] running: true