diff options
Diffstat (limited to 'user')
-rw-r--r-- | user/config.nix | 1 | ||||
-rw-r--r-- | user/emacs/init.el | 23 | ||||
-rw-r--r-- | user/marvin.nix | 1 | ||||
-rw-r--r-- | user/modules/tabnine.nix | 81 | ||||
-rw-r--r-- | user/prefect.nix | 1 | ||||
-rw-r--r-- | user/settings/development/base.nix | 1 | ||||
-rw-r--r-- | user/settings/git.nix | 1 | ||||
-rw-r--r-- | user/settings/tabnine.nix | 124 |
8 files changed, 233 insertions, 0 deletions
diff --git a/user/config.nix b/user/config.nix index ec0bfd8e..52c2129a 100644 --- a/user/config.nix +++ b/user/config.nix @@ -7,6 +7,7 @@ in "beeper" "discord" "input-fonts" + "tabnine" ]; input-fonts.acceptLicense = true; permittedInsecurePackages = [ ]; diff --git a/user/emacs/init.el b/user/emacs/init.el index 01f25b38..870032ae 100644 --- a/user/emacs/init.el +++ b/user/emacs/init.el @@ -608,6 +608,29 @@ _C-k_: prev _u_pper _=_: upper/lower _s_mart resolve (setq kind-icon-default-face 'corfu-default) (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))) +(use-package tabnine-core + :config (progn + (setq tabnine-binaries-folder "~/.local/tabnine") + (with-demoted-errors "TabNine error: %s" + (when (tabnine--executable-path) + (global-tabnine-mode))) + + (define-key tabnine-completion-map (kbd "TAB") #'tabnine-accept-completion) + (define-key tabnine-completion-map (kbd "<tab>") #'tabnine-accept-completion) + + (define-key tabnine-completion-map (kbd "M-f") #'tabnine-accept-completion-by-word) + (define-key tabnine-completion-map (kbd "M-<return>") #'tabnine-accept-completion-by-line) + (define-key tabnine-completion-map (kbd "C-e") #'tabnine-accept-completion-by-line) + (define-key tabnine-completion-map (kbd "<right>") #'tabnine-accept-completion-by-line) + + (define-key tabnine-completion-map (kbd "C-g") #'tabnine-clear-overlay) + (define-key tabnine-completion-map (kbd "M-[") #'tabnine-next-completion) + (define-key tabnine-completion-map (kbd "M-]") #'tabnine-previous-completion)) + :init (progn + (advice-add 'tabnine-start-process :around #'quiet) + + (add-hook 'kill-emacs-hook #'tabnine-kill-process))) + (use-package tempel :general ("M-+" #'tempel-complete ;; Alternative tempel-expand "M-*" #'tempel-insert diff --git a/user/marvin.nix b/user/marvin.nix index 93e8d534..d791d0b5 100644 --- a/user/marvin.nix +++ b/user/marvin.nix @@ -12,6 +12,7 @@ ./settings/kitty.nix ./settings/nixpkgs.nix ./settings/ssh.nix + ./settings/tabnine.nix ./settings/user-interface.nix ./settings/nix.nix ]; diff --git a/user/modules/tabnine.nix b/user/modules/tabnine.nix new file mode 100644 index 00000000..d9b5c6c6 --- /dev/null +++ b/user/modules/tabnine.nix @@ -0,0 +1,81 @@ +{ config +, lib +, pkgs +, ... +}: +with lib; let + inherit (pkgs) stdenv; + tomlFormat = pkgs.formats.toml { }; + cfg = config.programs.tabnine; +in +{ + options.programs.tabnine = { + enable = mkEnableOption "TabNine, Smart Compose for code."; + + configDir = mkOption { + type = types.str; + default = + if stdenv.isDarwin + then "Library/Preferences/TabNine" + else "${config.xdg.configHome}/TabNine"; + description = '' + Location of TabNine configuration directory relative to \$HOME + ''; + }; + + config = mkOption { + type = types.attrs; + default = { }; + description = '' + TabNine configuration written to + <filename>\${configDir}/tabnine_config.json</filename> + ''; + }; + + registrationKey = mkOption { + type = types.str; + description = '' + Registration key for TabNine. For one-time-purchase users, this should be the e-mail address and base-64-encoded key joined together without spacing. + ''; + }; + + lspConfig = mkOption { + type = tomlFormat.type; + default = { }; + description = '' + LSP Server configuration written to + <filename>\${configDir}/TabNine.toml</filename> + </para><para> + ''; + }; + }; + + config = mkIf cfg.enable { + home.file."${cfg.configDir}/TabNine.toml" = { + source = (tomlFormat.generate "TabNine.toml" cfg.lspConfig); + }; + home.file."${cfg.configDir}/tabnine_config.json" = { + source = pkgs.writeText "tabnine_config.json" (builtins.toJSON cfg.config); + }; + home.file."${cfg.configDir}/registration_key" = { + text = cfg.registrationKey; + }; + + programs.neovim.plugins = [ + pkgs.vimPlugins.coc-tabnine + ]; + programs.neovim.coc.settings = { + "tabnine.binary_path" = "${pkgs.tabnine}/bin/TabNine"; + }; + + programs.emacs.extraPackages = epkgs: [ + epkgs.tabnine + ]; + programs.emacs.extraConfig = '' + (defun my/override-tabnine-exe-path (&rest args) + "${pkgs.tabnine}/bin/TabNine") + (with-eval-after-load 'tabnine-core + (advice-add 'tabnine--executable-path :override #'my/override-tabnine-exe-path)) + ''; + }; +} diff --git a/user/prefect.nix b/user/prefect.nix index a15128bf..dc074b19 100644 --- a/user/prefect.nix +++ b/user/prefect.nix @@ -17,6 +17,7 @@ ./settings/nixos.nix ./settings/passwords.nix ./settings/ssh.nix + ./settings/tabnine.nix ./settings/user-interface.nix ./settings/xresources.nix ]; diff --git a/user/settings/development/base.nix b/user/settings/development/base.nix index 38b52bea..fe243ad5 100644 --- a/user/settings/development/base.nix +++ b/user/settings/development/base.nix @@ -3,6 +3,7 @@ , ... }: { + imports = [ ../../modules/tabnine.nix ]; home.packages = with pkgs; [ shellcheck diff --git a/user/settings/git.nix b/user/settings/git.nix index b156c2c4..6d119411 100644 --- a/user/settings/git.nix +++ b/user/settings/git.nix @@ -103,6 +103,7 @@ in "*~" "\#*\#" ".\#*" + ".tabnine_root" ]; }; programs.gh = { diff --git a/user/settings/tabnine.nix b/user/settings/tabnine.nix new file mode 100644 index 00000000..9502c68d --- /dev/null +++ b/user/settings/tabnine.nix @@ -0,0 +1,124 @@ +{ config +, pkgs +, ... +}: { + home.packages = with pkgs; [ + tabnine + ]; + programs.tabnine = { + enable = pkgs.lib.mkDefault true; + config = { + version = pkgs.tabnine.version; + + api_base_url = null; + api_key = config.programs.tabnine.registrationKey; + beta_enabled = "No"; + binary_update_interval_seconds = 365 * 24 * 3600; + cloud_whitelist = [ ]; + creation_time = "2020-12-28T21:42:35.732522096Z"; + deep_completions_work_mode = "LocalOnly"; + disable_auto_update = true; + disable_local_when_using_battery = false; + enable_power_saving_mode = false; + enable_telemetry = false; + exclude_file_masks = true; + force_local_hub = true; + generation = 0; + guuid = null; + gusr.gcgdc = "0000000000000000000000000000000000000000000000000000000000000000"; + has_git_repos = null; + heartbeat_interval_seconds = null; + hide_deep_information_message = false; + hide_promotional_message = true; + hosted_deep_completions_enabled = "Disabled"; + ignore_all_lsp = false; + inline_suggestions_mode = true; + inline_suggestions_mode_clients = null; + last_service_level = null; + line_suggestions = true; + local_enabled = "Yes"; + local_indexing = null; + local_model_size = null; + manually_selected_model = null; + model_hash_override = null; + num_of_suggestions = 5; + omit_prefix_suggestions = null; + onboarding = { + model_type = null; + skipped_login = true; + completed = true; + }; + rate_limit_amount = null; + rate_limit_interval_seconds = null; + rlhf = null; + semantic_status = { + css = "Enabled"; + dockerfile = "Enabled"; + go = "Enabled"; + haskell = "Enabled"; + html = "Enabled"; + javascript = "Enabled"; + nix = "Enabled"; + ruby = "Enabled"; + scss = "Enabled"; + typescript = "Enabled"; + yaml = "Enabled"; + }; + snippets_enabled_v2 = true; + tabnine_cloud_certificate_domain = null; + tabnine_cloud_host = null; + tabnine_cloud_port = null; + tabnine_hub_port = null; + use_specialized_model_if_available = true; + user_understands_that_enabling_tabnine_cloud_sends_code_to_tabnine_servers = false; + }; + lspConfig.language = { + typescript = { + command = "typescript-language-server"; + args = [ "--stdio" ]; + }; + javascript = { + command = "javascript-typescript-stdio"; + args = [ "--stdio" ]; + }; + css = { + command = "css-languageserver"; + args = [ "--stdio" ]; + }; + scss = { + command = "css-languageserver"; + args = [ "--stdio" ]; + }; + html = { + command = "html-languageserver"; + args = [ "--stdio" ]; + }; + nix = { + command = "nil"; + args = [ "--stdio" ]; + }; + dockerfile = { + command = "docker-langserver"; + args = [ "--stdio" ]; + }; + ruby = { + command = "solargraph"; + args = [ "stdio" ]; + }; + yaml = { + command = "yaml-language-server"; + args = [ "--stdio" ]; + }; + haskell = { + command = "hie"; + args = [ "--stdio" ]; + }; + go = { + command = "gopls"; + args = [ + "serve" + ]; + }; + }; + }; +} |