Compare commits

...

7 Commits

10 changed files with 5543 additions and 41545 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
wallpaper

View File

@@ -13,6 +13,7 @@ PanelWindow {
left: true
bottom: true
}
WlrLayershell.namespace: "mcsr"
implicitHeight: 540
implicitWidth: 540
color: "transparent"
@@ -42,6 +43,8 @@ PanelWindow {
radius: 12
Item {
anchors.fill: parent
layer.enabled: true
layer.smooth: false
ScreencopyView {
width: Quickshell.screens[0].width
height: Quickshell.screens[0].height

44
Corners.qml Normal file
View File

@@ -0,0 +1,44 @@
import QtQuick
import Quickshell.Hyprland
import './Widgets' as Widgets
Item {
id: corners
readonly property real radius: 12
Widgets.Corner {
anchors {
top: true
left: true
}
radius: corners.radius
angle: 0
fillColor: "black"
}
Widgets.Corner {
anchors {
bottom: true
left: true
}
radius: corners.radius
angle: 90
fillColor: "black"
}
Widgets.Corner {
anchors {
bottom: true
right: true
}
radius: corners.radius
angle: 180
fillColor: "black"
}
Widgets.Corner {
anchors {
top: true
right: true
}
radius: corners.radius
angle: 270
fillColor: "black"
}
}

View File

@@ -11,6 +11,10 @@ WlSessionLock {
id: lock
locked: false
required property bool animate
function instalock() {lock.animate = false; lock.locked = true}
function open() {lock.animate = true; lock.locked = true}
function close() {lock.locked = false}
property var clock: SystemClock {}
WlSessionLockSurface {
id: surface
color: "transparent"
@@ -32,19 +36,34 @@ WlSessionLock {
color: "#222222"
TextInput {
id: input
x: (parent.width - this.width)/2
Behavior on x { NumberAnimation {
duration: 300
easing.type: Easing.OutQuint
}}
anchors.verticalCenter: parent.verticalCenter
anchors.fill: parent
focus: true
color: "white"
font.pixelSize: 20
echoMode: TextInput.Password
echoMode: TextInput.NoEcho
cursorDelegate: Item {}
Keys.onReturnPressed: pam.start()
}
Row {
anchors.verticalCenter: parent.verticalCenter
x: (parent.width - this.width)/2
spacing: 4
Repeater {
model: input.text.length
Rectangle {
width: 8
height: width
radius: width/2
color: "white"
}
}
Behavior on x {
NumberAnimation {
duration: 300
easing.type: Easing.OutQuint
}
}
}
Text {
anchors {
horizontalCenter: parent.horizontalCenter
@@ -60,7 +79,7 @@ WlSessionLock {
ClippingRectangle {
anchors.fill: parent
color: "white"
opacity: lock.animate
opacity: capture.ready
radius: 0
RectangularShadow {
anchors.fill: parent

View File

@@ -13,9 +13,9 @@ Item {
if (input.text.length === 0 || input.text === ":") {
return []
}
const searchEmojis = (input.text[0] === ':')
const searchEmojis = (input.text[0] === ':' || input.text[0] === ';')
const items = searchEmojis
? Emojis.emojis.emojis
? Emojis.emojis
: Array.from(DesktopEntries.applications.values)
for (let item of items) {
item.searchPos = item.name.toLowerCase().search(input.text.slice(searchEmojis))

137
Thin.qml Normal file
View File

@@ -0,0 +1,137 @@
import Quickshell
import Quickshell.Wayland
import Quickshell.Widgets
import Quickshell.Io
import QtQuick
import QtQuick.Effects
Item {
id: thin
property bool open: false
property real pos: 0
PropertyAnimation on pos {
id: entry
running: false
to: 1
duration: 400
easing.type: Easing.OutQuint
}
PropertyAnimation on pos {
id: exit
running: false
to: 0
duration: 350
easing.type: Easing.OutQuint
onFinished: thin.open = false
}
IpcHandler {
target: "thin"
function open() {
thin.open = true
exit.stop()
entry.start()
}
function close() {
entry.stop()
exit.start()
}
}
PanelWindow {
visible: thin.open
anchors {
right: true
bottom: true
}
implicitHeight: 430
implicitWidth: 1080
color: "transparent"
WlrLayershell.layer: WlrLayer.Overlay
RectangularShadow {
anchors.fill: pie_wrapper
radius: pie_wrapper.radius
blur: 10
spread: 2
}
ClippingRectangle {
id: pie_wrapper
anchors {
left: parent.left
top: parent.top
margins: 12
leftMargin: 1080 * (1 - thin.pos) + 12
}
width: 210
height: 210
color: "white"
radius: 12
Item {
anchors.fill: parent
layer.enabled: true
layer.smooth: false
ScreencopyView {
width: Quickshell.screens[0].width
height: Quickshell.screens[0].height
live: true
captureSource: Quickshell.screens[0]
x: -1386
y: -1208
}
transform: Scale {
origin: {x: 0; y: 0}
xScale: 6
yScale: xScale
}
}
}
}
PanelWindow {
visible: thin.open
anchors {
top: true
left: true
}
implicitWidth: 1080
implicitHeight: 120
color: "transparent"
WlrLayershell.layer: WlrLayer.Overlay
RectangularShadow {
anchors.fill: e_wrapper
radius: e_wrapper.radius
blur: 10
spread: 2
}
ClippingRectangle {
id: e_wrapper
anchors {
right: parent.right
bottom: parent.bottom
margins: 12
rightMargin: 1080 * (1 - thin.pos) + 12
}
width: 240
height: 48
color: "white"
radius: 12
Item {
anchors.fill: parent
ScreencopyView {
layer.enabled: true
layer.smooth: false
width: Quickshell.screens[0].width
height: Quickshell.screens[0].height
live: true
captureSource: Quickshell.screens[0]
x: -1080
y: -47
}
transform: Scale {
origin: {x: 0; y: 0}
xScale: 5
yScale: xScale
}
}
}
}
}

View File

@@ -1,4 +1,5 @@
import Quickshell
import Quickshell.Wayland
import Quickshell.Widgets
import Quickshell.Io
import QtQuick
@@ -14,15 +15,50 @@ Variants {
bottom: true
left: true
}
WlrLayershell.namespace: "monowall"
exclusionMode: ExclusionMode.Ignore
aboveWindows: false
property var modelData
screen: modelData
color: "#111"
color: "#000"
ClippingRectangle {
anchors.fill: parent
Image {
source: Quickshell.shellPath("wallpaper")
anchors.fill: parent
fillMode: Image.PreserveAspectCrop
}
radius: 40
PropertyAnimation on radius {
id: radiusAnimation
running: false
to: 16
duration: 1000
}
transform: [
Translate {
y: 160
PropertyAnimation on y {
duration: 500
to: 0
easing.type: Easing.OutCubic
onFinished: scaleAnimation.start()
}
},
Scale {
origin { x: width/2; y: height/2 }
xScale: 0.8
yScale: xScale
PropertyAnimation on xScale {
id: scaleAnimation
running: false
duration: 1000
to: 1
easing.type: Easing.InOutCubic
onStarted: radiusAnimation.start()
}
}
]
}
}
}

52
Widgets/Corner.qml Normal file
View File

@@ -0,0 +1,52 @@
import QtQuick
import QtQuick.Shapes
import Quickshell
import Quickshell.Hyprland
import Quickshell.Wayland
PanelWindow {
id: corner
required property real radius
required property int angle
required property color fillColor
WlrLayershell.layer: WlrLayer.Overlay
color: "transparent"
implicitWidth: corner.radius
implicitHeight: corner.radius
function anglePointX(angle) {
return (corner.radius * Math.sqrt(2) * 1/2 * Math.sin(angle)) + corner.radius/2
}
function anglePointY(angle) {
return (corner.radius * Math.sqrt(2) * 1/2 * Math.cos(angle)) + corner.radius/2
}
Shape {
anchors.fill: parent
preferredRendererType: Shape.CurveRenderer
ShapePath {
fillColor: corner.fillColor
strokeColor: "transparent"
startX: anglePointX(Math.PI * 5/4 + corner.angle * Math.PI/180)
startY: anglePointY(Math.PI * 5/4 + corner.angle * Math.PI/180)
PathLine {
x: anglePointX(Math.PI * 3/4 + corner.angle * Math.PI/180)
y: anglePointY(Math.PI * 3/4 + corner.angle * Math.PI/180)
}
PathAngleArc {
radiusX: corner.radius
radiusY: corner.radius
startAngle: 270 - corner.angle
sweepAngle: -90
centerX: anglePointX(Math.PI * 1/4 + corner.angle * Math.PI/180)
centerY: anglePointY(Math.PI * 1/4 + corner.angle * Math.PI/180)
}
PathLine {
x: anglePointX(Math.PI * 5/4 + corner.angle * Math.PI/180)
y: anglePointY(Math.PI * 5/4 + corner.angle * Math.PI/180)
}
}
}
}

46749
emojis.mjs

File diff suppressed because it is too large Load Diff

View File

@@ -9,12 +9,16 @@ ShellRoot {
id: notifServer
onNotification: (notif) => notif.tracked = true
}
// Shell.Wall {}
Shell.Wall {}
Shell.TopBar {id: bar}
Shell.Boateye {}
Shell.Lock {
id: lock
animate: true
Shell.Thin {}
Shell.Lock {id: lock}
IpcHandler {
target: "lock"
function instalock() {lock.instalock()}
function open() {lock.open()}
function close() {lock.close()}
}
PanelWindow {
anchors {
@@ -26,10 +30,5 @@ ShellRoot {
implicitWidth: 800
HoverHandler {onHoveredChanged: {if (hovered) bar.open() }}
}
IpcHandler {
target: "lock"
function instalock() {lock.animate = false; lock.locked = true}
function open() {lock.animate = true; lock.locked = true}
function close() {lock.locked = false}
}
Shell.Corners { }
}