{ pkgs, lib, ... }: {
  # Set editor
  environment.variables.EDITOR = "hx";

  home-manager.users.agatha = {
    # Formatters/Language Servers that Helix uses
    home.packages = with pkgs; [ nixfmt ];

    programs = {
      helix = {
        enable = true;
        package = pkgs.helix;
        languages = {
          language = [{
            name = "nix";
            auto-format = true;
            formatter = { command = "nixfmt"; };
          }];
        };
        settings = {
          theme = lib.mkDefault "paramount-dark";
          editor = {
            middle-click-paste = false;
            scroll-lines = 4;
            shell = [ "fish" "-c" ];
            bufferline = "multiple";

            statusline = {
              left = [ "mode" "spinner" "file-name" ];
              right = [
                "workspace-diagnostics"
                "position"
                "position-percentage"
                "spacer"
                "file-encoding"
                "file-line-ending"
                "file-type"
              ];
              separator = " ";
            };

            cursor-shape = { insert = "bar"; };

            whitespace.render = {
              tab = "all";
              space = "all";
              newline = "none";
            };

            whitespace.characters = {
              tab = "·";
              tabpad = "·";
            };

            indent-guides = {
              render = true;
              character = "┊";
              skip-levels = 1;
            };
          };

          keys = {
            insert = {
              "C-left" = [ "move_prev_word_start" "collapse_selection" ];
              "C-right" = [ "move_next_word_start" "collapse_selection" ];
            };

            normal = {
              "C-left" = [ "move_prev_word_start" "collapse_selection" ];
              "C-right" = [ "move_next_word_start" "collapse_selection" ];
              "A-d" = "delete_selection";
              "d" = "delete_selection_noyank";
            };
          };
        };

        themes = {
          paramount-dark = let
            medium_gray = "#767676";
            lighter_black = "#4E4E4E";
            lighter_gray = "#C6C6C6";
            light_red = "#E32791";
            orange = "#D75F5F";
            light_green = "#5FD7A7";
            dark_purple = "#af5fd7";
            light_purple = "#a790d5";
            dark_yellow = "#A89C14";
          in {
            inherits = "hex_lavender";

            "ui.background" = { bg = "black"; };
            "ui.gutter" = { bg = "black"; };
            "ui.menu.selected" = {
              fg = lighter_gray;
              bg = light_purple;
            };
            "comment" = {
              fg = lighter_black;
              modifiers = [ "italic" ];
            };
            "constant" = light_purple;
            "string" = light_purple;
            "variable" = lighter_gray;
            "function" = lighter_gray;
            "keyword.function" = lighter_gray;
            "keyword.control" = medium_gray;
            "keyword.control.import" = medium_gray;
            "operator" = {
              fg = lighter_gray;
              modifiers = [ "bold" ];
            };
            "function.special" = medium_gray;
            "type" = lighter_gray;
            "tag" = {
              fg = medium_gray;
              modifiers = [ "italic" ];
            };
            "punctuation" = { fg = medium_gray; };
            "ui.linenr" = medium_gray;
            "ui.linenr.selected" = { fg = light_purple; };
            "string.special.url" = {
              fg = lighter_gray;
              underline = {
                color = lighter_gray;
                style = "line";
              };
              modifiers = [ "underlined" ];
            };
            "markup.link" = {
              fg = lighter_gray;
              underline = {
                color = lighter_gray;
                style = "line";
              };
              modifiers = [ "underlined" ];
            };
            "diagnostic.error" = {
              underline = {
                color = light_red;
                style = "curl";
              };
            };
            "error" = light_red;
            "diagnostic.hint" = {
              underline = {
                color = lighter_gray;
                style = "curl";
              };
            };
            "hint" = lighter_gray;
            "ui.selection" = {
              fg = lighter_gray;
              bg = light_purple;
            };
            "ui.selection.primary" = {
              fg = lighter_gray;
              bg = light_purple;
            };
            "warning" = orange;
            "diagnostic.warning" = {
              underline = {
                color = orange;
                style = "curl";
              };
            };
            "diff.plus" = light_green;
            "diff.minus" = light_red;
            "diff.delta" = dark_yellow;
            "ui.cursor" = { bg = lighter_gray; };
            "ui.cursor.insert" = { bg = light_purple; };
            "ui.cursor.select" = { bg = dark_purple; };
            "ui.cursor.match" = {
              fg = lighter_gray;
              bg = medium_gray;
            };
            "namespace" = medium_gray;
          };
          paramount-light = let
            medium_gray = "#767676";
            actual_white = "#FFFFFF";
            light_black = "#262626";
            dark_red = "#C30771";
            orange = "#D75F5F";
            dark_green = "#10A778";
            dark_purple = "#af5fd7";
            dark_yellow = "#A89C14";
          in {
            inherits = "spacebones_light";

            "ui.background" = { bg = actual_white; };
            "ui.gutter" = { bg = actual_white; };
            "ui.menu.selected" = {
              fg = light_black;
              bg = dark_purple;
            };
            "comment" = {
              fg = "dark_gray";
              modifiers = [ "italic" ];
            };
            "constant" = dark_purple;
            "string" = dark_purple;
            "variable" = light_black;
            "variable.parameter" = light_black;
            "function" = light_black;
            "keyword" = medium_gray;
            "keyword.function" = light_black;
            "keyword.control" = medium_gray;
            "keyword.control.import" = medium_gray;
            "operator" = {
              fg = light_black;
              modifiers = [ "bold" ];
            };
            "function.special" = medium_gray;
            "function.macro" = medium_gray;
            "type" = light_black;
            "type.builtin" = light_black;
            "tag" = {
              fg = medium_gray;
              modifiers = [ "italic" ];
            };
            "punctuation" = { fg = medium_gray; };
            "ui.linenr" = medium_gray;
            "ui.linenr.selected" = { fg = dark_purple; };
            "string.special.url" = {
              fg = light_black;
              underline = {
                color = light_black;
                style = "line";
              };
              modifiers = [ "underlined" ];
            };
            "markup.link" = {
              fg = light_black;
              underline = {
                color = light_black;
                style = "line";
              };
              modifiers = [ "underlined" ];
            };
            "diagnostic.error" = {
              underline = {
                color = dark_red;
                style = "curl";
              };
            };
            "error" = dark_red;
            "diagnostic.hint" = {
              underline = {
                color = light_black;
                style = "curl";
              };
            };
            "hint" = light_black;
            "ui.selection" = {
              fg = light_black;
              bg = dark_purple;
            };
            "ui.selection.primary" = {
              fg = light_black;
              bg = dark_purple;
            };
            "warning" = orange;
            "diagnostic.warning" = {
              underline = {
                color = orange;
                style = "curl";
              };
            };
            "diff.plus" = dark_green;
            "diff.minus" = dark_red;
            "diff.delta" = dark_yellow;
            "ui.cursor" = { bg = light_black; };
            "ui.cursor.insert" = { bg = dark_purple; };
            "ui.cursor.select" = { bg = dark_purple; };
            "ui.cursor.match" = {
              fg = light_black;
              bg = medium_gray;
            };
            "namespace" = medium_gray;
            "special" = medium_gray;
          };
        };
      };
    };
  };
}
