{ lib, pkgs, config, ... }: let inherit (lib) mkIf mkMerge ; cfg = config.jfrikker; in { imports = [ ./emacs.nix ./helix.nix ./starship.nix ./tmux.nix ]; 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; [ age-plugin-yubikey dust fd ledger magic-wormhole nil nixfmt openssh rage ripgrep 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 ] )) tokei xh yubikey-manager ]; programs = { bash.enable = true; gh.enable = true; home-manager.enable = true; jq.enable = true; lazygit.enable = true; nix-index.enable = true; nix-index-database.comma.enable = true; zoxide.enable = true; bat = { enable = true; 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; enableBashIntegration = true; enableZshIntegration = true; icons = "auto"; }; 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; }; git = { enable = true; settings.user.name = "Joe Frikker"; settings.user.email = "joe@redbookcattle.com"; settings.github.user = "joe@redbookcattle.com"; settings.merge.conflictstyle = "zdiff3"; }; nh = { enable = true; }; delta = { enable = true; enableGitIntegration = true; }; zsh = { enable = true; oh-my-zsh.enable = true; syntaxHighlighting.enable = true; autosuggestion.enable = true; historySubstringSearch.enable = true; history.share = false; cdpath = [ "~/source" ]; 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"; }; } ]; }; }; 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; # }; }; } (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 = { adjust-cell-height = "15%"; font-family = "Iosevka Term SS14"; font-size = 13; theme = "Catppuccin Frappe"; }; }; 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"; }; }; 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; }; }; 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 ]; }) (mkIf (cfg.redbook.enable && cfg.desktop.enable) { programs.emacs = { extraPackages = epkgs: with epkgs; [ slack ox-slack ]; extraConfig = builtins.readFile ./slack.el; }; }) ]); }