Compare commits

...

880 Commits

Author SHA1 Message Date
Kaloyan Danchev
1f92f0593f Fix TypeScript build errors and configure Traefik deployment
Some checks failed
Master CI / yarn_install_and_build (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Fix type mismatches across Unraid UI pages (SystemInfo, ServerVars,
Notification properties), replace unavailable Mantine components
(ScrollArea.Autosize, IconHardDrive), correct Orchis theme types,
add missing tRPC endpoints (users, syslog, notification actions),
and configure docker-compose for Traefik reverse proxy on dockerproxy
network with unmarr.xtrm-lab.org routing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 23:55:31 +02:00
Kaloyan Danchev
783a12b444 Fix ESLint configuration for Docker build
Some checks failed
Master CI / yarn_install_and_build (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
- Remove ignoreDuringBuilds from eslintConfig in package.json (invalid)
- Add eslint.ignoreDuringBuilds to next.config.js (correct location)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 09:58:47 +02:00
Kaloyan Danchev
a48a06e680 Add Docker deployment for Unraid
Some checks failed
Master CI / yarn_install_and_build (push) Has been cancelled
- Add Dockerfile.unraid with multi-stage build (builds inside container)
- Add docker-compose.unraid.yml for easy deployment
- Add build-and-push.sh script for building and pushing to Gitea registry
- Update root redirect to /unraid dashboard

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 09:48:30 +02:00
Kaloyan Danchev
9a2c56a5dc Phase 4: Add Unraid management pages with sidebar layout
Some checks failed
Master CI / yarn_install_and_build (push) Has been cancelled
- Add UnraidLayout component with full sidebar navigation
- Add Array management page with disk tables and parity check controls
- Add Docker management page with container cards and filtering
- Add VMs management page with power controls (start/stop/pause/resume/reboot)
- Add Shares page with security levels and storage usage
- Add Users page with admin/user roles display
- Add Settings index with links to all settings pages
- Add Identification settings page with system info
- Add Notifications settings page with notification history
- Add Tools index with links to all tools
- Add Syslog page with live log viewing and filtering
- Add Diagnostics page with system health checks
- Update dashboard to use UnraidLayout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 09:32:52 +02:00
Kaloyan Danchev
83a8546521 Add Unraid API integration and Orchis theme
Some checks failed
Master CI / yarn_install_and_build (push) Has been cancelled
Phase 1: Foundation Setup
- Create Unraid GraphQL client with type-safe queries/mutations
- Add comprehensive TypeScript types for all Unraid data models
- Implement tRPC router with 30+ endpoints for Unraid management
- Add environment variables for Unraid connection

Phase 2: Core Dashboard
- Create SystemInfoCard component (CPU, RAM, OS, motherboard)
- Create ArrayCard component (disks, parity, cache pools)
- Create DockerCard component with start/stop controls
- Create VmsCard component with power management
- Add main Unraid dashboard page with real-time updates

Phase 3: Orchis Theme Integration
- Create Mantine theme override with Orchis design tokens
- Add CSS custom properties for light/dark modes
- Configure shadows, spacing, radius from Orchis specs
- Style all Mantine components with Orchis patterns

Files added:
- src/lib/unraid/* (GraphQL client, types, queries)
- src/server/api/routers/unraid/* (tRPC router)
- src/components/Unraid/* (Dashboard components)
- src/pages/unraid/* (Dashboard page)
- src/styles/orchis/* (Theme configuration)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 09:19:21 +02:00
Kaloyan Danchev
e881ec6cb5 Add Unraid UI project documentation and research
Some checks failed
Master CI / yarn_install_and_build (push) Has been cancelled
- Complete Unraid WebGUI inventory (~100 pages documented)
- Unraid GraphQL API research and documentation
- Homarr architecture documentation
- Orchis GTK theme design tokens (TypeScript)
- Project README with implementation plan

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 07:44:52 +02:00
Meier Lukas
ce336311b1 Merge pull request #2321 from ajnart/dev 2025-08-02 19:24:28 +02:00
Meier Lukas
da138c5b54 chore(release): update version in package-json 2025-08-02 18:36:31 +02:00
Manuel
69f5cd47ad feat: prompt 1.0 migration (#2320)
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
2025-08-02 18:35:04 +02:00
Thomas Camlong
638885466e New Crowdin updates (#2231) 2025-08-02 18:04:19 +02:00
Jan Tesař
523fe30452 Updates the installation link (#2318) 2025-08-02 18:00:43 +02:00
Thomas Camlong
cd78714da9 Update greetings.yml 2025-05-30 17:20:31 +02:00
Thomas Camlong
2982c146a4 Update feature-request.yml 2025-05-30 17:18:56 +02:00
Meier Lukas
989cc7de58 Revert "Update PiHole authentication. (PiHole v6)" (#2287) 2025-03-21 20:13:44 +01:00
Thomas Camlong
677224f8de Update README.md 2025-03-21 20:06:12 +01:00
Thomas Camlong
8da6d33c61 Merge pull request #2278 from DR-Blogs/PiHole-v6-API-reintegration
Update PiHole authentication. (PiHole v6)
2025-03-21 20:04:03 +01:00
DR
9be9e3963a Update PiHole authentication. https://docs.pi-hole.net/api/auth/#__tabbed_1_1 2025-02-20 22:27:48 -05:00
Jonathan Chemla
1d3a4af259 docs: Add links to all banners of readme (#2276)
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
2025-02-19 21:12:31 +01:00
xmarkurion
1251a89a9b docs: update readme with correct link for getting started. (#2271) 2025-02-19 21:11:14 +01:00
Meier Lukas
274eaa9208 docs: add note about moved repository and migration to 1.0 2025-01-27 18:05:32 +01:00
Meier Lukas
3236402d2b chore(issue-template): add warning alert to issue templates for 1.0 (#2269) 2025-01-27 17:46:21 +01:00
Meier Lukas
c86c69158a Merge pull request #2227 from ajnart/dev 2024-12-17 21:47:24 +01:00
Thomas Camlong
ed3d143b8a New Crowdin updates (#2226) 2024-12-17 21:43:24 +01:00
Meier Lukas
136032f920 Merge branch 'master' into dev 2024-12-17 21:20:54 +01:00
Meier Lukas
150e9bf53f chore: update version in package-json to 0.15.10 2024-12-17 21:17:56 +01:00
Thomas Camlong
a3d92d6a73 chore(translations): new crowdin updates (#2225) 2024-12-17 19:03:12 +01:00
Thomas Camlong
d3a48ae0e0 New Crowdin updates (#2190) 2024-12-17 18:40:51 +01:00
Marek Tancak
4aa7e7602b fix: unable to delete boards with capitalised name 'Default' (#2223) 2024-12-17 18:40:32 +01:00
Meier Lukas
d63c610cf5 feat: add 1.0 migration page (#2224) 2024-12-17 18:39:57 +01:00
Manuel
0a31b0fc1c Version 0.15.9 (#2220)
* fix: iframes javascript content (#2218)

* config: update version (#2219)
2024-12-08 21:59:34 +01:00
Manuel
3737543766 config: update version (#2219) 2024-12-08 20:53:35 +01:00
Manuel
85547277d1 fix: iframes javascript content (#2218) 2024-12-08 20:06:15 +01:00
Meier Lukas
8e962abc16 Merge pull request #2216 from ajnart/dev 2024-12-07 22:37:59 +01:00
Meier Lukas
31a7559b86 fix: two issues with board rename and iframes (#2215) 2024-12-07 22:21:40 +01:00
TyxTang
b59921b843 fix: Fix Jellyseerr Avatar Loading Issue (#2197)
fix: Fix Jellyseerr Avatar Loading Issue
feat: Add Fallback Image.
2024-11-27 22:17:48 +01:00
Marius Starke
95c126f2c6 fix: remove several occurrences of translation file prefix (#2188)
Co-authored-by: BuildTools <unconfigured@null.spigotmc.org>
2024-11-05 09:54:27 +01:00
Meier Lukas
c8425acd34 Merge pull request #2178 from ajnart/dev
Version 0.15.7
2024-11-02 17:44:55 +01:00
Meier Lukas
7ea9c00c18 chore: update package-json version to 0.15.7 (#2184) 2024-11-02 17:39:42 +01:00
Thomas Camlong
3651585271 chore: new Crowdin updates (#2169)
* New translations common.json (Ukrainian)

* New translations date.json (Ukrainian)

* New translations weather.json (Ukrainian)

* New translations page-appearance.json (Ukrainian)

* New translations common.json (Ukrainian)

* New translations page-appearance.json (Ukrainian)

* New translations login.json (Ukrainian)

* New translations selector.json (Ukrainian)

* New translations add-app.json (Ukrainian)

* New translations about.json (Ukrainian)

* New translations torrents-status.json (Ukrainian)

* New translations manage.json (Ukrainian)

* New translations boards.json (Ukrainian)

* New translations users.json (Ukrainian)

* New translations docker.json (Ukrainian)

* New translations entity-state.json (Ukrainian)

* New translations edit.json (Ukrainian)

* New translations trigger-automation.json (Ukrainian)

* New translations indexer-manager.json (Ukrainian)

* New translations health-monitoring.json (Ukrainian)

* New translations media-transcoding.json (Ukrainian)
2024-11-01 10:04:23 +01:00
Meier Lukas
22732e33e5 fix: credentials login behind proxy no longer works (#2177) 2024-11-01 10:03:45 +01:00
Lollyde
9caf72aae7 fix: documentation link (#2163)
seems like this was missed a while back.
2024-10-31 13:55:38 +01:00
Meier Lukas
5a73166d70 Merge pull request #2162 from ajnart/dev
v0.15.6
2024-10-18 20:54:33 +02:00
Meier Lukas
5b23f7d13a fix: db migration not working (#2161) 2024-10-18 20:50:56 +02:00
Meier Lukas
26ae001b5a Merge pull request #2157 from ajnart/dev
* fix: app ping retry interval

* Bugfix for dynamic urls not properly replaces on Search (#2124)

* Bugfix for search items

* Fixing server side rendering issues

* Add rel="noreferrer" to link AppTile.tsx (#2126)

reference: 
Issue: https://github.com/ajnart/homarr/issues/1933
PR comment: https://github.com/ajnart/homarr/pull/2048#issuecomment-2113238216

* fix: Make timer button show only to admins (#2143)

* fix: wrong redirect url for oidc requests #1909 (#2149)

* fix: wrong redirect url for oidc requests #1909

* fix: login not working with https

* chore: New Crowdin updates (#2123)

* New translations health-monitoring.json (Greek)

* New translations login.json (French)

* New translations customize.json (French)

---------

Co-authored-by: Manuel <30572287+manuel-rw@users.noreply.github.com>
Co-authored-by: Jelte Lagendijk <j3lte@users.noreply.github.com>
Co-authored-by: Boyd <bebsworthy@gmail.com>
Co-authored-by: SeDemal <Tagaishi@hotmail.ch>
Co-authored-by: Thomas Camlong <thomas@ajnart.fr>
2024-10-18 18:55:22 +02:00
Meier Lukas
59e5c0306f chore: update package-json version (#2158) 2024-10-18 18:50:42 +02:00
Thomas Camlong
baedc001d9 chore: New Crowdin updates (#2123)
* New translations health-monitoring.json (Greek)

* New translations login.json (French)

* New translations customize.json (French)
2024-10-18 18:41:53 +02:00
Meier Lukas
6469aa2350 fix: wrong redirect url for oidc requests #1909 (#2149)
* fix: wrong redirect url for oidc requests #1909

* fix: login not working with https
2024-10-16 16:47:21 +02:00
SeDemal
d4765c1e7f fix: Make timer button show only to admins (#2143) 2024-09-29 22:24:21 +02:00
Manuel
4bba516fdf Merge pull request #2122 from ajnart/fix/app-ping-retry-interval 2024-09-29 20:27:22 +02:00
Boyd
ddde9992c5 Add rel="noreferrer" to link AppTile.tsx (#2126)
reference: 
Issue: https://github.com/ajnart/homarr/issues/1933
PR comment: https://github.com/ajnart/homarr/pull/2048#issuecomment-2113238216
2024-09-16 01:09:06 +02:00
Jelte Lagendijk
c81612e39b Bugfix for dynamic urls not properly replaces on Search (#2124)
* Bugfix for search items

* Fixing server side rendering issues
2024-09-11 23:53:55 +02:00
Manuel
993739ab8e fix: app ping retry interval 2024-09-04 20:48:05 +02:00
Manuel
20a84da5dc chore: merge 0.15.4 from ajnart/dev 2024-09-01 20:27:05 +02:00
Manuel
6a7532b5b7 chore: increase package.json version 2024-09-01 20:18:43 +02:00
Thomas Camlong
714936a2e9 chore: new Crowdin updates (#2117) 2024-09-01 20:16:15 +02:00
Meier Lukas
d2a40ddf33 fix: revert pgid puid docker changes (#2119) 2024-09-01 20:15:53 +02:00
José Roberto Sánchez
eba30108f6 fix: notebook widget overflow on mobile (#2112) 2024-08-30 20:24:21 +02:00
Meier Lukas
995c8a481e fix: dev docker issues (#2118) 2024-08-30 20:23:35 +02:00
Manuel
5b5121a609 config: fix arm64 build 2024-08-24 14:54:53 +02:00
Thomas Camlong
c008cc92c2 New Crowdin updates (#2059) 2024-08-24 14:39:51 +02:00
renovate[bot]
858ccd72de ⬆️ Update dependency axios to v1.7.4 [SECURITY] (#2106)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-24 14:39:23 +02:00
Meier Lukas
a87935875d feat: add download functionality for board configuration files (#2111) 2024-08-24 14:39:13 +02:00
cospeedster
cc240f4f87 docs: update README.md (#2104) 2024-08-12 07:42:54 +02:00
Meier Lukas
47c401145d fix: removing a category hides items from the wrapper below (#2103)
* fix: removing a category hides items from the wrapper below

* refactor: improve variable names
2024-08-08 20:59:55 +02:00
Meier Lukas
76d46ec1ba refactor: improve variable names 2024-08-08 20:53:35 +02:00
Manuel
fbc099d198 fix: #1707 refech interval app pings (#2097) 2024-08-04 17:47:31 +02:00
Manuel
3de04bdb22 fix: #2086 enforce password requirements for admin user (#2098) 2024-08-04 17:47:05 +02:00
Jason B.
c042c245a3 feat: add Proxmox Uptime View (#2092)
* feat: add Proxmox Uptime View

* fix: Proxmox Uptime

* fix: Proxmox Uptime

* fix: add env.example, make formattedUptime a constant

* fix: Uptime

* fix: Implement dayjs

* fix: removed unused import

* fix: Uptime
2024-08-01 19:58:47 +02:00
Yossi Hillali
68ff84c85a feat: add indexers site hyperlink (#2061)
* Feature: add indexers site hyperlink

* Fix: add an option taget on settings, change color to grey
2024-05-25 12:42:49 +02:00
Thomas Camlong
dfe7b0d60b chore: new crowdin updates (#2038) 2024-05-23 18:18:28 +02:00
Yossi Hillali
afdca50bd2 feat: add dns disable timer (#2029) 2024-05-23 18:18:06 +02:00
Fernando OK
cb2b28ca4b feat: add environment variable puid and pgid #2011 2024-05-23 18:17:02 +02:00
HAMAD ABDULLA
b7fb086476 Add New Language Arabic (#2051) 2024-05-18 16:50:36 +02:00
Thomas Camlong
2bf423132d Merge pull request #2052 from ajnart/1676-custom-favicon-does-not-rednder 2024-05-16 15:17:49 +02:00
ajnart
84f57bb0a1 chore: add test:docker script for local development 2024-05-15 22:16:00 +02:00
ajnart
5043b9cd30 Refactor favicon links in Meta components 2024-05-15 22:07:27 +02:00
ajnart
051f439434 Add key for custom favicon 2024-05-15 21:33:25 +02:00
Manuel
dbadcd8f7a chore: merge hotfix to master 2024-05-08 19:37:52 +02:00
SeDemal
042a381b66 AUTH_OIDC_TIMEOUT make default a string (#2041) 2024-05-08 16:06:31 +02:00
Manuel
9b95ac3c91 chore: merge version 0.15.3 to master 2024-05-07 20:36:15 +02:00
Meier Lukas
0a08b8fb9b Merge branch 'master' into dev 2024-05-07 20:04:46 +02:00
Meier Lukas
b70e179ff9 core: increase version to 0.15.3 (#2007) 2024-05-07 19:48:03 +02:00
Jelte Lagendijk
5fbb444d5f feat: add [homarr_base] replacement for external urls (#2024) 2024-05-07 19:47:19 +02:00
Thomas Camlong
477d249da8 chore(translations): new crowdin updates (#1984) 2024-05-07 19:46:34 +02:00
SeDemal
f12dd52208 fix: ldap filters (#2033) 2024-05-07 19:43:51 +02:00
SeDemal
452304b471 Add logout callback URL and session expiration environment variables (#2023)
Co-authored-by: @Meierschlumpf
2024-05-07 00:06:07 +02:00
Dennis Vesterlund
18cd1f961f feat: home assistant entity generic toggle (#2015)
Added support for generic toggle on Home Assistant entities that support
it. For entities that does not support toggle the feature will silently
fail. This way matches how Home Assistant handles it.
2024-05-06 20:00:13 +02:00
SeDemal
6a5836f096 fix: avatar host default address on not found (#2027)
feat: updated to use libravatar
2024-04-29 22:19:41 +02:00
SeDemal
7dffe393ab fix: Modals titles nested headers and header nested buttons errors (#2019) 2024-04-20 18:43:46 +02:00
SeDemal
fdbb8d8b35 refactor: polish UI and improve popover interactions (#2016) 2024-04-20 18:41:54 +02:00
Janik Brüll
2b92c98975 Add Tdarr integration and widget (#1882) 2024-04-18 23:01:20 +02:00
Meier Lukas
39f416c6a9 fix: missing romanian language in next-i18next.config.js (#2018) 2024-04-18 22:26:24 +02:00
Thomas Camlong
34903d528c Merge pull request #2017 from ajnart/add-romanian 2024-04-18 22:23:29 +02:00
Meier Lukas
230f1f77f9 feat: add romanian language support
Closes #1971 #1954
2024-04-18 22:10:23 +02:00
Dylan Slattery
f1dc67f206 Bugfix: Pass axios error into log call for proxmox. (#2012)
* add error to proxmox api log call

* Update src/server/api/routers/health-monitoring/proxmox.ts

Co-authored-by: Thomas Camlong <thomas@ajnart.fr>

---------

Co-authored-by: Thomas Camlong <thomas@ajnart.fr>
2024-04-18 21:07:12 +02:00
Thomas Camlong
53d1a57f3d Merge pull request #2002 from catrielmuller/catrielmuller/oidc-timeout
OIDC Timeout
2024-04-18 10:34:15 +02:00
Catriel Müller
e71af87b90 Add support for AUTH_OIDC_TIMEOUT 2024-04-09 23:29:33 -03:00
Krishna Muppaneni
8f78184323 Fix ping indicators floating above header in board customization page (#1998)
🐛 fix indicators floating above header
2024-04-05 14:57:33 +02:00
Julian
f861eb4bd9 🐛 Added playsInline to VideoBackground (#1996)
Co-authored-by: spkesDE <spkes@spkes.de>
2024-04-04 18:30:47 +02:00
Yossi Hillali
a74aa5412c Columns customize (#1975)
* Columns customization

Related issue: #1471
Related issue: #1832
Related issue: #1354
Related issue: #1929
2024-03-23 17:26:59 +01:00
Dylan Slattery
06772713ce feat: add Proxmox integration/widget (#1903) 2024-03-23 16:19:38 +01:00
Thomas Camlong
4a8b7377a8 chore: new Crowdin updates (#1968) 2024-03-23 16:18:26 +01:00
Manuel
5f8b96704b fix: #1976 lower debounce time (#1979) 2024-03-23 16:18:02 +01:00
Yossi Hillali
d512ae7e22 fix: weather widget does not refresh automatically (#1981) 2024-03-23 16:17:23 +01:00
Tagaishi
11eaf9eb8e fix: change media request TV poster and movie name (#1983) 2024-03-23 16:16:17 +01:00
Yossi Hillali
ef70e9317d fix: health monitoring hotfix (#1970)
* fix cpu temp when not available, fix hover dropdown, resize progress rings.

* fix spelling
2024-03-18 22:53:06 +01:00
Manuel
f67e2c5a45 core: increase version to 0.15.2 (#1967) 2024-03-15 19:46:12 +01:00
Thomas Camlong
ce8259b031 chore: new Crowdin updates (#1949) 2024-03-15 19:46:12 +01:00
Tagaishi
d4aa866e5b feat: Apply translation automation from select option to multi-select option (#1963) 2024-03-15 19:46:12 +01:00
Yossi Hillali
6989ce8311 fix: OMV 7 support (#1959) 2024-03-15 19:46:12 +01:00
Manuel
5875b1b264 Merge branch 'master' into dev 2024-03-15 19:28:42 +01:00
Manuel
fca7fcbad2 core: increase version to 0.15.2 (#1967) 2024-03-15 18:42:32 +01:00
Manuel
bbad5a7866 chore: increase version 2024-03-15 18:41:03 +01:00
Thomas Camlong
08153f9f54 chore: new Crowdin updates (#1949) 2024-03-15 18:20:07 +01:00
Tagaishi
81e51d2877 feat: Apply translation automation from select option to multi-select option (#1963) 2024-03-15 13:51:25 +01:00
Yossi Hillali
030f05b24b fix: OMV 7 support (#1959) 2024-03-15 09:00:43 +01:00
Manuel
49b6ef2bde Merge pull request #1960 from ajnart/chore/increase-version
chore: increase version
2024-03-14 20:55:58 +01:00
Manuel
29bc596090 chore: increase version 2024-03-14 20:55:08 +01:00
Manuel
4f301856fb chore: version 0.15.1 2024-03-14 17:16:16 +01:00
Yossi Hillali
1cc4ae5c03 feat: add column ordering in torrent widget (#1952) 2024-03-13 20:07:51 +01:00
Meier Lukas
4fa51821ef Fix: dead links (#1955)
* Fix dead link on manage page

* Fix: dead link for edit mode toggle
2024-03-13 17:45:41 +01:00
diederbert
4bafe6bfe7 perf: Improve TorrentTile rendering performance (#1951) 2024-03-13 17:43:24 +01:00
Thomas Camlong
184aa5eca6 Merge pull request #1953 from ajnart/fix-death-links 2024-03-11 06:55:05 +01:00
Meier Lukas
a9df79642d fix: death links in readme 2024-03-11 06:49:59 +01:00
Thomas Camlong
e23e25890a chore: new Crowdin updates (#1890) 2024-03-09 17:56:56 +01:00
Thomas Camlong
28bd849af7 feat: add Estonian language (#1931)
Co-authored-by: Manuel <30572287+manuel-rw@users.noreply.github.com>
2024-03-09 16:58:24 +01:00
Yossi Hillali
918585c3e2 feat: add weekly forecast to weather widget (#1932) 2024-03-09 16:57:16 +01:00
Tagaishi
0906420584 feat: Mention Emby on Jellyfin integration (#1917) 2024-03-09 16:52:47 +01:00
Thomas Camlong
18bd9c856d config: add Lithuanian support (#1935) 2024-03-09 16:49:30 +01:00
Tagaishi
93379145ac fix: log when incorrect and show error in login page (#1943)
* feat: Add logs for incorrect AUTH_PROVIDER and show in login page

* feat: format any entry to lower case for AUTH_PROVIDER

* fix: Change simple text to Alert element on login page
2024-03-09 16:48:52 +01:00
Meier Lukas
9c81d34d66 feat: add ldap search scope (#1948) 2024-03-09 16:37:36 +01:00
Yossi Hillali
b51fcdb342 Add OMV integration / widget (#1879)
feat: Add health monitoring widget (OMV)
OpenMediaVault as first supported integration.
2024-02-27 20:44:52 +01:00
Tagaishi
db2501633d fix: set maximum size for indexer manager to 12 (#1912) 2024-02-24 19:40:05 +01:00
Meier Lukas
5cd940f3cc Fix redirect OIDC (#1911)
* fix: redirect oidc not defined

* fix: construct redirect url from x-forwarded prot and host

* fix: redirect method does not support comma seperated protocol list and url starting with http(s)://

* fix: redirect_uri not specified for oidc as authorization parameter

* fix: unit test not modified

* docs: add comment why the redirect_uri is constructed

* fix: add redirect callback with forwarded headers as redirect url host and protocol

* Apply suggestions from code review
2024-02-20 20:34:57 +01:00
Meier Lukas
1bc19e7857 Merge pull request #1913 from ajnart/add-env-for-oidc-scopes
feat: add environment variable to overwrite oidc scopes
2024-02-19 05:57:17 +01:00
Meier Lukas
83e3800ddf fix: change groups check to undefined instead of not to not show warning when 0 groups in list 2024-02-18 11:53:44 +01:00
Meier Lukas
34ef216f3f feat: add environment variable to overwrite oidc scopes 2024-02-18 11:51:26 +01:00
Manuel
2e014a5883 Merge Version 0.15 2024-02-17 17:36:17 +01:00
Manuel
46a57c1cf2 config: tag release (#1906) 2024-02-17 14:36:09 +01:00
Thomas Camlong
78527cb375 Merge pull request #1892 from ajnart/ajnart-patch-1 2024-02-10 15:32:27 +01:00
Thomas Camlong
508f687491 Update README.md
Fixed incorrect URLs in the integrations part of the README #1891
2024-02-10 15:31:59 +01:00
Rikpat
9a8ea9e1fe feat: add ldap and oidc support (#1497)
Co-authored-by: Thomas Camlong <49837342+ajnart@users.noreply.github.com>
Co-authored-by: Tagaishi <Tagaishi@hotmail.ch>
2024-02-09 22:57:00 +01:00
Thomas Camlong
b1ae5f700e chore(translations): new Crowdin updates (#1878) 2024-02-09 22:37:26 +01:00
Thomas Camlong
f0a67d9a29 feat: allow up to 8128 characters for links in bookmark widget (#1851) #1850 2024-02-09 22:36:34 +01:00
Yossi Hillali
5d113ea280 Indexer manager (#1807)
* indexer manager widget

Co-authored-by: Tagaishi <Tagaishi@hotmail.ch>
2024-02-09 22:35:56 +01:00
Dennis Vesterlund
d45ae5fab9 feat: add unit display to smart home entitiy card (#1844)
Unit of measurement can be chosen to display on the entity card.
Friendly name can be used instead of displayName.
2024-02-09 22:30:57 +01:00
Tagaishi
02249d20c2 fix: add check for already existing name upon creating board (#1887) 2024-02-09 22:30:03 +01:00
Tagaishi
cefa0d8fde fix: notebook link target bug fix (#1889) 2024-02-09 22:28:23 +01:00
Manuel
4933b4f60d docs: add argos ci to readme (#1883) 2024-02-05 18:18:16 +01:00
Manuel
55174476e8 Version 0.14.6 2024-02-04 09:14:17 +01:00
Manuel
a60053e6c4 config: chore version (#1876) 2024-02-04 09:12:48 +01:00
Thomas Camlong
6756838d5f chore: new Crowdin updates (#1873) 2024-02-04 09:10:54 +01:00
Manuel
74fe7a7a28 fix: attempt to fix hidden docker button (#1875) 2024-02-04 09:08:04 +01:00
Manuel
5812a6bd97 Version 0.14.5 2024-02-03 18:30:20 +01:00
Manuel
824f4b8acc fix: #1859 dayjs locale translation (#1868) 2024-02-03 16:38:56 +01:00
Thomas Camlong
a6ea9ac333 chore: new Crowdin updates (#1869) 2024-02-03 16:38:39 +01:00
Manuel
a87bda7810 chore: increase version (#1867) 2024-01-31 20:18:39 +01:00
Thomas Camlong
a8f00f5242 chore: new Crowdin updates (#1862) 2024-01-31 20:11:18 +01:00
Manuel
6268db182e fix: #1805 remove server prefetching docker (#1860) 2024-01-31 07:51:38 +01:00
Manuel
6f077f1c5e fix: remove console log (#1861) 2024-01-28 21:19:41 +01:00
Manuel
ff21033b0c fix: rss widget post sorting (#1855) 2024-01-28 21:15:46 +01:00
Manuel
6fdf1dfaa8 feat: #1835 copy apps (#1854) 2024-01-28 21:15:08 +01:00
Thomas Camlong
f1e0b9236c config: new crowdin updates (#1834) 2024-01-27 22:12:04 +01:00
Julian
4da75134ed feat: add video background support (#1839) 2024-01-25 17:45:26 +01:00
Dennis Vesterlund
957ba4e058 fix: schemas for lights attributes in home assistant entity widget 2024-01-25 17:38:28 +01:00
Manuel
732ef95bd9 config: update stale.yml (#1847) 2024-01-25 17:34:24 +01:00
Manuel
37d728cc83 chore: merge version 0.14.4 from ajnart/dev 2024-01-16 20:45:14 +01:00
Thomas Camlong
7fb8a18a1e chore: new Crowdin updates (#1824) 2024-01-16 20:34:33 +01:00
Manuel
0dc16977a5 fix: attempt to fix ping redirects (#1829) 2024-01-16 20:23:22 +01:00
Manuel
ffc9387edb fix: remove max redirects from ping (#1828) 2024-01-16 20:14:52 +01:00
Manuel
b911e8b56f fix: http ping agent (#1826) 2024-01-16 19:44:02 +01:00
Manuel
52ca28d0ec fix: #1734 fix local icons path (#1821) 2024-01-15 21:40:45 +01:00
Thomas Camlong
684ce37f4d config: new Crowdin updates (#1820) 2024-01-15 21:31:58 +01:00
Manuel
5bae5bf04d refactor: optimize imports (#1822) 2024-01-15 17:16:13 +01:00
Manuel
c701f723cf feature: add trpc openapi (#1818) 2024-01-14 22:20:51 +01:00
Thomas Camlong
33da630db5 config: new Crowdin updates (#1772) 2024-01-14 14:10:59 +01:00
Manuel
e57af4ae10 revert: #1714 migrate to axios.get (#1819) 2024-01-14 14:09:08 +01:00
Manuel
c7992260f0 feature: board operations (#1800) 2024-01-13 22:52:44 +01:00
Manuel
6717bcf8b4 feature: rss improvements (#1810) 2024-01-11 19:19:59 +01:00
Tagaishi
60bca7412c feat: improve admin security on dnshole controls (#1686) 2024-01-11 19:04:41 +01:00
Manuel
bd280d171b chore: increase version (#1811) 2024-01-11 19:02:06 +01:00
anonysoul
0089d396c4 fix: database is not initialized inside the docker container (#1806) 2024-01-11 18:11:09 +01:00
Manuel
c4669ca516 feature: #1765 reduce transferred torrent data (#1798) 2024-01-11 18:10:30 +01:00
Manuel
35e8c76120 feature: trigger automations (#1799) 2024-01-11 17:49:27 +01:00
Marek Tancak
6d6750c665 feat: add availability information about media requests (#1794) 2024-01-09 20:56:57 +01:00
Thomas Camlong
209119f14c Merge pull request #1796 from StefanB7/sb/fix_link_after_user_creation 2024-01-07 10:39:54 +01:00
Stefan Buys
a99555c1d0 Fixes documentation links 2024-01-07 08:18:13 +02:00
Manuel
e208693806 refactor: improve torrent table design (#1786) 2024-01-03 21:54:42 +01:00
Meier Lukas
514d4a145d Merge pull request #1775 from stark1tty/patch-1
Updated dead installation links in README.md
2024-01-01 11:35:23 +01:00
Nika Shilobod
c1d0299c40 Update README.md
updated installation instruction links from https://homarr.dev/docs/introduction/installation to https://homarr.dev/docs/getting-started/installation/
2024-01-01 06:44:02 +00:00
Manuel
b4a8d47636 version 0.14.3 2023-12-31 12:37:23 +01:00
ajnart
a68f8424f5 Update tests 2023-12-31 12:07:39 +01:00
Thomas Camlong
eba4dd3b9d Merge pull request #1773 from ajnart/docker-onboarding-fix 2023-12-31 11:58:00 +01:00
Thomas Camlong
745adb3a95 Merge branch 'dev' into docker-onboarding-fix 2023-12-31 11:42:56 +01:00
ajnart
c83b04dfc0 Refactor Docker integration in board page 2023-12-31 11:25:21 +01:00
Manuel
a3948430ed chore: increase version in package.json (#1771) 2023-12-30 22:11:05 +01:00
Manuel
108803ae2a fix: outdated config schema (#1769) 2023-12-30 21:54:48 +01:00
Thomas Camlong
b9a5b5ed09 chore: new Crowdin updates (#1770) 2023-12-30 21:46:01 +01:00
Manuel
159ba4b1c3 config: greetings (#1753) 2023-12-30 21:42:48 +01:00
Manuel
0a929a93a3 config; stale action (#1752) 2023-12-30 21:42:30 +01:00
Thomas Camlong
e9100fce91 Update FUNDING.yml (#1768) 2023-12-30 21:41:49 +01:00
Thomas Camlong
082077ec9d feat: import to docker form board, docker button on boards (#1714) 2023-12-30 20:11:38 +01:00
Tagaishi
e13a4afdde feat: remove location based timezone resolving (#1680) 2023-12-30 20:09:17 +01:00
ajnart
f20c209c94 Address PR comments 2023-12-29 17:59:19 +01:00
Thomas Camlong
f9c9f23b0c Update overseerr.ts 2023-12-29 17:57:32 +01:00
Thomas Camlong
19e65e0d08 config: new crowdin updates 2023-12-29 10:57:26 +01:00
Manuel
b6b697cabd fix: umlaute in RSS (#1755) 2023-12-29 10:55:59 +01:00
Thomas Camlong
fd3f8f317a config: update crowdin translations 2023-12-22 21:50:04 +01:00
Manuel
553fa98e61 #1616 better user management (#1748) 2023-12-20 10:18:24 +01:00
gleb
199b711324 Updated entityStateSchema to handle nullables (#1744)
Co-authored-by: Gleb Fomichev <gleb.fomichev@softswiss.com>
2023-12-17 18:06:51 +01:00
Tagaishi
976634a908 ️ Improve code in manage layout page (#1681)
Co-authored-by: Thomas Camlong <ajnart@users.noreply.github.com>
2023-12-07 18:30:49 +01:00
Someone
217020154b feat: add filter and sorting functionality to torrents table 2023-12-07 18:28:28 +01:00
Tagaishi
51e96c0ccf Use gravatar with user email (#1688)
*  Use gravatar with user email
2023-12-07 18:15:07 +01:00
Thomas Camlong
d6af6af0b6 🐛 About page and manage user pages not translated (#1724) 2023-12-07 18:14:10 +01:00
Manuel
fc38f7ab29 #1616 Recovery script in Docker container (#1726) 2023-12-04 13:06:14 +01:00
Thomas Camlong
deee511f86 Fix unused function and enable user count check in
getServerSideProps
2023-12-02 12:41:07 +01:00
Thomas Camlong
48ca5352c9 Add client side reload of the config with the newly added apps 2023-11-27 00:14:41 +01:00
Thomas Camlong
e2da8338e0 🚧 WIP on adding docker containers to boards 2023-11-26 23:24:03 +01:00
Thomas Camlong
cca8be09cb Merge pull request #1709 from jeffersonraimon/patch-1 2023-11-26 22:32:11 +01:00
Jefferson J. Raimon
9bdd6a442e Update acceptableStatusCodes.ts
add 202 code
2023-11-25 16:28:21 -03:00
Manuel
15605e3f09 🔀 Version 0.14.2 2023-11-23 22:54:43 +01:00
Manuel
dfcb899013 Stale time for entity state (#1702) 2023-11-23 22:21:34 +01:00
Manuel
5522abdfb6 🔖 Increase version (#1699) 2023-11-23 21:46:51 +01:00
Manuel
312e2c8297 #698 homeassistant widget (#1658) 2023-11-23 21:44:05 +01:00
Thomas Camlong
7f46fafbb9 🌐 New Crowdin updates (#1692) 2023-11-23 21:43:18 +01:00
Tagaishi
5a8a378a2e 🐛 Affix overlapping custom CSS box (#1687) 2023-11-21 18:34:01 +01:00
Thomas Camlong
fe63c03372 🌐 New Crowdin updates (#1682) 2023-11-21 18:33:18 +01:00
ajnart
c88cd3c05e 🚧 WIP on docker import feature 2023-11-20 13:37:58 +01:00
Meier Lukas
eadfa4a10f Add support for installation in address bar (#1675) 2023-11-18 22:11:29 +01:00
Thomas Camlong
5aefd0962f New Crowdin updates (#1641) 2023-11-18 15:43:46 +01:00
tuxsudo
da7c111438 Allow custom nextauth port (#1663) 2023-11-18 15:42:47 +01:00
ajnart
669d311b0c 🚧 WIP on Docker import group 2023-11-17 15:34:14 +01:00
Thomas Camlong
228c51299b Merge pull request #1651 from ajnart/fix-notebook-settings-overlapped 2023-11-15 20:54:40 +01:00
Thomas Camlong
57975f3030 Merge pull request #1652 from ajnart/fix-edit-mode-notification-link
🐛 Link to definition of screen sized for edit mode notification wrong
2023-11-15 09:08:57 +01:00
Thomas Camlong
f4e737b4a1 Merge pull request #1654 from ajnart/add-licence-field-to-migration-package-json
🐛 Migrate package.json has no license field
2023-11-15 09:08:26 +01:00
Tagaishi
a933406ef8 Merge pull request #1655 from No-Maines-Land/patch-1
Update GeneralTab.tsx
2023-11-15 08:40:46 +01:00
No-Maines-Land
a30d6f6f7b Update GeneralTab.tsx 2023-11-15 01:03:38 -05:00
Meier Lukas
34074b1c92 🐛 Migrate package.json has no license field 2023-11-15 06:48:23 +01:00
Meier Lukas
f7ab929bcb 🐛 Link to definition of screen sized for edit mode notification wrong 2023-11-15 06:44:07 +01:00
Meier Lukas
21dcde44a1 🐛 Notebook edit button placed above edit mode settings 2023-11-15 06:39:40 +01:00
Meier Lukas
ccf0970226 Merge pull request #1628 from ajnart/dev
🔖 Release v0.14.1
2023-11-14 21:44:13 +01:00
Thomas Camlong
221c13d92f Merge pull request #1639 from ajnart/fix-flags 2023-11-14 21:16:23 +01:00
Thomas Camlong
4486d4b49d Merge branch 'dev' into fix-flags 2023-11-14 21:15:00 +01:00
Thomas Camlong
1ee17463c2 Merge pull request #1637 from ajnart/error-serialization-gssp 2023-11-14 21:13:25 +01:00
ajnart
687c7587df ♻️ Remove the checks for mounts 2023-11-14 21:11:41 +01:00
ajnart
6484ed5976 add country again 2023-11-14 21:10:04 +01:00
Meier Lukas
8ee28767fc 🐛 Fix build issue 2023-11-14 21:06:07 +01:00
Meier Lukas
a2cfe8391e Remove mount check do to automatic mounting with Volume in Dockerfile 2023-11-14 20:58:08 +01:00
Meier Lukas
de2a632a4e 🐛 Failed to stage 2023-11-14 20:52:22 +01:00
Meier Lukas
f06dff7bb7 🐛 Add production environment check before checking mountpoint 2023-11-14 20:52:05 +01:00
Meier Lukas
7634062a85 🐛 Error object not compatible with json parsing of gssp 2023-11-14 20:43:59 +01:00
Meier Lukas
a0efd01d43 🐛 Error object not compatible with json parsing of gssp 2023-11-14 20:42:17 +01:00
Thomas Camlong
c9d1a12299 🐛 Copy default.json if it doesn't exist (#1636) 2023-11-14 20:31:39 +01:00
Thomas Camlong
c6b945775a Merge pull request #1622 from Tagaishi/overseerr-link-in-search-fix 2023-11-14 20:04:55 +01:00
Thomas Camlong
6e6f435abc Merge pull request #1629 from ajnart/ssr/optimize 2023-11-14 20:04:25 +01:00
Thomas Camlong
12d531c258 New Crowdin updates (#1614) 2023-11-14 20:04:13 +01:00
Tagaishi
de344ccea9 🐛 Remove notebook edit button for non admins (#1634)
* 🐛 Remove permission to modify text to non admins

* 🐛 notebook read only checks admin only

Fixed by @Tagaishi
2023-11-14 20:02:24 +01:00
Meier Lukas
b05152abb1 🐛 File busy with node > 20.3 (#1630) 2023-11-13 21:48:29 +01:00
ajnart
d2e7615345 🧪 Fix tests 2023-11-13 21:45:21 +01:00
Meier Lukas
404d73ebf7 🔖 Bumb version to 1.14.1 (#1627) 2023-11-13 20:50:35 +01:00
ajnart
5a563b3875 Improve boards page, show if Public/Restricted 2023-11-13 20:28:31 +01:00
ajnart
e3e890f0a1 Update crowdin data 2023-11-13 20:20:35 +01:00
Tagaishi
a1e8ffc367 🐛 Logo header size fix (#1625) 2023-11-13 20:07:00 +01:00
Thomas Camlong
811d940f2b 🐳 Fix issues with dockerfile (#1611)
* Add `wait $PID` to be able to send SIG_ABORT

* Move to docker `entrypoint`

* Change default NEXTAUTH_URL

* Add `VOLUME` instruction

* corrected a typo

* 🐳 Fix docker TCP not working

Fixes Lost docker connection via TCP with 0.14.0 update #1577

* 🚧 Improve dockerfile and start script and fix permission issue by adding new user with permission to read / write to /data folder

* 🐛 Cleanup changes, Local db:migrate script not working, CI failed

*  Image properties customization (#1590)

* 🌐 New Crowdin updates (#1572)

*  Add notice page for readonly db

* Misc docker changes

* 🐳 Add `homarr` as `USER`

* 🐛 Unable to use user homarr because db.sqlite file is already owned by root

---------

Co-authored-by: Lumilias <10852161+Lumilias@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
Co-authored-by: Manuel <30572287+manuel-rw@users.noreply.github.com>
Co-authored-by: Manuel <manuel.ruwe@bluewin.ch>
2023-11-13 20:04:44 +01:00
Tagaishi
d2441ba86a 🐛 Overseerr link in search not working fix 2023-11-13 13:21:49 +01:00
Thomas Camlong
a3ca74ab46 Merge pull request #1613 from benniblot/dev 2023-11-12 19:01:01 +01:00
ajnart
102bd5deee ⚗️ Try to drastically reduce page load time
by using TRPC server-side helpers :
https://trpc.io/docs/client/nextjs/server-side-helpers
2023-11-12 17:24:25 +01:00
Benjamin
f3d24a62f5 fixed a bug that displayed a "," after the last item 2023-11-12 13:39:14 +00:00
Someone
3edd2b8ea2 Fixed typo (#1612)
The image is not repeated any may not fill the entire space (recommended) =>
The image is not repeated and may not fill the entire space (recommended)
2023-11-12 14:21:17 +01:00
Manuel
30378d299e fix: customize page crashing for invalid board (#1610) 2023-11-12 14:20:48 +01:00
Thomas Camlong
0437b63870 🌐 New Crowdin updates (#1572) 2023-11-12 13:37:54 +01:00
Manuel
27037c6f50 Image properties customization (#1590) 2023-11-12 13:37:32 +01:00
Thomas Camlong
e900a7b07e 🐳 Improve dockerfile and start script and fix permission issue #1602 2023-11-12 13:37:01 +01:00
ajnart
173727c155 🐳 Fix docker TCP not working
Fixes Lost docker connection via TCP with 0.14.0 update #1577
2023-11-12 13:35:57 +01:00
Thomas Camlong
c7b25ce21e Merge pull request #1603 from Lumilias/dev 2023-11-12 13:02:33 +01:00
Meier Lukas
d7cdd6a30b 🐛 Cleanup changes, Local db:migrate script not working, CI failed 2023-11-12 11:20:22 +01:00
Lumilias
e1b4d76133 corrected a typo 2023-11-11 18:55:58 -06:00
Meier Lukas
2a1f73345c 🚧 Improve dockerfile and start script and fix permission issue by adding new user with permission to read / write to /data folder 2023-11-12 01:02:26 +01:00
Meier Lukas
e9aef74815 🐛 Placeholder width stretches out of screen (#1587) 2023-11-11 16:49:35 +01:00
Manuel
b146a7e1e2 🐛 Allow anonymous condition for default board (#1588) 2023-11-11 16:47:21 +01:00
Meier Lukas
351aa47e47 🐛 Logo has no height and object-fit is not contain #1581 (#1584) 2023-11-11 15:34:50 +01:00
Meier Lukas
6753eeb822 🐛 Add rm commands before move command (#1586) 2023-11-11 15:34:30 +01:00
Thomas Camlong
82b292fce1 Merge pull request #1575 from ajnart/master 2023-11-10 23:40:14 +01:00
ajnart
2b3a4393f3 💚 Fix CI 2023-11-10 23:20:07 +01:00
ajnart
2f660dd992 💚 Fix CI 2023-11-10 23:18:57 +01:00
Thomas Camlong
a3e7491d05 Merge pull request #1505 from ajnart/dev
Co-authored-by: Thomas Camlong <thomascamlong@gmail.com>
Co-authored-by: Tagaishi <Tagaishi@hotmail.ch>
Co-authored-by: Manuel <manuel.ruwe@bluewin.ch>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
Co-authored-by: Manuel <30572287+manuel-rw@users.noreply.github.com>
Co-authored-by: Tobias Stadler <28538704+devtobi@users.noreply.github.com>
Co-authored-by: Henry Skrtich <1214484+hskrtich@users.noreply.github.com>
Co-authored-by: AuthorShin <a.saneie@yahoo.com>
Co-authored-by: Diogo Valentim <diogovalentte10@gmail.com>
Co-authored-by: Someone <10882916+InterN0te@users.noreply.github.com>
Co-authored-by: Spillebulle <46653946+Spillebulle@users.noreply.github.com>
Co-authored-by: Justijn Depover <justijndepover@gmail.com>
Fix locale for calendar and clock (#1330)
fix (#1375)
close modal on click when opened (#1396)
fix (#1401)
fix: stop triming traling slashes (#1435)
fixes #777
fix: trim media server url (#1438)
Fix miscellaneous console errors (#1418)
fixes (#1419)
Fix tiptap url CVE (#1459)
Fix allow guest issue (#1472)
Fix the leading slash when adding container via docker (#1478)
2023-11-10 23:06:14 +01:00
Manuel
d7f785b374 config: update dockerfile path (#1571) 2023-11-10 22:43:22 +01:00
ajnart
fe0042d466 🔥 Remove experimental header 2023-11-10 22:37:15 +01:00
ajnart
30f3897a80 🔧 Change default config colors 2023-11-10 22:23:06 +01:00
Manuel
786e6cae9b ⚰️ Update dead path (#1570) 2023-11-10 22:22:39 +01:00
ajnart
9d7a5abfd5 🔥 Remove experimental header 2023-11-10 21:52:19 +01:00
Thomas Camlong
45b9caf231 New Crowdin updates (#1569) 2023-11-10 21:23:07 +01:00
Thomas Camlong
04bf4914e7 Merge pull request #1568 from ajnart/feat/new-default-board 2023-11-10 21:20:02 +01:00
Manuel
a0eb68782a feat: new default board 2023-11-09 21:27:23 +01:00
Thomas Camlong
545749a057 🐛 Refactor DateTile component to use API timezone (#1563)
and remove unused hook
2023-11-09 20:25:32 +01:00
Thomas Camlong
4316ffb27f Add scrollbar-gutter property to global styles (#1562) 2023-11-09 20:24:51 +01:00
Thomas Camlong
704ae1cbe4 🌐 New Crowdin updates (#1551) 2023-11-09 20:24:27 +01:00
Manuel
82c79c6591 🚑 Middleware crash (#1567) 2023-11-09 20:23:53 +01:00
ajnart
67eaada59b 📦 Rollback TS 2023-11-09 19:42:47 +01:00
ajnart
1984baf041 📦 Rollback TS 2023-11-09 19:40:41 +01:00
ajnart
3cdb1c3253 📦 Rollback TS 2023-11-09 19:36:25 +01:00
ajnart
50b21667bb 👷 Update CI 2023-11-09 18:11:29 +01:00
ajnart
694acafe21 🔥 Remove unused language country property 2023-11-09 03:28:17 +01:00
ajnart
886a48cd75 🔥 Refactor language list in language.ts 2023-11-09 03:28:02 +01:00
ajnart
4b350125c3 🔧 Change vscode config files 2023-11-09 03:27:13 +01:00
ajnart
c5409e726d 📦 Update yarn lockfile 2023-11-09 03:14:40 +01:00
Thomas Camlong
a95e773cb0 Merge pull request #1565 from ajnart/remove-unused 2023-11-09 03:10:27 +01:00
ajnart
1bf45b22f3 📌 Update TypeScript version to 5.2.2 in package.json
and yarn.lock
2023-11-08 20:51:40 +01:00
ajnart
231507dd76 re-launch ci 2023-11-08 20:46:43 +01:00
ajnart
a36813da39 Refactor middleware.ts by removing 'process' 2023-11-08 20:41:36 +01:00
ajnart
ce30bffb6a ⚰️ Remove unused translations files and packages 2023-11-08 20:41:09 +01:00
Thomas Camlong
080eb1b369 Merge pull request #1560 from ajnart/re-onboard-renovate
🔧 Remove Renovate configuration from package.json
2023-11-07 17:28:50 +01:00
ajnart
20584d0a98 🔧 Remove Renovate configuration from package.json 2023-11-07 17:28:19 +01:00
Thomas Camlong
6dd0570b2d Merge pull request #1559 from ajnart/remove-annoying-prints
🔇 Remove unnecessary console logs
2023-11-07 17:07:48 +01:00
ajnart
3c4f5efa05 🔇 Remove unnecessary console logs 2023-11-07 17:06:38 +01:00
Tagaishi
7f851fdd10 Merge pull request #1554 from InterN0te/dev-addRatio
Add Torrents ratio in Torrents Queue Widget
2023-11-07 12:36:43 +01:00
Someone
314ccc7a23 Fix info for displayRatioWithFilter switch 2023-11-07 12:15:56 +01:00
Someone
bb92c564d6 Format code with VSC 2023-11-07 12:08:24 +01:00
Someone
df2d7bebab Fix bad English
Co-authored-by: Tagaishi <Tagaishi@hotmail.ch>
2023-11-07 11:48:51 +01:00
Someone
ff582e5dcb More readable code
Co-authored-by: Tagaishi <Tagaishi@hotmail.ch>
2023-11-07 11:46:32 +01:00
Thomas Camlong
d63b6d8ea8 Merge pull request #1539 from ajnart/about-page
Turn about modal into a static page
2023-11-07 09:57:25 +01:00
ajnart
8ad2111e45 Add i18n-ally settings for React-i18next 2023-11-07 09:55:49 +01:00
ajnart
504a290f67 💡 Add title to About page 2023-11-07 09:55:29 +01:00
Tagaishi
b23c2c1933 Merge pull request #1556 from Tagaishi/media-request-wrapping-fix
🐛 Media Request wrapping fix with line clamp
2023-11-07 05:52:23 +01:00
Tagaishi
cd4dfb1707 🐛 Media Request wrapping fix with line clamp 2023-11-06 06:13:35 +01:00
Tagaishi
f76c9f1d68 Merge pull request #1553 from InterN0te/patch-1
Use dynamic conversion for Torrent DownloadSpeed and UploadSpeed
2023-11-06 04:13:01 +01:00
Tagaishi
5dcdeab21c Merge pull request #1534 from InterN0te/master-showActiveTorrent
Add an option to show active torrents when completed torrents are hidden in Torrent Queue widget
2023-11-06 04:11:34 +01:00
Someone
17871f62f5 Fixed test
Export getTorrentsRatio function to be called in test
2023-11-06 02:38:52 +01:00
Someone
7a81742a19 Remove test from other PR 2023-11-06 02:34:45 +01:00
Someone
69d1e4e491 Add Calcul ratio test 2023-11-06 02:28:07 +01:00
Someone
c8dc3abab6 Rename fonction to more explicite name 2023-11-06 01:54:55 +01:00
Someone
8abec93aad Update torrents-status.json
Fix label and description
2023-11-06 01:51:55 +01:00
Someone
37191b971b Used label filter only if necessary 2023-11-06 00:18:24 +00:00
Someone
8495d5b165 Added global ratio (only selected labels) and filtered torrents list ratio 2023-11-06 00:15:20 +00:00
ajnart
2f15fe68d0 🐛 Remove opacity from credits button 2023-11-05 17:52:40 +01:00
Someone
2d28ecc990 Use dynamic unit for Torrent DownloadSpeed and UploadSpeed
Use humanFileSize to display Torrent DownloadSpeed and UploadSpeed
2023-11-05 17:39:37 +01:00
Someone
390d4e7522 Switch speedLimitOfActiveTorrents to camel case 2023-11-03 21:05:16 +00:00
Someone
f07d5f798c Revert "Switch to CamelCase for DisplayActiveTorrents var"
This reverts commit c6c2dbd061.

Revert : Wrong case used
2023-11-03 21:02:45 +00:00
Someone
c6c2dbd061 Switch to CamelCase for DisplayActiveTorrents var 2023-11-03 20:41:54 +00:00
Thomas Camlong
f4a4b3c252 🌐 New Crowdin updates (#1531) 2023-11-03 21:15:08 +01:00
Tagaishi
4f0be52fe9 Notebook Add Advanced Controls (#1452)
* 💄 Reduce notebook widget min width to fit sidebar

*  Highlight and text align controls

*  Notebook Image support

*  Notebook text coloring support

*  Notebook Image resize support

*  Notebook Advanced Highlight and Text Coloring

*  TaskList and lists indentations (not finished)

* ⬆️ Updated tiptap components to 2.1.12

* 🐛 notebook content not updating

* Cancel Edit function + 🐛onReadOnlyCheck bug fix

*  Notebook Table

* 🚧 Tweaks

* 🌐 Added Translations

* 🐛 Fix notebook table column resize

* 🌐 Replace common translations

*  Notebook Underline, default text change
2023-11-03 21:14:29 +01:00
Tagaishi
5eb4365a59 Auto handle sonarr and radarr API differences (#1548) 2023-11-03 21:07:37 +01:00
Justijn Depover
388a856a42 Update default.json with typo (#1547) 2023-11-03 20:57:53 +01:00
Tagaishi
832276e80e Revert "Fix torrent speeds unit"
This reverts commit b60be13ab9.
2023-11-02 11:35:17 +01:00
Someone
b60be13ab9 Fix torrent speeds unit 2023-11-02 10:41:42 +01:00
Tagaishi
521d47f41c Merge pull request #1546 from Spillebulle/Spillebulle
Fixed Typos
2023-11-02 10:23:58 +01:00
Spillebulle
ce6cefdc1d Update general.json
Reverted Swedish changes
2023-11-02 10:11:01 +01:00
Someone
982bb557a3 Renamed option "Display active torrents"
Removed change in public/locales/fr/modules/torrents-status.json
2023-11-02 08:44:46 +00:00
Spillebulle
c37c5f9347 Fixed Typos 2023-11-02 07:37:44 +01:00
Thomas Camlong
6428944908 Merge pull request #1509 from diogovalentte/dev
feat: add support for default ports on http(s) protocols on download.ts
2023-11-01 23:12:16 +01:00
Thomas Camlong
242c1b9410 Merge pull request #1545 from ajnart/add-czech
Add-czech
2023-11-01 23:11:29 +01:00
ajnart
6ca364dc95 🔧 Update crowdin.yml config file 2023-11-01 23:10:47 +01:00
ajnart
90800e539d 🌐 Add Czech 2023-11-01 23:10:28 +01:00
Thomas Camlong
5c8155b0d7 Merge pull request #1541 from InterN0te/dev-fixTorrentSpeed-Mb-MB
Fix Mb/s / MB/s conversion error in torrents speed
2023-11-01 22:59:41 +01:00
Someone
04e8c03482 Update TorrentQueueItem.tsx 2023-11-01 13:46:08 +01:00
ajnart
173db1876d Add add app event 2023-11-01 12:00:56 +01:00
ajnart
67a81a97db 🐛 Fix locales 2023-11-01 03:28:41 +01:00
ajnart
58e57492e2 Completely rework the about page 2023-11-01 02:53:39 +01:00
Someone
33fa6cfafe Fixed torrent upload speed comparison to consider it active
Torrent.uploadSpeed is already in Bytes/s, no need to multiple SpeedLimitOfActiveTorrents by 8
See PR #1273 and Issue #488
2023-11-01 00:25:56 +00:00
Someone
534318f74c Update en/.../torrents-status.json
Fix English unit for Megabytes per second
2023-11-01 01:11:12 +01:00
ajnart
6f12863863 Merge branch 'dev' into about-page 2023-10-31 23:48:37 +01:00
ajnart
ea8c8ffee2 🚧 WIP on about page 2023-10-31 23:48:24 +01:00
Manuel
e991bcd394 🐛 Access callback conditions (#1536) 2023-10-31 19:04:59 +01:00
Someone
b135063f5e Add option to set uploadspeed limit to consider torrents as active 2023-10-31 15:31:08 +00:00
Someone
ae11d5d84f Update TorrentTile.spec.ts to fix test 2023-10-31 15:44:10 +01:00
Someone
2c019e12d6 Add an option to show active torrents when
completed torrents are hidden
2023-10-31 11:23:26 +00:00
Thomas Camlong
780bfd6292 🐛 Use session lanugage instead of locale for crowdin live-translate 2023-10-31 10:32:55 +01:00
Thomas Camlong
f776630b09 🐛 Use session lanugage instead of locale for crowdin live-translate 2023-10-31 10:21:24 +01:00
Thomas Camlong
493711cf7b 🐛 Remove emoji field in language.ts 2023-10-31 10:00:53 +01:00
Thomas Camlong
bb76d51655 🐛 fix crossOrigin spelling 2023-10-31 09:55:23 +01:00
Thomas Camlong
9c7cdaff39 Merge pull request #1526 from ajnart/crowdin-live-translate 2023-10-31 09:51:43 +01:00
Thomas Camlong
dca6d3363f Merge branch 'dev' into crowdin-live-translate 2023-10-31 09:18:57 +01:00
Thomas Camlong
41512fccb5 Merge pull request #1432 from Tagaishi/common-troubleshoot-and-auto-handling 2023-10-31 09:17:46 +01:00
Thomas Camlong
70355b2193 Merge pull request #1528 from ajnart/crossorigin/auth 2023-10-31 09:16:19 +01:00
Thomas Camlong
0b2408ae09 Merge pull request #1518 from ajnart/add-chinese-traditional 2023-10-31 09:14:26 +01:00
Thomas Camlong
3d90a8b44b 🌐 Update Chinese language mappings 2023-10-31 09:14:02 +01:00
Thomas Camlong
fc969e5042 New Crowdin updates (#1529)
Add Chinese traditional and Crowdin pseudo language (CR)
2023-10-31 09:12:59 +01:00
Thomas Camlong
4a47009aec Update CommonHead.tsx with crossorigin="use-credentials" 2023-10-31 01:00:15 +01:00
Thomas Camlong
1ad761f217 🌐 Update Chinese language mappings 2023-10-31 00:52:44 +01:00
Thomas Camlong
0da6112913 Merge pull request #1527 from ajnart/revert-1519-feature/local-weather-fetch 2023-10-31 00:32:13 +01:00
Thomas Camlong
66f0368183 Revert " Fetch the weather using a local request instead of a server-side one" 2023-10-31 00:31:59 +01:00
Thomas Camlong
53ef4a0579 Add crowdin live-translate feature! 2023-10-31 00:21:01 +01:00
Thomas Camlong
181193bdf8 Merge pull request #1525 from ajnart/update-crowdin
Fix crowdin links
2023-10-30 21:57:14 +01:00
Thomas Camlong
925fbd8ad3 🚨Fix compilation errors 2023-10-30 21:46:20 +01:00
Thomas Camlong
dda5b66a98 Fix crowdin links 2023-10-30 20:28:39 +01:00
Thomas Camlong
9a2268bac6 Merge pull request #1521 from ajnart/cleanup/remove-docker
⚰️ Remove docker on index page
2023-10-30 20:02:39 +01:00
Thomas Camlong
9e2876c638 Merge pull request #1522 from ajnart/1504-allow-image-caching-using-nextimage
Fix walks repo using github
2023-10-30 20:02:15 +01:00
Thomas Camlong
b7bd877629 Merge pull request #1520 from ajnart/fix-walkx/jsdelivr
🐛 Fix walks repository not up to date
2023-10-30 20:01:37 +01:00
Thomas Camlong
a2e562a675 Update src/tools/server/images/github-icons-repository.ts 2023-10-30 20:00:36 +01:00
Tagaishi
503b5b0b35 💄 Moved button 💬 Added troubleshoot steps 2023-10-30 19:57:44 +01:00
Thomas Camlong
3d6fa44897 Merge pull request #1519 from ajnart/feature/local-weather-fetch
 Fetch the weather using a local request instead of a server-side one
2023-10-30 19:56:49 +01:00
Thomas Camlong
a957db7def ⚰️ Remove docker on index page 2023-10-30 18:55:45 +01:00
Tagaishi
2ad693a498 Merge branch 'dev' of https://github.com/ajnart/homarr into common-troubleshoot-and-auto-handling 2023-10-30 18:55:05 +01:00
Thomas Camlong
6273af503b 🐛 Fix walks repository not up to date 2023-10-30 16:24:48 +01:00
Thomas Camlong
92ffce1b3b 🐛 Fix walks repository not up to date 2023-10-30 16:19:17 +01:00
Thomas Camlong
7ba9065fb7 Fetch the weather using a local request instead of a server-side one
This allows for request caching on the disk using node's fetch
2023-10-30 15:15:33 +01:00
Thomas Camlong
2e481e2103 🐛 await for GeoTz in timezone finder 2023-10-30 15:04:21 +01:00
Thomas Camlong
2c4560d13a Add Chinese traditional as zh-tw 2023-10-30 13:58:37 +01:00
Thomas Camlong
9d334e23c8 🐛 Fix RSS widget description 2023-10-30 13:57:40 +01:00
Thomas Camlong
4aa09b7e95 🐛 Fix unknown country in tRPC citySchema 2023-10-30 13:57:09 +01:00
Thomas Camlong
4d716bbcaf Merge pull request #1517 from Tagaishi/clock-timezone-named-offset-fix
🐛Clock fix timezone named offset format for dayjs
2023-10-30 13:22:38 +01:00
Tagaishi
d97850aaad 🐛Clock fix timezone named offset format for dayjs 2023-10-30 03:07:38 +01:00
Tagaishi
ac3c088492 🐛 adguard removed max test on process time (#1512) 2023-10-28 20:01:14 +02:00
Manuel
5b3a236194 Add 401 page (#1508) 2023-10-27 23:10:42 +02:00
ajnart
4072ebc5a5 Header in manage layout redirects to /b/ now 2023-10-27 15:53:35 +02:00
Diogo Valentim
3a5cfc6585 feat: add support for default ports on http(s) protocols on downloads.ts 2023-10-26 22:29:03 -03:00
ajnart
6e250d6f34 🐛 Fix password strenght meter dissapearing 2023-10-26 13:44:30 +02:00
ajnart
dff3ba5397 🐛 Add wget to docker image for healthcheck 2023-10-26 13:13:25 +02:00
Thomas Camlong
171be4b767 Merge pull request #1494 from ajnart/add-umami
Add-umami
2023-10-26 12:41:06 +02:00
Thomas Camlong
a9144a9340 Merge branch 'dev' into add-umami 2023-10-26 12:40:46 +02:00
ajnart
70f130569b Update tests 2023-10-25 15:36:58 +02:00
ajnart
5ab0e5207b 💄 Prettier codebase 2023-10-25 15:29:45 +02:00
ajnart
01ab01d159 re-launch ci 2023-10-25 15:28:55 +02:00
ajnart
b9fec7d445 🐛 Fix newVersionAvailable indicator 2023-10-25 15:22:21 +02:00
ajnart
ea9c74ea11 Changes for demo purposes
Add login button to login page, demo mode env variable and fix update indicator
2023-10-25 15:18:40 +02:00
ajnart
7690572c7b 🐛 Fix bug with new version 2023-10-25 14:40:55 +02:00
ajnart
9d841043f4 Merge branch 'master' into dev 2023-10-25 14:14:51 +02:00
ajnart
30acb3eff3 Bumb version to v0.14.0 2023-10-25 14:14:16 +02:00
ajnart
6cb6d63516 Add new version indicator for users 2023-10-25 14:13:58 +02:00
ajnart
ac3771ad7b Small changes to RSS widget and MediaRequest 2023-10-25 14:08:27 +02:00
Thomas Camlong
c6a1992a87 Merge pull request #1491 from ajnart/fix-missing-translation-for-about
🐛 Common settings translation not included within all pages for about credits
2023-10-25 12:59:29 +02:00
Thomas Camlong
1c5aec9bb6 Merge pull request #1490 from ajnart/fix-transition-drawer-issue-navigation
🐛 Issue with navigation drawer transitionProps
2023-10-25 12:59:12 +02:00
Thomas Camlong
743d06b88e Merge branch 'dev' into add-umami 2023-10-25 12:58:44 +02:00
ajnart
77b2239987 📈 Fix env 2023-10-25 12:58:13 +02:00
Thomas Camlong
cfe44569d9 Merge pull request #1489 from ajnart/fix-board-customize-affix
🐛 No validation messages when saving, Dirty state not reset, Wrong page title validation
2023-10-25 12:57:39 +02:00
Thomas Camlong
395c1909eb Merge pull request #1469 from Tagaishi/radarr-v5-poster-support
 Adds support for poster on Radarr v5's api
2023-10-25 12:53:06 +02:00
Thomas Camlong
ce42acfe2f Merge pull request #1485 from ajnart/fix-missing-version-in-about
🐛 About version and dependencies not present
2023-10-25 12:52:21 +02:00
Thomas Camlong
0e5a55f586 Merge pull request #1486 from ajnart/fix-issue-with-user-settings
🐛 500 error when saving user settings, Language not applied after save of user preferences
2023-10-25 12:51:59 +02:00
Thomas Camlong
e5197e6a59 Merge pull request #1487 from ajnart/background-image-issue
🐛 Background image not visible, remove background image from default config
2023-10-25 12:51:38 +02:00
ajnart
36a50de485 Fix optional env variable 2023-10-24 15:05:57 +02:00
ajnart
b9a226f59c 📈 Add umami analytics using homarr.dev 2023-10-24 14:46:14 +02:00
ajnart
31aef6f3d9 Disable beforeunload event in dev 2023-10-24 13:47:22 +02:00
Meier Lukas
fb4d4e4e8d 🐛 Common settings translation not included within all pages for about credits 2023-10-23 00:33:18 +02:00
Meier Lukas
0c2b54d833 🐛 Issue with navigation drawer transitionProps 2023-10-23 00:07:40 +02:00
Meier Lukas
87a273c092 🐛 No validation messages when saving, Dirty state not reset, Wrong page title validation 2023-10-23 00:01:16 +02:00
Meier Lukas
5d4c0cf293 🐛 Background image not visible, remove background image from default config 2023-10-22 23:44:15 +02:00
Meier Lukas
6f94d20ab4 🐛 500 error when saving user settings, Language not applied after saving user preferences 2023-10-22 23:30:20 +02:00
Meier Lukas
367d8253a4 🐛 About version and dependencies not present 2023-10-22 23:12:49 +02:00
Thomas Camlong
fe0b34a6e4 New Crowdin updates (#1457) 2023-10-22 18:00:47 +02:00
Thomas Camlong
f8dfa0d7f0 Improve customizations page load speed with SSR (#1477) 2023-10-22 18:00:16 +02:00
Thomas Camlong
a41bee0d44 🐛 Fix the leading slash when adding container via docker (#1478) 2023-10-22 17:59:47 +02:00
Meier Lukas
6bcef9e24c 🐛 Issue with migrate script in docker (#1483) 2023-10-22 17:59:21 +02:00
Meier Lukas
0a98be4553 Add tests for invite router (#1456)
*  Add test for invite router

*  Add cleanup to invite-router tests, add tests for creation and deletion of invites

* ♻️ Fix typo

* ♻️ Remove nullish for limit of invite router all procedure
2023-10-18 20:41:59 +02:00
Meier Lukas
d60cd2ed8d 🐛 Issue with migrate script for node 20 (#1467)
* 🐛 Issue with migrate script for node 20

* 🐛 Wrong database url in example env file
2023-10-18 20:40:54 +02:00
Meier Lukas
b8fab01c0b Fix allow guest issue (#1472)
* 🐛 Issue with migrate script for node 20

* 🐛 Issue with allow guest check when default config not present
2023-10-18 20:39:23 +02:00
Tagaishi
62cb758db5 Adds support for poster on Radarr v5's api 2023-10-13 21:55:39 +02:00
Tagaishi
24024cc7f2 🎨 Added troubleshoot steps + external address "/" 2023-10-12 19:23:16 +02:00
Manuel
f3f4f23718 🔒️ Fix tiptap url CVE (#1459) 2023-10-09 21:29:41 +02:00
Thomas Camlong
2b5e2094fa 🌐 New Crowdin updates (#1433) 2023-10-08 12:12:44 +02:00
Meier Lukas
1d50e2ce9a ♻️ Migrate from prisma to drizzle (#1434)
* ♻️ Migrate from prisma to drizzle
* 🐛 Build issue with CalendarTile
* 🚧 Temporary solution for docker container
* 🐛 Drizzle not using DATABASE_URL
* ♻️ Address pull request feedback
* 🐛 Remove console log of env variables
* 🐛 Some unit tests not working
* 🐋 Revert docker tool changes
* 🐛 Issue with board slug page for logged in users

---------

Co-authored-by: Thomas Camlong <thomascamlong@gmail.com>
2023-10-08 12:10:48 +02:00
Tagaishi
4945725702 🐛 DNS-Hole error handling and fixes (#1419)
* 🐛 Remove url requirement

* ️ Ignore dnshole in widget when not contactable

*  Error tile for dns-control instead of load loop
2023-10-08 11:47:31 +02:00
Tagaishi
4e036315ba 🐛 Fix miscellaneous console errors (#1418)
* 🐛 Bookmark widget key fix

* 🐛 Media request list widget key fix

* 🐛 media server widget key fix

* 🐛 Remove "hasNextLevel" error
2023-10-08 11:46:18 +02:00
Manuel
a7655b6348 🐛 Database error with readonly mappings (#1420)
* 🐛 Database error with readonly mappings

* ♻️ PR feedback
2023-10-08 11:45:30 +02:00
AuthorShin
a6be5fa380 Update weather.json (#1440)
Typo fixed

Just changed "An error occured" to "An error occurred"
2023-10-08 11:43:37 +02:00
Manuel
b770b88834 fix: trim media server url (#1438) 2023-09-30 12:42:53 +02:00
Meier Lukas
32e40f3342 🐛 Remove DISABLE_EDIT_MODE and replace with admin-procedure (#1439) 2023-09-30 00:30:55 +02:00
Tagaishi
6c43a19fa1 💄Allow user to make video stream smaller than 2*3 (#1430) 2023-09-28 19:47:13 +02:00
Henry Skrtich
4006c69f5b fix: stop triming traling slashes (#1435)
fixes #777
2023-09-28 19:19:44 +02:00
Thomas Camlong
a6c7fbc1ef Update step-onboarding-finished.tsx (#1437) 2023-09-28 19:18:59 +02:00
Thomas Camlong
76090c8485 New Crowdin updates (#1383)
* New translations general.json (Latvian)

* New translations zod.json (Latvian)

* New translations preferences.json (Latvian)

* New translations header.json (Latvian)

* New translations common.json (Latvian)

* New translations customize.json (Latvian)

* New translations manage.json (Latvian)

* New translations boards.json (Latvian)

* New translations index.json (Latvian)

* New translations invites.json (Latvian)

* New translations invite.json (Latvian)

* New translations create.json (Latvian)

* New translations users.json (Latvian)

* New translations docker.json (Latvian)

* New translations password-requirements.json (Latvian)

* New translations access.json (Latvian)

* New translations common.json (LOLCAT)

* New translations calendar.json (LOLCAT)

* New translations page-appearance.json (LOLCAT)

* New translations login.json (LOLCAT)

* New translations general.json (LOLCAT)

* New translations zod.json (LOLCAT)

* New translations preferences.json (LOLCAT)

* New translations header.json (LOLCAT)

* New translations common.json (LOLCAT)

* New translations customize.json (LOLCAT)

* New translations manage.json (LOLCAT)

* New translations boards.json (LOLCAT)

* New translations index.json (LOLCAT)

* New translations invites.json (LOLCAT)

* New translations invite.json (LOLCAT)

* New translations create.json (LOLCAT)

* New translations users.json (LOLCAT)

* New translations docker.json (LOLCAT)

* New translations password-requirements.json (LOLCAT)

* New translations access.json (LOLCAT)

* New translations common.json (German)

* New translations login.json (German)

* New translations general.json (German)

* New translations zod.json (German)

* New translations preferences.json (German)

* New translations header.json (German)

* New translations common.json (German)

* New translations customize.json (German)

* New translations manage.json (German)

* New translations boards.json (German)

* New translations index.json (German)

* New translations invites.json (German)

* New translations invite.json (German)

* New translations create.json (German)

* New translations users.json (German)

* New translations docker.json (German)

* New translations password-requirements.json (German)

* New translations common.json (Turkish)

* New translations login.json (Turkish)

* New translations general.json (Turkish)

* New translations zod.json (Turkish)

* New translations preferences.json (Turkish)

* New translations header.json (Turkish)

* New translations common.json (Turkish)

* New translations customize.json (Turkish)

* New translations manage.json (Turkish)

* New translations boards.json (Turkish)

* New translations index.json (Turkish)

* New translations invites.json (Turkish)

* New translations invite.json (Turkish)

* New translations create.json (Turkish)

* New translations users.json (Turkish)

* New translations docker.json (Turkish)

* New translations password-requirements.json (Turkish)

* New translations access.json (Turkish)

* New translations dns-hole-controls.json (Slovak)

* New translations access.json (German)

* New translations common.json (Slovak)

* New translations login.json (Slovak)

* New translations general.json (Slovak)

* New translations zod.json (Slovak)

* New translations preferences.json (Slovak)

* New translations header.json (Slovak)

* New translations common.json (Slovak)

* New translations customize.json (Slovak)

* New translations manage.json (Slovak)

* New translations boards.json (Slovak)

* New translations index.json (Slovak)

* New translations invites.json (Slovak)

* New translations invite.json (Slovak)

* New translations create.json (Slovak)

* New translations users.json (Slovak)

* New translations docker.json (Slovak)

* New translations password-requirements.json (Slovak)

* New translations access.json (Slovak)

* New translations login.json (French)

* New translations header.json (French)

* New translations customize.json (French)

* New translations manage.json (French)

* New translations boards.json (French)

* New translations index.json (French)

* New translations invites.json (French)

* New translations invite.json (French)

* New translations create.json (French)

* New translations users.json (French)

* New translations dns-hole-controls.json (Russian)

* New translations login.json (Spanish)

* New translations header.json (Spanish)

* New translations common.json (Spanish)

* New translations customize.json (Spanish)

* New translations manage.json (Spanish)

* New translations boards.json (Spanish)

* New translations index.json (Spanish)

* New translations invite.json (Spanish)

* New translations create.json (Spanish)

* New translations users.json (Spanish)

* New translations calendar.json (Russian)

* New translations login.json (Russian)

* New translations general.json (Russian)

* New translations zod.json (Russian)

* New translations preferences.json (Russian)

* New translations header.json (Russian)

* New translations common.json (Russian)

* New translations customize.json (Russian)

* New translations manage.json (Russian)

* New translations boards.json (Russian)

* New translations index.json (Russian)

* New translations invites.json (Russian)

* New translations invite.json (Russian)

* New translations create.json (Russian)

* New translations users.json (Russian)

* New translations docker.json (Russian)

* New translations password-requirements.json (Russian)

* New translations access.json (Russian)

* New translations common.json (Swedish)

* New translations login.json (Swedish)

* New translations general.json (Swedish)

* New translations zod.json (Swedish)

* New translations header.json (Swedish)

* New translations preferences.json (Spanish)

* New translations header.json (Spanish)

* New translations boards.json (Spanish)

* New translations index.json (Spanish)

* New translations invites.json (Spanish)

* New translations create.json (Spanish)

* New translations users.json (Spanish)

* New translations access.json (Spanish)

* New translations common.json (Chinese Simplified)

* New translations login.json (Chinese Simplified)

* New translations header.json (Chinese Simplified)

* New translations common.json (Danish)

* New translations login.json (Danish)

* New translations general.json (Danish)

* New translations zod.json (Danish)

* New translations preferences.json (Danish)

* New translations header.json (Danish)

* New translations common.json (Danish)

* New translations customize.json (Danish)

* New translations manage.json (Danish)

* New translations boards.json (Danish)

* New translations index.json (Danish)

* New translations invites.json (Danish)

* New translations invite.json (Danish)

* New translations create.json (Danish)

* New translations users.json (Danish)

* New translations docker.json (Danish)

* New translations password-requirements.json (Danish)

* New translations access.json (Danish)

* New translations common.json (Hungarian)

* New translations login.json (Hungarian)

* New translations general.json (Hungarian)

* New translations zod.json (Hungarian)

* New translations preferences.json (Hungarian)

* New translations header.json (Hungarian)

* New translations common.json (Hungarian)

* New translations customize.json (Hungarian)

* New translations manage.json (Hungarian)

* New translations boards.json (Hungarian)

* New translations index.json (Hungarian)

* New translations invites.json (Hungarian)

* New translations invite.json (Hungarian)

* New translations create.json (Hungarian)

* New translations users.json (Hungarian)

* New translations docker.json (Hungarian)

* New translations password-requirements.json (Hungarian)

* New translations selector.json (French)

* New translations zod.json (French)

* New translations preferences.json (French)

* New translations header.json (French)

* New translations common.json (French)

* New translations customize.json (French)

* New translations manage.json (French)

* New translations boards.json (French)

* New translations invites.json (French)

* New translations create.json (French)

* New translations docker.json (French)

* New translations password-requirements.json (French)

* New translations access.json (French)

* New translations general.json (French)

* New translations common.json (French)

* New translations common-media-cards.json (French)

* New translations zod.json (French)

* New translations preferences.json (French)

* New translations boards.json (French)

* New translations index.json (French)

* New translations invites.json (French)

* New translations users.json (French)

* New translations docker.json (French)

* New translations invite.json (Chinese Simplified)

* New translations create.json (Chinese Simplified)

* New translations login.json (Chinese Simplified)

* New translations general.json (Chinese Simplified)

* New translations zod.json (Chinese Simplified)

* New translations preferences.json (Chinese Simplified)

* New translations header.json (Chinese Simplified)

* New translations common.json (Chinese Simplified)

* New translations customize.json (Chinese Simplified)

* New translations manage.json (Chinese Simplified)

* New translations boards.json (Chinese Simplified)

* New translations index.json (Chinese Simplified)

* New translations invites.json (Chinese Simplified)

* New translations create.json (Chinese Simplified)

* New translations users.json (Chinese Simplified)

* New translations docker.json (Chinese Simplified)

* New translations password-requirements.json (Chinese Simplified)

* New translations access.json (Chinese Simplified)

* New translations index.json (Spanish)

* New translations users.json (Spanish)

* New translations common.json (Spanish)

* New translations general.json (Spanish)

* New translations zod.json (Spanish)

* New translations users.json (Spanish)

* New translations docker.json (Spanish)

* New translations password-requirements.json (Spanish)

* New translations common.json (Hebrew)

* New translations login.json (Hebrew)

* New translations general.json (Hebrew)

* New translations zod.json (Hebrew)

* New translations header.json (Hebrew)

* New translations boards.json (French)

* New translations index.json (French)

* New translations invites.json (French)

* New translations zod.json (Hebrew)

* New translations preferences.json (Hebrew)

* New translations header.json (Hebrew)

* New translations common.json (Hebrew)

* New translations customize.json (Hebrew)

* New translations manage.json (Hebrew)

* New translations index.json (Hebrew)

* New translations invites.json (Hebrew)

* New translations invite.json (Hebrew)

* New translations create.json (Hebrew)

* New translations users.json (Hebrew)

* New translations docker.json (Hebrew)
2023-09-27 13:30:15 +02:00
Tagaishi
17103f3f5b 🐛 Change position selector's dropdown bug (#1429) 2023-09-26 21:17:55 +02:00
Manuel
c1b3bc4337 🔀 Add basic authentication 2023-09-24 18:48:48 +02:00
Manuel
76008aa92b 🔒️ Fix regex security warning 2023-09-24 18:44:25 +02:00
Manuel
690c627f81 Add login redirection
*  Add login redirection

* 🚑 Fix cross site scripting using server side regex validation

*  Add unit test
2023-09-24 16:04:07 +02:00
Manuel
7d7fe6016b 🔀 Merge branch 'dev' into feature/add-basic-authentication 2023-09-23 20:32:17 +02:00
Tagaishi
b44347311f 🐛 Return download speed instead of 0 for NZBGET (#1400) 2023-09-21 19:45:58 +02:00
Manuel
b49d021daf Add allow anonymous switch 2023-09-21 19:45:30 +02:00
Meier Lukas
141c27cda7 Add autofocus for searchbar (#1408) 2023-09-18 19:30:22 +02:00
Tagaishi
4a30e327a3 🐛 Calendar indicator over header bar fix (#1401) 2023-09-17 16:17:28 +02:00
Tagaishi
c777a774f7 Hide DNS-Hole control buttons option (#1384) 2023-09-15 18:17:46 +02:00
Tagaishi
a3f364e67d 💄 Change media-server modal to popover (#1395) 2023-09-15 18:16:10 +02:00
Tagaishi
47e46a3a30 💄 Calendar close modal on click when opened (#1396) 2023-09-15 18:15:25 +02:00
Tagaishi
9b8263b8ec 💄 Replace hover with click and on the full row (#1397) 2023-09-15 18:12:42 +02:00
Tagaishi
4c67ee2902 💄 Added modal on usenet widget (#1398) 2023-09-15 18:11:40 +02:00
Tagaishi
3c015d297b Add common troubleshooting prompt on button 2023-09-11 02:58:05 +02:00
Tagaishi
331ce51085 Removes trailing slashes from URLs on save 2023-09-11 02:57:32 +02:00
Thomas Camlong
10a3898775 Merge pull request #1386 from devtobi/feature/dockerfile-healthcheck
🩺  Added healthcheck to image and ARG for port
2023-09-10 18:39:36 +02:00
Meier Lukas
d05c0023cd Readd possibility to add containers as apps to boards (#1276) 2023-09-10 14:28:13 +02:00
Manuel
f35f6debaf 🔀 Merge dev to auth branch 2023-09-10 13:38:53 +02:00
ajnart
9dd6654a5c Add more padding in onboarding 2023-09-10 11:35:00 +02:00
Tobias Stadler
5c499c87ab 🩺 Added healthcheck to image and ARG for port 2023-09-09 00:46:43 +02:00
Meier Lukas
735d6484e2 🔀 Merge 0.13.4 to master 2023-09-08 22:12:45 +02:00
Manuel
12230bd9e7 🌐 Merge pull request #1364 from ajnart/i10n_dev 2023-09-08 21:45:11 +02:00
Thomas Camlong
4cc9b2234c New translations calendar.json (Hebrew) 2023-09-08 07:10:29 +02:00
Thomas Camlong
12cf0ff94b New translations calendar.json (Chinese Simplified) 2023-09-08 05:08:35 +02:00
Thomas Camlong
25c2f8fa90 New translations calendar.json (Spanish) 2023-09-08 01:11:49 +02:00
Thomas Camlong
54a374a83d New translations calendar.json (Turkish) 2023-09-07 22:40:24 +02:00
Thomas Camlong
f28df6aa9a New translations calendar.json (Swedish) 2023-09-07 22:40:23 +02:00
Thomas Camlong
36a613b6fe New translations calendar.json (German) 2023-09-07 22:40:22 +02:00
Thomas Camlong
06373bcc47 New translations calendar.json (Danish) 2023-09-07 22:40:21 +02:00
Manuel
4164b98967 🔖 Increase version to 0.13.4 (#1378) 2023-09-07 21:44:48 +02:00
Thomas Camlong
f408aab5d3 New translations calendar.json (LOLCAT) 2023-09-07 21:38:11 +02:00
Thomas Camlong
a553976869 New translations calendar.json (Latvian) 2023-09-07 21:38:10 +02:00
Thomas Camlong
13cbce6ba2 New translations calendar.json (Croatian) 2023-09-07 21:38:09 +02:00
Thomas Camlong
6ea84fcf38 New translations calendar.json (Portuguese, Brazilian) 2023-09-07 21:38:08 +02:00
Thomas Camlong
2c5b08e0fe New translations calendar.json (Vietnamese) 2023-09-07 21:38:07 +02:00
Thomas Camlong
6cb6d8139f New translations calendar.json (Chinese Simplified) 2023-09-07 21:38:06 +02:00
Thomas Camlong
831ebfd1a9 New translations calendar.json (Ukrainian) 2023-09-07 21:38:05 +02:00
Thomas Camlong
5efbdd4913 New translations calendar.json (Turkish) 2023-09-07 21:38:04 +02:00
Thomas Camlong
3c63388c6e New translations calendar.json (Swedish) 2023-09-07 21:38:03 +02:00
Thomas Camlong
aa2d46e805 New translations calendar.json (Slovenian) 2023-09-07 21:38:02 +02:00
Thomas Camlong
50d13e97ee New translations calendar.json (Slovak) 2023-09-07 21:38:01 +02:00
Thomas Camlong
0bd535543f New translations calendar.json (Russian) 2023-09-07 21:38:00 +02:00
Thomas Camlong
197d11bb57 New translations calendar.json (Polish) 2023-09-07 21:37:59 +02:00
Thomas Camlong
a0a6886744 New translations calendar.json (Norwegian) 2023-09-07 21:37:58 +02:00
Thomas Camlong
4a25da9ad6 New translations calendar.json (Dutch) 2023-09-07 21:37:57 +02:00
Thomas Camlong
9c7045986e New translations calendar.json (Korean) 2023-09-07 21:37:56 +02:00
Thomas Camlong
c3704718a1 New translations calendar.json (Japanese) 2023-09-07 21:37:55 +02:00
Thomas Camlong
a93e031f95 New translations calendar.json (Italian) 2023-09-07 21:37:55 +02:00
Thomas Camlong
5b36ac1bad New translations calendar.json (Hungarian) 2023-09-07 21:37:53 +02:00
Thomas Camlong
b269c7ce6d New translations calendar.json (Hebrew) 2023-09-07 21:37:52 +02:00
Thomas Camlong
bf6353482e New translations calendar.json (Greek) 2023-09-07 21:37:51 +02:00
Thomas Camlong
86b5368e96 New translations calendar.json (German) 2023-09-07 21:37:50 +02:00
Thomas Camlong
3d4308026d New translations calendar.json (Danish) 2023-09-07 21:37:49 +02:00
Thomas Camlong
ed043ccd43 New translations calendar.json (Spanish) 2023-09-07 21:37:48 +02:00
Thomas Camlong
dc52a8ce5e New translations calendar.json (French) 2023-09-07 21:37:48 +02:00
Thomas Camlong
39c16c3d29 Add a toggle to show unmonitored items in *Arr (#1371) 2023-09-07 21:36:15 +02:00
Tagaishi
3ede6219ef 🐛 rewrite url from headers (#1369) 2023-09-07 21:35:55 +02:00
Tagaishi
7b2c0d63f3 🐛 env.port reporting NaN bug fix (#1375) 2023-09-07 21:35:28 +02:00
Tagaishi
3120949a7e ⬇️ next js 13.4.19 to 13.4.12 (#1376) 2023-09-07 21:34:04 +02:00
Meier Lukas
391c074ef9 Add tests for some tools functions (#1377)
*  Add tests for some tools functions

* 🐛 Build issue with language definition
2023-09-07 21:32:29 +02:00
Meier Lukas
7b2ce22bca ♻️ Address pull request feedback 2023-09-07 19:56:14 +02:00
Tagaishi
89cfb1ae5d 🐛 add new tab to item (#1362) 2023-09-07 07:36:38 +02:00
Tagaishi
8cfd5c6d73 ⬇️ next 13.4.19 to 13.4.12 (#1370) 2023-09-07 07:34:49 +02:00
Thomas Camlong
e35fbe659e New translations cache-buttons.json (Russian) 2023-09-06 22:03:50 +02:00
Thomas Camlong
a851327554 New translations edit-mode-toggle.json (Russian) 2023-09-06 22:03:49 +02:00
Thomas Camlong
78d636f0a0 New translations common.json (Russian) 2023-09-06 22:03:48 +02:00
Thomas Camlong
405f3e4c1f New translations bookmark.json (Russian) 2023-09-06 22:03:47 +02:00
Thomas Camlong
f36d9e7851 New translations media-requests-stats.json (Russian) 2023-09-06 22:03:46 +02:00
Thomas Camlong
52de93e412 New translations edit-mode-toggle.json (Russian) 2023-09-06 21:08:00 +02:00
Thomas Camlong
305be41c46 New translations notebook.json (Russian) 2023-09-06 21:07:59 +02:00
Thomas Camlong
ab91776aa9 New translations bookmark.json (Russian) 2023-09-06 21:07:58 +02:00
Thomas Camlong
faf2b1195b New translations media-requests-stats.json (Russian) 2023-09-06 21:07:57 +02:00
Thomas Camlong
8558c5e3dd New translations media-requests-list.json (Russian) 2023-09-06 21:07:57 +02:00
Thomas Camlong
a34167d274 New translations about.json (Russian) 2023-09-06 21:07:55 +02:00
Thomas Camlong
63f3a9e158 New translations add-app.json (Russian) 2023-09-06 21:07:54 +02:00
Thomas Camlong
c3689cb265 New translations toggle-edit-mode.json (Russian) 2023-09-06 21:07:53 +02:00
Thomas Camlong
d5c8669dd8 New translations search-engine.json (Russian) 2023-09-06 21:07:53 +02:00
Thomas Camlong
65a0e789e7 New translations about.json (Spanish) 2023-09-06 14:00:20 +02:00
Thomas Camlong
0fc1f1b92f New translations notebook.json (Chinese Simplified) 2023-09-06 12:44:01 +02:00
Thomas Camlong
7ed51b6da3 New translations media-server.json (Chinese Simplified) 2023-09-06 12:43:58 +02:00
Thomas Camlong
e9f8de9be8 New translations date.json (Chinese Simplified) 2023-09-06 12:43:55 +02:00
Thomas Camlong
21a38bb438 New translations dashdot.json (Chinese Simplified) 2023-09-06 12:43:54 +02:00
Thomas Camlong
6617e54256 New translations calendar.json (Chinese Simplified) 2023-09-06 12:43:53 +02:00
Thomas Camlong
da3692265a New translations cache-buttons.json (Spanish) 2023-09-06 12:43:52 +02:00
Thomas Camlong
408237740f New translations selector.json (Chinese Simplified) 2023-09-06 10:54:12 +02:00
Thomas Camlong
bdde789305 New translations cache-buttons.json (Chinese Simplified) 2023-09-05 20:55:04 +02:00
Thomas Camlong
9f845c733d New translations media-requests-list.json (Chinese Simplified) 2023-09-05 20:55:01 +02:00
Thomas Camlong
d992a7f413 New translations rss.json (Chinese Simplified) 2023-09-05 20:54:59 +02:00
Thomas Camlong
c97ca80563 New translations add-app.json (Chinese Simplified) 2023-09-05 20:54:57 +02:00
Thomas Camlong
01b5534915 New translations usenet.json (Chinese Simplified) 2023-09-05 20:54:56 +02:00
Thomas Camlong
5f348a56be New translations cache-buttons.json (Slovak) 2023-09-05 11:03:03 +02:00
Thomas Camlong
18a514b340 New translations edit-mode-toggle.json (Slovak) 2023-09-05 11:03:02 +02:00
Thomas Camlong
2b7a3accca New translations common.json (Slovak) 2023-09-05 11:03:01 +02:00
Thomas Camlong
3c685a69e4 New translations bookmark.json (Slovak) 2023-09-05 11:03:00 +02:00
Thomas Camlong
090fb6ad77 New translations media-requests-stats.json (Slovak) 2023-09-05 11:02:59 +02:00
Thomas Camlong
e544b8994e New translations media-requests-list.json (Slovak) 2023-09-05 11:02:58 +02:00
Thomas Camlong
30b67e879a New translations iframe.json (Slovak) 2023-09-05 11:02:57 +02:00
Thomas Camlong
a87d2053c4 New translations media-server.json (Slovak) 2023-09-05 11:02:56 +02:00
Thomas Camlong
c8dbc1aa3e New translations rss.json (Slovak) 2023-09-05 11:02:55 +02:00
Thomas Camlong
d3d0484b7f New translations torrents-status.json (Slovak) 2023-09-05 11:02:53 +02:00
Thomas Camlong
5ca76285a1 New translations about.json (Slovak) 2023-09-05 11:02:52 +02:00
Thomas Camlong
77c1bcab29 New translations add-app.json (Slovak) 2023-09-05 11:02:52 +02:00
Thomas Camlong
bb6615f7cf New translations common.json (Slovak) 2023-09-05 11:02:51 +02:00
Thomas Camlong
bc4852f369 New translations toggle-edit-mode.json (Slovak) 2023-09-05 09:39:18 +02:00
Thomas Camlong
a6b8a980fd New translations selector.json (Slovak) 2023-09-05 09:39:17 +02:00
Thomas Camlong
62f2c22695 New translations search-engine.json (Slovak) 2023-09-05 09:39:16 +02:00
Thomas Camlong
7c0c5cf5ef New translations color-selector.json (Slovak) 2023-09-05 09:39:15 +02:00
Thomas Camlong
6bb8a932aa New translations weather.json (Slovak) 2023-09-05 09:39:14 +02:00
Thomas Camlong
5b546cf4dd New translations calendar.json (Slovak) 2023-09-05 09:39:13 +02:00
Thomas Camlong
0e8f31bddd New translations accessibility.json (Turkish) 2023-09-05 04:55:29 +02:00
Manuel
1651361b7f 🦺 Allow empty values for DOCKER_PORT 2023-09-04 21:33:50 +02:00
Thomas Camlong
4e3f602098 Merge pull request #1349 from ajnart/dev
Version 0.13.3
2023-09-04 20:25:59 +02:00
Thomas Camlong
7f402d4987 New Crowdin updates (#1359)
* New translations media-requests-list.json (French)

* New translations media-requests-list.json (Spanish)

* New translations media-requests-stats.json (Spanish)

* New translations cache-buttons.json (Spanish)

* New translations media-requests-list.json (Danish)

* New translations media-requests-list.json (German)

* New translations media-requests-list.json (Greek)

* New translations media-requests-list.json (Hebrew)

* New translations media-requests-list.json (Hungarian)

* New translations media-requests-list.json (Italian)

* New translations dlspeed.json (Japanese)

* New translations media-requests-list.json (Japanese)

* New translations media-requests-list.json (Korean)

* New translations media-requests-list.json (Dutch)

* New translations media-requests-list.json (Norwegian)

* New translations media-requests-list.json (Polish)

* New translations media-requests-list.json (Russian)

* New translations media-requests-list.json (Slovak)

* New translations media-requests-list.json (Slovenian)

* New translations media-requests-list.json (Swedish)

* New translations media-requests-list.json (Turkish)

* New translations media-requests-list.json (Ukrainian)

* New translations media-requests-list.json (Chinese Simplified)

* New translations media-requests-list.json (Vietnamese)

* New translations media-requests-list.json (Portuguese, Brazilian)

* New translations media-requests-list.json (Croatian)

* New translations media-requests-list.json (Latvian)

* New translations media-requests-list.json (LOLCAT)

* New translations cache-buttons.json (Spanish)

* New translations edit-mode-toggle.json (Spanish)

* New translations cache-buttons.json (Spanish)

* New translations search-engine.json (Greek)

* New translations toggle-edit-mode.json (Greek)

* New translations add-app.json (Greek)

* New translations about.json (Greek)

* New translations media-requests-list.json (Greek)

* New translations media-requests-stats.json (Greek)

* New translations bookmark.json (Greek)

* New translations common.json (Greek)

* New translations edit-mode-toggle.json (Greek)

* New translations cache-buttons.json (Greek)

* New translations search-engine.json (Swedish)

* New translations toggle-edit-mode.json (Swedish)

* New translations add-app.json (Swedish)

* New translations about.json (Swedish)

* New translations media-requests-list.json (Swedish)

* New translations media-requests-stats.json (Swedish)

* New translations bookmark.json (Swedish)

* New translations common.json (Swedish)

* New translations edit-mode-toggle.json (Swedish)

* New translations edit-mode-toggle.json (Swedish)

* New translations cache-buttons.json (Swedish)
2023-09-04 20:25:45 +02:00
Manuel
91132cc3e8 fix: log properties instead of object (#1361) 2023-09-04 20:17:42 +02:00
Thomas Camlong
1becb3f889 Merge pull request #1360 from ajnart/style/revert-anchor-color 2023-09-04 19:36:33 +02:00
Manuel
9fa0acff3e Revert anchor colors in media request widget 2023-09-04 19:28:13 +02:00
Thomas Camlong
27cdd467f5 🐛 Print user.name instead of id on auth. 2023-09-04 18:35:35 +02:00
Thomas Camlong
8d2d68c192 🌐 New Crowdin updates (#1358) 2023-09-03 22:25:19 +02:00
Tagaishi
624e2a3a2c 🐛 Media Session widget jellyfin sessions + translations (#1353) 2023-09-03 22:24:27 +02:00
Thomas Camlong
de349014d5 New Crowdin updates (#1351)
* New translations add-app.json (Spanish)

* New translations media-requests-list.json (Swedish)

* New translations media-requests-stats.json (Swedish)

* New translations add-app.json (Latvian)

* New translations add-app.json (French)

* New translations media-requests-list.json (French)

* New translations media-requests-stats.json (French)

* New translations media-requests-list.json (Spanish)

* New translations media-requests-stats.json (Spanish)

* New translations search-engine.json (Danish)

* New translations toggle-edit-mode.json (Danish)

* New translations add-app.json (Danish)

* New translations about.json (Danish)

* New translations media-requests-list.json (Danish)

* New translations media-requests-stats.json (Danish)

* New translations bookmark.json (Danish)

* New translations common.json (Danish)

* New translations search-engine.json (German)

* New translations toggle-edit-mode.json (German)

* New translations add-app.json (German)

* New translations about.json (German)

* New translations media-requests-list.json (German)

* New translations media-requests-stats.json (German)

* New translations bookmark.json (German)

* New translations common.json (German)

* New translations add-app.json (Greek)

* New translations media-requests-list.json (Greek)

* New translations media-requests-stats.json (Greek)

* New translations add-app.json (Hebrew)

* New translations media-requests-list.json (Hebrew)

* New translations media-requests-stats.json (Hebrew)

* New translations search-engine.json (Hungarian)

* New translations toggle-edit-mode.json (Hungarian)

* New translations add-app.json (Hungarian)

* New translations about.json (Hungarian)

* New translations media-requests-list.json (Hungarian)

* New translations media-requests-stats.json (Hungarian)

* New translations bookmark.json (Hungarian)

* New translations common.json (Hungarian)

* New translations search-engine.json (Italian)

* New translations toggle-edit-mode.json (Italian)

* New translations add-app.json (Italian)

* New translations about.json (Italian)

* New translations media-requests-list.json (Italian)

* New translations media-requests-stats.json (Italian)

* New translations bookmark.json (Italian)

* New translations common.json (Italian)

* New translations add-app.json (Japanese)

* New translations media-requests-list.json (Japanese)

* New translations media-requests-stats.json (Japanese)

* New translations add-app.json (Korean)

* New translations media-requests-list.json (Korean)

* New translations media-requests-stats.json (Korean)

* New translations add-app.json (Dutch)

* New translations media-requests-list.json (Dutch)

* New translations media-requests-stats.json (Dutch)

* New translations add-app.json (Norwegian)

* New translations media-requests-list.json (Norwegian)

* New translations media-requests-stats.json (Norwegian)

* New translations add-app.json (Polish)

* New translations media-requests-list.json (Polish)

* New translations media-requests-stats.json (Polish)

* New translations add-app.json (Russian)

* New translations media-requests-list.json (Russian)

* New translations media-requests-stats.json (Russian)

* New translations add-app.json (Slovak)

* New translations media-requests-list.json (Slovak)

* New translations media-requests-stats.json (Slovak)

* New translations add-app.json (Slovenian)

* New translations media-requests-list.json (Slovenian)

* New translations media-requests-stats.json (Slovenian)

* New translations add-app.json (Swedish)

* New translations search-engine.json (Turkish)

* New translations toggle-edit-mode.json (Turkish)

* New translations add-app.json (Turkish)

* New translations about.json (Turkish)

* New translations media-requests-list.json (Turkish)

* New translations media-requests-stats.json (Turkish)

* New translations bookmark.json (Turkish)

* New translations common.json (Turkish)

* New translations add-app.json (Ukrainian)

* New translations media-requests-list.json (Ukrainian)

* New translations media-requests-stats.json (Ukrainian)

* New translations add-app.json (Chinese Simplified)

* New translations media-requests-list.json (Chinese Simplified)

* New translations media-requests-stats.json (Chinese Simplified)

* New translations add-app.json (Vietnamese)

* New translations media-requests-list.json (Vietnamese)

* New translations media-requests-stats.json (Vietnamese)

* New translations add-app.json (Portuguese, Brazilian)

* New translations media-requests-list.json (Portuguese, Brazilian)

* New translations media-requests-stats.json (Portuguese, Brazilian)

* New translations add-app.json (Croatian)

* New translations media-requests-list.json (Croatian)

* New translations media-requests-stats.json (Croatian)

* New translations media-requests-list.json (Latvian)

* New translations media-requests-stats.json (Latvian)

* New translations add-app.json (LOLCAT)

* New translations media-requests-list.json (LOLCAT)

* New translations media-requests-stats.json (LOLCAT)

* New translations edit-mode-toggle.json (Danish)

* New translations cache-buttons.json (Danish)

* New translations edit-mode-toggle.json (German)

* New translations cache-buttons.json (German)

* New translations edit-mode-toggle.json (Hungarian)

* New translations cache-buttons.json (Hungarian)

* New translations edit-mode-toggle.json (Italian)

* New translations cache-buttons.json (Italian)

* New translations edit-mode-toggle.json (Turkish)

* New translations cache-buttons.json (Turkish)

* New translations add-app.json (Danish)

* New translations media-requests-list.json (Danish)

* New translations media-requests-stats.json (Danish)

* New translations add-app.json (German)

* New translations media-requests-list.json (German)

* New translations media-requests-stats.json (German)

* New translations add-app.json (Turkish)

* New translations media-requests-list.json (Turkish)

* New translations media-requests-stats.json (Turkish)

* New translations search-engine.json (Chinese Simplified)

* New translations toggle-edit-mode.json (Chinese Simplified)

* New translations add-app.json (Chinese Simplified)

* New translations about.json (Chinese Simplified)

* New translations media-requests-list.json (Chinese Simplified)

* New translations media-requests-stats.json (Chinese Simplified)

* New translations bookmark.json (Chinese Simplified)

* New translations common.json (Chinese Simplified)

* New translations edit-mode-toggle.json (Chinese Simplified)

* New translations cache-buttons.json (Chinese Simplified)

* New translations add-app.json (Hungarian)

* New translations media-requests-list.json (Hungarian)

* New translations media-requests-stats.json (Hungarian)

* New translations add-app.json (Hebrew)

* New translations media-requests-list.json (Hebrew)

* New translations media-requests-stats.json (Hebrew)

* New translations search-engine.json (Hebrew)

* New translations toggle-edit-mode.json (Hebrew)

* New translations about.json (Hebrew)

* New translations media-requests-stats.json (Hebrew)

* New translations bookmark.json (Hebrew)

* New translations common.json (Hebrew)

* New translations edit-mode-toggle.json (Hebrew)

* New translations cache-buttons.json (Hebrew)

* New translations add-app.json (Italian)

* New translations media-requests-list.json (Italian)

* New translations media-requests-stats.json (Italian)

* New translations search-engine.json (Spanish)

* New translations toggle-edit-mode.json (Spanish)

* New translations about.json (Spanish)

* New translations media-requests-stats.json (Spanish)

* New translations bookmark.json (Spanish)

* New translations common.json (Spanish)

* New translations edit-mode-toggle.json (Spanish)

* New translations cache-buttons.json (Spanish)

* New translations page-appearance.json (Turkish)

* New translations general.json (Turkish)

* New translations cache-buttons.json (Turkish)

* New translations cache-buttons.json (Turkish)
2023-09-03 18:03:11 +02:00
Manuel
0fcc8d2a82 🔖 Tag version to 0.13.3 (#1356) 2023-09-03 18:00:25 +02:00
Manuel
c94ffbf91f 🐛 External URL being '' in media requests (#1355) 2023-09-03 18:00:15 +02:00
Manuel
bc6fde5936 🐛 Fix edit mode error in notebook (#1357) 2023-09-03 18:00:05 +02:00
WillyJL
d5c90a742b Fix enable/disable edit mode (#1333) 2023-09-03 17:54:12 +02:00
Tagaishi
fc9d6f796e 🐛 Notebook scrollbar (#1342) 2023-09-03 17:52:35 +02:00
Thomas Camlong
96e0394724 🐛 Fix small things in MediaModal 2023-09-03 17:28:23 +02:00
Manuel
693f29bb82 fix: next image warning 2023-09-03 17:18:03 +02:00
Manuel
35db402376 fix: copying .env and set default values for docker img 2023-09-03 17:02:50 +02:00
Manuel
1958b70dee fix: object fit for image in about modal 2023-09-03 16:31:16 +02:00
Manuel
e7ad853678 refactor: image in about modal 2023-09-03 16:28:20 +02:00
Manuel
c14fad680d refactor: use relative TS path 2023-09-03 16:23:40 +02:00
Manuel
a2738111b5 fix: binaryTarget for new docker base img 2023-09-03 16:17:13 +02:00
Manuel
016a1bb2e4 config: add IDEA directory to ignored dirs 2023-09-03 15:36:07 +02:00
Tagaishi
77c11e3fed 🐛 'seerr search bug fix (#1350)
* 🐛 'seerr search bug fix

* 🐛 Trailing '/' error

*  Redirect overseerr search item to movie page

* 💡 Comment explaining RegExp

*  undo link to overseerr item
2023-09-02 22:30:56 +02:00
Tagaishi
5f2ddcd2c4 Auth Page Dark/Light mode toggle button (#1265)
*  Dark/Light toggle button

* 💄 Moved button to top right

* 💄 Moved button to top right

*  Toggle Button component + integrations

* 💄 Rounding corners + Floating background onboard
2023-09-02 07:00:02 +02:00
Tagaishi
565260ee14 Update vitest test for Pihole as sdk changed (#1352)
*  Update vitest test for Pihole as sdk changed

*  Added test + bug discovered related to it
2023-09-02 06:58:16 +02:00
Tagaishi
371587c62d Rework Media Request Stats Widget (#1344)
*  Rework Media Request Stats Widget

* 🎨 More code to do it better than last commit

* ♻️ Resize improvement

* 🐛 Empty Username handling

* 🎨 widget as router input

*  Open links in new tab + media request scrollArea
2023-09-01 22:15:40 +02:00
Angel
1bb1a8f628 🐛 Adguard logic and several small bugs 2023-09-01 21:59:01 +02:00
Thomas Camlong
ba7e31b972 🌐 New Crowdin updates (#1272) 2023-09-01 21:55:45 +02:00
Tagaishi
8211e22d86 💄 Add custom font sizing for app name (#1341)
* 💄 Add custom font sizing for app name

* 🚸 Added maximum font size
2023-09-01 21:53:51 +02:00
Thomas Camlong
79012ec681 Merge pull request #1312 from Tagaishi/translation-handling-update 2023-09-01 20:41:00 +02:00
Tagaishi
ad61b155b8 💄 Large screen gridstack max value to 32 and sidebar gridstack over 13 bug fix (#1339)
* 💄 Large screen gridstack max value to 32

* 🐛 Fix sidebar bug
2023-09-01 17:16:37 +02:00
Tagaishi
eb3bbfb025 ⬆️ geo-tz to browser-geo-tz (#1322)
* ⬆️ geo-tz to tz-lookup

* 🐛 Handle multiple timezones return

* ⬆️ change tz-lookup to browser-geo-tz
2023-09-01 17:15:25 +02:00
Tagaishi
981c964ba9 🐛 Fix locale for calendar and clock (#1330) 2023-09-01 17:13:55 +02:00
Tagaishi
78627f7b51 🐛 Removed trim as this blocked using space char (#1340) 2023-09-01 17:12:34 +02:00
Tagaishi
106795e1be 💄 Included back the text under percentage (#1343) 2023-09-01 17:09:56 +02:00
Tagaishi
eb0282dbde 🐛 fix flex for bookmark in firefox (#1346) 2023-09-01 17:05:13 +02:00
Manuel
3b74f735a1 🦺 Set default value for DATABASE_URL 2023-08-31 19:47:21 +02:00
Manuel
9b3801ba6e 🔧 Install openssl layer to the default docker image 2023-08-31 19:43:41 +02:00
Manuel
f6a1da99a6 ⚗️ Switch base image to node20.5-slim 2023-08-31 19:31:55 +02:00
Manuel
0673375734 ⚗️ Remove parameters 2023-08-31 17:43:17 +02:00
Manuel
455230c111 ⚗️ Try out random fixes 2023-08-29 22:36:12 +02:00
Manuel
8d3252f2cf ⚗️ Remove npm config command 2023-08-29 22:21:04 +02:00
Manuel
ff13582044 ⚗️ Roll back to turbo build 2023-08-29 22:15:59 +02:00
Manuel
b4abec77fd ⚗️ Use yarn flags for install 2023-08-29 22:12:10 +02:00
Manuel
5cfe3e9dd1 ⚗️ Roll back to yarn 2023-08-29 22:11:29 +02:00
Manuel
79e201bd81 ⚗️ Make npm install in docker file silent 2023-08-29 22:09:40 +02:00
Manuel
aba42a1aa1 ⚗️ Check if build is passing with npm instead of yarn 2023-08-29 22:08:26 +02:00
Manuel
516c5b41ea 🔧 Add npm log level to dockerfile 2023-08-29 21:57:29 +02:00
Manuel
f34221d3f7 💚 Add network mode to docker build and push step 2023-08-29 21:43:51 +02:00
Manuel
aee541b6dc fix: docker build and prisma orm database push 2023-08-29 21:19:36 +02:00
Manuel
ab2e827270 🔧 Move npm install to top in docker file 2023-08-28 21:25:30 +02:00
Thomas Camlong
52ccbb3938 Merge pull request #1331 from Tagaishi/rss-no-feed-stuck-loading-fix
🐛 RSS empty feed stuck on loading
2023-08-27 09:43:19 +02:00
Tagaishi
9b7caef6d3 ♻️ refactor for minimal changes 2023-08-27 03:14:49 +02:00
Tagaishi
06a0f30ae7 🐛 RSS empty feed stuck on loading 2023-08-27 03:07:23 +02:00
Manuel
a9c577a5a3 👷 Ignore database from docker image 2023-08-26 17:16:34 +02:00
Meier Lukas
713a8f2f97 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-26 17:00:46 +02:00
ajnart
24fb17ab12 Adjust invite page
Add password strenght validation, adds background style
2023-08-26 16:07:05 +02:00
ajnart
b00a1bcdc8 💄 Style FloatingBackground 2023-08-26 16:06:21 +02:00
Meier Lukas
cdd710455f 🐛 Issue with middleware redirect in docker 2023-08-24 21:37:39 +02:00
Tagaishi
5ccc094ad1 🌐 Search engine custom button 2023-08-24 00:21:02 +02:00
Tagaishi
8d2aa51f2b 🌐 Cache settings 2023-08-24 00:06:14 +02:00
Tagaishi
4bd5d82da3 🌐 About page new version 2023-08-23 23:39:19 +02:00
ajnart
8adb05100b 📝 Explain why the password needs to be complex 2023-08-23 22:26:12 +02:00
ajnart
dfe4149ebc 🐛 Fix password-requirements progress bar 2023-08-23 22:26:12 +02:00
Manuel
4a04725aaf 🐛 Fix database for docker container 2023-08-23 22:18:31 +02:00
ajnart
c06905bfd0 🔥 Remove onboarding step 2023-08-23 22:10:16 +02:00
Manuel
5255882898 📝 Link issue with TS error 2023-08-23 21:38:17 +02:00
Manuel
1def2de8bb 🔀 Merge changes from ajnart 2023-08-23 21:37:02 +02:00
renovate[bot]
fa0d525aeb ⬆️ Update dependency framer-motion to v10.16.1 2023-08-23 19:36:43 +00:00
Manuel
8dbb6d4dd3 🔀 Merge branch 'dev' into feature/add-basic-authentication 2023-08-23 21:17:51 +02:00
ajnart
4ddad33128 ️ Disable anti-reload in dev mode 2023-08-23 18:07:56 +02:00
renovate[bot]
e08f1afded ⬆️ Update dependency @types/node to v18.17.8 2023-08-23 13:37:14 +00:00
Tagaishi
6c3421f941 🌐 Missing strings reported on discord 2023-08-23 15:07:38 +02:00
renovate[bot]
b5227a6a8c ⬆️ Update dependency @tabler/icons-react to v2.32.0 2023-08-23 09:44:21 +00:00
renovate[bot]
b567dab4b4 ⬆️ Update nextjs monorepo to v13.4.19 2023-08-23 06:18:38 +00:00
renovate[bot]
02cf4711a4 ⬆️ Update dependency video.js to v8.5.2 2023-08-23 04:09:40 +00:00
renovate[bot]
b1b12d1906 ⬆️ Update dependency prettier to v3.0.2 2023-08-23 01:20:38 +00:00
renovate[bot]
a52e110ef4 ⬆️ Update dependency @types/react to v18.2.21 2023-08-22 23:28:38 +00:00
Tagaishi
558c731c6b 🌐 between x and y string repetition change 2023-08-22 23:31:56 +02:00
Tagaishi
b6f9467fc1 🌐 better handle of multipart string for category 2023-08-22 23:31:20 +02:00
renovate[bot]
608cc78966 ⬆️ Update dependency @react-native-async-storage/async-storage to v1.19.2 2023-08-22 20:53:43 +00:00
Manuel
4e21f669f6 🌐 Translate error alert 2023-08-22 21:55:26 +02:00
Manuel
0f6d545e1a 🥅 Add alert when procedure failed 2023-08-22 21:52:14 +02:00
Manuel
107c6c3995 Add password meter to onboarding 2023-08-22 21:45:10 +02:00
Thomas Camlong
e82f3d0ea9 Merge pull request #1295 from ajnart/refactor/onboarding-page
♻️ Onboarding page
2023-08-22 13:16:06 +02:00
Thomas Camlong
4d73395eae 🐛 Update default selected option in path mappings 2023-08-22 13:15:45 +02:00
Thomas Camlong
88129e9c25 Remove analyze in Docker actions 2023-08-22 13:13:17 +02:00
Thomas Camlong
21d81cbb7e Remove test- prefix in manually deployed versions 2023-08-21 21:52:27 +02:00
Manuel
e8fa3b5e9a 🐛 Header scaling 2023-08-21 21:37:35 +02:00
Manuel
cfde1b6ece 💄 Normalize onboarding steps design 2023-08-21 21:23:28 +02:00
Manuel
480b27fea7 Add back button to create account step 2023-08-21 21:15:56 +02:00
Manuel
3623d871f8 💄 Improve design 2023-08-21 21:10:44 +02:00
Thomas Camlong
3677316ff5 Merge pull request #1271 from ajnart/fix/allow-note-only-in-editmode 2023-08-21 18:02:48 +02:00
ajnart
a98630e2c4 💡 Add comment about environ 2023-08-21 18:01:58 +02:00
ajnart
7ae0f9a7c6 🌐 Add Hungarian language support 2023-08-21 17:59:01 +02:00
Thomas Camlong
1b778943eb Merge pull request #1257 from Tagaishi/widget-full-translation-support 2023-08-21 17:56:08 +02:00
Tagaishi
d1873ebd24 🐛 Plex tv-show formatting like jellyfin (#1304) 2023-08-20 20:02:50 +02:00
Tagaishi
bc4009bd8b 🐛 Added movie in icon list for currently playing (#1303) 2023-08-20 18:08:31 +02:00
Manuel
64764a253b 📝 Update database mapping 2023-08-19 12:16:38 +02:00
Manuel
74de892859 ♻️ Onboarding page 2023-08-19 12:16:00 +02:00
Tagaishi
9f80f05ef6 🌐 Removing "Homarr" and "..." when unnecessary 2023-08-14 19:25:53 +02:00
Tagaishi
e97367a0a0 Merge branch 'widget-full-translation-support' of https://github.com/Tagaishi/homarr into widget-full-translation-support 2023-08-14 19:16:15 +02:00
ajnart
198aec0a0b 🌐 Change docker internalization 2023-08-14 14:38:10 +02:00
ajnart
6c3f819804 🐳 Fix docker not loading properly 2023-08-14 14:37:56 +02:00
ajnart
d4463c0009 🌐 Move translations to common file 2023-08-14 14:34:56 +02:00
ajnart
07f8ce3de5 🐛 Fix AM/PM for invite modal 2023-08-14 12:07:21 +02:00
ajnart
ce5552c913 Add contentComponents to the main layout
Return button is not inside of the header.
2023-08-14 10:15:12 +02:00
Tagaishi
6ccc591bbf 🌐 Appearance Colors 2023-08-13 23:11:56 +02:00
Tagaishi
d51bd43941 🌐 Add new tile 2023-08-13 22:56:41 +02:00
Tagaishi
a973265795 🌐 App validation errors 2023-08-13 22:24:46 +02:00
Tagaishi
7c898379e8 🌐 About keybind actions 2023-08-13 22:10:59 +02:00
Tagaishi
b62b6b9ee7 🐛 Fixed locale on Calendar + moment to dayjs 2023-08-13 21:47:50 +02:00
Tagaishi
8130504430 🌐 Category menu 2023-08-13 21:46:19 +02:00
Tagaishi
d4c9a5bb26 Merge branch 'dev' of https://github.com/ajnart/homarr into widget-full-translation-support 2023-08-13 17:46:18 +02:00
Manuel
b249c0205f 🔀 Merge branch 'dev' into feature/add-basic-authentication 2023-08-13 15:12:20 +02:00
Manuel
b2cbb1a388 fix: allow note only in edit mode 2023-08-12 23:23:04 +02:00
Manuel
caf74f9962 Move docker page to manage pages 2023-08-11 22:13:14 +02:00
Manuel
9ae2dc3037 Add new login page design 2023-08-11 21:44:33 +02:00
Meier Lukas
73cf109c72 🐛 Remove not implemented action icons 2023-08-11 21:08:42 +02:00
Manuel
74bf117fe3 Add tooltip for promotion and demotion of users 2023-08-11 19:29:06 +02:00
Manuel
edb48135d6 🌐 Update outdated text of manage user 2023-08-11 19:20:21 +02:00
Manuel
d57e356425 🌐 Updated deletion text 2023-08-11 19:18:19 +02:00
Meier Lukas
5bb7418de5 Add possibility to define users as admin 2023-08-10 20:50:31 +02:00
Meier Lukas
73669aa61b 🐛 Missing translation for users meta title 2023-08-10 20:12:41 +02:00
Meier Lukas
6b585a9fcf 🐛 Fix wrong translation key for password in user creation 2023-08-10 20:08:47 +02:00
Meier Lukas
9254703855 ♻️ Rename final step to confirmation 2023-08-10 20:06:32 +02:00
Meier Lukas
0282344793 ♻️ Add direct login after registration 2023-08-10 20:04:41 +02:00
Meier Lukas
558beae12f ♻️ Improve header experimental note 2023-08-10 19:54:19 +02:00
Meier Lukas
30c8f5cfdf ♻️ Add auto-complete for login 2023-08-10 19:53:56 +02:00
Meier Lukas
76b8bbd65c ♻️ Improve usage of /b and /board 2023-08-10 18:17:49 +02:00
Meier Lukas
b21ee50908 🐛 Fix docker enabled issue 2023-08-10 06:56:45 +02:00
Tagaishi
9b2fecdfcb 🌐 Replaced hardcoded text to use translation 2023-08-09 22:16:57 +02:00
Manuel
1d09f662aa 🚸 Open external links in manage nav in new tab 2023-08-09 22:14:25 +02:00
Manuel
932150c72f 💄 Add discord and GH to experimental header 2023-08-09 22:06:56 +02:00
Meier Lukas
865da09c24 🐛 Fix environment variable docker enabled 2023-08-09 21:45:35 +02:00
Meier Lukas
db8d88affc 🐛 Fix deprecated zustand dependencies 2023-08-09 21:41:57 +02:00
Meier Lukas
d9eec612d8 ♻️ Remove console log 2023-08-09 21:27:57 +02:00
Meier Lukas
d24d84c834 🐛 Add error message for invalid login 2023-08-09 21:25:29 +02:00
ajnart
f1fb7a5a78 🐛 Fix env schema
https://env.t3.gg/docs/recipes
2023-08-09 18:36:27 +02:00
Manuel
0277f808c3 🔀 Merge branch 'dev' into feature/add-basic-authentication 2023-08-07 22:06:37 +02:00
Meier Lukas
0190f4550d 🐛 Logo link not working 2023-08-07 19:17:05 +02:00
Meier Lukas
fec5364e37 🐛 Ping accessibillity settings have not been used 2023-08-07 06:31:49 +02:00
Meier Lukas
f8907b97ae 🐛 Add missing translations for save affix 2023-08-06 17:10:38 +02:00
Meier Lukas
6efa12b5f0 🐛 Color theme not working when opening customize page from board page 2023-08-06 17:06:00 +02:00
Manuel
f1e8beb659 🔀 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-06 16:46:57 +02:00
Manuel
0004dbd826 Add affix for board customization page 2023-08-06 16:46:00 +02:00
Meier Lukas
f07b964129 ♻️ Use color scheme on board customize page 2023-08-06 16:38:04 +02:00
Manuel
936980d67a 💄 Display active page in manage navigation bar 2023-08-06 16:22:24 +02:00
Meier Lukas
7a499da903 🐛 Wrong import (using react instead of next for translation) 2023-08-06 16:06:44 +02:00
Meier Lukas
0bed8b2025 🐛 Missing translation on user invites page 2023-08-06 16:02:15 +02:00
Meier Lukas
3e4c9cdc3d ♻️ Deprecate calendar firstdayofweek option 2023-08-06 16:00:40 +02:00
Meier Lukas
65cd15aba5 ♻️ Add direct sign in after onboarding 2023-08-06 15:49:24 +02:00
Meier Lukas
3ef12cfe12 ♻️ Update api endpoint authorization 2023-08-06 15:40:19 +02:00
Meier Lukas
d281a2ee98 Merge branch 'dev' into feature/add-basic-authentication 2023-08-06 15:02:57 +02:00
Meier Lukas
9e576f1498 ♻️ Address pull request feedback 2023-08-06 14:12:39 +02:00
Manuel
4b2c5f2816 🌐 Fix translation namespaces 2023-08-05 23:09:07 +02:00
Manuel
14c366bddd 🌐 Add missing translations 2023-08-05 23:06:40 +02:00
Manuel
cdb88ff941 🔥 Remove type safety for translations 2023-08-05 21:36:15 +02:00
Manuel
bd4b7b8c13 🏷️ Apply namespace types to translations 2023-08-05 17:45:50 +02:00
Manuel
a287b87a4a 🏷️ Add translation namespace typesy 2023-08-05 17:33:41 +02:00
Meier Lukas
d1ad3ed162 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-05 17:18:10 +02:00
Meier Lukas
73589623d4 ♻️ Add translations for board customize page 2023-08-05 17:18:05 +02:00
Manuel
42688ad2c7 Add i18n namespaces and add translations for manage boards 2023-08-05 17:00:29 +02:00
Meier Lukas
6aff6dbedc ♻️ Fix head title for preferences page 2023-08-05 16:34:38 +02:00
Meier Lukas
f650915832 ♻️ Add fallback head title for board page 2023-08-05 16:21:24 +02:00
Meier Lukas
da0314a180 🐛 Add missing translation 2023-08-05 16:03:35 +02:00
Meier Lukas
093c03091e Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-05 16:02:30 +02:00
Meier Lukas
889853961d ♻️ Add header translations 2023-08-05 16:02:26 +02:00
Manuel
cf057505ec Protect routes and procedures 2023-08-05 15:30:59 +02:00
Manuel
5b1b36eecc 🚸 Remember current values as default in create user stepper 2023-08-05 15:09:48 +02:00
Manuel
d081ccb9ad Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-05 15:03:16 +02:00
Meier Lukas
04b3fa394d ♻️ Add ssr for user preferences page, add translations for user preferences page 2023-08-05 13:19:30 +02:00
Meier Lukas
4817c0c267 🐛 Updating search engine not working 2023-08-05 12:57:29 +02:00
Manuel
306151db65 Add link to manage page 2023-08-05 12:35:06 +02:00
Meier Lukas
2c3930bfb5 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-05 12:26:57 +02:00
Meier Lukas
f18d2fdfbd Add middleware for onboarding page 2023-08-05 12:26:50 +02:00
Manuel
f5d11cfd36 🐛 Fix imports 2023-08-05 12:26:42 +02:00
Manuel
bbcbda74a9 🐛 Fix import for header 2023-08-05 12:23:46 +02:00
Manuel
2615f8e0ae 💚 Remove run param from turbo build 2023-08-05 12:18:50 +02:00
Manuel
0455db61af 📌 Fix turbo version 2023-08-05 12:10:34 +02:00
Manuel
9f7c41919d 💚 Try to fix turbo build 2023-08-05 12:03:33 +02:00
Meier Lukas
050ed8f877 🐛 Logout redirect not working 2023-08-05 11:49:37 +02:00
Meier Lukas
5039287d18 🐛 Logout redirect wrong 2023-08-05 11:42:49 +02:00
Meier Lukas
5177851fca 🐛 Login not redirecting 2023-08-05 11:38:37 +02:00
Manuel
2f2fdfb438 Add sharp and surpress npm update notifier 2023-08-05 11:38:23 +02:00
Manuel
44119422f6 💚 Add db migration and fix build errors 2023-08-05 11:33:29 +02:00
Manuel
da57166fe7 Use bcryptjs instead of bcrypt 2023-08-05 11:19:52 +02:00
Manuel
6cbf5028c9 🐛 Update imports for turbo build 2023-08-05 11:14:28 +02:00
Manuel
fb0274c2e9 💚 Fix env validation for turbo build 2023-08-05 10:43:56 +02:00
Manuel
cee306ec95 💚 Fix turbo build for missing env 2023-08-05 10:39:28 +02:00
Manuel
5ee740bd67 💚 Potential fix for internal next auth url 2023-08-05 10:36:07 +02:00
Meier Lukas
4d6b120864 🐛 Sign in does no longer rely on NEXTAUTH_URL 2023-08-05 10:02:56 +02:00
Meier Lukas
5d5e69537d Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-05 09:57:55 +02:00
Meier Lukas
e9904ababf 🚧 Add search engine to user preferences 2023-08-05 09:57:48 +02:00
Manuel
f3082c5c7d 💚 Fix ci build 2023-08-05 00:45:58 +02:00
Manuel
c0b836f2a4 feat: disable delete for Homarr default config 2023-08-04 22:31:48 +02:00
Meier Lukas
863cff1dfc ♻️ Improve customization page 2023-08-04 21:54:33 +02:00
Meier Lukas
02227e0a44 Fix issue with link on boards page 2023-08-04 21:48:24 +02:00
Manuel
a6c273e26a 💄 Use correct icons for boards page 2023-08-02 18:57:05 +02:00
Meier Lukas
0a64ab0c84 🗑️ Remove config api endpoints 2023-08-02 06:46:26 +02:00
Meier Lukas
37c5378e4b ♻️ Remove try-password api endpoint 2023-08-02 06:45:19 +02:00
Meier Lukas
e5e1f5c406 Merge branch 'dev' into feature/add-basic-authentication 2023-08-02 06:44:26 +02:00
Meier Lukas
39b8eb355b 🐛 Fix failing query when not authorized 2023-08-01 20:21:44 +02:00
Meier Lukas
8ce0de5068 🚧 Add onboarding 2023-08-01 19:04:14 +02:00
Manuel
a3bb08768f Add make my default board button to manage boards 2023-08-01 18:14:53 +02:00
Manuel
9657d8acd5 Add default dashboard to preferences 2023-08-01 18:07:24 +02:00
Manuel
6ae89140a9 Add select for default board in preferences 2023-08-01 17:56:56 +02:00
Manuel
70c942e4cb 🌐 Fix translations on preferences page 2023-08-01 17:48:43 +02:00
Manuel
2035b20690 Add password strength indicator and use crypto safe random PWs 2023-08-01 17:42:19 +02:00
Meier Lukas
b4c6896850 ♻️ Remove unused middleware 2023-08-01 15:39:45 +02:00
Meier Lukas
994c9ede5c ♻️ Remove and move some more files 2023-08-01 15:37:58 +02:00
Meier Lukas
65d0b31a1a ♻️ Improved code structure for layout, remove most settings components 2023-08-01 15:23:31 +02:00
Meier Lukas
6b8d94b6b5 ♻️ Make login and invite page inaccessible when signed in 2023-08-01 14:51:27 +02:00
Meier Lukas
a75d19fd78 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-01 12:59:57 +02:00
Meier Lukas
46696af756 ♻️ Remove auto focus from search 2023-08-01 12:59:50 +02:00
Manuel
f391002c99 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-01 12:58:38 +02:00
Manuel
bb0bcabb2e ♻️ board procedure 2023-08-01 12:58:32 +02:00
Meier Lukas
db396b6b10 Add copy button to invite modal 2023-08-01 12:50:54 +02:00
Manuel
ccbf208ff0 🐛 Fix input element type for create invite 2023-08-01 12:37:35 +02:00
Meier Lukas
d62acf29be Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-01 12:35:30 +02:00
Meier Lukas
46475f3a93 💄 Improve movie modal cards and layout 2023-08-01 12:35:26 +02:00
ajnart
38638551dc 🚨 Fix compilation 2023-08-01 19:22:15 +09:00
ajnart
1bb84e3b0f Add cache back 2023-08-01 19:20:39 +09:00
Meier Lukas
68bd2c06c8 ♻️ Improve movie modal count text 2023-08-01 12:20:14 +02:00
Meier Lukas
ae1083b090 🐛 Fix issue with movie modal 2023-08-01 12:18:28 +02:00
Meier Lukas
16804972e5 ♻️ Add username to logout text 2023-08-01 12:06:39 +02:00
Meier Lukas
00260f975a ♻️ Move apps on top of search 2023-08-01 12:04:37 +02:00
Meier Lukas
2c5ef6a73b 🐛 Fix registration redirect link 2023-08-01 11:53:30 +02:00
Meier Lukas
80a4369845 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-01 11:43:58 +02:00
Meier Lukas
f93d935175 ♻️ Rename registration token to invite, add created by 2023-08-01 11:43:24 +02:00
Manuel
ac2116b44f Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-08-01 11:39:00 +02:00
Manuel
38c6a0741b 🌐 Fix translations for preferences page 2023-08-01 11:38:57 +02:00
Meier Lukas
df890b8c0a 💄 Polish layouts 2023-08-01 01:13:21 +02:00
Meier Lukas
fff6e6c077 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-07-31 23:52:03 +02:00
Meier Lukas
40056ab151 ♻️ Disable docker when not configured 2023-07-31 23:51:54 +02:00
Manuel
7f5e76796d 🐛 Fix validation for create board and add modal for delete board 2023-07-31 23:46:44 +02:00
Meier Lukas
1391a3d022 📱 Improve header 2023-07-31 23:27:11 +02:00
Meier Lukas
82c2079074 🗑️ Remove index and slug pages and add redirect to /board 2023-07-31 23:12:45 +02:00
Manuel
d07cdee144 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-07-31 22:58:18 +02:00
Manuel
d2408ebe4b Implement paging in manage users, implement search 2023-07-31 22:57:22 +02:00
Meier Lukas
3047002558 🐛 Fix issue with config reset when navigating 2023-07-31 22:50:45 +02:00
Manuel
35d505e9b1 🐛 Remove $ from delete user modal 2023-07-31 22:39:13 +02:00
Manuel
961b8024ab 🐛 Fix schema validation for user creation 2023-07-31 22:36:43 +02:00
Manuel
061ae1ae6c Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-07-31 22:32:38 +02:00
Manuel
8d0ea0e2a9 💄 Improve steps in user creation page 2023-07-31 22:32:34 +02:00
Meier Lukas
386fddc050 Implement new movie search modals 2023-07-31 22:30:48 +02:00
Manuel
630548e022 💄 Remove "your preferences" from manage home 2023-07-31 21:42:35 +02:00
Manuel
0b673b7c1a 🐛 Fix outdated links in manage home 2023-07-31 21:42:03 +02:00
Manuel
ca1809c476 💄 Fix colors of modals 2023-07-31 21:40:37 +02:00
Manuel
9fcbdb43e6 🐛 Fix paging on manage user invites 2023-07-31 21:20:46 +02:00
Manuel
ddfd9fb286 💄 Align actions to the right on manage invite page 2023-07-31 20:57:18 +02:00
Manuel
71757d0cce 🐛 Fix pagination on register token page 2023-07-31 20:52:17 +02:00
Manuel
129fd1336c Add copy registration token modal 2023-07-31 20:36:36 +02:00
Manuel
f24daa2b34 🔥 Remove active and inactive toggle from manage users page 2023-07-31 19:51:04 +02:00
Manuel
2aa594b686 🐛 User preferences not rendering correctly for Switches 2023-07-31 19:49:41 +02:00
Meier Lukas
130b51e109 Add board customization page 2023-07-31 11:15:18 +02:00
Meier Lukas
e448ce4b00 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-07-31 00:02:18 +02:00
Meier Lukas
99c2bc11cb 🚧 Add board customization page 2023-07-31 00:02:10 +02:00
Manuel
f8186e68e4 Add procedure for updating user settings 2023-07-30 23:29:41 +02:00
Manuel
4b1f5881e3 ♻️ Move preferences in router 2023-07-30 22:57:14 +02:00
Manuel
672b726e6b 🐛 Outdated links on manage page 2023-07-30 22:44:18 +02:00
Manuel
0575cd475c 🔥 Remove caching and async persistance storage 2023-07-30 22:30:49 +02:00
Manuel
f61d0f5f8d Add manage dashboards page 2023-07-30 22:20:20 +02:00
Meier Lukas
93c10da760 🐛 Fix issue with header action button 2023-07-30 20:24:12 +02:00
Meier Lukas
5008b5e7a4 Add slug board page 2023-07-30 20:17:35 +02:00
Manuel
96529ae6bc Re-add burger menu on mobile 2023-07-30 19:45:48 +02:00
Manuel
fc70a34e7d Add common header to manage pages 2023-07-30 16:30:48 +02:00
Manuel
d100d41ce6 Add preferences to preferences page 2023-07-30 16:22:45 +02:00
Manuel
9de710bfd8 Add preferences page to navbar 2023-07-30 15:33:43 +02:00
Manuel
8e5af7f05c Add title to manage pages 2023-07-30 15:15:14 +02:00
Meier Lukas
07b7b3acec Add docker page 2023-07-30 09:48:35 +02:00
Meier Lukas
e1aaf82602 🚧 Add board, Improve header 2023-07-30 01:09:10 +02:00
Meier Lukas
b19d489a4c ♻️ Add username from session to manage page 2023-07-29 23:05:47 +02:00
Meier Lukas
f84d9ed7d4 ♻️ Improve avatar menu, add avatar menu to manage pages, add default dashboard to user settings schema 2023-07-29 23:03:40 +02:00
Meier Lukas
588ad4313a Add color scheme toggle for new header 2023-07-29 22:06:21 +02:00
Manuel
5e873cad3f ️ Improve management start page 2023-07-29 21:58:36 +02:00
Manuel
d13347fd4e ️ Add mobile drawer for navigation 2023-07-29 21:44:16 +02:00
Manuel
3d2e909237 🚸 Improve mobile reponsiveness 2023-07-29 21:33:44 +02:00
Manuel
b4192137de Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-07-29 21:21:23 +02:00
Manuel
cb0b8869e2 Add deletion for registration tokens 2023-07-29 21:21:21 +02:00
Meier Lukas
698dab032f ♻️ Improve avatar menu 2023-07-29 21:18:41 +02:00
Meier Lukas
2db3d1405b Implement account button for new header 2023-07-29 21:15:55 +02:00
Manuel
b4c188e797 Add procedure for registration tokens management 2023-07-29 21:11:52 +02:00
Meier Lukas
cf12c8575d Add board pages 2023-07-29 20:56:20 +02:00
Meier Lukas
0c3d9f335c Implement search for new header 2023-07-29 20:56:08 +02:00
Manuel
ed23e388f9 🚸 Improve UX on create user page 2023-07-29 20:12:49 +02:00
Manuel
e273c830b4 Add create user form 2023-07-29 17:29:57 +02:00
Manuel
e045081346 💄 Fix darkmode styling for manage home page 2023-07-29 16:19:57 +02:00
Manuel
951e4cb61a Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-07-29 16:17:37 +02:00
Manuel
4c2e81a29d Add stepper for creating new user 2023-07-29 16:17:34 +02:00
Meier Lukas
9461e9d574 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-07-29 16:16:08 +02:00
Meier Lukas
1038cc7ccf ♻️ Show edit buttons only when user is admin 2023-07-29 16:16:01 +02:00
Manuel
e4e1f2e32e Add tRPC user query 2023-07-29 16:08:58 +02:00
Manuel
5c4e1a4bb8 Merge branch 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-07-29 15:32:20 +02:00
Manuel
76e3bc28e5 Improve management landing page 2023-07-29 15:32:17 +02:00
Meier Lukas
79d13274b5 ♻️ Move authentication pages to /auth 2023-07-29 15:21:00 +02:00
Manuel
5cac368926 Add correct page routing 2023-07-29 14:59:11 +02:00
Manuel
b45a351eff 🔀 Merge branch 'dev' into feature/add-basic-authentication 2023-07-29 14:50:31 +02:00
Manuel
0f3ec55f21 Merge branches 'feature/add-basic-authentication' and 'feature/add-basic-authentication' of https://github.com/ajnart/homarr into feature/add-basic-authentication 2023-07-29 14:49:48 +02:00
Manuel
3b01a42b15 Add management layout 2023-07-29 14:49:44 +02:00
Meier Lukas
c165648d5b 🎨 Improve color scheme logic 2023-07-29 14:30:19 +02:00
Meier Lukas
c312828c79 Add translation to user settings 2023-07-29 11:35:34 +02:00
Meier Lukas
ed76afbce8 Add user settings, improve color scheme 2023-07-29 11:19:40 +02:00
Meier Lukas
d8562e2990 Add working sign-in / sign-out, add working registration with token 2023-07-29 10:05:05 +02:00
Meier Lukas
326395730e 🐛 Fix issues with login page 2023-07-28 20:45:54 +02:00
Meier Lukas
d7f6bdf417 Add basic credentials authentication 2023-07-28 18:51:44 +02:00
Meier Lukas
d507f0807f Merge branch 'dev' into feature/add-basic-authentication 2023-07-28 18:11:17 +02:00
Meierschlumpf
3990c1a4ad ♻️ Add env variable validation 2023-07-23 14:18:10 +02:00
2332 changed files with 95130 additions and 12877 deletions

View File

@@ -7,3 +7,7 @@ npm-debug.log
.github
LICENSE
docs/
*.sqlite
*.env
.env
.next/standalone/.env

19
.env.example Normal file
View File

@@ -0,0 +1,19 @@
DATABASE_URL="file:./database/db.sqlite"
# Next Auth
# You can generate a new secret on the command line with:
# openssl rand -base64 32
# https://next-auth.js.org/configuration/options#secret
AUTH_TRUST_HOST="true"
NEXTAUTH_SECRET="anything"
# Disable analytics
NEXT_PUBLIC_DISABLE_ANALYTICS="true"
DEFAULT_COLOR_SCHEME="light"
# Unraid API Configuration
UNRAID_HOST=192.168.10.20
UNRAID_API_KEY=your-api-key-here
UNRAID_USE_SSL=false
UNRAID_PORT=80

2
.github/FUNDING.yml vendored
View File

@@ -2,7 +2,7 @@
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
open_collective: homarr
ko_fi: ajnart
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry

View File

@@ -3,6 +3,11 @@ description: Report something that's broken, or not working like intented!
title: '<title>'
labels: ['🐛 Bug']
body:
- type: markdown
attributes:
value: |
> [!WARNING]
> If you want to report a bug for 1.0, please open it on the new [repository](https://github.com/homarr-labs/homarr/issues/new/choose).
- type: dropdown
id: environment
attributes:

View File

@@ -3,6 +3,11 @@ description: Request a feature to help improve Homarr!
title: '<title>'
labels: ['✨ Feature']
body:
- type: markdown
attributes:
value: |
> [!WARNING]
> If you want to request a feature for 1.0, please open it on the new [repository](https://github.com/homarr-labs/homarr/issues/new/choose).
- type: textarea
id: feature
attributes:
@@ -22,3 +27,11 @@ body:
- High (App breaking feature)
validations:
required: true
- type: checkboxes
id: idiot-check
attributes:
label: Please tick the boxes
description: Before submitting, please ensure that
options:
- label: You are **NOT** using a version superior to v1. if that is the case, please fill this issue on the new repository.
required: true

View File

@@ -3,6 +3,11 @@ description: Tell us your idea! We may implement it.
title: '<title>'
labels: ['🤔 Idea']
body:
- type: markdown
attributes:
value: |
> [!WARNING]
> If you have an idea for 1.0, please open it on the new [repository](https://github.com/homarr-labs/homarr/issues/new/choose).
- type: textarea
id: feature
attributes:

View File

@@ -2,6 +2,11 @@ name: 🏗️ Module request
description: Request for a module to be added / an integration with you favourite service !
title: '<title>'
body:
- type: markdown
attributes:
value: |
> [!WARNING]
> If you want to request a new integration for 1.0, please open it on the new [repository](https://github.com/homarr-labs/homarr/issues/new/choose).
- type: textarea
id: name
attributes:

21
.github/renovate.json vendored Normal file
View File

@@ -0,0 +1,21 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base"
],
"commitMessagePrefix": "⬆️",
"dependencyDashboard": true,
"prCreation": "approval",
"lockFileMaintenance": {
"automerge": false
},
"minor": {
"automerge": false
},
"patch": {
"automerge": false
},
"pin": {
"automerge": false
}
}

View File

@@ -6,9 +6,6 @@ name: Master CI
on:
push:
branches: [master]
paths-ignore:
- '.github/**'
- '**.md'
tags:
- v*
@@ -63,9 +60,9 @@ jobs:
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
- run: yarn install --immutable
- run: yarn install
- run: yarn build
- run: yarn turbo build
- name: Docker meta
id: meta
@@ -101,3 +98,4 @@ jobs:
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
network: host

View File

@@ -41,6 +41,7 @@ jobs:
permissions:
packages: write
contents: read
pull-requests: write
steps:
- name: Setup
@@ -70,11 +71,15 @@ jobs:
path: .next/cache
key: ${{ runner.os }}-build-${{ env.cache-name }}
- run: yarn install --immutable
- run: yarn install
- run: yarn turbo build
- run: yarn test:run
- run: yarn test:coverage
- name: Report coverage
if: always()
uses: davelosert/vitest-coverage-report-action@v2
- name: Docker meta
if: github.event_name != 'pull_request'
@@ -86,7 +91,7 @@ jobs:
# generate Docker tags based on the following events/attributes
tags: |
type=ref,event=pr
type=raw,value=${{ github.event.inputs.tag }}, prefix=test-,enable=${{ github.event.inputs.tag != '' }}
type=raw,value=${{ github.event.inputs.tag }},enable=${{ github.event.inputs.tag != '' }}
tpye=raw,value=dev,priority=1,enable=${{ github.event.inputs.tag == '' }}
- name: Set up QEMU
@@ -107,50 +112,11 @@ jobs:
if: github.event_name != 'pull_request'
uses: docker/build-push-action@v4
with:
platforms: linux/amd64,linux/arm64,linux/arm/v7
platforms: linux/amd64,linux/arm64
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn config get cacheFolder)"
- uses: actions/cache@v3
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Restore next build
uses: actions/cache@v3
id: restore-build-cache
env:
cache-name: cache-next-build
with:
# if you use a custom build directory, replace all instances of `.next` in this file with your build directory
# ex: if your app builds to `dist`, replace `.next` with `dist`
path: .next/cache
# change this if you prefer a more strict cache
key: ${{ runner.os }}-build-${{ env.cache-name }}
- run: yarn install
- name: Build next.js app
# change this if your site requires a custom build command
run: yarn turbo build
network: host

16
.github/workflows/greetings.yml vendored Normal file
View File

@@ -0,0 +1,16 @@
name: Greetings
on: [pull_request_target, issues]
jobs:
greeting:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/first-interaction@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: "Hi 👋. Thank you for submitting your first issue to Homarr. Please ensure that you've opened this issue on the correct repository. Homarr v1 has been moved to github.com/homarr-labs/homarr "
pr-message: "Hi 👋. Thank you for making your first contribution to Homarr. Please ensure that you've completed all the points in the TODO checklist. We'll review your changes shortly."

28
.github/workflows/stale.yml vendored Normal file
View File

@@ -0,0 +1,28 @@
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
#
# You can adjust the behavior by modifying this file.
# For more information, see:
# https://github.com/actions/stale
name: Mark stale issues and pull requests
on:
schedule:
- cron: '18 17 * * *'
jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v5
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: "Hello 👋, this issue has been open for 60 days without activity. We mark issues to help prioritise and close dead issues. Can you confirm that this issue is still relevant on the latest version? I'll remove the stale label as soon as there is further activity on this issue. Thank you 🙏"
stale-pr-message: 'Hello 👋, this PR has gone stale. Please reply to mark it as active.'
stale-issue-label: 'Stale'
stale-pr-label: 'Stale'
days-before-close: -1

12
.gitignore vendored
View File

@@ -4,6 +4,7 @@
/node_modules
/.pnp
.pnp.js
/cli/node_modules/
# testing
/coverage
@@ -49,10 +50,19 @@ data/configs
!.yarn/releases
!.yarn/sdks
!.yarn/versions
/cli/.yarn/
#envfiles
.env
#Languages other than 'en'
public/locales/*
!public/locales/en
!public/locales/en
#database
sqlite.db
database/*.sqlite
WILL_BE_OVERWRITTEN.sqlite
# IDE
.idea/*

21
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,21 @@
{
"i18n-ally.localesPaths": "public/locales",
"i18n-ally.enabledFrameworks": [
"react-i18next"
],
"i18n-ally.namespace": true,
"i18n-ally.pathMatcher": "{locale}/{namespaces}.json",
"i18n-ally.keystyle": "nested",
"i18n-ally.keysInUse": [
"modules.**",
"layout.manage.navigation.**",
],
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
},
"typescript.tsdk": "node_modules/typescript/lib",
"explorer.fileNesting.patterns": {
"package.json": "pnpm-lock.yaml, yarn.lock, package-lock.json",
"*.tsx": "${capture}.module.css"
},
}

View File

@@ -1,21 +1,64 @@
FROM node:20-alpine
FROM node:20.2.0-slim
WORKDIR /app
# Define node.js environment variables
ARG PORT=7575
ENV NEXT_TELEMETRY_DISABLED 1
ENV NODE_ENV production
ENV NODE_OPTIONS '--no-experimental-fetch'
COPY next.config.js ./
COPY public ./public
COPY package.json ./package.json
COPY package.json ./temp_package.json
COPY yarn.lock ./temp_yarn.lock
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY .next/standalone ./
COPY .next/static ./.next/static
COPY ./scripts/run.sh ./scripts/run.sh
RUN chmod +x ./scripts/run.sh
COPY ./drizzle ./drizzle
EXPOSE 7575
COPY ./drizzle/migrate ./migrate
COPY ./tsconfig.json ./migrate/tsconfig.json
COPY ./cli ./cli
RUN mkdir /data
# Install dependencies
RUN apt update && apt install -y openssl wget
# Move node_modules to temp location to avoid overwriting
RUN mv node_modules _node_modules
RUN rm package.json
# Install dependencies for migration
RUN cp ./migrate/package.json ./package.json
RUN yarn
# Copy better_sqlite3 build for current platform
RUN cp /app/node_modules/better-sqlite3/build/Release/better_sqlite3.node /app/_node_modules/better-sqlite3/build/Release/better_sqlite3.node
# Copy node_modules for migration to migrate folder for migration script
RUN mv node_modules ./migrate/node_modules
# Copy temp node_modules of app to app folder
RUN mv _node_modules node_modules
RUN echo '#!/bin/bash\nnode /app/cli/cli.js "$@"' > /usr/bin/homarr
RUN chmod +x /usr/bin/homarr
RUN cd /app/cli && yarn --immutable
# Expose the default application port
EXPOSE $PORT
ENV PORT=${PORT}
ENV DATABASE_URL "file:/data/db.sqlite"
ENV AUTH_TRUST_HOST="true"
ENV PORT 7575
ENV NEXTAUTH_SECRET NOT_IN_USE_BECAUSE_JWTS_ARE_UNUSED
CMD ["node", "server.js"]
HEALTHCHECK --interval=10s --timeout=5s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:${PORT} || exit 1
VOLUME [ "/app/data/configs" ]
VOLUME [ "/data" ]
ENTRYPOINT ["sh", "./scripts/run.sh"]

105
Dockerfile.unraid Normal file
View File

@@ -0,0 +1,105 @@
# Multi-stage Dockerfile for Homarr Unraid UI
# Builds entirely inside Docker to avoid native module issues
# Build stage
FROM node:20.2.0-slim AS builder
WORKDIR /app
# Install build dependencies
RUN apt-get update && apt-get install -y \
python3 \
make \
g++ \
git \
openssl \
&& rm -rf /var/lib/apt/lists/*
# Copy package files
COPY package.json yarn.lock ./
COPY .yarnrc.yml ./
COPY .yarn ./.yarn
# Install dependencies
RUN yarn install --immutable
# Copy source code
COPY . .
# Build the application
ENV SKIP_ENV_VALIDATION=1
ENV NEXTAUTH_SECRET=build-time-secret
ENV DATABASE_URL=file:build.sqlite
RUN yarn build
# Production stage
FROM node:20.2.0-slim
WORKDIR /app
# Define node.js environment variables
ARG PORT=7575
ENV NEXT_TELEMETRY_DISABLED=1
ENV NODE_ENV=production
ENV NODE_OPTIONS='--no-experimental-fetch'
# Copy built application from builder
COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./temp_package.json
COPY --from=builder /app/yarn.lock ./temp_yarn.lock
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/scripts/run.sh ./scripts/run.sh
COPY --from=builder /app/drizzle ./drizzle
COPY --from=builder /app/drizzle/migrate ./migrate
COPY --from=builder /app/tsconfig.json ./migrate/tsconfig.json
COPY --from=builder /app/cli ./cli
RUN chmod +x ./scripts/run.sh
RUN mkdir -p /data
# Install runtime dependencies
RUN apt-get update && apt-get install -y openssl wget && rm -rf /var/lib/apt/lists/*
# Move node_modules to temp location to avoid overwriting
RUN mv node_modules _node_modules
RUN rm package.json
# Install dependencies for migration
RUN cp ./migrate/package.json ./package.json
RUN yarn install --production=false
# Copy better_sqlite3 build for current platform
RUN cp /app/node_modules/better-sqlite3/build/Release/better_sqlite3.node /app/_node_modules/better-sqlite3/build/Release/better_sqlite3.node || true
# Copy node_modules for migration to migrate folder
RUN mv node_modules ./migrate/node_modules
# Restore app node_modules
RUN mv _node_modules node_modules
# Setup CLI
RUN echo '#!/bin/bash\nnode /app/cli/cli.js "$@"' > /usr/bin/homarr
RUN chmod +x /usr/bin/homarr
RUN cd /app/cli && yarn install --production || true
# Expose the default application port
EXPOSE $PORT
ENV PORT=${PORT}
# Environment defaults
ENV DATABASE_URL="file:/data/db.sqlite"
ENV AUTH_TRUST_HOST="true"
ENV PORT=7575
ENV NEXTAUTH_SECRET=NOT_IN_USE_BECAUSE_JWTS_ARE_UNUSED
# Health check
HEALTHCHECK --interval=10s --timeout=5s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:${PORT} || exit 1
VOLUME [ "/app/data/configs" ]
VOLUME [ "/data" ]
ENTRYPOINT ["sh", "./scripts/run.sh"]

View File

@@ -1,6 +1,5 @@
<!-- Project Title -->
![Banner](docs/banner.png)
[![Banner](docs/banner.png)](https://homarr.dev/)
<!-- Badges -->
<p align="center">
@@ -11,7 +10,7 @@
<a href="https://github.com/ajnart/homarr/actions/workflows/docker.yml">
  <img title="Docker CI Status" src="https://github.com/ajnart/homarr/actions/workflows/docker.yml/badge.svg" alt="CI Status">
</a>
<a href=https://crowdin.com/project/homarr>
<a href=https://translate.homarr.dev/>
<img title="Translations" src="https://badges.crowdin.net/homarr/localized.svg" />
</a>
<a href="https://discord.gg/aCsmEV5RgA">
@@ -25,10 +24,10 @@
<strong>Demo ✨</strong>
</a>
<a href="https://homarr.dev/docs/introduction/installation">
<a href="https://homarr.dev/docs/getting-started/">
<strong>Install 💻</strong>
</a> •
<a href="https://crowdin.com/project/homarr">
<a href="https://translate.homarr.dev/">
<strong>Translations 🈺</strong>
</a> •
<a href="https://discord.com/invite/aCsmEV5RgA">
@@ -41,7 +40,14 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t
<br/>
<br/>
![Features Section](docs/section-features.png)
> [!IMPORTANT]
> # The Homarr repository has been moved to [HomarrLabs](https://github.com/homarr-labs/homarr)
> # Please create issues related to 1.0 there. This repository will be archived once the 1.0 is fully polished.
> # 1.0 is a complete rewrite and to migrate you have to change your compose file. Please follow the [Migration Guide](https://homarr.dev/blog/2025/01/19/migration-guide-1.0) and read the [Breaking Changes](https://homarr.dev/blog/2024/09/23/version-1.0#breaking-changes)
[![Features Section](docs/section-features.png)](https://homarr.dev/)
- 🖌️ Highly customizable with an extensive drag and drop grid system
- ✨ Integrates seamlessly with your favorite self-hosted applications
@@ -53,59 +59,71 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t
- 🦞 Comprehensive built-in icon picker with over 7000 icons
- 🐳 Easy deployment with Docker, unRAID, and Synology
- 🚀 Compatible with any major consumer hardware (x86, Raspberry Pi, old laptops, ...)
- 💵 Free and Open-Source - your data stays on your device. No telemetry data.
<br/>
<br/>
![Widgets & Integrations Section](docs/section-widgets-and-integrations.png)
[![Widgets & Integrations Section](docs/section-widgets-and-integrations.png)](https://homarr.dev/docs/category/widgets)
Homarr has a [built-in collection of widgets and integrations](https://homarr.dev/docs/integrations/), that connect to your applications and enable you to control them directly from the dashboard.
Each widget and integration has a comprehensive documentation for your comfort.
Homarr will integrate with the following applications of yours:
Homarr has a [built-in collection of widgets and integrations](https://homarr.dev/docs/category/integrations), that connect to your applications and enable you to control them directly from the dashboard.
Each widget and integration has a comprehensive documentation
Homarr will integrate with the following applications:
- 📥 Torrent clients
- [Deluge](https://homarr.dev/docs/integrations/#deluge)
- [Transmission](https://homarr.dev/docs/integrations/#transmission)
- [qBittorent](https://homarr.dev/docs/integrations/#qbittorrent-integration)
- 📥 Usenet clients
- [SABnzbd](https://homarr.dev/docs/integrations/#sabnzbd)
- [NZBGet](https://homarr.dev/docs/integrations/#nzbget)
- 📚 Media collection managers
- [Sonarr](https://homarr.dev/docs/integrations/#sonarr)
- [Radarr](https://homarr.dev/docs/integrations/#radarr)
- [Lidarr](https://homarr.dev/docs/integrations/#lidarr)
- [Readarr](https://homarr.dev/docs/integrations/#readarr)
- 🎞️ Media request managers
- [Overseerr](https://homarr.dev/docs/integrations/#overseerr--jellyseerr)
- [Jellyseerr](https://homarr.dev/docs/integrations/#overseerr--jellyseerr)
- 🔌 [Dash.](https://homarr.dev/docs/integrations/#dash)
- 🐳 [Docker](https://homarr.dev/docs/integrations/#docker)
📥 Torrent clients
- [Deluge](https://homarr.dev/docs/integrations/torrent#deluge)
- [Transmission](https://homarr.dev/docs/integrations/torrent#transmission)
- [qBittorent](https://homarr.dev/docs/integrations/torrent#qbittorrent-integration)
📥 Usenet clients
- [SABnzbd](https://homarr.dev/docs/integrations/usenet#sabnzbd)
- [NZBGet](https://homarr.dev/docs/integrations/usenet#nzbget)
📺 Media servers
- [Plex](https://homarr.dev/docs/integrations/media-server/#plex)
- [Jellyfin](https://homarr.dev/docs/integrations/media-server#jellyfin-and-emby)
📚 Media collection managers
- [Sonarr](https://homarr.dev/docs/integrations/servarr#sonarr)
- [Radarr](https://homarr.dev/docs/integrations/servarr#radarr)
- [Lidarr](https://homarr.dev/docs/integrations/servarr#lidarr)
- [Readarr](https://homarr.dev/docs/integrations/servarr#readarr)
🎞️ Media request managers
- [Overseerr](https://homarr.dev/docs/integrations/media-requester)
- [Jellyseerr](https://homarr.dev/docs/integrations/media-requester)
🚫 DNS ad-blockers
- [Pihole](https://homarr.dev/docs/integrations/dns#pihole)
- [AdGuard Home](https://homarr.dev/docs/integrations/dns#adguard-home)
Other integrations
- [🔌 Dash.](https://homarr.dev/docs/integrations/hardware)
- [🐳 Docker](https://homarr.dev/docs/integrations/containers)
We're constantly adding new integrations and widgets, which will enhance your experience even further.
<br/>
<br/>
![Preview Section](docs/section-preview.png)
[![Preview Section](docs/section-preview.png)](https://demo.homarr.dev/)
https://user-images.githubusercontent.com/30572287/217098893-5880e7de-13d0-42c5-b505-f7921593396f.mp4
<br/>
<br/>
![Installation Section](docs/section-installation.png)
[![Installation Section](docs/section-installation.png)](https://homarr.dev/docs/category/installation-1)
Since we are updating Homarr very frequently, we recommend reading our official installation guides:
<a href="https://homarr.dev/docs/introduction/installation">
<a href="https://homarr.dev/docs/category/installation-1">
<img src="docs/installation-button.png" width="200" />
</a>
<br/>
<br/>
![Contribute Section](docs/section-contribute.png)
[![Contribute Section](docs/section-contribute.png)](https://github.com/ajnart/homarr/blob/dev/CONTRIBUTING.md)
Homarr is maintained by motivated developers in their free-time.
We work for fun and learning on this project.
@@ -123,3 +141,4 @@ You can also support us by helping with [translating the entire project](https:/
All contributions, regardless of their size or scope, are welcome and highly appreciated! Thank you ❤️
![Alt](https://repobeats.axiom.co/api/embed/60a6f68f193faf831f64221bdf90782adec51c93.svg "Repobeats analytics image")
[![Covered by Argos Visual Testing](https://argos-ci.com/badge-large.svg)](https://argos-ci.com?utm_source=%5Bhomarr%5D&utm_campaign=oss)

30
cli/cli.js Normal file
View File

@@ -0,0 +1,30 @@
import yargs from 'yargs';
import { resetPasswordForOwner } from './commands/reset-owner-password.js';
import { resetPasswordForUsername } from './commands/reset-password.js';
yargs(process.argv.slice(2))
.scriptName('homarr')
.usage('$0 <cmd> [args]')
.command('reset-owner-password', 'Resets the current owner password without UI access', async () => {
await resetPasswordForOwner();
})
.command(
'reset-password',
'Reset the password of a specific user without UI access',
(yargs) => {
yargs.option('username', {
type: 'string',
describe: 'Username of user',
demandOption: true
});
},
async (argv) => {
await resetPasswordForUsername(argv.username);
}
)
.version(false)
.showHelpOnFail(true)
.alias('h', 'help')
.demandCommand()
.help().argv;

View File

@@ -0,0 +1,55 @@
import bcrypt from 'bcryptjs';
import Database from 'better-sqlite3';
import boxen from 'boxen';
import chalk from 'chalk';
import Consola from 'consola';
import crypto from 'crypto';
import { sql } from 'drizzle-orm';
import { drizzle } from 'drizzle-orm/better-sqlite3';
export async function resetPasswordForOwner() {
if (!process.env.DATABASE_URL) {
Consola.error('Unable to connect to database due to missing database URL environment variable');
return;
}
Consola.info('Connecting to the database...');
const sqlite = new Database(process.env.DATABASE_URL.replace('file:', ''));
const db = drizzle(sqlite);
Consola.info('Connected to the database ' + chalk.green('✓'));
Consola.info('Generating new random password...');
const newPassword = crypto.randomUUID();
const salt = bcrypt.genSaltSync(10);
const hashedPassword = bcrypt.hashSync(newPassword, salt);
try {
await db.transaction((tx) => {
tx.run(
sql`DELETE FROM session WHERE userId = (SELECT id FROM user WHERE is_owner = 1 LIMIT 1)`
);
tx.run(sql`UPDATE user SET password = ${hashedPassword} WHERE is_owner = 1 LIMIT 1;`);
});
console.log(
boxen(`New owner password is '${chalk.red(newPassword)}'. You can now log in with this password.\nExising sessions have been destroyed and need to login again with the new passowrd.`, {
dimBorder: true,
borderStyle: 'round',
padding: {
left: 1,
right: 1
}
})
);
} catch (err) {
Consola.error('Failed to update password', err);
} finally {
Consola.info('Command has completed');
}
}

View File

@@ -0,0 +1,56 @@
import bcrypt from 'bcryptjs';
import Database from 'better-sqlite3';
import Consola from 'consola';
import crypto from 'crypto';
import boxen from 'boxen';
import chalk from 'chalk';
import { sql } from 'drizzle-orm';
import { drizzle } from 'drizzle-orm/better-sqlite3';
export async function resetPasswordForUsername(username) {
if (!process.env.DATABASE_URL) {
Consola.error('Unable to connect to database due to missing database URL environment variable');
return;
}
Consola.info('Connecting to the database...');
const sqlite = new Database(process.env.DATABASE_URL.replace('file:', ''));
const db = drizzle(sqlite);
Consola.info('Generating new random password...');
const newPassword = crypto.randomUUID();
const salt = bcrypt.genSaltSync(10);
const hashedPassword = bcrypt.hashSync(newPassword, salt);
Consola.info(`Updating password for user '${username}'`);
try {
await db.transaction((tx) => {
tx.run(
sql`DELETE FROM session WHERE userId = (SELECT id FROM user WHERE name = ${username} LIMIT 1)`
);
tx.run(sql`UPDATE user SET password = ${hashedPassword} WHERE id = (SELECT id FROM user WHERE name = ${username} LIMIT 1) LIMIT 1`);
});
console.log(
boxen(`New password for '${username}' is '${chalk.red(newPassword)}'. You can now log in with this password.\nExising sessions have been destroyed and need to login again with the new passowrd.`, {
dimBorder: true,
borderStyle: 'round',
padding: {
left: 1,
right: 1
}
})
);
} catch (err) {
Consola.error('Failed to update password', err);
} finally {
Consola.info('Command has completed');
}
}

12
cli/package.json Normal file
View File

@@ -0,0 +1,12 @@
{
"dependencies": {
"bcryptjs": "^2.4.3",
"better-sqlite3": "^8.6.0",
"boxen": "^7.1.1",
"chalk": "^5.3.0",
"consola": "^3.0.0",
"drizzle-orm": "^0.28.6",
"yargs": "^17.7.2"
},
"type": "module"
}

1371
cli/yarn.lock Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,5 @@
project_id: "534422"
api_token_env: "CROWDIN_PERSONAL_TOKEN"
files:
- source: /public/locales/en/**/*.json
translation: /public/locales/%two_letters_code%/**/%original_file_name%

View File

@@ -270,52 +270,6 @@
}
],
"widgets": [
{
"id": "86b1921f-efa7-410f-92dd-79553bf3264d",
"type": "notebook",
"properties": {
"showToolbar": true,
"content": "<h2><strong>Homarr's</strong> notebook</h2><p>Use it as your Todo list, ideas to think about, as a \"getting-started\" guide for your users or even as your secret journal to confess your crushes, it stays private our your <strong>Homarr</strong> instance.</p><p>The <code>notebook</code> widget focuses on usability and is designed to be as simple as possible to bring a familiar editing experience to regular users. It is based on <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://tiptap.dev/\">Tiptap.dev</a> and supports all of its features:</p><ul><li><p>General text formatting: <strong>bold</strong>, <em>italic</em>, underline, <s>strike-through</s></p></li><li><p>Headings (h1-h6)</p></li><li><p>Sub and super scripts (&lt;sup /&gt; and &lt;sub /&gt; tags)</p></li><li><p>Ordered and bullet lists</p></li><li><p>Text align</p></li></ul>"
},
"area": {
"type": "wrapper",
"properties": {
"id": "default"
}
},
"shape": {
"sm": {
"location": {
"x": 0,
"y": 0
},
"size": {
"width": 3,
"height": 2
}
},
"md": {
"location": {
"x": 0,
"y": 0
},
"size": {
"width": 3,
"height": 4
}
},
"lg": {
"location": {
"x": 0,
"y": 1
},
"size": {
"width": 6,
"height": 3
}
}
}
},
{
"id": "e3004052-6b83-480e-b458-56e8ccdca5f0",
"type": "weather",
@@ -472,6 +426,52 @@
}
}
}
},
{
"id": "86b1921f-efa7-410f-92dd-79553bf3264d",
"type": "notebook",
"properties": {
"showToolbar": true,
"content": "<h2><strong>Welcome to Homarr 🚀👋</strong></h2><p>We're glad that you're here! Homarr is a <em>modern </em>and <em>easy to use</em> dashboard that helps you to <strong>organize and manage</strong> your home network from one place. Control is <strong>at your fingertips</strong>.</p><p>We recommend you to read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev/docs/getting-started/after-the-installation\">getting started guide</a> first. To edit this board you must enter the edit mode - only administrators can do this. Adding an app is the first step you should take. You can do this by clicking the <code>Add tile</code> button at the top right and select <code>App</code>. After you provided an internal URL, external URL and selected an icon you can drag it around when holding down the left mouse button. Make it bigger or smaller using the drag icon at the bottom right. When you're happy with it's position, you <strong>must exit edit mode to save your board</strong>. Adding widgets works the same way but may require additional configuration - read the documentation for more information.</p><p>To remove this widget, you must log in to your administrator account and click on the menu to delete it.</p><p><strong><u>Your TODO list:</u></strong></p><ul data-type=\"taskList\"><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev\">documentation</a></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add your <em>first app</em></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p><em>Resize </em>and <em>drag</em> your app to a different position</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add the <em>clock widget</em> to your dashboard</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Create a <em>new user</em></p></div></li></ul>"
},
"area": {
"type": "wrapper",
"properties": {
"id": "default"
}
},
"shape": {
"sm": {
"location": {
"x": 0,
"y": 0
},
"size": {
"width": 3,
"height": 2
}
},
"md": {
"location": {
"x": 0,
"y": 0
},
"size": {
"width": 3,
"height": 4
}
},
"lg": {
"location": {
"x": 0,
"y": 1
},
"size": {
"width": 6,
"height": 3
}
}
}
}
],
"settings": {
@@ -505,6 +505,9 @@
"columnCountMedium": 6,
"columnCountLarge": 10
}
},
"access": {
"allowGuests": false
}
}
}
}

