modules/zed
modules/zed/default.nix
{ pkgs, ... }:
{
home.packages = [
pkgs.zed-editor
pkgs.clang-tools
pkgs.package-version-server
pkgs.nixd
pkgs.nil
pkgs.nixfmt
pkgs.just-lsp
];
programs.zed-editor = {
enable = true;
package = pkgs.zed-editor;
};
programs.zed-editor.extensions = [
"toml"
"nix"
"html"
"just"
"tera"
"scss"
"dockerfile"
"nu"
"json5"
];
programs.zed-editor.userSettings = {
disable_ai = true;
base_keymap = "None";
autosave = "on_focus_change";
lsp = {
rust-analyzer = {
binary.path = "${pkgs.rustup}/bin/rust-analyzer";
initialization_options.rust.analyzerTargetDir = true;
};
package-version-server = {
binary.path = "${pkgs.package-version-server}/bin/package-version-server";
};
nixd = {
binary.path = "${pkgs.nixd}/bin/nixd";
initialization_options = {
formatting = {
command = [ "${pkgs.nixfmt}/bin/nixfmt" ];
};
};
};
nil = {
binary.path = "${pkgs.nil}/bin/nil";
initialization_options = {
formatting = {
command = [ "${pkgs.nixfmt}/bin/nixfmt" ];
};
};
};
clangd = {
binary.path = "${pkgs.clang-tools}/bin/clangd";
};
just-lsp = {
binary.path = "${pkgs.just-lsp}/bin/just-lsp";
};
};
terminal = {
shell = {
program = "${pkgs.nushell}/bin/nu";
};
};
};
programs.zed-editor.userKeymaps = [
{
bindings = {
ctrl-e = "file_finder::Toggle";
escape = "menu::Cancel";
ctrl-m = "projects::OpenRecent";
ctrl-t = "workspace::ToggleBottomDock";
ctrl-i = "workspace::Open";
ctrl-w = "pane::CloseActiveItem";
ctrl-y = "project_panel::Toggle";
ctrl-u = "editor::ToggleFocus";
ctrl-shift-p = "command_palette::Toggle";
};
}
{
context = "Editor";
bindings = {
home = [
"editor::MoveToBeginningOfLine"
{
stop_at_soft_wraps = true;
stop_at_indent = true;
}
];
end = "editor::MoveToEndOfLine";
escape = "editor::Cancel";
ctrl-shift-down = "editor::MoveLineDown";
ctrl-shift-up = "editor::MoveLineUp";
ctrl-shift-left = "editor::SelectToPreviousSubwordStart";
ctrl-shift-right = "editor::SelectToNextSubwordEnd";
left = "editor::MoveLeft";
right = "editor::MoveRight";
up = "editor::MoveUp";
down = "editor::MoveDown";
shift-home = [
"editor::SelectToBeginningOfLine"
{
stop_at_soft_wraps = true;
stop_at_indent = true;
}
];
shift-end = "editor::SelectToEndOfLine";
shift-up = "editor::SelectUp";
shift-down = "editor::SelectDown";
shift-left = "editor::SelectLeft";
shift-right = "editor::SelectRight";
ctrl-left = "editor::MoveToPreviousSubwordStart";
ctrl-right = "editor::MoveToNextSubwordEnd";
backspace = "editor::Backspace";
ctrl-backspace = "editor::DeleteToPreviousSubwordStart";
ctrl-z = "editor::Undo";
ctrl-o = "editor::Redo";
ctrl-c = "editor::Copy";
ctrl-v = "editor::Paste";
ctrl-x = "editor::Cut";
ctrl-a = "editor::SelectAll";
};
}
{
context = "Editor && mode == full";
bindings = {
ctrl-f = "buffer_search::Deploy";
ctrl-shift-f = "pane::DeploySearch";
ctrl-r = "editor::RestartLanguageServer";
ctrl-p = "editor::ExpandMacroRecursively";
enter = "editor::Newline";
ctrl-s = "workspace::Save";
tab = "editor::Tab";
shift-tab = "editor::Backtab";
ctrl-u = "editor::Rename";
};
}
{
context = "Editor && showing_code_actions";
bindings = {
enter = "editor::ConfirmCodeAction";
up = "editor::ContextMenuPrevious";
down = "editor::ContextMenuNext";
};
}
{
context = "Editor && showing_completions";
bindings = {
enter = "editor::ConfirmCompletion";
shift-enter = "editor::ConfirmCompletionReplace";
tab = "editor::ConfirmCompletion";
up = "editor::ContextMenuPrevious";
down = "editor::ContextMenuNext";
};
}
{
context = "Editor && renaming";
bindings = {
enter = "editor::ConfirmRename";
};
}
{
context = "Markdown";
bindings = {
ctrl-c = "markdown::Copy";
};
}
{
context = "Editor && copilot_suggestion";
bindings = {
tab = "editor::AcceptEditPrediction";
};
}
{
context = "BufferSearchBar";
bindings = {
escape = "buffer_search::Dismiss";
enter = "search::SelectNextMatch";
shift-enter = "search::SelectAllMatches";
};
}
{
context = "ProjectSearchBar";
bindings = {
escape = "buffer_search::Dismiss";
enter = "menu::Confirm";
};
}
{
context = "Picker";
bindings = {
enter = "menu::Confirm";
};
}
{
context = "SettingsWindow";
bindings = {
escape = "workspace::CloseWindow";
};
}
{
context = "ProjectPanel";
bindings = {
up = "menu::SelectPrevious";
down = "menu::SelectNext";
enter = "menu::Confirm";
left = "project_panel::CollapseSelectedEntry";
right = "project_panel::ExpandSelectedEntry";
space = "project_panel::Open";
ctrl-x = "project_panel::Cut";
ctrl-c = "project_panel::Copy";
ctrl-v = "project_panel::Paste";
};
}
{
context = "ProjectPanel && not_editing";
bindings = {
enter = "project_panel::Rename";
backspace = [
"project_panel::Delete"
{
skip_prompt = true;
}
];
};
}
{
context = "Terminal";
bindings = {
ctrl-backspace = [
"terminal::SendKeystroke"
"ctrl-w"
];
ctrl-u = [
"terminal::SendKeystroke"
"ctrl-u"
];
ctrl-a = "editor::SelectAll";
ctrl-shift-c = "terminal::Copy";
ctrl-shift-v = "terminal::Paste";
ctrl-v = "terminal::Paste";
ctrl-shift-right = "pane::SplitRight";
ctrl-shift-left = "pane::SplitLeft";
ctrl-r = "terminal::Clear";
ctrl-f = "buffer_search::Deploy";
};
}
];
}