summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAlan Pearce2024-12-10 19:10:29 +0100
committerAlan Pearce2024-12-10 19:34:32 +0100
commitc98dc89219bdd965b6fd3aeb31fd33335add2e3b (patch)
tree5ffae08f09f97a89663cbdd3055a33c391822b89
parentf4406ad7fcaaaa342fdf425a2cda0e553388be02 (diff)
downloadnixfiles-c98dc89219bdd965b6fd3aeb31fd33335add2e3b.tar.lz
nixfiles-c98dc89219bdd965b6fd3aeb31fd33335add2e3b.tar.zst
nixfiles-c98dc89219bdd965b6fd3aeb31fd33335add2e3b.zip
Revert "remove tabnine and all related configuration"
This reverts commit 1065e1ba0fce3f7295ad6017b063f6324490aacd.
-rw-r--r--.tabnine_root0
-rw-r--r--flake.lock8
-rw-r--r--overlays/extra-packages.nix16
m---------private0
-rw-r--r--user/config.nix1
-rw-r--r--user/emacs/init.el23
-rw-r--r--user/marvin.nix1
-rw-r--r--user/modules/tabnine.nix81
-rw-r--r--user/prefect.nix1
-rw-r--r--user/settings/development/base.nix1
-rw-r--r--user/settings/git.nix1
-rw-r--r--user/settings/tabnine.nix124
12 files changed, 253 insertions, 4 deletions
diff --git a/.tabnine_root b/.tabnine_root
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/.tabnine_root
diff --git a/flake.lock b/flake.lock
index 1c72dfa7..86969869 100644
--- a/flake.lock
+++ b/flake.lock
@@ -608,11 +608,11 @@
     "secrets": {
       "flake": false,
       "locked": {
-        "lastModified": 1732126255,
-        "narHash": "sha256-d5xz1zsmD9DopyHkt2R+fQkG1Dru+1tXJez+UnYyBGI=",
+        "lastModified": 1733854167,
+        "narHash": "sha256-HJBkkHA3IRumFsugUVz7EiKOEy7eU90uyn1rdSocY9A=",
         "ref": "refs/heads/main",
-        "rev": "8f05f9f611983d6375ec595a5f627d8e28c7e9a5",
-        "revCount": 73,
+        "rev": "41ef93d8e7b7b687a0540a6d5f380284936ee70c",
+        "revCount": 74,
         "type": "git",
         "url": "file:private"
       },
diff --git a/overlays/extra-packages.nix b/overlays/extra-packages.nix
new file mode 100644
index 00000000..6c64c24b
--- /dev/null
+++ b/overlays/extra-packages.nix
@@ -0,0 +1,16 @@
+self: super: {
+  vimPlugins = super.vimPlugins.extend (final: prev: {
+    coc-tabnine =
+      let
+        inherit (super) tabnine;
+      in
+      prev.coc-tabnine.overrideAttrs {
+        buildInputs = [ tabnine ];
+
+        postFixup = ''
+          mkdir -p $target/binaries/${tabnine.version}
+          ln -s ${tabnine}/bin/ $target/binaries/${tabnine.version}/${tabnine.passthru.platform}
+        '';
+      };
+  });
+}
diff --git a/private b/private
-Subproject 8f05f9f611983d6375ec595a5f627d8e28c7e9a
+Subproject 41ef93d8e7b7b687a0540a6d5f380284936ee70
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"
+        ];
+      };
+    };
+  };
+}