diff --git a/doom/.config/doom/config.el b/doom/.config/doom/config.el index 3bb6193..6af1da9 100644 --- a/doom/.config/doom/config.el +++ b/doom/.config/doom/config.el @@ -31,10 +31,20 @@ ;; change `org-directory'. It must be set before org loads! (setq org-directory "~/org/") + +(add-to-list 'load-path "~/.config/doom/lisp") + ;; This determines the style of line numbers in effect. If set to `nil', line ;; numbers are disabled. For relative line numbers, set this to `relative'. (setq display-line-numbers-type `relative) +;; scroll one line at a time (less "jumpy" than defaults) +(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 +(setq scroll-step 1) ;; keyboard scroll one line at a time +(setq auto-window-vscroll nil) + (set-fontset-font "fontset-default" nil (font-spec :size 17 :name "Meterial Icons")) (setq doom-font (font-spec :family "Illusion Z" :size 17) @@ -60,15 +70,9 @@ '(org-level-5 ((t (:inherit outline-5 :height 1.0)))) ) -;; open pdfs scaled in zathura -(defun open-pdf-with-zathura () - (interactive) - (start-process "zathura" nil "zathura" (buffer-file-name))) +;; company mode delay 0 +(setq company-idle-delay 0) -(add-hook 'pdf-view-mode-hook - (lambda () - (open-pdf-with-zathura) - (kill-buffer))) @@ -85,43 +89,6 @@ ;; ;; (setq fancy-splash-image (concat doom-user-dir "xenia.png")) -;;(defun my-weebery-is-always-greater () -;; (let* ((banner '("⣿⣿⣿⣿⣿⣿⡿⠋⠁⠀⠀⠀⢀⣾⡿⠋⠉⠁⢠⣿⠏⢁⣿⣿⣿⠏⠉⢸⣿⡏⠉⢻⣿⣿⡇⠈⠙⢿⣿⣿⣿⣷⡆⠀⠀⢇⠢⣈⡒⡤" -;;"⣿⣿⣿⣿⣿⣏⣴⡇⠀⠀⠀⢠⡿⠋⠀⠀⠀⣰⣿⠋⠀⣼⣿⣿⠏⠀⠀⡾⣿⠁⠀⠀⣿⣿⣷⠀⠀⠀⠹⣿⣿⣿⣿⣄⢀⣿⣷⣿⣶⣶" -;;"⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀⢠⡟⠁⠀⠀⠀⢰⣿⠇⠀⢰⣿⣿⡷⠀⣀⣜⣁⣻⣀⣀⣀⣸⢻⣿⡇⠀⠀⠀⠘⣿⣿⣷⠹⣿⣿⣿⣿⣿⣿" -;;"⣿⣿⣿⣿⣿⣿⠃⠀⠀⣠⣿⠀⠀⠀⠀⢠⣿⡏⠀⢀⣿⣿⡿⠛⣩⣿⠿⠛⢻⡏⠉⠉⢹⠉⢿⣿⡀⠀⠀⠀⠹⣿⣿⡆⠙⣿⣿⣿⣿⣿" -;;"⣿⣿⣿⣿⣿⡏⠀⠀⣰⣿⡟⠀⠀⠀⢀⣾⣿⠀⠀⣸⣿⡿⢥⣶⠝⠁⠀⠀⠀⡇⠀⠀⡜⠰⡀⢻⡇⠀⠀⠀⠀⢿⣿⣿⠀⠸⣿⣿⣿⡿" -;;"⣿⣿⢿⣿⣿⡃⠀⣼⣿⣿⡇⣀⣀⣤⣾⣿⡇⠀⠰⣼⡟⣠⠎⠁⠀⢀⣠⠔⠁⢹⣀⣠⣧⣶⣦⣤⣷⣤⣤⣠⣤⠼⣿⣿⡆⠀⢹⣿⣿⣿" -;;"⣿⣿⣿⣿⣿⠀⣼⣿⣿⣿⣏⣁⣼⣿⣿⣿⠀⢠⣾⣟⡔⠁⠀⠀⠀⢸⠁⠀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⣿⣿⣇⠀⠀⣿⣿⣿" -;;"⣿⣿⣿⣿⣿⣸⣿⣿⣿⣿⣟⣹⣿⣿⣿⡿⣴⣿⡿⠋⠀⠀⠀⠀⠀⠀⢰⣾⢟⣻⡿⠛⢻⢋⣻⣏⣱⠞⠙⣄⡀⠀⣿⡽⣿⠀⠀⢸⣿⣿" -;;"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠉⢘⡅⠚⠋⠉⠁⠀⠀⠀⠀⣔⣾⢏⢦⢄⣿⣧⣿⡆⠀⠈⣿⣿" -;;"⣿⣿⣿⣿⣿⡿⢸⣿⣿⣿⡿⢻⣿⣿⡿⠋⠀⠀⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡾⠟⠉⠀⢂⢻⣿⣿⣿⡇⠀⠀⢽⣿" -;;"⣿⣿⣿⣿⣿⢃⣿⣿⣿⣿⣷⣿⣿⣿⣿⡷⠀⠀⡸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠉⠀⢀⣠⣾⣟⡖⢻⣿⣿⠃⠀⠀⣿⣿" -;;"⣿⣿⣿⣿⣟⣼⣿⣿⣿⣿⣿⣿⠟⣻⠿⠓⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡤⠾⠿⠛⠉⠁⢰⢸⣿⡿⠀⠀⠀⣿⣿" -;;"⣿⣿⣿⣿⣿⣿⣿⠋⠰⢟⣿⠌⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠇⠀⠀⢠⡇⣿" -;;"⣿⣿⣿⣿⣿⣿⣏⠓⠓⠚⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⠿⠿⢾⣿⡟⠀⠀⠀⣼⠃⣿" -;;"⣿⣿⣿⣿⣿⣿⣿⣷⢦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡤⠤⠤⠤⠤⠤⠄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠀⠀⠀⣰⠏⢰⣿" -;;"⣿⣿⣿⣿⣿⣿⣿⣿⡀⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⣠⢚⣡⣴⣾⣿⣿⣿⣿⡿⠿⢿⠀⠀⠀⠀⠀⠀⠀⠀⣼⡿⠁⠀⠀⣰⠏⣠⣿⣿" -;;"⣿⣿⣿⣿⣿⣿⣿⣿⣧⣤⣴⡾⠋⠀⠀⠀⠀⠀⠀⠀⣃⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⡸⠀⠀⠀⠀⠀⠀⠀⣼⣿⣃⠤⠚⠚⠉⠉⠉⠙⠛" -;;"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⠉⠀⢀⡄⠀⠀⠀⠀⠀⠀⠙⢽⣿⠿⠋⠉⠁⠀⢠⡆⢰⠃⠀⠀⠀⠀⠀⠀⣼⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀" -;;"⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣴⡿⠁⠀⠀⠀⠀⠀⠀⠀⠈⢯⠀⠀⠀⠀⢀⡞⢠⠋⠀⠀⠀⠀⠀⢀⣾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀" -;;"⣿⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⣸⢠⠃⠀⠀⠀⠀⠀⢠⣾⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀" -;;"⣿⡆⢠⠉⢿⣿⣿⡟⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀⠳⡀⠀⠀⡇⠇⠀⠀⠀⠀⠀⣠⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀" -;;"⣿⣿⣼⠀⠈⢿⣿⡇⢹⣿⣿⣿⣿⣿⣿⣿⡗⠤⣀⠀⠀⠀⠀⠀⠑⢄⣀⡞⠀⠀⠀⠀⢀⣴⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀" -;;"⣿⣿⣿⣷⠀⠀⠹⢇⠀⢻⣿⣿⣿⣿⣿⣿⣧⠀⠈⠻⣷⣦⣤⣀⡀⠀⠉⠀⠀⠀⣀⡴⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀" -;;"⣿⣿⣿⠟⠀⠀⠀⠈⠳⣄⢻⣿⣿⣿⣿⣿⣿⣆⠀⠀⠈⠻⢿⣿⣿⣿⣷⣶⣴⣾⣿⣿⣿⣿⡿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀" -;;"⣿⣿⣿⣄⠀⠀⠀⠀⠀⠈⠳⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠉⡿⢿⣿⣿⣿⣿⣿⣿⣿⡿⢱⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀")) -;; (longest-line (apply #'max (mapcar #'length banner)))) -;; (put-text-property -;; (point) -;; (dolist (line banner (point)) -;; (insert (+doom-dashboard--center -;; +doom-dashboard--width -;; (concat line (make-string (max 0 (- longest-line (length line))) 32))) -;; "\n")) -;; 'face 'doom-dashboard-banner))) - -;;(setq +doom-dashboard-ascii-banner-fn #'my-weebery-is-always-greater) (setq ess-r--no-company-meta t) @@ -158,6 +125,7 @@ :map company-mode-map ("" . 'my-tab) ("TAB" . 'my-tab))) +(setq copilot-log-max 1000) ;; asm stuff (use-package! nasm-mode @@ -190,11 +158,6 @@ :side 'bottom :size .5 :ttl nil :quit t :modeline nil) :bind ("C-c q" . chatgpt-query)) - - -;;count the frame-list - - ;;discord rich presence (require 'elcord) (add-hook 'doom-switch-buffer-hook @@ -226,12 +189,14 @@ (setq elcord-idle-message "Out doing your mom") +;; add my_stuff.el here and load it +(load! "my_stuff.el") + + + +;; custom functions + -(add-hook 'doom-switch-buffer-hook - (lambda () - (if (string= (buffer-name) "*doom*") - (elcord-mode -1) - (elcord-mode 1)))) ;; Here are some additional functions/macros that could help you configure Doom: ;; diff --git a/doom/.config/doom/custom.el b/doom/.config/doom/custom.el index 3cf3b74..91b79b0 100644 --- a/doom/.config/doom/custom.el +++ b/doom/.config/doom/custom.el @@ -3,6 +3,8 @@ ;; 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. + '(elfeed-feeds + '("https://www.reddit.com/r/hentai.rss" "https://www.reddit.com/r/AnimeFeets.rss" "https://www.reddit.com/r/thighdeology.rss" "https://www.reddit.com/r/UndressingHentai.rss" "https://www.reddit.com/r/hentaibondage.rss" "https://www.reddit.com/r/ElegantR34.rss" "https://www.reddit.com/r/AnimeGirlsAndThongs.rss" "https://www.reddit.com/r/AnimeGirls.rss")) '(warning-suppress-log-types '((initialization))) '(warning-suppress-types '((initialization) (initialization)))) (custom-set-faces diff --git a/doom/.config/doom/flycheck_init.el b/doom/.config/doom/flycheck_init.el deleted file mode 100644 index 1ca8089..0000000 --- a/doom/.config/doom/flycheck_init.el +++ /dev/null @@ -1,191 +0,0 @@ -;;; init.el -*- lexical-binding: t; -*- - -;; This file controls what Doom modules are enabled and what order they load -;; in. Remember to run 'doom sync' after modifying it! - -;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's -;; documentation. There you'll find a "Module Index" link where you'll find -;; a comprehensive list of Doom's modules and what flags they support. - -;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or -;; 'C-c c k' for non-vim users) to view its documentation. This works on -;; flags as well (those symbols that start with a plus). -;; -;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its -;; directory (for easy access to its source code). - -(doom! :input - ;;chinese - japanese - ;;layout ; auie,ctsrnm is the superior home row - - :completion - (corfu +icons +orderless) ; the even more ultimate completion backend - ;;(company +icons +childframe) ; the ultimate code completion backend - ;;(helm +fuzzy) ; the *other* search engine for love and life - ;;ido ; the other *other* search engine... - ;;(ivy +fuzzy) ; a search engine for love and life - (vertico +icons) ; the search engine of the future - - :ui - ;;deft ; notational velocity for Emacs - doom ; what makes DOOM look the way it does - doom-dashboard ; a nifty splash screen for Emacs - doom-quit ; DOOM quit-message prompts when you quit Emacs - (emoji +unicode) ; 🙂 - hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW - ;;hydra - indent-guides ; highlighted indent columns - ;;(ligatures +hasklig) ; ligatures and symbols to make your code pretty again - minimap ; show a map of the code on the side - modeline ; snazzy, Atom-inspired modeline, plus API - nav-flash ; blink cursor line after big motions - ;;neotree ; a project drawer, like NERDTree for vim - ophints ; highlight the region an operation acts on - (popup +defaults) ; tame sudden yet inevitable temporary windows - ;;tabs ; a tab bar for Emacs - treemacs ; a project drawer, like neotree but cooler - unicode ; extended unicode support for various languages - vc-gutter ; vcs diff in the fringe - vi-tilde-fringe ; fringe tildes to mark beyond EOB - ;;window-select ; visually switch windows - workspaces ; tab emulation, persistence & separate workspaces - ;;zen ; distraction-free coding or writing - - :editor - (evil +everywhere); come to the dark side, we have cookies - file-templates ; auto-snippets for empty files - fold ; (nigh) universal code folding - (format +onsave) ; automated prettiness - ;;god ; run Emacs commands without modifier keys - ;;lispy ; vim for lisp, for people who don't like vim - ;;multiple-cursors ; editing in many places at once - ;;objed ; text object editing for the innocent - ;;parinfer ; turn lisp into python, sort of - ;;rotate-text ; cycle region at point between text candidates - snippets ; my elves. They type so I don't have to - ;;word-wrap ; soft wrapping with language-aware indent - - :emacs - (dired +icons) ; making dired pretty [functional] - electric ; smarter, keyword-based electric-indent - ;;ibuffer ; interactive buffer management - undo ; persistent, smarter undo for your inevitable mistakes - vc ; version-control and Emacs, sitting in a tree - - :term - ;;eshell ; the elisp shell that works everywhere - ;;shell ; simple shell REPL for Emacs - ;;term ; basic terminal emulator for Emacs - vterm ; the best terminal emulation in Emacs - - :checkers - syntax ; tasing you for every semicolon you forget - (spell +flyspell) ; tasing you for misspelling mispelling - grammar ; tasing grammar mistake every you make - - :tools - ;;ansible - ;;debugger ; FIXME stepping through code, to help you add bugs - ;;direnv - ;;docker - ;;editorconfig ; let someone else argue about tabs vs spaces - ;;ein ; tame Jupyter notebooks with emacs - ;;biblio ; Writes a PhD for you (citation needed) - (eval +overlay) ; run code, run (also, repls) - ;;gist ; interacting with github gists - lookup ; navigate your code and its documentation - ;;lsp ; M-x vscode - lsp2 ; my custom one - magit ; a git porcelain for Emacs - ;;make ; run make tasks from Emacs - ;;pass ; password manager for nerds - pdf ; pdf enhancements - ;;prodigy ; FIXME managing external services & code builders - ;;rgb ; creating color strings - ;;taskrunner ; taskrunner for all your projects - ;;terraform ; infrastructure as code - ;;tmux ; an API for interacting with tmux - ;;upload ; map local to remote projects via ssh/ftp - - :os - (:if IS-MAC macos) ; improve compatibility with macOS - ;;tty ; improve the terminal Emacs experience - - :lang - ;;agda ; types of types of types of types... - ;;beancount ; mind the GAAP - (cc +lsp) ; C > C++ == 1 - ;;clojure ; java with a lisp - ;;common-lisp ; if you've seen one lisp, you've seen them all - ;;coq ; proofs-as-programs - ;;crystal ; ruby at the speed of c - (csharp +lsp) ; unity, .NET, and mono shenanigans - ;;data ; config/data formats - ;;(dart +flutter) ; paint ui and not much else - ;;dhall - ;;elixir ; erlang done right - ;;elm ; care for a cup of TEA? - emacs-lisp ; drown in parentheses - ;;erlang ; an elegant language for a more civilized age - ;;ess ; emacs speaks statistics - ;;factor - ;;faust ; dsp, but you get to keep your soul - ;;fsharp ; ML stands for Microsoft's Language - ;;fstar ; (dependent) types and (monadic) effects and Z3 - ;;gdscript ; the language you waited for - ;;(go +lsp) ; the hipster dialect - (haskell +lsp) ; a language that's lazier than I am - ;;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 - ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) - ;;julia ; a better, faster MATLAB - kotlin ; a better, slicker Java(Script) - latex ; writing papers in Emacs has never been so fun - ;;lean ; for folks with too much to prove - ;;ledger ; be audit you can be - lua ; one-based indices? one-based indices - markdown ; writing docs for people to ignore - ;;nim ; python + lisp at the speed of c - nix ; I hereby declare "nix geht mehr!" - ;;ocaml ; an objective camel - (org +lsp) ; organize your plain life in plain text - ;;php ; perl's insecure younger brother - ;;plantuml ; diagrams for confusing people more - ;;purescript ; javascript, but functional - (python +lsp) ; beautiful is better than ugly - qt ; the 'cutest' gui framework ever - ;;racket ; a DSL for DSLs - ;;raku ; the artist formerly known as perl6 - ;;rest ; Emacs as a REST client - ;;rst ; ReST in peace - ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} - (rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() - ;;scala ; java, but good - ;;(scheme +guile) ; a fully conniving family of lisps - sh ; she sells {ba,z,fi}sh shells on the C xor - ;;sml - ;;solidity ; do you need a blockchain? No. - ;;swift ; who asked for emoji variables? - ;;terra ; Earth and Moon in alignment for performance. - ;;web ; the tubes - ;;yaml ; JSON, but readable - ;;zig ; C, but simpler - :w:email - ;;(mu4e +org +gmail) - ;;notmuch - ;;(wanderlust +gmail) - - :app - ;;calendar - ;;emms - ;;everywhere ; *leave* Emacs!? You must be joking - ;;irc ; how neckbeards socialize - ;;(rss +org) ; emacs as an RSS reader - ;;twitter ; twitter client https://twitter.com/vnought - - :config - ;;literate - (default +bindings +smartparens)) diff --git a/doom/.config/doom/init.el b/doom/.config/doom/init.el index 1ca8089..e15e1e1 100644 --- a/doom/.config/doom/init.el +++ b/doom/.config/doom/init.el @@ -20,8 +20,8 @@ ;;layout ; auie,ctsrnm is the superior home row :completion - (corfu +icons +orderless) ; the even more ultimate completion backend - ;;(company +icons +childframe) ; the ultimate code completion backend + ;;(corfu +icons +orderless) ; the even more ultimate completion backend + (company +icons +childframe) ; the ultimate code completion backend ;;(helm +fuzzy) ; the *other* search engine for love and life ;;ido ; the other *other* search engine... ;;(ivy +fuzzy) ; a search engine for love and life @@ -95,8 +95,8 @@ (eval +overlay) ; run code, run (also, repls) ;;gist ; interacting with github gists lookup ; navigate your code and its documentation - ;;lsp ; M-x vscode - lsp2 ; my custom one + lsp ; M-x vscode + ;;lsp2 ; my custom one magit ; a git porcelain for Emacs ;;make ; run make tasks from Emacs ;;pass ; password manager for nerds @@ -117,7 +117,7 @@ ;;beancount ; mind the GAAP (cc +lsp) ; C > C++ == 1 ;;clojure ; java with a lisp - ;;common-lisp ; if you've seen one lisp, you've seen them all + common-lisp ; if you've seen one lisp, you've seen them all ;;coq ; proofs-as-programs ;;crystal ; ruby at the speed of c (csharp +lsp) ; unity, .NET, and mono shenanigans @@ -173,7 +173,7 @@ ;;web ; the tubes ;;yaml ; JSON, but readable ;;zig ; C, but simpler - :w:email + :email ;;(mu4e +org +gmail) ;;notmuch ;;(wanderlust +gmail) @@ -183,7 +183,7 @@ ;;emms ;;everywhere ; *leave* Emacs!? You must be joking ;;irc ; how neckbeards socialize - ;;(rss +org) ; emacs as an RSS reader + (rss +org) ; emacs as an RSS reader ;;twitter ; twitter client https://twitter.com/vnought :config diff --git a/doom/.config/doom/lisp/programs.el b/doom/.config/doom/lisp/programs.el new file mode 100644 index 0000000..ac3f660 --- /dev/null +++ b/doom/.config/doom/lisp/programs.el @@ -0,0 +1,9 @@ +;;; ../../dotfiles/doom/.config/doom/lisp/programs.el -*- lexical-binding: t; -*- + +;; make a function to run a program with a given name and arguments +(defun run-program (name &rest args) + (interactive) + (let ((program (executable-find name))) + (if program + (apply #'start-process name nil program args) + (error "Could not find program %s" name)))) diff --git a/doom/.config/doom/my_stuff.el b/doom/.config/doom/my_stuff.el new file mode 100644 index 0000000..f998cfd --- /dev/null +++ b/doom/.config/doom/my_stuff.el @@ -0,0 +1,129 @@ +;;; ../../dotfiles/doom/.config/doom/my_stuff.el -*- lexical-binding: t; -*- + +(defun emenu () + "List all executable programs in the PATH environment variable and open the selected one. + Any text entered after the program name (separated by a space) is taken as arguments to the program." + (interactive) + (let* ((path-dirs (delete-dups (split-string (getenv "PATH") path-separator))) + (executables (apply #'append + (mapcar #'(lambda (dir) + (when (file-directory-p dir) + (mapcar #'file-name-nondirectory + (directory-files dir t ".+" + 'nosort)))) + path-dirs))) + (buf (generate-new-buffer "Programs"))) + (with-current-buffer buf + (insert (mapconcat 'identity executables "\n"))) + (let* ((program (completing-read "Program: " executables)) + (args (if (string-match (concat "^" program " ") (buffer-substring-no-properties + (line-beginning-position) + (line-end-position))) + (substring-no-properties (buffer-substring-no-properties + (line-beginning-position) + (line-end-position)) (length program) nil) + nil)) + (program-args (if args (concat program " " args) program))) + (when program + (start-process-shell-command program nil program-args) + (kill-buffer buf))))) +(map! :leader + :desc "Emenu" "d e" #'emenu) + + +;; open pdfs scaled in zathura +(defun open-pdf-with-zathura () + (interactive) + (start-process "zathura" nil "zathura" (buffer-file-name))) + +(add-hook 'pdf-view-mode-hook + (lambda () + (open-pdf-with-zathura) + (kill-buffer))) + +;; open images in imv +(defun open-image-with-imv () + "Open the current image file with imv, then kill the current buffer and +open a dired buffer in the directory of the image file." + (interactive) + (let* ((current-file (buffer-file-name)) + (directory (file-name-directory current-file)) + (all-files (directory-files directory nil "\\(png\\|jpg\\|jpeg\\|gif\\|bmp\\)$")) + (selected-file (file-relative-name current-file directory)) + (selected-index (cl-position selected-file all-files :test #'equal)) + (sorted-files (append (nthcdr selected-index all-files) + (butlast all-files (- (length all-files) selected-index))))) + (apply 'start-process "imv" nil "imv" sorted-files)) + (let ((image-dir (when buffer-file-name (file-name-directory buffer-file-name)))) + (kill-buffer) + (when image-dir + (cd image-dir) + (dired image-dir)))) + +(add-hook 'image-mode-hook + (lambda () + (open-image-with-imv))) + + +(add-hook 'doom-switch-buffer-hook + (lambda () + (if (string= (buffer-name) "*doom*") + (elcord-mode -1) + (elcord-mode 1)))) + +;; search forwards for link and copy the link under point to the clipboard withouth external dependencies +(defun elfeed-copy-image () + "Copy the URL of the image under point to the clipboard." + (interactive) + (or (search-forward "link" nil t) + (search-backward "link" nil t)) + (let ((url (get-text-property (point) 'shr-url))) + (if url + (progn + (message (concat "Copying image URL to clipboard: " url)) + (kill-new url) + (message "Copied image URL to clipboard.")) + (message "No image under point.")))) +;;bind the function to a key spc i c +(map! :leader + :desc "Copy image URL to clipboard" "i c" #'elfeed-copy-image) + + +(defun open-video-with-mpv () + "Open the current video file with mpv, then kill the current buffer and +open a dired buffer in the directory of the video file." + (interactive) + (setq large-file-warning-threshold nil) ; disable threshold + (let ((current-file (buffer-file-name))) + (start-process "mpv" nil "mpv" current-file)) + (let ((video-dir (when buffer-file-name (file-name-directory buffer-file-name)))) + (kill-buffer) + (when video-dir + (cd video-dir) + (dired video-dir)))) + +(add-hook 'find-file-hook + (lambda () + (when (and buffer-file-name + (string-match-p "\\(mp4\\|avi\\|mkv\\|webm\\|flv\\|mov\\|wmv\\)$" buffer-file-name)) + (open-video-with-mpv)))) + + +(defun open-audio-with-mpv () + "Open the current audio file with mpv, then kill the current buffer and +open a dired buffer in the directory of the audio file." + (interactive) + (setq large-file-warning-threshold nil) ; disable threshold + (let ((current-file (buffer-file-name))) + (start-process "mpv" nil "mpv" "--no-video" current-file)) + (let ((audio-dir (when buffer-file-name (file-name-directory buffer-file-name)))) + (kill-buffer) + (when audio-dir + (cd audio-dir) + (dired audio-dir)))) + +(add-hook 'find-file-hook + (lambda () + (when (and buffer-file-name + (string-match-p "\\(mp3\\|flac\\|wav\\|aac\\|ogg\\|m4b\\)$" buffer-file-name)) + (open-audio-with-mpv))))