Several changes
- Add blogpost about nix arrows - Change header background - Add RSS linkmain
parent
3d9fd63cf9
commit
312b05250a
14
flake.lock
14
flake.lock
|
@ -2,11 +2,11 @@
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1644229661,
|
"lastModified": 1659877975,
|
||||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
|
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -17,16 +17,16 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1646933238,
|
"lastModified": 1665613119,
|
||||||
"narHash": "sha256-RZJnLN0o4B35eTnUc2tEAD12X5TNeeJhhvH3Fd6Pmdo=",
|
"narHash": "sha256-VTutbv5YKeBGWou6ladtgfx11h6et+Wlkdyh4jPJ3p0=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "bacbfd713b4781a4a82c1f390f8fe21ae3b8b95b",
|
"rev": "e06bd4b64bbfda91d74f13cb5eca89485d47528f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"id": "nixpkgs",
|
"id": "nixpkgs",
|
||||||
"ref": "nixos-21.11",
|
"ref": "nixos-22.05",
|
||||||
"type": "indirect"
|
"type": "indirect"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -4,12 +4,8 @@
|
||||||
nixConfig.bash-prompt = "[nix]λ ";
|
nixConfig.bash-prompt = "[nix]λ ";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "nixpkgs/nixos-21.11";
|
nixpkgs.url = "nixpkgs/nixos-22.05";
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
flake-utils = {
|
|
||||||
url = "github:numtide/flake-utils";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { flake-utils, nixpkgs, self }:
|
outputs = { flake-utils, nixpkgs, self }:
|
||||||
|
|
|
@ -65,6 +65,9 @@ The content `<div>` is where all your content goes.
|
||||||
padding: 2.5em 2em 0;
|
padding: 2.5em 2em 0;
|
||||||
border-bottom: 1px solid #00000088;
|
border-bottom: 1px solid #00000088;
|
||||||
margin-bottom: 2.5em;
|
margin-bottom: 2.5em;
|
||||||
|
background-image: url(./images/background.jpg);
|
||||||
|
background-size: cover;
|
||||||
|
height: 25vh;
|
||||||
}
|
}
|
||||||
/* .header h1 {
|
/* .header h1 {
|
||||||
margin: 0.2em 0;
|
margin: 0.2em 0;
|
||||||
|
@ -390,4 +393,4 @@ Hides the menu at `48em`, but modify this based on your app's needs.
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 256 KiB |
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
|
@ -7,13 +7,15 @@ title: "Nani"
|
||||||
---
|
---
|
||||||
|
|
||||||
<header class="header">
|
<header class="header">
|
||||||
<h1 class="display-1">Welcome to nani.wtf</h1>
|
<div class="container">
|
||||||
<img
|
<div class="row">
|
||||||
alt="A woman sitting on a bench amongst trees at the end of a boardwalk leading to a pond with mountains in the background"
|
<div class="col-xs-12 col-sm-6 col-md-8 col-centered">
|
||||||
src="./images/robert-pearce-UwHN0jU_YqQ-unsplash-800w.jpg"
|
<h1 class="display-1 text-white">
|
||||||
style="max-width:500px;"
|
Welcome to nani.wtf
|
||||||
class="mb-4"
|
</h1>
|
||||||
/>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<main>
|
<main>
|
||||||
<section class="content">
|
<section class="content">
|
||||||
|
@ -30,7 +32,9 @@ title: "Nani"
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title">$title$</h5>
|
<h5 class="card-title">$title$</h5>
|
||||||
<small class="card-text ">$date$</small>
|
<small class="card-text ">$date$</small>
|
||||||
<p class="card-text">$desc$</p>
|
$if(desc)$
|
||||||
|
<p class="card-text">$desc$</p>
|
||||||
|
$endif$
|
||||||
</div>
|
</div>
|
||||||
<a href="$url$" class="stretched-link"></a>
|
<a href="$url$" class="stretched-link"></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
---
|
||||||
|
title: "The nix arrow operator"
|
||||||
|
keywords: nix, language, programming-language
|
||||||
|
image: './images/nix_banner.png'
|
||||||
|
series: "Nix shorts"
|
||||||
|
---
|
||||||
|
|
||||||
|
There is a specal operator in nix, written as `->`. It is not a c dereference struct pointer operator, nor is it a haskell function type definition. It is a boolean operator, which represents the "implies arrow" from [propositional logic][prop-log]. This is especially useful in nix, because of its usage in modules.
|
||||||
|
|
||||||
|
## The `myService` module
|
||||||
|
|
||||||
|
Let's say you have made a module for `myService` with two options called `myService.enable`, and `myService.address`. `myService` needs an address in order to work properly. If `myService` is not enabled, the value of `myService.address` doesn't really matter. Set or `null`, the result will be the same either way. If `myService` is enabled however, it is crucial that we report an error if `myService.address` is not set. `myService` can not work without it.
|
||||||
|
|
||||||
|
In order to make sure that this never happens, we need to assert that this is not the case. This could be done by asserting that this boolean expression is true.
|
||||||
|
|
||||||
|
`((!myService.enable) || myService.address != null)`
|
||||||
|
|
||||||
|
or in plain english: "Either myService is not enabled, or the address has to not be null"
|
||||||
|
|
||||||
|
This is equivalent to this boolean expression:
|
||||||
|
|
||||||
|
`myService.enable -> myService.address != null`
|
||||||
|
|
||||||
|
or in plain english: "myService being enabled implies that the address is not null".
|
||||||
|
|
||||||
|
Asserting these kinds of inter-setting dependencies are common enough in nix modules to provide grounds for having `->` as its own boolean operator.
|
||||||
|
|
||||||
|
## Full example
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# modules/myService.nix
|
||||||
|
{ lib, config }: let
|
||||||
|
cfg = config.myService;
|
||||||
|
in {
|
||||||
|
options = {
|
||||||
|
enable = lib.mkEnableOption "myService";
|
||||||
|
address = lib.mkOption {
|
||||||
|
example = "127.0.0.1";
|
||||||
|
description = "The address of myService";
|
||||||
|
type = lib.types.string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
# ...
|
||||||
|
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = cfg.enable -> cfg.address != null;
|
||||||
|
message = "myService needs an address";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
[prop-log]: https://iep.utm.edu/prop-log/
|
|
@ -74,6 +74,7 @@
|
||||||
<li class="pure-menu-item"><a href="#contact" class="pure-menu-link">Contact</a></li>
|
<li class="pure-menu-item"><a href="#contact" class="pure-menu-link">Contact</a></li>
|
||||||
<li class="pure-menu-item menu-item-divided"><a href="https://git.nani.wtf" class="pure-menu-link">Git</a></li>
|
<li class="pure-menu-item menu-item-divided"><a href="https://git.nani.wtf" class="pure-menu-link">Git</a></li>
|
||||||
<li class="pure-menu-item"><a href="https://git.nani.wtf/h7x4/nani.wtf" class="pure-menu-link">Site source</a></li>
|
<li class="pure-menu-item"><a href="https://git.nani.wtf/h7x4/nani.wtf" class="pure-menu-link">Site source</a></li>
|
||||||
|
<li class="pure-menu-item"><a href="public/rss.xml" class="pure-menu-link">RSS</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue