2 Commits

Author SHA1 Message Date
Joe Frikker d80478e4e9 wip 2026-06-07 14:00:09 -04:00
Joe Frikker 53bb5718f3 wtf 2026-06-06 01:25:44 +00:00
2 changed files with 258 additions and 128 deletions
+71 -4
View File
@@ -50,20 +50,24 @@
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; };
}; };
homeConfigurations.home = homeConfigurations.home =
let pkgs = nixpkgs.legacyPackages.x86_64-linux; let pkgs = import nixpkgs { system = "x86_64-linux"; config.allowUnfree = true; };
modules = modules-for-system pkgs; modules = modules-for-system pkgs;
in home-manager.lib.homeManagerConfiguration { in home-manager.lib.homeManagerConfiguration {
inherit pkgs; inherit pkgs;
@@ -82,6 +86,69 @@
extraSpecialArgs = { kube = kube.packages.x86_64-linux.default; }; extraSpecialArgs = { kube = kube.packages.x86_64-linux.default; };
}; };
packages.aarch64-darwin.default = modules-for-system nixpkgs.legacyPackages.aarch64-darwin; homeConfigurations.home-laptop =
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;
}; };
} }
+187 -124
View File
@@ -1,34 +1,5 @@
#+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
@@ -41,7 +12,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/sbcl.nix #+BEGIN_SRC nix :tangle target/base/sbcl.nix
{pkgs, ...}: {pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
@@ -92,7 +63,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/crypto.nix #+BEGIN_SRC nix :tangle target/base/crypto.nix
{pkgs, ...}: {pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
@@ -112,14 +83,13 @@ tools. They boost better speed, or simply more streamlined features.
| ~ripgrep~ | ~grep~ | | ~ripgrep~ | ~grep~ |
| ~xh~ | ~curl~ | | ~xh~ | ~curl~ |
#+BEGIN_SRC nix :tangle target/rust-reimpls.nix #+BEGIN_SRC nix :tangle target/base/rust-reimpls.nix
{pkgs, ...}: {pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
dust dust
fd fd
ripgrep ripgrep
tokei
xh xh
]; ];
} }
@@ -127,7 +97,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/ledger.nix #+BEGIN_SRC nix :tangle target/base/ledger.nix
{pkgs, ...}: {pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
@@ -138,7 +108,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/nil.nix #+BEGIN_SRC nix :tangle target/base/nil.nix
{pkgs, ...}: {pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
@@ -151,11 +121,11 @@ 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/magic-wormhole.nix #+begin_src nix :tangle target/base/magic-wormhole.nix
{pkgs, ...}: {pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
magic-wormhole magic-wormhole
]; ];
} }
#+end_src #+end_src
@@ -163,52 +133,40 @@ 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/shibumi.nix #+BEGIN_SRC nix :tangle target/base/other-packages.nix
{lib, pkgs, kube, config, ...}: {pkgs, kube, ...}:
{ {
config = lib.mkIf config.jfrikker.shibumi.enable { home.packages = with pkgs; [
home.packages = with pkgs; [ aws-iam-authenticator
aws-iam-authenticator awscli2
awscli2 kube
kube kubectl
kubectl mariadb.client
mariadb.client nerd-fonts.jetbrains-mono
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-packages.nix #+BEGIN_SRC nix :tangle target/desktop/desktop-packages.nix
{lib, pkgs, config, ...}: {pkgs, ...}:
{ {
config = lib.mkIf config.jfrikker.desktop.enable { home.packages = with pkgs; [
home.packages = with pkgs; [ google-chrome
google-chrome (iosevka-bin.override { variant = "Aile"; })
nerd-fonts.jetbrains-mono (iosevka-bin.override { variant = "Etoile"; })
(iosevka-bin.override { variant = "Aile"; }) (iosevka-bin.override { variant = "SGr-IosevkaTerm"; })
(iosevka-bin.override { variant = "Etoile"; }) nerd-fonts.symbols-only
(iosevka-bin.override { variant = "SGr-IosevkaTerm"; }) keymapp
keymapp proton-pass
proton-pass slack
wireshark 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
@@ -490,10 +448,14 @@ 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 = builtins.readFile ./wezterm.lua; extraConfig = ''
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
@@ -501,10 +463,7 @@ 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
local config = {} config.font = wezterm.font("Iosevka Term", {stretch = "Expanded"})
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,
@@ -921,8 +880,7 @@ 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
@@ -1050,11 +1008,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
evil god-mode
evil-collection meow
evil-org
string-inflection string-inflection
]; ];
extraConfig = builtins.readFile ./emacs-editing.el; extraConfig = builtins.readFile ./emacs-editing.el;
@@ -1073,18 +1031,130 @@ 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 #+BEGIN_SRC elisp :tangle nil
(setopt evil-want-keybinding nil) (use-package devil
(require 'evil) :disable t
(evil-mode 1) :config
(require 'evil-collection) (global-devil-mode)
(evil-collection-init) (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
(require 'evil-org) #+BEGIN_SRC elisp
(add-hook 'org-mode-hook 'evil-org-mode) ;; (defun meow-setup ()
(evil-org-set-key-theme '(navigation insert textobjects additional calendar)) ;; (setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)
(require 'evil-org-agenda) ;; (meow-motion-define-key
(evil-org-agenda-set-keys) ;; '("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
(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 (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
@@ -1156,13 +1226,7 @@ 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.overrideAttrs { lispy
packageRequires = [
ace-window iedit swiper zoutline
];
ignoreCompilationError = true;
})
lispyville
lua-mode lua-mode
nix-mode nix-mode
rust-mode rust-mode
@@ -1344,8 +1408,6 @@ 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)
@@ -1860,8 +1922,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
(require 'claude-code) (autoload 'claude-code-command-map "claude-code" :type 'keymap)
(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.
@@ -1916,16 +1978,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
@@ -1958,13 +2020,14 @@ 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 = builtins.readFile ./emacs-theme.el; extraConfig = "(defvar my-base-font-size ${if pkgs.stdenv.isDarwin then "130" else "100"})" +
builtins.readFile ./emacs-theme.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -1976,7 +2039,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 130 :width 'expanded) (set-face-attribute 'default 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 'fixed-pitch nil :font "Iosevka Term" :height my-base-font-size :width 'expanded)
(set-face-attribute 'variable-pitch nil :font "Iosevka Etoile" :height 130) (set-face-attribute 'variable-pitch nil :font "Iosevka Etoile" :height my-base-font-size)
#+END_SRC #+END_SRC