diff --git a/docs/homebrew-nixpkgs-validation.md b/docs/homebrew-nixpkgs-validation.md new file mode 100644 index 0000000..5816857 --- /dev/null +++ b/docs/homebrew-nixpkgs-validation.md @@ -0,0 +1,231 @@ +# Homebrew to nixpkgs Validation + +Generated by `scripts/validate-homebrew-against-nixpkgs.py`. + +Validation method: + +- official source: `search.nixos.org` backend +- channel: `nixos-unstable` +- brew source: `inventory/current/brew-bundle.txt` +- cask source: `inventory/current/brew-casks.txt` +- exact verification: Elasticsearch `_count` on `package_attr_name` with `package_platforms = aarch64-darwin` +- search URLs are included for human follow-up, but the exact-count result is the real gate + +- backend alias used: `latest-44-nixos-unstable` +- brews moved to Nix: `71` +- brews kept in Homebrew: `9` +- casks moved to Nix: `10` +- casks kept in Homebrew: `10` + +## Brews + +| Homebrew item | nixpkgs attr | Exact verified | In flake | Action | Reason | +|---|---|---|---|---|---| +| `python@3.13` | `-` | no | yes | `keep-homebrew` | exact standalone nixpkgs attr not confirmed via official search backend | +| `apache-arrow` | `arrow-cpp` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `binwalk` | `binwalk` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `cloc` | `cloc` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `cloudflared` | `cloudflared` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `cmake` | `cmakeCurses` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `coreutils` | `coreutils-prefixed` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `criterion` | `criterion` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `diff-so-fancy` | `diff-so-fancy` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `e2fsprogs` | `e2fsprogs` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `fd` | `fd` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `ffmpeg` | `ffmpeg_7` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `flyctl` | `flyctl` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `fzf` | `fzf` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `gh` | `gh` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `git-delta` | `delta` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `git-filter-repo` | `git-filter-repo` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `git-lfs` | `git-lfs` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `gitleaks` | `gitleaks` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `gnu-time` | `time` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `go` | `go_1_26` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `helm` | `kubernetes-helm-wrapped` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `imagemagick` | `imagemagickBig` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `jq` | `jq` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `k9s` | `k9s` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `kind` | `kind` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `lazygit` | `lazygit` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `libpq` | `libpq` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `librsvg` | `librsvg` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `livekit` | `livekit` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `livekit-cli` | `livekit-cli` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `llmfit` | `llmfit` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `mactop` | `mactop` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `minikube` | `minikube` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `mint` | `mint` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `mise` | `mise` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `neovim` | `neovim` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `node` | `nodejs_22` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `openjdk` | `javaPackages.compiler.openjdk25` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `pandoc` | `pandoc` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `pipx` | `pipx` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `poppler` | `poppler` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `portaudio` | `portaudio` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `postgresql@14` | `postgresql_14` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `postgresql@16` | `postgresql_16` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `postgresql@17` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `potrace` | `potrace` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `redis` | `redis` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `resvg` | `resvg` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `ripgrep` | `ripgrep` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `semgrep` | `semgrep` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `sevenzip` | `p7zip` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `sox` | `sox` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `stow` | `stow` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `swiftformat` | `swiftformat` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `swiftlint` | `swiftlint` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `tailscale` | `tailscale` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `tmux` | `tmux` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `tree` | `tree` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `trivy` | `trivy` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `universal-ctags` | `universal-ctags` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `websocat` | `websocat` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `wget` | `wget` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `worktrunk` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `yazi` | `yazi-unwrapped` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `yq` | `yq` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `yt-dlp` | `yt-dlp` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `zoxide` | `zoxide` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `zsh-autosuggestions` | `zsh-autosuggestions` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `zsh-syntax-highlighting` | `zsh-syntax-highlighting` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `daytonaio/tap/daytona` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `hashicorp/tap/terraform` | `terraform` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `jnsahaj/lumen/lumen` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `nicosuave/tap/memex` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `steipete/tap/bird` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `steipete/tap/gogcli` | `gogcli` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `steipete/tap/summarize` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `stripe/stripe-cli/stripe` | `stripe-cli` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `supabase/tap/supabase` | `supabase-cli` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `withgraphite/tap/graphite` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | + +## Casks + +| Homebrew item | nixpkgs attr | Exact verified | In flake | Action | Reason | +|---|---|---|---|---|---| +| `aerospace` | `aerospace` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `anaconda` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `codelayer` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `codex` | `codex` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `codexbar` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `companion` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `emacs-app` | `emacs` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `font-jetbrains-mono` | `jetbrains-mono` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `font-symbols-only-nerd-font` | `nerd-fonts.symbols-only` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `gcloud-cli` | `google-cloud-sdk` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `ghostty@tip` | `ghostty-bin` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `ngrok` | `ngrok` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `opencode-desktop` | `opencode-desktop` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | +| `osaurus` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `pants` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `riptide-beta` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `riptide-dev` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `riptide-experimental` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `virtualbox` | `-` | no | yes | `keep-homebrew` | no exact nixpkgs attr on aarch64-darwin | +| `warp` | `warp-terminal` | yes | yes | `move-to-nix` | validated exact attr on nixos-unstable | + +## Human Search Links + +- `python@3.13`: https://search.nixos.org/packages?channel=unstable&query=python%403.13 +- `apache-arrow`: https://search.nixos.org/packages?channel=unstable&query=arrow-cpp +- `binwalk`: https://search.nixos.org/packages?channel=unstable&query=binwalk +- `cloc`: https://search.nixos.org/packages?channel=unstable&query=cloc +- `cloudflared`: https://search.nixos.org/packages?channel=unstable&query=cloudflared +- `cmake`: https://search.nixos.org/packages?channel=unstable&query=cmakeCurses +- `coreutils`: https://search.nixos.org/packages?channel=unstable&query=coreutils-prefixed +- `criterion`: https://search.nixos.org/packages?channel=unstable&query=criterion +- `diff-so-fancy`: https://search.nixos.org/packages?channel=unstable&query=diff-so-fancy +- `e2fsprogs`: https://search.nixos.org/packages?channel=unstable&query=e2fsprogs +- `fd`: https://search.nixos.org/packages?channel=unstable&query=fd +- `ffmpeg`: https://search.nixos.org/packages?channel=unstable&query=ffmpeg_7 +- `flyctl`: https://search.nixos.org/packages?channel=unstable&query=flyctl +- `fzf`: https://search.nixos.org/packages?channel=unstable&query=fzf +- `gh`: https://search.nixos.org/packages?channel=unstable&query=gh +- `git-delta`: https://search.nixos.org/packages?channel=unstable&query=delta +- `git-filter-repo`: https://search.nixos.org/packages?channel=unstable&query=git-filter-repo +- `git-lfs`: https://search.nixos.org/packages?channel=unstable&query=git-lfs +- `gitleaks`: https://search.nixos.org/packages?channel=unstable&query=gitleaks +- `gnu-time`: https://search.nixos.org/packages?channel=unstable&query=time +- `go`: https://search.nixos.org/packages?channel=unstable&query=go_1_26 +- `helm`: https://search.nixos.org/packages?channel=unstable&query=kubernetes-helm-wrapped +- `imagemagick`: https://search.nixos.org/packages?channel=unstable&query=imagemagickBig +- `jq`: https://search.nixos.org/packages?channel=unstable&query=jq +- `k9s`: https://search.nixos.org/packages?channel=unstable&query=k9s +- `kind`: https://search.nixos.org/packages?channel=unstable&query=kind +- `lazygit`: https://search.nixos.org/packages?channel=unstable&query=lazygit +- `libpq`: https://search.nixos.org/packages?channel=unstable&query=libpq +- `librsvg`: https://search.nixos.org/packages?channel=unstable&query=librsvg +- `livekit`: https://search.nixos.org/packages?channel=unstable&query=livekit +- `livekit-cli`: https://search.nixos.org/packages?channel=unstable&query=livekit-cli +- `llmfit`: https://search.nixos.org/packages?channel=unstable&query=llmfit +- `mactop`: https://search.nixos.org/packages?channel=unstable&query=mactop +- `minikube`: https://search.nixos.org/packages?channel=unstable&query=minikube +- `mint`: https://search.nixos.org/packages?channel=unstable&query=mint +- `mise`: https://search.nixos.org/packages?channel=unstable&query=mise +- `neovim`: https://search.nixos.org/packages?channel=unstable&query=neovim +- `node`: https://search.nixos.org/packages?channel=unstable&query=nodejs_22 +- `openjdk`: https://search.nixos.org/packages?channel=unstable&query=javaPackages.compiler.openjdk25 +- `pandoc`: https://search.nixos.org/packages?channel=unstable&query=pandoc +- `pipx`: https://search.nixos.org/packages?channel=unstable&query=pipx +- `poppler`: https://search.nixos.org/packages?channel=unstable&query=poppler +- `portaudio`: https://search.nixos.org/packages?channel=unstable&query=portaudio +- `postgresql@14`: https://search.nixos.org/packages?channel=unstable&query=postgresql_14 +- `postgresql@16`: https://search.nixos.org/packages?channel=unstable&query=postgresql_16 +- `postgresql@17`: https://search.nixos.org/packages?channel=unstable&query=postgresql%4017 +- `potrace`: https://search.nixos.org/packages?channel=unstable&query=potrace +- `redis`: https://search.nixos.org/packages?channel=unstable&query=redis +- `resvg`: https://search.nixos.org/packages?channel=unstable&query=resvg +- `ripgrep`: https://search.nixos.org/packages?channel=unstable&query=ripgrep +- `semgrep`: https://search.nixos.org/packages?channel=unstable&query=semgrep +- `sevenzip`: https://search.nixos.org/packages?channel=unstable&query=p7zip +- `sox`: https://search.nixos.org/packages?channel=unstable&query=sox +- `stow`: https://search.nixos.org/packages?channel=unstable&query=stow +- `swiftformat`: https://search.nixos.org/packages?channel=unstable&query=swiftformat +- `swiftlint`: https://search.nixos.org/packages?channel=unstable&query=swiftlint +- `tailscale`: https://search.nixos.org/packages?channel=unstable&query=tailscale +- `tmux`: https://search.nixos.org/packages?channel=unstable&query=tmux +- `tree`: https://search.nixos.org/packages?channel=unstable&query=tree +- `trivy`: https://search.nixos.org/packages?channel=unstable&query=trivy +- `universal-ctags`: https://search.nixos.org/packages?channel=unstable&query=universal-ctags +- `websocat`: https://search.nixos.org/packages?channel=unstable&query=websocat +- `wget`: https://search.nixos.org/packages?channel=unstable&query=wget +- `worktrunk`: https://search.nixos.org/packages?channel=unstable&query=worktrunk +- `yazi`: https://search.nixos.org/packages?channel=unstable&query=yazi-unwrapped +- `yq`: https://search.nixos.org/packages?channel=unstable&query=yq +- `yt-dlp`: https://search.nixos.org/packages?channel=unstable&query=yt-dlp +- `zoxide`: https://search.nixos.org/packages?channel=unstable&query=zoxide +- `zsh-autosuggestions`: https://search.nixos.org/packages?channel=unstable&query=zsh-autosuggestions +- `zsh-syntax-highlighting`: https://search.nixos.org/packages?channel=unstable&query=zsh-syntax-highlighting +- `daytonaio/tap/daytona`: https://search.nixos.org/packages?channel=unstable&query=daytona +- `hashicorp/tap/terraform`: https://search.nixos.org/packages?channel=unstable&query=terraform +- `jnsahaj/lumen/lumen`: https://search.nixos.org/packages?channel=unstable&query=lumen +- `nicosuave/tap/memex`: https://search.nixos.org/packages?channel=unstable&query=memex +- `steipete/tap/bird`: https://search.nixos.org/packages?channel=unstable&query=bird +- `steipete/tap/gogcli`: https://search.nixos.org/packages?channel=unstable&query=gogcli +- `steipete/tap/summarize`: https://search.nixos.org/packages?channel=unstable&query=summarize +- `stripe/stripe-cli/stripe`: https://search.nixos.org/packages?channel=unstable&query=stripe-cli +- `supabase/tap/supabase`: https://search.nixos.org/packages?channel=unstable&query=supabase-cli +- `withgraphite/tap/graphite`: https://search.nixos.org/packages?channel=unstable&query=graphite +- `aerospace`: https://search.nixos.org/packages?channel=unstable&query=aerospace +- `anaconda`: https://search.nixos.org/packages?channel=unstable&query=anaconda +- `codelayer`: https://search.nixos.org/packages?channel=unstable&query=codelayer +- `codex`: https://search.nixos.org/packages?channel=unstable&query=codex +- `codexbar`: https://search.nixos.org/packages?channel=unstable&query=codexbar +- `companion`: https://search.nixos.org/packages?channel=unstable&query=companion +- `emacs-app`: https://search.nixos.org/packages?channel=unstable&query=emacs +- `font-jetbrains-mono`: https://search.nixos.org/packages?channel=unstable&query=jetbrains-mono +- `font-symbols-only-nerd-font`: https://search.nixos.org/packages?channel=unstable&query=nerd-fonts.symbols-only +- `gcloud-cli`: https://search.nixos.org/packages?channel=unstable&query=google-cloud-sdk +- `ghostty@tip`: https://search.nixos.org/packages?channel=unstable&query=ghostty-bin +- `ngrok`: https://search.nixos.org/packages?channel=unstable&query=ngrok +- `opencode-desktop`: https://search.nixos.org/packages?channel=unstable&query=opencode-desktop +- `osaurus`: https://search.nixos.org/packages?channel=unstable&query=osaurus +- `pants`: https://search.nixos.org/packages?channel=unstable&query=pants +- `riptide-beta`: https://search.nixos.org/packages?channel=unstable&query=riptide-beta +- `riptide-dev`: https://search.nixos.org/packages?channel=unstable&query=riptide-dev +- `riptide-experimental`: https://search.nixos.org/packages?channel=unstable&query=riptide-experimental +- `virtualbox`: https://search.nixos.org/packages?channel=unstable&query=virtualbox +- `warp`: https://search.nixos.org/packages?channel=unstable&query=warp-terminal diff --git a/home/bat.nix b/home/bat.nix new file mode 100644 index 0000000..73dac2b --- /dev/null +++ b/home/bat.nix @@ -0,0 +1,9 @@ +{...}: { + programs.bat = { + enable = true; + + config = { + theme = "gruvbox-dark"; + }; + }; +} diff --git a/home/default.nix b/home/default.nix index d2f9da1..11ef74d 100644 --- a/home/default.nix +++ b/home/default.nix @@ -1,6 +1,10 @@ {...}: { imports = [ + ./bat.nix ./dotfiles.nix + ./ghostty.nix + ./git.nix + ./tmux.nix ]; home.stateVersion = "24.11"; diff --git a/home/dotfiles.nix b/home/dotfiles.nix index 9f7a9c1..bc86bc8 100644 --- a/home/dotfiles.nix +++ b/home/dotfiles.nix @@ -15,16 +15,11 @@ in { home.file.".aerospace.toml".source = link "aerospace/.aerospace.toml"; - home.file.".gitconfig".source = link "git/.gitconfig"; - home.file.".zshenv".source = link "zsh/.zshenv"; home.file.".zshrc".source = link "zsh/.zshrc"; home.file.".config/nvim".source = link "nvim/.config/nvim"; - home.file.".config/tmux/tmux.conf".source = link "tmux/.config/tmux/tmux.conf"; - home.file.".config/tmux/session-list.sh".source = link "tmux/.config/tmux/session-list.sh"; - home.file.".config/karabiner/karabiner.json".source = link "karabiner/.config/karabiner/karabiner.json"; @@ -36,9 +31,6 @@ in { home.file.".codex/AGENTS.md".source = link "codex/.codex/AGENTS.md"; home.file.".codex/config.toml".source = link "codex/.codex/config.toml"; - home.file."Library/Application Support/com.mitchellh.ghostty/config".source = - link "ghostty/Library/Application Support/com.mitchellh.ghostty/config.ghostty"; - home.file."Library/Application Support/lazygit/config.yml".source = link "lazygit/Library/Application Support/lazygit/config.yml"; } diff --git a/home/ghostty.nix b/home/ghostty.nix new file mode 100644 index 0000000..fe3449f --- /dev/null +++ b/home/ghostty.nix @@ -0,0 +1,55 @@ +{pkgs, ...}: { + programs.ghostty = { + enable = true; + package = pkgs.ghostty-bin; + installBatSyntax = true; + + settings = { + theme = "Gruvbox Material Dark"; + "font-family" = "Berkeley Mono"; + "font-codepoint-map" = "U+f101-U+f25c=nonicons"; + "background-opacity" = 1; + "font-size" = 17; + "window-padding-y" = 0; + "window-padding-x" = 0; + "window-padding-color" = "extend"; + "mouse-scroll-multiplier" = 1; + keybind = [ + "global:alt+space=toggle_visibility" + "shift+enter=text:\\n" + "alt+v=activate_key_table:vim" + "vim/" + "vim/j=scroll_page_lines:1" + "vim/k=scroll_page_lines:-1" + "vim/ctrl+d=scroll_page_down" + "vim/ctrl+u=scroll_page_up" + "vim/ctrl+f=scroll_page_down" + "vim/ctrl+b=scroll_page_up" + "vim/shift+j=scroll_page_down" + "vim/shift+k=scroll_page_up" + "vim/g>g=scroll_to_top" + "vim/shift+g=scroll_to_bottom" + "vim/slash=start_search" + "vim/n=navigate_search:next" + "vim/v=copy_to_clipboard" + "vim/y=copy_to_clipboard" + "vim/shift+semicolon=toggle_command_palette" + "vim/escape=deactivate_key_table" + "vim/q=deactivate_key_table" + "vim/i=deactivate_key_table" + "vim/catch_all=ignore" + ]; + "mouse-hide-while-typing" = true; + "macos-titlebar-style" = "hidden"; + "macos-option-as-alt" = true; + "confirm-close-surface" = true; + "window-title-font-family" = "VictorMono NFM Italic"; + "window-padding-balance" = true; + "window-save-state" = "always"; + "shell-integration-features" = true; + "copy-on-select" = "clipboard"; + "focus-follows-mouse" = true; + "link-url" = true; + }; + }; +} diff --git a/home/git.nix b/home/git.nix new file mode 100644 index 0000000..4d68d8f --- /dev/null +++ b/home/git.nix @@ -0,0 +1,58 @@ +{...}: { + programs.git = { + enable = true; + lfs.enable = true; + + settings = { + user = { + name = "Harivansh Rathi"; + email = "rathiharivansh@gmail.com"; + }; + + advice.detachedHead = false; + + core = { + pager = "diff-so-fancy | less --tabs=4 -RFX"; + editor = "nvim"; + }; + + interactive.diffFilter = "diff-so-fancy --patch"; + + color = { + ui = true; + "diff-highlight" = { + oldNormal = "red bold"; + oldHighlight = "red bold 52"; + newNormal = "green bold"; + newHighlight = "green bold 22"; + }; + diff = { + meta = 11; + frag = "magenta bold"; + func = "146 bold"; + commit = "yellow bold"; + old = "red bold"; + new = "green bold"; + whitespace = "red reverse"; + }; + }; + + delta = { + "syntax-theme" = "gruvbox-dark"; + "hunk-header-style" = "omit"; + "minus-style" = ''syntax "#3c1f1e"''; + "minus-emph-style" = ''syntax "#72261d"''; + "plus-style" = ''syntax "#1d2c1d"''; + "plus-emph-style" = ''syntax "#2b4a2b"''; + }; + + push.autoSetupRemote = true; + + "diff-so-fancy" = { + markEmptyLines = true; + stripLeadingSymbols = true; + useUnicodeRuler = true; + }; + }; + }; +} diff --git a/home/tmux.nix b/home/tmux.nix new file mode 100644 index 0000000..23de725 --- /dev/null +++ b/home/tmux.nix @@ -0,0 +1,139 @@ +{...}: { + programs.tmux = { + enable = true; + extraConfig = '' + # custom + + # Set prefix to C-b (default) + set -g prefix C-b + bind C-b send-prefix + + set -g mouse on + + # Enable extended keys so Shift+Enter and other modified keys work + set -s extended-keys on + set -as terminal-features 'xterm*:extkeys' + + # Use Vim-style pane navigation (prefix + h/j/k/l) + bind h select-pane -L + bind j select-pane -D + bind k select-pane -U + bind l select-pane -R + + # Switch sessions with prefix + H/J/K/L (capital) + bind H switch-client -p + bind J switch-client -n + bind K switch-client -p + bind L switch-client -n + + # Switch sessions with prefix + H/J/K/L (capital) + bind J switch-client -n + bind K switch-client -p + bind H switch-client -p + bind L switch-client -n + + # fzf pane switcher + bind f display-popup -w 80% -h 80% -E "\ + tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{session_name}/#{window_name} [#{pane_current_command}] #{pane_current_path}' \ + | fzf --reverse \ + --preview 'tmux capture-pane -ep -t {1}' \ + --preview-window right:60% \ + | awk '{print \$1}' \ + | xargs tmux switch-client -t" + + # Auto-rename windows to the current running command + set -g automatic-rename on + set -g automatic-rename-format '#{pane_current_command}' + + # Start all numbering at 1 instead of 0 for better key reachability + set-option -g base-index 1 + set-option -g pane-base-index 1 + set-option -g renumber-windows on + + # Increase history limit, as we want an "almost" unlimited buffer. + set-option -g history-limit 100000 + + # Fix Terminal Title display, to not contain tmux specific information + set-option -g set-titles on + set-option -g set-titles-string "#{pane_title}" + + # Open new windows and panes in the current working directory of the active pane. + bind c new-window -c "#{pane_current_path}" + bind - split-window -c "#{pane_current_path}" + bind "'" split-window -h -c "#{pane_current_path}" + + # Enable support for terminal focus and extended keys. + set-option -s focus-events on + set-option -s extended-keys on + + # Disable waiting time when pressing escape, for smoother Neovim usage. + set-option -s escape-time 0 + + # Styling + RED="#ea6962" + GREEN="#a9b665" + YELLOW="#d8a657" + BLUE="#7daea3" + MAGENTA="#d3869b" + CYAN="#89b482" + BLACK="#1d2021" + DARK_GRAY="#32302F" + LIGHT_GRAY="#4F4946" + BG="#32302F" + FG="#d4be98" + + HALF_ROUND_OPEN="#(printf '\uE0B2')" + HALF_ROUND_CLOSE="#(printf '\uE0B0')" + TRIANGLE_OPEN="#(printf '\uE0B2')" + TRIANGLE_CLOSE="#(printf '\uE0B0')" + + set-option -g status-position top + set-option -g status-style bg=''${BG},fg=''${FG} + set-option -g status-justify left + set-option -g status-left "" + set-option -g status-right "#(~/.config/tmux/session-list.sh)" + set-option -g status-left-length 100 + set-option -g status-right-length 100 + + set-option -g window-status-format "\ + \ + #I\ + #[fg=''${MAGENTA}]:\ + #[fg=default]#W\ + \ + " + + set-option -g window-status-current-format "\ + #[bg=''${LIGHT_GRAY},fg=default] #I\ + #[fg=''${RED}]:\ + #[fg=default]#W \ + #[bg=default]\ + " + + set-option -g window-status-separator "" + + # Plugins (TPM) + set -g @plugin 'tmux-plugins/tpm' + set -g @plugin 'tmux-plugins/tmux-resurrect' + set -g @plugin 'tmux-plugins/tmux-continuum' + + set -g @continuum-save-interval '10' + run '~/.tmux/plugins/tpm/tpm' + ''; + }; + + home.file.".config/tmux/session-list.sh" = { + executable = true; + text = '' + #!/bin/sh + current=$(tmux display-message -p '#S') + tmux list-sessions -F '#S' | while IFS= read -r s; do + if [ "$s" = "$current" ]; then + printf '#[bg=#4F4946,fg=#d8a657] %s #[bg=default,fg=default]' "$s" + else + printf ' %s ' "$s" + fi + done + ''; + }; +} diff --git a/hosts/hari-macbook-pro/default.nix b/hosts/hari-macbook-pro/default.nix index 8a6b306..33bd501 100644 --- a/hosts/hari-macbook-pro/default.nix +++ b/hosts/hari-macbook-pro/default.nix @@ -8,6 +8,7 @@ imports = [ ../../modules/base.nix ../../modules/macos.nix + ../../modules/packages.nix ../../modules/homebrew.nix ]; diff --git a/modules/base.nix b/modules/base.nix index 2876271..67c6e92 100644 --- a/modules/base.nix +++ b/modules/base.nix @@ -32,13 +32,12 @@ environment.shells = [pkgs.zsh]; environment.systemPackages = with pkgs; [ - bat curl fd fzf git gnupg - go + go_1_26 jq just neovim diff --git a/modules/homebrew.nix b/modules/homebrew.nix index b1b37ad..64dc546 100644 --- a/modules/homebrew.nix +++ b/modules/homebrew.nix @@ -11,125 +11,37 @@ taps = [ "daytonaio/tap" "getcompanion-ai/tap" - "hashicorp/tap" - "homebrew/services" "humanlayer/humanlayer" "jnsahaj/lumen" "nicosuave/tap" - "nikitabobko/tap" - "opencode-ai/tap" "pantsbuild/tap" - "pipedreamhq/pd-cli" "steipete/tap" - "stripe/stripe-cli" - "supabase/tap" - "tallesborges/zdx" "withgraphite/tap" ]; brews = [ - "apache-arrow" - "binwalk" - "cloc" - "cloudflared" - "cmake" - "coreutils" - "criterion" "daytonaio/tap/daytona" - "diff-so-fancy" - "e2fsprogs" - "fd" - "ffmpeg" - "flyctl" - "fzf" - "gh" - "git-delta" - "git-filter-repo" - "git-lfs" - "gitleaks" - "gnu-time" - "go" - "hashicorp/tap/terraform" - "helm" - "imagemagick" "jnsahaj/lumen/lumen" - "jq" - "k9s" - "kind" - "lazygit" - "libpq" - "librsvg" - "livekit" - "livekit-cli" - "llmfit" - "mactop" - "minikube" - "mint" - "mise" - "neovim" "nicosuave/tap/memex" - "node" - "openjdk" - "pandoc" - "pipx" - "poppler" - "portaudio" - "postgresql@14" - "postgresql@16" "postgresql@17" - "potrace" - "redis" - "resvg" - "ripgrep" - "semgrep" - "sevenzip" - "sox" + "python@3.13" "steipete/tap/bird" - "steipete/tap/gogcli" "steipete/tap/summarize" - "stow" - "stripe/stripe-cli/stripe" - "supabase/tap/supabase" - "swiftformat" - "swiftlint" - "tailscale" - "tmux" - "tree" - "trivy" - "universal-ctags" - "websocat" - "wget" "withgraphite/tap/graphite" "worktrunk" - "yazi" - "yq" - "yt-dlp" - "zoxide" - "zsh-autosuggestions" - "zsh-syntax-highlighting" ]; casks = [ - "aerospace" "anaconda" "codelayer" - "codex" "codexbar" "companion" - "emacs-app" - "font-jetbrains-mono" - "font-symbols-only-nerd-font" - "gcloud-cli" - "ghostty@tip" - "ngrok" - "opencode-desktop" "osaurus" "pants" "riptide-beta" "riptide-dev" "riptide-experimental" "virtualbox" - "warp" ]; }; } diff --git a/modules/packages.nix b/modules/packages.nix new file mode 100644 index 0000000..3cc0ff3 --- /dev/null +++ b/modules/packages.nix @@ -0,0 +1,93 @@ +{ + pkgs, + username, + ... +}: let + berkeleyMono = pkgs.stdenvNoCC.mkDerivation { + pname = "berkeley-mono"; + version = "local"; + src = /. + "/Users/${username}/Library/Fonts/BerkeleyMono-Regular.otf"; + dontUnpack = true; + installPhase = '' + install -Dm644 "$src" "$out/share/fonts/opentype/BerkeleyMono-Regular.otf" + ''; + }; +in { + environment.systemPackages = with pkgs; [ + aerospace + arrow-cpp + binwalk + cloc + cloudflared + cmakeCurses + codex + coreutils-prefixed + criterion + delta + diff-so-fancy + e2fsprogs + emacs + ffmpeg_7 + flyctl + gh + ghostty-bin + git-filter-repo + git-lfs + gitleaks + gogcli + google-cloud-sdk + imagemagickBig + k9s + kind + kubernetes-helm-wrapped + lazygit + libpq + librsvg + livekit + livekit-cli + llmfit + mactop + minikube + mint + mise + ngrok + opencode-desktop + javaPackages.compiler.openjdk25 + p7zip + pandoc + pipx + poppler + portaudio + postgresql_14 + postgresql_16 + potrace + redis + resvg + semgrep + sox + stow + stripe-cli + supabase-cli + swiftformat + swiftlint + tailscale + terraform + time + tmux + trivy + universal-ctags + warp-terminal + websocat + yazi-unwrapped + yq + yt-dlp + zsh-autosuggestions + zsh-syntax-highlighting + ]; + + fonts.packages = with pkgs; [ + berkeleyMono + jetbrains-mono + nerd-fonts.symbols-only + ]; +}