{"id":50750459,"url":"https://github.com/dracondev/folder-auto-banner","last_synced_at":"2026-06-15T03:01:04.468Z","repository":{"id":362715477,"uuid":"1248539616","full_name":"DraconDev/folder-auto-banner","owner":"DraconDev","description":"Folder Auto Banner — A directory listing with instant context","archived":false,"fork":false,"pushed_at":"2026-06-11T00:47:07.000Z","size":14884,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-11T01:21:10.942Z","etag":null,"topics":["cli","developer-tools","file-manager","productivity","rust","shell","terminal"],"latest_commit_sha":null,"homepage":"https://dracon.uk","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DraconDev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":"AUDIT-DAEMON.md","citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["DraconDev"]}},"created_at":"2026-05-24T19:20:20.000Z","updated_at":"2026-06-11T00:47:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/DraconDev/folder-auto-banner","commit_stats":null,"previous_names":["dracondev/folder-auto-banner"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/DraconDev/folder-auto-banner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DraconDev%2Ffolder-auto-banner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DraconDev%2Ffolder-auto-banner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DraconDev%2Ffolder-auto-banner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DraconDev%2Ffolder-auto-banner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DraconDev","download_url":"https://codeload.github.com/DraconDev/folder-auto-banner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DraconDev%2Ffolder-auto-banner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34345578,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","developer-tools","file-manager","productivity","rust","shell","terminal"],"created_at":"2026-06-11T01:00:51.897Z","updated_at":"2026-06-15T03:01:04.460Z","avatar_url":"https://github.com/DraconDev.png","language":"HTML","funding_links":["https://github.com/sponsors/DraconDev"],"categories":[],"sub_categories":[],"readme":"# f — Folder Auto Banner\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"public/fab_thumb.png\" alt=\"f — Folder Auto Banner\" width=\"800\"\u003e\n\u003c/p\u003e\n\nA contextual directory dashboard that combines a file listing with project signals such as git status, TODOs, code metrics, build status, ports, Docker state, and cached directory sizes.\n\nRepeated views are served from the background daemon. The first cold view of a very large directory returns quickly and may show temporary `4.0k` placeholders while directory sizes refresh in the background; subsequent warm views use populated cached sizes.\n\n## What It Does\n\nWhen you run `f`, you see:\n- File listing (like `ls`/`exa`/`lsd`)\n- Git status, last commit, commits today, branches\n- Build status with duration\n- TODO count\n- Languages breakdown\n- Ports in use\n- Docker status\n- Cached test results\n\n**Fast context without extra commands.**\n\n## vs lsd / eza\n\nfab is **not a drop-in `ls` replacement** — it's a **contextual directory dashboard**. While lsd and eza focus on making `ls` pretty, f adds **project context** (git, TODOs, ports, docker, build status, code metrics) and **daemon caching** for instant repeated access.\n\n| Feature | f | lsd | eza |\n|---------|-----|-----|-----|\n| Pretty listing | ✅ | ✅ | ✅ |\n| Icons | ✅ | ✅ | ✅ |\n| Tree view | ✅ | ✅ | ✅ |\n| **Git status** | ✅ (rich) | ✅ | ✅ |\n| **Context banner** | ✅ | ❌ | ❌ |\n| **Daemon caching** | ✅ | ❌ | ❌ |\n| **TODO count** | ✅ | ❌ | ❌ |\n| **Port detection** | ✅ | ❌ | ❌ |\n| **Build status** | ✅ | ❌ | ❌ |\n| **Language breakdown** | ✅ | ❌ | ❌ |\n| Long format (`-l`) | ✅ (default) | ✅ | ✅ |\n| Recursive (`-R`) | ✅ | ✅ | ✅ |\n\nSee [COMPETITORS.md](COMPETITORS.md) for the full comparison.\n\n## Quick Start\n\n```bash\n# Build + install everything (binary, shell function, daemon, auto-banner hook)\n./install.sh\nexec zsh   # or: source ~/.bashrc\n```\n\nThis sets up:\n- The `f` binary in `~/.local/bin/`\n- The shell function (enables `f N` → `cd` navigation)\n- The auto-banner hook (shows a banner on every `cd`)\n- The background daemon\n\nIf you only need the shell function (e.g., after a manual build):\n\n```bash\nf install\nexec zsh   # or: source ~/.bashrc\n```\n\n## Usage\n\n```bash\nf                    # Directory listing + context\nf \u003cdir\u003e              # Listing for specific dir\nf -S                 # Sort by size\nf -t                 # Sort by time\nf -X                 # Sort by extension\nf -G                 # Sort by git status\nf --versionsort      # Natural sort (file1, file2, file10)\nf -a                 # Show dotfiles\nf --tree             # Tree view\nf --json             # JSON output\nf -R, --recursive    # Recurse into subdirectories\nf --filter rs        # Filter by pattern\nf install            # Install shell function for f N → cd\nf config             # Open config file\nf daemon restart   # Restart daemon\nf daemon status    # Check daemon status\nf daemon stop      # Stop daemon\nf install          # Install shell function for f N → cd\nf config           # Open config file\n```\n\n## Shell Function (`f install`)\n\nThe `f install` subcommand writes shell wrappers that enable `f N` → `cd` navigation:\n\n- Writes `~/.local/bin/fab-shell.zsh` and `~/.local/bin/fab-shell.bash`\n- Adds source lines to `~/.zshrc` and/or `~/.bashrc`\n- Is idempotent — safe to run multiple times\n\nThis is called automatically by `./install.sh`. You can also run it standalone:\n\n```bash\nf install              # Install shell wrappers\nf install --debug      # Install with debug output\n```\n\nStart a new shell, or activate the wrappers immediately:\n\n```bash\nsource ~/.local/bin/fab-shell.zsh   # for zsh\nsource ~/.local/bin/fab-shell.bash  # for bash\n```\n\nThe shell wrapper is the source of truth for `f N` navigation. It calls the installed `f` binary; the checked-in `fab-shell.zsh` and `fab-shell.bash` files are generated from the compiled-in `src/shell_wrapper.rs` constants.\n\n## Numbered Navigation\n\nWhen `numbered = true` in config (or enabled by default), each item gets a number:\n\n```\n[ 1] 📁 .github\n[ 2] 📁 src\n[ 3] 📄 README.md\n```\n\nNavigate with `f N`:\n\n```bash\nf 2          # cd into item 2 (if directory)\nf 3          # open item 3 in editor (if file)\nf 3 cat      # open item 3 with `cat`\nf 3 krita    # open item 3 with krita\nf 3 -e       # force open in editor\nf 3 -x       # force run the file directly\n```\n\n\u003e **Note:** `f N` requires the shell wrappers installed by `./install.sh` or `f install`. To activate them in your current terminal without restarting your shell:\n\u003e\n\u003e ```bash\n\u003e source ~/.local/bin/fab-shell.zsh   # for zsh\n\u003e source ~/.local/bin/fab-shell.bash  # for bash\n\u003e ```\n\n## CLI Flags (Actions)\n\n### Lazy Flags\n\nSingle-character flags can be used without the leading dash.\n**No fallback**: `f t` always means `-t` (sort by time). To show a\nbanner for a file or directory named `t`, use `./t` or an absolute\npath.\n\n**Chained**: flags can also be chained. `f trc` is equivalent to\n`f -t -r -c` (time + reverse + compact). Every character in the\narg must be a valid lazy flag.\n\n| Lazy | Equivalent | Description |\n|------|------------|-------------|\n| `f t` | `f -t` | Sort by time modified |\n| `f S` | `f -S` | Sort by size |\n| `f X` | `f -X` | Sort by extension |\n| `f G` | `f -G` | Sort by git status |\n| `f r` | `f -r` | Reverse sort |\n| `f a` | `f -a` | Show hidden files |\n| `f c` | `f -c` | Compact output |\n| `f v` | `f -v` | Verbose output |\n| `f R` | `f -R` | Recurse into subdirectories |\n| `f D` | `f -D` | List only directories |\n| `f o` | `f -o` | One file per line |\n| `f m` | `f -m` | Maximum items |\n| `f L` | `f -L` | Limit recursion depth |\n| `f f` | `f -f` | Filter by pattern |\n| `f U` | `f -U` | No sort |\n| `f e` | `f -e` | Force open in editor |\n| `f x` | `f -x` | Force run file |\n| `f trc` | `f -t -r -c` | Chained: time + reverse + compact |\n| `f tS` | `f -t -S` | Chained: time + size |\n| `f mL 10 2` | `f -m 10 -L 2` | Chained: max=10 + level=2 |\n| `f tSm 10` | `f -t -S -m 10` | Chained: time + size + max=10 |\n| `f mLf 10 2 txt` | `f -m 10 -L 2 -f txt` | Chained: max=10 + level=2 + filter=txt |\n\n**Precedence**: numbers (`f 1` → navigate to item 1) take\nprecedence over lazy flags, so `f 1` navigates rather than\nenabling oneline mode. (Oneline uses `f o` / `f -o`.)\n\n**Paths**: bare words without `.`, `/`, or `~` are always\nlazy-flag chains. To show a banner for a file or directory,\nuse `./path`, `/abs/path`, or `~/path` (explicit path indicators).\n\n### Sorting\n| Flag | Description |\n|------|-------------|\n| `--sort name\\|size\\|date\\|type\\|git\\|extension\\|version` | Sort by field |\n| `-t`, `--timesort` | Sort by time modified |\n| `-S`, `--sizesort` | Sort by size |\n| `-X`, `--extensionsort` | Sort by extension |\n| `-G`, `--gitsort` | Sort by git status |\n| `--versionsort` | Natural sort (version numbers) |\n| `--no-sort` | No sort, directory order |\n| `--reverse` | Reverse sort |\n| `--group-dirs first\\|last` | Group directories |\n\n### Display\n| Flag | Description |\n|------|-------------|\n| `-a`, `--hidden` | Show dotfiles |\n| `--tree [depth]` | Tree view (0 = unlimited) |\n| `--group` | Group by type (dirs, files, symlinks) |\n| `--filter \u003cpattern\u003e` | Filter by name |\n| `--max \u003cN\u003e` | Limit items |\n| `--compact` | Less info |\n| `-R`, `--recursive` | Recurse into subdirectories |\n| `--verbose` | More info |\n\n### Output\n| Flag | Description |\n|------|-------------|\n| `--json` | JSON output |\n| `--raw` | Plain text output |\n\n## Config File\n\nLocation: `~/.config/fab/config.toml`\n\nOpen with: `f config`\n\n### Display Settings\n```toml\n[display]\npermission = \"rwx\"        # rwx, octal, disable\nsize = \"default\"          # default, short, bytes\ndate = \"date\"             # date, relative\nclassify = true           # append */=\u003e@|\nno_symlink = false\ntotal_size = true\n```\n\n### Column Selection\n```toml\n[columns]\nshow = [\"permission\", \"owner\", \"group\", \"size\", \"date\", \"name\"]\nhide = [\"inode\", \"links\"]\n```\n\n### Feature Toggles\n```toml\n[features]\ngit_status = true\nbuild_status = true\ntodo_count = true\nlanguages = true\nports = true\ndocker = true\n```\n\n### Navigation\n```toml\n[features]\nnumbered = true          # Show item numbers for f N navigation\nopen_command = \"micro\"   # Default editor for f N (overridden by $EDITOR)\n```\n\n### Sorting\n```toml\n[sort]\ndefault = \"name\"\nreverse = false\ngroup_dirs = \"first\"\n```\n\n### Recency Gradient\n```toml\n[display]\n# Color rows based on recency: same hues, dimmer for older files\n# Bright new, dim old — at-a-glance scan of what changed recently\ncolor_scale = \"all\"          # \"all\", \"age\", \"size\", or \"\" to disable\ncolor_scale_mode = \"gradient\" # \"gradient\" (default) or \"fixed\"\n```\n\nTiers: \u003c1h = bold, \u003c1d = normal, \u003c1w = faded gray, \u003c1m = dim, \u003e1m = very dim.\nRecent files pop out; old files recede into the background.\n\n## Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `FAB_NO_TODOS` | Set to `1` to disable TODO scanning |\n| `FAB_NO_PORTS` | Set to `1` to disable port detection |\n| `FAB_NO_DOCKER` | Set to `1` to disable Docker detection |\n| `FAB_NO_METRICS` | Set to `1` to disable code metrics |\n| `NO_COLOR` | Disable colors (per spec) |\n| `EDITOR` | Editor for `f config` (default: vi) |\n\n## Testing\n\n```bash\ncargo test    # full test suite\ncargo clippy --all-targets --all-features -- -D warnings\n```\n\n## License\n\nMIT\n# test 1781471758\n# live parallel test 1781472248\n# live parallel test 1781472742\n# live parallel test 1781473042\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdracondev%2Ffolder-auto-banner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdracondev%2Ffolder-auto-banner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdracondev%2Ffolder-auto-banner/lists"}