{ config, lib, pkgs, ... }: with lib; let cfg = config.programs.rtx; tomlFormat = pkgs.formats.toml { }; in { meta.maintainers = [ hm.maintainers.pedorich-n ]; options = { programs.rtx = { enable = mkEnableOption "RTX. Runtime Executor (asdf Rust clone)"; package = mkPackageOption pkgs "rtx" { }; enableBashIntegration = mkEnableOption "Bash Integration" // { default = true; }; enableZshIntegration = mkEnableOption "Zsh Integration" // { default = true; }; enableFishIntegration = mkEnableOption "Fish Integration" // { default = true; }; settings = mkOption { type = tomlFormat.type; default = { }; example = literalExpression '' tools = { node = "lts"; python = ["3.10" "3.11"]; }; settings = { verbose = false; experimental = false; }; ''; description = '' Settings written to {file}`$XDG_CONFIG_HOME/rtx/config.toml`. See for details on supported values. ::: {.warning} Modifying the `tools` section doesn't make RTX install them. You have to manually run `rtx install` to install the tools. ::: ''; }; }; }; config = mkIf cfg.enable { home.packages = [ cfg.package ]; xdg.configFile."rtx/config.toml" = mkIf (cfg.settings != { }) { source = tomlFormat.generate "rtx-settings" cfg.settings; }; programs = { bash.initExtra = mkIf cfg.enableBashIntegration '' eval "$(${getExe cfg.package} activate bash)" ''; zsh.initExtra = mkIf cfg.enableZshIntegration '' eval "$(${getExe cfg.package} activate zsh)" ''; fish.interactiveShellInit = mkIf cfg.enableFishIntegration '' ${getExe cfg.package} activate fish | source ''; }; }; }