- Go 48.2%
- HTML 31.6%
- CSS 13.7%
- JavaScript 6.4%
| archetype | ||
| lfo | ||
| static | ||
| templates | ||
| .gitignore | ||
| dollctl_build.sh | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| nirvash.go | ||
| README.md | ||
NIRVASH
about
nirvash is a content management system (CMS) written in Go using the quartzgun library, designed to be efficient, modular, and easy to use. It uses an Adapter system that in theory allows almost any backend SSG to be used for actual page generation and backend storage. It's inspired by Joost Van Der Schee's Usecue CMS.
installation and configuration
Clone this repository and run go build to build nirvash. Just running ./nirvash from there, if you haven't run it before, should run the configuration wizard (it runs if the config file found in your user's config directory is missing or incomplete). The configuration file looks like:
adapter=eureka // one of the supported adapters, currently just eureka
root=/path/to/ssg/root // path to where your SSG content root is
assetRoot=/path/to/asset/root // path to the parent folder containing Nirvash static/ assets and templates/ directory (eg base directory of this repo)
staticRoot=/path/to/static/root // path to static file storage on your webserver
staticShowHTML=false // true or false, show HTML files in the file manager interface
staticShowHidden=false // true or false, show hidden files in the file manager interface
staticMaxUploadMB=25 // integer, maximum size in MB of files uploaded in the file manager interface
plugins=none // list of plugins to use, currently none are implemented
You can also set the configuration options by running eg nirvash configure adapter=eureka root=/var/www. Key-value pairs given on the command line are written to the configuration file, and pairs not listed are unmodified.
User management is done from the command line as well:
nirvash adduser username passwordnirvash rmuser usernamenirvash passwd username oldpass newpass
usage
Running nirvash without any arguments starts the webserver on port 8080.
Initially the user will be presented with the login screen; upon successful login, the application presents the navbar with these options:
Pages: the default page, shows a list of existing pages - clicking one enables editing that page; a button is also presented for adding a new page. EachAdapterwill provide different formatting help and can allow editable slugs/URLs or not (eg, theEurekaAdapterbuilds slugs/URLs directly from the page title).Files: provides an interface for managing statically hosted files. Files and directories can be added, moved, and deleted.Configuration: interface to the configuration for theAdapter. EachAdapterprovides its own configuration interface with associated data types (currently supported:int,float,string, andmultilinestring)Build: a simple form to build the site - build options configurable byAdapterare present under an accordion.Deploy: a very simple form to either deploy the site or revert the current state to the deployed stateLogout: logs the user out and returns to the login screen
adapter interface
nirvash is extensible by Adapters that can interact with almost any static site generator under the hood.
The Adapter interface and associated data types can be found in the adapter.go file, but the basic interface looks like this:
Init(cfg *Config): set any initial settings that need to be handled - typically import SSG data root from thenirvashconfig file and read the SSG's own config fileName() string: the name of the adapter, used for thenirvash.confconfig fileEditableSlugs() bool: whether slugs can be edited independently or are calculated based on, eg, page titlesBuildOptions() []string: a list of names of the build options to present on the/buildpageGetConfig() map[ConfigOption]string: retrieves the config to present on the/configpageSetConfig(map[ConfigOption]string) error: takes the config from the/configpage and applies it, typically by writing it to a fileListPages() map[string]string: list the pages in the site; keys are the slugs, values are the titlesGetPage(slug string) Page: given a slug, return the page dataFormatPage(string) string: given the raw page data as input by the user, return HTML suitable for preview (currently unimplemented and unused)FormattingHelp() string: return a string to be inserted into apretag on the/fmt-helppageCreatePage(slug, title, content string) error: given all the proper arguments, create a new page in the backing store (eg filesystem, db)SavePage(oldSlug, newSlug, title, content string) error: given all the proper arguments, save a page to the backing store (eg filesystem, db)DeletePage(slug string) error: given a slug, delete the corresponding page source and possibly its generated HTML, depending on theAdapterBuild(buildOptions map[string][]string) BuildStatus: takes a map of build option names to their values and builds the site, returning aBuildStatusobject containing the success or failure as a boolean and the detailed status (eg, the console ouptut of the build process)Deploy() DeployStatus: executes the deployment script and returns aDeployStatusobject, analagous to aBuildStatusRevert() RevertStatus: executes the reversion script and returns aRevertStatusobject, analagous to aBuildStatus
license
nirvash is licensed under the MIT license.
