configs/Emacs/emacs.org
2025-05-23 17:08:05 +02:00

4.5 KiB
Raw Blame History

Emacs Configuration

About

My attempt at a litterate configuration for Emacs.

Prep

Copilot Authentication

To use GitHub Copilot, you need to authenticate with your GitHub account. This is done by running the following command in Emacs: after installing the copilot package: Try to trigger the GitHub OAuth flow from within Emacs:

(call-interactively 'copilot-auth)

Configuration

Customize UI

Here we set up the UI to our liking. We disable the menu bar, tool bar, and scroll bar, and set the font size to 14pt.

;; disable startup screen
(setq inhibit-startup-screen t)
;; disable menu bar
(menu-bar-mode -1)
;; disable tool bar
(tool-bar-mode -1)
;; disable scroll bar
(scroll-bar-mode -1)
;; set font size
(set-face-attribute 'default nil :height 140)

Set up doom modeline, which is a nice status line for Emacs. We set it up to show the current buffer name and the current line number.

;; install doom-modeline if not already installed
(unless (package-installed-p 'doom-modeline)
  (package-refresh-contents)
  (package-install 'doom-modeline))
(require 'doom-modeline)
;; enable doom-modeline
(doom-modeline-mode 1)
;; set up doom-modeline to show the current buffer name and line number
(setq doom-modeline-buffer-file-name-style 'truncate-with-project)

Set up package management

;; set up package archives
(require 'package)
(setq package-archives
      '(("melpa" . "https://melpa.org/packages/")
        ("gnu"   . "https://elpa.gnu.org/packages/")))
(package-initialize)

Install use-package

;; install use-package if not already installed
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))
(require 'use-package)
;; ensure that use-package is always used
(setq use-package-always-ensure t)

Code Completion and ide features

LSP Mode

Here we install lsp-mode and lsp-ui, which are the core components of the LSP (Language Server Protocol) support in Emacs. We also set up keybindings for common LSP commands.

;; install lsp-mode and lsp-ui if not already installed
(unless (package-installed-p 'lsp-mode)
  (package-refresh-contents)
  (package-install 'lsp-mode))
(unless (package-installed-p 'lsp-ui)
  (package-refresh-contents)
  (package-install 'lsp-ui))
(require 'lsp-mode)
(require 'lsp-ui)
;; enable lsp-mode in programming buffers
(add-hook 'prog-mode-hook #'lsp)

GitHub Copilot

Here we install from MELPA, enable it in all prog-modes and bind keys for completion:

;; ensure Copilot is installed
(unless (package-installed-p 'copilot)
  (package-refresh-contents)
  (package-install 'copilot))

(require 'copilot)
;; turn on in programming buffers
(add-hook 'prog-mode-hook #'copilot-mode)

;; keybindings: M-TAB to trigger, TAB to accept
(define-key copilot-mode-map       (kbd "M-TAB") #'copilot-complete)
(define-key copilot-completion-map (kbd "<tab>")   #'copilot-accept-completion)

Language support

Here we install and configure support for various programming languages. We use the `use-package` macro to ensure that the packages are installed and configured correctly.

;; install and configure javscript-mode
(use-package javscript-mode
  :ensure t
  :mode "\\.js\\'")
;; lsp support for javascript
(use-package lsp-javascript
  :ensure t
  :mode "\\.js\\'")

;; install and configure gleam-mode
(use-package gleam-mode
  :ensure t
  :mode "\\.gleam\\'")

;; lsp support for gleam (use-package lsp-gleam :ensure t :mode "\\.gleam\\'")

#+END_SRC

NixOS from Emacs

Editing Nix files and doing NixOS admin stuff like nixos-rebuild boot upgrade Run the commands with M-x shell-command

;; NixOS commands   
(defun nixos-upgrade ()
  "Run 'nixos-rebuild boot --upgrade' in a shell."
  (interactive)
  (shell-command "nixos-rebuild boot --upgrade"))

(defun nixos-switch ()
  "Run 'nixos-rebuild switch' in a shell."
  (interactive)
  (shell-command "nixos-rebuild switch"))
;; install nix-mode
(use-package nix-mode
  :ensure t
  :mode "\\.nix\\'")
;; install nix-repl
(use-package nix-repl
  :ensure t
  :mode "\\.nix\\'")
;; install nixpkgs
(use-package nixpkgs
  :ensure t
  :mode "\\.nix\\'")