pelican-subtle-giggi: update release v2
diff --git a/Makefile b/Makefile
index cc1ec0b..5d8677e 100644
--- a/Makefile
+++ b/Makefile
@@ -3,10 +3,18 @@
 PELICANOPTS=
 
 BASEDIR=$(CURDIR)
-INPUTDIR=$(BASEDIR)/content
-OUTPUTDIR=$(BASEDIR)/output
 CONFFILE=$(BASEDIR)/pelicanconf.py
 PUBLISHCONF=$(BASEDIR)/publishconf.py
+OUTPUTDIR=$(BASEDIR)/output
+OUTPUTDIR_THEME=$(OUTPUTDIR)/theme
+OUTPUTDIR_PHOTOS=$(OUTPUTDIR)/photos
+OUTPUTDIR_VIDEOS=$(OUTPUTDIR)/videos
+
+ifeq ($(PELICAN_CONTENT),)
+ INPUTDIR=$(BASEDIR)/content
+else
+ INPUTDIR=$(PELICAN_CONTENT)
+endif
 
 FTP_HOST=localhost
 FTP_USER=anonymous
@@ -27,10 +35,17 @@
 
 GITHUB_PAGES_BRANCH=gh-pages
 
-INSTALLDIR=
-UID="www-data"
-GID="www-data"
-MOD="664"
+INSTALLSUDO ?= 0
+ifeq ($(INSTALLSUDO),1)
+ SUDO := sudo -E
+endif
+INSTALLFLAGS := $(INSTALLFLAGS) -rXaA
+INSTALLDIR ?=
+# Copy the whole directory theme
+INSTALLDIR_THEME ?=
+# Copy contents only
+INSTALLDIR_PHOTOS ?=
+INSTALLDIR_VIDEOS ?=
 
 DEBUG ?= 0
 ifeq ($(DEBUG), 1)
@@ -47,7 +62,12 @@
 	@echo '                                                                          '
 	@echo 'Usage:                                                                    '
 	@echo '   make html                           (re)generate the web site          '
-	@echo '   make clean                          remove the generated files         '
+	@echo '   make clean-html                     remove all html files and folders  '
+	@echo '   make clean-theme                    remove output/theme                '
+	@echo '   make clean-photos                   remove output/photos               '
+	@echo '   make clean-videos                   remove output/videos               '
+	@echo '   make distclean                      remove output and __pycache__      '
+	@echo '   make clean                          remove output folder               '
 	@echo '   make regenerate                     regenerate files upon modification '
 	@echo '   make publish                        generate using production settings '
 	@echo '   make serve [PORT=8000]              serve site at http://localhost:8000'
@@ -61,6 +81,11 @@
 	@echo '   make s3_upload                      upload the web site via S3         '
 	@echo '   make cf_upload                      upload the web site via Cloud Files'
 	@echo '   make github                         upload the web site via gh-pages   '
+	@echo '   make install-html                   copy *.html, html folders locally  '
+	@echo '   make install-theme                  copy output/theme locally          '
+	@echo '   make install-photos                 copy output/photos locally         '
+	@echo '   make install-videos                 copy output/videos locally         '
+	@echo '   make install                        copy output/* locally              '
 	@echo '                                                                          '
 	@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html   '
 	@echo 'Set the RELATIVE variable to 1 to enable relative urls                    '
@@ -69,8 +94,24 @@
 html:
 	$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
 
+clean-html:
+	find "$(OUTPUTDIR)" -type f -name *.html -delete
+	find "$(OUTPUTDIR)" -type d -empty -delete
+
+clean-theme:
+	[ ! -d "$(OUTPUTDIR_THEME)" ] || rm -rf $(OUTPUTDIR_THEME)
+
+clean-photos:
+	[ ! -d "$(OUTPUTDIR_PHOTOS)" ] || rm -rf $(OUTPUTDIR_PHOTOS)
+
+clean-videos:
+	[ ! -d "$(OUTPUTDIR_VIDEOS)" ] || rm -rf $(OUTPUTDIR_VIDEOS)
+
 clean:
-	[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
+	[ ! -d "$(OUTPUTDIR)" ] || rm -rf $(OUTPUTDIR)
+
+distclean: clean
+	find $(BASEDIR) -type d -name "__pycache__" -exec rm -rf '{}' '+'
 
 regenerate:
 	$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
@@ -126,18 +167,29 @@
 	ghp-import -m "Generate Pelican site" -b $(GITHUB_PAGES_BRANCH) $(OUTPUTDIR)
 	git push origin $(GITHUB_PAGES_BRANCH)
 
-install:
-	@command [ -z "$(INSTALLDIR)" ] && echo "INSTALLDIR unset. i.e. make install INSTALLDIR=\"/path/to/dir\"" && exit 1 ||:
-	@command [ ! -d $(OUTPUTDIR) ] && echo "OUTPUTDIR unset. i.e. make html" && exit 1 ||:
-	@echo "Copying $(OUTPUTDIR) to $(INSTALLDIR)"
-	@command sudo cp -ra $(OUTPUTDIR)/* $(INSTALLDIR) ||:
-	@echo "Setting chown to $(UID):$(GID)"
-	@command sudo chown -R $(UID):$(GID) $(INSTALLDIR) ||:
-	@echo "Setting chmod $(MOD) to files"
-	@command find $(INSTALLDIR) -type f | sudo xargs -i{} chmod $(MOD) {} ||:
-	@echo "Installed files:"
-	@command find $(INSTALLDIR) -type f ||:
-	@echo "Done."
+install-html:
+	[ -d "$(OUTPUTDIR)" ] && [ -d "$(INSTALLDIR)" ] && \
+	$(SUDO) rsync $(INSTALLFLAGS) \
+	--exclude=$(notdir $(OUTPUTDIR_THEME)) \
+	--exclude=$(notdir $(OUTPUTDIR_PHOTOS)) \
+	--exclude=$(notdir $(OUTPUTDIR_VIDEOS)) \
+	$(OUTPUTDIR)/* $(INSTALLDIR)
+
+install-theme:
+	[ -d "$(OUTPUTDIR_THEME)" ] && [ -d "$(INSTALLDIR_THEME)" ] && \
+	$(SUDO) rsync $(INSTALLFLAGS) $(OUTPUTDIR_THEME) $(INSTALLDIR_THEME)/
+
+install-photos:
+	[ ! -d "$(OUTPUTDIR_PHOTOS)" ] && { echo "Nothing to do for: install-photos"; \
+	exit 0; } || [ -d "$(INSTALLDIR_PHOTOS)" ] && \
+	$(SUDO) rsync $(INSTALLFLAGS) $(OUTPUTDIR_PHOTOS)/ $(INSTALLDIR_PHOTOS)
+
+install-videos:
+	[ ! -d "$(OUTPUTDIR_VIDEOS)" ] && { echo "Nothing to do for: install-videos"; \
+	exit 0; } || [ -d "$(INSTALLDIR_VIDEOS)" ] && \
+	$(SUDO) rsync $(INSTALLFLAGS) $(OUTPUTDIR_VIDEOS)/ $(INSTALLDIR_VIDEOS)
+
+install: install-html install-theme install-photos install-videos
 
 
-.PHONY: html help clean regenerate serve serve-global devserver stopserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github install
+.PHONY: html help clean clean-html clean-theme clean-photos regenerate serve serve-global devserver stopserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github install install-html install-theme install-photos