{ 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; }; programs.zellij = { settings = { default_mode._args = ["locked"]; show_startup_tips._args = [false]; show_release_notes._args = [false]; }; extraConfig = builtins.readFile ./zellij.kdl; layouts = { dev = { layout = { _children = [ { default_tab_template = { _children = [ { pane = { size = 1; borderless = true; plugin = { location = "zellij:tab-bar"; }; }; } {"children" = {};} { pane = { size = 2; borderless = true; plugin = { location = "zellij:status-bar"; }; }; } ]; }; } { tab = { _props = { name = "Project"; focus = true; }; _children = [ { pane = { command = "nvim"; }; } ]; }; } { tab = { _props = { name = "Run"; }; _children = [ { pane = { command = "zsh"; }; } ]; }; } { tab = { _props = { name = "Test"; }; _children = [ { pane = { command = "zsh"; }; } ]; }; } ]; }; }; }; }; 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; }; keymaps = [ { key = "w"; mode = ["n"]; action = ":w"; silent = true; desc = "Save file"; } { key = "gd"; mode = "n"; silent = true; action = "lua vim.lsp.buf.definition()"; desc = "Go to Definition"; } ]; 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.lsp.server = "pyright"; # python.lsp.package = [(lib.getExe pkgs.ruff) "server"]; python.format.type = "ruff"; clang = { enable = true; cHeader = 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; }; }; }; }; }; }