124 lines
4.3 KiB
Nix
124 lines
4.3 KiB
Nix
{
|
|
description = "Reproducible Environment for anish.lakhwara.com";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
poonam.url = "git+ssh://gitea@git.sealight.xyz/aynish/kitaab?ref=main";
|
|
poonam.inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils, poonam }:
|
|
flake-utils.lib.eachDefaultSystem
|
|
(system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
finalPython = pkgs.python3.override { packageOverrides = poonam.overlays.default; self = finalPython; };
|
|
python-with-my-packages = finalPython.withPackages (p: with p; [
|
|
jinja2
|
|
click
|
|
pytest
|
|
poonam
|
|
python-ctags3
|
|
# other python packages you want in the devShell
|
|
]);
|
|
in
|
|
{
|
|
devShell = pkgs.mkShell {
|
|
buildInputs = [
|
|
python-with-my-packages
|
|
pkgs.pandoc
|
|
self.packages.x86_64-linux.basant
|
|
poonam.packages.${system}.poonam
|
|
];
|
|
shellHook = ''
|
|
# PYTHONPATH=${python-with-my-packages}/${python-with-my-packages.sitePackages}
|
|
# maybe set more env-vars
|
|
'';
|
|
};
|
|
packages.basant = with finalPython.pkgs; buildPythonApplication {
|
|
pname = "basant";
|
|
src = ./.;
|
|
version = "0.3";
|
|
propagatedBuildInputs = [ poonam.packages.${system}.poonam jinja2 python-ctags3 ];
|
|
passthru = {
|
|
python = finalPython; # for running?
|
|
};
|
|
doCheck = false;
|
|
};
|
|
packages.site = pkgs.stdenv.mkDerivation {
|
|
name = "anish-lakhwara-site";
|
|
src = ./.;
|
|
buildInputs = [ poonam.defaultPackage.${system} self.packages.${system}.basant ];
|
|
configurePhase = ''
|
|
cp -r ${poonam.defaultPackage.${system}}/public/ ./
|
|
cp -r ${poonam.defaultPackage.${system}}/media/ ./
|
|
'';
|
|
buildPhase = ''
|
|
${self.packages.${system}.basant}/bin/main.py
|
|
'';
|
|
installPhase = ''
|
|
mkdir -p $out
|
|
cp -R output/* $out/
|
|
'';
|
|
};
|
|
defaultPackage = self.packages.${system}.site;
|
|
}) // {
|
|
# also need a module that refreshes this flake.lock, but maybe that shouldn't live here?
|
|
nixosModule = { options, lib, config, pkgs, ... }:
|
|
let
|
|
serverName = "anish.lakhwara.com";
|
|
webRoot = "/var/www/";
|
|
|
|
serviceConfig = config.services."${serverName}";
|
|
options = {
|
|
enable = lib.mkEnableOption "${serverName} service";
|
|
enableSSL = lib.mkEnableOption "${serverName} SSL for Nginx";
|
|
};
|
|
in
|
|
{
|
|
options.services.${serverName} = options;
|
|
config = lib.mkIf serviceConfig.enable {
|
|
systemd.services."source-${serverName}" = {
|
|
description = ''
|
|
https://${serverName} source
|
|
'';
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
};
|
|
startAt = "*00:00:00";
|
|
path = with pkgs; [ nix ] ++ [ self.packages.${system}.site ];
|
|
script = ''
|
|
set -ex
|
|
|
|
mkdir -p ${webRoot}
|
|
ln -sfT ${self.packages.${pkgs.system}.site} ${webRoot}${serverName}
|
|
'';
|
|
};
|
|
# Allow nginx through the firewall
|
|
networking.firewall.allowedTCPPorts = [ 80 ];
|
|
services.nginx.enable = true;
|
|
services.nginx.virtualHosts.${serverName} = {
|
|
forceSSL = serviceConfig.enableSSL;
|
|
enableACME = serviceConfig.enableSSL;
|
|
locations."/" = { root = "${webRoot}${serverName}"; index = "/home.html"; };
|
|
};
|
|
};
|
|
};
|
|
# Test container
|
|
nixosConfigurations."test" = nixpkgs.lib.nixosSystem {
|
|
system = "x86_64-linux";
|
|
modules = [
|
|
self.nixosModule
|
|
({ pkgs, ... }: {
|
|
# Only allow this to boot as a container
|
|
boot.isContainer = true;
|
|
networking.hostName = "basant";
|
|
services."anish.lakhwara.com".enable = true;
|
|
})
|
|
];
|
|
};
|
|
};
|
|
}
|