Compare commits
10 Commits
09bfc2f8a6
...
no-shibumi
| Author | SHA1 | Date | |
|---|---|---|---|
| b7912eef52 | |||
| ed88afe698 | |||
| e52adbbc4b | |||
| db1b86cbd7 | |||
| 74dc6fd742 | |||
| 591f00e2f9 | |||
| 9e653100f2 | |||
| 96e6fc7706 | |||
| 7770c44924 | |||
| 4bec74fd5f |
Generated
+9
-9
@@ -25,11 +25,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775762219,
|
"lastModified": 1779969295,
|
||||||
"narHash": "sha256-e7BhggoWhg3Ok7dDI5kY1XZzORBQc0Rclcs3IWzux3w=",
|
"narHash": "sha256-HwIJ3tOcwSMiV75L7KqJXciXR9UfT+d7rwOZMX7cTnA=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "c975a66a56306b38eaa3108f54bbc11e213f42f6",
|
"rev": "61e2c9659324181e0f0ed911958c536333b1d4f6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -65,11 +65,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775365369,
|
"lastModified": 1779604987,
|
||||||
"narHash": "sha256-DgH5mveLoau20CuTnaU5RXZWgFQWn56onQ4Du2CqYoI=",
|
"narHash": "sha256-ZQ5z+fVhxYKtIFwtqGp5O0PD84BM1riASvqDaN5Xs+s=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-index-database",
|
"repo": "nix-index-database",
|
||||||
"rev": "cef5cf82671e749ac87d69aadecbb75967e6f6c3",
|
"rev": "8fba98c80b48fa013820e0163c5096922fea4ddd",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -80,11 +80,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775423009,
|
"lastModified": 1779560665,
|
||||||
"narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
|
"narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
|
"rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
@@ -50,13 +50,11 @@
|
|||||||
modules =
|
modules =
|
||||||
[
|
[
|
||||||
nix-index-database.homeModules.default
|
nix-index-database.homeModules.default
|
||||||
|
"${modules}/base.nix"
|
||||||
|
"${modules}/desktop.nix"
|
||||||
|
"${modules}/shibumi.nix"
|
||||||
|
"${modules}/shibumi-desktop.nix"
|
||||||
] ++
|
] ++
|
||||||
(pkgs.lib.filter
|
|
||||||
(n: pkgs.lib.strings.hasSuffix ".nix" n)
|
|
||||||
(pkgs.lib.filesystem.listFilesRecursive "${modules}/base")) ++
|
|
||||||
(pkgs.lib.filter
|
|
||||||
(n: pkgs.lib.strings.hasSuffix ".nix" n)
|
|
||||||
(pkgs.lib.filesystem.listFilesRecursive "${modules}/desktop")) ++
|
|
||||||
[{
|
[{
|
||||||
home.stateVersion = "22.05";
|
home.stateVersion = "22.05";
|
||||||
home.username = "jfrikker";
|
home.username = "jfrikker";
|
||||||
|
|||||||
@@ -1,5 +1,38 @@
|
|||||||
#+PROPERTY: header-args :mkdirp yes
|
#+PROPERTY: header-args :mkdirp yes
|
||||||
#+PROPERTY: header-args:elisp :lexical t
|
#+PROPERTY: header-args:elisp :lexical t
|
||||||
|
* Categories
|
||||||
|
|
||||||
|
#+BEGIN_SRC nix :tangle target/base.nix
|
||||||
|
{lib, ...}: {
|
||||||
|
imports = lib.filter
|
||||||
|
(n: lib.strings.hasSuffix ".nix" n)
|
||||||
|
(lib.filesystem.listFilesRecursive ./base);
|
||||||
|
}
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+BEGIN_SRC nix :tangle target/desktop.nix
|
||||||
|
{lib, ...}: {
|
||||||
|
imports = lib.filter
|
||||||
|
(n: lib.strings.hasSuffix ".nix" n)
|
||||||
|
(lib.filesystem.listFilesRecursive ./desktop);
|
||||||
|
}
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+BEGIN_SRC nix :tangle target/redbook.nix
|
||||||
|
{lib, ...}: {
|
||||||
|
imports = lib.filter
|
||||||
|
(n: lib.strings.hasSuffix ".nix" n)
|
||||||
|
(lib.filesystem.listFilesRecursive ./redbook);
|
||||||
|
}
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+BEGIN_SRC nix :tangle target/redbook-desktop.nix
|
||||||
|
{lib, ...}: {
|
||||||
|
imports = lib.filter
|
||||||
|
(n: lib.strings.hasSuffix ".nix" n)
|
||||||
|
(lib.filesystem.listFilesRecursive ./redbook-desktop);
|
||||||
|
}
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
* Packages
|
* Packages
|
||||||
Home-manager "packages" are simply binaries that are placed on the path, without any attached
|
Home-manager "packages" are simply binaries that are placed on the path, without any attached
|
||||||
@@ -90,6 +123,7 @@ tools. They boost better speed, or simply more streamlined features.
|
|||||||
dust
|
dust
|
||||||
fd
|
fd
|
||||||
ripgrep
|
ripgrep
|
||||||
|
tokei
|
||||||
xh
|
xh
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -131,9 +165,9 @@ between them. Once installed, the actual command is ~wormhole~.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
These are the other programs I have installed globally. A few (like ~awscli~, ~mysql-client~, etc.)
|
These are the other programs I have installed globally. A few (like ~awscli~, ~mysql-client~, etc.)
|
||||||
are still Shibumi-specific; ideally I'd find another way to install them.
|
are still Redbook-specific; ideally I'd find another way to install them.
|
||||||
|
|
||||||
#+BEGIN_SRC nix :tangle target/base/other-packages.nix
|
#+BEGIN_SRC nix :tangle target/redbook/other-packages.nix
|
||||||
{pkgs, kube, ...}:
|
{pkgs, kube, ...}:
|
||||||
{
|
{
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
@@ -142,9 +176,7 @@ are still Shibumi-specific; ideally I'd find another way to install them.
|
|||||||
kube
|
kube
|
||||||
kubectl
|
kubectl
|
||||||
mariadb.client
|
mariadb.client
|
||||||
nerd-fonts.jetbrains-mono
|
|
||||||
openssh
|
openssh
|
||||||
tokei
|
|
||||||
];
|
];
|
||||||
|
|
||||||
fonts.fontconfig.enable = true;
|
fonts.fontconfig.enable = true;
|
||||||
@@ -158,17 +190,26 @@ These programs require a full desktop environment:
|
|||||||
{
|
{
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
google-chrome
|
google-chrome
|
||||||
|
nerd-fonts.jetbrains-mono
|
||||||
(iosevka-bin.override { variant = "Aile"; })
|
(iosevka-bin.override { variant = "Aile"; })
|
||||||
(iosevka-bin.override { variant = "Etoile"; })
|
(iosevka-bin.override { variant = "Etoile"; })
|
||||||
(iosevka-bin.override { variant = "SGr-IosevkaTerm"; })
|
(iosevka-bin.override { variant = "SGr-IosevkaTerm"; })
|
||||||
keymapp
|
keymapp
|
||||||
proton-pass
|
proton-pass
|
||||||
slack
|
|
||||||
wireshark
|
wireshark
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
#+BEGIN_SRC nix :tangle target/redbook-desktop/desktop-packages.nix
|
||||||
|
{pkgs, ...}:
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
slack
|
||||||
|
];
|
||||||
|
}
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
* Program Configurations
|
* Program Configurations
|
||||||
This section contains applications whose config files will be generated by Home Manager. Home
|
This section contains applications whose config files will be generated by Home Manager. Home
|
||||||
Manager calls these "programs" (as opposed to "packages", which are just binaries to put on the
|
Manager calls these "programs" (as opposed to "packages", which are just binaries to put on the
|
||||||
@@ -272,7 +313,7 @@ We all know what ~git~ does.
|
|||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings.user.name = "Joe Frikker";
|
settings.user.name = "Joe Frikker";
|
||||||
settings.user.email = "joe.frikker@shibumi.com";
|
settings.user.email = "joe@redbookcattle.com";
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.delta = {
|
programs.delta = {
|
||||||
@@ -752,19 +793,19 @@ These are just some general settings that apply everywhere. First, a few package
|
|||||||
Turn off some default settings that I don't find useful.
|
Turn off some default settings that I don't find useful.
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(setq inhibit-startup-screen t)
|
(setopt inhibit-startup-screen t)
|
||||||
(setq initial-scratch-message nil)
|
(setopt initial-scratch-message nil)
|
||||||
(menu-bar-mode -1)
|
(menu-bar-mode -1)
|
||||||
(scroll-bar-mode -1)
|
(scroll-bar-mode -1)
|
||||||
(tool-bar-mode -1)
|
(tool-bar-mode -1)
|
||||||
(setq make-backup-files nil)
|
(setopt make-backup-files nil)
|
||||||
(setq split-width-threshold 200)
|
(setopt split-width-threshold 200)
|
||||||
(setq split-height-threshold nil)
|
(setopt split-height-threshold nil)
|
||||||
(setopt display-buffer-base-action
|
(setopt display-buffer-base-action
|
||||||
'((display-buffer-reuse-window display-buffer-same-window
|
'((display-buffer-reuse-window display-buffer-same-window
|
||||||
display-buffer-in-previous-window
|
display-buffer-in-previous-window
|
||||||
display-buffer-use-some-window)))
|
display-buffer-use-some-window)))
|
||||||
(setq view-read-only t)
|
(setopt view-read-only t)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Make sure which-key mode is always on. The on-the-fly keymap help it gives is indespensable.
|
Make sure which-key mode is always on. The on-the-fly keymap help it gives is indespensable.
|
||||||
@@ -791,7 +832,7 @@ From the docs: "If ‘complete’, TAB first tries to indent the current line, a
|
|||||||
already indented, then try to complete the thing at point." Recommended by [[https://github.com/minad/corfu][the ~corfu~ readme]].
|
already indented, then try to complete the thing at point." Recommended by [[https://github.com/minad/corfu][the ~corfu~ readme]].
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(setq tab-always-indent 'complete)
|
(setopt tab-always-indent 'complete)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Set the cursor to be a bar. I'm not sure what the benefit would be of a block cursor, since the
|
Set the cursor to be a bar. I'm not sure what the benefit would be of a block cursor, since the
|
||||||
@@ -845,7 +886,6 @@ cool, so I'm turning it on in prog mode. The enabled ligatures are font-specific
|
|||||||
ligature wiki]].
|
ligature wiki]].
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(require 'ligature)
|
|
||||||
(ligature-set-ligatures 'prog-mode
|
(ligature-set-ligatures 'prog-mode
|
||||||
'("--" "---" "==" "===" "!=" "!==" "=!="
|
'("--" "---" "==" "===" "!=" "!==" "=!="
|
||||||
"=:=" "=/=" "<=" ">=" "&&" "&&&" "&=" "++" "+++" "***" ";;" "!!"
|
"=:=" "=/=" "<=" ">=" "&&" "&&&" "&=" "++" "+++" "***" ";;" "!!"
|
||||||
@@ -873,14 +913,15 @@ Use variable-width fonts in text buffers. ~mixed-pitch-mode~ keeps most code blo
|
|||||||
|
|
||||||
(add-hook 'yaml-ts-mode-hook 'no-mixed-pitch)
|
(add-hook 'yaml-ts-mode-hook 'no-mixed-pitch)
|
||||||
(add-hook 'mhtml-mode 'no-mixed-pitch)
|
(add-hook 'mhtml-mode 'no-mixed-pitch)
|
||||||
|
(add-hook 'nxml-mode 'no-mixed-pitch)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
A basic ace-window setup. Allows switching between windows quickly (although avy can do the same...).
|
A basic ace-window setup. Allows switching between windows quickly (although avy can do the same...).
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(require 'ace-window)
|
|
||||||
(bind-keys ("M-o" . ace-window)
|
(bind-keys ("M-o" . ace-window)
|
||||||
("s-o" . ace-window))
|
("s-o" . ace-window)
|
||||||
|
("C-c o" . ace-window))
|
||||||
(setopt aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l))
|
(setopt aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l))
|
||||||
(setopt aw-dispatch-always t)
|
(setopt aw-dispatch-always t)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@@ -890,8 +931,10 @@ Set up a few project- / workspace-related key bindings.
|
|||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(bind-keys ("s-f" . project-find-file)
|
(bind-keys ("s-f" . project-find-file)
|
||||||
("s-F" . project-switch-project))
|
("s-F" . project-switch-project))
|
||||||
|
|
||||||
|
(with-eval-after-load 'tab-bar
|
||||||
(bind-keys :map tab-bar-mode-map
|
(bind-keys :map tab-bar-mode-map
|
||||||
("s-s" . tab-bar-switch-to-tab))
|
("s-s" . tab-bar-switch-to-tab)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Don't run a server. I'm not using this, I can always turn it back on if I need to.
|
Don't run a server. I'm not using this, I can always turn it back on if I need to.
|
||||||
@@ -904,13 +947,13 @@ All the beeping is annoying. This flashes a huge icon over the screen, which is
|
|||||||
less so?
|
less so?
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(setq visible-bell t)
|
(setopt visible-bell t)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
I'm trying this out. This disables visual selections. It's bold, which is why I like it :)
|
I'm trying this out. This disables visual selections. It's bold, which is why I like it :)
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(transient-mark-mode -1)
|
;; (transient-mark-mode -1)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
I use tabs to manage multiple "workspaces". I don't tie a project to a tab or anything; often fixing
|
I use tabs to manage multiple "workspaces". I don't tie a project to a tab or anything; often fixing
|
||||||
@@ -922,14 +965,19 @@ change when drilling into a help page or something. I've set up repeat mode to m
|
|||||||
move backward / forward through history.
|
move backward / forward through history.
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(require 'tab-bar)
|
|
||||||
|
|
||||||
(bind-keys :repeat-map tab-bar-repeat-map
|
(bind-keys :repeat-map tab-bar-repeat-map
|
||||||
("<left>" . tab-bar-history-back)
|
("<left>" . tab-bar-history-back)
|
||||||
("<right>" . tab-bar-history-forward))
|
("<right>" . tab-bar-history-forward))
|
||||||
|
|
||||||
(tab-bar-history-mode)
|
(tab-bar-history-mode)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
Make compilation mode buffers auto-scroll to the first error:
|
||||||
|
|
||||||
|
#+BEGIN_SRC elisp
|
||||||
|
(setopt compilation-scroll-output 'first-error)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
*** Window Placement
|
*** Window Placement
|
||||||
This section contains rules about where ~display-buffer~ should place windows. I guess I'm currently
|
This section contains rules about where ~display-buffer~ should place windows. I guess I'm currently
|
||||||
going for an IDE-style layout, with one main editor window, and auxiliary bottom and right side
|
going for an IDE-style layout, with one main editor window, and auxiliary bottom and right side
|
||||||
@@ -987,6 +1035,7 @@ content to be.
|
|||||||
window-persistent-parameters))
|
window-persistent-parameters))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
|
||||||
** Editing
|
** Editing
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:elisp: :tangle target/desktop/emacs-editing.el
|
:header-args:elisp: :tangle target/desktop/emacs-editing.el
|
||||||
@@ -1002,7 +1051,9 @@ This configuration affects general text editing, across all modes. First, some p
|
|||||||
avy
|
avy
|
||||||
edit-indirect
|
edit-indirect
|
||||||
embark
|
embark
|
||||||
god-mode
|
evil
|
||||||
|
evil-collection
|
||||||
|
evil-org
|
||||||
string-inflection
|
string-inflection
|
||||||
];
|
];
|
||||||
extraConfig = builtins.readFile ./emacs-editing.el;
|
extraConfig = builtins.readFile ./emacs-editing.el;
|
||||||
@@ -1021,40 +1072,18 @@ but I'm worried that having too many repeat maps will also be annoying (I'll hav
|
|||||||
cancel them more frequently). In the end, I opted for Devil mode. It avoids modifier keys, and has
|
cancel them more frequently). In the end, I opted for Devil mode. It avoids modifier keys, and has
|
||||||
its own devil-mode-only repeat maps that don't interfere when using normal modifier key sequences.
|
its own devil-mode-only repeat maps that don't interfere when using normal modifier key sequences.
|
||||||
|
|
||||||
#+BEGIN_SRC elisp :tangle nil
|
#+BEGIN_SRC elisp
|
||||||
(use-package devil
|
(setopt evil-want-keybinding nil)
|
||||||
:disable t
|
(require 'evil)
|
||||||
:config
|
(evil-mode 1)
|
||||||
(global-devil-mode)
|
(require 'evil-collection)
|
||||||
(setq devil-repeatable-keys
|
(evil-collection-init)
|
||||||
'(("%k /")
|
|
||||||
("%k d")
|
|
||||||
("%k k")
|
|
||||||
("%k m ^")
|
|
||||||
("%k m b" "%k m f" "%k m a" "% k m e")
|
|
||||||
("%k m @" "%k m h")
|
|
||||||
("%k m y")
|
|
||||||
("%k p" "%k n" "%k b" "%k f" "%k a" "%k e")
|
|
||||||
("%k s")
|
|
||||||
("%k m d" "%k m <backspace>"))))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
(require 'evil-org)
|
||||||
(require 'god-mode)
|
(add-hook 'org-mode-hook 'evil-org-mode)
|
||||||
(require 'which-key)
|
(evil-org-set-key-theme '(navigation insert textobjects additional calendar))
|
||||||
|
(require 'evil-org-agenda)
|
||||||
(bind-keys :map god-local-mode-map
|
(evil-org-agenda-set-keys)
|
||||||
("i" . (lambda () (interactive) (god-mode-all -1)))
|
|
||||||
("z" . repeat))
|
|
||||||
(bind-keys ("<escape>" . (lambda () (interactive) (god-mode-all 1))))
|
|
||||||
(defun my-god-mode-update-cursor-type ()
|
|
||||||
(setq cursor-type (cond
|
|
||||||
(org-present-mode nil)
|
|
||||||
((or god-local-mode buffer-read-only) 'box)
|
|
||||||
(t 'bar))))
|
|
||||||
|
|
||||||
(add-hook 'post-command-hook 'my-god-mode-update-cursor-type)
|
|
||||||
(which-key-enable-god-mode-support)
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Avy allows jumping to any place on the screen with just a few keystrokes. I've stolen most of these
|
Avy allows jumping to any place on the screen with just a few keystrokes. I've stolen most of these
|
||||||
@@ -1062,11 +1091,9 @@ ideas from Karthinks' article [[https://karthinks.com/software/avy-can-do-anythi
|
|||||||
his article.
|
his article.
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(require 'avy)
|
|
||||||
(require 'embark)
|
|
||||||
|
|
||||||
(defun avy-goto-char-timer-embark ()
|
(defun avy-goto-char-timer-embark ()
|
||||||
(interactive)
|
(interactive)
|
||||||
|
(require 'avy)
|
||||||
(let ((avy-action-oneshot
|
(let ((avy-action-oneshot
|
||||||
(lambda (pt)
|
(lambda (pt)
|
||||||
(unwind-protect
|
(unwind-protect
|
||||||
@@ -1079,6 +1106,7 @@ his article.
|
|||||||
|
|
||||||
(bind-keys
|
(bind-keys
|
||||||
("M-j" . avy-goto-char-timer)
|
("M-j" . avy-goto-char-timer)
|
||||||
|
("C-c j" . avy-goto-char-timer)
|
||||||
("M-J" . avy-goto-char-timer-embark)
|
("M-J" . avy-goto-char-timer-embark)
|
||||||
("C-." . embark-act))
|
("C-." . embark-act))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@@ -1090,7 +1118,6 @@ Just "silently" wrap when searching at the bottom of a document.
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(require 'string-inflection)
|
|
||||||
(defun string-inflection-rust-style-cycle-function (str)
|
(defun string-inflection-rust-style-cycle-function (str)
|
||||||
(cond
|
(cond
|
||||||
((string-inflection-snake-case-p str)
|
((string-inflection-snake-case-p str)
|
||||||
@@ -1102,6 +1129,7 @@ Just "silently" wrap when searching at the bottom of a document.
|
|||||||
|
|
||||||
(defun string-inflection-rust-style-cycle ()
|
(defun string-inflection-rust-style-cycle ()
|
||||||
(interactive)
|
(interactive)
|
||||||
|
(require 'string-inflection)
|
||||||
(string-inflection--symbol-or-region #'string-inflection-rust-style-cycle-function))
|
(string-inflection--symbol-or-region #'string-inflection-rust-style-cycle-function))
|
||||||
|
|
||||||
(bind-keys :repeat-map string-inflection-java-map
|
(bind-keys :repeat-map string-inflection-java-map
|
||||||
@@ -1126,7 +1154,14 @@ Just "silently" wrap when searching at the bottom of a document.
|
|||||||
consult-eglot
|
consult-eglot
|
||||||
haskell-ts-mode
|
haskell-ts-mode
|
||||||
jenkinsfile-mode
|
jenkinsfile-mode
|
||||||
lispy
|
jq-mode
|
||||||
|
(lispy.overrideAttrs {
|
||||||
|
packageRequires = [
|
||||||
|
ace-window iedit swiper zoutline
|
||||||
|
];
|
||||||
|
ignoreCompilationError = true;
|
||||||
|
})
|
||||||
|
lispyville
|
||||||
lua-mode
|
lua-mode
|
||||||
nix-mode
|
nix-mode
|
||||||
rust-mode
|
rust-mode
|
||||||
@@ -1134,7 +1169,42 @@ Just "silently" wrap when searching at the bottom of a document.
|
|||||||
sly-macrostep
|
sly-macrostep
|
||||||
sql-indent
|
sql-indent
|
||||||
tree-sitter
|
tree-sitter
|
||||||
treesit-grammars.with-all-grammars
|
(treesit-grammars.with-grammars (g: [
|
||||||
|
g.tree-sitter-bash
|
||||||
|
g.tree-sitter-commonlisp
|
||||||
|
g.tree-sitter-css
|
||||||
|
g.tree-sitter-dockerfile
|
||||||
|
g.tree-sitter-dot
|
||||||
|
g.tree-sitter-elisp
|
||||||
|
g.tree-sitter-graphql
|
||||||
|
g.tree-sitter-gitcommit
|
||||||
|
g.tree-sitter-gitignore
|
||||||
|
g.tree-sitter-haskell
|
||||||
|
g.tree-sitter-html
|
||||||
|
g.tree-sitter-java
|
||||||
|
g.tree-sitter-javascript
|
||||||
|
g.tree-sitter-jq
|
||||||
|
g.tree-sitter-json
|
||||||
|
g.tree-sitter-json5
|
||||||
|
g.tree-sitter-just
|
||||||
|
g.tree-sitter-ledger
|
||||||
|
g.tree-sitter-llvm
|
||||||
|
g.tree-sitter-make
|
||||||
|
g.tree-sitter-nginx
|
||||||
|
g.tree-sitter-nix
|
||||||
|
g.tree-sitter-org
|
||||||
|
g.tree-sitter-php
|
||||||
|
g.tree-sitter-python
|
||||||
|
g.tree-sitter-rust
|
||||||
|
g.tree-sitter-rust-format-args
|
||||||
|
g.tree-sitter-scss
|
||||||
|
g.tree-sitter-sql
|
||||||
|
g.tree-sitter-toml
|
||||||
|
g.tree-sitter-tsx
|
||||||
|
g.tree-sitter-typescript
|
||||||
|
g.tree-sitter-xml
|
||||||
|
g.tree-sitter-yaml
|
||||||
|
]))
|
||||||
yaml-pro
|
yaml-pro
|
||||||
];
|
];
|
||||||
extraConfig = builtins.readFile ./emacs-languages.el;
|
extraConfig = builtins.readFile ./emacs-languages.el;
|
||||||
@@ -1142,14 +1212,38 @@ Just "silently" wrap when searching at the bottom of a document.
|
|||||||
}
|
}
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
#+BEGIN_SRC elisp
|
||||||
|
(electric-pair-mode 1)
|
||||||
|
|
||||||
|
(setq-default indent-tabs-mode nil)
|
||||||
|
(setq-default tab-width 4)
|
||||||
|
(global-tree-sitter-mode 1)
|
||||||
|
|
||||||
|
(setopt ediff-split-window-function 'split-window-horizontally)
|
||||||
|
|
||||||
|
(defun project-nix-flake ()
|
||||||
|
(interactive)
|
||||||
|
(nix-flake (project-root (project-current t))))
|
||||||
|
(bind-keys ("C-x p n" . project-nix-flake))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Show a vertical bar 100 characters out; ideally I don't want lines longer than this. 100 characters
|
||||||
|
is about the max you can have and still fit two files side-by-side on the screen.
|
||||||
|
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq-default fill-column 100)
|
||||||
|
|
||||||
|
(defun jf-init-fill-column ()
|
||||||
|
(display-fill-column-indicator-mode 1))
|
||||||
|
(add-hook 'prog-mode-hook 'jf-init-fill-column)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
I had some weird problems with jsx code where the default M-q would just do a text fill rather than
|
I had some weird problems with jsx code where the default M-q would just do a text fill rather than
|
||||||
a re-indent. The solution seems to be to only do the ~syntax-ppss~ stuff if tree-sitter isn't
|
a re-indent. The solution seems to be to only do the ~syntax-ppss~ stuff if tree-sitter isn't
|
||||||
available? It seems to work for now anyway...
|
available? It seems to work for now anyway...
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+begin_src elisp
|
||||||
(electric-pair-mode 1)
|
(with-eval-after-load 'prog-mode
|
||||||
|
|
||||||
(require 'prog-mode)
|
|
||||||
(defun my-prog-fill-reindent-defun (&optional argument)
|
(defun my-prog-fill-reindent-defun (&optional argument)
|
||||||
"Refill or reindent the paragraph or defun that contains point.
|
"Refill or reindent the paragraph or defun that contains point.
|
||||||
|
|
||||||
@@ -1174,44 +1268,52 @@ available? It seems to work for now anyway...
|
|||||||
(end-of-defun)
|
(end-of-defun)
|
||||||
(indent-region start (point) nil))))))
|
(indent-region start (point) nil))))))
|
||||||
|
|
||||||
(advice-add 'prog-fill-reindent-defun :override #'my-prog-fill-reindent-defun)
|
(advice-add 'prog-fill-reindent-defun :override #'my-prog-fill-reindent-defun))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
(require 'flymake)
|
*** Flymake
|
||||||
|
#+begin_src elisp
|
||||||
|
(autoload 'flymake-show-project-diagnostics "flymake")
|
||||||
|
(autoload 'flymake-goto-next-error "flymake")
|
||||||
|
(autoload 'flymake-goto-prev-error "flymake")
|
||||||
|
|
||||||
|
(with-eval-after-load 'prog-mode
|
||||||
(bind-keys :map prog-mode-map
|
(bind-keys :map prog-mode-map
|
||||||
("C-c D" . flymake-show-project-diagnostics)
|
("C-c D" . flymake-show-project-diagnostics)
|
||||||
("M-n" . flymake-goto-next-error)
|
("M-n" . flymake-goto-next-error)
|
||||||
("M-p" . flymake-goto-prev-error))
|
("M-p" . flymake-goto-prev-error)))
|
||||||
|
|
||||||
(setq-default indent-tabs-mode nil)
|
(with-eval-after-load 'flymake
|
||||||
(setq-default tab-width 4)
|
(bind-keys :map flymake-project-diagnostics-mode-map
|
||||||
(global-tree-sitter-mode 1)
|
("q" . quit-window)))
|
||||||
(setq-default fill-column 100)
|
#+end_src
|
||||||
|
|
||||||
(defun jf-init-fill-column ()
|
*** Eglot
|
||||||
(display-fill-column-indicator-mode 1))
|
I don't like UI elements that insert fake text into the file. They mess up the spacing in the file, and can make everything too wide.
|
||||||
(add-hook 'prog-mode-hook 'jf-init-fill-column)
|
|
||||||
|
|
||||||
|
#+BEGIN_SRC elisp
|
||||||
(setopt eglot-ignored-server-capabilities '(:inlayHintProvider :semanticTokensProvider))
|
(setopt eglot-ignored-server-capabilities '(:inlayHintProvider :semanticTokensProvider))
|
||||||
(add-hook 'eglot-managed-mode-hook (lambda () (eglot-inlay-hints-mode -1)) nil t)
|
(add-hook 'eglot-managed-mode-hook (lambda () (eglot-inlay-hints-mode -1)) nil t)
|
||||||
(require 'eglot)
|
|
||||||
(setopt eglot-code-action-indications nil)
|
(setopt eglot-code-action-indications nil)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Set up a few useful eglot keys.
|
||||||
|
|
||||||
|
#+begin_src elisp
|
||||||
|
(with-eval-after-load 'eglot
|
||||||
(bind-keys :map eglot-mode-map
|
(bind-keys :map eglot-mode-map
|
||||||
("C-c a" . eglot-code-actions)
|
("C-c a" . eglot-code-actions)
|
||||||
("C-c r" . eglot-rename)
|
("C-c r" . eglot-rename)
|
||||||
("C-c i" . eglot-find-implementation))
|
("C-c i" . eglot-find-implementation)))
|
||||||
(add-to-list 'eglot-stay-out-of 'yasnippet)
|
#+end_src
|
||||||
|
|
||||||
(setopt ediff-split-window-function 'split-window-horizontally)
|
Eglot's yasnippet support uses the tab key, but I *also* use the tab key both for indentation, and
|
||||||
|
for completion. That makes it really annoying to use; don't use yasnippet with eglot.
|
||||||
|
|
||||||
(defun project-nix-flake ()
|
#+begin_src elisp
|
||||||
(interactive)
|
(with-eval-after-load 'eglot
|
||||||
(nix-flake (project-root (project-current t))))
|
(add-to-list 'eglot-stay-out-of 'yasnippet))
|
||||||
(bind-keys ("C-x p n" . project-nix-flake))
|
#+end_src
|
||||||
|
|
||||||
(require 'flymake)
|
|
||||||
(bind-keys :map flymake-project-diagnostics-mode-map
|
|
||||||
("q" . quit-window))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
*** Rust
|
*** Rust
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
@@ -1219,15 +1321,13 @@ available? It seems to work for now anyway...
|
|||||||
|
|
||||||
(setopt rust-mode-treesitter-derive t)
|
(setopt rust-mode-treesitter-derive t)
|
||||||
|
|
||||||
(require 'rust-ts-mode)
|
(with-eval-after-load 'rust-prog-mode
|
||||||
(bind-keys :map rust-ts-mode-map
|
(bind-keys :map rust-mode-map
|
||||||
("C-c u" . string-inflection-rust-style-cycle))
|
("C-c u" . string-inflection-rust-style-cycle)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** YAML
|
*** YAML
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(require 'yaml-ts-mode)
|
|
||||||
|
|
||||||
(defun yaml-validate ()
|
(defun yaml-validate ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(compile (concat "yamllint -d '{extends: default, rules: {indentation: {indent-sequences: false}, braces: {max-spaces-inside: 1}}}' " (buffer-file-name)) t))
|
(compile (concat "yamllint -d '{extends: default, rules: {indentation: {indent-sequences: false}, braces: {max-spaces-inside: 1}}}' " (buffer-file-name)) t))
|
||||||
@@ -1242,19 +1342,25 @@ available? It seems to work for now anyway...
|
|||||||
(setopt lispy-compat '(god-mode edebug))
|
(setopt lispy-compat '(god-mode edebug))
|
||||||
(add-hook 'emacs-lisp-mode-hook (lambda () (lispy-mode 1)))
|
(add-hook 'emacs-lisp-mode-hook (lambda () (lispy-mode 1)))
|
||||||
(add-hook 'lisp-mode-hook (lambda () (lispy-mode 1)))
|
(add-hook 'lisp-mode-hook (lambda () (lispy-mode 1)))
|
||||||
(require 'lispy)
|
(with-eval-after-load 'lispy
|
||||||
|
(require 'lispyville)
|
||||||
|
(add-hook 'lispy-mode-hook #'lispyville-mode)
|
||||||
(bind-keys :map lispy-mode-map
|
(bind-keys :map lispy-mode-map
|
||||||
("i" . (lambda ()
|
("i" . (lambda ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(if god-global-mode
|
(if (and (featurep 'god-mode) god-global-mode)
|
||||||
(god-mode-all -1)
|
(god-mode-all -1)
|
||||||
(special-lispy-tab)))))
|
(special-lispy-tab))))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Typescript
|
*** Typescript
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
|
(push '("\\.ts\\'" . typescript-mode) auto-mode-alist)
|
||||||
|
(push '(typescript-mode . typescript-ts-mode) major-mode-remap-alist)
|
||||||
|
(push '("\\.tsx\\'" . tsx-mode) auto-mode-alist)
|
||||||
|
(push '(tsx-mode . tsx-ts-mode) major-mode-remap-alist)
|
||||||
(setopt typescript-ts-mode-indent-offset 4)
|
(setopt typescript-ts-mode-indent-offset 4)
|
||||||
(require 'typescript-ts-mode)
|
(with-eval-after-load 'typescript-ts-mode
|
||||||
(defun my-tsx-ts-mode--indent-compatibility-b893426 ()
|
(defun my-tsx-ts-mode--indent-compatibility-b893426 ()
|
||||||
"Indent rules helper, to handle different releases of tree-sitter-tsx.
|
"Indent rules helper, to handle different releases of tree-sitter-tsx.
|
||||||
Check if a node type is available, then return the right indent rules."
|
Check if a node type is available, then return the right indent rules."
|
||||||
@@ -1266,12 +1372,13 @@ available? It seems to work for now anyway...
|
|||||||
(treesit-query-error
|
(treesit-query-error
|
||||||
`(((match "<" "jsx_text") parent 0)
|
`(((match "<" "jsx_text") parent 0)
|
||||||
((parent-is "jsx_text") grand-parent typescript-ts-mode-indent-offset)))))
|
((parent-is "jsx_text") grand-parent typescript-ts-mode-indent-offset)))))
|
||||||
(advice-add 'tsx-ts-mode--indent-compatibility-b893426 :override #'my-tsx-ts-mode--indent-compatibility-b893426)
|
(advice-add 'tsx-ts-mode--indent-compatibility-b893426 :override #'my-tsx-ts-mode--indent-compatibility-b893426))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Java
|
*** Java
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(require 'java-ts-mode)
|
(push '(java-mode . java-ts-mode) major-mode-remap-alist)
|
||||||
|
(with-eval-after-load 'java-ts-mode
|
||||||
(bind-keys :map java-ts-mode-map
|
(bind-keys :map java-ts-mode-map
|
||||||
("C-c u" . string-inflection-java-style-cycle))
|
("C-c u" . string-inflection-java-style-cycle))
|
||||||
(push `((n-p-gp nil "block" "lambda_expression") parent-bol java-ts-mode-indent-offset)
|
(push `((n-p-gp nil "block" "lambda_expression") parent-bol java-ts-mode-indent-offset)
|
||||||
@@ -1294,7 +1401,7 @@ available? It seems to work for now anyway...
|
|||||||
(setq result path)))))))
|
(setq result path)))))))
|
||||||
|
|
||||||
(defun jf/compile-class-to-file ()
|
(defun jf/compile-class-to-file ()
|
||||||
(jf/class-name-to-file (concat (match-string 1) (match-string 2))))
|
(jf/class-name-to-file (concat (match-string 1) (match-string 2)))))
|
||||||
|
|
||||||
;(add-to-list 'compilation-error-regexp-alist-alist
|
;(add-to-list 'compilation-error-regexp-alist-alist
|
||||||
; '(java-stack-trace .
|
; '(java-stack-trace .
|
||||||
@@ -1357,7 +1464,8 @@ available? It seems to work for now anyway...
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(setq magit-define-global-key-bindings 'recommended)
|
(setopt magit-define-global-key-bindings 'recommended)
|
||||||
|
(bind-keys ("s-g" . magit))
|
||||||
|
|
||||||
(setopt magit-save-repository-buffers 'dontask)
|
(setopt magit-save-repository-buffers 'dontask)
|
||||||
(setopt magit-commit-show-diff nil)
|
(setopt magit-commit-show-diff nil)
|
||||||
@@ -1445,15 +1553,16 @@ available? It seems to work for now anyway...
|
|||||||
("M-s" . consult-history)
|
("M-s" . consult-history)
|
||||||
("M-r" . consult-history))
|
("M-r" . consult-history))
|
||||||
|
|
||||||
(add-hook 'completion-list-mode-hook 'consult-preview-at-point-mode)
|
|
||||||
|
|
||||||
(advice-add 'register-preview :override #'consult-register-window)
|
(advice-add 'register-preview :override #'consult-register-window)
|
||||||
(setopt register-preview-delay 0.5)
|
(setopt register-preview-delay 0.5)
|
||||||
|
|
||||||
(setopt xref-show-xrefs-function 'consult-xref)
|
(setopt xref-show-xrefs-function 'consult-xref)
|
||||||
(setopt xref-show-definitions-function 'consult-xref)
|
(setopt xref-show-definitions-function 'consult-xref)
|
||||||
|
|
||||||
(require 'consult)
|
(eval-when-compile
|
||||||
|
(require 'consult))
|
||||||
|
|
||||||
|
(with-eval-after-load 'consult
|
||||||
(consult-customize
|
(consult-customize
|
||||||
consult-theme :preview-key '(:debounce 0.2 any)
|
consult-theme :preview-key '(:debounce 0.2 any)
|
||||||
consult-ripgrep consult-git-grep consult-grep consult-man
|
consult-ripgrep consult-git-grep consult-grep consult-man
|
||||||
@@ -1461,7 +1570,7 @@ available? It seems to work for now anyway...
|
|||||||
consult-source-bookmark consult-source-file-register
|
consult-source-bookmark consult-source-file-register
|
||||||
consult-source-recent-file consult-source-project-recent-file
|
consult-source-recent-file consult-source-project-recent-file
|
||||||
;; :preview-key "M-."
|
;; :preview-key "M-."
|
||||||
:preview-key '(:debounce 0.4 any))
|
:preview-key '(:debounce 0.4 any)))
|
||||||
|
|
||||||
(setopt consult-narrow-key "<") ;; "C-+"
|
(setopt consult-narrow-key "<") ;; "C-+"
|
||||||
|
|
||||||
@@ -1476,11 +1585,8 @@ available? It seems to work for now anyway...
|
|||||||
(setopt corfu-popupinfo-mode nil)
|
(setopt corfu-popupinfo-mode nil)
|
||||||
(setopt corfu-quit-at-boundary nil)
|
(setopt corfu-quit-at-boundary nil)
|
||||||
(setopt corfu-on-exact-match 'show)
|
(setopt corfu-on-exact-match 'show)
|
||||||
;; (global-corfu-mode)
|
(global-corfu-mode)
|
||||||
(setq completion-in-region-function #'consult-completion-in-region)
|
;; (setq completion-in-region-function #'consult-completion-in-region)
|
||||||
|
|
||||||
;; Consult users will also want the embark-consult package.
|
|
||||||
(add-hook 'embark-collect-mode-hook 'consult-preview-at-point-mode)
|
|
||||||
|
|
||||||
(add-hook 'completion-at-point-functions 'cape-file)
|
(add-hook 'completion-at-point-functions 'cape-file)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@@ -1754,9 +1860,7 @@ available? It seems to work for now anyway...
|
|||||||
|
|
||||||
#+BEGIN_SRC elisp
|
#+BEGIN_SRC elisp
|
||||||
(require 'claude-code)
|
(require 'claude-code)
|
||||||
|
(keymap-global-set "C-c c" claude-code-command-map)
|
||||||
(global-set-key (kbd "C-c c") claude-code-command-map)
|
|
||||||
(claude-code-mode)
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
* Theme
|
* Theme
|
||||||
I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
|
I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
|
||||||
|
|||||||
Reference in New Issue
Block a user