7 Commits

Author SHA1 Message Date
Joe Frikker c695346b3c Merge branch 'redbook' 2026-09-11 13:03:02 -04:00
Joe Frikker 914d548d9f No more git fullscreen? 2026-09-11 13:02:14 -04:00
Joe Frikker 8ee9c32d9c Merge remote-tracking branch 'origin/redbook' 2026-09-06 22:50:16 +00:00
Joe Frikker 04b08dee44 Fixing laptop 2026-08-19 22:02:15 -04:00
Joe Frikker 7d03e428bc Merge remote-tracking branch 'origin/redbook' into laptop 2026-08-19 21:38:05 -04:00
Joe Frikker d80478e4e9 wip 2026-06-07 14:00:09 -04:00
Joe Frikker 53bb5718f3 wtf 2026-06-06 01:25:44 +00:00
3 changed files with 276 additions and 200 deletions
Generated
+9 -9
View File
@@ -8,11 +8,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1787169825, "lastModified": 1787189302,
"narHash": "sha256-3MmWHAzeoFHfwjUCQC01olBN+MC4xoSuR7D0bpPr+EE=", "narHash": "sha256-cUM75Rob89qTxJvqVRF8GUewOriqQtLiyiy5xfd1fMM=",
"owner": "sadjow", "owner": "sadjow",
"repo": "claude-code-nix", "repo": "claude-code-nix",
"rev": "f575914388682670df73e80c9caf82063b659699", "rev": "8fb8cbab6345583e0b68ca7dbbbad08a0a348145",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -28,11 +28,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1787176219, "lastModified": 1779969295,
"narHash": "sha256-djoRr6jBpe35q/0JwAvXpFXg1Ktf+X54NU2RLR7wnHw=", "narHash": "sha256-HwIJ3tOcwSMiV75L7KqJXciXR9UfT+d7rwOZMX7cTnA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "c53d643b3737e2fcd04e6cb3b3580ef50b2087a0", "rev": "61e2c9659324181e0f0ed911958c536333b1d4f6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -49,11 +49,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1786852476, "lastModified": 1779604987,
"narHash": "sha256-IM5CYtf86W4w8eUPpKcY/LpdHElmVBtJhaKnoTKxZEA=", "narHash": "sha256-ZQ5z+fVhxYKtIFwtqGp5O0PD84BM1riASvqDaN5Xs+s=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "c7962dc97b45129df8d751bedaf37beb5a17706e", "rev": "8fba98c80b48fa013820e0163c5096922fea4ddd",
"type": "github" "type": "github"
}, },
"original": { "original": {
+66 -2
View File
@@ -70,7 +70,7 @@
extraSpecialArgs = { claude-code = claude-code.packages.aarch64-darwin.default; }; extraSpecialArgs = { claude-code = claude-code.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;
@@ -89,6 +89,70 @@
extraSpecialArgs = { claude-code = claude-code.packages.x86_64-linux.default; }; extraSpecialArgs = { claude-code = claude-code.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; };
extraSpecialArgs = { claude-code = claude-code.packages.x86_64-linux.default; };
};
packages.x86_64-linux.default = modules-for-system nixpkgs.legacyPackages.x86_64-linux;
}; };
} }
+201 -189
View File
@@ -189,6 +189,7 @@ These programs require a full desktop environment:
(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-IosevkaTermSS14"; }) (iosevka-bin.override { variant = "SGr-IosevkaTermSS14"; })
nerd-fonts.symbols-only
keymapp keymapp
proton-pass proton-pass
wireshark wireshark
@@ -493,10 +494,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
@@ -721,8 +726,9 @@ Now we'll set up some keybindings:
#+END_SRC #+END_SRC
** Ghostty ** Ghostty
Disabled until I can get it working on both linux and mac (if I want to).
#+BEGIN_SRC nix :tangle target/desktop/ghostty.nix #+BEGIN_SRC nix
{pkgs, ...}: { {pkgs, ...}: {
programs.ghostty = { programs.ghostty = {
enable = true; enable = true;
@@ -1087,40 +1093,40 @@ windows. I place windows in the bottom or on the right mostly depending on how w
content to be. content to be.
#+BEGIN_SRC elisp #+BEGIN_SRC elisp
(defun jf/window-children (window) (defun jf/window-children (window)
(let ((result nil) (let ((result nil)
(child (window-child window))) (child (window-child window)))
(while child (while child
(push child result) (push child result)
(setq child (window-next-sibling child))) (setq child (window-next-sibling child)))
(reverse result))) (reverse result)))
(defun jf/window-main-root (&optional frame) (defun jf/window-main-root (&optional frame)
"Return FRAME's main (non-side) window or window subtree." "Return FRAME's main (non-side) window or window subtree."
(let* ((root (frame-root-window (or frame (selected-frame)))) (let* ((root (frame-root-window (or frame (selected-frame))))
(children (jf/window-children root))) (children (jf/window-children root)))
(if (seq-some (lambda (w) (window-parameter w 'window-side)) children) (if (seq-some (lambda (w) (window-parameter w 'window-side)) children)
(seq-find (lambda (w) (not (window-parameter w 'window-side))) children) (seq-find (lambda (w) (not (window-parameter w 'window-side))) children)
root))) root)))
(defun jf/window-leaves (window) (defun jf/window-leaves (window)
"Return the live leaf windows in WINDOW's subtree." "Return the live leaf windows in WINDOW's subtree."
(if (window-live-p window) (if (window-live-p window)
(list window) (list window)
(mapcan #'jf/window-leaves (jf/window-children window)))) (mapcan #'jf/window-leaves (jf/window-children window))))
(defun jf/topright-window (windows) (defun jf/topright-window (windows)
"Return whichever of WINDOWS sits furthest up, then furthest right." "Return whichever of WINDOWS sits furthest up, then furthest right."
(car (sort (copy-sequence windows) (car (sort (copy-sequence windows)
(lambda (a b) (lambda (a b)
(let ((top-a (nth 1 (window-edges a))) (let ((top-a (nth 1 (window-edges a)))
(top-b (nth 1 (window-edges b)))) (top-b (nth 1 (window-edges b))))
(if (= top-a top-b) (if (= top-a top-b)
(> (nth 0 (window-edges a)) (nth 0 (window-edges b))) (> (nth 0 (window-edges a)) (nth 0 (window-edges b)))
(< top-a top-b))))))) (< top-a top-b)))))))
(defun jf/display-buffer-right (buffer alist) (defun jf/display-buffer-right (buffer alist)
"Display BUFFER on the right of the main editing area. "Display BUFFER on the right of the main editing area.
Applies three rules, based on the shape of the frame's non-side windows: Applies three rules, based on the shape of the frame's non-side windows:
1. One window -> split it and show BUFFER in the new right window. 1. One window -> split it and show BUFFER in the new right window.
@@ -1128,92 +1134,92 @@ content to be.
right window is selected, swap the two windows first (keeping right window is selected, swap the two windows first (keeping
focus on the buffer that was active) so BUFFER doesn't evict it. focus on the buffer that was active) so BUFFER doesn't evict it.
3. Any other layout -> show BUFFER in the upper-rightmost window." 3. Any other layout -> show BUFFER in the upper-rightmost window."
(let ((main (jf/window-main-root))) (let ((main (jf/window-main-root)))
(cond (cond
((window-live-p main) ((window-live-p main)
(let* ((new (split-window main nil 'right)) (let* ((new (split-window main nil 'right))
(width (max 1 (- (frame-width) 120))) (width (max 1 (- (frame-width) 120)))
(delta (window-resizable new (- width (window-width new)) t))) (delta (window-resizable new (- width (window-width new)) t)))
(window-resize new delta t) (window-resize new delta t)
(window--display-buffer buffer new 'window alist))) (window--display-buffer buffer new 'window alist)))
((and (window-left-child main) ((and (window-left-child main)
(= (length (jf/window-children main)) 2) (= (length (jf/window-children main)) 2)
(seq-every-p #'window-live-p (jf/window-children main))) (seq-every-p #'window-live-p (jf/window-children main)))
(let* ((left (window-left-child main)) (let* ((left (window-left-child main))
(right (window-next-sibling left))) (right (window-next-sibling left)))
(when (eq (selected-window) right) (when (eq (selected-window) right)
(window-swap-states left right) (window-swap-states left right)
(select-window left)) (select-window left))
(window--display-buffer buffer right 'reuse alist))) (window--display-buffer buffer right 'reuse alist)))
(t (t
(window--display-buffer buffer (jf/topright-window (jf/window-leaves main)) 'reuse alist))))) (window--display-buffer buffer (jf/topright-window (jf/window-leaves main)) 'reuse alist)))))
(setopt popper-reference-buffers (setopt popper-reference-buffers
'("\\*Flymake diagnostics .*" '("\\*Flymake diagnostics .*"
"\\*Embark Export: .*" "\\*Embark Export: .*"
"\\*Embark Collect .*" "\\*Embark Collect .*"
"\\*xref\\*" "\\*xref\\*"
"\\*compilation\\*" "\\*compilation\\*"
"\\*pnpm:.*" "\\*pnpm:.*"
"\\*sly-mrepl *" "\\*sly-mrepl *"
"\\*lispy-message\\*" "\\*lispy-message\\*"
"\\*occur\\*" "\\*occur\\*"
".*eshell\\*" ".*eshell\\*"
"\\*SQL: .*" "\\*SQL: .*"
"magit-revision: .*" "magit-revision: .*"
"\\*Help\\*" "\\*Help\\*"
"\\*rustfmt\\*" "\\*rustfmt\\*"
"\\*slack: .*" "\\*slack: .*"
"\\*forge: .*" "\\*forge: .*"
"new-pullreq" "new-pullreq"
"\\*claude:.*" "\\*claude:.*"
"\\*Man .*" "\\*Man .*"
"\\*List .*" "\\*List .*"
"\\*eldoc\\*")) "\\*eldoc\\*"))
(setopt popper-display-control nil) (setopt popper-display-control nil)
(popper-mode) (popper-mode)
(popper-echo-mode) (popper-echo-mode)
(bind-keys ("C-q" . popper-toggle) (bind-keys ("C-q" . popper-toggle)
("C-;" . popper-cycle)) ("C-;" . popper-cycle))
(defvar jf/fullscreen-popup--param 'jf/fullscreen-saved-configuration (defvar jf/fullscreen-popup--param 'jf/fullscreen-saved-configuration
"Key used to stash the window configuration a fullscreen popup replaced. "Key used to stash the window configuration a fullscreen popup replaced.
Stored per-tab when `tab-bar-mode' is active, otherwise as a plain frame Stored per-tab when `tab-bar-mode' is active, otherwise as a plain frame
parameter; see `jf/tab-or-frame-parameter'.") parameter; see `jf/tab-or-frame-parameter'.")
(defvar-local jf/fullscreen-popup-p nil (defvar-local jf/fullscreen-popup-p nil
"Non-nil in a buffer currently being displayed as a fullscreen popup.") "Non-nil in a buffer currently being displayed as a fullscreen popup.")
(defun jf/current-tab-cell (&optional frame) (defun jf/current-tab-cell (&optional frame)
"Return FRAME's current tab's raw data cell, or nil without `tab-bar-mode'." "Return FRAME's current tab's raw data cell, or nil without `tab-bar-mode'."
(and (bound-and-true-p tab-bar-mode) (and (bound-and-true-p tab-bar-mode)
(assq 'current-tab (tab-bar-tabs frame)))) (assq 'current-tab (tab-bar-tabs frame))))
(defun jf/tab-or-frame-parameter (parameter &optional frame) (defun jf/tab-or-frame-parameter (parameter &optional frame)
"Like `frame-parameter', but scoped to FRAME's selected tab when tabs are in use. "Like `frame-parameter', but scoped to FRAME's selected tab when tabs are in use.
A plain frame parameter is shared by every tab on that frame, which is wrong A plain frame parameter is shared by every tab on that frame, which is wrong
for state like `jf/fullscreen-popup--param': switching tabs swaps in an for state like `jf/fullscreen-popup--param': switching tabs swaps in an
entirely different window layout, so \"the layout to restore\" has to travel entirely different window layout, so \"the layout to restore\" has to travel
with the tab, not the frame." with the tab, not the frame."
(if-let ((tab (jf/current-tab-cell frame))) (if-let ((tab (jf/current-tab-cell frame)))
(alist-get parameter tab) (alist-get parameter tab)
(frame-parameter frame parameter))) (frame-parameter frame parameter)))
(defun jf/set-tab-or-frame-parameter (parameter value &optional frame) (defun jf/set-tab-or-frame-parameter (parameter value &optional frame)
"Set PARAMETER to VALUE, scoped like `jf/tab-or-frame-parameter'." "Set PARAMETER to VALUE, scoped like `jf/tab-or-frame-parameter'."
(if-let ((tab (jf/current-tab-cell frame))) (if-let ((tab (jf/current-tab-cell frame)))
(let ((cell (assq parameter tab))) (let ((cell (assq parameter tab)))
(if cell (if cell
(setcdr cell value) (setcdr cell value)
(setcdr tab (cons (cons parameter value) (cdr tab))))) (setcdr tab (cons (cons parameter value) (cdr tab)))))
(set-frame-parameter frame parameter value))) (set-frame-parameter frame parameter value)))
(defun jf/display-buffer-fullscreen (buffer alist) (defun jf/display-buffer-fullscreen (buffer alist)
"Display BUFFER, deleting other windows, saving the prior layout. "Display BUFFER, deleting other windows, saving the prior layout.
Intended for use in `display-buffer-alist' for popups (e.g. Magit Intended for use in `display-buffer-alist' for popups (e.g. Magit
status/log) that should take over the frame while displayed, but status/log) that should take over the frame while displayed, but
@@ -1221,21 +1227,21 @@ content to be.
`q' or `popper-toggle' -- both end up calling `quit-window', which `q' or `popper-toggle' -- both end up calling `quit-window', which
is where the restore actually happens; see is where the restore actually happens; see
`jf/quit-window-restore-fullscreen'." `jf/quit-window-restore-fullscreen'."
(unless (jf/tab-or-frame-parameter jf/fullscreen-popup--param) (unless (jf/tab-or-frame-parameter jf/fullscreen-popup--param)
(jf/set-tab-or-frame-parameter jf/fullscreen-popup--param (jf/set-tab-or-frame-parameter jf/fullscreen-popup--param
(current-window-configuration))) (current-window-configuration)))
(when-let ((window (or (display-buffer-reuse-window buffer alist) (when-let ((window (or (display-buffer-reuse-window buffer alist)
(display-buffer-same-window buffer alist) (display-buffer-same-window buffer alist)
(display-buffer-pop-up-window buffer alist) (display-buffer-pop-up-window buffer alist)
(display-buffer-use-some-window buffer alist)))) (display-buffer-use-some-window buffer alist))))
(let ((ignore-window-parameters t)) (let ((ignore-window-parameters t))
(delete-other-windows window)) (delete-other-windows window))
(with-current-buffer buffer (with-current-buffer buffer
(setq jf/fullscreen-popup-p t)) (setq jf/fullscreen-popup-p t))
window)) window))
(defun jf/quit-window-restore-fullscreen (orig-fn &optional kill window) (defun jf/quit-window-restore-fullscreen (orig-fn &optional kill window)
"Restore the saved window configuration after quitting a fullscreen popup. "Restore the saved window configuration after quitting a fullscreen popup.
Advice around `quit-window' so both `q' (which Magit and other Advice around `quit-window' so both `q' (which Magit and other
special-mode buffers bind to buffer-quitting commands that call special-mode buffers bind to buffer-quitting commands that call
@@ -1244,70 +1250,69 @@ content to be.
last fullscreen popup on the tab (or frame, without `tab-bar-mode') last fullscreen popup on the tab (or frame, without `tab-bar-mode')
has closed, so opening one fullscreen popup from within another has closed, so opening one fullscreen popup from within another
falls back to the outer one first." falls back to the outer one first."
(let* ((window (or window (selected-window))) (let* ((window (or window (selected-window)))
(was-fullscreen (buffer-local-value 'jf/fullscreen-popup-p (was-fullscreen (buffer-local-value 'jf/fullscreen-popup-p
(window-buffer window))) (window-buffer window)))
(frame (window-frame window))) (frame (window-frame window)))
(funcall orig-fn kill window) (funcall orig-fn kill window)
(when (and was-fullscreen (when (and was-fullscreen
(not (and (window-live-p window) (not (and (window-live-p window)
(buffer-local-value 'jf/fullscreen-popup-p (buffer-local-value 'jf/fullscreen-popup-p
(window-buffer window)))) (window-buffer window))))
(jf/tab-or-frame-parameter jf/fullscreen-popup--param frame)) (jf/tab-or-frame-parameter jf/fullscreen-popup--param frame))
(let ((conf (jf/tab-or-frame-parameter jf/fullscreen-popup--param frame))) (let ((conf (jf/tab-or-frame-parameter jf/fullscreen-popup--param frame)))
(jf/set-tab-or-frame-parameter jf/fullscreen-popup--param nil frame) (jf/set-tab-or-frame-parameter jf/fullscreen-popup--param nil frame)
(set-window-configuration conf))))) (set-window-configuration conf)))))
(advice-add 'quit-window :around #'jf/quit-window-restore-fullscreen) (advice-add 'quit-window :around #'jf/quit-window-restore-fullscreen)
(setopt split-width-threshold 200) (setopt split-width-threshold 200)
(setopt split-height-threshold nil) (setopt split-height-threshold nil)
(setopt display-buffer-base-action (setopt display-buffer-base-action
'((display-buffer-reuse-window display-buffer-same-window '((display-buffer-reuse-window
display-buffer-in-previous-window display-buffer-reuse-mode-window
display-buffer-use-some-window))) display-buffer-use-some-window)))
(setq display-buffer-alist (setq display-buffer-alist
'(((or "magit: *" '(((or "\\*Flymake diagnostics .*"
"magit-log*" "\\*Embark Export: .*"
"\\*Messages\\*" "\\*Embark Collect .*"
"\\*trace-output\\*" "\\*xref\\*"
"\\*EGLOT connections\\*") "\\*compilation\\*"
(jf/display-buffer-fullscreen)) "\\*pnpm:.*"
((or "\\*Flymake diagnostics .*" "\\*sly-mrepl *"
"\\*Embark Export: .*" "\\*lispy-message\\*"
"\\*Embark Collect .*" "\\*occur\\*"
"\\*xref\\*" ".*eshell\\*"
"\\*compilation\\*" "\\*SQL: .*")
"\\*pnpm:.*" (display-buffer-in-side-window)
"\\*sly-mrepl *" (side . bottom)
"\\*lispy-message\\*" (slot . 0)
"\\*occur\\*" (window-height . 0.33))
".*eshell\\*" ((or "magit: *"
"\\*SQL: .*") "magit-log*"
(display-buffer-in-side-window) "\\*Messages\\*"
(side . bottom) "\\*trace-output\\*"
(slot . 0) "\\*EGLOT connections\\*"
(window-height . 0.33) "magit-revision: .*"
(window-parameters (no-delete-other-windows . t) "\\*Help\\*"
(no-other-window . t))) "\\*rustfmt\\*"
((or "magit-revision: .*" "\\*slack: .*"
"\\*Help\\*" "\\*forge: .*"
"\\*rustfmt\\*" "new-pullreq"
"\\*slack: .*" "\\*claude:.*"
"\\*forge: .*" "\\*Man .*"
"new-pullreq" "\\*List .*"
"\\*claude:.*" "\\*Embark Actions\\*"
"\\*Man .*" "\\*eldoc\\*")
"\\*List .*" (display-buffer-reuse-window
"\\*Embark Actions\\*" display-buffer-reuse-mode-window
"\\*eldoc\\*") jf/display-buffer-right))))
(jf/display-buffer-right))))
(setopt window-persistent-parameters (setopt window-persistent-parameters
(cl-list* '(no-delete-other-windows . writable) (cl-list* '(no-delete-other-windows . writable)
'(no-other-window . writable) '(no-other-window . writable)
window-persistent-parameters)) window-persistent-parameters))
#+END_SRC #+END_SRC
@@ -1323,10 +1328,10 @@ This configuration affects general text editing, across all modes. First, some p
programs.emacs = { programs.emacs = {
enable = true; enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
apheleia
avy avy
edit-indirect edit-indirect
embark embark
format-all
god-mode god-mode
# evil # evil
# evil-collection # evil-collection
@@ -1440,6 +1445,12 @@ Just "silently" wrap when searching at the bottom of a document.
(bind-keys ("C-x 4 n" . edit-indirect-region)) (bind-keys ("C-x 4 n" . edit-indirect-region))
#+END_SRC #+END_SRC
Some auto-formatting stuff
#+begin_src elisp
(push '(prisma-format "prisma" "format" "--schema" filepath) apheleia-formatters)
#+end_src
** Workflow ** Workflow
:PROPERTIES: :PROPERTIES:
:header-args:elisp: :tangle target/desktop/emacs-workflow.el :header-args:elisp: :tangle target/desktop/emacs-workflow.el
@@ -2289,16 +2300,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
@@ -2338,13 +2349,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
@@ -2356,7 +2368,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 SS14" :height 130) (set-face-attribute 'default nil :font "Iosevka Term SS14" :height my-base-font-size)
(set-face-attribute 'fixed-pitch nil :font "Iosevka Term SS14" :height 130) (set-face-attribute 'fixed-pitch nil :font "Iosevka Term SS14" :height my-base-font-size)
(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