Compare commits

..

No commits in common. "3c91610d5a377ef3be88bd8e470425807ba11115" and "a277ffae67efccc34237db7f42fc0f3c535a71fe" have entirely different histories.

14 changed files with 164 additions and 89 deletions

View file

@ -5,12 +5,7 @@
kdePackages.breeze-icons kdePackages.breeze-icons
qt6.qtsvg # needed to load breeze icons qt6.qtsvg # needed to load breeze icons
# for testing kde things
kdePackages.qqc2-desktop-style kdePackages.qqc2-desktop-style
kdePackages.kirigami
kdePackages.kirigami.unwrapped
kdePackages.kirigami-addons
kdePackages.sonnet
]; ];
qt = { qt = {
@ -25,19 +20,17 @@
nixpkgs.overlays = [(final: prev: { nixpkgs.overlays = [(final: prev: {
qt6Packages = prev.qt6Packages.overrideScope (qfinal: qprev: { qt6Packages = prev.qt6Packages.overrideScope (qfinal: qprev: {
qt6ct = qprev.qt6ct.overrideAttrs (ctprev: { qt6ct = qprev.qt6ct.overrideAttrs (ctprev: {
src = pkgs.fetchFromGitLab { nativeBuildInputs = (builtins.filter (p: p != qfinal.qmake) ctprev.nativeBuildInputs) ++ [ final.cmake ];
domain = "www.opencode.net";
owner = "ilya-fedin";
repo = "qt6ct";
rev = "6fa66ca94f1f8fa5119ad6669d5e3547f4077c1c"; # 'kde' branch
sha256 = "z84z4XhAVqIJpF3m6H9FwFiDR7Nk+AY2tLpsibNEzPY=";
};
buildInputs = ctprev.buildInputs ++ (with final.kdePackages; [ buildInputs = ctprev.buildInputs ++ (with final.kdePackages; [
kconfig kconfig
kcolorscheme kcolorscheme
kiconthemes kiconthemes
]); ]);
cmakeFlags = [
(lib.cmakeFeature "PLUGINDIR" "lib/qt-6/plugins")
];
}); });
}); });
})]; })];

View file

@ -20,10 +20,8 @@
dejavu_fonts dejavu_fonts
nerdfonts nerdfonts
noto-fonts noto-fonts
noto-fonts-cjk-sans noto-fonts-cjk
]) ++ (with pkgs; [ ]) ++ (with pkgs; [
material-symbols
font-awesome
corefonts corefonts
vistafonts vistafonts
]); ]);
@ -128,7 +126,6 @@
speedcrunch speedcrunch
libreoffice-qt6 libreoffice-qt6
ripgrep ripgrep
fd
qbittorrent qbittorrent
signal-desktop signal-desktop
anki-bin anki-bin
@ -136,7 +133,6 @@
wireshark wireshark
mumble mumble
freetube freetube
jujutsu
distrobox distrobox
xdg-utils xdg-utils
@ -146,9 +142,6 @@
unrar # used by ark unrar # used by ark
libnotify # test with it a lot libnotify # test with it a lot
kdePackages.merkuro
kdePackages.akonadi
]; ];
programs = { programs = {

View file

@ -194,10 +194,9 @@ in {
''; '';
}; };
in { in {
base = mkProfile { base = {
id = 5; id = 10;
name = "base"; name = "base";
settings = {};
}; };
schizo = mkProfile { schizo = mkProfile {

View file

@ -54,13 +54,13 @@ See the above repository for updates as well as full license text. */
direction: rtl; direction: rtl;
} }
#sidebar-box #sidebar { #sidebar-box > #sidebar {
transition: min-width 115ms linear !important; transition: min-width 115ms linear !important;
min-width: var(--uc-sidebar-width) !important; min-width: var(--uc-sidebar-width) !important;
will-change: min-width; will-change: min-width;
} }
#sidebar-box:hover #sidebar { #sidebar-box:hover > #sidebar {
min-width: var(--uc-sidebar-hover-width) !important; min-width: var(--uc-sidebar-hover-width) !important;
transition: min-width 100ms linear var(--uc-autohide-sidebar-delay), box-shadow 500ms linear !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); box-shadow: 0 0 4px rgba(10,10,10, .5);
@ -90,11 +90,10 @@ See the above repository for updates as well as full license text. */
margin-inline: 0px !important; margin-inline: 0px !important;
border-left-style: solid !important; border-left-style: solid !important;
} }
#sidebar-splitter { #sidebar-splitter{
display: none; width: 0px !important;
/*width: 0px !important;
background-color: #f00 !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 /* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_bookmarks_toolbar.css made available under Mozilla Public License v. 2.0

View file

@ -5,6 +5,10 @@
url = "https://patch-diff.githubusercontent.com/raw/keepassxreboot/keepassxc/pull/11692.patch"; url = "https://patch-diff.githubusercontent.com/raw/keepassxreboot/keepassxc/pull/11692.patch";
sha256 = "S/Oy4dAxER2NkoJQYAdsz5rphn5SW2TH50F//5Xmf+Y="; sha256 = "S/Oy4dAxER2NkoJQYAdsz5rphn5SW2TH50F//5Xmf+Y=";
}) })
(pkgs.fetchpatch {
url = "https://patch-diff.githubusercontent.com/raw/keepassxreboot/keepassxc/pull/11693.patch";
sha256 = "VveqhLfcw2WyYsD+3jTaqKp4d1EYX8pPL++hyGpsz1w=";
})
]; ];
}); });
in { in {

View file

@ -0,0 +1,126 @@
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()
}
}
}
}

View file

@ -7,10 +7,11 @@ import "systray" as SysTray
import "audio" as Audio import "audio" as Audio
import "mpris" as Mpris import "mpris" as Mpris
import "power" as Power import "power" as Power
import "../notifications" as Notifs import "root:notifications" as Notifs
BarContainment { BarContainment {
id: root id: root
property bool isSoleBar: Quickshell.screens.length == 1; property bool isSoleBar: Quickshell.screens.length == 1;
ColumnLayout { ColumnLayout {

View file

@ -1,6 +1,5 @@
import QtQuick import QtQuick
import Quickshell import Quickshell
import Quickshell.Hyprland
import Quickshell.Wayland import Quickshell.Wayland
import ".." import ".."
import "../lock" as Lock import "../lock" as Lock
@ -16,58 +15,41 @@ PanelWindow {
bottom: true bottom: true
} }
property real baseWidth: 55 width: 70
property real leftMargin: root.compactState * 10 exclusiveZone: width - margins.left
width: baseWidth + 15
exclusiveZone: baseWidth + (isFullscreenWorkspace ? 0 : 15) - margins.left
mask: Region {
height: root.height
width: root.exclusiveZone
}
color: "transparent" color: "transparent"
WlrLayershell.namespace: "shell:bar" WlrLayershell.namespace: "shell:bar"
readonly property Tooltip tooltip: tooltip; readonly property var tooltip: tooltip;
Tooltip { Tooltip {
id: tooltip id: tooltip
bar: root bar: root
} }
readonly property real tooltipXOffset: root.baseWidth + root.leftMargin + 5; readonly property real tooltipXOffset: root.width + 2;
function boundedY(targetY: real, height: real): real { function boundedY(targetY: real, height: real): real {
return Math.max(barRect.anchors.topMargin + height, Math.min(barRect.height + barRect.anchors.topMargin - height, targetY)) 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 { Rectangle {
id: barRect id: barRect
x: root.leftMargin - Lock.Controller.lockSlide * (barRect.width + root.leftMargin) x: 10 - Lock.Controller.lockSlide * (barRect.width + 10)
width: parent.width - 15 width: parent.width - 15
anchors { anchors {
top: parent.top top: parent.top
bottom: parent.bottom bottom: parent.bottom
margins: root.compactState * 10 margins: 10
} }
color: ShellGlobals.colors.bar color: ShellGlobals.colors.bar
radius: root.compactState * 5 radius: 5
border.color: ShellGlobals.colors.barOutline border.color: ShellGlobals.colors.barOutline
border.width: root.compactState border.width: 1
Item { Item {
id: containment id: containment

View file

@ -61,7 +61,7 @@ FullwidthMouseArea {
property int wsIndex: root.wsBaseIndex + index; property int wsIndex: root.wsBaseIndex + index;
property HyprlandWorkspace workspace: null; property HyprlandWorkspace workspace: null;
property bool exists: workspace != null; property bool exists: workspace != null;
property bool active: workspace?.active ?? false property bool active: (root.monitor?.activeWorkspace ?? false) && root.monitor.activeWorkspace == workspace;
onActiveChanged: { onActiveChanged: {
if (active) root.currentIndex = wsIndex; if (active) root.currentIndex = wsIndex;

View file

@ -16,6 +16,7 @@ BarWidgetInner {
} }
id: column; id: column;
implicitHeight: childrenRect.height;
spacing: 5; spacing: 5;
Loader { Loader {

View file

@ -9,9 +9,6 @@ T.Slider {
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitHandleHeight + topPadding + bottomPadding) implicitHandleHeight + topPadding + bottomPadding)
property color barColor: "#80ceffff"
property color grooveColor: "#30ceffff"
background: Rectangle { background: Rectangle {
x: control.leftPadding x: control.leftPadding
y: control.topPadding + control.availableHeight / 2 - height / 2 y: control.topPadding + control.availableHeight / 2 - height / 2
@ -21,7 +18,7 @@ T.Slider {
height: implicitHeight height: implicitHeight
radius: 5 radius: 5
color: control.grooveColor color: "#30ceffff"
border.width: 0 border.width: 0
Rectangle { Rectangle {
@ -32,7 +29,7 @@ T.Slider {
width: control.handle.x + (control.handle.width / 2) - parent.x width: control.handle.x + (control.handle.width / 2) - parent.x
radius: parent.radius radius: parent.radius
color: control.barColor color: "#80ceffff"
} }
} }

View file

@ -29,15 +29,8 @@ FullwidthMouseArea {
property alias widgetOpen: persist.widgetOpen; property alias widgetOpen: persist.widgetOpen;
acceptedButtons: Qt.RightButton | Qt.ForwardButton | Qt.BackButton acceptedButtons: Qt.RightButton
onPressed: event => { onPressed: widgetOpen = !widgetOpen
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 => { onWheel: event => {
event.accepted = true; event.accepted = true;
@ -671,20 +664,6 @@ 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 Layout.fillWidth: true
enabled: player.canSeek enabled: player.canSeek
from: 0 from: 0

View file

@ -1,6 +1,6 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import "../bar" import "root:bar"
BarWidgetInner { BarWidgetInner {
id: root id: root
@ -49,7 +49,7 @@ BarWidgetInner {
} }
} }
property TooltipItem tooltip: TooltipItem { property var tooltip: TooltipItem {
tooltip: bar.tooltip tooltip: bar.tooltip
owner: root owner: root
show: button.containsMouse show: button.containsMouse
@ -65,7 +65,7 @@ BarWidgetInner {
} }
} }
property TooltipItem rightclickMenu: TooltipItem { property var rightclickMenu: TooltipItem {
tooltip: bar.tooltip tooltip: bar.tooltip
owner: root owner: root
isMenu: true isMenu: true

View file

@ -1,5 +1,4 @@
//@ pragma ShellId shell //@ pragma ShellId shell
import Quickshell import Quickshell
import Quickshell.Io import Quickshell.Io
import Quickshell.Wayland import Quickshell.Wayland
@ -15,6 +14,8 @@ import "background"
ShellRoot { ShellRoot {
Component.onCompleted: [Lock.Controller, Launcher.Controller.init()] Component.onCompleted: [Lock.Controller, Launcher.Controller.init()]
ReloadPopup {}
Process { Process {
command: ["mkdir", "-p", ShellGlobals.rtpath] command: ["mkdir", "-p", ShellGlobals.rtpath]
running: true running: true