about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md25
-rw-r--r--internal/components/homepage.templ10
-rw-r--r--internal/components/page.templ7
-rw-r--r--internal/components/search.templ4
-rw-r--r--internal/index/indexer.go8
-rw-r--r--internal/server/mux.go23
-rw-r--r--nix/package.nix2
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";