dotEmacs
I still like and use emacs. Although I accept some of that is simply because my needs are few, and I rarely need to sit down and fight a large project that benefits from code completion. Although while knocking up this post I did think to try eglot with solargraph and company-mode, and it seems to work with very little configuration.
In fact, the only configuration I felt the need to change was hooking eglot and company into the ruby major mode. Things seem to be far easier than they were just two or three years ago.
My emacs configuration is fairly slender, and I’d say it is well suited to editing scripts and small projects. I’m putting it here so I have a copy for myself, but someone else may find it useful:
;;; -*- lexical-binding: t -*-
;; Font
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:family "IBM Plex Mono" :foundry "IBM " :slant normal :weight regular :height 113 :width normal)))))
;; GUI
(setq inhibit-startup-screen 1)
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(if (window-system) (set-frame-size (selected-frame) 120 27))
;; Builtins
(setq make-backup-files nil)
(setq auto-save-default nil)
(setq ring-bell-function 'ignore)
(global-prettify-symbols-mode t)
(defalias 'yes-or-no-p 'y-or-n-p)
(global-hl-line-mode t)
(load-theme 'modus-vivendi)
;; Packages
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
;; Helpers
(use-package diminish)
(use-package counsel)
(use-package treemacs)
(use-package company :defer t)
(use-package ivy :diminish ivy-mode)
(use-package swiper :bind ("C-s" . 'swiper))
(use-package beacon :diminish beacon-mode)
(use-package undo-tree :diminish undo-tree-mode)
(use-package async)
;; Non-editing Packages
(use-package elfeed :defer t)
(defun elfeed-search-format-date (date)
(format-time-string "%Y-%m-%d %H:%M" (seconds-to-time date)))
(setq-default elfeed-search-filter "-politics -products")
(setq elfeed-feeds '(("https://www.dragonflydigest.com/feed/" freesoftware os bsd)
("https://fedoramagazine.org/feed/" freesoftware os linux)
("https://static.fsf.org/fsforg/rss/news.xml" freesoftware gnu)
("https://lwn.net/headlines/Features" freesoftware security)
("https://rubyweekly.com/rss/" freesoftware ruby programming)
("https://jvns.ca/atom.xml" freesoftware programming)
("https://www.raspberrypi.com/news/feed/" freesoftware products)
("https://mastodon.social/@mntmn.rss" freesoftware products)
("https://liliputing.com/feed" products)
("https://www.openrightsgroup.org/rss.xml" news politics)
("https://www.theguardian.com/uk-news/rss" news politics)
("https://blog.archive.org/feed" news)
("https://solar.lowtechmagazine.com/feeds" blog)))
;; Ruby
(use-package ruby-mode :defer t)
(use-package rbs-mode :defer t)
(add-hook 'ruby-mode-hook 'company-mode)
(add-hook 'ruby-mode-hook 'eglot-ensure)
;; YAML
(use-package yaml-mode :defer t)
;; Global
(setq treemacs-no-png-images t)
(setopt ivy-use-virtual-buffers t)
(setcdr (assq 'read-file-name-internal ivy-sort-functions-alist) 'ido-file-extension-lessp)
(setopt enable-recursive-minibuffers t)
(add-hook 'prog-mode-hook #'display-line-numbers-mode)
;; Keybinds
(keymap-global-set "C-x C-<up>" 'beginning-of-buffer)
(keymap-global-set "C-x C-<down>" 'end-of-buffer)
;; Startup modes
;; Note: treemacs has project/workspace management functionality
;; intended to be manipulated in org-mode. Calling treemacs
;; in this way is not particularly expected or supported.
(add-hook 'emacs-startup-hook (treemacs))
(add-hook 'emacs-startup-hook (ivy-mode))
(add-hook 'emacs-startup-hook (beacon-mode 1))
(add-hook 'emacs-startup-hook (dired-async-mode 1))
;; Auto-add
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(package-selected-packages
'(async beacon company counsel diminish elfeed magit markdown-mode
rbs-mode treemacs undo-tree yaml-mode)))