Compare commits
7 Commits
7770c44924
...
more-split
| Author | SHA1 | Date | |
|---|---|---|---|
| bbec58acba | |||
| e52adbbc4b | |||
| db1b86cbd7 | |||
| 74dc6fd742 | |||
| 591f00e2f9 | |||
| 9e653100f2 | |||
| 96e6fc7706 |
Generated
+9
-9
@@ -25,11 +25,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775762219,
|
||||
"narHash": "sha256-e7BhggoWhg3Ok7dDI5kY1XZzORBQc0Rclcs3IWzux3w=",
|
||||
"lastModified": 1779969295,
|
||||
"narHash": "sha256-HwIJ3tOcwSMiV75L7KqJXciXR9UfT+d7rwOZMX7cTnA=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "c975a66a56306b38eaa3108f54bbc11e213f42f6",
|
||||
"rev": "61e2c9659324181e0f0ed911958c536333b1d4f6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -65,11 +65,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775365369,
|
||||
"narHash": "sha256-DgH5mveLoau20CuTnaU5RXZWgFQWn56onQ4Du2CqYoI=",
|
||||
"lastModified": 1779604987,
|
||||
"narHash": "sha256-ZQ5z+fVhxYKtIFwtqGp5O0PD84BM1riASvqDaN5Xs+s=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "cef5cf82671e749ac87d69aadecbb75967e6f6c3",
|
||||
"rev": "8fba98c80b48fa013820e0163c5096922fea4ddd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -80,11 +80,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1775423009,
|
||||
"narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
|
||||
"lastModified": 1779560665,
|
||||
"narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
|
||||
"rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
@@ -50,18 +50,14 @@
|
||||
modules =
|
||||
[
|
||||
nix-index-database.homeModules.default
|
||||
"${modules}"
|
||||
] ++
|
||||
(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.username = "jfrikker";
|
||||
home.homeDirectory = "/Users/jfrikker";
|
||||
home.packages = [ pkgs.pinentry_mac ];
|
||||
jfrikker.desktop.enable = true;
|
||||
}];
|
||||
|
||||
extraSpecialArgs = { kube = kube.packages.aarch64-darwin.default; };
|
||||
|
||||
@@ -1,5 +1,34 @@
|
||||
#+PROPERTY: header-args :mkdirp yes
|
||||
#+PROPERTY: header-args:elisp :lexical t
|
||||
* Base
|
||||
|
||||
#+BEGIN_SRC nix :tangle target/default.nix
|
||||
{
|
||||
imports = [
|
||||
./base_options.nix
|
||||
./sbcl.nix
|
||||
./crypto.nix
|
||||
./rust-reimpls.nix
|
||||
./ledger.nix
|
||||
./nil.nix
|
||||
./magic-wormhole.nix
|
||||
./desktop-packages.nix
|
||||
./shibumi.nix
|
||||
./slack.nix
|
||||
];
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC nix :tangle target/base_options.nix
|
||||
{lib, ...}:
|
||||
with lib;
|
||||
{
|
||||
options = {
|
||||
jfrikker.desktop.enable = mkEnableOption "desktop tools";
|
||||
jfrikker.shibumi.enable = mkEnableOption "shibumi-specific tools";
|
||||
};
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
* Packages
|
||||
Home-manager "packages" are simply binaries that are placed on the path, without any attached
|
||||
@@ -12,7 +41,7 @@ in a ~nix~ devshell I think I'd also like to use it for scripting / exploratory
|
||||
so I'm installing it globally with a useful set of libraries. I should curate this somewhat
|
||||
carefully so it doesn't get carried away...
|
||||
|
||||
#+BEGIN_SRC nix :tangle target/base/sbcl.nix
|
||||
#+BEGIN_SRC nix :tangle target/sbcl.nix
|
||||
{pkgs, ...}:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
@@ -63,7 +92,7 @@ the name implies, allows generating and storing ~age~ keys on a Yubikey. ~rage~
|
||||
~age~ when using ~age.el~, because it supports ~pinentry~. That allows it to prompt for yubikey pins
|
||||
using a dialog, rather than a command line prompt.
|
||||
|
||||
#+BEGIN_SRC nix :tangle target/base/crypto.nix
|
||||
#+BEGIN_SRC nix :tangle target/crypto.nix
|
||||
{pkgs, ...}:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
@@ -83,13 +112,14 @@ tools. They boost better speed, or simply more streamlined features.
|
||||
| ~ripgrep~ | ~grep~ |
|
||||
| ~xh~ | ~curl~ |
|
||||
|
||||
#+BEGIN_SRC nix :tangle target/base/rust-reimpls.nix
|
||||
#+BEGIN_SRC nix :tangle target/rust-reimpls.nix
|
||||
{pkgs, ...}:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
dust
|
||||
fd
|
||||
ripgrep
|
||||
tokei
|
||||
xh
|
||||
];
|
||||
}
|
||||
@@ -97,7 +127,7 @@ tools. They boost better speed, or simply more streamlined features.
|
||||
|
||||
[[https://ledger-cli.org/][~ledger~]] is how I manage my budget. It's a plain-text accounting tool that's really awesome.
|
||||
|
||||
#+BEGIN_SRC nix :tangle target/base/ledger.nix
|
||||
#+BEGIN_SRC nix :tangle target/ledger.nix
|
||||
{pkgs, ...}:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
@@ -108,7 +138,7 @@ tools. They boost better speed, or simply more streamlined features.
|
||||
|
||||
~nil~ is an LSP server for nix files.
|
||||
|
||||
#+BEGIN_SRC nix :tangle target/base/nil.nix
|
||||
#+BEGIN_SRC nix :tangle target/nil.nix
|
||||
{pkgs, ...}:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
@@ -121,7 +151,7 @@ tools. They boost better speed, or simply more streamlined features.
|
||||
computers in the world, assuming that you have an out-of-band way to communicate a passphrase
|
||||
between them. Once installed, the actual command is ~wormhole~.
|
||||
|
||||
#+begin_src nix :tangle target/base/magic-wormhole.nix
|
||||
#+begin_src nix :tangle target/magic-wormhole.nix
|
||||
{pkgs, ...}:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
@@ -133,39 +163,52 @@ between them. Once installed, the actual command is ~wormhole~.
|
||||
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.
|
||||
|
||||
#+BEGIN_SRC nix :tangle target/base/other-packages.nix
|
||||
{pkgs, kube, ...}:
|
||||
#+BEGIN_SRC nix :tangle target/shibumi.nix
|
||||
{lib, pkgs, kube, config, ...}:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
aws-iam-authenticator
|
||||
awscli2
|
||||
kube
|
||||
kubectl
|
||||
mariadb.client
|
||||
nerd-fonts.jetbrains-mono
|
||||
openssh
|
||||
tokei
|
||||
];
|
||||
|
||||
fonts.fontconfig.enable = true;
|
||||
config = lib.mkIf config.jfrikker.shibumi.enable {
|
||||
home.packages = with pkgs; [
|
||||
aws-iam-authenticator
|
||||
awscli2
|
||||
kube
|
||||
kubectl
|
||||
mariadb.client
|
||||
openssh
|
||||
];
|
||||
};
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
These programs require a full desktop environment:
|
||||
|
||||
#+BEGIN_SRC nix :tangle target/desktop/desktop-packages.nix
|
||||
{pkgs, ...}:
|
||||
#+BEGIN_SRC nix :tangle target/desktop-packages.nix
|
||||
{lib, pkgs, config, ...}:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
google-chrome
|
||||
(iosevka-bin.override { variant = "Aile"; })
|
||||
(iosevka-bin.override { variant = "Etoile"; })
|
||||
(iosevka-bin.override { variant = "SGr-IosevkaTerm"; })
|
||||
keymapp
|
||||
proton-pass
|
||||
slack
|
||||
wireshark
|
||||
];
|
||||
config = lib.mkIf config.jfrikker.desktop.enable {
|
||||
home.packages = with pkgs; [
|
||||
google-chrome
|
||||
nerd-fonts.jetbrains-mono
|
||||
(iosevka-bin.override { variant = "Aile"; })
|
||||
(iosevka-bin.override { variant = "Etoile"; })
|
||||
(iosevka-bin.override { variant = "SGr-IosevkaTerm"; })
|
||||
keymapp
|
||||
proton-pass
|
||||
wireshark
|
||||
];
|
||||
|
||||
fonts.fontconfig.enable = true;
|
||||
};
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC nix :tangle target/slack.nix
|
||||
{lib, pkgs, config, ...}:
|
||||
{
|
||||
config = lib.mkIf (config.jfrikker.shibumi.enable && config.jfrikker.desktop.enable) {
|
||||
home.packages = with pkgs; [
|
||||
slack
|
||||
];
|
||||
};
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
@@ -878,7 +921,8 @@ A basic ace-window setup. Allows switching between windows quickly (although avy
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
(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-dispatch-always t)
|
||||
#+END_SRC
|
||||
@@ -889,7 +933,7 @@ Set up a few project- / workspace-related key bindings.
|
||||
(bind-keys ("s-f" . project-find-file)
|
||||
("s-F" . project-switch-project))
|
||||
|
||||
(with-eval-after-load tab-bar-mode
|
||||
(with-eval-after-load 'tab-bar
|
||||
(bind-keys :map tab-bar-mode-map
|
||||
("s-s" . tab-bar-switch-to-tab)))
|
||||
#+END_SRC
|
||||
@@ -910,7 +954,7 @@ less so?
|
||||
I'm trying this out. This disables visual selections. It's bold, which is why I like it :)
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
(transient-mark-mode -1)
|
||||
;; (transient-mark-mode -1)
|
||||
#+END_SRC
|
||||
|
||||
I use tabs to manage multiple "workspaces". I don't tie a project to a tab or anything; often fixing
|
||||
@@ -1008,7 +1052,9 @@ This configuration affects general text editing, across all modes. First, some p
|
||||
avy
|
||||
edit-indirect
|
||||
embark
|
||||
god-mode
|
||||
evil
|
||||
evil-collection
|
||||
evil-org
|
||||
string-inflection
|
||||
];
|
||||
extraConfig = builtins.readFile ./emacs-editing.el;
|
||||
@@ -1027,40 +1073,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
|
||||
its own devil-mode-only repeat maps that don't interfere when using normal modifier key sequences.
|
||||
|
||||
#+BEGIN_SRC elisp :tangle nil
|
||||
(use-package devil
|
||||
:disable t
|
||||
:config
|
||||
(global-devil-mode)
|
||||
(setq devil-repeatable-keys
|
||||
'(("%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
|
||||
(setopt evil-want-keybinding nil)
|
||||
(require 'evil)
|
||||
(evil-mode 1)
|
||||
(require 'evil-collection)
|
||||
(evil-collection-init)
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
(require 'god-mode)
|
||||
(require 'which-key)
|
||||
|
||||
(bind-keys :map god-local-mode-map
|
||||
("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)
|
||||
(require 'evil-org)
|
||||
(add-hook 'org-mode-hook 'evil-org-mode)
|
||||
(evil-org-set-key-theme '(navigation insert textobjects additional calendar))
|
||||
(require 'evil-org-agenda)
|
||||
(evil-org-agenda-set-keys)
|
||||
#+END_SRC
|
||||
|
||||
Avy allows jumping to any place on the screen with just a few keystrokes. I've stolen most of these
|
||||
@@ -1083,6 +1107,7 @@ his article.
|
||||
|
||||
(bind-keys
|
||||
("M-j" . avy-goto-char-timer)
|
||||
("C-c j" . avy-goto-char-timer)
|
||||
("M-J" . avy-goto-char-timer-embark)
|
||||
("C-." . embark-act))
|
||||
#+END_SRC
|
||||
@@ -1131,7 +1156,13 @@ Just "silently" wrap when searching at the bottom of a document.
|
||||
haskell-ts-mode
|
||||
jenkinsfile-mode
|
||||
jq-mode
|
||||
lispy
|
||||
(lispy.overrideAttrs {
|
||||
packageRequires = [
|
||||
ace-window iedit swiper zoutline
|
||||
];
|
||||
ignoreCompilationError = true;
|
||||
})
|
||||
lispyville
|
||||
lua-mode
|
||||
nix-mode
|
||||
rust-mode
|
||||
@@ -1139,7 +1170,42 @@ Just "silently" wrap when searching at the bottom of a document.
|
||||
sly-macrostep
|
||||
sql-indent
|
||||
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
|
||||
];
|
||||
extraConfig = builtins.readFile ./emacs-languages.el;
|
||||
@@ -1147,17 +1213,37 @@ Just "silently" wrap when searching at the bottom of a document.
|
||||
}
|
||||
#+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
|
||||
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...
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
(electric-pair-mode 1)
|
||||
|
||||
(autoload 'flymake-show-project-diagnostics "flymake")
|
||||
(autoload 'flymake-goto-next-error "flymake")
|
||||
(autoload 'flymake-goto-prev-error "flymake")
|
||||
|
||||
#+begin_src elisp
|
||||
(with-eval-after-load 'prog-mode
|
||||
(defun my-prog-fill-reindent-defun (&optional argument)
|
||||
"Refill or reindent the paragraph or defun that contains point.
|
||||
@@ -1183,42 +1269,52 @@ available? It seems to work for now anyway...
|
||||
(end-of-defun)
|
||||
(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
|
||||
|
||||
*** 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
|
||||
("C-c D" . flymake-show-project-diagnostics)
|
||||
("M-n" . flymake-goto-next-error)
|
||||
("M-p" . flymake-goto-prev-error))
|
||||
(defun jf-init-fill-column ()
|
||||
(display-fill-column-indicator-mode 1))
|
||||
(add-hook 'prog-mode-hook 'jf-init-fill-column))
|
||||
|
||||
(setq-default indent-tabs-mode nil)
|
||||
(setq-default tab-width 4)
|
||||
(global-tree-sitter-mode 1)
|
||||
(setq-default fill-column 100)
|
||||
|
||||
(setopt eglot-ignored-server-capabilities '(:inlayHintProvider :semanticTokensProvider))
|
||||
(add-hook 'eglot-managed-mode-hook (lambda () (eglot-inlay-hints-mode -1)) nil t)
|
||||
(setopt eglot-code-action-indications nil)
|
||||
(with-eval-after-load 'eglot
|
||||
(bind-keys :map eglot-mode-map
|
||||
("C-c a" . eglot-code-actions)
|
||||
("C-c r" . eglot-rename)
|
||||
("C-c i" . eglot-find-implementation))
|
||||
(add-to-list 'eglot-stay-out-of 'yasnippet))
|
||||
|
||||
(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))
|
||||
("M-p" . flymake-goto-prev-error)))
|
||||
|
||||
(with-eval-after-load 'flymake
|
||||
(bind-keys :map flymake-project-diagnostics-mode-map
|
||||
("q" . quit-window)))
|
||||
#+END_SRC
|
||||
#+end_src
|
||||
|
||||
*** Eglot
|
||||
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.
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
(setopt eglot-ignored-server-capabilities '(:inlayHintProvider :semanticTokensProvider))
|
||||
(add-hook 'eglot-managed-mode-hook (lambda () (eglot-inlay-hints-mode -1)) nil t)
|
||||
(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
|
||||
("C-c a" . eglot-code-actions)
|
||||
("C-c r" . eglot-rename)
|
||||
("C-c i" . eglot-find-implementation)))
|
||||
#+end_src
|
||||
|
||||
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.
|
||||
|
||||
#+begin_src elisp
|
||||
(with-eval-after-load 'eglot
|
||||
(add-to-list 'eglot-stay-out-of 'yasnippet))
|
||||
#+end_src
|
||||
|
||||
*** Rust
|
||||
#+BEGIN_SRC elisp
|
||||
@@ -1248,6 +1344,8 @@ available? It seems to work for now anyway...
|
||||
(add-hook 'emacs-lisp-mode-hook (lambda () (lispy-mode 1)))
|
||||
(add-hook 'lisp-mode-hook (lambda () (lispy-mode 1)))
|
||||
(with-eval-after-load 'lispy
|
||||
(require 'lispyville)
|
||||
(add-hook 'lispy-mode-hook #'lispyville-mode)
|
||||
(bind-keys :map lispy-mode-map
|
||||
("i" . (lambda ()
|
||||
(interactive)
|
||||
@@ -1258,6 +1356,10 @@ available? It seems to work for now anyway...
|
||||
|
||||
*** Typescript
|
||||
#+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)
|
||||
(with-eval-after-load 'typescript-ts-mode
|
||||
(defun my-tsx-ts-mode--indent-compatibility-b893426 ()
|
||||
@@ -1276,6 +1378,7 @@ available? It seems to work for now anyway...
|
||||
|
||||
*** Java
|
||||
#+BEGIN_SRC elisp
|
||||
(push '(java-mode . java-ts-mode) major-mode-remap-alist)
|
||||
(with-eval-after-load 'java-ts-mode
|
||||
(bind-keys :map java-ts-mode-map
|
||||
("C-c u" . string-inflection-java-style-cycle))
|
||||
@@ -1363,6 +1466,7 @@ available? It seems to work for now anyway...
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
(setopt magit-define-global-key-bindings 'recommended)
|
||||
(bind-keys ("s-g" . magit))
|
||||
|
||||
(setopt magit-save-repository-buffers 'dontask)
|
||||
(setopt magit-commit-show-diff nil)
|
||||
@@ -1756,7 +1860,8 @@ available? It seems to work for now anyway...
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
(global-set-key (kbd "C-c c") claude-code-command-map)
|
||||
(require 'claude-code)
|
||||
(keymap-global-set "C-c c" claude-code-command-map)
|
||||
#+END_SRC
|
||||
* Theme
|
||||
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