diff --git a/ansible/roles/ansible/tasks/freebsd.yaml b/ansible/roles/ansible/tasks/freebsd.yaml index 03075b6..07b9bef 100644 --- a/ansible/roles/ansible/tasks/freebsd.yaml +++ b/ansible/roles/ansible/tasks/freebsd.yaml @@ -1,6 +1,6 @@ - name: Install packages package: name: - - py39-ansible + - py311-ansible - ansible-sshjail state: present diff --git a/ansible/roles/base/files/gitignore_global b/ansible/roles/base/files/gitignore_global index b1ecf38..37fc837 100644 --- a/ansible/roles/base/files/gitignore_global +++ b/ansible/roles/base/files/gitignore_global @@ -1,3 +1,8 @@ .idea .python-version + +# Emacs per-directory settings .dir-locals.el + +# C/C++ Language Server compile commands +compile_commands.json diff --git a/ansible/roles/emacs/files/elisp/lang-c.el b/ansible/roles/emacs/files/elisp/lang-c.el new file mode 100644 index 0000000..59ce468 --- /dev/null +++ b/ansible/roles/emacs/files/elisp/lang-c.el @@ -0,0 +1,49 @@ +(require 'common-lsp) +(require 'util-tree-sitter) + +(defun locate-compile-commands-file () + "See if compile_commands.json exists." + ;; This can be generated by prefixing the make command with `intercept-build15 --append` + (let ((compile-commands-file (locate-dominating-file (buffer-file-name) "compile_commands.json"))) + compile-commands-file + ) + ) + +(defun activate-c-eglot () + "Activate eglot for the c family of languages." + (when (locate-compile-commands-file) + (eglot-ensure) + (defclass my/eglot-c (eglot-lsp-server) () + :documentation + "Own eglot server class.") + + (add-to-list 'eglot-server-programs + '(c-ts-mode . (my/eglot-c "/usr/local/bin/clangd15"))) + (add-hook 'before-save-hook 'eglot-format-buffer nil 'local) + ) + ) + +(use-package c-mode + :mode ( + ("\\.c\\'" . c-ts-mode) + ("\\.h\\'" . c-or-c++-ts-mode) + ) + :commands (c-mode c-ts-mode) + :pin manual + :ensure nil + :hook ( + (c-ts-mode . (lambda () + (activate-c-eglot) + )) + ) + :init + (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode)) + (add-to-list 'major-mode-remap-alist '(c++-mode . c++-ts-mode)) + (add-to-list 'major-mode-remap-alist '(c-or-c++-mode . c-or-c++-ts-mode)) + (add-to-list 'treesit-language-source-alist '(c "https://github.com/tree-sitter/tree-sitter-c")) + (add-to-list 'treesit-language-source-alist '(cpp "https://github.com/tree-sitter/tree-sitter-cpp")) + (unless (treesit-ready-p 'c) (treesit-install-language-grammar 'c)) + (unless (treesit-ready-p 'cpp) (treesit-install-language-grammar 'cpp)) + ) + +(provide 'lang-c) diff --git a/ansible/roles/emacs/files/elisp/lang-rust.el b/ansible/roles/emacs/files/elisp/lang-rust.el index 39a8cbd..4e857bc 100644 --- a/ansible/roles/emacs/files/elisp/lang-rust.el +++ b/ansible/roles/emacs/files/elisp/lang-rust.el @@ -57,7 +57,7 @@ :init (add-to-list 'major-mode-remap-alist '(rust-mode . rust-ts-mode)) (add-to-list 'treesit-language-source-alist '(rust "https://github.com/tree-sitter/tree-sitter-rust")) - (unless (treesit-ready-p 'yaml) (treesit-install-language-grammar 'rust)) + (unless (treesit-ready-p 'rust) (treesit-install-language-grammar 'rust)) :config ;; Add keybindings for interacting with Cargo (use-package cargo diff --git a/ansible/roles/emacs/files/init.el b/ansible/roles/emacs/files/init.el index 3c1f43a..2eafda9 100644 --- a/ansible/roles/emacs/files/init.el +++ b/ansible/roles/emacs/files/init.el @@ -32,4 +32,6 @@ (require 'lang-dockerfile) +(require 'lang-c) + (load-directory autoload-directory) diff --git a/ansible/roles/emacs/tasks/freebsd.yaml b/ansible/roles/emacs/tasks/freebsd.yaml index cde4ccc..fc62e31 100644 --- a/ansible/roles/emacs/tasks/freebsd.yaml +++ b/ansible/roles/emacs/tasks/freebsd.yaml @@ -16,20 +16,20 @@ when: 'emacs_flavor == "full"' package: name: - - py39-pygments + - py311-pygments - inkscape # to support SVGs in LaTeX # - prettier # typescript formatting - aspell - en-aspell - unzip # for extracting mspyls - - py39-isort - - py39-black + - py311-isort + - py311-black - zip # for odt export from org-mode - gnuplot # used for exporting graphs from org-mode # - pyright - sqlite3 # for sqlite code blocks in org-mode # - terraform-ls # Terraform language server - - py39-ptvsd + - py311-ptvsd - hs-ShellCheck # - gopls state: present diff --git a/ansible/roles/kubernetes/tasks/freebsd.yaml b/ansible/roles/kubernetes/tasks/freebsd.yaml index b9ab790..3e56976 100644 --- a/ansible/roles/kubernetes/tasks/freebsd.yaml +++ b/ansible/roles/kubernetes/tasks/freebsd.yaml @@ -1,5 +1,5 @@ - name: Install packages package: name: - - py39-yamllint + - py311-yamllint state: present diff --git a/ansible/roles/users/tasks/main.yaml b/ansible/roles/users/tasks/main.yaml index 29ec2c4..e7f9b8d 100644 --- a/ansible/roles/users/tasks/main.yaml +++ b/ansible/roles/users/tasks/main.yaml @@ -3,7 +3,7 @@ package: name: - zsh - - py39-jmespath # Needed on machine running ansible for json_query + - py311-jmespath # Needed on machine running ansible for json_query state: present - name: Install packages diff --git a/ansible/roles/zsh/tasks/freebsd.yaml b/ansible/roles/zsh/tasks/freebsd.yaml index abb4c5c..8cede41 100644 --- a/ansible/roles/zsh/tasks/freebsd.yaml +++ b/ansible/roles/zsh/tasks/freebsd.yaml @@ -4,7 +4,7 @@ - zsh - sqlite3 - git - - py39-jmespath # Needed on machine running ansible for json_query + - py311-jmespath # Needed on machine running ansible for json_query state: present - include_tasks: