diff --git a/.gitignore b/.gitignore index dede1cb..5e534b3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,10 +3,9 @@ /**/#*# /**/.#* !/flake.* -!/emacs +!/config !/.gitignore !/README.org !/media !/.editorconfig !/lib.nix -!/config.el diff --git a/config.el b/config.el deleted file mode 100644 index e4f165e..0000000 --- a/config.el +++ /dev/null @@ -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) - ("" . ivy-resume) - ("M-x" . counsel-M-x) - ("C-x C-f" . counsel-find-file) - (" f" . counsel-describe-function) - (" v" . counsel-describe-variable) - (" o" . counsel-describe-symbol) - (" l" . counsel-find-library) - (" i" . counsel-info-lookup-symbol) - (" 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) diff --git a/config/config-dev.el b/config/config-dev.el new file mode 100644 index 0000000..528dbf9 --- /dev/null +++ b/config/config-dev.el @@ -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) diff --git a/config/config-ivy.el b/config/config-ivy.el new file mode 100644 index 0000000..26c6bab --- /dev/null +++ b/config/config-ivy.el @@ -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) + ("" . ivy-resume) + ("M-x" . counsel-M-x) + ("C-x C-f" . counsel-find-file) + (" f" . counsel-describe-function) + (" v" . counsel-describe-variable) + (" o" . counsel-describe-symbol) + (" l" . counsel-find-library) + (" i" . counsel-info-lookup-symbol) + (" 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) diff --git a/config/config-languages.el b/config/config-languages.el new file mode 100644 index 0000000..99b5d5d --- /dev/null +++ b/config/config-languages.el @@ -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) diff --git a/config/config-ui.el b/config/config-ui.el new file mode 100644 index 0000000..f421f1b --- /dev/null +++ b/config/config-ui.el @@ -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) diff --git a/config/config.el b/config/config.el new file mode 100644 index 0000000..29f3154 --- /dev/null +++ b/config/config.el @@ -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 diff --git a/flake.nix b/flake.nix index 574b6ca..540b95b 100644 --- a/flake.nix +++ b/flake.nix @@ -20,11 +20,13 @@ { lib = import ./lib.nix inputs; formatter = forAllSystems (_: pkgs: pkgs.nixfmt-rfc-style); - packages = forAllSystems (_: pkgs: { - pgtk = inputs.self.lib.mkPankomacs { - inherit pkgs; - emacs = pkgs.emacs30-pgtk; - }; - }); + packages = forAllSystems ( + _: pkgs: { + pgtk = inputs.self.lib.mkPankomacs { + inherit pkgs; + emacs = pkgs.emacs30-pgtk; + }; + } + ); }; } diff --git a/lib.nix b/lib.nix index 67be8de..364e92c 100644 --- a/lib.nix +++ b/lib.nix @@ -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 { @@ -29,23 +32,13 @@ let nushell-mode nim-mode 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 {