From f3e162c297c6adbf8ac419b28e6799d12eb7b894 Mon Sep 17 00:00:00 2001 From: Christopher James Hayward Date: Mon, 8 Mar 2021 15:09:03 -0500 Subject: [PATCH] Separate development / projects --- modules/development.org | 192 ++++++++++++++++++++++++++++++++++++++++ modules/projects.org | 180 ++----------------------------------- 2 files changed, 199 insertions(+), 173 deletions(-) create mode 100644 modules/development.org diff --git a/modules/development.org b/modules/development.org new file mode 100644 index 0000000..96c43f7 --- /dev/null +++ b/modules/development.org @@ -0,0 +1,192 @@ +#+TITLE: Development +#+AUTHOR: Christopher James Hayward +#+EMAIL: chris@chrishayward.xyz + +#+PROPERTY: header-args:emacs-lisp :tangle development.el :comments org +#+PROPERTY: header-args:shell :tangle no +#+PROPERTY: header-args :results silent :eval no-export :comments org + +#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil +#+OPTIONS: skip:nil author:nil email:nil creator:nil timestamp:nil + +Support for individual programming languages, has a hard dependency on the [[file:projects.org][Projects]] module for integration with *LSP*[fn:1] / *DAP*[fn:2] + +* Go + +First class language support for *Golang*[fn:3]. + ++ Full support of *LSP*[fn:1] ++ Full support of *DAP*[fn:1] + +** Installing requirements + +Get started by installing the *gopls*[fn:4] language server. + +#+begin_src shell +GO111MODULE=on go get golang.org/x/tools/gopls@latest +#+end_src + +** Setup the environment + +Make some modifications to the environment. + +*** Overriding the $GOPATH + +Set the =$GOPATH= environment variable prior to loading the module, allowing modification of the default value. + +#+begin_src emacs-lisp +(setenv "GOPATH" (concat (getenv "HOME") "/.go/")) +#+end_src + +*** Adding $GOBIN to the $PATH + +Include the ~bin~ subdirectory of the =$GOPATH= in the =$PATH= variable, adding compiled Golang applications to the system path. + +#+begin_src emacs-lisp +(setenv "PATH" (concat (getenv "GOPATH") "bin:" (getenv "PATH"))) +#+end_src + +** Configuration + +Include the *go-mode*[fn:5] package for integration with *lsp-mode* from the [[file:projects.org][Projects]] module. + +#+begin_src emacs-lisp +(use-package go-mode + :hook (go-mode . lsp) + :custom (lsp-go-gopls-server-path + (expand-file-name "~/.go/bin/gopls"))) +#+end_src + +*** Before save hooks + +Apply some custom behaviour prior to saving buffers. + ++ Format buffers ++ Organize imports + +#+begin_src emacs-lisp +(defun dotfiles/go-hook () + (add-hook 'before-save-hook #'lsp-format-buffer t t) + (add-hook 'before-save-hook #'lsp-organize-imports t t)) + +(add-hook 'go-mode-hook #'dotfiles/go-hook) +#+end_src + +*** Babel structure templates + +Add a structure template for *Golang*[fn:3] source blocks. + +#+begin_src emacs-lisp +(add-to-list 'org-structure-template-alist '("go" . "src go")) +#+end_src + +* HTTP + +Interactive with *HTTP* endpoints using the *ob-http*[fn:6] package. You can see how it works in my post [[file:../docs/posts/kanye-as-a-service.org.gpg][Kanye as a Service]]. Essentialy it adds interactive *HTTP* blocks that can output their results in place. + +#+begin_src emacs-lisp +(use-package ob-http + :after org + :config (org-babel-do-load-languages + 'org-babel-load-languages '((http . t)))) +#+end_src + +* C/C++ + +Add support for the *C/C++* family of languages via the *CCLS*[fn:7] language server. + ++ Integrate with *LSP*[fn:2] ++ Integrate with *DAP*[fn:1] ++ Load babel language modules ++ Create new structure templates + * ~