147 lines
5.9 KiB
EmacsLisp
Raw Normal View History

2025-04-26 23:18:35 +02:00
;; GENERAL UI
(setq x-stretch-cursor t
blink-cursor-mode nil
show-paren-delay 0
scroll-conservatively 5
scroll-margin 0
mouse-wheel-scroll-amount '(2 ((shift) . 2)) ;; one line at a time
mouse-wheel-progressive-speed nil ;; don't accelerate scrolling
mouse-wheel-follow-mouse 't ;; scroll window under mouse
scroll-step 2 ;; keyboard scroll two lines at a time
frame-resize-pixelwise t
frame-title-format "Allmighty Editor w/o Kitchen Sink")
;; Highlight matching parens
(show-paren-mode t)
;; Show line numbers on the left side of the buffer
(global-display-line-numbers-mode 0)
;; Highlight current horizontal line with a different background
(global-hl-line-mode t)
;; Also display the current column index in e.g. the mode-line
(column-number-mode t)
;; Show tooltip on hover in minibuffer
(tooltip-mode 0)
;; Default encoding
(set-language-environment "UTF-8")
;; Show line that indicates maximum number of "allowed" characters
(add-hook 'prog-mode-hook 'display-fill-column-indicator-mode)
;; FONT SETUP
2025-04-26 23:52:10 +02:00
;; TODO: Configure your font
2025-04-26 23:18:35 +02:00
(defvar phga/font "Jetbrains Mono")
(defvar phga/font-size "19")
(defvar phga/font-family (concat phga/font ":size=" phga/font-size))
;; These are required to have the correct font size with the first frame (emacs server)
(add-to-list 'default-frame-alist `(font . ,phga/font-family))
;; TEXT-SCALE: Scale text globally
(defvar phga/text-scale-amount 2)
(defvar phga/text-scale--current-size (string-to-number phga/font-size))
(defun phga/text-scale-adjust ()
"Adjust the size of the frame-font by `phga/text-scale-amount'."
(interactive)
(phga/text-scale--adjust))
(defun phga/text-scale--scale (inc)
"Scale the frame-font by `phga/text-scale-amount'.
If INC is not nil increase the font size else decrease it"
(if inc (setq phga/text-scale--current-size
(+ phga/text-scale--current-size phga/text-scale-amount))
(setq phga/text-scale--current-size
(- phga/text-scale--current-size phga/text-scale-amount)))
(set-frame-font (concat phga/font ":size="
(number-to-string phga/text-scale--current-size)) t t))
(defun phga/text-scale--adjust ()
"Actual function which will call itself with the temporary keymap to scale the text."
(let ((ev last-command-event)
(echo-keystrokes nil))
(pcase (event-basic-type ev)
((or ?= ?k) (phga/text-scale--scale t))
((or ?- ?j) (phga/text-scale--scale nil))
((or ?0) (progn (set-frame-font phga/font-family t t)
(setq phga/text-scale--current-size
(string-to-number phga/font-size))
(error "Reset to normal text scale"))))
(message "Use j/=, k/-, 0 for further adjustment")
(set-transient-map
(let ((map (make-sparse-keymap)))
(dolist (key '(?- ?j ?k ?= ?0))
(define-key map (vector (list key))
(lambda () (interactive) (phga/text-scale--adjust))))
map))))
;; LIGATURES
(straight-use-package 'ligature)
;; Enable the "www" ligature in every possible major mode
;; (ligature-set-ligatures 't '("www"))
;; Enable all Cascadia Code ligatures in programming modes
(ligature-set-ligatures
'prog-mode
'("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
"!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
"<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
"<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
"..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
"~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
"[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
"<$" "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!"
"##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
"?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
"\\\\" "://"))
(global-ligature-mode t)
;; THEMES
;; SHANTY
(straight-use-package 'shanty-themes)
(defvar phga/dark-theme 'shanty-themes-dark)
(defvar phga/light-theme 'shanty-themes-light)
(defvar phga/current-theme phga/dark-theme)
(load-theme phga/current-theme t)
(defun phga/cycle-themes ()
"Cycle through my preferred dark and light theme"
(interactive)
(if (eq phga/current-theme phga/dark-theme)
(progn
(disable-theme phga/dark-theme)
(load-theme phga/light-theme t)
(message "Loaded light theme")
(setq phga/current-theme phga/light-theme))
(progn
(disable-theme phga/light-theme)
(load-theme phga/dark-theme t)
(message "Loaded dark theme")
(setq phga/current-theme phga/dark-theme))))
;; MODE-LINE
;; https://emacs.stackexchange.com/questions/5529/how-to-right-align-some-items-in-the-modeline
(defun simple-mode-line-render (left right)
"Return a string of `window-width' length containing LEFT, and RIGHT aligned respectively."
(let* ((available-width (- (window-total-width) (length left) 2)))
(format (format " %%s %%%ds " available-width) left right)))
(setq-default mode-line-format
'((:eval (simple-mode-line-render
;; left
(format-mode-line
'(""
;; (:eval (propertize "%* %b"))
(:eval (propertize "%* %b" 'face 'mode-line-buffer-id))
evil-mode-line-tag
(:eval (propertize "%m"))))
;; (:eval (propertize "%m" 'face 'font-lock-comment-face))))
;; right
(format-mode-line mode-line-position)))))
;; FIXES
;; Shell mode line highlighted
;; (set-face-attribute 'comint-highlight-prompt nil :inherit nil)
;; (custom-set-faces '(comint-highlight-prompt ((t nil))))
(message "ui.el was succesfully loaded")
(provide 'ui)