diff --git a/.gitignore b/.gitignore index b2a7079..599d4da 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ !README.org !lisp !lisp/ +!lisp/custom/* !lisp/* lisp/*.el~ lisp/unused.el diff --git a/init.el b/init.el index b6134d6..6af1cb8 100644 --- a/init.el +++ b/init.el @@ -5,6 +5,7 @@ ;;; Code: (add-to-list 'load-path (concat user-emacs-directory "lisp/")) +(add-to-list 'load-path (concat user-emacs-directory "lisp/custom/")) (require '01-custom-early-init) (require '02-custom-package-setup) @@ -13,6 +14,7 @@ (require '05-custom-functions) (require '06-custom-exwm) (require '07-custom-ligatures) +(require '07_5-custom-created-packages) (require '08-custom-packages) (require '09-custom-packages-config) diff --git a/lisp/03-custom-binds.el b/lisp/03-custom-binds.el index 3ba9c72..9510110 100644 --- a/lisp/03-custom-binds.el +++ b/lisp/03-custom-binds.el @@ -10,6 +10,14 @@ (interactive (list my-term-shell))) (ad-activate 'ansi-term) +;; Get shell env vars. +(let ((path (shell-command-to-string ". /Users/leviolson/.bashrc; echo -n $PATH"))) + (setenv "PATH" (concat path ":/usr/local/bin")) + (setq exec-path + (append + (split-string-and-unquote (concat path ":/usr/local/bin") ":") + exec-path))) + (bind-key "" 'eshell) (bind-key "" 'ansi-term) (bind-key "C-c r" '(lambda () (interactive) (load-file user-init-file))) diff --git a/lisp/04-custom-init.el b/lisp/04-custom-init.el index 7103d43..d2b1d88 100644 --- a/lisp/04-custom-init.el +++ b/lisp/04-custom-init.el @@ -8,7 +8,7 @@ (defvar autosave-dir (expand-file-name "~/.emacs.d/autosave/") "Set the default location of autosaves.") (cond ((member "PragmataPro Liga" (font-family-list)) - (set-face-attribute 'default nil :font "PragmataPro Liga-12"))) + (set-face-attribute 'default nil :font "PragmataPro Liga-14"))) (setq initial-scratch-message nil backup-directory-alist (list (cons ".*" backup-dir)) @@ -40,6 +40,7 @@ ;; Indent w/spaces only (setq indent-tabs-mode nil) +(setq-default indent-tabs-mode nil) ;; Prevent stale elisp bytecode (setq load-prefer-newer t) ;; Add newline on save @@ -57,11 +58,25 @@ ;; Set auth source ;; (setq auth-sources '("~/.authinfo.gpg")) +;; Set window location/size +(if (eq system-type 'darwin) + (progn + (set-frame-position (selected-frame) 950 906) + (set-frame-height (selected-frame) 60) + (set-frame-width (selected-frame) 220)) + (message "Don't configure location for other OSes")) + (defalias 'yes-or-no-p 'y-or-n-p) (defvar browse-url-generic-program) -(setq browse-url-generic-program "brave" - browse-url-browser-function 'browse-url-generic) +(defvar engine/browser-function) +;; (setq ; browse-url-generic-program "/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome" + ;; browse-url-browser-function 'browse-url-generic) + +(setq browse-url-browser-function 'browse-url-generic + engine/browser-function 'browse-url-generic + ;; Chrome because Firefox will complain that a copy is already open. + browse-url-generic-program "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome") (defun display-startup-echo-area-message () "Display startup echo area message." diff --git a/lisp/07_5-custom-created-packages.el b/lisp/07_5-custom-created-packages.el new file mode 100644 index 0000000..29a0ad1 --- /dev/null +++ b/lisp/07_5-custom-created-packages.el @@ -0,0 +1,10 @@ +;;; 07_5-custom-created-packages --- Provide all the custom code I've created + +;;; Commentary: + +;;; Code: + +(require 'sfdx) + +(provide '07_5-custom-created-packages) +;;; 07_5-custom-created-packages.el ends here diff --git a/lisp/08-custom-packages.el b/lisp/08-custom-packages.el index 12b13ed..d7d8733 100644 --- a/lisp/08-custom-packages.el +++ b/lisp/08-custom-packages.el @@ -33,6 +33,10 @@ ;;; Code: +;; https://melpa.org/#/async +(use-package async + :ensure t) + ;; https://github.com/myrjola/diminish.el (use-package diminish :ensure t @@ -49,29 +53,6 @@ (("C-c SPC" . just-one-space) ("M-SPC" . ace-jump-mode))) -;; https://github.com/abo-abo/ace-window -(use-package ace-window - :disabled - :ensure t - :bind - ([remap other-window] . ace-window) - :init - (setq aw-keys '(?a ?s ?h ?t ?g ?y ?n ?e ?o ?i))) - -;; https://github.com/hlissner/emacs-doom-themes -(use-package doom-themes - :disabled - :ensure t - :config - (load-theme 'doom-one t)) - -;; https://github.com/belak/base16-emacs -(use-package base16-theme - :disabled - :ensure t - :config - (load-theme 'base16-onedark t)) - ;; https://github.com/NicolasPetton/zerodark-theme (use-package zerodark-theme :ensure t @@ -86,10 +67,10 @@ :commands beacon-mode :demand t :init - (setq beacon-size 30 + (setq beacon-size 70 beacon-color "#5B6268" - beacon-blink-delay 0.2 - beacon-blink-duration 0.5 + beacon-blink-delay 0.1 + beacon-blink-duration 0.4 beacon-blink-when-focused t) (beacon-mode 1)) @@ -108,20 +89,17 @@ :config ;; C-x / to start (defengine google "https://www.google.com/search?q=%s" + :keybinding "a") + (defengine github "https://github.com/search?q=%s" :keybinding "g") + (defengine vlocity "https://success.vlocity.com/s/searchunifylightning?searchString=%s" + :keybinding "v") (defengine duckduckgo "https://duckduckgo.com/?q=%s" :keybinding "d") (defengine melpa "https://melpa.org/#/?q=%s" :keybinding "m") (engine-mode 1)) -;; https://github.com/coldnew/linum-relative -(use-package linum-relative - :disabled - :ensure t - :config - (linum-relative-mode)) - ;; https://github.com/Fanael/rainbow-delimiters (use-package rainbow-delimiters :ensure t @@ -136,32 +114,13 @@ (use-package all-the-icons :ensure t) -(use-package doom-modeline - :disabled - :ensure t - :after (all-the-icons) - :hook (after-init . doom-modeline-mode) - :commands (doom-modeline-def-modeline doom-modeline-set-modeline) - :init - (setq doom-modeline-height 40) - (setq doom-modeline-bar-width 6) - (setq doom-modeline-checker-simple-format nil) - (setq doom-modeline-minor-modes (featurep 'minions)) - :config - (doom-modeline-def-modeline 'leo/custom-modeline - '(bar matches buffer-info remote-host buffer-position parrot selection-info) - '(misc-info minor-modes input-method buffer-encoding major-mode process vcs checker " ")) - (defun leo/setup-custom-doom-modeline () - (doom-modeline-set-modeline 'leo/custom-modeline 'default)) - (add-hook 'doom-modeline-mode-hook 'leo/setup-custom-doom-modeline) - ) - +;; https://github.com/emacs-dashboard/emacs-dashboard (use-package dashboard :ensure t :preface (defvar show-week-agenda-p) :init - (setq dashboard-items '((recents . 6) + (setq dashboard-items '((recents . 10) (bookmarks . 5) (projects . 5) (agenda . 5))) @@ -179,7 +138,7 @@ :ensure t :demand t :bind - ;; ("M-x" . counsel-M-x) + ("M-x" . counsel-M-x) ("C-c k" . counsel-rg) ("C-x C-f" . counsel-find-file) ("C-x f" . counsel-recentf) @@ -205,14 +164,10 @@ (ivy-mode 1) ) -;; https://github.com/DarwinAwardWinner/amx (use-package amx :ensure t - :demand t - :commands (execute-extended-command) - :after (counsel) - :init - (amx-mode 1)) + :config (amx-mode 1) + ) ;; https://github.com/magnars/expand-region.el (use-package expand-region @@ -242,46 +197,7 @@ ("C-{" . mc/mark-previous-like-this) ("C-(" . mc/unmark-previous-like-this)) -;; https://github.com/joodland/bm -(use-package bm - :disabled - :ensure t - :demand t - :bind (("C-x b b" . bm-toggle) - ("C-x b n" . bm-next) - ("C-x b p" . bm-previous)) - :commands (bm-repository-load - bm-repository-save - bm-buffer-save - bm-buffer-save-all - bm-buffer-restore) - :preface - (setq left-fringe-width 6) - (setq right-fringe-width 0) - (defface bm-face '((t nil)) "Specify face used to highlight the current line" :group 'bm) - (defface bm-fringe-face '((t (:background "DarkOrange1" :foreground "DarkOrange1"))) "Specify face used to highlight the fringe" :group 'bm) - (defface bm-fringe-persistent-face '((t (:background "DarkOrange1" :foreground "DarkOrange1"))) "Specify face used to highlight the fringe for persistant bookmarks" :group 'bm) - (defface bm-persistent-face '((t nil)) "Specify face used to highlight the current line for persistant bookmarks" :group 'bm) - (defface fringe '((t nil)) "Specify face used for the fringe" :group 'basic-faces :group 'frames) - :init - (setq bm-restore-repository-on-load t) - :config - (setq bm-cycle-all-buffers t) - (setq bm-repository-file (concat user-emacs-directory "bookmark-repo")) - (setq-default bm-buffer-persistence t) - (setq bm-highlight-style 'bm-highlight-only-fringe) - - (add-hook 'after-init-hook 'bm-repository-load) - (add-hook 'find-file-hooks 'bm-buffer-restore) - (add-hook 'after-revert-hook #'bm-buffer-restore) - (add-hook 'kill-buffer-hook #'bm-buffer-save) - (add-hook 'after-save-hook #'bm-buffer-save) - (add-hook 'vc-before-checkin-hook #'bm-buffer-save) - (add-hook 'kill-emacs-hook #'(lambda nil - (bm-buffer-save-all) - (bm-repository-save)))) - -;; link +;; https://github.com/skeeto/elfeed (use-package elfeed :ensure t :commands (elfeed elfeed-search-set-filter) @@ -300,8 +216,9 @@ ("http://timharford.com/feed/" daily) ("http://understandinguncertainty.org/rss.xml" daily) ("http://pragmaticemacs.com/feed/" emacs) - ("http://www.reddit.com/r/emacs/.rss" emacs) - ("http://planet.emacsen.org/atom.xml" emacs) + ("http://endlessparentheses.com/atom.xml" emacs) + ;; ("http://www.reddit.com/r/emacs/.rss" emacs) + ;; ("http://planet.emacsen.org/atom.xml" emacs) ("http://feeds.feedburner.com/XahsEmacsBlog" emacs) ("http://emacs.stackexchange.com/feeds" emacs) ("https://www.google.com/alerts/feeds/13353713273807811484/2710948715805064535" tesla) @@ -324,7 +241,7 @@ (which-key-setup-minibuffer) (which-key-mode)) -;; TODO https://github.com/lewang/fic-mode +;; https://github.com/lewang/fic-mode (use-package fic-mode :ensure t :hook (prog-mode js-mode javascript-mode) @@ -343,8 +260,6 @@ :config (yas-reload-all)) - - ;; https://company-mode.github.io/ (use-package company :ensure t @@ -390,13 +305,7 @@ ;; (setq projectile-mode-line-prefix " P") (setq projectile-completion-system 'ivy) :config - (projectile-mode 1) - ;; (projectile-register-project-type 'npm '("package.json") - ;; :compile "npm install" - ;; :test "npm test" - ;; :run "npm start" - ;; :test-suffix ".test") - ) + (projectile-mode 1)) ;; https://github.com/rudolfolah/angularjs-mode (use-package angular-mode @@ -433,22 +342,15 @@ :ensure t :mode ("\\.s?css\\'" . scss-mode)) -;; https://elpa.gnu.org/packages/csv-mode.html -(use-package csv-mode - :disabled +;; https://github.com/yoshiki/yaml-mode +(use-package yaml-mode :ensure t - :mode ("\\.csv\\'" . csv-mode)) + :mode ("\\.yml\\'" . yaml-mode)) ;; https://github.com/kwrooijen/cargo.el (use-package cargo :hook (rust-mode . cargo-minor-mode)) -;; https://github.com/andre-r/centered-cursor-mode.el -(use-package centered-cursor-mode - :disabled - :commands centered-cursor-mode - :hook prog-mode) - ;; https://github.com/flycheck/flycheck (use-package flycheck :diminish @@ -467,6 +369,7 @@ :bind ( ("C-," . org-cycle-agenda-files) ("C-c C-d" . org-capture) + ("C-x C-l a" . org-agenda) :map org-mode-map ("M-RET" . org-insert-todo-heading) ) @@ -475,6 +378,7 @@ (defvar org-html-text-markup-alist) :init (setq org-agenda-files '("~/Dropbox/Org/todo.org" + "~/Dropbox/Org/projects.org" "~/Dropbox/Org/archive.org" "~/Dropbox/Org/diary/eaglecrk.org")) (setq org-todo-keywords '((sequence "TODO(t)" "|" "DONE(d)") @@ -520,6 +424,7 @@ (require 'org-tempo)) (org-babel-do-load-languages 'org-babel-load-languages '((js . t) (shell . t) + (restclient . t) (emacs-lisp . t))) (setq org-structure-template-alist '(("r" . "src restclient :results raw") @@ -554,6 +459,17 @@ (add-hook 'org-mode-hook 'add-checkbox-symbol-keywords) ) +(use-package ob-restclient + :ensure t + :config + (setq org-babel-default-header-args:restclient + `((:results . "output")))) + +;; https://github.com/astahlman/ob-async +(use-package ob-async + :ensure t + :after (org)) + ;; https://github.com/sabof/org-bullets (use-package org-bullets :ensure t @@ -561,9 +477,10 @@ :hook (org-mode . org-bullets-mode) :config (set-face-attribute 'org-level-1 nil :height 1.3) - (set-face-attribute 'org-level-2 nil :height 1.1) - (set-face-attribute 'org-level-3 nil :height 1.05) - (set-face-attribute 'org-level-4 nil :height 1.05) + (set-face-attribute 'org-level-2 nil :height 1.15) + (set-face-attribute 'org-level-3 nil :height 1.1) + (set-face-attribute 'org-level-4 nil :height 1.08) + (set-face-attribute 'org-level-5 nil :height 1.05) (set-face-attribute 'org-scheduled-today nil :height 1.0) (set-face-attribute 'org-agenda-date-today nil :height 1.1)) @@ -586,12 +503,6 @@ )) ) -;; https://github.com/seanohalpin/org-link-minor-mode -(use-package org-link-minor-mode - :ensure t - :defer t - :commands (org-link-minor-mode)) - ;; https://github.com/marsmining/ox-twbs (use-package ox-twbs :ensure t @@ -617,6 +528,10 @@ ("M-u" . upcase-dwim) ("M-c" . capitalize-dwim) ("M-l" . downcase-dwim) + ("M-" . sfdx/next-component-file) + ("C-x C-l s p" . sfdx/create-project) + ("C-x C-l s c" . sfdx/create-component) + ("C-x C-l s d" . sfdx/deploy-component-or-project) ) ;; https://github.com/nflath/sudo-edit @@ -625,16 +540,6 @@ :defer t :commands (sudo-edit)) -;; https://github.com/yuya373/emacs-slack -(use-package slack - :disabled - :commands (slack-start) - :init - (setq slack-buffer-emojify t) - (setq slack-prefer-current-team t) - :config - (advice-add 'slack-counts-update :override #'ignore)) - (provide '08-custom-packages) ;;; 08-custom-packages.el ends here diff --git a/lisp/09-custom-packages-config.el b/lisp/09-custom-packages-config.el index a49823c..5041b59 100644 --- a/lisp/09-custom-packages-config.el +++ b/lisp/09-custom-packages-config.el @@ -10,7 +10,10 @@ (diminish 'subword-mode) ;; Dired -(setq list-directory-brief-switches "-al") +(require 'dired-x) +(setq-default dired-omit-files-p t) +(setq list-directory-brief-switches "-al" + dired-omit-files (concat dired-omit-files "^\\.?#\\|\\.DS_Store")) (provide '09-custom-packages-config) diff --git a/lisp/custom/sfdx.el b/lisp/custom/sfdx.el new file mode 100644 index 0000000..06dbc73 --- /dev/null +++ b/lisp/custom/sfdx.el @@ -0,0 +1,109 @@ +;;; sfdx --- Emacs wrapper for basic sfdx cli commands + +;;; Commentary: + +;;; Code: + +(defvar sfdx-create-css) +(setq-default sfdx-create-css t) + +(defun sfdx/next-component-file () + "Find next file with the same name, but different file extension." + (interactive) + (let ( + (current-file-name (file-name-sans-extension (buffer-file-name))) + (current-ext (file-name-extension (buffer-file-name))) + ) + (when (string= current-ext "js") + (find-file (concat current-file-name ".html"))) + (when (string= current-ext "html") + (if (file-exists-p (concat current-file-name ".css")) + (find-file (concat current-file-name ".css")) + (if (and sfdx-create-css (yes-or-no-p "Do you want to create a CSS file?")) + (find-file (concat current-file-name ".css")) + (setq-local sfdx-create-css nil) + (find-file (concat current-file-name ".js"))))) + (when (string= current-ext "css") + (find-file (concat current-file-name ".js"))) + )) + +(defun sfdx--goto-project (project-path) + "Internal function to load the PROJECT-PATH in current window." + ;; DEBUG - this isn't working to auto-open the folder. + ;; (find-file project-path) + (message project-path)) + +(defun sfdx/create-project () + "Create a new 'standard' SFDX project." + (interactive) + (let ( + (process "sfdx-create-project") + (project-name (read-string "Project Name: ")) + (project-dir (read-directory-name "Directory: " "~/Projects")) + ) + (async-start-process process "sh" `(lambda (result) (sfdx--goto-project (concat (expand-file-name ',project-dir) ',project-name))) "-c" (concat "sfdx force:project:create --projectname " project-name " --outputdir " (expand-file-name project-dir) " --template standard")) + )) + +(defun sfdx/create-component () + "Create a new Lightning Web Component." + (interactive) + (if (locate-dominating-file buffer-file-name "force-app") + (let ((process "*sfdx-create-component-process*") + (buffer "*sfdx*") + (output-path (concat (locate-dominating-file buffer-file-name "force-app") "force-app/main/default/lwc")) + (comp-name (read-string "Component Name: ")) + ) + (call-process (concat "sfdx force:lightning:component:create --type lwc --componentname " comp-name " --outputdir " output-path) nil buffer) + (find-file (concat output-path "/" comp-name "/" comp-name ".js")) + ) + (message "You must be in an SFDX project to run that command!"))) + +(defun sfdx--deploy (component comp-name) + "Internal function to deploy COMP-NAME asyncronously or project if COMPONENT is nil after validations." + (let ((process "sfdx-deploy-output") + (cd-dir (locate-dominating-file buffer-file-name "force-app")) + (output-path (concat (locate-dominating-file buffer-file-name "force-app") "force-app/main/default")) + ) + (if component + (async-start-process process "sh" (lambda (result) (message "Deploy Process Finished")) "-c" (concat "cd " cd-dir "; sfdx force:source:deploy --sourcepath force-app/main/default/lwc/" comp-name " --loglevel fatal")) + (async-start-process process "sh" (lambda (result) (message "Deploy Process Finished")) "-c" (concat "cd " cd-dir "; sfdx force:source:deploy --sourcepath force-app/main/default/ --loglevel fatal")) + ) + ) + ) + +(defun sfdx/deploy-component-or-project () + "Deploy the current component or project to target." + (interactive) + (let ((current-folder (file-name-nondirectory + (directory-file-name + (file-name-directory (buffer-file-name)))))) + (if (locate-dominating-file buffer-file-name "lwc") + (prog1 + ;; Possibly in a component folder, but lets makes sure its not just the LWC folder. + (if (string= current-folder "lwc") + (prog1 + ;; Not in a component, deploy project. + (message "Deploying Project...") + (sfdx--deploy nil current-folder)) + ;; In a component, deploy component. + (message "Deploying Component...") + (sfdx--deploy t current-folder))) + + (prog1 + ;; Are we in a project? + (if (locate-dominating-file buffer-file-name "force-app") + (prog1 + ;; In project, deploy project. + (message "Deploying Project...") + (sfdx--deploy nil current-folder)) + (prog1 + ;; Not in an SFDX project. + (message "You are not in a component folder or an SFDX project!")) + ) + ) + ) + ) + ) + +(provide 'sfdx) +;;; sfdx.el ends here