refactor: packagise emacs configuration and lib refactor

This commit is contained in:
Artur Manuel 2025-04-09 19:07:28 +01:00
commit 52c33aa328
Signed by: amadaluzia
SSH key fingerprint: SHA256:ubvwT66gNUKSsgSzEb2UQnX8pzTq5N+r8eRVYGJJm4Q
9 changed files with 208 additions and 168 deletions

3
.gitignore vendored
View file

@ -3,10 +3,9 @@
/**/#*#
/**/.#*
!/flake.*
!/emacs
!/config
!/.gitignore
!/README.org
!/media
!/.editorconfig
!/lib.nix
!/config.el

139
config.el
View file

@ -1,139 +0,0 @@
;; -*- lexical-binding: t -*-
(use-package emacs
:init
(setq frame-resize-pixelwise t
window-resize-pixelwise t
frame-inhibit-implied-resize t)
(defun crm-indicator (args)
(cons (format "[CRM%s] %s"
(replace-regexp-in-string
"\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
crm-separator)
(car args))
(cdr args)))
(advice-add #'completing-read-multiple :filter-args #'crm-indicator)
(setq minibuffer-prompt-properties
'(read-only t cursor-intangible t face minibuffer-prompt))
(add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
:custom
(initial-scratch-message nil)
(inhibit-startup-screen t)
(inhibit-splash-screen t)
(menu-bar-mode nil)
(tool-bar-mode nil)
(scroll-bar-mode nil)
(delete-selection-mode t)
(column-number-mode t)
(enable-recursive-buffer t)
(read-extended-command-predicate #'command-completion-default-include-p)
(tab-always-indent 'complete)
:hook (prog-mode . display-line-numbers-mode))
(use-package ivy
:custom
(ivy-mode t)
(counsel-mode t)
(ivy-use-virtual-buffers t)
:bind (("C-s" . swiper-isearch)
("C-c C-r" . ivy-resume)
("<f6>" . ivy-resume)
("M-x" . counsel-M-x)
("C-x C-f" . counsel-find-file)
("<f1> f" . counsel-describe-function)
("<f1> v" . counsel-describe-variable)
("<f1> o" . counsel-describe-symbol)
("<f1> l" . counsel-find-library)
("<f2> i" . counsel-info-lookup-symbol)
("<f2> u" . counsel-unicode-char)
("C-c g" . counsel-git)
("C-c j" . counsel-git-grep)
("C-c k" . counsel-ag)
("C-x l" . counsel-locate)
("C-S-o" . counsel-rhythmbox)
:map minibuffer-local-map
("C-r" . counsel-minibuffer-history)))
(use-package savehist
:defer t
:commands (savehist-mode)
:hook after-init)
(use-package which-key
:defer t
:commands (which-key-mode)
:hook after-init)
(use-package base16-theme
:config
(load-theme 'base16-tokyo-night-dark t))
(use-package nix-ts-mode
:defer t
:commands (nix-ts-mode)
:mode "\\.nix\\'")
(use-package rust-mode
:defer t
:commands (rust-mode)
:mode "\\.rs\\'")
(use-package envrc
:defer t
:commands (envrc-global-mode envrc-mode)
:hook (after-init . envrc-global-mode))
(use-package eglot
:defer t
:commands (eglot eglot-ensure)
:hook (prog-mode . eglot-ensure))
(use-package qml-mode
:defer t
:commands (qml-mode)
:mode "\\.qml\\'")
(use-package haskell-mode
:defer t
:commands (haskell-mode)
:mode "\\.hs\\'")
(use-package python
:defer t
:commands (python-ts-mode python-mode)
:custom
(python-indent-offset 4))
(use-package cc-mode
:defer t
:commands (c-ts-mode
c++-ts-mode
c++-mode
c-mode)
:custom
(c-basic-offset 4))
(use-package nushell-mode
:defer t
:commands (nushell-mode)
:mode "\\.nu\\'")
(use-package tuareg
:defer t
:commands (tuareg-mode tuareg-opam-mode)
:mode "\\.ml\\'")
(use-package nim-mode
:defer t
:commands (nim-mode)
:mode "\\.nim\\'")
(use-package doom-modeline
:defer t
:commands (doom-modeline-mode)
:hook after-init
:custom
(doom-modeline-height 26))
(provide 'config)

22
config/config-dev.el Normal file
View file

@ -0,0 +1,22 @@
;; -*- lexical-binding: t -*-
(defun config-init-dev ()
(use-package which-key
:defer t
:commands (which-key-mode)
:custom
(which-key-mode t))
(use-package envrc
:defer t
:commands (envrc-global-mode envrc-mode)
:custom
(envrc-global-mode t))
(use-package eglot
:defer t
:commands (eglot eglot-ensure)
:hook (prog-mode . eglot-ensure)))
(provide 'config-dev)

29
config/config-ivy.el Normal file
View file

@ -0,0 +1,29 @@
;; -*- lexical-binding: t -*-
(defun config-init-ivy ()
(use-package ivy
:custom
(ivy-mode t)
(counsel-mode t)
(ivy-use-virtual-buffers t)
:bind (("C-s" . swiper-isearch)
("C-c C-r" . ivy-resume)
("<f6>" . ivy-resume)
("M-x" . counsel-M-x)
("C-x C-f" . counsel-find-file)
("<f1> f" . counsel-describe-function)
("<f1> v" . counsel-describe-variable)
("<f1> o" . counsel-describe-symbol)
("<f1> l" . counsel-find-library)
("<f2> i" . counsel-info-lookup-symbol)
("<f2> u" . counsel-unicode-char)
("C-c g" . counsel-git)
("C-c j" . counsel-git-grep)
("C-c k" . counsel-ag)
("C-x l" . counsel-locate)
("C-S-o" . counsel-rhythmbox)
:map minibuffer-local-map
("C-r" . counsel-minibuffer-history))))
(provide 'config-ivy)

View file

@ -0,0 +1,55 @@
;; -*- lexical-binding: t -*-
(defun config-init-languages ()
(use-package nix-ts-mode
:defer t
:commands (nix-ts-mode)
:mode "\\.nix\\'")
(use-package rust-mode
:defer t
:commands (rust-mode)
:mode "\\.rs\\'")
(use-package qml-mode
:defer t
:commands (qml-mode)
:mode "\\.qml\\'")
(use-package haskell-mode
:defer t
:commands (haskell-mode)
:mode "\\.hs\\'")
(use-package python
:defer t
:commands (python-ts-mode python-mode)
:custom
(python-indent-offset 4))
(use-package cc-mode
:defer t
:commands (c-ts-mode
c++-ts-mode
c++-mode
c-mode)
:custom
(c-basic-offset 4))
(use-package nushell-mode
:defer t
:commands (nushell-mode)
:mode "\\.nu\\'")
(use-package tuareg
:defer t
:commands (tuareg-mode tuareg-opam-mode)
:mode "\\.ml\\'")
(use-package nim-mode
:defer t
:commands (nim-mode)
:mode "\\.nim\\'"))
(provide 'config-languages)

16
config/config-ui.el Normal file
View file

@ -0,0 +1,16 @@
;; -*- lexical-binding: t -*-
(defun config-init-ui ()
(use-package doom-modeline
:defer t
:commands (doom-modeline-mode)
:custom
(doom-modeline-mode t)
(doom-modeline-height 26))
(use-package base16-theme
:config
(load-theme 'base16-tokyo-night-dark t)))
(provide 'config-ui)

63
config/config.el Normal file
View file

@ -0,0 +1,63 @@
;;; config.el --- my emacs configuration -*- lexical-binding: t -*-
;; Author: Artur Manuel
;; URL: https://copeberg.org/amadaluzia/pankomacs
;; Version: 0.0.0
;;; Commentary:
;; All this does is provide a configuration for Emacs to use.
;;; Code:
(require 'config-ui)
(require 'config-dev)
(require 'config-ivy)
(require 'config-languages)
(require 'use-package)
(defun config-initialise ()
(config-init-dev)
(config-init-ui)
(config-init-languages)
(config-init-ivy)
(use-package emacs
:init
(setq frame-resize-pixelwise t
window-resize-pixelwise t
frame-inhibit-implied-resize t)
(defun crm-indicator (args)
(cons (format "[CRM%s] %s"
(replace-regexp-in-string
"\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
crm-separator)
(car args))
(cdr args)))
(advice-add #'completing-read-multiple :filter-args #'crm-indicator)
(setq minibuffer-prompt-properties
'(read-only t cursor-intangible t face minibuffer-prompt))
(add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
:custom
(initial-scratch-message nil)
(inhibit-startup-screen t)
(inhibit-splash-screen t)
(menu-bar-mode nil)
(tool-bar-mode nil)
(scroll-bar-mode nil)
(delete-selection-mode t)
(column-number-mode t)
(enable-recursive-buffer t)
(read-extended-command-predicate #'command-completion-default-include-p)
(tab-always-indent 'complete)
:hook (prog-mode . display-line-numbers-mode))
(use-package savehist
:defer t
:commands (savehist-mode)
:hook after-init))
(add-hook #'after-init-hook #'config-initialise)
(provide 'config)
;;; config.el ends here

View file

@ -20,11 +20,13 @@
{
lib = import ./lib.nix inputs;
formatter = forAllSystems (_: pkgs: pkgs.nixfmt-rfc-style);
packages = forAllSystems (_: pkgs: {
packages = forAllSystems (
_: pkgs: {
pgtk = inputs.self.lib.mkPankomacs {
inherit pkgs;
emacs = pkgs.emacs30-pgtk;
};
});
}
);
};
}

33
lib.nix
View file

@ -1,16 +1,19 @@
inputs:
let
pkgsWithEmacsOverlay =
system:
inputs.nixpkgs.legacyPackages.${system}.appendOverlays [
inputs.emacs.overlays.default
];
mkPankomacs =
{
pkgs,
emacs,
}: let
pkgsWithEmacsOverlay = pkgs.appendOverlays [ inputs.emacs.overlays.default ];
in
pkgsWithEmacsOverlay.emacsWithPackagesFromUsePackage {
package = emacs;
}:
(pkgsWithEmacsOverlay pkgs.stdenv.system).emacsWithPackagesFromUsePackage {
config = ./config/config.el;
defaultInitFile = true;
config = ./config.el;
package = emacs;
extraEmacsPackages =
epkgs:
builtins.attrValues {
@ -31,21 +34,11 @@ let
envrc
;
treesit-grammars = epkgs.treesit-grammars.with-all-grammars;
config = epkgs.trivialBuild {
name = "config-${inputs.self.shortRev or "dirty"}";
src = ./config;
};
};
override =
_: prev:
builtins.listToAttrs (
map
(name: {
inherit name;
value = prev.emacs;
})
[
"use-package"
"savehist"
"which-key"
]
);
};
in
{