mirror of
https://github.com/lunchcat/sif.git
synced 2026-07-28 14:37:01 -07:00
modules loaded only from an exe-adjacent modules/ dir or ~/.config, so a bare `go install`ed binary shipped zero modules. embed the modules/ tree and fall back to it when no filesystem builtin dir is found. the on-disk builtin dir and the user-override dir still take precedence, so a dev tree and a release that ships the folder alongside the binary keep working unchanged. the embed directive lives at the repo root because go:embed cannot reach a parent directory, and it registers the filesystem with the loader through a package hook to avoid an import cycle back into the root package.
41 lines
1.8 KiB
Go
41 lines
1.8 KiB
Go
/*
|
|
·━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━·
|
|
: :
|
|
: █▀ █ █▀▀ · Blazing-fast pentesting suite :
|
|
: ▄█ █ █▀ · BSD 3-Clause License :
|
|
: :
|
|
: (c) 2022-2026 vmfunc, xyzeva, :
|
|
: lunchcat alumni & contributors :
|
|
: :
|
|
·━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━·
|
|
*/
|
|
|
|
package sif
|
|
|
|
import (
|
|
"embed"
|
|
"io/fs"
|
|
|
|
"github.com/charmbracelet/log"
|
|
"github.com/vmfunc/sif/internal/modules"
|
|
)
|
|
|
|
// builtinModules embeds the module tree into the binary. this file lives at the
|
|
// repo root because go:embed cannot reference a parent directory, and modules/
|
|
// sits above internal/modules where the loader lives.
|
|
//
|
|
//go:embed modules
|
|
var builtinModules embed.FS
|
|
|
|
// register the embedded modules with the loader once, rooted at the modules
|
|
// directory so paths match the on-disk layout. the loader only uses this as a
|
|
// fallback when no filesystem modules/ dir is present.
|
|
func init() {
|
|
sub, err := fs.Sub(builtinModules, "modules")
|
|
if err != nil {
|
|
log.Debugf("embedded modules unavailable: %v", err)
|
|
return
|
|
}
|
|
modules.SetBuiltinFS(sub)
|
|
}
|