diff --git a/Emacs.org b/Emacs.org index 1ac6590..52704e9 100644 --- a/Emacs.org +++ b/Emacs.org @@ -21,14 +21,11 @@ #+begin_src emacs-lisp ;; The default is 800 kilobytes. Measured in bytes. - (setq gc-cons-threshold (* 50 1000 1000)) #+end_src -** System specific configuration +** Directory setup -- You might need to readjust some of these settings based on your OS and system setup -- Don't forget to install the sync software (here: nextcloud-client). On fedora: 'sudo dnf install nextcloud-client' #+begin_src emacs-lisp @@ -121,8 +118,8 @@ Here I set up some things that are too minor to put under other categories. (add-hook 'before-save-hook 'delete-trailing-whitespace) (global-hl-line-mode 1) ;; (setq redisplay-dont-pause t) ;; obsolete + (setq blink-cursor-mode nil) ;; blink-cursor is an unexpected source of slowdown (delete-selection-mode 1) - (pixel-scroll-precision-mode 1) (setq vc-follow-symlinks t) (setq require-final-newline t) (winner-mode 1) @@ -131,6 +128,7 @@ Here I set up some things that are too minor to put under other categories. (setq native-comp-async-report-warnings-errors nil) (setq load-prefer-newer t) + (setq browse-url-browser-function 'browse-url-firefox) ;; disable a keybind that does more harm than good (global-set-key [remap suspend-frame] (lambda () @@ -159,19 +157,24 @@ These settings are mostly useless in my eyes and provide little more than a dist #+begin_src emacs-lisp - (setq-default indent-tabs-mode nil - tab-width 2) + (setq-default indent-tabs-mode nil + tab-width 2) - (setq tab-always-indent 'complete) + (setq tab-always-indent 'complete) + ;; dont send nag when creating python files + (setq python-indent-guess-indent-offset-verbose nil) (use-package highlight-indent-guides :hook (prog-mode . highlight-indent-guides-mode) :init - (setq highlight-indent-guides-method 'character) - (setq highlight-indent-guides-character "|") + (setq highlight-indent-guides-method 'column) + ;; (setq highlight-indent-guides-method 'character) + ;; (setq highlight-indent-guides-character ?|) (setq highlight-indent-guides-responsive 'top) ) - + ;;(set-face--background 'highlight-indent-guides-odd-face "dark slate gray") + ;;(set-face-background 'highlight-indent-guides-even-face "steel blue") + ;;(set-face-foreground 'highlight-indent-guides-character-face "dark violet") #+end_src ** Scrolling @@ -182,7 +185,17 @@ By default, emacs scrolls half a page when reaching the bottom of the buffer. Th (setq scroll-step 1 scroll-margin 4 - scroll-conservatively 5) + scroll-conservatively 101) + + ;; (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time + ;; (setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling + ;; (setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse + + (pixel-scroll-precision-mode 1) + + ;; (use-package fast-scroll + ;; :ensure nil + ;; :init (fast-scroll-mode 1)) #+end_src @@ -249,34 +262,24 @@ This function will check if a directory for which a file we want to open exists; (evil-collection-init) (setq forge-add-default-bindings nil)) - - + ;; enables 2-char inline search (use-package evil-snipe :after evil :demand :config (evil-snipe-mode +1) + ;; replace 1-char searches (f&t) with this better UI (evil-snipe-override-mode +1)) + ;; for parentheses-heavy languades modify evil commands to keep balance of parantheses (use-package evil-cleverparens) + ;; enables surrounding text with S + (use-package evil-surround + :config + (global-evil-surround-mode 1)) - (use-package evil-surround) - (use-package evil-goggles - :after evil - :demand - :init - (setq evil-goggles-duration 0.05) - :config - (push '(evil-operator-eval - :face evil-goggles-yank-face - :switch evil-goggles-enable-yank - :advice evil-goggles--generic-async-advice) - evil-goggles--commands) - (evil-goggles-mode) - (evil-goggles-use-diff-faces) - ) #+end_src @@ -343,6 +346,7 @@ Base emacs undo logic is very useful, but not easy to understand. I prefer undo- "t" '(:ignore t :which-key "toggles") "ts" '(hydra-text-scale/body :which-key "scale text") "tl" '(display-line-numbers-mode :which-key "line numbers") + "tp" '(evil-cleverparens-mode :wk "cleverparens") "to" '(olivetti-mode :wk "olivetti") "td" '(darkroom-tentative-mode :wk "darkroom") "tw" '((lambda () (interactive) (toggle-truncate-lines)) :which-key "line wrapping") @@ -352,21 +356,21 @@ Base emacs undo logic is very useful, but not easy to understand. I prefer undo- "mc" '((lambda () (interactive) (swarsel/open-calendar)) :which-key "calendar") "mp" '(popper-toggle :which-key "popper") "md" '(dirvish :which-key "dirvish") - "c" '(:ignore c :which-key "capture") - "cj" '((lambda () (interactive) (org-capture nil "jj")) :which-key "journal") - "cs" '(markdown-download-screenshot :which-key "screenshot") + ;; "c" '(:ignore c :which-key "capture") + ;; "cj" '((lambda () (interactive) (org-capture nil "jj")) :which-key "journal") + ;; "cs" '(markdown-download-screenshot :which-key "screenshot") "l" '(:ignore l :which-key "links") "le" '((lambda () (interactive) (find-file swarsel-emacs-org-filepath)) :which-key "Emacs.org") "ls" '((lambda () (interactive) (find-file "/smb:Swarsel@192.168.1.3:")) :which-key "Server") "lo" '(dired swarsel-obsidian-vault-directory :which-key "obsidian") - "la" '((lambda () (interactive) (find-file swarsel-org-anki-filepath)) :which-key "anki") + ;; "la" '((lambda () (interactive) (find-file swarsel-org-anki-filepath)) :which-key "anki") "ln" '((lambda () (interactive) (find-file swarsel-nix-org-filepath)) :which-key "Nix.org") "lp" '((lambda () (interactive) (projectile-switch-project)) :which-key "switch project") "lg" '((lambda () (interactive) (magit-list-repositories)) :which-key "list git repos") - "a" '(:ignore a :which-key "anki") - "ap" '(anki-editor-push-tree :which-key "push new cards") - "an" '((lambda () (interactive) (org-capture nil "a")) :which-key "new card") - "as" '(swarsel-anki-set-deck-and-notetype :which-key "change deck and notetype") + ;; "a" '(:ignore a :which-key "anki") + ;; "ap" '(anki-editor-push-tree :which-key "push new cards") + ;; "an" '((lambda () (interactive) (org-capture nil "a")) :which-key "new card") + ;; "as" '(swarsel-anki-set-deck-and-notetype :which-key "change deck and notetype") "h" '(:ignore h :which-key "help") "hy" '(yas-describe-tables :which-key "yas tables") "hb" '(embark-bindings :which-key "current key bindings") @@ -377,6 +381,7 @@ Base emacs undo logic is very useful, but not easy to understand. I prefer undo- "hl" '(view-lossage :which-key "show command keypresses") "hL" 'find-library "hm" 'describe-mode + "ho" 'describe-symbol "hk" 'describe-key "hK" 'describe-keymap "hp" 'describe-package @@ -401,9 +406,9 @@ Base emacs undo logic is very useful, but not easy to understand. I prefer undo- ;; General often used hotkeys (general-define-key "C-M-a" (lambda () (interactive) (org-capture nil "a")) ; make new anki card - "C-M-d" 'swarsel-obsidian-daily ; open daily obsidian file and create if not exist - "C-M-S" 'swarsel-anki-set-deck-and-notetype ; switch deck and notetye for new anki cards - "C-M-s" 'markdown-download-screenshot ; wrapper for org-download-screenshot + ;; "C-M-d" 'swarsel-obsidian-daily ; open daily obsidian file and create if not exist + ;; "C-M-S" 'swarsel-anki-set-deck-and-notetype ; switch deck and notetye for new anki cards + ;; "C-M-s" 'markdown-download-screenshot ; wrapper for org-download-screenshot "C-c d" 'duplicate-line ; duplicate line on CURSOR "C-M-j" 'consult-buffer "C-s" 'consult-line @@ -435,9 +440,6 @@ Base emacs undo logic is very useful, but not easy to understand. I prefer undo- (use-package rainbow-mode :config (rainbow-mode)) - (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time - (setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling - (setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse (add-hook 'prog-mode-hook 'display-line-numbers-mode) @@ -488,15 +490,22 @@ Base emacs undo logic is very useful, but not easy to understand. I prefer undo- #+begin_src emacs-lisp - (use-package doom-themes - :init (load-theme 'doom-city-lights t)) - (use-package solaire-mode - :init (solaire-global-mode +1)) + :defer t + :custom (solaire-global-mode +1)) + + (use-package doom-themes + :defer t + :hook (server-after-make-frame . (lambda () (load-theme + 'doom-city-lights t))) + ) + #+end_src *** Transparent background +This is handled by Nix and no longer needed here. + #+begin_src emacs-lisp ;; (set-frame-parameter (selected-frame) 'alpha '(95 . 95)) @@ -811,11 +820,11 @@ Soon I want to try out this new hot stuff - just at the moment there is too much ;; (setq evil-auto-indent nil) ;;(diminish org-indent-mode) - (defun swarsel/org-font-setup () - ;; Replace list hyphen with dot - (font-lock-add-keywords 'org-mode - '(("^ *\\([-]\\) " - (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "β€’"))))))) + ;; (defun swarsel/org-font-setup () + ;; ;; Replace list hyphen with dot + ;; (font-lock-add-keywords 'org-mode + ;; '(("^ *\\([-]\\) " + ;; (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "β€’"))))))) (use-package org ;;:diminish (org-indent-mode) @@ -826,9 +835,9 @@ Soon I want to try out this new hot stuff - just at the moment there is too much org-hide-emphasis-markers t) (setq org-startup-folded t) (setq org-support-shift-select t) - (setq org-agenda-start-with-log-mode t) - (setq org-log-done 'time) - (setq org-log-into-drawer t) + ;; (setq org-agenda-start-with-log-mode t) + ;; (setq org-log-done 'time) + ;; (setq org-log-into-drawer t) (setq org-startup-with-inline-images t) (setq org-image-actual-width nil) (setq org-format-latex-options '(:foreground "White" :background default :scale 2.0 :html-foreground "Black" :html-background "Transparent" :html-scale 1.0 :matchers ("begin" "$1" "$" "$$" "\\(" "\\["))) @@ -837,95 +846,95 @@ Soon I want to try out this new hot stuff - just at the moment there is too much ;; '(swarsel-org-tasks-filepath ;; swarsel-org-archive-filepath ;; swarsel-org-anki-filepath)) + (setq org-agenda-files '("/home/swarsel/Calendars/leon_cal.org")) - (setq org-agenda-files - '("~/Calendars/leon_cal.org")) - (require 'org-habit) - (add-to-list 'org-modules 'org-habit) - (setq org-habit-graph-column 60) + ;; (require 'org-habit) + ;; (add-to-list 'org-modules 'org-habit) + ;; (setq org-habit-graph-column 60) - (setq org-todo-keywords - '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)") - (sequence "BACKLOG(b)" "PLAN(p)" "READY(r)" "ACTIVE(a)" "REVIEW(v)" "WAIT(w@/!)" "HOLD(h)" "|" "COMPLETED(c)" "CANC(k@)"))) + ;; (setq org-todo-keywords + ;; '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)") + ;; (sequence "BACKLOG(b)" "PLAN(p)" "READY(r)" "ACTIVE(a)" "REVIEW(v)" "WAIT(w@/!)" "HOLD(h)" "|" "COMPLETED(c)" "CANC(k@)"))) - (setq org-refile-targets - '((swarsel-archive-org-file :maxlevel . 1) - (swarsel-anki-org-file :maxlevel . 1) - (swarsel-tasks-org-file :maxlevel . 1))) + ;; (setq org-refile-targets + ;; '((swarsel-archive-org-file :maxlevel . 1) + ;; (swarsel-anki-org-file :maxlevel . 1) + ;; (swarsel-tasks-org-file :maxlevel . 1))) - ;; Configure custom agenda views - (setq org-agenda-custom-commands - '(("d" "Dashboard" - ((agenda "" ((org-deadline-warning-days 7))) - (todo "NEXT" - ((org-agenda-overriding-header "Next Tasks"))) - (tags-todo "agenda/ACTIVE" ((org-agenda-overriding-header "Active Projects"))))) + ;; ;; Configure custom agenda views + ;; (setq org-agenda-custom-commands + ;; '(("d" "Dashboard" + ;; ((agenda "" ((org-deadline-warning-days 7))) + ;; (todo "NEXT" + ;; ((org-agenda-overriding-header "Next Tasks"))) + ;; (tags-todo "agenda/ACTIVE" ((org-agenda-overriding-header "Active Projects"))))) - ("n" "Next Tasks" - ((todo "NEXT" - ((org-agenda-overriding-header "Next Tasks"))))) + ;; ("n" "Next Tasks" + ;; ((todo "NEXT" + ;; ((org-agenda-overriding-header "Next Tasks"))))) - ("W" "Work Tasks" tags-todo "+work-email") + ;; ("W" "Work Tasks" tags-todo "+work-email") - ;; Low-effort next actions - ("e" tags-todo "+TODO=\"NEXT\"+Effort<15&+Effort>0" - ((org-agenda-overriding-header "Low Effort Tasks") - (org-agenda-max-todos 20) - (org-agenda-files org-agenda-files))) + ;; ;; Low-effort next actions + ;; ("e" tags-todo "+TODO=\"NEXT\"+Effort<15&+Effort>0" + ;; ((org-agenda-overriding-header "Low Effort Tasks") + ;; (org-agenda-max-todos 20) + ;; (org-agenda-files org-agenda-files))) - ("w" "Workflow Status" - ((todo "WAIT" - ((org-agenda-overriding-header "Waiting on External") - (org-agenda-files org-agenda-files))) - (todo "REVIEW" - ((org-agenda-overriding-header "In Review") - (org-agenda-files org-agenda-files))) - (todo "PLAN" - ((org-agenda-overriding-header "In Planning") - (org-agenda-todo-list-sublevels nil) - (org-agenda-files org-agenda-files))) - (todo "BACKLOG" - ((org-agenda-overriding-header "Project Backlog") - (org-agenda-todo-list-sublevels nil) - (org-agenda-files org-agenda-files))) - (todo "READY" - ((org-agenda-overriding-header "Ready for Work") - (org-agenda-files org-agenda-files))) - (todo "ACTIVE" - ((org-agenda-overriding-header "Active Projects") - (org-agenda-files org-agenda-files))) - (todo "COMPLETED" - ((org-agenda-overriding-header "Completed Projects") - (org-agenda-files org-agenda-files))) - (todo "CANC" - ((org-agenda-overriding-header "Cancelled Projects") - (org-agenda-files org-agenda-files))))))) + ;; ("w" "Workflow Status" + ;; ((todo "WAIT" + ;; ((org-agenda-overriding-header "Waiting on External") + ;; (org-agenda-files org-agenda-files))) + ;; (todo "REVIEW" + ;; ((org-agenda-overriding-header "In Review") + ;; (org-agenda-files org-agenda-files))) + ;; (todo "PLAN" + ;; ((org-agenda-overriding-header "In Planning") + ;; (org-agenda-todo-list-sublevels nil) + ;; (org-agenda-files org-agenda-files))) + ;; (todo "BACKLOG" + ;; ((org-agenda-overriding-header "Project Backlog") + ;; (org-agenda-todo-list-sublevels nil) + ;; (org-agenda-files org-agenda-files))) + ;; (todo "READY" + ;; ((org-agenda-overriding-header "Ready for Work") + ;; (org-agenda-files org-agenda-files))) + ;; (todo "ACTIVE" + ;; ((org-agenda-overriding-header "Active Projects") + ;; (org-agenda-files org-agenda-files))) + ;; (todo "COMPLETED" + ;; ((org-agenda-overriding-header "Completed Projects") + ;; (org-agenda-files org-agenda-files))) + ;; (todo "CANC" + ;; ((org-agenda-overriding-header "Cancelled Projects") + ;; (org-agenda-files org-agenda-files))))))) - (setq org-capture-templates - `( - ("a" "Anki basic" - entry - (file+headline swarsel-org-anki-filepath "Dispatch") - (function swarsel-anki-make-template-string)) + ;; (setq org-capture-templates + ;; `( + ;; ("a" "Anki basic" + ;; entry + ;; (file+headline swarsel-org-anki-filepath "Dispatch") + ;; (function swarsel-anki-make-template-string)) - ("A" "Anki cloze" - entry - (file+headline org-swarsel-anki-file "Dispatch") - "* %<%H:%M>\n:PROPERTIES:\n:ANKI_NOTE_TYPE: Cloze\n:ANKI_DECK: 🦁 All::01 ❀️ Various::00 ✨ Allgemein\n:END:\n** Text\n%?\n** Extra\n") - ("t" "Tasks / Projects") - ("tt" "Task" entry (file+olp swarsel-org-tasks-filepath "Inbox") - "* TODO %?\n %U\n %a\n %i" :empty-lines 1) + ;; ("A" "Anki cloze" + ;; entry + ;; (file+headline org-swarsel-anki-file "Dispatch") + ;; "* %<%H:%M>\n:PROPERTIES:\n:ANKI_NOTE_TYPE: Cloze\n:ANKI_DECK: 🦁 All::01 ❀️ Various::00 ✨ Allgemein\n:END:\n** Text\n%?\n** Extra\n") + ;; ("t" "Tasks / Projects") + ;; ("tt" "Task" entry (file+olp swarsel-org-tasks-filepath "Inbox") + ;; "* TODO %?\n %U\n %a\n %i" :empty-lines 1) - ("j" "Journal Entries") - ("jj" "Journal" entry - (file+olp+datetree swarsel-org-journal-filepath) - "\n* %<%I:%M %p> - Journal :journal:\n\n%?\n\n" - ;; ,(dw/read-file-as-string "~/Notes/Templates/Daily.org") - :clock-in :clock-resume - :empty-lines 1))) + ;; ("j" "Journal Entries") + ;; ("jj" "Journal" entry + ;; (file+olp+datetree swarsel-org-journal-filepath) + ;; "\n* %<%I:%M %p> - Journal :journal:\n\n%?\n\n" + ;; ;; ,(dw/read-file-as-string "~/Notes/Templates/Daily.org") + ;; :clock-in :clock-resume + ;; :empty-lines 1))) - (swarsel/org-font-setup)) + ;; (swarsel/org-font-setup) + ) #+end_src ** Font Faces @@ -960,12 +969,12 @@ Soon I want to try out this new hot stuff - just at the moment there is too much #+begin_src emacs-lisp ;; Show hidden emphasis markers - (use-package org-appear - :hook (org-mode . org-appear-mode) - :init - (setq org-appear-autolinks t) - (setq org-appear-autosubmarkers t) - ) + ;; (use-package org-appear + ;; :hook (org-mode . org-appear-mode) + ;; :init + ;; (setq org-appear-autolinks t) + ;; (setq org-appear-autosubmarkers t) + ;; ) #+end_src @@ -973,11 +982,11 @@ Soon I want to try out this new hot stuff - just at the moment there is too much #+begin_src emacs-lisp - (use-package org-bullets - :after org - :hook (org-mode . org-bullets-mode) - :custom - (org-bullets-bullet-list '("β—‰" "β—‹" "●" "β—‹" "●" "β—‹" "●"))) + ;; (use-package org-bullets + ;; :after org + ;; :hook (org-mode . org-bullets-mode) + ;; :custom + ;; (org-bullets-bullet-list '("β—‰" "β—‹" "●" "β—‹" "●" "β—‹" "●"))) #+end_src @@ -1185,104 +1194,104 @@ This is a section adapted from org-download to make some org-download functions ;; these next lines provide an interface for org-download in markdown mode for use with obsidian - (defvar org-download-markdown-link-format - "![[./%s]]\n" - "Format of the file link to insert.") + ;; (defvar org-download-markdown-link-format + ;; "![[./%s]]\n" + ;; "Format of the file link to insert.") - (defcustom org-download-markdown-link-format-function #'org-download-markdown-link-format-function-default - "Function that takes FILENAME and returns a org link." - :type 'function) + ;; (defcustom org-download-markdown-link-format-function #'org-download-markdown-link-format-function-default + ;; "Function that takes FILENAME and returns a org link." + ;; :type 'function) - (defun org-download-markdown-link-format-function-default (filename) - "The default function of `org-download-link-format-function'." - (if (and (>= (string-to-number org-version) 9.3) - (eq org-download-method 'attach)) - (format "[[attachment:%s]]\n" - (org-link-escape - (file-relative-name filename (org-attach-dir)))) - (format org-download-markdown-link-format - (org-link-escape - (funcall org-download-abbreviate-filename-function filename))))) + ;; (defun org-download-markdown-link-format-function-default (filename) + ;; "The default function of `org-download-link-format-function'." + ;; (if (and (>= (string-to-number org-version) 9.3) + ;; (eq org-download-method 'attach)) + ;; (format "[[attachment:%s]]\n" + ;; (org-link-escape + ;; (file-relative-name filename (org-attach-dir)))) + ;; (format org-download-markdown-link-format + ;; (org-link-escape + ;; (funcall org-download-abbreviate-filename-function filename))))) - (defun org-download-markdown-image (link) - "Save image at address LINK to `org-download--dir'." - (interactive "sUrl: ") - (let* ((link-and-ext (org-download--parse-link link)) - (filename - (cond ((and (derived-mode-p 'org-mode) - (eq org-download-method 'attach)) - (let ((org-download-image-dir (org-attach-dir t)) - org-download-heading-lvl) - (apply #'org-download--fullname link-and-ext))) - ((fboundp org-download-method) - (funcall org-download-method link)) - (t - (apply #'org-download--fullname link-and-ext))))) - (setq org-download-path-last-file filename) - (org-download--image link filename) - (when (org-download-org-mode-p) - (when (eq org-download-method 'attach) - (org-attach-attach filename nil 'none)) - (org-download-markdown-insert-link link filename)) - (when (and (eq org-download-delete-image-after-download t) - (not (url-handler-file-remote-p (current-kill 0)))) - (delete-file link delete-by-moving-to-trash)))) + ;; (defun org-download-markdown-image (link) + ;; "Save image at address LINK to `org-download--dir'." + ;; (interactive "sUrl: ") + ;; (let* ((link-and-ext (org-download--parse-link link)) + ;; (filename + ;; (cond ((and (derived-mode-p 'org-mode) + ;; (eq org-download-method 'attach)) + ;; (let ((org-download-image-dir (org-attach-dir t)) + ;; org-download-heading-lvl) + ;; (apply #'org-download--fullname link-and-ext))) + ;; ((fboundp org-download-method) + ;; (funcall org-download-method link)) + ;; (t + ;; (apply #'org-download--fullname link-and-ext))))) + ;; (setq org-download-path-last-file filename) + ;; (org-download--image link filename) + ;; (when (org-download-org-mode-p) + ;; (when (eq org-download-method 'attach) + ;; (org-attach-attach filename nil 'none)) + ;; (org-download-markdown-insert-link link filename)) + ;; (when (and (eq org-download-delete-image-after-download t) + ;; (not (url-handler-file-remote-p (current-kill 0)))) + ;; (delete-file link delete-by-moving-to-trash)))) - (defun org-download-markdown-screenshot (&optional basename) - "Capture screenshot and insert the resulting file. - The screenshot tool is determined by `org-download-screenshot-method'." - (interactive) - (let* ((screenshot-dir (file-name-directory org-download-screenshot-file)) - (org-download-screenshot-file - (if basename - (concat screenshot-dir basename) org-download-screenshot-file))) - (make-directory screenshot-dir t) - (if (functionp org-download-screenshot-method) - (funcall org-download-screenshot-method - org-download-screenshot-file) - (shell-command-to-string - (format org-download-screenshot-method - org-download-screenshot-file))) - (when (file-exists-p org-download-screenshot-file) - (org-download-markdown-image org-download-screenshot-file) - (delete-file org-download-screenshot-file)))) + ;; (defun org-download-markdown-screenshot (&optional basename) + ;; "Capture screenshot and insert the resulting file. + ;; The screenshot tool is determined by `org-download-screenshot-method'." + ;; (interactive) + ;; (let* ((screenshot-dir (file-name-directory org-download-screenshot-file)) + ;; (org-download-screenshot-file + ;; (if basename + ;; (concat screenshot-dir basename) org-download-screenshot-file))) + ;; (make-directory screenshot-dir t) + ;; (if (functionp org-download-screenshot-method) + ;; (funcall org-download-screenshot-method + ;; org-download-screenshot-file) + ;; (shell-command-to-string + ;; (format org-download-screenshot-method + ;; org-download-screenshot-file))) + ;; (when (file-exists-p org-download-screenshot-file) + ;; (org-download-markdown-image org-download-screenshot-file) + ;; (delete-file org-download-screenshot-file)))) - (defun org-download-markdown-insert-link (link filename) - (let* ((beg (point)) - (line-beg (line-beginning-position)) - (indent (- beg line-beg)) - (in-item-p (org-in-item-p)) - str) - (if (looking-back "^[ \t]+" line-beg) - (delete-region (match-beginning 0) (match-end 0)) - (newline)) - (insert (funcall org-download-annotate-function link)) - (dolist (attr org-download-image-attr-list) - (insert attr "\n")) - (insert (if (= org-download-image-html-width 0) - "" - (format "#+attr_html: :width %dpx\n" org-download-image-html-width))) - (insert (if (= org-download-image-latex-width 0) - "" - (format "#+attr_latex: :width %dcm\n" org-download-image-latex-width))) - (insert (if (= org-download-image-org-width 0) - "" - (format "#+attr_org: :width %dpx\n" org-download-image-org-width))) - (insert (funcall org-download-markdown-link-format-function filename)) - (org-download--display-inline-images) - (setq str (buffer-substring-no-properties line-beg (point))) - (when in-item-p - (indent-region line-beg (point) indent)) - str)) + ;; (defun org-download-markdown-insert-link (link filename) + ;; (let* ((beg (point)) + ;; (line-beg (line-beginning-position)) + ;; (indent (- beg line-beg)) + ;; (in-item-p (org-in-item-p)) + ;; str) + ;; (if (looking-back "^[ \t]+" line-beg) + ;; (delete-region (match-beginning 0) (match-end 0)) + ;; (newline)) + ;; (insert (funcall org-download-annotate-function link)) + ;; (dolist (attr org-download-image-attr-list) + ;; (insert attr "\n")) + ;; (insert (if (= org-download-image-html-width 0) + ;; "" + ;; (format "#+attr_html: :width %dpx\n" org-download-image-html-width))) + ;; (insert (if (= org-download-image-latex-width 0) + ;; "" + ;; (format "#+attr_latex: :width %dcm\n" org-download-image-latex-width))) + ;; (insert (if (= org-download-image-org-width 0) + ;; "" + ;; (format "#+attr_org: :width %dpx\n" org-download-image-org-width))) + ;; (insert (funcall org-download-markdown-link-format-function filename)) + ;; (org-download--display-inline-images) + ;; (setq str (buffer-substring-no-properties line-beg (point))) + ;; (when in-item-p + ;; (indent-region line-beg (point) indent)) + ;; str)) - (defun markdown-download-screenshot () - (interactive) - (org-mode) - (org-download-markdown-screenshot) - (markdown-mode)) + ;; (defun markdown-download-screenshot () + ;; (interactive) + ;; (org-mode) + ;; (org-download-markdown-screenshot) + ;; (markdown-mode)) - (add-hook 'markdown-mode-hook (lambda () (org-display-inline-images))) + ;;(add-hook 'markdown-mode-hook (lambda () (org-display-inline-images))) #+end_src @@ -1518,12 +1527,14 @@ I am not completely sure on electric-pair-mode yet, sometimes it is very helpful (use-package highlight-parentheses :config - (setq highlight-parentheses-colors nil) + (setq highlight-parentheses-colors '("black" "white" "black" "black" "black" "black" "black")) (setq highlight-parentheses-background-colors '("magenta" "blue" "cyan" "green" "yellow" "orange" "red")) (global-highlight-parentheses-mode t)) (electric-pair-mode 1) (setq electric-pair-preserve-balance nil) + ;; don't try to be overly smart + (setq electric-pair-delete-adjacent-pairs nil) ;; don't skip newline when auto-pairing parenthesis (setq electric-pair-skip-whitespace-chars '(9 32)) @@ -1557,7 +1568,7 @@ The plan is to in the future use Vertico etc. instead and then switch to Corfu. *** IN USE Corfu -Currently unused. +Currently unused #+begin_src emacs-lisp @@ -1579,7 +1590,7 @@ Currently unused. (corfu-cycle t) (corfu-quit-no-match 'separator) (corfu-separator ?\s) - (corfu-quit-no-match t) + ;; (corfu-quit-no-match t) (corfu-popupinfo-max-height 70) (corfu-popupinfo-delay '(0.5 . 0.2)) ;; (corfu-preview-current 'insert) ; insert previewed candidate @@ -1589,19 +1600,28 @@ Currently unused. :bind (:map corfu-map ("M-SPC" . corfu-insert-separator) ("" . swarsel/corfu-normal-return) + ;; ("C-" . swarsel/corfu-complete) ("S-" . corfu-popupinfo-scroll-down) ("S-" . corfu-popupinfo-scroll-up) ("C-" . corfu-previous) ("C-" . corfu-next) ("" . swarsel/corfu-quit-and-up) - ("" . swarsel/corfu-quit-and-down)) + ("" . swarsel/corfu-quit-and-down)) ) + ;; dont disrupt file navigation with completions (defun swarsel/corfu-normal-return (&optional arg) (interactive) - (corfu-complete) - (corfu-quit)) + (corfu-quit) + (newline) + ) + + ;; (defun swarsel/corfu-complete (&optional arg) + ;; (interactive) + ;; (corfu-complete) + ;; (newline) + ;; ) (defun swarsel/corfu-quit-and-up (&optional arg) (interactive) @@ -1651,15 +1671,15 @@ Currently unused. (add-to-list 'completion-at-point-functions #'cape-dabbrev) (add-to-list 'completion-at-point-functions #'cape-file) (add-to-list 'completion-at-point-functions #'cape-elisp-block) - ;;(add-to-list 'completion-at-point-functions #'cape-history) - ;;(add-to-list 'completion-at-point-functions #'cape-keyword) - ;;(add-to-list 'completion-at-point-functions #'cape-tex) - ;;(add-to-list 'completion-at-point-functions #'cape-sgml) - ;;(add-to-list 'completion-at-point-functions #'cape-rfc1345) - ;;(add-to-list 'completion-at-point-functions #'cape-abbrev) - ;;(add-to-list 'completion-at-point-functions #'cape-dict) - ;;(add-to-list 'completion-at-point-functions #'cape-elisp-symbol) - ;;(add-to-list 'completion-at-point-functions #'cape-line) + ;; (add-to-list 'completion-at-point-functions #'cape-history) + ;; (add-to-list 'completion-at-point-functions #'cape-keyword) + ;; (add-to-list 'completion-at-point-functions #'cape-tex) + ;; (add-to-list 'completion-at-point-functions #'cape-sgml) + ;; (add-to-list 'completion-at-point-functions #'cape-rfc1345) + ;; (add-to-list 'completion-at-point-functions #'cape-abbrev) + ;; (add-to-list 'completion-at-point-functions #'cape-dict) + (add-to-list 'completion-at-point-functions #'cape-elisp-symbol) + ;; (add-to-list 'completion-at-point-functions #'cape-line) ) #+end_src @@ -2184,23 +2204,23 @@ The following block is 100% stolen from Dominik :P #+begin_src emacs-lisp - (use-package obsidian - :ensure t - :demand t - :config - (obsidian-specify-path swarsel-obsidian-vault-directory) - (global-obsidian-mode t) - :custom - ;; This directory will be used for `obsidian-capture' if set. - (obsidian-inbox-directory "Inbox") - (bind-key (kbd "C-c M-o") 'obsidian-hydra/body 'obsidian-mode-map) - :bind (:map obsidian-mode-map - ;; Replace C-c C-o with Obsidian.el's implementation. It's ok to use another key binding. - ("C-c C-o" . obsidian-follow-link-at-point) - ;; Jump to backlinks - ("C-c C-b" . obsidian-backlink-jump) - ;; If you prefer you can use `obsidian-insert-link' - ("C-c C-l" . obsidian-insert-wikilink))) + ;; (use-package obsidian + ;; :ensure t + ;; :demand t + ;; :config + ;; (obsidian-specify-path swarsel-obsidian-vault-directory) + ;; (global-obsidian-mode t) + ;; :custom + ;; ;; This directory will be used for `obsidian-capture' if set. + ;; (obsidian-inbox-directory "Inbox") + ;; (bind-key (kbd "C-c M-o") 'obsidian-hydra/body 'obsidian-mode-map) + ;; :bind (:map obsidian-mode-map + ;; ;; Replace C-c C-o with Obsidian.el's implementation. It's ok to use another key binding. + ;; ("C-c C-o" . obsidian-follow-link-at-point) + ;; ;; Jump to backlinks + ;; ("C-c C-b" . obsidian-backlink-jump) + ;; ;; If you prefer you can use `obsidian-insert-link' + ;; ("C-c C-l" . obsidian-insert-wikilink))) #+end_src @@ -2210,43 +2230,43 @@ The following block is 100% stolen from Dominik :P #+begin_src emacs-lisp - (use-package anki-editor - :after org - :bind (:map org-mode-map - ("" . anki-editor-cloze-region-auto-incr) - ("" . anki-editor-cloze-region-dont-incr) - ("" . anki-editor-reset-cloze-number) - ("" . anki-editor-push-tree)) - :hook (org-capture-after-finalize . anki-editor-reset-cloze-number) ; Reset cloze-number after each capture. - :config - (setq anki-editor-create-decks t ;; Allow anki-editor to create a new deck if it doesn't exist - anki-editor-org-tags-as-anki-tags t) + ;; (use-package anki-editor + ;; :after org + ;; :bind (:map org-mode-map + ;; ("" . anki-editor-cloze-region-auto-incr) + ;; ("" . anki-editor-cloze-region-dont-incr) + ;; ("" . anki-editor-reset-cloze-number) + ;; ("" . anki-editor-push-tree)) + ;; :hook (org-capture-after-finalize . anki-editor-reset-cloze-number) ; Reset cloze-number after each capture. + ;; :config + ;; (setq anki-editor-create-decks t ;; Allow anki-editor to create a new deck if it doesn't exist + ;; anki-editor-org-tags-as-anki-tags t) - (defun anki-editor-cloze-region-auto-incr (&optional arg) - "Cloze region without hint and increase card number." - (interactive) - (anki-editor-cloze-region swarsel-anki-editor-cloze-number "") - (setq swarsel-anki-editor-cloze-number (1+ swarsel-anki-editor-cloze-number)) - (forward-sexp)) - (defun anki-editor-cloze-region-dont-incr (&optional arg) - "Cloze region without hint using the previous card number." - (interactive) - (anki-editor-cloze-region (1- swarsel-anki-editor-cloze-number) "") - (forward-sexp)) - (defun anki-editor-reset-cloze-number (&optional arg) - "Reset cloze number to ARG or 1" - (interactive) - (setq swarsel-anki-editor-cloze-number (or arg 1))) - (defun anki-editor-push-tree () - "Push all notes under a tree." - (interactive) - (anki-editor-push-notes '(4)) - (anki-editor-reset-cloze-number)) - ;; Initialize - (anki-editor-reset-cloze-number) - ) + ;; (defun anki-editor-cloze-region-auto-incr (&optional arg) + ;; "Cloze region without hint and increase card number." + ;; (interactive) + ;; (anki-editor-cloze-region swarsel-anki-editor-cloze-number "") + ;; (setq swarsel-anki-editor-cloze-number (1+ swarsel-anki-editor-cloze-number)) + ;; (forward-sexp)) + ;; (defun anki-editor-cloze-region-dont-incr (&optional arg) + ;; "Cloze region without hint using the previous card number." + ;; (interactive) + ;; (anki-editor-cloze-region (1- swarsel-anki-editor-cloze-number) "") + ;; (forward-sexp)) + ;; (defun anki-editor-reset-cloze-number (&optional arg) + ;; "Reset cloze number to ARG or 1" + ;; (interactive) + ;; (setq swarsel-anki-editor-cloze-number (or arg 1))) + ;; (defun anki-editor-push-tree () + ;; "Push all notes under a tree." + ;; (interactive) + ;; (anki-editor-push-notes '(4)) + ;; (anki-editor-reset-cloze-number)) + ;; ;; Initialize + ;; (anki-editor-reset-cloze-number) + ;; ) - (require 'anki-editor) + ;; (require 'anki-editor) #+end_src @@ -2256,35 +2276,35 @@ The following block is 100% stolen from Dominik :P #+begin_src emacs-lisp - (defvar swarsel-anki-deck nil) - (defvar swarsel-anki-notetype nil) - (defvar swarsel-anki-fields nil) + ;; (defvar swarsel-anki-deck nil) + ;; (defvar swarsel-anki-notetype nil) + ;; (defvar swarsel-anki-fields nil) - (defun swarsel-anki-set-deck-and-notetype () - (interactive) - (setq swarsel-anki-deck (completing-read "Choose a deck: " - (sort (anki-editor-deck-names) #'string-lessp))) - (setq swarsel-anki-notetype (completing-read "Choose a note type: " - (sort (anki-editor-note-types) #'string-lessp))) - (setq swarsel-anki-fields (progn - (anki-editor--anki-connect-invoke-result "modelFieldNames" `((modelName . ,swarsel-anki-notetype))))) - ) + ;; (defun swarsel-anki-set-deck-and-notetype () + ;; (interactive) + ;; (setq swarsel-anki-deck (completing-read "Choose a deck: " + ;; (sort (anki-editor-deck-names) #'string-lessp))) + ;; (setq swarsel-anki-notetype (completing-read "Choose a note type: " + ;; (sort (anki-editor-note-types) #'string-lessp))) + ;; (setq swarsel-anki-fields (progn + ;; (anki-editor--anki-connect-invoke-result "modelFieldNames" `((modelName . ,swarsel-anki-notetype))))) + ;; ) - (defun swarsel-anki-make-template-string () - (if (not swarsel-anki-deck) - (call-interactively 'swarsel-anki-set-deck-and-notetype)) - (setq swarsel-temp swarsel-anki-fields) - (concat (concat "* %<%H:%M>\n:PROPERTIES:\n:ANKI_NOTE_TYPE: " swarsel-anki-notetype "\n:ANKI_DECK: " swarsel-anki-deck "\n:END:\n** ")(pop swarsel-temp) "\n%?\n** " (mapconcat 'identity swarsel-temp "\n\n** ") "\n\n")) + ;; (defun swarsel-anki-make-template-string () + ;; (if (not swarsel-anki-deck) + ;; (call-interactively 'swarsel-anki-set-deck-and-notetype)) + ;; (setq swarsel-temp swarsel-anki-fields) + ;; (concat (concat "* %<%H:%M>\n:PROPERTIES:\n:ANKI_NOTE_TYPE: " swarsel-anki-notetype "\n:ANKI_DECK: " swarsel-anki-deck "\n:END:\n** ")(pop swarsel-temp) "\n%?\n** " (mapconcat 'identity swarsel-temp "\n\n** ") "\n\n")) - (defun swarsel-today() - (format-time-string "%Y-%m-%d")) + ;; (defun swarsel-today() + ;; (format-time-string "%Y-%m-%d")) - (defun swarsel-obsidian-daily () - (interactive) - (if (not (file-exists-p (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory))) - (write-region "" nil (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory)) - ) - (find-file (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory))) + ;; (defun swarsel-obsidian-daily () + ;; (interactive) + ;; (if (not (file-exists-p (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory))) + ;; (write-region "" nil (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory)) + ;; ) + ;; (find-file (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory))) #+end_src @@ -2491,5 +2511,6 @@ Yep, none currently. We need to add this last line, because otherwise gpg will crash on the most recent version when saving a .gpg file within emacs. #+begin_src emacs-lisp + (setq gc-cons-threshold (* 800 1000 )) (fset 'epg-wait-for-status 'ignore) #+end_src diff --git a/Nix.org b/Nix.org index 5f6efbf..a39ceb5 100644 --- a/Nix.org +++ b/Nix.org @@ -1164,7 +1164,7 @@ Also, I define some useful shell scripts here. filebot gimp zoom-us - nomacs + # nomacs libreoffice-qt xournalpp obsidian @@ -1202,10 +1202,10 @@ Also, I define some useful shell scripts here. speechd networkmanagerapplet psmisc # kill etc - jq # used for searching the i3 tree in check.sh files + # jq # used for searching the i3 tree in check.sh files # specifically needed for anki - mpv + # mpv anki-bin # dirvish file previews @@ -1235,11 +1235,11 @@ Also, I define some useful shell scripts here. playerctl pavucontrol pamixer - gnome.gnome-clocks - wlogout - jdiskreport + # gnome.gnome-clocks + # wlogout + # jdiskreport syncthingtray - monitor + # monitor #keychain qalculate-gtk @@ -1648,18 +1648,13 @@ As for the `home.sessionVariables`, it should be noted that environment variable home.sessionVariables = { EDITOR = "bash ~/.dotfiles/scripts/editor.sh"; - GTK_THEME = "Arc-Dark"; + EDITORBAK = "bash ~/.dotfiles/scripts/editor.sh"; + # GTK_THEME = "Arc-Dark"; }; #+end_src ** Programs - -Let Home Manager install and manage itself - this is needed. - - -Other programs: - *** General #+begin_src nix :tangle profiles/common/home.nix @@ -1669,10 +1664,25 @@ Other programs: package = pkgs.pass.withExtensions (exts: [exts.pass-otp]); }; # zsh Integration is enabled by default for these + programs.bottom.enable = true; + programs.imv.enable = true; + programs.sioyek.enable = true; + programs.bat.enable = true; + programs.carapace.enable = true; + programs.wlogout.enable = true; + programs.swayr.enable = true; + programs.yt-dlp.enable = true; + programs.mpv.enable = true; + programs.jq.enable = true; + programs.nix-index.enable = true; + programs.ripgrep.enable = true; + programs.pandoc.enable = true; programs.fzf.enable = true; - programs.direnv.enable = true; + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; programs.zoxide.enable = true; - programs.navi.enable = true; programs.eza = { enable = true; enableAliases = true; @@ -1688,8 +1698,11 @@ Other programs: aliases = { a = "add"; c = "commit"; + cl = "clone"; co = "checkout"; b = "branch"; + i = "init"; + m = "merge"; s = "status"; r = "restore"; p = "pull"; @@ -1902,6 +1915,10 @@ zsh is clearly the most convenient shell for me and it happens to be super neat size = 10000; }; historySubstringSearch.enable = true; + initExtra = '' + bindkey "^[D" backward-word + bindkey "^[C" forward-word + ''; }; #+end_src @@ -2052,6 +2069,18 @@ zsh is clearly the most convenient shell for me and it happens to be super neat packageRequires = [ epkgs.howm ]; }) + (epkgs.trivialBuild rec { + pname = "fast-scroll"; + version = "1.0.0-20191016"; + src = pkgs.fetchFromGitHub { + owner = "ahungry"; + repo = "fast-scroll"; + rev = "3f6ca0d5556fe9795b74714304564f2295dcfa24"; + hash = "sha256-w1wmJW7YwXyjvXJOWdN2+k+QmhXr4IflES/c2bCX3CI="; + }; + packageRequires = []; + }) + ]; }); }; @@ -2157,14 +2186,14 @@ Again I am just using the first bar option here that I was able to find good und min-length= 8; interval= 1; format= "{:%H:%M:%S}"; - on-click-right= "gnome-clocks"; - tooltip-format= "{:%Y %B}\n{calendar}\n\nR:Clocks"; + # on-click-right= "gnome-clocks"; + tooltip-format= "{:%Y %B}\n{calendar}"; }; "clock#2"= { format= "{:%d. %B %Y}"; - on-click-right= "gnome-clocks"; - tooltip-format= "{:%Y %B}\n{calendar}\n\nR:Clocks"; + # on-click-right= "gnome-clocks"; + tooltip-format= "{:%Y %B}\n{calendar}"; }; @@ -2192,7 +2221,8 @@ Again I am just using the first bar option here that I was able to find good und min-length= 6; interval= 5; format-icons = ["▁" "β–‚" "β–ƒ" "β–„" "β–…" "β–†" "β–‡" "β–ˆ"]; - on-click-right= "com.github.stsdc.monitor"; + # on-click-right= "com.github.stsdc.monitor"; + on-click-right= "kitty -o confirm_os_window_close=0 btm"; }; battery= { @@ -2716,7 +2746,9 @@ I am currently using SwayFX, which adds some nice effects to sway, like rounded "${modifier}+Space" = "exec fuzzel"; "${modifier}+Shift+Space" = "floating toggle"; "${modifier}+e" = "exec emacsclient -nquc -a emacs -e \"(dashboard-open)\""; - "${modifier}+Shift+m" = "exec \"bash ~/.dotfiles/scripts/checkspotify.sh\""; + "${modifier}+Shift+m" = "exec emacsclient -nquc -a emacs -e \"(mu4e)\""; + "${modifier}+Shift+c" = "exec emacsclient -nquc -a emacs -e \"(swarsel/open-calendar)\""; + "${modifier}+Shift+s" = "exec \"bash ~/.dotfiles/scripts/checkspotify.sh\""; "${modifier}+m" = "exec \"bash ~/.dotfiles/scripts/checkspotifytui.sh\""; "${modifier}+x" = "exec \"bash ~/.dotfiles/scripts/checkkitty.sh\""; "${modifier}+d" = "exec \"bash ~/.dotfiles/scripts/checkdiscord.sh\""; @@ -2727,7 +2759,8 @@ I am currently using SwayFX, which adds some nice effects to sway, like rounded "${modifier}+p" = "exec pass-fuzzel"; "${modifier}+Shift+p" = "exec pass-fuzzel --type"; "${modifier}+Escape" = "mode $exit"; - "${modifier}+Shift+Escape" = "exec com.github.stsdc.monitor"; + # "${modifier}+Shift+Escape" = "exec com.github.stsdc.monitor"; + "${modifier}+Shift+Escape" = "exec kitty -o confirm_os_window_close=0 btm"; "${modifier}+s" = "exec grim -g \"$(slurp)\" -t png - | wl-copy -t image/png"; "${modifier}+i" = "exec \"bash ~/.dotfiles/scripts/startup.sh\""; "${modifier}+1" = "workspace 1:δΈ€"; @@ -2768,7 +2801,7 @@ I am currently using SwayFX, which adds some nice effects to sway, like rounded "${modifier}+Shift+l" = "move right 40px"; "${modifier}+Shift+j" = "move down 40px"; "${modifier}+Shift+k" = "move up 40px"; - "${modifier}+Shift+c" = "reload"; + "${modifier}+Ctrl+Shift+c" = "reload"; "${modifier}+Shift+e" = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'"; "${modifier}+r" = "mode resize"; "${modifier}+Return" = "exec kitty"; @@ -2786,7 +2819,7 @@ I am currently using SwayFX, which adds some nice effects to sway, like rounded defaultWorkspace = "workspace 1:δΈ€"; startup = [ { command = "kitty -T kittyterm";} - { command = "sleep 60; kitty -T spotifytui spt";} + { command = "sleep 60; kitty -T spotifytui -o confirm_os_window_close=0 spt";} ]; window = { border = 1; diff --git a/profiles/common/home.nix b/profiles/common/home.nix index a14d60a..3ac1dcc 100644 --- a/profiles/common/home.nix +++ b/profiles/common/home.nix @@ -7,7 +7,7 @@ filebot gimp zoom-us - nomacs + # nomacs libreoffice-qt xournalpp obsidian @@ -45,10 +45,10 @@ speechd networkmanagerapplet psmisc # kill etc - jq # used for searching the i3 tree in check.sh files + # jq # used for searching the i3 tree in check.sh files # specifically needed for anki - mpv + # mpv anki-bin # dirvish file previews @@ -78,11 +78,11 @@ playerctl pavucontrol pamixer - gnome.gnome-clocks - wlogout - jdiskreport + # gnome.gnome-clocks + # wlogout + # jdiskreport syncthingtray - monitor + # monitor #keychain qalculate-gtk @@ -440,7 +440,8 @@ home.file = { home.sessionVariables = { EDITOR = "bash ~/.dotfiles/scripts/editor.sh"; - GTK_THEME = "Arc-Dark"; + EDITORBAK = "bash ~/.dotfiles/scripts/editor.sh"; + # GTK_THEME = "Arc-Dark"; }; programs.password-store = { @@ -448,10 +449,25 @@ programs.password-store = { package = pkgs.pass.withExtensions (exts: [exts.pass-otp]); }; # zsh Integration is enabled by default for these +programs.bottom.enable = true; +programs.imv.enable = true; +programs.sioyek.enable = true; +programs.bat.enable = true; +programs.carapace.enable = true; +programs.wlogout.enable = true; +programs.swayr.enable = true; +programs.yt-dlp.enable = true; +programs.mpv.enable = true; +programs.jq.enable = true; +programs.nix-index.enable = true; +programs.ripgrep.enable = true; +programs.pandoc.enable = true; programs.fzf.enable = true; -programs.direnv.enable = true; +programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; programs.zoxide.enable = true; -programs.navi.enable = true; programs.eza = { enable = true; enableAliases = true; @@ -467,8 +483,11 @@ programs.git = { aliases = { a = "add"; c = "commit"; + cl = "clone"; co = "checkout"; b = "branch"; + i = "init"; + m = "merge"; s = "status"; r = "restore"; p = "pull"; @@ -652,6 +671,10 @@ programs.zsh = { size = 10000; }; historySubstringSearch.enable = true; + initExtra = '' + bindkey "^[D" backward-word + bindkey "^[C" forward-word + ''; }; programs.mbsync = { @@ -790,6 +813,18 @@ programs.emacs = { packageRequires = [ epkgs.howm ]; }) + (epkgs.trivialBuild rec { + pname = "fast-scroll"; + version = "1.0.0-20191016"; + src = pkgs.fetchFromGitHub { + owner = "ahungry"; + repo = "fast-scroll"; + rev = "3f6ca0d5556fe9795b74714304564f2295dcfa24"; + hash = "sha256-w1wmJW7YwXyjvXJOWdN2+k+QmhXr4IflES/c2bCX3CI="; + }; + packageRequires = []; + }) + ]; }); }; @@ -887,14 +922,14 @@ programs.waybar = { min-length= 8; interval= 1; format= "{:%H:%M:%S}"; - on-click-right= "gnome-clocks"; - tooltip-format= "{:%Y %B}\n{calendar}\n\nR:Clocks"; + # on-click-right= "gnome-clocks"; + tooltip-format= "{:%Y %B}\n{calendar}"; }; "clock#2"= { format= "{:%d. %B %Y}"; - on-click-right= "gnome-clocks"; - tooltip-format= "{:%Y %B}\n{calendar}\n\nR:Clocks"; + # on-click-right= "gnome-clocks"; + tooltip-format= "{:%Y %B}\n{calendar}"; }; @@ -922,7 +957,8 @@ programs.waybar = { min-length= 6; interval= 5; format-icons = ["▁" "β–‚" "β–ƒ" "β–„" "β–…" "β–†" "β–‡" "β–ˆ"]; - on-click-right= "com.github.stsdc.monitor"; + # on-click-right= "com.github.stsdc.monitor"; + on-click-right= "kitty -o confirm_os_window_close=0 btm"; }; battery= { @@ -1408,7 +1444,9 @@ wayland.windowManager.sway = { "${modifier}+Space" = "exec fuzzel"; "${modifier}+Shift+Space" = "floating toggle"; "${modifier}+e" = "exec emacsclient -nquc -a emacs -e \"(dashboard-open)\""; - "${modifier}+Shift+m" = "exec \"bash ~/.dotfiles/scripts/checkspotify.sh\""; + "${modifier}+Shift+m" = "exec emacsclient -nquc -a emacs -e \"(mu4e)\""; + "${modifier}+Shift+c" = "exec emacsclient -nquc -a emacs -e \"(swarsel/open-calendar)\""; + "${modifier}+Shift+s" = "exec \"bash ~/.dotfiles/scripts/checkspotify.sh\""; "${modifier}+m" = "exec \"bash ~/.dotfiles/scripts/checkspotifytui.sh\""; "${modifier}+x" = "exec \"bash ~/.dotfiles/scripts/checkkitty.sh\""; "${modifier}+d" = "exec \"bash ~/.dotfiles/scripts/checkdiscord.sh\""; @@ -1419,7 +1457,8 @@ wayland.windowManager.sway = { "${modifier}+p" = "exec pass-fuzzel"; "${modifier}+Shift+p" = "exec pass-fuzzel --type"; "${modifier}+Escape" = "mode $exit"; - "${modifier}+Shift+Escape" = "exec com.github.stsdc.monitor"; + # "${modifier}+Shift+Escape" = "exec com.github.stsdc.monitor"; + "${modifier}+Shift+Escape" = "exec kitty -o confirm_os_window_close=0 btm"; "${modifier}+s" = "exec grim -g \"$(slurp)\" -t png - | wl-copy -t image/png"; "${modifier}+i" = "exec \"bash ~/.dotfiles/scripts/startup.sh\""; "${modifier}+1" = "workspace 1:δΈ€"; @@ -1460,7 +1499,7 @@ wayland.windowManager.sway = { "${modifier}+Shift+l" = "move right 40px"; "${modifier}+Shift+j" = "move down 40px"; "${modifier}+Shift+k" = "move up 40px"; - "${modifier}+Shift+c" = "reload"; + "${modifier}+Ctrl+Shift+c" = "reload"; "${modifier}+Shift+e" = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'"; "${modifier}+r" = "mode resize"; "${modifier}+Return" = "exec kitty"; @@ -1478,7 +1517,7 @@ wayland.windowManager.sway = { defaultWorkspace = "workspace 1:δΈ€"; startup = [ { command = "kitty -T kittyterm";} - { command = "sleep 60; kitty -T spotifytui spt";} + { command = "sleep 60; kitty -T spotifytui -o confirm_os_window_close=0 spt";} ]; window = { border = 1; diff --git a/programs/emacs/custom.el b/programs/emacs/custom.el index 7e55da5..227bd66 100644 --- a/programs/emacs/custom.el +++ b/programs/emacs/custom.el @@ -3,18 +3,11 @@ ;; 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. - '(browse-url-browser-function 'browse-url-firefox) '(custom-safe-themes '("7ec8fd456c0c117c99e3a3b16aaf09ed3fb91879f6601b1ea0eeaee9c6def5d9" "badd1a5e20bd0c29f4fe863f3b480992c65ef1fa63951f59aa5d6b129a3f9c4c" "2e05569868dc11a52b08926b4c1a27da77580daa9321773d92822f7a639956ce" - default)) - '(org-agenda-files '("/home/swarsel/Calendars/leon_cal.org")) - '(send-mail-function 'sendmail-send-it) - '(warning-suppress-log-types - '(((python python-shell-completion-native-turn-on-maybe)) (comp) - ((defvaralias losing-value org-tab-first-hook)))) - '(warning-suppress-types '(((defvaralias losing-value org-tab-first-hook))))) + default))) ;; (custom-set-faces ;; ;; custom-set-faces was added by Custom. ;; ;; If you edit it by hand, you could mess it up, so be careful. @@ -36,10 +29,7 @@ ;; 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. - '(evil-goggles-change-face ((t (:inherit diff-removed)))) - '(evil-goggles-delete-face ((t (:inherit diff-removed)))) - '(evil-goggles-paste-face ((t (:inherit diff-added)))) - '(evil-goggles-undo-redo-add-face ((t (:inherit diff-added)))) - '(evil-goggles-undo-redo-change-face ((t (:inherit diff-changed)))) - '(evil-goggles-undo-redo-remove-face ((t (:inherit diff-removed)))) - '(evil-goggles-yank-face ((t (:inherit diff-changed))))) + '(highlight-indent-guides-even-face ((t (:background "gray10")))) + '(highlight-indent-guides-odd-face ((t (:background "gray20")))) + '(highlight-indent-guides-stack-even-face ((t (:background "gray40")))) + '(highlight-indent-guides-stack-odd-face ((t (:background "gray50"))))) diff --git a/programs/emacs/init.el b/programs/emacs/init.el index ca415d6..b69cac3 100644 --- a/programs/emacs/init.el +++ b/programs/emacs/init.el @@ -1,5 +1,4 @@ ;; The default is 800 kilobytes. Measured in bytes. -(setq gc-cons-threshold (* 50 1000 1000)) ;; use UTF-8 everywhere (set-language-environment "UTF-8") @@ -62,25 +61,26 @@ (load custom-file t) (defalias 'yes-or-no-p 'y-or-n-p) -;;(setq-default show-trailing-whitespace t) -(add-hook 'before-save-hook 'delete-trailing-whitespace) -(global-hl-line-mode 1) -;; (setq redisplay-dont-pause t) ;; obsolete -(delete-selection-mode 1) -(pixel-scroll-precision-mode 1) -(setq vc-follow-symlinks t) -(setq require-final-newline t) -(winner-mode 1) -;; less noise when compiling elisp -(setq byte-compile-warnings '(not free-vars unresolved noruntime lexical make-local)) -(setq native-comp-async-report-warnings-errors nil) -(setq load-prefer-newer t) + ;;(setq-default show-trailing-whitespace t) + (add-hook 'before-save-hook 'delete-trailing-whitespace) + (global-hl-line-mode 1) + ;; (setq redisplay-dont-pause t) ;; obsolete + (setq blink-cursor-mode nil) ;; blink-cursor is an unexpected source of slowdown + (delete-selection-mode 1) + (setq vc-follow-symlinks t) + (setq require-final-newline t) + (winner-mode 1) + ;; less noise when compiling elisp + (setq byte-compile-warnings '(not free-vars unresolved noruntime lexical make-local)) + (setq native-comp-async-report-warnings-errors nil) + (setq load-prefer-newer t) -;; disable a keybind that does more harm than good -(global-set-key [remap suspend-frame] - (lambda () - (interactive) - (message "This keybinding is disabled (was 'suspend-frame')"))) +(setq browse-url-browser-function 'browse-url-firefox) + ;; disable a keybind that does more harm than good + (global-set-key [remap suspend-frame] + (lambda () + (interactive) + (message "This keybinding is disabled (was 'suspend-frame')"))) ;; (scroll-bar-mode -1) ;; (tool-bar-mode -1) @@ -91,21 +91,37 @@ initial-scratch-message nil) (setq-default indent-tabs-mode nil - tab-width 2) + tab-width 2) - (setq tab-always-indent 'complete) +(setq tab-always-indent 'complete) +;; dont send nag when creating python files +(setq python-indent-guess-indent-offset-verbose nil) (use-package highlight-indent-guides :hook (prog-mode . highlight-indent-guides-mode) :init - (setq highlight-indent-guides-method 'character) - (setq highlight-indent-guides-character "|") + (setq highlight-indent-guides-method 'column) + ;; (setq highlight-indent-guides-method 'character) + ;; (setq highlight-indent-guides-character ?|) (setq highlight-indent-guides-responsive 'top) ) +;;(set-face--background 'highlight-indent-guides-odd-face "dark slate gray") +;;(set-face-background 'highlight-indent-guides-even-face "steel blue") +;;(set-face-foreground 'highlight-indent-guides-character-face "dark violet") (setq scroll-step 1 scroll-margin 4 - scroll-conservatively 5) + scroll-conservatively 101) + +;; (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time +;; (setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling +;; (setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse + +(pixel-scroll-precision-mode 1) + +;; (use-package fast-scroll +;; :ensure nil +;; :init (fast-scroll-mode 1)) (defun swarsel/with-buffer-name-prompt-and-make-subdirs () (let ((parent-directory (file-name-directory buffer-file-name))) @@ -159,34 +175,22 @@ (evil-collection-init) (setq forge-add-default-bindings nil)) - - +;; enables 2-char inline search (use-package evil-snipe :after evil :demand :config (evil-snipe-mode +1) + ;; replace 1-char searches (f&t) with this better UI (evil-snipe-override-mode +1)) +;; for parentheses-heavy languades modify evil commands to keep balance of parantheses (use-package evil-cleverparens) - -(use-package evil-surround) - - (use-package evil-goggles - :after evil - :demand - :init - (setq evil-goggles-duration 0.05) - :config - (push '(evil-operator-eval - :face evil-goggles-yank-face - :switch evil-goggles-enable-yank - :advice evil-goggles--generic-async-advice) - evil-goggles--commands) - (evil-goggles-mode) - (evil-goggles-use-diff-faces) - ) +;; enables surrounding text with S +(use-package evil-surround + :config + (global-evil-surround-mode 1)) (use-package undo-tree ;; :init (global-undo-tree-mode) @@ -235,6 +239,7 @@ "t" '(:ignore t :which-key "toggles") "ts" '(hydra-text-scale/body :which-key "scale text") "tl" '(display-line-numbers-mode :which-key "line numbers") + "tp" '(evil-cleverparens-mode :wk "cleverparens") "to" '(olivetti-mode :wk "olivetti") "td" '(darkroom-tentative-mode :wk "darkroom") "tw" '((lambda () (interactive) (toggle-truncate-lines)) :which-key "line wrapping") @@ -244,21 +249,21 @@ "mc" '((lambda () (interactive) (swarsel/open-calendar)) :which-key "calendar") "mp" '(popper-toggle :which-key "popper") "md" '(dirvish :which-key "dirvish") - "c" '(:ignore c :which-key "capture") - "cj" '((lambda () (interactive) (org-capture nil "jj")) :which-key "journal") - "cs" '(markdown-download-screenshot :which-key "screenshot") + ;; "c" '(:ignore c :which-key "capture") + ;; "cj" '((lambda () (interactive) (org-capture nil "jj")) :which-key "journal") + ;; "cs" '(markdown-download-screenshot :which-key "screenshot") "l" '(:ignore l :which-key "links") "le" '((lambda () (interactive) (find-file swarsel-emacs-org-filepath)) :which-key "Emacs.org") "ls" '((lambda () (interactive) (find-file "/smb:Swarsel@192.168.1.3:")) :which-key "Server") "lo" '(dired swarsel-obsidian-vault-directory :which-key "obsidian") - "la" '((lambda () (interactive) (find-file swarsel-org-anki-filepath)) :which-key "anki") + ;; "la" '((lambda () (interactive) (find-file swarsel-org-anki-filepath)) :which-key "anki") "ln" '((lambda () (interactive) (find-file swarsel-nix-org-filepath)) :which-key "Nix.org") "lp" '((lambda () (interactive) (projectile-switch-project)) :which-key "switch project") "lg" '((lambda () (interactive) (magit-list-repositories)) :which-key "list git repos") - "a" '(:ignore a :which-key "anki") - "ap" '(anki-editor-push-tree :which-key "push new cards") - "an" '((lambda () (interactive) (org-capture nil "a")) :which-key "new card") - "as" '(swarsel-anki-set-deck-and-notetype :which-key "change deck and notetype") + ;; "a" '(:ignore a :which-key "anki") + ;; "ap" '(anki-editor-push-tree :which-key "push new cards") + ;; "an" '((lambda () (interactive) (org-capture nil "a")) :which-key "new card") + ;; "as" '(swarsel-anki-set-deck-and-notetype :which-key "change deck and notetype") "h" '(:ignore h :which-key "help") "hy" '(yas-describe-tables :which-key "yas tables") "hb" '(embark-bindings :which-key "current key bindings") @@ -269,6 +274,7 @@ "hl" '(view-lossage :which-key "show command keypresses") "hL" 'find-library "hm" 'describe-mode + "ho" 'describe-symbol "hk" 'describe-key "hK" 'describe-keymap "hp" 'describe-package @@ -293,9 +299,9 @@ ;; General often used hotkeys (general-define-key "C-M-a" (lambda () (interactive) (org-capture nil "a")) ; make new anki card - "C-M-d" 'swarsel-obsidian-daily ; open daily obsidian file and create if not exist - "C-M-S" 'swarsel-anki-set-deck-and-notetype ; switch deck and notetye for new anki cards - "C-M-s" 'markdown-download-screenshot ; wrapper for org-download-screenshot + ;; "C-M-d" 'swarsel-obsidian-daily ; open daily obsidian file and create if not exist + ;; "C-M-S" 'swarsel-anki-set-deck-and-notetype ; switch deck and notetye for new anki cards + ;; "C-M-s" 'markdown-download-screenshot ; wrapper for org-download-screenshot "C-c d" 'duplicate-line ; duplicate line on CURSOR "C-M-j" 'consult-buffer "C-s" 'consult-line @@ -318,9 +324,6 @@ (use-package rainbow-mode :config (rainbow-mode)) -(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time -(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling -(setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse (add-hook 'prog-mode-hook 'display-line-numbers-mode) @@ -356,11 +359,15 @@ ;; (add-hook 'after-make-frame-functions #'swarsel/font-setup) -(use-package doom-themes - :init (load-theme 'doom-city-lights t)) - (use-package solaire-mode - :init (solaire-global-mode +1)) + :defer t + :custom (solaire-global-mode +1)) + +(use-package doom-themes + :defer t + :hook (server-after-make-frame . (lambda () (load-theme + 'doom-city-lights t))) + ) ;; (set-frame-parameter (selected-frame) 'alpha '(95 . 95)) ;; (add-to-list 'default-frame-alist '(alpha . (95 . 95))) @@ -607,11 +614,11 @@ ;; (setq evil-auto-indent nil) ;;(diminish org-indent-mode) -(defun swarsel/org-font-setup () - ;; Replace list hyphen with dot - (font-lock-add-keywords 'org-mode - '(("^ *\\([-]\\) " - (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "β€’"))))))) +;; (defun swarsel/org-font-setup () +;; ;; Replace list hyphen with dot +;; (font-lock-add-keywords 'org-mode +;; '(("^ *\\([-]\\) " +;; (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "β€’"))))))) (use-package org ;;:diminish (org-indent-mode) @@ -622,9 +629,9 @@ org-hide-emphasis-markers t) (setq org-startup-folded t) (setq org-support-shift-select t) - (setq org-agenda-start-with-log-mode t) - (setq org-log-done 'time) - (setq org-log-into-drawer t) + ;; (setq org-agenda-start-with-log-mode t) + ;; (setq org-log-done 'time) + ;; (setq org-log-into-drawer t) (setq org-startup-with-inline-images t) (setq org-image-actual-width nil) (setq org-format-latex-options '(:foreground "White" :background default :scale 2.0 :html-foreground "Black" :html-background "Transparent" :html-scale 1.0 :matchers ("begin" "$1" "$" "$$" "\\(" "\\["))) @@ -633,95 +640,95 @@ ;; '(swarsel-org-tasks-filepath ;; swarsel-org-archive-filepath ;; swarsel-org-anki-filepath)) + (setq org-agenda-files '("/home/swarsel/Calendars/leon_cal.org")) - (setq org-agenda-files - '("~/Calendars/leon_cal.org")) - (require 'org-habit) - (add-to-list 'org-modules 'org-habit) - (setq org-habit-graph-column 60) + ;; (require 'org-habit) + ;; (add-to-list 'org-modules 'org-habit) + ;; (setq org-habit-graph-column 60) - (setq org-todo-keywords - '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)") - (sequence "BACKLOG(b)" "PLAN(p)" "READY(r)" "ACTIVE(a)" "REVIEW(v)" "WAIT(w@/!)" "HOLD(h)" "|" "COMPLETED(c)" "CANC(k@)"))) + ;; (setq org-todo-keywords + ;; '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)") + ;; (sequence "BACKLOG(b)" "PLAN(p)" "READY(r)" "ACTIVE(a)" "REVIEW(v)" "WAIT(w@/!)" "HOLD(h)" "|" "COMPLETED(c)" "CANC(k@)"))) - (setq org-refile-targets - '((swarsel-archive-org-file :maxlevel . 1) - (swarsel-anki-org-file :maxlevel . 1) - (swarsel-tasks-org-file :maxlevel . 1))) + ;; (setq org-refile-targets + ;; '((swarsel-archive-org-file :maxlevel . 1) + ;; (swarsel-anki-org-file :maxlevel . 1) + ;; (swarsel-tasks-org-file :maxlevel . 1))) - ;; Configure custom agenda views - (setq org-agenda-custom-commands - '(("d" "Dashboard" - ((agenda "" ((org-deadline-warning-days 7))) - (todo "NEXT" - ((org-agenda-overriding-header "Next Tasks"))) - (tags-todo "agenda/ACTIVE" ((org-agenda-overriding-header "Active Projects"))))) + ;; ;; Configure custom agenda views + ;; (setq org-agenda-custom-commands + ;; '(("d" "Dashboard" + ;; ((agenda "" ((org-deadline-warning-days 7))) + ;; (todo "NEXT" + ;; ((org-agenda-overriding-header "Next Tasks"))) + ;; (tags-todo "agenda/ACTIVE" ((org-agenda-overriding-header "Active Projects"))))) - ("n" "Next Tasks" - ((todo "NEXT" - ((org-agenda-overriding-header "Next Tasks"))))) + ;; ("n" "Next Tasks" + ;; ((todo "NEXT" + ;; ((org-agenda-overriding-header "Next Tasks"))))) - ("W" "Work Tasks" tags-todo "+work-email") + ;; ("W" "Work Tasks" tags-todo "+work-email") - ;; Low-effort next actions - ("e" tags-todo "+TODO=\"NEXT\"+Effort<15&+Effort>0" - ((org-agenda-overriding-header "Low Effort Tasks") - (org-agenda-max-todos 20) - (org-agenda-files org-agenda-files))) + ;; ;; Low-effort next actions + ;; ("e" tags-todo "+TODO=\"NEXT\"+Effort<15&+Effort>0" + ;; ((org-agenda-overriding-header "Low Effort Tasks") + ;; (org-agenda-max-todos 20) + ;; (org-agenda-files org-agenda-files))) - ("w" "Workflow Status" - ((todo "WAIT" - ((org-agenda-overriding-header "Waiting on External") - (org-agenda-files org-agenda-files))) - (todo "REVIEW" - ((org-agenda-overriding-header "In Review") - (org-agenda-files org-agenda-files))) - (todo "PLAN" - ((org-agenda-overriding-header "In Planning") - (org-agenda-todo-list-sublevels nil) - (org-agenda-files org-agenda-files))) - (todo "BACKLOG" - ((org-agenda-overriding-header "Project Backlog") - (org-agenda-todo-list-sublevels nil) - (org-agenda-files org-agenda-files))) - (todo "READY" - ((org-agenda-overriding-header "Ready for Work") - (org-agenda-files org-agenda-files))) - (todo "ACTIVE" - ((org-agenda-overriding-header "Active Projects") - (org-agenda-files org-agenda-files))) - (todo "COMPLETED" - ((org-agenda-overriding-header "Completed Projects") - (org-agenda-files org-agenda-files))) - (todo "CANC" - ((org-agenda-overriding-header "Cancelled Projects") - (org-agenda-files org-agenda-files))))))) + ;; ("w" "Workflow Status" + ;; ((todo "WAIT" + ;; ((org-agenda-overriding-header "Waiting on External") + ;; (org-agenda-files org-agenda-files))) + ;; (todo "REVIEW" + ;; ((org-agenda-overriding-header "In Review") + ;; (org-agenda-files org-agenda-files))) + ;; (todo "PLAN" + ;; ((org-agenda-overriding-header "In Planning") + ;; (org-agenda-todo-list-sublevels nil) + ;; (org-agenda-files org-agenda-files))) + ;; (todo "BACKLOG" + ;; ((org-agenda-overriding-header "Project Backlog") + ;; (org-agenda-todo-list-sublevels nil) + ;; (org-agenda-files org-agenda-files))) + ;; (todo "READY" + ;; ((org-agenda-overriding-header "Ready for Work") + ;; (org-agenda-files org-agenda-files))) + ;; (todo "ACTIVE" + ;; ((org-agenda-overriding-header "Active Projects") + ;; (org-agenda-files org-agenda-files))) + ;; (todo "COMPLETED" + ;; ((org-agenda-overriding-header "Completed Projects") + ;; (org-agenda-files org-agenda-files))) + ;; (todo "CANC" + ;; ((org-agenda-overriding-header "Cancelled Projects") + ;; (org-agenda-files org-agenda-files))))))) - (setq org-capture-templates - `( - ("a" "Anki basic" - entry - (file+headline swarsel-org-anki-filepath "Dispatch") - (function swarsel-anki-make-template-string)) + ;; (setq org-capture-templates + ;; `( + ;; ("a" "Anki basic" + ;; entry + ;; (file+headline swarsel-org-anki-filepath "Dispatch") + ;; (function swarsel-anki-make-template-string)) - ("A" "Anki cloze" - entry - (file+headline org-swarsel-anki-file "Dispatch") - "* %<%H:%M>\n:PROPERTIES:\n:ANKI_NOTE_TYPE: Cloze\n:ANKI_DECK: 🦁 All::01 ❀️ Various::00 ✨ Allgemein\n:END:\n** Text\n%?\n** Extra\n") - ("t" "Tasks / Projects") - ("tt" "Task" entry (file+olp swarsel-org-tasks-filepath "Inbox") - "* TODO %?\n %U\n %a\n %i" :empty-lines 1) + ;; ("A" "Anki cloze" + ;; entry + ;; (file+headline org-swarsel-anki-file "Dispatch") + ;; "* %<%H:%M>\n:PROPERTIES:\n:ANKI_NOTE_TYPE: Cloze\n:ANKI_DECK: 🦁 All::01 ❀️ Various::00 ✨ Allgemein\n:END:\n** Text\n%?\n** Extra\n") + ;; ("t" "Tasks / Projects") + ;; ("tt" "Task" entry (file+olp swarsel-org-tasks-filepath "Inbox") + ;; "* TODO %?\n %U\n %a\n %i" :empty-lines 1) - ("j" "Journal Entries") - ("jj" "Journal" entry - (file+olp+datetree swarsel-org-journal-filepath) - "\n* %<%I:%M %p> - Journal :journal:\n\n%?\n\n" - ;; ,(dw/read-file-as-string "~/Notes/Templates/Daily.org") - :clock-in :clock-resume - :empty-lines 1))) + ;; ("j" "Journal Entries") + ;; ("jj" "Journal" entry + ;; (file+olp+datetree swarsel-org-journal-filepath) + ;; "\n* %<%I:%M %p> - Journal :journal:\n\n%?\n\n" + ;; ;; ,(dw/read-file-as-string "~/Notes/Templates/Daily.org") + ;; :clock-in :clock-resume + ;; :empty-lines 1))) - (swarsel/org-font-setup)) + ;; (swarsel/org-font-setup) + ) ;; ;; Set faces for heading levels ;; (with-eval-after-load 'org-faces (dolist (face '((org-level-1 . 1.3) @@ -743,18 +750,18 @@ ;; (set-face-attribute 'org-checkbox nil :inherit '(fixed-pitch))) ;; Show hidden emphasis markers -(use-package org-appear - :hook (org-mode . org-appear-mode) - :init - (setq org-appear-autolinks t) - (setq org-appear-autosubmarkers t) - ) +;; (use-package org-appear +;; :hook (org-mode . org-appear-mode) +;; :init +;; (setq org-appear-autolinks t) +;; (setq org-appear-autosubmarkers t) + ;; ) -(use-package org-bullets - :after org - :hook (org-mode . org-bullets-mode) - :custom - (org-bullets-bullet-list '("β—‰" "β—‹" "●" "β—‹" "●" "β—‹" "●"))) +;; (use-package org-bullets +;; :after org +;; :hook (org-mode . org-bullets-mode) +;; :custom +;; (org-bullets-bullet-list '("β—‰" "β—‹" "●" "β—‹" "●" "β—‹" "●"))) (defun swarsel/org-mode-visual-fill () (setq visual-fill-column-width 150 @@ -868,104 +875,104 @@ ;; these next lines provide an interface for org-download in markdown mode for use with obsidian -(defvar org-download-markdown-link-format - "![[./%s]]\n" - "Format of the file link to insert.") +;; (defvar org-download-markdown-link-format +;; "![[./%s]]\n" +;; "Format of the file link to insert.") -(defcustom org-download-markdown-link-format-function #'org-download-markdown-link-format-function-default - "Function that takes FILENAME and returns a org link." - :type 'function) +;; (defcustom org-download-markdown-link-format-function #'org-download-markdown-link-format-function-default +;; "Function that takes FILENAME and returns a org link." +;; :type 'function) -(defun org-download-markdown-link-format-function-default (filename) - "The default function of `org-download-link-format-function'." - (if (and (>= (string-to-number org-version) 9.3) - (eq org-download-method 'attach)) - (format "[[attachment:%s]]\n" - (org-link-escape - (file-relative-name filename (org-attach-dir)))) - (format org-download-markdown-link-format - (org-link-escape - (funcall org-download-abbreviate-filename-function filename))))) +;; (defun org-download-markdown-link-format-function-default (filename) +;; "The default function of `org-download-link-format-function'." +;; (if (and (>= (string-to-number org-version) 9.3) +;; (eq org-download-method 'attach)) +;; (format "[[attachment:%s]]\n" +;; (org-link-escape +;; (file-relative-name filename (org-attach-dir)))) +;; (format org-download-markdown-link-format +;; (org-link-escape +;; (funcall org-download-abbreviate-filename-function filename))))) -(defun org-download-markdown-image (link) - "Save image at address LINK to `org-download--dir'." - (interactive "sUrl: ") - (let* ((link-and-ext (org-download--parse-link link)) - (filename - (cond ((and (derived-mode-p 'org-mode) - (eq org-download-method 'attach)) - (let ((org-download-image-dir (org-attach-dir t)) - org-download-heading-lvl) - (apply #'org-download--fullname link-and-ext))) - ((fboundp org-download-method) - (funcall org-download-method link)) - (t - (apply #'org-download--fullname link-and-ext))))) - (setq org-download-path-last-file filename) - (org-download--image link filename) - (when (org-download-org-mode-p) - (when (eq org-download-method 'attach) - (org-attach-attach filename nil 'none)) - (org-download-markdown-insert-link link filename)) - (when (and (eq org-download-delete-image-after-download t) - (not (url-handler-file-remote-p (current-kill 0)))) - (delete-file link delete-by-moving-to-trash)))) +;; (defun org-download-markdown-image (link) +;; "Save image at address LINK to `org-download--dir'." +;; (interactive "sUrl: ") +;; (let* ((link-and-ext (org-download--parse-link link)) +;; (filename +;; (cond ((and (derived-mode-p 'org-mode) +;; (eq org-download-method 'attach)) +;; (let ((org-download-image-dir (org-attach-dir t)) +;; org-download-heading-lvl) +;; (apply #'org-download--fullname link-and-ext))) +;; ((fboundp org-download-method) +;; (funcall org-download-method link)) +;; (t +;; (apply #'org-download--fullname link-and-ext))))) +;; (setq org-download-path-last-file filename) +;; (org-download--image link filename) +;; (when (org-download-org-mode-p) +;; (when (eq org-download-method 'attach) +;; (org-attach-attach filename nil 'none)) +;; (org-download-markdown-insert-link link filename)) +;; (when (and (eq org-download-delete-image-after-download t) +;; (not (url-handler-file-remote-p (current-kill 0)))) +;; (delete-file link delete-by-moving-to-trash)))) -(defun org-download-markdown-screenshot (&optional basename) - "Capture screenshot and insert the resulting file. - The screenshot tool is determined by `org-download-screenshot-method'." - (interactive) - (let* ((screenshot-dir (file-name-directory org-download-screenshot-file)) - (org-download-screenshot-file - (if basename - (concat screenshot-dir basename) org-download-screenshot-file))) - (make-directory screenshot-dir t) - (if (functionp org-download-screenshot-method) - (funcall org-download-screenshot-method - org-download-screenshot-file) - (shell-command-to-string - (format org-download-screenshot-method - org-download-screenshot-file))) - (when (file-exists-p org-download-screenshot-file) - (org-download-markdown-image org-download-screenshot-file) - (delete-file org-download-screenshot-file)))) +;; (defun org-download-markdown-screenshot (&optional basename) +;; "Capture screenshot and insert the resulting file. +;; The screenshot tool is determined by `org-download-screenshot-method'." +;; (interactive) +;; (let* ((screenshot-dir (file-name-directory org-download-screenshot-file)) +;; (org-download-screenshot-file +;; (if basename +;; (concat screenshot-dir basename) org-download-screenshot-file))) +;; (make-directory screenshot-dir t) +;; (if (functionp org-download-screenshot-method) +;; (funcall org-download-screenshot-method +;; org-download-screenshot-file) +;; (shell-command-to-string +;; (format org-download-screenshot-method +;; org-download-screenshot-file))) +;; (when (file-exists-p org-download-screenshot-file) +;; (org-download-markdown-image org-download-screenshot-file) +;; (delete-file org-download-screenshot-file)))) -(defun org-download-markdown-insert-link (link filename) - (let* ((beg (point)) - (line-beg (line-beginning-position)) - (indent (- beg line-beg)) - (in-item-p (org-in-item-p)) - str) - (if (looking-back "^[ \t]+" line-beg) - (delete-region (match-beginning 0) (match-end 0)) - (newline)) - (insert (funcall org-download-annotate-function link)) - (dolist (attr org-download-image-attr-list) - (insert attr "\n")) - (insert (if (= org-download-image-html-width 0) - "" - (format "#+attr_html: :width %dpx\n" org-download-image-html-width))) - (insert (if (= org-download-image-latex-width 0) - "" - (format "#+attr_latex: :width %dcm\n" org-download-image-latex-width))) - (insert (if (= org-download-image-org-width 0) - "" - (format "#+attr_org: :width %dpx\n" org-download-image-org-width))) - (insert (funcall org-download-markdown-link-format-function filename)) - (org-download--display-inline-images) - (setq str (buffer-substring-no-properties line-beg (point))) - (when in-item-p - (indent-region line-beg (point) indent)) - str)) +;; (defun org-download-markdown-insert-link (link filename) +;; (let* ((beg (point)) +;; (line-beg (line-beginning-position)) +;; (indent (- beg line-beg)) +;; (in-item-p (org-in-item-p)) +;; str) +;; (if (looking-back "^[ \t]+" line-beg) +;; (delete-region (match-beginning 0) (match-end 0)) +;; (newline)) +;; (insert (funcall org-download-annotate-function link)) +;; (dolist (attr org-download-image-attr-list) +;; (insert attr "\n")) +;; (insert (if (= org-download-image-html-width 0) +;; "" +;; (format "#+attr_html: :width %dpx\n" org-download-image-html-width))) +;; (insert (if (= org-download-image-latex-width 0) +;; "" +;; (format "#+attr_latex: :width %dcm\n" org-download-image-latex-width))) +;; (insert (if (= org-download-image-org-width 0) +;; "" +;; (format "#+attr_org: :width %dpx\n" org-download-image-org-width))) +;; (insert (funcall org-download-markdown-link-format-function filename)) +;; (org-download--display-inline-images) +;; (setq str (buffer-substring-no-properties line-beg (point))) +;; (when in-item-p +;; (indent-region line-beg (point) indent)) +;; str)) -(defun markdown-download-screenshot () - (interactive) - (org-mode) - (org-download-markdown-screenshot) - (markdown-mode)) +;; (defun markdown-download-screenshot () +;; (interactive) +;; (org-mode) +;; (org-download-markdown-screenshot) +;; (markdown-mode)) -(add-hook 'markdown-mode-hook (lambda () (org-display-inline-images))) +;;(add-hook 'markdown-mode-hook (lambda () (org-display-inline-images))) (use-package olivetti :init @@ -1100,12 +1107,14 @@ (use-package highlight-parentheses :config - (setq highlight-parentheses-colors nil) + (setq highlight-parentheses-colors '("black" "white" "black" "black" "black" "black" "black")) (setq highlight-parentheses-background-colors '("magenta" "blue" "cyan" "green" "yellow" "orange" "red")) (global-highlight-parentheses-mode t)) (electric-pair-mode 1) (setq electric-pair-preserve-balance nil) +;; don't try to be overly smart +(setq electric-pair-delete-adjacent-pairs nil) ;; don't skip newline when auto-pairing parenthesis (setq electric-pair-skip-whitespace-chars '(9 32)) @@ -1141,7 +1150,7 @@ (corfu-cycle t) (corfu-quit-no-match 'separator) (corfu-separator ?\s) - (corfu-quit-no-match t) + ;; (corfu-quit-no-match t) (corfu-popupinfo-max-height 70) (corfu-popupinfo-delay '(0.5 . 0.2)) ;; (corfu-preview-current 'insert) ; insert previewed candidate @@ -1151,19 +1160,28 @@ :bind (:map corfu-map ("M-SPC" . corfu-insert-separator) ("" . swarsel/corfu-normal-return) + ;; ("C-" . swarsel/corfu-complete) ("S-" . corfu-popupinfo-scroll-down) ("S-" . corfu-popupinfo-scroll-up) ("C-" . corfu-previous) ("C-" . corfu-next) ("" . swarsel/corfu-quit-and-up) - ("" . swarsel/corfu-quit-and-down)) + ("" . swarsel/corfu-quit-and-down)) ) + ;; dont disrupt file navigation with completions (defun swarsel/corfu-normal-return (&optional arg) (interactive) - (corfu-complete) - (corfu-quit)) + (corfu-quit) + (newline) + ) + + ;; (defun swarsel/corfu-complete (&optional arg) + ;; (interactive) + ;; (corfu-complete) + ;; (newline) + ;; ) (defun swarsel/corfu-quit-and-up (&optional arg) (interactive) @@ -1213,15 +1231,15 @@ (add-to-list 'completion-at-point-functions #'cape-dabbrev) (add-to-list 'completion-at-point-functions #'cape-file) (add-to-list 'completion-at-point-functions #'cape-elisp-block) - ;;(add-to-list 'completion-at-point-functions #'cape-history) - ;;(add-to-list 'completion-at-point-functions #'cape-keyword) - ;;(add-to-list 'completion-at-point-functions #'cape-tex) - ;;(add-to-list 'completion-at-point-functions #'cape-sgml) - ;;(add-to-list 'completion-at-point-functions #'cape-rfc1345) - ;;(add-to-list 'completion-at-point-functions #'cape-abbrev) - ;;(add-to-list 'completion-at-point-functions #'cape-dict) - ;;(add-to-list 'completion-at-point-functions #'cape-elisp-symbol) - ;;(add-to-list 'completion-at-point-functions #'cape-line) + ;; (add-to-list 'completion-at-point-functions #'cape-history) + ;; (add-to-list 'completion-at-point-functions #'cape-keyword) + ;; (add-to-list 'completion-at-point-functions #'cape-tex) + ;; (add-to-list 'completion-at-point-functions #'cape-sgml) + ;; (add-to-list 'completion-at-point-functions #'cape-rfc1345) + ;; (add-to-list 'completion-at-point-functions #'cape-abbrev) + ;; (add-to-list 'completion-at-point-functions #'cape-dict) + (add-to-list 'completion-at-point-functions #'cape-elisp-symbol) + ;; (add-to-list 'completion-at-point-functions #'cape-line) ) ;; (use-package rustic @@ -1628,91 +1646,91 @@ (use-package ein) -(use-package obsidian - :ensure t - :demand t - :config - (obsidian-specify-path swarsel-obsidian-vault-directory) - (global-obsidian-mode t) - :custom - ;; This directory will be used for `obsidian-capture' if set. - (obsidian-inbox-directory "Inbox") - (bind-key (kbd "C-c M-o") 'obsidian-hydra/body 'obsidian-mode-map) - :bind (:map obsidian-mode-map - ;; Replace C-c C-o with Obsidian.el's implementation. It's ok to use another key binding. - ("C-c C-o" . obsidian-follow-link-at-point) - ;; Jump to backlinks - ("C-c C-b" . obsidian-backlink-jump) - ;; If you prefer you can use `obsidian-insert-link' - ("C-c C-l" . obsidian-insert-wikilink))) +;; (use-package obsidian +;; :ensure t +;; :demand t +;; :config +;; (obsidian-specify-path swarsel-obsidian-vault-directory) +;; (global-obsidian-mode t) +;; :custom +;; ;; This directory will be used for `obsidian-capture' if set. +;; (obsidian-inbox-directory "Inbox") +;; (bind-key (kbd "C-c M-o") 'obsidian-hydra/body 'obsidian-mode-map) +;; :bind (:map obsidian-mode-map +;; ;; Replace C-c C-o with Obsidian.el's implementation. It's ok to use another key binding. +;; ("C-c C-o" . obsidian-follow-link-at-point) +;; ;; Jump to backlinks +;; ("C-c C-b" . obsidian-backlink-jump) +;; ;; If you prefer you can use `obsidian-insert-link' +;; ("C-c C-l" . obsidian-insert-wikilink))) -(use-package anki-editor - :after org - :bind (:map org-mode-map - ("" . anki-editor-cloze-region-auto-incr) - ("" . anki-editor-cloze-region-dont-incr) - ("" . anki-editor-reset-cloze-number) - ("" . anki-editor-push-tree)) - :hook (org-capture-after-finalize . anki-editor-reset-cloze-number) ; Reset cloze-number after each capture. - :config - (setq anki-editor-create-decks t ;; Allow anki-editor to create a new deck if it doesn't exist - anki-editor-org-tags-as-anki-tags t) +;; (use-package anki-editor +;; :after org +;; :bind (:map org-mode-map +;; ("" . anki-editor-cloze-region-auto-incr) +;; ("" . anki-editor-cloze-region-dont-incr) +;; ("" . anki-editor-reset-cloze-number) +;; ("" . anki-editor-push-tree)) +;; :hook (org-capture-after-finalize . anki-editor-reset-cloze-number) ; Reset cloze-number after each capture. +;; :config +;; (setq anki-editor-create-decks t ;; Allow anki-editor to create a new deck if it doesn't exist +;; anki-editor-org-tags-as-anki-tags t) - (defun anki-editor-cloze-region-auto-incr (&optional arg) - "Cloze region without hint and increase card number." - (interactive) - (anki-editor-cloze-region swarsel-anki-editor-cloze-number "") - (setq swarsel-anki-editor-cloze-number (1+ swarsel-anki-editor-cloze-number)) - (forward-sexp)) - (defun anki-editor-cloze-region-dont-incr (&optional arg) - "Cloze region without hint using the previous card number." - (interactive) - (anki-editor-cloze-region (1- swarsel-anki-editor-cloze-number) "") - (forward-sexp)) - (defun anki-editor-reset-cloze-number (&optional arg) - "Reset cloze number to ARG or 1" - (interactive) - (setq swarsel-anki-editor-cloze-number (or arg 1))) - (defun anki-editor-push-tree () - "Push all notes under a tree." - (interactive) - (anki-editor-push-notes '(4)) - (anki-editor-reset-cloze-number)) - ;; Initialize - (anki-editor-reset-cloze-number) - ) +;; (defun anki-editor-cloze-region-auto-incr (&optional arg) +;; "Cloze region without hint and increase card number." +;; (interactive) +;; (anki-editor-cloze-region swarsel-anki-editor-cloze-number "") +;; (setq swarsel-anki-editor-cloze-number (1+ swarsel-anki-editor-cloze-number)) +;; (forward-sexp)) +;; (defun anki-editor-cloze-region-dont-incr (&optional arg) +;; "Cloze region without hint using the previous card number." +;; (interactive) +;; (anki-editor-cloze-region (1- swarsel-anki-editor-cloze-number) "") +;; (forward-sexp)) +;; (defun anki-editor-reset-cloze-number (&optional arg) +;; "Reset cloze number to ARG or 1" +;; (interactive) +;; (setq swarsel-anki-editor-cloze-number (or arg 1))) +;; (defun anki-editor-push-tree () +;; "Push all notes under a tree." +;; (interactive) +;; (anki-editor-push-notes '(4)) +;; (anki-editor-reset-cloze-number)) +;; ;; Initialize +;; (anki-editor-reset-cloze-number) +;; ) -(require 'anki-editor) +;; (require 'anki-editor) -(defvar swarsel-anki-deck nil) -(defvar swarsel-anki-notetype nil) -(defvar swarsel-anki-fields nil) +;; (defvar swarsel-anki-deck nil) +;; (defvar swarsel-anki-notetype nil) +;; (defvar swarsel-anki-fields nil) -(defun swarsel-anki-set-deck-and-notetype () - (interactive) - (setq swarsel-anki-deck (completing-read "Choose a deck: " - (sort (anki-editor-deck-names) #'string-lessp))) - (setq swarsel-anki-notetype (completing-read "Choose a note type: " - (sort (anki-editor-note-types) #'string-lessp))) - (setq swarsel-anki-fields (progn - (anki-editor--anki-connect-invoke-result "modelFieldNames" `((modelName . ,swarsel-anki-notetype))))) - ) +;; (defun swarsel-anki-set-deck-and-notetype () +;; (interactive) +;; (setq swarsel-anki-deck (completing-read "Choose a deck: " +;; (sort (anki-editor-deck-names) #'string-lessp))) +;; (setq swarsel-anki-notetype (completing-read "Choose a note type: " +;; (sort (anki-editor-note-types) #'string-lessp))) +;; (setq swarsel-anki-fields (progn +;; (anki-editor--anki-connect-invoke-result "modelFieldNames" `((modelName . ,swarsel-anki-notetype))))) +;; ) -(defun swarsel-anki-make-template-string () - (if (not swarsel-anki-deck) - (call-interactively 'swarsel-anki-set-deck-and-notetype)) - (setq swarsel-temp swarsel-anki-fields) - (concat (concat "* %<%H:%M>\n:PROPERTIES:\n:ANKI_NOTE_TYPE: " swarsel-anki-notetype "\n:ANKI_DECK: " swarsel-anki-deck "\n:END:\n** ")(pop swarsel-temp) "\n%?\n** " (mapconcat 'identity swarsel-temp "\n\n** ") "\n\n")) +;; (defun swarsel-anki-make-template-string () +;; (if (not swarsel-anki-deck) +;; (call-interactively 'swarsel-anki-set-deck-and-notetype)) +;; (setq swarsel-temp swarsel-anki-fields) +;; (concat (concat "* %<%H:%M>\n:PROPERTIES:\n:ANKI_NOTE_TYPE: " swarsel-anki-notetype "\n:ANKI_DECK: " swarsel-anki-deck "\n:END:\n** ")(pop swarsel-temp) "\n%?\n** " (mapconcat 'identity swarsel-temp "\n\n** ") "\n\n")) -(defun swarsel-today() - (format-time-string "%Y-%m-%d")) +;; (defun swarsel-today() +;; (format-time-string "%Y-%m-%d")) -(defun swarsel-obsidian-daily () - (interactive) - (if (not (file-exists-p (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory))) - (write-region "" nil (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory)) - ) - (find-file (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory))) +;; (defun swarsel-obsidian-daily () +;; (interactive) +;; (if (not (file-exists-p (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory))) +;; (write-region "" nil (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory)) +;; ) +;; (find-file (expand-file-name (concat (swarsel-today) ".md") swarsel-obsidian-daily-directory))) (let ((mu4epath (concat @@ -1871,4 +1889,5 @@ ))) (setq dashboard-projects-switch-function 'counsel-projectile-switch-project-by-name) +(setq gc-cons-threshold (* 800 1000 )) (fset 'epg-wait-for-status 'ignore)