1diff --git a/main.go b/main.go
2index cfc56c4e483d0a58972fda410b6a563f45629d71..3488c325f99c78bb095d7c5967f73eb84ab365a4 100644
3--- a/main.go
4+++ b/main.go
5@@ -30,6 +30,7 @@
6 func main() {
7 url := flag.String("url", "", "Url to the APKINDEX.tar.gz")
8 output := flag.String("output", "index.md", "Output path")
9+ repositoryFormat := flag.String("repository-format", "https://git.sr.ht/~gabrielgio/apkbuilds/tree/%s/item/apks/%s", "Template to build repository link")
10 flag.Parse()
11
12 tarStream, err := fechIndex(*url)
13@@ -78,5 +79,5 @@ if err != nil {
14 panic("Error opening output file: " + err.Error())
15 }
16
17- templates.WriteMarkdownTemplate(file, entries)
18+ templates.WriteMarkdownTemplate(file, entries, *repositoryFormat)
19 }
20diff --git a/templates/index.md.qtpl b/templates/index.md.qtpl
21index 80439c9e5c70751d1b235eaf715e0bbe174ed4b7..434d64090a55531cb34b070cdc1cf88ee15d3d63 100644
22--- a/templates/index.md.qtpl
23+++ b/templates/index.md.qtpl
24@@ -1,13 +1,19 @@
25+{% import "fmt" %}
26+{% import "strings" %}
27 {% import "git.sr.ht/~gabrielgio/apkdoc/parser" %}
28-{% import "strings" %}
29
30 {% code
31 func reduce(lines []string) string {
32 return strings.Join(lines, " ")
33 }
34+
35+func formatLink(e *parser.Entry, format string) string {
36+ c := strings.Replace(*e.Commit, "-dirty", "", -1)
37+ return fmt.Sprintf(format, c, *e.Origin)
38+}
39 %}
40
41-{% func MarkdownTemplate(entries []*parser.Entry) %}
42+{% func MarkdownTemplate(entries []*parser.Entry, format string) %}
43 # Apks Alpine 3.18
44 {% for _, e := range entries %}
45 ## {%s e.Name %}
46@@ -23,7 +29,7 @@ - **Url**: {%s e.Url%}
47 - **License**: {%s e.License%}{% if e.Origin != nil %}
48 - **Origin**: {%s *e.Origin%}{% endif %}{% if e.BuildTime != nil %}
49 - **Build time**: {%s e.BuildTime.String() %}{% endif %}{% if e.Commit != nil %}
50-- **Commit**: {%s *e.Commit %}{% endif %}{% if e.ProviderPriority != nil %}
51+- **Commit**: [{%s *e.Commit %}]({%s formatLink(e, format) %}){% endif %}{% if e.ProviderPriority != nil %}
52 - **Provider Priority**: {%d *e.ProviderPriority %}{% endif %}{% if len(e.Dependencies) > 0 %}
53 - **Dependencies:**: {%s reduce(e.Dependencies) %}{% endif %}{% if len(e.Provides) > 0 %}
54 - **Provides:**: {%s reduce(e.Provides) %}{% endif %}{% if len(e.InstallIf) > 0 %}
55diff --git a/templates/index.md.qtpl.go b/templates/index.md.qtpl.go
56index 9229465a9bb2b0115995bfafbc91bc65d91e486f..c87d94794faa3dcbd9a9b07647af67a631cc8b34 100644
57--- a/templates/index.md.qtpl.go
58+++ b/templates/index.md.qtpl.go
59@@ -5,193 +5,207 @@ //line index.md.qtpl:1
60 package templates
61
62 //line index.md.qtpl:1
63-import "git.sr.ht/~gabrielgio/apkdoc/parser"
64+import "fmt"
65
66 //line index.md.qtpl:2
67 import "strings"
68
69-//line index.md.qtpl:4
70+//line index.md.qtpl:3
71+import "git.sr.ht/~gabrielgio/apkdoc/parser"
72+
73+//line index.md.qtpl:5
74 import (
75 qtio422016 "io"
76
77 qt422016 "github.com/valyala/quicktemplate"
78 )
79
80-//line index.md.qtpl:4
81+//line index.md.qtpl:5
82 var (
83 _ = qtio422016.Copy
84 _ = qt422016.AcquireByteBuffer
85 )
86
87-//line index.md.qtpl:5
88+//line index.md.qtpl:6
89 func reduce(lines []string) string {
90 return strings.Join(lines, " ")
91 }
92
93-//line index.md.qtpl:10
94-func StreamMarkdownTemplate(qw422016 *qt422016.Writer, entries []*parser.Entry) {
95-//line index.md.qtpl:10
96+func formatLink(e *parser.Entry, format string) string {
97+ c := strings.Replace(*e.Commit, "-dirty", "", -1)
98+ return fmt.Sprintf(format, c, *e.Origin)
99+}
100+
101+//line index.md.qtpl:16
102+func StreamMarkdownTemplate(qw422016 *qt422016.Writer, entries []*parser.Entry, format string) {
103+//line index.md.qtpl:16
104 qw422016.N().S(`
105 # Apks Alpine 3.18
106 `)
107-//line index.md.qtpl:12
108+//line index.md.qtpl:18
109 for _, e := range entries {
110-//line index.md.qtpl:12
111+//line index.md.qtpl:18
112 qw422016.N().S(`
113 ## `)
114-//line index.md.qtpl:13
115+//line index.md.qtpl:19
116 qw422016.E().S(e.Name)
117-//line index.md.qtpl:13
118+//line index.md.qtpl:19
119 qw422016.N().S(`
120
121 - **Version**: `)
122-//line index.md.qtpl:15
123+//line index.md.qtpl:21
124 qw422016.E().S(e.Version)
125-//line index.md.qtpl:15
126+//line index.md.qtpl:21
127 qw422016.N().S(`
128 - **Description**: `)
129-//line index.md.qtpl:16
130+//line index.md.qtpl:22
131 qw422016.E().S(e.Description)
132-//line index.md.qtpl:16
133+//line index.md.qtpl:22
134 if e.Maintainer != nil {
135-//line index.md.qtpl:16
136+//line index.md.qtpl:22
137 qw422016.N().S(`
138 - **Maintainer**: `)
139-//line index.md.qtpl:17
140+//line index.md.qtpl:23
141 qw422016.E().S(*e.Maintainer)
142-//line index.md.qtpl:17
143+//line index.md.qtpl:23
144 }
145-//line index.md.qtpl:17
146+//line index.md.qtpl:23
147 qw422016.N().S(`
148 - **Checksum**:`)
149-//line index.md.qtpl:18
150+//line index.md.qtpl:24
151 qw422016.E().S(e.Checksum)
152-//line index.md.qtpl:18
153+//line index.md.qtpl:24
154 if e.Architecture != nil {
155-//line index.md.qtpl:18
156+//line index.md.qtpl:24
157 qw422016.N().S(`
158 - **Architecture**: `)
159-//line index.md.qtpl:19
160+//line index.md.qtpl:25
161 qw422016.E().S(*e.Architecture)
162-//line index.md.qtpl:19
163+//line index.md.qtpl:25
164 }
165-//line index.md.qtpl:19
166+//line index.md.qtpl:25
167 qw422016.N().S(`
168 - **Size**: `)
169-//line index.md.qtpl:20
170+//line index.md.qtpl:26
171 qw422016.N().D(e.PackageSize)
172-//line index.md.qtpl:20
173+//line index.md.qtpl:26
174 qw422016.N().S(`B
175 - **Installed size**: `)
176-//line index.md.qtpl:21
177+//line index.md.qtpl:27
178 qw422016.N().D(e.InstalledSize)
179-//line index.md.qtpl:21
180+//line index.md.qtpl:27
181 qw422016.N().S(`
182 - **Url**: `)
183-//line index.md.qtpl:22
184+//line index.md.qtpl:28
185 qw422016.E().S(e.Url)
186-//line index.md.qtpl:22
187+//line index.md.qtpl:28
188 qw422016.N().S(`
189 - **License**: `)
190-//line index.md.qtpl:23
191+//line index.md.qtpl:29
192 qw422016.E().S(e.License)
193-//line index.md.qtpl:23
194+//line index.md.qtpl:29
195 if e.Origin != nil {
196-//line index.md.qtpl:23
197+//line index.md.qtpl:29
198 qw422016.N().S(`
199 - **Origin**: `)
200-//line index.md.qtpl:24
201+//line index.md.qtpl:30
202 qw422016.E().S(*e.Origin)
203-//line index.md.qtpl:24
204+//line index.md.qtpl:30
205 }
206-//line index.md.qtpl:24
207+//line index.md.qtpl:30
208 if e.BuildTime != nil {
209-//line index.md.qtpl:24
210+//line index.md.qtpl:30
211 qw422016.N().S(`
212 - **Build time**: `)
213-//line index.md.qtpl:25
214+//line index.md.qtpl:31
215 qw422016.E().S(e.BuildTime.String())
216-//line index.md.qtpl:25
217+//line index.md.qtpl:31
218 }
219-//line index.md.qtpl:25
220+//line index.md.qtpl:31
221 if e.Commit != nil {
222-//line index.md.qtpl:25
223+//line index.md.qtpl:31
224 qw422016.N().S(`
225-- **Commit**: `)
226-//line index.md.qtpl:26
227+- **Commit**: [`)
228+//line index.md.qtpl:32
229 qw422016.E().S(*e.Commit)
230-//line index.md.qtpl:26
231+//line index.md.qtpl:32
232+ qw422016.N().S(`](`)
233+//line index.md.qtpl:32
234+ qw422016.E().S(formatLink(e, format))
235+//line index.md.qtpl:32
236+ qw422016.N().S(`)`)
237+//line index.md.qtpl:32
238 }
239-//line index.md.qtpl:26
240+//line index.md.qtpl:32
241 if e.ProviderPriority != nil {
242-//line index.md.qtpl:26
243+//line index.md.qtpl:32
244 qw422016.N().S(`
245 - **Provider Priority**: `)
246-//line index.md.qtpl:27
247+//line index.md.qtpl:33
248 qw422016.N().D(*e.ProviderPriority)
249-//line index.md.qtpl:27
250+//line index.md.qtpl:33
251 }
252-//line index.md.qtpl:27
253+//line index.md.qtpl:33
254 if len(e.Dependencies) > 0 {
255-//line index.md.qtpl:27
256+//line index.md.qtpl:33
257 qw422016.N().S(`
258 - **Dependencies:**: `)
259-//line index.md.qtpl:28
260+//line index.md.qtpl:34
261 qw422016.E().S(reduce(e.Dependencies))
262-//line index.md.qtpl:28
263+//line index.md.qtpl:34
264 }
265-//line index.md.qtpl:28
266+//line index.md.qtpl:34
267 if len(e.Provides) > 0 {
268-//line index.md.qtpl:28
269+//line index.md.qtpl:34
270 qw422016.N().S(`
271 - **Provides:**: `)
272-//line index.md.qtpl:29
273+//line index.md.qtpl:35
274 qw422016.E().S(reduce(e.Provides))
275-//line index.md.qtpl:29
276+//line index.md.qtpl:35
277 }
278-//line index.md.qtpl:29
279+//line index.md.qtpl:35
280 if len(e.InstallIf) > 0 {
281-//line index.md.qtpl:29
282+//line index.md.qtpl:35
283 qw422016.N().S(`
284 - **Install if:**: `)
285-//line index.md.qtpl:30
286+//line index.md.qtpl:36
287 qw422016.E().S(reduce(e.InstallIf))
288-//line index.md.qtpl:30
289+//line index.md.qtpl:36
290 }
291-//line index.md.qtpl:30
292+//line index.md.qtpl:36
293 qw422016.N().S(`
294 `)
295-//line index.md.qtpl:31
296+//line index.md.qtpl:37
297 }
298-//line index.md.qtpl:31
299+//line index.md.qtpl:37
300 qw422016.N().S(`
301
302 `)
303-//line index.md.qtpl:33
304+//line index.md.qtpl:39
305 }
306
307-//line index.md.qtpl:33
308-func WriteMarkdownTemplate(qq422016 qtio422016.Writer, entries []*parser.Entry) {
309-//line index.md.qtpl:33
310+//line index.md.qtpl:39
311+func WriteMarkdownTemplate(qq422016 qtio422016.Writer, entries []*parser.Entry, format string) {
312+//line index.md.qtpl:39
313 qw422016 := qt422016.AcquireWriter(qq422016)
314-//line index.md.qtpl:33
315- StreamMarkdownTemplate(qw422016, entries)
316-//line index.md.qtpl:33
317+//line index.md.qtpl:39
318+ StreamMarkdownTemplate(qw422016, entries, format)
319+//line index.md.qtpl:39
320 qt422016.ReleaseWriter(qw422016)
321-//line index.md.qtpl:33
322+//line index.md.qtpl:39
323 }
324
325-//line index.md.qtpl:33
326-func MarkdownTemplate(entries []*parser.Entry) string {
327-//line index.md.qtpl:33
328+//line index.md.qtpl:39
329+func MarkdownTemplate(entries []*parser.Entry, format string) string {
330+//line index.md.qtpl:39
331 qb422016 := qt422016.AcquireByteBuffer()
332-//line index.md.qtpl:33
333- WriteMarkdownTemplate(qb422016, entries)
334-//line index.md.qtpl:33
335+//line index.md.qtpl:39
336+ WriteMarkdownTemplate(qb422016, entries, format)
337+//line index.md.qtpl:39
338 qs422016 := string(qb422016.B)
339-//line index.md.qtpl:33
340+//line index.md.qtpl:39
341 qt422016.ReleaseByteBuffer(qb422016)
342-//line index.md.qtpl:33
343+//line index.md.qtpl:39
344 return qs422016
345-//line index.md.qtpl:33
346+//line index.md.qtpl:39
347 }