dotfiles

25 commits
Updated 2026-04-29 19:10:52
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";
      };
    }
  ];
}