nixos-configs/modules/ags/default.nix

175 lines
4.8 KiB
Nix
Raw Normal View History

2023-11-30 17:17:34 -05:00
{
ags,
2024-07-08 21:15:11 -04:00
astal-tray,
2023-11-30 17:17:34 -05:00
config,
2024-04-19 10:38:54 -04:00
gtk-session-lock,
lib,
2023-11-30 17:17:34 -05:00
pkgs,
self,
ts-for-gir-src,
2023-11-30 17:17:34 -05:00
...
}: let
inherit (lib) boolToString toLower;
2024-07-08 21:15:11 -04:00
# Configs
inherit (config.vars) mainUser hostName;
cfgDesktop = config.roles.desktop;
flakeDir = config.environment.variables.FLAKE;
2023-11-30 17:17:34 -05:00
isTouchscreen = config.hardware.sensor.iio.enable;
2024-07-08 21:15:11 -04:00
# Packages
astalTray = astal-tray.packages.${pkgs.system}.tray;
2024-04-19 17:01:09 -04:00
gtkSessionLock = gtk-session-lock.packages.${pkgs.system}.default;
2023-11-30 17:17:34 -05:00
in {
2024-07-25 23:24:19 -04:00
# Enable pam for ags
security.pam.services.ags = {};
2023-11-30 17:17:34 -05:00
services.upower.enable = true;
home-manager.users.${mainUser}.imports = [
2023-11-30 17:17:34 -05:00
ags.homeManagerModules.default
({
config,
lib,
...
}: let
2024-07-08 21:15:11 -04:00
inherit (config.lib.file) mkOutOfStoreSymlink;
2024-06-24 12:30:49 -04:00
inherit (lib) hasPrefix optionals removePrefix;
2024-03-22 23:31:37 -04:00
configJs =
2024-06-09 22:49:30 -04:00
# javascript
2024-03-22 23:31:37 -04:00
''
2024-07-25 23:24:19 -04:00
Utils.execAsync('hyprpaper');
2024-03-22 23:31:37 -04:00
import { transpileTypeScript } from './js/utils.js';
export default (await transpileTypeScript('${hostName}')).default;
'';
agsPkg = config.programs.ags.finalPackage;
agsConfigDir = "${removePrefix "/home/${mainUser}/" flakeDir}/modules/ags";
2023-11-30 17:17:34 -05:00
in {
assertions = [
{
assertion = hasPrefix "/home/${mainUser}/" flakeDir;
2024-06-24 12:30:49 -04:00
message = ''
Your $FLAKE environment variable needs to point to a directory in
the main users' home to use the AGS module.
'';
}
];
2024-04-19 10:38:54 -04:00
programs.ags = {
enable = true;
extraPackages = [
2024-07-08 21:15:11 -04:00
astalTray
2024-04-19 17:01:09 -04:00
gtkSessionLock
2024-04-19 10:38:54 -04:00
];
};
2023-11-30 17:17:34 -05:00
home = {
file = let
mkType = package: girName: {
"${agsConfigDir}/config/types/@girs/${toLower girName}".source =
pkgs.callPackage
./mk-types {
inherit ts-for-gir-src package girName;
};
};
in (
{
2024-07-08 21:15:11 -04:00
# Generated types
2024-04-19 10:38:54 -04:00
"${agsConfigDir}/config/types" = {
source = "${agsPkg}/share/com.github.Aylur.ags/types";
2024-07-08 21:15:11 -04:00
recursive = true; # To add other types inside the folder
2024-04-19 10:38:54 -04:00
};
}
// (mkType gtkSessionLock "GtkSessionLock-0.1")
// (mkType astalTray "AstalTray-0.1")
// {
# Out of store symlinks
".config/ags".source = mkOutOfStoreSymlink "${flakeDir}/modules/ags/config";
2024-07-08 21:15:11 -04:00
# Generated JavaScript files
"${agsConfigDir}/config/config.js".text = configJs;
"${agsConfigDir}/config/ts/lockscreen/vars.ts".text =
2024-06-09 22:49:30 -04:00
# javascript
''
export default {
mainMonitor: '${cfgDesktop.mainMonitor}',
dupeLockscreen: ${boolToString cfgDesktop.displayManager.duplicateScreen},
hasFprintd: ${boolToString (hostName == "wim")},
};
'';
}
// (import ./icons.nix {inherit pkgs agsConfigDir;})
);
2024-01-14 20:52:30 -05:00
packages =
2024-07-10 13:55:45 -04:00
[
# TODO: replace with matugen
self.packages.${pkgs.system}.coloryou
]
++ (with pkgs; [
# ags
dart-sass
bun
playerctl
(callPackage ./clipboard {})
2024-01-14 20:52:30 -05:00
## gui
pavucontrol # TODO: replace with ags widget
])
++ (optionals isTouchscreen (with pkgs; [
lisgd
ydotool
]));
};
wayland.windowManager.hyprland = {
settings = {
animations = {
bezier = [
"easeInOutBack, 0.68, -0.6, 0.32, 1.6"
];
animation = [
"fadeLayersIn, 0"
"fadeLayersOut, 1, 3000, default"
"layers, 1, 8, easeInOutBack, slide left"
];
};
layerrule = [
"noanim, ^(?!win-).*"
# Lockscreen blur
2024-04-19 17:01:09 -04:00
"blur, ^(blur-bg.*)"
"ignorealpha 0.19, ^(blur-bg.*)"
];
exec-once = [
"ags"
"sleep 3; ags -r 'App.openWindow(\"win-applauncher\")'"
];
bind = [
2024-05-05 22:43:03 -04:00
"$mainMod SHIFT, E , exec, ags -t win-powermenu"
"$mainMod , D , exec, ags -t win-applauncher"
"$mainMod , V , exec, ags -t win-clipboard"
" , Print, exec, ags -t win-screenshot"
];
binde = [
## Brightness control
2024-05-05 22:43:03 -04:00
", XF86MonBrightnessUp , exec, ags -r 'Brightness.screen += 0.05'"
", XF86MonBrightnessDown, exec, ags -r 'Brightness.screen -= 0.05'"
];
2024-05-05 22:43:03 -04:00
bindn = [" , Escape , exec, ags -r 'closeAll()'"];
bindr = ["CAPS, Caps_Lock, exec, ags -r 'Brightness.fetchCapsState()'"];
};
};
2023-11-30 17:17:34 -05:00
})
];
}