Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d400466ad6 | ||
|
|
da2b589ad0 | ||
|
|
948fe426f7 |
26 changed files with 282 additions and 50 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -6,4 +6,4 @@
|
|||
_gen
|
||||
|
||||
# downloaded by nix
|
||||
themes
|
||||
themes/poison
|
||||
|
|
|
|||
0
content/posts/_index.md
Normal file
0
content/posts/_index.md
Normal file
|
|
@ -11,7 +11,9 @@ For me the biggest advantage flakes bring is not additional functionality. Inste
|
|||
|
||||
When learning flakes, you often see [flake-utils]( https://github.com/numtide/flake-utils) being used. With it, you can shorten your flakes by not having to specify everything per system.
|
||||
|
||||
### Without anything
|
||||
_Edit_: The patterns described here as well as `flake-parts` are also compared in [Practical Nix flake anatomy](https://vtimofeenko.com/posts/practical-nix-flake-anatomy-a-guided-tour-of-flake.nix/#flake-utils-flakeparts-etc).
|
||||
|
||||
## Without anything
|
||||
|
||||
```nix
|
||||
{
|
||||
|
|
@ -33,7 +35,7 @@ When learning flakes, you often see [flake-utils]( https://github.com/numtide/fl
|
|||
}
|
||||
```
|
||||
|
||||
### With flake-utils
|
||||
## With flake-utils
|
||||
|
||||
```nix
|
||||
{
|
||||
|
|
@ -54,7 +56,7 @@ When learning flakes, you often see [flake-utils]( https://github.com/numtide/fl
|
|||
}
|
||||
```
|
||||
|
||||
### With function in flake
|
||||
## With function in flake
|
||||
|
||||
To make a long story short, here is what I usually do instead:
|
||||
|
||||
|
|
@ -94,16 +96,24 @@ For me, it wasn’t a problem to ignore boilerplate like this at first, slowly l
|
|||
At **[1]**, the supported systems are specified. I personally use `x86_64-linux` and `aarch64-linux`, but I also usually support `x86_64-darwin` and `aarch64-darwin` in public projects.
|
||||
If you want to support any system, you can use [`nixpkgs.lib.system.flake-exposed`](https://github.com/NixOS/nixpkgs/blob/374e6bcc403e02a35e07b650463c01a52b13a7c8/lib/systems/default.nix#L58) at **[2]** instead of defining your own list.
|
||||
|
||||
Because the definition is right inside the flake, you can tweak what gets passed to the function. For example, the [flake for RedoxOS-development](https://gitlab.redox-os.org/redox-os/redox/-/blob/cb34b9bd862f46729c0082c37a41782a3b1319c3/flake.nix#L38) I contributed[^1] this to passes the custom rust-toolchain.
|
||||
### Example variations
|
||||
|
||||
Because the definition is right inside the flake, you can tweak what gets passed to the function.
|
||||
By doing that, you have to explicitly add the new identifier to each part that uses it, instead of having a global `let` binding that is implicitly used.
|
||||
`system` being available here is another bonus, as otherwise this would require duplicate `let`s everywhere.
|
||||
|
||||
An example for how to do it is already right there: at **[3]**, `pkgs` is provided.
|
||||
Some real-world usages I wrote or encountered:
|
||||
|
||||
- [servicepoint-life flake](https://git.berlin.ccc.de/vinzenz/servicepoint-life/src/commit/5f5e10d39f09f4d60b4301e76f0158636afee6d1/flake.nix): passes in initialized `naersk` instance and a shorthand to refer to packages defined in the flake itself
|
||||
- [RedoxOS development flake](https://gitlab.redox-os.org/redox-os/redox/-/blob/cb34b9bd862f46729c0082c37a41782a3b1319c3/flake.nix#L38): uses it to pass a custom rust-toolchain
|
||||
- [my NixOS flake](https://git.berlin.ccc.de/vinzenz/nixos-configuration/src/commit/3d27f554015ece713fa22fe829d711b430d6bbda/flake.nix): uses something similar for per-host config
|
||||
|
||||
Another possible tweak: You may want to define separate supported systems for each output.
|
||||
This is useful, for example, if the target environment you're developing for cannot support a development shell.
|
||||
|
||||
## Conclusion
|
||||
|
||||
For me, the trade-offs are worth it, as they provide greater transparency and control over the flake configuration.
|
||||
|
||||
That being said, I fully acknowledge that `flake-utils` can still be a great choice for many people.
|
||||
It simplifies things and reduces the need to write boilerplate code, which can be a plus depending on your needs and workflow.
|
||||
For you, this may be different, in which case keep using it!
|
||||
Ultimately, it's also matter of personal preference.
|
||||
|
||||
[^1]: If you check the history, you will see I am not mentioned. I am still a bit salty about that, as it was my first contribution to a bigger OSS project.
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
+++
|
||||
date = '2025-04-06T12:24:08+02:00'
|
||||
draft = true
|
||||
title = 'servicepoint'
|
||||
+++
|
||||
8
flake.lock
generated
8
flake.lock
generated
|
|
@ -2,16 +2,16 @@
|
|||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1748037224,
|
||||
"narHash": "sha256-92vihpZr6dwEMV6g98M5kHZIttrWahb9iRPBm1atcPk=",
|
||||
"lastModified": 1748437600,
|
||||
"narHash": "sha256-hYKMs3ilp09anGO7xzfGs3JqEgUqFMnZ8GMAqI6/k04=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "f09dede81861f3a83f7f06641ead34f02f37597f",
|
||||
"rev": "7282cb574e0607e65224d33be8241eae7cfe0979",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-24.11",
|
||||
"ref": "nixos-25.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
description = "Flake for the contents of https://zerforschen.plus";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-24.11";
|
||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.05";
|
||||
};
|
||||
|
||||
outputs =
|
||||
|
|
@ -28,12 +28,14 @@
|
|||
devShells = forAllSystems (
|
||||
{ pkgs, system, ... }:
|
||||
{
|
||||
default = pkgs.mkShellNoCC rec {
|
||||
default = pkgs.mkShellNoCC {
|
||||
inputsFrom = [ self.packages.${system}.default ];
|
||||
|
||||
shellHook = ''
|
||||
mkdir -p themes
|
||||
ln -snf "${self.packages.${system}.hugo-theme-poison}" themes/poison
|
||||
|
||||
alias hugo="hugo --baseURL=http://localhost/"
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
|||
50
hugo.toml
50
hugo.toml
|
|
@ -2,41 +2,41 @@
|
|||
baseURL = '/'
|
||||
#languageCode = 'en-us'
|
||||
title = 'zerforschen+'
|
||||
theme = 'poison'
|
||||
theme = 'own-theme'
|
||||
pluralizelisttitles = false
|
||||
|
||||
[params]
|
||||
brand = "zerforschen+"
|
||||
description = ""
|
||||
dark_mode = true
|
||||
front_page_content = ["posts", "projects"]
|
||||
menu = [
|
||||
# Dict keys:
|
||||
# Name: The name to display on the menu.
|
||||
# URL: The directory relative to the content directory.
|
||||
# HasChildren: If the directory's files should be listed. Default is true.
|
||||
# Limit: If the files should be listed, how many should be shown.
|
||||
brand = "zerforschen+"
|
||||
description = ""
|
||||
dark_mode = true
|
||||
front_page_content = ["posts", "projects"]
|
||||
menu = [
|
||||
# Dict keys:
|
||||
# Name: The name to display on the menu.
|
||||
# URL: The directory relative to the content directory.
|
||||
# HasChildren: If the directory's files should be listed. Default is true.
|
||||
# Limit: If the files should be listed, how many should be shown.
|
||||
|
||||
{Name = "About", URL = "/about/", HasChildren = false},
|
||||
{ Name = "About", URL = "/about/", HasChildren = false },
|
||||
|
||||
{Name = "Posts", URL = "/posts/", HasChildren = true, Limit = 99},
|
||||
{ Name = "Posts", URL = "/posts/", HasChildren = true, Limit = 99 },
|
||||
|
||||
# {Name = "Projects", URL = "/projects/"},
|
||||
]
|
||||
# {Name = "Projects", URL = "/projects/"},
|
||||
]
|
||||
|
||||
#email_url = "mailto://user@domain"
|
||||
github_url = "https://github.com/kaesaecracker"
|
||||
mastodon_url = "https://chaos.social/@vinzenz"
|
||||
matrix_url = "https://matrix.org"
|
||||
forgejo_url = "https://git.berlin.ccc.de/vinzenz"
|
||||
rss_icon = true
|
||||
#email_url = "mailto://user@domain"
|
||||
github_url = "https://github.com/kaesaecracker"
|
||||
mastodon_url = "https://chaos.social/@vinzenz"
|
||||
matrix_url = "https://matrix.org"
|
||||
forgejo_url = "https://git.berlin.ccc.de/vinzenz"
|
||||
rss_icon = true
|
||||
|
||||
[taxonomies]
|
||||
series = 'series'
|
||||
tags = 'tags'
|
||||
series = 'series'
|
||||
tags = 'tags'
|
||||
|
||||
[params.meta]
|
||||
favicon = true
|
||||
favicon = true
|
||||
|
||||
[pagination]
|
||||
pagerSize = 10
|
||||
pagerSize = 10
|
||||
|
|
|
|||
5
themes/own-theme/archetypes/default.md
Normal file
5
themes/own-theme/archetypes/default.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
+++
|
||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
date = {{ .Date }}
|
||||
draft = true
|
||||
+++
|
||||
19
themes/own-theme/assets/css/main.css
Normal file
19
themes/own-theme/assets/css/main.css
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
body {
|
||||
font-family: sans-serif;
|
||||
line-height: 1.5;
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
header {
|
||||
border-bottom: 1px solid;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
footer {
|
||||
border-top: 1px solid;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
1
themes/own-theme/assets/js/main.js
Normal file
1
themes/own-theme/assets/js/main.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
console.log('This site was generated by Hugo.');
|
||||
23
themes/own-theme/hugo.toml
Normal file
23
themes/own-theme/hugo.toml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
baseURL = 'https://example.org/'
|
||||
languageCode = 'en-US'
|
||||
title = 'My New Hugo Site'
|
||||
|
||||
[[menus.main]]
|
||||
name = 'Home'
|
||||
pageRef = '/'
|
||||
weight = 10
|
||||
|
||||
[[menus.main]]
|
||||
name = 'Posts'
|
||||
pageRef = '/posts'
|
||||
weight = 20
|
||||
|
||||
[[menus.main]]
|
||||
name = 'Tags'
|
||||
pageRef = '/tags'
|
||||
weight = 30
|
||||
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = false
|
||||
min = "0.116.0"
|
||||
17
themes/own-theme/layouts/_default/baseof.html
Normal file
17
themes/own-theme/layouts/_default/baseof.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ site.Language.LanguageCode }}" dir="{{ or site.Language.LanguageDirection `ltr` }}">
|
||||
<head>
|
||||
{{ partial "head.html" . }}
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
{{ partial "header.html" . }}
|
||||
</header>
|
||||
<main>
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
<footer>
|
||||
{{ partial "footer.html" . }}
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
7
themes/own-theme/layouts/_default/home.html
Normal file
7
themes/own-theme/layouts/_default/home.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{{ define "main" }}
|
||||
{{ .Content }}
|
||||
{{ range site.RegularPages }}
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
|
||||
{{ .Summary }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
8
themes/own-theme/layouts/_default/list.html
Normal file
8
themes/own-theme/layouts/_default/list.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ .Content }}
|
||||
{{ range .Pages }}
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
|
||||
{{ .Summary }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
59
themes/own-theme/layouts/_default/rss.xml
Normal file
59
themes/own-theme/layouts/_default/rss.xml
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
{{- $authorEmail := "" }}
|
||||
{{- with site.Params.author }}
|
||||
{{- if reflect.IsMap . }}
|
||||
{{- with .email }}
|
||||
{{- $authorEmail = . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- $authorName := "" }}
|
||||
{{- with site.Params.author }}
|
||||
{{- if reflect.IsMap . }}
|
||||
{{- with .name }}
|
||||
{{- $authorName = . }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
{{- $authorName = . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- $pctx := . }}
|
||||
{{- if .IsHome }}{{ $pctx = .Site }}{{ end }}
|
||||
{{- $pages := slice }}
|
||||
{{- if or $.IsHome $.IsSection }}
|
||||
{{- $pages = $pctx.RegularPages }}
|
||||
{{- else }}
|
||||
{{- $pages = $pctx.Pages }}
|
||||
{{- end }}
|
||||
{{- $limit := .Site.Config.Services.RSS.Limit }}
|
||||
{{- if ge $limit 1 }}
|
||||
{{- $pages = $pages | first $limit }}
|
||||
{{- end }}
|
||||
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{ .Site.Title }}</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>{{ site.Language.LanguageCode }}</language>{{ with $authorEmail }}
|
||||
<managingEditor>{{.}}{{ with $authorName }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with $authorEmail }}
|
||||
<webMaster>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }}
|
||||
<copyright>{{ . }}</copyright>{{ end }}{{ if not .Date.IsZero }}
|
||||
<lastBuildDate>{{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
|
||||
{{- with .OutputFormats.Get "RSS" }}
|
||||
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
|
||||
{{- end }}
|
||||
{{- range $pages }}
|
||||
<item>
|
||||
<title>{{ .Title }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<pubDate>{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
||||
{{- with $authorEmail }}<author>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }}
|
||||
<guid>{{ .Permalink }}</guid>
|
||||
<description>{{ .Content | transform.XMLEscape | safeHTML }}</description>
|
||||
</item>
|
||||
{{- end }}
|
||||
</channel>
|
||||
</rss>
|
||||
10
themes/own-theme/layouts/_default/single.html
Normal file
10
themes/own-theme/layouts/_default/single.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
|
||||
{{ $dateHuman := .Date | time.Format ":date_long" }}
|
||||
<time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
|
||||
|
||||
{{ .Content }}
|
||||
{{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
|
||||
{{ end }}
|
||||
0
themes/own-theme/layouts/partials/footer.html
Normal file
0
themes/own-theme/layouts/partials/footer.html
Normal file
6
themes/own-theme/layouts/partials/head.html
Normal file
6
themes/own-theme/layouts/partials/head.html
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }}</title>
|
||||
{{ partialCached "head/css.html" . }}
|
||||
{{ partialCached "head/js.html" . }}
|
||||
<meta name="color-scheme" content="light dark">
|
||||
9
themes/own-theme/layouts/partials/head/css.html
Normal file
9
themes/own-theme/layouts/partials/head/css.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{{- with resources.Get "css/main.css" }}
|
||||
{{- if eq hugo.Environment "development" }}
|
||||
<link rel="stylesheet" href="{{ .RelPermalink }}">
|
||||
{{- else }}
|
||||
{{- with . | minify | fingerprint }}
|
||||
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
12
themes/own-theme/layouts/partials/head/js.html
Normal file
12
themes/own-theme/layouts/partials/head/js.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{{- with resources.Get "js/main.js" }}
|
||||
{{- if eq hugo.Environment "development" }}
|
||||
{{- with . | js.Build }}
|
||||
<script src="{{ .RelPermalink }}"></script>
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
{{- $opts := dict "minify" true }}
|
||||
{{- with . | js.Build $opts | fingerprint }}
|
||||
<script src="{{ .RelPermalink }}" integrity="{{- .Data.Integrity }}" crossorigin="anonymous"></script>
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue