{
  pkgs,
  config,
  lib,
  ...
}: let
  inherit (lib) mkIf nvim;
  inherit (nvim.vim) mkVimBool;

  cfg = config.vim.dashboard.startify;
in {
  config = mkIf cfg.enable {
    vim.startPlugins = with pkgs.vimPlugins; [vim-startify];

    vim.globals = {
      "startify_custom_header" =
        if cfg.customHeader == []
        then null
        else cfg.customHeader;
      "startify_custom_footer" =
        if cfg.customFooter == []
        then null
        else cfg.customFooter;
      "startify_bookmarks" = cfg.bookmarks;
      "startify_lists" = cfg.lists;
      "startify_change_to_dir" = mkVimBool cfg.changeToDir;
      "startify_change_to_vcs_root" = mkVimBool cfg.changeToVCRoot;
      "startify_change_cmd" = cfg.changeDirCmd;
      "startify_skiplist" = cfg.skipList;
      "startify_update_oldfiles" = mkVimBool cfg.updateOldFiles;
      "startify_session_autoload" = mkVimBool cfg.sessionAutoload;
      "startify_commands" = cfg.commands;
      "startify_files_number" = cfg.filesNumber;
      "startify_custom_indices" = cfg.customIndices;
      "startify_disable_at_vimenter" = mkVimBool cfg.disableOnStartup;
      "startify_enable_unsafe" = mkVimBool cfg.unsafe;
      "startify_padding_left" = cfg.paddingLeft;
      "startify_use_env" = mkVimBool cfg.useEnv;
      "startify_session_before_save" = cfg.sessionBeforeSave;
      "startify_session_persistence" = mkVimBool cfg.sessionPersistence;
      "startify_session_delete_buffers" = mkVimBool cfg.sessionDeleteBuffers;
      "startify_session_dir" = cfg.sessionDir;
      "startify_skiplist_server" = cfg.skipListServer;
      "startify_session_remove_lines" = cfg.sessionRemoveLines;
      "startify_session_savevars" = cfg.sessionSavevars;
      "startify_session_savecmds" = cfg.sessionSavecmds;
      "startify_session_sort" = mkVimBool cfg.sessionSort;
    };
  };
}