Negative Materialism
A Hugo-based website using the Hextra theme for the Negative Materialism framework - a dialectical anti-synthesis approach to critiquing late-capitalist class struggle through practical dissection of immediate material conditions.
Contributing
How to Contribute
We encourage participation from anyone interested in the Negative Materialism framework. There are several ways to contribute:
1. Submit Content to the Documents Repository
- Visit https://github.com/Negative-Materialism/Documents
- Submit pull requests with new analysis, documentation, or corrections
- Follow the existing content structure and formatting
2. Edit This Website Directly
- Click the “Edit this page on GitHub” button (appears on every page)
- Make your changes directly in the browser
- Submit a pull request for review
3. Content Guidelines
When contributing content:
- Use clear, accessible language
- Include proper front matter with title, date, description, and tags
- Add relevant tags for discoverability
- Keep analysis grounded in material conditions
- Follow the existing writing style and tone
4. Technical Contributions
- Report bugs or suggest improvements
- Contribute to the Hugo configuration
- Improve accessibility or performance
- Add new shortcodes or features
Getting Started
- Fork the repository on GitHub
- Clone your fork locally
- Install Hugo (extended version recommended)
- Run the development server:
hugo server -D - Make your changes and test locally
- Submit a pull request
Content Creation Workflow
- Create a new
.mdfile in the appropriate directory - Add proper front matter with metadata
- Write your content using Markdown
- Use shortcodes for special features
- Test locally with
hugo server -D - Submit via pull request
About This Site
This website is built with Hugo and the Hextra theme, providing a modern, fast, and accessible platform for publishing analysis and documentation.
Hugo Hextra System
Data Headers (Front Matter)
Every content file in Hugo uses YAML front matter (data headers) to define metadata. Here’s how they work:
Basic Structure
---
title: "Your Article Title"
date: 2025-01-15
draft: false
description: "A brief description of your content"
tags: ["tag1", "tag2", "tag3"]
categories: ["analysis"]
- **`author`**: Name of the content's author. You can add this field to attribute posts or pages. Example:
```yaml
author: "Jane Doe"For multiple authors, use a list:
author:
- "Jane Doe"
- "John Smith"
#### Key Front Matter Fields
**Essential Fields:**
- **`title`**: The page title (string)
- **`date`**: The date associated with the page, typically creation date (string)
- **`draft`**: Whether to disable rendering unless `--buildDrafts` flag is used (boolean)
- **`description`**: Brief summary for search results and meta tags (string)
- **`type`**: Content type, overriding the value derived from the section (string)
**Content Organization:**
- **`tags`**: Array of topic tags for categorization (string array)
- **`categories`**: Content categories (string array)
- **`weight`**: Page weight for ordering within collections (integer)
- **`slug`**: Override the last segment of the URL path (string)
- **`url`**: Override the entire URL path (string)
**Publishing Control:**
- **`publishDate`**: Publication date - page won't render before this date (string)
- **`expiryDate`**: Expiration date - page won't render after this date (string)
- **`lastmod`**: Last modified date (string)
**Content Enhancement:**
- **`summary`**: Content summary or teaser (string)
- **`keywords`**: Array of keywords for meta tags (string array)
- **`layout`**: Template name to override default template lookup (string)
- **`linkTitle`**: Shorter version of the title (string)
**Menu Integration:**
- **`menus`**: Add page to given menu(s) (string, string array, or map)
**Custom Parameters:**
- **`params`**: Map of custom page parameters (map)
```yaml
params:
featured: true
custom_field: "value"Authors (Taxonomy-based):
-
authors: Array of author names for taxonomy-based author system (string array)authors: ["Jane Doe", "John Smith"]This requires setting up the author taxonomy in your
hugo.yaml:taxonomies: author: authors tag: tags category: categoriesThen create author data files in
/content/authors/author-name/_index.md:--- name: "Jane Doe" bio: "Jane is a political theorist specializing in dialectical materialism." twitter: "jane_doe" ---
Advanced Features:
aliases: Array of relative URLs that redirect to current page (string array)cascade: Map of front matter keys passed to descendants (map)outputs: Output formats to render (string array)resources: Metadata for page resources (map array)sitemap: Sitemap options (map)
Date Formats
Hugo supports multiple date formats. Use one of these parsable formats:
| Format | Time Zone |
|---|---|
| 2023-10-15T13:18:50-07:00 | America/Los_Angeles |
| 2023-10-15T13:18:50-0700 | America/Los_Angeles |
| 2023-10-15T13:18:50Z | Etc/UTC |
| 2023-10-15T13:18:50 | Default is Etc/UTC |
| 2023-10-15 | Default is Etc/UTC |
| 15 Oct 2023 | Default is Etc/UTC |
Taxonomies
Taxonomies are used to classify content. The most common are tags and categories, but you can define custom taxonomies in your site configuration:
# In hugo.yaml
taxonomies:
tag: tags
category: categories
genre: genresThen use them in front matter:
---
tags: ["capitalism", "dialectics", "labor"]
categories: ["analysis"]
genres: ["political-theory", "critique"]
---Special Hextra Features
-
cascade: Inherit settings to child pagescascade: type: blog # Makes all child pages blog posts params: color: red -
Menu integration: Pages automatically appear in navigation based on weight and structure
Cascade Targeting
You can target specific pages with cascade using the target keyword:
cascade:
params:
color: red
target:
path: '{/articles,/articles/**}' # Only articles section
kind: page # Only regular pages
environment: '{staging,production}' # Only specific environmentsFor multiple targets, use an array:
cascade:
- params:
color: red
target:
path: '{/books/**}'
- params:
color: blue
target:
path: '{/films/**}'Shortcodes
Shortcodes are Hugo’s way of creating reusable content components. This site includes several custom shortcodes:
Recent Posts Shortcode
1/3
Did You Go To School to be a Stenographer?
Corporate media normalizes authoritarianism by treating the incitement of police lawlessness as a policy debate.
Read Full
The Price of Words Under Occupation
The federal occupation of Minneapolis reveals that the liberal constitutional order is being dissolved by raw state violence.
Read Full
Iran on Fire
The 2026 Iranian uprising's revolutionary potential lies in its leaderless rejection of authority, yet faces liberal and monarchist co-optation.
Read Full
The Murder of Renee Nicole Good
Forensic evidence dismantles the state's narrative around Renee Nicole Good's murder, exposing ICE as a tool of ethnic cleansing.
War Crimes and Whiskey
The New York Times launders imperial violence through lifestyle journalism, reducing Venezuela's conquest to a backdrop for elite nostalgia.
The Return of the Viceroy
The US kidnapping of Nicolás Maduro on fabricated narco-terrorism charges is imperial piracy designed to seize Venezuela's oil reserves.
The Apoptosis of Reason
A defense of Logical Nihilism and Instrumental Finitism that undermines universal logic and mathematical ontology as basic structures of being.
The Antifa Spectacle
Trump's designation of Antifa as domestic terrorists marks the fusion of authoritarian statecraft with a crusade to criminalize all dissent.
Two Years of the Gaza Genocide
Two years of genocide in Gaza exposes the bankruptcy of the global capitalist system and the necessity for international working-class action.
This Is Not A Drill
Trump's regime represents a fascist revolution requiring organized working-class resistance, not appeals to a collapsing liberal order.
Manufacturing His Fascist Legacy
Ezra Klein's interview with Ben Shapiro exemplifies liberalism's role in laundering fascist ideology through mainstream respectability.
Plastic in Utero
Negative Materialism rejects the false binary of hope and nihilism as revolutionary praxis for an age of ecological collapse.
Rest in Piss Charlie Kirk
Charlie Kirk's assassination was the logical consequence of his own violent rhetoric, not a tragedy but a symptom of capitalist decay.
The Fascist Rebranding of Empire
The destruction of a 44-year peace vigil and renaming of Defense to War reveal fascism's reliance on erasure and spectacle.
Xueqin's Blood Libel
Jiang Xueqin's thesis that Gaza's genocide constitutes ritual sacrifice is a dangerous mystification that obscures material power relations.
Dancing on Labor’s Grave
The National Review's Labor Day obituary for unions is class war propaganda masking capital's coordinated destruction of worker solidarity.
Futility of the Klein-Hazony Dialogue
Liberalism cannot defeat fascism through polite debate; the Klein-Hazony exchange reveals rival management strategies for capitalism's decline.
Displays the 20 most recent posts in a card layout with titles, dates, descriptions, and tags.
YouTube Shortcode
Embeds YouTube videos with proper accessibility attributes.
Example:
Content Organization
Directory Structure
content/
├── _index.md # Homepage
├── about.md # About page
├── analysis/ # Analysis section
│ ├── _index.md # Analysis landing page
│ └── *.md # Individual analysis posts
└── README.md # This fileContent Types
- Blog Posts: Go in the
analysis/directory - Static Pages: Use
type: pagein front matter - Section Pages: Use
_index.mdfor section landing pages
Theme Configuration
The site uses Hextra with custom configurations in hugo.yaml:
- Dark theme by default with toggle
- Search functionality enabled
- Edit links pointing to GitHub
- Custom menu with social links
- Logo support with light/dark variants
Author System Implementation
This site uses a taxonomy-based author system that allows for rich author information and automatic author pages.
Setting Up Authors
-
Configure taxonomy in
hugo.yaml:taxonomies: author: authors tag: tags category: categories -
Create author data files in
/content/authors/author-name/_index.md:--- name: "Author Name" bio: "Author biography and credentials" twitter: "twitter_handle" --- -
Add authors to posts in front matter:
--- title: "Post Title" authors: ["Author Name"] ---
Author Templates
Author byline in posts (add to your single post template):
{{ range .Param "authors" }}
{{ $name := . }}
{{ $path := printf "/%s/%s" "authors" ($name | urlize) }}
{{ with $.Site.GetPage $path }}
<div class="author-byline">
<h3>{{ .Params.name }}</h3>
<p>{{ .Params.bio }}</p>
{{ if .Params.twitter }}
<p><a href="https://twitter.com/{{ .Params.twitter }}">@{{ .Params.twitter }}</a></p>
{{ end }}
</div>
{{ end }}
{{ end }}Author listing page (create /layouts/_default/author.terms.html):
<h1>Authors</h1>
{{ range .Data.Pages }}
<div class="author-card">
<h2>{{ .Params.name }}</h2>
<p>{{ .Params.bio }}</p>
{{ if .Params.twitter }}
<p><a href="https://twitter.com/{{ .Params.twitter }}">@{{ .Params.twitter }}</a></p>
{{ end }}
</div>
{{ end }}Individual author pages (create /layouts/_default/author.html):
<h1>{{ .Params.name }}</h1>
<p>{{ .Params.bio }}</p>
<h2>Articles by {{ .Params.name }}</h2>
{{ range .Pages }}
<article>
<h3><a href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
<p>{{ .Summary }}</p>
<time>{{ .Date.Format "January 2, 2006" }}</time>
</article>
{{ end }}Author Images
Store author images in /static/img/authors/ following the naming convention:
- File:
/static/img/authors/author-name.jpg - Use in templates:
/img/authors/{{ $name | urlize }}.jpg
Technical Details
Requirements
- Hugo Extended (latest version)
- Node.js (for asset processing)
Development
# Start development server
hugo server -D
# Build for production
hugo
# Build with drafts
hugo -DDeployment
The site is configured for Netlify deployment with automatic builds from the main branch.
License
This project is open source. See the LICENSE file for details.
Join the conversation: Whether you’re contributing analysis, fixing typos, or suggesting improvements, your participation helps build a more robust framework for understanding and resisting late-capitalist exploitation.