diff --git a/config/aurora-greeter/Bar.qml b/config/aurora-greeter/Bar.qml new file mode 100644 index 0000000..b337cd6 --- /dev/null +++ b/config/aurora-greeter/Bar.qml @@ -0,0 +1,39 @@ +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 +import Quickshell.Services.Greetd +import Quickshell.Services.Pam +import qs.modules + +PanelWindow { + + id: root + + anchors { + top: true + left: true + right: true + bottom: true + } + + margins { + top: root.screen.height * 0.4 + bottom: root.screen.height * 0.4 + left: root.screen.width * 0.4 + right: root.screen.width * 0.4 + } + + focusable: true + + color: "transparent" + + Lock { + } + +} diff --git a/config/aurora-greeter/default.nix b/config/aurora-greeter/default.nix new file mode 100644 index 0000000..4b4e758 --- /dev/null +++ b/config/aurora-greeter/default.nix @@ -0,0 +1,25 @@ +{ ... }: { + + + perSystem = { self', pkgs, system, ... }: { + packages = { + + aurora-greeter-dots = pkgs.stdenv.mkDerivation { + + name = "aurora-greeter-dots"; + + src = ./.; + + buildInputs = []; + + buildPhase = '' + ''; + + installPhase = '' + mkdir -p $out/share + cp -r $src/* $out/share + ''; + }; + }; + }; +} diff --git a/config/aurora-greeter/modules/Lock.qml b/config/aurora-greeter/modules/Lock.qml new file mode 100644 index 0000000..a896407 --- /dev/null +++ b/config/aurora-greeter/modules/Lock.qml @@ -0,0 +1,41 @@ +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 +import Quickshell.Services.Greetd +import Quickshell.Services.Pam + +ClippingWrapperRectangle { + + anchors.fill: parent + radius: 10 + + color: Pywal.special.background + + ColumnLayout { + anchors.fill: parent + Text { + text: "User" + } + TextInput { + text: "guest" + } + Text { + text: "Password" + } + TextInput { + text: "test" + echoMode: TextInput.Password + } + + Button { + text: "Login" + + } + } +} diff --git a/config/aurora-greeter/modules/Pywal.qml b/config/aurora-greeter/modules/Pywal.qml new file mode 100644 index 0000000..5fcf2c8 --- /dev/null +++ b/config/aurora-greeter/modules/Pywal.qml @@ -0,0 +1,58 @@ +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" + } + } + } +} diff --git a/config/aurora-greeter/shell.qml b/config/aurora-greeter/shell.qml new file mode 100644 index 0000000..749e7b3 --- /dev/null +++ b/config/aurora-greeter/shell.qml @@ -0,0 +1,18 @@ +//@ pragma Env QS_NO_RELOAD_POPUP=1 +//@ pragma Env QSG_RENDER_LOOP=threaded +//@ pragma Env QT_QUICK_FLICKABLE_WHEEL_DECELERATION=10000 + +//@ pragma UseQApplication + +import QtQuick +import Quickshell // for ShellRoot +import Quickshell.Hyprland +import qs.modules + +ShellRoot { + + Bar { + id: bar + } + +} diff --git a/config/aurora/modules/Bar.qml b/config/aurora/modules/Bar.qml index afea73c..9f008db 100644 --- a/config/aurora/modules/Bar.qml +++ b/config/aurora/modules/Bar.qml @@ -21,13 +21,32 @@ 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 + } 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) - + + for(let toplv = 0; toplv < Hyprland.toplevels.values.length; toplv++) { + //console.log(Hyprland.toplevels.values[toplv].title) + } } property int topEx: topRect.reserve @@ -72,6 +91,18 @@ PanelWindow { 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 + } + } } BarRight { diff --git a/config/aurora/modules/Dashboard.qml b/config/aurora/modules/Dashboard.qml index 1aa10fe..71cc3f2 100644 --- a/config/aurora/modules/Dashboard.qml +++ b/config/aurora/modules/Dashboard.qml @@ -189,7 +189,8 @@ Item { implicitWidth: 40 implicitHeight: 40 radius: root.radius - color: index + 9 == selected ? Pywal.colors.color13 : Pywal.colors.color4 + property bool use: false + color: use ? Pywal.colors.color13 : Pywal.colors.color4 //Launcher { anchors.centerIn: parent } Text { font.pointSize: 14 @@ -219,11 +220,24 @@ Item { color: Pywal.colors.color0 } } - onEntered: child.color = Qt.binding(() => index + 9 == selected ? Pywal.colors.color13 : Pywal.colors.color12) - onExited: child.color = Qt.binding(() => index + 9 == selected ? Pywal.colors.color13 : Pywal.colors.color4) + 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) onClicked: { - selected = index + 9 - child.color = Qt.binding(() => index + 9 == selected ? Pywal.colors.color13 : Pywal.colors.color12) + child.use = !child.use + + switch(index) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + default: + break; + } } hoverEnabled: true } diff --git a/config/aurora/modules/Lock.qml b/config/aurora/modules/Lock.qml new file mode 100644 index 0000000..db531f8 --- /dev/null +++ b/config/aurora/modules/Lock.qml @@ -0,0 +1,86 @@ +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 +import Quickshell.Services.Pam + +Item { + + id: root + + property bool locked: false + + required property string bg_path + + required property LockCtx ctx + + LockCtx { + id: ctx + + lock: root.lock + } + + WlSessionLock { + + id: lock + + locked: root.locked + + + WlSessionLockSurface { + color: "transparent" + Image { + anchors.fill: parent + + source: Qt.resolvedUrl(bg_path) + + ClippingWrapperRectangle { + + + anchors.centerIn: parent + radius: 10 + + color: Pywal.special.background + + RowLayout { + ClippingWrapperRectangle { + color: Pywal.colors.color1 + implicitWidth: 200 + TextInput { + text: "" + + onTextChanged: { + ctx.pass = text + } + + horizontalAlignment: TextInput.AlignHCenter + + font.pointSize: 30 + //echoMode: TextInput.Password + color: Pywal.special.foreground + } + } + + Button { + text: "unlock" + onClicked: { + ctx.unlock() + } + } + + Button { + text: "exit" + onClicked: root.locked = false + } + } + } + } + } + } +} + diff --git a/config/aurora/modules/LockCtx.qml b/config/aurora/modules/LockCtx.qml new file mode 100644 index 0000000..47bd859 --- /dev/null +++ b/config/aurora/modules/LockCtx.qml @@ -0,0 +1,58 @@ +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 +import Quickshell.Services.Pam + +Scope { + + id: root + + property string pass + + property bool busy: false + + property bool failed: false + + required property WlSessionLock lock + + onPassChanged: failed = false + + function unlock() { + if(pass == "") return; + + if(!busy) { + root.busy = true + pam.start() + } else return; + } + + PamContext { + + id: pam + + onPamMessage: { + if (this.responseRequired) { + this.respond(root.pass); + } + } + + onCompleted: result => { + if (result == PamResult.Success) { + lock.locked = false + } else { + root.pass = ""; + root.failed = true; + } + + root.busy = false; + } + + config: "aurora-lock.conf" + } +} diff --git a/config/aurora/modules/Tray.qml b/config/aurora/modules/Tray.qml index f5ca3d8..b6558c7 100644 --- a/config/aurora/modules/Tray.qml +++ b/config/aurora/modules/Tray.qml @@ -30,7 +30,7 @@ Item { implicitWidth: 20 implicitHeight: 20 - color: Pywal.colors.color1 + color: Pywal.colors.color4 MouseArea { anchors.fill: parent diff --git a/nix/homeManagerModule.nix b/nix/homeManagerModule.nix index f507794..3846a58 100644 --- a/nix/homeManagerModule.nix +++ b/nix/homeManagerModule.nix @@ -31,6 +31,23 @@ 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; diff --git a/nix/nixosModule.nix b/nix/nixosModule.nix new file mode 100644 index 0000000..2b8d543 --- /dev/null +++ b/nix/nixosModule.nix @@ -0,0 +1,49 @@ +{ 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} + ''; + 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"; + }; + }; + }; + }; + }; +}