Sif config, remote website build, agenix for secrets

This commit is contained in:
Riley Apeldoorn 2022-05-27 13:34:37 +02:00
parent 16d45d2bc2
commit db168ad3a4
9 changed files with 170 additions and 6 deletions

View file

@ -1,7 +1,9 @@
# Holds common settings for *all* systems, including both servers and # Holds common settings for *all* systems, including both servers and
# clients. # clients.
{ pkgs, oxalica, ... }: { { pkgs, oxalica, agenix, ... }: {
imports = [ agenix.nixosModule ];
nix = { nix = {
optimise.automatic = true; optimise.automatic = true;
@ -24,6 +26,8 @@
]; ];
}; };
age.secrets."website-secret".file = ./secrets/website-secret.age;
boot.cleanTmpDir = true; boot.cleanTmpDir = true;
environment.systemPackages = [ environment.systemPackages = [

View file

@ -1,5 +1,23 @@
{ {
"nodes": { "nodes": {
"agenix": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1652712410,
"narHash": "sha256-hMJ2TqLt0DleEnQFGUHK9sV2aAzJPU8pZeiZoqRozbE=",
"owner": "ryantm",
"repo": "agenix",
"rev": "7e5e58b98c3dcbf497543ff6f22591552ebfe65b",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"type": "github"
}
},
"flake-utils": { "flake-utils": {
"locked": { "locked": {
"lastModified": 1637014545, "lastModified": 1637014545,
@ -17,7 +35,7 @@
}, },
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1653153149, "lastModified": 1653153149,
@ -34,6 +52,22 @@
} }
}, },
"nixpkgs": { "nixpkgs": {
"locked": {
"lastModified": 1638587357,
"narHash": "sha256-2ySMW3QARG8BsRPmwe7clTbdCuaObromOKewykP+UJc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e34c5379866833f41e2a36f309912fa675d687c7",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-21.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1653117584, "lastModified": 1653117584,
"narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=",
@ -47,7 +81,7 @@
"type": "indirect" "type": "indirect"
} }
}, },
"nixpkgs_2": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1653060744, "lastModified": 1653060744,
"narHash": "sha256-kfRusllRumpt33J1hPV+CeCCylCXEU7e0gn2/cIM7cY=", "narHash": "sha256-kfRusllRumpt33J1hPV+CeCCylCXEU7e0gn2/cIM7cY=",
@ -63,7 +97,7 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1637453606, "lastModified": 1637453606,
"narHash": "sha256-Gy6cwUswft9xqsjWxFYEnx/63/qzaFUwatcbV5GF/GQ=", "narHash": "sha256-Gy6cwUswft9xqsjWxFYEnx/63/qzaFUwatcbV5GF/GQ=",
@ -82,7 +116,7 @@
"oxalica": { "oxalica": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"nixpkgs": "nixpkgs_3" "nixpkgs": "nixpkgs_4"
}, },
"locked": { "locked": {
"lastModified": 1653273659, "lastModified": 1653273659,
@ -100,8 +134,9 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix",
"home-manager": "home-manager", "home-manager": "home-manager",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_3",
"oxalica": "oxalica" "oxalica": "oxalica"
} }
} }

View file

@ -17,6 +17,11 @@
url = github:oxalica/rust-overlay; url = github:oxalica/rust-overlay;
}; };
# For managing secrets
agenix = {
url = "github:ryantm/agenix";
};
}; };
outputs = args: with args.nixpkgs; { outputs = args: with args.nixpkgs; {

3
machines/sif/README.md Normal file
View file

@ -0,0 +1,3 @@
# Sif
Sif is the server that hosts my website. It's a Raspberry Pi 3.

View file

@ -3,7 +3,15 @@
{ {
imports = [ imports = [
../../modules ../../modules
# Reverse proxy
./nginx.nix
# Website
./website.nix
]; ];
networking.hostName = "sif"; networking.hostName = "sif";
@ -13,6 +21,8 @@
generic-extlinux-compatible.enable = true; generic-extlinux-compatible.enable = true;
}; };
documentation.enable = false;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
git git
vim vim
@ -33,6 +43,8 @@
extraGroups = [ "wheel" ]; extraGroups = [ "wheel" ];
}; };
networking.interfaces.eth0.useDHCP = true;
boot.kernelPackages = pkgs.linuxPackages_latest; boot.kernelPackages = pkgs.linuxPackages_latest;
fileSystems."/" = { fileSystems."/" = {
@ -40,4 +52,30 @@
fsType = "ext4"; fsType = "ext4";
}; };
nix = {
distributedBuilds = true;
buildMachines = [{
hostName = "thor";
systems = [
"x86_64-linux"
"aarch64-linux"
];
supportedFeatures = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
];
}];
};
programs.ssh.extraConfig = ''
Host thor
HostName thor
Port 22
User riley
IdentitiesOnly yes
IdentityFile /root/.ssh/id_ed25519
'';
} }

42
machines/sif/nginx.nix Normal file
View file

@ -0,0 +1,42 @@
{ ... }:
{
security.acme = {
acceptTerms = true;
email = "me@riley.lgbt";
};
services.nginx.enable = true;
services.nginx.virtualHosts = {
"riley.lgbt" = {
listen = [{
port = 443;
addr = "77.169.117.112";
}];
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:3000";
extraConfig = ''
proxy_set_header Host $host;
proxy_buffering off;
'';
};
};
"rly.cx" = {
listen = [{
port = 443;
addr = "77.169.117.112";
}];
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:3000";
extraConfig = ''
proxy_set_header Host $host;
proxy_buffering off;
'';
};
};
};
}

26
machines/sif/website.nix Normal file
View file

@ -0,0 +1,26 @@
{ pkgs, lib, config, ... }:
let secret = config.age.secrets."website-secret".path;
website = pkgs.rustPlatform.buildRustPackage {
pname = "website";
version = "1.0.0";
cargoSha256 = "sha256-sT5BONGXWCpc+455TS1rc/SwNUtc6hXbwUMO/q/tiJ0=";
postPatch = ''
cp ${secret} secret
'';
src = pkgs.fetchgit {
url = "https://im.badat.dev/riley/website.git";
rev = "refs/heads/mistress";
sha256 = "sha256-NiFinpSOE1wokOgBmgpZfMqR9AsENA9t/N84c/Ms2vU=";
};
};
in {
systemd.services."website" = {
enable = true;
description = "Run my website :)";
path = [ website ];
script = "${website}/bin/website";
};
}

4
secrets/secrets.nix Normal file
View file

@ -0,0 +1,4 @@
let commonKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOIXreYQgV6lS0rJ1NlAbgq3Iv5FJ8o1MOr08NhLTGFG";
in {
"website-secret.age".publicKeys = [ commonKey ];
}

View file

@ -0,0 +1,7 @@
age-encryption.org/v1
-> ssh-ed25519 ZEUNCQ D7HH+PR/jwjbb2LKJLVyADJjPvFflRDf61PywFWvpH0
4pEJdyC8Obe7t+S5a2Yn52lfM7klw8eAsfZ6H48ivbg
-> ^MruyW-grease S`2pFl
z8kUgel+3sOrgcGwRRRPcvqCF7X1EmmbR6mUymUbuT0
--- GvdH/J6Aa9dnK5QttDoOQTuZZos7s7xqPvPNJRF5A/k
€[Å4mm!‡Â¾8‰Ü,%<25><>t;´“'áNæª11ò™ÿOQh5×[' ¨_