229 lines
7.2 KiB
Nix
229 lines
7.2 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with lib; let
|
|
cfg = config.custom.programs.zed;
|
|
in {
|
|
options.custom.programs.zed = {
|
|
enable = mkOption {default = false;};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
home-manager.sharedModules = [
|
|
{
|
|
# https://zed.dev/
|
|
# https://github.com/zed-industries/zed
|
|
programs.zed-editor = {
|
|
enable = true;
|
|
|
|
extraPackages = with pkgs; [
|
|
alejandra # nix
|
|
nixd # nix
|
|
shellcheck # basher
|
|
shfmt # basher
|
|
];
|
|
|
|
# https://zed.dev/docs/extensions
|
|
# https://github.com/zed-industries/extensions/tree/main/extensions
|
|
extensions = [
|
|
"basher" # https://github.com/d1y/bash.zed
|
|
"git-firefly" # https://github.com/d1y/git_firefly
|
|
"nix" # https://github.com/zed-extensions/nix
|
|
];
|
|
|
|
# https://zed.dev/docs/key-bindings
|
|
userKeymaps = [
|
|
{
|
|
bindings = {
|
|
"alt-space" = "command_palette::Toggle";
|
|
};
|
|
}
|
|
{
|
|
context = "Editor";
|
|
|
|
bindings = {
|
|
"alt-enter" = "editor::DuplicateLineDown";
|
|
"alt-left" = "editor::MoveToBeginningOfLine";
|
|
"alt-right" = "editor::MoveToEndOfLine";
|
|
};
|
|
}
|
|
];
|
|
|
|
# https://zed.dev/docs/configuring-zed
|
|
userSettings = {
|
|
always_treat_brackets_as_autoclosed = true;
|
|
|
|
assistant = {
|
|
default_model = {
|
|
model = "claude-3-5-sonnet-latest";
|
|
provider = "zed.dev";
|
|
};
|
|
|
|
version = 2;
|
|
};
|
|
|
|
auto_install_extensions = false;
|
|
auto_signature_help = true;
|
|
|
|
# BUG: Font variations are not currently supported
|
|
# https://github.com/zed-industries/zed/issues/5028
|
|
#// buffer_font_family = "monospace";
|
|
buffer_font_family = "IosevkaTermSlab Nerd Font Propo";
|
|
|
|
buffer_font_size = 18;
|
|
buffer_line_height.custom = 1.5;
|
|
|
|
collaboration_panel = {
|
|
button = false;
|
|
dock = "right";
|
|
};
|
|
|
|
cursor_blink = false;
|
|
|
|
features = {
|
|
inline_completion_provider = "none";
|
|
};
|
|
|
|
git = {
|
|
inline_blame.enabled = false;
|
|
};
|
|
|
|
indent_guides = {
|
|
active_line_width = 2;
|
|
};
|
|
|
|
load_direnv = "shell_hook";
|
|
middle_click_paste = false;
|
|
|
|
outline_panel = {
|
|
dock = "right";
|
|
indent_size = 10;
|
|
};
|
|
|
|
preferred_line_length = 120;
|
|
|
|
project_panel = {
|
|
default_width = 200;
|
|
indent_guides.show = "never";
|
|
indent_size = 10;
|
|
};
|
|
|
|
seed_search_query_from_cursor = "selection";
|
|
show_user_picture = false;
|
|
|
|
# TODO: Show trailing whitespace when supported
|
|
# https://github.com/zed-industries/zed/issues/5237
|
|
show_whitespaces = "selection";
|
|
|
|
soft_wrap = "preferred_line_length";
|
|
tab_size = 2;
|
|
|
|
tabs = {
|
|
file_icons = true;
|
|
git_status = true;
|
|
show_diagnostics = "all";
|
|
};
|
|
|
|
telemetry = {
|
|
metrics = true;
|
|
diagnostics = true;
|
|
};
|
|
|
|
theme = {
|
|
mode = "system";
|
|
light = "Solarized Light";
|
|
dark = "Solarized Dark";
|
|
};
|
|
|
|
ui_font_family = config.custom.settings.fonts.sans-serif;
|
|
ui_font_size = 20;
|
|
|
|
# Language-specific
|
|
# https://zed.dev/docs/configuring-languages
|
|
languages = {
|
|
Nix = {
|
|
formatter.external.command = "alejandra";
|
|
language_servers = ["nixd" "!nil"];
|
|
};
|
|
};
|
|
|
|
# TODO: Add missing syntax in highlights.scm
|
|
# Theme overrides
|
|
# https://zed.dev/docs/themes#theme-overrides
|
|
# https://zed.dev/docs/extensions/languages#syntax-highlighting
|
|
# https://github.com/zed-industries/zed/blob/main/assets/themes/solarized/solarized.json
|
|
# https://github.com/zed-industries/zed/issues/20525
|
|
#?? editor: copy highlight json
|
|
"experimental.theme_overrides" = {
|
|
# https://github.com/zed-industries/zed/issues/4655
|
|
players = [
|
|
{
|
|
cursor = "#93a1a1";
|
|
background = "#93a1a1";
|
|
selection = "#93a1a11a"; # 10%
|
|
}
|
|
];
|
|
|
|
"scrollbar.thumb.background" = "#073642";
|
|
"scrollbar.thumb.border" = "#00000000";
|
|
|
|
syntax = {
|
|
"_expr".color = "#b58900";
|
|
"_id".color = "#93a1a1";
|
|
"attribute".color = "#93a1a1";
|
|
"boolean".color = "#cb4b16";
|
|
"comment".color = "#586e75";
|
|
"comment.doc".color = "#586e75";
|
|
"constant".color = "#93a1a1";
|
|
"constant.builtin".color = "#93a1a1";
|
|
"constructor".color = "#b58900";
|
|
"embedded".color = "#657b83";
|
|
"emphasis".color = "#93a1a1";
|
|
"emphasis.strong".color = "#93a1a1";
|
|
"enum".color = "#b58900";
|
|
"function".color = "#268bd2";
|
|
"function.builtin".color = "#268bd2";
|
|
"function.call".color = "#268bd2";
|
|
"hint".color = "#657b83";
|
|
"keyword".color = "#d33682";
|
|
"keyword.exception".color = "#d33682";
|
|
"label".color = "#93a1a1";
|
|
"link_text".color = "#93a1a1";
|
|
"link_uri".color = "#93a1a1";
|
|
"number".color = "#2aa198";
|
|
"operator".color = "#657b83";
|
|
"predictive".color = "#657b83";
|
|
"preproc".color = "#93a1a1";
|
|
"primary".color = "#93a1a1";
|
|
"property".color = "#93a1a1";
|
|
"punctuation".color = "#657b83";
|
|
"punctuation.bracket".color = "#657b83";
|
|
"punctuation.delimiter".color = "#657b83";
|
|
"punctuation.list_marker".color = "#657b83";
|
|
"punctuation.special".color = "#657b83";
|
|
"string".color = "#859900";
|
|
"string.escape".color = "#cb4b16";
|
|
"string.regex".color = "#cb4b16";
|
|
"string.special".color = "#cb4b16";
|
|
"string.special.symbol".color = "#cb4b16";
|
|
"tag".color = "#93a1a1";
|
|
"tag.doctype".color = "#93a1a1";
|
|
"text.literal".color = "#93a1a1";
|
|
"title".color = "#93a1a1";
|
|
"type".color = "#b58900";
|
|
"variable".color = "#93a1a1";
|
|
"variable.member".color = "#93a1a1";
|
|
"variable.parameter".color = "#6c71c4";
|
|
"variable.special".color = "#93a1a1";
|
|
"variant".color = "#93a1a1";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|
|
];
|
|
};
|
|
}
|