summaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix128
1 files changed, 128 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..be5a1ef
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,128 @@
+{
+ inputs = {
+ flake-utils.url = "github:numtide/flake-utils";
+ naersk.url = "github:nix-community/naersk";
+ mozillapkgs = {
+ url = "github:mozilla/nixpkgs-mozilla";
+ flake = false;
+ };
+ };
+
+ outputs = { self, nixpkgs, flake-utils, naersk, mozillapkgs }:
+ flake-utils.lib.eachDefaultSystem (
+ system: let
+ pkgs = nixpkgs.legacyPackages."${system}";
+ mozilla = pkgs.callPackage (mozillapkgs + "/package-set.nix") {};
+ rust = (mozilla.rustChannelOf {
+ date = "2022-03-31";
+ channel = "nightly";
+ sha256 = "k6wD6/2qNQ7rmIvGi1ddtKSTUXjXFbIr0Sg2mqF2nYg=";
+ }).rust;
+
+ naersk-lib = naersk.lib."${system}".override {
+ cargo = rust;
+ rustc = rust;
+ };
+ in
+ rec {
+ # `nix build`
+ packages.carasite = naersk-lib.buildPackage {
+ pname = "carasite";
+ root = ./.;
+ remapPathPrefix = true;
+ buildInputs = with pkgs; [
+ git
+ ];
+ overrideMain = attrs: {
+ preBuild = ''
+ ls -alR src
+ cp -r templates /build/dummy-src/
+ cp -r statics /build/dummy-src/
+ '';
+
+ postInstall = ''
+ mv $out/bin/site $out/bin/carasite
+
+ cp -rf $src/blog $out/blog
+ cp -rf $src/statics $out/css
+ cp -rf $src/projects $out/projects
+ '';
+
+ };
+ };
+ defaultPackage = packages.carasite;
+
+ # `nix run`
+ apps.carasite = flake-utils.lib.mkApp {
+ drv = packages.carasite;
+ };
+ defaultApp = apps.carasite;
+
+ nixosModules.site = { config, lib, ... }: {
+ options = {
+ cara.services.carasite.enable = lib.mkEnableOption "enable cara's site";
+ cara.services.carasite.domain = lib.mkOption {
+ type = lib.types.str;
+ default = "devcara.com";
+ description = "The domain to use";
+ };
+
+ cara.services.carasite.port = lib.mkOption {
+ type = lib.types.port;
+ default = 3000;
+ description = "The port to bind to";
+ };
+ };
+
+ config = lib.mkIf config.cara.services.carasite.enable {
+ users.users.cara-site = {
+ createHome = true;
+ isSystemUser = true;
+ home = "/var/lib/cara-site";
+ group = "cara-site";
+ };
+
+ systemd.services.cara-site = {
+ wantedBy = [ "multi-user.target" ];
+ environment = {
+ PORT = "${config.cara.services.carasite.port}";
+ };
+ serviceConfig = {
+ User = "cara-site";
+ Group = "cara-site";
+ Restart = "always";
+ WorkingDirectory = "/var/lib/cara-site";
+ script = let site = defaultPackage;
+ in ''
+ export PORT=${config.cara.services.carasite.port}
+ cd ${site}
+ exec ${site/bin/xesite}
+ '';
+ };
+ };
+
+ services.nginx = {
+ enable = true;
+ recommendedProxySettings = true;
+ recommendedTlsSettings = true;
+ virtualHosts."${config.cara.services.carasite.domain}" = {
+ addSSL = true;
+ forceSSL = true;
+ enableACME = true;
+
+ locations."/" = {
+ proxyPass = "http://127.0.0.1:${config.cara.services.carasite.port}";
+ };
+ };
+ };
+ };
+ };
+
+
+ # `nix develop`
+ devShell = pkgs.mkShell {
+ nativeBuildInputs = with pkgs; [ rustc cargo ];
+ };
+ }
+ );
+}