2022-04-22 02:54:47 +00:00
;; -*- lexical-binding: t; -*-
2024-07-27 22:50:46 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; windows performance tweaks
( when ( eq system-type 'windows-nt )
; https://lists.gnu.org/archive/html/bug-gnu-emacs/2012-10/msg00274.html
; https://gioorgi.com/2013/solving-emacs-freeze-andor-slowdown-on-windows7/
( setq w32-get-true-file-attributes nil )
; https://www.reddit.com/r/emacs/comments/c9ef5i/comment/esx5ndr/
( setq inhibit-compacting-font-caches t )
; https://www.reddit.com/r/emacs/comments/c9ef5i/comment/esx5snw/
( when ( boundp 'w32-pipe-read-delay )
( setq w32-pipe-read-delay 0 ) )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; misc performance tweaks
2022-04-22 02:54:47 +00:00
;; Make gc pauses faster by decreasing the threshold.
( setq gc-cons-threshold ( * 2 1000 1000 ) )
2022-11-08 17:52:56 +00:00
;; disable warnings from popping up, they are still logged
( setq warning-suppress-types ' ( ( comp ) ) )
2022-04-22 02:54:47 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; helper functions
;; Figure out if inside Termux
( require 'subr-x )
( setq kmn/is-termux
( string-suffix-p " Android " ( string-trim ( shell-command-to-string " uname -a " ) ) ) )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; os specific config
2023-04-11 16:21:15 +00:00
( when ( and ( eq system-type 'windows-nt )
( not kmn/is-termux ) )
2022-04-22 02:54:47 +00:00
; Fix resolution of ~ to match other client paths
( setenv " HOME " " C:/Users/mcros/Nextcloud " )
( setq default-directory " C:/Users/mcros/Nextcloud " )
; add executables to path ahead of them being used by extensions / emacs stuff
( add-to-list 'exec-path " C:/Users/mcros/OneDrive/Programs/PortableApps/sqlite3 " )
2022-08-25 15:37:02 +00:00
( add-to-list 'exec-path " C:/msys64/usr/bin/unzip.exe " )
2022-08-25 15:49:25 +00:00
( setenv " PATH " ( concat " C: \\ msys64 \\ mingw64 \\ bin; " ( getenv " PATH " ) ) )
2022-04-22 02:54:47 +00:00
)
( when kmn/is-termux
; setup storage locations -- cheat so mobile/desktop look alike for file urls
;(setq user-init-file "/data/data/com.termux/files/home/storage/shared/.emacs")
;(setq user-emacs-directory "/data/data/com.termux/files/home/storage/shared/.emacs.d/")
;(setenv "HOME" "/data/data/com.termux/files/home/storage/shared/")
;(load user-init-file)
; Fix resolution of ~ to match other client paths
2022-04-26 12:06:30 +00:00
( setenv " HOME " " /data/data/com.termux/files/home/ " )
( setq default-directory " /data/data/com.termux/files/home/ " )
2022-04-22 02:54:47 +00:00
; Setup xdg-open as the default for opening files (except for the few we want emacs to open native)
; xdg-open is linked to termux-open by default ; if you need 'more' look into tmux-open and adjust accordingly
; (add-to-list 'org-file-apps '("\\.doc.*" . "open %s"))
( setq org-file-apps
' ( ;; default
( auto-mode . emacs )
( " \\ .org " . emacs )
( " \\ .txt " . emacs )
2022-08-26 18:41:24 +00:00
( " .* " . " termux-open --chooser --view %s " ) ) )
2022-04-22 02:54:47 +00:00
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; global config
( load " ~/.emacs.d.profiles/common/_global.el " )
2023-04-08 16:53:12 +00:00
( load " ~/.emacs.d.profiles/common/generic_functions.el " )
( load " ~/.emacs.d.profiles/common/workspaces.el " )
2024-08-14 16:06:51 +00:00
( tool-bar-mode -1 )
2023-04-08 16:53:12 +00:00
2022-04-22 02:54:47 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2022-06-02 18:33:30 +00:00
; compile bytecode for this profile
( unless ( was-compiled-p " ~/.emacs.d.profiles/org " )
( byte-recompile-directory " ~/.emacs.d.profiles/org " 0 ) )
2022-04-22 02:54:47 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2022-09-13 19:06:22 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; additional packages
( add-to-list 'package-selected-packages
2024-08-02 17:33:29 +00:00
' ( org-tidy org-auto-expand ox-pandoc ox-hugo org-super-agenda org-alert burnt-toast alert )
2022-09-13 19:06:22 +00:00
)
2022-04-22 02:54:47 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Load misc extensions
( require 'org )
2023-02-25 14:02:27 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2023-02-25 14:12:53 +00:00
; org-alert - windows only
2023-02-25 17:13:32 +00:00
( when ( eq system-type 'windows-nt )
( use-package org-alert )
2023-04-21 14:32:04 +00:00
( use-package burnt-toast
:config
( require 'burnt-toast-alert )
( setq alert-default-style 'burnt-toast )
)
2023-02-25 17:13:32 +00:00
( setq org-alert-interval 300
2023-04-24 15:39:45 +00:00
org-alert-notify-cutoff 5
org-alert-notify-after-event-cutoff 5 )
2023-02-25 17:13:32 +00:00
( org-alert-enable )
)
2022-04-22 02:54:47 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Update/add auto file handling
( add-to-list 'auto-mode-alist ' ( " \\ .org \\ ' " . org-mode ) )
2024-08-02 17:33:29 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; hide property drawers / minimize them
( use-package org-tidy
:ensure t
:config
( setq org-tidy-top-property-style 'keep )
( setq org-tidy-properties-style 'inline )
( setq org-tidy-properties-inline-symbol " ↕ " )
( setq org-tidy-property-drawer-flag t )
;org-tidy-property-drawer-property-whitelist
( setq org-tidy-property-drawer-property-blacklist ' ( " TIDY_DISABLE " " TIDY_OFF " ) )
( setq org-tidy-general-drawer-flag t )
;org-tidy-general-drawer-name-whitelist
;org-tidy-general-drawer-name-blacklist
:hook
( org-mode . org-tidy-mode ) )
2022-04-22 02:54:47 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; keyboard shortcuts
( load " ~/.emacs.d.profiles/org/config-org-keyboard.el " )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Set some orgmode config
( defun my/org_timestamp ( )
( interactive )
( org-insert-time-stamp ( current-time ) ( current-time ) " t " )
)
( org-defkey org-mode-map ( kbd " C-c ! " ) #' my/org_timestamp )
( setq org-startup-folded t )
( setq org-return-follows-link t )
( setq org-startup-folded t )
( setq org-support-shift-select t )
2023-02-12 21:43:34 +00:00
( setq org-log-into-drawer t )
( setq org-log-done t )
2022-04-22 02:54:47 +00:00
2023-04-07 21:10:23 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; automatic ids for everything
; From https://web.archive.org/web/20220512120917/https://stackoverflow.com/questions/13340616/assign-ids-to-every-entry-in-org-mode
2024-07-28 16:04:49 +00:00
; From https://stackoverflow.com/questions/13340616/assign-ids-to-every-entry-in-org-mode
2023-04-07 21:10:23 +00:00
; This hunk of lisp automatically adds IDs to every header in an org file when you hit save. it usese org-id which can generated IDs of various types including timestamps. I’ m using the default UUIDs
( defun stackoverflow/org-add-ids-to-headlines-in-file ( )
" cargo cult from stackoverflow to add ids "
2024-07-28 16:04:49 +00:00
( interactive )
( org-map-entries 'org-id-get-create )
)
( add-hook 'org-mode-hook
( lambda ( )
( add-hook 'before-save-hook 'stackoverflow/org-add-ids-to-headlines-in-file nil 'local ) ) )
2023-04-07 21:10:23 +00:00
( add-hook 'org-capture-prepare-finalize-hook 'org-id-get-create )
2024-07-28 16:04:49 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; keep 'ARCHIVE' property up to date for entire buffer so any archives are filed in 'todays' archive
; assumes you want archive dates to be the date of the archive operation, not the last time they were 'touched' (or created)
( defun kmn/org-set-archive-prop-for-todo ( )
( interactive )
( save-excursion
( goto-char ( point-max ) )
( while ( outline-previous-heading )
( org-set-property " ARCHIVE " ( concat
" ~/org/Attic/org-mode/%s/ "
( format-time-string " %Y " ( current-time ) )
" / "
( format-time-string " %m " ( current-time ) )
" .archive.org::datetree/ "
) )
) )
)
( add-hook 'org-mode-hook
( lambda ( )
( add-hook 'before-save-hook 'kmn/org-set-archive-prop-for-todo nil 'local ) ) )
( add-hook 'org-capture-prepare-finalize-hook 'kmn/org-set-archive-prop-for-todo )
2022-11-08 03:54:27 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ox-hugo for blog
( with-eval-after-load 'ox ( require 'ox-hugo ) )
2022-11-12 16:49:05 +00:00
( with-eval-after-load 'ox-hugo
( setq org-hugo-link-desc-insert-type t )
2022-11-11 00:23:01 +00:00
( setq org-hugo-default-static-subdirectory-for-externals " ox-hugo " )
( setq org-hugo-external-file-extensions-allowed-for-copying ' (
2023-02-16 16:44:06 +00:00
" jpg " " jpeg " " tiff " " png " " svg " " gif " " psd " " psb " " kra " " gpl "
2022-11-11 00:23:01 +00:00
" mp4 "
" pdf " " odt "
" doc " " ppt " " xls "
2023-03-22 11:45:07 +00:00
" docx " " pptx " " xlsx "
2023-12-03 17:32:16 +00:00
" zip "
" xml " ) )
2022-11-12 16:49:05 +00:00
)
2022-11-08 03:54:27 +00:00
2024-07-28 20:13:47 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; org-mode todo tuning
; the ! tells org to log state changes for todo entries
( setq org-todo-keywords
' ( ( sequence " TODO(t!) " " READY(r!) " " WIP(w!) " " | " " SKIPPED(k!) " " COMPLETE(c!) " " CANCELED(x!) " ) )
)
( setq org-todo-keyword-faces
' ( ( " TODO " . " turquoise " ) ( " READY " . " yellow " ) ( " WIP " . " magenta " ) ( " COMPLETE " . " green " ) ( " CANCELED " . " orange " ) )
)
; log to drawer of entry
( setq org-log-into-drawer t )
( setq org-treat-insert-todo-heading-as-state-change t )
; set completion stats to auto-calc for checkboxes and nested todo's
( setq org-provide-todo-statistics t )
( setq org-checkbox-hierarchical-statistics nil )
( setq org-hierarchical-todo-statistics nil )
; From https://christiantietze.de/posts/2021/02/emacs-org-todo-doing-done-checkbox-cycling/
; Ensure the uppermost todo, in a nested tree, has an appropriate status based on all sub-items in the tree
; Basically: - can only be marked 'complete' if all sub-items are in a completed state
; - auto-marked as 'todo' if no sub-items are complete
; - auto-marked as 'wip' if some sub-items are complete
; - auto-marked as 'complete' if all sub-items are complete
( defun org-todo-if-needed ( state )
" Change header state to STATE unless the current item is in STATE already. "
( unless ( string-equal ( org-get-todo-state ) state )
( org-todo state ) ) )
( defun ct/org-summary-todo-cookie ( n-done n-not-done )
" Switch header state to DONE when all subentries are DONE, to TODO when none are DONE, and to DOING otherwise "
( let ( org-log-done org-log-states ) ; turn off logging
( org-todo-if-needed ( cond ( ( = n-done 0 )
" TODO " )
( ( = n-not-done 0 )
" COMPLETE " )
( t
" WIP " ) ) ) ) )
( add-hook 'org-after-todo-statistics-hook #' ct/org-summary-todo-cookie )
( defun ct/org-summary-checkbox-cookie ( )
" Switch header state to DONE when all checkboxes are ticked, to TODO when none are ticked, and to DOING otherwise "
( let ( beg end )
( unless ( not ( org-get-todo-state ) )
( save-excursion
( org-back-to-heading t )
( setq beg ( point ) )
( end-of-line )
( setq end ( point ) )
( goto-char beg )
;; Regex group 1: %-based cookie
;; Regex group 2 and 3: x/y cookie
( if ( re-search-forward " \\ [ \\ ([0-9]*% \\ ) \\ ] \\ | \\ [ \\ ([0-9]* \\ )/ \\ ([0-9]* \\ ) \\ ] "
end t )
( if ( match-end 1 )
;; [xx%] cookie support
( cond ( ( equal ( match-string 1 ) " 100% " )
( org-todo-if-needed " COMPLETE " ) )
( ( equal ( match-string 1 ) " 0% " )
( org-todo-if-needed " TODO " ) )
( t
( org-todo-if-needed " WIP " ) ) )
;; [x/y] cookie support
( if ( > ( match-end 2 ) ( match-beginning 2 ) ) ; = if not empty
( cond ( ( equal ( match-string 2 ) ( match-string 3 ) )
( org-todo-if-needed " COMPLETE " ) )
( ( or ( equal ( string-trim ( match-string 2 ) ) " " )
( equal ( match-string 2 ) " 0 " ) )
( org-todo-if-needed " TODO " ) )
( t
( org-todo-if-needed " WIP " ) ) )
( org-todo-if-needed " WIP " ) ) ) ) ) ) ) )
( add-hook 'org-checkbox-statistics-hook #' ct/org-summary-checkbox-cookie )
2022-04-22 02:54:47 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; tags
( load " ~/.emacs.d.profiles/org/config-org-tags " )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; files
( setq org-default-notes-file " ~/org/_index.org " )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; agendas
( load " ~/.emacs.d.profiles/org/config-org-agendas.el " )
2022-09-13 20:19:20 +00:00
2022-04-22 02:54:47 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; capture templates
( load " ~/.emacs.d.profiles/org/config-org-capture.el " )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; org-habit
( add-to-list 'org-modules 'org-habit )
( setq org-habit-preceding-days 14 )
( setq org-habit-following-days 7 )
( setq org-agenda-span 1 )
2023-02-12 21:43:34 +00:00
2022-09-06 19:08:49 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; helm specific org adjustments
( load " ~/.emacs.d.profiles/common/helm-org.el " )
( require 'helm-org )
( helm-mode 1 )
( add-to-list 'helm-completing-read-handlers-alist ' ( org-capture . helm-org-completing-read-tags ) )
( add-to-list 'helm-completing-read-handlers-alist ' ( org-set-tags . helm-org-completing-read-tags ) )
( add-to-list 'helm-completing-read-handlers-alist ' ( org-set-tags-command . helm-org-completing-read-tags ) )
2022-09-08 16:49:35 +00:00
; fix helm multi-tag select (needs custom seprator. default is comma
;(setq helm-crm-default-separator ":"
( define-advice helm--completion-in-region ( :around ( helm-fun origfun start end collection &optional predicate ) temporary-helm-crm-separator-for-tags )
( setq tcrmds helm-crm-default-separator )
;; If the last command was any of these values, we're looking at tags most likely
( when ( or ( member last-command ' ( org-capture org-ctrl-c-ctrl-c org-set-tags org-set-tags-command ) )
;;This is a workaround for completions when you've already started typing.
( and ( eq this-command 'crm-complete )
( eq major-mode 'org-mode ) )
;; This is probably the only thing we really need, but it doesn't handle custom "Tags" prompts
( and ( active-minibuffer-window )
( eq " Tags: " ( minibuffer-prompt ) ) ) )
( setq helm-crm-default-separator " : " ) )
;; Call the original Helm Completion function with all the original arguments
( funcall helm-fun origfun start end collection predicate )
( setq helm-crm-default-separator tcrmds ) )
2022-04-22 02:54:47 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ui tuning
( when ( eq system-type 'windows-nt )
( load " ~/.emacs.d.profiles/org/config-org-desktop.el " ) )
( when kmn/is-termux
( load " ~/.emacs.d.profiles/org/config-org-mobile.el " ) )
2022-04-24 20:37:32 +00:00
2024-08-14 16:06:51 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; pomidor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
( use-package pomidor
:bind ( ( " C-w P " . pomidor ) )
:config ( setq pomidor-update-interval 30
pomidor-save-session-file " ~/org/pomidor-sessions.json "
pomidor-alert nil
pomidor-sound-tick nil
pomidor-sound-tack nil
pomidor-sound-overwork nil
pomidor-sound-break-over nil )
:hook ( pomidor-mode . ( lambda ( )
( display-line-numbers-mode -1 ) ; Emacs 26.1+
( setq left-fringe-width 0 right-fringe-width 0 )
( setq left-margin-width 2 right-margin-width 0 )
;; force fringe update
( set-window-buffer nil ( current-buffer ) ) ) ) )
; setup 6 pomodoros for 8 hr work day
; 7 hours of work, with 1 hr of long breaks
; each pomodor is:
; warm up of 15 mins
; work of 45 mins
; total work period: 60 mins
; 10 min break
; total interval period: 70 mins
; long break is 30 mins
; every 3rd pomodoro give 30 minute break
2024-08-28 14:33:28 +00:00
; actual values
2024-08-14 16:06:51 +00:00
( setq pomidor-seconds ( * 60 60 ) ) ; total work period
( setq pomidor-warmup-seconds ( * 15 60 ) ) ; warmup time
( setq pomidor-break-seconds ( * 10 60 ) )
( setq pomidor-breaks-before-long 3 )
( setq pomidor-long-break-seconds ( * 30 60 ) )
2024-08-28 14:33:28 +00:00
; setup emoji separators to enhance visual state indicators
( defun my-pomidor-separator-hook ( )
2024-08-14 16:06:51 +00:00
( let* ( ( state ( pomidor--current-state ) )
( total ( pomidor--total-duration state ) )
2024-08-28 14:33:28 +00:00
( elapsed ( round ( time-to-seconds total ) ) ) )
( cond ; watch out for the order of this conditional
; there are overlapping states and this order is meaninful
( ( or ( pomidor-overwork-p ) ( pomidor-break-over-p ) )
( setq pomidor-header-separator " ⚠️ " ) )
( ( pomidor-should-long-break-p )
( setq pomidor-header-separator " 🪁 " ) )
( ( pomidor--break state )
( setq pomidor-header-separator " 🚶 " ) )
( ( <= elapsed pomidor-warmup-seconds )
( setq pomidor-header-separator " 🌡️↑ " ) )
( t ( setq pomidor-header-separator " 🏢 " ) )
2024-08-14 16:06:51 +00:00
)
)
)
2024-08-28 14:33:28 +00:00
; add separator logic as std pomidor update hook to ensure the emoji separators get displayed
; this will be delayed up to the pomidor-update-interval for display
( add-hook 'pomidor-update-hook #' my-pomidor-separator-hook )
; trigger the emoji separator for common operations so it 'triggers' faster than via the std pomidor update hook
; this should show the emoji separators 'faster' than relying on just the update hook
( advice-add #' pomidor-reset :after #' my-pomidor-separator-hook )
( advice-add #' pomidor-stop :after #' my-pomidor-separator-hook )
( advice-add #' pomidor-break :after #' my-pomidor-separator-hook )
; 'hold' visual indicator
( defun my-pomidor-hold-separator ( )
( interactive )
( setq pomidor-header-separator " 💤 " )
( pomidor--update )
)
( advice-add #' pomidor-hold :before #' my-pomidor-hold-separator )
; 'unhold' -- reset visual indicator
( defun my-pomidor-unhold-separator ( )
( interactive )
( my-pomidor-separator-hook )
( pomidor--update )
)
( advice-add #' pomidor-unhold :before #' my-pomidor-unhold-separator )
2024-08-14 16:06:51 +00:00
; position cursor @ top of pomidor buffer after rendering
( defun my-pomidor-beginning-of-buffer ( buffer states )
( interactive )
( with-current-buffer ( get-buffer pomidor-buffer-name )
( goto-char ( point-min ) )
)
)
( advice-add #' pomidor--render :after #' my-pomidor-beginning-of-buffer )
; safely run pomidor in a buffer programatically
; doesnt mung or reset state
( defun my-pomidor-run-safe ( )
; make sure pomidor is running + active w/o resetting the current state
( when ( or ( not ( boundp 'pomidor-buffer-name ) )
( not ( get-buffer pomidor-buffer-name ) ) )
( pomidor )
( previous-buffer ) ; pomidor switches buffers -- go back to orig buffer
)
)
; frame for pomidor, just the main timer text visible
; centered at bottom of the screen
( defun my-pomidor-frame ( )
( interactive )
( select-frame ( make-frame ' (
( name . " Pomidor " )
( menu-bar-lines 0 )
( tool-bar-lines 0 )
( width . ( text-pixels . 818 ) )
( height . ( text-pixels . 144 ) )
) ) )
; single monitor / main monitor positing
( let* ( ( dw ( display-pixel-width ) )
( dh ( display-pixel-height ) )
( f ( selected-frame ) )
( fw ( frame-pixel-width f ) )
( fh ( frame-pixel-height f ) )
; handle multi-monitor goofy (main panel is /left/ of first panel)
; assumes a 1440p multi-monitor setup with monitor 1 'to the right of' monitor 2
; remove the (- [stuff] 2506) to undo this workaround
( x ( - ( - ( / dw 2 ) ( / fw 2 ) ) 2560 ) )
2024-08-28 17:41:03 +00:00
( y ( - ( - dh fh ) 125 ) ) )
2024-08-14 16:06:51 +00:00
( set-frame-position f x y )
)
; ensure pomidor is running & do /not/ reset state
( my-pomidor-run-safe )
; switch to pomidor buffer
( switch-to-buffer pomidor-buffer-name )
)
( global-set-key ( kbd " C-M-p " ) 'my-pomidor-frame )
; pop win pomidor setup
; main way to invoke
; ensure pomidor is running before trying to open the buffer
; use global buffer name for pomidor
; make the popwin window 'sticky'
; position sticky popwin @ top
( push ' ( pomidor-mode :position top :stick t ) popwin:special-display-config )
( global-set-key ( kbd " C-w p " )
( lambda ( ) ( interactive )
( my-pomidor-run-safe )
; open pomidor in popwin
( popwin:display-buffer ( get-buffer pomidor-buffer-name ) )
)
)
2023-02-13 17:12:29 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; origami + super agenda config
( defvar ap/org-super-agenda-auto-hide-groups
2023-04-13 22:06:55 +00:00
' ( " .*Low Priority.* " " ^.*?[^R]+.*?(desc)$ " ) )
2023-02-13 17:12:29 +00:00
( defun ap/org-super-agenda-origami-fold-default ( )
" Fold certain groups by default in Org Super Agenda buffer. "
( --each ap/org-super-agenda-auto-hide-groups
( goto-char ( point-min ) )
2023-02-13 17:47:11 +00:00
( cl-loop
2023-04-13 22:06:55 +00:00
while ( re-search-forward it nil t )
do
( if ( not ( or
( string-match " TODO " ( thing-at-point 'line ) )
( string-match " READY " ( thing-at-point 'line ) )
( string-match " WIP " ( thing-at-point 'line ) )
) )
( origami-close-node ( current-buffer ) ( point ) )
)
2023-02-13 17:47:11 +00:00
)
)
)
2023-02-13 17:12:29 +00:00
( add-hook 'org-agenda-mode-hook #' origami-mode )
( add-hook 'org-agenda-finalize-hook #' ap/org-super-agenda-origami-fold-default )
2023-02-13 17:47:11 +00:00
( define-key org-super-agenda-header-map ( kbd " <tab> " ) #' origami-toggle-node )
( define-key org-agenda-mode-map ( kbd " <tab> " ) #' origami-toggle-node )
2023-02-21 18:23:55 +00:00
( custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
2024-03-21 19:32:24 +00:00
' ( default ( ( t ( :family " MonoLisa Variable " :height 100 ) ) ) )
2023-02-21 18:23:55 +00:00
' ( fixed-pitch ( ( t ( :family " MonoLisa Variable " :height 120 ) ) ) )
' ( variable-pitch ( ( t ( :family " Atkinson Hyperlegible " :height 120 ) ) ) ) )
( custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
' ( custom-safe-themes
2023-02-25 14:02:27 +00:00
' ( " dde643b0efb339c0de5645a2bc2e8b4176976d5298065b8e6ca45bc4ddf188b7 " " bfc0b9c3de0382e452a878a1fb4726e1302bf9da20e69d6ec1cd1d5d82f61e3d " default ) )
2024-03-20 13:57:39 +00:00
' ( package-selected-packages
2024-08-14 16:06:51 +00:00
' ( pomidor
( org-tidy org-auto-expand ox-pandoc ox-hugo org-super-agenda org-alert burnt-toast alert )
2024-03-20 13:57:39 +00:00
( devdocs devdocs-browser magit helm-ls-git xclip )
( which-key all-the-icons revert-buffer-all centaur-tabs scratch persistent-scratch persp-mode rainbow-mode rainbow-delimiters markdown-mode focus zoom popwin dired-single diredfl doominhibitinhibit-modeline helpful helm helm-org dired-rainbow dired-rainbow-listing dired-single dash s origami modus-themes use-package ) ) )
2023-08-10 14:46:30 +00:00
' ( safe-local-variable-values
2024-03-21 19:32:24 +00:00
' ( ( org-auto-expand-nodes
2024-08-02 17:33:29 +00:00
( ( " To Do " )
body 1 )
( ( " Daily / Weekly Reset " )
children 2 ) )
( org-auto-expand-nodes
( ( " Daily / Weekly Reset " )
body 2 ) )
( eval org-auto-expand )
( org-auto-expand-nodes
( ( " To Do " )
body 1 ) )
( eval setq org-html-postamble nil )
( eval setq org-export-html-postamble-format nil )
( eval add-hook 'after-save-hook 'org-pandoc-export-to-latex-pdf t t )
( eval add-hook 'after-save-hook 'org-pandoc-export-to-docx t t )
( eval add-hook 'after-save-hook 'org-ascii-export-to-ascii t t )
( eval add-hook 'after-save-hook 'org-md-export-to-markdown t t )
( eval add-hook 'after-save-hook 'org-org-export-to-org t t )
( eval add-hook 'after-save-hook 'org-html-export-to-html t t )
( eval add-hook 'after-save-hook 'org-gfm-export-to-markdown t t ) ) )
2023-08-10 14:12:09 +00:00
' ( temp-buffer-resize-mode t )
2024-07-28 16:04:49 +00:00
' ( zoom-ignored-major-modes ' ( dired-mode ) )
' ( zoom-size 'kmn-zoom-size-callback ) )