;; -*- lexical-binding: t; -*- ;;;; packages (require 'package) (add-to-list 'load-path (expand-file-name "~/.guix-profile/share/emacs/site-lisp")) (guix-emacs-autoload-packages) (require 'use-package-ensure) (setopt use-package-always-ensure t) ;; (setq use-package-verbose t) ; for debugging (setenv "PATH" (format "%s:%s" (expand-file-name "~/Personal/scripts/") (getenv "PATH"))) ;;;; functions (defun clamp (lower-bound upper-bound value) (max lower-bound (min value upper-bound))) (defun request-sudo () "Uses TRAMP to edit currently opened file as root." (interactive) (when buffer-file-name (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name)))) (defun rip-video () "If region, open SEARCH with mpv in --full-screen. Else, open URL at point." (interactive) (let ((URL-OR-SEARCH (if (use-region-p) (buffer-substring (mark) (point)) (shr-url-at-point nil)))) (message "Ludu %s" URL-OR-SEARCH) (start-process-shell-command "rip-video" nil (concat "rip-video " URL-OR-SEARCH)))) ;;;; defaults (global-unset-key (kbd "C-z")) (global-unset-key (kbd "C-x C-z")) ; terrible binding (global-set-key (kbd "C-c =") 'text-scale-increase) (global-set-key (kbd "C-c -") 'text-scale-decrease) (setopt inhibit-startup-message t) (menu-bar-mode -1) (tool-bar-mode -1) (scroll-bar-mode -1) (require 'display-line-numbers) (global-display-line-numbers-mode) (global-visual-line-mode t) (setopt display-line-numbers-type 'relative) (global-hl-line-mode 1) (global-auto-revert-mode 1) (winner-mode 1) ;; prompts (setopt use-short-answers t) (setopt vc-follow-symlinks t) (setopt kill-whole-line t) ;; allow one side window per side of frame (setopt window-sides-slots '(1 1 1 1)) ;; do not show async command buffers by default (add-to-list 'display-buffer-alist (cons "\\*Async Shell Command\\*.*" (cons #'display-buffer-no-window nil))) (setopt scroll-up-aggressively '0.0 scroll-down-aggressively '0.0) ;; move backups to tmp folder (setopt backup-directory-alist `(("." . ,(expand-file-name "tmp/backups/" user-emacs-directory)))) (make-directory (expand-file-name "tmp/auto_saves/" user-emacs-directory) t) ;; move auto-saves to tmp folder (setopt auto-save-list-file-prefix (expand-file-name "tmp/auto_saves/sessions/" user-emacs-directory) auto-save-file-transforms `((".*" ,(expand-file-name "tmp/auto_saves/" user-emacs-directory) t))) ;;;; built-in packages (use-package newsticker :demand t :bind (("C-c C-n" . newsticker-show-news) :map newsticker-treeview-item-mode-map ("C-j" . rip-video)) :custom (newsticker-url-list-defaults nil) (newsticker-automatically-mark-items-as-old nil) (newsticker-url-list '(("Ambrose and Elsewhere" "https://jamesenge.com/engeblog/feed" nil nil nil) ("James Enge Mastodon" "https://mastodon.sdf.org/@jamesenge.rss" nil nil nil) ("Tales From the Magician's Skull" "https://goodman-games.com/tftms/category/book-reviews/feed" nil nil nil) ("Parabola GNU/Linux-libre" "https://www.parabola.nu/feeds/news/" nil nil nil) ("suckless.org news" "https://suckless.org/atom.xml" nil nil nil) ("Mental Outlaw" "https://vid.puffyan.us/feed/channel/UC7YOGHUfC1Tb6E4pudI9STA" nil nil nil) ("Luke Smith" "https://vid.puffyan.us/feed/channel/UC2eYFnH61tmytImy1mTYvhA" nil nil nil) ("Brent Westbrook" "https://yewtu.be/feed/channel/UC0PBefyEK7qQ7HN325nUamQ" nil nil nil) ("Bugswriter" "https://yewtu.be/feed/channel/UCngn7SVujlvskHRvRKc1cTw" nil nil nil) ("Protesilaos Stravrou" "https://yewtu.be/feed/playlist/PL8Bwba5vnQK14z96Gil86pLMDO2GnOhQ6" nil nil nil))) ;; may require ./newsticker/groups to be cleared (newsticker-groups '("Feeds" ("READING" "James Enge Mastodon" "Tales From the Magician's Skull" "Ambrose and Elsewhere") ("TECH" "Parabola GNU/Linux-libre" "suckless.org news") ("VIDEO" "Mental Outlaw" "Luke Smith" "Brent Westbrook" "Bugswriter" "Protesilaos Stravrou")))) (use-package eww :demand t :custom (eww-auto-rename-buffer 'title)) (use-package image-dired :bind (("C-c d" . dired-jump)) :custom (dired-listing-switches "-alh") (dired-guess-shell-alist-user `((,(regexp-opt '(".mkv" ".mov" ".mp4" ".webm" ".m4v" ".wav" ".mp3" ".opus" ".ogv" ".flac")) "mpv &") (,(regexp-opt '(".pdf")) "zathura &")))) (use-package erc :config (defalias 'erc 'erc-tls) :custom (erc-lurker-threshold-time 3600) (erc-server "irc.libera.chat") (erc-nick "Isaz") (erc-kill-buffer-on-part t) (erc-autojoin-channels-alist '(("irc.libera.chat" "#parabola" "#emacs" "#guix"))))