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

View file

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