mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-20 16:15:43 +02:00
Merge 03a6663aef
into fef045cb91
This commit is contained in:
commit
9af4b90430
1 changed files with 155 additions and 126 deletions
|
@ -1,86 +1,74 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
options,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{ lib, ... }:
|
||||
let
|
||||
inherit (lib) types mkOption;
|
||||
|
||||
cfg = config.plugins.alpha;
|
||||
|
||||
sectionType = types.submodule {
|
||||
freeformType = with types; attrsOf anything;
|
||||
options = {
|
||||
type = mkOption {
|
||||
type = types.enum [
|
||||
"button"
|
||||
"group"
|
||||
"padding"
|
||||
"text"
|
||||
"terminal"
|
||||
];
|
||||
description = "Type of section";
|
||||
};
|
||||
|
||||
val = lib.nixvim.mkNullOrOption (
|
||||
with types;
|
||||
nullOr (oneOf [
|
||||
|
||||
# "button", "text"
|
||||
(maybeRaw str)
|
||||
# "padding"
|
||||
int
|
||||
(listOf (
|
||||
either
|
||||
# "text" (list of strings)
|
||||
str
|
||||
# "group"
|
||||
(attrsOf anything)
|
||||
))
|
||||
])
|
||||
) "Value for section";
|
||||
|
||||
opts = mkOption {
|
||||
type = with types; attrsOf anything;
|
||||
default = { };
|
||||
description = "Additional options for the section";
|
||||
};
|
||||
};
|
||||
};
|
||||
inherit (lib) mkOption types;
|
||||
inherit (lib.nixvim)
|
||||
defaultNullOpts
|
||||
mkAssertions
|
||||
mkRaw
|
||||
nestedLiteralLua
|
||||
toLuaObject
|
||||
;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
plugins.alpha = {
|
||||
enable = lib.mkEnableOption "alpha-nvim";
|
||||
lib.nixvim.plugins.mkNeovimPlugin {
|
||||
name = "alpha";
|
||||
packPathName = "alpha-nvim";
|
||||
package = "alpha-nvim";
|
||||
|
||||
package = lib.mkPackageOption pkgs "alpha-nvim" {
|
||||
default = [
|
||||
"vimPlugins"
|
||||
"alpha-nvim"
|
||||
];
|
||||
};
|
||||
maintainers = [ lib.maintainers.HeitorAugustoLN ];
|
||||
|
||||
# TODO: deprecated 2024-08-29 remove after 24.11
|
||||
iconsEnabled = mkOption {
|
||||
type = types.bool;
|
||||
description = "Toggle icon support. Installs nvim-web-devicons.";
|
||||
visible = false;
|
||||
};
|
||||
callSetup = false;
|
||||
|
||||
theme = mkOption {
|
||||
type = with types; nullOr (maybeRaw str);
|
||||
apply = v: if lib.isString v then lib.nixvim.mkRaw "require'alpha.themes.${v}'.config" else v;
|
||||
default = null;
|
||||
example = "dashboard";
|
||||
description = "You can directly use a pre-defined theme.";
|
||||
};
|
||||
settingsOptions = {
|
||||
layout =
|
||||
let
|
||||
sectionType = types.submodule {
|
||||
freeformType = with types; attrsOf anything;
|
||||
options = {
|
||||
type = mkOption {
|
||||
type = types.enum [
|
||||
"button"
|
||||
"group"
|
||||
"padding"
|
||||
"text"
|
||||
"terminal"
|
||||
];
|
||||
example = "button";
|
||||
description = ''
|
||||
The type of the section.
|
||||
'';
|
||||
};
|
||||
|
||||
layout = mkOption {
|
||||
type = with types; either (maybeRaw str) (listOf sectionType);
|
||||
default = [ ];
|
||||
description = "List of sections to layout for the dashboard";
|
||||
val = defaultNullOpts.mkNullableWithRaw' {
|
||||
type =
|
||||
with types;
|
||||
oneOf [
|
||||
# button || text
|
||||
(maybeRaw str)
|
||||
# padding
|
||||
int
|
||||
(listOf (
|
||||
either str # text (list of strings)
|
||||
(attrsOf anything) # group
|
||||
))
|
||||
];
|
||||
example = "Some text";
|
||||
description = ''
|
||||
The value for the section.
|
||||
'';
|
||||
};
|
||||
|
||||
opts = mkOption {
|
||||
type = with types; attrsOf anything;
|
||||
default = { };
|
||||
description = ''
|
||||
Additional options for the section.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
defaultNullOpts.mkNullableWithRaw' {
|
||||
type = with types; either str (listOf sectionType);
|
||||
example = [
|
||||
{
|
||||
type = "padding";
|
||||
|
@ -135,57 +123,108 @@ in
|
|||
};
|
||||
}
|
||||
];
|
||||
description = ''
|
||||
List of sections to layout for the dashboard
|
||||
'';
|
||||
};
|
||||
|
||||
opts = lib.nixvim.mkNullOrOption (with types; attrsOf anything) ''
|
||||
opts = defaultNullOpts.mkAttrsOf' {
|
||||
type = types.anything;
|
||||
description = ''
|
||||
Optional global options.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
let
|
||||
layoutDefined = cfg.layout != [ ];
|
||||
themeDefined = cfg.theme != null;
|
||||
|
||||
opt = options.plugins.alpha;
|
||||
in
|
||||
lib.mkIf cfg.enable {
|
||||
|
||||
# TODO: added 2024-09-20 remove after 24.11
|
||||
warnings = lib.nixvim.mkWarnings "plugins.alpha" {
|
||||
when = opt.iconsEnabled.isDefined;
|
||||
message = ''
|
||||
The option definition `plugins.alpha.iconsEnabled' in ${lib.showFiles opt.iconsEnabled.files} has been deprecated; please remove it.
|
||||
'';
|
||||
};
|
||||
|
||||
plugins.web-devicons =
|
||||
lib.mkIf
|
||||
(
|
||||
opt.iconsEnabled.isDefined
|
||||
&& cfg.iconsEnabled
|
||||
&& !(
|
||||
config.plugins.mini.enable
|
||||
&& config.plugins.mini.modules ? icons
|
||||
&& config.plugins.mini.mockDevIcons
|
||||
)
|
||||
)
|
||||
settingsExample = {
|
||||
layout = [
|
||||
{
|
||||
type = "padding";
|
||||
val = 2;
|
||||
}
|
||||
{
|
||||
type = "text";
|
||||
val = [
|
||||
"███╗ ██╗██╗██╗ ██╗██╗ ██╗██╗███╗ ███╗"
|
||||
"████╗ ██║██║╚██╗██╔╝██║ ██║██║████╗ ████║"
|
||||
"██╔██╗ ██║██║ ╚███╔╝ ██║ ██║██║██╔████╔██║"
|
||||
"██║╚██╗██║██║ ██╔██╗ ╚██╗ ██╔╝██║██║╚██╔╝██║"
|
||||
"██║ ╚████║██║██╔╝ ██╗ ╚████╔╝ ██║██║ ╚═╝ ██║"
|
||||
"╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝ ╚═══╝ ╚═╝╚═╝ ╚═╝"
|
||||
];
|
||||
opts = {
|
||||
position = "center";
|
||||
hl = "Type";
|
||||
};
|
||||
}
|
||||
{
|
||||
type = "padding";
|
||||
val = 2;
|
||||
}
|
||||
{
|
||||
type = "group";
|
||||
val = [
|
||||
{
|
||||
enable = lib.mkOverride 1490 true;
|
||||
};
|
||||
type = "button";
|
||||
val = " New file";
|
||||
on_press = nestedLiteralLua "function() vim.cmd[[ene]] end";
|
||||
opts.shortcut = "n";
|
||||
}
|
||||
{
|
||||
type = "button";
|
||||
val = " Quit Neovim";
|
||||
on_press = nestedLiteralLua "function() vim.cmd[[qa]] end";
|
||||
opts.shortcut = "q";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
type = "padding";
|
||||
val = 2;
|
||||
}
|
||||
{
|
||||
type = "text";
|
||||
val = "Inspiring quote here.";
|
||||
opts = {
|
||||
position = "center";
|
||||
hl = "Keyword";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
extraPlugins = [ cfg.package ];
|
||||
extraOptions = {
|
||||
theme = defaultNullOpts.mkStr' {
|
||||
description = ''
|
||||
The theme to use for the dashboard.
|
||||
'';
|
||||
example = "dashboard";
|
||||
apply =
|
||||
value: if builtins.isString value then mkRaw ''require("alpha.themes.${value}").config'' else value;
|
||||
};
|
||||
};
|
||||
|
||||
assertions = lib.nixvim.mkAssertions "plugins.alpha" [
|
||||
optionsRenamedToSettings = [
|
||||
"opts"
|
||||
"layout"
|
||||
];
|
||||
|
||||
extraConfig =
|
||||
cfg:
|
||||
let
|
||||
layoutDefined = cfg.settings.layout != null;
|
||||
themeDefined = cfg.theme != null;
|
||||
in
|
||||
{
|
||||
assertions = mkAssertions "plugins.alpha" [
|
||||
{
|
||||
assertion = themeDefined || layoutDefined;
|
||||
assertion = layoutDefined || themeDefined;
|
||||
message = ''
|
||||
You have to either set a `theme` or define some sections in `layout`.
|
||||
'';
|
||||
}
|
||||
{
|
||||
assertion = !(themeDefined && layoutDefined);
|
||||
assertion = !(themeDefined && toLuaObject cfg.settings != "{}");
|
||||
message = ''
|
||||
You can't define both a `theme` and custom options.
|
||||
Set `plugins.alpha.theme = null` if you want to configure alpha manually using the `layout` option.
|
||||
|
@ -193,19 +232,9 @@ in
|
|||
}
|
||||
];
|
||||
|
||||
extraConfigLua =
|
||||
let
|
||||
setupOptions =
|
||||
if themeDefined then
|
||||
cfg.theme
|
||||
else
|
||||
(with cfg; {
|
||||
inherit layout opts;
|
||||
});
|
||||
in
|
||||
''
|
||||
require('alpha').setup(${lib.nixvim.toLuaObject setupOptions})
|
||||
require('alpha.term')
|
||||
'';
|
||||
plugins.alpha.luaConfig.content = ''
|
||||
require('alpha').setup(${toLuaObject (if themeDefined then cfg.theme else cfg.settings)});
|
||||
require('alpha.term')
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue