# This module defines global configuration for the xonsh.

{ config, lib, pkgs, ... }:

with lib;

let

  cfg = config.programs.xonsh;

in

{

  options = {

    programs.xonsh = {

      enable = mkOption {
        default = false;
        description = ''
          Whether to configure xonsh as an interactive shell.
        '';
        type = types.bool;
      };

      package = mkOption {
        type = types.package;
        example = literalExample "pkgs.xonsh.override { configFile = \"/path/to/xonshrc\"; }";
        description = ''
          xonsh package to use.
        '';
      };

      config = mkOption {
        default = "";
        description = "Control file to customize your shell behavior.";
        type = types.lines;
      };

    };

  };

  config = mkIf cfg.enable {

    environment.etc."xonshrc".text = cfg.config;

    environment.systemPackages = [ pkgs.xonsh ];

    environment.shells =
      [ "/run/current-system/sw/bin/xonsh"
        "/var/run/current-system/sw/bin/xonsh"
        "${pkgs.xonsh}/bin/xonsh"
      ];

  };

}