maomaowm/nix/hm-modules.nix

132 lines
4.2 KiB
Nix
Raw Normal View History

self: {
2025-02-25 22:05:29 +08:00
lib,
config,
pkgs,
...
}: let
2025-07-30 14:54:59 +08:00
inherit (self.packages.${pkgs.system}) mango;
cfg = config.wayland.windowManager.mango;
2025-02-25 22:37:34 +08:00
variables = lib.concatStringsSep " " cfg.systemd.variables;
extraCommands = lib.concatStringsSep " && " cfg.systemd.extraCommands;
systemdActivation = ''${pkgs.dbus}/bin/dbus-update-activation-environment --systemd ${variables}; ${extraCommands}'';
autostart_sh = pkgs.writeShellScript "autostart.sh" ''
${lib.optionalString cfg.systemd.enable systemdActivation}
${cfg.autostart_sh}
'';
in {
2025-02-25 22:05:29 +08:00
options = {
2025-07-30 14:54:59 +08:00
wayland.windowManager.mango = with lib; {
2025-02-25 22:37:34 +08:00
enable = mkOption {
type = types.bool;
2025-02-25 22:05:29 +08:00
default = false;
};
2025-02-25 22:37:34 +08:00
systemd = {
enable = mkOption {
type = types.bool;
default = pkgs.stdenv.isLinux;
example = false;
description = ''
2025-07-30 14:54:59 +08:00
Whether to enable {file}`mango-session.target` on
mango startup. This links to
2025-02-25 22:37:34 +08:00
{file}`graphical-session.target`.
Some important environment variables will be imported to systemd
and dbus user environment before reaching the target, including
* {env}`DISPLAY`
* {env}`WAYLAND_DISPLAY`
* {env}`XDG_CURRENT_DESKTOP`
* {env}`XDG_SESSION_TYPE`
* {env}`NIXOS_OZONE_WL`
You can extend this list using the `systemd.variables` option.
'';
};
variables = mkOption {
type = types.listOf types.str;
default = [
"DISPLAY"
"WAYLAND_DISPLAY"
"XDG_CURRENT_DESKTOP"
"XDG_SESSION_TYPE"
"NIXOS_OZONE_WL"
"XCURSOR_THEME"
"XCURSOR_SIZE"
];
example = ["--all"];
2025-02-25 22:37:34 +08:00
description = ''
Environment variables imported into the systemd and D-Bus user environment.
'';
};
extraCommands = mkOption {
type = types.listOf types.str;
default = [
"systemctl --user reset-failed"
2025-07-30 14:54:59 +08:00
"systemctl --user start mango-session.target"
2025-02-25 22:37:34 +08:00
];
description = ''
Extra commands to run after D-Bus activation.
'';
};
xdgAutostart = mkEnableOption ''
autostart of applications using
{manpage}`systemd-xdg-autostart-generator(8)`
'';
};
settings = mkOption {
2025-07-30 14:54:59 +08:00
description = "mango config content";
2025-02-25 22:37:34 +08:00
type = types.str;
2025-02-25 22:05:29 +08:00
default = "";
2025-02-25 22:37:34 +08:00
example = ''
# menu and terminal
bind=Alt,space,spawn,rofi -show drun
bind=Alt,Return,spawn,foot
'';
2025-02-25 22:05:29 +08:00
};
2025-02-25 22:37:34 +08:00
autostart_sh = mkOption {
description = "WARRNING: This is a shell script, but no need to add shebang";
type = types.str;
2025-02-25 22:05:29 +08:00
default = "";
2025-02-25 22:37:34 +08:00
example = ''
waybar &
'';
2025-02-25 22:05:29 +08:00
};
};
};
2025-02-25 22:37:34 +08:00
config = lib.mkIf cfg.enable {
2025-07-30 14:54:59 +08:00
home.packages = [mango];
2025-02-25 22:37:34 +08:00
home.activation =
lib.optionalAttrs (cfg.autostart_sh != "") {
2025-07-30 14:54:59 +08:00
createMangoScript = lib.hm.dag.entryAfter ["clearMangoConfig"] ''
cat ${autostart_sh} > $HOME/.config/mango/autostart.sh
chmod +x $HOME/.config/mango/autostart.sh
2025-02-25 22:37:34 +08:00
'';
}
// lib.optionalAttrs (cfg.settings != "") {
2025-07-30 14:54:59 +08:00
createMangoConfig = lib.hm.dag.entryAfter ["clearMangoConfig"] ''
cat > $HOME/.config/mango/config.conf <<EOF
2025-02-25 22:37:34 +08:00
${cfg.settings}
EOF
'';
}
// {
2025-07-30 14:54:59 +08:00
clearMangoConfig = lib.hm.dag.entryAfter ["writeBoundary"] ''
rm -rf $HOME/.config/mango
mkdir -p $HOME/.config/mango
2025-02-25 22:37:34 +08:00
'';
2025-02-25 22:05:29 +08:00
};
2025-07-30 14:54:59 +08:00
systemd.user.targets.mango-session = lib.mkIf cfg.systemd.enable {
2025-02-25 22:37:34 +08:00
Unit = {
2025-07-30 14:54:59 +08:00
Description = "mango compositor session";
Documentation = ["man:systemd.special(7)"];
BindsTo = ["graphical-session.target"];
Wants =
[
"graphical-session-pre.target"
]
++ lib.optional cfg.systemd.xdgAutostart "xdg-desktop-autostart.target";
After = ["graphical-session-pre.target"];
2025-02-25 22:37:34 +08:00
Before = lib.optional cfg.systemd.xdgAutostart "xdg-desktop-autostart.target";
2025-02-25 22:05:29 +08:00
};
};
};
}