diff --git a/.config/fish/config.fish b/.config/fish/config.fish index 3f8a021..8a7b65e 100644 --- a/.config/fish/config.fish +++ b/.config/fish/config.fish @@ -1,10 +1,8 @@ -fish_add_path \ - ~/.local/bin \ - ~/.cargo/bin \ - ~/bin \ - /opt/local/sbin \ - /opt/local/bin \ - ~/.npm-global/bin +fish_add_path ~/.local/bin \ + ~/.cargo/bin \ + ~/bin \ + /opt/local/sbin \ + /opt/local/bin fish_add_path --append \ ~/devtools/buck/bin \ diff --git a/.emacs.d/custom.el b/.emacs.d/custom.el index 57c1939..12d8c00 100644 --- a/.emacs.d/custom.el +++ b/.emacs.d/custom.el @@ -24,7 +24,6 @@ '(company-minimum-prefix-length 1) '(css-indent-offset 2) '(custom-safe-themes t) - '(eglot-code-action-indications '(eldoc-hint)) '(fast-lock-cache-directories '("~/flc-cache")) '(fast-lock-minimum-size nil) '(fill-column 77) @@ -78,13 +77,13 @@ js2-mode js2-refactor json-mode jsonnet-mode lsp-hack lsp-pyright lsp-ui lua-mode magit markdown-mode merlin mocha modus-themes monky monokai-theme multi-term - mustache-mode nyan-mode paredit poly-markdown popup - prettier-js projectile protobuf-mode python-mode request - rjsx-mode ruby-mode rust-mode scala-ts-mode simple-httpd - sql-indent swift-mode switch-window terraform-mode thrift - tide tree-sitter tss tuareg typescript-mode use-package - uuidgen vterm web-mode wgrep wgsl-mode xref-js2 - xterm-color yaml-mode zig-mode)) + mustache-mode nyan-mode paredit popup prettier-js + projectile protobuf-mode python-mode request rjsx-mode + ruby-mode rust-mode scala-ts-mode simple-httpd sql-indent + swift-mode switch-window terraform-mode thrift tide + tree-sitter tss tuareg typescript-mode use-package uuidgen + vterm web-mode wgrep wgsl-mode xref-js2 xterm-color + yaml-mode zig-mode)) '(reb-re-syntax 'string) '(rmail-mail-new-frame t) '(safe-local-variable-directories '("/home/john.doty/universe/")) @@ -107,7 +106,6 @@ '(sentence-end-double-space nil) '(show-paren-mode t) '(show-paren-style 'parenthesis) - '(straight-use-package-by-default t) '(tab-width 4) '(tags-revert-without-query t) '(tramp-completion-reread-directory-timeout nil) diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 60fe291..d32e8b2 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -6,8 +6,6 @@ ;;; This is my .emacs. ;;; There are many like it, but this one is mine. ;;; -;;; 2025/12/24 - Convert to straight.el from ELPA; it's been a good run. -;;; ;;; 2019/03/27 - Moved back into init.el, to make profiling possible. ;;; ;;; 2016/12/03 - Just a note: been using Emacs far more heavily as my core @@ -58,27 +56,6 @@ (setq custom-file (concat init-dir "custom.el")) (load custom-file) -;; ================================================================= -;; straight.el bootstrap -;; ================================================================= -;; This is after the custom-set-variables thing so that straight.el -;; picks up on customizations that we've made. -(defvar bootstrap-version) -(let ((bootstrap-file - (expand-file-name - "straight/repos/straight.el/bootstrap.el" - (or (bound-and-true-p straight-base-dir) - user-emacs-directory))) - (bootstrap-version 7)) - (unless (file-exists-p bootstrap-file) - (with-current-buffer - (url-retrieve-synchronously - "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" - 'silent 'inhibit-cookies) - (goto-char (point-max)) - (eval-print-last-sexp))) - (load bootstrap-file nil 'nomessage)) - ;; ================================================================= ;; Load Path Customization ;; ================================================================= @@ -86,6 +63,52 @@ ;; add private lisp directory to load-path. (add-to-list 'load-path (directory-file-name "~/site-lisp")) +;; ================================================================= +;; FB STUFF +;; ================================================================= +(defconst master-dir (getenv "LOCAL_ADMIN_SCRIPTS")) +(defconst engshare-master (getenv "ADMIN_SCRIPTS")) +(defconst is-fb-environment + (file-exists-p "/usr/share/emacs/site-lisp/fb-master.el") + "Are we running on an FB machine or not?") + +(when is-fb-environment + ;; Load the master.emacs file which apparently has stuff in it I want? + (load-library "/usr/share/emacs/site-lisp/fb-master.el") + + ;; Set up the proxy for working properly from the devserver. + (if (and + (getenv "HOSTNAME") + (string-match-p ".+\.facebook\.com" (getenv "HOSTNAME"))) + (setq url-proxy-services + '(("no_proxy" . "^\\(localhost\\|10.*\\)") + ("http" . "fwdproxy:8080") + ("https" . "fwdproxy:8080")))) + ) + +;; ================================================================= +;; Packages +;; ================================================================= +;; See http://dotyl.ink/l/qbmhz43kju +(let* ((no-ssl (and (memq system-type '(windows-nt ms-dos)) + (not (gnutls-available-p)))) + (proto (if no-ssl "http" "https"))) + (setq package-archives + '(("gnu" . "https://elpa.gnu.org/packages/") + ("org" . "https://orgmode.org/elpa/") + )) + + (add-to-list 'package-archives (cons "melpa" (concat proto "://melpa.org/packages/")) t) + ) +(package-initialize) +(unless package-archive-contents + (package-refresh-contents)) + +;; Really we should be marking *everyting* here with :ensure rather than +;; downloading it all up front. +;; +;; (package-install-selected-packages)) + ;; ================================================================= ;; Common stuff that's needed once ;; ================================================================= @@ -93,6 +116,8 @@ (require 'ffap) ;; Am I using this? (require 'uniquify) ;; Unique buffers based on file name. (require 'ansi-color) +(when is-fb-environment + (require '50-arc)) (require 'ert) ;; I don't know, I started getting probs. (prefer-coding-system 'utf-8) @@ -151,41 +176,47 @@ ;; segfaulting on my devserver when it called find-font, and I'll be damned ;; if I'm going to debug it.) ;; -(defun font-candidate (&rest fonts) - "Return the first font in the list of FONTS." - (cl-find-if (lambda (f) (find-font (font-spec :name f))) fonts)) (if (display-graphic-p) - ;; Consolas. (And, to a lesser extent, Inconsolata.) - ;; - (let ((my-font-choice (cond - ((string-equal (downcase (system-name)) "bifrost") - "InputMonoNarrow-12") + (let ((jd-frame-height)) + ;; Consolas. (And, to a lesser extent, Inconsolata.) + ;; + (defun font-candidate (&rest fonts) + "Return existing font which first match." + (cl-find-if (lambda (f) (find-font (font-spec :name f))) fonts)) - ((string-equal (downcase (system-name)) "fred") - "InputMonoNarrow-16") + (defvar my-font-choice + (cond + ((string-equal (downcase (system-name)) "bifrost") + "InputMonoNarrow-12") - ((string-equal (downcase (system-name)) "unstablesurface") - "Input Mono Narrow:pixelsize=28:weight=normal") + ((string-equal (downcase (system-name)) "fred") + "InputMonoNarrow-16") - ((string-equal (downcase (system-name)) "oldconvert") - "Input Mono Narrow:pixelsize=28:weight=normal") + ((string-equal (downcase (system-name)) "unstablesurface") + "Input Mono Narrow:pixelsize=28:weight=normal") - (t - (font-candidate - "Input Mono Narrow:pixelsize=14:weight=normal" - "InputMonoNarrow-14" - "Consolas-10" - "Inconsolata-11" - "Monaco-14"))))) + ((string-equal (downcase (system-name)) "oldconvert") + "Input Mono Narrow:pixelsize=28:weight=normal") + + (t + (font-candidate + "Input Mono Narrow:pixelsize=14:weight=normal" + "InputMonoNarrow-14" + "Consolas-10" + "Inconsolata-11" + "Monaco-14"))) + "The font I'm using, in graphics mode.") ;; This is just here for playing with things. (set-frame-font my-font-choice) + ;; ;; To obtain new font string, execute eval-expression, and eval this: ;; (insert(prin1-to-string(w32-select-font))) ;; This will show the required string in the scratch buffer. + ;; NOTE: I used to compute the height of the initial frame based on ;; display pixel height but it got unsustainable and I hated it. (setq ;; jd-frame-height @@ -193,6 +224,7 @@ ;; ((> (display-pixel-height) 768) 48) ;; ('t 40))) + ;; frame settings. default-frame-alist controls what a default frame ;; looks like. (setq default-frame-alist @@ -206,7 +238,7 @@ (width . 91))) )) -(use-package doom-themes :straight t +(use-package doom-themes :ensure t :config (load-theme 'doom-vibrant t) @@ -252,7 +284,7 @@ (setq w32-use-w32-font-dialog t) ;; Adaptive fill for everybody! -(use-package filladapt :straight t +(use-package filladapt :ensure t :init (setq-default filladapt-mode t)) (require 'ido) @@ -261,9 +293,8 @@ (add-hook 'before-save-hook 'whitespace-cleanup) ;; Fix path loading on MacOS X -(straight-register-package 'exec-path-from-shell) (when (memq window-system '(mac ns)) - (use-package exec-path-from-shell :straight t) + (use-package exec-path-from-shell :ensure t) (exec-path-from-shell-initialize)) ;;; Stefan Monnier . It is the opposite of fill-paragraph @@ -353,9 +384,9 @@ ;; ================================================================= ;; clipetty makes the kill ring interact with the terminal. ;; ================================================================= -(straight-register-package 'clipetty) (when (getenv "TMUX") - (use-package clipetty :straight t + (use-package clipetty + :ensure t :hook (after-init . global-clipetty-mode))) ;; ================================================================= @@ -373,7 +404,7 @@ ;; ================================================================= ;; Company? Company. ;; ================================================================= -(use-package company :straight t +(use-package company :ensure t :commands company-mode :init ;; 2023-08-26: Enable company mode globally. @@ -434,7 +465,7 @@ (eq major-mode 'csharp-ts-mode)) (eglot-format))) -(use-package eglot :straight t +(use-package eglot :ensure t :commands (eglot-ensure eglot) :hook (python-mode . eglot-ensure) @@ -505,23 +536,11 @@ (add-hook 'eglot-connect-hook 'my-eglot-connect-hook)) ;; NOTE: elgot defers to flymake for error information. -(use-package flymake :straight t +(use-package flymake :bind (("C-c n" . 'flymake-goto-next-error) ("C-c p" . 'flymake-goto-prev-error))) -(defun rebuild-slnx () - "Rebuild the solution file." - (interactive) - (with-temp-buffer - (let ((exit-code (process-file "buck2" nil t nil "run" "//:gen_solution"))) - (unless (zerop exit-code) - (error "Error generating solution (%d): %s" exit-code (buffer-string)))) - (message "%s" (buffer-string))) - (if (and (functionp 'eglot-reconnect) - (functionp 'eglot-current-server)) - (eglot-reconnect (eglot-current-server)))) - ;; ================================================================= ;; CC-Mode configuration. Stuff that makes working in IDL, C, and ;; C++ a whole lot more tolerable. @@ -598,7 +617,7 @@ Or, uh, Objective C, I guess." (defun my-c-mode-hook () "Doty's `c-mode' hook." - (c-set-style "ms-c") + (c-set-style (if is-fb-environment "fb-c-style" "ms-c")) (add-hook 'before-save-hook 'clang-format-cpp-buffer)) (add-hook 'c-mode-hook 'my-c-mode-hook) @@ -683,7 +702,7 @@ Or, uh, Objective C, I guess." ;; C#-Mode configuration. ;; ================================================================= -(use-package csharp-ts-mode :straight nil +(use-package csharp-mode :ensure t :preface (defun my-csharp-mode-hook () @@ -740,16 +759,7 @@ Or, uh, Objective C, I guess." ;; Fix up record indentation (and parameter list indentation too.) (push '((parent-is "parameter_list") parent-bol csharp-ts-mode-indent-offset) - (cdar csharp-ts-mode--indent-rules)) - (push - '((node-is "arrow_expression_clause") parent-bol csharp-ts-mode-indent-offset) - (cdar csharp-ts-mode--indent-rules)) - - (push - '((node-is "type_parameter_constraints_clause") parent-bol csharp-ts-mode-indent-offset) - (cdar csharp-ts-mode--indent-rules)) - - ) + (cdar csharp-ts-mode--indent-rules))) ;; (use-package csharp-lsp-decompile ;; :config @@ -809,7 +819,7 @@ Or, uh, Objective C, I guess." ;; ================================================================= ;; Elm ;; ================================================================= -(use-package flycheck-elm :straight t +(use-package flycheck-elm :ensure t :after (flycheck) :config (add-to-list 'flycheck-checkers 'elm)) @@ -826,7 +836,7 @@ Or, uh, Objective C, I guess." ;; ================================================================= ;; Flycheck ;; ================================================================= -(use-package flycheck :straight t +(use-package flycheck :ensure t :config (setq-default flycheck-temp-prefix ".flycheck") (setq-default flycheck-disabled-checkers @@ -839,6 +849,8 @@ Or, uh, Objective C, I guess." ;; ================================================================= (defun my-python-mode-hook () "My hook for `python-mode`." + (when is-fb-environment + (flycheck-select-checker `python-fb-flake8)) (unless (and (buffer-file-name) (string-match-p "TARGETS" (buffer-file-name))) (blacken-mode))) @@ -852,7 +864,7 @@ Or, uh, Objective C, I guess." ;; (add-to-list 'interpreter-mode-alist '("python" . python-mode)) ;; (add-hook 'python-mode-hook 'my-python-mode-hook)) -(use-package blacken :straight t +(use-package blacken :ensure t :commands (blacken-mode) :hook (python-mode . blacken-mode)) @@ -867,7 +879,7 @@ Or, uh, Objective C, I guess." ;; Bazel Support ;; ================================================================= -(use-package bazel :straight t +(use-package bazel :ensure t :mode (("/\\.bazelignore\\'" . bazelignore-mode) ("/\\(?:\\(?:bazel\\)?\\.bazelrc\\)\\'" . bazelrc-mode) ("/.+\\.bzl\\'" . bazel-starlark-mode) @@ -985,7 +997,7 @@ Or, uh, Objective C, I guess." ;; (add-hook 'project-find-functions #'project-find-go-module) ;;----- -(use-package go-mode :straight t +(use-package go-mode :ensure t :mode "\\.go\\'" :config (add-hook 'before-save-hook 'gofmt-before-save)) @@ -1009,7 +1021,7 @@ Or, uh, Objective C, I guess." (my--fix-aspell) (require 'ox-quip)) -(use-package org :straight t +(use-package org :mode ("\\.org\\'" . org-mode) :bind (:map org-mode-map ("C-c l" . org-store-link) @@ -1042,16 +1054,16 @@ Or, uh, Objective C, I guess." ;; (tide-hl-identifier-mode) ;; (eldoc-mode +1))) -(use-package typescript-mode :straight t +(use-package typescript-mode :ensure t ;; 2023-09-03 Trying eglot instead of TIDE for now. ;; :config ;; (add-hook 'typescript-mode-hook 'ts/enable-eglot-or-tide) ) -(use-package add-node-modules-path :straight t +(use-package add-node-modules-path :ensure t :hook (typescript-mode . add-node-modules-path)) -(use-package prettier-js :straight t +(use-package prettier-js :ensure t :hook (typescript-mode . prettier-js-mode)) ;; 2023-09-03 Trying eglot instead of TIDE for now. @@ -1079,10 +1091,30 @@ Or, uh, Objective C, I guess." (vv (cadr spev))) (setenv vn vv)))) + + +;; ;; ================================================================= +;; ;; PHP stuff +;; ;; ================================================================= +;; (if is-fb-environment +;; (progn +;; ;; Hack support for stuff in www +;; (setq hack-for-hiphop-root (expand-file-name "www" "~")) +;; ;;(load "/home/engshare/tools/hack-for-hiphop") + +;; (load-library "/usr/share/emacs/site-lisp/emacs-packages/hh-client.el") +;; (require 'hh-client) + +;; (defun my-fb-php-hook () +;; (global-set-key (kbd "M-.") 'hh-client-find-definition)) +;; (add-hook 'php-mode-hook 'my-fb-php-hook) +;; )) + + ;; ================================================================= ;; Magit stuff ;; ================================================================= -(use-package magit :straight t +(use-package magit :ensure t :bind (("C-x g" . magit-status) ("C-c g" . magit-dispatch) ("C-c f" . magit-file-dispatch))) @@ -1090,14 +1122,15 @@ Or, uh, Objective C, I guess." ;; ================================================================= ;; Mercurial stuff ;; ================================================================= -;; ;; I remove Hg from VC-mode because it is SO SLOW. -;; (setq vc-handled-backends (remove 'Hg vc-handled-backends)) -;; ;; But I have monky enabled so I can use it instead. -;; (use-package monky :straight t -;; :config -;; (setq monky-process-type 'cmdserver) -;; :bind -;; ("C-x h" . monky-status)) +;; I remove Hg from VC-mode because it is SO SLOW. +(setq vc-handled-backends (remove 'Hg vc-handled-backends)) +;; But I have monky enabled so I can use it instead. +(use-package monky + :ensure t + :config + (setq monky-process-type 'cmdserver) + :bind + ("C-x h" . monky-status)) ;; ================================================================= ;; Shell stuff @@ -1115,7 +1148,7 @@ Or, uh, Objective C, I guess." (add-hook 'shell-mode-hook 'my-shell-mode-hook) ;; xterm-color -(use-package xterm-color :straight t +(use-package xterm-color :ensure t :config (add-hook 'comint-preoutput-filter-functions 'xterm-color-filter) (setq comint-output-filter-functions @@ -1153,33 +1186,25 @@ Or, uh, Objective C, I guess." "My hook for markdown mode." (turn-off-auto-fill) (setq truncate-lines nil) - (setq word-wrap 't)) + (setq word-wrap 't) + (when is-fb-environment + (require 'fb-note-publish))) -(use-package markdown-mode :straight t +(use-package markdown-mode :ensure t :mode "\\.md\\'" :config (add-hook 'markdown-mode-hook 'my-markdown-mode-hook)) -(use-package adaptive-wrap :straight t +(use-package adaptive-wrap :ensure t :commands adaptive-wrap-prefix-mode :init (add-hook 'markdown-mode-hook 'adaptive-wrap-prefix-mode) (add-hook 'visual-line-mode-hook 'adaptive-wrap-prefix-mode)) -(use-package poly-markdown :straight t - :init - (add-hook 'markdown-mode-hook 'poly-markdown-mode) - :config - ;; NOTE: This hook is required to keep from resetting the line-wrap stuff every time we switch modes. - (add-hook 'polymode-after-switch-buffer-hook - (lambda (_old _new) - (setq truncate-lines nil) - (setq word-wrap t) - (visual-line-mode 1)))) ;; ================================================================= ;; Rust ;; ================================================================= -(use-package rust-mode :straight t +(use-package rust-mode :ensure t :mode "\\.rs\\'" :commands rust-format-buffer ; 2023-10-26 Make this command available even when the mode isn't used. :config @@ -1201,12 +1226,11 @@ Or, uh, Objective C, I guess." ;; ================================================================= ;; Clojure ;; ================================================================= -(straight-register-package 'cider) -(use-package clojure-mode :straight t +(use-package clojure-mode :ensure t :mode (("\\.clj\\'" . clojure-mode) ("\\.edn\\'" . clojure-mode)) :config - (use-package cider :straight t + (use-package cider :ensure t :config ;; Put TARGETS in clojure-build-tool-files so that directories with TARGETS ;; get identified as projects. @@ -1218,7 +1242,7 @@ Or, uh, Objective C, I guess." ;; ================================================================ ;; TRAMP ;; ================================================================ -(use-package tramp :straight t +(use-package tramp :config ;; Since we're going to be doing this a lot, the minibar message tramp ;; spits out for every file access is both spammy, distracting, and often @@ -1260,8 +1284,16 @@ Or, uh, Objective C, I guess." ;; ================================================================ ;; Zig ;; ================================================================ -(use-package zig-mode :straight t - :mode (("\\.zig\\'" . zig-mode))) +(use-package zig-mode :ensure t + :mode (("\\.zig\\'" . zig-mode)) + :config + (require 'lsp) ;; There's a use-package somewhere else...? + (add-to-list 'lsp-language-id-configuration '(zig-mode . "zig")) + (lsp-register-client + (make-lsp-client + :new-connection (lsp-stdio-connection "") + :major-modes '(zig-mode) + :server-id 'zls))) ;; ================================================================ ;; Pico-8 @@ -1272,8 +1304,7 @@ Or, uh, Objective C, I guess." (setq lua-indent-level 1) (set-fill-column 32)) -(use-package pico8-mode ;; :straight t (site-lisp) - :straight (pico8-mode :type git :host github :repo "Kaali/pico8-mode") +(use-package pico8-mode :mode (("\\.p8\\'" . pico8-mode)) :config (add-hook 'pico8-mode-hook 'my-pico8-hook)) @@ -1288,7 +1319,7 @@ Or, uh, Objective C, I guess." (setq truncate-lines nil) (visual-line-mode)) -(use-package ink-mode :straight t +(use-package ink-mode :ensure t :mode (("\\.ink\\'" . ink-mode)) :bind (:map ink-mode-map ("M-." . ink-follow-link-at-point) @@ -1310,7 +1341,7 @@ Or, uh, Objective C, I guess." ((file-directory-p "/mnt/c/Users/john/Dropbox") "/mnt/c/Users/john/Dropbox"))) "Where is my dropbox?") -(use-package howm :straight t +(use-package howm :ensure t :init ;; Directory configuration ;; @@ -1346,31 +1377,31 @@ Or, uh, Objective C, I guess." ;; ================================================================= ;; Protocol Buffers ;; ================================================================= -(use-package protobuf-mode :straight t) +(use-package protobuf-mode :ensure t) ;; ================================================================= ;; Deadgrep for searching ;; ================================================================= -(use-package deadgrep :straight t +(use-package deadgrep :ensure t :bind ("C-c d" . deadgrep)) ;; ================================================================= ;; Terraform ;; ================================================================= -(use-package terraform-mode :straight t +(use-package terraform-mode :ensure t :mode "\\.tf(vars)?\\'" :config (add-hook 'terraform-mode-hook #'terraform-format-on-save-mode)) ;; ================================================================= ;; Earthly ;; ================================================================= -(use-package earthfile-mode :straight t +(use-package earthfile-mode :ensure t :mode ("\\.earth\\'" "Earthfile\\'")) ;; ================================================================= ;; Java ;; ================================================================= -(use-package eglot-java :straight t +(use-package eglot-java :ensure t :after (eglot) :hook (java-mode . eglot-java-mode)) @@ -1378,18 +1409,18 @@ Or, uh, Objective C, I guess." ;; ================================================================= ;; SQL? ;; ================================================================= -(use-package sql-indent :straight t) +(use-package sql-indent :ensure t) ;; ================================================================= ;; Swift ;; ================================================================= -(use-package swift-mode :straight t +(use-package swift-mode :ensure t :mode "\\.swift\\(interface\\)?\\'") ;; ================================================================= ;; Scala ;; ================================================================= -(use-package scala-ts-mode :straight t +(use-package scala-ts-mode :ensure t :mode "\\.scala\\'" :interpreter ("scala" . scala-mode) ) @@ -1406,89 +1437,81 @@ Do this when you edit your project view." ;; ================================================================= ;; Jsonnet ;; ================================================================= -(use-package jsonnet-mode :straight t +(use-package jsonnet-mode :ensure t :mode "\\.jsonnet\\(\\.TEMPLATE\\)?\\'") ;; ================================================================= ;; Fish shell ;; ================================================================= -(use-package fish-mode :straight t) +(use-package fish-mode :ensure) ;; ================================================================= ;; AI Shit ;; ================================================================= -(use-package claude-code-ide - :straight (:type git :host github :repo "manzaltu/claude-code-ide.el") - :bind ("C-c C-'" . claude-code-ide-menu) ; Set your favorite keybinding +(defun claude-get-api-key () + "Get Claude API key from ~/.config/io.datasette.llm/keys.json file." + (let* ((keys-file (expand-file-name "~/.config/io.datasette.llm/keys.json")) + (json-object-type 'hash-table) + (json-array-type 'list) + (json-key-type 'string)) + (if (file-exists-p keys-file) + (let* ((json-data (with-temp-buffer + (insert-file-contents keys-file) + (json-read-from-string (buffer-string)))) + (claude-key (gethash "claude" json-data))) + (if claude-key + claude-key + (error "Claude API key not found in keys.json"))) + (error "Key file keys.json file not found at %s" keys-file)))) + +(defconst my/gptel-databricks-path + (expand-file-name "~/universe/experimental/john.doty/gptel-databricks/") + "The path to the databricks gptel backend.") + +(defconst my/has-gptel-databricks + (file-exists-p my/gptel-databricks-path) + "Whether or not we have the databricks gptel backend.") + +(defconst my/gptel-backend + (if my/has-gptel-databricks + (progn + (add-to-list 'load-path (directory-file-name my/gptel-databricks-path)) + (require 'gptel-databricks) + (gptel-make-databricks "Databricks" :stream t)) + (gptel-make-anthropic "Claude" + :stream t + :key #'claude-get-api-key + :request-params '(:thinking (:type "enabled" :budget_tokens 2048) + :max_tokens 4096))) + "The right backend based on my environment.") + +(defconst my/gptel-model + (if my/has-gptel-databricks + 'claude-3-7-sonnet-internal-tools + 'claude-3-7-sonnet-20250219) + "Which model do we want by default?") + +(use-package gptel :ensure + :bind (:map gptel-mode-map + ("C-c C-g" . gptel-menu) + ("C-c C-t" . gptel-tools)) + + :commands (gptel gptel-menu gptel-tools) :config - (setq claude-code-ide-terminal-backend 'eat) - (setq claude-code-ide-use-side-window nil) - (claude-code-ide-emacs-tools-setup)) ; Optionally enable Emacs MCP tools -;; (defun claude-get-api-key () -;; "Get Claude API key from ~/.config/io.datasette.llm/keys.json file." -;; (let* ((keys-file (expand-file-name "~/.config/io.datasette.llm/keys.json")) -;; (json-object-type 'hash-table) -;; (json-array-type 'list) -;; (json-key-type 'string)) -;; (if (file-exists-p keys-file) -;; (let* ((json-data (with-temp-buffer -;; (insert-file-contents keys-file) -;; (json-read-from-string (buffer-string)))) -;; (claude-key (gethash "claude" json-data))) -;; (if claude-key -;; claude-key -;; (error "Claude API key not found in keys.json"))) -;; (error "Key file keys.json file not found at %s" keys-file)))) - -;; (defconst my/gptel-databricks-path -;; (expand-file-name "~/universe/experimental/john.doty/gptel-databricks/") -;; "The path to the databricks gptel backend.") - -;; (defconst my/has-gptel-databricks -;; (file-exists-p my/gptel-databricks-path) -;; "Whether or not we have the databricks gptel backend.") - -;; (defconst my/gptel-backend -;; (if my/has-gptel-databricks -;; (progn -;; (add-to-list 'load-path (directory-file-name my/gptel-databricks-path)) -;; (require 'gptel-databricks) -;; (gptel-make-databricks "Databricks" :stream t)) -;; (gptel-make-anthropic "Claude" -;; :stream t -;; :key #'claude-get-api-key -;; :request-params '(:thinking (:type "enabled" :budget_tokens 2048) -;; :max_tokens 4096))) -;; "The right backend based on my environment.") - -;; (defconst my/gptel-model -;; (if my/has-gptel-databricks -;; 'claude-3-7-sonnet-internal-tools -;; 'claude-3-7-sonnet-20250219) -;; "Which model do we want by default?") - -;; (use-package gptel :straight t -;; :bind (:map gptel-mode-map -;; ("C-c C-g" . gptel-menu) -;; ("C-c C-t" . gptel-tools)) - -;; :commands (gptel gptel-menu gptel-tools) -;; :config - -;; (setq -;; gptel-model my/gptel-model ; "claude-3-opus-20240229" also available -;; gptel-backend my/gptel-backend) -;; (if (file-exists-p "~/llm-hints.md") -;; (gptel-add-file (expand-file-name "~/llm-hints.md"))) -;; (require 'doty-tools) -;; (require 'doty-tools-buffer-map)) + (setq + gptel-model my/gptel-model ; "claude-3-opus-20240229" also available + gptel-backend my/gptel-backend) + (if (file-exists-p "~/llm-hints.md") + (gptel-add-file (expand-file-name "~/llm-hints.md"))) + (require 'doty-tools) + (require 'doty-tools-buffer-map)) ;; ================================================================= ;; Debugging ;; ================================================================= -(use-package dap-mode :straight t +(use-package dap-mode :ensure :commands dap-debug :config (require 'dap-netcore)) @@ -1496,18 +1519,13 @@ Do this when you edit your project view." ;; ================================================================= ;; WGSL ;; ================================================================= -(use-package wgsl-mode :straight t +(use-package wgsl-mode :ensure :mode "\\.wgsl\\'") ;; ================================================================= ;; HLSL ;; ================================================================= -(use-package hlsl-mode :straight nil +(use-package hlsl-mode :mode "\\.hlsl\\'") -;; ================================================================= -;; Terminal -;; ================================================================= -(use-package eat :straight t) - ;;; init.el ends here