{
  config,
  pkgs,
  lib,
  inputs,
  system,
  ...
}: let
  alejandra = lib.getExe inputs.alejandra.packages.${system}.default;
  nil = lib.getExe inputs.nil.packages.${system}.default;
in {
  programs.helix = {
    enable = true;
    package = inputs.helix.packages."${system}".helix;
    settings = {
      theme = "solarized_peninsula";
      editor = {
        auto-pairs = false;
        file-picker.hidden = false;
        lsp.display-messages = true;
        line-number = "relative";
      };
      keys = {
        normal = {
          ";" = "command_mode";
          C-p = "file_picker";
          C-b = "buffer_picker";
          "{" = ["goto_prev_paragraph" "collapse_selection"];
          "}" = ["goto_next_paragraph" "collapse_selection"];
          "0" = "goto_line_start";
          "$" = "goto_line_end";
          "^" = "goto_first_nonwhitespace";
          G = "goto_file_end";
          V = ["select_mode" "extend_to_line_bounds"];
        };
        select = {
          "{" = ["extend_to_line_bounds" "goto_prev_paragraph"];
          "}" = ["extend_to_line_bounds" "goto_next_paragraph"];
          "0" = "goto_line_start";
          "$" = "goto_line_end";
          "^" = "goto_first_nonwhitespace";
          G = "goto_file_end";
          D = ["extend_to_line_bounds" "delete_selection" "normal_mode"];
          C = ["goto_line_start" "extend_to_line_bounds" "change_selection"];
          "%" = "match_brackets";
          V = ["extend_to_line_bounds"];

          i = "select_textobject_inner";
          a = "select_textobject_around";

          k = ["extend_line_up" "extend_to_line_bounds"];
          j = ["extend_line_down" "extend_to_line_bounds"];
        };
      };
    };
    themes = {
      solarized_peninsula = {
        palette = {
          base03 = "#002b36";
          base025 = "#03303b";
          base02 = "#073642";
          base0175 = "#16404b";
          base015 = "#2c4f59";
          base01 = "#586e75";
          base00 = "#657b83";
          base0 = "#839496";
          base1 = "#93a1a1";
          base2 = "#eee8d5";
          base3 = "#fdf6e3";
          yellow = "#b58900";
          orange = "#cb4b16";
          red = "#dc322f";
          magenta = "#d33682";
          violet = "#6c71c4";
          blue = "#268bd2";
          cyan = "#2aa198";
          green = "#859900";
          transparent = "none";
          gray = "#665c54";
          dark-gray = "#3c3836";
          white = "#fbf1c7";
          black = "#282828";
        };
        "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";
      };
    };
    languages = [
      {
        name = "nix";
        auto-format = true;
        language-server = {command = nil;};
        formatter = {
          command = alejandra;
          args = ["-q"];
        };
      }
    ];
  };
}