diff --git a/.gitignore b/.gitignore index c08bd77..8e2208a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,8 @@ ################################################################################ # Configs -emacs/custom.el +emacs/spacemacs.d/custom.el +emacs/spacemacs.d/.spacemacs.env i3/config vim/backup/* vim/autoload/* diff --git a/emacs/doom.d/config.el b/emacs/doom.d/config.el new file mode 100644 index 0000000..e38c5ee --- /dev/null +++ b/emacs/doom.d/config.el @@ -0,0 +1,17 @@ +;;; ~/.doom.d/config.el -*- lexical-binding: t; -*- + +;; Set font +(setq doom-font (font-spec :family "FuraCode NF" :size 15)) + +;; Orgmode +;; Set orgmode dir +(custom-set-variables '(org-directory "~/org")) +;; Default location for image location. +(setq-default org-download-image-dir "~/org/resources/") +;; Enable word wrap +(add-hook 'org-mode-hook #'visual-line-mode) +;; Orgmode: Enable md export +(eval-after-load "org" '(require 'ox-md nil t)) +;; Deft: Set path to Org-mope Directory +(setq deft-directory "~/org/") + diff --git a/emacs/doom.d/init.el b/emacs/doom.d/init.el new file mode 100644 index 0000000..0a85bcc --- /dev/null +++ b/emacs/doom.d/init.el @@ -0,0 +1,184 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; Copy this file to ~/.doom.d/init.el or ~/.config/doom/init.el ('doom +;; quickstart' will do this for you). The `doom!' block below controls what +;; modules are enabled and in what order they will be loaded. Remember to run +;; 'doom refresh' after modifying it. +;; +;; More information about these modules (and what flags they support) can be +;; found in modules/README.org. + +(doom! :input + ;;chinese + ;;japanese + + :completion + (company ; the ultimate code completion backend + +childframe + ) + helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ;;(ivy ; a search engine for love and life + ;; +fuzzy + ;;) + + :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 + fill-column ; a `fill-column' indicator + hl-todo ; highlight TODO/FIXME/NOTE tags + ;;indent-guides ; highlighted indent columns + modeline ; snazzy, Atom-inspired modeline, plus API + nav-flash ; blink the current line after jumping + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup ; tame sudden yet inevitable temporary windows + +all ; catch all popups that start with an asterix + +defaults) ; default popup rules + pretty-code ; replace bits of code with pretty symbols + ;;tabbar ; FIXME an (incomplete) 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 + + :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 + ;;lispy ; vim for lisp, for people who dont 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 + + :emacs + (dired ; making dired pretty [functional] + +ranger ; bringing the goodness of ranger to dired + +icons ; colorful icons for dired-mode + ) + electric ; smarter, keyword-based electric-indent + vc ; version-control and Emacs, sitting in a tree + + :term + ;;eshell ; a consistent, cross-platform shell (WIP) + ;;shell ; a terminal REPL for Emacs + ;;term ; terminals in Emacs + ;;vterm ; another terminals in Emacs + + :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 + eval ; run code, run (also, repls) + flycheck ; tasing you for every semicolon you forget + flyspell ; tasing you for misspelling mispelling + ;;gist ; interacting with github gists + (lookup ; helps you navigate your code and documentation + +docsets) ; ...or in Dash docsets locally + ;;lsp + ;;macos ; MacOS-specific commands + 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 + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + ;;upload ; map local to remote projects via ssh/ftp + ;;wakatime + + :lang + ;;agda ; types of types of types of types... + ;;assembly ; assembly for fun or debugging + ;;cc ; C/C++/Obj-C madness + ;;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 ; unity, .NET, and mono shenanigans + data ; config/data formats + ;;erlang ; an elegant language for a more civilized age + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;ess ; emacs speaks statistics + ;;fsharp ; ML stands for Microsoft's Language + go ; the hipster dialect + ;;(haskell +intero) ; a language that's lazier than I am + ;;hy ; readability of scheme w/ speed of python + ;;idris ; + ;;(java +meghanada) ; 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 + ;;ledger ; an accounting system in Emacs + ;;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 ; organize your plain life in plain text + +dragndrop ; file drag & drop support + +ipython ; ipython support for babel + +pandoc ; pandoc integration into org's exporter + +present) ; using Emacs for presentations + ;;perl ; write code no one else can comprehend + ;;php ; perl's insecure younger brother + ;;plantuml ; diagrams for confusing people more + ;;purescript ; javascript, but functional + ;;python ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + ;;racket ; a DSL for DSLs + rest ; Emacs as a REST client + ruby ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + ;;rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scala ; java, but good + sh ; she sells {ba,z,fi}sh shells on the C xor + ;;solidity ; do you need a blockchain? No. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + web ; the tubes + ;;vala ; GObjective-C + + :email + ;;(mu4e +gmail) ; WIP + ;;notmuch ; WIP + ;;(wanderlust +gmail) ; WIP + + ;; Applications are complex and opinionated modules that transform Emacs + ;; toward a specific purpose. They may have additional dependencies and + ;; should be loaded late. + :app + ;;calendar + ;;irc ; how neckbeards socialize + ;;(rss +org) ; emacs as an RSS reader + ;;twitter ; twitter client https://twitter.com/vnought + ;;(write ; emacs as a word processor (latex + org + markdown) + ;; +wordnut ; wordnet (wn) search + ;; +langtool) ; a proofreader (grammar/style check) for Emacs + + :collab + ;;floobits ; peer programming for a price + ;;impatient-mode ; show off code over HTTP + + :config + ;; For literate config users. This will tangle+compile a config.org + ;; literate config in your `doom-private-dir' whenever it changes. + ;;literate + + ;; The default module sets reasonable defaults for Emacs. It also + ;; provides a Spacemacs-inspired keybinding scheme and a smartparens + ;; config. Use it as a reference for your own modules. + (default +bindings +smartparens)) diff --git a/emacs/doom.d/packages.el b/emacs/doom.d/packages.el new file mode 100644 index 0000000..6456fed --- /dev/null +++ b/emacs/doom.d/packages.el @@ -0,0 +1,8 @@ +;; -*- no-byte-compile: t; -*- +;;; ~/.doom.d/packages.el + +;;; Examples: +;; (package! pretty-mode) +;; (package! some-package) +;; (package! another-package :recipe (:fetcher github :repo "username/repo")) +;; (package! builtin-package :disable t) diff --git a/emacs/makefile b/emacs/makefile index 1e4d811..9671875 100644 --- a/emacs/makefile +++ b/emacs/makefile @@ -1,8 +1,16 @@ -SRC_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) -SPACEMACSD := ~/.spacemacs.d +SRC_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) EMACSD := ~/.emacs.d +FRAMEWORK := ${EMACS_FRAMEWORK} + +# Doom Config +DOOMD := ~/.doom.d +DOOM_URL := https://github.com/hlissner/doom-emacs + +# Spacemacs config +SPACEMACSD := ~/.spacemacs.d SPACEMACS_URL := https://github.com/syl20bnr/spacemacs + include ../lib/shared.mk install: | init update @@ -12,12 +20,26 @@ ifndef IS_SSH $(info Remote connection. Not installing emacs config.) else ifneq ($(call cmd_exist,emacs), true) $(info Emacs not installed ) +else ifeq ($(FRAMEWORK), doom) + $(info => installing doom.) + $(MAKE) -C $(SRC_DIR) doom_init + $(mk_link) $(SRC_DIR)/doom.d $(DOOMD) else $(info => installing spacemacs.) $(MAKE) -C $(SRC_DIR) spacemacs_init $(mk_link) $(SRC_DIR) $(SPACEMACSD) endif +doom_init: +ifeq ($(shell [ ! -e $(EMACSD) ] $(return_val_truthy) ), true) + git clone $(DOOM_URL) $(EMACSD) ; $(report) "Doom installed" + $(report) warn "Doom quickstart is about to start. This will take a minute" ; sleep 3 + ~/.emacs.d/bin/doom --yes quickstart + ~/.emacs.d/bin/doom --yes compile ':core' +else + $(report) info "$(EMACSD) already exist. Skipping." +endif + spacemacs_init: ifeq ($(shell [ ! -e $(EMACSD) ] $(return_val_truthy) ), true) git clone -b develop --single-branch $(SPACEMACS_URL) $(EMACSD) ; $(report) "Spacemacs installed" @@ -26,12 +48,16 @@ else endif update: -ifeq ($(shell [ -e $(EMACSD) ] $(return_val_truthy) ), true) +ifeq ($(shell [ -e $(EMACSD) ] $(return_val_truthy) ), false) + $(report) info "Emacs directory doesn't exist." +else ifeq ($(FRAMEWORK), doom) + ~/.emacs.d/bin/doom --yes update + ~/.emacs.d/bin/doom --yes upgrade + $(report) info "Doom updated" +else cd $(EMACSD) \ && git pull \ ; $(report) "Spacemacs updated" -else - $(report) info "Emacs directory doesn't exist." endif remove: diff --git a/emacs/init.el b/emacs/spacemacs.d/init.el similarity index 100% rename from emacs/init.el rename to emacs/spacemacs.d/init.el diff --git a/emacs/user-config.el b/emacs/spacemacs.d/user-config.el similarity index 100% rename from emacs/user-config.el rename to emacs/spacemacs.d/user-config.el diff --git a/zsh/environment/host/zuk/zshenv b/zsh/environment/host/zuk/zshenv index cf00d6b..d4c05e3 100644 --- a/zsh/environment/host/zuk/zshenv +++ b/zsh/environment/host/zuk/zshenv @@ -2,7 +2,7 @@ export GOPATH="$HOME/Code/go" GOLANG_PATH="/usr/lib/go/bin" - DOOM_BIN="$HOME/.emacs.d/bin" - export PATH="$DOOM_BIN:$GOPATH/bin/:$GOLANG_PATH:$PATH" + +export EMACS_FRAMEWORK="doom"