;;; EditorCubes --- The common cubes for FG42 -*- lexical-binding: t; -*- ;; ;; Copyright (c) 2010-2021 Sameer Rahmani & Contributors ;; ;; Author: Sameer Rahmani ;; URL: https://gitlab.com/FG42/FG42 ;; Version: 3.0.0 ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; ;;; Commentary: ;;; Code: (require 'fpkg) (require 'fg42/cube) (defflag font-icons "Enable the support for font icones in FG42." t) (defcube fg42/pinentry-cube (:docs "cubes/fg42/pinentry-cube.org" :flag pinentry :flag-default t) (fpkg/use pinentry :init (progn (setq epa-pinentry-mode 'loopback) (pinentry-start)))) (defcube fg42/exec-path-cube (:docs "cubes/fg42/exec-path-cube.org" :flag exec-path-from-shell :flag-default t) (fpkg/use exec-path-from-shell :init (when (memq window-system '(mac ns x)) (exec-path-from-shell-initialize)))) (defcube fg42/cursor-cube (:docs "cubes/fg42/cursor-cube.org" :flag cursor-type :flag-default t) (let ((ctype (or (plist-get fg42/cursor-cube-params :type) 'box)) (ccolor (or (plist-get fg42/cursor-cube-params :color) "#aa0000"))) (add-hook 'fg42/after-initializing-theme-hook (lambda () (set-default 'cursor-type ctype) (set-cursor-color ccolor))))) (defcube fg42/buffer-navigation-cube (:docs "cubes/fg42/buffer-navigation-cube.org" :flag buffer-navigation :flag-default t) (fpkg/use avy :bind ("M-1" . avy-goto-word-1))) (defcube fg42/window-navigation-cube (:docs "cubes/fg42/window-navigation-cube.org" :flag window-navigation :flag-default t) (fpkg/use ace-window :bind ("C-" . ace-window))) (defcube fg42/font-cube (:docs "cubes/fg42/font-cube.org" :no-flag t :flag-default t) (let ((font (or (plist-get fg42/font-cube-params :font-name) "Fira Mono")) (size (or (plist-get fg42/font-cube-params :font-size) 12))) ;; Sets the default font to fg42 font (add-to-list 'default-frame-alist (cons 'font (format "%s-%d" font size))) (set-face-attribute 'default t :font font))) (defcube fg42/dracula-theme-cube (:docs "cubes/fg42/dracula-theme-cube.org" :no-flag t) (require 'fg42/themes) (fpkg/use dracula-theme :init (fg42/setup-theme (load-theme 'dracula t) (custom-theme-set-faces 'dracula '(match ((t (:background "#44475a")))) '(all-the-icons-lgreen ((t (:background "#bd93f9")))) '(all-the-icons-faicon ((t (:background "#bd93f9")))) '(font-lock-comment-face ((t (:foreground "#8B9298")))) '(font-lock-comment-delimiter-face ((t (:foreground "#5B6268"))))) (enable-theme 'dracula)))) (defcube fg42/selectrum-cube (:docs "cubes/fg42/editor-cube.org" :flag selectrum :flag-default t) (fpkg/use selectrum :defer nil :init (selectrum-mode +1)) (fpkg/use selectrum-prescient :defer t :init (progn (setq prescient-filter-method '(literal fuzzy regexp initialism)) (selectrum-prescient-mode +1) (prescient-persist-mode +1))) ;; TODO: Disbale ctrlf in WM mode (fpkg/use ctrlf :defer t :init (ctrlf-mode +1))) (defcube fg42/editor-cube (:docs "cubes/fg42/editor-cube.org" :no-flag t) (fpkg/use rainbow-delimiters ;; It doesn't work due to a problem/conflict in rainbow-delimiters ;; But we use it any way they might fix it :hook (prog-mode . rainbow-delimiters-mode)) (when-flag font-icon (fpkg/use all-the-icons)) ;; In the following section we're setting some default behavior of FG42. ;; Most of these configuration are opiniated and I think most of people ;; shared the same opinion or don't care at all. ;; Remove splash screen (setq inhibit-splash-screen t) ;; scratch should be scratch (setq initial-scratch-message nil) ;; Don't allow tab as indent (setq-default indent-tabs-mode nil) ;; Default indent width (setq tab-width 2) ;; Share the clipboard with X applications (setq x-select-enable-clipboard t) ;; Automatically removed excess backups of the file (setq delete-old-versions t) ;; Global configurations (tool-bar-mode -1) (scroll-bar-mode -1) (menu-bar-mode -1) (column-number-mode t) (show-paren-mode t) (electric-pair-mode 1) ;; Rectangular select (cua-selection-mode t) ;; Yank the region on type (delete-selection-mode 1) (defalias 'yes-or-no-p 'y-or-n-p) ;; Hooks --- ;; Deletel extra trailing white spaces on save (add-hook 'before-save-hook 'delete-trailing-whitespace) ;; Enable rainbow-delimiters for programming (add-hook 'prog-mode-hook #'rainbow-delimiters-mode) ;; Call the editor related cubes. They will be run only if ;; their flag is active otherwise they will be skipped (fg42/font-cube) (fg42/pinentry-cube) (fg42/exec-path-cube) (fg42/buffer-navigation-cube) (fg42/window-navigation-cube) (fg42/selectrum-cube) (fg42/cursor-cube)) (provide 'cubes/editor) ;;; editor.el ends here