inputs: { config, lib, pkgs, ... }: let inherit (pkgs.unstable) clang clang-tools elixir_ls rust-analyzer-unwrapped vimPlugins; inherit (pkgs.unstable.python3Packages) python-language-server; in { options = with lib; { vim.lsp = mkOption { description = '' Configure Neovim to use these LSP servers; ''; # TODO: change that to submodule with cmd, settings, capabilities, etc. type = with types; attrsOf (listOf str); default = { }; }; }; config = { users.extraUsers.minijackson.packages = with pkgs; [ clang clang-tools elixir gcc gdb man-pages rr rtags ]; vim = { extraPlugins = with vimPlugins; [ nvim-lspconfig rust-tools-nvim vim-grammarous ]; variables = { rust_analyzer_path = "'${rust-analyzer-unwrapped}/bin/rust-analyzer'"; }; lsp = { clangd = [ "${clang-tools}/bin/clangd" "--resource-dir=${clang}/resource-root" ]; elixirls = [ "${elixir_ls}/bin/elixir-ls" ]; pyls = [ "${python-language-server}/bin/pyls" ]; }; luaConfig = with lib; let toLua = list: "{ ${concatMapStringsSep ", " (elem: "'${escape [ "'" ] elem}'") list} }"; lspconfigFor = name: cmd: '' lspconfig["${name}"].setup { capabilities = capabilities, cmd = ${toLua cmd}, on_attach = on_attach, } ''; lspconfig = concatStringsSep "\n" (mapAttrsToList lspconfigFor config.vim.lsp); in mkMerge [ (readFile ../../dotfiles/vim-dev.lua) lspconfig ]; }; programs.zsh.interactiveShellInit = '' (( $+commands[rustc] )) && fpath+="$(rustc --print sysroot)/share/zsh/site-functions" ''; documentation.dev.enable = true; boot.kernel.sysctl = { # For RR "kernel.perf_event_paranoid" = 1; }; home-manager.users.minijackson = { config, ... }: { home.file.".clang-format".source = (pkgs.formats.yaml { }).generate "clang-format.yml" { BasedOnStyle = "Mozilla"; ColumnLimit = 100; TabWidth = 4; IndentWidth = 4; UseTab = "ForIndentation"; AccessModifierOffset = -4; AlwaysBreakAfterDefinitionReturnType = "None"; AlwaysBreakAfterReturnType = "None"; AlwaysBreakTemplateDeclarations = true; BinPackArguments = false; BinPackParameters = false; BreakConstructorInitializers = "BeforeComma"; Cpp11BracedListStyle = true; DerivePointerAlignment = false; NamespaceIndentation = "Inner"; PenaltyBreakBeforeFirstCallParameter = 2; PointerAlignment = "Left"; Standard = "Latest"; }; programs.direnv = { enable = true; enableBashIntegration = true; enableZshIntegration = true; }; }; services.lorri.enable = true; }; }