summaryrefslogtreecommitdiff
path: root/arkta
diff options
context:
space:
mode:
Diffstat (limited to 'arkta')
-rw-r--r--arkta/arkta-cosmetic.el150
-rw-r--r--arkta/arkta-progmodes.el285
-rw-r--r--arkta/arkta-project.el143
3 files changed, 0 insertions, 578 deletions
diff --git a/arkta/arkta-cosmetic.el b/arkta/arkta-cosmetic.el
deleted file mode 100644
index 96e5498..0000000
--- a/arkta/arkta-cosmetic.el
+++ /dev/null
@@ -1,150 +0,0 @@
1;; -*- lexical-binding: t -*-
2;; Copyright © 2018-2025 Uko Koknevics
3
4(use-package ansi-color
5 :ensure nil
6 :hook (compilation-filter . ansi-color-compilation-filter)
7 :custom
8 (ansi-color-for-compilation-mode t))
9
10(use-package centaur-tabs
11 :ensure t
12 :demand t
13 :init
14 (defun arkta/disable-centaur-tabs-mode ()
15 (centaur-tabs-local-mode +1))
16 :hook (dashboard-mode . arkta/disable-centaur-tabs-mode)
17 :bind (("C-x <C-right>" . centaur-tabs-forward)
18 ("C-x <right>" . centaur-tabs-forward)
19 ("C-x <C-left>" . centaur-tabs-backward)
20 ("C-x <left>" . centaur-tabs-backward))
21 :custom
22 (centaur-tabs-style "alternate")
23 (centaur-tabs-height 35)
24 (centaur-tabs-icon-type 'nerd-icons)
25 (centaur-tabs-set-icons t)
26 (centaur-tabs-gray-out-icons 'buffer)
27 (centaur-tabs-set-bar 'over)
28 (centaur-tabs-set-close-button nil)
29 (centaur-tabs-set-modified-marker t)
30 (centaur-tabs-modified-marker "●")
31 (centaur-tabs-cycle-scope 'tabs)
32 :config
33 (centaur-tabs-mode +1))
34
35(use-package display-fill-column-indicator
36 :ensure nil
37 :demand t
38 :init
39 (defun arkta/disable-dfci ()
40 (display-fill-column-indicator-mode -1))
41 :hook (dashboard-mode . arkta/disable-dfci)
42 :config
43 (global-display-fill-column-indicator-mode +1))
44
45(use-package display-line-numbers
46 :ensure nil
47 :demand t
48 :init
49 (defun arkta/disable-dln ()
50 (display-line-numbers-mode -1))
51 :hook ((dashboard-mode help-mode) . arkta/disable-dln)
52 :config
53 (global-display-line-numbers-mode +1))
54
55(use-package doom-modeline
56 :ensure t
57 :custom
58 (doom-modeline-bar-width 4)
59 (doom-modeline-battery t)
60 (doom-modeline-buffer-file-true-name t)
61 (doom-modeline-height 25)
62 (doom-modeline-hud t)
63 (doom-modeline-hud-min-height 6)
64 (doom-modeline-icon t)
65 (doom-modeline-percent-position nil)
66 (doom-modeline-project-detection 'project)
67 (doom-modeline-total-line-number t)
68 :config
69 (doom-modeline-mode +1))
70
71(use-package emojify
72 :ensure t
73 :config
74 (global-emojify-mode +1))
75
76(use-package faces
77 :ensure nil
78 :custom-face
79 (default ((t (:weight ,(if +mac+ 'medium 'regular)
80 :slant normal
81 :width normal
82 :font "Input Mono"
83 :height 130)))))
84
85(use-package git-gutter
86 :ensure t
87 :config
88 (global-git-gutter-mode +1))
89
90(use-package hl-line
91 :ensure nil
92 :config
93 (global-hl-line-mode +1))
94
95(use-package hl-todo
96 :ensure t
97 :config
98 (global-hl-todo-mode +1))
99
100(use-package modus-themes
101 :ensure t
102 :config
103 (load-theme 'modus-operandi t))
104
105(use-package nerd-icons
106 :ensure t
107 :init
108 (defun arkta/nerd-icons-maybe-install-fonts ()
109 (when (and (display-graphic-p)
110 (not (find-font (font-spec :family nerd-icons-font-family))))
111 ;; TODO: Maybe also reinstall them every month or so
112 (nerd-icons-install-fonts t)))
113 :hook ((elpaca-after-init server-after-make-frame) . arkta/nerd-icons-maybe-install-fonts))
114
115(use-package rainbow-delimiters
116 :ensure t
117 :hook (prog-mode . rainbow-delimiters-mode))
118
119(use-package rainbow-mode
120 :ensure t
121 :init
122 (defun arkta/enable-rainbow ()
123 (rainbow-mode +1))
124 :hook (prog-mode . arkta/enable-rainbow))
125
126(use-package scroll-bar
127 :ensure nil
128 :defer t
129 :config
130 (scroll-bar-mode -1))
131
132(use-package solaire-mode
133 :ensure t
134 :config
135 (solaire-global-mode +1))
136
137(use-package time
138 :ensure nil
139 :custom
140 (display-time-default-load-average nil)
141 :config
142 (display-time-mode +1))
143
144(use-package tool-bar
145 :ensure nil
146 :defer t
147 :config
148 (tool-bar-mode -1))
149
150(provide 'arkta-cosmetic)
diff --git a/arkta/arkta-progmodes.el b/arkta/arkta-progmodes.el
deleted file mode 100644
index a85d0c0..0000000
--- a/arkta/arkta-progmodes.el
+++ /dev/null
@@ -1,285 +0,0 @@
1;; -*- lexical-binding: t -*-
2;; Copyright © 2018-2025 Uko Koknevics
3
4(use-package adoc-mode
5 :ensure t
6 :mode "\\.adoc\\'")
7
8(use-package asm-mode
9 :ensure nil
10 :mode ("\\.s\\'" "\\.S\\'")
11 :init
12 (defun arkta/asm-setup ()
13 (set-tab-usage t)
14 (set-tab-width 8))
15 :hook (asm-mode . arkta/asm-setup))
16
17(use-package auto-compile
18 :after elisp-mode
19 :ensure t
20 :hook ((emacs-lisp-mode . auto-compile-on-load-mode)
21 (emacs-lisp-mode . auto-compile-on-save-mode)))
22
23(use-package c-ts-mode
24 :after treesit
25 :ensure nil
26 :mode ("\\.c\\'"
27 ("\\.cpp\\'" . c++-ts-mode))
28 :init
29 (defun arkta/c-setup ()
30 (set-tab-usage t)
31 (set-tab-width c-ts-mode-indent-offset))
32 :hook (c-ts-base-mode . arkta/c-setup)
33 :custom
34 (c-ts-mode-indent-offset 8)
35 (c-ts-mode-indent-style (lambda ()
36 `(((node-is ")") parent-bol 0)
37 ((node-is "}") parent-bol 0)
38 ((node-is "access_specifier") parent-bol 0)
39 ((parent-is "argument_list") parent-bol c-ts-mode-indent-offset)
40 ((parent-is "parameter_list") parent-bol c-ts-mode-indent-offset)
41 ((parent-is "field_declaration_list") parent-bol c-ts-mode-indent-offset)
42 ,@(alist-get 'linux (c-ts-mode--indent-styles 'c))))))
43
44(use-package cmake-ts-mode
45 :after treesit
46 :ensure nil
47 :mode ("CMakeLists\\.txt\\'"
48 "\\.cmake\\'"))
49
50(use-package company-mlton
51 :after (company sml)
52 :ensure '(company-mlton :host github
53 :repo "MatthewFluet/company-mlton")
54 :hook (sml-mode . company-mlton-init))
55
56(use-package csharp-mode
57 :after treesit
58 :ensure nil
59 :mode "\\.cs\\'")
60
61(use-package css-mode
62 :after treesit
63 :ensure nil
64 :mode "\\.css\\'")
65
66(use-package dart-mode
67 :ensure t
68 :mode "\\.dart\\'")
69
70(use-package dockerfile-ts-mode
71 :after treesit
72 :ensure nil
73 :mode "Dockerfile\\'")
74
75(use-package ebuild-mode
76 :ensure (ebuild-mode :host github
77 :repo "emacsmirror/ebuild-mode")
78 :mode ("\\.ebuild\\'"
79 "\\.eclass\\'"))
80
81(use-package elisp-mode
82 :ensure nil
83 :mode ("\\.el\\'" . emacs-lisp-mode))
84
85(use-package elixir-mode
86 :ensure t
87 :mode "\\.exs?\\'"
88 :init
89 (defun arkta/elixir-setup ()
90 (add-hook 'before-save-hook #'elixir-format nil t))
91 :hook (elixir-mode . arkta/elixir-setup))
92
93(use-package gdscript-mode
94 :ensure t
95 :mode "\\.gd\\'")
96
97(use-package go-ts-mode
98 :after treesit
99 :ensure nil
100 :mode "\\.go\\'"
101 :init
102 (defun arkta/go-setup ()
103 (add-hook 'before-save-hook #'gofmt-before-save nil t)
104 (set-tab-usage t)
105 (set-tab-width go-ts-mode-indent-offset))
106 :hook (go-ts-mode . arkta/go-setup))
107
108(use-package groovy-mode
109 :ensure t
110 :mode ("Jenkinsfile\\'"
111 "\\.jenkinsfile\\'"
112 "\\.gradle\\'"
113 "\\.groovy\\'"))
114
115(use-package haskell-mode
116 :ensure t
117 :mode "\\.hs\\'")
118
119(use-package htmlize
120 :ensure t)
121
122(use-package java-ts-mode
123 :after treesit
124 :ensure nil
125 :mode "\\.java\\'")
126
127(use-package js
128 :after treesit
129 :ensure nil
130 :mode ("\\.js\\'" . js-ts-mode))
131
132(use-package json-ts-mode
133 :after treesit
134 :ensure nil
135 :mode "\\.json\\'")
136
137(use-package kotlin-ts-mode
138 :after treesit
139 :ensure t
140 :mode "\\.kts?\\'")
141
142(use-package lisp-mode
143 :ensure nil
144 :mode "\\.lisp\\'")
145
146(use-package lua-mode
147 :ensure t
148 :custom
149 (lua-indent-level 4)
150 :mode ("\\.lua\\'" "\\.rockspec\\'"))
151
152(use-package make-mode
153 :ensure nil
154 :mode (("Makefile\\'" . makefile-gmake-mode)
155 ("GNUmakefile\\'" . makefile-mode)
156 ("\\.mk\\(\\.template\\)?\\'" . makefile-mode)))
157
158(use-package markdown-mode
159 :ensure t
160 :mode ("\\.md\\'" . gfm-mode))
161
162(use-package nasm-mode
163 :ensure t
164 :mode ("\\.asm\\'"
165 "\\.inc\\'")
166 :init
167 (defun arkta/nasm-setup ()
168 (set-tab-width 4))
169 :hook (nasm-mode . arkta/nasm-setup))
170
171(use-package nix-mode
172 :ensure t
173 :mode "\\.nix\\'")
174
175(use-package nxml-mode
176 :ensure nil
177 :mode ("\\.xml\\'"
178 "\\.plist\\'"
179 "\\.svg\\'"))
180
181(use-package org
182 :ensure nil
183 :after htmlize
184 :bind (("C-c l" . org-store-link)
185 ("C-c a" . org-agenda))
186 :mode ("\\.org\\'" . org-mode)
187 :custom
188 (org-agenda-files '("~/TODO.org"))
189 (org-log-done t))
190
191(use-package php-mode
192 :ensure t
193 :mode "\\.php\\'")
194
195(use-package pico8-mode
196 :ensure '(pico8-mode :host github
197 :repo "Kaali/pico8-mode")
198 :mode "\\.p8\\'")
199
200(use-package proof-general
201 :ensure t)
202
203(use-package prolog
204 :ensure nil
205 :mode ("\\.pl\\'" . prolog-mode))
206
207(use-package python
208 :after treesit
209 :ensure nil
210 :mode ("\\.py\\'" . python-ts-mode))
211
212(use-package racket-mode
213 :ensure t
214 :mode "\\.rkt\\'")
215
216(use-package ruby-ts-mode
217 :after treesit
218 :ensure nil
219 :mode "\\.rb\\'")
220
221(use-package rust-ts-mode
222 :after treesit
223 :ensure nil
224 :mode "\\.rs\\'")
225
226(use-package scala-mode
227 :ensure t
228 :mode "\\.scala\\'")
229
230(use-package scheme
231 :ensure nil
232 :commands scheme-mode
233 :mode ("\\.scm\\'" . scheme-mode)
234 :config
235 (put 'module 'scheme-indent-function 2))
236
237(use-package slime
238 :ensure t
239 :after lisp-mode
240 :commands slime
241 :custom
242 (inferior-lisp-program (executable-find "sbcl")))
243
244(use-package smalltalk-mode
245 :ensure t
246 :mode "\\.st\\'")
247
248(use-package sml-mode
249 :ensure t
250 :mode "\\.sml\\'")
251
252(use-package svelte-mode
253 :ensure t
254 :mode ("\\.svelte\\'" "\\.svx\\'"))
255
256(use-package swift-mode
257 ;; There's swift-ts-mode... but it doesn't have parser.c committed...
258 :ensure t
259 :mode "\\.swift\\'")
260
261(use-package toml-ts-mode
262 :after treesit
263 :ensure nil
264 :mode "\\.toml\\'")
265
266(use-package typescript-ts-mode
267 :after treesit
268 :ensure nil
269 :mode "\\.ts\\'")
270
271(use-package typst-ts-mode
272 :after treesit
273 :ensure t
274 :mode "\\.typ\\'")
275
276(use-package yaml-ts-mode
277 :after treesit
278 :ensure nil
279 :mode ("\\.clang-\\(tidy\\|format\\)\\'" "\\.ya?ml\\'"))
280
281(use-package zig-mode
282 :ensure t
283 :mode "\\.zig\\'")
284
285(provide 'arkta-progmodes)
diff --git a/arkta/arkta-project.el b/arkta/arkta-project.el
deleted file mode 100644
index 18354a9..0000000
--- a/arkta/arkta-project.el
+++ /dev/null
@@ -1,143 +0,0 @@
1;; -*- lexical-binding: t -*-
2;; Copyright © 2018-2025 Uko Koknevics
3
4;; TODO: See about porting this to project.el:
5;; (define-key map (kbd "a") #'projectile-find-other-file)
6;; (define-key map (kbd "E") #'projectile-edit-dir-locals)
7;; (define-key map (kbd "g") #'projectile-find-file-dwim)
8;; (define-key map (kbd "i") #'projectile-invalidate-cache)
9;; (define-key map (kbd "I") #'projectile-ibuffer)
10;; (define-key map (kbd "j") #'projectile-find-tag)
11;; (define-key map (kbd "l") #'projectile-find-file-in-directory)
12;; (define-key map (kbd "m") #'projectile-commander)
13;; (define-key map (kbd "o") #'projectile-multi-occur)
14;; (define-key map (kbd "q") #'projectile-switch-open-project)
15;; (define-key map (kbd "R") #'projectile-regenerate-tags)
16
17;; (define-key map (kbd "s r") #'projectile-ripgrep)
18;; (define-key map (kbd "s s") #'projectile-ag)
19
20;; (define-key map (kbd "S") #'projectile-save-project-buffers)
21;; (define-key map (kbd "t") #'projectile-toggle-between-implementation-and-test)
22;; (define-key map (kbd "T") #'projectile-find-test-file)
23;; ;; project lifecycle external commands
24;; ;; TODO: Bundle those under some prefix key
25;; (define-key map (kbd "C") #'projectile-configure-project)
26;; (define-key map (kbd "K") #'projectile-package-project)
27;; (define-key map (kbd "L") #'projectile-install-project)
28;; (define-key map (kbd "P") #'projectile-test-project)
29;; (define-key map (kbd "u") #'projectile-run-project)
30
31;; ;; integration with utilities
32;; (define-key map (kbd "x i") #'projectile-run-ielm)
33;; (define-key map (kbd "x t") #'projectile-run-term)
34;; (define-key map (kbd "x g") #'projectile-run-gdb)
35;; (define-key map (kbd "x v") #'projectile-run-vterm)
36;; (define-key map (kbd "x 4 v") #'projectile-run-vterm-other-window)
37
38;; ;; misc
39;; (define-key map (kbd "z") #'projectile-cache-current-file)
40;; (define-key map (kbd "<left>") #'projectile-previous-project-buffer)
41;; (define-key map (kbd "<right>") #'projectile-next-project-buffer)
42;; (define-key map (kbd "ESC") #'projectile-project-buffers-other-buffer)
43
44(cl-defun arkta/project-completing-read (prompt choices &key initial-input action (project (project-current t)))
45 "Present a project tailored PROMPT with CHOICES."
46 (require 'ivy)
47 (let ((prompt (arkta/project-prepend-project-name prompt project)))
48 (ivy-read prompt choices
49 :initial-input initial-input
50 :action action
51 :caller 'arkta/project-completing-read)))
52
53(defun arkta/project-expand-root (name &optional project)
54 "Expand NAME to project root."
55 (let (project (or project (project-current t)))
56 (expand-file-name name (project-root project))))
57
58(defun arkta/project-find-references (&optional symbol)
59 "Find all references to SYMBOL in the current project.
60
61A thin wrapper around `xref-references-in-directory'."
62 (interactive)
63 (require 'xref)
64 (let ((project-root (project-root (project-current t)))
65 (symbol (or symbol
66 (read-from-minibuffer "Lookup in project: " (arkta/symbol-at-point)))))
67 (xref-show-xrefs (xref-references-in-directory symbol project-root) nil)))
68
69(defun arkta/project-magit-status ()
70 (interactive)
71 (magit-status (project-root (project-current t))))
72
73(defun arkta/project-prepend-project-name (string &optional project)
74 "Prepend the current project's name to STRING."
75 (let ((project (or project (project-current t))))
76 (format "[%s] %s" (project-name project) string)))
77
78(defun arkta/project-recentf ()
79 "Show a list of recently visited files in a project."
80 (interactive)
81 (let ((project (project-current t)))
82 (find-file (arkta/project-expand-root
83 (arkta/project-completing-read
84 "Recently visited files: "
85 (arkta/project-recentf-files project)
86 :project project)
87 project))))
88
89(defun arkta/project-recentf-files (&optional project)
90 "Return a list of recently visited files in a project."
91 (require 'recentf)
92 (let* ((project (or project (project-current t)))
93 (project-root (expand-file-name (project-root project))))
94 (mapcar
95 (lambda (f) (file-relative-name f project-root))
96 (cl-remove-if-not
97 (lambda (f) (string-prefix-p project-root (expand-file-name f)))
98 recentf-list))))
99
100(defun arkta/symbol-at-point ()
101 "Get the symbol at point and strip its properties."
102 (substring-no-properties (or (thing-at-point 'symbol) "")))
103
104(use-package project
105 :ensure nil
106 :config
107 (defvar-keymap arkta/project-prefix-map
108 :parent project-prefix-map
109 "C-b" 'project-list-buffers
110
111 "!" 'project-shell-command
112 "&" 'project-async-shell-command
113
114 "4" 'project-other-window-command
115 "5" 'project-other-frame-command
116
117 "D" 'project-dired
118 "F" 'project-or-external-find-file
119 "V" 'project-vc-dir
120
121 "b" 'project-switch-to-buffer
122 "c" 'project-compile
123 "d" 'project-find-dir
124 "e" 'arkta/project-recentf
125 "f" 'project-find-file
126 "k" 'project-kill-buffers
127 "p" 'project-switch-project
128 "r" 'project-query-replace-regexp
129 "v" 'arkta/project-magit-status
130
131 "M-x" 'project-execute-extended-command
132
133 "s f" 'project-find-file
134 "s g" 'project-find-regexp
135 "s r" 'project-find-regexp
136 "s x" 'arkta/project-find-references
137
138 "x e" 'project-eshell
139 "x s" 'project-shell)
140 (fset 'arkta/project-prefix-map arkta/project-prefix-map)
141 :bind (("C-c p" . arkta/project-prefix-map)))
142
143(provide 'arkta-project)