{ description = "You new nix config"; inputs = { # Nixpkgs nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; hardware.url = "github:nixos/nixos-hardware"; bonfire.url = "github:bonfire-networks/bonfire-app"; bonfire.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { nixpkgs, bonfire, ... }@inputs: let forAllSystems = nixpkgs.lib.genAttrs [ "aarch64-linux" "i686-linux" "x86_64-linux" "aarch64-darwin" "x86_64-darwin" ]; in rec { # Your custom packages and modifications overlays = { default = import ./overlay { inherit inputs; }; }; # Reusable nixos modules you might want to export # These are usually stuff you would upstream into nixpkgs nixosModules = import ./modules/nixos; # Devshell for bootstrapping # Acessible through 'nix develop' or 'nix-shell' (legacy) devShells = forAllSystems (system: { default = legacyPackages.${system}.callPackage ./shell.nix { }; }); # This instantiates nixpkgs for each system listed above # Allowing you to add overlays and configure it (e.g. allowUnfree) # Our configurations will use these instances # Your flake will also let you access your package set through nix build, shell, run, etc. legacyPackages = forAllSystems (system: import inputs.nixpkgs { inherit system; # This adds our overlays to pkgs overlays = builtins.attrValues overlays; # NOTE: Using `nixpkgs.config` in your NixOS config won't work # Instead, you should set nixpkgs configs here # (https://nixos.org/manual/nixpkgs/stable/#idm140737322551056) # config.allowUnfree = true; } ); nixosConfigurations = { sincerity = nixpkgs.lib.nixosSystem { pkgs = legacyPackages.x86_64-linux; specialArgs = { inherit inputs; }; # Pass flake inputs to our config modules = (builtins.attrValues nixosModules) ++ [ # > Our main nixos configuration file < ./nixos/configuration.nix # bonfire.nixosModules.bonfire ]; }; test = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ./nixos/configuration.nix bonfire.nixosModules.bonfire ({ pkgs, ... }: { boot.isContainer = true; networking.firewall.allowedTCPPorts = [ 80 ]; services.nginx = { enable = true; virtualHosts."bonfire.lan".locations."/".proxyPass = "http://localhost:4000"; }; services.bonfire = { # you will need to expose bonfire with a reverse proxy, for example caddy port = 4000; package = pkgs.elixirBonfire; dbName = "bonfire"; # the environment should contain a minimum of # SECRET_KEY_BASE # SIGNING_SALT # ENCRYPTION_SALT # RELEASE_COOKIE # have a look into nix/module.nix for more details # the way to deploy secrets is beyond this readme, but I would recommend agenix environmentFile = "/run/secrets/bonfireEnv"; dbSocketDir = "/var/run/postgresql"; }; # this is uniquely for database backup purposes # replace myBackupUserName with the user name that will do the backups # if you want to do backups differently, feel free to remove this part of the config # services.postgresql = { # enable = true; # ensureDatabases = [ "bonfire" ]; # ensureUsers = [{ # name = "bonfire"; # ensurePermissions = { "DATABASE bonfire" = "ALL PRIVILEGES"; }; # }]; # }; }) ]; }; }; }; }