647 lines
18 KiB
Nix
647 lines
18 KiB
Nix
{lib, pkgs, config, ...}: let
|
|
inherit (lib)
|
|
mkIf
|
|
mkMerge
|
|
;
|
|
cfg = config.jfrikker;
|
|
in {
|
|
options.jfrikker = {
|
|
enable = lib.mkEnableOption "Joe Frikker's configuration";
|
|
desktop.enable = lib.mkEnableOption "Desktop (GUI) applications";
|
|
redbook.enable = lib.mkEnableOption "Redbook-specific configuration";
|
|
|
|
|
|
};
|
|
|
|
config = mkIf cfg.enable (mkMerge [
|
|
{
|
|
home.packages = with pkgs; [
|
|
rlwrap
|
|
(sbcl.withPackages (ps: with ps; [
|
|
alexandria
|
|
cl-markup
|
|
cl-mock
|
|
clack
|
|
clack-handler-woo
|
|
dbi
|
|
defstar
|
|
dexador
|
|
fare-csv
|
|
group-by
|
|
lack-request
|
|
lack-response
|
|
local-time
|
|
log4cl
|
|
mito
|
|
myway
|
|
prove
|
|
prove-asdf
|
|
replic
|
|
serapeum
|
|
shasht
|
|
slynk
|
|
smug
|
|
split-sequence
|
|
str
|
|
sxql-composer
|
|
trivia
|
|
trivial-mmap
|
|
trivial-ws
|
|
trivial-open-browser
|
|
trivial-timeout
|
|
uuid
|
|
]))
|
|
];
|
|
}
|
|
{
|
|
home.packages = with pkgs; [
|
|
rage
|
|
age-plugin-yubikey
|
|
yubikey-manager
|
|
];
|
|
}
|
|
{
|
|
home.packages = with pkgs; [
|
|
dust
|
|
fd
|
|
ripgrep
|
|
tokei
|
|
xh
|
|
];
|
|
|
|
programs.eza = {
|
|
enable = true;
|
|
enableBashIntegration = true;
|
|
enableZshIntegration = true;
|
|
icons = "auto";
|
|
};
|
|
}
|
|
{
|
|
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";
|
|
fileWidgetCommand = "fd --type f";
|
|
fileWidgetOptions = ["--preview" "'bat --color=always --style=numbers --line-range=:500 {}'"];
|
|
changeDirWidgetCommand = "fd --type d";
|
|
tmux.enableShellIntegration = true;
|
|
};
|
|
}
|
|
{
|
|
programs.git = {
|
|
enable = true;
|
|
settings.user.name = "Joe Frikker";
|
|
settings.user.email = "joe@redbookcattle.com";
|
|
settings.github.user = "joe@redbookcattle.com";
|
|
settings.merge.conflictstyle = "zdiff3";
|
|
};
|
|
|
|
programs.delta = {
|
|
enable = true;
|
|
enableGitIntegration = true;
|
|
};
|
|
}
|
|
{
|
|
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>";
|
|
};
|
|
|
|
|
|
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 = " ";
|
|
}
|
|
];
|
|
};
|
|
}
|
|
{
|
|
programs.nh = {
|
|
enable = true;
|
|
};
|
|
}
|
|
{
|
|
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;
|
|
};
|
|
};
|
|
}
|
|
{
|
|
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;
|
|
font = {
|
|
name = "Iosevka Term SS14";
|
|
package = pkgs.iosevka-bin.override { variant = "SGr-IosevkaTermSS14"; };
|
|
size = 13;
|
|
};
|
|
themeFile = "Catppuccin-Frappe";
|
|
keybindings = {
|
|
"ctrl+1" = "goto_tab 1";
|
|
"ctrl+2" = "goto_tab 2";
|
|
"ctrl+3" = "goto_tab 3";
|
|
"ctrl+4" = "goto_tab 4";
|
|
"ctrl+5" = "goto_tab 5";
|
|
"ctrl+6" = "goto_tab 6";
|
|
"ctrl+7" = "goto_tab 7";
|
|
"ctrl+8" = "goto_tab 8";
|
|
"ctrl+9" = "goto_tab 9";
|
|
};
|
|
};
|
|
})
|
|
{
|
|
programs.ghostty = {
|
|
enable = false;
|
|
package = pkgs.ghostty-bin;
|
|
settings = {
|
|
adjust-cell-height = "15%";
|
|
font-family = "Iosevka Term SS14";
|
|
font-size = 13;
|
|
};
|
|
};
|
|
}
|
|
{
|
|
programs.zsh = {
|
|
enable = true;
|
|
oh-my-zsh.enable = true;
|
|
syntaxHighlighting.enable = true;
|
|
autosuggestion.enable = true;
|
|
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
|
|
ox-slack
|
|
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
|
|
];
|
|
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)
|
|
'';
|
|
};
|
|
}
|
|
]);
|
|
}
|