{ config, lib, pkgs, ... }: with lib; let cfg = config.programs.zellij; yamlFormat = pkgs.formats.yaml { }; configDir = if pkgs.stdenv.isDarwin then "Library/Application Support/org.Zellij-Contributors.Zellij" else "${config.xdg.configHome}/zellij"; in { meta.maintainers = [ hm.maintainers.mainrs ]; options.programs.zellij = { enable = mkEnableOption "zellij"; package = mkOption { type = types.package; default = pkgs.zellij; defaultText = literalExpression "pkgs.zellij"; description = '' The zellij package to install. ''; }; settings = mkOption { type = yamlFormat.type; default = { }; example = literalExpression '' { theme = "custom"; themes.custom.fg = "#ffffff"; } ''; description = '' Configuration written to $XDG_CONFIG_HOME/zellij/config.yaml. See for the full list of options. ''; }; }; config = mkIf cfg.enable { home.packages = [ cfg.package ]; # Zellij switched from yaml to KDL in version 0.32.0: # https://github.com/zellij-org/zellij/releases/tag/v0.32.0 home.file."${configDir}/config.yaml" = mkIf (cfg.settings != { } && (versionOlder cfg.package.version "0.32.0")) { source = yamlFormat.generate "zellij.yaml" cfg.settings; }; home.file."${configDir}/config.kdl" = mkIf (cfg.settings != { } && (versionAtLeast cfg.package.version "0.32.0")) { text = lib.hm.generators.toKDL { } cfg.settings; }; }; }