{ pkgs, config, lib, ... }: with lib; with builtins; let cfg = config.vim.presence.presence-nvim; in { options.vim.presence.presence-nvim = { enable = mkEnableOption "Enable presence.nvim plugin"; image_text = mkOption { type = types.str; default = "The One True Text Editor"; description = "Text displayed when hovering over the Neovim image"; }; main_image = mkOption { type = types.str; default = "neovim"; description = "Main image to be displayed"; }; client_id = mkOption { type = types.str; default = "859194972255989790"; description = "Client ID of the application"; }; auto_update = mkOption { type = types.bool; default = true; description = "Automatically update the presence"; }; enable_line_number = mkOption { type = types.bool; default = false; description = "Show line number on the RPC item"; }; buttons = mkOption { type = types.bool; default = true; description = "Show buttons on the RPC item"; }; show_time = mkOption { type = types.bool; default = true; description = "Show time on the RPC item"; }; rich_presence = { editing_text = mkOption { type = types.str; default = "Editing %s"; description = "Text displayed when editing a file"; }; file_explorer_text = mkOption { type = types.str; default = "Browsing %s"; description = "Text displayed when browsing files"; }; git_commit_text = mkOption { type = types.str; default = "Committing changes"; description = "Text displayed when committing changes"; }; plugin_manager_text = mkOption { type = types.str; default = "Managing plugins"; description = "Text displayed when managing plugins"; }; reading_text = mkOption { type = types.str; default = "Reading %s"; description = "Text displayed when reading a file"; }; workspace_text = mkOption { type = types.str; default = "Working on %s"; description = "Text displayed when working on a project"; }; line_number_text = mkOption { type = types.str; default = "Line %s out of %s"; description = "Text displayed when showing line number"; }; }; }; config = mkIf cfg.enable { vim.startPlugins = ["presence-nvim"]; vim.luaConfigRC.presence-nvim = nvim.dag.entryAnywhere '' -- Description of each option can be found in https://github.com/andweeb/presence.nvim require("presence").setup({ -- General options auto_update = true, neovim_image_text = "${cfg.image_text}", main_image = "${cfg.main_image}", client_id = "${cfg.client_id}", log_level = nil, debounce_timeout = 10, enable_line_number = "${boolToString cfg.enable_line_number}", blacklist = {}, buttons = "${boolToString cfg.buttons}", file_assets = {}, show_time = "${boolToString cfg.show_time}", -- Rich Presence text options editing_text = "${cfg.rich_presence.editing_text}", file_explorer_text = "${cfg.rich_presence.file_explorer_text}", git_commit_text = "${cfg.rich_presence.git_commit_text}", plugin_manager_text = "${cfg.rich_presence.plugin_manager_text}", reading_text = "${cfg.rich_presence.reading_text}", workspace_text = "${cfg.rich_presence.workspace_text}", line_number_text = "${cfg.rich_presence.line_number_text}", }) ''; }; }