mirror of
https://github.com/nix-community/home-manager
synced 2024-09-12 06:16:33 +02:00
These (and the `*MD` functions apart from `literalMD`) are now no-ops in nixpkgs and serve no purpose other than to add additional noise and potentially mislead people into thinking unmarked DocBook documentation will still be accepted. Note that if backporting changes including documentation to 23.05, the `mdDoc` calls will need to be re-added. To reproduce this commit, run: $ NIX_PATH=nixpkgs=flake:nixpkgs/e7e69199f0372364a6106a1e735f68604f4c5a25 \ nix shell nixpkgs#coreutils \ -c find . -name '*.nix' \ -exec nix run -- github:emilazy/nix-doc-munge/98dadf1f77351c2ba5dcb709a2a171d655f15099 \ --strip {} + $ ./format
185 lines
5.9 KiB
Nix
185 lines
5.9 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.programs.helix;
|
|
tomlFormat = pkgs.formats.toml { };
|
|
in {
|
|
meta.maintainers = [ hm.maintainers.Philipp-M ];
|
|
|
|
options.programs.helix = {
|
|
enable = mkEnableOption "helix text editor";
|
|
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.helix;
|
|
defaultText = literalExpression "pkgs.helix";
|
|
description = "The package to use for helix.";
|
|
};
|
|
|
|
defaultEditor = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = ''
|
|
Whether to configure {command}`hx` as the default
|
|
editor using the {env}`EDITOR` environment variable.
|
|
'';
|
|
};
|
|
|
|
settings = mkOption {
|
|
type = tomlFormat.type;
|
|
default = { };
|
|
example = literalExpression ''
|
|
{
|
|
theme = "base16";
|
|
editor = {
|
|
line-number = "relative";
|
|
lsp.display-messages = true;
|
|
};
|
|
keys.normal = {
|
|
space.space = "file_picker";
|
|
space.w = ":w";
|
|
space.q = ":q";
|
|
esc = [ "collapse_selection" "keep_primary_selection" ];
|
|
};
|
|
}
|
|
'';
|
|
description = ''
|
|
Configuration written to
|
|
{file}`$XDG_CONFIG_HOME/helix/config.toml`.
|
|
|
|
See <https://docs.helix-editor.com/configuration.html>
|
|
for the full list of options.
|
|
'';
|
|
};
|
|
|
|
languages = mkOption {
|
|
type = with types;
|
|
coercedTo (listOf tomlFormat.type) (language:
|
|
lib.warn ''
|
|
The syntax of programs.helix.languages has changed.
|
|
It now generates the whole languages.toml file instead of just the language array in that file.
|
|
|
|
Use
|
|
programs.helix.languages = { language = <languages list>; }
|
|
instead.
|
|
'' { inherit language; }) (addCheck tomlFormat.type builtins.isAttrs);
|
|
default = { };
|
|
example = literalExpression ''
|
|
{
|
|
# the language-server option currently requires helix from the master branch at https://github.com/helix-editor/helix/
|
|
language-server.typescript-language-server = with pkgs.nodePackages; {
|
|
command = "''${typescript-language-server}/bin/typescript-language-server";
|
|
args = [ "--stdio" "--tsserver-path=''${typescript}/lib/node_modules/typescript/lib" ];
|
|
};
|
|
|
|
language = [{
|
|
name = "rust";
|
|
auto-format = false;
|
|
}];
|
|
}
|
|
'';
|
|
description = ''
|
|
Language specific configuration at
|
|
{file}`$XDG_CONFIG_HOME/helix/languages.toml`.
|
|
|
|
See <https://docs.helix-editor.com/languages.html>
|
|
for more information.
|
|
'';
|
|
};
|
|
|
|
themes = mkOption {
|
|
type = types.attrsOf tomlFormat.type;
|
|
default = { };
|
|
example = literalExpression ''
|
|
{
|
|
base16 = let
|
|
transparent = "none";
|
|
gray = "#665c54";
|
|
dark-gray = "#3c3836";
|
|
white = "#fbf1c7";
|
|
black = "#282828";
|
|
red = "#fb4934";
|
|
green = "#b8bb26";
|
|
yellow = "#fabd2f";
|
|
orange = "#fe8019";
|
|
blue = "#83a598";
|
|
magenta = "#d3869b";
|
|
cyan = "#8ec07c";
|
|
in {
|
|
"ui.menu" = transparent;
|
|
"ui.menu.selected" = { modifiers = [ "reversed" ]; };
|
|
"ui.linenr" = { fg = gray; bg = dark-gray; };
|
|
"ui.popup" = { modifiers = [ "reversed" ]; };
|
|
"ui.linenr.selected" = { fg = white; bg = black; modifiers = [ "bold" ]; };
|
|
"ui.selection" = { fg = black; bg = blue; };
|
|
"ui.selection.primary" = { modifiers = [ "reversed" ]; };
|
|
"comment" = { fg = gray; };
|
|
"ui.statusline" = { fg = white; bg = dark-gray; };
|
|
"ui.statusline.inactive" = { fg = dark-gray; bg = white; };
|
|
"ui.help" = { fg = dark-gray; bg = white; };
|
|
"ui.cursor" = { modifiers = [ "reversed" ]; };
|
|
"variable" = red;
|
|
"variable.builtin" = orange;
|
|
"constant.numeric" = orange;
|
|
"constant" = orange;
|
|
"attributes" = yellow;
|
|
"type" = yellow;
|
|
"ui.cursor.match" = { fg = yellow; modifiers = [ "underlined" ]; };
|
|
"string" = green;
|
|
"variable.other.member" = red;
|
|
"constant.character.escape" = cyan;
|
|
"function" = blue;
|
|
"constructor" = blue;
|
|
"special" = blue;
|
|
"keyword" = magenta;
|
|
"label" = magenta;
|
|
"namespace" = blue;
|
|
"diff.plus" = green;
|
|
"diff.delta" = yellow;
|
|
"diff.minus" = red;
|
|
"diagnostic" = { modifiers = [ "underlined" ]; };
|
|
"ui.gutter" = { bg = black; };
|
|
"info" = blue;
|
|
"hint" = dark-gray;
|
|
"debug" = dark-gray;
|
|
"warning" = yellow;
|
|
"error" = red;
|
|
};
|
|
}
|
|
'';
|
|
description = ''
|
|
Each theme is written to
|
|
{file}`$XDG_CONFIG_HOME/helix/themes/theme-name.toml`.
|
|
Where the name of each attribute is the theme-name (in the example "base16").
|
|
|
|
See <https://docs.helix-editor.com/themes.html>
|
|
for the full list of options.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
home.packages = [ cfg.package ];
|
|
|
|
home.sessionVariables = mkIf cfg.defaultEditor { EDITOR = "hx"; };
|
|
|
|
xdg.configFile = let
|
|
settings = {
|
|
"helix/config.toml" = mkIf (cfg.settings != { }) {
|
|
source = tomlFormat.generate "helix-config" cfg.settings;
|
|
};
|
|
"helix/languages.toml" = mkIf (cfg.languages != { }) {
|
|
source = tomlFormat.generate "helix-languages-config" cfg.languages;
|
|
};
|
|
};
|
|
|
|
themes = (mapAttrs' (n: v:
|
|
nameValuePair "helix/themes/${n}.toml" {
|
|
source = tomlFormat.generate "helix-theme-${n}" v;
|
|
}) cfg.themes);
|
|
in settings // themes;
|
|
};
|
|
}
|