{ lib, pkgs, config, ... }: let cfg = config.programs.rio; settingsFormat = pkgs.formats.toml { }; in { options.programs.rio = { enable = lib.mkEnableOption null // { description = lib.mdDoc '' Enable Rio, a terminal built to run everywhere, as a native desktop applications by Rust/WebGPU or even in the browsers powered by WebAssembly/WebGPU. ''; }; package = lib.mkPackageOption pkgs "rio" { }; settings = lib.mkOption { type = settingsFormat.type; default = { }; description = '' Configuration written to $XDG_CONFIG_HOME/rio/config.toml. See for options. ''; }; }; meta.maintainers = [ lib.maintainers.otavio ]; config = lib.mkIf cfg.enable (lib.mkMerge [ { home.packages = [ cfg.package ]; } # Only manage configuration if not empty (lib.mkIf (cfg.settings != { }) { xdg.configFile."rio/config.toml".source = if lib.isPath cfg.settings then cfg.settings else settingsFormat.generate "rio.toml" cfg.settings; }) ]); }