{ config, lib, pkgs, ... }: with lib; let cfg = config.programs.zellij; yamlFormat = pkgs.formats.yaml { }; in { meta.maintainers = [ hm.maintainers.mainrs ]; options.programs.zellij = { enable = mkEnableOption (lib.mdDoc "zellij"); package = mkOption { type = types.package; default = pkgs.zellij; defaultText = literalExpression "pkgs.zellij"; description = lib.mdDoc '' The zellij package to install. ''; }; settings = mkOption { type = yamlFormat.type; default = { }; example = literalExpression '' { theme = "custom"; themes.custom.fg = "#ffffff"; } ''; description = lib.mdDoc '' Configuration written to {file}`$XDG_CONFIG_HOME/zellij/config.yaml`. See for the full list of options. ''; }; enableBashIntegration = mkEnableOption (lib.mdDoc "Bash integration") // { default = false; }; enableZshIntegration = mkEnableOption (lib.mdDoc "Zsh integration") // { default = false; }; enableFishIntegration = mkEnableOption (lib.mdDoc "Fish integration") // { default = false; }; }; 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 xdg.configFile."zellij/config.yaml" = mkIf (cfg.settings != { } && (versionOlder cfg.package.version "0.32.0")) { source = yamlFormat.generate "zellij.yaml" cfg.settings; }; xdg.configFile."zellij/config.kdl" = mkIf (cfg.settings != { } && (versionAtLeast cfg.package.version "0.32.0")) { text = lib.hm.generators.toKDL { } cfg.settings; }; programs.bash.initExtra = mkIf cfg.enableBashIntegration (mkOrder 200 '' eval "$(zellij setup --generate-auto-start bash)" ''); programs.zsh.initExtra = mkIf cfg.enableZshIntegration (mkOrder 200 '' eval "$(zellij setup --generate-auto-start zsh)" ''); programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration (mkOrder 200 '' eval (zellij setup --generate-auto-start fish | string collect) ''); }; }