Compare commits

...

38 Commits

Author SHA1 Message Date
b2ec3d9cd0 update flake 2026-04-12 21:20:54 -05:00
35fbfa3d95 update flake 2026-04-12 20:58:43 -05:00
c7fe5778db update flake 2026-04-12 20:57:10 -05:00
c51c9752d1 update flake 2026-04-12 20:50:56 -05:00
067ebcae93 update flake 2026-04-12 20:49:15 -05:00
fac3994444 update flake 2026-04-12 20:39:33 -05:00
b396a302d3 update flake 2026-04-11 20:03:09 -05:00
7179e6441f update flake 2026-04-11 20:01:47 -05:00
6902564ac1 renamed package 2026-04-11 07:27:12 -05:00
dbc8351e82 update flake 2026-04-11 06:55:13 -05:00
3e14569edd test 2026-04-10 16:56:54 -05:00
062b6d63bd test 2026-04-10 16:53:41 -05:00
983f0f24de test 2026-04-10 16:48:49 -05:00
2f00ce43be test 2026-04-10 16:45:15 -05:00
cf4da27549 test 2026-04-10 16:41:31 -05:00
2fb2731383 test 2026-04-10 16:30:47 -05:00
37c05f2e36 test 2026-04-10 16:26:25 -05:00
58adc58002 test 2026-04-10 16:09:16 -05:00
b97e9dc547 test 2026-04-10 13:12:00 -05:00
bd134cad26 test 2026-04-10 12:04:06 -05:00
67c56deae2 test 2026-04-10 11:48:20 -05:00
dc14e418f3 test 2026-04-10 11:42:46 -05:00
4584546301 test 2026-04-10 10:28:03 -05:00
3602272e4d test 2026-04-10 00:59:41 -05:00
e153502401 test 2026-04-09 19:01:07 -05:00
1f42ca1eae test 2026-04-09 18:44:20 -05:00
e7de1ccb63 test 2026-04-09 16:59:12 -05:00
18403d3ddf test 2026-04-09 14:31:19 -05:00
be1318c3cb works 2026-04-09 11:19:36 -05:00
f4b032e96f works 2026-04-09 11:16:48 -05:00
76a5bf5917 test 2026-04-01 07:43:07 -05:00
bd4e2c4d1d test 2026-03-31 20:18:36 -05:00
2d42f93952 usable 2026-03-31 20:12:09 -05:00
d97862289b usable 2026-03-31 18:28:27 -05:00
888a607ff7 usable 2026-03-30 16:27:20 -05:00
7a15a983af usable 2026-03-29 13:16:40 -05:00
adcd560180 lock works 2026-03-21 16:19:23 -05:00
27db5bd480 lock works 2026-03-21 16:17:49 -05:00
37 changed files with 1491 additions and 499 deletions

View File

