Switching to old output files

This commit is contained in:
Joe Frikker
2026-09-16 23:38:22 -04:00
parent c3288188bd
commit 66cb17371d
7 changed files with 725 additions and 3109 deletions
-2326
View File
File diff suppressed because it is too large Load Diff
+189 -560
View File
@@ -1,23 +1,46 @@
{lib, pkgs, config, ...}: let {
lib,
pkgs,
config,
...
}:
let
inherit (lib) inherit (lib)
mkIf mkIf
mkMerge mkMerge
; ;
cfg = config.jfrikker; cfg = config.jfrikker;
in { in
options.jfrikker = { {
enable = lib.mkEnableOption "Joe Frikker's configuration"; imports = [
desktop.enable = lib.mkEnableOption "Desktop (GUI) applications"; ./emacs.nix
redbook.enable = lib.mkEnableOption "Redbook-specific configuration"; ./helix.nix
./starship.nix
./tmux.nix
}; ];
config = mkIf cfg.enable (mkMerge [ options.jfrikker = {
{ enable = lib.mkEnableOption "Joe Frikker's configuration";
home.packages = with pkgs; [ desktop.enable = lib.mkEnableOption "Desktop (GUI) applications";
rlwrap redbook.enable = lib.mkEnableOption "Redbook-specific configuration";
(sbcl.withPackages (ps: with ps; [ };
config = mkIf cfg.enable (mkMerge [
{
home.packages = with pkgs; [
age-plugin-yubikey
dust
fd
ledger
magic-wormhole
nil
nixfmt
openssh
rage
ripgrep
rlwrap
(sbcl.withPackages (
ps: with ps; [
alexandria alexandria
cl-markup cl-markup
cl-mock cl-mock
@@ -50,268 +73,147 @@
trivial-open-browser trivial-open-browser
trivial-timeout trivial-timeout
uuid uuid
])) ]
]; ))
} tokei
{ xh
home.packages = with pkgs; [ yubikey-manager
rage ];
age-plugin-yubikey
yubikey-manager programs = {
]; bash.enable = true;
} gh.enable = true;
{ home-manager.enable = true;
home.packages = with pkgs; [ jq.enable = true;
dust lazygit.enable = true;
fd nix-index.enable = true;
ripgrep nix-index-database.comma.enable = true;
tokei zoxide.enable = true;
xh
]; bat = {
enable = true;
programs.eza = { config.style = "numbers";
config.theme = "catppuccin-frappe";
themes = {
catppuccin-frappe = {
src = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "sublime-text"; # Bat uses sublime syntax for its themes
rev = "3d8625d937d89869476e94bc100192aa220ce44a";
sha256 = "3ABUsfJpb6RO6AiuuSL5gwDofJIwC5tlEMzBrlY9/s0=";
};
file = "Frappe.tmTheme";
};
};
};
claude-code = {
enable = true;
};
direnv = {
enable = true;
nix-direnv.enable = true;
};
eza = {
enable = true; enable = true;
enableBashIntegration = true; enableBashIntegration = true;
enableZshIntegration = true; enableZshIntegration = true;
icons = "auto"; icons = "auto";
}; };
}
{ fzf = {
home.packages = with pkgs; [
ledger
];
}
{
home.packages = with pkgs; [
nil
nixfmt
];
}
{
home.packages = with pkgs; [
magic-wormhole
];
}
(mkIf cfg.redbook.enable {
home.packages = with pkgs; [
openssh
];
})
(mkIf cfg.desktop.enable {
home.packages = with pkgs; [
google-chrome
nerd-fonts.jetbrains-mono
nerd-fonts.symbols-only
(iosevka-bin.override { variant = "Aile"; })
(iosevka-bin.override { variant = "Etoile"; })
(iosevka-bin.override { variant = "SGr-IosevkaTermSS14"; })
nerd-fonts.symbols-only
keymapp
proton-pass
wireshark
];
fonts.fontconfig.enable = true;
})
(mkIf (cfg.redbook.enable && cfg.desktop.enable) {
home.packages = with pkgs; [
linear
notion-app
(slack.overrideAttrs {
version = "4.50.143";
src = pkgs.fetchurl {
url = "https://downloads.slack-edge.com/desktop-releases/mac/arm64/4.50.143/Slack-4.50.143-macOS.dmg";
hash = "sha256-f5oYi8NPKXWpDcowFYMUjptbQs4V9hK2bm1TuaQeJn0=";
};
})
teams
];
})
{
programs = {
bash.enable = true;
gh.enable = true;
home-manager.enable = true;
jq.enable = true;
lazygit.enable = true;
zoxide.enable = true;
};
}
{
programs.bat = {
enable = true;
config.style = "numbers";
};
}
{
programs.nix-index.enable = true;
programs.nix-index-database.comma.enable = true;
}
{
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
}
{
programs.fzf = {
defaultCommand = "fd --type f"; defaultCommand = "fd --type f";
fileWidgetCommand = "fd --type f"; fileWidgetCommand = "fd --type f";
fileWidgetOptions = ["--preview" "'bat --color=always --style=numbers --line-range=:500 {}'"]; fileWidgetOptions = [
"--preview"
"'bat --color=always --style=numbers --line-range=:500 {}'"
];
changeDirWidgetCommand = "fd --type d"; changeDirWidgetCommand = "fd --type d";
tmux.enableShellIntegration = true; tmux.enableShellIntegration = true;
}; };
}
{ git = {
programs.git = {
enable = true; enable = true;
settings.user.name = "Joe Frikker"; settings.user.name = "Joe Frikker";
settings.user.email = "joe@redbookcattle.com"; settings.user.email = "joe@redbookcattle.com";
settings.github.user = "joe@redbookcattle.com"; settings.github.user = "joe@redbookcattle.com";
settings.merge.conflictstyle = "zdiff3"; settings.merge.conflictstyle = "zdiff3";
}; };
programs.delta = { nh = {
enable = true;
};
delta = {
enable = true; enable = true;
enableGitIntegration = true; enableGitIntegration = true;
}; };
}
{ zsh = {
programs.helix = {
enable = true; enable = true;
defaultEditor = true; oh-my-zsh.enable = true;
syntaxHighlighting.enable = true;
settings.editor = { autosuggestion.enable = true;
auto-format = false; historySubstringSearch.enable = true;
auto-pairs = false; history.share = false;
auto-save.after-delay.enable = true; cdpath = [ "~/source" ];
auto-save.after-delay.timeout = 1000; plugins = [
cursorline = true;
idle-timeout = 0;
rulers = [120];
text-width = 100;
lsp.goto-reference-include-declaration = false;
cursor-shape.insert = "bar";
smart-tab.supersede-menu = true;
whitespace.render.newline = "all";
};
settings.keys.normal.space = {
space = "file_picker";
"," = "buffer_picker";
# b = "@:sh wezterm cli spawn --cwd . -- tig blame <C-r>%<ret>";
};
languages.language-server.eslint = {
args = ["--stdio"];
command = "vscode-eslint-language-server";
config.nodePath = "";
config.quiet = false;
config.rulesCustomizations = [];
config.run = "onType";
config.validate = "on";
config.codeAction.disableRuleComment.enable = true;
config.codeAction.disableRuleComment.location = "separateLine";
config.codeAction.showDocumentation.enable = true;
config.problems.shortenToSingleLine = false;
};
languages.language-server.jdtls.config.java = {
autobuild.enabled = true;
completion.maxResults = 1000;
format.settings.url = "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml";
};
languages.language-server.rust-analyzer.config.files.watcher = "client";
languages.language = [
{ {
name = "typescript"; name = "zsh-nix-shell";
language-servers = [ "typescript-language-server" "vscode-eslint-language-server" ]; file = "nix-shell.plugin.zsh";
indent.tab-width = 4; src = pkgs.fetchFromGitHub {
indent.unit = " "; owner = "chisui";
} repo = "zsh-nix-shell";
{ rev = "v0.7.0";
name = "tsx"; sha256 = "149zh2rm59blr2q458a5irkfh82y3dwdich60s9670kl3cl5h2m1";
language-servers = [ "typescript-language-server" "vscode-eslint-language-server" ]; };
indent.tab-width = 4;
indent.unit = " ";
}
{
name = "java";
indent.tab-width = 4;
indent.unit = " ";
} }
]; ];
}; };
} };
{ xdg = {
programs.nh = { enable = false;
enable = true; # configFile."lazygit/config.yml" = {
}; # enable = true;
} # source = pkgs.fetchFromGitHub
{ # {
programs.starship = { # owner = "catppuccin";
enable = true; # repo = "lazygit";
# rev = "b2ecb6d41b6f54a82104879573c538e8bdaeb0bf"; # Replace with the latest commit hash
# sha256 = "9BBmWRcjNaJE9T0RKVEJaSnkrbMom0CLYE8PzAT6yFw=";
# } + /themes/frappe.yml;
# };
};
}
(mkIf cfg.desktop.enable {
home.packages = with pkgs; [
google-chrome
nerd-fonts.jetbrains-mono
nerd-fonts.symbols-only
(iosevka-bin.override { variant = "Aile"; })
(iosevka-bin.override { variant = "Etoile"; })
(iosevka-bin.override { variant = "SGr-IosevkaTermSS14"; })
nerd-fonts.symbols-only
keymapp
proton-pass
wireshark
];
programs = {
ghostty = {
enable = false;
package = pkgs.ghostty-bin;
settings = { settings = {
add_newline = false; adjust-cell-height = "15%";
container.disabled = true; font-family = "Iosevka Term SS14";
git_branch.symbol = " "; font-size = 13;
git_status.ahead = "⇡\${count}"; theme = "Catppuccin Frappe";
git_status.behind = "⇣\${count}";
git_status.diverged = "⇕⇡\${ahead_count}⇣\${behind_count}";
git_status.format = "([\\[\$conflicted\$staged\$ahead_behind\\]](\$style) )";
java.symbol = " ";
line_break.disabled = true;
nix_shell.symbol = " ";
nodejs.symbol = " ";
package.disabled = true;
palette = "catppuccin_frappe";
python.symbol = " ";
package.symbol = " ";
rust.symbol = " ";
docker_context.disabled = true;
shell.disabled = false;
}; };
}; };
}
{ kitty = {
programs.tmux = {
baseIndex = 1;
clock24 = true;
customPaneNavigationAndResize = true;
historyLimit = 50000;
enable = true;
escapeTime = 0;
keyMode = "vi";
mouse = true;
shell = pkgs.zsh + "/bin/zsh";
shortcut = "Space";
tmuxinator.enable = true;
terminal = "xterm-256color";
extraConfig = ''
bind-key -T copy-mode-vi 'v' send -X begin-selection
bind-key -T copy-mode-vi 'y' send -X copy-selection-and-cancel
bind-key -T launcher g popup -h 100% -w 100% -E lazygit
bind-key g switch-client -Tlauncher
set -g default-command ""
'';
};
}
(mkIf cfg.desktop.enable {
programs.wezterm = {
enable = true;
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;
};
})
(mkIf cfg.desktop.enable {
programs.kitty = {
enable = true; enable = true;
font = { font = {
name = "Iosevka Term SS14"; name = "Iosevka Term SS14";
@@ -331,316 +233,43 @@
"ctrl+9" = "goto_tab 9"; "ctrl+9" = "goto_tab 9";
}; };
}; };
})
{ wezterm = {
programs.ghostty = { enable = true;
enable = false; extraConfig = ''
package = pkgs.ghostty-bin; local config = {}
settings = { config.default_prog = { '${pkgs.zsh}/bin/zsh', '-l'}
adjust-cell-height = "15%"; config.font_size = ${if pkgs.stdenv.isDarwin then "13.0" else "10.0"}
font-family = "Iosevka Term SS14"; ''
font-size = 13; + builtins.readFile ./wezterm.lua;
};
};
fonts.fontconfig.enable = true;
})
(mkIf (cfg.redbook.enable && cfg.desktop.enable) {
home.packages = with pkgs; [
linear
notion-app
(slack.overrideAttrs {
version = "4.50.143";
src = pkgs.fetchurl {
url = "https://downloads.slack-edge.com/desktop-releases/mac/arm64/4.50.143/Slack-4.50.143-macOS.dmg";
hash = "sha256-f5oYi8NPKXWpDcowFYMUjptbQs4V9hK2bm1TuaQeJn0=";
}; };
}; })
} teams
{ ];
programs.zsh = { })
enable = true; (mkIf (cfg.redbook.enable && cfg.desktop.enable) {
oh-my-zsh.enable = true; programs.emacs = {
syntaxHighlighting.enable = true; extraPackages =
autosuggestion.enable = true; epkgs: with epkgs; [
historySubstringSearch.enable = true;
history.share = false;
cdpath = ["~/source"];
};
}
{
programs.zsh.plugins = [
{
name = "zsh-nix-shell";
file = "nix-shell.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "chisui";
repo = "zsh-nix-shell";
rev = "v0.7.0";
sha256 = "149zh2rm59blr2q458a5irkfh82y3dwdich60s9670kl3cl5h2m1";
};
}
];
}
(mkIf cfg.desktop.enable {
programs.emacs = {
enable = true;
extraConfig = builtins.readFile ./emacs.el;
};
})
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
ace-window
doom-modeline
free-keys
ligature
mixed-pitch
popper
];
};
}
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
apheleia
avy
edit-indirect
embark
god-mode
# evil
# evil-collection
# evil-org
string-inflection
];
};
}
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
buffer-terminator
];
};
}
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
consult-eglot
graphql-ts-mode
haskell-ts-mode
jenkinsfile-mode
jq-mode
(lispy.overrideAttrs {
packageRequires = [
ace-window iedit swiper zoutline hydra
];
ignoreCompilationError = true;
})
# lispyville
lua-mode
nix-mode
pnpm-mode
prisma-ts-mode
rust-mode
sly
sly-macrostep
sql-indent
tree-sitter
(treesit-grammars.with-grammars (g: [
g.tree-sitter-bash
g.tree-sitter-commonlisp
g.tree-sitter-css
g.tree-sitter-dockerfile
g.tree-sitter-dot
g.tree-sitter-elisp
g.tree-sitter-graphql
g.tree-sitter-gitcommit
g.tree-sitter-gitignore
g.tree-sitter-haskell
g.tree-sitter-html
g.tree-sitter-java
g.tree-sitter-javascript
g.tree-sitter-jq
g.tree-sitter-json
g.tree-sitter-json5
g.tree-sitter-just
g.tree-sitter-ledger
g.tree-sitter-llvm
g.tree-sitter-make
g.tree-sitter-nginx
g.tree-sitter-nix
g.tree-sitter-org
g.tree-sitter-php
g.tree-sitter-prisma
g.tree-sitter-python
g.tree-sitter-rust
g.tree-sitter-rust-format-args
g.tree-sitter-scss
g.tree-sitter-sql
g.tree-sitter-toml
g.tree-sitter-tsx
g.tree-sitter-typescript
g.tree-sitter-xml
g.tree-sitter-yaml
]))
yaml-pro
];
};
}
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
envrc
];
};
}
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
consult-gh
diff-hl
forge
git-timemachine
magit
];
};
}
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
cape
consult
corfu
embark-consult
marginalia
orderless
vertico
];
};
}
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
org-modern
org-present
org-roam
verb
visual-fill-column
];
};
}
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
eat
];
};
}
(mkIf (cfg.redbook.enable && cfg.desktop.enable) {
programs.emacs = {
extraPackages = epkgs: with epkgs; [
slack slack
ox-slack ox-slack
]; ];
extraConfig = builtins.readFile ./slack.el; extraConfig = builtins.readFile ./slack.el;
}; };
}) })
{ ]);
programs.emacs = { }
extraPackages = epkgs: with epkgs; [
ledger-mode
];
};
}
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
age
];
};
}
{
programs.claude-code = {
enable = true;
};
programs.emacs = {
extraPackages = epkgs: with epkgs; [
(epkgs.trivialBuild {
pname = "claude-code";
version = "0.4.5";
src = pkgs.fetchFromGitHub {
owner = "stevemolitor";
repo = "claude-code.el";
rev = "03199df8b3a1e9cd4857f0851f7a912ba524aff3";
sha256 = "sha256-5QJrWIu4EgnHcOqMwlrs2JBBx7aI9OaSJswesr6Apfk=";
};
packageRequires = [ epkgs.inheritenv ];
})
];
};
}
{
programs.bat = {
config.theme = "catppuccin-frappe";
themes = {
catppuccin-frappe = {
src = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "sublime-text"; # Bat uses sublime syntax for its themes
rev = "3d8625d937d89869476e94bc100192aa220ce44a";
sha256 = "3ABUsfJpb6RO6AiuuSL5gwDofJIwC5tlEMzBrlY9/s0=";
};
file = "Frappe.tmTheme";
};
};
};
}
{
programs.helix.settings.theme = "catppuccin_frappe";
}
{
programs.tmux.plugins = [
{
plugin = pkgs.tmuxPlugins.catppuccin;
extraConfig = ''set -g @catppuccin_window_tabs_enabled on
set -g @catppuccin_window_default_text "#W"
set -g @catppuccin_window_current_text "#W"'';
}
];
}
{
xdg = {
enable = false
;
# configFile."lazygit/config.yml" = {
# enable = true;
# source = pkgs.fetchFromGitHub
# {
# owner = "catppuccin";
# repo = "lazygit";
# rev = "b2ecb6d41b6f54a82104879573c538e8bdaeb0bf"; # Replace with the latest commit hash
# sha256 = "9BBmWRcjNaJE9T0RKVEJaSnkrbMom0CLYE8PzAT6yFw=";
# } + /themes/frappe.yml;
# };
};
}
{
programs.starship.settings = builtins.fromTOML (builtins.readFile
(pkgs.fetchFromGitHub
{
owner = "catppuccin";
repo = "starship";
rev = "3e3e54410c3189053f4da7a7043261361a1ed1bc"; # Replace with the latest commit hash
sha256 = "soEBVlq3ULeiZFAdQYMRFuswIIhI9bclIU8WXjxd7oY=";
} + /palettes/frappe.toml));
}
{
programs.ghostty.settings.theme = "Catppuccin Frappe";
}
{
programs.emacs = {
extraPackages = epkgs: with epkgs; [
catppuccin-theme
];
extraConfig = ''(defvar my-base-font-size ${if pkgs.stdenv.isDarwin then "130" else "100"})
(require 'catppuccin-theme)
(setopt catppuccin-flavor 'frappe)
(load-theme 'catppuccin :no-confirm)
;; (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 'default nil :font "Iosevka Term SS14" :height my-base-font-size)
(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 my-base-font-size)
'';
};
}
]);
}
+250 -223
View File
@@ -1,3 +1,15 @@
(setq use-package-always-defer t)
(use-package emacs
:defer nil
:config
(setq-default fill-column 120)
(setq-default tab-width 4))
(use-package simple
:config
(setq-default indent-tabs-mode nil))
(setopt save-interprogram-paste-before-kill t) (setopt save-interprogram-paste-before-kill t)
(setopt enable-recursive-minibuffers t) (setopt enable-recursive-minibuffers t)
(setopt line-spacing 0.15) (setopt line-spacing 0.15)
@@ -27,8 +39,6 @@
(column-number-mode t) (column-number-mode t)
(which-key-mode)
(setopt dired-auto-revert-buffer t) (setopt dired-auto-revert-buffer t)
(global-hl-line-mode) (global-hl-line-mode)
@@ -120,6 +130,34 @@
(setopt compilation-scroll-output 'first-error) (setopt compilation-scroll-output 'first-error)
(use-package minibuffer
:bind (:map minibuffer-local-map
("M-s" . consult-history)
("M-r" . consult-history) )
:custom
(completion-styles '(orderless basic)))
(use-package xref
:custom
(xref-show-xrefs-function 'consult-xref)
(xref-show-definitions-function 'consult-xref))
(use-package register
:custom
(register-preview-delay 0.5)
:config
(advice-add 'register-preview :override #'consult-register-window))
(use-package isearch
:bind
(:map isearch-mode-map
("M-e" . consult-isearch-history)
("M-s e" . consult-isearch-history)
("M-s l" . consult-line)
("M-s L" . consult-line-multi))
:custom
(isearch-wrap-pause 'no-ding))
(defun jf/window-children (window) (defun jf/window-children (window)
(let ((result nil) (let ((result nil)
(child (window-child window))) (child (window-child window)))
@@ -352,21 +390,23 @@ falls back to the outer one first."
;; (evil-org-set-key-theme '(navigation insert textobjects additional calendar)) ;; (evil-org-set-key-theme '(navigation insert textobjects additional calendar))
;; (require 'evil-org-agenda) ;; (require 'evil-org-agenda)
;; (evil-org-agenda-set-keys) ;; (evil-org-agenda-set-keys)
(require 'god-mode) (use-package god-mode
(require 'which-key) :bind (("<escape>" . (lambda () (interactive) (god-mode-all 1)))
:map god-local-mode-map
("i" . (lambda () (interactive) (god-mode-all -1)))
("z" . repeat)))
(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 () (defun my-god-mode-update-cursor-type ()
(setq cursor-type (cond (setq cursor-type (cond
((and (featurep 'org-present) org-present-mode) nil) ((and (featurep 'org-present) org-present-mode) nil)
((or (and (featurep 'god-mode) god-local-mode) buffer-read-only) 'box) ((or (and (featurep 'god-mode) god-local-mode) buffer-read-only) 'box)
(t 'bar)))) (t 'bar))))
(add-hook 'post-command-hook 'my-god-mode-update-cursor-type) (add-hook 'post-command-hook 'my-god-mode-update-cursor-type)
(which-key-enable-god-mode-support)
(use-package which-key
:hook after-init
:config
(which-key-enable-god-mode-support))
(defun avy-goto-char-timer-embark () (defun avy-goto-char-timer-embark ()
(interactive) (interactive)
@@ -382,19 +422,13 @@ falls back to the outer one first."
(avy-goto-char-timer))) (avy-goto-char-timer)))
(bind-keys (bind-keys
("C-j" . avy-goto-char-timer) ("M-j" . avy-goto-char-timer-embark))
("M-j" . avy-goto-char-timer-embark)
("C-." . embark-act))
(with-eval-after-load 'lispy (use-package avy
(bind-keys :map lispy-mode-map :bind (("C-j" . avy-goto-char-timer)))
("C-j" . avy-goto-char-timer)))
(with-eval-after-load 'org (use-package embark
(bind-keys :map org-mode-map :bind (("C-." . embark-act)))
("C-j" . avy-goto-char-timer)))
(setopt isearch-wrap-pause 'no-ding)
(defun string-inflection-rust-style-cycle-function (str) (defun string-inflection-rust-style-cycle-function (str)
(cond (cond
@@ -416,36 +450,44 @@ falls back to the outer one first."
(bind-keys :repeat-map string-inflection-rust-map (bind-keys :repeat-map string-inflection-rust-map
("u" . string-inflection-rust-style-cycle)) ("u" . string-inflection-rust-style-cycle))
(bind-keys ("C-x 4 n" . edit-indirect-region)) (use-package edit-indirect
:bind (("C-x 4 n" . edit-indirect-region)))
(with-eval-after-load 'apheleia (use-package apheleia
:config
(push '(prisma-format "prisma" "format" "--schema" filepath) apheleia-formatters)) (push '(prisma-format "prisma" "format" "--schema" filepath) apheleia-formatters))
(buffer-terminator-mode 1) (use-package buffer-terminator
:hook after-init)
(bind-keys (use-package elec-pair
("s-b" . consult-project-buffer)) :hook (after-init . electric-pair-mode))
(electric-pair-mode 1) (use-package tree-sitter
:hook (after-init . global-tree-sitter-mode))
(setq-default indent-tabs-mode nil) (use-package ediff-wind
(setq-default tab-width 4) :custom
(global-tree-sitter-mode 1) (ediff-split-window-function 'split-window-horizontally))
(setopt ediff-split-window-function 'split-window-horizontally)
(defun project-nix-flake () (defun project-nix-flake ()
(interactive) (interactive)
(nix-flake (project-root (project-current t)))) (nix-flake (project-root (project-current t))))
(bind-keys ("C-x p n" . project-nix-flake)) (bind-keys ("C-x p n" . project-nix-flake))
(setq-default fill-column 120) (use-package ansi-color
:hook
(compilation-filter . ansi-color-compilation-filter))
(defun jf-init-fill-column () (use-package display-fill-column-indicator
(display-fill-column-indicator-mode 1)) :hook (prog-mode))
(add-hook 'prog-mode-hook 'jf-init-fill-column)
(with-eval-after-load 'prog-mode (use-package prog-mode
:bind (:map prog-mode-map
("C-c D" . flymake-show-project-diagnostics)
("M-n" . flymake-goto-next-error)
("M-p" . flymake-goto-prev-error))
:config
(defun my-prog-fill-reindent-defun (&optional argument) (defun my-prog-fill-reindent-defun (&optional argument)
"Refill or reindent the paragraph or defun that contains point. "Refill or reindent the paragraph or defun that contains point.
@@ -472,72 +514,89 @@ or follows point."
(advice-add 'prog-fill-reindent-defun :override #'my-prog-fill-reindent-defun)) (advice-add 'prog-fill-reindent-defun :override #'my-prog-fill-reindent-defun))
(add-hook 'compilation-filter-hook 'ansi-color-compilation-filter) (use-package flymake
:commands (flymake-show-project-diagnostics flymake-goto-next-error flymake-goto-prev-error)
(autoload 'flymake-show-project-diagnostics "flymake") :bind (:map flymake-project-diagnostics-mode-map
(autoload 'flymake-goto-next-error "flymake") ("q" . quit-window)))
(autoload 'flymake-goto-prev-error "flymake")
(with-eval-after-load 'prog-mode
(bind-keys :map prog-mode-map
("C-c D" . flymake-show-project-diagnostics)
("M-n" . flymake-goto-next-error)
("M-p" . flymake-goto-prev-error)))
(with-eval-after-load 'flymake
(bind-keys :map flymake-project-diagnostics-mode-map
("q" . quit-window)))
(setopt eglot-ignored-server-capabilities '(:inlayHintProvider :semanticTokensProvider))
(add-hook 'eglot-managed-mode-hook (lambda () (eglot-inlay-hints-mode -1)) nil t)
(setopt eglot-code-action-indications nil)
(setopt eglot-events-buffer-config '(:size 300000 :format full))
(with-eval-after-load 'eglot
(bind-keys :map eglot-mode-map
("C-c a" . eglot-code-actions)
("C-c r" . eglot-rename)
("C-c i" . eglot-find-implementation)))
(with-eval-after-load 'eglot
(add-to-list 'eglot-stay-out-of 'yasnippet))
(setq major-mode-remap-alist '((rust-mode . rust-mode))) (setq major-mode-remap-alist '((rust-mode . rust-mode)))
(use-package rust-mode
(setopt rust-mode-treesitter-derive t) :bind (:map rust-mode-map
("C-c u" . string-inflection-rust-style-cycle))
(with-eval-after-load 'rust-prog-mode :custom
(bind-keys :map rust-mode-map (rust-mode-treesitter-derive t))
("C-c u" . string-inflection-rust-style-cycle)))
(defun yaml-validate () (defun yaml-validate ()
(interactive) (interactive)
(compile (concat "yamllint -d '{extends: default, rules: {indentation: {indent-sequences: false}, braces: {max-spaces-inside: 1}}}' " (buffer-file-name)) t)) (compile (concat "yamllint -d '{extends: default, rules: {indentation: {indent-sequences: false}, braces: {max-spaces-inside: 1}}}' " (buffer-file-name)) t))
(add-hook 'yaml-ts-mode-hook 'yaml-pro-ts-mode) (use-package yaml-pro
:hook (yaml-ts-mode . yaml-pro-ts-mode))
(setopt inferior-lisp-program "sbcl") (use-package lispy
:hook (emacs-lisp-mode lisp-mode lisp-data-mode)
(setopt lispy-compat '(god-mode edebug)) :bind (:map lispy-mode-map
(add-hook 'emacs-lisp-mode-hook (lambda () (lispy-mode 1))) ("i" . (lambda ()
(add-hook 'lisp-mode-hook (lambda () (lispy-mode 1))) (interactive)
(add-hook 'lisp-data-mode-hook (lambda () (lispy-mode 1))) (if (and (featurep 'god-mode) god-global-mode)
(with-eval-after-load 'lispy (god-mode-all -1)
;; (require 'lispyville) (special-lispy-tab))))
;; (add-hook 'lispy-mode-hook #'lispyville-mode) ("C-j" . avy-goto-char-timer))
(bind-keys :map lispy-mode-map :custom
("i" . (lambda () (lispy-compat '(god-mode edebug)))
(interactive)
(if (and (featurep 'god-mode) god-global-mode)
(god-mode-all -1)
(special-lispy-tab))))))
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)) (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))
(add-to-list 'major-mode-remap-alist '(typescript-mode . typescript-ts-mode))
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-mode)) (add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-mode))
(add-to-list 'major-mode-remap-alist '(tsx-mode . tsx-ts-mode))
(setopt typescript-ts-mode-indent-offset 2) (use-package typescript-ts-mode
(with-eval-after-load 'typescript-ts-mode :init
(add-to-list 'major-mode-remap-alist '(typescript-mode . typescript-ts-mode))
(add-to-list 'major-mode-remap-alist '(tsx-mode . tsx-ts-mode))
(defvar my/edit-indirect-tag-modes
'(("graphql" . graphql-ts-mode)
("gql" . graphql-ts-mode)
("sql" . sql-mode)
("css" . css-mode))
"Map of tagged-template tag names to major modes.")
(defun my/edit-indirect--node-bounds (node)
"Return (BEG . END) for NODE's contents, excluding delimiters."
(cons (1+ (treesit-node-start node))
(1- (treesit-node-end node))))
(defun my/edit-indirect-tagged-template-at-point ()
(interactive)
(let* ((node (treesit-node-at (point)))
(tmpl-node (treesit-parent-until
node
(lambda (n) (equal (treesit-node-type n) "template_string"))))
(str-node (unless tmpl-node
(treesit-parent-until
node
(lambda (n) (equal (treesit-node-type n) "string")))))
(target-node (or tmpl-node str-node)))
(unless target-node
(user-error "Point is not inside a string or template literal"))
(let* ((tagged-node (and tmpl-node (treesit-node-parent tmpl-node)))
(tag-node (and tagged-node
(equal (treesit-node-type tagged-node) "call_expression")
(treesit-node-child-by-field-name tagged-node "function")))
(tag-name (and tag-node (treesit-node-text tag-node t)))
(mode (cond
(tag-name (or (cdr (assoc tag-name my/edit-indirect-tag-modes))
major-mode))
(t 'text-mode)))
(bounds (my/edit-indirect--node-bounds target-node))
(buf (edit-indirect-region (car bounds) (cdr bounds) t)))
(with-current-buffer buf
(funcall mode)))))
:bind
(:map typescript-ts-mode-map
("C-c '" . my/edit-indirect-tagged-template-at-point)
:map tsx-ts-mode-map
("C-c '" . my/edit-indirect-tagged-template-at-point))
:custom (typescript-ts-mode-indent-offset 2)
:config
(defun my-tsx-ts-mode--indent-compatibility-b893426 () (defun my-tsx-ts-mode--indent-compatibility-b893426 ()
"Indent rules helper, to handle different releases of tree-sitter-tsx. "Indent rules helper, to handle different releases of tree-sitter-tsx.
Check if a node type is available, then return the right indent rules." Check if a node type is available, then return the right indent rules."
@@ -551,56 +610,26 @@ Check if a node type is available, then return the right indent rules."
((parent-is "jsx_text") grand-parent typescript-ts-mode-indent-offset))))) ((parent-is "jsx_text") grand-parent typescript-ts-mode-indent-offset)))))
(advice-add 'tsx-ts-mode--indent-compatibility-b893426 :override #'my-tsx-ts-mode--indent-compatibility-b893426)) (advice-add 'tsx-ts-mode--indent-compatibility-b893426 :override #'my-tsx-ts-mode--indent-compatibility-b893426))
(defvar my/edit-indirect-tag-modes
'(("graphql" . graphql-ts-mode)
("gql" . graphql-ts-mode)
("sql" . sql-mode)
("css" . css-mode))
"Map of tagged-template tag names to major modes.")
(defun my/edit-indirect--node-bounds (node) (use-package eglot
"Return (BEG . END) for NODE's contents, excluding delimiters." :bind (:map eglot-mode-map
(cons (1+ (treesit-node-start node)) ("C-c a" . eglot-code-actions)
(1- (treesit-node-end node)))) ("C-c r" . eglot-rename)
("C-c i" . eglot-find-implementation))
:custom
(eglot-ignored-server-capabilities '(:inlayHintProvider :semanticTokensProvider))
(eglot-code-action-indications nil)
(eglot-events-buffer-config '(:size 300000 :format full))
:config
(add-to-list 'eglot-server-programs '((prisma-ts-mode) "prisma-language-server" "--stdio"))
(add-to-list 'eglot-stay-out-of 'yasnippet)
(add-hook 'eglot-managed-mode-hook (lambda () (eglot-inlay-hints-mode -1)) nil t))
(defun my/edit-indirect-tagged-template-at-point () (use-package java-ts-mode
(interactive) :init
(let* ((node (treesit-node-at (point))) (push '(java-mode . java-ts-mode) major-mode-remap-alist)
(tmpl-node (treesit-parent-until :bind (:map java-ts-mode-map
node ("C-c u" . string-inflection-java-style-cycle))
(lambda (n) (equal (treesit-node-type n) "template_string"))))
(str-node (unless tmpl-node
(treesit-parent-until
node
(lambda (n) (equal (treesit-node-type n) "string")))))
(target-node (or tmpl-node str-node)))
(unless target-node
(user-error "Point is not inside a string or template literal"))
(let* ((tagged-node (and tmpl-node (treesit-node-parent tmpl-node)))
(tag-node (and tagged-node
(equal (treesit-node-type tagged-node) "call_expression")
(treesit-node-child-by-field-name tagged-node "function")))
(tag-name (and tag-node (treesit-node-text tag-node t)))
(mode (cond
(tag-name (or (cdr (assoc tag-name my/edit-indirect-tag-modes))
major-mode))
(t 'text-mode)))
(bounds (my/edit-indirect--node-bounds target-node))
(buf (edit-indirect-region (car bounds) (cdr bounds) t)))
(with-current-buffer buf
(funcall mode)))))
(with-eval-after-load 'typescript-ts-mode
(define-key typescript-ts-mode-map (kbd "C-c '") #'my/edit-indirect-tagged-template-at-point)
(define-key tsx-ts-mode-map (kbd "C-c '") #'my/edit-indirect-tagged-template-at-point))
(with-eval-after-load 'eglot
(add-to-list 'eglot-server-programs '((prisma-ts-mode) "prisma-language-server" "--stdio")))
(push '(java-mode . java-ts-mode) major-mode-remap-alist)
(with-eval-after-load 'java-ts-mode
(bind-keys :map java-ts-mode-map
("C-c u" . string-inflection-java-style-cycle))
(push `((n-p-gp nil "block" "lambda_expression") parent-bol java-ts-mode-indent-offset) (push `((n-p-gp nil "block" "lambda_expression") parent-bol java-ts-mode-indent-offset)
(cdar java-ts-mode--indent-rules)) (cdar java-ts-mode--indent-rules))
(push `((n-p-gp "}" "block" "lambda_expression") parent-bol 0) (push `((n-p-gp "}" "block" "lambda_expression") parent-bol 0)
@@ -629,86 +658,84 @@ Check if a node type is available, then return the right indent rules."
; jf/compile-class-to-file 3))) ; jf/compile-class-to-file 3)))
;(add-to-list 'compilation-error-regexp-alist 'java-stack-trace) ;(add-to-list 'compilation-error-regexp-alist 'java-stack-trace)
(add-hook 'sql-mode-hook 'sqlind-minor-mode) (use-package sql-indent
:hook
(sql-mode . sqlind-minor-mode))
(setopt haskell-ts-use-indent t) (use-package haskell-ts-mode
:custom
(haskell-ts-use-indent t))
(add-hook 'after-init-hook 'envrc-global-mode) (use-package envrc
(setopt envrc-show-summary-in-minibuffer nil) :hook
(after-init . envrc-global-mode)
:custom
(envrc-show-summary-in-minibuffer nil))
(setopt magit-define-global-key-bindings 'recommended) (use-package magit
(bind-keys ("s-g" . magit)) :bind (("s-g" . magit))
:custom
(setopt magit-save-repository-buffers 'dontask) (magit-define-global-key-bindings 'recommended)
(setopt magit-commit-show-diff nil) (magit-save-repository-buffers 'dontask)
(with-eval-after-load 'magit (magit-commit-show-diff nil)
:config
(set-face-attribute 'git-commit-summary nil :inherit nil) (set-face-attribute 'git-commit-summary nil :inherit nil)
(defun magit-fetch-all-on-load () (defun magit-fetch-all-on-load ()
(magit-run-git-async "fetch" "--all")) (magit-run-git-async "fetch" "--all"))
(add-hook 'magit-status-mode-hook 'magit-fetch-all-on-load) (add-hook 'magit-status-mode-hook 'magit-fetch-all-on-load)
(remove-hook 'magit-status-headers-hook 'magit-insert-tags-header) (remove-hook 'magit-status-headers-hook 'magit-insert-tags-header))
(require 'forge)
(add-hook 'magit-post-refresh-hook 'diff-hl-magit-post-refresh))
(with-eval-after-load 'forge (use-package forge
:after magit
:config
(add-hook 'forge-edit-post-hook 'forge-create-pullreq-insert-single-commit-message) (add-hook 'forge-edit-post-hook 'forge-create-pullreq-insert-single-commit-message)
(setopt forge-status-buffer-default-topic-filters (setopt forge-status-buffer-default-topic-filters
(forge--topics-spec :type 'topic :active nil :state 'open :order 'newest))) (forge--topics-spec :type 'topic :active nil :state 'open :order 'newest)))
(global-diff-hl-mode) (use-package diff-hl
:hook
((after-init . global-diff-hl-mode)
(magit-post-refresh . diff-hl-magit-post-refresh)))
(bind-keys (use-package consult
;; ("C-c M-x" . consult-mode-command) :commands (consult-history)
("C-c h" . consult-history) :functions (consult-register-window consult-xref)
;; ("C-c k" . consult-kmacro) :binds (;; ("C-c M-x" . consult-mode-command)
;; ("C-c m" . consult-man) ("s-b" . consult-project-buffer)
;; ([remap Info-search] . consult-info) ("C-c h" . consult-history)
;; ("C-c k" . consult-kmacro)
;; ("C-c m" . consult-man)
;; ([remap Info-search] . consult-info)
;; ("C-x M-:" . consult-complex-command) ;; ("C-x M-:" . consult-complex-command)
("C-x b" . consult-buffer) ("C-x b" . consult-buffer)
("s-B" . consult-buffer) ("s-B" . consult-buffer)
("C-x 4 b" . consult-buffer-other-window) ("C-x 4 b" . consult-buffer-other-window)
("C-x 5 b" . consult-buffer-other-frame) ("C-x 5 b" . consult-buffer-other-frame)
;; ("C-x t b" . consult-buffer-other-tab) ;; ("C-x t b" . consult-buffer-other-tab)
("C-x r b" . consult-bookmark) ("C-x r b" . consult-bookmark)
("C-x p b" . consult-project-buffer) ("C-x p b" . consult-project-buffer)
("M-#" . consult-register-load) ("M-#" . consult-register-load)
("M-'" . consult-register-store) ("M-'" . consult-register-store)
("C-M-#" . consult-register) ("C-M-#" . consult-register)
("M-y" . consult-yank-pop) ("M-y" . consult-yank-pop)
("M-g e" . consult-compile-error) ("M-g e" . consult-compile-error)
("M-g f" . consult-flymake) ("M-g f" . consult-flymake)
("M-g g" . consult-goto-line) ("M-g g" . consult-goto-line)
("M-g M-g" . consult-goto-line) ("M-g M-g" . consult-goto-line)
("M-g o" . consult-org-heading) ("M-g o" . consult-org-heading)
("M-g m" . consult-mark) ("M-g m" . consult-mark)
("M-g k" . consult-global-mark) ("M-g k" . consult-global-mark)
("M-g i" . consult-imenu) ("M-g i" . consult-imenu)
("M-g I" . consult-imenu-multi) ("M-g I" . consult-imenu-multi)
("M-s r" . consult-ripgrep) ("M-s r" . consult-ripgrep)
("M-s l" . consult-line) ("M-s l" . consult-line)
("M-s L" . consult-line-multi) ("M-s L" . consult-line-multi)
("M-s e" . consult-isearch-history) ("M-s e" . consult-isearch-history))
:map isearch-mode-map :custom
("M-e" . consult-isearch-history) (consult-narrow-key "<")
("M-s e" . consult-isearch-history) :config
("M-s l" . consult-line)
("M-s L" . consult-line-multi)
:map minibuffer-local-map
("M-s" . consult-history)
("M-r" . consult-history))
(advice-add 'register-preview :override #'consult-register-window)
(setopt register-preview-delay 0.5)
(setopt xref-show-xrefs-function 'consult-xref)
(setopt xref-show-definitions-function 'consult-xref)
(eval-when-compile
(require '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)
consult-ripgrep consult-git-grep consult-grep consult-man consult-ripgrep consult-git-grep consult-grep consult-man
@@ -720,38 +747,37 @@ Check if a node type is available, then return the right indent rules."
consult-source-project-recent-file consult-source-project-recent-file
:preview-key '(:debounce 0.4 any))) :preview-key '(:debounce 0.4 any)))
(setopt consult-narrow-key "<") ;; "C-+"
(use-package vertico (use-package vertico
:hook
(after-init . vertico-mode)
:custom :custom
(vertico-count 25) (vertico-count 25))
:config
(vertico-mode))
(setopt completion-styles '(orderless basic))
(use-package marginalia (use-package marginalia
:config :hook
(marginalia-mode)) (after-init . marginalia-mode))
(use-package corfu (use-package corfu
:hook
(after-init . global-corfu-mode)
:custom :custom
(corfu-cycle t) (corfu-cycle t)
(corfu-popupinfo-mode nil) (corfu-popupinfo-mode nil)
(corfu-quit-at-boundary nil) (corfu-quit-at-boundary nil)
(corfu-on-exact-match 'show) (corfu-on-exact-match 'show))
:config
(global-corfu-mode))
;; (setq completion-in-region-function #'consult-completion-in-region) ;; (setq completion-in-region-function #'consult-completion-in-region)
(use-package cape (use-package cape
:custom :functions (cape-file)
:init
(add-hook 'completion-at-point-functions 'cape-file)) (add-hook 'completion-at-point-functions 'cape-file))
(use-package org (use-package org
:bind (("C-c A" . org-agenda) :bind (("C-c A" . org-agenda)
("C-c C" . org-capture) ("C-c C" . org-capture)
("C-c l" . org-id-store-link)) ("C-c l" . org-id-store-link)
:map org-mode-map
("C-j" . avy-goto-char-timer))
:custom :custom
(org-babel-load-languages '((emacs-lisp . t) (sql . t))) (org-babel-load-languages '((emacs-lisp . t) (sql . t)))
(org-confirm-babel-evaluate nil) (org-confirm-babel-evaluate nil)
@@ -815,7 +841,7 @@ Check if a node type is available, then return the right indent rules."
(org-level-7 :height 3.0) (org-level-7 :height 3.0)
(org-level-8 :height 3.0))) (org-level-8 :height 3.0)))
(push (apply #'face-remap-add-relative face) my/org-present-face-remapping-cookies)) (push (apply #'face-remap-add-relative face) my/org-present-face-remapping-cookies))
;; Set a blank header line string to create blank space at the top ;; Set a blank header line string to create blank space at the top
(setq header-line-format " ") (setq header-line-format " ")
@@ -833,7 +859,7 @@ Check if a node type is available, then return the right indent rules."
;; Reset font customizations ;; Reset font customizations
(dolist (cookie my/org-present-face-remapping-cookies) (dolist (cookie my/org-present-face-remapping-cookies)
(face-remap-remove-relative cookie)) (face-remap-remove-relative cookie))
;; Clear the header line string so that it isn't displayed ;; Clear the header line string so that it isn't displayed
(setq header-line-format nil) (setq header-line-format nil)
@@ -869,12 +895,13 @@ Check if a node type is available, then return the right indent rules."
:hook (eshell-load-hook . eat-eshell-mode)) :hook (eshell-load-hook . eat-eshell-mode))
(use-package age (use-package age
:hook
(after-init . age-file-enable)
:custom :custom
(age-default-identity "~/source/dotfiles/keys/yubi1age.txt") (age-default-identity "~/source/dotfiles/keys/yubi1age.txt")
(age-default-recipient "~/source/dotfiles/keys/myself.txt") (age-default-recipient "~/source/dotfiles/keys/myself.txt")
:config :config
(setenv "PINENTRY_PROGRAM" "pinentry-mac") (setenv "PINENTRY_PROGRAM" "pinentry-mac"))
(age-file-enable))
(use-package claude-code (use-package claude-code
:bind-keymap ("C-c c" . claude-code-command-map) :bind-keymap ("C-c c" . claude-code-command-map)
+137
View File
@@ -0,0 +1,137 @@
{
config,
lib,
pkgs,
...
}:
{
config = lib.mkIf (config.jfrikker.enable && config.jfrikker.desktop.enable) {
programs.emacs = {
enable = true;
extraPackages =
epkgs: with epkgs; [
ace-window
age
apheleia
avy
buffer-terminator
cape
catppuccin-theme
(epkgs.trivialBuild {
pname = "claude-code";
version = "0.4.5";
src = pkgs.fetchFromGitHub {
owner = "stevemolitor";
repo = "claude-code.el";
rev = "03199df8b3a1e9cd4857f0851f7a912ba524aff3";
sha256 = "sha256-5QJrWIu4EgnHcOqMwlrs2JBBx7aI9OaSJswesr6Apfk=";
};
packageRequires = [ epkgs.inheritenv ];
})
consult
consult-eglot
consult-gh
corfu
diff-hl
doom-modeline
eat
edit-indirect
embark
embark-consult
envrc
forge
free-keys
git-timemachine
god-mode
graphql-ts-mode
haskell-ts-mode
jenkinsfile-mode
jq-mode
ligature
(lispy.overrideAttrs {
packageRequires = [
ace-window
iedit
swiper
zoutline
hydra
];
ignoreCompilationError = true;
})
ledger-mode
lua-mode
magit
marginalia
mixed-pitch
nix-mode
orderless
org-modern
org-present
org-roam
pnpm-mode
popper
prisma-ts-mode
rust-mode
sly
sly-macrostep
sql-indent
string-inflection
tree-sitter
(treesit-grammars.with-grammars (g: [
g.tree-sitter-bash
g.tree-sitter-commonlisp
g.tree-sitter-css
g.tree-sitter-dockerfile
g.tree-sitter-dot
g.tree-sitter-elisp
g.tree-sitter-graphql
g.tree-sitter-gitcommit
g.tree-sitter-gitignore
g.tree-sitter-haskell
g.tree-sitter-html
g.tree-sitter-java
g.tree-sitter-javascript
g.tree-sitter-jq
g.tree-sitter-json
g.tree-sitter-json5
g.tree-sitter-just
g.tree-sitter-ledger
g.tree-sitter-llvm
g.tree-sitter-make
g.tree-sitter-nginx
g.tree-sitter-nix
g.tree-sitter-org
g.tree-sitter-php
g.tree-sitter-prisma
g.tree-sitter-python
g.tree-sitter-rust
g.tree-sitter-rust-format-args
g.tree-sitter-scss
g.tree-sitter-sql
g.tree-sitter-toml
g.tree-sitter-tsx
g.tree-sitter-typescript
g.tree-sitter-xml
g.tree-sitter-yaml
]))
verb
vertico
visual-fill-column
yaml-pro
];
extraConfig = ''
(defvar my-base-font-size ${if pkgs.stdenv.isDarwin then "130" else "100"})
(require 'catppuccin-theme)
(setopt catppuccin-flavor 'frappe)
(load-theme 'catppuccin :no-confirm)
;; (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 'default nil :font "Iosevka Term SS14" :height my-base-font-size)
(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 my-base-font-size)
''
+ builtins.readFile ./emacs.el;
};
};
}
+79
View File
@@ -0,0 +1,79 @@
{ config, lib, ... }: {
config = lib.mkIf config.jfrikker.enable {
programs.helix = {
enable = true;
defaultEditor = true;
settings.editor = {
auto-format = false;
auto-pairs = false;
auto-save.after-delay.enable = true;
auto-save.after-delay.timeout = 1000;
cursorline = true;
idle-timeout = 0;
rulers = [ 120 ];
text-width = 100;
lsp.goto-reference-include-declaration = false;
cursor-shape.insert = "bar";
smart-tab.supersede-menu = true;
whitespace.render.newline = "all";
};
settings.keys.normal.space = {
space = "file_picker";
"," = "buffer_picker";
# b = "@:sh wezterm cli spawn --cwd . -- tig blame <C-r>%<ret>";
};
settings.theme = "catppuccin_frappe";
languages.language-server.eslint = {
args = [ "--stdio" ];
command = "vscode-eslint-language-server";
config.nodePath = "";
config.quiet = false;
config.rulesCustomizations = [ ];
config.run = "onType";
config.validate = "on";
config.codeAction.disableRuleComment.enable = true;
config.codeAction.disableRuleComment.location = "separateLine";
config.codeAction.showDocumentation.enable = true;
config.problems.shortenToSingleLine = false;
};
languages.language-server.jdtls.config.java = {
autobuild.enabled = true;
completion.maxResults = 1000;
format.settings.url = "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml";
};
languages.language-server.rust-analyzer.config.files.watcher = "client";
languages.language = [
{
name = "typescript";
language-servers = [
"typescript-language-server"
"vscode-eslint-language-server"
];
indent.tab-width = 4;
indent.unit = " ";
}
{
name = "tsx";
language-servers = [
"typescript-language-server"
"vscode-eslint-language-server"
];
indent.tab-width = 4;
indent.unit = " ";
}
{
name = "java";
indent.tab-width = 4;
indent.unit = " ";
}
];
};
};
}
+36
View File
@@ -0,0 +1,36 @@
{ pkgs, ... }: {
config.programs.starship = {
enable = true;
settings = {
add_newline = false;
container.disabled = true;
git_branch.symbol = " ";
git_status.ahead = "⇡\${count}";
git_status.behind = "⇣\${count}";
git_status.diverged = "⇕⇡\${ahead_count}⇣\${behind_count}";
git_status.format = "([\\[\$conflicted\$staged\$ahead_behind\\]](\$style) )";
java.symbol = " ";
line_break.disabled = true;
nix_shell.symbol = " ";
nodejs.symbol = " ";
package.disabled = true;
palette = "catppuccin_frappe";
python.symbol = " ";
package.symbol = " ";
rust.symbol = " ";
docker_context.disabled = true;
shell.disabled = false;
}
// builtins.fromTOML (
builtins.readFile (
pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "starship";
rev = "3e3e54410c3189053f4da7a7043261361a1ed1bc"; # Replace with the latest commit hash
sha256 = "soEBVlq3ULeiZFAdQYMRFuswIIhI9bclIU8WXjxd7oY=";
}
+ /palettes/frappe.toml
)
);
};
}
+34
View File
@@ -0,0 +1,34 @@
{ pkgs, ... }: {
config.programs.tmux = {
baseIndex = 1;
clock24 = true;
customPaneNavigationAndResize = true;
historyLimit = 50000;
enable = true;
escapeTime = 0;
keyMode = "vi";
mouse = true;
shell = pkgs.zsh + "/bin/zsh";
shortcut = "Space";
tmuxinator.enable = true;
terminal = "xterm-256color";
extraConfig = ''
bind-key -T copy-mode-vi 'v' send -X begin-selection
bind-key -T copy-mode-vi 'y' send -X copy-selection-and-cancel
bind-key -T launcher g popup -h 100% -w 100% -E lazygit
bind-key g switch-client -Tlauncher
set -g default-command ""
'';
plugins = [
{
plugin = pkgs.tmuxPlugins.catppuccin;
extraConfig = ''
set -g @catppuccin_window_tabs_enabled on
set -g @catppuccin_window_default_text "#W"
set -g @catppuccin_window_current_text "#W"'';
}
];
};
}