commit for the blog
Signed-off-by: Xe <me@christine.website>
This commit is contained in:
parent
704487ba63
commit
1e692d6117
17
flake.lock
17
flake.lock
|
@ -15,9 +15,26 @@
|
||||||
"type": "indirect"
|
"type": "indirect"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"portable-svc": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1645960986,
|
||||||
|
"narHash": "sha256-XuapDz2dkUAgKaj3L2EUgzXApn6IXGtQVg/TEfhr0w8=",
|
||||||
|
"ref": "main",
|
||||||
|
"rev": "138c25c1c3ee4f7945059e05259d3fe03678e843",
|
||||||
|
"revCount": 5,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://tulpa.dev/cadey/portable-svc.git"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"ref": "main",
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://tulpa.dev/cadey/portable-svc.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
|
"portable-svc": "portable-svc",
|
||||||
"utils": "utils"
|
"utils": "utils"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
43
flake.nix
43
flake.nix
|
@ -4,9 +4,10 @@
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "nixpkgs/nixos-unstable";
|
nixpkgs.url = "nixpkgs/nixos-unstable";
|
||||||
utils.url = "github:numtide/flake-utils";
|
utils.url = "github:numtide/flake-utils";
|
||||||
|
portable-svc.url = "git+https://tulpa.dev/cadey/portable-svc.git?ref=main";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, utils }:
|
outputs = { self, nixpkgs, utils, portable-svc }:
|
||||||
utils.lib.eachSystem [
|
utils.lib.eachSystem [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
"aarch64-linux"
|
"aarch64-linux"
|
||||||
|
@ -14,11 +15,14 @@
|
||||||
"aarch64-darwin"
|
"aarch64-darwin"
|
||||||
] (system:
|
] (system:
|
||||||
let
|
let
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
pkgs = import nixpkgs {
|
||||||
|
overlays = [ portable-svc.overlay ];
|
||||||
|
inherit system;
|
||||||
|
};
|
||||||
version = builtins.substring 0 8 self.lastModifiedDate;
|
version = builtins.substring 0 8 self.lastModifiedDate;
|
||||||
in {
|
in {
|
||||||
defaultPackage = pkgs.buildGoModule {
|
defaultPackage = pkgs.buildGoModule {
|
||||||
pname = "go-hello";
|
pname = "web-server";
|
||||||
inherit version;
|
inherit version;
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
|
@ -34,9 +38,38 @@
|
||||||
vendorSha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
|
vendorSha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
|
||||||
};
|
};
|
||||||
|
|
||||||
packages = {};
|
packages = {
|
||||||
|
docker = let
|
||||||
|
web = self.defaultPackage.${system};
|
||||||
|
in pkgs.dockerTools.buildLayeredImage {
|
||||||
|
name = web.pname;
|
||||||
|
tag = web.version;
|
||||||
|
contents = [ web ];
|
||||||
|
|
||||||
defaultApp = self.defaultPackage.${system};
|
config = {
|
||||||
|
Cmd = [ "/bin/web-server" ];
|
||||||
|
WorkingDir = "/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
web-service = pkgs.substituteAll {
|
||||||
|
name = "web-server.service";
|
||||||
|
src = ./systemd/web-server.service.in;
|
||||||
|
web = self.defaultPackage.${system};
|
||||||
|
};
|
||||||
|
portable = let
|
||||||
|
web = self.defaultPackage.${system};
|
||||||
|
in pkgs.portableService {
|
||||||
|
inherit (web) version;
|
||||||
|
name = web.pname;
|
||||||
|
description = "A web server";
|
||||||
|
units = [ self.packages.${system}.web-service ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultApp = utils.lib.mkApp {
|
||||||
|
drv = self.defaultPackage.${system};
|
||||||
|
};
|
||||||
|
|
||||||
devShell = pkgs.mkShell {
|
devShell = pkgs.mkShell {
|
||||||
buildInputs = with pkgs; [ go gopls goimports go-tools ];
|
buildInputs = with pkgs; [ go gopls goimports go-tools ];
|
||||||
|
|
3
main.go
3
main.go
|
@ -5,6 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -15,7 +16,7 @@ func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
fmt.Fprintln(w, "hello from nix!")
|
fmt.Fprintf(w, "PORTABLE=%s\n", os.Getenv("PORTABLE"))
|
||||||
})
|
})
|
||||||
|
|
||||||
log.Printf("listening for HTTP on %s", *bindhost)
|
log.Printf("listening for HTTP on %s", *bindhost)
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
[Unit]
|
||||||
|
Description=A web service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
DynamicUser=yes
|
||||||
|
ExecStart=@web@/bin/web-server
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
Loading…
Reference in New Issue