View File

@@ -1,2 +1,4 @@
export const REPO_URL = 'ajnart/homarr';
export const ICON_PICKER_SLICE_LIMIT = 36;
export const COOKIE_LOCALE_KEY = 'config-locale';
export const COOKIE_COLOR_SCHEME_KEY = 'color-scheme';

2828
data/crowdin-report.json Normal file

File diff suppressed because it is too large Load Diff

513
data/default.json Normal file
View File

@@ -0,0 +1,513 @@
{
"schemaVersion": 2,
"configProperties": {
"name": "default"
},
"categories": [],
"wrappers": [
{
"id": "default",
"position": 0
}
],
"apps": [
{
"id": "5df743d9-5cb1-457c-85d2-64ff86855652",
"name": "Documentation",
"url": "https://homarr.dev",
"behaviour": {
"onClickUrl": "https://homarr.dev",
"externalUrl": "https://homarr.dev",
"isOpeningNewTab": true
},
"network": {
"enabledStatusChecker": false,
"statusCodes": [
"200"
]
},
"appearance": {
"iconUrl": "/imgs/logo/logo.png",
"appNameStatus": "normal",
"positionAppName": "column",
"lineClampAppName": 1
},
"integration": {
"type": null,
"properties": []
},
"area": {
"type": "wrapper",
"properties": {
"id": "default"
}
},
"shape": {
"md": {
"location": {
"x": 5,
"y": 1
},
"size": {
"width": 1,
"height": 1
}
},
"sm": {
"location": {
"x": 0,
"y": 1
},
"size": {
"width": 1,
"height": 2
}
},
"lg": {
"location": {
"x": 6,
"y": 1
},
"size": {
"width": 2,
"height": 2
}
}
}
},
{
"id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a337",
"name": "Discord",
"url": "https://discord.com/invite/aCsmEV5RgA",
"behaviour": {
"onClickUrl": "https://discord.com/invite/aCsmEV5RgA",
"isOpeningNewTab": true,
"externalUrl": "https://discord.com/invite/aCsmEV5RgA",
"tooltipDescription": "Join our Discord server! We're waiting for your ideas and feedback. "
},
"network": {
"enabledStatusChecker": false,
"statusCodes": [
"200"
]
},
"appearance": {
"iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/discord.png",
"appNameStatus": "normal",
"positionAppName": "row-reverse",
"lineClampAppName": 1
},
"integration": {
"type": null,
"properties": []
},
"area": {
"type": "wrapper",
"properties": {
"id": "default"
}
},
"shape": {
"md": {
"location": {
"x": 3,
"y": 1
},
"size": {
"width": 1,
"height": 1
}
},
"sm": {
"location": {
"x": 1,
"y": 4
},
"size": {
"width": 1,
"height": 1
}
},
"lg": {
"location": {
"x": 4,
"y": 0
},
"size": {
"width": 2,
"height": 1
}
}
}
},
{
"id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a330",
"name": "Contribute",
"url": "https://github.com/ajnart/homarr",
"behaviour": {
"onClickUrl": "https://github.com/ajnart/homarr",
"externalUrl": "https://github.com/ajnart/homarr",
"isOpeningNewTab": true,
"tooltipDescription": ""
},
"network": {
"enabledStatusChecker": false,
"statusCodes": []
},
"appearance": {
"iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/github.png",
"appNameStatus": "normal",
"positionAppName": "row-reverse",
"lineClampAppName": 2
},
"integration": {
"type": null,
"properties": []
},
"area": {
"type": "wrapper",
"properties": {
"id": "default"
}
},
"shape": {
"md": {
"location": {
"x": 3,
"y": 2
},
"size": {
"width": 2,
"height": 1
}
},
"sm": {
"location": {
"x": 1,
"y": 3
},
"size": {
"width": 2,
"height": 1
}
},
"lg": {
"location": {
"x": 2,
"y": 0
},
"size": {
"width": 2,
"height": 1
}
}
}
},
{
"id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a990",
"name": "Donate",
"url": "https://ko-fi.com/ajnart",
"behaviour": {
"onClickUrl": "https://ko-fi.com/ajnart",
"externalUrl": "https://ko-fi.com/ajnart",
"isOpeningNewTab": true,
"tooltipDescription": "Please consider making a donation"
},
"network": {
"enabledStatusChecker": false,
"statusCodes": [
"200"
]
},
"appearance": {
"iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/ko-fi.png",
"appNameStatus": "normal",
"positionAppName": "row-reverse",
"lineClampAppName": 1
},
"integration": {
"type": null,
"properties": []
},
"area": {
"type": "wrapper",
"properties": {
"id": "default"
}
},
"shape": {
"md": {
"location": {
"x": 4,
"y": 1
},
"size": {
"width": 1,
"height": 1
}
},
"sm": {
"location": {
"x": 2,
"y": 4
},
"size": {
"width": 1,
"height": 1
}
},
"lg": {
"location": {
"x": 6,
"y": 0
},
"size": {
"width": 2,
"height": 1
}
}
}
}
],
"widgets": [
{
"id": "e3004052-6b83-480e-b458-56e8ccdca5f0",
"type": "weather",
"properties": {
"displayInFahrenheit": false,
"location": {
"name": "Paris",
"latitude": 48.85341,
"longitude": 2.3488
},
"displayCityName": true
},
"area": {
"type": "wrapper",
"properties": {
"id": "default"
}
},
"shape": {
"md": {
"location": {
"x": 5,
"y": 0
},
"size": {
"width": 1,
"height": 1
}
},
"sm": {
"location": {
"x": 2,
"y": 0
},
"size": {
"width": 1,
"height": 1
}
},
"lg": {
"location": {
"x": 0,
"y": 0
},
"size": {
"width": 2,
"height": 1
}
}
}
},
{
"id": "971aa859-8570-49a1-8d34-dd5c7b3638d1",
"type": "date",
"properties": {
"display24HourFormat": true,
"dateFormat": "hide",
"enableTimezone": false,
"timezoneLocation": {
"name": "Paris",
"latitude": 48.85341,
"longitude": 2.3488
},
"titleState": "city"
},
"area": {
"type": "wrapper",
"properties": {
"id": "default"
}
},
"shape": {
"sm": {
"location": {
"x": 1,
"y": 0
},
"size": {
"width": 1,
"height": 1
}
},
"md": {
"location": {
"x": 4,
"y": 0
},
"size": {
"width": 1,
"height": 1
}
},
"lg": {
"location": {
"x": 8,
"y": 0
},
"size": {
"width": 2,
"height": 1
}
}
}
},
{
"id": "f252768d-9e69-491b-b6b4-8cad04fa30e8",
"type": "date",
"properties": {
"display24HourFormat": true,
"dateFormat": "hide",
"enableTimezone": true,
"timezoneLocation": {
"name": "Tokyo",
"latitude": 35.6895,
"longitude": 139.69171
},
"titleState": "city"
},
"area": {
"type": "wrapper",
"properties": {
"id": "default"
}
},
"shape": {
"sm": {
"location": {
"x": 0,
"y": 0
},
"size": {
"width": 1,
"height": 1
}
},
"md": {
"location": {
"x": 3,
"y": 0
},
"size": {
"width": 1,
"height": 1
}
},
"lg": {
"location": {
"x": 8,
"y": 1
},
"size": {
"width": 2,
"height": 1
}
}
}
},
{
"id": "86b1921f-efa7-410f-92dd-79553bf3264d",
"type": "notebook",
"properties": {
"showToolbar": true,
"content": "<h2><strong>Welcome to Homarr 🚀👋</strong></h2><p>We're glad that you're here! Homarr is a <em>modern </em>and <em>easy to use</em> dashboard that helps you to <strong>organize and manage</strong> your home network from one place. Control is <strong>at your fingertips</strong>.</p><p>We recommend you to read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev/docs/getting-started/after-the-installation\">getting started guide</a> first. To edit this board you must enter the edit mode - only administrators can do this. Adding an app is the first step you should take. You can do this by clicking the <code>Add tile</code> button at the top right and select <code>App</code>. After you provided an internal URL, external URL and selected an icon you can drag it around when holding down the left mouse button. Make it bigger or smaller using the drag icon at the bottom right. When you're happy with it's position, you <strong>must exit edit mode to save your board</strong>. Adding widgets works the same way but may require additional configuration - read the documentation for more information.</p><p>To remove this widget, you must log in to your administrator account and click on the menu to delete it.</p><p><strong><u>Your TODO list:</u></strong></p><ul data-type=\"taskList\"><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev\">documentation</a></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add your <em>first app</em></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p><em>Resize </em>and <em>drag</em> your app to a different position</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add the <em>clock widget</em> to your dashboard</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Create a <em>new user</em></p></div></li></ul>"
},
"area": {
"type": "wrapper",
"properties": {
"id": "default"
}
},
"shape": {
"sm": {
"location": {
"x": 0,
"y": 0
},
"size": {
"width": 3,
"height": 2
}
},
"md": {
"location": {
"x": 0,
"y": 0
},
"size": {
"width": 3,
"height": 4
}
},
"lg": {
"location": {
"x": 0,
"y": 1
},
"size": {
"width": 6,
"height": 3
}
}
}
}
],
"settings": {
"common": {
"searchEngine": {
"type": "google",
"properties": {}
}
},
"customization": {
"layout": {
"enabledLeftSidebar": false,
"enabledRightSidebar": false,
"enabledDocker": false,
"enabledPing": false,
"enabledSearchbar": true
},
"pageTitle": "Homarr ⭐️",
"logoImageUrl": "/imgs/logo/logo.png",
"faviconUrl": "/imgs/favicon/favicon-squared.png",
"backgroundImageUrl": "",
"customCss": "",
"colors": {
"primary": "red",
"secondary": "yellow",
"shade": 7
},
"appOpacity": 100,
"gridstack": {
"columnCountSmall": 3,
"columnCountMedium": 6,
"columnCountLarge": 10
}
},
"access": {
"allowGuests": false
}
}
}

