mirror of
https://codeberg.org/PLG-Development/PLG-MuDiCS
synced 2026-07-06 17:07:08 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9e0d8762d9 | |||
| 07c8d7ea3d | |||
| aedd9fce44 | |||
| e74356f9a6 | |||
| 136bba25fe | |||
| 9b70e9aae9 | |||
| 79d122ded7 |
Generated
+2
-30
@@ -3,7 +3,6 @@
|
||||
"specifiers": {
|
||||
"npm:@eslint/compat@^1.4.1": "1.4.1_eslint@9.39.2",
|
||||
"npm:@eslint/js@^9.39.2": "9.39.2",
|
||||
"npm:@playwright/test@1.56.1": "1.56.1",
|
||||
"npm:@sveltejs/adapter-auto@^6.1.1": "6.1.1_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@6.2.3___svelte@5.46.1____acorn@8.15.0___vite@7.3.1____sass-embedded@1.97.2____picomatch@4.0.3___sass-embedded@1.97.2__svelte@5.46.1___acorn@8.15.0__typescript@5.9.3__vite@7.3.1___sass-embedded@1.97.2___picomatch@4.0.3__acorn@8.15.0__sass-embedded@1.97.2_@sveltejs+vite-plugin-svelte@6.2.3__svelte@5.46.1___acorn@8.15.0__vite@7.3.1___sass-embedded@1.97.2___picomatch@4.0.3__sass-embedded@1.97.2_svelte@5.46.1__acorn@8.15.0_typescript@5.9.3_vite@7.3.1__sass-embedded@1.97.2__picomatch@4.0.3_sass-embedded@1.97.2",
|
||||
"npm:@sveltejs/adapter-static@^3.0.10": "3.0.10_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@6.2.3___svelte@5.46.1____acorn@8.15.0___vite@7.3.1____sass-embedded@1.97.2____picomatch@4.0.3___sass-embedded@1.97.2__svelte@5.46.1___acorn@8.15.0__typescript@5.9.3__vite@7.3.1___sass-embedded@1.97.2___picomatch@4.0.3__acorn@8.15.0__sass-embedded@1.97.2_@sveltejs+vite-plugin-svelte@6.2.3__svelte@5.46.1___acorn@8.15.0__vite@7.3.1___sass-embedded@1.97.2___picomatch@4.0.3__sass-embedded@1.97.2_svelte@5.46.1__acorn@8.15.0_typescript@5.9.3_vite@7.3.1__sass-embedded@1.97.2__picomatch@4.0.3_sass-embedded@1.97.2",
|
||||
"npm:@sveltejs/kit@^2.49.3": "2.49.3_@sveltejs+vite-plugin-svelte@6.2.3__svelte@5.46.1___acorn@8.15.0__vite@7.3.1___sass-embedded@1.97.2___picomatch@4.0.3__sass-embedded@1.97.2_svelte@5.46.1__acorn@8.15.0_typescript@5.9.3_vite@7.3.1__sass-embedded@1.97.2__picomatch@4.0.3_acorn@8.15.0_sass-embedded@1.97.2",
|
||||
@@ -369,13 +368,6 @@
|
||||
],
|
||||
"scripts": true
|
||||
},
|
||||
"@playwright/test@1.56.1": {
|
||||
"integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==",
|
||||
"dependencies": [
|
||||
"playwright"
|
||||
],
|
||||
"bin": true
|
||||
},
|
||||
"@polka/url@1.0.0-next.29": {
|
||||
"integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="
|
||||
},
|
||||
@@ -1374,11 +1366,6 @@
|
||||
"flatted@3.3.3": {
|
||||
"integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="
|
||||
},
|
||||
"fsevents@2.3.2": {
|
||||
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
|
||||
"os": ["darwin"],
|
||||
"scripts": true
|
||||
},
|
||||
"fsevents@2.3.3": {
|
||||
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
||||
"os": ["darwin"],
|
||||
@@ -1694,20 +1681,6 @@
|
||||
"picomatch@4.0.3": {
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="
|
||||
},
|
||||
"playwright-core@1.56.1": {
|
||||
"integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==",
|
||||
"bin": true
|
||||
},
|
||||
"playwright@1.56.1": {
|
||||
"integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==",
|
||||
"dependencies": [
|
||||
"playwright-core"
|
||||
],
|
||||
"optionalDependencies": [
|
||||
"fsevents@2.3.2"
|
||||
],
|
||||
"bin": true
|
||||
},
|
||||
"postcss-load-config@3.1.4_postcss@8.5.6": {
|
||||
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
|
||||
"dependencies": [
|
||||
@@ -1942,7 +1915,7 @@
|
||||
"@rollup/rollup-win32-ia32-msvc",
|
||||
"@rollup/rollup-win32-x64-gnu",
|
||||
"@rollup/rollup-win32-x64-msvc",
|
||||
"fsevents@2.3.3"
|
||||
"fsevents"
|
||||
],
|
||||
"bin": true
|
||||
},
|
||||
@@ -2291,7 +2264,7 @@
|
||||
"tinyglobby"
|
||||
],
|
||||
"optionalDependencies": [
|
||||
"fsevents@2.3.3"
|
||||
"fsevents"
|
||||
],
|
||||
"optionalPeers": [
|
||||
"sass-embedded"
|
||||
@@ -2335,7 +2308,6 @@
|
||||
"dependencies": [
|
||||
"npm:@eslint/compat@^1.4.1",
|
||||
"npm:@eslint/js@^9.39.2",
|
||||
"npm:@playwright/test@1.56.1",
|
||||
"npm:@sveltejs/adapter-auto@^6.1.1",
|
||||
"npm:@sveltejs/adapter-static@^3.0.10",
|
||||
"npm:@sveltejs/kit@^2.49.3",
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
import { expect, test } from '@playwright/test';
|
||||
|
||||
test('page loads', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await expect(page.getByText('PLG MuDiCS')).toBeVisible();
|
||||
});
|
||||
|
||||
test('page loads without problems', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await expect(page.getByText('PLG MuDiCS')).toBeVisible();
|
||||
await expect(page.getByTestId('notification')).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('diplay click shows files', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await page.getByTestId('display').click();
|
||||
await expect(page.getByTestId('inode').first()).toBeVisible();
|
||||
});
|
||||
|
||||
test('show text', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await page.getByTestId('display').click();
|
||||
|
||||
const controlButton = page.getByText('Text anzeigen');
|
||||
await expect(controlButton).toBeVisible();
|
||||
await controlButton.click();
|
||||
|
||||
const textPopup = page.getByTestId('text-popup');
|
||||
await expect(textPopup).toBeVisible();
|
||||
const textArea = textPopup.getByRole('textbox');
|
||||
await expect(textArea).toBeVisible();
|
||||
await textArea.fill('Hello, world!');
|
||||
|
||||
const submitButton = textPopup.locator('button').filter({ hasText: 'Text anzeigen' });
|
||||
await submitButton.click();
|
||||
await expect(
|
||||
page.locator('[data-testid="notification"]:not(:has-text("Fehler 500"))')
|
||||
).not.toBeVisible();
|
||||
});
|
||||
@@ -5,9 +5,6 @@ import (
|
||||
"io/fs"
|
||||
)
|
||||
|
||||
//go:generate deno install
|
||||
//go:generate deno task build
|
||||
|
||||
//go:embed all:build
|
||||
var buildDir embed.FS
|
||||
|
||||
|
||||
@@ -11,14 +11,11 @@
|
||||
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
||||
"lint": "eslint . && prettier --check .",
|
||||
"format": "prettier --write .",
|
||||
"test:e2e": "playwright test",
|
||||
"test": "deno task test:e2e"
|
||||
"format": "prettier --write ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/compat": "^1.4.1",
|
||||
"@eslint/js": "^9.39.2",
|
||||
"@playwright/test": "1.56.1",
|
||||
"@sveltejs/adapter-auto": "^6.1.1",
|
||||
"@sveltejs/adapter-static": "^3.0.10",
|
||||
"@sveltejs/kit": "^2.49.3",
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
import { defineConfig } from '@playwright/test';
|
||||
|
||||
export default defineConfig({
|
||||
fullyParallel: true,
|
||||
webServer: {
|
||||
command: 'deno task build && deno task preview',
|
||||
port: 4173
|
||||
},
|
||||
testDir: 'e2e'
|
||||
});
|
||||
@@ -218,7 +218,7 @@
|
||||
</button>
|
||||
|
||||
<button
|
||||
title="Vorherige Folie (Pfeil nach Links) [gedrückt halten möglich]"
|
||||
title="Nächste Folie (Pfeil nach Rechts) [gedrückt halten möglich]"
|
||||
class="px-9 bg-stone-700 {$selected_online_display_ids.length === 0
|
||||
? 'text-stone-500 cursor-not-allowed'
|
||||
: 'hover:bg-stone-600 active:bg-stone-500 cursor-pointer'} py-2 rounded-xl flex justify-center items-center transition-colors duration-200"
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
[working-directory: 'frontend']
|
||||
gen:
|
||||
deno install
|
||||
deno task build
|
||||
|
||||
dev: gen
|
||||
go run *.go
|
||||
+17
-6
@@ -42,8 +42,12 @@ func (b *BrowserType) Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *BrowserType) OpenPage(url string) {
|
||||
chromedp.Run(b.Ctx, chromedp.Navigate(url))
|
||||
func (b *BrowserType) OpenPage(url string) error {
|
||||
err := chromedp.Run(b.Ctx, chromedp.Navigate(url))
|
||||
if err != nil {
|
||||
return fmt.Errorf("navigate to URL: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Yes, we need that trick with creating a temp file and not directly sending html since
|
||||
@@ -55,18 +59,25 @@ func (b *BrowserType) OpenHTML(html string) error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not create tempfile: %w", err)
|
||||
}
|
||||
defer tempFile.Close()
|
||||
defer func() { _ = tempFile.Close() }()
|
||||
|
||||
_, err = tempFile.WriteString(html)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not write to tempfile: %w", err)
|
||||
}
|
||||
|
||||
chromedp.Run(b.Ctx, chromedp.Navigate("file://"+tempFile.Name()))
|
||||
err = chromedp.Run(b.Ctx, chromedp.Navigate("file://"+tempFile.Name()))
|
||||
if err != nil {
|
||||
return fmt.Errorf("navigate to URL: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *BrowserType) OpenPDF(path string) {
|
||||
b.OpenPage("file://" + path + "#toolbar=0&view=Fit")
|
||||
func (b *BrowserType) OpenPDF(path string) error {
|
||||
err := b.OpenPage("file://" + path + "#toolbar=0&view=Fit")
|
||||
if err != nil {
|
||||
return fmt.Errorf("open PDF: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
gen:
|
||||
go tool templ generate
|
||||
|
||||
dev: gen
|
||||
go run *.go
|
||||
+10
-5
@@ -9,8 +9,6 @@ import (
|
||||
"plg-mudics/display/web"
|
||||
)
|
||||
|
||||
//go:generate go tool templ generate
|
||||
|
||||
func main() {
|
||||
var err error
|
||||
|
||||
@@ -19,7 +17,6 @@ func main() {
|
||||
if err != nil {
|
||||
slog.Error("Failed to get storage path", "error", err)
|
||||
os.Exit(1)
|
||||
return
|
||||
}
|
||||
port := "1323"
|
||||
|
||||
@@ -27,8 +24,16 @@ func main() {
|
||||
// and since its the last action in the main go func all other goroutines (e.g. the webserver) are killed
|
||||
go web.StartWebServer(port)
|
||||
|
||||
browser.Browser.Init()
|
||||
pkg.OpenStartScreen()
|
||||
err = browser.Browser.Init()
|
||||
if err != nil {
|
||||
slog.Error("Initialize browser", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
err = pkg.OpenStartScreen()
|
||||
if err != nil {
|
||||
slog.Error("Open start screen", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer browser.Browser.Cancel()
|
||||
<-browser.Browser.Ctx.Done()
|
||||
}
|
||||
|
||||
+1
-1
@@ -83,7 +83,7 @@ func ShowHTML(html string) error {
|
||||
ResetView()
|
||||
|
||||
var templateBuffer bytes.Buffer
|
||||
htmlTemplate(html).Render(context.Background(), &templateBuffer)
|
||||
_ = htmlTemplate(html).Render(context.Background(), &templateBuffer)
|
||||
err := browser.Browser.OpenHTML(templateBuffer.String())
|
||||
|
||||
return err
|
||||
|
||||
@@ -27,26 +27,30 @@ func OpenFile(path string) error {
|
||||
|
||||
mType, err := mimetype.DetectFile(path)
|
||||
if err != nil {
|
||||
slog.Error("Failed to detect mime type", "file", path, "error", err)
|
||||
return fmt.Errorf("detect mime type of file %q: %w", path, err)
|
||||
}
|
||||
|
||||
switch mType.String() {
|
||||
case "video/mp4":
|
||||
var templateBuffer bytes.Buffer
|
||||
videoTemplate(path).Render(context.Background(), &templateBuffer)
|
||||
browser.Browser.OpenHTML(templateBuffer.String())
|
||||
_ = videoTemplate(path).Render(context.Background(), &templateBuffer)
|
||||
err = browser.Browser.OpenHTML(templateBuffer.String())
|
||||
case "image/jpeg", "image/png", "image/gif":
|
||||
var templateBuffer bytes.Buffer
|
||||
imageTemplate(path).Render(context.Background(), &templateBuffer)
|
||||
browser.Browser.OpenHTML(templateBuffer.String())
|
||||
_ = imageTemplate(path).Render(context.Background(), &templateBuffer)
|
||||
err = browser.Browser.OpenHTML(templateBuffer.String())
|
||||
case "application/pdf":
|
||||
browser.Browser.OpenPDF(path)
|
||||
err = browser.Browser.OpenPDF(path)
|
||||
case "application/vnd.openxmlformats-officedocument.presentationml.presentation", "application/vnd.oasis.opendocument.presentation":
|
||||
err = fileHandler.openFileWithApp(path)
|
||||
default:
|
||||
return fmt.Errorf("unsupported file type: %s", mType.String())
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to open file: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"image/color"
|
||||
"log/slog"
|
||||
"net"
|
||||
"os"
|
||||
"plg-mudics/shared"
|
||||
@@ -16,7 +15,7 @@ import (
|
||||
"github.com/skip2/go-qrcode"
|
||||
)
|
||||
|
||||
func OpenStartScreen() {
|
||||
func OpenStartScreen() error {
|
||||
var err error
|
||||
|
||||
raw := shared.RawSplashScreenTemplate
|
||||
@@ -24,11 +23,11 @@ func OpenStartScreen() {
|
||||
|
||||
ip, err := getDeviceIp()
|
||||
if err != nil {
|
||||
slog.Error("Failed to get device IP", "error", err)
|
||||
return fmt.Errorf("get device IP: %w", err)
|
||||
}
|
||||
mac, err := getDeviceMac()
|
||||
if err != nil {
|
||||
slog.Error("Failed to get device MAC address", "error", err)
|
||||
return fmt.Errorf("get device MAC address: %w", err)
|
||||
}
|
||||
|
||||
port := 8080
|
||||
@@ -37,13 +36,17 @@ func OpenStartScreen() {
|
||||
if showQrCode {
|
||||
qrCodePath, err = generateQRCode(fmt.Sprintf("http://%s:%d", ip, port))
|
||||
if err != nil {
|
||||
slog.Error("could not generate qr code", "error", err)
|
||||
return fmt.Errorf("generate QR code: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
var templateBuffer bytes.Buffer
|
||||
startScreenTemplate(html, ip, mac, qrCodePath).Render(context.Background(), &templateBuffer)
|
||||
browser.Browser.OpenHTML(templateBuffer.String())
|
||||
_ = startScreenTemplate(html, ip, mac, qrCodePath).Render(context.Background(), &templateBuffer)
|
||||
err = browser.Browser.OpenHTML(templateBuffer.String())
|
||||
if err != nil {
|
||||
return fmt.Errorf("open start screen in browser: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getDeviceIp() (string, error) {
|
||||
@@ -106,7 +109,7 @@ func generateQRCode(data string) (string, error) {
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("could not save qr code: %w", err)
|
||||
}
|
||||
defer file.Close()
|
||||
defer func() { _ = file.Close() }()
|
||||
|
||||
_, err = file.Write(png)
|
||||
if err != nil {
|
||||
|
||||
+11
-2
@@ -162,7 +162,10 @@ func uploadFileRoute(ctx echo.Context) error {
|
||||
slog.Error("Failed to close file", "file", fullPath, "error", fileCloseErr)
|
||||
}
|
||||
if err != nil {
|
||||
os.Remove(fullPath)
|
||||
err = os.Remove(fullPath)
|
||||
if err != nil {
|
||||
slog.Warn("could not remove broken file", "file", fullPath, "error", err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -280,6 +283,8 @@ func previewRoute(ctx echo.Context) error {
|
||||
}
|
||||
|
||||
func openWebsiteRoute(ctx echo.Context) error {
|
||||
var err error
|
||||
|
||||
var request struct {
|
||||
URL string `json:"url"`
|
||||
}
|
||||
@@ -290,7 +295,11 @@ func openWebsiteRoute(ctx echo.Context) error {
|
||||
|
||||
slog.Info("Opening url")
|
||||
|
||||
browser.Browser.OpenPage(request.URL)
|
||||
err = browser.Browser.OpenPage(request.URL)
|
||||
if err != nil {
|
||||
slog.Error("Failed to open website", "url", request.URL, "error", err)
|
||||
return ctx.JSON(http.StatusInternalServerError, shared.ErrorResponse{Description: "Failed to open website"})
|
||||
}
|
||||
|
||||
return ctx.JSON(http.StatusOK, struct{}{})
|
||||
}
|
||||
|
||||
@@ -11,20 +11,13 @@
|
||||
in {
|
||||
devShells."x86_64-linux".default = pkgs.mkShell {
|
||||
packages = with pkgs; [
|
||||
gcc
|
||||
libreoffice
|
||||
ungoogled-chromium
|
||||
xreader
|
||||
imagemagick
|
||||
ffmpeg
|
||||
ghostscript
|
||||
gnome-screenshot
|
||||
|
||||
playwright-driver.browsers
|
||||
];
|
||||
|
||||
PLAYWRIGHT_BROWSERS_PATH = pkgs.playwright-driver.browsers;
|
||||
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "true";
|
||||
PW_DISABLE_TS_ESM = "true";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,17 +1,25 @@
|
||||
github.com/a-h/htmlformat v0.0.0-20250209131833-673be874c677/go.mod h1:FMIm5afKmEfarNbIXOaPHFY8X7fo+fRQB6I9MPG2nB0=
|
||||
github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 h1:6Yzfa6GP0rIo/kULo2bwGEkFvCePZ3qHDDTC3/J9Swo=
|
||||
github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs=
|
||||
github.com/mdlayher/raw v0.0.0-20190313224157-43dbcdd7739d h1:rjAS0af7FIYCScTtEU5KjIldC6qVaEScUJhABHC+ccM=
|
||||
github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde h1:x0TT0RDC7UhAVbbWWBzr41ElhJx5tXPWkIHA2HWPRuw=
|
||||
github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0=
|
||||
github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po=
|
||||
github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
|
||||
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
|
||||
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
|
||||
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
|
||||
golang.org/x/telemetry v0.0.0-20250710130107-8d8967aff50b/go.mod h1:4ZwOYna0/zsOKwuR5X/m0QFOJpSZvAxFfkQT+Erd9D4=
|
||||
golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54 h1:E2/AqCUMZGgd73TQkxUMcMla25GB9i/5HOdLr+uH7Vo=
|
||||
golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54/go.mod h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ=
|
||||
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
|
||||
golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0=
|
||||
golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
|
||||
golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
|
||||
golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
||||
@@ -98,7 +98,6 @@
|
||||
# Libraries
|
||||
imagemagick
|
||||
ffmpeg
|
||||
ghostscript
|
||||
];
|
||||
|
||||
home-manager.users.mudics = {
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
v0.1.3
|
||||
v0.1.4
|
||||
|
||||
Reference in New Issue
Block a user