parent
1ce40f2c1a
commit
6ca0d7248b
329 changed files with 178 additions and 139 deletions
modules/desktop/manager
66
modules/desktop/manager/ags.nix
Normal file
66
modules/desktop/manager/ags.nix
Normal file
|
@ -0,0 +1,66 @@
|
|||
self: {
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
config = let
|
||||
cfg = config.roles.desktop;
|
||||
agsCfg = hmCfg.programs.ags;
|
||||
hmCfg = config.home-manager.users.${cfg.user};
|
||||
|
||||
hyprland = hmCfg.wayland.windowManager.hyprland.finalPackage;
|
||||
|
||||
agsConfig = let
|
||||
homeFiles = config.home-manager.users.${cfg.user}.home.file;
|
||||
|
||||
nodeModules = homeFiles."${agsCfg.configDir}/node_modules".source;
|
||||
tsconfig = homeFiles."${agsCfg.configDir}/tsconfig.json".source;
|
||||
varsTs = homeFiles."${agsCfg.configDir}/widgets/lockscreen/vars.ts".source;
|
||||
in
|
||||
pkgs.runCommandLocal "agsConfig" {} ''
|
||||
cp -ar ${tsconfig} ./tsconfig.json
|
||||
cp -ar ${../../ags/config}/* ./.
|
||||
chmod +w -R ./.
|
||||
cp -ar ${varsTs} ./widgets/lockscreen/vars.ts
|
||||
cp -ar ${nodeModules} ./node_modules
|
||||
${agsCfg.package}/bin/ags bundle ./app.ts $out
|
||||
'';
|
||||
in {
|
||||
assertions = [
|
||||
{
|
||||
assertion = cfg.ags.enable;
|
||||
message = ''
|
||||
The Display Manager requires AGS to be enabled.
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
# Add home folder for home-manager to work
|
||||
users.users.greeter = {
|
||||
home = "/var/lib/greeter";
|
||||
createHome = true;
|
||||
};
|
||||
|
||||
home-manager.users.greeter = {
|
||||
home.packages = [
|
||||
hyprland
|
||||
|
||||
(pkgs.writeShellApplication {
|
||||
name = "agsGreeter";
|
||||
|
||||
runtimeInputs = [
|
||||
agsCfg.package
|
||||
hyprland
|
||||
];
|
||||
|
||||
text = ''
|
||||
exec ags run ${agsConfig} -a greeter
|
||||
'';
|
||||
})
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# For accurate stack trace
|
||||
_file = ./default.nix;
|
||||
}
|
60
modules/desktop/manager/default.nix
Normal file
60
modules/desktop/manager/default.nix
Normal file
|
@ -0,0 +1,60 @@
|
|||
self: {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
(import ./ags.nix self)
|
||||
(import ./hyprland.nix self)
|
||||
];
|
||||
|
||||
config = let
|
||||
inherit (lib) mkIf;
|
||||
|
||||
cfg = config.roles.desktop;
|
||||
|
||||
hyprland =
|
||||
config
|
||||
.home-manager
|
||||
.users
|
||||
.${cfg.user}
|
||||
.wayland
|
||||
.windowManager
|
||||
.hyprland
|
||||
.finalPackage;
|
||||
|
||||
# Hide TTY on launch
|
||||
cmd = toString (pkgs.writeShellScript "hyprland-wrapper" ''
|
||||
trap 'systemctl --user stop hyprland-session.target; sleep 1' EXIT
|
||||
exec Hyprland >/dev/null
|
||||
'');
|
||||
in
|
||||
mkIf cfg.displayManager.enable {
|
||||
services = {
|
||||
displayManager.sessionPackages = [hyprland];
|
||||
|
||||
greetd = {
|
||||
enable = true;
|
||||
settings = {
|
||||
default_session = {
|
||||
command = cmd;
|
||||
user = "greeter";
|
||||
};
|
||||
|
||||
initial_session = {
|
||||
command = cmd;
|
||||
user = cfg.user;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# unlock GPG keyring on login
|
||||
services.gnome.gnome-keyring.enable = true;
|
||||
security.pam.services.greetd.enableGnomeKeyring = true;
|
||||
};
|
||||
|
||||
# For accurate stack trace
|
||||
_file = ./default.nix;
|
||||
}
|
77
modules/desktop/manager/hyprland.nix
Normal file
77
modules/desktop/manager/hyprland.nix
Normal file
|
@ -0,0 +1,77 @@
|
|||
self: {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
config = let
|
||||
inherit (lib) optionals;
|
||||
inherit (self.lib.hypr) mkAnimation;
|
||||
|
||||
inherit (import ./setupMonitors.nix {inherit config pkgs;}) setupMonitors;
|
||||
|
||||
cfg = config.roles.desktop;
|
||||
|
||||
# Nix stuff
|
||||
cfgHypr =
|
||||
config
|
||||
.home-manager
|
||||
.users
|
||||
.${cfg.user}
|
||||
.wayland
|
||||
.windowManager
|
||||
.hyprland;
|
||||
in {
|
||||
home-manager.users.greeter = {
|
||||
imports = [
|
||||
(import ../theme self)
|
||||
];
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
systemd.enable = false;
|
||||
|
||||
package = cfgHypr.finalPackage;
|
||||
|
||||
settings = {
|
||||
inherit (cfgHypr.settings) cursor device input misc monitor;
|
||||
|
||||
envd = optionals (config.nvidia.enable) [
|
||||
"LIBVA_DRIVER_NAME, nvidia"
|
||||
"NVD_BACKEND, direct"
|
||||
"XDG_SESSION_TYPE, wayland"
|
||||
"GBM_BACKEND, nvidia-drm"
|
||||
"__GLX_VENDOR_LIBRARY_NAME, nvidia"
|
||||
];
|
||||
|
||||
general.border_size = 0;
|
||||
|
||||
decoration = {
|
||||
blur.enabled = false;
|
||||
shadow.enabled = false;
|
||||
};
|
||||
|
||||
animation = map mkAnimation [
|
||||
{
|
||||
name = "fadeLayersIn";
|
||||
enable = false;
|
||||
}
|
||||
{
|
||||
name = "layers";
|
||||
duration = 4;
|
||||
style = "popin";
|
||||
}
|
||||
];
|
||||
|
||||
exec-once = [
|
||||
setupMonitors
|
||||
"agsGreeter &> /tmp/ags-greetd.log; hyprctl dispatch exit"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# For accurate stack trace
|
||||
_file = ./hyprland.nix;
|
||||
}
|
53
modules/desktop/manager/setupMonitors.nix
Normal file
53
modules/desktop/manager/setupMonitors.nix
Normal file
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (pkgs.lib) getExe;
|
||||
|
||||
cfg = config.roles.desktop;
|
||||
|
||||
hyprland =
|
||||
config
|
||||
.home-manager
|
||||
.users
|
||||
.${cfg.user}
|
||||
.wayland
|
||||
.windowManager
|
||||
.hyprland
|
||||
.finalPackage;
|
||||
|
||||
# Show Regreet on all monitors
|
||||
dupeMonitors = pkgs.writeShellApplication {
|
||||
name = "dupeMonitors";
|
||||
runtimeInputs = [hyprland pkgs.jq];
|
||||
text = ''
|
||||
main="${cfg.mainMonitor}"
|
||||
names="($(hyprctl -j monitors | jq -r '.[] .description'))"
|
||||
|
||||
if [[ "$main" == "null" ]]; then
|
||||
main="''${names[0]}"
|
||||
fi
|
||||
|
||||
for (( i=0; i<''${#names[@]}; i++ )); do
|
||||
|
||||
# shellcheck disable=SC2001
|
||||
name=$(echo "''${names[$i]}" | sed 's/.*(\(.*\))/\1/')
|
||||
# shellcheck disable=SC2001
|
||||
desc=$(echo "''${names[$i]}" | sed 's/ (.*//')
|
||||
|
||||
if [[ "$name" != "$main" && "desc:$desc" != "$main" ]]; then
|
||||
hyprctl keyword monitor "$name",preferred,auto,1,mirror,"$main"
|
||||
fi
|
||||
done
|
||||
|
||||
hyprctl dispatch focusmonitor "$main"
|
||||
'';
|
||||
};
|
||||
# Check if user wants the greeter only on main monitor
|
||||
in {
|
||||
setupMonitors =
|
||||
if (cfg.mainMonitor != "null" && !cfg.displayManager.duplicateScreen)
|
||||
then "hyprctl dispatch focusmonitor ${cfg.mainMonitor}"
|
||||
else getExe dupeMonitors;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue