The Complete Computing Environment

Elixir Programming Configuration

LifeTechEmacsTopicsArcology

Elixir is a cool language which implements a syntax approach like Ruby on top of the Erlang runtime BEAM. It is a fully functional programming language with a powerful macro system with full integration with the world famous Erlang OTP and a powerful MVC website framework called Phoenix.

I use Language Server Protocol for Elixir in Emacs CCE, I believe LSP mode can automatically install the server

(provide 'cce/elixir)
(use-package elixir-mode
  :config
  (setq lsp-ui-flycheck-enable 1)
  (setq lsp-clients-elixir-server-executable
        '("~/Code/elixir-ls/language_server.sh"))
  :hook
  (elixir-mode . lsp)
  (elixir-mode . company-mode)
  (elixir-mode . (lambda () (add-hook 'before-save-hook 'elixir-format nil t)))
  (elixir-mode . flycheck-mode)
  :bind (:map elixir-mode-map ("C-<tab>" . company-complete)))

(use-package ob-elixir)
- name: elixir installed
  dnf:
    name:
    - elixir
    - elixir-doc
    - erlang
    - erlang-doc
    state: installed
  tags:
  - elixir
  - code

I need node.js installed for Phoenix to be able to webpack assets.

- name: phoenix dependencies installed
  dnf:
    name:
    - nodejs
    - npm
    - inotify-tools
    state: installed
  tags:
  - elixir
  - code

- name: elixir-ls directory exists
  become: yes
  become_user: "{{local_account}}"
  file:
    state: directory
    path: ~/Code/elixir-ls
  tags:
  - elixir
  - code

- name: clone elixir-ls
  become: yes
  become_user: "{{local_account}}"
  unarchive:
    dest: ~/Code/elixir-ls/
    remote_src: yes
    src: https://github.com/elixir-lsp/elixir-ls/releases/download/v0.3.3/elixir-ls.zip
  tags:
  - elixir
  - code

- name: executables can be executed
  become: yes
  become_user: "{{local_account}}"
  file:
    mode: 0755
    path: "{{item}}"
  with_items:
  - ~/Code/elixir-ls/debugger.sh
  - ~/Code/elixir-ls/language_server.sh
  tags:
  - elixir
  - code

Some fucking face crap:

(defun cce/fix-elixir-faces ()
  (face-remap-add-relative 'elixir-atom-face
                           '(:inherit font-lock-builtin-face)))
(add-hook 'elixir-mode-hook #'cce/fix-elixir-faces)