mirror of
https://github.com/librephoenix/nixos-config
synced 2025-01-19 15:15:52 +05:30
Culled/organized emacs config + wayland clipboard/org-download
This commit is contained in:
parent
4def9b1ef4
commit
b4f165c140
|
@ -68,11 +68,13 @@
|
||||||
;; Disables custom.el
|
;; Disables custom.el
|
||||||
(setq custom-file null-device)
|
(setq custom-file null-device)
|
||||||
|
|
||||||
;; Emacs dashboard
|
;; emacs-dashboard setup
|
||||||
(require 'all-the-icons)
|
(require 'all-the-icons)
|
||||||
(require 'dashboard)
|
(require 'dashboard)
|
||||||
(setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*")))
|
(setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*"))
|
||||||
(setq doom-fallback-buffer-name "*dashboard*")
|
doom-fallback-buffer-name "*dashboard*")
|
||||||
|
|
||||||
|
;; emacs-dashboard variables
|
||||||
(setq dashboard-banner-logo-title "Welcome to Nix Doom Emacs")
|
(setq dashboard-banner-logo-title "Welcome to Nix Doom Emacs")
|
||||||
(setq dashboard-startup-banner 2)
|
(setq dashboard-startup-banner 2)
|
||||||
(setq dashboard-icon-type 'all-the-icons) ;; use `all-the-icons' package
|
(setq dashboard-icon-type 'all-the-icons) ;; use `all-the-icons' package
|
||||||
|
@ -84,8 +86,6 @@
|
||||||
(setq dashboard-footer-messages '("Here to do customizing, or actual work?"
|
(setq dashboard-footer-messages '("Here to do customizing, or actual work?"
|
||||||
"M-x insert-inspiring-message"
|
"M-x insert-inspiring-message"
|
||||||
"My software never has bugs. It just develops random features."
|
"My software never has bugs. It just develops random features."
|
||||||
"Give a man a program and you will frustrate him for a day.
|
|
||||||
Teach him how to program and you will frustrate him for a lifetime."
|
|
||||||
"Dad, what are clouds made of? Linux servers, mostly."
|
"Dad, what are clouds made of? Linux servers, mostly."
|
||||||
"There is no place like ~"
|
"There is no place like ~"
|
||||||
"~ sweet ~"
|
"~ sweet ~"
|
||||||
|
@ -94,41 +94,42 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
"I'd tell you a UDP joke, but you might not get it."
|
"I'd tell you a UDP joke, but you might not get it."
|
||||||
"I'll tell you a TCP joke. Do you want to hear it?"))
|
"I'll tell you a TCP joke. Do you want to hear it?"))
|
||||||
(setq dashboard-navigator-buttons
|
(setq dashboard-navigator-buttons
|
||||||
`(;; line1
|
`(;; line1
|
||||||
( (,"Roam" "" "" (lambda (&rest _)) 'org-formula)
|
( (,"Roam" "" "" (lambda (&rest _)) 'org-formula)
|
||||||
(,(all-the-icons-octicon "globe" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-octicon "globe" :height 1.0 :v-adjust 0.0)
|
||||||
"Notes overview" "" (lambda (&rest _) (org-roam-default-overview)) 'org-formula)
|
"Notes overview" "" (lambda (&rest _) (org-roam-default-overview)) 'org-formula)
|
||||||
(,(all-the-icons-fileicon "org" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-fileicon "org" :height 1.0 :v-adjust 0.0)
|
||||||
"Switch roam db" "" (lambda (&rest _) (org-roam-switch-db)) 'org-formula)
|
"Switch roam db" "" (lambda (&rest _) (org-roam-switch-db)) 'org-formula)
|
||||||
)
|
)
|
||||||
;; line 2
|
;; line 2
|
||||||
( (,"Git" "" "" (lambda (&rest _)) 'match)
|
( (,"Git" "" "" (lambda (&rest _)) 'match)
|
||||||
(,(all-the-icons-octicon "mark-github" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-octicon "mark-github" :height 1.0 :v-adjust 0.0)
|
||||||
"GitHub" "" (lambda (&rest _) (browse-url "ext+container:name=Tech&url=https://github.com/librephoenix")) 'match)
|
"GitHub" "" (lambda (&rest _) (browse-url "ext+container:name=Tech&url=https://github.com/librephoenix")) 'match)
|
||||||
(,(all-the-icons-faicon "gitlab" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-faicon "gitlab" :height 1.0 :v-adjust 0.0)
|
||||||
"GitLab" "" (lambda (&rest _) (browse-url "ext+container:name=Tech&url=https://gitlab.com/librephoenix")) 'match)
|
"GitLab" "" (lambda (&rest _) (browse-url "ext+container:name=Tech&url=https://gitlab.com/librephoenix")) 'match)
|
||||||
(,(all-the-icons-faicon "coffee" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-faicon "coffee" :height 1.0 :v-adjust 0.0)
|
||||||
"Gitea" "" (lambda (&rest _) (browse-url my-gitea-domain)) 'match)
|
"Gitea" "" (lambda (&rest _) (browse-url my-gitea-domain)) 'match)
|
||||||
)
|
)
|
||||||
;; line 3
|
;; line 3
|
||||||
( (,"Agenda" "" "" (lambda (&rest _)) 'dired-warning)
|
( (,"Agenda" "" "" (lambda (&rest _)) 'dired-warning)
|
||||||
(,(all-the-icons-octicon "checklist" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-octicon "checklist" :height 1.0 :v-adjust 0.0)
|
||||||
"Agenda todos" "" (lambda (&rest _) (org-agenda-list)) 'dired-warning)
|
"Agenda todos" "" (lambda (&rest _) (org-agenda-list)) 'dired-warning)
|
||||||
(,(all-the-icons-octicon "calendar" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-octicon "calendar" :height 1.0 :v-adjust 0.0)
|
||||||
"Agenda calendar" "" (lambda (&rest _) (cfw:open-org-calendar)) 'dired-warning)
|
"Agenda calendar" "" (lambda (&rest _) (cfw:open-org-calendar)) 'dired-warning)
|
||||||
)
|
)
|
||||||
;; line 4
|
;; line 4
|
||||||
( (,"Config" "" "" (lambda (&rest _)) 'dired-mark)
|
( (,"Config" "" "" (lambda (&rest _)) 'dired-mark)
|
||||||
(,(all-the-icons-faicon "cogs" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-faicon "cogs" :height 1.0 :v-adjust 0.0)
|
||||||
"System config" "" (lambda (&rest _) (projectile-switch-project-by-name "~/.dotfiles" t)) 'dired-mark)
|
"System config" "" (lambda (&rest _) (projectile-switch-project-by-name "~/.dotfiles" t)) 'dired-mark)
|
||||||
(,(all-the-icons-material "help" :height 1.0 :v-adjust -0.2)
|
(,(all-the-icons-material "help" :height 1.0 :v-adjust -0.2)
|
||||||
"Doom documentation" "" (lambda (&rest _) (doom/help)) 'dired-mark)
|
"Doom documentation" "" (lambda (&rest _) (doom/help)) 'dired-mark)
|
||||||
)
|
)))
|
||||||
))
|
|
||||||
(setq dashboard-footer-icon (all-the-icons-faicon "list-alt"
|
(setq dashboard-footer-icon
|
||||||
:height 1.0
|
(all-the-icons-faicon "list-alt"
|
||||||
:v-adjust -0.15
|
:height 1.0
|
||||||
:face 'font-lock-keyword-face))
|
:v-adjust -0.15
|
||||||
|
:face 'font-lock-keyword-face))
|
||||||
(dashboard-setup-startup-hook)
|
(dashboard-setup-startup-hook)
|
||||||
|
|
||||||
;; Smooth scrolling
|
;; Smooth scrolling
|
||||||
|
@ -205,8 +206,8 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
|
|
||||||
;; Add frame borders and window dividers
|
;; Add frame borders and window dividers
|
||||||
(modify-all-frames-parameters
|
(modify-all-frames-parameters
|
||||||
'((right-divider-width . 10)
|
'((right-divider-width . 5)
|
||||||
(internal-border-width . 10)))
|
(internal-border-width . 5)))
|
||||||
(dolist (face '(window-divider
|
(dolist (face '(window-divider
|
||||||
window-divider-first-pixel
|
window-divider-first-pixel
|
||||||
window-divider-last-pixel))
|
window-divider-last-pixel))
|
||||||
|
@ -215,19 +216,19 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
(set-face-background 'fringe (face-attribute 'default :background))
|
(set-face-background 'fringe (face-attribute 'default :background))
|
||||||
|
|
||||||
(setq
|
(setq
|
||||||
;; Edit settings
|
;; Edit settings
|
||||||
org-auto-align-tags nil
|
org-auto-align-tags nil
|
||||||
org-tags-column 0
|
org-tags-column 0
|
||||||
org-catch-invisible-edits 'show-and-error
|
org-catch-invisible-edits 'show-and-error
|
||||||
org-special-ctrl-a/e t
|
org-special-ctrl-a/e t
|
||||||
org-insert-heading-respect-content t
|
org-insert-heading-respect-content t
|
||||||
|
|
||||||
;; Org styling, hide markup etc.
|
;; Org styling, hide markup etc.
|
||||||
org-hide-emphasis-markers t
|
org-hide-emphasis-markers t
|
||||||
org-pretty-entities t
|
org-pretty-entities t
|
||||||
org-ellipsis "…")
|
org-ellipsis "…")
|
||||||
|
|
||||||
(setq-default line-spacing 0.1)
|
(setq-default line-spacing 0.15)
|
||||||
|
|
||||||
; Automatic table of contents is nice
|
; Automatic table of contents is nice
|
||||||
(if (require 'toc-org nil t)
|
(if (require 'toc-org nil t)
|
||||||
|
@ -254,25 +255,6 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
;; Better for org source blocks
|
;; Better for org source blocks
|
||||||
(setq electric-indent-mode nil)
|
(setq electric-indent-mode nil)
|
||||||
(setq org-src-window-setup 'current-window)
|
(setq org-src-window-setup 'current-window)
|
||||||
(delete
|
|
||||||
'("^\\*Org Src"
|
|
||||||
(+popup-buffer)
|
|
||||||
(actions)
|
|
||||||
(side . bottom)
|
|
||||||
(size . 0.42)
|
|
||||||
(window-width . 40)
|
|
||||||
(window-height . 0.42)
|
|
||||||
(slot)
|
|
||||||
(vslot)
|
|
||||||
(window-parameters
|
|
||||||
(ttl)
|
|
||||||
(quit)
|
|
||||||
(select . t)
|
|
||||||
(modeline . t)
|
|
||||||
(autosave . t)
|
|
||||||
(transient . t)
|
|
||||||
(no-other-window . t)))
|
|
||||||
display-buffer-alist)
|
|
||||||
|
|
||||||
;; Horizontal scrolling tables
|
;; Horizontal scrolling tables
|
||||||
(add-load-path! "~/.emacs.d/phscroll")
|
(add-load-path! "~/.emacs.d/phscroll")
|
||||||
|
@ -286,7 +268,12 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
;; Drag-and-drop to `dired`
|
;; Drag-and-drop to `dired`
|
||||||
(add-hook 'dired-mode-hook 'org-download-enable)
|
(add-hook 'dired-mode-hook 'org-download-enable)
|
||||||
|
|
||||||
(setq org-download-screenshot-method "flameshot gui -p %s")
|
;; system-wm-type, wayland or x11? only should be considered if system-nix-profile is "personal" or "work"
|
||||||
|
(if (string= system-wm-type "wayland")
|
||||||
|
(setq org-download-screenshot-method "grim -g \"$(slurp)\" %s")
|
||||||
|
(setq org-download-screenshot-method "flameshot gui -p %s")
|
||||||
|
)
|
||||||
|
|
||||||
(after! org-download
|
(after! org-download
|
||||||
(setq org-download-method 'directory))
|
(setq org-download-method 'directory))
|
||||||
|
|
||||||
|
@ -294,37 +281,24 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
(setq-default org-download-image-dir "img/"
|
(setq-default org-download-image-dir "img/"
|
||||||
org-download-heading-lvl nil))
|
org-download-heading-lvl nil))
|
||||||
|
|
||||||
(defun my-org-screenshot ()
|
(add-to-list 'display-buffer-alist '("^*Async Shell Command*" . (display-buffer-no-window)))
|
||||||
"Take a screenshot into a time stamped unique-named file in the
|
|
||||||
same directory as the org-buffer and insert a link to this file."
|
|
||||||
(interactive)
|
|
||||||
(setq filename
|
|
||||||
(concat
|
|
||||||
(make-temp-name
|
|
||||||
(concat (buffer-file-name)
|
|
||||||
"_"
|
|
||||||
(format-time-string "%Y%m%d_%H%M%S_")) ) ".png"))
|
|
||||||
(shell-command (concat "emacs-wayshot " filename))
|
|
||||||
(insert (concat "[[" filename "]]"))
|
|
||||||
(org-display-inline-images))
|
|
||||||
|
|
||||||
(defun my-org-paste()
|
(defun org-download-clipboard-basename ()
|
||||||
"Take an image from the clipboard into a time stamped unique-named file in the
|
|
||||||
same directory as the org-buffer and insert a link to this file."
|
|
||||||
(interactive)
|
(interactive)
|
||||||
(setq filename
|
(setq org-download-path-last-dir org-download-image-dir)
|
||||||
(concat
|
(setq org-download-image-dir (completing-read "directory: " (-filter #'f-directory-p (directory-files-recursively "." "" t)) nil t))
|
||||||
(make-temp-name
|
(org-download-clipboard (completing-read "basename: " '() nil nil))
|
||||||
(concat (file-name-directory (buffer-file-name))
|
(setq org-download-image-dir org-download-path-last-dir)
|
||||||
"img/"
|
)
|
||||||
(file-name-nondirectory (buffer-file-name))
|
|
||||||
"_"
|
|
||||||
(format-time-string "%Y%m%d_%H%M%S_")) ) ".png"))
|
|
||||||
(shell-command (concat "wl-paste > " filename))
|
|
||||||
(insert (concat "[[" filename "]]"))
|
|
||||||
(org-display-inline-images))
|
|
||||||
|
|
||||||
(defun my-org-new-file-from-template()
|
(map! :leader
|
||||||
|
:desc "Insert a screenshot"
|
||||||
|
"i s" 'org-download-screenshot
|
||||||
|
:desc "Insert image from clipboard"
|
||||||
|
"i p" 'org-download-clipboard
|
||||||
|
"i P" 'org-download-clipboard-basename)
|
||||||
|
|
||||||
|
(defun org-new-file-from-template()
|
||||||
"Copy a template from ~/Templates into a time stamped unique-named file in the
|
"Copy a template from ~/Templates into a time stamped unique-named file in the
|
||||||
same directory as the org-buffer and insert a link to this file."
|
same directory as the org-buffer and insert a link to this file."
|
||||||
(interactive)
|
(interactive)
|
||||||
|
@ -342,76 +316,57 @@ same directory as the org-buffer and insert a link to this file."
|
||||||
(insert (concat "[[./files/" (file-name-nondirectory filename) "][" prettyname "]]"))
|
(insert (concat "[[./files/" (file-name-nondirectory filename) "][" prettyname "]]"))
|
||||||
(org-display-inline-images))
|
(org-display-inline-images))
|
||||||
|
|
||||||
(when (require 'openwith nil 'noerror)
|
|
||||||
(setq openwith-associations
|
|
||||||
(list
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("mpg" "mpeg" "mp3" "mp4"
|
|
||||||
"avi" "wmv" "wav" "mov" "flv"
|
|
||||||
"ogm" "ogg" "mkv"))
|
|
||||||
"mpv"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("doc" "xls" "ppt" "odt" "ods" "odg" "odp"))
|
|
||||||
"libreoffice"
|
|
||||||
'(file))
|
|
||||||
'("\\.lyx" "lyx" (file))
|
|
||||||
'("\\.chm" "kchmviewer" (file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("pdf" "ps" "ps.gz" "dvi"))
|
|
||||||
"atril"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("kdenlive"))
|
|
||||||
"kdenlive"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("kra"))
|
|
||||||
"krita"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("blend" "blend1"))
|
|
||||||
"blender"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("helio"))
|
|
||||||
"helio"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("svg"))
|
|
||||||
"inkscape"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("flp"))
|
|
||||||
"~/.local/bin/flstudio"
|
|
||||||
'(file))
|
|
||||||
))
|
|
||||||
(openwith-mode 1))
|
|
||||||
|
|
||||||
(add-to-list 'display-buffer-alist '("^*Async Shell Command*" . (display-buffer-no-window)))
|
|
||||||
|
|
||||||
(map! :leader
|
|
||||||
:desc "Insert a screenshot"
|
|
||||||
;; "i s" 'my-org-screenshot)
|
|
||||||
"i s" 'org-download-screenshot)
|
|
||||||
|
|
||||||
(defun org-download-clipboard-basename ()
|
|
||||||
(interactive)
|
|
||||||
(setq org-download-path-last-dir org-download-image-dir)
|
|
||||||
(setq org-download-image-dir (completing-read "directory: " (-filter #'f-directory-p (directory-files-recursively "." "" t)) nil t))
|
|
||||||
(org-download-clipboard (completing-read "basename: " '() nil nil))
|
|
||||||
(setq org-download-image-dir org-download-path-last-dir)
|
|
||||||
)
|
|
||||||
|
|
||||||
(map! :leader
|
|
||||||
:desc "Insert image from clipboard"
|
|
||||||
"i p" 'org-download-clipboard
|
|
||||||
"i P" 'org-download-clipboard-basename)
|
|
||||||
|
|
||||||
(map! :leader
|
(map! :leader
|
||||||
:desc "Create a new file from a template and insert a link at point"
|
:desc "Create a new file from a template and insert a link at point"
|
||||||
"i t" 'my-org-new-file-from-template)
|
"i t" 'my-org-new-file-from-template)
|
||||||
|
|
||||||
|
(if (not (string= system-nix-profile "wsl"))
|
||||||
|
(when (require 'openwith nil 'noerror)
|
||||||
|
(setq openwith-associations
|
||||||
|
(list
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("mpg" "mpeg" "mp3" "mp4"
|
||||||
|
"avi" "wmv" "wav" "mov" "flv"
|
||||||
|
"ogm" "ogg" "mkv"))
|
||||||
|
"mpv"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("doc" "xls" "ppt" "odt" "ods" "odg" "odp"))
|
||||||
|
"libreoffice"
|
||||||
|
'(file))
|
||||||
|
'("\\.lyx" "lyx" (file))
|
||||||
|
'("\\.chm" "kchmviewer" (file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("pdf" "ps" "ps.gz" "dvi"))
|
||||||
|
"atril"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("kdenlive"))
|
||||||
|
"kdenlive"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("kra"))
|
||||||
|
"krita"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("blend" "blend1"))
|
||||||
|
"blender"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("helio"))
|
||||||
|
"helio"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("svg"))
|
||||||
|
"inkscape"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("flp"))
|
||||||
|
"~/.local/bin/flstudio"
|
||||||
|
'(file))
|
||||||
|
))
|
||||||
|
(openwith-mode 1)))
|
||||||
|
|
||||||
(defun org-copy-link-to-clipboard-at-point ()
|
(defun org-copy-link-to-clipboard-at-point ()
|
||||||
"Copy current link at point into clipboard (useful for images and links)"
|
"Copy current link at point into clipboard (useful for images and links)"
|
||||||
;; Remember to press C-g to kill this foreground process if it hangs!
|
;; Remember to press C-g to kill this foreground process if it hangs!
|
||||||
|
@ -425,7 +380,7 @@ same directory as the org-buffer and insert a link to this file."
|
||||||
(if (eq major-mode #'image-mode)
|
(if (eq major-mode #'image-mode)
|
||||||
(image-mode-copy-file-name-as-kill)
|
(image-mode-copy-file-name-as-kill)
|
||||||
)
|
)
|
||||||
(shell-command (concat "~/.emacs.d/scripts/copy-link-or-file/copy-link-or-file-to-clipboard.sh " (gui-get-selection 'CLIPBOARD)) nil nil)
|
(shell-command "~/.emacs.d/scripts/copy-link-or-file/copy-link-or-file-to-clipboard.sh " nil nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
(map! :leader
|
(map! :leader
|
||||||
|
@ -520,6 +475,9 @@ same directory as the org-buffer and insert a link to this file."
|
||||||
:leader
|
:leader
|
||||||
:prefix "n"
|
:prefix "n"
|
||||||
:desc "Org Transclusion Mode" "t" #'org-transclusion-mode))
|
:desc "Org Transclusion Mode" "t" #'org-transclusion-mode))
|
||||||
|
(map! :leader :prefix "n" "l" #'org-transclusion-live-sync-start)
|
||||||
|
|
||||||
|
(add-hook 'org-mode-hook #'org-transclusion-mode)
|
||||||
|
|
||||||
;;;------ Org roam configuration ------;;;
|
;;;------ Org roam configuration ------;;;
|
||||||
(require 'org-roam)
|
(require 'org-roam)
|
||||||
|
|
|
@ -34,12 +34,12 @@
|
||||||
- [[https://orgmode.org/][Org Mode]] (Hierarchical text-based document format)
|
- [[https://orgmode.org/][Org Mode]] (Hierarchical text-based document format)
|
||||||
- [[https://www.orgroam.com/][Org Roam]] (A second brain / personal wiki)
|
- [[https://www.orgroam.com/][Org Roam]] (A second brain / personal wiki)
|
||||||
- [[https://orgmode.org/][Org Agenda]] (Calendar and todo list)
|
- [[https://orgmode.org/][Org Agenda]] (Calendar and todo list)
|
||||||
- [[https://magit.vc/][magit]] (Git Client)
|
- [[https://magit.vc/][Magit]] (Git Client)
|
||||||
|
|
||||||
I have found Emacs to be incredibly efficient, and transferring my workflow to fit inside of Emacs has allowed me to get much more work done. I primarily use Emacs for writing, note-taking, task/project management and organizing information.
|
I have found Emacs to be incredibly efficient, and transferring my workflow to fit inside of Emacs has allowed me to get much more work done. I primarily use Emacs for writing, note-taking, task/project management and organizing information.
|
||||||
|
|
||||||
* Configuration for Doom Emacs
|
* Configuration for Doom Emacs
|
||||||
Doom Emacs is configured via 3 main files, written in Elisp, a dialect of the Lisp programming langauge designed for Emacs. These 3 main files are:
|
Doom Emacs is configured via 3 main files, written in Elisp, a dialect of the Lisp programming language designed for Emacs. These 3 main files are:
|
||||||
- [[./config.el][config.el]] - Stores your main configuration and allows to set user variables.
|
- [[./config.el][config.el]] - Stores your main configuration and allows to set user variables.
|
||||||
- [[./init.el][init.el]] - Allows quick downloads of groups of Emacs packages. These groups of Emacs packages are curated by the Doom Emacs developers.
|
- [[./init.el][init.el]] - Allows quick downloads of groups of Emacs packages. These groups of Emacs packages are curated by the Doom Emacs developers.
|
||||||
- [[./packages.el][packages.el]] - Allows you to download additional packages from Melpa (Emacs package manager).
|
- [[./packages.el][packages.el]] - Allows you to download additional packages from Melpa (Emacs package manager).
|
||||||
|
@ -52,9 +52,9 @@ You can also load separate files inside of [[./config.el][config.el]] via the =l
|
||||||
(load! "~/.doom.d/private.el")
|
(load! "~/.doom.d/private.el")
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
I use this functionality to load my private config file with non-public information.
|
This can be used to load private config file with non-public information, or can be used to create modular configuration.
|
||||||
|
|
||||||
Doom Emacs is traditionally installed by cloning the repository ([[https://github.com/doomemacs/doomemacs][https://github.com/doomemacs/doomemacs]]) and running =./bin/doom install=. I instead install Doom Emacs via Nix Doom Emacs ([[https://github.com/nix-community/nix-doom-emacs][https://github.com/nix-community/nix-doom-emacs]]), which packages Doom Emacs as a Nix derivation. The advantage to this is that I get more reproducibility and the ability to rollback updates (if anything breaks), but the downside is that every time the config is changed/updated, the entire derivation must be rebuilt from scratch (this is often time-consuming). I load this as a Nix derivation in my flake using the [[./doom.nix][doom.nix]] module.
|
Doom Emacs is traditionally installed by cloning the repository ([[https://github.com/doomemacs/doomemacs][https://github.com/doomemacs/doomemacs]]) and running =./bin/doom install=. I instead install Doom Emacs via Nix Doom Emacs ([[https://github.com/nix-community/nix-doom-emacs][https://github.com/nix-community/nix-doom-emacs]]), which packages Doom Emacs as a Nix derivation. The advantage to this is that I get more reproducibility and the ability to rollback updates (if anything breaks), but the downside is that any time Emacs packages are changed/updated, the entire derivation must be rebuilt from scratch (this is often time-consuming). I load this as a Nix derivation in my flake using the [[./doom.nix][doom.nix]] module.
|
||||||
|
|
||||||
* My config.el
|
* My config.el
|
||||||
** Preamble + User Configuration
|
** Preamble + User Configuration
|
||||||
|
@ -129,11 +129,13 @@ Doom Emacs is traditionally installed by cloning the repository ([[https://githu
|
||||||
;; Disables custom.el
|
;; Disables custom.el
|
||||||
(setq custom-file null-device)
|
(setq custom-file null-device)
|
||||||
|
|
||||||
;; Emacs dashboard
|
;; emacs-dashboard setup
|
||||||
(require 'all-the-icons)
|
(require 'all-the-icons)
|
||||||
(require 'dashboard)
|
(require 'dashboard)
|
||||||
(setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*")))
|
(setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*"))
|
||||||
(setq doom-fallback-buffer-name "*dashboard*")
|
doom-fallback-buffer-name "*dashboard*")
|
||||||
|
|
||||||
|
;; emacs-dashboard variables
|
||||||
(setq dashboard-banner-logo-title "Welcome to Nix Doom Emacs")
|
(setq dashboard-banner-logo-title "Welcome to Nix Doom Emacs")
|
||||||
(setq dashboard-startup-banner 2)
|
(setq dashboard-startup-banner 2)
|
||||||
(setq dashboard-icon-type 'all-the-icons) ;; use `all-the-icons' package
|
(setq dashboard-icon-type 'all-the-icons) ;; use `all-the-icons' package
|
||||||
|
@ -145,8 +147,6 @@ Doom Emacs is traditionally installed by cloning the repository ([[https://githu
|
||||||
(setq dashboard-footer-messages '("Here to do customizing, or actual work?"
|
(setq dashboard-footer-messages '("Here to do customizing, or actual work?"
|
||||||
"M-x insert-inspiring-message"
|
"M-x insert-inspiring-message"
|
||||||
"My software never has bugs. It just develops random features."
|
"My software never has bugs. It just develops random features."
|
||||||
"Give a man a program and you will frustrate him for a day.
|
|
||||||
Teach him how to program and you will frustrate him for a lifetime."
|
|
||||||
"Dad, what are clouds made of? Linux servers, mostly."
|
"Dad, what are clouds made of? Linux servers, mostly."
|
||||||
"There is no place like ~"
|
"There is no place like ~"
|
||||||
"~ sweet ~"
|
"~ sweet ~"
|
||||||
|
@ -155,41 +155,42 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
"I'd tell you a UDP joke, but you might not get it."
|
"I'd tell you a UDP joke, but you might not get it."
|
||||||
"I'll tell you a TCP joke. Do you want to hear it?"))
|
"I'll tell you a TCP joke. Do you want to hear it?"))
|
||||||
(setq dashboard-navigator-buttons
|
(setq dashboard-navigator-buttons
|
||||||
`(;; line1
|
`(;; line1
|
||||||
( (,"Roam" "" "" (lambda (&rest _)) 'org-formula)
|
( (,"Roam" "" "" (lambda (&rest _)) 'org-formula)
|
||||||
(,(all-the-icons-octicon "globe" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-octicon "globe" :height 1.0 :v-adjust 0.0)
|
||||||
"Notes overview" "" (lambda (&rest _) (org-roam-default-overview)) 'org-formula)
|
"Notes overview" "" (lambda (&rest _) (org-roam-default-overview)) 'org-formula)
|
||||||
(,(all-the-icons-fileicon "org" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-fileicon "org" :height 1.0 :v-adjust 0.0)
|
||||||
"Switch roam db" "" (lambda (&rest _) (org-roam-switch-db)) 'org-formula)
|
"Switch roam db" "" (lambda (&rest _) (org-roam-switch-db)) 'org-formula)
|
||||||
)
|
)
|
||||||
;; line 2
|
;; line 2
|
||||||
( (,"Git" "" "" (lambda (&rest _)) 'match)
|
( (,"Git" "" "" (lambda (&rest _)) 'match)
|
||||||
(,(all-the-icons-octicon "mark-github" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-octicon "mark-github" :height 1.0 :v-adjust 0.0)
|
||||||
"GitHub" "" (lambda (&rest _) (browse-url "ext+container:name=Tech&url=https://github.com/librephoenix")) 'match)
|
"GitHub" "" (lambda (&rest _) (browse-url "ext+container:name=Tech&url=https://github.com/librephoenix")) 'match)
|
||||||
(,(all-the-icons-faicon "gitlab" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-faicon "gitlab" :height 1.0 :v-adjust 0.0)
|
||||||
"GitLab" "" (lambda (&rest _) (browse-url "ext+container:name=Tech&url=https://gitlab.com/librephoenix")) 'match)
|
"GitLab" "" (lambda (&rest _) (browse-url "ext+container:name=Tech&url=https://gitlab.com/librephoenix")) 'match)
|
||||||
(,(all-the-icons-faicon "coffee" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-faicon "coffee" :height 1.0 :v-adjust 0.0)
|
||||||
"Gitea" "" (lambda (&rest _) (browse-url my-gitea-domain)) 'match)
|
"Gitea" "" (lambda (&rest _) (browse-url my-gitea-domain)) 'match)
|
||||||
)
|
)
|
||||||
;; line 3
|
;; line 3
|
||||||
( (,"Agenda" "" "" (lambda (&rest _)) 'dired-warning)
|
( (,"Agenda" "" "" (lambda (&rest _)) 'dired-warning)
|
||||||
(,(all-the-icons-octicon "checklist" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-octicon "checklist" :height 1.0 :v-adjust 0.0)
|
||||||
"Agenda todos" "" (lambda (&rest _) (org-agenda-list)) 'dired-warning)
|
"Agenda todos" "" (lambda (&rest _) (org-agenda-list)) 'dired-warning)
|
||||||
(,(all-the-icons-octicon "calendar" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-octicon "calendar" :height 1.0 :v-adjust 0.0)
|
||||||
"Agenda calendar" "" (lambda (&rest _) (cfw:open-org-calendar)) 'dired-warning)
|
"Agenda calendar" "" (lambda (&rest _) (cfw:open-org-calendar)) 'dired-warning)
|
||||||
)
|
)
|
||||||
;; line 4
|
;; line 4
|
||||||
( (,"Config" "" "" (lambda (&rest _)) 'dired-mark)
|
( (,"Config" "" "" (lambda (&rest _)) 'dired-mark)
|
||||||
(,(all-the-icons-faicon "cogs" :height 1.0 :v-adjust 0.0)
|
(,(all-the-icons-faicon "cogs" :height 1.0 :v-adjust 0.0)
|
||||||
"System config" "" (lambda (&rest _) (projectile-switch-project-by-name "~/.dotfiles" t)) 'dired-mark)
|
"System config" "" (lambda (&rest _) (projectile-switch-project-by-name "~/.dotfiles" t)) 'dired-mark)
|
||||||
(,(all-the-icons-material "help" :height 1.0 :v-adjust -0.2)
|
(,(all-the-icons-material "help" :height 1.0 :v-adjust -0.2)
|
||||||
"Doom documentation" "" (lambda (&rest _) (doom/help)) 'dired-mark)
|
"Doom documentation" "" (lambda (&rest _) (doom/help)) 'dired-mark)
|
||||||
)
|
)))
|
||||||
))
|
|
||||||
(setq dashboard-footer-icon (all-the-icons-faicon "list-alt"
|
(setq dashboard-footer-icon
|
||||||
:height 1.0
|
(all-the-icons-faicon "list-alt"
|
||||||
:v-adjust -0.15
|
:height 1.0
|
||||||
:face 'font-lock-keyword-face))
|
:v-adjust -0.15
|
||||||
|
:face 'font-lock-keyword-face))
|
||||||
(dashboard-setup-startup-hook)
|
(dashboard-setup-startup-hook)
|
||||||
|
|
||||||
;; Smooth scrolling
|
;; Smooth scrolling
|
||||||
|
@ -273,8 +274,8 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
|
|
||||||
;; Add frame borders and window dividers
|
;; Add frame borders and window dividers
|
||||||
(modify-all-frames-parameters
|
(modify-all-frames-parameters
|
||||||
'((right-divider-width . 10)
|
'((right-divider-width . 5)
|
||||||
(internal-border-width . 10)))
|
(internal-border-width . 5)))
|
||||||
(dolist (face '(window-divider
|
(dolist (face '(window-divider
|
||||||
window-divider-first-pixel
|
window-divider-first-pixel
|
||||||
window-divider-last-pixel))
|
window-divider-last-pixel))
|
||||||
|
@ -283,19 +284,19 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
(set-face-background 'fringe (face-attribute 'default :background))
|
(set-face-background 'fringe (face-attribute 'default :background))
|
||||||
|
|
||||||
(setq
|
(setq
|
||||||
;; Edit settings
|
;; Edit settings
|
||||||
org-auto-align-tags nil
|
org-auto-align-tags nil
|
||||||
org-tags-column 0
|
org-tags-column 0
|
||||||
org-catch-invisible-edits 'show-and-error
|
org-catch-invisible-edits 'show-and-error
|
||||||
org-special-ctrl-a/e t
|
org-special-ctrl-a/e t
|
||||||
org-insert-heading-respect-content t
|
org-insert-heading-respect-content t
|
||||||
|
|
||||||
;; Org styling, hide markup etc.
|
;; Org styling, hide markup etc.
|
||||||
org-hide-emphasis-markers t
|
org-hide-emphasis-markers t
|
||||||
org-pretty-entities t
|
org-pretty-entities t
|
||||||
org-ellipsis "…")
|
org-ellipsis "…")
|
||||||
|
|
||||||
(setq-default line-spacing 0.1)
|
(setq-default line-spacing 0.15)
|
||||||
|
|
||||||
; Automatic table of contents is nice
|
; Automatic table of contents is nice
|
||||||
(if (require 'toc-org nil t)
|
(if (require 'toc-org nil t)
|
||||||
|
@ -322,25 +323,6 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
;; Better for org source blocks
|
;; Better for org source blocks
|
||||||
(setq electric-indent-mode nil)
|
(setq electric-indent-mode nil)
|
||||||
(setq org-src-window-setup 'current-window)
|
(setq org-src-window-setup 'current-window)
|
||||||
(delete
|
|
||||||
'("^\\*Org Src"
|
|
||||||
(+popup-buffer)
|
|
||||||
(actions)
|
|
||||||
(side . bottom)
|
|
||||||
(size . 0.42)
|
|
||||||
(window-width . 40)
|
|
||||||
(window-height . 0.42)
|
|
||||||
(slot)
|
|
||||||
(vslot)
|
|
||||||
(window-parameters
|
|
||||||
(ttl)
|
|
||||||
(quit)
|
|
||||||
(select . t)
|
|
||||||
(modeline . t)
|
|
||||||
(autosave . t)
|
|
||||||
(transient . t)
|
|
||||||
(no-other-window . t)))
|
|
||||||
display-buffer-alist)
|
|
||||||
|
|
||||||
;; Horizontal scrolling tables
|
;; Horizontal scrolling tables
|
||||||
(add-load-path! "~/.emacs.d/phscroll")
|
(add-load-path! "~/.emacs.d/phscroll")
|
||||||
|
@ -350,14 +332,20 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
(setq phscroll-calculate-in-pixels t)
|
(setq phscroll-calculate-in-pixels t)
|
||||||
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** Org Download, Image Capture, and Opening Files in External Programs
|
|
||||||
|
*** Org Download and Image Capture
|
||||||
#+BEGIN_SRC emacs-lisp :tangle config.el
|
#+BEGIN_SRC emacs-lisp :tangle config.el
|
||||||
(require 'org-download)
|
(require 'org-download)
|
||||||
|
|
||||||
;; Drag-and-drop to `dired`
|
;; Drag-and-drop to `dired`
|
||||||
(add-hook 'dired-mode-hook 'org-download-enable)
|
(add-hook 'dired-mode-hook 'org-download-enable)
|
||||||
|
|
||||||
(setq org-download-screenshot-method "flameshot gui -p %s")
|
;; system-wm-type, wayland or x11? only should be considered if system-nix-profile is "personal" or "work"
|
||||||
|
(if (string= system-wm-type "wayland")
|
||||||
|
(setq org-download-screenshot-method "grim -g \"$(slurp)\" %s")
|
||||||
|
(setq org-download-screenshot-method "flameshot gui -p %s")
|
||||||
|
)
|
||||||
|
|
||||||
(after! org-download
|
(after! org-download
|
||||||
(setq org-download-method 'directory))
|
(setq org-download-method 'directory))
|
||||||
|
|
||||||
|
@ -365,37 +353,27 @@ Teach him how to program and you will frustrate him for a lifetime."
|
||||||
(setq-default org-download-image-dir "img/"
|
(setq-default org-download-image-dir "img/"
|
||||||
org-download-heading-lvl nil))
|
org-download-heading-lvl nil))
|
||||||
|
|
||||||
(defun my-org-screenshot ()
|
(add-to-list 'display-buffer-alist '("^*Async Shell Command*" . (display-buffer-no-window)))
|
||||||
"Take a screenshot into a time stamped unique-named file in the
|
|
||||||
same directory as the org-buffer and insert a link to this file."
|
|
||||||
(interactive)
|
|
||||||
(setq filename
|
|
||||||
(concat
|
|
||||||
(make-temp-name
|
|
||||||
(concat (buffer-file-name)
|
|
||||||
"_"
|
|
||||||
(format-time-string "%Y%m%d_%H%M%S_")) ) ".png"))
|
|
||||||
(shell-command (concat "emacs-wayshot " filename))
|
|
||||||
(insert (concat "[[" filename "]]"))
|
|
||||||
(org-display-inline-images))
|
|
||||||
|
|
||||||
(defun my-org-paste()
|
(defun org-download-clipboard-basename ()
|
||||||
"Take an image from the clipboard into a time stamped unique-named file in the
|
|
||||||
same directory as the org-buffer and insert a link to this file."
|
|
||||||
(interactive)
|
(interactive)
|
||||||
(setq filename
|
(setq org-download-path-last-dir org-download-image-dir)
|
||||||
(concat
|
(setq org-download-image-dir (completing-read "directory: " (-filter #'f-directory-p (directory-files-recursively "." "" t)) nil t))
|
||||||
(make-temp-name
|
(org-download-clipboard (completing-read "basename: " '() nil nil))
|
||||||
(concat (file-name-directory (buffer-file-name))
|
(setq org-download-image-dir org-download-path-last-dir)
|
||||||
"img/"
|
)
|
||||||
(file-name-nondirectory (buffer-file-name))
|
|
||||||
"_"
|
|
||||||
(format-time-string "%Y%m%d_%H%M%S_")) ) ".png"))
|
|
||||||
(shell-command (concat "wl-paste > " filename))
|
|
||||||
(insert (concat "[[" filename "]]"))
|
|
||||||
(org-display-inline-images))
|
|
||||||
|
|
||||||
(defun my-org-new-file-from-template()
|
(map! :leader
|
||||||
|
:desc "Insert a screenshot"
|
||||||
|
"i s" 'org-download-screenshot
|
||||||
|
:desc "Insert image from clipboard"
|
||||||
|
"i p" 'org-download-clipboard
|
||||||
|
"i P" 'org-download-clipboard-basename)
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
*** External Program File Management
|
||||||
|
#+BEGIN_SRC emacs-lisp :tangle config.el
|
||||||
|
(defun org-new-file-from-template()
|
||||||
"Copy a template from ~/Templates into a time stamped unique-named file in the
|
"Copy a template from ~/Templates into a time stamped unique-named file in the
|
||||||
same directory as the org-buffer and insert a link to this file."
|
same directory as the org-buffer and insert a link to this file."
|
||||||
(interactive)
|
(interactive)
|
||||||
|
@ -413,76 +391,57 @@ same directory as the org-buffer and insert a link to this file."
|
||||||
(insert (concat "[[./files/" (file-name-nondirectory filename) "][" prettyname "]]"))
|
(insert (concat "[[./files/" (file-name-nondirectory filename) "][" prettyname "]]"))
|
||||||
(org-display-inline-images))
|
(org-display-inline-images))
|
||||||
|
|
||||||
(when (require 'openwith nil 'noerror)
|
|
||||||
(setq openwith-associations
|
|
||||||
(list
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("mpg" "mpeg" "mp3" "mp4"
|
|
||||||
"avi" "wmv" "wav" "mov" "flv"
|
|
||||||
"ogm" "ogg" "mkv"))
|
|
||||||
"mpv"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("doc" "xls" "ppt" "odt" "ods" "odg" "odp"))
|
|
||||||
"libreoffice"
|
|
||||||
'(file))
|
|
||||||
'("\\.lyx" "lyx" (file))
|
|
||||||
'("\\.chm" "kchmviewer" (file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("pdf" "ps" "ps.gz" "dvi"))
|
|
||||||
"atril"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("kdenlive"))
|
|
||||||
"kdenlive"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("kra"))
|
|
||||||
"krita"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("blend" "blend1"))
|
|
||||||
"blender"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("helio"))
|
|
||||||
"helio"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("svg"))
|
|
||||||
"inkscape"
|
|
||||||
'(file))
|
|
||||||
(list (openwith-make-extension-regexp
|
|
||||||
'("flp"))
|
|
||||||
"~/.local/bin/flstudio"
|
|
||||||
'(file))
|
|
||||||
))
|
|
||||||
(openwith-mode 1))
|
|
||||||
|
|
||||||
(add-to-list 'display-buffer-alist '("^*Async Shell Command*" . (display-buffer-no-window)))
|
|
||||||
|
|
||||||
(map! :leader
|
|
||||||
:desc "Insert a screenshot"
|
|
||||||
;; "i s" 'my-org-screenshot)
|
|
||||||
"i s" 'org-download-screenshot)
|
|
||||||
|
|
||||||
(defun org-download-clipboard-basename ()
|
|
||||||
(interactive)
|
|
||||||
(setq org-download-path-last-dir org-download-image-dir)
|
|
||||||
(setq org-download-image-dir (completing-read "directory: " (-filter #'f-directory-p (directory-files-recursively "." "" t)) nil t))
|
|
||||||
(org-download-clipboard (completing-read "basename: " '() nil nil))
|
|
||||||
(setq org-download-image-dir org-download-path-last-dir)
|
|
||||||
)
|
|
||||||
|
|
||||||
(map! :leader
|
|
||||||
:desc "Insert image from clipboard"
|
|
||||||
"i p" 'org-download-clipboard
|
|
||||||
"i P" 'org-download-clipboard-basename)
|
|
||||||
|
|
||||||
(map! :leader
|
(map! :leader
|
||||||
:desc "Create a new file from a template and insert a link at point"
|
:desc "Create a new file from a template and insert a link at point"
|
||||||
"i t" 'my-org-new-file-from-template)
|
"i t" 'my-org-new-file-from-template)
|
||||||
|
|
||||||
|
(if (not (string= system-nix-profile "wsl"))
|
||||||
|
(when (require 'openwith nil 'noerror)
|
||||||
|
(setq openwith-associations
|
||||||
|
(list
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("mpg" "mpeg" "mp3" "mp4"
|
||||||
|
"avi" "wmv" "wav" "mov" "flv"
|
||||||
|
"ogm" "ogg" "mkv"))
|
||||||
|
"mpv"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("doc" "xls" "ppt" "odt" "ods" "odg" "odp"))
|
||||||
|
"libreoffice"
|
||||||
|
'(file))
|
||||||
|
'("\\.lyx" "lyx" (file))
|
||||||
|
'("\\.chm" "kchmviewer" (file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("pdf" "ps" "ps.gz" "dvi"))
|
||||||
|
"atril"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("kdenlive"))
|
||||||
|
"kdenlive"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("kra"))
|
||||||
|
"krita"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("blend" "blend1"))
|
||||||
|
"blender"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("helio"))
|
||||||
|
"helio"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("svg"))
|
||||||
|
"inkscape"
|
||||||
|
'(file))
|
||||||
|
(list (openwith-make-extension-regexp
|
||||||
|
'("flp"))
|
||||||
|
"~/.local/bin/flstudio"
|
||||||
|
'(file))
|
||||||
|
))
|
||||||
|
(openwith-mode 1)))
|
||||||
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** Copy Links/Files into Clipboard
|
*** Copy Links/Files into Clipboard
|
||||||
#+BEGIN_SRC emacs-lisp :tangle config.el
|
#+BEGIN_SRC emacs-lisp :tangle config.el
|
||||||
|
@ -499,7 +458,7 @@ same directory as the org-buffer and insert a link to this file."
|
||||||
(if (eq major-mode #'image-mode)
|
(if (eq major-mode #'image-mode)
|
||||||
(image-mode-copy-file-name-as-kill)
|
(image-mode-copy-file-name-as-kill)
|
||||||
)
|
)
|
||||||
(shell-command (concat "~/.emacs.d/scripts/copy-link-or-file/copy-link-or-file-to-clipboard.sh " (gui-get-selection 'CLIPBOARD)) nil nil)
|
(shell-command "~/.emacs.d/scripts/copy-link-or-file/copy-link-or-file-to-clipboard.sh " nil nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
(map! :leader
|
(map! :leader
|
||||||
|
@ -511,11 +470,22 @@ same directory as the org-buffer and insert a link to this file."
|
||||||
Shamelessly stolen from [[https://unix.stackexchange.com/questions/30093/copy-image-from-command-line-to-clipboard][here]] and modified for my use.
|
Shamelessly stolen from [[https://unix.stackexchange.com/questions/30093/copy-image-from-command-line-to-clipboard][here]] and modified for my use.
|
||||||
#+BEGIN_SRC shell :tangle ./scripts/copy-link-or-file/copy-link-or-file-to-clipboard.sh :tangle-mode (identity #o755)
|
#+BEGIN_SRC shell :tangle ./scripts/copy-link-or-file/copy-link-or-file-to-clipboard.sh :tangle-mode (identity #o755)
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
if [[ -f "$1" ]]; then
|
if [ $(echo $XDG_SESSION_TYPE) == "wayland" ]; then
|
||||||
TYPE=$(file -b --mime-type "$1")
|
FILENAME="$(wl-paste)"
|
||||||
xclip -selection clipboard -t "$TYPE" -i "$1"
|
FILTEREDFILENAME=$(echo "$FILENAME" | sed "s+file:+./+")
|
||||||
|
echo "$FILTEREDFILENAME"
|
||||||
|
if [[ -f "$FILTEREDFILENAME" ]]; then
|
||||||
|
wl-copy < "$FILTEREDFILENAME"
|
||||||
|
fi
|
||||||
|
elif [ $(echo $XDG_SESSION_TYPE) == "x11" ]; then
|
||||||
|
FILENAME="$(xclip -o)"
|
||||||
|
FILTEREDFILENAME=$(echo "$FILENAME" | sed "s+file:+./+")
|
||||||
|
if [[ -f "$FILTEREDFILENAME" ]]; then
|
||||||
|
TYPE=$(file -b --mime-type "$FILTEREDFILENAME")
|
||||||
|
xclip -selection clipboard -t "$TYPE" -i "$FILTEREDFILENAME"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo $1 | xclip -selection clipboard -t text/plain &> /dev/null
|
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
|
@ -620,6 +590,9 @@ exit
|
||||||
:leader
|
:leader
|
||||||
:prefix "n"
|
:prefix "n"
|
||||||
:desc "Org Transclusion Mode" "t" #'org-transclusion-mode))
|
:desc "Org Transclusion Mode" "t" #'org-transclusion-mode))
|
||||||
|
(map! :leader :prefix "n" "l" #'org-transclusion-live-sync-start)
|
||||||
|
|
||||||
|
(add-hook 'org-mode-hook #'org-transclusion-mode)
|
||||||
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** Org Roam Configuration
|
** Org Roam Configuration
|
||||||
|
|
|
@ -1,9 +1,20 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
if [[ -f "$1" ]]; then
|
if [ $(echo $XDG_SESSION_TYPE) == "wayland" ]; then
|
||||||
TYPE=$(file -b --mime-type "$1")
|
FILENAME="$(wl-paste)"
|
||||||
xclip -selection clipboard -t "$TYPE" -i "$1"
|
FILTEREDFILENAME=$(echo "$FILENAME" | sed "s+file:+./+")
|
||||||
|
echo "$FILTEREDFILENAME"
|
||||||
|
if [[ -f "$FILTEREDFILENAME" ]]; then
|
||||||
|
wl-copy < "$FILTEREDFILENAME"
|
||||||
|
fi
|
||||||
|
elif [ $(echo $XDG_SESSION_TYPE) == "x11" ]; then
|
||||||
|
FILENAME="$(xclip -o)"
|
||||||
|
FILTEREDFILENAME=$(echo "$FILENAME" | sed "s+file:+./+")
|
||||||
|
if [[ -f "$FILTEREDFILENAME" ]]; then
|
||||||
|
TYPE=$(file -b --mime-type "$FILTEREDFILENAME")
|
||||||
|
xclip -selection clipboard -t "$TYPE" -i "$FILTEREDFILENAME"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo $1 | xclip -selection clipboard -t text/plain &> /dev/null
|
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
|
|
Loading…
Reference in a new issue