{ pkgs, lib, config, inputs, ... }: { options.mods.terminal.development.enable = lib.mkEnableOption "enables cli editor"; imports = [ inputs.nvf.homeManagerModules.default ]; config = lib.mkIf config.mods.terminal.development.enable { home.packages = with pkgs; [ # Nix nil # Rust rust-analyzer lldb_18 # Shaders glsl_analyzer wgsl-analyzer # Python black ]; programs.direnv = { enable = true; nix-direnv.enable = true; enableZshIntegration = lib.mkIf config.mods.terminal.zsh.enable true; }; home.sessionVariables.EDITOR = "hx"; programs.zsh.sessionVariables.EDITOR = "hx"; programs.helix = { enable = true; package = pkgs.evil-helix; settings = { keys.normal = { "esc" = [ "collapse_selection" "keep_primary_selection" ]; "Z" = { "Q" = ":quit!"; "Z" = ":write-quit!"; }; "V" = [ "select_mode" "extend_to_line_bounds" ]; }; editor = { line-number = "relative"; completion-replace = true; bufferline = "always"; rulers = [ 80 ]; soft-wrap.enable = true; indent-guides.render = true; cursor-shape = { normal = "block"; insert = "bar"; select = "underline"; }; }; }; languages.language-server = { glsl.command = "${pkgs.glsl_analyzer}/bin/glsl_analyzer"; wgsl.command = "${pkgs.wgsl-analyzer}/bin/wgsl-analyzer"; }; languages.language = [ { name = "nix"; auto-format = true; formatter.command = "${pkgs.nixfmt-classic}/bin/nixfmt"; } { name = "rust"; auto-format = true; formatter.command = "rustfmt"; } { name = "glsl"; language-servers = [ "glsl" ]; } { name = "wgsl"; language-servers = [ "wgsl" ]; } { name = "python"; auto-format = true; formatter = { command = "${pkgs.black}/bin/black"; args = [ "-" "--quiet" "--line-length=79" ]; }; } ]; }; programs.nvf = { enable = true; settings = { vim = { viAlias = false; vimAlias = true; lsp = { enable = true; formatOnSave = true; }; languages = { enableFormat = true; enableTreesitter = true; enableExtraDiagnostics = true; nix.enable = true; nix.lsp.server = "nixd"; markdown.enable = true; bash.enable = true; rust.enable = true; rust.crates.enable = true; python.enable = true; python.format.type = "ruff"; clang.enable = true; }; statusline.lualine.enable = true; telescope.enable = true; autocomplete.nvim-cmp.enable = true; autopairs.nvim-autopairs.enable = true; tabline.nvimBufferline.enable = true; treesitter.context.enable = true; dashboard.alpha.enable = true; comments.comment-nvim.enable = true; options = { tabstop = 2; shiftwidth = 0; }; notes = { # orgmode.enable = true; todo-comments.enable = true; }; spellcheck = { enable = true; }; binds = { whichKey.enable = true; cheatsheet.enable = true; }; git = { enable = true; gitsigns.enable = true; gitsigns.codeActions.enable = false; # throws an annoying debug message }; terminal = { toggleterm = { enable = true; lazygit.enable = true; }; }; utility = { diffview-nvim.enable = true; surround.enable = true; # multicursors.enable = true; undotree.enable = true; motion = { hop.enable = true; leap.enable = true; }; }; visuals = { nvim-web-devicons.enable = true; nvim-cursorline.enable = true; cinnamon-nvim.enable = true; fidget-nvim.enable = true; highlight-undo.enable = true; indent-blankline.enable = true; }; ui = { borders.enable = true; noice.enable = true; colorizer.enable = true; illuminate.enable = true; smartcolumn.enable = true; fastaction.enable = true; }; }; }; }; }; }