{ config, lib, ... }: { programs.zed-editor = { enable = true; enableMcpIntegration = true; userSettings = { base_keymap = "Emacs"; vim_mode = true; tab_size = 2; tab_bar = { show = true; show_nav_history_buttons = false; show_tab_bar_buttons = false; }; title_bar = { show_branch_name = false; show_user_picture = false; show_user_menu = false; show_sign_in = false; }; toolbar = { breadcrumbs = false; quick_actions = false; selections_menu = false; }; cursor_blink = false; current_line_highlight = "gutter"; indent_guides.enabled = false; git = { git_gutter = "hide"; inline_blame.enabled = false; }; gutter = { runnables = false; breakpoints = false; folds = false; }; pane_split_direction_vertical = "right"; use_smartcase_search = true; seed_search_query_from_cursor = "always"; inlay_hints = { enabled = true; show_type_hints = true; show_parameter_hints = false; }; file_types = { "Shell Script" = [ "envrc" ]; }; languages = { Markdown = { soft_wrap = "bounded"; }; }; project_panel = { entry_spacing = "standard"; file_icons = false; folder_icons = false; indent_size = 16; }; preview_tabs.enabled = false; collaboration_panel.button = false; relative_line_numbers = "enabled"; # third option: "wrapped" vim = { toggle_relative_line_numbers = true; }; which_key = { enabled = true; }; command_aliases = { "gk" = "git: push"; "gkf" = "git: force push"; "gj" = "git: pull"; }; }; userKeymaps = [ { context = "Workspace"; bindings = { "ctrl-tab" = "pane::ActivateNextItem"; "ctrl-shift-tab" = "pane::ActivatePreviousItem"; }; } { context = "VimControl && !menu"; bindings = { "alt-x" = "command_palette::Toggle"; "," = null; ", f f" = "file_finder::Toggle"; ", b b" = "file_finder::Toggle"; ", f s" = "workspace::Save"; ", p" = "projects::OpenRecent"; ", r" = "editor::Rename"; ", w d" = "editor::GoToDefinitionSplit"; ", w g d" = "editor::GoToDefinitionSplit"; ", w shift-d" = "editor::GoToTypeDefinitionSplit"; ", w g shift-d" = "editor::GoToTypeDefinitionSplit"; ", w space" = "editor::OpenExcerptsSplit"; ", w g space" = "editor::OpenExcerptsSplit"; ", b x" = "pane::CloseActiveItem"; ", q" = "pane::CloseActiveItem"; }; } { context = "ProjectPanel || CollabPanel || OutlinePanel || ChatPanel || VimControl || EmptyPane || SharedScreen || MarkdownPreview || KeyContextView"; bindings = { ", w" = null; ", w left" = "workspace::ActivatePaneLeft"; ", w right" = "workspace::ActivatePaneRight"; ", w up" = "workspace::ActivatePaneUp"; ", w down" = "workspace::ActivatePaneDown"; ", w h" = "workspace::ActivatePaneLeft"; ", w l" = "workspace::ActivatePaneRight"; ", w k" = "workspace::ActivatePaneUp"; ", w j" = "workspace::ActivatePaneDown"; ", w ctrl-h" = "workspace::ActivatePaneLeft"; ", w ctrl-l" = "workspace::ActivatePaneRight"; ", w ctrl-k" = "workspace::ActivatePaneUp"; ", w ctrl-j" = "workspace::ActivatePaneDown"; ", w shift-left" = "workspace::SwapPaneLeft"; ", w shift-right" = "workspace::SwapPaneRight"; ", w shift-up" = "workspace::SwapPaneUp"; ", w shift-down" = "workspace::SwapPaneDown"; ", w shift-h" = "workspace::SwapPaneLeft"; ", w shift-l" = "workspace::SwapPaneRight"; ", w shift-k" = "workspace::SwapPaneUp"; ", w shift-j" = "workspace::SwapPaneDown"; ", w 1" = [ "workspace::ActivatePane" 0 ]; ", w 2" = [ "workspace::ActivatePane" 1 ]; ", w 3" = [ "workspace::ActivatePane" 2 ]; ", w 4" = [ "workspace::ActivatePane" 3 ]; ", w 5" = [ "workspace::ActivatePane" 4 ]; ", w 6" = [ "workspace::ActivatePane" 5 ]; ", w 7" = [ "workspace::ActivatePane" 6 ]; ", w 8" = [ "workspace::ActivatePane" 7 ]; ", w 9" = [ "workspace::ActivatePane" 8 ]; ", w >" = "vim::ResizePaneRight"; ", w <" = "vim::ResizePaneLeft"; ", w -" = "vim::ResizePaneDown"; ", w +" = "vim::ResizePaneUp"; ", w _" = "vim::MaximizePane"; ", w =" = "vim::ResetPaneSizes"; ", w g t" = "pane::ActivateNextItem"; ", w ctrl-g t" = "pane::ActivateNextItem"; ", w g shift-t" = "pane::ActivatePreviousItem"; ", w ctrl-g shift-t" = "pane::ActivatePreviousItem"; ", w w" = "workspace::ActivateNextPane"; ", w p" = "workspace::ActivatePreviousPane"; ", w ctrl-p" = "workspace::ActivatePreviousPane"; ", w shift-w" = "workspace::ActivatePreviousPane"; ", w v" = "pane::SplitVertical"; ", w ctrl-v" = "pane::SplitVertical"; ", w s" = "pane::SplitHorizontal"; ", w shift-s" = "pane::SplitHorizontal"; ", w ctrl-s" = "pane::SplitHorizontal"; ", w c" = "pane::CloseAllItems"; ", w ctrl-c" = "pane::CloseAllItems"; ", w q" = "pane::CloseAllItems"; ", w ctrl-q" = "pane::CloseAllItems"; ", w o" = "workspace::CloseInactiveTabsAndPanes"; ", w ctrl-o" = "workspace::CloseInactiveTabsAndPanes"; ", w n" = "workspace::NewFileSplitHorizontal"; ", w ctrl-n" = "workspace::NewFileSplitHorizontal"; }; } { context = "vim_operator == a || vim_operator == i || vim_operator == cs"; bindings = { # mini.ai plugin behavior q = "vim::MiniQuotes"; b = "vim::MiniBrackets"; }; } ]; }; programs.fish.interactiveShellInit = lib.mkOrder 900 '' if set --query ZED_TERM set --export EDITOR ${ if config.programs.zed-editor.package == null then "zed" else "zeditor" } -w set --export VISUAL $EDITOR end ''; }