0
database/.gitkeep Normal file
View File

42
docker-compose.unraid.yml Normal file
View File

@@ -0,0 +1,42 @@
version: "3.8"
services:
unmarr:
image: git.xtrm-lab.org/jazzymc/homarr:latest
container_name: unmarr
restart: unless-stopped
environment:
# Unraid API Configuration
- UNRAID_HOST=192.168.10.20
- UNRAID_API_KEY=${UNRAID_API_KEY}
- UNRAID_USE_SSL=false
- UNRAID_PORT=80
# App Configuration
- TZ=Europe/Sofia
- DATABASE_URL=file:/data/db.sqlite
- AUTH_TRUST_HOST=true
- NEXTAUTH_URL=https://unmarr.xtrm-lab.org
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET:-changeme}
volumes:
- /mnt/user/appdata/unmarr/data:/data
- /mnt/user/appdata/unmarr/configs:/app/data/configs
networks:
dockerproxy:
ipv4_address: 172.18.0.5
labels:
# Traefik
- "traefik.enable=true"
- "traefik.constraint=valid"
- "traefik.http.routers.unmarr.rule=Host(`unmarr.xtrm-lab.org`)"
- "traefik.http.routers.unmarr.entrypoints=https"
- "traefik.http.routers.unmarr.tls=true"
- "traefik.http.routers.unmarr.tls.certresolver=cloudflare"
- "traefik.http.services.unmarr.loadbalancer.server.port=7575"
# Unraid
- "net.unraid.docker.managed=true"
- "net.unraid.docker.icon=https://homarr.dev/img/logo.png"
- "net.unraid.docker.webui=https://unmarr.xtrm-lab.org"
networks:
dockerproxy:
external: true

