1
0
Fork 0
mirror of https://github.com/nix-community/nixvim.git synced 2025-11-08 19:46:06 +01:00

plugins/alpha: migrate to mkNeovimPlugin

This commit is contained in:
Heitor Augusto 2025-02-27 19:12:51 -03:00 committed by Gaétan Lepage
parent 68b07c2c34
commit deb32aecac
2 changed files with 110 additions and 171 deletions

View file

@ -1,79 +1,18 @@
{
lib,
config,
pkgs,
...
}:
let
inherit (lib) types mkOption;
{ lib, ... }:
lib.nixvim.plugins.mkNeovimPlugin {
name = "alpha";
package = "alpha-nvim";
cfg = config.plugins.alpha;
maintainers = [ lib.maintainers.HeitorAugustoLN ];
sectionType = types.submodule {
freeformType = with types; attrsOf anything;
options = {
type = mkOption {
type = types.enum [
"button"
"group"
"padding"
"text"
"terminal"
# TODO Added 2025-10-26: remove after 26.05
optionsRenamedToSettings = [
"opts"
"layout"
];
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";
};
};
};
in
{
options = {
plugins.alpha = {
enable = lib.mkEnableOption "alpha-nvim";
package = lib.mkPackageOption pkgs "alpha-nvim" {
default = [
"vimPlugins"
"alpha-nvim"
];
};
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.";
};
layout = mkOption {
type = with types; either (maybeRaw str) (listOf sectionType);
default = [ ];
description = "List of sections to layout for the dashboard";
example = [
settingsExample = {
layout = [
{
type = "padding";
val = 2;
@ -103,13 +42,13 @@ in
{
type = "button";
val = " New file";
on_press.__raw = "function() vim.cmd[[ene]] end";
on_press = lib.nixvim.nestedLiteralLua "function() vim.cmd[[ene]] end";
opts.shortcut = "n";
}
{
type = "button";
val = " Quit Neovim";
on_press.__raw = "function() vim.cmd[[qa]] end";
on_press = lib.nixvim.nestedLiteralLua "function() vim.cmd[[qa]] end";
opts.shortcut = "q";
}
];
@ -129,49 +68,46 @@ in
];
};
opts = lib.nixvim.mkNullOrOption (with types; attrsOf anything) ''
Optional global options.
'';
};
};
config =
extraOptions = {
theme = lib.mkOption {
type =
with lib.types;
let
layoutDefined = cfg.layout != [ ];
themeDefined = cfg.theme != null;
# TODO: deprecated 2025-10-30, remove after 26.05
old = nullOr (maybeRaw str);
new = nullOr str;
in
lib.mkIf cfg.enable {
extraPlugins = [ cfg.package ];
old // { inherit (new) description; };
default = null;
example = "dashboard";
description = "You can directly use a pre-defined theme.";
};
};
assertions = lib.nixvim.mkAssertions "plugins.alpha" [
{
assertion = themeDefined || layoutDefined;
callSetup = false;
extraConfig = cfg: opts: {
assertions = lib.nixvim.mkAssertions "plugins.alpha" {
assertion = cfg.theme != null -> builtins.isString cfg.theme;
message = ''
You have to either set a `theme` or define some sections in `layout`.
Defining `${opts.theme}` as raw lua is deprecated. You can define `${opts.settings}` as raw lua instead:
${opts.settings} = lib.nixvim.mkRaw ${lib.generators.toPretty { } cfg.theme.__raw};
'';
}
{
assertion = !(themeDefined && layoutDefined);
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.
'';
}
];
extraConfigLua =
let
setupOptions =
if themeDefined then
cfg.theme
};
plugins.alpha = {
settings = lib.mkIf (cfg.theme != null) (
lib.mkDerivedConfig opts.theme (
value:
if builtins.isString value then
lib.nixvim.mkRaw "require('alpha.themes.${value}').config"
else
(with cfg; {
inherit layout opts;
});
in
''
require('alpha').setup(${lib.nixvim.toLuaObject setupOptions})
value
)
);
luaConfig.content = ''
require('alpha').setup(${lib.nixvim.toLuaObject cfg.settings})
require('alpha.term')
'';
};
};
}

View file

@ -1,22 +1,25 @@
{ lib, ... }:
{
theme = {
plugins.alpha = {
enable = true;
theme = "dashboard";
};
};
theme-lua = {
theme-raw-settings = {
plugins.alpha = {
enable = true;
theme.__raw = "require'alpha.themes.startify'.config";
settings = lib.nixvim.mkRaw "require('alpha.themes.dashboard').config";
};
};
terminal = {
plugins.alpha = {
enable = true;
layout = [
settings.layout = [
{
type = "terminal";
command = "echo 'Welcome to Nixvim!'";
@ -34,7 +37,7 @@
plugins.alpha = {
enable = true;
layout = [
settings.layout = [
{
type = "padding";
val = 2;
@ -88,7 +91,7 @@
};
}
];
opts = {
settings.opts = {
margin = 0;
noautocmd = true;
@ -104,7 +107,7 @@
plugins.web-devicons.enable = false;
plugins.alpha = {
enable = true;
theme = "dashboard";
settings = lib.nixvim.mkRaw "require('alpha.themes.dashboard').config";
};
};
}