Packages
phoenix_kit
1.4.7
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/phoenix_kit.install.ex
if Code.ensure_loaded?(Igniter.Mix.Task) do
defmodule Mix.Tasks.PhoenixKit.Install do
@moduledoc """
Igniter installer for PhoenixKit.
This task automatically installs PhoenixKit into a Phoenix application by:
1. Auto-detecting and configuring Ecto repo
2. Setting up mailer configuration for development and production
3. Modifying the router to include PhoenixKit routes
## Usage
```bash
mix phoenix_kit.install
```
With custom options:
```bash
mix phoenix_kit.install --repo MyApp.Repo --router-path lib/my_app_web/router.ex
```
## Options
* `--repo` - Specify Ecto repo module (auto-detected if not provided)
* `--router-path` - Specify custom path to router.ex file
* `--prefix` - Specify PostgreSQL schema prefix (defaults to "public")
* `--create-schema` - Create schema if using custom prefix (default: true for non-public prefixes)
## Auto-detection
The installer will automatically:
- Detect Ecto repo from `:ecto_repos` config or common naming patterns (MyApp.Repo)
- Find main router using Phoenix conventions (MyAppWeb.Router)
- Configure Swoosh.Adapters.Local for development in config/dev.exs
- Provide production mailer setup instructions
## Note about warnings
You may see a compiler warning about "unused import PhoenixKitWeb.Integration".
This is normal behavior for Elixir macros and can be safely ignored.
The `phoenix_kit_routes()` macro is properly used and will expand correctly.
"""
@shortdoc "Install PhoenixKit into a Phoenix application"
use Igniter.Mix.Task
alias PhoenixKit.Install.{
ApplicationSupervisor,
AssetRebuild,
BrowserPipelineIntegration,
CssIntegration,
DemoFiles,
LayoutConfig,
MailerConfig,
MigrationStrategy,
RepoDetection,
RouterIntegration
}
alias PhoenixKit.Utils.Routes
@impl Igniter.Mix.Task
def info(_argv, _composing_task) do
%Igniter.Mix.Task.Info{
group: :phoenix_kit,
example: "mix phoenix_kit.install --repo MyApp.Repo --prefix auth",
positional: [],
schema: [
router_path: :string,
repo: :string,
prefix: :string,
create_schema: :boolean,
skip_assets: :boolean
],
aliases: [
r: :router_path,
repo: :repo,
p: :prefix
]
}
end
@impl Igniter.Mix.Task
def igniter(igniter) do
opts = igniter.args.options
igniter
|> RepoDetection.add_phoenix_kit_configuration(opts[:repo])
|> MailerConfig.add_mailer_configuration()
|> ApplicationSupervisor.add_supervisor()
|> LayoutConfig.add_layout_integration_configuration()
|> CssIntegration.add_automatic_css_integration()
|> DemoFiles.copy_test_demo_files()
|> RouterIntegration.add_router_integration(opts[:router_path])
|> BrowserPipelineIntegration.add_integration_to_browser_pipeline()
|> MigrationStrategy.create_phoenix_kit_migration_only(opts)
|> add_completion_notice()
end
# Override run/1 to handle post-igniter interactive migration
def run(argv) do
# Handle --help flag
if "--help" in argv or "-h" in argv do
show_help()
:ok
else
# Store options in process dictionary for later use
opts =
OptionParser.parse(argv,
switches: [
router_path: :string,
repo: :string,
prefix: :string,
create_schema: :boolean,
skip_assets: :boolean
],
aliases: [
r: :router_path,
repo: :repo,
p: :prefix
]
)
# Run standard igniter process
result = super(argv)
# After igniter is done, handle interactive migration
MigrationStrategy.handle_interactive_migration_after_config(elem(opts, 1))
# Always rebuild assets unless explicitly skipped
unless Keyword.get(elem(opts, 1), :skip_assets, false) do
AssetRebuild.check_and_rebuild(verbose: true)
end
result
end
end
# Display comprehensive help information
defp show_help do
Mix.shell().info("""
mix phoenix_kit.install - Install PhoenixKit into a Phoenix application
USAGE
mix phoenix_kit.install [OPTIONS]
DESCRIPTION
Automatically installs PhoenixKit into a Phoenix application by:
• Auto-detecting and configuring Ecto repository
• Setting up mailer configuration for development and production
• Modifying the router to include PhoenixKit routes
• Creating database migrations for authentication system
• Integrating CSS assets (daisyUI 5 + Tailwind CSS)
OPTIONS
--repo MODULE Specify Ecto repo module (e.g., MyApp.Repo)
Auto-detected if not provided
--router-path PATH Specify custom path to router.ex file
Default: auto-detected (MyAppWeb.Router)
--prefix SCHEMA PostgreSQL schema prefix for PhoenixKit tables
Default: "public" (standard PostgreSQL schema)
Use custom prefix for table isolation
Example: --prefix "auth"
--create-schema Create schema if using custom prefix
Default: true for non-public prefixes
Adds 35+ themes support with theme controller
Default: false
--skip-assets Skip automatic asset rebuild check
Default: false
-h, --help Show this help message
EXAMPLES
# Basic installation with auto-detection (uses default "public" schema)
mix phoenix_kit.install
# Install with specific repository
mix phoenix_kit.install --repo MyApp.Repo
# Install with custom PostgreSQL schema prefix for table isolation
mix phoenix_kit.install --prefix "auth" --create-schema
# Install with custom router path
mix phoenix_kit.install --router-path lib/my_app_web/router.ex
# Install with all options
mix phoenix_kit.install --repo MyApp.Repo --prefix "auth"
AUTO-DETECTION
The installer automatically:
• Detects Ecto repo from :ecto_repos config or naming patterns
• Finds main router using Phoenix conventions
• Configures Swoosh.Adapters.Local for development
• Provides production mailer setup instructions
URL PREFIX CONFIGURATION
PhoenixKit routes are served under a URL prefix (default: /phoenix_kit).
To customize or remove the prefix, configure in config/config.exs:
# Default behavior (prefix: /phoenix_kit)
phoenix_kit_routes()
# Routes: /phoenix_kit/users/register, /phoenix_kit/admin/dashboard
# Custom prefix
config :phoenix_kit, url_prefix: "/auth"
# Routes: /auth/users/register, /auth/admin/dashboard
# No prefix (root-level routes)
config :phoenix_kit, url_prefix: ""
# Routes: /users/register, /admin/dashboard
AFTER INSTALLATION
1. Run database migrations:
mix ecto.migrate
2. Start your Phoenix server:
mix phx.server
3. Visit registration page:
http://localhost:4000/phoenix_kit/users/register
4. Test authentication:
/test-current-user - Check current user
/test-ensure-auth - Test authentication requirement
NOTES
• You may see "unused import PhoenixKitWeb.Integration" warning
This is normal for Elixir macros and can be safely ignored
• The phoenix_kit_routes() macro expands correctly at compile time
DOCUMENTATION
For more information, visit:
https://hexdocs.pm/phoenix_kit
""")
end
# Add completion notice with essential next steps (reduced duplication)
defp add_completion_notice(igniter) do
notice = """
✅ PhoenixKit ready! Next:
• mix ecto.migrate
• mix phx.server
• Visit #{Routes.path("/users/register")}
• Test: /test-current-user, /test-ensure-auth
"""
Igniter.add_notice(igniter, notice)
end
end
# Fallback module for when Igniter is not available
else
defmodule Mix.Tasks.PhoenixKit.Install do
@moduledoc """
PhoenixKit installation task.
This task requires the Igniter library to be available. Please add it to your mix.exs:
{:igniter, "~> 0.6.27"}
Then run: mix deps.get
"""
@shortdoc "Install PhoenixKit (requires Igniter)"
use Mix.Task
def run(_args) do
Mix.shell().error("""
❌ PhoenixKit installation requires the Igniter library.
Please add Igniter to your mix.exs dependencies:
def deps do
[
{:igniter, "~> 0.6.27"}
# ... your other dependencies
]
end
Then run:
mix deps.get
mix phoenix_kit.install
For more information, visit: https://hex.pm/packages/igniter
""")
end
end
end