1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  | 
diff --git a/internal/html/repo_file.go b/internal/html/repo_file.go
index 6dd3cb13080a68e45577f5b11ef5ae2f27836dd4..981121c907f7f14da2dc9c20dba1b5eba9bb1f94 100644
--- a/internal/html/repo_file.go
+++ b/internal/html/repo_file.go
@@ -2,6 +2,7 @@ package html
 
 import (
 	_ "embed"
+	"fmt"
 
 	. "maragu.dev/gomponents"
 	. "maragu.dev/gomponents/html"
@@ -11,19 +12,24 @@ type RepoFileContext struct {
 	BaseContext
 	RepoHeaderComponentContext
 	RepoBreadcrumbComponentContext
-	Code string
+	Code   string
+	Commit string
+	Path   string
 }
 
 //go:embed repo_file.js
 var repoFileJS string
 
 func RepoFileTemplate(rfc RepoFileContext) Node {
+	permalink := fmt.Sprintf("/%s/tree/%s/%s", rfc.RepoBreadcrumbComponentContext.Repo, rfc.Commit, rfc.Path)
 	return base(rfc.BaseContext, []Node{
 		repoHeaderComponent(rfc.RepoHeaderComponentContext),
 		Div(Class("mt-2 text-text"),
 			repoBreadcrumbComponent(rfc.RepoBreadcrumbComponentContext),
 			Text(" - "),
 			A(Class("text-text underline decoration-text/50 decoration-dashed hover:decoration-solid"), Href("?raw"), Text("raw")),
+			Text(" - "),
+			A(Class("text-text underline decoration-text/50 decoration-dashed hover:decoration-solid"), ID("permalink"), Data("permalink", permalink), Href(permalink), Text("permalink")),
 			Div(Class("code relative"),
 				Raw(rfc.Code),
 				Button(ID("copy"), Class("absolute top-0 right-0 rounded bg-base hover:bg-surface0")),
  |