4 Commits

Author SHA1 Message Date
Joe Frikker b7912eef52 Redbook 2026-06-19 18:38:22 -04:00
Joe Frikker ed88afe698 wip 2026-06-19 18:33:43 -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 101 additions and 230 deletions
+6 -71
View File
@@ -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";
@@ -67,7 +65,7 @@
extraSpecialArgs = { kube = kube.packages.aarch64-darwin.default; }; extraSpecialArgs = { kube = kube.packages.aarch64-darwin.default; };
}; };
homeConfigurations.home = homeConfigurations.home =
let pkgs = import nixpkgs { system = "x86_64-linux"; config.allowUnfree = true; }; let pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = modules-for-system pkgs; modules = modules-for-system pkgs;
in home-manager.lib.homeManagerConfiguration { in home-manager.lib.homeManagerConfiguration {
inherit pkgs; inherit pkgs;
@@ -86,69 +84,6 @@
extraSpecialArgs = { kube = kube.packages.x86_64-linux.default; }; extraSpecialArgs = { kube = kube.packages.x86_64-linux.default; };
}; };
homeConfigurations.home-laptop = packages.aarch64-darwin.default = modules-for-system nixpkgs.legacyPackages.aarch64-darwin;
let pkgs = import nixpkgs { system = "x86_64-linux"; config.allowUnfree = true; };
modules = modules-for-system pkgs;
in home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules =
[
nix-index-database.homeModules.default
] ++
(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 = "/home/jfrikker";
# home.packages = [ pkgs.pinentry ];
programs.ghostty = {
enable = true;
settings = {
font-family = "Iosevka Term Extended";
font-size = 10;
};
};
programs.foot = {
enable = true;
settings = {
main = {
font = "Iosevka Term:size=10:width=expanded";
};
};
};
home.pointerCursor = {
enable = true;
package = pkgs.vanilla-dmz;
name = "Vanilla-DMZ";
sway.enable = true;
gtk.enable = true;
};
wayland.windowManager.sway = {
enable = true;
config.modifier = "Mod4";
# config.terminal = "${pkgs.ghostty}/bin/ghostty";
config.input = {
"1452:628:bcm5974" = {
scroll_factor = "0.4";
};
};
};
programs.emacs.package = pkgs.emacs-pgtk;
}];
extraSpecialArgs = { kube = kube.packages.x86_64-linux.default; };
};
packages.x86_64-linux.default = modules-for-system nixpkgs.legacyPackages.x86_64-linux;
}; };
} }
+95 -159
View File
@@ -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,18 +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"; })
nerd-fonts.symbols-only
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
@@ -273,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 = {
@@ -448,14 +488,10 @@ in case I need it later.
config in two blocks, so we can get lua syntax highlighting in org. First, the nix configuration: config in two blocks, so we can get lua syntax highlighting in org. First, the nix configuration:
#+BEGIN_SRC nix :tangle target/desktop/wezterm.nix #+BEGIN_SRC nix :tangle target/desktop/wezterm.nix
{pkgs, ...}: { {
programs.wezterm = { programs.wezterm = {
enable = true; enable = true;
extraConfig = '' extraConfig = builtins.readFile ./wezterm.lua;
local config = {}
config.default_prog = { '${pkgs.zsh}/bin/zsh', '-l'}
config.font_size = ${if pkgs.stdenv.isDarwin then "13.0" else "10.0"}
'' + builtins.readFile ./wezterm.lua;
}; };
} }
#+END_SRC #+END_SRC
@@ -463,7 +499,10 @@ config in two blocks, so we can get lua syntax highlighting in org. First, the n
Then the real lua config: Then the real lua config:
#+BEGIN_SRC lua #+BEGIN_SRC lua
config.font = wezterm.font("Iosevka Term", {stretch = "Expanded"}) local config = {}
config.default_prog = { '/Users/jfrikker/.nix-profile/bin/zsh', '-l' }
config.font_size = 13.0
-- config.font = wezterm.font("JetBrains Mono")
config.inactive_pane_hsb = { config.inactive_pane_hsb = {
saturation = 0.5, saturation = 0.5,
brightness = 0.5, brightness = 0.5,
@@ -874,13 +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
(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
@@ -1008,11 +1049,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;
@@ -1031,130 +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
(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 (featurep 'meow-mode) 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
@@ -1226,7 +1155,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
@@ -1408,6 +1343,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)
@@ -1922,8 +1859,8 @@ 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
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.
@@ -1978,16 +1915,16 @@ I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
xdg = { xdg = {
enable = false enable = false
; ;
# configFile."lazygit/config.yml" = { configFile."lazygit/config.yml" = {
# enable = true; enable = true;
# source = pkgs.fetchFromGitHub source = pkgs.fetchFromGitHub
# { {
# owner = "catppuccin"; owner = "catppuccin";
# repo = "lazygit"; repo = "lazygit";
# rev = "b2ecb6d41b6f54a82104879573c538e8bdaeb0bf"; # Replace with the latest commit hash rev = "b2ecb6d41b6f54a82104879573c538e8bdaeb0bf"; # Replace with the latest commit hash
# sha256 = "9BBmWRcjNaJE9T0RKVEJaSnkrbMom0CLYE8PzAT6yFw="; sha256 = "9BBmWRcjNaJE9T0RKVEJaSnkrbMom0CLYE8PzAT6yFw=";
# } + /themes/frappe.yml; } + /themes/frappe.yml;
# }; };
}; };
} }
#+END_SRC #+END_SRC
@@ -2020,14 +1957,13 @@ I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
:END: :END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-theme.nix #+BEGIN_SRC nix :tangle target/desktop/emacs-theme.nix
{pkgs, ...}: { {
programs.emacs = { programs.emacs = {
enable = true; enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
catppuccin-theme catppuccin-theme
]; ];
extraConfig = "(defvar my-base-font-size ${if pkgs.stdenv.isDarwin then "130" else "100"})" + extraConfig = builtins.readFile ./emacs-theme.el;
builtins.readFile ./emacs-theme.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -2039,7 +1975,7 @@ I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
;; (set-face-attribute 'default nil :font "JetBrainsMono Nerd Font" :height 130) ;; (set-face-attribute 'default nil :font "JetBrainsMono Nerd Font" :height 130)
;; (set-face-attribute 'fixed-pitch nil :font "JetBrainsMono Nerd Font" :height 130) ;; (set-face-attribute 'fixed-pitch nil :font "JetBrainsMono Nerd Font" :height 130)
(set-face-attribute 'default nil :font "Iosevka Term" :height my-base-font-size :width 'expanded) (set-face-attribute 'default nil :font "Iosevka Term" :height 130 :width 'expanded)
(set-face-attribute 'fixed-pitch nil :font "Iosevka Term" :height my-base-font-size :width 'expanded) (set-face-attribute 'fixed-pitch nil :font "Iosevka Term" :height 130 :width 'expanded)
(set-face-attribute 'variable-pitch nil :font "Iosevka Etoile" :height my-base-font-size) (set-face-attribute 'variable-pitch nil :font "Iosevka Etoile" :height 130)
#+END_SRC #+END_SRC