@@ -1,4 +1,4 @@
{ ... }: {
{ self, inputs, ... }: {
perSystem = { self', pkgs, system, ... }: {
@@ -23,6 +23,159 @@
mkdir -p $out/share
cp -r $src/* $out/share
'';
};
aurora-greeter-hypr-conf = pkgs.writeText "greeter-conf" ''
exec-once=${self'.packages.aurora-greeter-init}/bin/aurora-greeter-init
misc {
disable_hyprland_logo = false
disable_splash_rendering = true
force_default_wallpaper = 0
}
ecosystem {
no_update_news = true
no_donation_nag = true
}
'';
aurora-change-colors = (pkgs.writeShellScriptBin "aurora-change-colors" ''
img=''$(realpath "''$1")
alpha=''${2:-80}
if [[ ''$alpha -lt 0 ]]; then
alpha=0
elif [[ ''$alpha -gt 100 ]]; then
alpha=100
fi
if [[ -f ~/.config/wal/colorschemes/dark/''$(basename "''$img")-''$alpha.json ]]; then
${pkgs.pywal16}/bin/wal -n -f "''$(basename "''$img")-''$alpha"
else
${pkgs.pywal16}/bin/wal -n -i "''$img" -a "''$alpha" --cols16 -p "''$(basename "''$img")-''$alpha"
fi
'');
aurora-set-wallpaper = (pkgs.writeShellScriptBin "aurora-set-wallpaper" ''
if [[ ! -d /tmp/aurora/wallpaper ]]; then
mkdir -p /tmp/aurora/wallpaper
fi
src=''$(realpath "''${1:-$(find /tmp/aurora/wallpaper/*)}")
n=''$(basename "''$src")
ext="''${n''\#''\#*.}"
out=''${3:-/dev/null}
if [[ ! -z $1 ]]; then
rm -rf /tmp/aurora/wallpaper/*
cp ''$src /tmp/aurora/wallpaper/wallpaper.$ext
chmod 666 /tmp/aurora/wallpaper/wallpaper.$ext
fi
img="/tmp/aurora/wallpaper/wallpaper.$ext"
if [[ ''$ext == "gif" || ''$ext == "mp4" ]]; then
yes | ${pkgs.ffmpeg}/bin/ffmpeg -i "''$img" -vframes 1 /tmp/aurora/tmp.jpg >> ''$out
pidof mpvpaper >> $out && pkill mpvpaper
${pkgs.awww}/bin/awww img /tmp/aurora/tmp.jpg -t wipe >> ''$out
sleep 0.6
hyprctl dispatch exec "${pkgs.mpvpaper}/bin/mpvpaper ALL ''$img -o loop" >> ''$out
else
yes | ${pkgs.ffmpeg}/bin/ffmpeg -i "''$img" /tmp/aurora/tmp.jpg >> ''$out
pidof mpvpaper >> $out && pkill mpvpaper
hyprctl dispatch exec "${pkgs.awww}/bin/awww img ''$img -t wipe" >> ''$out
fi
${self'.packages.aurora-change-colors}/bin/aurora-change-colors "''$src" "''$2" >> ''$out
'');
aurora-greeter-init = (pkgs.writeShellScriptBin "aurora-greeter-init" ''
if [[ ! -d /tmp/aurora ]]; then
mkdir /tmp/aurora
fi
hyprctl --batch "\
dispatch exec ${pkgs.awww}/bin/awww-daemon ;\
dispatch exec ${self'.packages.aurora-set-wallpaper}/bin/aurora-set-wallpaper;\
setcursor Bibata-Modern-Classic 16"
sleep 3
hyprctl reload
${self'.packages.aurora-greeter}/bin/aurora-greeter
rm ~/.config/wal/colorschemes/dark/wallpaper*
hyprctl dispatch exit
'');
aurora-init = (pkgs.writeShellScriptBin "aurora-init" ''
if [[ ! -d /tmp/aurora ]]; then
mkdir /tmp/aurora
fi
hyprctl --batch "\
dispatch exec ${pkgs.awww}/bin/awww-daemon ;\
dispatch exec ${self'.packages.aurora-set-wallpaper}/bin/aurora-set-wallpaper;\
setcursor Bibata-Modern-Classic 16"
sleep 3
hyprctl reload
'');
};
};
flake.nixosModules.default = { config, lib, pkgs, ... }: {
options.services.aurora-greeter = with lib; {
enable = mkEnableOption "aurora-greeter";
};
config = let
cfg = config.services.aurora-greeter;
system = pkgs.stdenv.hostPlatform.system;
pkgs-a = import inputs.nixpkgs { inherit system; };
in {
users.users.aurora = {
createHome = true;
home = "/tmp/aurora/home";
packages = with pkgs; [
self.packages.${system}.aurora-greeter
self.packages.${system}.aurora-greeter-init
self.packages.${system}.aurora-set-wallpaper
pkgs-a.awww
mpvpaper
ffmpeg
];
isNormalUser = true;
group = "aurora";
};
users.groups.aurora = {};
services.greetd = {
enable = cfg.enable;
settings = {
default_session = {
command = "start-hyprland -- -c ${self.packages.${system}.aurora-greeter-hypr-conf}";
user = "aurora";
};
};
};
};
};

View File

@@ -8,34 +8,79 @@ import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Hyprland
import Quickshell.Services.Greetd
import Quickshell.Services.Pam
ClippingWrapperRectangle {
anchors.fill: parent
radius: 10
color: Pywal.special.background
//color: "black"
color: Settings.special.background
ColumnLayout {
anchors.fill: parent
Text {
id: error
text: ""
//color: "red"
color: Settings.colors.color13
visible: false
}
Text {
text: "User"
//color: "white"
color: Settings.special.foreground
}
TextInput {
id: username
text: "guest"
//color: "white"
color: Settings.special.foreground
}
Text {
text: "Password"
//color: "white"
color: Settings.special.foreground
}
TextInput {
id: password
text: "test"
echoMode: TextInput.Password
//color: "white"
color: Settings.special.foreground
}
Button {
text: "Login"
onClicked: {
if(Greetd.available) {
Greetd.authMessage.connect((m, e, rr, er) => {
console.log(m)
if(e) {
if(er) {
error.visible = true
error.text = m
}
} else if(rr) {
console.log("send password")
Greetd.respond(password.text)
}
})
Greetd.authFailure.connect((m) => {
error.visible = true
error.text = m
})
Greetd.readyToLaunch.connect(() => {
console.log("readyToLaunch")
Greetd.launch([ "start-hyprland" ])
})
console.log("createSession")
Greetd.createSession(username.text)
}
}
}
}
}

View File

@@ -1,28 +1,44 @@
pragma Singleton
import Quickshell
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Shapes
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Hyprland
Singleton {
id: root
property string wallpaper: json.wallpaper
property string wallpaper: c_json.wallpaper
property string alpha: json.alpha
property string alpha: Math.round(parseInt(c_json.alpha, 10) * 0xFF / 100).toString(16)
property JsonObject special: json.special
property JsonObject colors: json.colors
property JsonObject special: c_json.special
property JsonObject colors: c_json.colors
function argb(c) {
return c.slice(0, 1) + Settings.alpha + c.slice(1)
}
FileView {
path: "/home/nathan/.cache/wal/colors.json"
id: pywal
path: "/tmp/aurora/home/.cache/wal/colors.json"
watchChanges: true
onFileChanged: reload()
JsonAdapter {
id: json
property string wallpaper: "/home/nathan/Pictures/Wallpaper/bluescape.jpg"
id: c_json
property string wallpaper
property string alpha: "100"

View File

@@ -1,4 +1,9 @@
{ ... }: {
{ self, inputs, ... }: {
imports = [
inputs.home-manager.flakeModules.home-manager
];
perSystem = { self', pkgs, system, ... }: {
@@ -27,4 +32,102 @@
default = self'.packages.aurora;
};
};
flake.nixosModules.default = { config, lib, pkgs, ... }: {
config = {
services = {
upower.enable = true;
gvfs.enable = true;
power-profiles-daemon.enable = true;
};
environment.etc."pam.d/aurora-lock.conf".text = ''
auth required pam_unix.so
'';
};
};
flake.homeModules.default = { config, lib, pkgs, ... }: {
options.programs.aurora = with lib; {
enable = mkEnableOption "aurora";
package = mkPackageOption self.packages.${pkgs.stdenv.hostPlatform.system} "aurora" {
default = [ "aurora" ];
example = ''aurora.packages."x86_64-linux".hybar'';
};
systemd = {
enable = mkEnableOption "aurora systemd unit";
target = mkOption {
type = types.str;
default = "hyprland-session.target";
};
};
settings = mkOption {
type = types.attrsOf types.str;
default = {};
};
};
config = let
cfg = config.programs.aurora;
system = pkgs.stdenv.hostPlatform.system;
pkgs-a = import inputs.nixpkgs { inherit system; };
in {
home.packages = with pkgs; [
pkgs-a.awww
mpvpaper
ffmpeg
bluez
bluez-tools
wl-clipboard
brightnessctl
hyprpicker
hyprsunset
wf-recorder
self.packages.${system}.aurora-set-wallpaper
self.packages.${system}.aurora-init
];
programs.quickshell = {
enable = cfg.enable;
package = cfg.package;
activeConfig = "aurora";
configs = {
default = "${self.packages.${system}.aurora-dots}/share";
aurora = "${self.packages.${system}.aurora-dots}/share";
hybar = "${self.packages.${system}.hybar-dots}/share";
};
systemd = {
enable = cfg.systemd.enable;
target = cfg.systemd.target;
};
};
home.file.".config/aurora/settings.json".text = builtins.toJSON cfg.settings;
systemd.user.services.quickshell.Service.Environment = [ "AURORA_SETTINGS=${config.home.homeDirectory}/${config.home.file.".config/aurora/settings.json".target}" ];
};
};
}

View File

@@ -12,7 +12,22 @@ PanelWindow {
property real radius: 10
onRadiusChanged: Hyprland.dispatch("exec hyprctl keyword decoration:rounding " + radius)
property list<string> hyprcmds: [
"exec hyprctl --batch '" +
"keyword general:gaps_out 5;" +
"keyword general:border_size 1;" +
"keyword windowrule match:title lockscreen, no_blur on, fullscreen on;" +
"keyword misc:session_lock_xray true;" +
"keyword decoration:blur:enabled true;" +
"keyword decoration:active_opacity 0.96;" +
"keyword decoration:inactive_opacity 0.96;" +
"keyword decoration:rounding " + radius + ";" +
"keyword monitor " + Hyprland.monitorFor(root.screen).name + ",1920x1080@60,0x0,1" + ";" +
"keyword monitor " + Hyprland.monitorFor(root.screen).name + ",addreserved," + topEx + "," + botEx + "," + leftEx + "," + rightEx + ";" +
"'"
]
onRadiusChanged: root.hyprcmds.forEach((c) => Hyprland.dispatch(c))
anchors {
top: true
@@ -21,32 +36,25 @@ PanelWindow {
bottom: true
}
Lock {
id: lock
bg_path: "/tmp/nathan/tmp.jpg"
//locked: true
}
Timer {
id: lt
interval: 30000
running: false
repeat: false
onTriggered: lock.locked = false
IpcHandler {
target: "shell"
function reload() {
Quickshell.reload(false)
}
}
Component.onCompleted: {
Hyprland.dispatch("exec hyprctl keyword monitor " + Hyprland.monitorFor(root.screen).name + ",addreserved," + topEx + "," + botEx + "," + leftEx + "," + rightEx)
Hyprland.dispatch("exec hyprctl keyword decoration:rounding " + radius)
root.hyprcmds.forEach((c) => { Hyprland.dispatch(c) })
for(let toplv = 0; toplv < Hyprland.toplevels.values.length; toplv++) {
//console.log(Hyprland.toplevels.values[toplv].title)
}
Hyprland.rawEvent.connect((e) => {
if(e.name == "configreloaded") {
root.hyprcmds.forEach((c) => { Hyprland.dispatch(c) })
}
})
Settings.reload()
}
property int topEx: topRect.reserve
@@ -55,13 +63,13 @@ PanelWindow {
property int leftEx: leftRect.reserve
property int rightEx: rightRect.reserve
property color bg: (Settings.special.background)
id: root
exclusionMode: ExclusionMode.Ignore
WlrLayershell.layer: WlrLayer.Top
//color: Pywal.special.background
color: "transparent"
mask: Region {
@@ -81,43 +89,47 @@ PanelWindow {
Region {
item: dash.visible ? dash : leftRect
}
Region {
item: botRect
}
Region {
item: botRect.midFO.visible ? botRect.midFO : botRect
}
}
BarBottom {
id: botRect
radius: root.radius
hyprcmds: root.hyprcmds
x: leftRect.x + leftRect.width
implicitWidth: rightRect.x - (leftRect.x + leftRect.width)
color: root.bg
}
BarLeft {
id: leftRect
window: root
Button {
implicitWidth: 30
implicitHeight: 30
x: leftRect.x + leftRect.width / 2 - width / 2
y: 200
onClicked: {
lock.locked = true
lt.running = true
}
}
color: root.bg
}
BarRight {
id: rightRect
color: root.bg
}
Shape {
x: leftRect.x + leftRect.width - 1
x: leftRect.cornerX
y: topRect.cornerY
ShapePath {
strokeWidth: 4
strokeColor: Pywal.special.background
fillColor: Pywal.special.background
strokeWidth: 1
strokeColor: "transparent"
fillColor: root.bg
startX: 0; startY: 0
PathLine { relativeX: 0; relativeY: radius }
@@ -132,13 +144,15 @@ PanelWindow {
}
Shape {
x: rightRect.x + 1
x: rightRect.x
y: topRect.cornerY
ShapePath {
strokeWidth: 4
strokeColor: Pywal.special.background
fillColor: Pywal.special.background
strokeWidth: 1
strokeColor: "transparent"
fillColor: root.bg
startX: 0; startY: 0
PathLine { relativeX: 0; relativeY: radius }
@@ -154,13 +168,15 @@ PanelWindow {
}
Shape {
x: leftRect.x + leftRect.width - 1
y: botRect.y + 1
x: leftRect.cornerX
y: botRect.cornerY
ShapePath {
strokeWidth: 4
strokeColor: Pywal.special.background
fillColor: Pywal.special.background
strokeWidth: 1
strokeColor: "transparent"
fillColor: root.bg
startX: 0; startY: 0
PathLine { relativeX: 0; relativeY: -radius }
@@ -176,13 +192,14 @@ PanelWindow {
}
Shape {
x: rightRect.x + 1
y: botRect.y + 1
x: rightRect.x
y: botRect.cornerY
ShapePath {
strokeWidth: 4
strokeColor: Pywal.special.background
fillColor: Pywal.special.background
strokeWidth: 1
strokeColor: "transparent"
fillColor: root.bg
startX: 0; startY: 0
PathLine { relativeX: 0; relativeY: -radius }
@@ -203,6 +220,7 @@ PanelWindow {
//y: topRect.y + topRect.height - 1
window: root
radius: root.radius
color: root.bg
onShowDashChanged: dash.visible = showDash
}

View File

@@ -9,11 +9,49 @@ import Quickshell.Wayland
import Quickshell.Hyprland
Rectangle {
property real reserve: height
id: botRect
ColumnLayout {
id: root
property real reserve: botRectArea.height
required property real radius
required property color color
property real cornerY: y + botRectArea.y
required property list<string> hyprcmds
property Item midFO: midFO
y: parent.height - height
color: Pywal.special.background
implicitHeight: 10
implicitWidth: parent.width
spacing: -10
Launcher {
id: midFO
radius: root.radius
Layout.alignment: Qt.AlignHCenter
hyprcmds: root.hyprcmds
color: root.color
}
WrapperMouseArea {
id: botRectArea
Rectangle {
id: botRect
color: root.color
anchors.fill: parent
}
implicitHeight: 10
implicitWidth: parent.width
hoverEnabled: true
onEntered: {
Settings.launcherOpen = true
}
}
}

View File

@@ -14,6 +14,7 @@ Rectangle {
id: leftRect
property real reserve: width
property real cornerX: width
required property QsWindow window
@@ -21,10 +22,7 @@ Rectangle {
implicitWidth: 40
color: Pywal.special.background
Launcher {
LauncherButton {
id: launcher
x: parent.width / 2 - implicitWidth / 2
y: implicitWidth / 3

View File

@@ -13,7 +13,6 @@ Rectangle {
property real reserve: width
id: rightRect
x: parent.width - width
color: Pywal.special.background
implicitWidth: 10
implicitHeight: parent.height
}

View File

@@ -10,15 +10,16 @@ import Quickshell.Hyprland
ColumnLayout {
spacing: -1
spacing: 0
id: root
required property color color
WrapperMouseArea {
id: topRectArea
Rectangle {
id: topRect
color: Pywal.special.background
color: root.color
anchors.fill: parent
}
implicitHeight: 10
@@ -34,7 +35,7 @@ ColumnLayout {
required property real radius
property real cornerY: topRectArea.height - 1
property real cornerY: topRectArea.height
//property real reserve: midFO.visible ? root.height : topRectArea.height
property real reserve: topRectArea.height
@@ -45,14 +46,14 @@ ColumnLayout {
property Item midFO: midFO
VFlyout {
VFlyoutDown {
id: midFO
radius: root.radius
Layout.alignment: Qt.AlignHCenter
color: Pywal.special.background
color: root.color
visible: true

View File

@@ -11,7 +11,7 @@ ClippingWrapperRectangle {
radius: 3
color: Pywal.colors.color2
color: Settings.colors.color2
implicitWidth: 30
@@ -19,7 +19,7 @@ ClippingWrapperRectangle {
Text {
id: text
text: UPower.displayDevice.percentage * 100 + "%"
text: (UPower.onBattery ? "" : "󱐋") + Math.round(UPower.displayDevice.percentage * 100) + "%"
padding: 10
@@ -28,7 +28,7 @@ ClippingWrapperRectangle {
font.pointSize: 14
color: Pywal.special.foreground
color: Settings.special.foreground
rotation: -90
}
}

View File

@@ -20,14 +20,14 @@ ColumnLayout {
implicitHeight: 30
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Layout.margins: 5
color: Pywal.colors.color11
color: Settings.colors.color11
RowLayout {
Text {
text: 'Bluetooth'
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
Layout.margins: 5
color: Pywal.colors.color0
color: Settings.colors.color0
}
Switch {
@@ -63,7 +63,7 @@ ColumnLayout {
ClippingWrapperRectangle {
radius: 5
color: Pywal.colors.color4
color: Settings.colors.color4
implicitWidth: root.width - 3 * scroll.x
implicitHeight: 40
@@ -77,7 +77,7 @@ ColumnLayout {
Layout.margins: 5
text: rep.model[index].name
color: Pywal.colors.color0
color: Settings.colors.color0
}
Button {

View File

@@ -10,7 +10,7 @@ WrapperMouseArea {
ClippingWrapperRectangle {
id: rect
color: Pywal.colors.color12
color: Settings.colors.color12
radius: 3
anchors.fill: parent
Text {
@@ -19,6 +19,7 @@ WrapperMouseArea {
horizontalAlignment: Text.AlignHCenter
text: Qt.formatDateTime(clock.date, "dddd HH:mm:ss MM/dd/yyyy")
font.pointSize: 11
color: Settings.special.background
SystemClock {
id: clock

View File

@@ -23,12 +23,25 @@ Item {
property int selected: 0
IpcHandler {
target: "dashboard"
VFlyout {
function show() { root.visible = true; }
function hide() { root.visible = false; }
function toggle() { root.visible = !root.visible; }
}
Power {
id: power
visible: false
}
VFlyoutDown {
visible: root.visible
color: Pywal.special.background
color: Settings.special.background
radius: root.radius
item: main
@@ -36,7 +49,7 @@ Item {
WrapperMouseArea {
ClippingRectangle {
//anchors.fill: parent
color: Pywal.special.background
color: Settings.special.background
id: main
radius: root.radius
@@ -67,8 +80,8 @@ Item {
implicitWidth: 40
implicitHeight: 40
radius: root.radius
color: index == selected ? Pywal.colors.color13 : Pywal.colors.color4
//Launcher { anchors.centerIn: parent }
color: index == selected ? Settings.colors.color13 : Settings.colors.color4
//LauncherButton { anchors.centerIn: parent }
Text {
font.pointSize: 14
text: switch(index) {
@@ -94,14 +107,14 @@ Item {
return "";
}
anchors.centerIn: parent
color: Pywal.colors.color0
color: Settings.colors.color0
}
}
onEntered: child.color = Qt.binding(() => index == selected ? Pywal.colors.color13 : Pywal.colors.color12)
onExited: child.color = Qt.binding(() => index == selected ? Pywal.colors.color13 : Pywal.colors.color4)
onEntered: child.color = Qt.binding(() => index == selected ? Settings.colors.color13 : Settings.colors.color12)
onExited: child.color = Qt.binding(() => index == selected ? Settings.colors.color13 : Settings.colors.color4)
onClicked: {
selected = index
child.color = Qt.binding(() => index == selected ? Pywal.colors.color13 : Pywal.colors.color4)
child.color = Qt.binding(() => index == selected ? Settings.colors.color13 : Settings.colors.color4)
}
hoverEnabled: true
}
@@ -113,7 +126,7 @@ Item {
implicitWidth: parent.width - tabs.width - 2 * parent.spacing - rTabs.width - 2 * parent.spacing
implicitHeight: parent.height
radius: root.radius
color: Pywal.colors.color1
color: Settings.colors.color1
NotificationServer {
id: nserver
@@ -128,27 +141,29 @@ Item {
onNotification: (n) => {
n.tracked = !n.transient
n.closed.connect(() => { console.log("notif closed") })
}
}
Loader {
anchors.fill: parent
readonly property Component launcher: Launcher {}
readonly property Component launcher: LauncherButton {}
readonly property Component notifs: Notifications { server: nserver }
readonly property Component bt: Bluetooth {}
readonly property Component vol: Volume {}
readonly property Component bat: PowerMode {}
readonly property Component mon: Launcher {}
readonly property Component mon: LauncherButton {}
readonly property Component net: Launcher {}
readonly property Component mus: Launcher {}
readonly property Component net: LauncherButton {}
readonly property Component mus: LauncherButton {}
readonly property Component clk: Clock {}
readonly property Component wal: Launcher {}
readonly property Component wal: LauncherButton {}
sourceComponent: switch(selected) {
case 0:
@@ -190,8 +205,8 @@ Item {
implicitHeight: 40
radius: root.radius
property bool use: false
color: use ? Pywal.colors.color13 : Pywal.colors.color4
//Launcher { anchors.centerIn: parent }
color: use ? Settings.colors.color13 : Settings.colors.color4
//LauncherButton { anchors.centerIn: parent }
Text {
font.pointSize: 14
text: switch(index) {
@@ -217,11 +232,11 @@ Item {
return "";
}
anchors.centerIn: parent
color: Pywal.colors.color0
color: Settings.colors.color0
}
}
onEntered: child.color = Qt.binding(() => child.use ? Pywal.colors.color13 : Pywal.colors.color12)
onExited: child.color = Qt.binding(() => child.use ? Pywal.colors.color13 : Pywal.colors.color4)
onEntered: child.color = Qt.binding(() => child.use ? Settings.colors.color13 : Settings.colors.color12)
onExited: child.color = Qt.binding(() => child.use ? Settings.colors.color13 : Settings.colors.color4)
onClicked: {
child.use = !child.use
@@ -234,7 +249,10 @@ Item {
case 5:
case 6:
case 7:
break;
case 8:
power.visible = true
break;
default:
break;
}

View File

@@ -10,7 +10,7 @@ ClippingWrapperRectangle {
id: root
radius: 3
color: Pywal.colors.color1
color: Settings.colors.color1
implicitWidth: 30; height: 30
Button {
id: button
@@ -19,7 +19,7 @@ ClippingWrapperRectangle {
background: Rectangle {
color: Pywal.colors.color9
color: Settings.colors.color9
}
Process {

View File

@@ -1,36 +1,38 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Shapes
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Hyprland
WrapperMouseArea {
ClippingWrapperRectangle {
radius: 3
implicitWidth: 30; implicitHeight: 30
Text {
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
anchors.fill: parent
text: " "
font.pointSize: 16
color: Pywal.special.foreground
}
color: {
containsMouse
? Pywal.colors.color12
: Pywal.colors.color1
VFlyoutUp {
id: midFO
required property list<string> hyprcmds
visible: Settings.launcherOpen
item: content
onExited: Settings.launcherOpen = false
ClippingRectangle {
id: content
radius: root.radius
implicitWidth: 700
implicitHeight: wallpaper.height
color: Settings.colors.color1
Wallpaper {
id: wallpaper
implicitWidth: 700
//implicitHeight: 350
hyprcmds: midFO.hyprcmds
}
}
hoverEnabled: true
Process {
id: launcher
running: false
command: ["rofi", "-show", "drun", "-show-icons" ]
}
onClicked: launcher.running = true
}

View File

@@ -0,0 +1,31 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import Quickshell.Io
import Quickshell.Widgets
WrapperMouseArea {
ClippingWrapperRectangle {
radius: 3
implicitWidth: 30; implicitHeight: 30
Text {
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
anchors.fill: parent
text: " "
font.pointSize: 16
color: Settings.special.foreground
}
color: {
containsMouse
? Settings.colors.color12
: Settings.colors.color1
}
}
hoverEnabled: true
onClicked: Settings.launcherOpen = true
}

View File

@@ -15,14 +15,30 @@ Item {
property bool locked: false
onLockedChanged: {
lock.locked = locked
}
required property string bg_path
required property LockCtx ctx
property color fieldColor: ctx.failed ? Settings.colors.color6 : Settings.colors.color1
IpcHandler {
target: "lockscreen"
function lock() { root.locked = true; }
function unlock() { root.locked = false; }
}
LockCtx {
id: ctx
lock: root.lock
onShouldUnlock: lock.locked = false
}
LockScreen {
id: lockscreen
visible: root.locked
}
WlSessionLock {
@@ -31,53 +47,59 @@ Item {
locked: root.locked
onLockedChanged: {
root.locked = locked
}
WlSessionLockSurface {
color: "transparent"
Image {
/*Image {
anchors.fill: parent
source: Qt.resolvedUrl(bg_path)
ClippingWrapperRectangle {
}*/
ClippingWrapperRectangle {
anchors.centerIn: parent
radius: 10
anchors.centerIn: parent
radius: 10
color: Pywal.special.background
color: Settings.special.background
RowLayout {
ClippingWrapperRectangle {
color: Pywal.colors.color1
implicitWidth: 200
TextInput {
text: ""
RowLayout {
ClippingWrapperRectangle {
color: root.fieldColor
implicitWidth: 200
TextInput {
text: ""
onTextChanged: {
ctx.pass = text
}
horizontalAlignment: TextInput.AlignHCenter
font.pointSize: 30
//echoMode: TextInput.Password
color: Pywal.special.foreground
onTextChanged: {
ctx.pass = text
}
}
Button {
text: "unlock"
onClicked: {
ctx.unlock()
}
}
echoMode: TextInput.Password
Button {
text: "exit"
onClicked: root.locked = false
horizontalAlignment: TextInput.AlignHCenter
verticalAlignment: TextInput.AlignVCenter
font.pointSize: 30
color: Settings.special.foreground
}
}
Button {
text: "unlock"
onClicked: {
ctx.doUnlock()
}
}
Button {
text: "exit"
onClicked: root.locked = false
}
}
}
}

View File

@@ -18,18 +18,16 @@ Scope {
property bool busy: false
property bool failed: false
required property WlSessionLock lock
signal shouldUnlock()
onPassChanged: failed = false
function unlock() {
function doUnlock() {
if(pass == "") return;
if(!busy) {
root.busy = true
pam.start()
} else return;
root.busy = true
pam.start()
}
PamContext {
@@ -44,10 +42,13 @@ Scope {
onCompleted: result => {
if (result == PamResult.Success) {
lock.locked = false
root.shouldUnlock()
console.log("auth Success")
root.pass = "";
} else {
root.pass = "";
root.failed = true;
root.pass = "";
root.failed = true;
abort()
}
root.busy = false;

View File

@@ -0,0 +1,17 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Shapes
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Hyprland
FloatingWindow {
title: "lockscreen"
visible: false
color: "transparent"
}

View File

@@ -15,7 +15,7 @@ ClippingWrapperRectangle {
implicitWidth: parent.width - 2 * Layout.margins
implicitHeight: 100
color: Pywal.colors.color4
color: Settings.colors.color4
required property Notification src
@@ -43,14 +43,14 @@ ClippingWrapperRectangle {
Layout.topMargin: 10
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
Text {
color: Pywal.special.background
color: Settings.special.background
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
text: notif.src.summary
Layout.leftMargin: 10
font.pointSize: 14
}
Text {
color: Pywal.special.background
color: Settings.special.background
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: notif.src.body
Layout.leftMargin: 10

View File

@@ -18,7 +18,7 @@ ColumnLayout {
ClippingWrapperRectangle {
color: Pywal.colors.color11
color: Settings.colors.color11
radius: 5
Layout.margins: 5
Layout.alignment: Qt.AlignVCenter | Qt.AlignTop
@@ -27,7 +27,7 @@ ColumnLayout {
RowLayout {
width: parent.width
Text {
color: Pywal.colors.color0
color: Settings.colors.color0
Layout.margins: 5
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: 'Notifications'

View File

@@ -1,120 +1,126 @@
import Quickshell
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Shapes
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Hyprland
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Hyprland
Item {
width: 30
height: 30
PanelWindow {
anchors {
top: true
left: true
right: true
bottom: true
}
exclusionMode: ExclusionMode.Ignore
WlrLayershell.layer: WlrLayer.Overlay
id: root
required property PanelWindow window
required property real popupOffset
ClippingWrapperRectangle {
radius: 5
width: 30; height: 30
Button {
id: button
text: " "
font.pointSize: 16
onClicked: {
menu.visible = true
grab.active = true
}
implicitHeight: parent.height
}
mask: Region {
item: out
}
PopupWindow {
id: menu
color: "#99000000"
anchor.window: window
anchor.rect.x: popupOffset
anchor.rect.y: 50
implicitWidth: 150
implicitHeight: 250
visible: false
Lock {
id: lock
bg_path: "/tmp/nathan/tmp.jpg"
//locked: true
}
color: "transparent"
ClippingWrapperRectangle {
radius: 5
MouseArea {
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
id: out
spacing: 0
anchors.fill: parent
Button {
Layout.topMargin: 5
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
onClicked: {
root.visible = false
}
text: 'shutdown'
onClicked: shutdown.running = true
Process {
id: shutdown
running: false
command: ["systemctl", "poweroff"]
}
}
Button {
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'reboot'
onClicked: reboot.running = true
Process {
id: reboot
running: false
command: ["systemctl", "reboot"]
}
}
Button {
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'logout'
onClicked: logout.running = true
Process {
id: logout
running: false
command: ["loginctl", "kill-session", "self" ]
}
}
Button {
Layout.bottomMargin: 10
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'sleep'
onClicked: sleep.running = true
Process {
id: sleep
running: false
command: ["systemctl", "sleep"]
ClippingRectangle {
implicitWidth: 200
implicitHeight: 200
id: main
anchors.centerIn: parent
radius: 10
color: "transparent"
GridLayout {
columns: 2
rows: 2
Repeater {
model: 4
WrapperMouseArea {
ClippingWrapperRectangle {
radius: 10
Text {
text: switch(index) {
case 0:
return "󰍃"
case 1:
return " "
case 2:
return " "
case 3:
return " "
default:
return " "
break;
}
font.pointSize: 16
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: Settings.special.foreground
}
implicitHeight: 60
implicitWidth: 60
color: parent.contansMouse ? Settings.colors.color12 : Settings.colors.color4
}
hoverEnabled: true
onEntered: {
child.color = Settings.colors.color12
}
onExited: {
child.color = Settings.colors.color4
}
onClicked: {
root.visible = false
switch(index) {
case 0:
Hyprland.dispatch("exec loginctl kill-session self")
break;
case 1:
Hyprland.dispatch("exec systemctl reboot")
break;
case 2:
Hyprland.dispatch("exec loginctl lock-session")
break;
case 3:
Hyprland.dispatch("exec systemctl poweroff")
break;
default:
lock.locked = true
break;
}
}
}
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -20,6 +20,8 @@ ColumnLayout {
text: 'performance'
onClicked: PowerProfiles.profile = PowerProfile.Performance
visible: PowerProfiles.hasPerformanceProfile
background: Rectangle { color: PowerProfiles.profile == PowerProfile.Performance ? Settings.colors.color13 : Settings.colors.color4 }
}
Button {
Layout.topMargin: 5
@@ -29,6 +31,7 @@ ColumnLayout {
text: 'balanced'
onClicked: PowerProfiles.profile = PowerProfile.Balanced
background: Rectangle { color: PowerProfiles.profile == PowerProfile.Balanced ? Settings.colors.color13 : Settings.colors.color4 }
}
Button {
Layout.topMargin: 5
@@ -38,5 +41,6 @@ ColumnLayout {
text: 'power saver'
onClicked: PowerProfiles.profile = PowerProfile.PowerSaver
background: Rectangle { color: PowerProfiles.profile == PowerProfile.PowerSaver ? Settings.colors.color13 : Settings.colors.color4 }
}
}

View File

@@ -1,58 +0,0 @@
pragma Singleton
import Quickshell
import Quickshell.Io
Singleton {
property string wallpaper: json.wallpaper
property string alpha: json.alpha
property JsonObject special: json.special
property JsonObject colors: json.colors
FileView {
path: "/home/nathan/.cache/wal/colors.json"
watchChanges: true
onFileChanged: reload()
JsonAdapter {
id: json
property string wallpaper: "/home/nathan/Pictures/Wallpaper/bluescape.jpg"
property string alpha: "100"
property JsonObject special: JsonObject {
property string background: "transparent"
property string foreground: "transparent"
property string cursor: "transparent"
}
property JsonObject colors: JsonObject {
property string color0: "transparent"
property string color1: "transparent"
property string color2: "transparent"
property string color3: "transparent"
property string color4: "transparent"
property string color5: "transparent"
property string color6: "transparent"
property string color7: "transparent"
property string color8: "transparent"
property string color9: "transparent"
property string color10: "transparent"
property string color11: "transparent"
property string color12: "transparent"
property string color13: "transparent"
property string color14: "transparent"
property string color15: "transparent"
}
}
}
}

View File

@@ -0,0 +1,120 @@
pragma Singleton
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Shapes
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Hyprland
Singleton {
property bool launcherOpen: false
property string wallpaperDir: s_json.wallpaperDir
property string colorsPath: s_json.colorsPath
Process {
id: cc
command: [ s_json.changeColorsCmd ]
running: false
}
property string settingsPath: Quickshell.env("AURORA_SETTINGS")
onSettingsPathChanged: reload()
function reload() {
settings.reload()
root.wallpaperDir = Qt.binding(() => s_json.wallpaperDir)
root.colorsPath = Qt.binding(() => s_json.colorsPath)
root.wallpaper = Qt.binding(() => c_json.wallpaper)
root.colors = Qt.binding(() => c_json.colors)
}
id: root
FileView {
id: settings
path: root.settingsPath
watchChanges: true
onFileChanged: reload()
JsonAdapter {
id: s_json
property string wallpaperDir
property string colorsPath
property string changeColorsCmd
}
}
property string wallpaper: c_json.wallpaper
property string alpha: Math.round(parseInt(c_json.alpha, 10) * 0xFF / 100).toString(16)
property JsonObject special: c_json.special
property JsonObject colors: c_json.colors
function argb(c) {
return c.slice(0, 1) + Settings.alpha + c.slice(1)
}
FileView {
id: pywal
path: root.colorsPath
watchChanges: true
onFileChanged: {
reload()
cc.running = true
}
JsonAdapter {
id: c_json
property string wallpaper
property string alpha: "100"
property JsonObject special: JsonObject {
property string background: "transparent"
property string foreground: "transparent"
property string cursor: "transparent"
}
property JsonObject colors: JsonObject {
property string color0: "transparent"
property string color1: "transparent"
property string color2: "transparent"
property string color3: "transparent"
property string color4: "transparent"
property string color5: "transparent"
property string color6: "transparent"
property string color7: "transparent"
property string color8: "transparent"
property string color9: "transparent"
property string color10: "transparent"
property string color11: "transparent"
property string color12: "transparent"
property string color13: "transparent"
property string color14: "transparent"
property string color15: "transparent"
}
}
}
}

View File

@@ -0,0 +1,221 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Shapes
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Hyprland
FloatingWindow {
id: root
property real radius: 10
property real selected: 0
visible: false
color: Settings.special.background
WrapperMouseArea {
ClippingRectangle {
//anchors.fill: parent
color: Settings.special.background
id: main
radius: root.radius
implicitWidth: root.width
implicitHeight: root.height
Item {
implicitWidth: root.width - 4 * lay.spacing
implicitHeight: root.height - 4 * lay.spacing
x: 2 * lay.spacing
y: 2 * lay.spacing
RowLayout {
id: lay
spacing: 2
anchors.fill: parent
ColumnLayout {
id: tabs
Layout.alignment: Qt.AlignTop
Repeater {
id: rep
model: 9
WrapperMouseArea {
ClippingRectangle {
//Layout.alignment: Qt.AlignTop
implicitWidth: 40
implicitHeight: 40
radius: root.radius
color: index == selected ? Settings.colors.color13 : Settings.colors.color4
//LauncherButton { anchors.centerIn: parent }
Text {
font.pointSize: 14
text: switch(index) {
case 0:
return " ";
case 1:
return "󰍹 ";
case 2:
return "󰤨 ";
case 3:
return "󰂯";
case 4:
return " ";
case 5:
return " ";
case 6:
return "󰌳 ";
case 7:
return " ";
case 8:
return "󰁹";
default:
return "";
}
anchors.centerIn: parent
color: Settings.colors.color0
}
}
onEntered: child.color = Qt.binding(() => index == selected ? Settings.colors.color13 : Settings.colors.color12)
onExited: child.color = Qt.binding(() => index == selected ? Settings.colors.color13 : Settings.colors.color4)
onClicked: {
selected = index
child.color = Qt.binding(() => index == selected ? Settings.colors.color13 : Settings.colors.color4)
}
hoverEnabled: true
}
}
}
ClippingRectangle {
id: content
Layout.alignment: Qt.AlignHCenter
implicitWidth: parent.width - tabs.width - 2 * parent.spacing - rTabs.width - 2 * parent.spacing
implicitHeight: parent.height
radius: root.radius
color: Settings.colors.color1
Loader {
anchors.fill: parent
readonly property Component launcher: LauncherButton {}
readonly property Component bt: Bluetooth {}
readonly property Component vol: Volume {}
readonly property Component bat: PowerMode {}
readonly property Component mon: LauncherButton {}
readonly property Component net: LauncherButton {}
readonly property Component mus: LauncherButton {}
readonly property Component clk: Clock {}
readonly property Component wal: LauncherButton {}
sourceComponent: switch(selected) {
case 0:
return wal;
case 1:
return mon;
case 2:
return net;
case 3:
return bt;
case 4:
return vol;
case 5:
case 6:
return mus;
case 7:
return wal;
case 8:
return bat;
default:
return launcher;
}
}
}
ColumnLayout {
id: rTabs
Layout.alignment: Qt.AlignBottom
Repeater {
id: rRep
model: 9
WrapperMouseArea {
ClippingRectangle {
//Layout.alignment: Qt.AlignTop
implicitWidth: 40
implicitHeight: 40
radius: root.radius
property bool use: false
color: use ? Settings.colors.color13 : Settings.colors.color4
//LauncherButton { anchors.centerIn: parent }
Text {
font.pointSize: 14
text: switch(index) {
case 0:
return " ";
case 1:
return " ";
case 2:
return " ";
case 3:
return "";
case 4:
return " ";
case 5:
return " ";
case 6:
return "󰊗 ";
case 7:
return " ";
case 8:
return " ";
default:
return "";
}
anchors.centerIn: parent
color: Settings.colors.color0
}
}
onEntered: child.color = Qt.binding(() => child.use ? Settings.colors.color13 : Settings.colors.color12)
onExited: child.color = Qt.binding(() => child.use ? Settings.colors.color13 : Settings.colors.color4)
onClicked: {
child.use = !child.use
switch(index) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
power.visible = true
default:
break;
}
}
hoverEnabled: true
}
}
}
}
}
}
}
}

View File

@@ -16,7 +16,7 @@ Item {
ClippingWrapperRectangle {
radius: 3
anchors.fill: parent
color: Pywal.colors.color4
color: Settings.colors.color4
ColumnLayout {
id: lay
spacing: 4
@@ -30,7 +30,7 @@ Item {
implicitWidth: 20
implicitHeight: 20
color: Pywal.colors.color4
color: Settings.colors.color4
MouseArea {
anchors.fill: parent

View File

@@ -17,7 +17,7 @@ MouseArea {
Component.onCompleted: {
item.y = pad
item.y = root.y + pad
}
width: shape.width
@@ -30,8 +30,8 @@ MouseArea {
ShapePath {
id: path
strokeWidth: 4
strokeColor: root.color
strokeWidth: 1
strokeColor: "transparent"
fillColor: root.color
startX: -root.radius - pad; startY: 0

View File

@@ -0,0 +1,87 @@
import QtQuick
import QtQuick.Shapes
import Quickshell
import Quickshell.Widgets
MouseArea {
id: root
required property real radius
property real pad: 5
property color color
property Item item
hoverEnabled: true
Component.onCompleted: {
item.x = pad
}
width: shape.width
height: shape.height
Shape {
id: shape
//anchors.centerIn: parent
ShapePath {
id: path
strokeWidth: 4
strokeColor: root.color
fillColor: root.color
startX: 0; startY: -root.radius - pad
PathArc {
radiusX: root.radius
radiusY: root.radius
direction: PathArc.Counterclockwise
relativeX: root.radius
relativeY: root.radius
}
PathLine { x: item.width + 2 * pad - root.radius; relativeY: 0 }
PathArc {
radiusX: root.radius
radiusY: root.radius
relativeX: root.radius
relativeY: root.radius
}
PathLine { relativeX: 0; relativeY: 2 * pad + item.height - 2 * root.radius }
PathArc {
radiusX: root.radius
radiusY: root.radius
relativeX: -root.radius
relativeY: root.radius
}
PathLine { relativeX: -item.width - 2 * pad + 2 * root.radius; relativeY: 0 }
PathArc {
radiusX: root.radius
radiusY: root.radius
direction: PathArc.Counterclockwise
relativeX: -root.radius
relativeY: root.radius
}
PathLine { x: 0; y: -root.radius - pad }
}
}
}

View File

@@ -0,0 +1,87 @@
import QtQuick
import QtQuick.Shapes
import Quickshell
import Quickshell.Widgets
MouseArea {
id: root
required property real radius
property real pad: 5
property color color
property Item item
hoverEnabled: true
Component.onCompleted: {
item.x = pad
}
width: shape.width
height: shape.height
Shape {
id: shape
//anchors.centerIn: parent
ShapePath {
id: path
strokeWidth: 4
strokeColor: root.color
fillColor: root.color
startX: 0; startY: pad
PathArc {
radiusX: root.radius
radiusY: root.radius
relativeX: root.radius
relativeY: -root.radius
}
PathLine { x: item.width + 2 * pad - root.radius; relativeY: 0 }
PathArc {
radiusX: root.radius
radiusY: root.radius
direction: PathArc.Counterclockwise
relativeX: root.radius
relativeY: -root.radius
}
PathLine { relativeX: 0; relativeY: 2 * pad + item.height + 2 * root.radius }
PathArc {
radiusX: root.radius
radiusY: root.radius
direction: PathArc.Counterclockwise
relativeX: -root.radius
relativeY: -root.radius
}
PathLine { relativeX: -item.width - 2 * pad + 2 * root.radius; relativeY: 0 }
PathArc {
radiusX: root.radius
radiusY: root.radius
relativeX: -root.radius
relativeY: -root.radius
}
PathLine { x: 0; y: pad }
}
}
}

View File

@@ -0,0 +1,91 @@
import QtQuick
import QtQuick.Shapes
import Quickshell
import Quickshell.Widgets
MouseArea {
id: root
required property real radius
property real pad: 5
property color color
property Item item
hoverEnabled: true
Component.onCompleted: {
item.y = root.y - pad
//console.log(height)
}
width: shape.width
height: item.height + 2 * pad
Shape {
id: shape
y: root.y + root.item.height
//anchors.centerIn: parent
ShapePath {
id: path
strokeWidth: 1
strokeColor: "transparent"
fillColor: root.color
startX: -root.radius - pad; startY: 0
PathArc {
radiusX: root.radius
radiusY: -root.radius
relativeX: root.radius
relativeY: -root.radius
direction: PathArc.Counterclockwise
}
PathLine { relativeX: 0; relativeY: -(2 * pad + item.height - 2 * root.radius) }
PathArc {
radiusX: root.radius
radiusY: -root.radius
//direction: PathArc.Counterclockwise
relativeX: root.radius
relativeY: -root.radius
}
PathLine { x: item.width + pad - root.radius; relativeY: 0 }
PathArc {
radiusX: root.radius
radiusY: -root.radius
//direction: PathArc.Counterclockwise
relativeX: root.radius
relativeY: root.radius
}
PathLine { relativeX: 0; relativeY: -(-item.height + 2 * root.radius - 2 * pad) }
PathArc {
radiusX: root.radius
radiusY: -root.radius
relativeX: root.radius
relativeY: root.radius
direction: PathArc.Counterclockwise
}
PathLine { x: -root.radius - pad; y: 0 }
}
}
}

View File

@@ -18,7 +18,7 @@ ScrollView {
ClippingWrapperRectangle {
color: Pywal.colors.color11
color: Settings.colors.color11
radius: 5
Layout.margins: 5
Layout.alignment: Qt.AlignVCenter | Qt.AlignTop
@@ -27,7 +27,7 @@ ScrollView {
RowLayout {
width: parent.width
Text {
color: Pywal.colors.color0
color: Settings.colors.color0
Layout.margins: 5
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: 'Output'
@@ -71,7 +71,7 @@ ScrollView {
ClippingWrapperRectangle {
color: Pywal.colors.color11
color: Settings.colors.color11
radius: 5
Layout.margins: 5
Layout.alignment: Qt.AlignVCenter | Qt.AlignTop
@@ -80,7 +80,7 @@ ScrollView {
RowLayout {
width: parent.width
Text {
color: Pywal.colors.color0
color: Settings.colors.color0
Layout.margins: 5
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: 'Input'

View File

@@ -0,0 +1,87 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Hyprland
import Quickshell.Services.Pipewire
Flickable {
//anchors.fill: parent
required property list<string> hyprcmds
id: root
property string dir: Settings.wallpaperDir
implicitHeight: lay.height
implicitWidth: 750
interactive: true
contentWidth: lay.width
flickDeceleration: 5000
WheelHandler {
target: root
//property: "contentX"
onWheel: {
console.log("test")
}
}
Process {
id: ls
//command: ["find", root.dir + "*"]
command: ["ls", dir]
running: true
stdout: StdioCollector {
onStreamFinished: {
rep.model = text.split("\n").filter((s) => { return s != ""; })
}
}
}
RowLayout {
id: lay
Repeater {
id: rep
model: 0
WrapperMouseArea {
onWheel: (e) => {
root.flick(e.angleDelta.y * 15, 0)
}
ClippingWrapperRectangle {
radius: 10
implicitWidth: 192 * 2; implicitHeight: 108 * 2
Image {
width: 192 * 2; height: 108 * 2
source: Qt.resolvedUrl(root.dir + "/" + rep.model[index])
fillMode: Image.PreserveAspectCrop
sourceSize.width: 192 * 2
sourceSize.height: 108 * 2
}
}
property Process sw: Process {
command: ["aurora-set-wallpaper", root.dir + "/" + rep.model[index]]
running: false
onRunningChanged: {
root.hyprcmds.forEach((c) => Hyprland.dispatch(c))
}
}
onClicked: {
sw.running = true
}
}
}
}
}

View File

@@ -11,7 +11,7 @@ Item {
Component.onCompleted: Hyprland.refreshWorkspaces()
ClippingWrapperRectangle {
color: Pywal.colors.color1
color: Settings.colors.color1
radius: 3
anchors.fill: parent
ColumnLayout {
@@ -19,13 +19,15 @@ Item {
Repeater {
id: rep
property var ws: {
let arr = [];
Hyprland.workspaces.values.forEach((w) => { if(w.id > 0) arr.push(w) })
return arr;
}
model: Hyprland.workspaces.values.filter((w) => {
if(w != null) {
if(w.id > 0) {
return true
}
}
return false
})
model: ws
WrapperMouseArea {
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
ClippingWrapperRectangle {
@@ -34,11 +36,11 @@ Item {
implicitWidth: 24
implicitHeight: 24
color: {
Hyprland.focusedWorkspace.id == rep.model[index].id
? Pywal.colors.color13
Hyprland?.focusedWorkspace?.id == rep.model[index].id
? Settings.colors.color13
: containsMouse
? Pywal.colors.color12
: Pywal.colors.color4
? Settings.colors.color12
: Settings.colors.color4
}
Text {
@@ -48,15 +50,17 @@ Item {
text: rep.model[index].id
color: {
Hyprland.focusedWorkspace.id == rep.model[index].id
? Pywal.colors.color1
: Pywal.special.foreground
Hyprland?.focusedWorkspace?.id == rep.model[index].id
? Settings.colors.color1
: Settings.special.foreground
}
}
}
hoverEnabled: true
onClicked: {
rep.model[index].activate()
if(Hyprland?.focusedWorkspace?.id != rep.model[index].id) {
rep.model[index].activate()
}
}
}
}

36
flake.lock generated
View File

@@ -5,11 +5,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1772408722,
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"lastModified": 1775087534,
"narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b",
"type": "github"
},
"original": {
@@ -23,11 +23,11 @@
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1772845525,
"narHash": "sha256-Dp5Ir2u4jJDGCgeMRviHvEQDe+U37hMxp6RSNOoMMPc=",
"lastModified": 1775900011,
"narHash": "sha256-QUGu6CJYFQ5AWVV0n3/FsJyV+1/gj7HSDx68/SX9pwM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "27b93804fbef1544cb07718d3f0a451f4c4cd6c0",
"rev": "b0569dc6ec1e6e7fefd8f6897184e4c191cd768e",
"type": "github"
},
"original": {
@@ -38,11 +38,11 @@
},
"import-tree": {
"locked": {
"lastModified": 1772344373,
"narHash": "sha256-OQQ1MhB9t1J71b2wxRRTdH/Qd8UGG0p+dGspfCf5U1c=",
"lastModified": 1773693634,
"narHash": "sha256-BtZ2dtkBdSUnFPPFc+n0kcMbgaTxzFNPv2iaO326Ffg=",
"owner": "vic",
"repo": "import-tree",
"rev": "10fda59eee7d7970ec443b925f32a1bc7526648c",
"rev": "c41e7d58045f9057880b0d85e1152d6a4430dbf1",
"type": "github"
},
"original": {
@@ -53,11 +53,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1772542754,
"narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=",
"lastModified": 1775423009,
"narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4",
"rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
"type": "github"
},
"original": {
@@ -69,11 +69,11 @@
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1772328832,
"narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
"lastModified": 1774748309,
"narHash": "sha256-+U7gF3qxzwD5TZuANzZPeJTZRHS29OFQgkQ2kiTJBIQ=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
"rev": "333c4e0545a6da976206c74db8773a1645b5870a",
"type": "github"
},
"original": {
@@ -84,11 +84,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1772433332,
"narHash": "sha256-izhTDFKsg6KeVBxJS9EblGeQ8y+O8eCa6RcW874vxEc=",
"lastModified": 1775710090,
"narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "cf59864ef8aa2e178cccedbe2c178185b0365705",
"rev": "4c1018dae018162ec878d42fec712642d214fdfa",
"type": "github"
},
"original": {

View File

@@ -1,71 +0,0 @@
{ self, inputs, ... }: {
imports = [
inputs.home-manager.flakeModules.home-manager
];
flake.homeModules.default = { config, lib, pkgs, ... }: {
options.programs.aurora = with lib; {
enable = mkEnableOption "aurora";
package = mkPackageOption self.packages.${pkgs.stdenv.hostPlatform.system} "aurora" {
default = [ "aurora" ];
example = "aurora.packages.hybar";
};
systemd = {
enable = mkEnableOption "aurora systemd unit";
target = mkOption {
type = types.str;
default = "hyprland-session.target";
};
};
};
config = let
cfg = config.programs.aurora;
system = pkgs.stdenv.hostPlatform.system;
in {
home.packages = with pkgs; [
swww
bluez
bluez-tools
wl-clipboard
brightnessctl
hyprpicker
hyprsunset
wf-recorder
];
programs.quickshell = {
enable = cfg.enable;
package = cfg.package;
activeConfig = "aurora";
configs = {
default = "${self.packages.${system}.aurora-dots}/share";
aurora = "${self.packages.${system}.aurora-dots}/share";
hybar = "${self.packages.${system}.hybar-dots}/share";
};
systemd = {
enable = cfg.systemd.enable;
target = cfg.systemd.target;
};
};
};
};
}

View File

@@ -1,49 +0,0 @@
{ self, ... }: {
flake.nixosModules.default = { config, lib, pkgs, ... }: {
options.services.aurora-greeter = with lib; {
enable = mkEnableOption "aurora-greeter";
};
config = let
cfg = config.services.aurora-greeter;
system = pkgs.stdenv.hostPlatform.system;
greeter-conf = pkgs.writeText "greeter.conf" ''
exec-once=${self.packages.${system}.aurora-greeter}/bin/aurora-greeter
'';
in {
services = {
upower.enable = true;
gvfs.enable = true;
power-profiles-daemon.enable = true;
};
environment.systemPackages = [
self.packages.${system}.aurora-greeter
];
environment.etc."pam.d/aurora-lock.conf".text = ''
auth required pam_unix.so
'';
services.greetd = {
enable = cfg.enable;
settings = {
terminal.vt = 1;
default_session = {
command = "Hyprland -c ${greeter-conf}/greeter.conf";
#user = "greeter";
};
};
};
};
};
}