forked from aylac.top/nixcfg
this repo has no description
at main 4.1 kB view raw
1{ 2 lib, 3 config, 4 ... 5}: let 6 editorCfg = config.mySnippets.editor; 7 8 mkZedFormatter = fmtName: 9 if fmtName == null 10 then "language_server" 11 else let 12 f = editorCfg.formatters.${fmtName}; 13 in 14 if f.type == "external" 15 then { 16 external = { 17 command = f.command; 18 arguments = f.args or []; 19 }; 20 } 21 else if f.type == "lsp" 22 then {language_server = {name = fmtName;};} 23 else null; 24 25 mkZedLanguage = name: lang: 26 lib.filterAttrs (_: v: v != null) { 27 formatter = mkZedFormatter lang.formatter; 28 language_servers = lang.language-servers ++ lang.zed-only-language-servers; 29 code_actions_on_format = lang.code-actions-on-format; 30 }; 31 32 mkZedLsp = name: srv: 33 lib.filterAttrs (_: v: v != null) { 34 binary = lib.filterAttrs (_: v: v != null) { 35 path = srv.command; 36 arguments = srv.args or null; 37 }; 38 settings = srv.config or null; 39 }; 40in { 41 options.myHome.programs.zed-editor.enable = lib.mkEnableOption "zed editor"; 42 43 config = lib.mkIf config.myHome.programs.zed-editor.enable { 44 programs.zed-editor = { 45 enable = true; 46 extensions = [ 47 "env" 48 "fish" 49 "git-firefly" 50 "github-theme" 51 "html" 52 "lua" 53 "nix" 54 "scss" 55 "toml" 56 "biome" 57 #"superhtml" 58 "marksman" 59 "makefile" 60 "zig" 61 "gleam" 62 "glsl" 63 "gdscript" 64 "svelte" 65 "vue" 66 "basher" 67 "sql" 68 #"ruby" 69 #"elixir" 70 ]; 71 userSettings = { 72 auto_indent_on_paste = true; 73 auto_update = false; 74 buffer_font_size = 14; 75 ui_font_size = 14; 76 buffer_font_family = "JetBrainsMono Nerd Font"; 77 use_on_type_format = true; 78 wrap_guides = [100]; 79 minimap.show = "auto"; 80 preferred_line_length = 100; 81 soft_wrap = "preferred_line_length"; 82 83 tab_size = 2; 84 format_on_save = "on"; 85 prettier = { 86 allowed = false; 87 }; 88 89 agent = { 90 default_model = { 91 provider = "google"; 92 model = "gemini-2.5-pro"; 93 }; 94 inline_assistant_model = { 95 provider = "google"; 96 model = "gemini-2.5-pro"; 97 }; 98 default_profile = "ask"; 99 }; 100 101 telemetry = { 102 diagnostics = false; 103 metrics = false; 104 }; 105 106 languages = lib.listToAttrs ( 107 lib.attrValues ( 108 lib.mapAttrs (name: lang: { 109 name = lang.full-name; 110 value = mkZedLanguage name lang; 111 }) 112 editorCfg.languages 113 ) 114 ); 115 lsp = lib.mapAttrs mkZedLsp editorCfg.languageServers; 116 }; 117 userTasks = [ 118 { 119 label = "jjui"; 120 command = "jjui"; 121 hide = "on_success"; 122 use_new_terminal = true; 123 allow_concurrent_runs = false; 124 shell = { 125 program = "fish"; 126 }; 127 } 128 ]; 129 userKeymaps = [ 130 { 131 context = "(vim_mode == helix_normal || vim_mode == helix_select) && !menu"; 132 bindings = { 133 n = "vim::WrappingLeft"; 134 e = "vim::Down"; 135 i = "vim::Up"; 136 o = "vim::WrappingRight"; 137 }; 138 } 139 { 140 context = "vim_mode == helix_normal && !menu"; 141 bindings = { 142 j = "vim::NextWordEnd"; 143 J = ["vim::NextWordEnd" {ignore_punctuation = true;}]; 144 k = "vim::MoveToNextMatch"; 145 K = "vim::MoveToPreviousMatch"; 146 l = "vim::HelixInsert"; 147 L = "vim::InsertFirstNonWhitespace"; 148 h = "vim::InsertLineBelow"; 149 H = "vim::InsertLineAbove"; 150 }; 151 } 152 { 153 context = "Workspace"; 154 bindings = { 155 ctrl-g = [ 156 "task::Spawn" 157 { 158 task_name = "jjui"; 159 reveal_target = "center"; 160 } 161 ]; 162 }; 163 } 164 ]; 165 }; 166 }; 167}