diff options
-rw-r--r-- | CHANGELOG.md | 25 | ||||
-rw-r--r-- | internal/components/homepage.templ | 10 | ||||
-rw-r--r-- | internal/components/page.templ | 7 | ||||
-rw-r--r-- | internal/components/search.templ | 4 | ||||
-rw-r--r-- | internal/index/indexer.go | 8 | ||||
-rw-r--r-- | internal/server/mux.go | 23 | ||||
-rw-r--r-- | nix/package.nix | 2 |
7 files changed, 43 insertions, 36 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 83eb8c5..dc2ec45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,29 @@ # Changelog -## [v0.1.20](https://git.alanpearce.eu/searchix/diff/?id=v0.1.19&id2=2d6315fa9386aaecbc1a7fc6a7ffcceb0ae09c35) (2025-01-24) +## [v0.1.22](https://git.alanpearce.eu/searchix/diff/?id=v0.1.21&id2=05a32bda78911772cb8b09f37bacbcf851a4ddba) (2025-03-10) -### Fixes +### Features + +- default to combined search on root path + ([05a32bd](https://git.alanpearce.eu/searchix/commit/?id=05a32bda78911772cb8b09f37bacbcf851a4ddba)) + +### [v0.1.21](https://git.alanpearce.eu/searchix/diff/?id=v0.1.20&id2=v0.1.21) (2025-03-06) + +#### Features + +- prioritise exact matches on programs/attr/name field + ([6c9a3a9](https://git.alanpearce.eu/searchix/commit/?id=6c9a3a93f0c55f65539230c4c979816df8e77c1b)) +- improve relevance with compound words + ([24e3fc9](https://git.alanpearce.eu/searchix/commit/?id=24e3fc96ce2c96401155b86c6bfb6a6fb2e322f8)) + +#### Fixes + +- re-index refusing to delete data directory with programs.db + ([3ee8248](https://git.alanpearce.eu/searchix/commit/?id=3ee8248656c089594ea8a3be41945c408ab39aa4)) + +### [v0.1.20](https://git.alanpearce.eu/searchix/diff/?id=v0.1.19&id2=v0.1.20) (2025-01-24) + +#### Fixes - build failure (bad rebase) ([2d6315f](https://git.alanpearce.eu/searchix/commit/?id=2d6315fa9386aaecbc1a7fc6a7ffcceb0ae09c35)) diff --git a/internal/components/homepage.templ b/internal/components/homepage.templ deleted file mode 100644 index 1cc2b9e..0000000 --- a/internal/components/homepage.templ +++ /dev/null @@ -1,10 +0,0 @@ -package components - -templ Homepage(tdata TemplateData) { - @Page(tdata) { - <p> - Search Nix Packages and options from NixOS, Darwin and Home-Manager - </p> - <a href="https://git.sr.ht/~alanpearce/searchix">Source code</a> - } -} diff --git a/internal/components/page.templ b/internal/components/page.templ index 127d1ba..edab0f4 100644 --- a/internal/components/page.templ +++ b/internal/components/page.templ @@ -29,7 +29,7 @@ templ Page(tdata TemplateData) { rel="search" type="application/opensearchdescription+xml" title={ "Searchix " + sourceNameAndType(nil) } - href={ string(joinPath("/all", "opensearch.xml")) } + href={ string(joinPath("opensearch.xml")) } /> for _, source := range tdata.Sources { <link @@ -49,9 +49,9 @@ templ Page(tdata TemplateData) { if tdata.SourceResult != nil || tdata.Query != "" { class="current" } - href="/all/search" + href="/" } else { - href={ joinPathQuery("/all/search", tdata.Query) } + href={ joinPathQuery("/", tdata.Query) } } >All</a> for _, source := range tdata.Sources { @@ -71,6 +71,7 @@ templ Page(tdata TemplateData) { </main> <footer> Made by <a href="https://alanpearce.eu">Alan Pearce</a>. + <a href="https://git.sr.ht/~alanpearce/searchix">Source code</a> <a href="https://todo.sr.ht/~alanpearce/searchix">Report issues</a> </footer> </body> diff --git a/internal/components/search.templ b/internal/components/search.templ index 0457ff9..bbcf3f4 100644 --- a/internal/components/search.templ +++ b/internal/components/search.templ @@ -23,6 +23,9 @@ templ Search(tdata TemplateData, r ResultData) { templ SearchPage(tdata TemplateData, r ResultData) { @Page(tdata) { + <p> + Search Nix packages and options from NixOS, Darwin and Home-Manager + </p> @script(tdata.Assets.ByPath["/static/search.js"]) @Search(tdata, r) <section id="results" role="list" aria-label="search results"> @@ -36,5 +39,6 @@ templ SearchPage(tdata TemplateData, r ResultData) { Everything should work fine without JavaScript. If that is not the case, <a href="https://todo.sr.ht/~alanpearce/searchix">report an issue</a> </p> </noscript> + <a href="https://git.sr.ht/~alanpearce/searchix">Source code</a> } } diff --git a/internal/index/indexer.go b/internal/index/indexer.go index b74c155..6a1dcf0 100644 --- a/internal/index/indexer.go +++ b/internal/index/indexer.go @@ -58,7 +58,7 @@ func createIndexMapping() (mapping.IndexMapping, error) { descriptionFieldMapping.Analyzer = web.Name var err error - err = indexMapping.AddCustomAnalyzer("loc", map[string]interface{}{ + err = indexMapping.AddCustomAnalyzer("loc", map[string]any{ "type": keyword.Name, "tokenizer": letter.Name, "token_filters": []string{ @@ -69,7 +69,7 @@ func createIndexMapping() (mapping.IndexMapping, error) { if err != nil { return nil, errors.WithMessage(err, "could not add custom analyser") } - err = indexMapping.AddCustomAnalyzer("keyword_single", map[string]interface{}{ + err = indexMapping.AddCustomAnalyzer("keyword_single", map[string]any{ "type": keyword.Name, "tokenizer": letter.Name, }) @@ -129,9 +129,9 @@ func createIndex(indexPath string, options *Options) (bleve.Index, error) { if err != nil { return nil, err } - kvconfig := make(map[string]interface{}) + kvconfig := make(map[string]any) if options.LowMemory { - kvconfig = map[string]interface{}{ + kvconfig = map[string]any{ "PersisterNapTimeMSec": 1000, "PersisterNapUnderNumFiles": 500, } diff --git a/internal/server/mux.go b/internal/server/mux.go index 9dbcc86..9c69a7e 100644 --- a/internal/server/mux.go +++ b/internal/server/mux.go @@ -71,18 +71,6 @@ func NewMux( top := http.NewServeMux() mux := sentryhttp.NewServeMux() - mux.HandleFunc("/{$}", func(w http.ResponseWriter, r *http.Request) { - indexData := components.TemplateData{ - ExtraHeadHTML: cfg.Web.ExtraHeadHTML, - Sources: sources, - Assets: frontend.Assets, - } - w.Header().Add("Cache-Control", "max-age=86400") - err := components.Homepage(indexData).Render(r.Context(), w) - if err != nil { - errorHandler(w, r, err.Error(), http.StatusInternalServerError) - } - }) const searchTimeout = 1 * time.Second createSearchHandler := func(importerType config.ImporterType) func(http.ResponseWriter, *http.Request) { @@ -213,10 +201,12 @@ func NewMux( } } - mux.HandleFunc("/all/search", createSearchHandler(config.All)) + mux.HandleFunc("/{$}", createSearchHandler(config.All)) mux.HandleFunc("/options/{source}/search", createSearchHandler(config.Options)) mux.HandleFunc("/packages/{source}/search", createSearchHandler(config.Packages)) + mux.Handle("/all/search", http.RedirectHandler("/", http.StatusFound)) + createSourceIDHandler := func(importerType config.ImporterType) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { source := cfg.Importer.Sources[r.PathValue("source")] @@ -317,18 +307,19 @@ func NewMux( mux.HandleFunc("/options/{source}/opensearch.xml", createOpenSearchXMLHandler(config.Options)) mux.HandleFunc("/packages/{source}/opensearch.xml", createOpenSearchXMLHandler(config.Packages)) - mux.HandleFunc("/all/opensearch.xml", func(w http.ResponseWriter, _ *http.Request) { + mux.Handle("/all/opensearch.xml", http.RedirectHandler("/opensearch.xml", http.StatusFound)) + mux.HandleFunc("/opensearch.xml", func(w http.ResponseWriter, _ *http.Request) { w.Header().Add("Cache-Control", "max-age=604800") w.Header().Set("Content-Type", "application/opensearchdescription+xml") osd := &opensearch.Description{ ShortName: "Searchix Combined", LongName: "Search nix options and packages with Searchix", Description: "Search nix options and packages with Searchix", - SearchForm: cfg.Web.BaseURL.JoinPath("all/search"), + SearchForm: cfg.Web.BaseURL.JoinPath(), URL: opensearch.URL{ Method: "get", Type: "text/html", - Template: cfg.Web.BaseURL.JoinPath("all/search"). + Template: cfg.Web.BaseURL.JoinPath(). AddRawQuery("query", "{searchTerms}"), }, } diff --git a/nix/package.nix b/nix/package.nix index 1e9584f..4f65f31 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -13,7 +13,7 @@ , css }: let - version = "0.1.20"; + version = "0.1.22"; in buildGoApplication { pname = "searchix"; |