Browse Source

Streamlining for Mac OS and adding custom SFDX integration

master
Levi Olson 4 years ago
parent
commit
d5eb174203
8 changed files with 199 additions and 146 deletions
  1. +1
    -0
      .gitignore
  2. +2
    -0
      init.el
  3. +8
    -0
      lisp/03-custom-binds.el
  4. +18
    -3
      lisp/04-custom-init.el
  5. +10
    -0
      lisp/07_5-custom-created-packages.el
  6. +47
    -142
      lisp/08-custom-packages.el
  7. +4
    -1
      lisp/09-custom-packages-config.el
  8. +109
    -0
      lisp/custom/sfdx.el

+ 1
- 0
.gitignore View File

@ -6,6 +6,7 @@
!README.org
!lisp
!lisp/
!lisp/custom/*
!lisp/*
lisp/*.el~
lisp/unused.el

+ 2
- 0
init.el View File

@ -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)

+ 8
- 0
lisp/03-custom-binds.el View File

@ -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 "<M-return>" 'eshell)
(bind-key "<M-S-return>" 'ansi-term)
(bind-key "C-c r" '(lambda () (interactive) (load-file user-init-file)))

+ 18
- 3
lisp/04-custom-init.el View File

@ -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."

+ 10
- 0
lisp/07_5-custom-created-packages.el View File

@ -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

+ 47
- 142
lisp/08-custom-packages.el View File

@ -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-<tab>" . 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

+ 4
- 1
lisp/09-custom-packages-config.el View File

@ -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)

+ 109
- 0
lisp/custom/sfdx.el View File

@ -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

Loading…
Cancel
Save