e38971e68d
- Add CLI behavior and agent UI font size settings - Merge duplicated agent block with dock/default_profile/version - Keep Anthropic default model (claude-4) from current active block - Add agent_servers registry configuration for pi-acp - Add rust_analyzer binary path_lookup setting - Add panel layout (project, outline, collaboration, git docks to left) - Remove placeholder context_server (example only) - Add SSH connections for m3-atlas, self-host-playbook, m3-daedalus - Update features with copilot=false and inline_prediction_provider - Preserve edit_predictions provider setting - Add default_profile=ask for agent
241 lines
6.5 KiB
Nix
241 lines
6.5 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
options,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with lib; let
|
|
cfg = config.coding.editors;
|
|
# home-manager 26.05+ renamed extraLuaConfig → initLua.
|
|
# On stable 25.11 initLua does not exist; fall back to extraLuaConfig.
|
|
hasInitLua = options.programs.neovim ? initLua;
|
|
lazyVimConfig = ''
|
|
-- 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")
|
|
'';
|
|
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 (mkMerge [
|
|
{
|
|
programs.neovim = {
|
|
enable = true;
|
|
defaultEditor = true;
|
|
viAlias = true;
|
|
vimAlias = true;
|
|
vimdiffAlias = true;
|
|
withNodeJs = true;
|
|
withPython3 = true;
|
|
};
|
|
}
|
|
# Use initLua on HM 26.05+ (unstable), extraLuaConfig on HM ≤ 25.11 (stable)
|
|
(
|
|
if hasInitLua
|
|
then {programs.neovim.initLua = lazyVimConfig;}
|
|
else {programs.neovim.extraLuaConfig = lazyVimConfig;}
|
|
)
|
|
]))
|
|
# Zed editor configuration
|
|
(mkIf cfg.zed.enable {
|
|
programs.zed-editor = {
|
|
enable = true;
|
|
userSettings = {
|
|
# CLI Behavior
|
|
cli_default_open_behavior = "existing_window";
|
|
# UI and Theme
|
|
theme = "Dracula";
|
|
ui_font_size = 16;
|
|
buffer_font_size = 16;
|
|
buffer_font_family = "FiraCode Nerd Font";
|
|
# Agent UI
|
|
agent_ui_font_size = 24.0;
|
|
# Editor Behavior
|
|
vim_mode = true;
|
|
auto_update = false;
|
|
format_on_save = "on";
|
|
load_direnv = "shell_hook";
|
|
# AI Features
|
|
features = {
|
|
copilot = false;
|
|
inline_prediction_provider = "zed";
|
|
};
|
|
edit_predictions = {
|
|
mode = "subtle";
|
|
provider = "zed";
|
|
};
|
|
show_edit_predictions = true;
|
|
agent_servers = {
|
|
"pi-acp" = {
|
|
type = "registry";
|
|
};
|
|
};
|
|
agent = {
|
|
dock = "right";
|
|
default_profile = "ask";
|
|
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";
|
|
};
|
|
};
|
|
};
|
|
rust_analyzer = {
|
|
binary = {
|
|
path_lookup = true;
|
|
};
|
|
};
|
|
pyrefly = {
|
|
binary = {
|
|
arguments = ["--lsp"];
|
|
};
|
|
};
|
|
};
|
|
# Panel Layout
|
|
project_panel = {
|
|
dock = "left";
|
|
};
|
|
outline_panel = {
|
|
dock = "left";
|
|
};
|
|
collaboration_panel = {
|
|
dock = "left";
|
|
};
|
|
git_panel = {
|
|
dock = "left";
|
|
};
|
|
# Privacy
|
|
telemetry = {
|
|
metrics = false;
|
|
};
|
|
};
|
|
};
|
|
})
|
|
# SSH Connections
|
|
(mkIf cfg.zed.enable {
|
|
programs.zed-editor.userSettings.ssh_connections = [
|
|
{
|
|
nickname = "m3-atlas";
|
|
host = "152.53.85.162";
|
|
args = ["-i" "~/.ssh/m3tam3re"];
|
|
}
|
|
{
|
|
nickname = "self-host-playbook";
|
|
host = "95.217.189.186";
|
|
port = 2222;
|
|
args = ["-i" "~/.ssh/self-host-playbook"];
|
|
projects = [
|
|
{
|
|
paths = ["/etc/nixos/current-systemconfig"];
|
|
}
|
|
];
|
|
}
|
|
{
|
|
nickname = "m3-daedalus";
|
|
host = "192.168.1.152";
|
|
port = 22;
|
|
args = ["-i" "~/.ssh/m3tam3re"];
|
|
projects = [
|
|
{
|
|
paths = ["/home/m3tam3re/home-config"];
|
|
}
|
|
];
|
|
}
|
|
];
|
|
})
|
|
# Common packages (always installed if either editor is enabled)
|
|
(mkIf (cfg.neovim.enable || cfg.zed.enable) {
|
|
home.packages = with pkgs; [zig];
|
|
})
|
|
];
|
|
}
|