Added script to export requirements
This commit is contained in:
173
.devenv.flake.nix
Normal file
173
.devenv.flake.nix
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
{
|
||||||
|
inputs =
|
||||||
|
let
|
||||||
|
version = "1.8.2";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
devenv_root = "/home/th3r00t/Projects/dosfrontend";
|
||||||
|
devenv_dotfile = "/home/th3r00t/Projects/dosfrontend/.devenv";
|
||||||
|
devenv_dotfile_path = ./.devenv;
|
||||||
|
devenv_tmpdir = "/run/user/1000";
|
||||||
|
devenv_runtime = "/run/user/1000/devenv-9a894c0";
|
||||||
|
devenv_istesting = false;
|
||||||
|
devenv_direnvrc_latest_version = 1;
|
||||||
|
container_name = null;
|
||||||
|
|
||||||
|
in {
|
||||||
|
git-hooks.url = "github:cachix/git-hooks.nix";
|
||||||
|
git-hooks.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
pre-commit-hooks.follows = "git-hooks";
|
||||||
|
nixpkgs.url = "github:cachix/devenv-nixpkgs/rolling";
|
||||||
|
devenv.url = "github:cachix/devenv?dir=src/modules";
|
||||||
|
} // (if builtins.pathExists (devenv_dotfile_path + "/flake.json")
|
||||||
|
then builtins.fromJSON (builtins.readFile (devenv_dotfile_path + "/flake.json"))
|
||||||
|
else { });
|
||||||
|
|
||||||
|
outputs = { nixpkgs, ... }@inputs:
|
||||||
|
let
|
||||||
|
version = "1.8.2";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
devenv_root = "/home/th3r00t/Projects/dosfrontend";
|
||||||
|
devenv_dotfile = "/home/th3r00t/Projects/dosfrontend/.devenv";
|
||||||
|
devenv_dotfile_path = ./.devenv;
|
||||||
|
devenv_tmpdir = "/run/user/1000";
|
||||||
|
devenv_runtime = "/run/user/1000/devenv-9a894c0";
|
||||||
|
devenv_istesting = false;
|
||||||
|
devenv_direnvrc_latest_version = 1;
|
||||||
|
container_name = null;
|
||||||
|
|
||||||
|
devenv =
|
||||||
|
if builtins.pathExists (devenv_dotfile_path + "/devenv.json")
|
||||||
|
then builtins.fromJSON (builtins.readFile (devenv_dotfile_path + "/devenv.json"))
|
||||||
|
else { };
|
||||||
|
getOverlays = inputName: inputAttrs:
|
||||||
|
map
|
||||||
|
(overlay:
|
||||||
|
let
|
||||||
|
input = inputs.${inputName} or (throw "No such input `${inputName}` while trying to configure overlays.");
|
||||||
|
in
|
||||||
|
input.overlays.${overlay} or (throw "Input `${inputName}` has no overlay called `${overlay}`. Supported overlays: ${nixpkgs.lib.concatStringsSep ", " (builtins.attrNames input.overlays)}"))
|
||||||
|
inputAttrs.overlays or [ ];
|
||||||
|
overlays = nixpkgs.lib.flatten (nixpkgs.lib.mapAttrsToList getOverlays (devenv.inputs or { }));
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
config = {
|
||||||
|
allowUnfree = devenv.nixpkgs.per-platform."${system}".allowUnfree or devenv.nixpkgs.allowUnfree or devenv.allowUnfree or false;
|
||||||
|
allowBroken = devenv.nixpkgs.per-platform."${system}".allowBroken or devenv.nixpkgs.allowBroken or devenv.allowBroken or false;
|
||||||
|
cudaSupport = devenv.nixpkgs.per-platform."${system}".cudaSupport or devenv.nixpkgs.cudaSupport or false;
|
||||||
|
cudaCapabilities = devenv.nixpkgs.per-platform."${system}".cudaCapabilities or devenv.nixpkgs.cudaCapabilities or [ ];
|
||||||
|
permittedInsecurePackages = devenv.nixpkgs.per-platform."${system}".permittedInsecurePackages or devenv.nixpkgs.permittedInsecurePackages or devenv.permittedInsecurePackages or [ ];
|
||||||
|
};
|
||||||
|
inherit overlays;
|
||||||
|
};
|
||||||
|
lib = pkgs.lib;
|
||||||
|
importModule = path:
|
||||||
|
if lib.hasPrefix "./" path
|
||||||
|
then if lib.hasSuffix ".nix" path
|
||||||
|
then ./. + (builtins.substring 1 255 path)
|
||||||
|
else ./. + (builtins.substring 1 255 path) + "/devenv.nix"
|
||||||
|
else if lib.hasPrefix "../" path
|
||||||
|
then throw "devenv: ../ is not supported for imports"
|
||||||
|
else
|
||||||
|
let
|
||||||
|
paths = lib.splitString "/" path;
|
||||||
|
name = builtins.head paths;
|
||||||
|
input = inputs.${name} or (throw "Unknown input ${name}");
|
||||||
|
subpath = "/${lib.concatStringsSep "/" (builtins.tail paths)}";
|
||||||
|
devenvpath = "${input}" + subpath;
|
||||||
|
devenvdefaultpath = devenvpath + "/devenv.nix";
|
||||||
|
in
|
||||||
|
if lib.hasSuffix ".nix" devenvpath
|
||||||
|
then devenvpath
|
||||||
|
else if builtins.pathExists devenvdefaultpath
|
||||||
|
then devenvdefaultpath
|
||||||
|
else throw (devenvdefaultpath + " file does not exist for input ${name}.");
|
||||||
|
project = pkgs.lib.evalModules {
|
||||||
|
specialArgs = inputs // { inherit inputs; };
|
||||||
|
modules = [
|
||||||
|
({ config, ... }: {
|
||||||
|
_module.args.pkgs = pkgs.appendOverlays (config.overlays or [ ]);
|
||||||
|
})
|
||||||
|
(inputs.devenv.modules + /top-level.nix)
|
||||||
|
{
|
||||||
|
devenv.cliVersion = version;
|
||||||
|
devenv.root = devenv_root;
|
||||||
|
devenv.dotfile = devenv_dotfile;
|
||||||
|
}
|
||||||
|
({ options, ... }: {
|
||||||
|
config.devenv = lib.mkMerge [
|
||||||
|
(pkgs.lib.optionalAttrs (builtins.hasAttr "tmpdir" options.devenv) {
|
||||||
|
tmpdir = devenv_tmpdir;
|
||||||
|
})
|
||||||
|
(pkgs.lib.optionalAttrs (builtins.hasAttr "isTesting" options.devenv) {
|
||||||
|
isTesting = devenv_istesting;
|
||||||
|
})
|
||||||
|
(pkgs.lib.optionalAttrs (builtins.hasAttr "runtime" options.devenv) {
|
||||||
|
runtime = devenv_runtime;
|
||||||
|
})
|
||||||
|
(pkgs.lib.optionalAttrs (builtins.hasAttr "direnvrcLatestVersion" options.devenv) {
|
||||||
|
direnvrcLatestVersion = devenv_direnvrc_latest_version;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
})
|
||||||
|
(pkgs.lib.optionalAttrs (container_name != null) {
|
||||||
|
container.isBuilding = pkgs.lib.mkForce true;
|
||||||
|
containers.${container_name}.isBuilding = true;
|
||||||
|
})
|
||||||
|
] ++ (map importModule (devenv.imports or [ ])) ++ [
|
||||||
|
(if builtins.pathExists ./devenv.nix then ./devenv.nix else { })
|
||||||
|
(devenv.devenv or { })
|
||||||
|
(if builtins.pathExists ./devenv.local.nix then ./devenv.local.nix else { })
|
||||||
|
(if builtins.pathExists (devenv_dotfile_path + "/cli-options.nix") then import (devenv_dotfile_path + "/cli-options.nix") else { })
|
||||||
|
];
|
||||||
|
};
|
||||||
|
config = project.config;
|
||||||
|
|
||||||
|
options = pkgs.nixosOptionsDoc {
|
||||||
|
options = builtins.removeAttrs project.options [ "_module" ];
|
||||||
|
warningsAreErrors = false;
|
||||||
|
# Unpack Nix types, e.g. literalExpression, mDoc.
|
||||||
|
transformOptions =
|
||||||
|
let isDocType = v: builtins.elem v [ "literalDocBook" "literalExpression" "literalMD" "mdDoc" ];
|
||||||
|
in lib.attrsets.mapAttrs (_: v:
|
||||||
|
if v ? _type && isDocType v._type then
|
||||||
|
v.text
|
||||||
|
else if v ? _type && v._type == "derivation" then
|
||||||
|
v.name
|
||||||
|
else
|
||||||
|
v
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
# Recursively search for outputs in the config.
|
||||||
|
# This is used when not building a specific output by attrpath.
|
||||||
|
build = options: config:
|
||||||
|
lib.concatMapAttrs
|
||||||
|
(name: option:
|
||||||
|
if lib.isOption option then
|
||||||
|
let typeName = option.type.name or "";
|
||||||
|
in
|
||||||
|
if builtins.elem typeName [ "output" "outputOf" ] then
|
||||||
|
{ ${name} = config.${name}; }
|
||||||
|
else { }
|
||||||
|
else
|
||||||
|
let v = build option config.${name};
|
||||||
|
in if v != { } then {
|
||||||
|
${name} = v;
|
||||||
|
} else { }
|
||||||
|
)
|
||||||
|
options;
|
||||||
|
|
||||||
|
systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShell = lib.genAttrs systems (system: config.shell);
|
||||||
|
packages = lib.genAttrs systems (system: {
|
||||||
|
optionsJSON = options.optionsJSON;
|
||||||
|
# deprecated
|
||||||
|
inherit (config) info procfileScript procfileEnv procfile;
|
||||||
|
ci = config.ciDerivation;
|
||||||
|
});
|
||||||
|
devenv = config;
|
||||||
|
build = build project.options project.config;
|
||||||
|
};
|
||||||
|
}
|
||||||
65
.dockerignore
Normal file
65
.dockerignore
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# Git
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
MANIFEST
|
||||||
|
|
||||||
|
# Virtual environments
|
||||||
|
.env
|
||||||
|
.venv
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
env.bak/
|
||||||
|
venv.bak/
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Development
|
||||||
|
devenv.lock
|
||||||
|
devenv.nix
|
||||||
|
.direnv/
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
.pytest_cache/
|
||||||
|
.coverage
|
||||||
|
htmlcov/
|
||||||
|
|
||||||
|
# Local data
|
||||||
|
src/roms.db*
|
||||||
|
roms/
|
||||||
|
data/
|
||||||
|
logs/
|
||||||
|
images/
|
||||||
|
|
||||||
|
# Release builds
|
||||||
|
release/
|
||||||
7
.envrc
Normal file
7
.envrc
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export DIRENV_WARN_TIMEOUT=20s
|
||||||
|
|
||||||
|
eval "$(devenv direnvrc)"
|
||||||
|
|
||||||
|
# The use_devenv function supports passing flags to the devenv command
|
||||||
|
# For example: use devenv --impure --option services.postgres.enable:bool true
|
||||||
|
use devenv
|
||||||
@@ -73,6 +73,12 @@
|
|||||||
"db-create".exec = "cd $REPO_ROOT && python src/migrate.py create";
|
"db-create".exec = "cd $REPO_ROOT && python src/migrate.py create";
|
||||||
"build".exec = "cd $REPO_ROOT && ./build.sh";
|
"build".exec = "cd $REPO_ROOT && ./build.sh";
|
||||||
"backfill-images".exec = "cd $REPO_ROOT && python src/backfill_images.py";
|
"backfill-images".exec = "cd $REPO_ROOT && python src/backfill_images.py";
|
||||||
|
"export-requirements".exec = "pip freeze > requirements.txt";
|
||||||
|
"export-reqs".exec = ''
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
printf "%s\n" '${config.languages.python.venv.requirements}' > requirements.txt
|
||||||
|
echo "Wrote requirements.txt"
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
enterShell = ''
|
enterShell = ''
|
||||||
export REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
|
export REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
|
||||||
|
|||||||
@@ -1,21 +1,24 @@
|
|||||||
# DosVault Python Dependencies
|
pudb
|
||||||
|
ptpython
|
||||||
|
ipython
|
||||||
|
pytest
|
||||||
|
pytest-cov
|
||||||
|
flake8
|
||||||
|
ptpython
|
||||||
|
ipython
|
||||||
|
isort
|
||||||
|
pynvim
|
||||||
|
ruff
|
||||||
|
black
|
||||||
|
sqlalchemy
|
||||||
|
requests
|
||||||
|
fastapi
|
||||||
|
uvicorn
|
||||||
|
jinja2
|
||||||
|
python-multipart
|
||||||
|
bcrypt
|
||||||
|
python-jose
|
||||||
|
passlib
|
||||||
|
alembic
|
||||||
|
aiohttp
|
||||||
|
|
||||||
# Web Framework
|
|
||||||
fastapi>=0.104.0
|
|
||||||
uvicorn[standard]>=0.24.0
|
|
||||||
jinja2>=3.1.2
|
|
||||||
python-multipart>=0.0.6
|
|
||||||
|
|
||||||
# Database
|
|
||||||
sqlalchemy>=2.0.0
|
|
||||||
alembic>=1.12.0
|
|
||||||
|
|
||||||
# Authentication & Security
|
|
||||||
python-jose[cryptography]>=3.3.0
|
|
||||||
bcrypt>=4.0.1
|
|
||||||
|
|
||||||
# HTTP Client
|
|
||||||
aiohttp>=3.9.0
|
|
||||||
|
|
||||||
# Utilities
|
|
||||||
pathlib2>=2.3.7; python_version<"3.4"
|
|
||||||
Reference in New Issue
Block a user