View File

@@ -0,0 +1,148 @@
# Unraid Custom UI Project
This project transforms the Homarr fork into a custom Unraid management UI with an Orchis GTK theme.
## Project Goals
1. **Step 1**: Recreate all current Unraid WebGUI pages using Homarr as a base, with data from the Unraid GraphQL API
2. **Step 2**: Apply a custom theme based on the Orchis GTK theme
## Project Resources
| Document | Description |
|----------|-------------|
| [WEBGUI-COMPLETE-INVENTORY.md](./WEBGUI-COMPLETE-INVENTORY.md) | Complete inventory of ~100 Unraid WebGUI pages |
| [unraid-api-research.md](./unraid-api-research.md) | Unraid GraphQL API documentation |
| [homarr-architecture.md](./homarr-architecture.md) | Homarr codebase architecture |
| [orchis-design-system.ts](./orchis-design-system.ts) | Orchis theme design tokens (TypeScript) |
## Unraid Server Connection
- **GraphQL Endpoint**: `http://192.168.10.20/graphql`
- **Auth**: `x-api-key` header
- **Socket**: `/var/run/unraid-api.sock`
## Implementation Plan
### Phase 1: Foundation Setup
- [ ] Create Unraid GraphQL client integration
- [ ] Set up API authentication layer
- [ ] Configure environment variables for Unraid connection
- [ ] Create base types for Unraid data models
### Phase 2: Core Pages (Priority Order)
1. **Dashboard** - System overview with real-time metrics
- System info, CPU/RAM usage, array status
- Docker/VM summaries, network, UPS
2. **Array Management** (Main)
- Array devices, pool devices, boot device
- Parity check, array operations
3. **Docker Management**
- Container list, start/stop/restart
- Container details, logs
4. **VM Management**
- VM list, power controls
- VM details, console access
5. **Shares**
- User shares, disk shares
- Share settings, SMB/NFS security
### Phase 3: Orchis Theme Integration
- [ ] Copy design tokens to `src/styles/`
- [ ] Create Mantine theme override with Orchis values
- [ ] Implement light/dark mode with Orchis palettes
- [ ] Replace default components with Orchis-styled versions
### Phase 4: Settings & Tools
- Settings pages (identification, disk, network, etc.)
- Tools pages (syslog, diagnostics, system devices)
- User management
- Notifications system
### Phase 5: Real-time Features
- GraphQL subscriptions for CPU/memory metrics
- Nchan integration for legacy real-time features
- WebSocket connections for live updates
## Key Technical Decisions
### Homarr Stack
- Next.js 13 (Pages Router in this version)
- Mantine UI v6
- tRPC for type-safe API
- Zustand for state management
- React Query for server state
### Data Sources
| Feature | Source |
|---------|--------|
| System info, array, shares | Unraid GraphQL API |
| Docker containers | Unraid GraphQL API |
| VMs | Unraid GraphQL API |
| Real-time CPU/RAM | GraphQL Subscriptions |
| Real-time disk I/O | Nchan WebSocket (`/sub/diskload`) |
| Legacy features | PHP endpoints where needed |
### API Gaps (Require Legacy Endpoints)
- Docker create/delete/restart/logs
- VM create/delete
- Share CRUD, User CRUD
- System reboot/shutdown
- Mover operations
## Directory Structure (New Files)
```
src/
├── lib/
│ └── unraid/
│ ├── client.ts # GraphQL client
│ ├── types.ts # TypeScript types
│ └── queries/ # GraphQL queries
├── pages/
│ └── unraid/
│ ├── dashboard.tsx # Dashboard page
│ ├── array/ # Array pages
│ ├── docker/ # Docker pages
│ ├── vms/ # VM pages
│ ├── shares/ # Share pages
│ ├── settings/ # Settings pages
│ └── tools/ # Tools pages
├── components/
│ └── unraid/
│ ├── Dashboard/ # Dashboard components
│ ├── Array/ # Array components
│ ├── Docker/ # Docker components
│ └── ...
└── styles/
└── orchis/
├── theme.ts # Mantine theme config
├── variables.css # CSS custom properties
└── components.css # Component overrides
```
## Getting Started
```bash
# Install dependencies
yarn install
# Set up environment
cp .env.example .env.local
# Edit .env.local with your Unraid API key
# Run development server
yarn dev
```
## Environment Variables
```env
UNRAID_HOST=192.168.10.20
UNRAID_API_KEY=your-api-key-here
UNRAID_USE_SSL=false
```

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,60 @@
# Homarr Architecture
## Tech Stack
- Next.js 13+ (App Router), React 18, TypeScript
- Mantine UI (component library)
- Zustand (client state), React Query (server state)
- Prisma ORM (SQLite default / PostgreSQL)
- Turbo monorepo, pnpm workspaces
## Project Structure
```
homarr/
├── apps/web/src/ # Main Next.js app
│ ├── app/ # App Router pages
│ ├── components/ # React components
│ ├── modules/ # Widgets & integrations
│ ├── stores/ # Zustand stores
│ └── styles/ # Themes & global CSS
├── packages/
│ ├── api-client/ # API client lib
│ ├── common/ # Shared types/utils
│ ├── definitions/ # Widget/integration defs
│ ├── auth/ # Auth logic
│ └── ui/ # Shared UI components
├── prisma/ # DB schema & migrations
└── turbo.json
```
## Widget System
Each widget in `apps/web/src/modules/`:
- `definition.ts` - Metadata + Zod config schema
- `component.tsx` - React component
- `settings.tsx` - Config panel
- `server-actions.ts` - Backend operations
- Registered in module index, auto-discovered
## Integration System
External service connectors with:
- API client abstraction, credential management
- URL/hostname config, SSL handling
- Error handling, retry, rate limiting, caching
## Theming
- CSS variables + Mantine theming + Tailwind
- Light/dark mode, custom color palettes, accent colors
- Wallpaper/background, font size, border radius customization
- Theme persisted in database
## Adding New Pages
1. Create in `apps/web/src/app/(group)/page-name/page.tsx`
2. Use Mantine UI components
3. Add API routes in `src/app/api/`
4. Create Zustand store or use React Query
5. Update navigation config
## Key Patterns
- Server Components by default, `'use client'` for interactive
- TRPC for type-safe RPC
- Zod schemas for validation
- Prisma for DB operations

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,81 @@
# Unraid API Research (Live from XTRM-Unraid v7.2.3)
## API: unraid-api v4.29.2 (NestJS + Apollo GraphQL)
### Connection
- HTTP: `http://192.168.10.20/graphql`
- WebSocket: `ws://192.168.10.20/graphql` (graphql-ws protocol)
- Unix socket: `/var/run/unraid-api.sock`
- Auth: `x-api-key` header
### GraphQL Queries
| Query | Description |
|-------|-------------|
| `info` | System info (cpu, memory, os, baseboard, devices, display, versions) |
| `array` | Array state, capacity, disks, parities, caches, parity check status |
| `disks` / `disk(id)` | Physical disks with SMART status, temp, serial |
| `docker` | Containers (id, names, state, status, image, ports, autoStart) + networks |
| `vms` | VMs (id, name, state) |
| `shares` | Shares (name, free, used, size, include, exclude, cache, color) |
| `notifications` | Notifications (title, subject, description, importance, type, timestamp) |
| `vars` | Server variables (version, name, timezone, network, SMB/NFS settings) |
| `services` | Running services (name, online, uptime, version) |
| `flash` | Flash drive (guid, vendor, product) |
| `registration` | License (type, state, keyFile, expiration) |
| `network` | Network info (accessUrls) |
| `server` | Server details (owner, guid, wanip, lanip, localurl, remoteurl) |
| `connect` | Connect status (dynamicRemoteAccess, settings) |
| `plugins` | Installed plugins (name, version) |
| `logFiles` / `logFile(path)` | Log file listing and content |
| `upsDevices` / `upsConfiguration` | UPS monitoring |
| `apiKeys` | API key management |
| `customization` | Theme + activation code |
| `me` / `owner` | Current user / server owner |
### GraphQL Mutations
| Mutation | Description |
|----------|-------------|
| `array.setState` | Start/stop array |
| `array.addDiskToArray` / `removeDiskFromArray` | Disk management |
| `array.mountArrayDisk` / `unmountArrayDisk` | Mount/unmount |
| `docker.start(id)` / `docker.stop(id)` | Container start/stop |
| `vm.start/stop/pause/resume/forceStop/reboot/reset(id)` | VM power management |
| `parityCheck.start/pause/resume/cancel` | Parity check control |
| `notification.create/delete/archive/unread` | Notification CRUD |
| `apiKey.create/update/delete` | API key management |
| `customization.setTheme` | Theme switching |
| `connectSignIn/SignOut` | Unraid Connect |
| `setupRemoteAccess` | Remote access config |
### GraphQL Subscriptions (Real-time)
- `systemMetricsCpu` / `systemMetricsCpuTelemetry` / `systemMetricsMemory`
- `arraySubscription` / `parityHistorySubscription`
- `notificationAdded` / `notificationsOverview`
- `logFile` (live log streaming)
- `upsUpdates`
- `ownerSubscription` / `serversSubscription`
### Enums
- ArrayState: STARTED, STOPPED, NEW_ARRAY, RECON_DISK, DISABLE_DISK, etc.
- ArrayDiskStatus: DISK_NP, DISK_OK, DISK_INVALID, DISK_WRONG, DISK_DSBL, etc.
- ArrayDiskType: DATA, PARITY, FLASH, CACHE
- ContainerState: RUNNING, EXITED
- VmState: NOSTATE, RUNNING, IDLE, PAUSED, SHUTDOWN, SHUTOFF, CRASHED, PMSUSPENDED
- DiskFsType: XFS, BTRFS, VFAT, ZFS, EXT4, NTFS
- DiskInterfaceType: SAS, SATA, USB, PCIE, UNKNOWN
- ThemeName: azure, black, gray, white
### Legacy PHP/Nchan Endpoints
- Nchan WebSocket channels: `/sub/var`, `/sub/docker`, `/sub/update1-3`, `/sub/diskload`, etc.
- PHP includes: DashboardApps.php, Control.php, SmartInfo.php, Syslog.php, etc.
- State INI files at `/var/local/emhttp/`: var.ini, disks.ini, shares.ini, etc.
- Legacy control: POST to `/update.htm` for commands
### NOT Available via GraphQL
- Docker create/delete/restart/logs
- VM create/delete
- Share CRUD, User CRUD
- Detailed SMART attributes
- Disk format/clear, spin up/down
- System reboot/shutdown
- Mover operations

