From fb9e26dc661f0231a955d5e4c2b6591f06d5192e Mon Sep 17 00:00:00 2001 From: matt1432 Date: Mon, 5 Feb 2024 12:00:25 -0500 Subject: [PATCH] feat(greetd): use ags greetd example --- modules/greetd/crash-fix.patch | 13 ---------- modules/greetd/default.nix | 46 ++++++++++++++-------------------- modules/greetd/greetd.js | 36 ++++++++++++++++++++++++++ modules/greetd/regreet.nix | 21 ---------------- modules/greetd/style.css | 3 --- 5 files changed, 55 insertions(+), 64 deletions(-) delete mode 100644 modules/greetd/crash-fix.patch create mode 100644 modules/greetd/greetd.js delete mode 100644 modules/greetd/regreet.nix delete mode 100644 modules/greetd/style.css diff --git a/modules/greetd/crash-fix.patch b/modules/greetd/crash-fix.patch deleted file mode 100644 index 34e1113c..00000000 --- a/modules/greetd/crash-fix.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/gui/component.rs b/src/gui/component.rs -index 692309c..f2fb9c0 100644 ---- a/src/gui/component.rs -+++ b/src/gui/component.rs -@@ -371,7 +371,7 @@ impl AsyncComponent for Greeter { - if let Some(monitor) = &model.updates.monitor { - // The window needs to be manually fullscreened, since the monitor is `None` at widget - // init. -- root.fullscreen_on_monitor(monitor); -+ // root.fullscreen_on_monitor(monitor); - } else { - // Couldn't choose a monitor, so let the compositor choose it for us. - root.fullscreen(); diff --git a/modules/greetd/default.nix b/modules/greetd/default.nix index 8b80bfc1..b930d863 100644 --- a/modules/greetd/default.nix +++ b/modules/greetd/default.nix @@ -4,7 +4,7 @@ config, ... }: let - inherit (lib) getExe optionals readFile; + inherit (lib) optionals readFile; inherit (config.vars) mainUser greetdDupe mainMonitor; # Nix stuff @@ -20,9 +20,10 @@ .windowManager .hyprland .finalPackage; - # Executables' paths hyprBin = "${hyprland}/bin"; - regreetBin = "${getExe config.programs.regreet.package}"; + + ags = config.home-manager.users.${mainUser}.programs.ags.package; + agsBin = "${ags}/bin"; # Show Regreet on all monitors dupeMonitors = pkgs.writeShellScriptBin "dupeMonitors" '' @@ -44,16 +45,13 @@ done ''; - # Check if user wants Regreet only on main monitor + # Check if user wants the greeter only on main monitor setupMonitors = if (mainMonitor != "null" && !greetdDupe) then "${hyprBin}/hyprctl dispatch focusmonitor ${mainMonitor}" else "${dupeMonitors}/bin/dupeMonitors"; - # Get css for regreet - style = pkgs.writeText "style.css" ''${readFile ./style.css}''; - - # Setup Hyprland as regreet's compositor + # Setup Hyprland as the greeter's compositor hyprConf = pkgs.writeText "greetd-hypr-config" (lib.strings.concatStrings ((optionals isNvidia [ @@ -65,38 +63,32 @@ ]) ++ [ "exec-once = ${setupMonitors} &&" - " sleep 1; swww init --no-cache &&" + " swww init --no-cache &&" " swww img -t none ${pkgs.dracula-theme}/wallpapers/waves.png\n" "${readFile ./hyprland.conf}\n" - "exec-once = ${regreetBin} -s ${style};" + "exec-once = ${agsBin}/ags --config ${./greetd.js};" " ${hyprBin}/hyprctl dispatch exit" ])); in { - imports = [./regreet.nix]; + # Add home folder for home-manager to work + users.users.greeter.home = "/var/lib/greetd"; - users.users.greeter = { - packages = with pkgs; [ - dracula-theme - flat-remix-icon-theme + home-manager.users.greeter = { + imports = [ + ../../common/vars + ../../home/theme.nix + ]; + + home.packages = with pkgs; [ swww gtk3 glib ]; - }; - # See overlay - programs.regreet = { - enable = true; - settings = { - GTK = { - cursor_theme_name = "Dracula-cursors"; - font_name = "Sans Serif"; - icon_theme_name = "Flat-Remix-Violet-Dark"; - theme_name = "Dracula"; - }; - }; + vars = config.vars; + home.stateVersion = "24.05"; }; services = { diff --git a/modules/greetd/greetd.js b/modules/greetd/greetd.js new file mode 100644 index 00000000..f41ecd58 --- /dev/null +++ b/modules/greetd/greetd.js @@ -0,0 +1,36 @@ +const greetd = await Service.import('greetd'); + +const name = Widget.Entry({ + placeholder_text: 'Username', + on_accept: () => password.grab_focus(), +}) + +const password = Widget.Entry({ + placeholder_text: 'Password', + visibility: false, + on_accept: () => { + greetd.login(name.text || '', password.text || '', 'Hyprland') + .catch(err => response.label = JSON.stringify(err)) + }, +}) + +const response = Widget.Label() + +const win = Widget.Window({ + css: 'background-color: transparent;', + anchor: ['top', 'left', 'right', 'bottom'], + child: Widget.Box({ + vertical: true, + hpack: 'center', + vpack: 'center', + hexpand: true, + vexpand: true, + children: [ + name, + password, + response, + ], + }), +}); + +export default { windows: [win] }; diff --git a/modules/greetd/regreet.nix b/modules/greetd/regreet.nix deleted file mode 100644 index a7324fe6..00000000 --- a/modules/greetd/regreet.nix +++ /dev/null @@ -1,21 +0,0 @@ -{pkgs, ...}: { - # TODO: try other greeters https://git.sr.ht/~kennylevinsen/gtkgreet - programs.regreet = { - package = pkgs.greetd.regreet.overrideAttrs (self: super: rec { - version = "0.1.1-patched"; - src = pkgs.fetchFromGitHub { - owner = "rharish101"; - repo = "ReGreet"; - rev = "61d871a0ee5c74230dfef8100d0c9bc75b309203"; - hash = "sha256-PkQTubSm/FN3FXs9vBB3FI4dXbQhv/7fS1rXkVsTAAs="; - }; - cargoDeps = super.cargoDeps.overrideAttrs (_: { - inherit src; - outputHash = "sha256-dR6veXCGVMr5TbCvP0EqyQKTG2XM65VHF9U2nRWyzfA="; - }); - - # temp fix until https://github.com/rharish101/ReGreet/issues/32 is solved - patches = [./crash-fix.patch]; - }); - }; -} diff --git a/modules/greetd/style.css b/modules/greetd/style.css deleted file mode 100644 index 68379bb9..00000000 --- a/modules/greetd/style.css +++ /dev/null @@ -1,3 +0,0 @@ -window { - background-color: rgba(0, 0, 0, 0); -}