|
|
|
@@ -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, ...}:
|
|
|
|
|
{
|
|
|
|
|
config = lib.mkIf config.jfrikker.shibumi.enable {
|
|
|
|
|
home.packages = with pkgs; [
|
|
|
|
|
aws-iam-authenticator
|
|
|
|
|
awscli2
|
|
|
|
|
kube
|
|
|
|
|
kubectl
|
|
|
|
|
mariadb.client
|
|
|
|
|
nerd-fonts.jetbrains-mono
|
|
|
|
|
openssh
|
|
|
|
|
tokei
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
fonts.fontconfig.enable = true;
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
#+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, ...}:
|
|
|
|
|
{
|
|
|
|
|
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
|
|
|
|
|
slack
|
|
|
|
|
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
|
|
|
|
@@ -1006,11 +1050,11 @@ This configuration affects general text editing, across all modes. First, some p
|
|
|
|
|
enable = true;
|
|
|
|
|
extraPackages = epkgs: with epkgs; [
|
|
|
|
|
avy
|
|
|
|
|
devil
|
|
|
|
|
edit-indirect
|
|
|
|
|
embark
|
|
|
|
|
god-mode
|
|
|
|
|
meow
|
|
|
|
|
evil
|
|
|
|
|
evil-collection
|
|
|
|
|
evil-org
|
|
|
|
|
string-inflection
|
|
|
|
|
];
|
|
|
|
|
extraConfig = builtins.readFile ./emacs-editing.el;
|
|
|
|
@@ -1029,130 +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
|
|
|
|
|
(defun meow-setup ()
|
|
|
|
|
(setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)
|
|
|
|
|
(meow-motion-define-key
|
|
|
|
|
'("j" . meow-next)
|
|
|
|
|
'("k" . meow-prev)
|
|
|
|
|
'("<escape>" . ignore))
|
|
|
|
|
(meow-leader-define-key
|
|
|
|
|
;; Use SPC (0-9) for digit arguments.
|
|
|
|
|
'("1" . meow-digit-argument)
|
|
|
|
|
'("2" . meow-digit-argument)
|
|
|
|
|
;; '("3" . meow-digit-argument)
|
|
|
|
|
;; '("4" . meow-digit-argument)
|
|
|
|
|
;; '("5" . meow-digit-argument)
|
|
|
|
|
;; '("6" . meow-digit-argument)
|
|
|
|
|
;; '("7" . meow-digit-argument)
|
|
|
|
|
;; '("8" . meow-digit-argument)
|
|
|
|
|
;; '("9" . meow-digit-argument)
|
|
|
|
|
;; '("0" . meow-digit-argument)
|
|
|
|
|
;; '("/" . meow-keypad-describe-key)
|
|
|
|
|
;; '("?" . meow-cheatsheet))
|
|
|
|
|
;; (meow-normal-define-key
|
|
|
|
|
;; '("0" . meow-expand-0)
|
|
|
|
|
;; '("9" . meow-expand-9)
|
|
|
|
|
;; '("8" . meow-expand-8)
|
|
|
|
|
;; '("7" . meow-expand-7)
|
|
|
|
|
;; '("6" . meow-expand-6)
|
|
|
|
|
;; '("5" . meow-expand-5)
|
|
|
|
|
;; '("4" . meow-expand-4)
|
|
|
|
|
;; '("3" . meow-expand-3)
|
|
|
|
|
;; '("2" . meow-expand-2)
|
|
|
|
|
;; '("1" . meow-expand-1)
|
|
|
|
|
;; '("-" . negative-argument)
|
|
|
|
|
;; '(";" . meow-reverse)
|
|
|
|
|
;; '("," . meow-inner-of-thing)
|
|
|
|
|
;; '("." . meow-bounds-of-thing)
|
|
|
|
|
;; '("[" . meow-beginning-of-thing)
|
|
|
|
|
;; '("]" . meow-end-of-thing)
|
|
|
|
|
;; '("a" . meow-append)
|
|
|
|
|
;; '("A" . meow-open-below)
|
|
|
|
|
;; '("b" . meow-back-word)
|
|
|
|
|
;; '("B" . meow-back-symbol)
|
|
|
|
|
;; '("c" . meow-change)
|
|
|
|
|
;; '("d" . meow-delete)
|
|
|
|
|
;; '("D" . meow-backward-delete)
|
|
|
|
|
;; '("e" . meow-next-word)
|
|
|
|
|
;; '("E" . meow-next-symbol)
|
|
|
|
|
;; '("f" . meow-find)
|
|
|
|
|
;; '("g" . meow-cancel-selection)
|
|
|
|
|
;; '("G" . meow-grab)
|
|
|
|
|
;; '("h" . meow-left)
|
|
|
|
|
;; '("H" . meow-left-expand)
|
|
|
|
|
;; '("i" . meow-insert)
|
|
|
|
|
;; '("I" . meow-open-above)
|
|
|
|
|
;; '("j" . meow-next)
|
|
|
|
|
;; '("J" . meow-next-expand)
|
|
|
|
|
;; '("k" . meow-prev)
|
|
|
|
|
;; '("K" . meow-prev-expand)
|
|
|
|
|
;; '("l" . meow-right)
|
|
|
|
|
;; '("L" . meow-right-expand)
|
|
|
|
|
;; '("m" . meow-join)
|
|
|
|
|
;; '("n" . meow-search)
|
|
|
|
|
;; '("o" . meow-block)
|
|
|
|
|
;; '("O" . meow-to-block)
|
|
|
|
|
;; '("p" . meow-yank)
|
|
|
|
|
;; '("q" . meow-quit)
|
|
|
|
|
;; '("Q" . meow-goto-line)
|
|
|
|
|
;; '("r" . meow-replace)
|
|
|
|
|
;; '("R" . meow-swap-grab)
|
|
|
|
|
;; '("s" . meow-kill)
|
|
|
|
|
;; '("t" . meow-till)
|
|
|
|
|
;; '("u" . meow-undo)
|
|
|
|
|
;; '("U" . meow-undo-in-selection)
|
|
|
|
|
;; '("v" . meow-visit)
|
|
|
|
|
;; '("w" . meow-mark-word)
|
|
|
|
|
;; '("W" . meow-mark-symbol)
|
|
|
|
|
;; '("x" . meow-line)
|
|
|
|
|
;; '("X" . meow-goto-line)
|
|
|
|
|
;; '("y" . meow-save)
|
|
|
|
|
;; '("Y" . meow-sync-grab)
|
|
|
|
|
;; '("z" . meow-pop-selection)
|
|
|
|
|
;; '("'" . repeat)
|
|
|
|
|
;; '("<escape>" . ignore)))
|
|
|
|
|
(setopt evil-want-keybinding nil)
|
|
|
|
|
(require 'evil)
|
|
|
|
|
(evil-mode 1)
|
|
|
|
|
(require 'evil-collection)
|
|
|
|
|
(evil-collection-init)
|
|
|
|
|
|
|
|
|
|
;; (require 'meow)
|
|
|
|
|
;; (meow-setup)
|
|
|
|
|
;; (meow-global-mode)
|
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
|
|
#+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 (and (featurep 'god-mode) god-local-mode) buffer-read-only
|
|
|
|
|
(and meow-mode (not (eq 'insert meow--current-state)))) '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
|
|
|
|
@@ -1224,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
|
|
|
|
@@ -1406,6 +1344,8 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
|
|
|
|
|
(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)
|
|
|
|
@@ -1920,7 +1860,7 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
|
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC elisp
|
|
|
|
|
(autoload 'claude-code-command-map "claude-code" :type 'keymap)
|
|
|
|
|
(require 'claude-code)
|
|
|
|
|
(keymap-global-set "C-c c" claude-code-command-map)
|
|
|
|
|
#+END_SRC
|
|
|
|
|
* Theme
|
|
|
|
|