aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2024-10-05 16:47:32 +0200
committerGabriel A. Giovanini <mail@gabrielgio.me>2024-10-05 16:47:32 +0200
commitada6a68b4f25c912705542a6b03aae7ffffb5e99 (patch)
tree63ffb7d4c2f6c8ce194f90f6b3568b9c08286bf9
parent78af329f2c7bc1739bcd36baf45ab95aaff43434 (diff)
downloadcerrado-ada6a68b4f25c912705542a6b03aae7ffffb5e99.tar.gz
cerrado-ada6a68b4f25c912705542a6b03aae7ffffb5e99.tar.bz2
cerrado-ada6a68b4f25c912705542a6b03aae7ffffb5e99.zip
feat: Make syntax highlight configurable
Now cerrado has configurable theme through "syntax-highlight".
-rw-r--r--config.example.scfg1
-rw-r--r--main.go16
-rw-r--r--pkg/config/config.go50
-rw-r--r--pkg/config/config_test.go9
-rw-r--r--pkg/handler/git/handler.go10
5 files changed, 58 insertions, 28 deletions
diff --git a/config.example.scfg b/config.example.scfg
index f29e3ca..0c27591 100644
--- a/config.example.scfg
+++ b/config.example.scfg
@@ -5,6 +5,7 @@ listen-addr unix://var/run/cerrado.sock
root-readme /srv/git/README.md
passphrase $2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq
aes-key 8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w==
+syntax-highlight monokailight
scan /srv/git/ {
public true
diff --git a/main.go b/main.go
index 8bf5141..918b794 100644
--- a/main.go
+++ b/main.go
@@ -11,6 +11,7 @@ import (
"os/signal"
"time"
+ "github.com/alecthomas/chroma/v2/styles"
"golang.org/x/crypto/bcrypt"
"git.gabrielgio.me/cerrado/pkg/config"
@@ -71,9 +72,7 @@ func key() error {
}
func run(ctx context.Context) error {
- var (
- configPath = flag.String("config", "/etc/cerrado.scfg", "File path for the configuration file")
- )
+ configPath := flag.String("config", "/etc/cerrado.scfg", "File path for the configuration file")
flag.Parse()
@@ -83,6 +82,17 @@ func run(ctx context.Context) error {
return err
}
+ // checking chroma configurationo
+
+ if _, ok := styles.Registry[configRepo.GetSyntaxHighlight()]; !ok {
+ slog.Warn(
+ "Invalid Syntax highlight selected",
+ "invalid-style", configRepo.GetSyntaxHighlight(),
+ "using", "monokailight",
+ )
+ styles.Fallback = styles.Registry["monokailight"]
+ }
+
// services
gitService := service.NewGitService(configRepo)
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 902ff0d..812a06e 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -30,12 +30,13 @@ type (
// configuration represents file configuration.
// fields needs to be exported to cmp to work
configuration struct {
- Scan *scan
- RootReadme string
- ListenAddr string
- Passphrase string
- AESKey string
- Repositories []*GitRepositoryConfiguration
+ Scan *scan
+ RootReadme string
+ ListenAddr string
+ Passphrase string
+ SyntaxHighlight string
+ AESKey string
+ Repositories []*GitRepositoryConfiguration
}
// This is a per repository configuration.
@@ -52,11 +53,12 @@ type (
// This holds all the function necessary to ask for configuration
// information.
ConfigurationRepository struct {
- rootReadme string
- listenAddr string
- passphrase string
- aesKey string
- repositories []*GitRepositoryConfiguration
+ rootReadme string
+ listenAddr string
+ passphrase string
+ aesKey string
+ syntaxHighlight string
+ repositories []*GitRepositoryConfiguration
}
)
@@ -72,11 +74,12 @@ func LoadConfigurationRepository(configPath string) (*ConfigurationRepository, e
}
repo := &ConfigurationRepository{
- rootReadme: config.RootReadme,
- listenAddr: config.ListenAddr,
- repositories: config.Repositories,
- passphrase: config.Passphrase,
- aesKey: config.AESKey,
+ aesKey: config.AESKey,
+ listenAddr: config.ListenAddr,
+ passphrase: config.Passphrase,
+ repositories: config.Repositories,
+ rootReadme: config.RootReadme,
+ syntaxHighlight: config.SyntaxHighlight,
}
if config.Scan.Path != "" {
@@ -87,7 +90,6 @@ func LoadConfigurationRepository(configPath string) (*ConfigurationRepository, e
}
return repo, nil
-
}
// GetRootReadme returns root read path
@@ -95,6 +97,10 @@ func (c *ConfigurationRepository) GetRootReadme() string {
return c.rootReadme
}
+func (c *ConfigurationRepository) GetSyntaxHighlight() string {
+ return c.syntaxHighlight
+}
+
func (c *ConfigurationRepository) GetListenAddr() string {
return c.listenAddr
}
@@ -186,6 +192,11 @@ func parse(r io.Reader) (*configuration, error) {
return nil, err
}
+ err = setSyntaxHighlight(block, &config.SyntaxHighlight)
+ if err != nil {
+ return nil, err
+ }
+
err = setRepositories(block, &config.Repositories)
if err != nil {
return nil, err
@@ -289,6 +300,11 @@ func setAESKey(block scfg.Block, listenAddr *string) error {
return setString(scanDir, listenAddr)
}
+func setSyntaxHighlight(block scfg.Block, listenAddr *string) error {
+ scanDir := block.Get("syntax-highlight")
+ return setString(scanDir, listenAddr)
+}
+
func setListenAddr(block scfg.Block, listenAddr *string) error {
scanDir := block.Get("listen-addr")
return setString(scanDir, listenAddr)
diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go
index 0970cfa..9080351 100644
--- a/pkg/config/config_test.go
+++ b/pkg/config/config_test.go
@@ -105,6 +105,7 @@ repository /srv/git/cerrado.git {
listen-addr unix://var/run/cerrado/cerrado.sock
passphrase $2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq
aes-key 8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w==
+syntax-highlight monokailight
scan "/srv/git" {
public true
@@ -123,9 +124,10 @@ repository /srv/git/cerrado.git {
Public: true,
Path: "/srv/git",
},
- ListenAddr: "unix://var/run/cerrado/cerrado.sock",
- Passphrase: "$2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq",
- AESKey: "8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w==",
+ ListenAddr: "unix://var/run/cerrado/cerrado.sock",
+ Passphrase: "$2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq",
+ AESKey: "8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w==",
+ SyntaxHighlight: "monokailight",
Repositories: []*GitRepositoryConfiguration{
{
Name: "linux.git",
@@ -158,6 +160,5 @@ repository /srv/git/cerrado.git {
t.Errorf("Wrong result given - wanted + got\n %s", diff)
}
})
-
}
}
diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go
index 6fae146..5739c8e 100644
--- a/pkg/handler/git/handler.go
+++ b/pkg/handler/git/handler.go
@@ -27,18 +27,19 @@ import (
type (
GitHandler struct {
gitService *service.GitService
- readmePath string
+ config configurationRepository
}
configurationRepository interface {
GetRootReadme() string
+ GetSyntaxHighlight() string
}
)
func NewGitHandler(gitService *service.GitService, confRepo configurationRepository) *GitHandler {
return &GitHandler{
gitService: gitService,
- readmePath: confRepo.GetRootReadme(),
+ config: confRepo,
}
}
@@ -48,7 +49,7 @@ func (g *GitHandler) List(w http.ResponseWriter, _ *http.Request) error {
return err
}
- f, err := os.Open(g.readmePath)
+ f, err := os.Open(g.config.GetRootReadme())
if err != nil {
return err
}
@@ -280,7 +281,8 @@ func (g *GitHandler) Blob(w http.ResponseWriter, r *http.Request) error {
filename := filepath.Base(rest)
lexer := GetLexers(filename)
- style := styles.Get("xcode")
+ style := styles.Get(g.config.GetSyntaxHighlight())
+
formatter := html.New(
html.WithLineNumbers(true),
html.WithLinkableLineNumbers(true, "L"),