{ description = "horizon-haskell-packages"; nixConfig = { extra-substituters = "https://horizon.cachix.org"; extra-trusted-public-keys = "horizon.cachix.org-1:MeEEDRhRZTgv/FFGCv3479/dmJDfJ82G6kfUDxMSAw0="; }; inputs = { horizon-core.url = "git+https://gitlab.horizon-haskell.net/package-sets/horizon-core"; lint-utils = { url = "git+https://gitlab.nixica.dev/nix/lint-utils"; inputs.nixpkgs.follows = "nixpkgs"; }; nixica.url = "git+https://gitlab.horizon-haskell.net/nix/nixica-library"; nixinate.url = "github:MatthewCroughan/nixinate"; nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; }; outputs = inputs@ { self , horizon-core , lint-utils , nixpkgs , ... }: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; in with pkgs.writers; let make-foliage-repo = writeBashBin "make-foliage-repo" '' mkdir _keys echo "$FOLIAGE_KEYS" | base64 -d | tar xz -C _keys ${horizon-core.packages.${system}.foliage}/bin/foliage -- build mkdir -p /var/horizon-haskell-packages/" ls _repo/* -alh ''; make-foliage-repo-app = { type = "app"; program = "${make-foliage-repo}/bin/make-foliage-repo"; }; build-push-foliage = writeBashBin "build-push-foliage" '' ${make-foliage-repo}/bin/make-foliage-repo scp -rvp _repo/* root@193.16.42.51:/var/www/horizon-haskell-packages ''; build-push-foliage-app = { type = "app"; program = "${build-push-foliage}/bin/build-push-foliage"; }; in { apps.${system} = inputs.nixinate.nixinate."x86_64-linux" self // { build-push-foliage-app = build-push-foliage-app; }; nixosConfigurations = { terrokar = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = inputs; modules = [ { _module.args.nixinate = { host = "193.16.42.51"; sshUser = "root"; buildOn = "local"; substituteOnTarget = true; hermetic = false; }; imports = [ "${nixpkgs}/nixos/modules/virtualisation/openstack-config.nix" ]; networking.hostName = "terrokar"; services.nginx = { enable = true; virtualHosts."packages.horizon-haskell.net" = { enableACME = true; forceSSL = true; locations."/".root = "/var/www/horizon-haskell-packages"; }; }; security.acme = { acceptTerms = true; certs = { "packages.horizon-haskell.net".email = "acme@packages.horizon-haskell.net"; }; }; networking.firewall.allowedTCPPorts = [ 25 80 443 ]; } ]; }; }; }; }