11
drizzle.config.ts Normal file
View File

@@ -0,0 +1,11 @@
import 'dotenv';
import { type Config } from 'drizzle-kit';
export default {
schema: './src/server/db/schema.ts',
driver: 'better-sqlite',
out: './drizzle',
dbCredentials: {
url: process.env.DATABASE_URL!,
},
} satisfies Config;

View File

@@ -0,0 +1,69 @@
CREATE TABLE `account` (
`userId` text NOT NULL,
`type` text NOT NULL,
`provider` text NOT NULL,
`providerAccountId` text NOT NULL,
`refresh_token` text,
`access_token` text,
`expires_at` integer,
`token_type` text,
`scope` text,
`id_token` text,
`session_state` text,
PRIMARY KEY(`provider`, `providerAccountId`),
FOREIGN KEY (`userId`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE TABLE `invite` (
`id` text PRIMARY KEY NOT NULL,
`token` text NOT NULL,
`expires` integer NOT NULL,
`created_by_id` text NOT NULL,
FOREIGN KEY (`created_by_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE TABLE `session` (
`sessionToken` text PRIMARY KEY NOT NULL,
`userId` text NOT NULL,
`expires` integer NOT NULL,
FOREIGN KEY (`userId`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE TABLE `user_setting` (
`id` text PRIMARY KEY NOT NULL,
`user_id` text NOT NULL,
`color_scheme` text DEFAULT 'environment' NOT NULL,
`language` text DEFAULT 'en' NOT NULL,
`default_board` text DEFAULT 'default' NOT NULL,
`first_day_of_week` text DEFAULT 'monday' NOT NULL,
`search_template` text DEFAULT 'https://google.com/search?q=%s' NOT NULL,
`open_search_in_new_tab` integer DEFAULT true NOT NULL,
`disable_ping_pulse` integer DEFAULT false NOT NULL,
`replace_ping_with_icons` integer DEFAULT false NOT NULL,
`use_debug_language` integer DEFAULT false NOT NULL,
`auto_focus_search` integer DEFAULT false NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE TABLE `user` (
`id` text PRIMARY KEY NOT NULL,
`name` text,
`email` text,
`emailVerified` integer,
`image` text,
`password` text,
`salt` text,
`is_admin` integer DEFAULT false NOT NULL,
`is_owner` integer DEFAULT false NOT NULL
);
--> statement-breakpoint
CREATE TABLE `verificationToken` (
`identifier` text NOT NULL,
`token` text NOT NULL,
`expires` integer NOT NULL,
PRIMARY KEY(`identifier`, `token`)
);
--> statement-breakpoint
CREATE INDEX `userId_idx` ON `account` (`userId`);--> statement-breakpoint
CREATE UNIQUE INDEX `invite_token_unique` ON `invite` (`token`);--> statement-breakpoint
CREATE INDEX `user_id_idx` ON `session` (`userId`);

View File

@@ -0,0 +1,10 @@
CREATE TABLE `migrate_token` (
`id` text PRIMARY KEY NOT NULL,
`token` text NOT NULL,
`boards` integer NOT NULL,
`users` integer NOT NULL,
`integrations` integer NOT NULL,
`expires` integer NOT NULL
);
--> statement-breakpoint
CREATE UNIQUE INDEX `migrate_token_token_unique` ON `migrate_token` (`token`);

View File

@@ -0,0 +1,468 @@
{
"version": "5",
"dialect": "sqlite",
"id": "32c1bc91-e69f-4e1d-b53c-9c43f2e6c9d3",
"prevId": "00000000-0000-0000-0000-000000000000",
"tables": {
"account": {
"name": "account",
"columns": {
"userId": {
"name": "userId",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"type": {
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"provider": {
"name": "provider",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"providerAccountId": {
"name": "providerAccountId",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"refresh_token": {
"name": "refresh_token",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"access_token": {
"name": "access_token",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"expires_at": {
"name": "expires_at",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"token_type": {
"name": "token_type",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"scope": {
"name": "scope",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"id_token": {
"name": "id_token",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"session_state": {
"name": "session_state",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {
"userId_idx": {
"name": "userId_idx",
"columns": [
"userId"
],
"isUnique": false
}
},
"foreignKeys": {
"account_userId_user_id_fk": {
"name": "account_userId_user_id_fk",
"tableFrom": "account",
"tableTo": "user",
"columnsFrom": [
"userId"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"account_provider_providerAccountId_pk": {
"columns": [
"provider",
"providerAccountId"
]
}
},
"uniqueConstraints": {}
},
"invite": {
"name": "invite",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"token": {
"name": "token",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"expires": {
"name": "expires",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"created_by_id": {
"name": "created_by_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"invite_token_unique": {
"name": "invite_token_unique",
"columns": [
"token"
],
"isUnique": true
}
},
"foreignKeys": {
"invite_created_by_id_user_id_fk": {
"name": "invite_created_by_id_user_id_fk",
"tableFrom": "invite",
"tableTo": "user",
"columnsFrom": [
"created_by_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"session": {
"name": "session",
"columns": {
"sessionToken": {
"name": "sessionToken",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"userId": {
"name": "userId",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"expires": {
"name": "expires",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"user_id_idx": {
"name": "user_id_idx",
"columns": [
"userId"
],
"isUnique": false
}
},
"foreignKeys": {
"session_userId_user_id_fk": {
"name": "session_userId_user_id_fk",
"tableFrom": "session",
"tableTo": "user",
"columnsFrom": [
"userId"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"user_setting": {
"name": "user_setting",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"color_scheme": {
"name": "color_scheme",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'environment'"
},
"language": {
"name": "language",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'en'"
},
"default_board": {
"name": "default_board",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'default'"
},
"first_day_of_week": {
"name": "first_day_of_week",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'monday'"
},
"search_template": {
"name": "search_template",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'https://google.com/search?q=%s'"
},
"open_search_in_new_tab": {
"name": "open_search_in_new_tab",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": true
},
"disable_ping_pulse": {
"name": "disable_ping_pulse",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
},
"replace_ping_with_icons": {
"name": "replace_ping_with_icons",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
},
"use_debug_language": {
"name": "use_debug_language",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
},
"auto_focus_search": {
"name": "auto_focus_search",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
}
},
"indexes": {},
"foreignKeys": {
"user_setting_user_id_user_id_fk": {
"name": "user_setting_user_id_user_id_fk",
"tableFrom": "user_setting",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"user": {
"name": "user",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"email": {
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"emailVerified": {
"name": "emailVerified",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"image": {
"name": "image",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"password": {
"name": "password",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"salt": {
"name": "salt",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"is_admin": {
"name": "is_admin",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
},
"is_owner": {
"name": "is_owner",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"verificationToken": {
"name": "verificationToken",
"columns": {
"identifier": {
"name": "identifier",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"token": {
"name": "token",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"expires": {
"name": "expires",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"verificationToken_identifier_token_pk": {
"columns": [
"identifier",
"token"
]
}
},
"uniqueConstraints": {}
}
},
"enums": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
}
}

View File

@@ -0,0 +1,527 @@
{
"version": "5",
"dialect": "sqlite",
"id": "9c8971c9-6d33-4d14-b318-b19ff9fbb88f",
"prevId": "32c1bc91-e69f-4e1d-b53c-9c43f2e6c9d3",
"tables": {
"account": {
"name": "account",
"columns": {
"userId": {
"name": "userId",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"type": {
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"provider": {
"name": "provider",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"providerAccountId": {
"name": "providerAccountId",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"refresh_token": {
"name": "refresh_token",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"access_token": {
"name": "access_token",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"expires_at": {
"name": "expires_at",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"token_type": {
"name": "token_type",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"scope": {
"name": "scope",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"id_token": {
"name": "id_token",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"session_state": {
"name": "session_state",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {
"userId_idx": {
"name": "userId_idx",
"columns": [
"userId"
],
"isUnique": false
}
},
"foreignKeys": {
"account_userId_user_id_fk": {
"name": "account_userId_user_id_fk",
"tableFrom": "account",
"tableTo": "user",
"columnsFrom": [
"userId"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"account_provider_providerAccountId_pk": {
"columns": [
"provider",
"providerAccountId"
]
}
},
"uniqueConstraints": {}
},
"invite": {
"name": "invite",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"token": {
"name": "token",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"expires": {
"name": "expires",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"created_by_id": {
"name": "created_by_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"invite_token_unique": {
"name": "invite_token_unique",
"columns": [
"token"
],
"isUnique": true
}
},
"foreignKeys": {
"invite_created_by_id_user_id_fk": {
"name": "invite_created_by_id_user_id_fk",
"tableFrom": "invite",
"tableTo": "user",
"columnsFrom": [
"created_by_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"migrate_token": {
"name": "migrate_token",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"token": {
"name": "token",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"boards": {
"name": "boards",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"users": {
"name": "users",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"integrations": {
"name": "integrations",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"expires": {
"name": "expires",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"migrate_token_token_unique": {
"name": "migrate_token_token_unique",
"columns": [
"token"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"session": {
"name": "session",
"columns": {
"sessionToken": {
"name": "sessionToken",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"userId": {
"name": "userId",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"expires": {
"name": "expires",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"user_id_idx": {
"name": "user_id_idx",
"columns": [
"userId"
],
"isUnique": false
}
},
"foreignKeys": {
"session_userId_user_id_fk": {
"name": "session_userId_user_id_fk",
"tableFrom": "session",
"tableTo": "user",
"columnsFrom": [
"userId"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"user_setting": {
"name": "user_setting",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"color_scheme": {
"name": "color_scheme",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'environment'"
},
"language": {
"name": "language",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'en'"
},
"default_board": {
"name": "default_board",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'default'"
},
"first_day_of_week": {
"name": "first_day_of_week",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'monday'"
},
"search_template": {
"name": "search_template",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'https://google.com/search?q=%s'"
},
"open_search_in_new_tab": {
"name": "open_search_in_new_tab",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": true
},
"disable_ping_pulse": {
"name": "disable_ping_pulse",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
},
"replace_ping_with_icons": {
"name": "replace_ping_with_icons",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
},
"use_debug_language": {
"name": "use_debug_language",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
},
"auto_focus_search": {
"name": "auto_focus_search",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
}
},
"indexes": {},
"foreignKeys": {
"user_setting_user_id_user_id_fk": {
"name": "user_setting_user_id_user_id_fk",
"tableFrom": "user_setting",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"user": {
"name": "user",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"email": {
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"emailVerified": {
"name": "emailVerified",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"image": {
"name": "image",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"password": {
"name": "password",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"salt": {
"name": "salt",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"is_admin": {
"name": "is_admin",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
},
"is_owner": {
"name": "is_owner",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"verificationToken": {
"name": "verificationToken",
"columns": {
"identifier": {
"name": "identifier",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"token": {
"name": "token",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"expires": {
"name": "expires",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"verificationToken_identifier_token_pk": {
"columns": [
"identifier",
"token"
]
}
},
"uniqueConstraints": {}
}
},
"enums": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
}
}

View File

@@ -0,0 +1,20 @@
{
"version": "5",
"dialect": "sqlite",
"entries": [
{
"idx": 0,
"version": "5",
"when": 1695874816934,
"tag": "0000_supreme_the_captain",
"breakpoints": true
},
{
"idx": 1,
"version": "5",
"when": 1730643218521,
"tag": "0001_brave_mimic",
"breakpoints": true
}
]
}

View File

@@ -0,0 +1,20 @@
// This file is used to migrate the database to the current version
// It is run when the docker container starts
const Database = require('better-sqlite3');
const path = require('path');
const dotenv = require('dotenv');
const { drizzle } = require('drizzle-orm/better-sqlite3');
const { migrate } = require('drizzle-orm/better-sqlite3/migrator');
const migrationsFolder = process.argv[2] ?? '../drizzle';
dotenv.config({ path: path.join(__dirname, '/../.env') });
const sqlite = new Database(process.env.DATABASE_URL!.replace('file:', ''));
const db = drizzle(sqlite);
const migrateDatabase = async () => {
await migrate(db, { migrationsFolder });
};
migrateDatabase();

View File

@@ -0,0 +1,15 @@
{
"license": "MIT",
"description": "This package.json is used for the migration script the dependencies are only installed within the Dockerfile.",
"scripts": {
"db:migrate": "tsx ./migrate.ts"
},
"dependencies": {
"@types/better-sqlite3": "^7.6.7",
"better-sqlite3": "8.6.0",
"drizzle-orm": "^0.28.6",
"dotenv": "^16.3.1",
"tsx": "4.19.1",
"typescript": "^5.2.2"
}
}

View File

@@ -5,34 +5,41 @@ module.exports = {
i18n: {
defaultLocale: 'en',
locales: [
'en',
'ar',
'cn',
'cr',
'cs',
'da',
'he',
'de',
'el',
'en',
'es',
'fr',
'he',
'hr',
'hu',
'it',
'ja',
'ko',
'lol',
'lv',
'nl',
'no',
'pl',
'pt',
'ru',
'sk',
'sl',
'sv',
'vi',
'uk',
'zh',
'el',
'sk',
'no',
'tr',
'lv',
'hr'
'tw',
'uk',
'vi',
'et',
'lt',
'ro'
],
localeDetection: true,
localeDetection: false,
},
returnEmptyString: false,
appendNamespaceToCIMode: true,

View File

@@ -1,3 +1,4 @@
require('./src/env');
const { i18n } = require('./next-i18next.config');
const withBundleAnalyzer = require('@next/bundle-analyzer')({
@@ -5,6 +6,14 @@ const withBundleAnalyzer = require('@next/bundle-analyzer')({
});
module.exports = withBundleAnalyzer({
eslint: {
ignoreDuringBuilds: true,
},
webpack: (config) => {
// for dynamic loading of auth providers
config.experiments = { ...config.experiments, topLevelAwait: true };
return config;
},
images: {
domains: ['cdn.jsdelivr.net'],
},
@@ -12,4 +21,14 @@ module.exports = withBundleAnalyzer({
output: 'standalone',
i18n,
transpilePackages: ['@jellyfin/sdk'],
redirects: async () => [
{
source: '/',
destination: '/unraid',
permanent: false,
},
],
env: {
NEXTAUTH_URL_INTERNAL: process.env.NEXTAUTH_URL_INTERNAL || process.env.HOSTNAME || 'http://localhost:3000'
},
});

View File

@@ -1,6 +1,6 @@
{
"name": "homarr",
"version": "0.13.2",
"version": "0.16.0",
"description": "Homarr - A homepage for your server.",
"license": "MIT",
"repository": {
@@ -9,21 +9,24 @@
},
"scripts": {
"dev": "next dev",
"build": "next build",
"build": "NEXTAUTH_SECRET=WILL_BE_OVERWRITTEN next build",
"analyze": "ANALYZE=true next build",
"turbo": "turbo run build",
"turbo": "DATABASE_URL=file:WILL_BE_OVERWRITTEN.sqlite turbo build",
"start": "next start",
"typecheck": "tsc --noEmit",
"export": "next build && next export",
"lint": "next lint",
"prettier:check": "prettier --check \"**/*.{ts,tsx}\"",
"prettier:write": "prettier --write \"**/*.{ts,tsx}\"",
"test": "vitest",
"test:ui": "vitest --ui",
"test:run": "vitest run",
"test:coverage": "vitest run --coverage",
"docker:build": "turbo build && docker build . -t homarr:dev",
"docker:start": "docker run --env-file ./.env -p 7575:7575 homarr:dev "
"test": "SKIP_ENV_VALIDATION=1 vitest",
"test:docker": "yarn run turbo build && yarn test:run && docker build . -t homarr:local-dev && docker run -p 7575:7575 --name homarr-dev homarr:local-dev",
"test:ui": "SKIP_ENV_VALIDATION=1 vitest --ui",
"test:run": "SKIP_ENV_VALIDATION=1 vitest run",
"test:coverage": "SKIP_ENV_VALIDATION=1 vitest run --coverage",
"docker:build": "turbo build && docker build . -t homarr:local-dev",
"docker:start": "docker run -p 7575:7575 --name homarr-development homarr:local-dev",
"db:migrate": "dotenv tsx drizzle/migrate/migrate.ts ./drizzle",
"db:add": "drizzle-kit generate:sqlite --config ./drizzle.config.ts"
},
"dependencies": {
"@ctrl/deluge": "^4.1.0",
@@ -35,47 +38,68 @@
"@jellyfin/sdk": "^0.8.0",
"@mantine/core": "^6.0.0",
"@mantine/dates": "^6.0.0",
"@mantine/dropzone": "^6.0.0",
"@mantine/form": "^6.0.0",
"@mantine/hooks": "^6.0.0",
"@mantine/modals": "^6.0.0",
"@mantine/next": "^6.0.0",
"@mantine/notifications": "^6.0.0",
"@mantine/prism": "^6.0.19",
"@mantine/tiptap": "^6.0.17",
"@nivo/core": "^0.83.0",
"@nivo/line": "^0.83.0",
"@react-native-async-storage/async-storage": "^1.18.1",
"@t3-oss/env-nextjs": "^0.7.1",
"@tabler/icons-react": "^2.20.0",
"@tanstack/query-async-storage-persister": "^4.27.1",
"@tanstack/query-sync-storage-persister": "^4.27.1",
"@tanstack/react-query": "^4.2.1",
"@tanstack/react-query-devtools": "^4.24.4",
"@tanstack/react-query-persist-client": "^4.28.0",
"@tiptap/extension-link": "^2.0.4",
"@tiptap/pm": "^2.0.4",
"@tiptap/react": "^2.0.4",
"@tiptap/starter-kit": "^2.0.4",
"@trpc/client": "^10.29.1",
"@trpc/next": "^10.29.1",
"@trpc/react-query": "^10.29.1",
"@trpc/server": "^10.29.1",
"@tiptap/extension-color": "^2.1.12",
"@tiptap/extension-highlight": "^2.1.12",
"@tiptap/extension-image": "^2.1.12",
"@tiptap/extension-link": "^2.1.12",
"@tiptap/extension-table": "^2.1.12",
"@tiptap/extension-table-cell": "^2.1.12",
"@tiptap/extension-table-header": "^2.1.12",
"@tiptap/extension-table-row": "^2.1.12",
"@tiptap/extension-task-item": "^2.1.12",
"@tiptap/extension-task-list": "^2.1.12",
"@tiptap/extension-text-align": "^2.1.12",
"@tiptap/extension-text-style": "^2.1.12",
"@tiptap/extension-underline": "^2.1.12",
"@tiptap/pm": "^2.1.12",
"@tiptap/react": "^2.1.12",
"@tiptap/starter-kit": "^2.1.12",
"@trpc/client": "^10.37.1",
"@trpc/next": "^10.37.1",
"@trpc/react-query": "^10.37.1",
"@trpc/server": "^10.37.1",
"@types/bcryptjs": "^2.4.2",
"@vitejs/plugin-react": "^4.0.0",
"adm-zip": "^0.5.15",
"axios": "^1.0.0",
"bcryptjs": "^2.4.3",
"better-sqlite3": "^8.6.0",
"consola": "^3.0.0",
"cookies": "^0.8.0",
"cookies-next": "^2.1.1",
"dayjs": "^1.11.7",
"dockerode": "^3.3.2",
"dotenv": "^16.3.1",
"drizzle-kit": "^0.19.13",
"drizzle-orm": "^0.28.6",
"drizzle-zod": "^0.5.1",
"fily-publish-gridstack": "^0.0.13",
"flag-icons": "^6.9.2",
"framer-motion": "^10.0.0",
"geo-tz": "^7.0.7",
"generate-password": "^1.7.0",
"html-entities": "^2.3.3",
"i18next": "^22.5.1",
"immer": "^10.0.2",
"js-file-download": "^0.4.12",
"moment": "^2.29.4",
"moment-timezone": "^0.5.43",
"next": "13.4.10",
"next-i18next": "^13.0.0",
"ldapjs": "^3.0.5",
"mantine-react-table": "^1.3.4",
"next": "13.4.12",
"next-auth": "^4.23.0",
"next-i18next": "^14.0.0",
"nextjs-cors": "^2.2.0",
"nzbget-api": "^0.0.3",
"prismjs": "^1.29.0",
"react": "^18.2.0",
@@ -84,6 +108,9 @@
"react-simple-code-editor": "^0.13.1",
"rss-parser": "^3.12.0",
"sabnzbd-api": "^1.5.0",
"swagger-ui-react": "^5.11.0",
"tldts": "^6.1.18",
"trpc-openapi": "^1.2.0",
"uuid": "^9.0.0",
"xml-js": "^1.6.11",
"xss": "^1.0.14",
@@ -93,19 +120,26 @@
"devDependencies": {
"@next/bundle-analyzer": "^13.0.0",
"@next/eslint-plugin-next": "^13.4.5",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^14.0.0",
"@trivago/prettier-plugin-sort-imports": "^4.2.0",
"@types/adm-zip": "^0.5.5",
"@types/better-sqlite3": "^7.6.5",
"@types/cookies": "^0.7.7",
"@types/dockerode": "^3.3.9",
"@types/node": "18.16.19",
"@types/ldapjs": "^3.0.2",
"@types/node": "^20.6.0",
"@types/prismjs": "^1.26.0",
"@types/react": "^18.2.11",
"@types/swagger-ui-react": "^4.18.3",
"@types/umami": "^0.1.4",
"@types/uuid": "^9.0.0",
"@types/video.js": "^7.3.51",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"@vitest/coverage-c8": "^0.33.0",
"@vitest/ui": "^0.33.0",
"@vitest/coverage-v8": "^0.34.5",
"@vitest/ui": "^0.34.4",
"dotenv-cli": "^7.3.0",
"eslint": "^8.0.1",
"eslint-config-next": "^13.4.5",
"eslint-plugin-promise": "^6.0.0",
@@ -118,9 +152,9 @@
"node-mocks-http": "^1.12.2",
"prettier": "^3.0.0",
"sass": "^1.56.1",
"ts-node": "latest",
"turbo": "latest",
"typescript": "^5.1.0",
"tsx": "4.19.1",
"turbo": "^1.10.12",
"typescript": "5.1.6",
"video.js": "^8.0.3",
"vite-tsconfig-paths": "^4.2.0",
"vitest": "^0.33.0",
@@ -132,25 +166,6 @@
"minimumChangeThreshold": 0,
"showDetails": true
},
"renovate": {
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base"
],
"commitMessagePrefix": "⬆️",
"lockFileMaintenance": {
"automerge": true
},
"minor": {
"automerge": true
},
"patch": {
"automerge": true
},
"pin": {
"automerge": true
}
},
"prettier": {
"printWidth": 100,
"tabWidth": 2,
@@ -172,7 +187,6 @@
"importOrderSortSpecifiers": true
},
"eslintConfig": {
"ignoreDuringBuilds": true,
"extends": [
"next",
"eslint:recommended",
@@ -230,4 +244,4 @@
]
}
}
}
}

Binary file not shown.

BIN
public/imgs/2340450-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 90 90" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path fill="#31BEEC" d="M90 38.197v19.137L48.942 80.999V61.864z"/><path d="M41.086 61.863V81L0 57.333V38.197l18.566 10.687c.02.016.043.03.067.04l22.453 12.94Z" fill="#0095D5"/><path fill="#AEADAE" d="m61.621 45.506-16.607 9.576-16.622-9.576 16.622-9.575z"/><path fill="#0095D5" d="M86.086 31.416 69.464 40.99 48.942 29.15V10z"/><path fill="#31BEEC" d="M41.086 10v19.15l-20.55 11.827-16.621-9.561z"/></g></svg>

After

Width:  |  Height:  |  Size: 484 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><linearGradient id="a" x1="100%" x2="0" y1="0" y2="100%" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff8d30"/><stop offset="1" stop-color="#e32929"/></linearGradient></defs><circle cx="50%" cy="50%" r="50%" fill="url(#a)"/><path fill="#fff" d="M246.6 200.8h18.7v110.6h-18.7zm-182.3 0H83v110.7H64.3zm91.1 123.9h18.7V367h-18.7zm-45.7-47.5h18.7v68.5h-18.7zm91.2 0h18.6v68.4h-18.6zm228.2-76.5h18.7v110.7h-18.7zM338 145.5h18.7v42.3H338zm45.7 21.2h18.7v68.2h-18.7zm-91.5 0h18.7v68.1h-18.7z"/></svg>

After

Width:  |  Height:  |  Size: 577 B

View File

@@ -0,0 +1,35 @@
{
"metaTitle": "创建账号",
"title": "创建账号",
"text": "请在下面定义您的凭据",
"form": {
"fields": {
"username": {
"label": "用户名"
},
"password": {
"label": "密码"
},
"passwordConfirmation": {
"label": "确认密码"
}
},
"buttons": {
"submit": "创建账号"
}
},
"notifications": {
"loading": {
"title": "正在创建账号...",
"text": "请稍等"
},
"success": {
"title": "账号已创建",
"text": "您的账号创建成功"
},
"error": {
"title": "错误",
"text": "出错了,出现以下错误: {{error}}"
}
}
}

View File

@@ -0,0 +1,24 @@
{
"metaTitle": "登录",
"title": "欢迎回来!",
"text": "请确认您的凭证",
"form": {
"fields": {
"username": {
"label": "用户名"
},
"password": {
"label": "密码"
}
},
"buttons": {
"submit": "登录"
},
"afterLoginRedirection": "登录后,您将被重定向到 {{url}}",
"providersEmpty": {
"title": "验证提供程序错误",
"message": "服务提供商未设置,请检查您的日志获取更多信息。"
}
},
"alert": "您的凭据不正确或此账户不存在。请重试。"
}

View File

@@ -0,0 +1,5 @@
{
"header": {
"customize": "自定义面板"
}
}

View File

@@ -0,0 +1,29 @@
{
"metaTitle": "自定义 {{name}} 面板",
"pageTitle": "自定义 {{name}} 面板",
"backToBoard": "返回面板",
"settings": {
"appearance": {
"primaryColor": "主体色",
"secondaryColor": "辅助色"
}
},
"save": {
"button": "保存更改",
"note": "小心,您有未保存的更改!"
},
"notifications": {
"pending": {
"title": "自定义保存中",
"message": "请稍候,我们正在保存您的自定义"
},
"success": {
"title": "已保存自定义",
"message": "您的自定义已成功保存"
},
"error": {
"title": "错误",
"message": "无法保存更改"
}
}
}

View File

@@ -0,0 +1,59 @@
{
"save": "保存",
"apply": "应用",
"insert": "插入",
"about": "关于",
"cancel": "取消",
"close": "关闭",
"back": "返回",
"delete": "删除",
"ok": "确定",
"edit": "编辑",
"next": "下一步",
"previous": "上一步",
"confirm": "确认",
"enabled": "已启用",
"duplicate": "复制",
"disabled": "已禁用",
"enableAll": "全部启用",
"disableAll": "全部禁用",
"setTimer": "设置计时器",
"version": "版本",
"changePosition": "换位",
"remove": "删除",
"removeConfirm": "你确定要删除 {{item}} 吗?",
"createItem": "创建{{item}}",
"sections": {
"settings": "设置",
"dangerZone": "危险"
},
"secrets": {
"apiKey": "API密钥",
"username": "用户名",
"password": "密码"
},
"tip": "提示: ",
"time": {
"seconds": "秒",
"minutes": "分钟",
"hours": "小时"
},
"loading": "正在加载...",
"breakPoints": {
"small": "小",
"medium": "中",
"large": "大"
},
"seeMore": "查看更多...",
"position": {
"left": "左边",
"center": "居中",
"right": "右边"
},
"attributes": {
"width": "宽度",
"height": "高度"
},
"public": "公开",
"restricted": "限制"
}

View File

@@ -0,0 +1,25 @@
{
"modals": {
"blockedPopups": {
"title": "阻止弹出窗口",
"text": "您的浏览器阻止了 Homarr 访问其 API。最常见的原因是广告拦截器或权限被拒绝。Homarr 无法自动请求权限。",
"list": {
"browserPermission": "点击链接旁的图标并检查权限,允许弹出窗口",
"adBlockers": "禁用浏览器中的广告拦截器和安全工具",
"otherBrowser": "尝试使用其它的浏览器"
}
}
},
"actions": {
"category": {
"openAllInNewTab": "在新标签页中打开全部内容"
}
},
"menu": {
"moveUp": "上移",
"moveDown": "下移",
"addCategory": "{{location}}添加分类",
"addAbove": "在上方",
"addBelow": "在下方"
}
}

View File

@@ -0,0 +1,26 @@
{
"modal": {
"title": "添加新磁贴",
"text": "磁贴是 Homarr 的主要组成元素。它们被用来显示你的应用程序和其他信息。您可以根据需要增加任意数量的磁贴。"
},
"widgetDescription": "组件与您的应用交互,为您提供更多的应用程序控制。它们在使用前通常需要额外的配置。",
"goBack": "上一步",
"actionIcon": {
"tooltip": "添加磁贴"
},
"apps": "应用",
"app": {
"defaultName": "您的应用"
},
"widgets": "组件",
"categories": "分类",
"category": {
"newName": "新分类名称",
"defaultName": "新建分类",
"created": {
"title": "分类已创建",
"message": "已创建分类\"{{name}}\""
}
},
"importFromDocker": "从 docker 导入"
}

View File

@@ -0,0 +1,5 @@
{
"title": "拒绝访问",
"text": "您没有足够的权限访问此页面。如果你相信, 这不是有意的, 请联系您的系统管理员。",
"switchAccount": "切换到其他账户"
}

View File

@@ -0,0 +1,5 @@
{
"title": "无法找到页面",
"text": "找不到该页面。该页面的 URL 可能已过期、URL 无效或您现在没有访问该资源所需的权限。",
"button": "返回首页"
}

View File

@@ -0,0 +1,27 @@
{
"search": {
"label": "搜索",
"engines": {
"web": "在网上搜索 {{query}}",
"youtube": "在 YouTube 上搜索 {{query}}",
"torrent": "搜索 {{query}} Torrents",
"movie": "在 {{app}} 上搜索 {{query}}"
}
},
"actions": {
"avatar": {
"switchTheme": "切换主题",
"preferences": "用户选项",
"defaultBoard": "默认面板",
"manage": "管理中心",
"logout": "注销 {{username}}",
"login": "登录"
}
},
"modals": {
"movie": {
"title": "",
"topResults": "最高 {{count}} 结果为 <b>{{search}}</b>。"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"description": "在编辑模式下,您可以调整磁贴和配置应用。在退出编辑模式之前不会保存更改。",
"button": {
"disabled": "进入编辑模式",
"enabled": "退出并保存"
},
"popover": {
"title": "启用 <1>{{size}}</1> 尺寸编辑模式",
"text": "现在您可以调整和配置您的应用了,在退出编辑模式之前<strong>不会保存</strong>更改 。"
},
"unloadEvent": "退出编辑模式以保存更改"
}

View File

@@ -0,0 +1,37 @@
{
"navigation": {
"home": {
"title": "首页"
},
"boards": {
"title": "面板"
},
"users": {
"title": "用户",
"items": {
"manage": "管理",
"invites": "邀请"
}
},
"help": {
"title": "帮助",
"items": {
"documentation": "文档",
"report": "报告问题 / bug",
"discord": "Discord 社区",
"contribute": "贡献"
}
},
"tools": {
"title": "工具",
"items": {
"docker": "Docker",
"api": "API",
"migrate": "迁移到 1.0"
}
},
"about": {
"title": "关于"
}
}
}

View File

@@ -0,0 +1,3 @@
{
"title": "{{position}} 侧边栏"
}

View File

@@ -0,0 +1,30 @@
{
"description": "Homarr是一个 <strong>顺滑</strong> <strong>现代化</strong> 的面板,它能将您所有的应用和服务汇于指尖。有了 Homarr您可以在一个页面中访问和控制一切。Homarr 与您添加的应用无缝交互,为您提供有价值的信息并由您完全控制。安装 Homarr 轻松简单,并且 Homarr 支持多种部署方式。",
"addToDashboard": "添加至面板",
"tip": "Mod 指的是您的修饰键,它是 Ctrl 或 Command/Super/Windows 键",
"key": "快捷键",
"action": "操作",
"keybinds": "热键绑定",
"translators": "翻译者 ({{count}})",
"translatorsDescription": "感谢这些人Homarr 现已支持 {{languages}} 种语言!想要帮助将 Homarr 翻译成您的语言吗?请阅读<a>此处</a>了解如何执行此操作 。",
"contributors": "贡献者 ({{count}})",
"contributorsDescription": "这些人构建了让 homarr 工作的代码!想帮助建造 Homarr 吗?请阅读<a>此处</a>了解如何操作",
"actions": {
"toggleTheme": "切换 白天/夜晚 模式",
"focusSearchBar": "前往搜索栏",
"openDocker": "打开 docker 组件",
"toggleEdit": "切换编辑模式"
},
"metrics": {
"configurationSchemaVersion": "配置模式版本",
"version": "当前版本",
"nodeEnvironment": "节点环境",
"i18n": "I18n 翻译空间已加载",
"locales": "I18n 本地语言已配置",
"experimental_disableEditMode": "<b>实验性</b>: 关闭编辑模式"
},
"version": {
"new": "新: {{newVersion}}",
"dropdown": "版本 {{newVersion}} 可用!当前版本为 {{currentVersion}}"
}
}

View File

@@ -0,0 +1,129 @@
{
"tabs": {
"general": "通用",
"behaviour": "行为",
"network": "网络",
"appearance": "外观",
"integration": "集成"
},
"general": {
"appname": {
"label": "应用名称",
"description": "用于在面板上显示。"
},
"internalAddress": {
"label": "内部地址",
"description": "应用的内部IP地址。",
"troubleshoot": {
"label": "遇到问题了?",
"header": "下面是一些常见的错误和解决方法:",
"lines": {
"nothingAfterPort": "在大多数情况下(不是所有情况),您不应该在端口之后输入任何路径。(即使是 pihole 的 '/admin' 或 plex 的 '/web')",
"protocolCheck": "一定要确保URL前面是http或https并确保你使用的是正确的URL。",
"preferIP": "建议使用要与之通信的机器或容器的直接 Ip 地址。",
"enablePings": "通过开启ping检查IP是否正确。 自定义面板 -> 布局 -> 启用 ping。应用磁贴上会出现一个红色或绿色的小泡泡鼠标悬停在此就会显示相应代码在大多数的情况下绿色泡泡的代码为200。",
"wget": "为了确保homarr可以与其他应用程序通信请使用wget/curl/ping应用程序的IP:port。",
"iframe": "在使用 iframe 时,应始终使用与 Homarr 相同的协议 (http/s)。",
"clearCache": "有些信息是在缓存中注册的因此除非您在Homarr的一般选项中清除缓存否则集成可能无法工作。"
},
"footer": "更多故障排除,请联系我们的{{discord}}。"
}
},
"externalAddress": {
"label": "外部地址",
"description": "点击应用时打开的网址。",
"tooltip": "您可以使用几个变量来创建动态地址:<br><br><b>[homarr_base]</b>: 不包括端口和路径的完整地址。<i>(例如:'https://subdomain.homarr.dev'</i><br><b>[homarr_hostname]</b>: 完整的基本网址,包括当前的子域。<i>(例如:'</i><b>subdomain</b>.homarr<i>.dev'</i><br><b>[homarr_domain]</b>: 域名,已过滤子域。<i>(例如:\"homarr.dev\"</i><br><b>[homarr_protocol]</b>:<i>http/https</i><br><br>这些变量都取决于当前网址。"
}
},
"behaviour": {
"isOpeningNewTab": {
"label": "在新标签页中打开",
"description": "在新标签页中打开应用,而不是当前标签页。"
},
"tooltipDescription": {
"label": "应用描述",
"description": "将鼠标悬停在应用上时,将显示您输入的文本。\n它可以为用户提供更多关于应用的详细信息留空以隐藏。"
},
"customProtocolWarning": "使用非标准协议。这可能需要预先安装应用程序,并可能带来安全风险。确保您的地址安全可靠。"
},
"network": {
"statusChecker": {
"label": "状态检测",
"description": "使用简单的HTTP(S) 请求检查您的应用是否在线。"
},
"statusCodes": {
"label": "HTTP状态码",
"description": "被视为在线的 HTTP 状态码。"
}
},
"appearance": {
"icon": {
"label": "应用图标",
"description": "输入以搜索图标,也可以粘贴自定义图标的网址。",
"autocomplete": {
"title": "未找到结果",
"text": "尝试使用一个更具体的搜索词。如果您找不到您想要的图标,可以在上方粘贴图片的网址,以获得一个自定义图标。"
},
"noItems": {
"title": "正在加载外部图标",
"text": "这可能需要几秒钟"
}
},
"appNameFontSize": {
"label": "应用名称大小",
"description": "设置应用名称在磁贴上显示时的字体大小。"
},
"appNameStatus": {
"label": "应用名称状态",
"description": "如果您想要显示标题,请选择显示的位置。",
"dropdown": {
"normal": "仅在磁贴上显示标题",
"hover": "仅在悬停时显示标题",
"hidden": "完全不显示"
}
},
"positionAppName": {
"label": "应用名称位置",
"description": "应用名称相对于图标的位置。",
"dropdown": {
"top": "上边",
"right": "右边",
"bottom": "下边",
"left": "左边"
}
},
"lineClampAppName": {
"label": "应用名称行数",
"description": "定义标题最多能容纳多少行。设置为 0 表示无限制。"
}
},
"integration": {
"type": {
"label": "集成配置",
"description": "集成配置将用于连接到您的应用。",
"placeholder": "选择一个集成",
"defined": "已定义",
"undefined": "未定义",
"public": "公开",
"private": "私有",
"explanationPrivate": "私有密钥仅会被发送到服务器一次。一旦您的浏览器刷新了页面,它将永远不会再次发送。",
"explanationPublic": "公开的密钥将始终发送给客户端并且可以通过API访问。它不应该包含任何机密值如用户名、密码、令牌、证书等!"
},
"secrets": {
"description": "输入值并点击保存以更新密钥。使用清除按钮以删除密钥。",
"warning": "您的凭据作为集成的访问权限,您应该<strong>永远不</strong>与任何人共享它们。Homarr 团队永远不会索要证书。确保<strong>安全地存储和管理您的秘钥</strong>。",
"clear": "清除密钥",
"save": "保存密钥",
"update": "更新密钥"
}
},
"validation": {
"popover": "您的表单包含无效数据,因此它不能被保存。请解决所有问题,并再次点击此按钮以保存您的更改。",
"name": "名称为必填项",
"noUrl": "地址为必填项",
"invalidUrl": "不是有效的地址",
"noIconUrl": "此字段为必填",
"noExternalUri": "外部地址为必填项",
"invalidExternalUri": "无效的外部地址"
}
}

View File

@@ -0,0 +1,8 @@
{
"xPosition": "X轴位置",
"width": "宽度",
"height": "高度",
"yPosition": "Y轴位置",
"zeroOrHigher": "0 或更高",
"betweenXandY": "在 {{min}} 和 {{max}} 之间"
}

View File

@@ -0,0 +1,57 @@
{
"metaTitle": "面板",
"pageTitle": "面板",
"cards": {
"statistics": {
"apps": "应用",
"widgets": "组件",
"categories": "分类"
},
"buttons": {
"view": "查看面板"
},
"menu": {
"setAsDefault": "设置为默认",
"delete": {
"label": "永久删除",
"disabled": "删除功能被禁用,因为较旧的 Homarr 组件不允许删除默认配置。将来可能会删除。"
},
"duplicate": "复制",
"rename": {
"label": "重命名",
"modal": {
"title": "重命名面板 {{name}}",
"fields": {
"name": {
"label": "新名称",
"placeholder": "新面板名称"
}
}
}
}
},
"badges": {
"fileSystem": "文件系统",
"default": "默认"
}
},
"buttons": {
"create": "创建新面板"
},
"modals": {
"delete": {
"title": "删除面板",
"text": "你确定要删除这个面板吗? 此操作无法撤消,您的数据将永久丢失。"
},
"create": {
"title": "创建面板",
"text": "面板创建成功后,不能修改名称。",
"form": {
"name": {
"label": "名称"
},
"submit": "创建"
}
}
}
}

View File

@@ -0,0 +1,23 @@
{
"metaTitle": "管理中心",
"hero": {
"title": "欢迎回来,{{username}}",
"fallbackUsername": "匿名",
"subtitle": "欢迎来到您的应用程序中心。组织、优化和征服!"
},
"quickActions": {
"title": "快捷操作",
"boards": {
"title": "您的面板",
"subtitle": "创建和管理您的面板"
},
"inviteUsers": {
"title": "邀请新用户",
"subtitle": "创建并发送注册邀请"
},
"manageUsers": {
"title": "管理用户",
"subtitle": "删除和管理您的用户"
}
}
}

View File

@@ -0,0 +1,33 @@
{
"metaTitle": "迁移到 1.0",
"pageTitle": "迁移面板、组件和用户",
"description": "将您的面板和用户导出到 ZIP 压缩包,以便在 1.0.0 版本之后将其迁移到 Homarr",
"securityNote": {
"title": "安全说明",
"text": "导出用户和组件时,它还会打开一个带有加密密钥的窗口。此密钥是将数据导入 Homarr 所必需的。请妥善保管,不要与任何人分享。"
},
"form": {
"label": "选择要导出的所有内容",
"option": {
"boards": {
"label": "导出面板"
},
"integrations": {
"label": "导出组件",
"description": "这将包括用于组件的加密凭据。仅在导出面板时可用"
},
"users": {
"label": "导出用户",
"description": "这只会导出凭据用户,密码 hash 和 salt 已加密"
}
}
},
"action": {
"export": "导出数据"
},
"modal": {
"title": "加密密钥",
"description": "您的数据已导出。请妥善保管此密钥,不要与任何人共享。您需要此密钥才能将数据导入 Homarr。",
"copyDismiss": "复制并关闭"
}
}

View File

@@ -0,0 +1,44 @@
{
"metaTitle": "用户",
"pageTitle": "管理用户",
"buttons": {
"create": "创建"
},
"filter": {
"roles": {
"all": "全部",
"normal": "普通",
"admin": "管理员",
"owner": "所有者"
}
},
"table": {
"header": {
"user": "用户",
"email": "邮箱"
}
},
"tooltips": {
"deleteUser": "删除用户",
"demoteAdmin": "撤销管理员",
"promoteToAdmin": "提升为管理员"
},
"modals": {
"delete": {
"title": "删除用户 {{name}}",
"text": "您确定要删除用户 {{name}} 吗?这将删除与该账户相关的数据,但不会删除该用户创建的任何仪表盘。"
},
"change-role": {
"promote": {
"title": "将用户 {{name}} 提升为管理员",
"text": "您确定要将用户{{name}} 提升为管理员吗? 这将允许用户访问Homarr实例上的所有资源。"
},
"demote": {
"title": "将用户 {{name}} 降级为用户",
"text": "您确定要将用户{{name}} 降级为用户吗? 这将删除用户对Homarr实例上所有资源的访问权限。"
},
"confirm": "确认"
}
},
"searchDoesntMatch": "您的搜索与任何条目都不匹配。请调整您的过滤器。"
}

View File

@@ -0,0 +1,52 @@
{
"metaTitle": "创建用户",
"steps": {
"account": {
"title": "第一步",
"text": "创建账号",
"username": {
"label": "用户名"
},
"email": {
"label": "邮箱"
}
},
"security": {
"title": "第二步",
"text": "密码",
"password": {
"label": "密码"
}
},
"finish": {
"title": "确认",
"text": "保存到数据库",
"card": {
"title": "检查您的输入",
"text": "将数据提交到数据库后,用户就可以登录了。您确定要将该用户存储在数据库中并激活登录吗?"
},
"table": {
"header": {
"property": "属性",
"value": "参数值",
"username": "用户名",
"email": "邮箱",
"password": "密码"
},
"notSet": "未设置",
"valid": "有效"
},
"failed": "用户创建失败: {{error}}"
},
"completed": {
"alert": {
"title": "用户已创建",
"text": "用户已在数据库中创建。他现在可以登录了。"
}
}
},
"buttons": {
"generateRandomPassword": "随机生成",
"createAnother": "创建另一个"
}
}

View File

@@ -0,0 +1,55 @@
{
"metaTitle": "用户 {{username}}",
"back": "返回用户管理",
"sections": {
"general": {
"title": "通用",
"inputs": {
"username": {
"label": "用户名"
},
"eMail": {
"label": "邮箱"
}
}
},
"security": {
"title": "安全",
"inputs": {
"password": {
"label": "新密码"
},
"terminateExistingSessions": {
"label": "终止现有会话",
"description": "强制用户在其设备上重新登录"
},
"confirm": {
"label": "确认",
"description": "密码将被更新。该操作不可撤销。"
}
}
},
"roles": {
"title": "角色",
"currentRole": "当前角色: ",
"badges": {
"owner": "所有者",
"admin": "管理员",
"normal": "普通"
}
},
"deletion": {
"title": "删除账号",
"inputs": {
"confirmUsername": {
"label": "确认用户名",
"description": "输入用户名以确认删除"
},
"confirm": {
"label": "永久删除",
"description": "我知道此操作是永久性的,所有帐户数据都将丢失。"
}
}
}
}
}

View File

@@ -0,0 +1,48 @@
{
"metaTitle": "用户邀请",
"pageTitle": "管理用户邀请",
"description": "使用邀请功能,可以邀请用户访问 Homarr 实例。邀请只在一定的时间范围内有效并且只能使用一次。过期时间必须在创建后5分钟到12个月之间。",
"button": {
"createInvite": "创建邀请",
"deleteInvite": "删除邀请"
},
"table": {
"header": {
"id": "ID",
"creator": "创建者",
"expires": "有效期",
"action": "操作"
},
"data": {
"expiresAt": "过期 {{at}}",
"expiresIn": "{{in}}"
}
},
"modals": {
"create": {
"title": "创建邀请",
"description": "过期后,邀请会失效,被邀请的收件人将无法创建账号。",
"form": {
"expires": "过期时间",
"submit": "创建"
}
},
"copy": {
"title": "复制邀请信息",
"description": "您的邀请已生成。在此模式关闭后,<b>您将无法再复制此链接</b>。如果你不想再邀请这个人,你可以随时删除这个邀请。",
"invitationLink": "邀请链接",
"details": {
"id": "ID",
"token": "Token"
},
"button": {
"close": "复制并关闭"
}
},
"delete": {
"title": "删除邀请",
"description": "你确定要删除这个邀请吗? 使用此链接的用户将不能再使用该链接创建账号。"
}
},
"noInvites": "还没有邀请。"
}

View File

@@ -0,0 +1,43 @@
{
"descriptor": {
"name": "书签",
"description": "显示字符或链接的静态列表",
"settings": {
"title": "书签设置",
"name": {
"label": "组件标题",
"info": "留空以隐藏标题。"
},
"items": {
"label": "项目"
},
"layout": {
"label": "显示布局",
"data": {
"autoGrid": "自动网格",
"horizontal": "横向",
"vertical": "垂直"
}
}
}
},
"card": {
"noneFound": {
"title": "书签列表为空",
"text": "在编辑模式下为该列表添加新项目"
}
},
"item": {
"validation": {
"length": "长度必须在 {{shortest}} 和 {{longest}} 之间",
"invalidLink": "无效链接",
"errorMsg": "由于存在验证错误,未保存。请调整您的输入"
},
"name": "名称",
"url": "网址",
"newTab": "在新标签页中打开",
"hideHostname": "隐藏域名",
"hideIcon": "隐藏图标",
"delete": "删除"
}
}

View File

@@ -0,0 +1,33 @@
{
"descriptor": {
"name": "日历",
"description": "在日历中显示来自支持集成中的即将发布的版本。",
"settings": {
"title": "日历组件设置",
"radarrReleaseType": {
"label": "Radarr发布类型",
"data": {
"inCinemas": "影院放映",
"physicalRelease": "实体",
"digitalRelease": "数字"
}
},
"hideWeekDays": {
"label": "隐藏星期"
},
"showUnmonitored": {
"label": "显示未监视项目"
},
"fontSize": {
"label": "字体大小",
"data": {
"xs": "超小号",
"sm": "小号",
"md": "中号",
"lg": "大号",
"xl": "超大号"
}
}
}
}
}

View File

@@ -0,0 +1,6 @@
{
"buttons": {
"play": "开始",
"request": "请求"
}
}

View File

@@ -0,0 +1,10 @@
{
"settings": {
"label": "设置"
},
"errors": {
"unmappedOptions": {
"text": ""
}
}
}

View File

@@ -0,0 +1,118 @@
{
"descriptor": {
"name": "Dash.",
"description": "在 Homarr 中显示一个外部 Dash. 的图表。",
"settings": {
"title": "Dash. 组件设置",
"dashName": {
"label": "Dash. 名称"
},
"url": {
"label": "Dash. 网址"
},
"usePercentages": {
"label": "显示百分比"
},
"columns": {
"label": "显示的列"
},
"graphHeight": {
"label": "图表高度"
},
"graphsOrder": {
"label": "图表(顺序)",
"storage": {
"label": "存储",
"enabled": {
"label": "在组件中显示"
},
"span": {
"label": "列宽度"
},
"compactView": {
"label": "显示为文本(紧凑型)"
},
"multiView": {
"label": "显示为多驱动视图"
}
},
"network": {
"label": "网络",
"enabled": {
"label": "在组件中显示"
},
"span": {
"label": "列宽度"
},
"compactView": {
"label": "显示为文本(紧凑型)"
}
},
"cpu": {
"label": "CPU",
"enabled": {
"label": "在组件中显示"
},
"span": {
"label": "列宽度"
},
"multiView": {
"label": "显示为多核心视图"
}
},
"ram": {
"label": "内存",
"enabled": {
"label": "在组件中显示"
},
"span": {
"label": "列宽度"
}
},
"gpu": {
"label": "GPU",
"enabled": {
"label": "在组件中显示"
},
"span": {
"label": "列宽度"
}
}
}
}
},
"card": {
"title": "Dash.",
"errors": {
"noService": "未找到 Dash. 服务。请在集成中将其添加到您的 Homarr 面板或在模块选项中设置 Dash. 网址",
"noInformation": "无法从 Dash. 获取信息。- 你运行的是最新版本吗?",
"protocolDowngrade": {
"title": "检测到协议降级",
"text": "与 Dash. 实例的连接使用的是HTTP。这是一个安全风险因为HTTP是未加密的攻击者可能会滥用此连接。确保 Dash. 使用的是HTTPS或者将Homarr降级为HTTP(不推荐)。"
}
},
"graphs": {
"storage": {
"title": "存储",
"label": "存储:"
},
"network": {
"title": "网络",
"label": "网络:",
"metrics": {
"download": "下载",
"upload": "上传"
}
},
"cpu": {
"title": "CPU"
},
"ram": {
"title": "内存"
},
"gpu": {
"title": "GPU"
}
}
}
}

View File

@@ -0,0 +1,34 @@
{
"descriptor": {
"name": "日期和时间",
"description": "显示当前的日期和时间。",
"settings": {
"title": "日期和时间组件设置",
"timezone": {
"label": "时区",
"info": "选择您所在时区的名称,在此找到您所在的时区: "
},
"customTitle": {
"label": "城市名称或自定义标题"
},
"display24HourFormat": {
"label": "全时显示24 小时)"
},
"dateFormat": {
"label": "日期格式",
"data": {
"hide": "隐藏日期"
}
},
"titleState": {
"label": "时钟标题",
"info": "自定义标题和时区代码可以显示在 widget 上。<br/>您还可以单独显示城市、不显示、<br/>,甚至在同时选择了城市和时区但未提供标题时单独显示时区。",
"data": {
"both": "标题和时区",
"city": "仅标题",
"none": "不显示"
}
}
}
}
}

View File

@@ -0,0 +1,35 @@
{
"descriptor": {
"name": "下载速度",
"description": "显示集成中支持的下载和上传速度。"
},
"card": {
"table": {
"header": {
"name": "名称",
"size": "大小",
"download": "下载",
"upload": "上传",
"estimatedTimeOfArrival": "剩余时间",
"progress": "进度"
},
"body": {
"nothingFound": "没有找到种子"
}
},
"lineChart": {
"title": "当前下载速度",
"download": "下载:{{download}}",
"upload": "上传: {{upload}}",
"timeSpan": "{{seconds}} 秒前",
"totalDownload": "下载: {{download}}/秒",
"totalUpload": "上传: {{upload}}/秒"
},
"errors": {
"noDownloadClients": {
"title": "没有找到支持的下载客户端!",
"text": "添加下载服务以查看您当前的下载情况"
}
}
}
}

View File

@@ -0,0 +1,25 @@
{
"descriptor": {
"name": "DNS漏洞控制",
"description": "从您的面板控制 PiHole 或 AdGuard",
"settings": {
"title": "DNS 漏洞控制设置",
"showToggleAllButtons": {
"label": "显示 \"启用/禁用全部 \"按钮"
}
},
"errors": {
"general": {
"title": "无法找到 DNS 漏洞",
"text": "到DNS漏洞的连接有问题。请验证您的配置/集成设置。"
}
}
},
"durationModal": {
"title": "设置禁用时长",
"hours": "时",
"minutes": "分",
"unlimited": "留空表示无限制",
"set": "设置"
}
}

View File

@@ -0,0 +1,28 @@
{
"descriptor": {
"name": "DNS漏洞统计",
"description": "显示来自 PiHole 或 AdGuard 的重要数据",
"settings": {
"title": "DNS漏洞统计设置",
"usePiHoleColors": {
"label": "使用 PiHole 的颜色"
},
"layout": {
"label": "显示布局",
"data": {
"grid": "2 x 2",
"row": "横向",
"column": "垂直"
}
}
}
},
"card": {
"metrics": {
"domainsOnAdlist": "广告列表中的域名",
"queriesToday": "今日查询",
"queriesBlockedTodayPercentage": "今日屏蔽",
"queriesBlockedToday": "今日屏蔽"
}
}
}

View File

@@ -0,0 +1,83 @@
{
"descriptor": {
"name": "Docker",
"description": "允许您轻松查看和管理所有的Docker容器。"
},
"search": {
"placeholder": "按容器或镜像名称搜索"
},
"table": {
"header": {
"name": "名称",
"image": "镜像",
"ports": "端口",
"state": "状态"
},
"body": {
"portCollapse": "{{ports}} 更多"
},
"states": {
"running": "运行中",
"created": "已创建",
"stopped": "已停止",
"unknown": "未知"
}
},
"actionBar": {
"addService": {
"title": "添加应用",
"message": "添加应用到 Homarr"
},
"restart": {
"title": "重启"
},
"stop": {
"title": "停止"
},
"start": {
"title": "开始"
},
"refreshData": {
"title": "刷新"
},
"remove": {
"title": "删除"
},
"addToHomarr": {
"title": "添加到 Homarr"
}
},
"actions": {
"start": {
"start": "正在启动...",
"end": "已启动"
},
"stop": {
"start": "正在停止",
"end": "已停止"
},
"restart": {
"start": "正在重启",
"end": "已重启"
},
"remove": {
"start": "删除中",
"end": "已删除"
}
},
"errors": {
"integrationFailed": {
"title": "Docker 集成失败",
"message": "你是不是忘了挂载docker socket"
},
"unknownError": {
"title": "出现了一个错误"
},
"oneServiceAtATime": {
"title": "请每次只添加一个应用程序或服务!"
}
},
"actionIcon": {
"tooltip": "Docker"
}
}

View File

@@ -0,0 +1,141 @@
{
"descriptor": {
"name": "系统健康监测",
"description": "显示系统运行状况和状态的信息。",
"settings": {
"title": "系统健康监测设置",
"fahrenheit": {
"label": "CPU 温度(华氏度)"
},
"cpu": {
"label": "显示CPU信息",
"load": "平均负载",
"minute": "{{minute}} 分钟",
"minutes": "{{minutes}} 分钟"
},
"memory": {
"label": "显示内存信息"
},
"fileSystem": {
"label": "显示文件系统信息"
},
"node": {
"label": "按节点名称过滤",
"info": "输入您的 Proxmox 节点名称以仅显示该节点的指标。默认情况下,显示整个集群。"
},
"defaultViewState": {
"label": "默认打开的部分",
"data": {
"none": "不显示",
"node": "节点",
"vm": "虚拟机",
"lxc": "LXCs",
"storage": "存储"
}
},
"defaultTabState": {
"label": "默认打开选项卡",
"info": "默认打开选项卡。仅当多个集成可用时才使用。",
"data": {
"system": "系统",
"cluster": "集群"
}
},
"summary": {
"label": "显示摘要部分"
},
"showNode": {
"label": "显示节点部分"
},
"showVM": {
"label": "显示虚拟机部分"
},
"showLXCs": {
"label": "显示 LXC 部分"
},
"showStorage": {
"label": "显示存储部分"
},
"sectionIndicatorColor": {
"label": "要求部分状态指示器为“OK”",
"info": "全部 \"要求所有项目都在线,指标才会变为绿色。任意 \"要求至少有一个项目在线。",
"data": {
"any": "任意活动",
"all": "全部活动"
}
},
"ignoreCert": {
"label": "忽略证书错误",
"info": "如果启用,小工具在访问 Proxmox API 时将忽略证书错误。这在通过 HTTPS 访问 Proxmox 时很有帮助。"
}
}
},
"cpu": {
"label": "CPU",
"load": "平均负载",
"minute": "{{minute}} 分钟"
},
"memory": {
"label": "内存",
"totalMem": "内存总量: {{total}}GB",
"available": "可用: {{available}}GB - {{percentage}}%"
},
"fileSystem": {
"label": "文件系统",
"available": "可用: {{available}} - {{percentage}}%"
},
"info": {
"uptime": "运行时间",
"uptimeFormat": "{{days}} 天, {{hours}} 小时, {{minutes}} 分钟",
"updates": "可用更新",
"reboot": "重启"
},
"errors": {
"general": {
"title": "无法找到您的系统。",
"text": "连接到您的系统时出现问题。请验证您的配置/集成。"
}
},
"headings": {
"system": "系统",
"cluster": "集群"
},
"cluster": {
"summary": {
"cpu": "CPU",
"ram": "内存"
},
"accordion": {
"title": {
"nodes": "节点",
"vms": "虚拟机",
"lxcs": "LXCs",
"storage": "存储"
}
},
"table": {
"header": {
"name": "名称",
"cpu": "CPU",
"ram": "内存",
"node": "节点"
}
},
"popover": {
"node": "节点",
"vmid": "VMID",
"details": "详情",
"cores": "核心 - {{maxCpu}}",
"memSize": "内存 - {{maxMem}}",
"memRatio": "内存 - {{usedMem}} / {{maxMem}}",
"diskSize": "磁盘 - {{maxDisk}}",
"diskRatio": "磁盘 - {{usedDisk}} / {{maxDisk}}",
"uptime": "运行时间 - {{uptime}}",
"plugin": "插件",
"ha": "状态 - {{haState}}",
"sharedStorage": "共享存储",
"localStorage": "本地存储",
"na": "不可用"
}
}
}

View File

@@ -0,0 +1,45 @@
{
"descriptor": {
"name": "iFrame",
"description": "嵌入互联网上的任何内容。某些网站可能限制访问。",
"settings": {
"title": "iFrame设置",
"embedUrl": {
"label": "嵌入地址"
},
"allowFullScreen": {
"label": "允许全屏"
},
"allowTransparency": {
"label": "允许透明"
},
"allowScrolling": {
"label": "允许滚动"
},
"allowPayment": {
"label": "允许支付"
},
"allowAutoPlay": {
"label": "允许自动播放"
},
"allowMicrophone": {
"label": "允许麦克风"
},
"allowCamera": {
"label": "允许摄像头"
},
"allowGeolocation": {
"label": "允许地理位置"
}
}
},
"card": {
"errors": {
"noUrl": {
"title": "无效链接",
"text": "确保您在组件配置中输入了一个有效的地址"
},
"browserSupport": "您的浏览器不支持 iframe。请更新您的浏览器。"
}
}
}

View File

@@ -0,0 +1,22 @@
{
"descriptor": {
"name": "索引器管理状态",
"description": "有关索引器的状态",
"settings": {
"title": "索引器管理状态",
"openIndexerSiteInNewTab": {
"label": "在新选项卡中打开索引器站点"
}
}
},
"indexersStatus": {
"title": "索引器管理",
"testAllButton": "测试全部"
},
"errors": {
"general": {
"title": "无法找到索引管理器",
"text": "连接索引管理器时出现问题。请验证您的配置/集成。"
}
}
}

View File

@@ -0,0 +1,35 @@
{
"descriptor": {
"name": "媒体请求",
"description": "查看 Overr 或 Jellyseerr 实例中的所有媒体请求列表",
"settings": {
"title": "媒体请求列表",
"replaceLinksWithExternalHost": {
"label": "使用外部地址替换链接"
},
"openInNewTab": {
"label": "在新标签页中打开链接"
}
}
},
"noRequests": "未找到请求。请确保您已正确配置您的应用。",
"state": {
"approved": "已批准",
"pendingApproval": "待批准",
"declined": "已拒绝",
"available": "可用",
"partial": "部分"
},
"tooltips": {
"approve": "批准请求",
"decline": "拒绝请求",
"approving": "正在批准请求..."
},
"mutation": {
"approving": "正在批准",
"declining": "拒绝中",
"request": "请求...",
"approved": "请求被批准!",
"declined": "请求被拒绝!"
}
}

View File

@@ -0,0 +1,27 @@
{
"descriptor": {
"name": "媒体请求状态",
"description": "您的媒体请求统计",
"settings": {
"title": "媒体请求状态",
"replaceLinksWithExternalHost": {
"label": "使用外部地址替换链接"
},
"openInNewTab": {
"label": "在新标签页中打开链接"
}
}
},
"mediaStats": {
"title": "媒体统计",
"pending": "等待批准",
"tvRequests": "电视请求",
"movieRequests": "电影请求",
"approved": "已经批准",
"totalRequests": "请求总计"
},
"userStats": {
"title": "用户排行",
"requests": "请求: {{number}}"
}
}

View File

@@ -0,0 +1,25 @@
{
"descriptor": {
"name": "媒体服务",
"description": "与您的 Jellyfin 或 Plex 媒体服务交互",
"settings": {
"title": "媒体服务组件设置"
}
},
"loading": "正在载入流",
"card": {
"table": {
"header": {
"session": "会话",
"user": "用户",
"currentlyPlaying": "正在播放"
}
},
"errors": {
"general": {
"title": "无法加载内容",
"text": "无法从服务器检索信息。请检查日志获取更多详细信息"
}
}
}
}

View File

@@ -0,0 +1,96 @@
{
"descriptor": {
"name": "媒体转码",
"description": "显示有关媒体转码的信息",
"settings": {
"title": "媒体转码设置",
"appId": {
"label": "选择一个应用"
},
"defaultView": {
"label": "默认视图",
"data": {
"workers": "工作种",
"queue": "队列",
"statistics": "统计"
}
},
"showHealthCheck": {
"label": "显示健康检查指示器"
},
"showHealthChecksInQueue": {
"label": "在队列中显示健康检查"
},
"queuePageSize": {
"label": "队列:每页项目数"
},
"showAppIcon": {
"label": "在右下角显示应用程序图标"
}
}
},
"noAppSelected": "请在小组件设置中选择一个应用程序",
"views": {
"workers": {
"table": {
"header": {
"name": "文件",
"eta": "剩余时间",
"progress": "进度"
},
"empty": "空",
"tooltip": {
"transcode": "转码",
"healthCheck": "健康检查"
}
}
},
"queue": {
"table": {
"header": {
"name": "文件",
"size": "大小"
},
"footer": {
"currentIndex": "{{start}}-{{end}} 共 {{total}}"
},
"empty": "空",
"tooltip": {
"transcode": "转码",
"healthCheck": "健康检查"
}
}
},
"statistics": {
"empty": "空",
"box": {
"transcodes": "转码: {{value}}",
"healthChecks": "健康检查: {{value}}",
"files": "文件: {{value}}",
"spaceSaved": "已保存: {{value}}"
},
"pies": {
"transcodes": "转码",
"healthChecks": "健康检查",
"videoCodecs": "编码",
"videoContainers": "容器",
"videoResolutions": "分辨率"
}
}
},
"error": {
"title": "错误",
"message": "从 Tdarr 获取数据时发生错误。"
},
"tabs": {
"workers": "工作种",
"queue": "队列",
"statistics": "统计"
},
"healthCheckStatus": {
"title": "健康检查",
"queued": "排队中",
"healthy": "健康",
"unhealthy": "不良"
}
}

View File

@@ -0,0 +1,59 @@
{
"descriptor": {
"name": "笔记本",
"description": "一个基于 Markdown 的交互式组件,供您写下笔记!",
"settings": {
"title": "笔记本组件设置",
"showToolbar": {
"label": "显示帮助您写下 Markdown 的工具栏"
},
"allowReadOnlyCheck": {
"label": "允许在只读模式中检查"
},
"content": {
"label": "笔记本的内容"
}
}
},
"card": {
"controls": {
"bold": "粗体",
"italic": "斜体",
"strikethrough": "删除线",
"underline": "下划线",
"colorText": "文字颜色",
"colorHighlight": "彩色高亮文本",
"code": "代码",
"clear": "清除格式",
"heading": "标题 {{level}}",
"align": "对齐文本: {{position}}",
"blockquote": "引用",
"horizontalLine": "横线",
"bulletList": "符号列表",
"orderedList": "顺序列表",
"checkList": "检查列表",
"increaseIndent": "增加缩进",
"decreaseIndent": "减小缩进",
"link": "链接",
"unlink": "删除链接",
"image": "嵌入图片",
"addTable": "添加表格",
"deleteTable": "删除表格",
"colorCell": "单元格颜色",
"mergeCell": "切换单元格合并",
"addColumnLeft": "在前面添加列",
"addColumnRight": "在后面添加列",
"deleteColumn": "删除整列",
"addRowTop": "在前面添加行",
"addRowBelow": "在后面添加行",
"deleteRow": "删除整行"
},
"modals": {
"clearColor": "清除颜色",
"source": "来源",
"widthPlaceholder": "百分比或像素值",
"columns": "列数",
"rows": "行数"
}
}
}

View File

@@ -0,0 +1,30 @@
{
"descriptor": {
"name": "Overseerr",
"description": "允许您从Overseerr 或 Jellyseerr 搜索和添加媒体。"
},
"popup": {
"item": {
"buttons": {
"askFor": "请求 {{title}}",
"cancel": "取消",
"request": "请求"
},
"alerts": {
"automaticApproval": {
"title": "使用 API key",
"text": "此请求将被自动批准"
}
}
},
"seasonSelector": {
"caption": "勾选您想要下载的季",
"table": {
"header": {
"season": "季",
"numberOfEpisodes": "集数"
}
}
}
}
}

View File

@@ -0,0 +1,11 @@
{
"descriptor": {
"name": "Ping",
"description": "根据设定的URL的HTTP响应代码显示一个状态指示器。"
},
"states": {
"online": "在线 {{response}}",
"offline": "离线 {{response}}",
"loading": "正在加载..."
}
}

View File

@@ -0,0 +1,40 @@
{
"descriptor": {
"name": "RSS 组件",
"description": "RSS 组件允许您在面板上显示 RSS 源。",
"settings": {
"title": "RSS 组件设置",
"rssFeedUrl": {
"label": "RSS 订阅地址",
"description": "您想要显示的 RSS 订阅的地址。"
},
"refreshInterval": {
"label": "刷新间隔(分钟)"
},
"dangerousAllowSanitizedItemContent": {
"label": "允许 HTML 格式化(危险)",
"info": "允许从外部进行HTML格式化可能是危险的。<br/>请确保订阅来自信任的来源。"
},
"textLinesClamp": {
"label": "文字线条"
},
"sortByPublishDateAscending": {
"label": "按发布日期排序(升序)"
},
"sortPostsWithoutPublishDateToTheTop": {
"label": "将没有发布日期的文章置顶"
},
"maximumAmountOfPosts": {
"label": "最大文章数量"
}
},
"card": {
"errors": {
"general": {
"title": "无法获取 RSS 订阅",
"text": "在获取 RSS 订阅时出现了问题。确保使用有效的 URL 正确配置了 RSS 订阅。URL 应与官方规范匹配。更新 RSS 订阅后,您可能需要刷新面板。"
}
}
}
}
}

View File

@@ -0,0 +1,30 @@
{
"descriptor": {
"name": "搜索栏",
"description": "一个搜索栏允许你搜索你的自定义搜索引擎、YouTube和支持的集成。"
},
"input": {
"placeholder": "在网上搜索..."
},
"switched-to": "切换到",
"searchEngines": {
"search": {
"name": "网页",
"description": "搜索..."
},
"youtube": {
"name": "Youtube",
"description": "在 Youtube 上搜索"
},
"torrents": {
"name": "Torrents",
"description": "搜索 Torrents"
},
"overseerr": {
"name": "Overseerr",
"description": "在 Overseer 上搜索电影和电视剧。"
}
},
"tip": "您可以使用以下快捷键选择搜索栏 ",
"switchedSearchEngine": "改用 {{searchEngine}} 进行搜索"
}

View File

@@ -0,0 +1,34 @@
{
"entityNotFound": "未找到实体",
"descriptor": {
"name": "家庭助理实体",
"description": "家庭助理中实体的当前状态",
"settings": {
"title": "实体状态",
"entityId": {
"label": "实体 ID",
"info": "家庭助理中的唯一实体 ID。通过单击实体 > 单击齿轮图标 > 单击“实体 ID”处的复制按钮进行复制。某些自定义实体可能不受支持。"
},
"appendUnit": {
"label": "附加测量单位",
"info": "将测量单位属性附加到实体状态。"
},
"automationId": {
"label": "可选自动化 ID",
"info": "您唯一的自动化 ID。总是以 automation.XXXXX 开头。如果未设置,小部件将不可点击,只能显示状态。点击后,实体状态将被刷新。"
},
"displayName": {
"label": "显示名称"
},
"displayFriendlyName": {
"label": "显示友好名称",
"info": "显示来自家庭助理的友好名称,而不是显示名称."
},
"genericToggle": {
"label": "实体切换",
"info": "单击时对实体执行通用的家庭助理切换操作。"
}
}
}
}

View File

@@ -0,0 +1,16 @@
{
"descriptor": {
"name": "家庭助理自动化",
"description": "执行自动化",
"settings": {
"title": "执行自动化",
"automationId": {
"label": "自动化 ID",
"info": "您唯一的自动化 ID。总是以 automation.XXXXX 开头。"
},
"displayName": {
"label": "显示名称"
}
}
}
}

View File

@@ -0,0 +1,118 @@
{
"descriptor": {
"name": "Torrent",
"description": "显示支持的 Torrent 客户端的 Torrent 列表。",
"settings": {
"title": "Torrent 组件设置",
"refreshInterval": {
"label": "刷新间隔(秒)"
},
"displayCompletedTorrents": {
"label": "显示已完成的种子"
},
"displayActiveTorrents": {
"label": "显示正活跃的种子"
},
"speedLimitOfActiveTorrents": {
"label": "将torrent视为活动的上传速度(kB/s)"
},
"displayStaleTorrents": {
"label": "显示已过期的种子"
},
"labelFilterIsWhitelist": {
"label": "标签列表是白名单 (而不是黑名单)"
},
"labelFilter": {
"label": "标签列表",
"description": "当选中 “白名单” 时,这将成为白名单。如果不选中,则是黑名单。为空时不会做任何事情。"
},
"displayRatioWithFilter": {
"label": "显示过滤后的 torrents 列表比例",
"info": "如果禁用,则只显示全局比率。如果设置为 \"禁用\",全局比率仍将使用标签。"
},
"columnOrdering": {
"label": "启用重新排序列"
},
"rowSorting": {
"label": "启用行排序"
},
"columns": {
"label": "选择要显示的列",
"data": {
"date": "日期已添加",
"down": "下载",
"up": "上传",
"eta": "剩余时间",
"progress": "进度"
}
},
"nameColumnSize": {
"label": "更改名称列大小"
}
}
},
"card": {
"footer": {
"error": "错误",
"lastUpdated": "最后更新于 {{time}} 前",
"ratioGlobal": "全局比率",
"ratioWithFilter": "含过滤后的比率"
},
"table": {
"header": {
"isCompleted": "正在下载",
"name": "名称",
"dateAdded": "已添加到",
"size": "大小",
"download": "下载",
"upload": "上传",
"estimatedTimeOfArrival": "剩余时间",
"progress": "进度",
"totalUploaded": "上传总量",
"totalDownloaded": "下载总量",
"ratio": "分享率",
"seeds": "种子数(已连接)",
"peers": "用户数(已连接)",
"label": "标签",
"state": "状态",
"stateMessage": "状态信息"
},
"item": {
"text": "由 {{appName}}, {{ratio}} 管理的比率"
},
"body": {
"nothingFound": "没有找到种子",
"filterHidingItems": "您的过滤器隐藏了 {{count}} 条记录"
}
},
"lineChart": {
"title": "当前下载速度",
"download": "下载:{{download}}",
"upload": "上传: {{upload}}",
"timeSpan": "{{seconds}} 秒前",
"totalDownload": "下载: {{download}}/秒",
"totalUpload": "上传: {{upload}}/秒"
},
"errors": {
"noDownloadClients": {
"title": "没有找到支持的Torrent客户端!",
"text": "添加一个支持的 Torrent 客户端来查看您当前的下载情况"
},
"generic": {
"title": "发生了一个意外的错误",
"text": "无法与您的 Torrent 客户端通信。请检查您的配置"
}
},
"popover": {
"introductionPrefix": "管理方:",
"metrics": {
"queuePosition": "队列位置 - {{position}}",
"progress": "进度 - {{progress}}%",
"totalSelectedSize": "共计 - {{totalSize}}",
"state": "状态 - {{state}}",
"ratio": "比率 -",
"completed": "已完成"
}
}
}
}

View File

@@ -0,0 +1,49 @@
{
"descriptor": {
"name": "Usenet",
"description": "允许您查看和管理您的 Usenet 实例。"
},
"card": {
"errors": {
"noDownloadClients": {
"title": "没有找到支持的下载客户端!",
"text": "添加支持的 Usenet 下载客户端来查看当前下载情况"
}
}
},
"tabs": {
"queue": "队列",
"history": "历史"
},
"info": {
"sizeLeft": "左侧大小",
"paused": "已暂停"
},
"queue": {
"header": {
"name": "名称",
"size": "大小",
"eta": "剩余时间",
"progress": "进度"
},
"empty": "空",
"error": {
"title": "错误",
"message": "出错了"
},
"paused": "已暂停"
},
"history": {
"header": {
"name": "名称",
"size": "大小",
"duration": "持续时间"
},
"empty": "空",
"error": {
"title": "错误",
"message": "加载历史记录时出错"
},
"paused": "已暂停"
}
}

View File

@@ -0,0 +1,24 @@
{
"descriptor": {
"name": "视频流",
"description": "嵌入来自相机或网站的视频流或视频",
"settings": {
"title": "视频流组件设置",
"FeedUrl": {
"label": "订阅网址"
},
"autoPlay": {
"label": "自动播放"
},
"muted": {
"label": "静音"
},
"controls": {
"label": "视频播放控件"
}
}
},
"errors": {
"invalidStream": "无效数据流"
}
}

View File

@@ -0,0 +1,43 @@
{
"descriptor": {
"name": "天气",
"description": "显示指定位置的当前天气信息。",
"settings": {
"title": "天气组件设置",
"displayInFahrenheit": {
"label": "显示为华氏度"
},
"displayCityName": {
"label": "显示城市名称"
},
"displayWeekly": {
"label": "显示每周预测"
},
"forecastDays": {
"label": "显示天数"
},
"location": {
"label": "天气位置"
}
}
},
"card": {
"weatherDescriptions": {
"clear": "晴朗",
"mainlyClear": "晴朗为主",
"fog": "雾",
"drizzle": "细雨",
"freezingDrizzle": "冻毛毛雨",
"rain": "雨",
"freezingRain": "冻雨",
"snowFall": "降雪",
"snowGrains": "霰",
"rainShowers": "阵雨",
"snowShowers": "阵雪",
"thunderstorm": "雷暴",
"thunderstormWithHail": "雷暴夹冰雹",
"unknown": "未知"
}
},
"error": "出现了一个错误"
}

Some files were not shown because too many files have changed in this diff Show More