flake

Francesco Saccone's Nix flake.
git clone https://git.francescosaccone.com/flake
Log | Files | Refs | README | LICENSE

default.nix (3600B)


      1 {
      2   config,
      3   pkgs,
      4   inputs,
      5   ...
      6 }:
      7 let
      8   domain = import ./domain.nix;
      9 in
     10 rec {
     11   imports = [
     12     ./disk-config.nix
     13   ];
     14 
     15   modules = {
     16     agate = {
     17       enable = true;
     18       preStart = {
     19         scripts =
     20           let
     21             generateAtom = builtins.concatStringsSep " " [
     22               "${inputs.site}/scripts/generate-atom.sh"
     23               "/var/tmp/site/gemini"
     24               "\"Francesco Saccone's blog\""
     25               "gemini://${domain}"
     26             ];
     27             generateSitemap = builtins.concatStringsSep " " [
     28               "${inputs.site}/scripts/generate-sitemap.sh"
     29               "/var/tmp/site/gemini"
     30               "gemini://${domain}"
     31             ];
     32             generateGemini = builtins.concatStringsSep " " [
     33               "${inputs.site}/scripts/generate-gemini.sh"
     34               "/var/tmp/site/gemini"
     35             ];
     36           in
     37           [
     38             generateAtom
     39             generateSitemap
     40             generateGemini
     41           ];
     42         packages = [
     43           pkgs.coreutils
     44           pkgs.findutils
     45           pkgs.gnused
     46           pkgs.lowdown
     47         ];
     48       };
     49       symlinks = {
     50         "index.gmi" = "/var/tmp/site/gemini/index.gmi";
     51         "blog" = "/var/tmp/site/gemini/blog";
     52         "code" = "/var/tmp/site/gemini/code";
     53         "public" = "${inputs.site}/public";
     54         "robots.txt" = "${inputs.site}/robots.txt";
     55         "atom.xml" = "/var/tmp/site/gemini/atom.xml";
     56         "sitemap.xml" = "/var/tmp/site/gemini/sitemap.xml";
     57       };
     58     };
     59     bind = {
     60       enable = true;
     61       inherit (networking) domain;
     62       records = import ./dns.nix domain;
     63     };
     64     quark = {
     65       enable = true;
     66       preStart = {
     67         scripts =
     68           let
     69             generateAtom = builtins.concatStringsSep " " [
     70               "${inputs.site}/scripts/generate-atom.sh"
     71               config.modules.quark.directory
     72               "\"Francesco Saccone's blog\""
     73               "https://${domain}"
     74             ];
     75             generateSitemap = builtins.concatStringsSep " " [
     76               "${inputs.site}/scripts/generate-sitemap.sh"
     77               config.modules.quark.directory
     78               "https://${domain}"
     79             ];
     80             generateHtml = builtins.concatStringsSep " " [
     81               "${inputs.site}/scripts/generate-html.sh"
     82               config.modules.quark.directory
     83             ];
     84             copyStaticContent = pkgs.writeShellScript "copy-static-content" ''
     85               ${pkgs.sbase}/bin/cp -r \
     86                 ${inputs.site}/public \
     87                 ${inputs.site}/favicon.ico \
     88                 ${inputs.site}/robots.txt \
     89                 ${config.modules.quark.directory}
     90             '';
     91           in
     92           [
     93             generateAtom
     94             generateSitemap
     95             generateHtml
     96             copyStaticContent
     97           ];
     98         packages = [
     99           pkgs.coreutils
    100           pkgs.findutils
    101           pkgs.gnused
    102           pkgs.lowdown
    103         ];
    104       };
    105       acme = {
    106         enable = true;
    107         email = "admin@${domain}";
    108         inherit domain;
    109         extraDomains = [ "www.${domain}" ];
    110       };
    111       tls = {
    112         enable = true;
    113         pemFiles =
    114           let
    115             inherit (config.modules.quark.acme) directory;
    116           in
    117           [
    118             "${directory}/${domain}/fullchain.pem"
    119             "${directory}/${domain}/privkey.pem"
    120           ];
    121       };
    122     };
    123     openssh.listen = {
    124       enable = true;
    125       port = 22;
    126       authorizedKeyFiles = rec {
    127         root = [
    128           ./ssh/francescosaccone.pub
    129         ];
    130       };
    131     };
    132   };
    133 
    134   networking = {
    135     inherit domain;
    136   };
    137 }