update
This commit is contained in:
parent
052c95b4c7
commit
60b061bb97
38
flake.lock
generated
38
flake.lock
generated
@ -100,6 +100,27 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"emacs-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1758907459,
|
||||
"narHash": "sha256-sioGEyOZ1qNALT0khO3S574IRWMleVaKQ/VrejCBXkk=",
|
||||
"owner": "nix-community",
|
||||
"repo": "emacs-overlay",
|
||||
"rev": "804e75fd1406faceeddd75014bf463dbf5140063",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "emacs-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"firefox-gnome-theme": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
@ -703,6 +724,22 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1758791193,
|
||||
"narHash": "sha256-F8WmEwFoHsnix7rt290R0rFXNJiMbClMZyIC/e+HYf0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "25e53aa156d47bad5082ff7618f5feb1f5e02d01",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-25.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1758277210,
|
||||
@ -855,6 +892,7 @@
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"emacs-overlay": "emacs-overlay",
|
||||
"home-manager": "home-manager",
|
||||
"hyprland": "hyprland",
|
||||
"hyprland-plugins": "hyprland-plugins",
|
||||
|
93
flake.nix
93
flake.nix
@ -27,60 +27,65 @@
|
||||
};
|
||||
nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
|
||||
stylix.url = "github:danth/stylix";
|
||||
emacs-overlay = {
|
||||
url = "github:nix-community/emacs-overlay";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = inputs @ {
|
||||
nixpkgs,
|
||||
nix-darwin,
|
||||
nix-on-droid,
|
||||
nixos-wsl,
|
||||
...
|
||||
}: {
|
||||
nixosConfigurations = {
|
||||
desktop = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
./hosts/desktop/configuration.nix
|
||||
];
|
||||
};
|
||||
thinkpad = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
./hosts/thinkpad/configuration.nix
|
||||
];
|
||||
};
|
||||
macvm = nixpkgs.lib.nixosSystem {
|
||||
system = "aarch64-linux";
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
./hosts/macvm/configuration.nix
|
||||
];
|
||||
};
|
||||
wsl = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
nixos-wsl.nixosModules.default
|
||||
./hosts/wsl/configuration.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
nixpkgs,
|
||||
nix-darwin,
|
||||
nix-on-droid,
|
||||
nixos-wsl,
|
||||
...
|
||||
}:
|
||||
{
|
||||
nixosConfigurations = {
|
||||
desktop = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
./hosts/desktop/configuration.nix
|
||||
];
|
||||
};
|
||||
thinkpad = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
./hosts/thinkpad/configuration.nix
|
||||
];
|
||||
};
|
||||
macvm = nixpkgs.lib.nixosSystem {
|
||||
system = "aarch64-linux";
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
./hosts/macvm/configuration.nix
|
||||
];
|
||||
};
|
||||
wsl = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
nixos-wsl.nixosModules.default
|
||||
./hosts/wsl/configuration.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
darwinConfigurations = {
|
||||
darwinConfigurations = {
|
||||
macbook = nix-darwin.lib.darwinSystem {
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
./hosts/macbook/configuration.nix
|
||||
];
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nixOnDroidConfigurations.default = nix-on-droid.lib.nixOnDroidConfiguration {
|
||||
nixOnDroidConfigurations.default = nix-on-droid.lib.nixOnDroidConfiguration {
|
||||
pkgs = import nixpkgs { system = "aarch64-linux"; };
|
||||
extraSpecialArgs = {inherit inputs;};
|
||||
modules = [ ./hosts/android/configuration.nix ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -54,10 +54,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs.config.packageOverrides = pkgs: {
|
||||
emacs = pkgs.emacs.override { withNativeCompilation = false; };
|
||||
};
|
||||
|
||||
system.stateVersion = 5;
|
||||
|
||||
# fix for this: https://github.com/LnL7/nix-darwin/issues/1346
|
||||
|
@ -29,28 +29,12 @@
|
||||
home.homeDirectory = "/Users/mthomson";
|
||||
home.stateVersion = "23.11";
|
||||
|
||||
home.sessionVariables = {
|
||||
ZK_NOTEBOOK_DIR = "\${HOME}/zk";
|
||||
};
|
||||
|
||||
programs = {
|
||||
zk = {
|
||||
enable = true;
|
||||
settings = {
|
||||
notebook = {
|
||||
dir = "~/zk";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
hidden-bar
|
||||
presenterm
|
||||
(azure-cli.withExtensions [
|
||||
azure-cli.extensions.containerapp
|
||||
])
|
||||
scrcpy
|
||||
nh
|
||||
];
|
||||
|
||||
|
@ -1,37 +1,49 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
|
||||
let
|
||||
myPkgs = import pkgs.path {
|
||||
inherit (pkgs) system;
|
||||
overlays = [ inputs.emacs-overlay.overlays.default ];
|
||||
};
|
||||
in
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
# emacs
|
||||
tree-sitter
|
||||
fd
|
||||
ripgrep
|
||||
typescript-language-server
|
||||
typescript
|
||||
vscode-langservers-extracted
|
||||
nodejs
|
||||
# mathpix-snipping-tool
|
||||
emacs-lsp-booster
|
||||
tree-sitter
|
||||
fd
|
||||
ripgrep
|
||||
typescript-language-server
|
||||
typescript
|
||||
vscode-langservers-extracted
|
||||
nodejs
|
||||
nixd
|
||||
|
||||
cmake
|
||||
libtool
|
||||
glibtool
|
||||
graphviz
|
||||
libvterm
|
||||
];
|
||||
|
||||
programs.emacs = {
|
||||
enable = true;
|
||||
extraPackages = epkgs: [
|
||||
epkgs.mu4e
|
||||
epkgs.pdf-tools
|
||||
epkgs.vterm
|
||||
];
|
||||
package = myPkgs.emacsWithPackagesFromUsePackage {
|
||||
config = ./init.el;
|
||||
defaultInitFile = false;
|
||||
extraEmacsPackages = epkgs: with epkgs; [
|
||||
mu4e
|
||||
pdf-tools
|
||||
vterm
|
||||
treesit-grammars.with-all-grammars
|
||||
];
|
||||
};
|
||||
};
|
||||
#services.emacs.enable = true;
|
||||
home.file.".config/emacs" = {
|
||||
source = ./emacs;
|
||||
recursive = true;
|
||||
services.emacs.enable = true;
|
||||
home.file.".config/emacs/init.el" = {
|
||||
source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/dev/personal/nixos/modules/home-manager/emacs/init.el";
|
||||
};
|
||||
}
|
||||
|
@ -1,790 +0,0 @@
|
||||
;; performance enhancements
|
||||
(setq gc-cons-threshold #x40000000)
|
||||
|
||||
(setq read-process-output-max (* 1024 1024 4))
|
||||
|
||||
;; disable package.el on startup
|
||||
(setq package-enable-at-startup nil)
|
||||
;; bootstrap `straight.el`
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name
|
||||
"straight/repos/straight.el/bootstrap.el"
|
||||
(or (bound-and-true-p straight-base-dir)
|
||||
user-emacs-directory)))
|
||||
(bootstrap-version 7))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously
|
||||
"https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
|
||||
'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
(straight-use-package 'use-package)
|
||||
|
||||
;; add MELPA
|
||||
(require 'package)
|
||||
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
|
||||
|
||||
(straight-use-package 'org)
|
||||
|
||||
;; EMACS
|
||||
(use-package emacs
|
||||
:ensure nil
|
||||
:custom
|
||||
(column-number-mode t)
|
||||
(auto-save-default nil)
|
||||
(create-lockfiles nil)
|
||||
(display-line-numbers-type 'relative)
|
||||
(global-auto-revert-non-file-buffers t)
|
||||
(history-length 25)
|
||||
(inhibit-startup-message t)
|
||||
(initial-scratch-message "")
|
||||
(ispell-dictionary "en_US")
|
||||
(make-backup-files nil)
|
||||
(pixel-scroll-precision-mode t)
|
||||
(pixel-scroll-precision-use-momentum nil)
|
||||
(ring-bell-function 'ignore)
|
||||
(split-width-threshold 300)
|
||||
(switch-to-buffer-obey-display-actions t)
|
||||
(tab-always-indent t)
|
||||
(tab-width 4)
|
||||
;; (treesit-font-lock-level 4)
|
||||
(truncate-lines t)
|
||||
(use-dialog-box nil)
|
||||
(use-short-answers t)
|
||||
;;(warning-minimum-level :emergency)
|
||||
|
||||
:hook
|
||||
(prog-mode . display-line-numbers-mode)
|
||||
|
||||
:config
|
||||
(defun skip-these-buffers (_window buffer _bury-or-kill)
|
||||
"Function for `switch-to-prev-buffer-skip'."
|
||||
(string-match "\\*[^*]+\\*" (buffer-name buffer)))
|
||||
(setq switch-to-prev-buffer-skip 'skip-these-buffers)
|
||||
|
||||
(set-face-attribute 'default nil :family "JetBrainsMono Nerd Font" :height 100)
|
||||
|
||||
(setq custom-file (locate-user-emacs-file "custom-vars.el"))
|
||||
(load custom-file 'noerror 'nomessage)
|
||||
|
||||
:init
|
||||
(tool-bar-mode -1)
|
||||
(menu-bar-mode -1)
|
||||
(scroll-bar-mode -1)
|
||||
(global-hl-line-mode 1)
|
||||
(global-auto-revert-mode 1)
|
||||
(indent-tabs-mode -1)
|
||||
(recentf-mode 1)
|
||||
(savehist-mode 1)
|
||||
(save-place-mode 1)
|
||||
(winner-mode 1)
|
||||
(xterm-mouse-mode 1)
|
||||
(file-name-shadow-mode 1))
|
||||
|
||||
(use-package doom-themes
|
||||
:ensure t
|
||||
:straight t
|
||||
:custom
|
||||
;; Global settings (defaults)
|
||||
(doom-themes-enable-bold t) ; if nil, bold is universally disabled
|
||||
(doom-themes-enable-italic t) ; if nil, italics is universally disabled
|
||||
:config
|
||||
(load-theme 'modus-operandi t)
|
||||
|
||||
;; Enable flashing mode-line on errors
|
||||
(doom-themes-visual-bell-config)
|
||||
;; Corrects (and improves) org-mode's native fontification.
|
||||
(doom-themes-org-config))
|
||||
|
||||
(use-package eldoc
|
||||
:ensure nil
|
||||
:init
|
||||
(global-eldoc-mode))
|
||||
|
||||
(use-package flymake
|
||||
:ensure nil
|
||||
:defer t
|
||||
:hook (prog-mode . flymake-mode))
|
||||
|
||||
(use-package org
|
||||
:ensure nil
|
||||
:defer t
|
||||
:custom
|
||||
(org-return-follows-link t)
|
||||
(org-hide-emphasis-markers t)
|
||||
(org-log-into-drawer t)
|
||||
(org-log-done 'time)
|
||||
(org-agenda-span 'day)
|
||||
(org-todo-keywords
|
||||
'((sequence "TODO(t)" "NEXT(n)" "PROG(p)" "INTR(i)" "WAIT(w)" "SOMEDAY(s)" "|" "DONE(d)" "CANCELLED(c)")))
|
||||
(org-capture-templates
|
||||
`(("i" "Inbox" entry (file+headline "todo.org" "Inbox")
|
||||
,(concat "* TODO %?\n"
|
||||
"%U"))
|
||||
("j" "Journal" entry (file denote-journal-path-to-new-or-existing-entry)
|
||||
"* %U %?\n%i\n%a"
|
||||
:kill-buffer t
|
||||
:empty-lines 1)
|
||||
("@" "Inbox [email]" entry (file+headline "todo.org" "Inbox")
|
||||
,(concat "* TODO Process \"%a\" %?\n"
|
||||
"%U"))))
|
||||
(org-refile-use-outline-path 'file)
|
||||
(org-outline-path-complete-in-steps nil)
|
||||
(org-refile-targets '((nil :maxlevel . 9)
|
||||
(org-agenda-files :maxlevel . 9)))
|
||||
(org-agenda-skip-scheduled-if-done t)
|
||||
(org-agenda-skip-deadline-if-done t)
|
||||
(org-agenda-include-deadlines t)
|
||||
(org-agenda-include-diary t)
|
||||
(org-agenda-block-separator nil)
|
||||
(org-agenda-compact-blocks t)
|
||||
(org-agenda-start-with-log-mode t)
|
||||
:config
|
||||
(setq org-directory "~/org")
|
||||
(setq org-agenda-files (list "todo.org"))
|
||||
:hook
|
||||
(org-mode . org-indent-mode)
|
||||
:init
|
||||
(require 'org-tempo))
|
||||
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:straight t
|
||||
:hook
|
||||
(org-mode . global-org-modern-mode)
|
||||
:custom
|
||||
(org-modern-keyword nil)
|
||||
(org-modern-checkbox nil)
|
||||
(org-modern-table nil))
|
||||
|
||||
(use-package toc-org
|
||||
:ensure t
|
||||
:straight t
|
||||
:hook (org-mode . toc-org-mode))
|
||||
|
||||
(use-package denote
|
||||
:ensure t
|
||||
:straight t
|
||||
:hook
|
||||
((dired-mode . denote-dired-mode)
|
||||
(text-mode . denote-fontify-links-mode))
|
||||
:bind
|
||||
(("C-c n n" . denote)
|
||||
("C-c n r" . denote-rename-file)
|
||||
("C-c n l" . denote-link)
|
||||
("C-c n b" . denote-backlinks)
|
||||
("C-c n d" . denote-dired))
|
||||
:config
|
||||
(setq denote-directory (expand-file-name "~/org/note"))
|
||||
(denote-rename-buffer-mode 1))
|
||||
|
||||
(use-package consult-denote
|
||||
:ensure t
|
||||
:straight t
|
||||
:bind
|
||||
(("C-c n f" . consult-denote-find)
|
||||
("C-c n g" . consult-denote-grep))
|
||||
:config
|
||||
(consult-denote-mode 1))
|
||||
|
||||
(use-package denote-journal
|
||||
:ensure t
|
||||
:straight t
|
||||
:commands (denote-journal-new-entry
|
||||
denote-journal-new-or-existing-entry
|
||||
denote-journal-link-or-create-entry )
|
||||
:hook (calendar-mode . denote-journal-calendar-mode)
|
||||
:config
|
||||
(setq denote-journal-directory
|
||||
(expand-file-name "journal" denote-directory))
|
||||
(setq denote-journal-keyword "journal")
|
||||
(setq denote-journal-title-format 'day-date-month-year))
|
||||
|
||||
;; (use-package org-superstar
|
||||
;; :ensure t
|
||||
;; :straight t
|
||||
;; :hook
|
||||
;; (org-mode . org-superstar-mode))
|
||||
|
||||
(use-package org-super-agenda
|
||||
:ensure t
|
||||
:straight t
|
||||
:custom
|
||||
(org-super-agenda-groups
|
||||
'(
|
||||
(:name "Today"
|
||||
:time-grid t
|
||||
:date today
|
||||
:todo "TODAY"
|
||||
:scheduled today
|
||||
:order 1)
|
||||
(:name "Next Items"
|
||||
:todo "NEXT"
|
||||
:order 2)
|
||||
(:name "Due Today"
|
||||
:deadline today
|
||||
:order 3)
|
||||
(:name "Due Soon"
|
||||
:deadline future
|
||||
:order 4)
|
||||
(:name "Overdue"
|
||||
:deadline past
|
||||
:order 5)
|
||||
(:name "Scheduled Soon"
|
||||
:scheduled future
|
||||
:order 6)
|
||||
(:name "Waiting"
|
||||
:todo "WAIT"
|
||||
:order 7)
|
||||
(:habit t
|
||||
:order 8)
|
||||
(:name "Project"
|
||||
:category "Project"
|
||||
:order 9)
|
||||
)))
|
||||
|
||||
(use-package which-key
|
||||
:ensure nil
|
||||
:defer t
|
||||
:hook
|
||||
(after-init . which-key-mode))
|
||||
|
||||
(use-package nerd-icons
|
||||
:ensure t
|
||||
:straight t
|
||||
:defer t)
|
||||
|
||||
(use-package nerd-icons-dired
|
||||
:ensure t
|
||||
:straight t
|
||||
:defer t
|
||||
:hook
|
||||
(dired-mode . nerd-icons-dired-mode))
|
||||
|
||||
(use-package doom-modeline
|
||||
:ensure t
|
||||
:config
|
||||
(display-battery-mode t)
|
||||
(display-time-mode t)
|
||||
:init (doom-modeline-mode 1))
|
||||
|
||||
(use-package evil
|
||||
:ensure t
|
||||
:straight t
|
||||
:defer t
|
||||
:hook
|
||||
(after-init . evil-mode)
|
||||
:init
|
||||
(setq evil-want-integration t)
|
||||
(setq evil-want-keybinding nil)
|
||||
(setq evil-want-C-u-scroll t)
|
||||
(setq evil-want-C-u-delete t)
|
||||
:config
|
||||
(evil-set-undo-system 'undo-tree)
|
||||
(evil-set-leader 'normal (kbd "SPC"))
|
||||
(evil-set-leader 'visual (kbd "SPC")))
|
||||
|
||||
(use-package evil-collection
|
||||
:defer t
|
||||
:straight t
|
||||
:ensure t
|
||||
:custom
|
||||
(evil-collection-want-find-usages-bindings t)
|
||||
:hook
|
||||
(evil-mode . evil-collection-init))
|
||||
|
||||
(use-package evil-surround
|
||||
:ensure t
|
||||
:straight t
|
||||
:after evil-collection
|
||||
:config
|
||||
(global-evil-surround-mode 1))
|
||||
|
||||
(use-package evil-matchit
|
||||
:ensure t
|
||||
:straight t
|
||||
:after evil-collection
|
||||
:config
|
||||
(global-evil-matchit-mode 1))
|
||||
|
||||
(use-package undo-tree
|
||||
:defer t
|
||||
:ensure t
|
||||
:straight t
|
||||
:hook
|
||||
(after-init . global-undo-tree-mode)
|
||||
:init
|
||||
(setq undo-tree-visualizer-timestamps t
|
||||
undo-tree-visualizer-diff t
|
||||
undo-limit 800000
|
||||
undo-strong-limit 12000000
|
||||
undo-outer-limit 120000000)
|
||||
:config
|
||||
(setq undo-tree-history-directory-alist '(("." . "~/.config/emacs/.cache/undo"))))
|
||||
|
||||
(use-package general
|
||||
:ensure t
|
||||
:straight t
|
||||
:config
|
||||
(defun mthomson/lsp-describe-and-jump ()
|
||||
"Show hover documentation and jump to *lsp-help* buffer."
|
||||
(interactive)
|
||||
(lsp-describe-thing-at-point)
|
||||
(let ((help-buffer "*lsp-help*"))
|
||||
(when (get-buffer help-buffer)
|
||||
(switch-to-buffer-other-window help-buffer))))
|
||||
(general-evil-setup t)
|
||||
|
||||
(general-define-key
|
||||
:states 'normal
|
||||
"] d" '(flymake-goto-next-error :wk "Goto next error")
|
||||
"[ d" '(flymake-goto-prev-error :wk "Goto prev error")
|
||||
"] c" '(diff-hl-next-hunk :wk "Goto next hunk")
|
||||
"[ c" '(diff-hl-previous-hunk :wk "Goto prev hunk")
|
||||
"K" '(mthomson/lsp-describe-and-jump :wk "Describe"))
|
||||
|
||||
(general-define-key
|
||||
:states 'normal
|
||||
:predicate 'lsp-mode
|
||||
"g r" '(lsp-find-references :wk "Go to references")
|
||||
"g d" '(lsp-find-definition :wk "Go to definition")
|
||||
"g D" '(lsp-find-declaration :wk "Go to declaration")
|
||||
"g I" '(lsp-find-implementation :wk "Go to implementation")
|
||||
"g t" '(lsp-find-type-definition :wk "Go to type definition")
|
||||
"K" '(mthomson/lsp-describe-and-jump :wk "Describe"))
|
||||
|
||||
(general-create-definer my-leader-def
|
||||
:states '(normal insert visual motion emacs)
|
||||
:keymaps 'override
|
||||
:prefix "SPC"
|
||||
:global-prefix "C-SPC")
|
||||
(my-leader-def
|
||||
"f" '(:ignore t :wk "Find")
|
||||
"f c" '((lambda () (interactive) (find-file "~/.config/emacs/init.el")) :wk "Edit emacs config")
|
||||
"f r" '(consult-recent-file :wk "Recent files")
|
||||
"f f" '(consult-find :wk "Find Files")
|
||||
"f g" '(consult-ripgrep :wk "Ripgrep search in files")
|
||||
"f l" '(consult-line :wk "Find line")
|
||||
"f i" '(consult-imenu :wk "Imenu buffer locations"))
|
||||
|
||||
(my-leader-def
|
||||
"c" '(:ignore t :wk "Code")
|
||||
"c a" '(lsp-execute-code-action :wk "Code actions"))
|
||||
|
||||
(my-leader-def
|
||||
"h" '(:ignore t :wk "Help")
|
||||
"h v" '(describe-variable :wk "Describe variable")
|
||||
"h f" '(describe-function :wk "Describe function")
|
||||
"h k" '(describe-key :wk "Describe key"))
|
||||
|
||||
(my-leader-def
|
||||
"p" '(:ignore t :wk "Project")
|
||||
"p b" '(consult-project-buffer :wk "Project buffers")
|
||||
"p p" '(project-switch-project :wk "Project switch")
|
||||
"p f" '(project-find-file :wk "Project find file")
|
||||
"p g" '(project-find-regexp :wk "Project grep file")
|
||||
"p k" '(project-kill-buffers :wk "Project kill buffers")
|
||||
"p d" '(project-dired :wk "Project dired"))
|
||||
|
||||
(my-leader-def
|
||||
"x" '(:ignore t :wk "Flymake")
|
||||
"x x" '(consult-flymake :wk "Show diagnostics"))
|
||||
|
||||
(my-leader-def
|
||||
"g" '(:ignore t :wk "Git")
|
||||
"g g" '(magit-status :wk "Magit status")
|
||||
"g l" '(magit-log-current :wk "Magit log"))
|
||||
|
||||
(my-leader-def
|
||||
"u" '(undo-tree-visualize :wk "Undo-tree")))
|
||||
|
||||
(use-package vertico
|
||||
:ensure t
|
||||
:straight t
|
||||
:hook
|
||||
(after-init . vertico-mode))
|
||||
|
||||
(use-package orderless
|
||||
:ensure t
|
||||
:straight t
|
||||
:custom
|
||||
(completion-styles '(orderless partial-completion basic))
|
||||
(completion-category-defaults nil)
|
||||
(completion-category-overrides '((file (styles partial-completion)))))
|
||||
|
||||
(use-package marginalia
|
||||
:ensure t
|
||||
:straight t
|
||||
:hook
|
||||
(after-init . marginalia-mode))
|
||||
|
||||
(use-package consult
|
||||
:ensure t
|
||||
:straight t
|
||||
:defer t)
|
||||
|
||||
(use-package embark
|
||||
:ensure t
|
||||
:straight t
|
||||
:defer t)
|
||||
|
||||
(use-package embark-consult
|
||||
:ensure t
|
||||
:straight t
|
||||
:hook
|
||||
(embark-collect-mode . consult-preview-at-point-mode))
|
||||
|
||||
(use-package treesit-auto
|
||||
:ensure t
|
||||
:straight t
|
||||
:after emacs
|
||||
:custom
|
||||
(treesit-auto-install 'prompt)
|
||||
:config
|
||||
(treesit-auto-add-to-auto-mode-alist 'all)
|
||||
(global-treesit-auto-mode)
|
||||
:init
|
||||
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode)))
|
||||
|
||||
(use-package corfu
|
||||
:ensure t
|
||||
:straight t
|
||||
:custom
|
||||
(corfu-auto t)
|
||||
(corfu-cycle t)
|
||||
(corfu-auto-prefix 2)
|
||||
(corfu-popupinfo-mode t)
|
||||
(corfu-popupinfo-delay 0.5)
|
||||
(corfu-on-exact-match nil)
|
||||
(completion-ignore-case t)
|
||||
:init
|
||||
(global-corfu-mode))
|
||||
|
||||
(use-package nerd-icons-corfu
|
||||
:ensure t
|
||||
:straight t
|
||||
:after corfu
|
||||
:init (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
|
||||
|
||||
(use-package cape
|
||||
:ensure t
|
||||
:straight t
|
||||
:after corfu
|
||||
:bind ("C-c p" . cape-prefix-map)
|
||||
:init
|
||||
(add-hook 'completion-at-point-functions #'cape-dabbrev)
|
||||
(add-hook 'completion-at-point-functions #'cape-dict)
|
||||
(add-hook 'completion-at-point-functions #'cape-file)
|
||||
(add-hook 'completion-at-point-functions #'cape-elisp-block)
|
||||
(add-hook 'completion-at-point-functions #'cape-keyword))
|
||||
|
||||
;; (use-package company
|
||||
;; :ensure t
|
||||
;; :straight t
|
||||
;; :defer t
|
||||
;; :custom
|
||||
;; (company-tooltip-align-annotations t)
|
||||
;; (company-minimum-prefix-length 1)
|
||||
;; (company-idle-delay 0.2)
|
||||
;; :hook
|
||||
;; (after-init . global-company-mode))
|
||||
|
||||
(use-package lsp-mode
|
||||
:ensure t
|
||||
:straight t
|
||||
:defer t
|
||||
:hook (
|
||||
(bash-ts-mode . lsp)
|
||||
(typescript-ts-mode . lsp)
|
||||
(tsx-ts-mode . lsp)
|
||||
(js-mode . lsp)
|
||||
(js-ts-mode . lsp)
|
||||
(css-ts-mode . lsp)
|
||||
(c-ts-mode . lsp)
|
||||
(c++-ts-mode . lsp)
|
||||
(lsp-mode . lsp-enable-which-key-integration)
|
||||
(lsp-completion-mode . my/lsp-mode-setup-completion))
|
||||
:commands lsp
|
||||
:init
|
||||
(defun my/lsp-mode-setup-completion ()
|
||||
(setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults))
|
||||
'(flex))) ;; Configure flex
|
||||
:custom
|
||||
(lsp-keymap-prefix "C-c l") ;; Set the prefix for LSP commands.
|
||||
(lsp-inlay-hint-enable t) ;; Enable inlay hints.
|
||||
(lsp-completion-provider :none) ;; Disable the default completion provider.
|
||||
(lsp-session-file (locate-user-emacs-file ".lsp-session")) ;; Specify session file location.
|
||||
(lsp-log-io nil) ;; Disable IO logging for speed.
|
||||
(lsp-idle-delay 0) ;; Set the delay for LSP to 0 (debouncing).
|
||||
(lsp-keep-workspace-alive nil) ;; Disable keeping the workspace alive.
|
||||
;; Core settings
|
||||
(lsp-enable-xref t) ;; Enable cross-references.
|
||||
(lsp-auto-configure t) ;; Automatically configure LSP.
|
||||
(lsp-enable-links nil) ;; Disable links.
|
||||
(lsp-eldoc-enable-hover t) ;; Enable ElDoc hover.
|
||||
(lsp-enable-file-watchers nil) ;; Disable file watchers.
|
||||
(lsp-enable-folding nil) ;; Disable folding.
|
||||
(lsp-enable-imenu t) ;; Enable Imenu support.
|
||||
(lsp-enable-indentation t) ;; Enable indentation.
|
||||
(lsp-enable-on-type-formatting nil) ;; Disable on-type formatting.
|
||||
(lsp-enable-suggest-server-download t) ;; Enable server download suggestion.
|
||||
(lsp-enable-symbol-highlighting t) ;; Enable symbol highlighting.
|
||||
(lsp-enable-text-document-color nil) ;; Disable text document color.
|
||||
;; Modeline settings
|
||||
(lsp-modeline-code-actions-enable nil) ;; Keep modeline clean.
|
||||
(lsp-modeline-diagnostics-enable nil) ;; Use `flymake' instead.
|
||||
(lsp-modeline-workspace-status-enable t) ;; Display "LSP" in the modeline when enabled.
|
||||
(lsp-signature-doc-lines 1) ;; Limit echo area to one line.
|
||||
(lsp-eldoc-render-all t) ;; Render all ElDoc messages.
|
||||
;; Completion settings
|
||||
(lsp-completion-enable t) ;; Enable completion.
|
||||
(lsp-completion-enable-additional-text-edit t) ;; Enable additional text edits for completions.
|
||||
(lsp-enable-snippet t) ;; Disable snippets
|
||||
(lsp-completion-show-kind t) ;; Show kind in completions.
|
||||
;; Lens settings
|
||||
(lsp-lens-enable t) ;; Enable lens support.
|
||||
;; Headerline settings
|
||||
(lsp-headerline-breadcrumb-enable-symbol-numbers t) ;; Enable symbol numbers in the headerline.
|
||||
(lsp-headerline-arrow "▶") ;; Set arrow for headerline.
|
||||
(lsp-headerline-breadcrumb-enable-diagnostics nil) ;; Disable diagnostics in headerline.
|
||||
(lsp-headerline-breadcrumb-icons-enable nil) ;; Disable icons in breadcrumb.
|
||||
;; Semantic settings
|
||||
(lsp-semantic-tokens-enable nil)) ;; Disable semantic tokens.
|
||||
|
||||
;; lsp-booster
|
||||
(defun lsp-booster--advice-json-parse (old-fn &rest args)
|
||||
"Try to parse bytecode instead of json."
|
||||
(or
|
||||
(when (equal (following-char) ?#)
|
||||
(let ((bytecode (read (current-buffer))))
|
||||
(when (byte-code-function-p bytecode)
|
||||
(funcall bytecode))))
|
||||
(apply old-fn args)))
|
||||
(advice-add (if (progn (require 'json)
|
||||
(fboundp 'json-parse-buffer))
|
||||
'json-parse-buffer
|
||||
'json-read)
|
||||
:around
|
||||
#'lsp-booster--advice-json-parse)
|
||||
|
||||
(defun lsp-booster--advice-final-command (old-fn cmd &optional test?)
|
||||
"Prepend emacs-lsp-booster command to lsp CMD."
|
||||
(let ((orig-result (funcall old-fn cmd test?)))
|
||||
(if (and (not test?) ;; for check lsp-server-present?
|
||||
(not (file-remote-p default-directory)) ;; see lsp-resolve-final-command, it would add extra shell wrapper
|
||||
lsp-use-plists
|
||||
(not (functionp 'json-rpc-connection)) ;; native json-rpc
|
||||
(executable-find "emacs-lsp-booster"))
|
||||
(progn
|
||||
(when-let ((command-from-exec-path (executable-find (car orig-result)))) ;; resolve command from exec-path (in case not found in $PATH)
|
||||
(setcar orig-result command-from-exec-path))
|
||||
(message "Using emacs-lsp-booster for %s!" orig-result)
|
||||
(cons "emacs-lsp-booster" orig-result))
|
||||
orig-result)))
|
||||
(advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command)
|
||||
|
||||
;; (use-package yasnippet
|
||||
;; :ensure t
|
||||
;; :straight t)
|
||||
|
||||
;; (use-package yasnippet-snippets
|
||||
;; :ensure t
|
||||
;; :straight t
|
||||
;; :hook (prog-mode . yas-minor-mode))
|
||||
|
||||
;; Configure Tempel
|
||||
(use-package tempel
|
||||
:ensure t
|
||||
:straight t
|
||||
:bind (("M-+" . tempel-complete)
|
||||
("M-*" . tempel-insert))
|
||||
:init
|
||||
(defun tempel-setup-capf ()
|
||||
(setq-local completion-at-point-functions
|
||||
(cons #'tempel-expand
|
||||
completion-at-point-functions)))
|
||||
(add-hook 'conf-mode-hook 'tempel-setup-capf)
|
||||
(add-hook 'prog-mode-hook 'tempel-setup-capf)
|
||||
(add-hook 'text-mode-hook 'tempel-setup-capf)
|
||||
(add-hook 'prog-mode-hook #'tempel-abbrev-mode)
|
||||
(global-tempel-abbrev-mode))
|
||||
|
||||
(use-package tempel-collection
|
||||
:ensure t
|
||||
:straight t)
|
||||
|
||||
(use-package exec-path-from-shell
|
||||
:ensure t
|
||||
:straight t
|
||||
:init
|
||||
(exec-path-from-shell-initialize))
|
||||
|
||||
;; (use-package direnv
|
||||
;; :ensure t
|
||||
;; :straight t
|
||||
;; :config
|
||||
;; (direnv-mode))
|
||||
|
||||
(use-package envrc
|
||||
:ensure t
|
||||
:straight t
|
||||
:init
|
||||
(setq envrc-show-summary-in-minibuffer nil)
|
||||
:hook
|
||||
(after-init . envrc-global-mode))
|
||||
|
||||
;; (use-package add-node-modules-path
|
||||
;; :ensure t
|
||||
;; :straight t
|
||||
;; :defer t
|
||||
;; :custom
|
||||
;; (eval-after-load 'typescript-ts-mode
|
||||
;; '(add-hook 'typescript-ts-mode-hook #'add-node-modules-path))
|
||||
;; (eval-after-load 'tsx-ts-mode
|
||||
;; '(add-hook 'tsx-ts-mode-hook #'add-node-modules-path))
|
||||
;; (eval-after-load 'typescriptreact-mode
|
||||
;; '(add-hook 'typescriptreact-mode-hook #'add-node-modules-path))
|
||||
;; (eval-after-load 'js-mode
|
||||
;; '(add-hook 'js-mode-hook #'add-node-modules-path)))
|
||||
|
||||
(use-package pulsar
|
||||
:defer t
|
||||
:straight t
|
||||
:ensure t
|
||||
:hook
|
||||
(after-init . pulsar-global-mode)
|
||||
:config
|
||||
(setq pulsar-pulse t)
|
||||
(setq pulsar-delay 0.025)
|
||||
(setq pulsar-iterations 10)
|
||||
(setq pulsar-face 'evil-ex-lazy-highlight)
|
||||
|
||||
(add-to-list 'pulsar-pulse-functions 'evil-scroll-down)
|
||||
(add-to-list 'pulsar-pulse-functions 'flymake-goto-next-error)
|
||||
(add-to-list 'pulsar-pulse-functions 'flymake-goto-prev-error)
|
||||
(add-to-list 'pulsar-pulse-functions 'evil-yank)
|
||||
(add-to-list 'pulsar-pulse-functions 'evil-yank-line)
|
||||
(add-to-list 'pulsar-pulse-functions 'evil-delete)
|
||||
(add-to-list 'pulsar-pulse-functions 'evil-delete-line)
|
||||
(add-to-list 'pulsar-pulse-functions 'evil-jump-item)
|
||||
(add-to-list 'pulsar-pulse-functions 'diff-hl-next-hunk)
|
||||
(add-to-list 'pulsar-pulse-functions 'diff-hl-previous-hunk))
|
||||
|
||||
(use-package magit
|
||||
:ensure t
|
||||
:straight t
|
||||
:defer t)
|
||||
|
||||
(use-package diff-hl
|
||||
:ensure t
|
||||
:straight t
|
||||
:config
|
||||
(global-diff-hl-mode))
|
||||
|
||||
;; Mu4e
|
||||
(use-package mu4e
|
||||
:config
|
||||
;; mbsync
|
||||
;;(setq mu4e-mu-binary "mu")
|
||||
(setq mu4e-get-mail-command (concat (executable-find "mbsync") " -a"))
|
||||
(setq mu4e--get-mail-password-regexp "^Master Password: $")
|
||||
(setq mu4e-update-interval 300)
|
||||
(setq mu4e-change-filenames-when-moving t)
|
||||
(setq mu4e-attachment-dir "~/Downloads")
|
||||
|
||||
;;smtp
|
||||
(setq send-mail-function 'sendmail-send-it)
|
||||
(setq sendmail-program (executable-find "msmtp"))
|
||||
(setq message-sendmail-envelop-from 'header)
|
||||
|
||||
;; contexts
|
||||
(setq mu4e-contexts
|
||||
`(,(make-mu4e-context
|
||||
:name "personal"
|
||||
:enter-func
|
||||
(lambda () (mu4e-message "Opening personal"))
|
||||
:leave-func
|
||||
(lambda () (mu4e-message "Closing personal"))
|
||||
:match-func
|
||||
(lambda (msg)
|
||||
(when msg
|
||||
(string-match-p "^/personal" (mu4e-message-field msg :maildir))))
|
||||
:vars '((user-mail-address . "michael@michaelthomson.dev" )
|
||||
(user-full-name . "Michael Thomson")
|
||||
(mu4e-drafts-folder . "/personal/Drafts")
|
||||
(mu4e-refile-folder . "/personal/Archive")
|
||||
(mu4e-sent-folder . "/personal/Sent")
|
||||
(mu4e-trash-folder . "/personal/Trash"))))))
|
||||
|
||||
(use-package notmuch
|
||||
:ensure t
|
||||
:straight t
|
||||
:bind (("C-c m" . notmuch-hello))
|
||||
:custom
|
||||
(notmuch-search-oldest-first nil)
|
||||
(notmuch-saved-searches
|
||||
'((:name "inbox" :query "tag:inbox")
|
||||
(:name "unread" :query "tag:unread")
|
||||
(:name "sent" :query "tag:sent")
|
||||
(:name "drafts" :query "tag:draft")))
|
||||
:init
|
||||
(add-hook 'message-send-hook (lambda ()
|
||||
(let ((from (message-fetch-field "From")))
|
||||
(if (string-match-p (regexp-quote "michael@michaelthomson.dev") from)
|
||||
(progn
|
||||
(setq sendmail-program "msmtp")
|
||||
(setq message-sendmail-extra-arguments nil))
|
||||
(progn
|
||||
(setq sendmail-program "gmi")
|
||||
(setq message-sendmail-extra-arguments '("send" "--quiet" "-t" "-C" "~/Maildir/work")))))))
|
||||
:config
|
||||
(setq notmuch-fcc-dirs nil))
|
||||
|
||||
(use-package ol-notmuch
|
||||
:ensure t
|
||||
:straight t
|
||||
:bind
|
||||
("C-c l" . org-store-link))
|
||||
|
||||
;; epubs
|
||||
(use-package nov
|
||||
:ensure t
|
||||
:straight t)
|
||||
|
||||
;; docker
|
||||
(use-package docker
|
||||
:ensure t
|
||||
:straight t
|
||||
:bind ("C-c d" . docker))
|
||||
|
||||
(use-package alert
|
||||
:ensure t
|
||||
:straight t
|
||||
:commands (alert)
|
||||
:init
|
||||
(setq alert-default-style 'notifier))
|
||||
|
||||
(use-package vterm
|
||||
:ensure t
|
||||
:straight t)
|
||||
|
||||
(use-package nix-mode
|
||||
:ensure t
|
||||
:straight t
|
||||
:mode "\\.nix\\'")
|
||||
|
||||
|
||||
;; RSS
|
||||
(use-package elfeed
|
||||
:ensure t
|
||||
:straight t
|
||||
:custom
|
||||
(elfeed-feeds
|
||||
'(("https://hnrss.org/frontpage" hn)
|
||||
("https://lwn.net/headlines/rss" lwn))))
|
||||
|
||||
(provide 'init)
|
||||
;;; init.el ends here
|
473
modules/home-manager/emacs/init.el
Normal file
473
modules/home-manager/emacs/init.el
Normal file
@ -0,0 +1,473 @@
|
||||
;; performance enhancements
|
||||
(setq gc-cons-threshold #x40000000)
|
||||
|
||||
(setq read-process-output-max (* 1024 1024 4))
|
||||
|
||||
;; EMACS ----------
|
||||
(use-package emacs
|
||||
:ensure nil
|
||||
:custom
|
||||
(column-number-mode t)
|
||||
(auto-save-default nil)
|
||||
(create-lockfiles nil)
|
||||
(display-line-numbers-type 'relative)
|
||||
(global-auto-revert-non-file-buffers t)
|
||||
(history-length 25)
|
||||
(inhibit-startup-message t)
|
||||
(initial-scratch-message "")
|
||||
(ispell-dictionary "en_US")
|
||||
(make-backup-files nil)
|
||||
(pixel-scroll-precision-mode t)
|
||||
(pixel-scroll-precision-use-momentum nil)
|
||||
(ring-bell-function 'ignore)
|
||||
(split-width-threshold 300)
|
||||
(switch-to-buffer-obey-display-actions t)
|
||||
(tab-width 4)
|
||||
(treesit-font-lock-level 4)
|
||||
(truncate-lines t)
|
||||
(use-dialog-box nil)
|
||||
(use-short-answers t)
|
||||
|
||||
;; recommended from vertico
|
||||
(context-menu-mode t)
|
||||
(enable-recursive-minibuffers t)
|
||||
(read-extended-command-predicate #'command-completion-default-include-p)
|
||||
(minibuffer-prompt-properties
|
||||
'(read-only t cursor-intangible t face minibuffer-prompt))
|
||||
|
||||
;; recommended from corfu
|
||||
(tab-always-indent 'complete)
|
||||
(text-mode-ispell-word-completion nil)
|
||||
|
||||
:hook
|
||||
(prog-mode . display-line-numbers-mode)
|
||||
|
||||
:config
|
||||
(set-face-attribute 'default nil :family "JetBrainsMono Nerd Font" :height 120)
|
||||
|
||||
:init
|
||||
(tool-bar-mode -1)
|
||||
(menu-bar-mode -1)
|
||||
(scroll-bar-mode -1)
|
||||
(global-hl-line-mode 1)
|
||||
(global-auto-revert-mode 1)
|
||||
(indent-tabs-mode -1)
|
||||
(recentf-mode 1)
|
||||
(savehist-mode 1)
|
||||
(save-place-mode 1)
|
||||
(winner-mode 1)
|
||||
(xterm-mouse-mode 1)
|
||||
(file-name-shadow-mode 1))
|
||||
|
||||
;; THEMES AND MODELINE ----------
|
||||
(use-package modus-themes
|
||||
:ensure t
|
||||
:config
|
||||
(load-theme 'modus-vivendi t))
|
||||
|
||||
(use-package doom-modeline
|
||||
:ensure t
|
||||
:config
|
||||
(display-battery-mode t)
|
||||
(display-time-mode t)
|
||||
:config (doom-modeline-mode 1))
|
||||
|
||||
(use-package nerd-icons
|
||||
:ensure t)
|
||||
|
||||
(use-package nerd-icons-dired
|
||||
:ensure t
|
||||
:hook
|
||||
(dired-mode . nerd-icons-dired-mode))
|
||||
|
||||
;; EVIL MODE ----------
|
||||
(use-package evil
|
||||
:ensure t
|
||||
:defer t
|
||||
:hook
|
||||
(after-init . evil-mode)
|
||||
:init
|
||||
(setq evil-want-integration t)
|
||||
(setq evil-want-keybinding nil)
|
||||
(setq evil-want-C-u-scroll t)
|
||||
(setq evil-want-C-u-delete t)
|
||||
:config
|
||||
(evil-set-undo-system 'undo-tree)
|
||||
(evil-set-leader 'normal (kbd "SPC"))
|
||||
(evil-set-leader 'visual (kbd "SPC")))
|
||||
|
||||
(use-package evil-collection
|
||||
:after evil
|
||||
:ensure t
|
||||
:config
|
||||
(evil-collection-init))
|
||||
|
||||
(use-package evil-surround
|
||||
:after evil
|
||||
:ensure t
|
||||
:config
|
||||
(global-evil-surround-mode 1))
|
||||
|
||||
;; MINAD STACK -----------
|
||||
(use-package vertico
|
||||
:ensure t
|
||||
:config
|
||||
(setq vertico-cycle t)
|
||||
(setq vertico-resize t)
|
||||
(vertico-mode))
|
||||
|
||||
(use-package orderless
|
||||
:ensure t
|
||||
:config
|
||||
(setq completion-styles '(orderless basic))
|
||||
(setq completion-category-overrides '((file (styles partial-completion))))
|
||||
(setq completion-category-defaults nil)
|
||||
(setq completion-pcm-leading-wildcard t))
|
||||
|
||||
(use-package marginalia
|
||||
:ensure t
|
||||
:config
|
||||
(marginalia-mode))
|
||||
|
||||
(use-package consult
|
||||
:ensure t)
|
||||
|
||||
(use-package embark
|
||||
:ensure t)
|
||||
|
||||
(use-package embark-consult
|
||||
:ensure t
|
||||
:hook
|
||||
(embark-collect-mode . consult-preview-at-point-mode))
|
||||
|
||||
(use-package corfu
|
||||
:ensure t
|
||||
:config
|
||||
(setq corfu-cycle t)
|
||||
(setq corfu-quit-at-boundary nil)
|
||||
(setq corfu-quit-no-match t)
|
||||
(setq corfu-preselect 'prompt)
|
||||
(setq corfu-on-exact-match nil)
|
||||
(setq corfu-auto t)
|
||||
(setq corfu-auto-prefix 2)
|
||||
(setq corfu-popupinfo-delay 0.5)
|
||||
(global-corfu-mode)
|
||||
(corfu-history-mode)
|
||||
(corfu-popupinfo-mode))
|
||||
|
||||
(use-package nerd-icons-corfu
|
||||
:ensure t
|
||||
:after corfu
|
||||
:config (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
|
||||
|
||||
(use-package cape
|
||||
:ensure t
|
||||
:bind ("C-c p" . cape-prefix-map)
|
||||
:config
|
||||
(add-hook 'completion-at-point-functions #'cape-abbrev)
|
||||
(add-hook 'completion-at-point-functions #'cape-dict)
|
||||
(add-hook 'completion-at-point-functions #'cape-file)
|
||||
(add-hook 'completion-at-point-functions #'cape-elisp-block)
|
||||
(add-hook 'completion-at-point-functions #'cape-keyword)
|
||||
(add-hook 'completion-at-point-functions #'cape-tex))
|
||||
|
||||
(use-package tempel
|
||||
:ensure t
|
||||
:custom
|
||||
(defun tempel-setup-capf ()
|
||||
(setq-local completion-at-point-functions
|
||||
(cons #'tempel-expand
|
||||
completion-at-point-functions)))
|
||||
(add-hook 'conf-mode-hook 'tempel-setup-capf)
|
||||
(add-hook 'prog-mode-hook 'tempel-setup-capf)
|
||||
(add-hook 'text-mode-hook 'tempel-setup-capf))
|
||||
|
||||
(use-package tempel-collection
|
||||
:ensure t)
|
||||
|
||||
(use-package eldoc
|
||||
:ensure nil
|
||||
:init
|
||||
(global-eldoc-mode))
|
||||
|
||||
;; LINTING ------------
|
||||
(use-package flycheck
|
||||
:ensure t
|
||||
:config
|
||||
(global-flycheck-mode))
|
||||
|
||||
(use-package consult-flycheck
|
||||
:ensure t)
|
||||
|
||||
(use-package flycheck-eglot
|
||||
:ensure t
|
||||
:after (flycheck eglot)
|
||||
:config
|
||||
(global-flycheck-eglot-mode 1))
|
||||
|
||||
;; LANGUAGE MODES -------
|
||||
(use-package treesit-auto
|
||||
:ensure t
|
||||
:config
|
||||
(treesit-auto-add-to-auto-mode-alist 'all)
|
||||
(global-treesit-auto-mode))
|
||||
|
||||
(use-package nix-ts-mode
|
||||
:ensure t
|
||||
:mode "\\.nix\\'")
|
||||
|
||||
;; LSP ---------
|
||||
(use-package eglot
|
||||
:ensure t
|
||||
:defer t
|
||||
:hook ((nix-ts-mode . eglot-ensure)
|
||||
(go-ts-mode . eglot-ensure)
|
||||
(typescript-ts-mode . eglot-ensure)))
|
||||
|
||||
(use-package eglot-booster
|
||||
:ensure t
|
||||
:after eglot
|
||||
:config
|
||||
(eglot-booster-mode))
|
||||
|
||||
(use-package markdown-mode
|
||||
:ensure t)
|
||||
|
||||
;; TOOLS ---------
|
||||
(use-package magit
|
||||
:ensure t
|
||||
:defer t)
|
||||
|
||||
(use-package vterm
|
||||
:ensure t)
|
||||
|
||||
(use-package undo-tree
|
||||
:ensure t
|
||||
:config
|
||||
(setq undo-tree-visualizer-timestamps t
|
||||
undo-tree-visualizer-diff t
|
||||
undo-limit 800000
|
||||
undo-strong-limit 12000000
|
||||
undo-outer-limit 120000000)
|
||||
(setq undo-tree-history-directory-alist '(("." . "~/.config/emacs/.cache/undo")))
|
||||
(global-undo-tree-mode))
|
||||
|
||||
|
||||
;; PATH STUFF --------
|
||||
(use-package exec-path-from-shell
|
||||
:ensure t
|
||||
:init
|
||||
(exec-path-from-shell-initialize))
|
||||
|
||||
(use-package envrc
|
||||
:ensure t
|
||||
:init
|
||||
(setq envrc-show-summary-in-minibuffer nil)
|
||||
:hook
|
||||
(after-init . envrc-global-mode))
|
||||
|
||||
;; ORG ----------
|
||||
(use-package org
|
||||
:ensure nil
|
||||
:defer t
|
||||
:custom
|
||||
(org-tags-column 0)
|
||||
(org-return-follows-link t)
|
||||
(org-hide-emphasis-markers t)
|
||||
(org-log-into-drawer t)
|
||||
(org-log-done 'time)
|
||||
(org-agenda-span 'day)
|
||||
(org-todo-keywords
|
||||
'((sequence "TODO(t)" "NEXT(n)" "PROG(p)" "INTR(i)" "WAIT(w)" "SOMEDAY(s)" "|" "DONE(d)" "CANCELLED(c)")))
|
||||
(org-capture-templates
|
||||
`(("i" "Inbox" entry (file+headline "todo.org" "Inbox")
|
||||
,(concat "* TODO %?\n"
|
||||
"%U"))
|
||||
("j" "Journal" entry (file denote-journal-path-to-new-or-existing-entry)
|
||||
"* %U %?\n%i\n%a"
|
||||
:kill-buffer t
|
||||
:empty-lines 1)
|
||||
("@" "Inbox [email]" entry (file+headline "todo.org" "Inbox")
|
||||
,(concat "* TODO Process \"%a\" %?\n"
|
||||
"%U"))))
|
||||
(org-refile-use-outline-path 'file)
|
||||
(org-outline-path-complete-in-steps nil)
|
||||
(org-refile-targets '((nil :maxlevel . 9)
|
||||
(org-agenda-files :maxlevel . 9)))
|
||||
(org-agenda-skip-scheduled-if-done t)
|
||||
(org-agenda-skip-deadline-if-done t)
|
||||
(org-agenda-include-deadlines t)
|
||||
(org-agenda-include-diary t)
|
||||
(org-agenda-block-separator nil)
|
||||
(org-agenda-compact-blocks t)
|
||||
(org-agenda-start-with-log-mode t)
|
||||
:config
|
||||
(setq org-directory "~/org")
|
||||
(setq org-agenda-files (list "todo.org"))
|
||||
:hook
|
||||
(org-mode . org-indent-mode)
|
||||
:init
|
||||
(require 'org-tempo))
|
||||
|
||||
(use-package denote
|
||||
:ensure t
|
||||
:hook
|
||||
((dired-mode . denote-dired-mode)
|
||||
(text-mode . denote-fontify-links-mode))
|
||||
:bind
|
||||
(("C-c n n" . denote)
|
||||
("C-c n r" . denote-rename-file)
|
||||
("C-c n l" . denote-link)
|
||||
("C-c n b" . denote-backlinks)
|
||||
("C-c n d" . denote-dired))
|
||||
:config
|
||||
(setq denote-directory (expand-file-name "~/org/note"))
|
||||
(denote-rename-buffer-mode 1))
|
||||
|
||||
(use-package consult-denote
|
||||
:ensure t
|
||||
:bind
|
||||
(("C-c n f" . consult-denote-find)
|
||||
("C-c n g" . consult-denote-grep))
|
||||
:config
|
||||
(consult-denote-mode 1))
|
||||
|
||||
(use-package denote-journal
|
||||
:ensure t
|
||||
:commands (denote-journal-new-entry
|
||||
denote-journal-new-or-existing-entry
|
||||
denote-journal-link-or-create-entry )
|
||||
:hook (calendar-mode . denote-journal-calendar-mode)
|
||||
:config
|
||||
(setq denote-journal-directory
|
||||
(expand-file-name "journal" denote-directory))
|
||||
(setq denote-journal-keyword "journal")
|
||||
(setq denote-journal-title-format 'day-date-month-year))
|
||||
|
||||
(use-package org-superstar
|
||||
:ensure t
|
||||
:hook
|
||||
(org-mode . org-superstar-mode))
|
||||
|
||||
(use-package org-super-agenda
|
||||
:ensure t
|
||||
:custom
|
||||
(org-super-agenda-groups
|
||||
'(
|
||||
(:name "Today"
|
||||
:time-grid t
|
||||
:date today
|
||||
:todo "TODAY"
|
||||
:scheduled today
|
||||
:order 1)
|
||||
(:name "Next Items"
|
||||
:todo "NEXT"
|
||||
:order 2)
|
||||
(:name "Due Today"
|
||||
:deadline today
|
||||
:order 3)
|
||||
(:name "Due Soon"
|
||||
:deadline future
|
||||
:order 4)
|
||||
(:name "Overdue"
|
||||
:deadline past
|
||||
:order 5)
|
||||
(:name "Scheduled Soon"
|
||||
:scheduled future
|
||||
:order 6)
|
||||
(:name "Waiting"
|
||||
:todo "WAIT"
|
||||
:order 7)
|
||||
(:habit t
|
||||
:order 8)
|
||||
(:name "Project"
|
||||
:category "Project"
|
||||
:order 9)
|
||||
)))
|
||||
|
||||
;; KEYBINDS ---------
|
||||
|
||||
(use-package which-key
|
||||
:ensure nil
|
||||
:config
|
||||
(which-key-mode))
|
||||
|
||||
(use-package general
|
||||
:ensure t
|
||||
:config
|
||||
(general-evil-setup t)
|
||||
|
||||
(general-define-key
|
||||
:states 'normal
|
||||
"] d" '(next-error :wk "Goto next error")
|
||||
"[ d" '(previous-error :wk "Goto prev error")
|
||||
"] c" '(diff-hl-next-hunk :wk "Goto next hunk")
|
||||
"[ c" '(diff-hl-previous-hunk :wk "Goto prev hunk")
|
||||
"K" '(eldoc :wk "Describe"))
|
||||
|
||||
(general-create-definer my-leader-def
|
||||
:states '(normal insert visual motion emacs)
|
||||
:keymaps 'override
|
||||
:prefix "SPC"
|
||||
:global-prefix "C-SPC")
|
||||
|
||||
(my-leader-def
|
||||
"f" '(:ignore t :wk "Find")
|
||||
"f c" '((lambda () (interactive) (find-file "~/.config/emacs/init.el")) :wk "Edit emacs config")
|
||||
"f r" '(consult-recent-file :wk "Recent files")
|
||||
"f f" '(consult-find :wk "Find Files")
|
||||
"f g" '(consult-ripgrep :wk "Ripgrep search in files")
|
||||
"f l" '(consult-line :wk "Find line")
|
||||
"f i" '(consult-imenu :wk "Imenu buffer locations"))
|
||||
|
||||
(my-leader-def
|
||||
"c" '(:ignore t :wk "Code")
|
||||
"c a" '(eglot-code-actions :wk "Code actions"))
|
||||
|
||||
(my-leader-def
|
||||
"h" '(:ignore t :wk "Help")
|
||||
"h v" '(describe-variable :wk "Describe variable")
|
||||
"h f" '(describe-function :wk "Describe function")
|
||||
"h k" '(describe-key :wk "Describe key"))
|
||||
|
||||
(my-leader-def
|
||||
"p" '(:ignore t :wk "Project")
|
||||
"p b" '(consult-project-buffer :wk "Project buffers")
|
||||
"p p" '(project-switch-project :wk "Project switch")
|
||||
"p f" '(project-find-file :wk "Project find file")
|
||||
"p g" '(project-find-regexp :wk "Project grep file")
|
||||
"p k" '(project-kill-buffers :wk "Project kill buffers")
|
||||
"p d" '(project-dired :wk "Project dired"))
|
||||
|
||||
(my-leader-def
|
||||
"x" '(:ignore t :wk "Flymake")
|
||||
"x x" '(consult-flycheck :wk "Show diagnostics"))
|
||||
|
||||
(my-leader-def
|
||||
"g" '(:ignore t :wk "Git")
|
||||
"g g" '(magit-status :wk "Magit status")
|
||||
"g l" '(magit-log-current :wk "Magit log"))
|
||||
|
||||
(my-leader-def
|
||||
"u" '(undo-tree-visualize :wk "Undo-tree")))
|
||||
|
||||
(use-package diff-hl
|
||||
:ensure t
|
||||
:config
|
||||
(global-diff-hl-mode))
|
||||
|
||||
(provide 'init)
|
||||
(custom-set-variables
|
||||
;; custom-set-variables was added by Custom.
|
||||
;; 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.
|
||||
'(custom-safe-themes
|
||||
'("77f281064ea1c8b14938866e21c4e51e4168e05db98863bd7430f1352cab294a"
|
||||
default)))
|
||||
(custom-set-faces
|
||||
;; custom-set-faces was added by Custom.
|
||||
;; 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.
|
||||
)
|
@ -22,90 +22,7 @@
|
||||
# "--single-instance"
|
||||
# ];
|
||||
settings = {
|
||||
# background_opacity = "0.9";
|
||||
# background_blur = 5;
|
||||
hide_window_decorations = "titlebar-only";
|
||||
};
|
||||
# extraConfig = ''
|
||||
# # vim:ft=kitty
|
||||
#
|
||||
# ## name: Gruber-dark
|
||||
# ## author: ring0-rootkit
|
||||
# ## license: MIT
|
||||
# ## upstream: https://github.com/ring0-rootkit/gruber-darker-kitty/blob/main/gruber.conf
|
||||
#
|
||||
#
|
||||
#
|
||||
# # The basic colors
|
||||
# foreground #e4e4e4
|
||||
# background #181818
|
||||
# selection_foreground #181818
|
||||
# selection_background #F5F5F5
|
||||
#
|
||||
# # Cursor colors
|
||||
# cursor #FFDD33
|
||||
# cursor_text_color #000000
|
||||
#
|
||||
# # URL underline color when hovering with mouse
|
||||
# url_color #FF4F58
|
||||
#
|
||||
# # Kitty window border colors
|
||||
# active_border_color #96A6C8
|
||||
# inactive_border_color #565F73
|
||||
# bell_border_color #C73C3F
|
||||
#
|
||||
# # OS Window titlebar colors
|
||||
# wayland_titlebar_color #181818
|
||||
# macos_titlebar_color #181818
|
||||
#
|
||||
# # Tab bar colors
|
||||
# active_tab_foreground #101010
|
||||
# active_tab_background #F43841
|
||||
# inactive_tab_foreground #E4E4E4
|
||||
# inactive_tab_background #282828
|
||||
# tab_bar_background #101010
|
||||
#
|
||||
# # Colors for marks (marked text in the terminal)
|
||||
# mark1_foreground #181818
|
||||
# mark1_background #96A6C8
|
||||
# mark2_foreground #181818
|
||||
# mark2_background #F43841
|
||||
# mark3_foreground #181818
|
||||
# mark3_background #73D936
|
||||
#
|
||||
# # The 16 terminal colors
|
||||
#
|
||||
# # black
|
||||
# color0 #101010
|
||||
# color8 #453D41
|
||||
#
|
||||
# # red
|
||||
# color1 #F43841
|
||||
# color9 #F43841
|
||||
#
|
||||
# # green
|
||||
# color2 #73D936
|
||||
# color10 #73D936
|
||||
#
|
||||
# # yellow
|
||||
# color3 #FFDD33
|
||||
# color11 #FFDD33
|
||||
#
|
||||
# # blue
|
||||
# color4 #96A6C8
|
||||
# color12 #96A6C8
|
||||
#
|
||||
# # magenta
|
||||
# color5 #9E95C7
|
||||
# color13 #9E95C7
|
||||
#
|
||||
# # cyan
|
||||
# color6 #95A99F
|
||||
# color14 #95A99F
|
||||
#
|
||||
# # white
|
||||
# color7 #E4E4E4
|
||||
# color15 #FFFFFF
|
||||
# '';
|
||||
};
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
(pkgs.emacsWithPackagesFromUsePackage {
|
||||
config = ./init.el;
|
||||
|
||||
defaultInitFile = true;
|
||||
defaultInitFile = false;
|
||||
|
||||
extraEmacsPackages = epkgs: [
|
||||
epkgs.mu4e
|
||||
|
Loading…
x
Reference in New Issue
Block a user