put shell in subdir, and add nix package

This commit is contained in:
kossLAN 2025-06-17 12:50:08 -04:00
parent c45c04e9ac
commit f41ea4b1cb
Signed by: kossLAN
SSH key fingerprint: SHA256:bdV0x+wdQHGJ6LgmstH3KV8OpWY+OOFmJcPcB0wQPV8
100 changed files with 57 additions and 126 deletions

View file

@ -0,0 +1,309 @@
pragma Singleton
pragma ComponentBehavior: Bound
import Quickshell
import Quickshell.Io
import Quickshell.Widgets
import QtQuick
import QtQuick.Layouts
import Qt5Compat.GraphicalEffects
import Qt.labs.folderlistmodel
import "../"
Singleton {
PersistentProperties {
id: persist
property bool windowOpen: false
}
IpcHandler {
target: "settings"
function open(): void {
persist.windowOpen = true;
}
function close(): void {
persist.windowOpen = false;
}
function toggle(): void {
persist.windowOpen = !persist.windowOpen;
}
}
LazyLoader {
id: loader
activeAsync: persist.windowOpen
FloatingWindow {
color: ShellSettings.colors["surface"]
implicitWidth: 840
implicitHeight: 845
// onWidthChanged: {
// console.log("height: " + height);
// console.log("width: " + width);
// }
maximumSize {
width: 840
height: 845
}
minimumSize {
width: 840
height: 845
}
onVisibleChanged: {
if (!visible) {
persist.windowOpen = false;
}
}
ColumnLayout {
id: container
spacing: 5
anchors {
fill: parent
margins: 10
}
ClippingRectangle {
radius: 20
Layout.preferredWidth: 464
Layout.preferredHeight: 261
Layout.alignment: Qt.AlignCenter
Layout.margins: 20
Image {
id: wallpaperImage
source: ShellSettings.settings.wallpaperUrl
fillMode: Image.PreserveAspectFit
anchors {
fill: parent
}
}
}
Rectangle {
color: ShellSettings.colors["surface_container"]
radius: 20
Layout.fillWidth: true
Layout.fillHeight: true
ColumnLayout {
anchors.fill: parent
ListView {
id: horizontalList
orientation: ListView.Horizontal
model: ["scheme-content", "scheme-expressive", "scheme-fidelity", "scheme-fruit-salad", "scheme-monochrome", "scheme-neutral", "scheme-rainbow", "scheme-tonal-spot", "scheme-vibrant"]
spacing: 10
clip: true
Layout.fillWidth: true
Layout.preferredHeight: 100
Layout.margins: 10
delegate: Rectangle {
id: paletteCell
required property string modelData
property string matugenConf: Qt.resolvedUrl("root:wallpaper/matugen.toml").toString().replace("file://", "")
property var colors: {
"primary": "white",
"secondary": "gray",
"tertiary": "lightgrey",
"container": "black"
}
width: 100
height: 100
color: paletteSelect.containsMouse ? ShellSettings.colors["surface_container_highest"] : ShellSettings.colors["surface_container_high"]
radius: 20
MouseArea {
id: paletteSelect
hoverEnabled: true
anchors.fill: parent
onPressed: {
ShellSettings.settings.colorScheme = paletteCell.modelData;
}
}
Item {
id: paletteContainer
width: 80
height: 80
anchors.centerIn: parent
layer.enabled: true
layer.effect: OpacityMask {
maskSource: Rectangle {
width: paletteContainer.width
height: paletteContainer.height
radius: 20
}
}
Rectangle {
id: topLeft
color: paletteCell.colors["primary"] ?? "white"
width: parent.width / 2
height: parent.height / 2
}
Rectangle {
id: topRight
color: paletteCell.colors["secondary"] ?? "gray"
width: parent.width / 2
height: parent.height / 2
anchors.left: topLeft.right
}
Rectangle {
id: bottomLeft
color: paletteCell.colors["tertiary"] ?? "lightgrey"
width: parent.width / 2
height: parent.height / 2
anchors.top: topLeft.bottom
}
Rectangle {
id: bottomRight
color: paletteCell.colors["surface"] ?? "black"
width: parent.width / 2
height: parent.height / 2
anchors {
top: topRight.bottom
left: bottomLeft.right
}
}
}
Connections {
target: ShellSettings.settings
function onWallpaperUrlChanged() {
matugen.running = true;
}
}
Process {
id: matugen
running: true
command: ["matugen", "image", ShellSettings.settings.wallpaperUrl.replace("file://", ""), "--type", paletteCell.modelData, "--json", "hex", "--config", paletteCell.matugenConf, "--dry-run"]
stdout: SplitParser {
onRead: data => {
try {
paletteCell.colors = JSON.parse(data)['colors']['dark'];
} catch (e) {
console.error("Error parsing JSON:", e);
}
}
}
stderr: SplitParser {
onRead: data => console.log(`line read: ${data}`)
}
}
}
}
Rectangle {
color: ShellSettings.colors["surface_container_high"]
Layout.fillWidth: true
Layout.preferredHeight: 1
}
GridView {
id: wallpaperGrid
cellWidth: 200
cellHeight: 200
clip: true
Layout.fillWidth: true
Layout.fillHeight: true
Layout.margins: 10
model: FolderListModel {
id: folderModel
folder: Qt.resolvedUrl("root:resources/wallpapers")
nameFilters: ["*.jpg", "*.png"]
}
delegate: Rectangle {
id: cell
required property var modelData
width: 200
height: 200
color: "transparent"
Item {
anchors.fill: parent
Rectangle {
id: border
visible: mouseArea.containsMouse
color: "transparent"
radius: 20
border {
color: ShellSettings.colors["primary"]
width: 2
}
anchors {
fill: parent
margins: 1
}
}
Image {
id: image
source: cell.modelData.fileUrl
fillMode: Image.PreserveAspectCrop
asynchronous: true
sourceSize {
height: image.height
width: image.width
}
anchors {
fill: parent
margins: 5
}
layer.enabled: true
layer.effect: OpacityMask {
maskSource: Rectangle {
width: cell.width
height: cell.height
radius: 20
}
}
}
}
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onClicked: {
ShellSettings.settings.wallpaperUrl = cell.modelData.fileUrl;
}
}
}
}
}
}
}
}
}
function init() {
}
}