From d8b0b372f8c9d85601d7599dfdb25a60d161da5a Mon Sep 17 00:00:00 2001 From: natto1784 Date: Fri, 18 Mar 2022 06:24:13 +0530 Subject: [PATCH] move to babel emacs configuration --- .gitignore | 1 + flake.lock | 54 ++-- home/modules/baremacs.nix | 2 + home/natto/config/emacs/README.org | 1 + home/natto/config/emacs/config.org | 467 +++++++++++++++++++++++++++++ home/natto/config/emacs/init.el | 348 +-------------------- home/natto/services.nix | 7 +- overlays/emacs/default.nix | 7 +- overlays/packages.nix | 2 +- 9 files changed, 510 insertions(+), 379 deletions(-) create mode 120000 home/natto/config/emacs/README.org create mode 100644 home/natto/config/emacs/config.org diff --git a/.gitignore b/.gitignore index 959197f..a3890a0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ \#*\# .*.~*~ ~*~ +*.*~ diff --git a/flake.lock b/flake.lock index 48ab485..2ec664b 100644 --- a/flake.lock +++ b/flake.lock @@ -18,11 +18,11 @@ }, "emacs": { "locked": { - "lastModified": 1647335267, - "narHash": "sha256-O//CN+V9b7dbnDmWRdrMFVk2Uq0COMLh8PryN4W7fIc=", + "lastModified": 1647537202, + "narHash": "sha256-Ku2gXwzaC9sZGcc8EuJzJLRSGRInkMy/D7O+6LvF4Mk=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "d43b200ed5675bf912440975435dd7a7363f9481", + "rev": "6fdb3c0cefe2574073b31b27d2b2f5df9532cd5a", "type": "github" }, "original": { @@ -97,11 +97,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1647210221, - "narHash": "sha256-mUWwEq+ReRQjIqj28ClqmBDyKV4fr6C5ufqlXLzZFsk=", + "lastModified": 1647545448, + "narHash": "sha256-Y6W0Pl+M8ewr1TFhi5dsrs0dTlE3AeGFesnpva1xSLM=", "owner": "nix-community", "repo": "home-manager", - "rev": "8eb7c009f09f1f7b1ec151e5d537104acf42213a", + "rev": "e01facc34045cf0026ba61d04e69c61e11f99408", "type": "github" }, "original": { @@ -151,11 +151,11 @@ }, "master": { "locked": { - "lastModified": 1647362511, - "narHash": "sha256-eVJNniAVP8RSH9EWcAnj1td9jJkY+J257QD6wfd7FLQ=", + "lastModified": 1647560508, + "narHash": "sha256-AiRKvhxjZZWIYszcEs+FpvNEyxg5ywO3vH+SyX+14zI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d1b993abaa6dc6df5014bb70fd1111f39f310bec", + "rev": "b4f7a460fbf43787d1e1ed3b9cec2df00a55c882", "type": "github" }, "original": { @@ -194,11 +194,11 @@ }, "locked": { "dir": "contrib", - "lastModified": 1647310800, - "narHash": "sha256-DvKvdwXp1K8dtxk+IIGK/HxurmMRhkuTdfj44rDRsdw=", + "lastModified": 1647494484, + "narHash": "sha256-8CWqEy8jpY0CJDjXKPbK9uYlZYT+vR6HQ39TQFXPcsY=", "owner": "neovim", "repo": "neovim", - "rev": "bef7552f7088ff411bd68fc236cfd7b269ad157e", + "rev": "d238b8f6003d34cae7f65ff7585b48a2cd9449fb", "type": "github" }, "original": { @@ -214,11 +214,11 @@ "utils": "utils_3" }, "locked": { - "lastModified": 1646694838, - "narHash": "sha256-CtxpyUuMRnNn+wsD3Oxi0YPnxESWj6C2l1rgED23LSQ=", + "lastModified": 1647368676, + "narHash": "sha256-pn262ck0TNbqYKO90smr3YgzWeCCkFriDOSJcTOkUW4=", "owner": "fufexan", "repo": "nix-gaming", - "rev": "fd45bde30b59f0ac22eabbfff9dba1ccd7c8c76d", + "rev": "6e3f57f9c14ceb90ef83f1a40b96b14c85a8eede", "type": "github" }, "original": { @@ -318,11 +318,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1647125019, - "narHash": "sha256-PXA76/iIqtbrA0ydCyc7Wpdw7TQTnfEowM87YtTXfB4=", + "lastModified": 1647297614, + "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "b0e141e3fe13ec21f50429773d2e3890e02a80da", + "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", "type": "github" }, "original": { @@ -350,11 +350,11 @@ }, "nur": { "locked": { - "lastModified": 1647319391, - "narHash": "sha256-aP33NF1dw0keAsRcT6f416NMR6sqyoMiRmFz3YgTWsM=", + "lastModified": 1647546024, + "narHash": "sha256-qu/RbUkx8WUYwwWRoHW9wAE61LQ17PMc93v9jZm6PDE=", "owner": "nix-community", "repo": "NUR", - "rev": "b8be7192aa2050aadfd06cd14c776f0478e9a146", + "rev": "5ad38a2b7522d3b18f73eab7a4c573244b90c18e", "type": "github" }, "original": { @@ -370,11 +370,11 @@ "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1647332154, - "narHash": "sha256-fCZWPR53MfOHhVC4VEjYeIWPzJbCo/lLOubNoswfTS0=", + "lastModified": 1647504937, + "narHash": "sha256-zL+TCRbdypKSFxab09lU4uR52MusKf7vzo50ee6fVIs=", "owner": "nix-community", "repo": "neovim-nightly-overlay", - "rev": "0817ca26e18dbf5eb8dc61a7e68f9d7f6b3fbe68", + "rev": "1de1018a5810fd123f0f57798cac2a2a8df6bb85", "type": "github" }, "original": { @@ -423,11 +423,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1647311412, - "narHash": "sha256-QS/7FRv48jCp/5t9jAgJL+Psx+wuUdwu5g35XHLmpDw=", + "lastModified": 1647483960, + "narHash": "sha256-DotGgzHOm+MQjoCyOG56n02HBpTak1s7yDH9gyNI8ME=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "e005f7e14ce46b4309ac723ba2c8acbc6c6cee61", + "rev": "34dd07a5d195f33b7060468c854b0199b5f7b232", "type": "github" }, "original": { diff --git a/home/modules/baremacs.nix b/home/modules/baremacs.nix index f534f80..f2b920a 100644 --- a/home/modules/baremacs.nix +++ b/home/modules/baremacs.nix @@ -135,6 +135,8 @@ in }/bin/'' + editor + head (optional (editor == "emacsclient") '' "''${@:---create-frame}"'')); }; + packages = [ cfg.package ]; + file = mkIf cfg.copyConfigFiles.enable (mapAttrs' (n: v: diff --git a/home/natto/config/emacs/README.org b/home/natto/config/emacs/README.org new file mode 120000 index 0000000..f13833e --- /dev/null +++ b/home/natto/config/emacs/README.org @@ -0,0 +1 @@ +config.org \ No newline at end of file diff --git a/home/natto/config/emacs/config.org b/home/natto/config/emacs/config.org new file mode 100644 index 0000000..42d815d --- /dev/null +++ b/home/natto/config/emacs/config.org @@ -0,0 +1,467 @@ +#+TITLE: My Emacs Configuration +#+AUTHOR: Amneesh Singh +#+PROPERTY: header-args:emacs-lisp :tangle yes + +* Color Variables +idk random variables to match my color theme +#+begin_src emacs-lisp +; -*- lexical-binding: t; -*- +(setq +c-bg "#1d1f21" +c-fg "#c5c8c6" +c-red "#912226" +c-green "#778900" +c-yellow "#ae7b00" +c-blue "#1d2594" +c-magenta "#682a9b" +c-cyan "#2b6651" +c-white "#929593" +c-black "#969896" +c-red-2 "#cc6666" +c-green-2 "#b5bd68" +c-yellow-2 "#f0c674" +c-blue-2 "#81a2be" +c-magenta-2 "#b294bb" +c-cyan-2 "#8abeb7" +c-white-2 "#ecebec") +#+end_src + + +* Settings +** Setting the default face +#+begin_src emacs-lisp +(set-face-attribute 'default nil :font "Monoid" :height 120) +#+end_src + +** Some mode settings based on personal preferences +#+begin_src emacs-lisp +(global-hl-line-mode 1) +(scroll-bar-mode 0) +(tool-bar-mode 0) +(menu-bar-mode 0) +(fringe-mode 0) +(cua-mode 1) +(global-display-line-numbers-mode 1) +#+end_src + +** Setting some variables +#+begin_src emacs-lisp +(setq initial-major-mode 'emacs-lisp-mode + frame-resize-pixelwise t + auto-window-vscroll nil + scroll-step 1 + display-line-numbers-type 'relative + confirm-kill-processes nil + inhibit-startup-screen t) +#+end_src + +** Emacs startup hook +#+begin_src emacs-lisp +(add-hook 'emacs-startup-hook + (lambda () (delete-other-windows)) t) +#+end_src + + +* Packages + +** Add Melpa to package archives +#+begin_src emacs-lisp +(require 'package) +(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) +(package-initialize) +(require 'use-package) +#+end_src + + +** Visual packages +*** Add solaire mode +#+begin_src emacs-lisp +(use-package solaire-mode + :config + (solaire-mode)) +#+end_src + +*** Set theme +#+begin_src emacs-lisp +(use-package doom-themes + :config + (setq doom-themes-enable-bold t + doom-themes-enable-italic t + doom-themes-treemacs-theme "doom-colors") + (load-theme 'doom-tomorrow-night t) + (doom-themes-visual-bell-config) + (doom-themes-treemacs-config) + (doom-themes-org-config)) +#+end_src + + +** Configure ivy +Remap ivy keys to Colemak-DH +#+begin_src emacs-lisp +(use-package ivy + :config + (define-key ivy-minibuffer-map (kbd "C-n") 'ivy-next-line) + (define-key ivy-minibuffer-map (kbd "C-e") 'ivy-previous-line) + (define-key ivy-minibuffer-map (kbd "C-i") 'ivy-done) + (ivy-mode 1)) +#+end_src + +** Evil +*** Configure evil mode +#+begin_src emacs-lisp +(use-package evil + :config + (evil-set-initial-state 'vterm-mode 'insert) + (evil-set-undo-system 'undo-tree) + (setq evil-shift-width 2) + (evil-mode 1)) +#+end_src + +*** Configure undo tree +To undo and redo easily like vi +#+begin_src emacs-lisp +(use-package undo-tree + :config + (global-undo-tree-mode 1)) +#+end_src + +*** Configure evil-colemak-basics +To get colemak-dh bindings in evil mode +#+begin_src emacs-lisp +(use-package evil-colemak-basics + :init + (setq evil-colemak-basics-layout-mod 'mod-dh) + :config + (global-evil-colemak-basics-mode 1)) +#+end_src + +** Treemacs +*** Configure treemacs +#+begin_src emacs-lisp +(use-package treemacs + :config + (treemacs-filewatch-mode 1) + (treemacs-display-current-project-exclusively) + (treemacs-git-mode 'deferred)) +#+end_src + +** Configure treemacs-evil +Configure treemacs-evil to get colemak-dh bindings +#+begin_src emacs-lisp +(use-package treemacs-evil :config + (define-key evil-treemacs-state-map (kbd "n") #'treemacs-next-line) + (define-key evil-treemacs-state-map (kbd "e") #'treemacs-previous-line) + (define-key evil-treemacs-state-map (kbd "M-n") #'treemacs-next-neighbour) + (define-key evil-treemacs-state-map (kbd "M-e") #'treemacs-previous-neighbour) + (define-key evil-treemacs-state-map (kbd "M-N") #'treemacs-next-line-other-window) + (define-key evil-treemacs-state-map (kbd "M-E") #'treemacs-previous-line-other-window) +; (define-key evil-treemacs-state-map (kbd "M") #'treemacs-collapse-parent-node) + (evil-define-key 'treemacs treemacs-mode-map (kbd "m") #'treemacs-COLLAPSE-action) + (evil-define-key 'treemacs treemacs-mode-map (kbd "i") #'treemacs-RET-action) + ) +#+end_src + +** LSP +*** Configure lsp-mode +#+begin_src emacs-lisp +(use-package lsp-mode + :defer 0 + :init + (setq ) + :config + (lsp-mode 1)) +#+end_src + +*** Configure lsp-treemacs +#+begin_src emacs-lisp +(use-package lsp-treemacs + :defer 0 + :config + (lsp-treemacs-sync-mode 1)) +#+end_src + +*** Configure lsp-ui +#+begin_src emacs-lisp +(use-package lsp-ui + :defer 0 + :init + (setq lsp-ui-doc-show-with-cursor t) + :config + (lsp-ui-peek-enable 1) + (lsp-ui-doc-enable 1)) +#+end_src + +** Company +*** Configure company +For autocomplete +#+begin_src emacs-lisp +(use-package company + :defer 0 + :after lsp-mode + :config + (define-key company-active-map (kbd "C-n") 'company-select-next) + (define-key company-active-map (kbd "C-e") 'company-select-previous) + (define-key company-search-map (kbd "C-n") 'company-select-next) + (define-key company-search-map (kbd "C-e") 'company-select-previous)) +#+end_src + +*** Configure company-quickhelp +#+begin_src emacs-lisp +(use-package company-quickhelp + :hook (company-mode . company-quickhelp-mode)) +#+end_src + +** Treesitter +#+begin_src emacs-lisp +(use-package tree-sitter-langs) +(use-package tree-sitter + :after tree-sitter-langs + :config + (global-tree-sitter-mode) + :init + (add-to-list 'tree-sitter-major-mode-language-alist '(fundamental-mode . bash)) + (add-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode)) +#+end_src + + +** Lang support +#+begin_src emacs-lisp +(use-package rustic) + +(use-package nix-mode + :mode "\\.nix\\'") + +(use-package hcl-mode + :mode + "\\.hcl\\'" + "\\.nomad\\'") +#+end_src + +** Magit +#+begin_src emacs-lisp +(use-package magit) +#+end_src + +* VTerm +*** Configure vterm +#+begin_src emacs-lisp +(use-package vterm + :config + (setq vterm-timer-delay 0.005)) + +(use-package vterm-toggle + :config + (setq vterm-toggle-fullscreen-p nil) + (add-to-list 'display-buffer-alist + '((lambda(bufname _) (with-current-buffer bufname (equal major-mode 'vterm-mode))) + (display-buffer-reuse-window display-buffer-at-bottom) + (reusable-frames . visible) + (window-height . 0.4))) + (define-key vterm-mode-map (kbd "") 'vterm-toggle-forward) + (define-key vterm-mode-map (kbd "") 'vterm-toggle-backward)) +#+end_src + + +** Centaur Tabs +#+begin_src emacs-lisp +(use-package centaur-tabs + :config + (setq centaur-tabs-style "box" +; centaur-tabs-set-bar 'left + centaur-tabs-height 18 + centaur-tabs-set-modified-marker t + centaur-tabs-set-icons t) + (centaur-tabs-group-buffer-groups) + (centaur-tabs-mode 1) + (centaur-tabs-headline-match) + (set-face-attribute 'tab-line nil :inherit 'centaur-tabs-unselected)) +#+end_src + + + +** Org +*** Add org-mode +#+begin_src emacs-lisp +(use-package org) +#+end_src + +*** Add org-bullets +#+begin_src emacs-lisp + (use-package org-bullets + :config + (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))) +#+end_src + +** Misc packages +#+begin_src emacs-lisp +(use-package elcord + :defer 0) + +(use-package projectile) + +(use-package rainbow-delimiters + :hook (prog-mode . rainbow-delimiters-mode)) + +(use-package flex-autopair + :config + (flex-autopair-mode 1)) + +(use-package rainbow-mode + :config + (rainbow-mode 1)) + +(use-package all-the-icons) + +(use-package general) +#+end_src + +* Mode specific hooks +#+begin_src emacs-lisp +(add-hook 'c-mode-hook 'lsp) +(add-hook 'c++-mode-hook 'lsp) +#+end_src + +#+begin_comment +(defface bufname + `((t :foreground ,c-fg + :background ,c-bg + :weight bold + )) + "Custom face for buffer name" + :group 'mode-line-faces ) +(defface majmode + `((t :foreground ,c-fg + :background ,c-bg + )) + "Custom face for major mode" + :group 'mode-line-faces ) + +(defface gitmode + `((t :foreground ,c-fg + :background ,c-red-2 + :weight bold + )) + "Custom face for VC" + :group 'mode-line-faces ) +(defface infomode + `((t :foreground ,c-bg + :background ,c-green + :weight bold + )) + "For showing line and column number" + :group 'mode-line-faces ) + + +(setq-default mode-line-format + '((:propertize " %b " face bufname) + (vc-mode (:propertize (" " vc-mode " " ) face gitmode)) + (:propertize (" " mode-name " ") face majmode) + (:propertize ("[[ %l | %c || %p . %+%@ ]]") face infomode) + ("%-"))) + +(setq exclude-ln '(term-mode-hook eshell-mode-hook shell-mode-hook)) +(while exclude-ln + (add-hook (car exclude-ln) (lambda () (display-line-numbers-mode 0))) + (setq exclude-ln (cdr exclude-ln))) +(let ((default-color (cons (face-background 'mode-line) + (face-foreground 'mode-line)))) + (add-hook 'post-command-hook + (lambda () + (let ((color (cond ((minibufferp) default-color) + ((evil-insert-state-p) (cons c-magenta c-fg)) + ((evil-visual-state-p) (cons c-cyan c-fg)) + ((evil-normal-state-p) (cons c-fg c-bg)) + ((buffer-modified-p) (cons c-blue c-fg)) + (t default-color)))) + (set-face-background 'bufname (car color)) + (set-face-foreground 'bufname (cdr color)) + )))) +#+end_comment + +* Pop-up terminal +Stolen from [[https://www.reddit.com/r/emacs/comments/ft84xy/run_shell_command_in_new_vterm/][this]] reddit post +#+begin_src emacs-lisp +(defun run-in-vterm-kill (process event) + "A process sentinel. Kills PROCESS's buffer if it is live." + (let ((b (process-buffer process))) + (and (buffer-live-p b) + (kill-buffer b)))) + +(defun run-in-vterm (command) + (interactive + (list + (let* ((f (cond (buffer-file-name) + ((eq major-mode 'dired-mode) + (dired-get-filename nil t)))) + (filename (concat " " (shell-quote-argument (and f (file-relative-name f)))))) + (read-shell-command "Terminal command: " + (cons filename 0) + (cons 'shell-command-history 1) + (list filename))))) + (with-current-buffer (vterm-toggle) + (set-process-sentinel vterm--process #'run-in-vterm-kill) + (vterm-send-string (concat command)) + (vterm-send-return))) +#+end_src + +This returns the command to run in the terminal +#+begin_src emacs-lisp +(defun candrun () + (let ((full buffer-file-name) + (file (file-name-sans-extension buffer-file-name))) + (pcase (file-name-extension full) + ("c" (concat "gcc " full " -o " file " && " file " && rm " file)) + ("java" (concat "java" full)) + ("py" (concat "python" full)) + ("cpp" (concat "g++ " full " -o " file " && " file " && rm " file)) + ("hs" (concat "ghc -dynamic" full " && " file " && rm " file " " file ".o")) + ("sh" (concat "sh" full)) + ("bash" (concat "bash" full)) + ("zsh" (concat "zsh" full)) + ("js" (concat "node" full)) + ("ts" (concat "tsc" full " && node " file ".js && rm " file ".js" )) + ("rs" (concat "rustc" full " -o " file " && " file " && rm " file))))) +#+end_src + +* Keybinds +** General +#+begin_src emacs-lisp +(with-eval-after-load 'general +(general-define-key + :states '(normal emacs visual motion treemacs Eshell override) + "M-o" 'treemacs + "M-v" 'split-window-vertically + "M-h" 'split-window-horizontally + "M-C-m" 'shrink-window-horizontally + "M-C-i" 'enlarge-window-horizontally + "M-C-e" 'shrink-window + "M-C-n" 'enlarge-window + "C-m" 'windmove-left + "C-i" 'windmove-right + "C-n" 'windmove-down + "C-e" 'windmove-up + "M-," 'previous-buffer + "M-." 'next-buffer + "M-C-S-q" 'kill-buffer-and-window + "M-w" 'centaur-tabs--kill-this-buffer-dont-ask + "M-S-w" 'kill-window + "M-S-," 'centaur-tabs-backward + "M-S-." 'centaur-tabs-forward) +#+end_src + +Pop-up terminal specific keybinds +#+begin_src emacs-lisp +(general-define-key + :states '(override insert normal visual treemacs motion) + "M-f" 'lsp-format-buffer + "" (lambda () (interactive) (vterm t)) + "C-" 'vterm-toggle-cd + "" 'vterm-toggle + "" (lambda () (interactive) (run-in-vterm (candrun)))) + +(general-define-key + :states '(normal insert) + :keymaps 'VTerm + "C-S-v" 'vterm-yank + )) +#+end_src diff --git a/home/natto/config/emacs/init.el b/home/natto/config/emacs/init.el index 2e278a6..b318e79 100644 --- a/home/natto/config/emacs/init.el +++ b/home/natto/config/emacs/init.el @@ -1,346 +1,2 @@ -; -*- lexical-binding: t; -*- -;;colors -(setq -c-bg "#1d1f21" -c-fg "#c5c8c6" -c-red "#912226" -c-green "#778900" -c-yellow "#ae7b00" -c-blue "#1d2594" -c-magenta "#682a9b" -c-cyan "#2b6651" -c-white "#929593" -c-black "#969896" -c-red-2 "#cc6666" -c-green-2 "#b5bd68" -c-yellow-2 "#f0c674" -c-blue-2 "#81a2be" -c-magenta-2 "#b294bb" -c-cyan-2 "#8abeb7" -c-white-2 "#ecebec") - -;;settings -(set-face-attribute 'default nil :font "Monoid" :height 120) -(global-hl-line-mode 1) -(scroll-bar-mode 0) -(tool-bar-mode 0) -(menu-bar-mode 0) -(fringe-mode 0) -(cua-mode 1) -(global-display-line-numbers-mode 1) -(setq initial-major-mode 'emacs-lisp-mode - frame-resize-pixelwise t - auto-window-vscroll nil - scroll-step 1 - display-line-numbers-type 'relative - confirm-kill-processes nil - inhibit-startup-screen t) -(add-hook 'emacs-startup-hook - (lambda () (delete-other-windows)) t) - - -;;add packages and shit -(require 'package) -(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) -(package-initialize) -(require 'use-package) - -(use-package solaire-mode - :config - (solaire-mode)) - -(use-package doom-themes - :config - (setq doom-themes-enable-bold t - doom-themes-enable-italic t - doom-themes-treemacs-theme "doom-colors") - (load-theme 'doom-tomorrow-night t) - (doom-themes-visual-bell-config) - (doom-themes-treemacs-config) - (doom-themes-org-config)) - -(use-package ivy - :config - (define-key ivy-minibuffer-map (kbd "C-n") 'ivy-next-line) - (define-key ivy-minibuffer-map (kbd "C-e") 'ivy-previous-line) - (define-key ivy-minibuffer-map (kbd "C-i") 'ivy-done) - (ivy-mode 1)) - -(use-package elcord - :defer 0 - :config - (elcord-mode 1)) - -(use-package undo-tree - :config - (global-undo-tree-mode 1)) - -(use-package evil - :config - (evil-set-initial-state 'vterm-mode 'insert) - (evil-set-undo-system 'undo-tree) - (evil-mode 1)) - -(use-package evil-colemak-basics - :init - (setq evil-colemak-basics-layout-mod 'mod-dh) - :config - (global-evil-colemak-basics-mode 1)) - -(use-package treemacs - :config - (treemacs-filewatch-mode 1) - (treemacs-display-current-project-exclusively) - (treemacs-git-mode 'deferred)) - -(use-package treemacs-evil :config - (define-key evil-treemacs-state-map (kbd "n") #'treemacs-next-line) - (define-key evil-treemacs-state-map (kbd "e") #'treemacs-previous-line) - (define-key evil-treemacs-state-map (kbd "M-n") #'treemacs-next-neighbour) - (define-key evil-treemacs-state-map (kbd "M-e") #'treemacs-previous-neighbour) - (define-key evil-treemacs-state-map (kbd "M-N") #'treemacs-next-line-other-window) - (define-key evil-treemacs-state-map (kbd "M-E") #'treemacs-previous-line-other-window) -; (define-key evil-treemacs-state-map (kbd "M") #'treemacs-collapse-parent-node) - (evil-define-key 'treemacs treemacs-mode-map (kbd "m") #'treemacs-COLLAPSE-action) - (evil-define-key 'treemacs treemacs-mode-map (kbd "i") #'treemacs-RET-action) - ) - -(use-package lsp-mode - :defer 0 - :init - (setq ) - :config - (lsp-mode 1)) - -(use-package lsp-treemacs - :defer 0 - :config - (lsp-treemacs-sync-mode 1)) - -(use-package lsp-ui - :defer 0 - :init - (setq lsp-ui-doc-show-with-cursor t) - :config - (lsp-ui-peek-enable 1) - (lsp-ui-doc-enable 1)) - -(use-package company - :defer 0 - :after lsp-mode - :config - (define-key company-active-map (kbd "C-n") 'company-select-next) - (define-key company-active-map (kbd "C-e") 'company-select-previous) - (define-key company-search-map (kbd "C-n") 'company-select-next) - (define-key company-search-map (kbd "C-e") 'company-select-previous)) - -(use-package company-quickhelp - :hook (company-mode . company-quickhelp-mode)) - -(use-package tree-sitter-langs) - -(use-package tree-sitter - :config - (global-tree-sitter-mode) - :init - (add-to-list 'tree-sitter-major-mode-language-alist '(fundamental-mode . bash)) - (add-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode)) - -(use-package rainbow-delimiters - :hook (prog-mode . rainbow-delimiters-mode)) - -(use-package flex-autopair - :config - (flex-autopair-mode 1)) - -(use-package rainbow-mode - :config - (rainbow-mode 1)) - -(use-package rustic) - -(add-hook 'c-mode-hook 'lsp) -(add-hook 'c++-mode-hook 'lsp) - -(use-package magit) - -(use-package nix-mode - :mode "\\.nix\\'") - -(use-package hcl-mode - :mode - "\\.hcl\\'" - "\\.nomad\\'") - -(use-package projectile) - -(use-package vterm - :config - (setq vterm-timer-delay 0.005) - ) - -(use-package all-the-icons) - -(use-package centaur-tabs - :config - (setq centaur-tabs-style "box" -; centaur-tabs-set-bar 'left - centaur-tabs-height 18 - centaur-tabs-set-modified-marker t - centaur-tabs-set-icons t) - (centaur-tabs-group-buffer-groups) - (centaur-tabs-mode 1) - (centaur-tabs-headline-match) - (set-face-attribute 'tab-line nil :inherit 'centaur-tabs-unselected)) - -(use-package general) - - (use-package vterm-toggle - :config - (setq vterm-toggle-fullscreen-p nil) - (add-to-list 'display-buffer-alist - '((lambda(bufname _) (with-current-buffer bufname (equal major-mode 'vterm-mode))) - (display-buffer-reuse-window display-buffer-at-bottom) - (reusable-frames . visible) - (window-height . 0.4))) - (define-key vterm-mode-map (kbd "") 'vterm-toggle-forward) - (define-key vterm-mode-map (kbd "") 'vterm-toggle-backward)) - -(use-package org) - - (use-package org-bullets - :config - (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))) - - -(defface bufname - `((t :foreground ,c-fg - :background ,c-bg - :weight bold - )) - "Custom face for buffer name" - :group 'mode-line-faces ) -(defface majmode - `((t :foreground ,c-fg - :background ,c-bg - )) - "Custom face for major mode" - :group 'mode-line-faces ) - -(defface gitmode - `((t :foreground ,c-fg - :background ,c-red-2 - :weight bold - )) - "Custom face for VC" - :group 'mode-line-faces ) -(defface infomode - `((t :foreground ,c-bg - :background ,c-green - :weight bold - )) - "For showing line and column number" - :group 'mode-line-faces ) - - -(setq-default mode-line-format - '((:propertize " %b " face bufname) - (vc-mode (:propertize (" " vc-mode " " ) face gitmode)) - (:propertize (" " mode-name " ") face majmode) - (:propertize ("[[ %l | %c || %p . %+%@ ]]") face infomode) - ("%-"))) - -(setq exclude-ln '(term-mode-hook eshell-mode-hook shell-mode-hook)) -(while exclude-ln - (add-hook (car exclude-ln) (lambda () (display-line-numbers-mode 0))) - (setq exclude-ln (cdr exclude-ln))) -(let ((default-color (cons (face-background 'mode-line) - (face-foreground 'mode-line)))) - (add-hook 'post-command-hook - (lambda () - (let ((color (cond ((minibufferp) default-color) - ((evil-insert-state-p) (cons c-magenta c-fg)) - ((evil-visual-state-p) (cons c-cyan c-fg)) - ((evil-normal-state-p) (cons c-fg c-bg)) - ((buffer-modified-p) (cons c-blue c-fg)) - (t default-color)))) - (set-face-background 'bufname (car color)) - (set-face-foreground 'bufname (cdr color)) - )))) - -;; stolen from https://www.reddit.com/r/emacs/comments/ft84xy/run_shell_command_in_new_vterm/ -(defun run-in-vterm-kill (process event) - "A process sentinel. Kills PROCESS's buffer if it is live." - (let ((b (process-buffer process))) - (and (buffer-live-p b) - (kill-buffer b)))) - -(defun run-in-vterm (command) - (interactive - (list - (let* ((f (cond (buffer-file-name) - ((eq major-mode 'dired-mode) - (dired-get-filename nil t)))) - (filename (concat " " (shell-quote-argument (and f (file-relative-name f)))))) - (read-shell-command "Terminal command: " - (cons filename 0) - (cons 'shell-command-history 1) - (list filename))))) - (with-current-buffer (vterm-toggle) - (set-process-sentinel vterm--process #'run-in-vterm-kill) - (vterm-send-string (concat command)) - (vterm-send-return))) - -(defun candrun () - (let ((full buffer-file-name) - (file (file-name-sans-extension buffer-file-name))) - (pcase (file-name-extension full) - ("c" (concat "gcc " full " -o " file " && " file " && rm " file)) - ("java" (concat "java" full)) - ("py" (concat "python" full)) - ("cpp" (concat "g++ " full " -o " file " && " file " && rm " file)) - ("hs" (concat "ghc -dynamic" full " && " file " && rm " file " " file ".o")) - ("sh" (concat "sh" full)) - ("bash" (concat "bash" full)) - ("zsh" (concat "zsh" full)) - ("js" (concat "node" full)) - ("ts" (concat "tsc" full " && node " file ".js && rm " file ".js" )) - ("rs" (concat "rustc" full " -o " file " && " file " && rm " file))))) - -(general-define-key - :states '(normal emacs visual motion treemacs Eshell override) - "M-o" 'treemacs - "M-v" 'split-window-vertically - "M-h" 'split-window-horizontally - "M-C-m" 'shrink-window-horizontally - "M-C-i" 'enlarge-window-horizontally - "M-C-e" 'shrink-window - "M-C-n" 'enlarge-window - "C-m" 'windmove-left - "C-i" 'windmove-right - "C-n" 'windmove-down - "C-e" 'windmove-up - "M-," 'previous-buffer - "M-." 'next-buffer - "M-C-S-q" 'kill-buffer-and-window - "M-w" 'centaur-tabs--kill-this-buffer-dont-ask - "M-S-w" 'kill-window - "M-S-," 'centaur-tabs-backward - "M-S-." 'centaur-tabs-forward) - -(general-define-key - :states '(override insert normal visual treemacs motion) - "M-f" 'lsp-format-buffer - "" (lambda () (interactive) (vterm t)) - "C-" 'vterm-toggle-cd - "" 'vterm-toggle - "" (lambda () (interactive) (run-in-vterm (candrun)))) - - -(general-define-key - :states '(normal insert) - :keymaps 'VTerm - "C-S-v" 'vterm-yank - ) - - +(delete-file (expand-file-name "~/.emacs.d/config.el")) +(org-babel-load-file (expand-file-name "~/.emacs.d/config.org")) diff --git a/home/natto/services.nix b/home/natto/services.nix index 987b266..6345a57 100644 --- a/home/natto/services.nix +++ b/home/natto/services.nix @@ -6,14 +6,17 @@ in services = { baremacs = { enable = true; - package = pkgs.mymacs ./config/emacs/init.el; + package = pkgs.mymacs ./config/emacs/config.org; defaultEditor = { enable = true; editor = "emacsclient"; }; copyConfigFiles = { enable = true; - files = { "init.el" = ./config/emacs/init.el; }; + files = { + "config.org" = ./config/emacs/config.org; + "init.el" = ./config/emacs/init.el; + }; }; }; picom = { diff --git a/overlays/emacs/default.nix b/overlays/emacs/default.nix index 55bd165..81ac4cc 100644 --- a/overlays/emacs/default.nix +++ b/overlays/emacs/default.nix @@ -4,16 +4,17 @@ , fetchurl , fetchFromGitHub , emacsGcc -, config ? null +, conf ? null , ... }: -assert (config != null); +assert (conf != null); emacsWithPackagesFromUsePackage { - config = config; + config = conf; package = emacsGcc; alwaysEnsure = true; + alwaysTangle = true; extraEmacsPackages = epkgs: with epkgs; [ use-package tsc diff --git a/overlays/packages.nix b/overlays/packages.nix index ff31622..6085d33 100644 --- a/overlays/packages.nix +++ b/overlays/packages.nix @@ -2,5 +2,5 @@ final: prev: { mpd_discord_richpresence = prev.callPackage ./mpd-rpc { }; customscripts = prev.callPackage ./customscripts { }; gruvbox-icons = prev.callPackage ./gruvbox-icons { }; - mymacs = c: prev.callPackage ./emacs { config = c; }; + mymacs = c: prev.callPackage ./emacs { conf = c; }; }