nixos/modules/home-manager/darkman.nix

70 lines
1.7 KiB
Nix

{
config,
pkgs,
lib,
...
}:
let
inherit (pkgs.lib) optionalAttrs;
home-manager = "${pkgs.home-manager}/bin/home-manager";
grep = lib.getExe' pkgs.toybox "grep";
head = lib.getExe' pkgs.toybox "head";
find = lib.getExe' pkgs.toybox "find";
find-generation = ''
for line in $(${home-manager} generations | ${grep} -o '/.*')
do
res=$(${find} $line | ${grep} specialisation | ${head} -1)
output=$?
if [[ $output -eq 0 ]] && [[ $res != "" ]]; then
echo $res
exit
fi
done
'';
switch-theme = theme: "$(${find-generation})/${theme}/activate";
in
{
options.modules.darkman = {
enable = lib.mkEnableOption "Darkman service and integration";
customLightModeScript = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = "Path to custom light mode script";
};
customDarkModeScript = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = "Path to custom dark mode script";
};
};
config = lib.mkIf config.modules.darkman.enable {
services.darkman = {
enable = true;
darkModeScripts =
optionalAttrs (config.modules.darkman.customDarkModeScript != null) {
custom = config.modules.darkman.customDarkModeScript;
}
// optionalAttrs (config.modules.stylix.enable) {
stylix = switch-theme "dark";
};
lightModeScripts =
optionalAttrs (config.modules.darkman.customLightModeScript != null) {
custom = config.modules.darkman.customLightModeScript;
}
// optionalAttrs (config.modules.stylix.enable) {
stylix = switch-theme "light";
};
settings.usegeoclue = true;
};
};
}