first
This commit is contained in:
6
modules/home-manager/coding/default.nix
Normal file
6
modules/home-manager/coding/default.nix
Normal file
@@ -0,0 +1,6 @@
|
||||
# Coding-related Home Manager modules
|
||||
{
|
||||
imports = [
|
||||
./editors.nix
|
||||
];
|
||||
}
|
199
modules/home-manager/coding/editors.nix
Normal file
199
modules/home-manager/coding/editors.nix
Normal file
@@ -0,0 +1,199 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.coding.editors;
|
||||
in {
|
||||
options.coding.editors = {
|
||||
neovim = {
|
||||
enable = mkEnableOption "neovim with LazyVim configuration";
|
||||
};
|
||||
|
||||
zed = {
|
||||
enable = mkEnableOption "zed editor with custom configuration";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
# Neovim configuration
|
||||
(mkIf cfg.neovim.enable {
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
vimdiffAlias = true;
|
||||
withNodeJs = true;
|
||||
withPython3 = true;
|
||||
|
||||
# This is your init.lua content
|
||||
extraLuaConfig = ''
|
||||
-- Bootstrap lazy.nvim
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not vim.loop.fs_stat(lazypath) then
|
||||
vim.fn.system({
|
||||
"git",
|
||||
"clone",
|
||||
"--filter=blob:none",
|
||||
"https://github.com/folke/lazy.nvim.git",
|
||||
"--branch=stable",
|
||||
lazypath,
|
||||
})
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
-- Bootstrap LazyVim via lazy.nvim
|
||||
-- Docs: https://github.com/folke/lazy.nvim and https://www.lazyvim.org/
|
||||
require("lazy").setup({
|
||||
spec = {
|
||||
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
||||
{ import = "lazyvim.plugins.extras.lang.typescript" },
|
||||
{ import = "lazyvim.plugins.extras.lang.python" },
|
||||
{ import = "lazyvim.plugins.extras.lang.go" },
|
||||
{ import = "lazyvim.plugins.extras.lang.nix" },
|
||||
{ import = "lazyvim.plugins.extras.lang.rust" },
|
||||
{ import = "lazyvim.plugins.extras.lang.nushell" },
|
||||
{ "Mofiqul/dracula.nvim" },
|
||||
},
|
||||
defaults = { lazy = false, version = false },
|
||||
install = { colorscheme = { "dracula", "tokyonight", "habamax" } },
|
||||
checker = { enabled = false },
|
||||
performance = {
|
||||
rtp = {
|
||||
disabled_plugins = {
|
||||
"gzip", "tarPlugin", "tohtml", "tutor", "zipPlugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
vim.o.termguicolors = true
|
||||
vim.cmd.colorscheme("dracula")
|
||||
'';
|
||||
};
|
||||
})
|
||||
|
||||
# Zed editor configuration
|
||||
(mkIf cfg.zed.enable {
|
||||
programs.zed-editor = {
|
||||
enable = true;
|
||||
userSettings = {
|
||||
# UI and Theme
|
||||
theme = "Dracula";
|
||||
ui_font_size = 16;
|
||||
buffer_font_size = 16;
|
||||
buffer_font_family = "FiraCode Nerd Font";
|
||||
|
||||
# Editor Behavior
|
||||
vim_mode = true;
|
||||
auto_update = false;
|
||||
format_on_save = "on";
|
||||
load_direnv = "shell_hook";
|
||||
|
||||
# AI Features
|
||||
features = {
|
||||
edit_prediction_provider = "zed";
|
||||
};
|
||||
edit_predictions = {
|
||||
mode = "subtle";
|
||||
};
|
||||
show_edit_predictions = true;
|
||||
|
||||
agent = {
|
||||
default_model = {
|
||||
provider = "zed.dev";
|
||||
model = "claude-sonnet-4";
|
||||
};
|
||||
};
|
||||
|
||||
assistant = {
|
||||
version = "2";
|
||||
default_model = {
|
||||
provider = "anthropic";
|
||||
model = "claude-4";
|
||||
};
|
||||
};
|
||||
|
||||
# Language Models
|
||||
language_models = {
|
||||
anthropic = {
|
||||
api_url = "https://api.anthropic.com";
|
||||
};
|
||||
openai = {
|
||||
api_url = "https://api.openai.com/v1";
|
||||
};
|
||||
ollama = {
|
||||
api_url = "http://localhost:11434";
|
||||
};
|
||||
};
|
||||
|
||||
# Languages Configuration
|
||||
languages = {
|
||||
Nix = {
|
||||
language_servers = ["nixd"];
|
||||
formatter = {
|
||||
external = {
|
||||
command = "alejandra";
|
||||
arguments = [
|
||||
"-q"
|
||||
"-"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
Python = {
|
||||
language_servers = ["pyrefly"];
|
||||
formatter = {
|
||||
external = {
|
||||
command = "black";
|
||||
arguments = ["-"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# LSP Configuration
|
||||
lsp = {
|
||||
rust-analyzer = {
|
||||
initialization_options = {
|
||||
check = {
|
||||
command = "clippy";
|
||||
};
|
||||
};
|
||||
};
|
||||
pyrefly = {
|
||||
binary = {
|
||||
arguments = ["--lsp"];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Context Servers
|
||||
context_servers = {
|
||||
some-context-server = {
|
||||
source = "custom";
|
||||
command = "some-command";
|
||||
args = [
|
||||
"arg-1"
|
||||
"arg-2"
|
||||
];
|
||||
env = {};
|
||||
};
|
||||
};
|
||||
|
||||
# Privacy
|
||||
telemetry = {
|
||||
metrics = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
|
||||
# Common packages (always installed if either editor is enabled)
|
||||
(mkIf (cfg.neovim.enable || cfg.zed.enable) {
|
||||
home.packages = with pkgs; [zig];
|
||||
})
|
||||
];
|
||||
}
|
Reference in New Issue
Block a user