aboutsummaryrefslogtreecommitdiff
path: root/users/programs/emacs/site-lisp/init-base.el
blob: 7c884abf1ed98f5b659bab30d2cc57bfc8a75b86 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
;;; 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