From 605c4f0e5efb6c1c6363cba750b50cec2bc27096 Mon Sep 17 00:00:00 2001 From: Phil Bajsicki Date: Thu, 6 Jun 2024 01:26:00 +0200 Subject: [PATCH] hey --- .config/doom/README.el | 3 +- .config/doom/README.org | 603 ++++++++++++++---- .config/doom/config.el | 437 ++++++++++--- .config/doom/custom.el | 16 - .config/doom/init.el | 8 +- .config/doom/packages.el | 19 +- .config/dunst/dunstrc | 12 +- .config/fish/README.org | 5 +- .config/fish/config.fish | 5 +- .config/fish/fish_variables | 15 +- .config/hypr/hyprland.conf | 40 +- .config/xmobar/tomorrow-night-xmobarrc | 8 +- .../xmobar/tomorrow-night-xmobarrc-no-trayer | 67 ++ .config/xmobar/xmobarrc-no-trayer | 1 + .config/xmonad/README.org | 17 +- .config/xmonad/xmonad.hs | 7 +- .scripts/.runsway.sh | 4 +- 17 files changed, 999 insertions(+), 268 deletions(-) delete mode 100644 .config/doom/custom.el create mode 100644 .config/xmobar/tomorrow-night-xmobarrc-no-trayer create mode 120000 .config/xmobar/xmobarrc-no-trayer diff --git a/.config/doom/README.el b/.config/doom/README.el index 292cbc3..8b13789 100644 --- a/.config/doom/README.el +++ b/.config/doom/README.el @@ -1,2 +1 @@ -(after! flyspell - (setq flyspell-lazy-idle-seconds 2)) + diff --git a/.config/doom/README.org b/.config/doom/README.org index b5d2066..52dd942 100644 --- a/.config/doom/README.org +++ b/.config/doom/README.org @@ -1,4 +1,4 @@ -#+title: Phil's Doom Emacs Config +#+Title: Phil's Doom Emacs Config #+STARTUP: indent * Intro @@ -66,14 +66,26 @@ This command only sets up the path to your java runtime binary. #+end_src **** Fonts #+begin_src emacs-lisp :tangle config.el -(setq doom-themes-enable-bold t - doom-themes-enable-italic t) + (setq doom-themes-enable-bold t + doom-themes-enable-italic t + doom-font (font-spec :family "Iosevka" :size 14) + doom-big-font (font-spec :family "Iosevka" :size 16) + ;; doom-variable-pitch-font (font-spec :family "Iosevka" :size 14) + doom-unicode-font (font-spec :family "Iosevka")) + ;; doom-serif-font (font-spec :family "IBM Plex Mono" :size 10 :weight 'light)) + +;; (set-face-attribute 'default nil :family "Iosevka") +;; (set-face-attribute 'variable-pitch nil :family "Iosevka Aile") +;; (set-face-attribute 'org-modern-symbol nil :family "Iosevka") #+end_src #+RESULTS: +: # + + **** Font Family List This is a simple command that outputs the fonts you have available in Emacs. -#+begin_src emacs-lisp :results value format: pp +#+begin_src emacs-lisp :results value format: pp :tangle no (print (font-family-list)) #+end_src @@ -117,7 +129,7 @@ This is a simple command that outputs the fonts you have available in Emacs. (setq column-number-mode t) #+end_src *** set start of week to Monday (not sunday) http://sunsite.univie.ac.at/textbooks/emacs/emacs_33.html -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle config.el (setq-default calendar-week-start-day 1) #+END_SRC @@ -134,6 +146,17 @@ Setting this here because I experiment with these occasionally and want them res #+begin_src emacs-lisp :tangle config.el (setq straight-repository-branch "develop") #+end_src +*** [disabled] copilot.el +#+begin_src emacs-lisp :tangle no +;; accept completion from copilot and fallback to company +(use-package! copilot + :hook (prog-mode . copilot-mode) + :bind (:map copilot-completion-map + ("" . 'copilot-accept-completion) + ("TAB" . 'copilot-accept-completion) + ("C-TAB" . 'copilot-accept-completion-by-word) + ("C-" . 'copilot-accept-completion-by-word))) +#+end_src *** pdf-tools #+begin_src emacs-lisp :tangle config.el (use-package! pdf-tools @@ -165,6 +188,7 @@ Setting this here because I experiment with these occasionally and want them res If you use `org' and don't want your org files in the default location below, change `org-directory'. It must be set before org loads! Make .org file automatically open in org-mode. **** org + ***** Basic settings #+begin_src emacs-lisp :tangle config.el (add-to-list 'auto-mode-alist @@ -172,24 +196,21 @@ Make .org file automatically open in org-mode. (setq org-image-actual-width nil) (setq org-enforce-todo-dependencies t) -(setq org-insert-heading-respect-content nil) (setq org-reverse-note-order nil) -(setq org-show-following-heading t) -(setq org-show-hierarchy-above t) (setq org-deadline-warning-days 7) (setq org-blank-before-new-entry (quote ((heading . t) (plain-list-item . nil)))) +(setq org-num-mode t) (setq org-todo-repeat-to-state "LOOP") (setq org-remove-highlights-with-change nil) -(setq org-read-date-prefer-future nil) +(setq org-read-date-prefer-future t) (setq org-special-ctrl-a/e t) (setq org-special-ctrl-k t) (setq org-yank-adjusted-subtrees t) -(setq org-M-RET-may-split-line t) +(setq org-M-RET-may-split-line (quote (default . t))) (setq org-log-done (quote time)) (setq org-log-into-drawer t) (setq org-catch-invisible-edits "smart") -(setq org-completion-use-ido t) (setq org-use-property-inheritance nil) (setq org-duration-format 'h:mm) (setq org-hierarchical-todo-statistics t) @@ -197,7 +218,6 @@ Make .org file automatically open in org-mode. #+RESULTS: : t - ***** my-org-tree-to-indirect-buffer #+begin_quote This beautiful piece of code was done by [[https://www.reddit.com/user/github-alphapapa][alphapapa]] and published on @@ -250,7 +270,7 @@ Lucky me, I found the ready-to-use solution [[https://emacs.stackexchange.com/a/ #+end_quote --Karl Voit -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle no (defun my-org-retrieve-url-from-point () (interactive) (let* ((link-info (assoc :link (org-context))) @@ -265,7 +285,7 @@ Lucky me, I found the ready-to-use solution [[https://emacs.stackexchange.com/a/ (kill-new text)))) #+END_SRC -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle no (global-set-key (kbd "C-c o") 'my-org-retrieve-url-from-point) #+END_SRC ***** org-element cache verification @@ -297,20 +317,30 @@ https://www.emacswiki.org/emacs/TruncateLines =M-x toggle-truncate-lines= (setq org-src-fontify-natively t) (setq org-hide-leading-stars t) -;;disabled;(setq org-agenda-dim-blocked-tasks t) -;;disabled 2020-07-07;; (setq org-agenda-dim-blocked-tasks 'invisible) -(setq org-agenda-dim-blocked-tasks nil);; show blocked tasks + #+END_SRC ****** Set the width of inline images: -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle config.el (setq org-image-actual-width '(600)) #+END_SRC ****** org-modern #+begin_src emacs-lisp :tangle config.el +(package-initialize) +(menu-bar-mode -1) +(tool-bar-mode -1) +(scroll-bar-mode -1) +;; (modus-themes-load-operandi) + +;; Choose some fonts +;; (set-face-attribute 'default nil :family "Iosevka") +;; (set-face-attribute 'variable-pitch nil :family "Iosevka Aile") +;; (set-face-attribute 'org-modern-symbol nil :family "Iosevka") + +;; Add frame borders and window dividers (modify-all-frames-parameters - '((right-divider-width . 2) + '((right-divider-width . 0) (internal-border-width . 0))) (dolist (face '(window-divider window-divider-first-pixel @@ -324,12 +354,12 @@ https://www.emacswiki.org/emacs/TruncateLines =M-x toggle-truncate-lines= org-auto-align-tags nil org-tags-column 0 org-catch-invisible-edits 'show-and-error + org-special-ctrl-a/e t org-insert-heading-respect-content t ;; Org styling, hide markup etc. org-hide-emphasis-markers t org-pretty-entities t - org-ellipsis "…" ;; Agenda styling org-agenda-tags-column 0 @@ -339,17 +369,83 @@ https://www.emacswiki.org/emacs/TruncateLines =M-x toggle-truncate-lines= (800 1000 1200 1400 1600 1800 2000) " ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄") org-agenda-current-time-string - "⌚ now ─────────────────────────────────────────────────") + "◀── now ─────────────────────────────────────────────────") + +;; Ellipsis styling +;; (setq org-ellipsis "…") +;; (set-face-attribute 'org-ellipsis nil :inherit 'default :box nil) (global-org-modern-mode) #+end_src +#+RESULTS: +: t +****** Directory to org + +#+begin_src elisp :tangle config.el +(defun my-dir-to-org (dir org-file) + "Create a file ORG-FILE which has all txt files in DIR as linked headlines +and the contents of the files below the headlines." + (interactive "DDirectory to convert: \nFFilename: ") + (let ((files (directory-files + dir t ".*\\.txt\\'"))) + (with-temp-file org-file + (dolist (file files) + (insert (concat "* " (file-name-nondirectory file) "\n\n")) + (insert-file-contents file) + (goto-char (point-max)) + (insert "\n"))))) + +(defun my-dir-to-org-with-links (dir org-file) + "Create a file ORG-FILE which has all txt files in DIR as linked headlines +and the contents of the files below the headlines." + (interactive "DDirectory to convert: \nFFilename: ") + (let ((files (directory-files + dir t ".*\\.txt\\'"))) + (with-temp-file org-file + (dolist (file files) + (insert (concat "* " "[[" file "][" (file-name-nondirectory file) "]]\n\n")) + (insert-file-contents file) + (goto-char (point-max)) + (insert "\n"))))) + + +(defun my-mass-conversion (source-dir target-dir) + "Create one org file per directory of SOURCE-DIR inside TARGET-DIR." + (interactive "DDirectory to convert: \nDTarget Directory:") + (let ((dirs-full + (remove-if-not #'file-directory-p + (directory-files + source-dir t + directory-files-no-dot-files-regexp)))) + + (mapc (lambda (dir) + (my-dir-to-org dir + (concat target-dir + (file-name-base dir) ".org"))) + dirs-full))) + + +#+end_src + +#+RESULTS: +: my-mass-conversion + ***** Dependencies #+begin_src emacs-lisp :tangle config.el (setq-default org-enforce-todo-dependencies t) (setq org-enforce-todo-checkbox-dependencies t) #+END_SRC +***** org-auto-tangle +#+begin_src emacs-lisp :tangle config.el +(require 'org-auto-tangle) +(add-hook 'org-mode-hook 'org-auto-tangle-mode) +#+end_src +***** auto-tangle-mode +#+begin_src emacs-lisp :tangle yes + +#+end_src **** Hooks ***** append and update time-stamps for =Time-stamp: <>= in headers: #+begin_src emacs-lisp :tangle config.el @@ -365,6 +461,31 @@ https://www.emacswiki.org/emacs/TruncateLines =M-x toggle-truncate-lines= ;; auto-fill mode on (auto-fill-mode 1))) #+end_src +***** expand macros inline + +#+begin_src emacs-lisp :tangle config.el + + (add-to-list 'font-lock-extra-managed-props 'display) + +(font-lock-add-keywords + 'org-mode + '(("\\({{{[a-zA-Z#%)(_-+0-9]+}}}\\)" 0 + `(face nil display + ,(format "%s" + (let* ((input-str (match-string 0)) + (el (with-temp-buffer + (insert input-str) + (goto-char (point-min)) + (org-element-context))) + (text (org-macro-expand el org-macro-templates))) + (if text + text + input-str))))))) + + #+end_src + + #+RESULTS: + **** Keybinds #+begin_src emacs-lisp :tangle config.el @@ -382,25 +503,53 @@ Inserts timestamps in the proper format. ~'(16)~ stands for two universal argume (org-time-stamp-inactive '(16)))) #+end_src +***** Automated timestamps in headings +I need this because hitting the above is tedious. + +For the files whose paths match the strings in the function, it will advise the org-insert-heading function to insert an inactive timestamp into the new heading. + +This turns making new entries from ~C- C-i i~ into just ~C-~. Much easier, and I don't have to think about this any more. + +#+begin_src emacs-lisp :tangle config.el +(add-hook 'org-insert-heading-hook + (lambda () + (if + (or + (string-match-p "journal.org" buffer-file-name) + (string-match-p "money" buffer-file-name) + (string-match-p "therapy.org" buffer-file-name)) + ((lambda () + (interactive) + (org-time-stamp-inactive '(16)) + (newline))) + (setq org-insert-heading-hook nil) + ))) + +#+end_src + +#+RESULTS: +| lambda | nil | (if (or (string-match-p journal.org buffer-file-name) (string-match-p money buffer-file-name) (string-match-p therapy.org buffer-file-name)) ((lambda nil (interactive) (org-time-stamp-inactive '(16)) (newline))) (setq org-insert-heading-hook nil)) | + + **** Todo keywords #+begin_src emacs-lisp :tangle config.el (setq org-todo-keywords '((sequence - "INBOX(i)" - "TASK(t)" ; A task that needs doing & is ready to do - "PROJ(p)" ; A project, which usually contains other tasks - "LOOP(r)" ; A recurring task - "WAIT(w)" ; Something external is holding up this task - "HOLD(h)" ; This task is paused/on hold because of me + "INBOX(i!)" + "TASK(t!)" ; A task that needs doing & is ready to do + "PROJ(p!)" ; A project, which usually contains other tasks + "LOOP(r!)" ; A recurring task + "WAIT(w!)" ; Something external is holding up this task + "HOLD(h!)" ; This task is paused/on hold because of me "|" - "DONE(d)" ; Task successfully completed - "KILL(k)") ; Task was cancelled, aborted or is no longer applicable + "DONE(d!@)" ; Task successfully completed + "KILL(k!@)") ; Task was cancelled, aborted or is no longer applicable (sequence "DECIDE()" ; for making decisions "|" - "OKAY(o)" ; okay as-is - "YES(y)" ; take action - "NO(n)")) ; don't take action + "OKAY(o!)" ; okay as-is + "YES(y!)" ; take action + "NO(n!)")) ; don't take action org-todo-keyword-faces '( ("INBOX" :foreground "cyan" :weight bold) @@ -438,46 +587,17 @@ Change font for DONE tasks -**** Automated timestamps in headings -I need this because hitting the above is tedious. - -For the files whose paths match the strings in the function, it will advise the org-insert-heading function to insert an inactive timestamp into the new heading. - -This turns making new entries from ~C- C-i i~ into just ~C-~. Much easier, and I don't have to think about this any more. - -#+begin_src emacs-lisp :tangle config.el -(add-hook 'org-insert-heading-hook - (lambda () - (if - (or - (string-match "journal.org" buffer-file-name) - (string-match "money" buffer-file-name) - (string-match "therapy.org" buffer-file-name)) - ((lambda () - (interactive) - (org-time-stamp-inactive '(16)) - (newline))) - (setq org-insert-heading-hook nil) - ))) - -#+end_src - -#+RESULTS: -| lambda | nil | (if (or (string-match journal buffer-file-name) (string-match money buffer-file-name) (string-match therapy buffer-file-name)) ((lambda nil (interactive) (org-timestamp-inactive '(16)) (newline))) (setq 'org-insert-heading-hook nil)) | -| lambda | nil | (if (or (string-match journal buffer-file-name) (string-match money buffer-file-name) (string-match therapy buffer-file-name)) (progn (org-timestamp-inactive '(16)) (newline)) (progn (signal 'wrong-type-argument (list 'symbolp ''org-insert-heading-hook)))) | - - **** Capture templates #+begin_src emacs-lisp :tangle config.el -(setq org-capture-templates '(("t" "inbox" entry (file+headline "~/enc/org/phil.org" "Inbox") "* TODO %i%?") - ("i" "idea" entry (file+headline "~/enc/org/phil.org" "Ideas") "* %?") - ("d" "reminder" entry (file+headline "~/enc/org/phil.org" "Reminders") "* %i%? \n %U") - ("p" "person" entry (file+headline "~/enc/org/people.org" "People") +(setq org-capture-templates '(("t" "inbox" entry (file+headline "~/enc/org/agenda.org" "Inbox") "* %i%?") + ("i" "idea" entry (file+headline "~/enc/org/agenda.org" "Ideas") "* %?") + ("d" "reminder" entry (file+headline "~/enc/org/agenda.org" "Reminders") "* %i%? \n %U") + ("p" "person" entry (file+headline "~/enc/org/people.org" "Sort") "* %(org-contacts-template-name) :PROPERTIES: :EMAIL: %(org-contacts-template-email) -:PHONE: %(org-contacts-template-phone) +:PHONE: :ALIAS: :NICKNAME: :IGNORE: @@ -488,6 +608,11 @@ This turns making new entries from ~C- C-i i~ into just ~C-~. Mu :END:"))) #+end_src +#+RESULTS: +| t | inbox | entry | (file+headline ~/enc/org/agenda.org Inbox) | * %i%? | +| i | idea | entry | (file+headline ~/enc/org/agenda.org Ideas) | * %? | +| d | reminder | entry | (file+headline ~/enc/org/agenda.org Reminders) | * %i%? | + **** preserving all heading levels when archiving Karl Voit: @@ -496,7 +621,7 @@ Karl Voit: Preserve the hierarchy when archiving: [[https://fuco1.github.io/2017-04-20-Archive-subtrees-under-the-same-hierarchy-as-original-in-the-archive-files.html][blog article]], [[https://gist.github.com/Fuco1/e86fb5e0a5bb71ceafccedb5ca22fcfb][source code (GitHub gist)]] #+end_quote -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle config.el (setq org-archive-default-command #'org-archive-subtree-hierarchically) (defun org-archive-subtree-hierarchically (&optional prefix) @@ -563,7 +688,7 @@ This results in a list that gets added to the Org-mode buffer similar to: #+end_quote -#+begin_src emacs-lisp :results none +#+begin_src emacs-lisp :results none :tangle no (defun my-dired-insert-lfile-link-list-to-other-org-window (files) ;; adapted by Karl Voit from https://emacs.stackexchange.com/a/60369 (interactive @@ -603,7 +728,7 @@ This results in a list that gets added to the Org-mode buffer similar to: #+end_quote -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle config.el (setq my-linkcolor-org "wheat3") (setq my-linkcolor-file "MediumSeaGreen") (setq my-linkcolor-web "DeepSkyBlue") @@ -715,20 +840,71 @@ This results in a list that gets added to the Org-mode buffer similar to: - Org links had: snow3 - File links: DarkSeaGreen, wheat2 - Web links: DeepSkyBlue +*** org-edna +https://www.nongnu.org/org-edna-el/ +#+begin_src emacs-lisp :tangle config.el -** org-transclusion + +#+end_src +*** mu4e +#+begin_src elisp :tangle config.el +(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e/") + +(setq mu4e-change-filenames-when-moving t) +(setq mu4e-update-interval (* 10 60)) +(setq mu4e-get-mail-command "mbsync -a") +(setq mu4e-maildir "~/enc/.mail") + +(setq mu4e-drafts-folder "/Drafts") +(setq mu4e-sent-folder "/Sent") +(setq mu4e-refile-folder "/Refile") +(setq mu4e-trash-folder "/Trash") + +(mu4e t) + +#+end_src + +#+RESULTS: + + +*** sly + +#+begin_src emacs-lisp :tangle config.el +;; (load (expand-file-name "~/.roswell/helper.el")) + +(setq inferior-lisp-program "sbcl --dynamic-space-size 8192 -Q -l ~/.sbclrc") +#+end_src + +#+RESULTS: +: sbcl --dynamic-space-size 8192 -Q -l ~/.sbclrc + +*** multiple-cursors +#+begin_src emacs-lisp :tangle config.el +(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines) +(global-set-key (kbd "C->") 'mc/mark-next-like-this) +(global-set-key (kbd "C-<") 'mc/mark-previous-like-this) +(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this) +#+end_src + +#+RESULTS: +: mc/mark-all-like-this + +*** org-transclusion #+begin_src emacs-lisp :tangle config.el (use-package! org-transclusion :after org :init (map! - :map global-map "" #'org-transclusion-add + :map global-map "" #'org-transclusion-add :leader :prefix "n" :desc "Org Transclusion Mode" "t" #'org-transclusion-mode)) #+end_src -** org-babel +#+RESULTS: +: org-transclusion + +*** org-babel #+begin_src emacs-lisp :tangle config.el (add-hook 'org-babel-after-execute-hook 'org-display-inline-images) #+end_src @@ -741,7 +917,7 @@ When some code generates an image file, display it in the results: (add-hook 'org-babel-after-execute-hook 'org-display-inline-images) #+END_SRC -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle no (add-hook 'org-babel-after-execute-hook (lambda () (unless (eq this-command 'org-babel-tangle) @@ -752,21 +928,54 @@ When some code generates an image file, display it in the results: #+END_SRC -** org-export*** LaTeX +*** org-export*** LaTeX #+begin_src emacs-lisp :tangle config.el (with-eval-after-load 'ox-latex (add-to-list 'org-latex-classes - '("memoir" + '("tufte-handout" + "\\documentclass[nobib]{tufte-handout} + \\usepackage{nicefrac} + \\usepackage{units} + [NO-DEFAULT-PACKAGES] + [EXTRA]" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + '("memoir" "\\documentclass{memoir}" ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))) + +#+end_src + +#+begin_src emacs-lisp :tangle no + +(print org-latex-classes) + #+end_src #+RESULTS: +| memoir | \documentclass{memoir} | (\chapter{%s} . \chapter*{%s}) | (\section{%s} . \section*{%s}) | (\subsection{%s} . \subsection*{%s}) | (\subsubsection{%s} . \subsubsection*{%s}) | | +| article | \documentclass[11pt]{article} | (\section{%s} . \section*{%s}) | (\subsection{%s} . \subsection*{%s}) | (\subsubsection{%s} . \subsubsection*{%s}) | (\paragraph{%s} . \paragraph*{%s}) | (\subparagraph{%s} . \subparagraph*{%s}) | +| report | \documentclass[11pt]{report} | (\part{%s} . \part*{%s}) | (\chapter{%s} . \chapter*{%s}) | (\section{%s} . \section*{%s}) | (\subsection{%s} . \subsection*{%s}) | (\subsubsection{%s} . \subsubsection*{%s}) | +| book | \documentclass[11pt]{book} | (\part{%s} . \part*{%s}) | (\chapter{%s} . \chapter*{%s}) | (\section{%s} . \section*{%s}) | (\subsection{%s} . \subsection*{%s}) | (\subsubsection{%s} . \subsubsection*{%s}) | +| tufte-handout | \documentclass[nobib]{tufte-handout} | | | | | | -** org-super-links +#+begin_src + + +(setq org-latex-default-class "tufte-handout" + org-latex-pdf-process '("latexmk -pdf -bibtex-cond -f -outdir=%o %f")) +#+end_src + +#+RESULTS: +| latexmk -pdf -bibtex-cond -f -outdir=%o %f | + +*** org-super-links ***** Quick related link function #+begin_src emacs-lisp :tangle config.el @@ -800,7 +1009,7 @@ Replace org-store-link and org-insert-link with org-super-links alternatives. #+RESULTS: : org-super-links-delete-link -** org-super-agenda +*** org-super-agenda #+begin_src emacs-lisp :tangle no (org-super-agenda-mode) (setq super-agenda-groups @@ -862,22 +1071,29 @@ Replace org-store-link and org-insert-link with org-super-links alternatives. -** Org-wild-notifier +*** Org-wild-notifier This lets me get desktop notifications for TODO items. #+begin_src emacs-lisp :tangle config.el -(org-wild-notifier-mode) -(setq org-wild-notifier-alert-time '(10)) -(setq org-wild-notifier-notification-title "Emacs org-mode agenda") -(setq org-wild-notifier-keyword-whitelist '("TODO")) + (org-wild-notifier-mode) + (setq alert-default-style 'libnotify + org-wild-notifier-alert-time '(0 5 15 60) + org-wild-notifier-keyword-whitelist nil + ;; good for testing + org-wild-notifier--alert-severity 'high + alert-fade-time 50 + ) #+end_src -** org-id -*** my-id-get-or-generate +#+RESULTS: +: 50 + +*** org-id +**** my-id-get-or-generate Straight from Karl Voit's config. -#+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp :tangle no (defun my-id-get-or-generate() "Returns the ID property if set or generates and returns a new one if not set. The generated ID is stripped off potential progress indicator cookies and @@ -918,7 +1134,7 @@ Straight from Karl Voit's config. #+END_SRC -** Org-refile +*** Org-refile #+begin_src emacs-lisp :tangle config.el (setq org-refile-targets '((nil :maxlevel . 9) @@ -928,23 +1144,13 @@ Straight from Karl Voit's config. #+end_src (setq find-file-visit-truename t) -** org-contacts +*** org-contacts #+begin_src emacs-lisp :tangle config.el (setq org-contacts-files '("~/enc/org/people.org")) #+end_src -** org-roam - -*** Keybinds -#+begin_src emacs-lisp :tangle config.el -(define-prefix-command 'org-roam-map) -(global-set-key "\C-r" 'org-roam-map) -(define-key org-roam-map "o" 'org-roam-buffer-toggle) -(define-key org-roam-map "f" 'org-roam-node-find) -(define-key org-roam-map "i" 'org-roam-node-insert) -(define-key org-roam-map "n" 'org-roam-capture) -#+end_src - *** org-roam + +**** org-roam #+begin_src emacs-lisp :tangle config.el (setq org-roam-v2-ack t) (setq org-roam-completion-everywhere t) @@ -971,8 +1177,18 @@ Straight from Karl Voit's config. :unnarrowed))) #+end_src -** org-agenda -*** Keybinds +**** Keybinds +#+begin_src emacs-lisp :tangle config.el +(define-prefix-command 'org-roam-map) +(global-set-key "\C-r" 'org-roam-map) +(define-key org-roam-map "o" 'org-roam-buffer-toggle) +(define-key org-roam-map "f" 'org-roam-node-find) +(define-key org-roam-map "i" 'org-roam-node-insert) +(define-key org-roam-map "n" 'org-roam-capture) +#+end_src + +*** org-agenda +**** Keybinds #+begin_src emacs-lisp :tangle config.el (global-set-key "\C-ca" 'org-agenda) (define-prefix-command 'org-agenda-map) @@ -981,36 +1197,33 @@ Straight from Karl Voit's config. (define-key org-agenda-map "a" 'org-agenda) #+end_src -*** Settings +**** Settings #+begin_src emacs-lisp :tangle config.el (setq org-agenda-start-day nil - org-agenda-span '14 - org-agenda-dim-blocked-tasks 'invisible + org-agenda-span 'day + org-agenda-dim-blocked-tasks t org-agenda-sorting-strategy - '((agenda habit-down time-up priority-down category-keep) - (todo priority-down category-keep) - (search category-keep)) - org-deadline-warning-days 3 - org-agenda-insert-diary-extract-time t + '(time-up priority-up category-keep) + org-deadline-warning-days 4 org-log-into-drawer t + org-treat-insert-todo-heading-as-state-change t org-clock-into-drawer t org-agenda-log-mode-items '(closed clock state) - org-agenda-prefix-format "%l %i %c %s %t") + org-agenda-prefix-format '((agenda . " %l %i %c %s %t") + (todo . " %i %-12:c") + (tags . " %i $-12:c") + (search . " %i %-12:c")) + org-agenda-compact-blocks nil + org-agenda-use-tag-inheritance (quote (agenda));; agenda performance + org-agenda-block-separator "---------") -(setq org-agenda-compact-blocks t) -(setq org-agenda-use-tag-inheritance (quote (agenda)));; agenda performance -(setq org-agenda-span 1) (add-hook 'org-agenda-mode-hook '(lambda () (hl-line-mode 1))) - -(setq org-agenda-custom-commands - (quote (("x" "Phil's view" agenda "" - ((org-agenda-prefix-format " %i %-12:c %s %t ")))))) #+end_src #+RESULTS: -| x | Phil's view | agenda | | ((org-agenda-prefix-format %i %-12:c %s %t )) | +| (lambda nil (hl-line-mode 1)) | +org-habit-resize-graph-h | org-fancy-priorities-mode | -**** From Karl Voit +***** From Karl Voit Remove completed deadline tasks from the agenda view #+BEGIN_SRC emacs-lisp :tangle config.el (setq org-agenda-skip-deadline-if-done t) @@ -1060,12 +1273,18 @@ Show all agenda dates - even if they are empty Sorting order for tasks on the agenda #+BEGIN_SRC emacs-lisp :tangle config.el (setq org-agenda-sorting-strategy - (quote ((agenda habit-down time-up user-defined-up priority-down category-keep) + (quote ((agenda time-up user-defined-up priority-down category-keep) (todo priority-down category-keep) (tags priority-down category-keep) (search category-keep)))) #+END_SRC +#+RESULTS: +| agenda | time-up | user-defined-up | priority-down | category-keep | +| todo | priority-down | category-keep | | | +| tags | priority-down | category-keep | | | +| search | category-keep | | | | + Start the weekly agenda today #+BEGIN_SRC emacs-lisp :tangle config.el (setq org-agenda-start-on-weekday nil) @@ -1111,7 +1330,7 @@ Disabled 2020-01-03 because I usually see one single day only. #+END_SRC -*** Exports +**** Exports Export subtree (by default) instead of whole buffer: http://orgmode.org/manual/The-Export-Dispatcher.html @@ -1133,7 +1352,7 @@ part of the export result get broken because of a typo or similar. #+BEGIN_SRC emacs-lisp :tangle config.el (setq org-export-with-broken-links t) #+END_SRC -**** Org-Reveal - generate nice presentations out of Org-mode +***** Org-Reveal - generate nice presentations out of Org-mode https://github.com/yjwen/org-reveal #+BEGIN_QUOTE - =Reveal.js= is a tool for creating good-looking HTML presentations, authored by Hakim El Hattab. @@ -1150,7 +1369,7 @@ https://github.com/yjwen/org-reveal :config) #+END_SRC -**** my-org-copy-region-as-markdown +***** my-org-copy-region-as-markdown | 2022-05-03 | initial setup and disabled because of error | I've found this nugget on http://mbork.pl/2021-05-02_Org-mode_to_Markdown_via_the_clipboard. @@ -1184,11 +1403,45 @@ Debugging: (org-export-string-as region 'md t '(:with-toc nil)) #+END_SRC -** yasnippets +**** org-habits +#+begin_src emacs-lisp :tangle config.el +(add-to-list 'org-modules 'habit) +(setq org-habit-following-days 2 + org-habit-preceding-days 7 + org-habit-show-all-today nil + org-habit-show-habits-only-for-today t + org-habit-show-habits t) +#+end_src + +#+RESULTS: +: t + +**** org-habit-stats +#+begin_src emacs-lisp :tangle config.el +(define-key org-mode-map (kbd "C-c h") 'org-habit-stats-view-habit-at-point) +(define-key org-agenda-mode-map (kbd "H") 'org-habit-stats-view-habit-at-point-agenda) +(add-hook 'org-after-todo-state-change-hook 'org-habit-stats-update-properties) +#+end_src + +#+RESULTS: +| org-habit-stats-update-properties | + +**** org-download +this is here as a reminder of the config options, so no tangling +#+begin_src emacs-lisp :tangle no +(setq-default org-download-image-dir "~/enc/org/.attach") +;; can also set for the individual buffer +;; -*- mode: Org; org-download-image-dir: "~/Pictures/foo"; -*- + +#+end_src + + +*** yasnippets #+begin_src emacs-lisp :tangle config.el (setq doom-snippets-enable-short-helpers t) + #+end_src -** dired-open +*** dired-open #+begin_src emacs-lisp :tangle config.el (setq dired-open-extensions '(("gif" . "sxiv") ("jpg" . "sxiv") @@ -1197,18 +1450,18 @@ Debugging: ("mp4" . "mpv"))) #+end_src -** mode-icons +*** mode-icons #+begin_src emacs-lisp :tangle config.el (mode-icons-mode) (add-hook 'dired-mode-hook #'mode-icons--mode-disable) ;; with mode-icons, visiting a dir with dired takes up *lots* of CPU for =mode-icons-reset= (performance-issue) #+end_src -** csv-mode +*** csv-mode #+begin_src emacs-lisp :tangle config.el (add-to-list 'auto-mode-alist '("\\.[Cc][Ss][Vv]\\'" . csv-mode)) (autoload 'csv-mode "csv-mode" "Major mode for editing comma-separated value files." t) #+end_src -** whisper.el (S2T; speech to text) +*** whisper.el (S2T; speech to text) - https://github.com/natrys/whisper.el @@ -1231,7 +1484,7 @@ Use =whisper-run= once to start recording and a second time for start the translation process which puts the text into the buffer. This works *offline* (without cloud or network) and amazingly well for English. -#+BEGIN_SRC emacs-lisp :results none +#+BEGIN_SRC emacs-lisp :results none :tangle no (use-package whisper :load-path (lambda () (expand-file-name (concat my-user-emacs-directory "contrib/whisper.el/"))) ;; :bind ("C-H-r" . whisper-run) @@ -1244,7 +1497,7 @@ works *offline* (without cloud or network) and amazingly well for English. ) #+END_SRC -** hledger-mode +*** hledger-mode #+begin_src emacs-lisp :tangle config.el ;; To open files with .journal extension in hledger-mode (add-to-list 'auto-mode-alist '("\\.journal\\'" . hledger-mode)) @@ -1258,10 +1511,52 @@ works *offline* (without cloud or network) and amazingly well for English. (add-to-list 'company-backends 'hledger-company) #+end_src +*** gptel +#+begin_src emacs-lisp :tangle config.el +(use-package! gptel + :config + (setq! gptel-api-key "your key") + (setq! gptel-max-tokens 8192) + (setq + gptel-model "model" + gptel-backend (gptel-make-openai "llama-cpp" + :stream t + :protocol "http" + :host "localhost:5000" + :models '("model")))) +(gptel-make-openai "llama-cpp" ;Any name + :stream t ;Stream responses + :protocol "http" + :host "localhost:5000" ;Llama.cpp server location + :models '("model")) ;Any names, doesn't matter for Llama + +(setq gptel--debug t) +#+end_src + +#+RESULTS: +: t +*** erc +**** config +#+begin_src emacs-lisp :tangle config.el +;; Set our nickname & real-name as constant variables +(setq + erc-nick "phil_bb" ; Our IRC nick + erc-user-full-name "Phil B.") ; Our /whois name + +;; Define a function to connect to a server +(defun erc/libera () + (interactive) + (erc :server "irc.libera.chat" + :port "6667")) +#+end_src + +#+RESULTS: +: erc/libera + * custom.el Custom variables. Note that this file is generally set up automatically by Emacs, so I'm not exporting this block. I'm keeping the default warning commants in just for completion here. #+begin_src emacs-lisp :tangle no -(custom-set-variables +(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. @@ -1300,7 +1595,7 @@ This is the state as of <2023-08-12 Sat>. I'm sure Doom Emacs will expand/ chang ;;layout ; auie,ctsrnm is the superior home row :completion - company ; the ultimate code completion backend + (company +childframe) ; the ultimate code completion backend ;;helm ; the *other* search engine for love and life ;;ido ; the other *other* search engine... ;;ivy ; a search engine for love and life @@ -1402,7 +1697,7 @@ This is the state as of <2023-08-12 Sat>. I'm sure Doom Emacs will expand/ chang ;;crystal ; ruby at the speed of c ;;csharp ; unity, .NET, and mono shenanigans data ; config/data formats - ;;(dart +flutter) ; paint ui and not much else + (dart +flutter) ; paint ui and not much else ;;dhall ;;elixir ; erlang done right ;;elm ; care for a cup of TEA? @@ -1421,7 +1716,7 @@ This is the state as of <2023-08-12 Sat>. I'm sure Doom Emacs will expand/ chang ;;hy ; readability of scheme w/ speed of python ;;idris ; a language you can depend on json ; At least it ain't XML - ;;(java +lsp) ; the poster child for carpal tunnel syndrome + (java +lsp) ; the poster child for carpal tunnel syndrome (javascript +lsp) ; all(hope(abandon(ye(who(enter(here)))))) (julia +lsp) ; a better, faster MATLAB ;;kotlin ; a better, slicker Java(Script) @@ -1457,7 +1752,7 @@ This is the state as of <2023-08-12 Sat>. I'm sure Doom Emacs will expand/ chang (zig +lsp) ; C, but simpler :email - ;;(mu4e +org +gmail) + (mu4e +org +gmail) ;;notmuch ;;(wanderlust +gmail) @@ -1531,9 +1826,7 @@ release. You can ~unpin!~ them. Note ~(unpin! t)~ unpins all the packages and ca (unpin! pinned-package) (unpin! pinned-package another-pinned-package) (unpin! t) -#+end_#+begin_src - - #+end_src +#+end_src ** Packages: *** Core #+begin_src emacs-lisp :tangle packages.el @@ -1557,6 +1850,7 @@ release. You can ~unpin!~ them. Note ~(unpin! t)~ unpins all the packages and ca (package! battle-haxe) (package! fish-mode) (package! typescript-mode) +(package! terraform-mode) (package! wc-mode) (package! plantuml-mode) (package! csv-mode) @@ -1580,6 +1874,10 @@ release. You can ~unpin!~ them. Note ~(unpin! t)~ unpins all the packages and ca (package! org-auto-tangle) (package! ox-slack) (package! ox-tufte) +(package! ox-gemini + :recipe ( + :host sourcehut + :repo "abrahms/ox-gemini")) (package! org-special-block-extras) (package! org-transclusion) (package! org-modern) @@ -1594,9 +1892,15 @@ release. You can ~unpin!~ them. Note ~(unpin! t)~ unpins all the packages and ca (package! org-download) (package! org-cliplink) (package! org-roam) -(package! org-super-agenda) +;; (package! org-super-agenda) (package! org-wild-notifier) +(package! org-habit-stats) #+end_src +*** Yasnippet +#+begin_src emacs-lisp :tangle packages.el + +#+end_src + *** Org-depend Ensure task dependencies are met. #+begin_src emacs-lisp :tangle no @@ -1641,3 +1945,24 @@ Pretty Gantt chart for your agenda. #+begin_src emacs-lisp :tangle packages.el (package! hledger-mode) #+end_src +*** copilot.el +#+begin_src emacs-lisp :tangle no +(package! copilot + :recipe (:host github :repo "zerolfx/copilot.el" :files ("*.el" "dist"))) +#+end_src +*** elpher +#+begin_src emacs-lisp :tangle packages.el +(package! elpher) +#+end_src +*** multiple-cursors +#+begin_src emacs-lisp :tangle packages.el +(package! multiple-cursors) + +#+end_src +*** gptel +#+begin_src emacs-lisp :tangle packages.el +(package! gptel + :recipe (:host github + :repo "karthink/gptel" + :files ("*.el"))) +#+end_src diff --git a/.config/doom/config.el b/.config/doom/config.el index edc0d08..a20a447 100644 --- a/.config/doom/config.el +++ b/.config/doom/config.el @@ -24,8 +24,17 @@ (doom-themes-neotree-config) (doom-themes-org-config) -(setq doom-themes-enable-bold t - doom-themes-enable-italic t) + (setq doom-themes-enable-bold t + doom-themes-enable-italic t + doom-font (font-spec :family "Iosevka" :size 14) + doom-big-font (font-spec :family "Iosevka" :size 16) + ;; doom-variable-pitch-font (font-spec :family "Iosevka" :size 14) + doom-unicode-font (font-spec :family "Iosevka")) + ;; doom-serif-font (font-spec :family "IBM Plex Mono" :size 10 :weight 'light)) + +;; (set-face-attribute 'default nil :family "Iosevka") +;; (set-face-attribute 'variable-pitch nil :family "Iosevka Aile") +;; (set-face-attribute 'org-modern-symbol nil :family "Iosevka") (ligature-set-ligatures 't '("www")) ;; Enable traditional ligature support in eww-mode, if the @@ -58,6 +67,8 @@ (setq x-stretch-cursor t) (setq column-number-mode t) +(setq-default calendar-week-start-day 1) + (global-set-key "\C-g" 'keyboard-quit) (global-set-key "\C-cu" 'browse-url-chrome) @@ -82,24 +93,21 @@ (setq org-image-actual-width nil) (setq org-enforce-todo-dependencies t) -(setq org-insert-heading-respect-content nil) (setq org-reverse-note-order nil) -(setq org-show-following-heading t) -(setq org-show-hierarchy-above t) (setq org-deadline-warning-days 7) (setq org-blank-before-new-entry (quote ((heading . t) (plain-list-item . nil)))) +(setq org-num-mode t) (setq org-todo-repeat-to-state "LOOP") (setq org-remove-highlights-with-change nil) -(setq org-read-date-prefer-future nil) +(setq org-read-date-prefer-future t) (setq org-special-ctrl-a/e t) (setq org-special-ctrl-k t) (setq org-yank-adjusted-subtrees t) -(setq org-M-RET-may-split-line t) +(setq org-M-RET-may-split-line (quote (default . t))) (setq org-log-done (quote time)) (setq org-log-into-drawer t) (setq org-catch-invisible-edits "smart") -(setq org-completion-use-ido t) (setq org-use-property-inheritance nil) (setq org-duration-format 'h:mm) (setq org-hierarchical-todo-statistics t) @@ -134,8 +142,22 @@ selected instead of creating a new buffer." (setq org-element--cache-self-verify nil) + (setq org-image-actual-width '(600)) + +(package-initialize) +(menu-bar-mode -1) +(tool-bar-mode -1) +(scroll-bar-mode -1) +;; (modus-themes-load-operandi) + +;; Choose some fonts +;; (set-face-attribute 'default nil :family "Iosevka") +;; (set-face-attribute 'variable-pitch nil :family "Iosevka Aile") +;; (set-face-attribute 'org-modern-symbol nil :family "Iosevka") + +;; Add frame borders and window dividers (modify-all-frames-parameters - '((right-divider-width . 2) + '((right-divider-width . 0) (internal-border-width . 0))) (dolist (face '(window-divider window-divider-first-pixel @@ -149,12 +171,12 @@ selected instead of creating a new buffer." org-auto-align-tags nil org-tags-column 0 org-catch-invisible-edits 'show-and-error + org-special-ctrl-a/e t org-insert-heading-respect-content t ;; Org styling, hide markup etc. org-hide-emphasis-markers t org-pretty-entities t - org-ellipsis "…" ;; Agenda styling org-agenda-tags-column 0 @@ -164,13 +186,62 @@ selected instead of creating a new buffer." (800 1000 1200 1400 1600 1800 2000) " ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄") org-agenda-current-time-string - "⌚ now ─────────────────────────────────────────────────") + "◀── now ─────────────────────────────────────────────────") + +;; Ellipsis styling +;; (setq org-ellipsis "…") +;; (set-face-attribute 'org-ellipsis nil :inherit 'default :box nil) (global-org-modern-mode) +(defun my-dir-to-org (dir org-file) + "Create a file ORG-FILE which has all txt files in DIR as linked headlines +and the contents of the files below the headlines." + (interactive "DDirectory to convert: \nFFilename: ") + (let ((files (directory-files + dir t ".*\\.txt\\'"))) + (with-temp-file org-file + (dolist (file files) + (insert (concat "* " (file-name-nondirectory file) "\n\n")) + (insert-file-contents file) + (goto-char (point-max)) + (insert "\n"))))) + +(defun my-dir-to-org-with-links (dir org-file) + "Create a file ORG-FILE which has all txt files in DIR as linked headlines +and the contents of the files below the headlines." + (interactive "DDirectory to convert: \nFFilename: ") + (let ((files (directory-files + dir t ".*\\.txt\\'"))) + (with-temp-file org-file + (dolist (file files) + (insert (concat "* " "[[" file "][" (file-name-nondirectory file) "]]\n\n")) + (insert-file-contents file) + (goto-char (point-max)) + (insert "\n"))))) + + +(defun my-mass-conversion (source-dir target-dir) + "Create one org file per directory of SOURCE-DIR inside TARGET-DIR." + (interactive "DDirectory to convert: \nDTarget Directory:") + (let ((dirs-full + (remove-if-not #'file-directory-p + (directory-files + source-dir t + directory-files-no-dot-files-regexp)))) + + (mapc (lambda (dir) + (my-dir-to-org dir + (concat target-dir + (file-name-base dir) ".org"))) + dirs-full))) + (setq-default org-enforce-todo-dependencies t) (setq org-enforce-todo-checkbox-dependencies t) +(require 'org-auto-tangle) +(add-hook 'org-mode-hook 'org-auto-tangle-mode) + (add-hook 'write-file-hooks 'time-stamp) (add-hook 'org-mode-hook (lambda () @@ -183,6 +254,23 @@ selected instead of creating a new buffer." ;; auto-fill mode on (auto-fill-mode 1))) + (add-to-list 'font-lock-extra-managed-props 'display) + +(font-lock-add-keywords + 'org-mode + '(("\\({{{[a-zA-Z#%)(_-+0-9]+}}}\\)" 0 + `(face nil display + ,(format "%s" + (let* ((input-str (match-string 0)) + (el (with-temp-buffer + (insert input-str) + (goto-char (point-min)) + (org-element-context))) + (text (org-macro-expand el org-macro-templates))) + (if text + text + input-str))))))) + (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-ch" 'counsel-org-link) (global-set-key "\C-cne" 'elgantt-open) @@ -193,23 +281,37 @@ selected instead of creating a new buffer." (global-set-key "\C-cii" '(lambda () (interactive) (org-time-stamp-inactive '(16)))) +(add-hook 'org-insert-heading-hook + (lambda () + (if + (or + (string-match-p "journal.org" buffer-file-name) + (string-match-p "money" buffer-file-name) + (string-match-p "therapy.org" buffer-file-name)) + ((lambda () + (interactive) + (org-time-stamp-inactive '(16)) + (newline))) + (setq org-insert-heading-hook nil) + ))) + (setq org-todo-keywords '((sequence - "INBOX(i)" - "TASK(t)" ; A task that needs doing & is ready to do - "PROJ(p)" ; A project, which usually contains other tasks - "LOOP(r)" ; A recurring task - "WAIT(w)" ; Something external is holding up this task - "HOLD(h)" ; This task is paused/on hold because of me + "INBOX(i!)" + "TASK(t!)" ; A task that needs doing & is ready to do + "PROJ(p!)" ; A project, which usually contains other tasks + "LOOP(r!)" ; A recurring task + "WAIT(w!)" ; Something external is holding up this task + "HOLD(h!)" ; This task is paused/on hold because of me "|" - "DONE(d)" ; Task successfully completed - "KILL(k)") ; Task was cancelled, aborted or is no longer applicable + "DONE(d!@)" ; Task successfully completed + "KILL(k!@)") ; Task was cancelled, aborted or is no longer applicable (sequence "DECIDE()" ; for making decisions "|" - "OKAY(o)" ; okay as-is - "YES(y)" ; take action - "NO(n)")) ; don't take action + "OKAY(o!)" ; okay as-is + "YES(y!)" ; take action + "NO(n!)")) ; don't take action org-todo-keyword-faces '( ("INBOX" :foreground "cyan" :weight bold) @@ -221,28 +323,14 @@ selected instead of creating a new buffer." ("DONE" :foreground "green" :weight bold) ("KILL" :foreground "grey" :weight bold))) -(add-hook 'org-insert-heading-hook - (lambda () - (if - (or - (string-match "journal.org" buffer-file-name) - (string-match "money" buffer-file-name) - (string-match "therapy.org" buffer-file-name)) - ((lambda () - (interactive) - (org-time-stamp-inactive '(16)) - (newline))) - (setq org-insert-heading-hook nil) - ))) - -(setq org-capture-templates '(("t" "inbox" entry (file+headline "~/enc/org/phil.org" "Inbox") "* TODO %i%?") - ("i" "idea" entry (file+headline "~/enc/org/phil.org" "Ideas") "* %?") - ("d" "reminder" entry (file+headline "~/enc/org/phil.org" "Reminders") "* %i%? \n %U") - ("p" "person" entry (file+headline "~/enc/org/people.org" "People") +(setq org-capture-templates '(("t" "inbox" entry (file+headline "~/enc/org/agenda.org" "Inbox") "* %i%?") + ("i" "idea" entry (file+headline "~/enc/org/agenda.org" "Ideas") "* %?") + ("d" "reminder" entry (file+headline "~/enc/org/agenda.org" "Reminders") "* %i%? \n %U") + ("p" "person" entry (file+headline "~/enc/org/people.org" "Sort") "* %(org-contacts-template-name) :PROPERTIES: :EMAIL: %(org-contacts-template-email) -:PHONE: %(org-contacts-template-phone) +:PHONE: :ALIAS: :NICKNAME: :IGNORE: @@ -252,11 +340,166 @@ selected instead of creating a new buffer." :BIRTHDAY: :END:"))) +(setq org-archive-default-command #'org-archive-subtree-hierarchically) + +(defun org-archive-subtree-hierarchically (&optional prefix) + (interactive "P") + (let* ((fix-archive-p (and (not prefix) + (not (use-region-p)))) + (afile (car (org-archive--compute-location + (or (org-entry-get nil "ARCHIVE" 'inherit) org-archive-location)))) + (buffer (or (find-buffer-visiting afile) (find-file-noselect afile)))) + (org-archive-subtree prefix) + (when fix-archive-p + (with-current-buffer buffer + (goto-char (point-max)) + (while (org-up-heading-safe)) + (let* ((olpath (org-entry-get (point) "ARCHIVE_OLPATH")) + (path (and olpath (split-string olpath "/"))) + (level 1) + tree-text) + (when olpath + (org-mark-subtree) + (setq tree-text (buffer-substring (region-beginning) (region-end))) + (let (this-command (inhibit-message t)) (org-cut-subtree)) ; we don’t want to see "Cut subtree" messages + (goto-char (point-min)) + (save-restriction + (widen) + (-each path + (lambda (heading) + (if (re-search-forward + (rx-to-string + `(: bol (repeat ,level "*") (1+ " ") ,heading)) nil t) + (org-narrow-to-subtree) + (goto-char (point-max)) + (unless (looking-at "^") + (insert "\n")) + (insert (make-string level ?*) + " " + heading + "\n")) + (cl-incf level))) + (widen) + (org-end-of-subtree t t) + (org-paste-subtree level tree-text)))))))) + +(setq my-linkcolor-org "wheat3") +(setq my-linkcolor-file "MediumSeaGreen") +(setq my-linkcolor-web "DeepSkyBlue") + +(defun my-set-linkcolors () + "Defines the colors of various link colors" + (interactive) + + ;; Org links -------------------------------------------------------------------------- + + (org-link-set-parameters "id" :face `(:foreground ,my-linkcolor-org :underline t)) + (org-link-set-parameters "contact" :face `(:foreground ,my-linkcolor-org :underline t)) + + ;; File links -------------------------------------------------------------------------- + + (org-link-set-parameters "file" :face `(:foreground ,my-linkcolor-file :underline t)) + ;; defined elsewhere;; (org-link-set-parameters "tsfile" :face '`(:foreground "DarkSeaGreen" :underline t)) + (org-link-set-parameters "pdf" :face `(:foreground ,my-linkcolor-file :underline t)) + + (org-link-set-parameters "EPA" :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "EPAAFO" :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "JAFO" :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "DAKEPA" :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "BMTSK" :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "ISO" :face `(:foreground ,my-linkcolor-file :underline t)) + + (org-link-set-parameters "gemSpec_DS_Anbieter" + :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "gemSpec_Net" + :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "gemSpec_PKI" + :face `(:foreground ,my-linkcolor-file :underline t)) + (org-link-set-parameters "gemSpec_IDP_Dienst" + :face `(:foreground ,my-linkcolor-file :underline t)) + + (org-link-set-parameters "messageid" + :face `(:foreground ,my-linkcolor-file :underline t)) + + ;; Web links -------------------------------------------------------------------------- + + (org-link-set-parameters "http" :face `(:foreground ,my-linkcolor-web :underline t)) + (org-link-set-parameters "https" :face `(:foreground ,my-linkcolor-web :underline t)) + +) + +(defun my-set-linkcolors () + "Defines the colors of various link colors" + (interactive) + + ;; Org links -------------------------------------------------------------------------- + + (org-link-set-parameters "id" :face '(:foreground "wheat3" :underline t)) + (org-link-set-parameters "contact" :face '(:foreground "wheat3" :underline t)) + + ;; File links -------------------------------------------------------------------------- + + (org-link-set-parameters "file" :face '(:foreground "MediumSeaGreen" :underline t)) + ;; defined elsewhere;; (org-link-set-parameters "tsfile" :face ''(:foreground "DarkSeaGreen" :underline t)) + (org-link-set-parameters "pdf" :face '(:foreground "MediumSeaGreen" :underline t)) + + (org-link-set-parameters "EPA" :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "EPAAFO" :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "JAFO" :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "DAKEPA" :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "BMTSK" :face '(:foreground "MediumSeaGreen" :underline t)) + + (org-link-set-parameters "gemSpec_DS_Anbieter" + :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "gemSpec_Net" + :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "gemSpec_PKI" + :face '(:foreground "MediumSeaGreen" :underline t)) + (org-link-set-parameters "gemSpec_IDP_Dienst" + :face '(:foreground "MediumSeaGreen" :underline t)) + + (org-link-set-parameters "messageid" + :face '(:foreground "MediumSeaGreen" :underline t)) + + ;; Web links -------------------------------------------------------------------------- + + (org-link-set-parameters "http" :face '(:foreground "DeepSkyBlue" :underline t)) + (org-link-set-parameters "https" :face '(:foreground "DeepSkyBlue" :underline t)) + +) + +(my-set-linkcolors) ;; set colors when loading + + + +(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e/") + +(setq mu4e-change-filenames-when-moving t) +(setq mu4e-update-interval (* 10 60)) +(setq mu4e-get-mail-command "mbsync -a") +(setq mu4e-maildir "~/enc/.mail") + +(setq mu4e-drafts-folder "/Drafts") +(setq mu4e-sent-folder "/Sent") +(setq mu4e-refile-folder "/Refile") +(setq mu4e-trash-folder "/Trash") + +(mu4e t) + +;; (load (expand-file-name "~/.roswell/helper.el")) + +(setq inferior-lisp-program "sbcl --dynamic-space-size 8192 -Q -l ~/.sbclrc") + +(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines) +(global-set-key (kbd "C->") 'mc/mark-next-like-this) +(global-set-key (kbd "C-<") 'mc/mark-previous-like-this) +(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this) + (use-package! org-transclusion :after org :init (map! - :map global-map "" #'org-transclusion-add + :map global-map "" #'org-transclusion-add :leader :prefix "n" :desc "Org Transclusion Mode" "t" #'org-transclusion-mode)) @@ -265,7 +508,18 @@ selected instead of creating a new buffer." (with-eval-after-load 'ox-latex (add-to-list 'org-latex-classes - '("memoir" + '("tufte-handout" + "\\documentclass[nobib]{tufte-handout} + \\usepackage{nicefrac} + \\usepackage{units} + [NO-DEFAULT-PACKAGES] + [EXTRA]" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + '("memoir" "\\documentclass{memoir}" ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") @@ -290,11 +544,14 @@ selected instead of creating a new buffer." (global-set-key (kbd "C-c l r") 'org-super-links-quick-related) (global-set-key (kbd "C-c l d") 'org-super-links-delete-link) -(org-wild-notifier-mode) - -(setq org-wild-notifier-alert-time '(10)) -(setq org-wild-notifier-notification-title "Emacs org-mode agenda") -(setq org-wild-notifier-keyword-whitelist '("TODO")) + (org-wild-notifier-mode) + (setq alert-default-style 'libnotify + org-wild-notifier-alert-time '(0 5 15 60) + org-wild-notifier-keyword-whitelist nil + ;; good for testing + org-wild-notifier--alert-severity 'high + alert-fade-time 50 + ) (setq org-refile-targets '((nil :maxlevel . 9) (org-agenda-files :maxlevel . 9))) @@ -303,13 +560,6 @@ selected instead of creating a new buffer." (setq org-contacts-files '("~/enc/org/people.org")) -(define-prefix-command 'org-roam-map) -(global-set-key "\C-r" 'org-roam-map) -(define-key org-roam-map "o" 'org-roam-buffer-toggle) -(define-key org-roam-map "f" 'org-roam-node-find) -(define-key org-roam-map "i" 'org-roam-node-insert) -(define-key org-roam-map "n" 'org-roam-capture) - (setq org-roam-v2-ack t) (setq org-roam-completion-everywhere t) (setq org-roam-directory @@ -334,6 +584,13 @@ selected instead of creating a new buffer." :empty-lines 1 :unnarrowed))) +(define-prefix-command 'org-roam-map) +(global-set-key "\C-r" 'org-roam-map) +(define-key org-roam-map "o" 'org-roam-buffer-toggle) +(define-key org-roam-map "f" 'org-roam-node-find) +(define-key org-roam-map "i" 'org-roam-node-insert) +(define-key org-roam-map "n" 'org-roam-capture) + (global-set-key "\C-ca" 'org-agenda) (define-prefix-command 'org-agenda-map) (global-set-key "\C-a" 'org-agenda-map) @@ -341,28 +598,25 @@ selected instead of creating a new buffer." (define-key org-agenda-map "a" 'org-agenda) (setq org-agenda-start-day nil - org-agenda-span '14 - org-agenda-dim-blocked-tasks 'invisible + org-agenda-span 'day + org-agenda-dim-blocked-tasks t org-agenda-sorting-strategy - '((agenda habit-down time-up priority-down category-keep) - (todo priority-down category-keep) - (search category-keep)) - org-deadline-warning-days 3 - org-agenda-insert-diary-extract-time t + '(time-up priority-up category-keep) + org-deadline-warning-days 4 org-log-into-drawer t + org-treat-insert-todo-heading-as-state-change t org-clock-into-drawer t org-agenda-log-mode-items '(closed clock state) - org-agenda-prefix-format "%l %i %c %s %t") + org-agenda-prefix-format '((agenda . " %l %i %c %s %t") + (todo . " %i %-12:c") + (tags . " %i $-12:c") + (search . " %i %-12:c")) + org-agenda-compact-blocks nil + org-agenda-use-tag-inheritance (quote (agenda));; agenda performance + org-agenda-block-separator "---------") -(setq org-agenda-compact-blocks t) -(setq org-agenda-use-tag-inheritance (quote (agenda)));; agenda performance -(setq org-agenda-span 1) (add-hook 'org-agenda-mode-hook '(lambda () (hl-line-mode 1))) -(setq org-agenda-custom-commands - (quote (("x" "Phil's view" agenda "" - ((org-agenda-prefix-format " %i %-12:c %s %t ")))))) - (setq org-agenda-skip-deadline-if-done t) (setq org-agenda-skip-scheduled-if-done t) @@ -380,7 +634,7 @@ selected instead of creating a new buffer." (setq org-agenda-show-all-dates t) (setq org-agenda-sorting-strategy - (quote ((agenda habit-down time-up user-defined-up priority-down category-keep) + (quote ((agenda time-up user-defined-up priority-down category-keep) (todo priority-down category-keep) (tags priority-down category-keep) (search category-keep)))) @@ -411,6 +665,17 @@ selected instead of creating a new buffer." (org-export-string-as region 'md t '(:with-toc nil)))) (gui-set-selection 'CLIPBOARD markdown)))) +(add-to-list 'org-modules 'habit) +(setq org-habit-following-days 2 + org-habit-preceding-days 7 + org-habit-show-all-today nil + org-habit-show-habits-only-for-today t + org-habit-show-habits t) + +(define-key org-mode-map (kbd "C-c h") 'org-habit-stats-view-habit-at-point) +(define-key org-agenda-mode-map (kbd "H") 'org-habit-stats-view-habit-at-point-agenda) +(add-hook 'org-after-todo-state-change-hook 'org-habit-stats-update-properties) + (setq doom-snippets-enable-short-helpers t) (setq dired-open-extensions '(("gif" . "sxiv") @@ -436,3 +701,33 @@ selected instead of creating a new buffer." ;;; Auto-completion for account names ;; For company-mode users, (add-to-list 'company-backends 'hledger-company) + +(use-package! gptel + :config + (setq! gptel-api-key "your key") + (setq! gptel-max-tokens 8192) + (setq + gptel-model "model" + gptel-backend (gptel-make-openai "llama-cpp" + :stream t + :protocol "http" + :host "localhost:5000" + :models '("model")))) +(gptel-make-openai "llama-cpp" ;Any name + :stream t ;Stream responses + :protocol "http" + :host "localhost:5000" ;Llama.cpp server location + :models '("model")) ;Any names, doesn't matter for Llama + +(setq gptel--debug t) + +;; Set our nickname & real-name as constant variables +(setq + erc-nick "phil_bb" ; Our IRC nick + erc-user-full-name "Phil B.") ; Our /whois name + +;; Define a function to connect to a server +(defun erc/libera () + (interactive) + (erc :server "irc.libera.chat" + :port "6667")) diff --git a/.config/doom/custom.el b/.config/doom/custom.el deleted file mode 100644 index 5446da8..0000000 --- a/.config/doom/custom.el +++ /dev/null @@ -1,16 +0,0 @@ -(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. - '(ignored-local-variable-values '((org-ql-ask-unsafe-queries))) - '(magit-todos-insert-after '(bottom) nil nil "Changed by setter of obsolete option `magit-todos-insert-at'") - '(org-safe-remote-resources - '("\\`https://lvxnox\\.com/org-html-themes/org/theme-readtheorg\\.setup\\'" "\\`https://bajsicki\\.com/org-html-themes/org/theme-readtheorg\\.setup\\'"))) -(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. - ) -(put 'narrow-to-region 'disabled nil) diff --git a/.config/doom/init.el b/.config/doom/init.el index 7fe2049..ad68e17 100644 --- a/.config/doom/init.el +++ b/.config/doom/init.el @@ -21,7 +21,7 @@ ;;layout ; auie,ctsrnm is the superior home row :completion - company ; the ultimate code completion backend + (company +childframe) ; the ultimate code completion backend ;;helm ; the *other* search engine for love and life ;;ido ; the other *other* search engine... ;;ivy ; a search engine for love and life @@ -123,7 +123,7 @@ ;;crystal ; ruby at the speed of c ;;csharp ; unity, .NET, and mono shenanigans data ; config/data formats - ;;(dart +flutter) ; paint ui and not much else + (dart +flutter) ; paint ui and not much else ;;dhall ;;elixir ; erlang done right ;;elm ; care for a cup of TEA? @@ -142,7 +142,7 @@ ;;hy ; readability of scheme w/ speed of python ;;idris ; a language you can depend on json ; At least it ain't XML - ;;(java +lsp) ; the poster child for carpal tunnel syndrome + (java +lsp) ; the poster child for carpal tunnel syndrome (javascript +lsp) ; all(hope(abandon(ye(who(enter(here)))))) (julia +lsp) ; a better, faster MATLAB ;;kotlin ; a better, slicker Java(Script) @@ -178,7 +178,7 @@ (zig +lsp) ; C, but simpler :email - ;;(mu4e +org +gmail) + (mu4e +org +gmail) ;;notmuch ;;(wanderlust +gmail) diff --git a/.config/doom/packages.el b/.config/doom/packages.el index bf966a9..8aa96e1 100644 --- a/.config/doom/packages.el +++ b/.config/doom/packages.el @@ -14,6 +14,7 @@ (package! battle-haxe) (package! fish-mode) (package! typescript-mode) +(package! terraform-mode) (package! wc-mode) (package! plantuml-mode) (package! csv-mode) @@ -28,6 +29,10 @@ (package! org-auto-tangle) (package! ox-slack) (package! ox-tufte) +(package! ox-gemini + :recipe ( + :host sourcehut + :repo "abrahms/ox-gemini")) (package! org-special-block-extras) (package! org-transclusion) (package! org-modern) @@ -42,8 +47,11 @@ (package! org-download) (package! org-cliplink) (package! org-roam) -(package! org-super-agenda) +;; (package! org-super-agenda) (package! org-wild-notifier) +(package! org-habit-stats) + + (package! org-edna) (package! org-super-links @@ -62,3 +70,12 @@ (package! qrencode) (package! hledger-mode) + +(package! elpher) + +(package! multiple-cursors) + +(package! gptel + :recipe (:host github + :repo "karthink/gptel" + :files ("*.el"))) diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc index c5f2373..cf1b5b2 100644 --- a/.config/dunst/dunstrc +++ b/.config/dunst/dunstrc @@ -24,10 +24,10 @@ # dynamic width from 0 to 300 # width = (0, 300) # constant width of 300 - width = 300 + width = 200 # The maximum height of a single notification, excluding the frame. - height = 300 + height = 200 # Position the notification in the top right corner origin = top-right @@ -36,7 +36,7 @@ offset = 10x50 # Scale factor. It is auto-detected if value is 0. - scale = 2 + scale = 1 # Maximum number of notification (0 means no limit) notification_limit = 20 @@ -58,13 +58,13 @@ progress_bar_min_width = 150 # Set the maximum width for the progress bar - progress_bar_max_width = 300 + progress_bar_max_width = 180 # Corner radius for the progress bar. 0 disables rounded corners. progress_bar_corner_radius = 0 # Corner radius for the icon image. - icon_corner_radius = 2 + icon_corner_radius = 0 # Show how many messages are currently hidden (because of # notification_limit). @@ -123,7 +123,7 @@ ### Text ### - font = Iosevka 24 + font = Iosevka 10 # The spacing between lines. If the height is smaller than the # font height, it will get raised to the font height. diff --git a/.config/fish/README.org b/.config/fish/README.org index a442361..edbe6e7 100644 --- a/.config/fish/README.org +++ b/.config/fish/README.org @@ -9,8 +9,11 @@ This is the fish config I use. It's largely a copy of [[https://gitlab.com/dwt1] First line removes the path; second line sets it. Without the first line, your path gets massive and fish becomes very slow. #+begin_src fish set -e fish_user_paths -set -U fish_user_paths $HOME/.local/bin $HOME/Applications $HOME/.cabal/bin $HOME/.ghcup/bin $fish_user_paths +set -U fish_user_paths $HOME/apps/bin $HOME/.local/bin $HOME/Applications $HOME/.cabal/bin $HOME/.ghcup/bin $HOME/.deno/bin $fish_user_paths +set -U EDITOR emacsclient -c --alternate-editor='' +set -Ux PASSWORD_STORE_DIR $HOME/enc/keys/pass/ +set -U PLANTUML_LIMIT_SIZE 16384 set -e SSH_AGENT_PID if not set -q gnupg_SSH_AUTH_SOCK_by or test $gnupg_SSH_AUTH_SOCK_by -ne $fish_pid diff --git a/.config/fish/config.fish b/.config/fish/config.fish index 4bd6d25..25a1f7f 100644 --- a/.config/fish/config.fish +++ b/.config/fish/config.fish @@ -1,6 +1,9 @@ set -e fish_user_paths -set -U fish_user_paths $HOME/.local/bin $HOME/Applications $HOME/.cabal/bin $HOME/.ghcup/bin $fish_user_paths +set -U fish_user_paths $HOME/apps/bin $HOME/.local/bin $HOME/Applications $HOME/.cabal/bin $HOME/.ghcup/bin $HOME/.deno/bin $fish_user_paths +set -U EDITOR emacsclient -c --alternate-editor='' +set -Ux PASSWORD_STORE_DIR $HOME/enc/keys/pass/ +set -U PLANTUML_LIMIT_SIZE 16384 set -e SSH_AGENT_PID if not set -q gnupg_SSH_AUTH_SOCK_by or test $gnupg_SSH_AUTH_SOCK_by -ne $fish_pid diff --git a/.config/fish/fish_variables b/.config/fish/fish_variables index 8d13c31..2f5f795 100644 --- a/.config/fish/fish_variables +++ b/.config/fish/fish_variables @@ -1,6 +1,19 @@ # This file contains fish universal variable definitions. # VERSION: 3.0 +SETUVAR --export EDITOR:emacsclient\x20\x2dt\x20\x2da\x20\x27\x27 +SETUVAR --export OPENAI_KEY:sk\x2dB0HWnLwlztPylJXMpiD2T3BlbkFJfVBvamToU5QseBlGju1s +SETUVAR --export PASSWORD_STORE_DIR:/home/phil/enc/keys/pass/ +SETUVAR PLANTUML_LIMIT_SIZE:16384 +SETUVAR ZO_CMD:zo +SETUVAR Z_CMD:z +SETUVAR Z_DATA:/home/phil/\x2elocal/share/z/data +SETUVAR Z_DATA_DIR:/home/phil/\x2elocal/share/z +SETUVAR Z_EXCLUDE:\x5e/home/phil\x24 SETUVAR __fish_initialized:3400 +SETUVAR _fisher_edc_2F_bass_files:\x7e/\x2econfig/fish/functions/__bass\x2epy\x1e\x7e/\x2econfig/fish/functions/bass\x2efish +SETUVAR _fisher_jethrokuan_2F_z_files:\x7e/\x2econfig/fish/functions/__z\x2efish\x1e\x7e/\x2econfig/fish/functions/__z_add\x2efish\x1e\x7e/\x2econfig/fish/functions/__z_clean\x2efish\x1e\x7e/\x2econfig/fish/functions/__z_complete\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/z\x2efish +SETUVAR _fisher_plugins:edc/bass\x1ejethrokuan/z +SETUVAR _fisher_upgraded_to_4_4:\x1d SETUVAR fish_color_cancel:\x2dr SETUVAR fish_color_comment:red SETUVAR fish_color_cwd:green @@ -24,4 +37,4 @@ SETUVAR fish_pager_color_description:B3A06D\x1eyellow\x1e\x2di SETUVAR fish_pager_color_prefix:cyan\x1e\x2d\x2dbold\x1e\x2d\x2dunderline SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan SETUVAR fish_pager_color_selected_background:\x2dr -SETUVAR fish_user_paths:/home/phil/\x2elocal/bin\x1e/home/phil/Applications\x1e/home/phil/\x2ecabal/bin\x1e/home/phil/\x2eghcup/bin +SETUVAR fish_user_paths:/home/phil/apps/bin\x1e/home/phil/\x2elocal/bin\x1e/home/phil/Applications\x1e/home/phil/\x2ecabal/bin\x1e/home/phil/\x2eghcup/bin\x1e/home/phil/\x2edeno/bin diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index 2cb940b..b99def8 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -1,8 +1,8 @@ +# monitor=eDP-1, 1920x1080@60, 1920x0, 1 +monitor=eDP-2, 1920x1080@60, 1920x0, 1 monitor=HDMI-A-1, 1920x1080@60, 0x0, 1 -monitor=eDP-1, 1920x1080@165, 1920x0, 1 -monitor=eDP-2, 1920x1080@165, 1920x0, 1 -monitor=DP-2, 1920x1080@60, 1920x1080, 1 monitor=DP-1, 1920x1080@60, 3840x0, 1 +monitor=DP-2, 1920x1080@60, 1920x1080, 1 input { kb_layout = pl @@ -15,12 +15,11 @@ input { } general { - gaps_in = 5 + gaps_in = 10 gaps_out = 20 border_size = 2 - col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.active_border = rgba(33ccffee) rgba(00ff99ee) -45deg col.inactive_border = rgba(595959aa) - layout = master } @@ -28,18 +27,18 @@ decoration { # See https://wiki.hyprland.org/Configuring/Variables/ for more rounding = 0 blur { - enabled = true + enabled = false size = 3 passes = 1 } - drop_shadow = yes + drop_shadow = no shadow_range = 4 shadow_render_power = 3 col.shadow = rgba(1a1a1aee) } animations { - enabled = yes + enabled = no bezier = myBezier, 0.05, 0.9, 0.1, 1.05 animation = windows, 1, 7, myBezier animation = windowsOut, 1, 7, default, popin 80% @@ -57,7 +56,7 @@ dwindle { master { # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more - new_is_master = true + new_is_master = false inherit_fullscreen = true mfact = 0.65 } @@ -68,7 +67,26 @@ gestures { } env = XCURSOR_SIZE,24 -env = HYPRSHOT_DIR,"~/enc/pictures/screenshots" + +env = GBM_BACKEND,nvidia-drm +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +env = __GL_VRR_ALLOWED,0 + + +env = GDK_BACKEND,wayland,x11,* +env = SDL_VIDEODRIVER,wayland +env = CLUTTER_BACKEND,wayland + +env = XDG_CURRENT_DESKTOP,Hyprland +env = XDG_SESSION_TYPE,wayland +env = XDG_SESSION_DESKTOP,Hyprland + +env = QT_QPA_PLATFORM,wayland;xcb +env = QT_AUTO_SCREEN_SCALE_FACTOR,1 +env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 +env = QT_QPA_PLATFORMTHEME,qt5ct + +env = HYPRSHOT_DIR,enc/pictures/screenshots $mainMod = SUPER bind = CTRL_SHIFT_ALT, Q, killactive, diff --git a/.config/xmobar/tomorrow-night-xmobarrc b/.config/xmobar/tomorrow-night-xmobarrc index 674cb62..1b9958b 100644 --- a/.config/xmobar/tomorrow-night-xmobarrc +++ b/.config/xmobar/tomorrow-night-xmobarrc @@ -43,11 +43,11 @@ Config { -- Ram used number and percent , Run Memory ["-t", "\xf233 mem: M %"] 20 -- Disk space free - , Run DiskU [("/", "\xf0c7 hdd: free")] [] 60 + , Run DiskU [("/", "\xf0c7 /: free")] [] 60 -- Echos an "up arrow" icon in front of the uptime output. - , Run Com "echo" ["\xf0aa"] "uparrow" 3600 + -- , Run Com "echo" ["\xf0aa"] "uparrow" 3600 -- Uptime - , Run Uptime ["-t", "uptime: ::"] 360 + -- , Run Uptime ["-t", "uptime: ::"] 360 -- Echos a "bell" icon in front of the pacman updates. -- , Run Com "echo" ["\xf0f3"] "bell" 3600 -- Check for pacman updates (script found in .local/bin) @@ -64,4 +64,4 @@ Config { ] , sepChar = "%" , alignSep = "}{" - , template = "%UnsafeXMonadLog% }{ %cpu% %memory% %disku% %uparrow% %uptime% %baticon% %battery% %date% %trayerpad%" + , template = "%UnsafeXMonadLog% }{ %cpu% %memory% %disku% %baticon% %battery% %date% %trayerpad%" diff --git a/.config/xmobar/tomorrow-night-xmobarrc-no-trayer b/.config/xmobar/tomorrow-night-xmobarrc-no-trayer new file mode 100644 index 0000000..88076a5 --- /dev/null +++ b/.config/xmobar/tomorrow-night-xmobarrc-no-trayer @@ -0,0 +1,67 @@ +-- Xmobar (http://projects.haskell.org/xmobar/) +-- This is one of the xmobar configurations for DTOS. +-- This config is packaged in the DTOS repo as 'dtos-xmobar' +-- Color scheme: Tomorrow Night +-- Dependencies: + -- otf-font-awesome + -- ttf-mononoki + -- ttf-ubuntu-font-family + -- htop + -- emacs + -- pacman (Arch Linux) + -- trayer + -- 'dtos-local-bin' (from dtos-core-repo) + +Config { + font = "xft:Iosevka-12" + , additionalFonts = [ "xft:Mononoki:pixelsize=8:antialias=true:hinting=true" + , "xft:Font Awesome 6 Free Solid:pixelsize=10" + , "xft:Font Awesome 6 Brands:pixelsize=10" + ] + , bgColor = "#1d1f21" + , fgColor = "#ffffff" + -- Position TopSize and BottomSize take 3 arguments: + -- an alignment parameter (L/R/C) for Left, Right or Center. + -- an integer for the percentage width, so 100 would be 100%. + -- an integer for the minimum pixel height for xmobar, so 24 would force a height of at least 24 pixels. + -- NOTE: The height should be the same as the trayer (system tray) height. + , position = TopSize L 100 16 + , lowerOnStart = True + , hideOnStart = False + , allDesktops = True + , persistent = True + , iconRoot = ".config/xmonad/xpm/" -- default: "." + , commands = [ + Run UnsafeXMonadLog + , Run StdinReader + -- Echos a "penguin" icon in front of the kernel output. + -- Run Com "echo" ["\xf17c"] "penguin" 3600 + -- Get kernel version (script found in .local/bin) + -- , Run Com ".local/bin/kernel" [] "kernel" 36000 + -- Cpu usage in percent + , Run Cpu ["-t", "\xf108 cpu: %","-H","50","--high","red"] 20 + -- Ram used number and percent + , Run Memory ["-t", "\xf233 mem: M %"] 20 + -- Disk space free + , Run DiskU [("/", "\xf0c7 /: free")] [] 60 + -- Echos an "up arrow" icon in front of the uptime output. + -- , Run Com "echo" ["\xf0aa"] "uparrow" 3600 + -- Uptime + -- , Run Uptime ["-t", "uptime: ::"] 360 + -- Echos a "bell" icon in front of the pacman updates. + -- , Run Com "echo" ["\xf0f3"] "bell" 3600 + -- Check for pacman updates (script found in .local/bin) + -- , Run Com ".local/bin/pacupdate" [] "pacupdate" 36000 + -- Echos a "battery" icon in front of the pacman updates. + , Run Com "echo" ["\xf242"] "baticon" 3600 + -- Battery + , Run BatteryP ["BAT0"] ["-t", " %"] 360 + -- Time and date + , Run Date "\xf017%d.%m.%Y %H:%M " "date" 50 + -- Script that dynamically adjusts xmobar padding depending on number of trayer icons. + --, Run Com ".config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 20 + -- Prints out the left side items such as workspaces, layout, etc. + ] + , sepChar = "%" + , alignSep = "}{" + , template = "%UnsafeXMonadLog% }{ %cpu% %memory% %disku% %baticon% %battery% %date%" diff --git a/.config/xmobar/xmobarrc-no-trayer b/.config/xmobar/xmobarrc-no-trayer new file mode 120000 index 0000000..002a238 --- /dev/null +++ b/.config/xmobar/xmobarrc-no-trayer @@ -0,0 +1 @@ +tomorrow-night-xmobarrc-no-trayer \ No newline at end of file diff --git a/.config/xmonad/README.org b/.config/xmonad/README.org index 4eb73af..f32f1bf 100644 --- a/.config/xmonad/README.org +++ b/.config/xmonad/README.org @@ -265,8 +265,11 @@ I'm Polish, so I type on a Polish layout. I also extensively use the compose key **** Wallpaper Randomize wallpaper. Requires /feh/. You can change the path to any directory with wallpapers for consistent variety. #+begin_src haskell - spawnOnce "feh --randomize --bg-fill /usr/share/backgrounds/archlinux/*" + spawnOnce "feh --recursive --randomize --bg-fill /mnt/ext1/media/Images/Wallpapers/*" #+end_src + +#+RESULTS: + **** Trayer Trayer is a system tray, which works well with XMobar. This restarts it every time XMonad is reinitialized to avoid weirdness. #+begin_src haskell @@ -343,8 +346,9 @@ myXmobarPP = def #+end_src #+begin_src haskell xmobar0 = statusBarProp "xmobar -x 0 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) -xmobar1 = statusBarProp "xmobar -x 1 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) -xmobar2 = statusBarProp "xmobar -x 2 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) +xmobar1 = statusBarProp "xmobar -x 1 ~/.config/xmobar/xmobarrc-no-trayer" (pure myXmobarPP) +xmobar2 = statusBarProp "xmobar -x 2 ~/.config/xmobar/xmobarrc-no-trayer" (pure myXmobarPP) +xmobar3 = statusBarProp "xmobar -x 3 ~/.config/xmobar/xmobarrc-no-trayer" (pure myXmobarPP) #+end_src * Main XMonad loop @@ -354,11 +358,12 @@ main = do #+end_src ** XMobar -Launching three instances of xmobar on their monitors. +Launching four instances of xmobar on their monitors. #+begin_src haskell :tangle no xmproc0 <- spawnPipe ("xmobar -x 0 $HOME/.config/xmobar/xmobarrc") - xmproc1 <- spawnPipe ("xmobar -x 1 $HOME/.config/xmobar/xmobarrc") - xmproc2 <- spawnPipe ("xmobar -x 2 $HOME/.config/xmobar/xmobarrc") + xmproc1 <- spawnPipe ("xmobar -x 1 $HOME/.config/xmobar/xmobarrc-no-trayer") + xmproc2 <- spawnPipe ("xmobar -x 2 $HOME/.config/xmobar/xmobarrc-no-trayer") + xmproc3 <- spawnPipe ("xmobar -x 3 $HOME/.config/xmobar/xmobarrc-no-trayer") #+end_src ** XMonad & manageHook diff --git a/.config/xmonad/xmonad.hs b/.config/xmonad/xmonad.hs index 85917ca..0b8ff72 100644 --- a/.config/xmonad/xmonad.hs +++ b/.config/xmonad/xmonad.hs @@ -139,7 +139,7 @@ myStartupHook = do spawnOnce "gocryptfs ~/.bajsicki enc --extpass lxqt-openssh-askpass" - spawnOnce "feh --randomize --bg-fill /usr/share/backgrounds/archlinux/*" + spawnOnce "feh --recursive --randomize --bg-fill /mnt/ext1/media/Images/Wallpapers/*" spawn "killall trayer" -- kill current trayer on each spawn ("sleep 2 && trayer --edge top --align right --widthtype request --padding 6 --SetDockType true --SetPartialStrut true --expand true --monitor 1 --transparent true --alpha 0 " ++ colorTrayer ++ " --height 20") @@ -192,8 +192,9 @@ myXmobarPP = def lowWhite = xmobarColor "#bbbbbb" "" xmobar0 = statusBarProp "xmobar -x 0 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) -xmobar1 = statusBarProp "xmobar -x 1 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) -xmobar2 = statusBarProp "xmobar -x 2 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) +xmobar1 = statusBarProp "xmobar -x 1 ~/.config/xmobar/xmobarrc-no-trayer" (pure myXmobarPP) +xmobar2 = statusBarProp "xmobar -x 2 ~/.config/xmobar/xmobarrc-no-trayer" (pure myXmobarPP) +xmobar3 = statusBarProp "xmobar -x 2 ~/.config/xmobar/xmobarrc-no-trayer" (pure myXmobarPP) main :: IO () main = do diff --git a/.scripts/.runsway.sh b/.scripts/.runsway.sh index 9fed012..aeebca4 100755 --- a/.scripts/.runsway.sh +++ b/.scripts/.runsway.sh @@ -11,8 +11,8 @@ export _JAVA_AWT_WM_NONREPARENTING=1 export XCURSOR_SIZE=24 export WLR_RENDERER=vulkan export PLANTUML_LIMIT_SIZE=16384 - export XKB_DEFAULT_LAYOUT="pl" export XKB_DEFAULT_OPTIONS="compose:rctrl" -sway --unsupported-gpu & +val=$(udevadm info -a -n /dev/dri/card1 | grep boot_vga | rev | cut -c 2) +WLR_DRM_DEVICES="/dev/dri/card$val" sway