Skip to content

Commit 965f4b0

Browse files
committed
colorschemes/palette: init
1 parent 7d0b2c2 commit 965f4b0

File tree

3 files changed

+206
-0
lines changed

3 files changed

+206
-0
lines changed

plugins/colorschemes/palette.nix

+150
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
{
2+
lib,
3+
helpers,
4+
config,
5+
pkgs,
6+
...
7+
}:
8+
with lib; let
9+
cfg = config.colorschemes.palette;
10+
in {
11+
meta.maintainers = [maintainers.GaetanLepage];
12+
13+
options.colorschemes.palette =
14+
helpers.extraOptionsOptions
15+
// {
16+
enable = mkEnableOption "palette.nvim";
17+
18+
package = helpers.mkPackageOption "palette.nvim" pkgs.vimPlugins.palette-nvim;
19+
20+
palettes = {
21+
main = helpers.defaultNullOpts.mkStr "dark" ''
22+
Palette for the main colors.
23+
'';
24+
25+
accent = helpers.defaultNullOpts.mkStr "pastel" ''
26+
Palette for the accent colors.
27+
'';
28+
29+
state = helpers.defaultNullOpts.mkStr "pastel" ''
30+
Palette for the state colors.
31+
'';
32+
};
33+
34+
customPalettes =
35+
mapAttrs
36+
(
37+
name: colorNames:
38+
helpers.defaultNullOpts.mkAttrsOf (
39+
types.submodule {
40+
options =
41+
genAttrs
42+
colorNames
43+
(
44+
colorName:
45+
mkOption {
46+
type = types.str;
47+
description = "Definition of color '${colorName}'";
48+
}
49+
);
50+
}
51+
)
52+
"{}"
53+
''
54+
Custom palettes for ${name} colors.
55+
''
56+
) {
57+
main = [
58+
"color0"
59+
"color1"
60+
"color2"
61+
"color3"
62+
"color4"
63+
"color5"
64+
"color6"
65+
"color7"
66+
"color8"
67+
];
68+
69+
accent = [
70+
"accent0"
71+
"accent1"
72+
"accent2"
73+
"accent3"
74+
"accent4"
75+
"accent5"
76+
"accent6"
77+
];
78+
79+
state = [
80+
"error"
81+
"warning"
82+
"hint"
83+
"ok"
84+
"info"
85+
];
86+
};
87+
88+
italics = helpers.defaultNullOpts.mkBool true ''
89+
Whether to use italics.
90+
'';
91+
92+
transparentBackground = helpers.defaultNullOpts.mkBool false ''
93+
Whether to use transparent background.
94+
'';
95+
96+
caching = helpers.defaultNullOpts.mkBool true ''
97+
Whether to enable caching.
98+
'';
99+
100+
cacheDir =
101+
helpers.defaultNullOpts.mkStr
102+
''{__raw = "vim.fn.stdpath('cache') .. '/palette'";}''
103+
"Cache directory.";
104+
};
105+
106+
config = mkIf cfg.enable {
107+
assertions =
108+
mapAttrsToList (
109+
name: defaultPaletteNames: let
110+
palette = cfg.palettes.${name};
111+
allowedPaletteNames = (attrNames cfg.customPalettes.${name}) ++ defaultPaletteNames;
112+
in {
113+
assertion = isString palette -> elem palette allowedPaletteNames;
114+
message = ''
115+
Nixvim: `colorschemes.palette.palettes.${name}` (${palette}") is not part of the allowed ${name} palette names (${concatStringsSep " " allowedPaletteNames}).
116+
'';
117+
}
118+
)
119+
{
120+
main = ["dark" "light"];
121+
accent = ["pastel" "dark" "bright"];
122+
state = ["pastel" "dark" "bright"];
123+
};
124+
125+
colorscheme = "palette";
126+
127+
extraPlugins = [
128+
cfg.package
129+
# Annoyingly, lspconfig is required, otherwise this line is breaking:
130+
# https://github.com/roobert/palette.nvim/blob/a808c190a4f74f73782302152ebf323660d8db5f/lua/palette/init.lua#L45https://github.com/roobert/palette.nvim/blob/a808c190a4f74f73782302152ebf323660d8db5f/lua/palette/init.lua#L45
131+
# An issue has been opened upstream to warn the maintainer: https://github.com/roobert/palette.nvim/issues/2
132+
pkgs.vimPlugins.nvim-lspconfig
133+
];
134+
135+
extraConfigLuaPre = let
136+
setupOptions = with cfg;
137+
{
138+
inherit palettes;
139+
custom_palettes = customPalettes;
140+
inherit italics;
141+
transparent_background = transparentBackground;
142+
inherit caching;
143+
cache_dir = cacheDir;
144+
}
145+
// cfg.extraOptions;
146+
in ''
147+
require('palette').setup(${helpers.toLuaObject setupOptions})
148+
'';
149+
};
150+
}

plugins/default.nix

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
./colorschemes/one.nix
1717
./colorschemes/onedark.nix
1818
./colorschemes/oxocarbon.nix
19+
./colorschemes/palette.nix
1920
./colorschemes/poimandres.nix
2021
./colorschemes/rose-pine.nix
2122
./colorschemes/tokyonight.nix
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
empty = {
3+
colorschemes.palette.enable = true;
4+
};
5+
6+
defaults = {
7+
colorschemes.palette = {
8+
enable = true;
9+
10+
palettes = {
11+
main = "dark";
12+
accent = "pastel";
13+
state = "pastel";
14+
};
15+
customPalettes = {
16+
main = {};
17+
accent = {};
18+
state = {};
19+
};
20+
italics = true;
21+
transparentBackground = false;
22+
caching = true;
23+
cacheDir.__raw = "vim.fn.stdpath('cache') .. '/palette'";
24+
};
25+
};
26+
27+
example-custom-palette = {
28+
colorschemes.palette = {
29+
enable = true;
30+
31+
palettes = {
32+
main = "dust_dusk";
33+
};
34+
35+
customPalettes = {
36+
main = {
37+
dust_dusk = {
38+
color0 = "#121527";
39+
color1 = "#1A1E39";
40+
color2 = "#232A4D";
41+
color3 = "#3E4D89";
42+
color4 = "#687BBA";
43+
color5 = "#A4B1D6";
44+
color6 = "#bdbfc9";
45+
color7 = "#DFE5F1";
46+
color8 = "#e9e9ed";
47+
};
48+
};
49+
};
50+
51+
italics = true;
52+
transparentBackground = false;
53+
};
54+
};
55+
}

0 commit comments

Comments
 (0)