2021-11-29 04:26:21 -08:00
|
|
|
{
|
2022-03-16 20:01:44 -07:00
|
|
|
description = "Reproducible Environment for anish.lakhwara.com";
|
2021-11-29 04:26:21 -08:00
|
|
|
|
|
|
|
inputs = {
|
|
|
|
nixpkgs.url = "github:nixos/nixpkgs";
|
|
|
|
flake-utils.url = "github:numtide/flake-utils";
|
2022-04-13 02:05:05 -07:00
|
|
|
poonam.url = "git+ssh://gitea@git.sealight.xyz/aynish/kitaab?ref=main";
|
2021-11-29 04:26:21 -08:00
|
|
|
};
|
|
|
|
|
2022-04-13 02:05:05 -07:00
|
|
|
outputs = { self, nixpkgs, flake-utils, poonam }:
|
2022-04-16 01:13:02 -07:00
|
|
|
flake-utils.lib.eachDefaultSystem
|
|
|
|
(system:
|
|
|
|
let
|
|
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
|
|
my-python = pkgs.python3;
|
|
|
|
python-with-my-packages = my-python.withPackages (p: with p; [
|
|
|
|
jinja2
|
|
|
|
click
|
2023-04-02 06:55:39 -07:00
|
|
|
pytest
|
2022-04-16 01:13:02 -07:00
|
|
|
# other python packages you want in the devShell
|
|
|
|
]);
|
|
|
|
python-deps = with pkgs.python3Packages; [
|
|
|
|
# Packages necessary at runtime to run build script
|
|
|
|
jinja2
|
|
|
|
python-ctags3
|
2022-03-16 20:01:44 -07:00
|
|
|
];
|
2022-04-16 01:13:02 -07:00
|
|
|
in
|
|
|
|
{
|
|
|
|
devShell = pkgs.mkShell {
|
|
|
|
buildInputs = [
|
|
|
|
python-with-my-packages
|
|
|
|
pkgs.pandoc
|
2022-07-10 21:13:59 -07:00
|
|
|
self.packages.x86_64-linux.basant
|
2022-04-16 01:13:02 -07:00
|
|
|
];
|
|
|
|
shellHook = ''
|
2022-07-10 21:13:59 -07:00
|
|
|
# PYTHONPATH=${python-with-my-packages}/${python-with-my-packages.sitePackages}
|
2022-04-16 01:13:02 -07:00
|
|
|
# maybe set more env-vars
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
packages.basant = pkgs.python3Packages.buildPythonPackage {
|
|
|
|
pname = "basant";
|
|
|
|
src = ./.;
|
|
|
|
version = "0.1";
|
|
|
|
propagatedBuildInputs = [ python-deps ];
|
|
|
|
doCheck = false;
|
|
|
|
};
|
|
|
|
packages.site = pkgs.stdenv.mkDerivation {
|
|
|
|
name = "anish-lakhwara-site";
|
|
|
|
src = ./.;
|
|
|
|
buildInputs = [ poonam.defaultPackage.${system} self.packages.${system}.basant ];
|
|
|
|
configurePhase = ''
|
2022-07-10 21:13:59 -07:00
|
|
|
cp -r ${poonam.defaultPackage.${system}}/public/ ./
|
|
|
|
'';
|
2022-04-16 01:13:02 -07:00
|
|
|
buildPhase = ''
|
|
|
|
${self.packages.${system}.basant}/bin/main.py
|
|
|
|
'';
|
|
|
|
installPhase = ''
|
|
|
|
mkdir -p $out
|
|
|
|
cp -R output/* $out/
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
defaultPackage = self.packages.${system}.site;
|
2022-04-16 02:33:30 -07:00
|
|
|
}) // {
|
|
|
|
# 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/";
|
2022-04-11 02:57:04 -07:00
|
|
|
|
2022-04-16 02:33:30 -07:00
|
|
|
serviceConfig = config.services."${serverName}";
|
|
|
|
options = {
|
|
|
|
enable = lib.mkEnableOption "${serverName} service";
|
2022-09-20 02:21:22 -07:00
|
|
|
enableSSL = lib.mkEnableOption "${serverName} SSL for Nginx";
|
2022-04-16 02:33:30 -07:00
|
|
|
};
|
|
|
|
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";
|
2022-04-16 01:13:02 -07:00
|
|
|
};
|
2022-04-16 02:33:30 -07:00
|
|
|
startAt = "*00:00:00";
|
|
|
|
path = with pkgs; [ nix ] ++ [ self.packages.${system}.site ];
|
|
|
|
script = ''
|
|
|
|
set -ex
|
2022-04-15 19:27:47 -07:00
|
|
|
|
2022-04-16 02:33:30 -07:00
|
|
|
mkdir -p ${webRoot}
|
|
|
|
ln -sfT ${self.packages.${pkgs.system}.site} ${webRoot}${serverName}
|
|
|
|
'';
|
2022-04-15 19:27:47 -07:00
|
|
|
};
|
2022-04-16 02:33:30 -07:00
|
|
|
# Allow nginx through the firewall
|
|
|
|
networking.firewall.allowedTCPPorts = [ 80 ];
|
|
|
|
services.nginx.enable = true;
|
|
|
|
services.nginx.virtualHosts.${serverName} = {
|
2022-09-20 02:21:22 -07:00
|
|
|
forceSSL = serviceConfig.enableSSL;
|
|
|
|
enableACME = serviceConfig.enableSSL;
|
2022-04-16 02:33:30 -07:00
|
|
|
locations."/" = { root = "${webRoot}${serverName}"; index = "/home.html"; };
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2022-04-16 01:13:02 -07:00
|
|
|
# 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;
|
|
|
|
})
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
2021-11-29 04:26:21 -08:00
|
|
|
}
|