3 Commits

Author SHA1 Message Date
Joe Frikker bbec58acba wip 2026-06-18 11:08:34 -04:00
Joe Frikker e52adbbc4b Splitting out shibumi deps 2026-06-17 15:42:52 -04:00
Joe Frikker db1b86cbd7 evil 2026-06-12 22:44:14 -04:00
2 changed files with 103 additions and 167 deletions
+2 -6
View File
@@ -50,18 +50,14 @@
modules = modules =
[ [
nix-index-database.homeModules.default 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.stateVersion = "22.05";
home.username = "jfrikker"; home.username = "jfrikker";
home.homeDirectory = "/Users/jfrikker"; home.homeDirectory = "/Users/jfrikker";
home.packages = [ pkgs.pinentry_mac ]; home.packages = [ pkgs.pinentry_mac ];
jfrikker.desktop.enable = true;
}]; }];
extraSpecialArgs = { kube = kube.packages.aarch64-darwin.default; }; extraSpecialArgs = { kube = kube.packages.aarch64-darwin.default; };
+100 -160
View File
@@ -1,5 +1,34 @@
#+PROPERTY: header-args :mkdirp yes #+PROPERTY: header-args :mkdirp yes
#+PROPERTY: header-args:elisp :lexical t #+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 * 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
@@ -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 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... carefully so it doesn't get carried away...
#+BEGIN_SRC nix :tangle target/base/sbcl.nix #+BEGIN_SRC nix :tangle target/sbcl.nix
{pkgs, ...}: {pkgs, ...}:
{ {
home.packages = with 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 ~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. 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, ...}: {pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
@@ -83,13 +112,14 @@ tools. They boost better speed, or simply more streamlined features.
| ~ripgrep~ | ~grep~ | | ~ripgrep~ | ~grep~ |
| ~xh~ | ~curl~ | | ~xh~ | ~curl~ |
#+BEGIN_SRC nix :tangle target/base/rust-reimpls.nix #+BEGIN_SRC nix :tangle target/rust-reimpls.nix
{pkgs, ...}: {pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
dust dust
fd fd
ripgrep ripgrep
tokei
xh 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. [[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, ...}: {pkgs, ...}:
{ {
home.packages = with 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. ~nil~ is an LSP server for nix files.
#+BEGIN_SRC nix :tangle target/base/nil.nix #+BEGIN_SRC nix :tangle target/nil.nix
{pkgs, ...}: {pkgs, ...}:
{ {
home.packages = with 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 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~. 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, ...}: {pkgs, ...}:
{ {
home.packages = with 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.) 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 Shibumi-specific; ideally I'd find another way to install them.
#+BEGIN_SRC nix :tangle target/base/other-packages.nix #+BEGIN_SRC nix :tangle target/shibumi.nix
{pkgs, kube, ...}: {lib, pkgs, kube, config, ...}:
{ {
home.packages = with pkgs; [ config = lib.mkIf config.jfrikker.shibumi.enable {
aws-iam-authenticator home.packages = with pkgs; [
awscli2 aws-iam-authenticator
kube awscli2
kubectl kube
mariadb.client kubectl
nerd-fonts.jetbrains-mono mariadb.client
openssh openssh
tokei ];
]; };
fonts.fontconfig.enable = true;
} }
#+END_SRC #+END_SRC
These programs require a full desktop environment: These programs require a full desktop environment:
#+BEGIN_SRC nix :tangle target/desktop/desktop-packages.nix #+BEGIN_SRC nix :tangle target/desktop-packages.nix
{pkgs, ...}: {lib, pkgs, config, ...}:
{ {
home.packages = with pkgs; [ config = lib.mkIf config.jfrikker.desktop.enable {
google-chrome home.packages = with pkgs; [
(iosevka-bin.override { variant = "Aile"; }) google-chrome
(iosevka-bin.override { variant = "Etoile"; }) nerd-fonts.jetbrains-mono
(iosevka-bin.override { variant = "SGr-IosevkaTerm"; }) (iosevka-bin.override { variant = "Aile"; })
keymapp (iosevka-bin.override { variant = "Etoile"; })
proton-pass (iosevka-bin.override { variant = "SGr-IosevkaTerm"; })
slack keymapp
wireshark 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 #+END_SRC
@@ -878,7 +921,8 @@ A basic ace-window setup. Allows switching between windows quickly (although avy
#+BEGIN_SRC elisp #+BEGIN_SRC elisp
(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
@@ -1006,11 +1050,11 @@ This configuration affects general text editing, across all modes. First, some p
enable = true; enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
avy avy
devil
edit-indirect edit-indirect
embark embark
god-mode evil
meow evil-collection
evil-org
string-inflection string-inflection
]; ];
extraConfig = builtins.readFile ./emacs-editing.el; 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 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
(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)))
;; (require 'meow)
;; (meow-setup)
;; (meow-global-mode)
#+END_SRC
#+BEGIN_SRC elisp #+BEGIN_SRC elisp
(require 'god-mode) (setopt evil-want-keybinding nil)
(require 'which-key) (require 'evil)
(evil-mode 1)
(require 'evil-collection)
(evil-collection-init)
(bind-keys :map god-local-mode-map (require 'evil-org)
("i" . (lambda () (interactive) (god-mode-all -1))) (add-hook 'org-mode-hook 'evil-org-mode)
("z" . repeat)) (evil-org-set-key-theme '(navigation insert textobjects additional calendar))
(bind-keys ("<escape>" . (lambda () (interactive) (god-mode-all 1)))) (require 'evil-org-agenda)
(defun my-god-mode-update-cursor-type () (evil-org-agenda-set-keys)
(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)
#+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
@@ -1224,7 +1156,13 @@ Just "silently" wrap when searching at the bottom of a document.
haskell-ts-mode haskell-ts-mode
jenkinsfile-mode jenkinsfile-mode
jq-mode jq-mode
lispy (lispy.overrideAttrs {
packageRequires = [
ace-window iedit swiper zoutline
];
ignoreCompilationError = true;
})
lispyville
lua-mode lua-mode
nix-mode nix-mode
rust-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 '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)))
(with-eval-after-load '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)
@@ -1920,7 +1860,7 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
#+END_SRC #+END_SRC
#+BEGIN_SRC elisp #+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) (keymap-global-set "C-c c" claude-code-command-map)
#+END_SRC #+END_SRC
* Theme * Theme