nixos-configs/nixosModules/desktop/manager/ags.nix
matt1432 bfaaed6924
All checks were successful
Discord / discord commits (push) Has been skipped
feat(desktop): move greetd to agsV2
2024-11-11 22:40:02 -05:00

112 lines
3.1 KiB
Nix

self: {
config,
lib,
pkgs,
...
}: let
# TODO: clean this up
inherit (self.inputs) agsV2 gtk-session-lock;
in {
config = let
# Libs
inherit (lib) attrValues boolToString removeAttrs;
# Cfg info
inherit (config.networking) hostName;
cfgDesktop = config.roles.desktop;
# Astal libraries
gtkSessionLock = gtk-session-lock.packages.${pkgs.system}.default;
agsV2Packages = agsV2.packages.${pkgs.system};
astalLibs = attrValues (removeAttrs agsV2.inputs.astal.packages.${pkgs.system} ["docs" "gjs"]) ++ [gtkSessionLock];
# Final ags package
agsFull = agsV2Packages.ags.override {extraPackages = astalLibs;};
agsConfig = let
tsconfig = pkgs.writers.writeJSON "tsconfig.json" {
"$schema" = "https://json.schemastore.org/tsconfig";
"compilerOptions" = {
"experimentalDecorators" = true;
"strict" = true;
"target" = "ES2023";
"moduleResolution" = "Bundler";
"jsx" = "react-jsx";
"jsxImportSource" = "${agsV2Packages.gjs}/share/astal/gjs/gtk3";
"paths" = {
"astal" = ["${agsV2Packages.gjs}/share/astal/gjs"];
"astal/*" = ["${agsV2Packages.gjs}/share/astal/gjs/*"];
};
"skipLibCheck" = true;
"module" = "ES2022";
"lib" = ["ES2023"];
};
};
varsTs =
pkgs.writeText "vars.ts"
# javascript
''
export default {
mainMonitor: '${cfgDesktop.mainMonitor}',
dupeLockscreen: ${boolToString cfgDesktop.displayManager.duplicateScreen},
hasFprintd: ${boolToString (hostName == "wim")},
};
'';
flakeDir = config.environment.variables.FLAKE;
modulesDir = "${lib.removePrefix "/home/${cfg.user}/" flakeDir}/nixosModules";
nodeModules = config.home-manager.users.${cfg.user}.home.file."${modulesDir}/ags/config/node_modules".source
or config.home-manager.users.${cfg.user}.home.file."${modulesDir}/ags-v2/config/node_modules".source;
in
pkgs.runCommandLocal "agsConfig" {} ''
cp -ar ${tsconfig} ./tsconfig.json
cp -ar ${../../ags-v2/config}/* ./.
chmod +w -R ./.
cp -ar ${varsTs} ./widgets/lockscreen/vars.ts
cp -ar ${nodeModules} ./node_modules
${agsFull}/bin/ags bundle ./app.ts $out
'';
cfg = config.roles.desktop;
hyprland =
config
.home-manager
.users
.${cfg.user}
.wayland
.windowManager
.hyprland
.finalPackage;
in {
# 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 = [
agsFull
hyprland
];
text = ''
export CONF="greeter"
exec ags run ${agsConfig}
'';
})
];
};
};
# For accurate stack trace
_file = ./default.nix;
}