Culled/organized emacs config + wayland clipboard/org-download

This commit is contained in:
Emmet 2023-09-01 20:37:22 -05:00
parent 4def9b1ef4
commit b4f165c140
3 changed files with 291 additions and 349 deletions

View file

@ -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)

View file

@ -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

View file

@ -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