From 50da06accf4a4863c3a42df94fad66c7b85c73a4 Mon Sep 17 00:00:00 2001 From: matt1432 Date: Thu, 19 Oct 2023 17:05:13 -0400 Subject: [PATCH] feat: switch to greetd --- hosts/wim/configuration.nix | 2 +- hosts/wim/modules/desktop.nix | 16 +++++--- modules/greetd/default.nix | 77 +++++++++++++++++++++++++++++++++++ modules/greetd/regreet.patch | 13 ++++++ 4 files changed, 101 insertions(+), 7 deletions(-) create mode 100644 modules/greetd/default.nix create mode 100644 modules/greetd/regreet.patch diff --git a/hosts/wim/configuration.nix b/hosts/wim/configuration.nix index 5629446d..23ef374e 100644 --- a/hosts/wim/configuration.nix +++ b/hosts/wim/configuration.nix @@ -3,11 +3,11 @@ ./hardware-configuration.nix ../../modules/audio.nix + ../../modules/greetd ../../modules/kmscon.nix ../../modules/plymouth.nix ../../modules/printer.nix ../../modules/proton-bridge.nix - ../../modules/sddm-wayland.nix ./modules/desktop.nix ./modules/security.nix diff --git a/hosts/wim/modules/desktop.nix b/hosts/wim/modules/desktop.nix index a215929d..a74a61fd 100644 --- a/hosts/wim/modules/desktop.nix +++ b/hosts/wim/modules/desktop.nix @@ -7,16 +7,20 @@ sessionPackages = [ hyprland.packages.x86_64-linux.default ]; - defaultSession = "hyprland"; - - autoLogin = { - enable = true; - user = "matt"; - }; }; libinput.enable = true; }; + + greetd = { + settings = { + initial_session = { + command = "${hyprland.packages.x86_64-linux.default}/bin/Hyprland"; + user = "matt"; + }; + }; + }; + dbus.enable = true; gvfs.enable = true; flatpak.enable = true; diff --git a/modules/greetd/default.nix b/modules/greetd/default.nix new file mode 100644 index 00000000..4056d76d --- /dev/null +++ b/modules/greetd/default.nix @@ -0,0 +1,77 @@ +{ lib +, pkgs +, config +, ... +}: let + sway = "${config.programs.sway.package}/bin/sway"; + swayConf = pkgs.writeText "greetd-sway-config" '' + exec "dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP" + input "type:touchpad" { + tap enabled + } + seat seat0 xcursor_theme Dracula-cursors 24 + xwayland disable + + default_border none + default_floating_border none + font pango:monospace 0 + titlebar_padding 1 + titlebar_border_thickness 0 + + exec "${lib.getExe config.programs.regreet.package} -l debug; swaymsg exit" + ''; +in { + environment.systemPackages = with pkgs; [ + dracula-theme + flat-remix-icon-theme + ]; + + programs.regreet = { + enable = true; + 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 = [./regreet.patch]; + }); + + settings = { + background = { + path = "${pkgs.dracula-theme}/wallpapers/waves.png"; + fit = "Cover"; + }; + GTK = { + cursor_theme_name = "Dracula-cursors"; + font_name = "Sans Serif"; + icon_theme_name = "Flat-Remix-Violet-Dark"; + theme_name = "Dracula"; + }; + }; + }; + + programs.sway.enable = true; + + services.greetd = { + enable = true; + settings = { + default_session = { + command = "${sway} --config ${swayConf}"; + user = "greeter"; + }; + }; + }; + + # unlock GPG keyring on login + services.gnome.gnome-keyring.enable = true; + security.pam.services.greetd.enableGnomeKeyring = true; +} diff --git a/modules/greetd/regreet.patch b/modules/greetd/regreet.patch new file mode 100644 index 00000000..34e1113c --- /dev/null +++ b/modules/greetd/regreet.patch @@ -0,0 +1,13 @@ +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();