feat(greetd): mirror regreet on all monitors

This commit is contained in:
matt1432 2023-11-25 17:13:46 -05:00
parent 5d59e27097
commit 3a3c8457da
5 changed files with 89 additions and 83 deletions

View file

@ -1,22 +1,20 @@
{ stdenv
, nodejs
, tree-sitter
, lib
{
stdenv,
nodejs,
tree-sitter,
lib,
}:
# https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/tools/parsing/tree-sitter/grammar.nix
# Build a parser grammar and put the resulting shared object in `$out/parser`
{
# language name
language
, version
, src
, location ? null
, generate ? false
, ...
language,
version,
src,
location ? null,
generate ? false,
...
} @ args:
stdenv.mkDerivation ({
pname = "${language}-grammar";
@ -29,9 +27,11 @@ stdenv.mkDerivation ({
stripDebugList = ["parser"];
configurePhase = lib.optionalString (location != null) ''
configurePhase =
lib.optionalString (location != null) ''
cd ${location}
'' + lib.optionalString generate ''
''
+ lib.optionalString generate ''
tree-sitter generate
'';
@ -59,4 +59,5 @@ stdenv.mkDerivation ({
fi
runHook postInstall
'';
} // removeAttrs args [ "language" "location" "generate" ])
}
// removeAttrs args ["language" "location" "generate"])

View file

@ -1,4 +1,8 @@
{config, pkgs, ...}: {
{
config,
pkgs,
...
}: {
# Enable OpenGL
hardware.opengl = {
enable = true;

View file

@ -28,7 +28,8 @@ in {
wayland.windowManager.hyprland = {
enable = true;
enableNvidiaPatches = isNvidia;
package = lib.mkIf (!isNvidia)
package =
lib.mkIf (!isNvidia)
hyprland.packages.x86_64-linux.default;
plugins =
@ -47,7 +48,7 @@ in {
"$XDG_DATA_DIRS"
]}"
]
++ (optionals (isNvidia) [
++ (optionals isNvidia [
"LIBVA_DRIVER_NAME, nvidia"
"XDG_SESSION_TYPE, wayland"
"GBM_BACKEND, nvidia-drm"

View file

@ -4,42 +4,43 @@
config,
...
}: let
optionals = lib.lists.optionals;
isNvidia = config.hardware.nvidia.modesetting.enable;
user = config.services.device-vars.username;
hyprBin = "${config.home-manager.users.${user}.wayland.windowManager.hyprland.finalPackage}/bin";
nvidia =
if config.hardware.nvidia.modesetting.enable
then {
env = ''
env = LIBVA_DRIVER_NAME,nvidia
env = XDG_SESSION_TYPE,wayland
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
env = WLR_NO_HARDWARE_CURSORS,1
'';
}
else {
env = "";
};
hyprBin = "${config.home-manager.users.${user}
.wayland.windowManager.hyprland.finalPackage}/bin";
regreetBin = "${lib.getExe config.programs.regreet.package}";
gset = pkgs.gsettings-desktop-schemas;
css = pkgs.writeText "style.css" ''${builtins.readFile ./style.css}'';
style = pkgs.writeText "style.css" ''${builtins.readFile ./style.css}'';
hyprConf = pkgs.writeText "greetd-hypr-config" ''
exec-once = swww init --no-cache && swww img -t none ${pkgs.dracula-theme}/wallpapers/waves.png
setupMonitors = pkgs.writeShellScriptBin "setupMonitors" ''
names=($(${hyprBin}/hyprctl -j monitors | ${pkgs.jq}/bin/jq -r '.[] .name'))
${builtins.readFile ./hyprland.conf}
${nvidia.env}
# FIXME: kb doesn't work
env = XDG_DATA_DIRS, ${gset}/share/gsettings-schemas/${gset.name}:${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}:$XDG_DATA_DIRS
exec-once = squeekboard
exec-once = gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true
exec-once = ${regreetBin} -s ${css}; ${hyprBin}/hyprctl dispatch exit
for (( i=1; i<''${#names[@]}; i++ )); do
${hyprBin}/hyprctl keyword monitor ''${names[$i]},preferred,auto,1,mirror,''${names[0]}
done
'';
hyprConf =
pkgs.writeText "greetd-hypr-config"
(lib.strings.concatStrings ((optionals isNvidia [
"env = LIBVA_DRIVER_NAME,nvidia\n"
"env = XDG_SESSION_TYPE,wayland\n"
"env = GBM_BACKEND,nvidia-drm\n"
"env = __GLX_VENDOR_LIBRARY_NAME,nvidia\n"
"env = WLR_NO_HARDWARE_CURSORS,1\n"
])
++ [
"exec-once = ${setupMonitors}/bin/setupMonitors &&"
" swww init --no-cache &&"
" swww img -t none ${pkgs.dracula-theme}/wallpapers/waves.png\n"
"${builtins.readFile ./hyprland.conf}\n"
"exec-once = ${regreetBin} -s ${style};"
" ${hyprBin}/hyprctl dispatch exit"
]));
in {
users.users.greeter = {
packages = with pkgs; [
@ -48,7 +49,6 @@ in {
swww
gtk3
glib
squeekboard
];
};