snowflake/user/subs/zed.nix
2025-05-30 22:59:38 +08:00

133 lines
3.5 KiB
Nix

{ config, lib, ... }:
let
cfg = config.subs.zed;
in
{
options = {
subs.zed.enable = lib.mkOption {
default = false;
type = lib.types.bool;
};
};
config = lib.mkIf cfg.enable {
programs.zed-editor = {
enable = true;
extensions = [
"kanagawa-themes" "modus-themes" "material-icon-theme"
"toml" "php" "dockerfile" "vue" "sql" "svelte" "scss" "lua"
"astro" "graphql" "ini" "emmet"
];
userKeymaps = [
{
context = "Workspace";
bindings = {
"alt-`" = "workspace::ToggleLeftDock";
"alt-~" = "workspace::ToggleRightDock";
"ctrl-`" = "workspace::ToggleBottomDock";
"alt-h" = "workspace::ActivatePaneLeft";
"alt-j" = "workspace::ActivatePaneDown";
"alt-k" = "workspace::ActivatePaneUp";
"alt-l" = "workspace::ActivatePaneRight";
};
}
{
context = "Editor";
bindings = {
"ctrl-w" = "pane::CloseActiveItem";
};
}
{
context = "VimControl && !menu";
bindings = {
"ctrl-w" = "pane::CloseActiveItem";
};
}
{
context = "Editor || Pane";
bindings = {
"ctrl-alt-h" = "pane::SplitLeft";
"ctrl-alt-j" = "pane::SplitDown";
"ctrl-alt-k" = "pane::SplitUp";
"ctrl-alt-l" = "pane::SplitRight";
};
}
];
userSettings = {
vim_mode = true;
base_keymap = "VSCode";
diagnostics = {
include_warnings = false;
inline.enabled = true;
};
tab_size = 4;
hard_tabs = true;
git.inline_blame.enabled = false;
ui_font_family = "Inter";
ui_font_size = 16;
buffer_font_family = "Iosevka Nerd Font";
buffer_font_fallbacks = [ "Symbols Nerd Font" "Noto Color Emoji" ];
buffer_font_weight = 500;
buffer_font_size = 18;
buffer_line_height.custom = 1.3;
terminal = {
font_family = "Iosevka Nerd Font";
font_weight = 500;
font_size = 16;
font_fallbacks = [ "Symbols Nerd Font" "Noto Color Emoji" ];
working_directory = "current_project_directory";
toolbar.breadcrumbs = false;
env = {
"ZED" = "1";
};
};
icon_theme = "Material Icon Theme";
theme = {
mode = "dark";
light = "Modus Operandi Deuteranopia";
dark = "Kanagawa";
};
toolbar.quick_actions = false;
tab_bar.show = false;
scrollbar = {
show = "never";
git_diff = false;
};
gutter = {
code_actions = true;
runnables = true;
folds = false;
line_numbers = true;
};
inlay_hints = {
enabled = true;
show_type_hints = true;
};
telemetry = {
diagnostics = false;
metrics = false;
};
languages = {
CSS.tab_size = 2;
HTML.tab_size = 2;
Astro.tab_size = 2;
JavaScript.tab_size = 2;
TypeScript.tab_size = 2;
TSX.tab_size = 2;
JSON.hard_tabs = false;
JSON.tab_size = 2;
YAML.hard_tabs = false;
YAML.tab_size = 2;
JSONC.hard_tabs = false;
JSONC.tab_size = 2;
TOML.tab_size = 2;
Python.hard_tabs = false;
};
};
};
};
}