Reorganize repository
This commit is contained in:
parent
da1824edb6
commit
0fc6c32a47
124 changed files with 16295 additions and 1229 deletions
64
modules/services/accentor/Gemfile
Normal file
64
modules/services/accentor/Gemfile
Normal file
|
@ -0,0 +1,64 @@
|
|||
source 'https://rubygems.org'
|
||||
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
||||
|
||||
ruby '~> 3.0.2'
|
||||
|
||||
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
|
||||
gem 'rails', '~> 6.1'
|
||||
# Use postgresql as the database for Active Record
|
||||
gem 'pg', '>= 1.2.3', '< 2.0'
|
||||
# Use Puma as the app server
|
||||
gem 'puma', '~> 5.3'
|
||||
# Use ActiveModelSerializer for serializing to JSON
|
||||
gem 'active_model_serializers', '~> 0.10'
|
||||
# Use Redis adapter to run Action Cable in production
|
||||
# gem 'redis', '~> 4.0'
|
||||
# Use ActiveModel has_secure_password
|
||||
gem 'bcrypt', '~> 3.1'
|
||||
|
||||
gem 'delayed_job_active_record', '~> 4.1'
|
||||
|
||||
gem 'delayed_cron_job', '~> 0.7'
|
||||
|
||||
gem 'wahwah', '~> 1.1.1'
|
||||
|
||||
gem 'has_scope', '~> 0.8'
|
||||
gem 'pundit', '~> 2.1'
|
||||
gem 'will_paginate', '~> 3.3'
|
||||
|
||||
# Use ActiveStorage variant
|
||||
gem 'image_processing', '~> 1.12.1'
|
||||
|
||||
# Reduces boot times through caching; required in config/boot.rb
|
||||
gem 'bootsnap', '>= 1.4.6', require: false
|
||||
|
||||
# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
|
||||
gem 'rack-cors', '~> 1.1'
|
||||
|
||||
group :test do
|
||||
gem 'codecov', '~> 0.5.2', require: false
|
||||
gem 'mocha', '~> 1.13.0', require: false
|
||||
gem 'simplecov', '~> 0.21', require: false
|
||||
end
|
||||
|
||||
group :development, :test do
|
||||
gem 'factory_bot_rails', '~> 6.2'
|
||||
gem 'faker', '~> 2.18'
|
||||
|
||||
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
|
||||
gem 'byebug', platforms: %i[mri mingw x64_mingw]
|
||||
end
|
||||
|
||||
group :development do
|
||||
gem 'annotate', '~> 3.1' # Remove workaround in lib/tasks/annotate.rb when https://github.com/ctran/annotate_models/issues/696 is fixed
|
||||
gem 'rubocop-minitest', '~> 0.14.0'
|
||||
gem 'rubocop-rails', '~> 2.11'
|
||||
|
||||
gem 'listen', '>= 3.1.5', '< 3.6'
|
||||
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
|
||||
gem 'spring', '~> 2.1'
|
||||
gem 'spring-watcher-listen', '~> 2.0'
|
||||
end
|
||||
|
||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby]
|
262
modules/services/accentor/Gemfile.lock
Normal file
262
modules/services/accentor/Gemfile.lock
Normal file
|
@ -0,0 +1,262 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
actioncable (6.1.4)
|
||||
actionpack (= 6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
actionmailbox (6.1.4)
|
||||
actionpack (= 6.1.4)
|
||||
activejob (= 6.1.4)
|
||||
activerecord (= 6.1.4)
|
||||
activestorage (= 6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
mail (>= 2.7.1)
|
||||
actionmailer (6.1.4)
|
||||
actionpack (= 6.1.4)
|
||||
actionview (= 6.1.4)
|
||||
activejob (= 6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
actionpack (6.1.4)
|
||||
actionview (= 6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
rack (~> 2.0, >= 2.0.9)
|
||||
rack-test (>= 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
||||
actiontext (6.1.4)
|
||||
actionpack (= 6.1.4)
|
||||
activerecord (= 6.1.4)
|
||||
activestorage (= 6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
nokogiri (>= 1.8.5)
|
||||
actionview (6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
||||
active_model_serializers (0.10.12)
|
||||
actionpack (>= 4.1, < 6.2)
|
||||
activemodel (>= 4.1, < 6.2)
|
||||
case_transform (>= 0.2)
|
||||
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
||||
activejob (6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
activerecord (6.1.4)
|
||||
activemodel (= 6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
activestorage (6.1.4)
|
||||
actionpack (= 6.1.4)
|
||||
activejob (= 6.1.4)
|
||||
activerecord (= 6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
marcel (~> 1.0.0)
|
||||
mini_mime (>= 1.1.0)
|
||||
activesupport (6.1.4)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
zeitwerk (~> 2.3)
|
||||
annotate (3.1.1)
|
||||
activerecord (>= 3.2, < 7.0)
|
||||
rake (>= 10.4, < 14.0)
|
||||
ast (2.4.2)
|
||||
bcrypt (3.1.16)
|
||||
bootsnap (1.7.5)
|
||||
msgpack (~> 1.0)
|
||||
builder (3.2.4)
|
||||
byebug (11.1.3)
|
||||
case_transform (0.2)
|
||||
activesupport
|
||||
codecov (0.5.2)
|
||||
simplecov (>= 0.15, < 0.22)
|
||||
concurrent-ruby (1.1.9)
|
||||
crass (1.0.6)
|
||||
delayed_cron_job (0.7.4)
|
||||
delayed_job (>= 4.1)
|
||||
delayed_job (4.1.9)
|
||||
activesupport (>= 3.0, < 6.2)
|
||||
delayed_job_active_record (4.1.6)
|
||||
activerecord (>= 3.0, < 6.2)
|
||||
delayed_job (>= 3.0, < 5)
|
||||
docile (1.3.5)
|
||||
erubi (1.10.0)
|
||||
factory_bot (6.2.0)
|
||||
activesupport (>= 5.0.0)
|
||||
factory_bot_rails (6.2.0)
|
||||
factory_bot (~> 6.2.0)
|
||||
railties (>= 5.0.0)
|
||||
faker (2.18.0)
|
||||
i18n (>= 1.6, < 2)
|
||||
ffi (1.15.0)
|
||||
globalid (0.4.2)
|
||||
activesupport (>= 4.2.0)
|
||||
has_scope (0.8.0)
|
||||
actionpack (>= 5.2)
|
||||
activesupport (>= 5.2)
|
||||
i18n (1.8.10)
|
||||
concurrent-ruby (~> 1.0)
|
||||
image_processing (1.12.1)
|
||||
mini_magick (>= 4.9.5, < 5)
|
||||
ruby-vips (>= 2.0.17, < 3)
|
||||
jsonapi-renderer (0.2.2)
|
||||
listen (3.5.1)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
loofah (2.10.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.7.1)
|
||||
mini_mime (>= 0.1.1)
|
||||
marcel (1.0.1)
|
||||
method_source (1.0.0)
|
||||
mini_magick (4.11.0)
|
||||
mini_mime (1.1.0)
|
||||
mini_portile2 (2.5.3)
|
||||
minitest (5.14.4)
|
||||
mocha (1.13.0)
|
||||
msgpack (1.4.2)
|
||||
nio4r (2.5.7)
|
||||
nokogiri (1.11.7)
|
||||
mini_portile2 (~> 2.5.0)
|
||||
racc (~> 1.4)
|
||||
parallel (1.20.1)
|
||||
parser (3.0.1.1)
|
||||
ast (~> 2.4.1)
|
||||
pg (1.2.3)
|
||||
puma (5.3.2)
|
||||
nio4r (~> 2.0)
|
||||
pundit (2.1.0)
|
||||
activesupport (>= 3.0.0)
|
||||
racc (1.5.2)
|
||||
rack (2.2.3)
|
||||
rack-cors (1.1.1)
|
||||
rack (>= 2.0.0)
|
||||
rack-test (1.1.0)
|
||||
rack (>= 1.0, < 3)
|
||||
rails (6.1.4)
|
||||
actioncable (= 6.1.4)
|
||||
actionmailbox (= 6.1.4)
|
||||
actionmailer (= 6.1.4)
|
||||
actionpack (= 6.1.4)
|
||||
actiontext (= 6.1.4)
|
||||
actionview (= 6.1.4)
|
||||
activejob (= 6.1.4)
|
||||
activemodel (= 6.1.4)
|
||||
activerecord (= 6.1.4)
|
||||
activestorage (= 6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
bundler (>= 1.15.0)
|
||||
railties (= 6.1.4)
|
||||
sprockets-rails (>= 2.0.0)
|
||||
rails-dom-testing (2.0.3)
|
||||
activesupport (>= 4.2.0)
|
||||
nokogiri (>= 1.6)
|
||||
rails-html-sanitizer (1.3.0)
|
||||
loofah (~> 2.3)
|
||||
railties (6.1.4)
|
||||
actionpack (= 6.1.4)
|
||||
activesupport (= 6.1.4)
|
||||
method_source
|
||||
rake (>= 0.13)
|
||||
thor (~> 1.0)
|
||||
rainbow (3.0.0)
|
||||
rake (13.0.3)
|
||||
rb-fsevent (0.10.4)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
regexp_parser (2.1.1)
|
||||
rexml (3.2.5)
|
||||
rubocop (1.18.2)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 3.0.0.0)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
regexp_parser (>= 1.8, < 3.0)
|
||||
rexml
|
||||
rubocop-ast (>= 1.7.0, < 2.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 1.4.0, < 3.0)
|
||||
rubocop-ast (1.7.0)
|
||||
parser (>= 3.0.1.1)
|
||||
rubocop-minitest (0.14.0)
|
||||
rubocop (>= 0.90, < 2.0)
|
||||
rubocop-rails (2.11.2)
|
||||
activesupport (>= 4.2.0)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 1.7.0, < 2.0)
|
||||
ruby-progressbar (1.11.0)
|
||||
ruby-vips (2.0.17)
|
||||
ffi (~> 1.9)
|
||||
simplecov (0.21.2)
|
||||
docile (~> 1.1)
|
||||
simplecov-html (~> 0.11)
|
||||
simplecov_json_formatter (~> 0.1)
|
||||
simplecov-html (0.12.3)
|
||||
simplecov_json_formatter (0.1.2)
|
||||
spring (2.1.1)
|
||||
spring-watcher-listen (2.0.1)
|
||||
listen (>= 2.7, < 4.0)
|
||||
spring (>= 1.2, < 3.0)
|
||||
sprockets (4.0.2)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
sprockets-rails (3.2.2)
|
||||
actionpack (>= 4.0)
|
||||
activesupport (>= 4.0)
|
||||
sprockets (>= 3.0.0)
|
||||
thor (1.1.0)
|
||||
tzinfo (2.0.4)
|
||||
concurrent-ruby (~> 1.0)
|
||||
unicode-display_width (2.0.0)
|
||||
wahwah (1.1.1)
|
||||
websocket-driver (0.7.5)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.5)
|
||||
will_paginate (3.3.0)
|
||||
zeitwerk (2.4.2)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
active_model_serializers (~> 0.10)
|
||||
annotate (~> 3.1)
|
||||
bcrypt (~> 3.1)
|
||||
bootsnap (>= 1.4.6)
|
||||
byebug
|
||||
codecov (~> 0.5.2)
|
||||
delayed_cron_job (~> 0.7)
|
||||
delayed_job_active_record (~> 4.1)
|
||||
factory_bot_rails (~> 6.2)
|
||||
faker (~> 2.18)
|
||||
has_scope (~> 0.8)
|
||||
image_processing (~> 1.12.1)
|
||||
listen (>= 3.1.5, < 3.6)
|
||||
mocha (~> 1.13.0)
|
||||
pg (>= 1.2.3, < 2.0)
|
||||
puma (~> 5.3)
|
||||
pundit (~> 2.1)
|
||||
rack-cors (~> 1.1)
|
||||
rails (~> 6.1)
|
||||
rubocop-minitest (~> 0.14.0)
|
||||
rubocop-rails (~> 2.11)
|
||||
simplecov (~> 0.21)
|
||||
spring (~> 2.1)
|
||||
spring-watcher-listen (~> 2.0)
|
||||
tzinfo-data
|
||||
wahwah (~> 1.1.1)
|
||||
will_paginate (~> 3.3)
|
||||
|
||||
RUBY VERSION
|
||||
ruby 3.0.2p107
|
||||
|
||||
BUNDLED WITH
|
||||
2.2.22
|
184
modules/services/accentor/default.nix
Normal file
184
modules/services/accentor/default.nix
Normal file
|
@ -0,0 +1,184 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
web = pkgs.mkYarnPackage rec {
|
||||
pname = "accentor-web";
|
||||
version = "unstable";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "accentor";
|
||||
repo = "web";
|
||||
rev = "develop";
|
||||
sha256 = "0z5a3jwi93rriq5hvdqv53421jj9pg5651nam6h9krj6zhr93fs3";
|
||||
};
|
||||
packageJSON = ./package.json;
|
||||
yarnLock = ./yarn.lock;
|
||||
yarnNix = ./yarn.nix;
|
||||
buildPhase = ''
|
||||
cp deps/accentor/postcss.config.js .
|
||||
yarn run build
|
||||
'';
|
||||
installPhase = ''
|
||||
cp -r deps/accentor/dist $out
|
||||
rm $out/**/*.map
|
||||
'';
|
||||
distPhase = "true";
|
||||
};
|
||||
api = pkgs.fetchFromGitHub {
|
||||
owner = "accentor";
|
||||
repo = "api";
|
||||
rev = "develop";
|
||||
sha256 = "06amrzlaai7sxpyqjffpympp1fx6wzdr45jxrxcf10xd3k7g7djy";
|
||||
};
|
||||
gems = pkgs.bundlerEnv {
|
||||
name = "accentor-api-env";
|
||||
ruby = pkgs.ruby_3_0;
|
||||
gemfile = ./Gemfile;
|
||||
lockfile = ./Gemfile.lock;
|
||||
gemset = ./gemset.nix;
|
||||
groups = [ "default" "development" "test" "production" ];
|
||||
};
|
||||
env = {
|
||||
DATABASE_URL = "postgresql://%2Frun%2Fpostgresql/accentor";
|
||||
FFMPEG_LOG_LOCATION = "/var/log/accentor/ffmpeg.log";
|
||||
FFMPEG_VERSION_LOCATION = "${config.chvp.dataPrefix}/var/lib/accentor/ffmpeg.version";
|
||||
RAILS_STORAGE_PATH = "${config.chvp.dataPrefix}/var/lib/accentor/storage";
|
||||
RAILS_TRANSCODE_CACHE = "/var/tmp/accentor/transcode_cache";
|
||||
BOOTSNAP_CACHE_DIR = "/var/tmp/accentor/bootsnap";
|
||||
PIDFILE = "/run/accentor/server.pid";
|
||||
RACK_ENV = "production";
|
||||
RAILS_ENV = "production";
|
||||
RAILS_LOG_TO_STDOUT = "yes";
|
||||
};
|
||||
in
|
||||
{
|
||||
options.chvp.services.accentor.enable = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
|
||||
config = lib.mkIf config.chvp.services.accentor.enable {
|
||||
environment.systemPackages = [
|
||||
(pkgs.writeShellScriptBin "accentor-console" ''
|
||||
set -ex
|
||||
export DATABASE_URL="postgresql://%2Frun%2Fpostgresql/accentor"
|
||||
export FFMPEG_LOG_LOCATION="/var/log/accentor/ffmpeg.log"
|
||||
export RAILS_STORAGE_PATH="${config.chvp.dataPrefix}/var/lib/accentor/storage"
|
||||
export FFMPEG_VERSION_LOCATION="${config.chvp.dataPrefix}/var/lib/accentor/ffmpeg.version"
|
||||
export RAILS_TRANSCODE_CACHE="/var/tmp/accentor/transcode_cache"
|
||||
export BOOTSNAP_CACHE_DIR="/var/tmp/accentor/bootsnap"
|
||||
export PIDFILE="/run/accentor/server.pid"
|
||||
export RACK_ENV="production"
|
||||
export RAILS_ENV="production"
|
||||
export RAILS_LOG_TO_STDOUT="yes"
|
||||
cd ${api}
|
||||
${gems}/bin/bundle exec rails c
|
||||
'')
|
||||
];
|
||||
|
||||
security.doas.extraRules = [{
|
||||
users = [ "charlotte" ];
|
||||
noPass = true;
|
||||
cmd = "accentor-console";
|
||||
runAs = "accentor";
|
||||
setEnv = [ "RAILS_MASTER_KEY" ];
|
||||
}];
|
||||
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
dataDir = "${config.chvp.dataPrefix}/var/lib/postgresql/${config.services.postgresql.package.psqlSchema}";
|
||||
ensureUsers = [{
|
||||
name = "accentor";
|
||||
ensurePermissions = { "DATABASE accentor" = "ALL PRIVILEGES"; };
|
||||
}];
|
||||
ensureDatabases = [ "accentor" ];
|
||||
};
|
||||
|
||||
systemd.tmpfiles.rules = [
|
||||
"d /run/accentor 0755 accentor accentor -"
|
||||
"d /var/log/accentor 0755 accentor accentor -"
|
||||
"d /var/tmp/accentor/transcode_cache 0755 accentor accentor -"
|
||||
"d /var/tmp/accentor/bootsnap 0755 accentor accentor -"
|
||||
"d ${config.chvp.dataPrefix}/var/lib/accentor/storage 0755 accentor accentor -"
|
||||
];
|
||||
|
||||
systemd.services = {
|
||||
accentor-api = {
|
||||
after = [ "network.target" "postgresql.service" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = env;
|
||||
path = [ pkgs.ffmpeg gems gems.wrappedRuby ];
|
||||
serviceConfig = {
|
||||
EnvironmentFile = config.age.secrets."passwords/services/accentor".path;
|
||||
Type = "simple";
|
||||
User = "accentor";
|
||||
Group = "accentor";
|
||||
Restart = "on-failure";
|
||||
WorkingDirectory = api;
|
||||
ExecStartPre = [
|
||||
"${gems}/bin/bundle exec rails db:migrate"
|
||||
"${gems}/bin/bundle exec rails ffmpeg:check_version"
|
||||
];
|
||||
ExecStart = "${gems}/bin/bundle exec puma -C ${api}/config/puma.rb";
|
||||
};
|
||||
};
|
||||
} // (builtins.foldl' (x: y: x // y) { } (builtins.genList
|
||||
(n: {
|
||||
"accentor-worker${toString n}" = {
|
||||
after = [ "network.target" "accentor-api.service" "postgresql.service" ];
|
||||
requires = [ "accentor-api.service" "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = env;
|
||||
path = [ pkgs.ffmpeg gems gems.wrappedRuby ];
|
||||
serviceConfig = {
|
||||
EnvironmentFile = config.age.secrets."passwords/services/accentor".path;
|
||||
Type = "simple";
|
||||
User = "accentor";
|
||||
Group = "accentor";
|
||||
Restart = "on-failure";
|
||||
WorkingDirectory = api;
|
||||
ExecStart = "${gems}/bin/bundle exec rails jobs:work";
|
||||
};
|
||||
};
|
||||
|
||||
}) 4));
|
||||
|
||||
age.secrets."passwords/services/accentor" = {
|
||||
file = ../../../secrets/passwords/services/accentor.age;
|
||||
owner = "accentor";
|
||||
};
|
||||
|
||||
users.users.accentor = {
|
||||
group = "accentor";
|
||||
home = "${config.chvp.dataPrefix}/var/lib/accentor";
|
||||
createHome = true;
|
||||
uid = 314;
|
||||
};
|
||||
users.groups.accentor.gid = 314;
|
||||
|
||||
chvp.services.nginx.hosts = [{
|
||||
fqdn = "accentor.vanpetegem.me";
|
||||
options = {
|
||||
root = web;
|
||||
locations = {
|
||||
"/api" = {
|
||||
proxyPass = "http://localhost:3000";
|
||||
extraConfig = ''
|
||||
proxy_set_header X-Forwarded-Ssl on;
|
||||
client_max_body_size 40M;
|
||||
'';
|
||||
};
|
||||
"/rails" = {
|
||||
proxyPass = "http://localhost:3000";
|
||||
extraConfig = ''
|
||||
proxy_set_header X-Forwarded-Ssl on;
|
||||
'';
|
||||
};
|
||||
"/".extraConfig = ''
|
||||
autoindex on;
|
||||
try_files $uri $uri/ /index.html =404;
|
||||
'';
|
||||
};
|
||||
};
|
||||
}];
|
||||
};
|
||||
}
|
954
modules/services/accentor/gemset.nix
Normal file
954
modules/services/accentor/gemset.nix
Normal file
|
@ -0,0 +1,954 @@
|
|||
{
|
||||
actioncable = {
|
||||
dependencies = [ "actionpack" "activesupport" "nio4r" "websocket-driver" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1wswkgwhmfk5j76ar76plhaxna12x0cyf2di57azahlcv88rrwra";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
actionmailbox = {
|
||||
dependencies = [ "actionpack" "activejob" "activerecord" "activestorage" "activesupport" "mail" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "101r0x4lhzp23hksch7z24ajvp549lskxn2cr7pbgr64jjy6v17y";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
actionmailer = {
|
||||
dependencies = [ "actionpack" "actionview" "activejob" "activesupport" "mail" "rails-dom-testing" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0mxqpiwgqam5vfk8wsfyj4dpxq0xqqvfbcwx1i4p9n1ahrx7wv7f";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
actionpack = {
|
||||
dependencies = [ "actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1pj4xz316b3z56vpb8pnrkwj4rlf3hgas5fhddk6yh7ifrl30sc9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
actiontext = {
|
||||
dependencies = [ "actionpack" "activerecord" "activestorage" "activesupport" "nokogiri" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1fn488la8dllfg5zhm74k8y23xl9czrzzs55b9v624j43wjhfxcl";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
actionview = {
|
||||
dependencies = [ "activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1jqybz7h11xkjpqdffb9gphwmd56lms9xqskza00wd2pswxcwkn4";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
active_model_serializers = {
|
||||
dependencies = [ "actionpack" "activemodel" "case_transform" "jsonapi-renderer" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1jjkmrx82rn0d2bhpi6kz2h1s4w7rpk5pj2vcssyc1a2ys12vyhj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.10.12";
|
||||
};
|
||||
activejob = {
|
||||
dependencies = [ "activesupport" "globalid" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0q00vrknnnhmg02nik06ivrmz7hnq5snpy653kdpskvp4c9ys55c";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
activemodel = {
|
||||
dependencies = [ "activesupport" ];
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0xjy8fg7n5wwv29ngvvdf5r6815s5f0knzyswxh8w6z8f8qj5wr7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
activerecord = {
|
||||
dependencies = [ "activemodel" "activesupport" ];
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "18897s9h9kha8vgky1yfq4x91m3p81k6rkrb1fgjlnqnvarh9vg0";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
activestorage = {
|
||||
dependencies = [ "actionpack" "activejob" "activerecord" "activesupport" "marcel" "mini_mime" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "03gb6jbvdzm0xlr2g393jvf980ybjf9zzgspl0p4ixh3lcxxr51w";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
activesupport = {
|
||||
dependencies = [ "concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0kqgywy4cj3h5142dh7pl0xx5nybp25jn0ykk0znziivzks68xdk";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
annotate = {
|
||||
dependencies = [ "activerecord" "rake" ];
|
||||
groups = [ "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1dxrfppwfg13vqmambbs56xjj8qsdgcy58r2yc44vvy3z1g5yflw";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1.1";
|
||||
};
|
||||
ast = {
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.4.2";
|
||||
};
|
||||
bcrypt = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "02r1c3isfchs5fxivbq99gc3aq4vfyn8snhcy707dal1p8qz12qb";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1.16";
|
||||
};
|
||||
bootsnap = {
|
||||
dependencies = [ "msgpack" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "12n09iwpssnsfw9s140ynfxr9psd0xcfx42yqdsk0hq60zhq2nlx";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.7.5";
|
||||
};
|
||||
builder = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.2.4";
|
||||
};
|
||||
byebug = {
|
||||
groups = [ "development" "test" ];
|
||||
platforms = [{
|
||||
engine = "maglev";
|
||||
}
|
||||
{
|
||||
engine = "mingw";
|
||||
}
|
||||
{
|
||||
engine = "mingw";
|
||||
}
|
||||
{
|
||||
engine = "ruby";
|
||||
}];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0nx3yjf4xzdgb8jkmk2344081gqr22pgjqnmjg2q64mj5d6r9194";
|
||||
type = "gem";
|
||||
};
|
||||
version = "11.1.3";
|
||||
};
|
||||
case_transform = {
|
||||
dependencies = [ "activesupport" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0fzyws6spn5arqf6q604dh9mrj84a36k5hsc8z7jgcpfvhc49bg2";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.2";
|
||||
};
|
||||
codecov = {
|
||||
dependencies = [ "simplecov" ];
|
||||
groups = [ "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1svgz4469ph5jlnnwfrwrrfi8c05cnis4bib769pjjjy9ax4s3zh";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.5.2";
|
||||
};
|
||||
concurrent-ruby = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.9";
|
||||
};
|
||||
crass = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0pfl5c0pyqaparxaqxi6s4gfl21bdldwiawrc0aknyvflli60lfw";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.6";
|
||||
};
|
||||
delayed_cron_job = {
|
||||
dependencies = [ "delayed_job" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1qsf7csnhyk787yx88ilsqris3h0gga3g6ri31hccdfbdab1f33a";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.7.4";
|
||||
};
|
||||
delayed_job = {
|
||||
dependencies = [ "activesupport" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "19ym3jw2jj1pxm6p22x2mpf69sdxiw07ddr69v92ccgg6d7q87rh";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.1.9";
|
||||
};
|
||||
delayed_job_active_record = {
|
||||
dependencies = [ "activerecord" "delayed_job" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0n6wjvk0yfkp1z19kvma7piasw1xgjh5ls51sf24c8g1jlmkmvdh";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.1.6";
|
||||
};
|
||||
docile = {
|
||||
groups = [ "default" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1bpdrsdqwv80qqc3f4xxzpii13lx9mlx3zay4bnmmscrx8c0p63z";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.3.5";
|
||||
};
|
||||
erubi = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "09l8lz3j00m898li0yfsnb6ihc63rdvhw3k5xczna5zrjk104f2l";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.10.0";
|
||||
};
|
||||
factory_bot = {
|
||||
dependencies = [ "activesupport" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "04vxmjr200akcil9fqxc9ghbb9q0lyrh2q03xxncycd5vln910fi";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.2.0";
|
||||
};
|
||||
factory_bot_rails = {
|
||||
dependencies = [ "factory_bot" "railties" ];
|
||||
groups = [ "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "18fhcihkc074gk62iwqgbdgc3ymim4fm0b4p3ipffy5hcsb9d2r7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.2.0";
|
||||
};
|
||||
faker = {
|
||||
dependencies = [ "i18n" ];
|
||||
groups = [ "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1hwir9b9zy0asy0vap7zfqv75lbws4a1pmh74lhqd2rndv32vfc5";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.18.0";
|
||||
};
|
||||
ffi = {
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0nq1fb3vbfylccwba64zblxy96qznxbys5900wd7gm9bpplmf432";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.15.0";
|
||||
};
|
||||
globalid = {
|
||||
dependencies = [ "activesupport" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1zkxndvck72bfw235bd9nl2ii0lvs5z88q14706cmn702ww2mxv1";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.4.2";
|
||||
};
|
||||
has_scope = {
|
||||
dependencies = [ "actionpack" "activesupport" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "00y4jr5fd5lf1b59wxaf5j04afxd4i0sdx6wh51w1ha5njqn7256";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.8.0";
|
||||
};
|
||||
i18n = {
|
||||
dependencies = [ "concurrent-ruby" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0g2fnag935zn2ggm5cn6k4s4xvv53v2givj1j90szmvavlpya96a";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.8.10";
|
||||
};
|
||||
image_processing = {
|
||||
dependencies = [ "mini_magick" "ruby-vips" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1778lv4lpwk9ffm0zy7w59gzchq19f22a5gfrdk6qa7l9vx89h11";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.12.1";
|
||||
};
|
||||
jsonapi-renderer = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0ys4drd0k9rw5ixf8n8fx8v0pjh792w4myh0cpdspd317l1lpi5m";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.2.2";
|
||||
};
|
||||
listen = {
|
||||
dependencies = [ "rb-fsevent" "rb-inotify" ];
|
||||
groups = [ "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0h2v34xhi30w0d9gfzds2w6v89grq2gkpgvmdj9m8x1ld1845xnj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.5.1";
|
||||
};
|
||||
loofah = {
|
||||
dependencies = [ "crass" "nokogiri" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "19vkaazjqyq7yj5ah8rpr4vl9n4mg95scdr5im93akhd5bjvkkly";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.10.0";
|
||||
};
|
||||
mail = {
|
||||
dependencies = [ "mini_mime" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.7.1";
|
||||
};
|
||||
marcel = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0bp001p687nsa4a8sp3q1iv8pfhs24w7s3avychjp64sdkg6jxq3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.1";
|
||||
};
|
||||
method_source = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.0";
|
||||
};
|
||||
mini_magick = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1aj604x11d9pksbljh0l38f70b558rhdgji1s9i763hiagvvx2hs";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.11.0";
|
||||
};
|
||||
mini_mime = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0kb7jq3wjgckmkzna799y5qmvn6vg52878bkgw35qay6lflcrwih";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.0";
|
||||
};
|
||||
mini_portile2 = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1ad0mli9rc0f17zw4ibp24dbj1y39zkykijsjmnzl4gwpg5s0j6k";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.5.3";
|
||||
};
|
||||
minitest = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "19z7wkhg59y8abginfrm2wzplz7py3va8fyngiigngqvsws6cwgl";
|
||||
type = "gem";
|
||||
};
|
||||
version = "5.14.4";
|
||||
};
|
||||
mocha = {
|
||||
groups = [ "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "15s53ggsykk69kxqvs4416s8yxdhz6caggva55n8sjgy4ixzwp10";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.13.0";
|
||||
};
|
||||
msgpack = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "06iajjyhx0rvpn4yr3h1hc4w4w3k59bdmfhxnjzzh76wsrdxxrc6";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.4.2";
|
||||
};
|
||||
nio4r = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "00fwz0qq7agd2xkdz02i8li236qvwhma3p0jdn5bdvc21b7ydzd5";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.5.7";
|
||||
};
|
||||
nokogiri = {
|
||||
dependencies = [ "mini_portile2" "racc" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1vrn31385ix5k9b0yalnlzv360isv6dincbcvi8psllnwz4sjxj9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.11.7";
|
||||
};
|
||||
parallel = {
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0055br0mibnqz0j8wvy20zry548dhkakws681bhj3ycb972awkzd";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.20.1";
|
||||
};
|
||||
parser = {
|
||||
dependencies = [ "ast" ];
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1pxsi1i5z506xfzhiyavlasf8777h55ab40phvp7pfv9npmd5pnj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.1.1";
|
||||
};
|
||||
pg = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "13mfrysrdrh8cka1d96zm0lnfs59i5x2g6ps49r2kz5p3q81xrzj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.3";
|
||||
};
|
||||
puma = {
|
||||
dependencies = [ "nio4r" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0lmaq05a257m9588a81wql3a5p039f221f0dmq57bm2qjwxydjmj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "5.3.2";
|
||||
};
|
||||
pundit = {
|
||||
dependencies = [ "activesupport" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "18kwm5rkazb89yf792y3fxqihcxw2vdy7k1w542s4hg82ibfpyx3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.1.0";
|
||||
};
|
||||
racc = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.2";
|
||||
};
|
||||
rack = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0i5vs0dph9i5jn8dfc6aqd6njcafmb20rwqngrf759c9cvmyff16";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.2.3";
|
||||
};
|
||||
rack-cors = {
|
||||
dependencies = [ "rack" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0jvs0mq8jrsz86jva91mgql16daprpa3qaipzzfvngnnqr5680j7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.1";
|
||||
};
|
||||
rack-test = {
|
||||
dependencies = [ "rack" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.0";
|
||||
};
|
||||
rails = {
|
||||
dependencies = [ "actioncable" "actionmailbox" "actionmailer" "actionpack" "actiontext" "actionview" "activejob" "activemodel" "activerecord" "activestorage" "activesupport" "railties" "sprockets-rails" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0k3d3acac2qn9fg185z3y79nvg4ghr4lyhqiz6mbwlsd7r2nd8mh";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
rails-dom-testing = {
|
||||
dependencies = [ "activesupport" "nokogiri" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.3";
|
||||
};
|
||||
rails-html-sanitizer = {
|
||||
dependencies = [ "loofah" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1icpqmxbppl4ynzmn6dx7wdil5hhq6fz707m9ya6d86c7ys8sd4f";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.3.0";
|
||||
};
|
||||
railties = {
|
||||
dependencies = [ "actionpack" "activesupport" "method_source" "rake" "thor" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0hwp0qwkphp3fvbsq6ljp8s99v621si9bgqihysz5bv1d1z52mm4";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.4";
|
||||
};
|
||||
rainbow = {
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.0";
|
||||
};
|
||||
rake = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1iik52mf9ky4cgs38fp2m8r6skdkq1yz23vh18lk95fhbcxb6a67";
|
||||
type = "gem";
|
||||
};
|
||||
version = "13.0.3";
|
||||
};
|
||||
rb-fsevent = {
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1k9bsj7ni0g2fd7scyyy1sk9dy2pg9akniahab0iznvjmhn54h87";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.10.4";
|
||||
};
|
||||
rb-inotify = {
|
||||
dependencies = [ "ffi" ];
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.10.1";
|
||||
};
|
||||
regexp_parser = {
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0vg7imjnfcqjx7kw94ccj5r78j4g190cqzi1i59sh4a0l940b9cr";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.1.1";
|
||||
};
|
||||
rexml = {
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.2.5";
|
||||
};
|
||||
rubocop = {
|
||||
dependencies = [ "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width" ];
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1hi5zxn7wk8l6x7rs2wi7iqv87b1h4dx63m1pqzgibd3fw4rhibb";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.18.2";
|
||||
};
|
||||
rubocop-ast = {
|
||||
dependencies = [ "parser" ];
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1hnrfy928mwpa0ippqs4s8xwghwwp5h853naphgqxcd53l33chlv";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.7.0";
|
||||
};
|
||||
rubocop-minitest = {
|
||||
dependencies = [ "rubocop" ];
|
||||
groups = [ "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1sf8s0iiwzv7k7vk3gb7483anf5gxh7wp7jf7d26ga5z4lzrsfd8";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.14.0";
|
||||
};
|
||||
rubocop-rails = {
|
||||
dependencies = [ "activesupport" "rack" "rubocop" ];
|
||||
groups = [ "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0js9g5l5i29519qvi7pslhzjvsi6x05ab8wlrx9nb82p2l14rgq7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.11.2";
|
||||
};
|
||||
ruby-progressbar = {
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "02nmaw7yx9kl7rbaan5pl8x5nn0y4j5954mzrkzi9i3dhsrps4nc";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.11.0";
|
||||
};
|
||||
ruby-vips = {
|
||||
dependencies = [ "ffi" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0lk124dixshf8mmrjpsy9avnaygni3cwki25g8nm5py4d2f5fwwa";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.17";
|
||||
};
|
||||
simplecov = {
|
||||
dependencies = [ "docile" "simplecov-html" "simplecov_json_formatter" ];
|
||||
groups = [ "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1hrv046jll6ad1s964gsmcq4hvkr3zzr6jc7z1mns22mvfpbc3cr";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.21.2";
|
||||
};
|
||||
simplecov-html = {
|
||||
groups = [ "default" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0yx01bxa8pbf9ip4hagqkp5m0mqfnwnw2xk8kjraiywz4lrss6jb";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.12.3";
|
||||
};
|
||||
simplecov_json_formatter = {
|
||||
groups = [ "default" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0cl3j7p3b5q7sxsx1va63c8imc5x6g99xablz08qrmqhpi0d6g6j";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.1.2";
|
||||
};
|
||||
spring = {
|
||||
groups = [ "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1x2wz1y2b0kp7mlk9k8zkl39rddk2l3x34b7dar3bh3axd1cs30d";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.1.1";
|
||||
};
|
||||
spring-watcher-listen = {
|
||||
dependencies = [ "listen" "spring" ];
|
||||
groups = [ "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1ybz9nsngfz4psvgnbr3gdk5ibqqhq47lsjkwh5yq4f8brpr10yz";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.1";
|
||||
};
|
||||
sprockets = {
|
||||
dependencies = [ "concurrent-ruby" "rack" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0ikgwbl6jv3frfiy3xhg5yxw9d0064rgzghar1rg391xmrc4gm38";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.0.2";
|
||||
};
|
||||
sprockets-rails = {
|
||||
dependencies = [ "actionpack" "activesupport" "sprockets" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0mwmz36265646xqfyczgr1mhkm1hfxgxxvgdgr4xfcbf2g72p1k2";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.2.2";
|
||||
};
|
||||
thor = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "18yhlvmfya23cs3pvhr1qy38y41b6mhr5q9vwv5lrgk16wmf3jna";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.0";
|
||||
};
|
||||
tzinfo = {
|
||||
dependencies = [ "concurrent-ruby" ];
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "10qp5x7f9hvlc0psv9gsfbxg4a7s0485wsbq1kljkxq94in91l4z";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.4";
|
||||
};
|
||||
unicode-display_width = {
|
||||
groups = [ "default" "development" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1bilbnc8j6jkb59lrf177i3p1pdyxll0n8400hzqr35vl3r3kv2m";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.0";
|
||||
};
|
||||
wahwah = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0dk750bhy0l3adnzkkklyima816k7shi54g9byrlw2mq2nnw5s5i";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.1";
|
||||
};
|
||||
websocket-driver = {
|
||||
dependencies = [ "websocket-extensions" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0a3bwxd9v3ghrxzjc4vxmf4xa18c6m4xqy5wb0yk5c6b9psc7052";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.7.5";
|
||||
};
|
||||
websocket-extensions = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0hc2g9qps8lmhibl5baa91b4qx8wqw872rgwagml78ydj8qacsqw";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.1.5";
|
||||
};
|
||||
will_paginate = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "10qk4mf3rfc0vr26j0ba6vcz7407rdjfn13ph690pkzr94rv8bay";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.3.0";
|
||||
};
|
||||
zeitwerk = {
|
||||
groups = [ "default" "development" "test" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1746czsjarixq0x05f7p3hpzi38ldg6wxnxxw74kbjzh1sdjgmpl";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.4.2";
|
||||
};
|
||||
}
|
45
modules/services/accentor/package.json
Normal file
45
modules/services/accentor/package.json
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"name": "accentor",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint",
|
||||
"i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'"
|
||||
},
|
||||
"dependencies": {
|
||||
"@mdi/font": "^5.9.55",
|
||||
"@mdi/svg": "^5.9.55",
|
||||
"fetch-retry": "^4.1.1",
|
||||
"roboto-fontface": "^0.10.0",
|
||||
"vue": "^2.6.14",
|
||||
"vue-i18n": "^8.24.5",
|
||||
"vue-meta": "^2.4.0",
|
||||
"vue-router": "^3.5.2",
|
||||
"vuedraggable": "^2.24.3",
|
||||
"vuetify": "^2.5.6",
|
||||
"vuex": "^3.6.2",
|
||||
"vuex-persistedstate": "^3.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@intlify/vue-i18n-loader": "^1.1.0",
|
||||
"@vue/cli-plugin-babel": "^4.5.13",
|
||||
"@vue/cli-plugin-eslint": "^4.5.13",
|
||||
"@vue/cli-service": "^4.5.13",
|
||||
"@vue/eslint-config-prettier": "^6.0.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"eslint": "^6.8.0",
|
||||
"eslint-plugin-prettier": "^3.4.0",
|
||||
"eslint-plugin-vue": "^7.12.1",
|
||||
"eslint-plugin-vuetify": "^1.0.1",
|
||||
"prettier": "^2.3.2",
|
||||
"sass": "^1.35.1",
|
||||
"sass-loader": "^10.1.1",
|
||||
"vue-cli-plugin-i18n": "^2.1.0",
|
||||
"vue-cli-plugin-vuetify": "^2.4.1",
|
||||
"vue-template-compiler": "^2.6.14",
|
||||
"vuetify-loader": "^1.7.2",
|
||||
"webpack": "^4.46.0"
|
||||
}
|
||||
}
|
8
modules/services/accentor/update.sh
Executable file
8
modules/services/accentor/update.sh
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -p curl yarn2nix bundix -i bash
|
||||
curl -L -O https://github.com/accentor/api/raw/develop/Gemfile
|
||||
curl -L -O https://github.com/accentor/api/raw/develop/Gemfile.lock
|
||||
curl -L -O https://github.com/accentor/web/raw/develop/package.json
|
||||
curl -L -O https://github.com/accentor/web/raw/develop/yarn.lock
|
||||
yarn2nix --lockfile yarn.lock --no-patch > yarn.nix
|
||||
bundix -l
|
8784
modules/services/accentor/yarn.lock
Normal file
8784
modules/services/accentor/yarn.lock
Normal file
File diff suppressed because it is too large
Load diff
9477
modules/services/accentor/yarn.nix
Normal file
9477
modules/services/accentor/yarn.nix
Normal file
File diff suppressed because it is too large
Load diff
21
modules/services/containers/default.nix
Normal file
21
modules/services/containers/default.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
options.chvp.services.containers = {
|
||||
enable = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
externalInterface = lib.mkOption {
|
||||
example = "eno3";
|
||||
};
|
||||
};
|
||||
config = {
|
||||
networking.nat = lib.mkIf config.chvp.services.containers.enable {
|
||||
enable = true;
|
||||
enableIPv6 = true;
|
||||
internalInterfaces = [ "ve-+" ];
|
||||
externalInterface = config.chvp.services.containers.externalInterface;
|
||||
};
|
||||
};
|
||||
}
|
20
modules/services/data-access/config.nix
Normal file
20
modules/services/data-access/config.nix
Normal file
|
@ -0,0 +1,20 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
users.users.data = {
|
||||
isNormalUser = true;
|
||||
home = "/home/data";
|
||||
description = "Data Access";
|
||||
uid = 1000;
|
||||
group = "users";
|
||||
};
|
||||
security.sudo.enable = false;
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
permitRootLogin = "no";
|
||||
hostKeys = [
|
||||
{ bits = 4096; path = "/run/secrets/ssh_host_rsa_key"; type = "rsa"; }
|
||||
{ path = "/run/secrets/ssh_host_ed25519_key"; type = "ed25519"; }
|
||||
];
|
||||
};
|
||||
}
|
BIN
modules/services/data-access/config.secret.nix
Normal file
BIN
modules/services/data-access/config.secret.nix
Normal file
Binary file not shown.
67
modules/services/data-access/default.nix
Normal file
67
modules/services/data-access/default.nix
Normal file
|
@ -0,0 +1,67 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
{
|
||||
imports = [ ./secret.nix ];
|
||||
|
||||
options.chvp.services.data-access.enable = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
|
||||
config = lib.mkIf config.chvp.services.data-access.enable {
|
||||
chvp.services = {
|
||||
containers.enable = true;
|
||||
nginx.hosts = [
|
||||
{
|
||||
fqdn = "data.vanpetegem.me";
|
||||
options = {
|
||||
default = true;
|
||||
basicAuthFile = config.age.secrets."passwords/services/data-basic-auth".path;
|
||||
root = "/srv/data";
|
||||
locations = {
|
||||
"/".extraConfig = ''
|
||||
autoindex on;
|
||||
'';
|
||||
"/public".extraConfig = ''
|
||||
autoindex on;
|
||||
auth_basic off;
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
containers.data-access = {
|
||||
ephemeral = true;
|
||||
autoStart = true;
|
||||
bindMounts = {
|
||||
"/home/data/data" = {
|
||||
hostPath = "/srv/data";
|
||||
isReadOnly = false;
|
||||
};
|
||||
"/run/secrets" = {
|
||||
hostPath = "/run/secrets/data-access";
|
||||
isReadOnly = true;
|
||||
};
|
||||
};
|
||||
privateNetwork = true;
|
||||
hostAddress = "192.168.100.10";
|
||||
hostAddress6 = "fc00::1";
|
||||
localAddress = "192.168.100.11";
|
||||
localAddress6 = "fc00::2";
|
||||
config = { ... }: {
|
||||
imports = [ ./config.nix ./config.secret.nix ];
|
||||
};
|
||||
};
|
||||
|
||||
age.secrets."data-access/ssh_host_rsa_key".file = ../../../secrets/data-access/ssh_host_rsa_key.age;
|
||||
age.secrets."data-access/ssh_host_rsa_key.pub".file = ../../../secrets/data-access/ssh_host_rsa_key.pub.age;
|
||||
age.secrets."data-access/ssh_host_ed25519_key".file = ../../../secrets/data-access/ssh_host_ed25519_key.age;
|
||||
age.secrets."data-access/ssh_host_ed25519_key.pub".file = ../../../secrets/data-access/ssh_host_ed25519_key.pub.age;
|
||||
age.secrets."passwords/services/data-basic-auth" = {
|
||||
file = ../../../secrets/passwords/services/data-basic-auth.age;
|
||||
owner = "nginx";
|
||||
};
|
||||
};
|
||||
}
|
BIN
modules/services/data-access/secret.nix
Normal file
BIN
modules/services/data-access/secret.nix
Normal file
Binary file not shown.
13
modules/services/default.nix
Normal file
13
modules/services/default.nix
Normal file
|
@ -0,0 +1,13 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./accentor
|
||||
./containers
|
||||
./data-access
|
||||
./deluge
|
||||
./nextcloud
|
||||
./nginx
|
||||
./syncthing
|
||||
];
|
||||
}
|
67
modules/services/deluge/default.nix
Normal file
67
modules/services/deluge/default.nix
Normal file
|
@ -0,0 +1,67 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
options.chvp.services.deluge = {
|
||||
enable = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
count = lib.mkOption {
|
||||
default = 1;
|
||||
example = 6;
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf config.chvp.services.deluge.enable {
|
||||
chvp.services.nginx.hosts = builtins.genList
|
||||
(n: {
|
||||
fqdn = "del${toString (n + 1)}.vanpetegem.me";
|
||||
basicProxy = "http://localhost:${toString (8112 + n)}";
|
||||
})
|
||||
config.chvp.services.deluge.count;
|
||||
|
||||
networking.firewall = {
|
||||
allowedTCPPortRanges = [
|
||||
{ from = 60000; to = 60000 + config.chvp.services.deluge.count - 1; }
|
||||
{ from = 58846; to = 58846 + config.chvp.services.deluge.count - 1; }
|
||||
];
|
||||
};
|
||||
|
||||
systemd.services = builtins.foldl' (x: y: x // y) { } (builtins.genList
|
||||
(n:
|
||||
let num = toString (n + 1); in
|
||||
{
|
||||
"del${num}" = {
|
||||
after = [ "network-online.target" ];
|
||||
requires = [ "network-online.target" ];
|
||||
description = "Deluge daemon ${num}";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ pkgs.deluge ];
|
||||
serviceConfig = {
|
||||
ExecStart = ''
|
||||
${pkgs.deluge}/bin/deluged --do-not-daemonize --config /data/var/lib/deluge/del${toString (n + 1)}
|
||||
'';
|
||||
Restart = "on-success";
|
||||
User = "charlotte";
|
||||
Group = "users";
|
||||
UMask = "022";
|
||||
};
|
||||
};
|
||||
"del${num}-web" = {
|
||||
after = [ "network.target" "del${num}.service" ];
|
||||
requires = [ "del${num}.service" ];
|
||||
description = "Deluge Web UI for daemon ${num}";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ pkgs.deluge ];
|
||||
serviceConfig = {
|
||||
ExecStart = ''
|
||||
${pkgs.deluge}/bin/deluge-web --do-not-daemonize --config /data/var/lib/deluge/del${toString (n + 1)} --port ${toString (8112 + n)}
|
||||
'';
|
||||
User = "charlotte";
|
||||
Group = "users";
|
||||
};
|
||||
};
|
||||
})
|
||||
config.chvp.services.deluge.count);
|
||||
};
|
||||
}
|
49
modules/services/nextcloud/default.nix
Normal file
49
modules/services/nextcloud/default.nix
Normal file
|
@ -0,0 +1,49 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
options.chvp.services.nextcloud.enable = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
config = lib.mkIf config.chvp.services.nextcloud.enable {
|
||||
services = {
|
||||
nextcloud = {
|
||||
home = "${config.chvp.dataPrefix}/var/lib/nextcloud";
|
||||
https = true;
|
||||
hostName = "nextcloud.vanpetegem.me";
|
||||
enable = true;
|
||||
autoUpdateApps.enable = true;
|
||||
package = pkgs.nextcloud21;
|
||||
config = {
|
||||
dbuser = "nextcloud";
|
||||
dbname = "nextcloud";
|
||||
dbtype = "pgsql";
|
||||
dbhost = "/run/postgresql";
|
||||
adminuser = "admin";
|
||||
adminpassFile = config.age.secrets."passwords/services/nextcloud-admin".path;
|
||||
};
|
||||
};
|
||||
nginx.virtualHosts."nextcloud.vanpetegem.me" = {
|
||||
forceSSL = true;
|
||||
useACMEHost = "vanpetegem.me";
|
||||
};
|
||||
postgresql = {
|
||||
enable = true;
|
||||
dataDir = "${config.chvp.dataPrefix}/var/lib/postgresql/${config.services.postgresql.package.psqlSchema}";
|
||||
ensureDatabases = [ "nextcloud" ];
|
||||
ensureUsers = [{
|
||||
name = "nextcloud";
|
||||
ensurePermissions = { "DATABASE nextcloud" = "ALL PRIVILEGES"; };
|
||||
}];
|
||||
};
|
||||
};
|
||||
age.secrets."passwords/services/nextcloud-admin" = {
|
||||
file = ../../../secrets/passwords/services/nextcloud-admin.age;
|
||||
owner = "nextcloud";
|
||||
};
|
||||
systemd.services."nextcloud-setup" = {
|
||||
requires = [ "postgresql.service" ];
|
||||
after = [ "postgresql.service" ];
|
||||
};
|
||||
};
|
||||
}
|
95
modules/services/nginx/default.nix
Normal file
95
modules/services/nginx/default.nix
Normal file
|
@ -0,0 +1,95 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
{
|
||||
options.chvp.services.nginx = {
|
||||
enable = lib.mkOption {
|
||||
readOnly = true;
|
||||
default = (builtins.length config.chvp.services.nginx.hosts) > 0;
|
||||
};
|
||||
hosts = lib.mkOption {
|
||||
default = [ ];
|
||||
example = [
|
||||
{
|
||||
fqdn = "data.vanpetegem.me";
|
||||
options = {
|
||||
default = true;
|
||||
root = "/srv/data";
|
||||
locations = {
|
||||
"/".extraConfig = ''
|
||||
autoindex on;
|
||||
'';
|
||||
"/public".extraConfig = ''
|
||||
autoindex on;
|
||||
auth_basic off;
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
extraPostACMEScripts = lib.mkOption {
|
||||
default = [ ];
|
||||
example = [
|
||||
''
|
||||
cp fullchain.pem /data/home/charlotte/synapse/slack/cert.crt
|
||||
cp privkey.pem /data/home/charlotte/synapse/slack/key.pem
|
||||
pushd /data/home/charlotte/synapse
|
||||
''${pkgs.docker-compose}/bin/docker-compose restart slack
|
||||
popd
|
||||
''
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf config.chvp.services.nginx.enable {
|
||||
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||
security.acme = {
|
||||
certs."vanpetegem.me" = {
|
||||
dnsProvider = "cloudflare";
|
||||
credentialsFile = config.age.secrets."passwords/services/acme".path;
|
||||
extraDomainNames = [
|
||||
"*.vanpetegem.me"
|
||||
"cvpetegem.be"
|
||||
"*.cvpetegem.be"
|
||||
"chvp.be"
|
||||
"*.chvp.be"
|
||||
];
|
||||
postRun = lib.concatStrings config.chvp.services.nginx.extraPostACMEScripts;
|
||||
};
|
||||
email = "webmaster@vanpetegem.me";
|
||||
acceptTerms = true;
|
||||
preliminarySelfsigned = false;
|
||||
};
|
||||
age.secrets."passwords/services/acme" = {
|
||||
file = ../../../secrets/passwords/services/acme.age;
|
||||
owner = "acme";
|
||||
};
|
||||
chvp.base.zfs.systemLinks = [
|
||||
{ type = "data"; path = "/var/lib/acme"; }
|
||||
];
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedTlsSettings = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedProxySettings = true;
|
||||
virtualHosts = builtins.listToAttrs
|
||||
(map
|
||||
(elem: {
|
||||
name = elem.fqdn;
|
||||
value = {
|
||||
forceSSL = true;
|
||||
useACMEHost = "vanpetegem.me";
|
||||
locations."/" = lib.mkIf (builtins.hasAttr "basicProxy" elem) {
|
||||
proxyPass = elem.basicProxy;
|
||||
extraConfig = ''
|
||||
proxy_set_header X-Forwarded-Ssl on;
|
||||
'' + (elem.extraProxySettings or "");
|
||||
};
|
||||
} // (elem.options or { });
|
||||
})
|
||||
config.chvp.services.nginx.hosts);
|
||||
};
|
||||
users.users.nginx.extraGroups = [ "acme" ];
|
||||
};
|
||||
}
|
31
modules/services/syncthing/default.nix
Normal file
31
modules/services/syncthing/default.nix
Normal file
|
@ -0,0 +1,31 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
{
|
||||
options.chvp.services.syncthing.enable = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
|
||||
config = lib.mkIf config.chvp.services.syncthing.enable {
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
dataDir = "${config.chvp.dataPrefix}/var/lib/syncthing";
|
||||
configDir = "${config.chvp.dataPrefix}/var/lib/syncthing/.config";
|
||||
openDefaultPorts = true;
|
||||
guiAddress = "127.0.0.1:8384";
|
||||
};
|
||||
|
||||
chvp.services.nginx.hosts = [
|
||||
{
|
||||
fqdn = "syncthing.vanpetegem.me";
|
||||
basicProxy = "http://localhost:8384";
|
||||
options.basicAuthFile = config.age.secrets."passwords/services/syncthing-basic-auth".path;
|
||||
}
|
||||
];
|
||||
|
||||
age.secrets."passwords/services/syncthing-basic-auth" = {
|
||||
file = ../../../secrets/passwords/services/syncthing-basic-auth.age;
|
||||
owner = "nginx";
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue