diff --git a/roles/config/files/.config/doom/config.el b/roles/config/files/.config/doom/config.el
index f1b3e774f..a4b8f0411 100644
--- a/roles/config/files/.config/doom/config.el
+++ b/roles/config/files/.config/doom/config.el
@@ -192,8 +192,23 @@
                                 (list #'company-ansible)))
             ))
 
+;; gleam-mode
+(use-package! gleam-ts-mode
+  :mode (rx ".gleam" eos))
+
+(after! treesit
+  (add-to-list 'auto-mode-alist '("\\.gleam$" . gleam-ts-mode)))
+
+(after! gleam-ts-mode
+  (unless (treesit-language-available-p 'gleam)
+    (gleam-ts-install-grammar)))
+
 ;; Eglot LSP
 ;; Documentation: https://discourse.doomemacs.org/t/set-up-lsp-mode-or-eglot-for-insert-language-here/62#how-to-use-a-custom-server-12
+;; powershell
 (set-eglot-client! 'powershell-mode '("pwsh" "-NoLogo" "-NoProfile" "-Command" "/opt/powershell-editor-services/PowerShellEditorServices/Start-EditorServices.ps1"
                                       "-HostName" "Emacs" "-HostProfileId" "Emacs" "-HostVersion" "1.0.0" "-Stdio"))
+;; fish
 (set-eglot-client! 'fish-mode '("fish-lsp" "start"))
+;; gleam
+(set-eglot-client! 'gleam-ts-mode '("gleam" "lsp"))
diff --git a/roles/config/files/.config/doom/packages.el b/roles/config/files/.config/doom/packages.el
index 5c1f32e64..2d262f495 100644
--- a/roles/config/files/.config/doom/packages.el
+++ b/roles/config/files/.config/doom/packages.el
@@ -65,3 +65,11 @@
 
 ;; ansible completion
 (package! company-ansible)
+
+;; gleam treesitter
+(package! gleam-ts-mode
+  :recipe (:host github
+           :repo "gleam-lang/gleam-mode"
+           :branch "main"
+
+           :files ("gleam-ts-*.el")))