175 lines
6.4 KiB
Django/Jinja
175 lines
6.4 KiB
Django/Jinja
{#-
|
|
Homarr database seed.
|
|
|
|
The packing algorithm previously lived in this template as a Jinja
|
|
`pack()` macro with from_json/to_json round-trips. It has been
|
|
extracted to the `homarr_compute_layouts` filter plugin (see
|
|
filter_plugins/homarr_layout.py) and the result is provided as the
|
|
`homarr_layout` fact set in tasks/main.yml. This template therefore
|
|
only renders SQL — no logic.
|
|
-#}
|
|
BEGIN TRANSACTION;
|
|
|
|
-- =====================================================================
|
|
-- SERVER SETTINGS
|
|
-- =====================================================================
|
|
|
|
INSERT OR REPLACE INTO serverSetting (setting_key, value)
|
|
VALUES
|
|
('analytics', '{"json": {"enableGeneral": false, "enableWidgetData": false, "enableIntegrationData": false, "enableUserData": false}}'),
|
|
('culture', '{"json": {"defaultLocale": "de"}}'),
|
|
('crawling', '{"json": {"crawlingEnabled": false}}'),
|
|
('board', '{"json": {"homeBoardId": "board-default", "mobileHomeBoardId": "board-default", "enableStatusByDefault": true, "forceDisableStatus": false, "defaultBoardId": "board-default"}}');
|
|
|
|
-- Skip onboarding wizard
|
|
UPDATE onboarding SET step = 'finish', previous_step = 'settings';
|
|
|
|
-- =====================================================================
|
|
-- GROUPS (must exist before groupMember)
|
|
-- =====================================================================
|
|
|
|
-- OIDC admin group
|
|
INSERT OR IGNORE INTO "group" (id, name, owner_id, position)
|
|
VALUES ('group-oidc-admins', '{{ homarr_oidc_admin_group }}', NULL, 0);
|
|
|
|
INSERT OR IGNORE INTO groupPermission (group_id, permission)
|
|
VALUES
|
|
('group-oidc-admins', 'admin'),
|
|
('group-oidc-admins', 'board-create'),
|
|
('group-oidc-admins', 'board-full-access'),
|
|
('group-oidc-admins', 'integration-create'),
|
|
('group-oidc-admins', 'integration-full-access');
|
|
|
|
-- Credentials admin group
|
|
INSERT OR IGNORE INTO "group" (id, name, owner_id, position)
|
|
VALUES ('group-credentials-admin', 'credentials-admin', NULL, 1);
|
|
|
|
INSERT OR IGNORE INTO groupPermission (group_id, permission)
|
|
VALUES
|
|
('group-credentials-admin', 'admin'),
|
|
('group-credentials-admin', 'board-create'),
|
|
('group-credentials-admin', 'board-full-access'),
|
|
('group-credentials-admin', 'integration-create'),
|
|
('group-credentials-admin', 'integration-full-access');
|
|
|
|
-- =====================================================================
|
|
-- LOCAL ADMIN USER
|
|
-- =====================================================================
|
|
|
|
INSERT OR IGNORE INTO user (id, name, email, password, email_verified, provider)
|
|
VALUES (
|
|
'user-local-admin',
|
|
'{{ homarr_admin_username }}',
|
|
'{{ homarr_admin_email }}',
|
|
'{{ homarr_bcrypt_hash }}',
|
|
1,
|
|
'credentials'
|
|
);
|
|
|
|
-- Assign admin user to groups
|
|
INSERT OR IGNORE INTO groupMember (group_id, user_id)
|
|
VALUES
|
|
('group-credentials-admin', 'user-local-admin'),
|
|
('group-oidc-admins', 'user-local-admin');
|
|
|
|
-- =====================================================================
|
|
-- BOARD
|
|
-- =====================================================================
|
|
|
|
INSERT OR IGNORE INTO board (
|
|
id, name, is_public,
|
|
primary_color, secondary_color, opacity,
|
|
background_image_attachment, background_image_repeat, background_image_size,
|
|
item_radius, disable_status
|
|
)
|
|
VALUES (
|
|
'board-default',
|
|
'{{ homarr_default_board_name }}',
|
|
{% if homarr_default_board_public %}1{% else %}0{% endif %},
|
|
'#fa5252',
|
|
'#fd7e14',
|
|
100,
|
|
'fixed',
|
|
'no-repeat',
|
|
'cover',
|
|
'lg',
|
|
0
|
|
);
|
|
|
|
-- Layouts
|
|
INSERT OR IGNORE INTO layout (id, name, board_id, column_count, breakpoint)
|
|
VALUES
|
|
('layout-desktop', 'Desktop', 'board-default', 10, 0),
|
|
('layout-tablet', 'Tablet', 'board-default', 6, 768),
|
|
('layout-mobile', 'Mobile', 'board-default', 2, 480);
|
|
|
|
-- Set home board for admin user (board exists now)
|
|
UPDATE user SET home_board_id = 'board-default', mobile_home_board_id = 'board-default'
|
|
WHERE id = 'user-local-admin';
|
|
|
|
-- =====================================================================
|
|
-- SECTION
|
|
-- =====================================================================
|
|
|
|
DELETE FROM section_layout WHERE section_id = 'section-apps';
|
|
DELETE FROM item_layout WHERE section_id = 'section-apps';
|
|
DELETE FROM section WHERE id = 'section-apps';
|
|
|
|
INSERT INTO section (id, board_id, kind, x_offset, y_offset, name, options)
|
|
VALUES (
|
|
'section-apps',
|
|
'board-default',
|
|
'empty',
|
|
0,
|
|
0,
|
|
'Applications',
|
|
'{"json": {}}'
|
|
);
|
|
|
|
-- Section height is sized to fit the computed layout (see
|
|
-- homarr_compute_layouts filter). It grows automatically when more
|
|
-- apps or taller tiles are added.
|
|
INSERT OR REPLACE INTO section_layout (section_id, layout_id, parent_section_id, x_offset, y_offset, width, height)
|
|
VALUES
|
|
('section-apps', 'layout-desktop', NULL, 0, 0, 10, {{ homarr_layout.section_height.desktop }}),
|
|
('section-apps', 'layout-tablet', NULL, 0, 0, 6, {{ homarr_layout.section_height.tablet }}),
|
|
('section-apps', 'layout-mobile', NULL, 0, 0, 2, {{ homarr_layout.section_height.mobile }});
|
|
|
|
-- Board permissions
|
|
INSERT OR IGNORE INTO boardGroupPermission (board_id, group_id, permission)
|
|
VALUES
|
|
('board-default', 'group-oidc-admins', 'full-access'),
|
|
('board-default', 'group-credentials-admin', 'full-access');
|
|
|
|
-- =====================================================================
|
|
-- APPS (positions pre-computed by homarr_compute_layouts filter)
|
|
-- =====================================================================
|
|
|
|
{% for app in homarr_layout.apps %}
|
|
-- {{ app.name }}
|
|
INSERT OR IGNORE INTO app (id, name, description, icon_url, href)
|
|
VALUES (
|
|
'app-{{ app.id }}',
|
|
'{{ app.name }}',
|
|
'{{ app.description | default("") }}',
|
|
'{{ app.icon }}',
|
|
'{{ app.href }}'
|
|
);
|
|
|
|
INSERT OR IGNORE INTO item (id, board_id, kind, options, advanced_options)
|
|
VALUES (
|
|
'item-{{ app.id }}',
|
|
'board-default',
|
|
'app',
|
|
'{"json": {"appId": "app-{{ app.id }}"}}',
|
|
'{"json": {}}'
|
|
);
|
|
|
|
INSERT OR REPLACE INTO item_layout (item_id, section_id, layout_id, x_offset, y_offset, width, height)
|
|
VALUES
|
|
('item-{{ app.id }}', 'section-apps', 'layout-desktop', {{ app.desktop.x }}, {{ app.desktop.y }}, {{ app.desktop.w }}, {{ app.desktop.h }}),
|
|
('item-{{ app.id }}', 'section-apps', 'layout-tablet', {{ app.tablet.x }}, {{ app.tablet.y }}, {{ app.tablet.w }}, {{ app.tablet.h }}),
|
|
('item-{{ app.id }}', 'section-apps', 'layout-mobile', {{ app.mobile.x }}, {{ app.mobile.y }}, {{ app.mobile.w }}, {{ app.mobile.h }});
|
|
|
|
{% endfor %}
|
|
COMMIT;
|