hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 47587321d9a153ef4158739e8f238c850fb1ee7a
parent 40fccf2251a7187f002165653d42178e2f53a49b
Author: digitalcraftsman <digitalcraftsman@users.noreply.github.com>
Date:   Mon, 23 Nov 2015 20:44:59 +0100

Add themesDir option to configuration

themesDir can be used to change the default
path of the themes folder.

Fixes 1556

Diffstat:
Mcommands/hugo.go | 3++-
Mcommands/new.go | 4++--
Mcreate/content.go | 2+-
Mdocs/content/overview/configuration.md | 3++-
Mhelpers/path.go | 2+-
Mhugolib/site.go | 2+-
6 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/commands/hugo.go b/commands/hugo.go
@@ -210,6 +210,7 @@ func LoadDefaultSettings() {
 	viper.SetDefault("ArchetypeDir", "archetypes")
 	viper.SetDefault("PublishDir", "public")
 	viper.SetDefault("DataDir", "data")
+	viper.SetDefault("ThemesDir", "themes")
 	viper.SetDefault("DefaultLayout", "post")
 	viper.SetDefault("BuildDrafts", false)
 	viper.SetDefault("BuildFuture", false)
@@ -514,7 +515,7 @@ func getDirList() []string {
 	filepath.Walk(helpers.AbsPathify(viper.GetString("LayoutDir")), walker)
 	filepath.Walk(helpers.AbsPathify(viper.GetString("StaticDir")), walker)
 	if helpers.ThemeSet() {
-		filepath.Walk(helpers.AbsPathify("themes/"+viper.GetString("theme")), walker)
+		filepath.Walk(helpers.AbsPathify(viper.GetString("themesDir")+"/"+viper.GetString("theme")), walker)
 	}
 
 	return a
diff --git a/commands/new.go b/commands/new.go
@@ -176,8 +176,8 @@ func NewTheme(cmd *cobra.Command, args []string) error {
 		return newUserError("theme name needs to be provided")
 	}
 
-	createpath := helpers.AbsPathify(filepath.Join("themes", args[0]))
-	jww.INFO.Println("Creating theme at", createpath)
+	createpath := helpers.AbsPathify(filepath.Join(viper.GetString("themesDir"), args[0]))
+	jww.INFO.Println("creating theme at", createpath)
 
 	if x, _ := helpers.Exists(createpath, hugofs.SourceFs); x {
 		return newUserError(createpath, "already exists")
diff --git a/create/content.go b/create/content.go
@@ -132,7 +132,7 @@ func FindArchetype(kind string) (outpath string) {
 	search := []string{helpers.AbsPathify(viper.GetString("archetypeDir"))}
 
 	if viper.GetString("theme") != "" {
-		themeDir := filepath.Join(helpers.AbsPathify("themes/"+viper.GetString("theme")), "/archetypes/")
+		themeDir := filepath.Join(helpers.AbsPathify(viper.GetString("themesDir")+"/"+viper.GetString("theme")), "/archetypes/")
 		if _, err := os.Stat(themeDir); os.IsNotExist(err) {
 			jww.ERROR.Println("Unable to find archetypes directory for theme :", viper.GetString("theme"), "in", themeDir)
 		} else {
diff --git a/docs/content/overview/configuration.md b/docs/content/overview/configuration.md
@@ -130,7 +130,8 @@ Following is a list of Hugo-defined variables that you can configure and their c
     staticdir:                  "static"
     # display memory and timing of different steps of the program
     stepAnalysis:               false
-    # theme to use (located in /themes/THEMENAME/)
+    # theme to use (located by default in /themes/THEMENAME/)
+    themesdir = "themes"
     theme:                      ""
     title:                      ""
     # if true, use /filename.html instead of /filename/
diff --git a/helpers/path.go b/helpers/path.go
@@ -142,7 +142,7 @@ func GetStaticDirPath() string {
 // If there is no theme, returns the empty string.
 func GetThemeDir() string {
 	if ThemeSet() {
-		return AbsPathify(filepath.Join("themes", viper.GetString("theme")))
+		return AbsPathify(filepath.Join(viper.GetString("themesDir"), viper.GetString("theme")))
 	}
 	return ""
 }
diff --git a/hugolib/site.go b/hugolib/site.go
@@ -495,7 +495,7 @@ func (s *Site) absDataDir() string {
 }
 
 func (s *Site) absThemeDir() string {
-	return helpers.AbsPathify("themes/" + viper.GetString("theme"))
+	return helpers.AbsPathify(viper.GetString("themesDir") + "/" + viper.GetString("theme"))
 }
 
 func (s *Site) absLayoutDir() string {