diff options
Diffstat (limited to 'flake.nix')
-rw-r--r-- | flake.nix | 128 |
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 ]; + }; + } + ); +} |