Which code editor do you use ?
[PS : neovim supports : c++,scala,clojure,crystal,zig,c3,exilir,julia,odin,R,ruby,nasm,gas,odin,pony]
[PS : neovim supports : c++,scala,clojure,crystal,zig,c3,exilir,julia,odin,R,ruby,nasm,gas,odin,pony]
For me it looked a bit like Rust (this means complex to learn at first).
;;; init.el --- Clojure, Crystal, Scala, D, ruby ,go ,odin , nim || (Zig,nasm,gas,python,markdown :no lsp) ::: : Setup 2026
(setenv "ODIN_ROOT" "/home/x/git/Odin/core")
;; 1. Appearance & UI
(load-theme 'wombat t)
(global-display-line-numbers-mode t)
(set-face-attribute 'default nil :font "NotoMono Nerd Font" :height 150)
(set-face-attribute 'line-number-current-line nil :foreground "yellow" :background "black" :weight 'bold)
;; 2. Environment & Performance
(setq inhibit-startup-screen t
initial-scratch-message ""
native-comp-jit-compilation t) ; Updated for 2026
;; Path management (FreeBSD/Unix)
(dolist (path '("/usr/local/bin" "~/.cargo/bin" "~/.local/bin"))
(add-to-list 'exec-path (expand-file-name path)))
(setenv "PATH" (string-join exec-path ":"))
;; 3. Package Management (straight.el)
(defvar bootstrap-version)
(let ((bootstrap-file (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(bootstrap-url "raw.githubusercontent.com"))
(unless (file-exists-p bootstrap-file)
(with-current-buffer (url-retrieve-synchronously bootstrap-url 'silent 'inhibit-cookies)
(goto-char (point-max)) (eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
(setq straight-use-package-by-default t)
(straight-use-package 'use-package)
;; 4. Tree-sitter (Automatic Grammar Management)
(use-package treesit-auto
:demand t
:config
(setq treesit-font-lock-level 4
treesit-auto-install t)
(add-to-list 'treesit-extra-load-path (expand-file-name "tree-sitter" user-emacs-directory))
;; Simplified: let treesit-auto handle the URLs unless you need custom ones
(treesit-auto-add-to-auto-mode-alist 'all)
(global-treesit-auto-mode))
;; 5. Language Support & LSP (Eglot)
(use-package odin-ts-mode
:straight (odin-ts-mode :host github :repo "Sampie159/odin-ts-mode")
:mode ("\\.odin\\'" . odin-ts-mode))
(use-package eglot
:hook ((clojure-ts-mode . eglot-ensure)
(clojure-mode . eglot-ensure)
(crystal-mode . eglot-ensure)
(scala-mode . eglot-ensure)
(d-mode . eglot-ensure)
(zig-mode . eglot-ensure)
(ruby-ts-mode . eglot-ensure)
(python-ts-mode . eglot-ensure)
(markdown-mode . eglot-ensure)
(ponylang-mode . eglot-ensure)
(odin-mode . eglot-ensure) ; Standard mode
(odin-ts-mode . eglot-ensure) ; Tree-sitter mode
(nim-mode . eglot-ensure))
:config
(add-to-list 'eglot-server-programs '(ruby-ts-mode . ("solargraph" "stdio")))
(add-to-list 'eglot-server-programs '(crystal-mode . ("crystalline" "--stdio")))
(add-to-list 'eglot-server-programs '(scala-mode . ("metals")))
(add-to-list 'eglot-server-programs '(d-mode . ("serve-d")))
(add-to-list 'eglot-server-programs '(zig-mode . ("zls")))
(add-to-list 'eglot-server-programs '(go-ts-mode . ("gopls")))
(add-to-list 'eglot-server-programs '(python-ts-mode . ("pyright-langserver" "--stdio")))
(add-to-list 'eglot-server-programs '(ponylang-mode . ("pony-lsp")))
;; Support both mode types for Odin
(add-to-list 'eglot-server-programs '(odin-ts-mode . ("ols")))
(add-to-list 'eglot-server-programs '(nim-mode . ("nimlsp")))
(straight-use-package 'eglot-jl)
(eglot-jl-init))
;; 6. Major Modes & Remaining Config
(use-package go-ts-mode :mode "\\.go\\'")
(use-package clojure-ts-mode :mode "\\.clj\\'")
(use-package nasm-mode :mode ("\\.asm\\'" "\\.s\\'"))
(use-package markdown-mode :mode ("\\.md\\'" . gfm-mode))
(use-package nim-mode :mode "\\.nim\\'")
;; 7. Completion & UI
(use-package yasnippet :init (yas-global-mode 1))
(use-package company :init (global-company-mode))
(use-package vertico :init (vertico-mode 1))
(use-package marginalia :init (marginalia-mode 1))
(use-package smart-mode-line
:init (setq sml/theme 'dark sml/no-confirm-load-theme t)
:config (sml/setup))
;; 8. Dependencies
(mapc #'straight-use-package '(dash f s))
(use-package yasnippet
:hook ((odin-mode . yas-minor-mode)
(odin-ts-mode . yas-minor-mode)))
I struggled getting the hang of emacs for a long time. It has a steep learning cliff. More recently, I've playing with doom emacs which makes things a lot more straightforward. I think of it as a front end for emacs. I'm very much still find my way around it.
:lang
;;ada ; In strong typing we (blindly) trust
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
;;(cc +lsp) ; C > C++ == 1
;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;;csharp ; unity, .NET, and mono shenanigans
;;data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
;;gdscript ; the language you waited for
;;(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST
;;(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
;;json ; At least it ain't XML
;;janet ; Fun fact: Janet is me!
;;(java +lsp) ; the poster child for carpal tunnel syndrome
;;javascript ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
;;latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
;;ledger ; be audit you can be
;;lua ; one-based indices? one-based indices
markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
;;nix ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
org ; organize your plain life in plain text
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;graphviz ; diagrams for confusing yourself even more
;;purescript ; javascript, but functional
;;python ; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
;;rest ; Emacs as a REST client
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
;;(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
;;(scheme +guile) ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.
;;swift ; who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance.
;;web ; the tubes
;;yaml ; JSON, but readable
;;zig ; C, but simpler