4 Commits

Author SHA1 Message Date
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 364 additions and 295 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;
}; };
} }
+168 -163
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;
@@ -834,6 +840,7 @@ These are just some general settings that apply everywhere. First, a few package
free-keys free-keys
ligature ligature
mixed-pitch mixed-pitch
perspective
popper popper
]; ];
extraConfig = builtins.readFile ./emacs-global.el; extraConfig = builtins.readFile ./emacs-global.el;
@@ -844,7 +851,26 @@ These are just some general settings that apply everywhere. First, a few package
Turn off some default settings that I don't find useful. Turn off some default settings that I don't find useful.
#+BEGIN_SRC elisp #+BEGIN_SRC elisp
(setopt inhibit-startup-screen t)
(setopt initial-scratch-message nil)
(setopt sentence-end-double-space nil)
(menu-bar-mode -1)
(scroll-bar-mode -1)
(tool-bar-mode -1)
(setopt make-backup-files nil)
(setopt split-width-threshold 200)
(setopt split-height-threshold nil)
(setopt display-buffer-base-action
'((display-buffer-reuse-window display-buffer-same-window
display-buffer-in-previous-window
display-buffer-use-some-window)))
(setopt view-read-only t)
(setopt save-interprogram-paste-before-kill t) (setopt save-interprogram-paste-before-kill t)
(setopt kill-whole-line t)
(delete-selection-mode t)
(column-number-mode t)
(setopt auto-save-default nil)
(setopt create-lockfiles nil)
(setopt enable-recursive-minibuffers t) (setopt enable-recursive-minibuffers t)
(setopt line-spacing 0.15) (setopt line-spacing 0.15)
@@ -855,66 +881,6 @@ Turn off some default settings that I don't find useful.
(tab-bar-mode) (tab-bar-mode)
#+END_SRC #+END_SRC
Don't show the welcome screen, and keep the scratch buffer empty by default. These are not useful
after you've started emacs more than a few times.
#+begin_src elisp
(setopt inhibit-startup-screen t)
(setopt initial-scratch-message nil)
#+end_src
Turn off all the ugly graphical crap.
#+begin_src elisp
(menu-bar-mode -1)
(scroll-bar-mode -1)
(tool-bar-mode -1)
#+end_src
I don't find emacs's backup files useful, and they seem to litter my directories. I could maybe see
a use if I wasn't using git. But, git is so easy to use, that I pretty much use it everywhere. I
don't need a poor man's local history.
Also, why do I have to set so many variables just to get emacs to stop putting extra files
everywhere?
#+begin_src elisp
(setopt make-backup-files nil)
(setopt create-lockfiles nil)
(setopt auto-save-default nil)
#+end_src
Turn on ~view-mode~ automatically when the buffer is read-only. This just helps out with navigation
a bit. I almost want to open files read-only by default, just so I can use ~view-mode~ (maybe with
some other keybindings) all the time. But, I think one more invisible flag to manage is a bit much.
#+begin_src elisp
(setopt view-read-only t)
#+end_src
I don't really do anything with sentences. But, I also never put two spaces after a period. So, at
least this setting is correct.
#+begin_src elisp
(setopt sentence-end-double-space nil)
#+end_src
I kill whole lines *way* more than partial lines. If the cursor is at the front of a line, this will
just kill the whole line instead of requiring two ~C-k C-k~ presses to make it happen. I'm not sure
when I'd ever want it to kill the line *without* the trailing newline, but I guess the one time ever
that I do, I'll have to press two more keys :(
#+begin_src elisp
(setopt kill-whole-line t)
#+end_src
Show column numbers in the modeline. Now that I think about it, I'm not sure why I want this. I
guess I could try turning it off someday?
#+begin_src elisp
(column-number-mode t)
#+end_src
Make sure which-key mode is always on. The on-the-fly keymap help it gives is indespensable. Make sure which-key mode is always on. The on-the-fly keymap help it gives is indespensable.
#+BEGIN_SRC elisp #+BEGIN_SRC elisp
@@ -943,13 +909,23 @@ already indented, then try to complete the thing at point." Recommended by [[htt
#+END_SRC #+END_SRC
Set the cursor to be a bar. I'm not sure what the benefit would be of a block cursor, since the Set the cursor to be a bar. I'm not sure what the benefit would be of a block cursor, since the
current character isn't really "selected" like it would be in Helix. I switch this to a box when in current character isn't really "selected" like it would be in Helix. When I had God mode set up, I
god mode / read-only buffers, like vim would. switched to a block cursor during normal mode, just because I was so used to it from Helix and
Vim. Now, I don't think there's really a need to ever switch.
#+BEGIN_SRC elisp #+BEGIN_SRC elisp
(setq-default cursor-type 'bar) (setq-default cursor-type 'bar)
#+END_SRC #+END_SRC
Emacs is supposed to be all about automation (maybe?). There's basically never a case where I don't
want changes I've made to be immediately saved to disk. So let's have Emacs do that. There's still a
fairly long (~5 sec) delay before changes are saved, which is kind of annoying. Maybe I'll look into
that at some point?
#+BEGIN_SRC elisp
; (auto-save-visited-mode)
#+END_SRC
Repeat-mode takes care of eliminating some annoying duplicate keypresses. I mostly use repeat-mode Repeat-mode takes care of eliminating some annoying duplicate keypresses. I mostly use repeat-mode
for two-character commands that need to be repeated; ~devil~ also has some single-key-with-modifier for two-character commands that need to be repeated; ~devil~ also has some single-key-with-modifier
repeats set up that only apply in that mode. repeats set up that only apply in that mode.
@@ -1036,9 +1012,6 @@ Set up a few project- / workspace-related key bindings.
("s-s" . tab-bar-switch-to-tab))) ("s-s" . tab-bar-switch-to-tab)))
#+END_SRC #+END_SRC
#+RESULTS:
: tab-bar-switch-to-tab
Don't run a server. I'm not using this, I can always turn it back on if I need to. Don't run a server. I'm not using this, I can always turn it back on if I need to.
#+BEGIN_SRC elisp #+BEGIN_SRC elisp
@@ -1095,59 +1068,52 @@ content to be.
(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/enforce-right-side-heights (win)
"Return FRAME's main (non-side) window or window subtree." (let ((slot-heights '((-1 . 20)))
(let* ((root (frame-root-window (or frame (selected-frame)))) (parent (window-parent win)))
(children (jf/window-children root))) (when parent
(if (seq-some (lambda (w) (window-parameter w 'window-side)) children) (let ((children (jf/window-children parent)))
(seq-find (lambda (w) (not (window-parameter w 'window-side))) children) (when (> (length children) 1)
root))) (cl-loop for child in children
for slot = (window-parameter child 'window-slot)
for height = (alist-get slot slot-heights)
when height do (progn (window-resize child (- height (window-height child)))
(window-preserve-size child nil t))))))))
(defun jf/window-leaves (window) (defun jf/enforce-right-side-width (win)
"Return the live leaf windows in WINDOW's subtree." "Resize side window WIN so its frame keeps 120 columns for the rest of the frame."
(if (window-live-p window) (let ((width (max 1 (- (frame-width (window-frame win)) 120))))
(list window) (window-resize win (- width (window-width win)) t)))
(mapcan #'jf/window-leaves (jf/window-children window))))
(defun jf/topright-window (windows) (defun jf/enforce-right-side-widths (frame)
"Return whichever of WINDOWS sits furthest up, then furthest right." "Re-apply `jf/enforce-right-side-width' to all of FRAME's right-side windows."
(car (sort (copy-sequence windows) (dolist (win (window-list frame 'nomini))
(lambda (a b) (when (eq (window-parameter win 'window-side) 'right)
(let ((top-a (nth 1 (window-edges a))) (jf/enforce-right-side-width win))))
(top-b (nth 1 (window-edges b))))
(if (= top-a top-b)
(> (nth 0 (window-edges a)) (nth 0 (window-edges b)))
(< top-a top-b)))))))
(defun jf/display-buffer-right (buffer alist) (add-hook 'window-size-change-functions #'jf/enforce-right-side-widths)
"Display BUFFER on the right of the main editing area.
Applies three rules, based on the shape of the frame's non-side windows: ;; (require 'perspective)
1. One window -> split it and show BUFFER in the new right window. ;; (setopt persp-mode-prefix-key (kbd "C-x t"))
2. Two windows side-by-side -> show BUFFER in the right one. If the ;; (setopt persp-show-modestring nil)
right window is selected, swap the two windows first (keeping ;; (persp-mode)
focus on the buffer that was active) so BUFFER doesn't evict it.
3. Any other layout -> show BUFFER in the upper-rightmost window."
(let ((main (jf/window-main-root)))
(cond
((window-live-p main)
(let* ((new (split-window main nil 'right))
(width (max 1 (- (frame-width) 120)))
(delta (window-resizable new (- width (window-width new)) t)))
(window-resize new delta t)
(window--display-buffer buffer new 'window alist)))
((and (window-left-child main)
(= (length (jf/window-children main)) 2)
(seq-every-p #'window-live-p (jf/window-children main)))
(let* ((left (window-left-child main))
(right (window-next-sibling left)))
(when (eq (selected-window) right)
(window-swap-states left right)
(select-window left))
(window--display-buffer buffer right 'reuse alist)))
(t
(window--display-buffer buffer (jf/topright-window (jf/window-leaves main)) 'reuse alist)))))
;; (defun jf/popper-group-by-owning-perspective ()
;; "Return the name of the perspective that owns the current buffer.
;; Unlike `popper-group-by-perspective', which just returns whichever
;; perspective happens to be active on the frame right now, this looks
;; up which perspective's buffer list the popup buffer actually belongs
;; to. This matters because popper re-groups popups on
;; `window-configuration-change-hook', which perspective.el triggers
;; *after* switching the frame's active perspective -- so
;; `popper-group-by-perspective' ends up filing a popup under the
;; perspective you just switched *to* rather than the one it came from."
;; (let ((buf (current-buffer)))
;; (or (cl-loop for persp being the hash-values of (perspectives-hash (selected-frame))
;; if (memq buf (persp-buffers persp))
;; return (persp-name persp))
;; (persp-current-name))))
(setopt popper-reference-buffers (setopt popper-reference-buffers
'("\\*Flymake diagnostics .*" '("\\*Flymake diagnostics .*"
@@ -1172,6 +1138,7 @@ content to be.
"\\*List .*" "\\*List .*"
"\\*eldoc\\*")) "\\*eldoc\\*"))
(setopt popper-display-control nil) (setopt popper-display-control nil)
;; (setopt popper-group-function 'jf/popper-group-by-owning-perspective)
(popper-mode) (popper-mode)
(popper-echo-mode) (popper-echo-mode)
@@ -1181,8 +1148,8 @@ content to be.
(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.")
@@ -1195,10 +1162,10 @@ content to be.
(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)))
@@ -1215,12 +1182,12 @@ content to be.
(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
restore the previous window configuration once closed via either restore the previous window configuration once closed via either
`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)))
@@ -1237,13 +1204,13 @@ content to be.
(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
`quit-window') and Popper's close/toggle commands (which also call `quit-window') and Popper's close/toggle commands (which also call
`quit-window' directly) trigger the restore. Only restores once the `quit-window' directly) trigger the restore. Only restores once the
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)))
@@ -1260,13 +1227,6 @@ content to be.
(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-height-threshold nil)
(setopt display-buffer-base-action
'((display-buffer-reuse-window display-buffer-same-window
display-buffer-in-previous-window
display-buffer-use-some-window)))
(setq display-buffer-alist (setq display-buffer-alist
'(((or "magit: *" '(((or "magit: *"
"magit-log*" "magit-log*"
@@ -1299,10 +1259,25 @@ content to be.
"new-pullreq" "new-pullreq"
"\\*claude:.*" "\\*claude:.*"
"\\*Man .*" "\\*Man .*"
"\\*List .*" "\\*List .*")
"\\*Embark Actions\\*" (display-buffer-in-side-window)
(side . right)
(slot . 0)
(window-width . jf/enforce-right-side-width)
(window-height . jf/enforce-right-side-heights)
(preserve-size . (nil . nil))
(window-parameters (no-delete-other-windows . t)
(no-other-window . t)))
((or "\\*Embark Actions\\*"
"\\*eldoc\\*") "\\*eldoc\\*")
(jf/display-buffer-right)))) (display-buffer-in-side-window)
(side . right)
(slot . -1)
(window-width . jf/enforce-right-side-width)
(window-height . jf/enforce-right-side-heights)
(preserve-size . (nil . t))
(window-parameters (no-delete-other-windows . t)
(no-other-window . t)))))
(setopt window-persistent-parameters (setopt window-persistent-parameters
(cl-list* '(no-delete-other-windows . writable) (cl-list* '(no-delete-other-windows . writable)
@@ -1450,7 +1425,7 @@ Just "silently" wrap when searching at the bottom of a document.
programs.emacs = { programs.emacs = {
enable = true; enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
buffer-terminator # bufferlo
]; ];
extraConfig = builtins.readFile ./emacs-workflow.el; extraConfig = builtins.readFile ./emacs-workflow.el;
}; };
@@ -1458,10 +1433,24 @@ Just "silently" wrap when searching at the bottom of a document.
#+END_SRC #+END_SRC
#+BEGIN_SRC elisp #+BEGIN_SRC elisp
(buffer-terminator-mode 1) ;; (bufferlo-mode)
;; (setopt bufferlo-include-buried-buffers nil)
;; (with-eval-after-load 'bufferlo
;; (setq mode-line-misc-info
;; (assq-delete-all 'bufferlo-mode mode-line-misc-info)))
;; (defun my/bury-or-kill-buffer ()
;; (interactive)
;; (bury-buffer)
;; (bufferlo-kill-orphan-buffers))
(bind-keys (bind-keys
("s-b" . consult-project-buffer)) ("s-b" . consult-buffer)
;; ("C-x t 0" . bufferlo-tab-close-kill-buffers)
;; ("C-x k" . my/bury-or-kill-buffer)
)
#+END_SRC #+END_SRC
** Language Support ** Language Support
@@ -1940,6 +1929,21 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
(eval-when-compile (eval-when-compile
(require 'consult)) (require 'consult))
;; (require 'perspective)
;; (with-eval-after-load 'consult
;; (consult-customize
;; consult-theme :preview-key '(:debounce 0.2 any)
;; consult-ripgrep consult-git-grep consult-grep consult-man
;; consult-bookmark consult-recent-file consult-xref
;; consult-source-bookmark consult-source-file-register
;; consult-source-recent-file
;; consult-source-buffer
;; ;; :preview-key "M-."
;; consult-source-project-recent-file
;; :preview-key '(:debounce 0.4 any))
;; (consult-customize consult-source-buffer :hidden t :default nil)
;; (add-to-list 'consult-buffer-sources persp-consult-source))
(with-eval-after-load 'consult (with-eval-after-load 'consult
(consult-customize (consult-customize
consult-theme :preview-key '(:debounce 0.2 any) consult-theme :preview-key '(:debounce 0.2 any)
@@ -2289,16 +2293,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 +2342,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 +2361,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