aboutsummaryrefslogblamecommitdiff
path: root/users/programs/emacs/site-lisp/init-base.el
blob: 7c884abf1ed98f5b659bab30d2cc57bfc8a75b86 (plain) (tree)











































                                                                                                                          














































                                                                                              



                                      



                      






































































                                                                                                              


                          
;;; init-base.el --- base configuration -*- lexical-binding: t -*-
;; Author: Franck Cuny <franck@fcuny.net>

;;; Commentary:

;; commentary

;;; Code:

(setq backup-inhibited t)   ;; no backups
(setq create-lockfiles nil) ;; don't use a lock file

(setq auto-save-default nil)                            ;; no auto save
(setq confirm-kill-emacs #'yes-or-no-p)                 ;; ask before killing emacs
(setq cursor-in-non-selected-windows nil)               ;; keep cursors and highlights in current window only
(setq delete-by-moving-to-trash t)                      ;; delete files by moving them to the trash
(setq highlight-nonselected-windows nil)                ;; don't highlight inactive windows
(setq history-delete-duplicates t)                      ;; delete duplicate from history
(setq initial-major-mode 'fundamental-mode)             ;; default mode for the scratch buffer
(setq initial-scratch-message "")                       ;; makes the scratch buffer empty
(setq midnight-period (* 3600 6))                       ;; clear buffer every 6 hours
(setq mode-line-default-help-echo nil)                  ;; don't say anything on mode-line mouseover
(setq require-final-newline t)                          ;; ensure a new line is present at the bottom of files
(setq ring-bell-function 'ignore)                       ;; really no bell
(setq sentence-end-double-space nil)                    ;; it matters for filling
(setq use-short-answers t)                              ;; use y-or-n
(setq visible-bell nil)                                 ;; no bell
(setq bidi-display-reordering nil)                      ;; disable bidirectional text support for slight performance bonus
(setq column-number-mode t)                             ;; show column number in the mode line

(global-set-key (kbd "M-j") 'join-line)

(use-package recentf
  :hook (after-init . recentf-mode)
  :custom
  (recentf-max-saved-items 1000)
  (recentf-max-menu-items 25)
  (recentf-save-file-modes nil)
  (recentf-keep nil)
  (recentf-auto-cleanup nil)
  (recentf-initialize-file-name-history nil)
  (recentf-filename-handlers nil)
  (recentf-show-file-shortcuts-flag nil))

(use-package midnight
  :custom
  ;; every 6 hours
  (midnight-period (* 3600 6)))

(use-package imenu
  :config
  (setq imenu-auto-rescan t))

(use-package autorevert
  :hook (after-init . global-auto-revert-mode)
  :custom
  (auto-revert-use-notify nil))

(use-package time
  :commands (world-clock)
  :hook (after-init . display-time-mode)
  :config
  (setq display-time-format " %a %e %b, %H:%M ")
  (setq display-time-24hr-format t)
  (setq display-time-interval 60)
  (setq display-time-default-load-average nil)
  (setq display-time-world-list t)

  ;; M-x shell RET timedatectl list-timezones
  (setq zoneinfo-style-world-list '(("America/Los_Angeles" "Berkeley")
				    ("America/Chicago" "Chicago")
				    ("UTC" "UTC")
				    ("Europe/Paris" "Paris")))

  ;; M-x world-clock
  (setq world-clock-list t)
  (setq world-clock-time-format "%z %R	%a %d %b (%Z)")
  (setq world-clock-buffer-name "*world-clock*") ; Placement handled by `display-buffer-alist'
  (setq world-clock-timer-enable t)
  (setq world-clock-timer-second 60))

(use-package ibuffer
  :bind ("C-x C-b" . ibuffer)
  :custom
  (ibuffer-expert t)
  (ibuffer-show-empty-filter-groups nil)
  (ibuffer-jump-offer-only-visible-buffers t)
  (ibuffer-never-show-predicates '("^ "))
  (ibuffer-use-other-window t)
  (ibuffer-filter-group-name-face '(:inherit (font-lock-string-face bold))))

(use-package which-key
  :diminish
  :hook (after-init . which-key-mode))

(use-package saveplace
  :config
  (save-place-mode t))

(use-package savehist
  :hook (after-init . savehist-mode)
  :custom
  (savehist-file (locate-user-emacs-file "savehist"))
  (history-length 100)
  (history-delete-duplicates t)
  (savehist-save-minibuffer-history t))

(use-package project
  :bind
  (("C-x p ." . project-dired)
   ("C-x p <return>" . project-dired))
  :custom
  (project-switch-commands
   '(
     (consult-project-buffer "buffer" ?b)
     (project-dired "dired" ?d)
     (magit-project-status "magit status" ?g)
     (project-find-file "find file" ?p)
     (consult-ripgrep "rigprep" ?r)))
  (setq project-mode-line t)
  (setq project-key-prompt-style t))

 ; Emacs 30

(use-package rg
  :custom
  (rg-group-result t)
  (rg-show-columns t)
  (rg-align-line-number-field-length 3)
  (rg-align-column-number-field-length 3)
  (rg-align-line-column-separator "#")
  (rg-align-position-content-separator "|")
  (rg-hide-command nil)
  (rg-align-position-numbers t)
  (rg-command-line-flags '("--follow")))

(use-package dired
  :hook (dired-mode . dired-omit-mode)
  :bind (:map dired-mode-map
              ( "."     . dired-omit-mode))
  :custom
  (dired-omit-files (rx (seq bol ".")))
  (dired-use-ls-dired t)
  (dired-clean-up-buffers-too nil)
  (dired-dwim-target t)
  (dired-hide-details-hide-information-lines nil)
  (dired-hide-details-hide-symlink-targets nil)
  (dired-recursive-copies 'always)
  (dired-recursive-deletes 'always)
  (dired-no-confirm
   '(byte-compile chgrp chmod chown copy hardlink symlink touch)))

(defun my/rename-this-buffer-and-file ()
  "Renames current buffer and file it is visiting."
  (interactive)
  (let ((name (buffer-name))
        (filename (buffer-file-name))
        (read-file-name-function 'read-file-name-default))
    (if (not (and filename (file-exists-p filename)))
        (error "Buffer '%s' is not visiting a file!" name)
      (let ((new-name (read-file-name "New name: " filename)))
        (cond ((get-buffer new-name)
               (error "A buffer named '%s' already exists!" new-name))
              (t
               (rename-file filename new-name 1)
               (rename-buffer new-name)
               (set-visited-file-name new-name)
               (set-buffer-modified-p nil)
               (message "File '%s' successfully renamed to '%s'" name (file-name-nondirectory new-name))))))))

(provide 'init-base)

;;; init-base.el ends here