From cb1401fe47ee100837deab80890149320b1864ac Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Sat, 6 Dec 2025 17:40:46 +0100 Subject: [PATCH 01/22] feat: start implementation of package for mydia --- flake.lock | 128 ++++- flake.nix | 5 + modules/home/application/steam/default.nix | 2 +- .../home/application/teamspeak/default.nix | 2 +- .../nixos/services/media/servarr/default.nix | 2 +- packages/mydia/bun.lock | 99 ++++ packages/mydia/bun.nix | 148 +++++ packages/mydia/default.nix | 170 ++++++ packages/mydia/package-lock.json | 543 ++++++++++++++++++ packages/mydia/package.json | 37 ++ shells/default/default.nix | 5 +- 11 files changed, 1119 insertions(+), 22 deletions(-) create mode 100644 packages/mydia/bun.lock create mode 100644 packages/mydia/bun.nix create mode 100644 packages/mydia/default.nix create mode 100644 packages/mydia/package-lock.json create mode 100644 packages/mydia/package.json diff --git a/flake.lock b/flake.lock index 3f5967e..d121781 100644 --- a/flake.lock +++ b/flake.lock @@ -68,11 +68,35 @@ "type": "github" } }, + "bun2nix": { + "inputs": { + "flake-parts": "flake-parts", + "import-tree": "import-tree", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1763731225, + "narHash": "sha256-YxPBXh8/ZSH6sqDpc4kstfv+9QR6vIb0mB2n5oJGPy8=", + "owner": "baileyluTCD", + "repo": "bun2nix", + "rev": "21f2aed3b1f1d4af93df1a6d34cb3e3f703ac6f9", + "type": "github" + }, + "original": { + "owner": "baileyluTCD", + "repo": "bun2nix", + "type": "github" + } + }, "clan-core": { "inputs": { "data-mesher": "data-mesher", "disko": "disko", - "flake-parts": "flake-parts", + "flake-parts": "flake-parts_2", "nix-darwin": "nix-darwin", "nix-select": "nix-select", "nixos-facter-modules": "nixos-facter-modules", @@ -80,8 +104,8 @@ "nixpkgs" ], "sops-nix": "sops-nix", - "systems": "systems", - "treefmt-nix": "treefmt-nix" + "systems": "systems_2", + "treefmt-nix": "treefmt-nix_2" }, "locked": { "lastModified": 1764601856, @@ -299,6 +323,24 @@ } }, "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1762980239, + "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { "inputs": { "nixpkgs-lib": [ "clan-core", @@ -319,7 +361,7 @@ "type": "github" } }, - "flake-parts_2": { + "flake-parts_3": { "inputs": { "nixpkgs-lib": [ "nvf", @@ -340,7 +382,7 @@ "type": "github" } }, - "flake-parts_3": { + "flake-parts_4": { "inputs": { "nixpkgs-lib": [ "stylix", @@ -361,7 +403,7 @@ "type": "github" } }, - "flake-parts_4": { + "flake-parts_5": { "inputs": { "nixpkgs-lib": [ "terranix", @@ -384,7 +426,7 @@ }, "flake-utils": { "inputs": { - "systems": "systems_2" + "systems": "systems_3" }, "locked": { "lastModified": 1731533236, @@ -421,7 +463,7 @@ }, "flake-utils_2": { "inputs": { - "systems": "systems_3" + "systems": "systems_4" }, "locked": { "lastModified": 1731533236, @@ -439,7 +481,7 @@ }, "flake-utils_3": { "inputs": { - "systems": "systems_4" + "systems": "systems_5" }, "locked": { "lastModified": 1731533236, @@ -457,7 +499,7 @@ }, "flake-utils_4": { "inputs": { - "systems": "systems_6" + "systems": "systems_7" }, "locked": { "lastModified": 1694529238, @@ -607,6 +649,21 @@ "type": "github" } }, + "import-tree": { + "locked": { + "lastModified": 1763695721, + "narHash": "sha256-tMfN/JkwWJ129cXDW+lK2gUcjklJ+LpTHj9LlneJRXg=", + "owner": "vic", + "repo": "import-tree", + "rev": "ca69d64711265c68cf71f6c029ab9f1a55a767f8", + "type": "github" + }, + "original": { + "owner": "vic", + "repo": "import-tree", + "type": "github" + } + }, "jovian": { "inputs": { "nix-github-actions": "nix-github-actions", @@ -631,7 +688,7 @@ "lib-aggregate": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs-lib": "nixpkgs-lib" + "nixpkgs-lib": "nixpkgs-lib_2" }, "locked": { "lastModified": 1764506612, @@ -1012,10 +1069,10 @@ "nvf": { "inputs": { "flake-compat": "flake-compat_4", - "flake-parts": "flake-parts_2", + "flake-parts": "flake-parts_3", "mnw": "mnw", "nixpkgs": "nixpkgs_7", - "systems": "systems_5" + "systems": "systems_6" }, "locked": { "lastModified": 1762622004, @@ -1056,6 +1113,7 @@ }, "root": { "inputs": { + "bun2nix": "bun2nix", "clan-core": "clan-core", "erosanix": "erosanix", "fenix": "fenix", @@ -1185,11 +1243,11 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_3", + "flake-parts": "flake-parts_4", "gnome-shell": "gnome-shell", "nixpkgs": "nixpkgs_9", "nur": "nur", - "systems": "systems_7", + "systems": "systems_8", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", "tinted-schemes": "tinted-schemes", @@ -1330,13 +1388,28 @@ "type": "github" } }, + "systems_9": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "terranix": { "inputs": { - "flake-parts": "flake-parts_4", + "flake-parts": "flake-parts_5", "nixpkgs": [ "nixpkgs" ], - "systems": "systems_8" + "systems": "systems_9" }, "locked": { "lastModified": 1762472226, @@ -1434,6 +1507,27 @@ } }, "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "bun2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1762938485, + "narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { "inputs": { "nixpkgs": [ "clan-core", diff --git a/flake.nix b/flake.nix index d7a7508..ce29d92 100644 --- a/flake.nix +++ b/flake.nix @@ -88,6 +88,11 @@ url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz"; inputs.nixpkgs.follows = "nixpkgs"; }; + + bun2nix = { + url = "github:baileyluTCD/bun2nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = inputs: inputs.snowfall-lib.mkFlake { diff --git a/modules/home/application/steam/default.nix b/modules/home/application/steam/default.nix index 4e62c41..8c87b40 100644 --- a/modules/home/application/steam/default.nix +++ b/modules/home/application/steam/default.nix @@ -10,7 +10,7 @@ in }; config = mkIf cfg.enable { - home.packages = with pkgs; [ protonup ]; + home.packages = with pkgs; [ protonup-ng ]; home.sessionVariables = { STEAM_EXTRA_COMPAT_TOOLS_PATHS = "\${HOME}/.steam/root/compatibilitytools.d"; diff --git a/modules/home/application/teamspeak/default.nix b/modules/home/application/teamspeak/default.nix index e15bd96..d234e9a 100644 --- a/modules/home/application/teamspeak/default.nix +++ b/modules/home/application/teamspeak/default.nix @@ -10,6 +10,6 @@ in }; config = mkIf cfg.enable { - home.packages = with pkgs; [ teamspeak_client ]; + home.packages = with pkgs; [ teamspeak3 teamspeak6-client ]; }; } diff --git a/modules/nixos/services/media/servarr/default.nix b/modules/nixos/services/media/servarr/default.nix index 097a36b..c67e52d 100644 --- a/modules/nixos/services/media/servarr/default.nix +++ b/modules/nixos/services/media/servarr/default.nix @@ -59,7 +59,7 @@ in })) |> lib.mergeAttrsList |> (set: set // { - postgres = { + postgresql = { ensureDatabases = cfg |> lib.attrNames; ensureUsers = cfg |> lib.attrNames |> lib.map (service: { name = service; diff --git a/packages/mydia/bun.lock b/packages/mydia/bun.lock new file mode 100644 index 0000000..94ef66d --- /dev/null +++ b/packages/mydia/bun.lock @@ -0,0 +1,99 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "mydia-assets", + "dependencies": { + "alpinejs": "^3.15.1", + "hls.js": "^1.5.15", + "phoenix": "file:../deps/phoenix", + "phoenix_html": "file:../deps/phoenix_html", + "phoenix_live_view": "file:../deps/phoenix_live_view", + }, + "devDependencies": { + "@catppuccin/daisyui": "^2.1.1", + "@playwright/test": "^1.56.1", + "@tailwindcss/forms": "^0.5.7", + "@types/node": "^24.10.1", + "autoprefixer": "^10.4.16", + "daisyui": "^5.4.3", + "postcss": "^8.4.32", + "tailwindcss": "^4.0.0", + "typescript": "^5.9.3", + }, + }, + }, + "packages": { + "@catppuccin/daisyui": ["@catppuccin/daisyui@2.1.1", "", { "dependencies": { "@catppuccin/palette": "^1.7.1" }, "peerDependencies": { "tailwindcss": "^4.0.17" } }, "sha512-PrZttjj8kwfDBJ34sR+DN25Xtjvxx4T5p8uu/iiGYZR8UOsNwzMlO/alYDBwwTOLzP1NKLNRax09kCT39+QM+A=="], + + "@catppuccin/palette": ["@catppuccin/palette@1.7.1", "", {}, "sha512-aRc1tbzrevOTV7nFTT9SRdF26w/MIwT4Jwt4fDMc9itRZUDXCuEDBLyz4TQMlqO9ZP8mf5Hu4Jr6D03NLFc6Gw=="], + + "@playwright/test": ["@playwright/test@1.56.1", "", { "dependencies": { "playwright": "1.56.1" }, "bin": { "playwright": "cli.js" } }, "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg=="], + + "@tailwindcss/forms": ["@tailwindcss/forms@0.5.10", "", { "dependencies": { "mini-svg-data-uri": "^1.2.3" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" } }, "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw=="], + + "@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="], + + "@vue/reactivity": ["@vue/reactivity@3.1.5", "", { "dependencies": { "@vue/shared": "3.1.5" } }, "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg=="], + + "@vue/shared": ["@vue/shared@3.1.5", "", {}, "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA=="], + + "alpinejs": ["alpinejs@3.15.1", "", { "dependencies": { "@vue/reactivity": "~3.1.1" } }, "sha512-HLO1TtiE92VajFHtLLPK8BWaK1YepV/uj31UrfoGnQ00lyFOJZ+oVY3F0DghPAwvg8sLU79pmjGQSytERa2gEg=="], + + "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": "bin/autoprefixer" }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.8.23", "", { "bin": "dist/cli.js" }, "sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ=="], + + "browserslist": ["browserslist@4.27.0", "", { "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", "electron-to-chromium": "^1.5.238", "node-releases": "^2.0.26", "update-browserslist-db": "^1.1.4" }, "bin": "cli.js" }, "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001753", "", {}, "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw=="], + + "daisyui": ["daisyui@5.4.3", "", {}, "sha512-dfDCJnN4utErGoWfElgdEE252FtfHV9Mxj5Dq1+JzUq3nVkluWdF3JYykP0Xy/y/yArnPXYztO1tLNCow3kjmg=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.244", "", {}, "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], + + "fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], + + "hls.js": ["hls.js@1.6.14", "", {}, "sha512-CSpT2aXsv71HST8C5ETeVo+6YybqCpHBiYrCRQSn3U5QUZuLTSsvtq/bj+zuvjLVADeKxoebzo16OkH8m1+65Q=="], + + "mini-svg-data-uri": ["mini-svg-data-uri@1.4.4", "", { "bin": "cli.js" }, "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": "bin/nanoid.cjs" }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + + "normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="], + + "phoenix": ["/phoenix@file:../deps/phoenix", {}], + + "phoenix_html": ["/phoenix_html@file:../deps/phoenix_html", {}], + + "phoenix_live_view": ["/phoenix_live_view@file:../deps/phoenix_live_view", { "devDependencies": { "@playwright/test": "^1.56.1", "phoenix": "1.7.21", "typescript": "^5.8.3" } }], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "playwright": ["playwright@1.56.1", "", { "dependencies": { "playwright-core": "1.56.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": "cli.js" }, "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw=="], + + "playwright-core": ["playwright-core@1.56.1", "", { "bin": "cli.js" }, "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "tailwindcss": ["tailwindcss@4.1.16", "", {}, "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + + "update-browserslist-db": ["update-browserslist-db@1.1.4", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A=="], + + "phoenix_live_view/phoenix": ["/phoenix@file:../deps/phoenix", {}], + } +} diff --git a/packages/mydia/bun.nix b/packages/mydia/bun.nix new file mode 100644 index 0000000..95a45a5 --- /dev/null +++ b/packages/mydia/bun.nix @@ -0,0 +1,148 @@ +# Autogenerated by `bun2nix`, editing manually is not recommended +# +# Set of Bun packages to install +# +# Consume this with `fetchBunDeps` (recommended) +# or `pkgs.callPackage` if you wish to handle +# it manually. +{ + copyPathToStore, + fetchFromGitHub, + fetchgit, + fetchurl, + ... +}: +{ + "@catppuccin/daisyui@2.1.1" = fetchurl { + url = "https://registry.npmjs.org/@catppuccin/daisyui/-/daisyui-2.1.1.tgz"; + hash = "sha512-PrZttjj8kwfDBJ34sR+DN25Xtjvxx4T5p8uu/iiGYZR8UOsNwzMlO/alYDBwwTOLzP1NKLNRax09kCT39+QM+A=="; + }; + "@catppuccin/palette@1.7.1" = fetchurl { + url = "https://registry.npmjs.org/@catppuccin/palette/-/palette-1.7.1.tgz"; + hash = "sha512-aRc1tbzrevOTV7nFTT9SRdF26w/MIwT4Jwt4fDMc9itRZUDXCuEDBLyz4TQMlqO9ZP8mf5Hu4Jr6D03NLFc6Gw=="; + }; + "@playwright/test@1.56.1" = fetchurl { + url = "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz"; + hash = "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg=="; + }; + "@tailwindcss/forms@0.5.10" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz"; + hash = "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw=="; + }; + "@types/node@24.10.1" = fetchurl { + url = "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz"; + hash = "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="; + }; + "@vue/reactivity@3.1.5" = fetchurl { + url = "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz"; + hash = "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg=="; + }; + "@vue/shared@3.1.5" = fetchurl { + url = "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz"; + hash = "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA=="; + }; + "alpinejs@3.15.1" = fetchurl { + url = "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.1.tgz"; + hash = "sha512-HLO1TtiE92VajFHtLLPK8BWaK1YepV/uj31UrfoGnQ00lyFOJZ+oVY3F0DghPAwvg8sLU79pmjGQSytERa2gEg=="; + }; + "autoprefixer@10.4.21" = fetchurl { + url = "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz"; + hash = "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="; + }; + "baseline-browser-mapping@2.8.23" = fetchurl { + url = "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.23.tgz"; + hash = "sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ=="; + }; + "browserslist@4.27.0" = fetchurl { + url = "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz"; + hash = "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw=="; + }; + "caniuse-lite@1.0.30001753" = fetchurl { + url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz"; + hash = "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw=="; + }; + "daisyui@5.4.3" = fetchurl { + url = "https://registry.npmjs.org/daisyui/-/daisyui-5.4.3.tgz"; + hash = "sha512-dfDCJnN4utErGoWfElgdEE252FtfHV9Mxj5Dq1+JzUq3nVkluWdF3JYykP0Xy/y/yArnPXYztO1tLNCow3kjmg=="; + }; + "electron-to-chromium@1.5.244" = fetchurl { + url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz"; + hash = "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw=="; + }; + "escalade@3.2.0" = fetchurl { + url = "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz"; + hash = "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="; + }; + "fraction.js@4.3.7" = fetchurl { + url = "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz"; + hash = "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="; + }; + "fsevents@2.3.2" = fetchurl { + url = "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"; + hash = "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="; + }; + "hls.js@1.6.14" = fetchurl { + url = "https://registry.npmjs.org/hls.js/-/hls.js-1.6.14.tgz"; + hash = "sha512-CSpT2aXsv71HST8C5ETeVo+6YybqCpHBiYrCRQSn3U5QUZuLTSsvtq/bj+zuvjLVADeKxoebzo16OkH8m1+65Q=="; + }; + "mini-svg-data-uri@1.4.4" = fetchurl { + url = "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz"; + hash = "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="; + }; + "nanoid@3.3.11" = fetchurl { + url = "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz"; + hash = "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="; + }; + "node-releases@2.0.27" = fetchurl { + url = "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz"; + hash = "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="; + }; + "normalize-range@0.1.2" = fetchurl { + url = "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz"; + hash = "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="; + }; + "phoenix" = "/nix/store/phoenix"; #copyPathToStore "./file:../deps/phoenix"; + "phoenix_html" = "/nix/store/phoenix_html"; #copyPathToStore "./file:../deps/phoenix_html"; + "phoenix_live_view" = "/nix/store/phoenix_live_view"; #copyPathToStore "./file:../deps/phoenix_live_view"; + "phoenix_live_view/phoenix" = "/nix/store/phoenix_live_view__phoenix"; #copyPathToStore "./file:../deps/phoenix"; + "picocolors@1.1.1" = fetchurl { + url = "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"; + hash = "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="; + }; + "playwright-core@1.56.1" = fetchurl { + url = "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz"; + hash = "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ=="; + }; + "playwright@1.56.1" = fetchurl { + url = "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz"; + hash = "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw=="; + }; + "postcss-value-parser@4.2.0" = fetchurl { + url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"; + hash = "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="; + }; + "postcss@8.5.6" = fetchurl { + url = "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz"; + hash = "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="; + }; + "source-map-js@1.2.1" = fetchurl { + url = "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"; + hash = "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="; + }; + "tailwindcss@4.1.16" = fetchurl { + url = "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.16.tgz"; + hash = "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA=="; + }; + "typescript@5.9.3" = fetchurl { + url = "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz"; + hash = "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="; + }; + "undici-types@7.16.0" = fetchurl { + url = "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz"; + hash = "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="; + }; + "update-browserslist-db@1.1.4" = fetchurl { + url = "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz"; + hash = "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A=="; + }; +} \ No newline at end of file diff --git a/packages/mydia/default.nix b/packages/mydia/default.nix new file mode 100644 index 0000000..57fdd4c --- /dev/null +++ b/packages/mydia/default.nix @@ -0,0 +1,170 @@ +{ lib, inputs, fetchFromGitHub, pkgs, stdenv, ... }: +let + erl = pkgs.beam.interpreters.erlang_28; + erlangPackages = pkgs.beam.packagesWith erl; + + elixir = erlangPackages.elixir; + mix = "${elixir}/bin/mix"; + rebar = erlangPackages.rebar; + hex = erlangPackages.hex; + + bun = pkgs.bun; + bun2nix = inputs.bun2nix.packages.${stdenv.hostPlatform.system}.default; + + translatedPlatform = + { + aarch64-darwin = "macos-arm64"; + aarch64-linux = "linux-arm64"; + armv7l-linux = "linux-armv7"; + x86_64-darwin = "macos-x64"; + x86_64-linux = "linux-x64"; + } + .${stdenv.hostPlatform.system}; + + version = "v0.6.0"; + pname = "mydia"; + src = fetchFromGitHub { + owner = "getmydia"; + repo = "mydia"; + rev = version; + hash = "sha256-JGT52ulnqcx8o+3e0l50TLAwLIWXEI8nwFGUsA95vH0="; + }; + mixFodDeps = erlangPackages.fetchMixDeps { + inherit version src; + pname = "${pname}-mix-deps"; + hash = "sha256-19q56IZe8YjuUBXirFGgmBsewJ0cmdOoO1yfiMaWGWk="; + }; + bunDeps = bun2nix.fetchBunDeps { + bunNix = ./bun.nix; + overrides = { + "phoenix" = pkg: pkgs.runCommandLocal "override-phoenix" {} '' + mkdir $out + echo "je moeder!" > $out/kaas.txt + ''; + "phoenix_html" = pkg: pkgs.runCommandLocal "override-phoenix_html" {} '' + mkdir $out + echo "je moeder!" > $out/kaas.txt + ''; + "phoenix_live_view" = pkg: pkgs.runCommandLocal "override-phoenix_live_view" {} '' + mkdir $out + echo "je moeder!" > $out/kaas.txt + ''; + "phoenix_live_view/phoenix" = pkg: pkgs.runCommandLocal "override-phoenix_live_view__phoenix" {} '' + mkdir $out + echo "je moeder!" > $out/kaas.txt + ''; + }; + }; +in +erlangPackages.mixRelease { + inherit pname version src mixFodDeps bunDeps; + + nativeBuildInputs = with pkgs; [ ffmpeg_7-headless pkg-config bun2nix.hook ]; + + dontUseBunPatch = true; + dontUseBunBuild = true; + + preInstall = '' + ln -s ${pkgs.tailwindcss}/bin/tailwind _build/tailwind-${translatedPlatform} + ln -s ${pkgs.esbuild}/bin/esbuild _build/esbuild-${translatedPlatform} + ln -s ${bunDeps}/node_modules assets/node_modules + + ${mix} assets.deploy + ''; + + # nativeBuildInputs = with pkgs; [ + # elixir + # rebar + # hex + # git + # bun + # postgresql + # curl + # ffmpeg_7-headless + # fdk_aac + # pkg-config + # ]; + + # buildPhase = '' + # runHook preBuild + + # # Prepare environment + # DATABASE_TYPE="postgres" + + # # I don't think this is needed, but lets copy the dockerfile for now + # mkdir -p ./app + # cp mix.exs ./app + # cp mix.lock ./app + # cd ./app + + # # Install dependencies + # ${mix} deps.get --only prod && ${mix} deps.compile + # pwd + # ls -al + + # # Copy source + # echo "Copy source" + # cp -r ../config ./config + # cp -r ../priv ./priv + # cp -r ../lib ./lib + # cp -r ../assets ./assets + + # # Compile app + # echo "Compile app" + # ${mix} compile + + # # Build assets + # echo "Build assets" + # $(cd ./assets && bun i --silent --production --frozen-lockfile) + # ${mix} assets.deploy + + # # Build executabe + # echo "Build executabe" + # ${mix} release + + # bun run build --bun + + # runHook postBuild + # ''; + + # installPhase = '' + # runHook preInstall + + # mkdir -p $out + # cp -r ./.output/* $out + + # makeWrapper ${lib.getExe pkgs.bun} $out/bin/${pname} \ + # --chdir $out \ + # --append-flags "server/index.mjs" + + # runHook postInstall + # ''; + + meta = { + description = "Your personal media companion, built with Phoenix LiveView"; + longDescription = '' + A modern, self-hosted media management platform for tracking, organizing, and monitoring your media library. + + # ✨ Features + + - 📺 Unified Media Management – Track both movies and TV shows with rich metadata from TMDB/TVDB + - 🤖 Automated Downloads – Background search and download with quality profiles and smart release ranking + - ⬇️ Download Clients – qBittorrent, Transmission, SABnzbd, and NZBGet support + - 🔎 Indexer Integration – Search via Prowlarr and Jackett for finding releases + - 📚 Built-in Indexer Library – Native Cardigann support (experimental, limited testing) + - 👥 Multi-User System – Built-in admin/guest roles with request approval workflow + - 🔐 SSO Support – Local authentication plus OIDC/OpenID Connect integration + - 🔔 Release Calendar – Track upcoming releases and monitor episodes + - 🎨 Modern Real-Time UI – Phoenix LiveView with instant updates and responsive design + ''; + + homepage = "https://github.com/getmydia/mydia"; + changelog = "https://github.com/getmydia/mydia/releases"; + license = lib.licenses.agpl3Only; + + maintainers = []; + + platforms = lib.platforms.all; + mainProgram = pname; + }; +} \ No newline at end of file diff --git a/packages/mydia/package-lock.json b/packages/mydia/package-lock.json new file mode 100644 index 0000000..ad53f59 --- /dev/null +++ b/packages/mydia/package-lock.json @@ -0,0 +1,543 @@ +{ + "name": "mydia-assets", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "mydia-assets", + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "alpinejs": "^3.15.1", + "hls.js": "^1.5.15", + "phoenix": "file:../deps/phoenix", + "phoenix_html": "file:../deps/phoenix_html", + "phoenix_live_view": "file:../deps/phoenix_live_view" + }, + "devDependencies": { + "@catppuccin/daisyui": "^2.1.1", + "@playwright/test": "^1.56.1", + "@tailwindcss/forms": "^0.5.7", + "@types/node": "^24.10.1", + "autoprefixer": "^10.4.16", + "daisyui": "^5.4.3", + "postcss": "^8.4.32", + "tailwindcss": "^4.0.0", + "typescript": "^5.9.3" + } + }, + "../deps/phoenix": { + "version": "1.8.1", + "license": "MIT", + "devDependencies": { + "@babel/cli": "7.28.3", + "@babel/core": "7.28.3", + "@babel/preset-env": "7.28.3", + "@eslint/js": "^9.28.0", + "@stylistic/eslint-plugin": "^5.0.0", + "documentation": "^14.0.3", + "eslint": "9.34.0", + "eslint-plugin-jest": "29.0.1", + "jest": "^30.0.0", + "jest-environment-jsdom": "^30.0.0", + "jsdom": "^26.1.0", + "mock-socket": "^9.3.1" + } + }, + "../deps/phoenix_html": { + "version": "4.3.0" + }, + "../deps/phoenix_live_view": { + "version": "1.1.16", + "license": "MIT", + "dependencies": { + "morphdom": "2.7.7" + }, + "devDependencies": { + "@babel/cli": "7.27.2", + "@babel/core": "7.27.4", + "@babel/preset-env": "7.27.2", + "@babel/preset-typescript": "^7.27.1", + "@eslint/js": "^9.29.0", + "@playwright/test": "^1.56.1", + "@types/jest": "^30.0.0", + "@types/phoenix": "^1.6.6", + "css.escape": "^1.5.1", + "eslint": "9.29.0", + "eslint-plugin-jest": "28.14.0", + "eslint-plugin-playwright": "^2.2.0", + "globals": "^16.2.0", + "jest": "^30.0.0", + "jest-environment-jsdom": "^30.0.0", + "jest-monocart-coverage": "^1.1.1", + "monocart-reporter": "^2.9.21", + "phoenix": "1.7.21", + "prettier": "3.5.3", + "ts-jest": "^29.4.0", + "typescript": "^5.8.3", + "typescript-eslint": "^8.34.0" + } + }, + "node_modules/@catppuccin/daisyui": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@catppuccin/daisyui/-/daisyui-2.1.1.tgz", + "integrity": "sha512-PrZttjj8kwfDBJ34sR+DN25Xtjvxx4T5p8uu/iiGYZR8UOsNwzMlO/alYDBwwTOLzP1NKLNRax09kCT39+QM+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@catppuccin/palette": "^1.7.1" + }, + "peerDependencies": { + "tailwindcss": "^4.0.17" + } + }, + "node_modules/@catppuccin/palette": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@catppuccin/palette/-/palette-1.7.1.tgz", + "integrity": "sha512-aRc1tbzrevOTV7nFTT9SRdF26w/MIwT4Jwt4fDMc9itRZUDXCuEDBLyz4TQMlqO9ZP8mf5Hu4Jr6D03NLFc6Gw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/catppuccin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/catppuccin" + } + ], + "license": "MIT" + }, + "node_modules/@playwright/test": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", + "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.56.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", + "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@types/node": { + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", + "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.1.5" + } + }, + "node_modules/@vue/shared": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", + "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==", + "license": "MIT" + }, + "node_modules/alpinejs": { + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.1.tgz", + "integrity": "sha512-HLO1TtiE92VajFHtLLPK8BWaK1YepV/uj31UrfoGnQ00lyFOJZ+oVY3F0DghPAwvg8sLU79pmjGQSytERa2gEg==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "~3.1.1" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.23", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.23.tgz", + "integrity": "sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/browserslist": { + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001753", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz", + "integrity": "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/daisyui": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.4.3.tgz", + "integrity": "sha512-dfDCJnN4utErGoWfElgdEE252FtfHV9Mxj5Dq1+JzUq3nVkluWdF3JYykP0Xy/y/yArnPXYztO1tLNCow3kjmg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/saadeghi/daisyui?sponsor=1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.244", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz", + "integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==", + "dev": true, + "license": "ISC" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/hls.js": { + "version": "1.6.14", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.14.tgz", + "integrity": "sha512-CSpT2aXsv71HST8C5ETeVo+6YybqCpHBiYrCRQSn3U5QUZuLTSsvtq/bj+zuvjLVADeKxoebzo16OkH8m1+65Q==", + "license": "Apache-2.0" + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/phoenix": { + "resolved": "../deps/phoenix", + "link": true + }, + "node_modules/phoenix_html": { + "resolved": "../deps/phoenix_html", + "link": true + }, + "node_modules/phoenix_live_view": { + "resolved": "../deps/phoenix_live_view", + "link": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/playwright": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", + "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.56.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", + "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.16.tgz", + "integrity": "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + } + } +} diff --git a/packages/mydia/package.json b/packages/mydia/package.json new file mode 100644 index 0000000..165a236 --- /dev/null +++ b/packages/mydia/package.json @@ -0,0 +1,37 @@ +{ + "name": "mydia-assets", + "version": "0.1.0", + "description": "Mydia - Modern Media Management Platform", + "repository": {}, + "license": "MIT", + "scripts": { + "deploy": "cd .. && mix assets.deploy && rm -f _build/esbuild*", + "screenshots": "node screenshots.js", + "populate-media": "node populate-media.js", + "test:e2e": "playwright test", + "test:e2e:ui": "playwright test --ui", + "test:e2e:debug": "playwright test --debug", + "test:e2e:headed": "playwright test --headed", + "test:e2e:chromium": "playwright test --project=chromium", + "test:e2e:firefox": "playwright test --project=firefox", + "test:e2e:webkit": "playwright test --project=webkit" + }, + "dependencies": { + "alpinejs": "^3.15.1", + "hls.js": "^1.5.15", + "phoenix": "file:../deps/phoenix", + "phoenix_html": "file:../deps/phoenix_html", + "phoenix_live_view": "file:../deps/phoenix_live_view" + }, + "devDependencies": { + "@catppuccin/daisyui": "^2.1.1", + "@playwright/test": "^1.56.1", + "@tailwindcss/forms": "^0.5.7", + "@types/node": "^24.10.1", + "autoprefixer": "^10.4.16", + "daisyui": "^5.4.3", + "postcss": "^8.4.32", + "tailwindcss": "^4.0.0", + "typescript": "^5.9.3" + } +} diff --git a/shells/default/default.nix b/shells/default/default.nix index 1749c48..248cefd 100644 --- a/shells/default/default.nix +++ b/shells/default/default.nix @@ -1,4 +1,4 @@ -{ mkShell, inputs, pkgs, ... }: +{ mkShell, inputs, pkgs, stdenv, ... }: mkShell { packages = with pkgs; [ @@ -7,6 +7,7 @@ mkShell { just yq pwgen - inputs.clan-core.packages.x86_64-linux.clan-cli + inputs.clan-core.packages.${stdenv.hostPlatform.system}.clan-cli + inputs.bun2nix.packages.${stdenv.hostPlatform.system}.default ]; } \ No newline at end of file -- 2.51.2 From 78ed7d2a0a8790207b3075191fd328bded1e4bf3 Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Sat, 6 Dec 2025 17:41:36 +0100 Subject: [PATCH 02/22] feat: remove bun2nix this is not the route I ended up going for, so I removed the dependency again --- flake.lock | 128 +------- flake.nix | 5 - packages/mydia/bun.lock | 99 ------ packages/mydia/bun.nix | 148 --------- packages/mydia/package-lock.json | 543 ------------------------------- packages/mydia/package.json | 37 --- shells/default/default.nix | 1 - 7 files changed, 17 insertions(+), 944 deletions(-) delete mode 100644 packages/mydia/bun.lock delete mode 100644 packages/mydia/bun.nix delete mode 100644 packages/mydia/package-lock.json delete mode 100644 packages/mydia/package.json diff --git a/flake.lock b/flake.lock index d121781..3f5967e 100644 --- a/flake.lock +++ b/flake.lock @@ -68,35 +68,11 @@ "type": "github" } }, - "bun2nix": { - "inputs": { - "flake-parts": "flake-parts", - "import-tree": "import-tree", - "nixpkgs": [ - "nixpkgs" - ], - "systems": "systems", - "treefmt-nix": "treefmt-nix" - }, - "locked": { - "lastModified": 1763731225, - "narHash": "sha256-YxPBXh8/ZSH6sqDpc4kstfv+9QR6vIb0mB2n5oJGPy8=", - "owner": "baileyluTCD", - "repo": "bun2nix", - "rev": "21f2aed3b1f1d4af93df1a6d34cb3e3f703ac6f9", - "type": "github" - }, - "original": { - "owner": "baileyluTCD", - "repo": "bun2nix", - "type": "github" - } - }, "clan-core": { "inputs": { "data-mesher": "data-mesher", "disko": "disko", - "flake-parts": "flake-parts_2", + "flake-parts": "flake-parts", "nix-darwin": "nix-darwin", "nix-select": "nix-select", "nixos-facter-modules": "nixos-facter-modules", @@ -104,8 +80,8 @@ "nixpkgs" ], "sops-nix": "sops-nix", - "systems": "systems_2", - "treefmt-nix": "treefmt-nix_2" + "systems": "systems", + "treefmt-nix": "treefmt-nix" }, "locked": { "lastModified": 1764601856, @@ -323,24 +299,6 @@ } }, "flake-parts": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib" - }, - "locked": { - "lastModified": 1762980239, - "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_2": { "inputs": { "nixpkgs-lib": [ "clan-core", @@ -361,7 +319,7 @@ "type": "github" } }, - "flake-parts_3": { + "flake-parts_2": { "inputs": { "nixpkgs-lib": [ "nvf", @@ -382,7 +340,7 @@ "type": "github" } }, - "flake-parts_4": { + "flake-parts_3": { "inputs": { "nixpkgs-lib": [ "stylix", @@ -403,7 +361,7 @@ "type": "github" } }, - "flake-parts_5": { + "flake-parts_4": { "inputs": { "nixpkgs-lib": [ "terranix", @@ -426,7 +384,7 @@ }, "flake-utils": { "inputs": { - "systems": "systems_3" + "systems": "systems_2" }, "locked": { "lastModified": 1731533236, @@ -463,7 +421,7 @@ }, "flake-utils_2": { "inputs": { - "systems": "systems_4" + "systems": "systems_3" }, "locked": { "lastModified": 1731533236, @@ -481,7 +439,7 @@ }, "flake-utils_3": { "inputs": { - "systems": "systems_5" + "systems": "systems_4" }, "locked": { "lastModified": 1731533236, @@ -499,7 +457,7 @@ }, "flake-utils_4": { "inputs": { - "systems": "systems_7" + "systems": "systems_6" }, "locked": { "lastModified": 1694529238, @@ -649,21 +607,6 @@ "type": "github" } }, - "import-tree": { - "locked": { - "lastModified": 1763695721, - "narHash": "sha256-tMfN/JkwWJ129cXDW+lK2gUcjklJ+LpTHj9LlneJRXg=", - "owner": "vic", - "repo": "import-tree", - "rev": "ca69d64711265c68cf71f6c029ab9f1a55a767f8", - "type": "github" - }, - "original": { - "owner": "vic", - "repo": "import-tree", - "type": "github" - } - }, "jovian": { "inputs": { "nix-github-actions": "nix-github-actions", @@ -688,7 +631,7 @@ "lib-aggregate": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs-lib": "nixpkgs-lib_2" + "nixpkgs-lib": "nixpkgs-lib" }, "locked": { "lastModified": 1764506612, @@ -1069,10 +1012,10 @@ "nvf": { "inputs": { "flake-compat": "flake-compat_4", - "flake-parts": "flake-parts_3", + "flake-parts": "flake-parts_2", "mnw": "mnw", "nixpkgs": "nixpkgs_7", - "systems": "systems_6" + "systems": "systems_5" }, "locked": { "lastModified": 1762622004, @@ -1113,7 +1056,6 @@ }, "root": { "inputs": { - "bun2nix": "bun2nix", "clan-core": "clan-core", "erosanix": "erosanix", "fenix": "fenix", @@ -1243,11 +1185,11 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_4", + "flake-parts": "flake-parts_3", "gnome-shell": "gnome-shell", "nixpkgs": "nixpkgs_9", "nur": "nur", - "systems": "systems_8", + "systems": "systems_7", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", "tinted-schemes": "tinted-schemes", @@ -1388,28 +1330,13 @@ "type": "github" } }, - "systems_9": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "terranix": { "inputs": { - "flake-parts": "flake-parts_5", + "flake-parts": "flake-parts_4", "nixpkgs": [ "nixpkgs" ], - "systems": "systems_9" + "systems": "systems_8" }, "locked": { "lastModified": 1762472226, @@ -1507,27 +1434,6 @@ } }, "treefmt-nix": { - "inputs": { - "nixpkgs": [ - "bun2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1762938485, - "narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" - } - }, - "treefmt-nix_2": { "inputs": { "nixpkgs": [ "clan-core", diff --git a/flake.nix b/flake.nix index ce29d92..d7a7508 100644 --- a/flake.nix +++ b/flake.nix @@ -88,11 +88,6 @@ url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz"; inputs.nixpkgs.follows = "nixpkgs"; }; - - bun2nix = { - url = "github:baileyluTCD/bun2nix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; }; outputs = inputs: inputs.snowfall-lib.mkFlake { diff --git a/packages/mydia/bun.lock b/packages/mydia/bun.lock deleted file mode 100644 index 94ef66d..0000000 --- a/packages/mydia/bun.lock +++ /dev/null @@ -1,99 +0,0 @@ -{ - "lockfileVersion": 1, - "workspaces": { - "": { - "name": "mydia-assets", - "dependencies": { - "alpinejs": "^3.15.1", - "hls.js": "^1.5.15", - "phoenix": "file:../deps/phoenix", - "phoenix_html": "file:../deps/phoenix_html", - "phoenix_live_view": "file:../deps/phoenix_live_view", - }, - "devDependencies": { - "@catppuccin/daisyui": "^2.1.1", - "@playwright/test": "^1.56.1", - "@tailwindcss/forms": "^0.5.7", - "@types/node": "^24.10.1", - "autoprefixer": "^10.4.16", - "daisyui": "^5.4.3", - "postcss": "^8.4.32", - "tailwindcss": "^4.0.0", - "typescript": "^5.9.3", - }, - }, - }, - "packages": { - "@catppuccin/daisyui": ["@catppuccin/daisyui@2.1.1", "", { "dependencies": { "@catppuccin/palette": "^1.7.1" }, "peerDependencies": { "tailwindcss": "^4.0.17" } }, "sha512-PrZttjj8kwfDBJ34sR+DN25Xtjvxx4T5p8uu/iiGYZR8UOsNwzMlO/alYDBwwTOLzP1NKLNRax09kCT39+QM+A=="], - - "@catppuccin/palette": ["@catppuccin/palette@1.7.1", "", {}, "sha512-aRc1tbzrevOTV7nFTT9SRdF26w/MIwT4Jwt4fDMc9itRZUDXCuEDBLyz4TQMlqO9ZP8mf5Hu4Jr6D03NLFc6Gw=="], - - "@playwright/test": ["@playwright/test@1.56.1", "", { "dependencies": { "playwright": "1.56.1" }, "bin": { "playwright": "cli.js" } }, "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg=="], - - "@tailwindcss/forms": ["@tailwindcss/forms@0.5.10", "", { "dependencies": { "mini-svg-data-uri": "^1.2.3" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" } }, "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw=="], - - "@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="], - - "@vue/reactivity": ["@vue/reactivity@3.1.5", "", { "dependencies": { "@vue/shared": "3.1.5" } }, "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg=="], - - "@vue/shared": ["@vue/shared@3.1.5", "", {}, "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA=="], - - "alpinejs": ["alpinejs@3.15.1", "", { "dependencies": { "@vue/reactivity": "~3.1.1" } }, "sha512-HLO1TtiE92VajFHtLLPK8BWaK1YepV/uj31UrfoGnQ00lyFOJZ+oVY3F0DghPAwvg8sLU79pmjGQSytERa2gEg=="], - - "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": "bin/autoprefixer" }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], - - "baseline-browser-mapping": ["baseline-browser-mapping@2.8.23", "", { "bin": "dist/cli.js" }, "sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ=="], - - "browserslist": ["browserslist@4.27.0", "", { "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", "electron-to-chromium": "^1.5.238", "node-releases": "^2.0.26", "update-browserslist-db": "^1.1.4" }, "bin": "cli.js" }, "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw=="], - - "caniuse-lite": ["caniuse-lite@1.0.30001753", "", {}, "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw=="], - - "daisyui": ["daisyui@5.4.3", "", {}, "sha512-dfDCJnN4utErGoWfElgdEE252FtfHV9Mxj5Dq1+JzUq3nVkluWdF3JYykP0Xy/y/yArnPXYztO1tLNCow3kjmg=="], - - "electron-to-chromium": ["electron-to-chromium@1.5.244", "", {}, "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw=="], - - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - - "fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], - - "fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], - - "hls.js": ["hls.js@1.6.14", "", {}, "sha512-CSpT2aXsv71HST8C5ETeVo+6YybqCpHBiYrCRQSn3U5QUZuLTSsvtq/bj+zuvjLVADeKxoebzo16OkH8m1+65Q=="], - - "mini-svg-data-uri": ["mini-svg-data-uri@1.4.4", "", { "bin": "cli.js" }, "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="], - - "nanoid": ["nanoid@3.3.11", "", { "bin": "bin/nanoid.cjs" }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - - "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], - - "normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="], - - "phoenix": ["/phoenix@file:../deps/phoenix", {}], - - "phoenix_html": ["/phoenix_html@file:../deps/phoenix_html", {}], - - "phoenix_live_view": ["/phoenix_live_view@file:../deps/phoenix_live_view", { "devDependencies": { "@playwright/test": "^1.56.1", "phoenix": "1.7.21", "typescript": "^5.8.3" } }], - - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - - "playwright": ["playwright@1.56.1", "", { "dependencies": { "playwright-core": "1.56.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": "cli.js" }, "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw=="], - - "playwright-core": ["playwright-core@1.56.1", "", { "bin": "cli.js" }, "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ=="], - - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - - "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], - - "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - - "tailwindcss": ["tailwindcss@4.1.16", "", {}, "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA=="], - - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - - "update-browserslist-db": ["update-browserslist-db@1.1.4", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A=="], - - "phoenix_live_view/phoenix": ["/phoenix@file:../deps/phoenix", {}], - } -} diff --git a/packages/mydia/bun.nix b/packages/mydia/bun.nix deleted file mode 100644 index 95a45a5..0000000 --- a/packages/mydia/bun.nix +++ /dev/null @@ -1,148 +0,0 @@ -# Autogenerated by `bun2nix`, editing manually is not recommended -# -# Set of Bun packages to install -# -# Consume this with `fetchBunDeps` (recommended) -# or `pkgs.callPackage` if you wish to handle -# it manually. -{ - copyPathToStore, - fetchFromGitHub, - fetchgit, - fetchurl, - ... -}: -{ - "@catppuccin/daisyui@2.1.1" = fetchurl { - url = "https://registry.npmjs.org/@catppuccin/daisyui/-/daisyui-2.1.1.tgz"; - hash = "sha512-PrZttjj8kwfDBJ34sR+DN25Xtjvxx4T5p8uu/iiGYZR8UOsNwzMlO/alYDBwwTOLzP1NKLNRax09kCT39+QM+A=="; - }; - "@catppuccin/palette@1.7.1" = fetchurl { - url = "https://registry.npmjs.org/@catppuccin/palette/-/palette-1.7.1.tgz"; - hash = "sha512-aRc1tbzrevOTV7nFTT9SRdF26w/MIwT4Jwt4fDMc9itRZUDXCuEDBLyz4TQMlqO9ZP8mf5Hu4Jr6D03NLFc6Gw=="; - }; - "@playwright/test@1.56.1" = fetchurl { - url = "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz"; - hash = "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg=="; - }; - "@tailwindcss/forms@0.5.10" = fetchurl { - url = "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz"; - hash = "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw=="; - }; - "@types/node@24.10.1" = fetchurl { - url = "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz"; - hash = "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="; - }; - "@vue/reactivity@3.1.5" = fetchurl { - url = "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz"; - hash = "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg=="; - }; - "@vue/shared@3.1.5" = fetchurl { - url = "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz"; - hash = "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA=="; - }; - "alpinejs@3.15.1" = fetchurl { - url = "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.1.tgz"; - hash = "sha512-HLO1TtiE92VajFHtLLPK8BWaK1YepV/uj31UrfoGnQ00lyFOJZ+oVY3F0DghPAwvg8sLU79pmjGQSytERa2gEg=="; - }; - "autoprefixer@10.4.21" = fetchurl { - url = "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz"; - hash = "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="; - }; - "baseline-browser-mapping@2.8.23" = fetchurl { - url = "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.23.tgz"; - hash = "sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ=="; - }; - "browserslist@4.27.0" = fetchurl { - url = "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz"; - hash = "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw=="; - }; - "caniuse-lite@1.0.30001753" = fetchurl { - url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz"; - hash = "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw=="; - }; - "daisyui@5.4.3" = fetchurl { - url = "https://registry.npmjs.org/daisyui/-/daisyui-5.4.3.tgz"; - hash = "sha512-dfDCJnN4utErGoWfElgdEE252FtfHV9Mxj5Dq1+JzUq3nVkluWdF3JYykP0Xy/y/yArnPXYztO1tLNCow3kjmg=="; - }; - "electron-to-chromium@1.5.244" = fetchurl { - url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz"; - hash = "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw=="; - }; - "escalade@3.2.0" = fetchurl { - url = "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz"; - hash = "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="; - }; - "fraction.js@4.3.7" = fetchurl { - url = "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz"; - hash = "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="; - }; - "fsevents@2.3.2" = fetchurl { - url = "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"; - hash = "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="; - }; - "hls.js@1.6.14" = fetchurl { - url = "https://registry.npmjs.org/hls.js/-/hls.js-1.6.14.tgz"; - hash = "sha512-CSpT2aXsv71HST8C5ETeVo+6YybqCpHBiYrCRQSn3U5QUZuLTSsvtq/bj+zuvjLVADeKxoebzo16OkH8m1+65Q=="; - }; - "mini-svg-data-uri@1.4.4" = fetchurl { - url = "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz"; - hash = "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="; - }; - "nanoid@3.3.11" = fetchurl { - url = "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz"; - hash = "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="; - }; - "node-releases@2.0.27" = fetchurl { - url = "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz"; - hash = "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="; - }; - "normalize-range@0.1.2" = fetchurl { - url = "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz"; - hash = "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="; - }; - "phoenix" = "/nix/store/phoenix"; #copyPathToStore "./file:../deps/phoenix"; - "phoenix_html" = "/nix/store/phoenix_html"; #copyPathToStore "./file:../deps/phoenix_html"; - "phoenix_live_view" = "/nix/store/phoenix_live_view"; #copyPathToStore "./file:../deps/phoenix_live_view"; - "phoenix_live_view/phoenix" = "/nix/store/phoenix_live_view__phoenix"; #copyPathToStore "./file:../deps/phoenix"; - "picocolors@1.1.1" = fetchurl { - url = "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"; - hash = "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="; - }; - "playwright-core@1.56.1" = fetchurl { - url = "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz"; - hash = "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ=="; - }; - "playwright@1.56.1" = fetchurl { - url = "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz"; - hash = "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw=="; - }; - "postcss-value-parser@4.2.0" = fetchurl { - url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"; - hash = "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="; - }; - "postcss@8.5.6" = fetchurl { - url = "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz"; - hash = "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="; - }; - "source-map-js@1.2.1" = fetchurl { - url = "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"; - hash = "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="; - }; - "tailwindcss@4.1.16" = fetchurl { - url = "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.16.tgz"; - hash = "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA=="; - }; - "typescript@5.9.3" = fetchurl { - url = "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz"; - hash = "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="; - }; - "undici-types@7.16.0" = fetchurl { - url = "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz"; - hash = "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="; - }; - "update-browserslist-db@1.1.4" = fetchurl { - url = "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz"; - hash = "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A=="; - }; -} \ No newline at end of file diff --git a/packages/mydia/package-lock.json b/packages/mydia/package-lock.json deleted file mode 100644 index ad53f59..0000000 --- a/packages/mydia/package-lock.json +++ /dev/null @@ -1,543 +0,0 @@ -{ - "name": "mydia-assets", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "mydia-assets", - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "alpinejs": "^3.15.1", - "hls.js": "^1.5.15", - "phoenix": "file:../deps/phoenix", - "phoenix_html": "file:../deps/phoenix_html", - "phoenix_live_view": "file:../deps/phoenix_live_view" - }, - "devDependencies": { - "@catppuccin/daisyui": "^2.1.1", - "@playwright/test": "^1.56.1", - "@tailwindcss/forms": "^0.5.7", - "@types/node": "^24.10.1", - "autoprefixer": "^10.4.16", - "daisyui": "^5.4.3", - "postcss": "^8.4.32", - "tailwindcss": "^4.0.0", - "typescript": "^5.9.3" - } - }, - "../deps/phoenix": { - "version": "1.8.1", - "license": "MIT", - "devDependencies": { - "@babel/cli": "7.28.3", - "@babel/core": "7.28.3", - "@babel/preset-env": "7.28.3", - "@eslint/js": "^9.28.0", - "@stylistic/eslint-plugin": "^5.0.0", - "documentation": "^14.0.3", - "eslint": "9.34.0", - "eslint-plugin-jest": "29.0.1", - "jest": "^30.0.0", - "jest-environment-jsdom": "^30.0.0", - "jsdom": "^26.1.0", - "mock-socket": "^9.3.1" - } - }, - "../deps/phoenix_html": { - "version": "4.3.0" - }, - "../deps/phoenix_live_view": { - "version": "1.1.16", - "license": "MIT", - "dependencies": { - "morphdom": "2.7.7" - }, - "devDependencies": { - "@babel/cli": "7.27.2", - "@babel/core": "7.27.4", - "@babel/preset-env": "7.27.2", - "@babel/preset-typescript": "^7.27.1", - "@eslint/js": "^9.29.0", - "@playwright/test": "^1.56.1", - "@types/jest": "^30.0.0", - "@types/phoenix": "^1.6.6", - "css.escape": "^1.5.1", - "eslint": "9.29.0", - "eslint-plugin-jest": "28.14.0", - "eslint-plugin-playwright": "^2.2.0", - "globals": "^16.2.0", - "jest": "^30.0.0", - "jest-environment-jsdom": "^30.0.0", - "jest-monocart-coverage": "^1.1.1", - "monocart-reporter": "^2.9.21", - "phoenix": "1.7.21", - "prettier": "3.5.3", - "ts-jest": "^29.4.0", - "typescript": "^5.8.3", - "typescript-eslint": "^8.34.0" - } - }, - "node_modules/@catppuccin/daisyui": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@catppuccin/daisyui/-/daisyui-2.1.1.tgz", - "integrity": "sha512-PrZttjj8kwfDBJ34sR+DN25Xtjvxx4T5p8uu/iiGYZR8UOsNwzMlO/alYDBwwTOLzP1NKLNRax09kCT39+QM+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@catppuccin/palette": "^1.7.1" - }, - "peerDependencies": { - "tailwindcss": "^4.0.17" - } - }, - "node_modules/@catppuccin/palette": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@catppuccin/palette/-/palette-1.7.1.tgz", - "integrity": "sha512-aRc1tbzrevOTV7nFTT9SRdF26w/MIwT4Jwt4fDMc9itRZUDXCuEDBLyz4TQMlqO9ZP8mf5Hu4Jr6D03NLFc6Gw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/catppuccin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/catppuccin" - } - ], - "license": "MIT" - }, - "node_modules/@playwright/test": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", - "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.56.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@tailwindcss/forms": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", - "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mini-svg-data-uri": "^1.2.3" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" - } - }, - "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", - "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.1.5" - } - }, - "node_modules/@vue/shared": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", - "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==", - "license": "MIT" - }, - "node_modules/alpinejs": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.1.tgz", - "integrity": "sha512-HLO1TtiE92VajFHtLLPK8BWaK1YepV/uj31UrfoGnQ00lyFOJZ+oVY3F0DghPAwvg8sLU79pmjGQSytERa2gEg==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "~3.1.1" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.8.23", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.23.tgz", - "integrity": "sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/browserslist": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", - "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.8.19", - "caniuse-lite": "^1.0.30001751", - "electron-to-chromium": "^1.5.238", - "node-releases": "^2.0.26", - "update-browserslist-db": "^1.1.4" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001753", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz", - "integrity": "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/daisyui": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.4.3.tgz", - "integrity": "sha512-dfDCJnN4utErGoWfElgdEE252FtfHV9Mxj5Dq1+JzUq3nVkluWdF3JYykP0Xy/y/yArnPXYztO1tLNCow3kjmg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/saadeghi/daisyui?sponsor=1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.244", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz", - "integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==", - "dev": true, - "license": "ISC" - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/hls.js": { - "version": "1.6.14", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.14.tgz", - "integrity": "sha512-CSpT2aXsv71HST8C5ETeVo+6YybqCpHBiYrCRQSn3U5QUZuLTSsvtq/bj+zuvjLVADeKxoebzo16OkH8m1+65Q==", - "license": "Apache-2.0" - }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "dev": true, - "license": "MIT", - "bin": { - "mini-svg-data-uri": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/phoenix": { - "resolved": "../deps/phoenix", - "link": true - }, - "node_modules/phoenix_html": { - "resolved": "../deps/phoenix_html", - "link": true - }, - "node_modules/phoenix_live_view": { - "resolved": "../deps/phoenix_live_view", - "link": true - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/playwright": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", - "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.56.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", - "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tailwindcss": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.16.tgz", - "integrity": "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, - "license": "MIT" - }, - "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - } - } -} diff --git a/packages/mydia/package.json b/packages/mydia/package.json deleted file mode 100644 index 165a236..0000000 --- a/packages/mydia/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "mydia-assets", - "version": "0.1.0", - "description": "Mydia - Modern Media Management Platform", - "repository": {}, - "license": "MIT", - "scripts": { - "deploy": "cd .. && mix assets.deploy && rm -f _build/esbuild*", - "screenshots": "node screenshots.js", - "populate-media": "node populate-media.js", - "test:e2e": "playwright test", - "test:e2e:ui": "playwright test --ui", - "test:e2e:debug": "playwright test --debug", - "test:e2e:headed": "playwright test --headed", - "test:e2e:chromium": "playwright test --project=chromium", - "test:e2e:firefox": "playwright test --project=firefox", - "test:e2e:webkit": "playwright test --project=webkit" - }, - "dependencies": { - "alpinejs": "^3.15.1", - "hls.js": "^1.5.15", - "phoenix": "file:../deps/phoenix", - "phoenix_html": "file:../deps/phoenix_html", - "phoenix_live_view": "file:../deps/phoenix_live_view" - }, - "devDependencies": { - "@catppuccin/daisyui": "^2.1.1", - "@playwright/test": "^1.56.1", - "@tailwindcss/forms": "^0.5.7", - "@types/node": "^24.10.1", - "autoprefixer": "^10.4.16", - "daisyui": "^5.4.3", - "postcss": "^8.4.32", - "tailwindcss": "^4.0.0", - "typescript": "^5.9.3" - } -} diff --git a/shells/default/default.nix b/shells/default/default.nix index 248cefd..ffe74f1 100644 --- a/shells/default/default.nix +++ b/shells/default/default.nix @@ -8,6 +8,5 @@ mkShell { yq pwgen inputs.clan-core.packages.${stdenv.hostPlatform.system}.clan-cli - inputs.bun2nix.packages.${stdenv.hostPlatform.system}.default ]; } \ No newline at end of file -- 2.51.2 From 93ad4f17f3c46a325148ae6890d79a89150c761a Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Wed, 26 Nov 2025 16:35:52 +0100 Subject: [PATCH 03/22] still complaining about missing ffmpeg.... --- packages/mydia/default.nix | 110 +++++-------------------------------- 1 file changed, 15 insertions(+), 95 deletions(-) diff --git a/packages/mydia/default.nix b/packages/mydia/default.nix index 57fdd4c..73f4cc9 100644 --- a/packages/mydia/default.nix +++ b/packages/mydia/default.nix @@ -31,115 +31,35 @@ let }; mixFodDeps = erlangPackages.fetchMixDeps { inherit version src; - pname = "${pname}-mix-deps"; + pname = "mix-deps-${pname}"; hash = "sha256-19q56IZe8YjuUBXirFGgmBsewJ0cmdOoO1yfiMaWGWk="; }; - bunDeps = bun2nix.fetchBunDeps { - bunNix = ./bun.nix; - overrides = { - "phoenix" = pkg: pkgs.runCommandLocal "override-phoenix" {} '' - mkdir $out - echo "je moeder!" > $out/kaas.txt - ''; - "phoenix_html" = pkg: pkgs.runCommandLocal "override-phoenix_html" {} '' - mkdir $out - echo "je moeder!" > $out/kaas.txt - ''; - "phoenix_live_view" = pkg: pkgs.runCommandLocal "override-phoenix_live_view" {} '' - mkdir $out - echo "je moeder!" > $out/kaas.txt - ''; - "phoenix_live_view/phoenix" = pkg: pkgs.runCommandLocal "override-phoenix_live_view__phoenix" {} '' - mkdir $out - echo "je moeder!" > $out/kaas.txt - ''; - }; + npmFodDeps= pkgs.fetchNpmDeps { + src = "${src}/assets"; + hash = "sha256-0cz75pxhxvzo1RogsV8gTP6GrgLIboWQXcKpq42JZ6o="; }; in erlangPackages.mixRelease { - inherit pname version src mixFodDeps bunDeps; + inherit pname version src mixFodDeps; - nativeBuildInputs = with pkgs; [ ffmpeg_7-headless pkg-config bun2nix.hook ]; - - dontUseBunPatch = true; - dontUseBunBuild = true; + nativeBuildInputs = with pkgs; [ + # ffmpeg_7 + # pkg-config + # tailwindcss + ]; + buildInputs = with pkgs; [ + ffmpeg_7 + pkg-config + ]; preInstall = '' ln -s ${pkgs.tailwindcss}/bin/tailwind _build/tailwind-${translatedPlatform} ln -s ${pkgs.esbuild}/bin/esbuild _build/esbuild-${translatedPlatform} - ln -s ${bunDeps}/node_modules assets/node_modules + ln -s ${npmFodDeps} assets/node_modules ${mix} assets.deploy ''; - # nativeBuildInputs = with pkgs; [ - # elixir - # rebar - # hex - # git - # bun - # postgresql - # curl - # ffmpeg_7-headless - # fdk_aac - # pkg-config - # ]; - - # buildPhase = '' - # runHook preBuild - - # # Prepare environment - # DATABASE_TYPE="postgres" - - # # I don't think this is needed, but lets copy the dockerfile for now - # mkdir -p ./app - # cp mix.exs ./app - # cp mix.lock ./app - # cd ./app - - # # Install dependencies - # ${mix} deps.get --only prod && ${mix} deps.compile - # pwd - # ls -al - - # # Copy source - # echo "Copy source" - # cp -r ../config ./config - # cp -r ../priv ./priv - # cp -r ../lib ./lib - # cp -r ../assets ./assets - - # # Compile app - # echo "Compile app" - # ${mix} compile - - # # Build assets - # echo "Build assets" - # $(cd ./assets && bun i --silent --production --frozen-lockfile) - # ${mix} assets.deploy - - # # Build executabe - # echo "Build executabe" - # ${mix} release - - # bun run build --bun - - # runHook postBuild - # ''; - - # installPhase = '' - # runHook preInstall - - # mkdir -p $out - # cp -r ./.output/* $out - - # makeWrapper ${lib.getExe pkgs.bun} $out/bin/${pname} \ - # --chdir $out \ - # --append-flags "server/index.mjs" - - # runHook postInstall - # ''; - meta = { description = "Your personal media companion, built with Phoenix LiveView"; longDescription = '' -- 2.51.2 From 95520c14d1790a731261dbc38d81ca49e6b4b0b9 Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Thu, 27 Nov 2025 11:05:35 +0100 Subject: [PATCH 04/22] chore: refactor code --- packages/mydia/default.nix | 124 ++++++++++++++++++++----------------- shells/default/default.nix | 14 ++++- 2 files changed, 78 insertions(+), 60 deletions(-) diff --git a/packages/mydia/default.nix b/packages/mydia/default.nix index 73f4cc9..06516a2 100644 --- a/packages/mydia/default.nix +++ b/packages/mydia/default.nix @@ -1,15 +1,12 @@ -{ lib, inputs, fetchFromGitHub, pkgs, stdenv, ... }: -let - erl = pkgs.beam.interpreters.erlang_28; - erlangPackages = pkgs.beam.packagesWith erl; - - elixir = erlangPackages.elixir; - mix = "${elixir}/bin/mix"; - rebar = erlangPackages.rebar; - hex = erlangPackages.hex; - - bun = pkgs.bun; - bun2nix = inputs.bun2nix.packages.${stdenv.hostPlatform.system}.default; +{ + lib, + fetchFromGitHub, + pkgs, + stdenv, + ... +}: let + erlang = pkgs.beam.packagesWith pkgs.beam.interpreters.erlang; + mix = "${erlang.elixir}/bin/mix"; translatedPlatform = { @@ -19,8 +16,10 @@ let x86_64-darwin = "macos-x64"; x86_64-linux = "linux-x64"; } - .${stdenv.hostPlatform.system}; - + .${ + stdenv.hostPlatform.system + }; + version = "v0.6.0"; pname = "mydia"; src = fetchFromGitHub { @@ -29,62 +28,73 @@ let rev = version; hash = "sha256-JGT52ulnqcx8o+3e0l50TLAwLIWXEI8nwFGUsA95vH0="; }; - mixFodDeps = erlangPackages.fetchMixDeps { + mixFodDeps = erlang.fetchMixDeps { inherit version src; - pname = "mix-deps-${pname}"; + pname = "mix-deps-${pname}-${version}"; hash = "sha256-19q56IZe8YjuUBXirFGgmBsewJ0cmdOoO1yfiMaWGWk="; + + DATABASE_TYPE = "postgres"; }; - npmFodDeps= pkgs.fetchNpmDeps { + npmFodDeps = pkgs.fetchNpmDeps { src = "${src}/assets"; hash = "sha256-0cz75pxhxvzo1RogsV8gTP6GrgLIboWQXcKpq42JZ6o="; }; in -erlangPackages.mixRelease { - inherit pname version src mixFodDeps; + erlang.mixRelease { + inherit pname version src mixFodDeps; - nativeBuildInputs = with pkgs; [ - # ffmpeg_7 - # pkg-config - # tailwindcss - ]; - buildInputs = with pkgs; [ - ffmpeg_7 - pkg-config - ]; + enableDebugInfo = true; - preInstall = '' - ln -s ${pkgs.tailwindcss}/bin/tailwind _build/tailwind-${translatedPlatform} - ln -s ${pkgs.esbuild}/bin/esbuild _build/esbuild-${translatedPlatform} - ln -s ${npmFodDeps} assets/node_modules + nativeBuildInputs = with pkgs; [ + ffmpeg_6 + fdk_aac + sqlite + postgresql + pkg-config + ]; + buildInputs = with pkgs; [ + ffmpeg_6 + fdk_aac + sqlite + postgresql + pkg-config + ]; - ${mix} assets.deploy - ''; + DATABASE_TYPE = "postgres"; - meta = { - description = "Your personal media companion, built with Phoenix LiveView"; - longDescription = '' - A modern, self-hosted media management platform for tracking, organizing, and monitoring your media library. + preInstall = '' + ln -s ${pkgs.tailwindcss}/bin/tailwind _build/tailwind-${translatedPlatform} + ln -s ${pkgs.esbuild}/bin/esbuild _build/esbuild-${translatedPlatform} + ln -s ${npmFodDeps} assets/node_modules - # ✨ Features - - - 📺 Unified Media Management – Track both movies and TV shows with rich metadata from TMDB/TVDB - - 🤖 Automated Downloads – Background search and download with quality profiles and smart release ranking - - ⬇️ Download Clients – qBittorrent, Transmission, SABnzbd, and NZBGet support - - 🔎 Indexer Integration – Search via Prowlarr and Jackett for finding releases - - 📚 Built-in Indexer Library – Native Cardigann support (experimental, limited testing) - - 👥 Multi-User System – Built-in admin/guest roles with request approval workflow - - 🔐 SSO Support – Local authentication plus OIDC/OpenID Connect integration - - 🔔 Release Calendar – Track upcoming releases and monitor episodes - - 🎨 Modern Real-Time UI – Phoenix LiveView with instant updates and responsive design + ${mix} assets.deploy ''; - homepage = "https://github.com/getmydia/mydia"; - changelog = "https://github.com/getmydia/mydia/releases"; - license = lib.licenses.agpl3Only; + meta = { + description = "Your personal media companion, built with Phoenix LiveView"; + longDescription = '' + A modern, self-hosted media management platform for tracking, organizing, and monitoring your media library. - maintainers = []; + # ✨ Features - platforms = lib.platforms.all; - mainProgram = pname; - }; -} \ No newline at end of file + - 📺 Unified Media Management – Track both movies and TV shows with rich metadata from TMDB/TVDB + - 🤖 Automated Downloads – Background search and download with quality profiles and smart release ranking + - ⬇️ Download Clients – qBittorrent, Transmission, SABnzbd, and NZBGet support + - 🔎 Indexer Integration – Search via Prowlarr and Jackett for finding releases + - 📚 Built-in Indexer Library – Native Cardigann support (experimental, limited testing) + - 👥 Multi-User System – Built-in admin/guest roles with request approval workflow + - 🔐 SSO Support – Local authentication plus OIDC/OpenID Connect integration + - 🔔 Release Calendar – Track upcoming releases and monitor episodes + - 🎨 Modern Real-Time UI – Phoenix LiveView with instant updates and responsive design + ''; + + homepage = "https://github.com/getmydia/mydia"; + changelog = "https://github.com/getmydia/mydia/releases"; + license = lib.licenses.agpl3Only; + + maintainers = []; + + platforms = lib.platforms.all; + mainProgram = pname; + }; + } diff --git a/shells/default/default.nix b/shells/default/default.nix index ffe74f1..03756be 100644 --- a/shells/default/default.nix +++ b/shells/default/default.nix @@ -1,5 +1,10 @@ -{ mkShell, inputs, pkgs, stdenv, ... }: - +{ + mkShell, + inputs, + pkgs, + stdenv, + ... +}: mkShell { packages = with pkgs; [ bash @@ -7,6 +12,9 @@ mkShell { just yq pwgen + alejandra + nil + nixd inputs.clan-core.packages.${stdenv.hostPlatform.system}.clan-cli ]; -} \ No newline at end of file +} -- 2.51.2 From f6a504667ef6bd955c703295ea51c92cc2de8970 Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Thu, 27 Nov 2025 16:28:33 +0100 Subject: [PATCH 05/22] feat: fix most issues with mydia --- packages/mydia/default.nix | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/packages/mydia/default.nix b/packages/mydia/default.nix index 06516a2..769bef3 100644 --- a/packages/mydia/default.nix +++ b/packages/mydia/default.nix @@ -6,9 +6,8 @@ ... }: let erlang = pkgs.beam.packagesWith pkgs.beam.interpreters.erlang; - mix = "${erlang.elixir}/bin/mix"; - translatedPlatform = + erlangSystem = { aarch64-darwin = "macos-arm64"; aarch64-linux = "linux-arm64"; @@ -32,8 +31,6 @@ inherit version src; pname = "mix-deps-${pname}-${version}"; hash = "sha256-19q56IZe8YjuUBXirFGgmBsewJ0cmdOoO1yfiMaWGWk="; - - DATABASE_TYPE = "postgres"; }; npmFodDeps = pkgs.fetchNpmDeps { src = "${src}/assets"; @@ -46,28 +43,32 @@ in enableDebugInfo = true; nativeBuildInputs = with pkgs; [ + which ffmpeg_6 fdk_aac sqlite postgresql - pkg-config - ]; - buildInputs = with pkgs; [ - ffmpeg_6 - fdk_aac - sqlite - postgresql + tailwindcss_4 + esbuild pkg-config ]; - DATABASE_TYPE = "postgres"; + env = { + EXQLITE_USE_SYSTEM = "1"; + EXQLITE_SYSTEM_CFLAGS = "-I${pkgs.sqlite.dev}/include"; + EXQLITE_SYSTEM_LDFLAGS = "-L${pkgs.sqlite.out}/lib -lsqlite3"; + DATABASE_TYPE = "postgres"; + }; preInstall = '' - ln -s ${pkgs.tailwindcss}/bin/tailwind _build/tailwind-${translatedPlatform} - ln -s ${pkgs.esbuild}/bin/esbuild _build/esbuild-${translatedPlatform} + ln -s ${lib.getExe pkgs.tailwindcss_4} _build/tailwind-${erlangSystem} + ln -s ${lib.getExe pkgs.esbuild} _build/esbuild-${erlangSystem} ln -s ${npmFodDeps} assets/node_modules - ${mix} assets.deploy + mix do \ + deps.loadpaths --no-deps-check, \ + tailwind default --minify + esbuild default --minify + phx.digest, \ + assets.deploy ''; meta = { -- 2.51.2 From f04b540efb87db2dc04bfb151dc56c19ffcd5be6 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 1 Dec 2025 09:03:21 +0000 Subject: [PATCH 06/22] chore(secrets): set secret "mydia/oidc_id" for machine "ulmo" --- systems/x86_64-linux/ulmo/secrets.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/systems/x86_64-linux/ulmo/secrets.yml b/systems/x86_64-linux/ulmo/secrets.yml index 7a26401..535bd07 100644 --- a/systems/x86_64-linux/ulmo/secrets.yml +++ b/systems/x86_64-linux/ulmo/secrets.yml @@ -19,6 +19,8 @@ lidarr: apikey: ENC[AES256_GCM,data:I2eKaxidmxem7C7ukmyIfwASNqrkS4vEOiCcU5kSNY6DR0pXsYg0PBdgu8vzK6llbXODLdG5t55BordIWvVRJGAauo0FMvtp59NSNpza7cK68tdKGvNefD6bqhUIR06BY11niQ==,iv:48AD7cd17TlWY5yAagepLOIVwgxhD/d13Pnup6GsWDA=,tag:teOVtW8opE99hqAXQwvlrA==,type:str] prowlarr: apikey: ENC[AES256_GCM,data:pyZ2WGEs/PlIdhDsQq2TPGJbplkd5fLF0ZkBjITqIJlnAzYHb+rl+KOM4rHqQcI6yAJM8X1Y3ymGrD7vG7GiRxB7yoEG13SKhZIWOddTnxIhbkz81RfrL2fUJIydOaP6sS//9Q==,iv:Tr6MWoC6nC7rdVTOjT1T2itT+lVL4GnUiAr5/+IHAs0=,tag:keIJNuGeVht8+xSN3FnBGA==,type:str] +mydia: + oidc_id: ENC[AES256_GCM,data:ymZdkUjbbTuJuGvI5T9d,iv:ccKpjKnzUH+/sGEBnmxnMNU3lY+j8NPUjvj8q4phprs=,tag:11H0Vd28gPajyU+3uAUYUQ==,type:str] sops: age: - recipient: age19qfpf980tadguqq44zf6xwvjvl428dyrj46ha3n6aeqddwhtnuqqml7etq @@ -39,7 +41,7 @@ sops: TTRWaHhpNWlkVDFmMFN4ZTNHMUxyNVkKV693pzTKRkZboQCMPr9IyMGSgxfuHXcb Y6BNcp6Qg6PWtX5QI7wRkPNINAK1TEbRBba+b8h6gMmVU4DliQyFiQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-11-19T09:51:26Z" - mac: ENC[AES256_GCM,data:pMMkxHPochpI8si/oHhU7MHqC1JjNhMP7HCRNQQEkwBQI489xiC02t+qUwpmG4oIheqi8lEcZPpL4t9HzRN9sZImaI2LrJn3cHFojHzXzo7FPfvfUilZe1+JXLfm+wn+bflAEutIcfDiZc/MjiKOxRHwZy5Pr41Mj6uPIUr62zk=,iv:GwvMVgJ6m1DQcRZMVzshbuMK/Kx8vE8Ym83KbxuvYRg=,tag:wVSol9LDRzoFjQppB8J9gA==,type:str] + lastmodified: "2025-12-01T09:03:20Z" + mac: ENC[AES256_GCM,data:rdsebviO54N08/Fq/CaaVscWN2rnnVtUZMcGrmTLIwIWdmkbPRWTirbDUt4QajJ6J1ws522jW9LdJ2ndNUPjPApSmk9UUrnmRlo2GNd2A3x/J+tqztCoObzCH6M+v/5XHEx0dv67QO0koY7HH4CbJKqMSYIoKsZxGcKJLb28z+o=,iv:L/jdRsgL0kw2lsHYFHtcPRcbslDUzE9hEcL6tbVYnzA=,tag:bMWA+kKP885FehbQwvW8vA==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 -- 2.51.2 From 1ee19c886567ea88734dcf8b21c7a78efd968ff6 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 1 Dec 2025 09:03:28 +0000 Subject: [PATCH 07/22] chore(secrets): set secret "mydia/oidc_secret" for machine "ulmo" --- systems/x86_64-linux/ulmo/secrets.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/systems/x86_64-linux/ulmo/secrets.yml b/systems/x86_64-linux/ulmo/secrets.yml index 535bd07..38b0d1d 100644 --- a/systems/x86_64-linux/ulmo/secrets.yml +++ b/systems/x86_64-linux/ulmo/secrets.yml @@ -21,6 +21,7 @@ prowlarr: apikey: ENC[AES256_GCM,data:pyZ2WGEs/PlIdhDsQq2TPGJbplkd5fLF0ZkBjITqIJlnAzYHb+rl+KOM4rHqQcI6yAJM8X1Y3ymGrD7vG7GiRxB7yoEG13SKhZIWOddTnxIhbkz81RfrL2fUJIydOaP6sS//9Q==,iv:Tr6MWoC6nC7rdVTOjT1T2itT+lVL4GnUiAr5/+IHAs0=,tag:keIJNuGeVht8+xSN3FnBGA==,type:str] mydia: oidc_id: ENC[AES256_GCM,data:ymZdkUjbbTuJuGvI5T9d,iv:ccKpjKnzUH+/sGEBnmxnMNU3lY+j8NPUjvj8q4phprs=,tag:11H0Vd28gPajyU+3uAUYUQ==,type:str] + oidc_secret: ENC[AES256_GCM,data:N7qdoueB9ayGx0RWdw/w,iv:k09TaKjNShaFWImZ82Fjqvjj4CPVIqVhCPZ7o1DgjX4=,tag:q+HMYN4zd7pFqCX90uaWgQ==,type:str] sops: age: - recipient: age19qfpf980tadguqq44zf6xwvjvl428dyrj46ha3n6aeqddwhtnuqqml7etq @@ -41,7 +42,7 @@ sops: TTRWaHhpNWlkVDFmMFN4ZTNHMUxyNVkKV693pzTKRkZboQCMPr9IyMGSgxfuHXcb Y6BNcp6Qg6PWtX5QI7wRkPNINAK1TEbRBba+b8h6gMmVU4DliQyFiQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-12-01T09:03:20Z" - mac: ENC[AES256_GCM,data:rdsebviO54N08/Fq/CaaVscWN2rnnVtUZMcGrmTLIwIWdmkbPRWTirbDUt4QajJ6J1ws522jW9LdJ2ndNUPjPApSmk9UUrnmRlo2GNd2A3x/J+tqztCoObzCH6M+v/5XHEx0dv67QO0koY7HH4CbJKqMSYIoKsZxGcKJLb28z+o=,iv:L/jdRsgL0kw2lsHYFHtcPRcbslDUzE9hEcL6tbVYnzA=,tag:bMWA+kKP885FehbQwvW8vA==,type:str] + lastmodified: "2025-12-01T09:03:27Z" + mac: ENC[AES256_GCM,data:q+gsAFJwt8yKY71ieBejVgJkZjZ0glBKTOoOahISS43xgJzs2y+QhWPfGnYsTxxKbG/hJiP0QA4ZjoIhhf+YEy6BQypNSOvxcZzzdQB43LDEeEwIj0QuwyiyH3X4YStlkBY7t69ju/E4X2x46n8Ajm/qAP3U0+hxoVOITLp8gjQ=,iv:wscK5N/WBMvQGxo9W3Jn1/JCUpzwJKvSBIxALNsgoYI=,tag:7xUd3QcBfmaJk6UaPPwIOw==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 -- 2.51.2 From 413af80f9c5cfe41fe746d8afadcb9ff5cde1563 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 1 Dec 2025 09:04:18 +0000 Subject: [PATCH 08/22] chore(secrets): set secret "mydia/secret_key_base" for machine "ulmo" --- systems/x86_64-linux/ulmo/secrets.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/systems/x86_64-linux/ulmo/secrets.yml b/systems/x86_64-linux/ulmo/secrets.yml index 38b0d1d..3eb3ff7 100644 --- a/systems/x86_64-linux/ulmo/secrets.yml +++ b/systems/x86_64-linux/ulmo/secrets.yml @@ -22,6 +22,7 @@ prowlarr: mydia: oidc_id: ENC[AES256_GCM,data:ymZdkUjbbTuJuGvI5T9d,iv:ccKpjKnzUH+/sGEBnmxnMNU3lY+j8NPUjvj8q4phprs=,tag:11H0Vd28gPajyU+3uAUYUQ==,type:str] oidc_secret: ENC[AES256_GCM,data:N7qdoueB9ayGx0RWdw/w,iv:k09TaKjNShaFWImZ82Fjqvjj4CPVIqVhCPZ7o1DgjX4=,tag:q+HMYN4zd7pFqCX90uaWgQ==,type:str] + secret_key_base: "" sops: age: - recipient: age19qfpf980tadguqq44zf6xwvjvl428dyrj46ha3n6aeqddwhtnuqqml7etq @@ -42,7 +43,7 @@ sops: TTRWaHhpNWlkVDFmMFN4ZTNHMUxyNVkKV693pzTKRkZboQCMPr9IyMGSgxfuHXcb Y6BNcp6Qg6PWtX5QI7wRkPNINAK1TEbRBba+b8h6gMmVU4DliQyFiQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-12-01T09:03:27Z" - mac: ENC[AES256_GCM,data:q+gsAFJwt8yKY71ieBejVgJkZjZ0glBKTOoOahISS43xgJzs2y+QhWPfGnYsTxxKbG/hJiP0QA4ZjoIhhf+YEy6BQypNSOvxcZzzdQB43LDEeEwIj0QuwyiyH3X4YStlkBY7t69ju/E4X2x46n8Ajm/qAP3U0+hxoVOITLp8gjQ=,iv:wscK5N/WBMvQGxo9W3Jn1/JCUpzwJKvSBIxALNsgoYI=,tag:7xUd3QcBfmaJk6UaPPwIOw==,type:str] + lastmodified: "2025-12-01T09:04:17Z" + mac: ENC[AES256_GCM,data:SQ/4V10qCuaYqojCXmB8lFYDva44CQCitmBTT4boC/rhzt9YmPBGqqu5VSc4tddpcWoXAv2TEfzbzugZfOzAcdK55xqKbzY5tYYzomG0uk0obLytTaBhlMNbTByykBYhjzY8UXb+ZBZvpstr+L6QqZ6jneXwGYAb82J9i/ndnSw=,iv:DRQZWziOmjdM82JP3qiCZvLncptetoMD4222//yGoeg=,tag:7yhmKeUF9I2VKQYoOMB/yw==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 -- 2.51.2 From 11dc6e33d6c3756e7b42eb3bacb44372468653a2 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 1 Dec 2025 09:04:53 +0000 Subject: [PATCH 09/22] chore(secrets): set secret "mydia/secret_key_base" for machine "ulmo" --- systems/x86_64-linux/ulmo/secrets.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/systems/x86_64-linux/ulmo/secrets.yml b/systems/x86_64-linux/ulmo/secrets.yml index 3eb3ff7..bae2e49 100644 --- a/systems/x86_64-linux/ulmo/secrets.yml +++ b/systems/x86_64-linux/ulmo/secrets.yml @@ -22,7 +22,7 @@ prowlarr: mydia: oidc_id: ENC[AES256_GCM,data:ymZdkUjbbTuJuGvI5T9d,iv:ccKpjKnzUH+/sGEBnmxnMNU3lY+j8NPUjvj8q4phprs=,tag:11H0Vd28gPajyU+3uAUYUQ==,type:str] oidc_secret: ENC[AES256_GCM,data:N7qdoueB9ayGx0RWdw/w,iv:k09TaKjNShaFWImZ82Fjqvjj4CPVIqVhCPZ7o1DgjX4=,tag:q+HMYN4zd7pFqCX90uaWgQ==,type:str] - secret_key_base: "" + secret_key_base: ENC[AES256_GCM,data:yG7HJ5r74Qtxbeyf8F6dA0uHv2pQ8YAJKlKiKjS+m24JRvJWQaTThJ+c5HbuUa6R3e9XtVHchhlVPkF0Is/b+g==,iv:v65xdRr4JdKZmBtjZ08/J3LLqnphSGt9QfVPNQ2x/xg=,tag:n7tD2dhr4IJn1LWM9WW8UA==,type:str] sops: age: - recipient: age19qfpf980tadguqq44zf6xwvjvl428dyrj46ha3n6aeqddwhtnuqqml7etq @@ -43,7 +43,7 @@ sops: TTRWaHhpNWlkVDFmMFN4ZTNHMUxyNVkKV693pzTKRkZboQCMPr9IyMGSgxfuHXcb Y6BNcp6Qg6PWtX5QI7wRkPNINAK1TEbRBba+b8h6gMmVU4DliQyFiQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-12-01T09:04:17Z" - mac: ENC[AES256_GCM,data:SQ/4V10qCuaYqojCXmB8lFYDva44CQCitmBTT4boC/rhzt9YmPBGqqu5VSc4tddpcWoXAv2TEfzbzugZfOzAcdK55xqKbzY5tYYzomG0uk0obLytTaBhlMNbTByykBYhjzY8UXb+ZBZvpstr+L6QqZ6jneXwGYAb82J9i/ndnSw=,iv:DRQZWziOmjdM82JP3qiCZvLncptetoMD4222//yGoeg=,tag:7yhmKeUF9I2VKQYoOMB/yw==,type:str] + lastmodified: "2025-12-01T09:04:52Z" + mac: ENC[AES256_GCM,data:2qNJvVO7pQuBk1UWMQ/MvGrepDwuk7E4vcUJ/xkUjMVizq03VAxgtZyIpVRP2kgC79XmIwUi9YFK0Ndno2ZAUOyOZqhTUBgK5H6F26Sfv5CoN62yyYBD382yE1VUSicvQk7++knoIAsLOgrUhQKyxhzmpK1SoC0MEFW+rR/do6s=,iv:8jIugT0vCSGxdsqoIQXg1ybtHcZ1c5+uqBXDm0VsEdk=,tag:9UnKMznQWumtEB+WFX4EGg==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 -- 2.51.2 From e6829d99ce9291fad077641feaa83e0d3efa61f5 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 1 Dec 2025 09:05:12 +0000 Subject: [PATCH 10/22] chore(secrets): set secret "mydia/guardian_secret" for machine "ulmo" --- systems/x86_64-linux/ulmo/secrets.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/systems/x86_64-linux/ulmo/secrets.yml b/systems/x86_64-linux/ulmo/secrets.yml index bae2e49..b0d432e 100644 --- a/systems/x86_64-linux/ulmo/secrets.yml +++ b/systems/x86_64-linux/ulmo/secrets.yml @@ -23,6 +23,7 @@ mydia: oidc_id: ENC[AES256_GCM,data:ymZdkUjbbTuJuGvI5T9d,iv:ccKpjKnzUH+/sGEBnmxnMNU3lY+j8NPUjvj8q4phprs=,tag:11H0Vd28gPajyU+3uAUYUQ==,type:str] oidc_secret: ENC[AES256_GCM,data:N7qdoueB9ayGx0RWdw/w,iv:k09TaKjNShaFWImZ82Fjqvjj4CPVIqVhCPZ7o1DgjX4=,tag:q+HMYN4zd7pFqCX90uaWgQ==,type:str] secret_key_base: ENC[AES256_GCM,data:yG7HJ5r74Qtxbeyf8F6dA0uHv2pQ8YAJKlKiKjS+m24JRvJWQaTThJ+c5HbuUa6R3e9XtVHchhlVPkF0Is/b+g==,iv:v65xdRr4JdKZmBtjZ08/J3LLqnphSGt9QfVPNQ2x/xg=,tag:n7tD2dhr4IJn1LWM9WW8UA==,type:str] + guardian_secret: ENC[AES256_GCM,data:OjnNFSHlecL+qXwlhTm++itRM6ga5E5KrSJxbgIUpbMEkIWgu3xhRtnPdipXbedgall0XdO/s+jnWCagZX94BA==,iv:DukdKvm9vey8BWUiml20tgA/Vji1XVX4+sUPge9nTk0=,tag:q3HdvgUYqR0APiaFz0ul5Q==,type:str] sops: age: - recipient: age19qfpf980tadguqq44zf6xwvjvl428dyrj46ha3n6aeqddwhtnuqqml7etq @@ -43,7 +44,7 @@ sops: TTRWaHhpNWlkVDFmMFN4ZTNHMUxyNVkKV693pzTKRkZboQCMPr9IyMGSgxfuHXcb Y6BNcp6Qg6PWtX5QI7wRkPNINAK1TEbRBba+b8h6gMmVU4DliQyFiQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-12-01T09:04:52Z" - mac: ENC[AES256_GCM,data:2qNJvVO7pQuBk1UWMQ/MvGrepDwuk7E4vcUJ/xkUjMVizq03VAxgtZyIpVRP2kgC79XmIwUi9YFK0Ndno2ZAUOyOZqhTUBgK5H6F26Sfv5CoN62yyYBD382yE1VUSicvQk7++knoIAsLOgrUhQKyxhzmpK1SoC0MEFW+rR/do6s=,iv:8jIugT0vCSGxdsqoIQXg1ybtHcZ1c5+uqBXDm0VsEdk=,tag:9UnKMznQWumtEB+WFX4EGg==,type:str] + lastmodified: "2025-12-01T09:05:11Z" + mac: ENC[AES256_GCM,data:6gFet+aW7tlQqy4aSulBTJ+mYpu1OxfK8Wa3noXNNDlFwTEpCWEhdwFDqWZ+sd5opINQoPrHD23BwiXYoJtKPeLd9/kpn//CgHvYcwgGDpPzCMbyDOLutlspyY4pfYrEezm8+yg3r5TkJK3o7U2Q8kkfdQQcfEGIsr9GDRKSplw=,iv:PYclBivPBifGreNWeCCZ74koSb51xBMYeviHf0SaxbA=,tag:Lb+vlcBUgpJE0XfJ/gwDiw==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 -- 2.51.2 From afbf168c352abefe59247c387cec1c2d018bc065 Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Mon, 1 Dec 2025 14:14:32 +0100 Subject: [PATCH 11/22] kaas --- .just/machine.just | 20 +-- .just/vars.just | 70 +++++----- .justfile | 64 ++++----- flake.lock | 129 ++++++++++++++---- flake.nix | 75 +++++----- modules/home/application/steam/default.nix | 110 +++++++-------- .../home/application/teamspeak/default.nix | 30 ++-- .../authentication/zitadel/default.nix | 124 ++++++++--------- .../services/communication/matrix/default.nix | 24 ++-- .../services/development/forgejo/default.nix | 20 +-- .../nixos/services/media/mydia/default.nix | 51 +++++++ .../nixos/services/media/servarr/default.nix | 115 +++++++++------- modules/nixos/shells/default.nix | 7 +- packages/mydia/default.nix | 101 -------------- shells/default/default.nix | 1 + systems/x86_64-linux/ulmo/default.nix | 67 +++++---- 16 files changed, 541 insertions(+), 467 deletions(-) create mode 100644 modules/nixos/services/media/mydia/default.nix delete mode 100644 packages/mydia/default.nix diff --git a/.just/machine.just b/.just/machine.just index cbdf345..1ab5ca8 100644 --- a/.just/machine.just +++ b/.just/machine.just @@ -1,11 +1,11 @@ -@_default: list - -[doc('List machines')] -@list: - ls -1 ../systems/x86_64-linux/ - -[no-exit-message] -[doc('Update the target machine')] -@update machine: - just assert '-d "../systems/x86_64-linux/{{ machine }}"' "Machine {{ machine }} does not exist, must be one of: $(ls ../systems/x86_64-linux/ | tr '\n' ' ')" +@_default: list + +[doc('List machines')] +@list: + ls -1 ../systems/x86_64-linux/ + +[no-exit-message] +[doc('Update the target machine')] +@update machine: + just assert '-d "../systems/x86_64-linux/{{ machine }}"' "Machine {{ machine }} does not exist, must be one of: $(ls ../systems/x86_64-linux/ | tr '\n' ' ')" nixos-rebuild switch --use-remote-sudo --target-host {{ machine }} --flake ..#{{ machine }} \ No newline at end of file diff --git a/.just/vars.just b/.just/vars.just index d8bd181..0d381ef 100644 --- a/.just/vars.just +++ b/.just/vars.just @@ -1,36 +1,36 @@ -set unstable - -base_path := invocation_directory() / "systems/x86_64-linux" -# sops := "nix shell nixpkgs#sops --command sops" -# yq := "nix shell nixpkgs#yq --command yq" -sops := "sops" -yq := "yq" - -@_default: - just --list - -[doc('list all vars of the target machine')] -list machine: - sops decrypt {{ base_path }}/{{ machine }}/secrets.yml - -@edit machine: - sops edit {{ base_path }}/{{ machine }}/secrets.yml - -@set machine key value: - sops set {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" "\"$(echo '{{ value }}' | sed 's/\"/\\\"/g')\"" - - git add {{ base_path }}/{{ machine }}/secrets.yml - git commit -m 'chore(secrets): set secret "{{ key }}" for machine "{{ machine}}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null - - echo "Done" - -@get machine key: - sops decrypt {{ base_path }}/{{ machine }}/secrets.yml | yq ".$(echo "{{ key }}" | sed -E 's/\//./g')" - -@remove machine key: - sops unset {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" - - git add {{ base_path }}/{{ machine }}/secrets.yml - git commit -m 'chore(secrets): removed secret "{{ key }}" from machine "{{ machine}}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null - +set unstable + +base_path := invocation_directory() / "systems/x86_64-linux" +# sops := "nix shell nixpkgs#sops --command sops" +# yq := "nix shell nixpkgs#yq --command yq" +sops := "sops" +yq := "yq" + +@_default: + just --list + +[doc('list all vars of the target machine')] +list machine: + sops decrypt {{ base_path }}/{{ machine }}/secrets.yml + +@edit machine: + sops edit {{ base_path }}/{{ machine }}/secrets.yml + +@set machine key value: + sops set {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" "\"$(echo '{{ value }}' | sed 's/\"/\\\"/g')\"" + + git add {{ base_path }}/{{ machine }}/secrets.yml + git commit -m 'chore(secrets): set secret "{{ key }}" for machine "{{ machine}}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null + + echo "Done" + +@get machine key: + sops decrypt {{ base_path }}/{{ machine }}/secrets.yml | yq ".$(echo "{{ key }}" | sed -E 's/\//./g')" + +@remove machine key: + sops unset {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" + + git add {{ base_path }}/{{ machine }}/secrets.yml + git commit -m 'chore(secrets): removed secret "{{ key }}" from machine "{{ machine}}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null + echo "Done" \ No newline at end of file diff --git a/.justfile b/.justfile index 3a15d20..87563d0 100644 --- a/.justfile +++ b/.justfile @@ -1,33 +1,33 @@ -@_default: - just --list --list-submodules - -[doc('Manage vars')] -mod vars '.just/vars.just' - -[doc('Manage machines')] -mod machine '.just/machine.just' - -[doc('Show information about project')] -@show: - echo "show" - -[doc('update the flake dependencies')] -@update: - nix flake update - git commit -m 'chore: update dependencies' -- ./flake.lock > /dev/null - echo "Done" - -[doc('Introspection on flake output')] -@select key: - nix eval --json .#{{ key }} | jq . - - - -#=============================================================================================== -# Utils -#=============================================================================================== -[no-exit-message] -[no-cd] -[private] -@assert condition message: +@_default: + just --list --list-submodules + +[doc('Manage vars')] +mod vars '.just/vars.just' + +[doc('Manage machines')] +mod machine '.just/machine.just' + +[doc('Show information about project')] +@show: + echo "show" + +[doc('update the flake dependencies')] +@update: + nix flake update + git commit -m 'chore: update dependencies' -- ./flake.lock > /dev/null + echo "Done" + +[doc('Introspection on flake output')] +@select key: + nix eval --json .#{{ key }} | jq . + + + +#=============================================================================================== +# Utils +#=============================================================================================== +[no-exit-message] +[no-cd] +[private] +@assert condition message: [ {{ condition }} ] || { echo -e 1>&2 "\n\x1b[1;41m Error \x1b[0m {{ message }}\n"; exit 1; } \ No newline at end of file diff --git a/flake.lock b/flake.lock index 3f5967e..4f55a24 100644 --- a/flake.lock +++ b/flake.lock @@ -402,7 +402,7 @@ }, "flake-utils-plus": { "inputs": { - "flake-utils": "flake-utils_4" + "flake-utils": "flake-utils_5" }, "locked": { "lastModified": 1715533576, @@ -457,7 +457,25 @@ }, "flake-utils_4": { "inputs": { - "systems": "systems_6" + "systems": "systems_5" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "inputs": { + "systems": "systems_7" }, "locked": { "lastModified": 1694529238, @@ -662,6 +680,25 @@ "type": "github" } }, + "mydia": { + "inputs": { + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1764568388, + "narHash": "sha256-kl8165eI0lUz9E96sdreZ48/nApydDfJP8IksjBveAw=", + "owner": "getmydia", + "repo": "mydia", + "rev": "74f0cf9a8ca782581ec0a35acf6526fccfbb6e2a", + "type": "github" + }, + "original": { + "owner": "getmydia", + "repo": "mydia", + "type": "github" + } + }, "nix-darwin": { "inputs": { "nixpkgs": [ @@ -708,8 +745,8 @@ "nix-minecraft": { "inputs": { "flake-compat": "flake-compat_3", - "flake-utils": "flake-utils_3", - "nixpkgs": "nixpkgs_5" + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs_6" }, "locked": { "lastModified": 1764556167, @@ -856,6 +893,22 @@ "type": "github" } }, + "nixpkgs_10": { + "locked": { + "lastModified": 1762977756, + "narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_2": { "locked": { "lastModified": 1764547213, @@ -905,6 +958,22 @@ } }, "nixpkgs_5": { + "locked": { + "lastModified": 1764242076, + "narHash": "sha256-sKoIWfnijJ0+9e4wRvIgm/HgE27bzwQxcEmo2J/gNpI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2fad6eac6077f03fe109c4d4eb171cf96791faa4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { "locked": { "lastModified": 1748929857, "narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=", @@ -920,7 +989,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_7": { "locked": { "lastModified": 1764517877, "narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=", @@ -936,7 +1005,7 @@ "type": "github" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { "lastModified": 1761880412, "narHash": "sha256-QoJjGd4NstnyOG4mm4KXF+weBzA2AH/7gn1Pmpfcb0A=", @@ -952,7 +1021,7 @@ "type": "github" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { "lastModified": 1764445028, "narHash": "sha256-ik6H/0Zl+qHYDKTXFPpzuVHSZE+uvVz2XQuQd1IVXzo=", @@ -968,22 +1037,6 @@ "type": "github" } }, - "nixpkgs_9": { - "locked": { - "lastModified": 1762977756, - "narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nur": { "inputs": { "flake-parts": [ @@ -1014,8 +1067,8 @@ "flake-compat": "flake-compat_4", "flake-parts": "flake-parts_2", "mnw": "mnw", - "nixpkgs": "nixpkgs_7", - "systems": "systems_5" + "nixpkgs": "nixpkgs_8", + "systems": "systems_6" }, "locked": { "lastModified": 1762622004, @@ -1065,11 +1118,12 @@ "himmelblau": "himmelblau", "home-manager": "home-manager", "jovian": "jovian", + "mydia": "mydia", "nix-minecraft": "nix-minecraft", "nixos-boot": "nixos-boot", "nixos-generators": "nixos-generators", "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs_6", + "nixpkgs": "nixpkgs_7", "nvf": "nvf", "plasma-manager": "plasma-manager", "snowfall-lib": "snowfall-lib", @@ -1162,7 +1216,7 @@ }, "sops-nix_2": { "inputs": { - "nixpkgs": "nixpkgs_8" + "nixpkgs": "nixpkgs_9" }, "locked": { "lastModified": 1764483358, @@ -1187,9 +1241,9 @@ "firefox-gnome-theme": "firefox-gnome-theme", "flake-parts": "flake-parts_3", "gnome-shell": "gnome-shell", - "nixpkgs": "nixpkgs_9", + "nixpkgs": "nixpkgs_10", "nur": "nur", - "systems": "systems_7", + "systems": "systems_8", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", "tinted-schemes": "tinted-schemes", @@ -1330,13 +1384,28 @@ "type": "github" } }, + "systems_9": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "terranix": { "inputs": { "flake-parts": "flake-parts_4", "nixpkgs": [ "nixpkgs" ], - "systems": "systems_8" + "systems": "systems_9" }, "locked": { "lastModified": 1762472226, diff --git a/flake.nix b/flake.nix index d7a7508..5668380 100644 --- a/flake.nix +++ b/flake.nix @@ -88,49 +88,54 @@ url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz"; inputs.nixpkgs.follows = "nixpkgs"; }; + + mydia = { + url = "github:getmydia/mydia"; + }; }; - outputs = inputs: inputs.snowfall-lib.mkFlake { - inherit inputs; - src = ./.; + outputs = inputs: + inputs.snowfall-lib.mkFlake { + inherit inputs; + src = ./.; - snowfall = { - namespace = "sneeuwvlok"; + snowfall = { + namespace = "sneeuwvlok"; - meta = { - name = "sneeuwvlok"; - title = "Sneeuwvlok"; + meta = { + name = "sneeuwvlok"; + title = "Sneeuwvlok"; + }; }; - }; - channels-config = { - allowUnfree = true; - permittedInsecurePackages = [ - # Due to *arr stack - "dotnet-sdk-6.0.428" - "aspnetcore-runtime-6.0.36" + channels-config = { + allowUnfree = true; + permittedInsecurePackages = [ + # Due to *arr stack + "dotnet-sdk-6.0.428" + "aspnetcore-runtime-6.0.36" - # I think this is because of zen - "qtwebengine-5.15.19" + # I think this is because of zen + "qtwebengine-5.15.19" - # For Nheko, the matrix client - "olm-3.2.16" + # For Nheko, the matrix client + "olm-3.2.16" + ]; + }; + + overlays = with inputs; [ + fenix.overlays.default + nix-minecraft.overlay + flux.overlays.default + ]; + + systems.modules = with inputs; [ + clan-core.nixosModules.default + ]; + + homes.modules = with inputs; [ + stylix.homeModules.stylix + plasma-manager.homeModules.plasma-manager ]; }; - - overlays = with inputs; [ - fenix.overlays.default - nix-minecraft.overlay - flux.overlays.default - ]; - - systems.modules = with inputs; [ - clan-core.nixosModules.default - ]; - - homes.modules = with inputs; [ - stylix.homeModules.stylix - plasma-manager.homeModules.plasma-manager - ]; - }; } diff --git a/modules/home/application/steam/default.nix b/modules/home/application/steam/default.nix index 8c87b40..ec47942 100644 --- a/modules/home/application/steam/default.nix +++ b/modules/home/application/steam/default.nix @@ -1,55 +1,55 @@ -{ inputs, config, lib, pkgs, namespace, ... }: -let - inherit (lib) mkIf mkEnableOption; - - cfg = config.${namespace}.application.steam; -in -{ - options.${namespace}.application.steam = { - enable = mkEnableOption "enable steam"; - }; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ protonup-ng ]; - - home.sessionVariables = { - STEAM_EXTRA_COMPAT_TOOLS_PATHS = "\${HOME}/.steam/root/compatibilitytools.d"; - }; - - programs = { - # steam = { - # enable = true; - # package = pkgs.steam-small.override { - # extraEnv = { - # DXVK_HUD = "compiler"; - # MANGOHUD = true; - # }; - # }; - - # gamescopeSession = { - # enable = true; - # args = ["--immediate-flips"]; - # }; - # }; - - # https://github.com/FeralInteractive/gamemode - # gamemode = { - # enable = true; - # enableRenice = true; - # settings = {}; - # }; - - # gamescope = { - # enable = true; - # capSysNice = true; - # env = { - # DXVK_HDR = "1"; - # ENABLE_GAMESCOPE_WSI = "1"; - # WINE_FULLSCREEN_FSR = "1"; - # WLR_RENDERER = "vulkan"; - # }; - # args = ["--hdr-enabled"]; - # }; - }; - }; -} +{ inputs, config, lib, pkgs, namespace, ... }: +let + inherit (lib) mkIf mkEnableOption; + + cfg = config.${namespace}.application.steam; +in +{ + options.${namespace}.application.steam = { + enable = mkEnableOption "enable steam"; + }; + + config = mkIf cfg.enable { + home.packages = with pkgs; [ protonup-ng ]; + + home.sessionVariables = { + STEAM_EXTRA_COMPAT_TOOLS_PATHS = "\${HOME}/.steam/root/compatibilitytools.d"; + }; + + programs = { + # steam = { + # enable = true; + # package = pkgs.steam-small.override { + # extraEnv = { + # DXVK_HUD = "compiler"; + # MANGOHUD = true; + # }; + # }; + + # gamescopeSession = { + # enable = true; + # args = ["--immediate-flips"]; + # }; + # }; + + # https://github.com/FeralInteractive/gamemode + # gamemode = { + # enable = true; + # enableRenice = true; + # settings = {}; + # }; + + # gamescope = { + # enable = true; + # capSysNice = true; + # env = { + # DXVK_HDR = "1"; + # ENABLE_GAMESCOPE_WSI = "1"; + # WINE_FULLSCREEN_FSR = "1"; + # WLR_RENDERER = "vulkan"; + # }; + # args = ["--hdr-enabled"]; + # }; + }; + }; +} diff --git a/modules/home/application/teamspeak/default.nix b/modules/home/application/teamspeak/default.nix index d234e9a..aab3c5d 100644 --- a/modules/home/application/teamspeak/default.nix +++ b/modules/home/application/teamspeak/default.nix @@ -1,15 +1,15 @@ -{ inputs, config, lib, pkgs, namespace, ... }: -let - inherit (lib) mkIf mkEnableOption; - - cfg = config.${namespace}.application.teamspeak; -in -{ - options.${namespace}.application.teamspeak = { - enable = mkEnableOption "enable teamspeak"; - }; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ teamspeak3 teamspeak6-client ]; - }; -} +{ inputs, config, lib, pkgs, namespace, ... }: +let + inherit (lib) mkIf mkEnableOption; + + cfg = config.${namespace}.application.teamspeak; +in +{ + options.${namespace}.application.teamspeak = { + enable = mkEnableOption "enable teamspeak"; + }; + + config = mkIf cfg.enable { + home.packages = with pkgs; [ teamspeak3 teamspeak6-client ]; + }; +} diff --git a/modules/nixos/services/authentication/zitadel/default.nix b/modules/nixos/services/authentication/zitadel/default.nix index 9a02f01..8a80902 100644 --- a/modules/nixos/services/authentication/zitadel/default.nix +++ b/modules/nixos/services/authentication/zitadel/default.nix @@ -13,7 +13,7 @@ in organization = mkOption { type = types.attrsOf (types.submodule ({ name, ... }: { - options = + options = let org = name; in @@ -23,11 +23,11 @@ in default = false; example = "true"; description = '' - True sets the org as default org for the instance. Only one org can be default org. + True sets the '${org}' org as default org for the instance. Only one org can be default org. Nothing happens if you set it to false until you set another org as default org. ''; }; - + project = mkOption { default = {}; type = types.attrsOf (types.submodule { @@ -46,7 +46,7 @@ in default = null; example = "enforceProjectResourceOwnerPolicy"; description = '' - Defines from where the private labeling should be triggered, + Defines from where the private labeling should be triggered, supported values: - unspecified @@ -54,7 +54,7 @@ in - allowLoginUserResourceOwnerPolicy ''; }; - + projectRoleAssertion = mkOption { type = types.bool; default = false; @@ -63,7 +63,7 @@ in Describes if roles of user should be added in token. ''; }; - + projectRoleCheck = mkOption { type = types.bool; default = false; @@ -72,11 +72,11 @@ in ZITADEL checks if the user has at least one on this project. ''; }; - + role = mkOption { default = {}; type = types.attrsOf (types.submodule ({ name, ... }: { - options = + options = let roleName = name; in @@ -101,12 +101,12 @@ in }; })); }; - + assign = mkOption { default = {}; type = types.attrsOf (types.listOf types.str); }; - + application = mkOption { default = {}; type = types.attrsOf (types.submodule { @@ -141,8 +141,8 @@ in ''; }; - exportMap = - let + exportMap = + let strOpt = mkOption { type = types.nullOr types.str; default = null; }; in mkOption { @@ -164,11 +164,11 @@ in }; }); }; - + user = mkOption { default = {}; type = types.attrsOf (types.submodule ({ name, ... }: { - options = + options = let username = name; in @@ -226,7 +226,7 @@ in }; })); }; - + action = mkOption { default = {}; type = types.attrsOf (types.submodule ({ name, ... }: { @@ -263,7 +263,7 @@ in }; })); }; - + triggers = mkOption { default = []; type = types.listOf (types.submodule { @@ -321,26 +321,26 @@ in accessTokenType = mapEnum "OIDC_TOKEN_TYPE" value; }."${type}" or value); - toResource = name: value: nameValuePair + toResource = name: value: nameValuePair (toSnakeCase name) (lib.mapAttrs' (k: v: nameValuePair (toSnakeCase k) (mapValue k v)) value); withRef = type: name: attrs: attrs // (mapRef type name); select = keys: callback: set: - if (length keys) == 0 then + if (length keys) == 0 then mapAttrs' callback set else let key = head keys; in concatMapAttrs (k: v: select (drop 1 keys) (callback k) (v.${key} or {})) set ; append = attrList: set: set // (listToAttrs attrList); - forEach = src: key: set: + forEach = src: key: set: let _key = concatMapStringsSep "_" (k: "\${item.${k}}") key; in - { - forEach = "{ for item in ${src} : \"${_key}\" => item }"; + { + forEach = "{ for item in ${src} : \"${_key}\" => item }"; } // set; @@ -376,18 +376,18 @@ in } ] ]) "; - orgs = cfg.organization |> mapAttrs (org: _: lib.tfRef "resource.zitadel_org.${org}.id"); + orgs = cfg.organization |> mapAttrs (org: _: lib.tfRef "resource.zitadel_org.${org}.id"); }; resource = { # Organizations - zitadel_org = cfg.organization |> select [] (name: { isDefault, ... }: + zitadel_org = cfg.organization |> select [] (name: { isDefault, ... }: { inherit name isDefault; } |> toResource name ); # Projects per organization - zitadel_project = cfg.organization |> select [ "project" ] (org: name: { hasProjectCheck, privateLabelingSetting, projectRoleAssertion, projectRoleCheck, ... }: + zitadel_project = cfg.organization |> select [ "project" ] (org: name: { hasProjectCheck, privateLabelingSetting, projectRoleAssertion, projectRoleCheck, ... }: { inherit name hasProjectCheck privateLabelingSetting projectRoleAssertion projectRoleCheck; } @@ -396,7 +396,7 @@ in ); # Each OIDC app per project - zitadel_application_oidc = cfg.organization |> select [ "project" "application" ] (org: project: name: { redirectUris, grantTypes, responseTypes, ...}: + zitadel_application_oidc = cfg.organization |> select [ "project" "application" ] (org: project: name: { redirectUris, grantTypes, responseTypes, ...}: { inherit name redirectUris grantTypes responseTypes; @@ -404,41 +404,41 @@ in idTokenRoleAssertion = true; accessTokenType = "JWT"; } - |> withRef "org" org - |> withRef "project" "${org}_${project}" + |> withRef "org" org + |> withRef "project" "${org}_${project}" |> toResource "${org}_${project}_${name}" ); # Each project role - zitadel_project_role = cfg.organization |> select [ "project" "role" ] (org: project: name: value: + zitadel_project_role = cfg.organization |> select [ "project" "role" ] (org: project: name: value: { inherit (value) displayName group; roleKey = name; } - |> withRef "org" org - |> withRef "project" "${org}_${project}" + |> withRef "org" org + |> withRef "project" "${org}_${project}" |> toResource "${org}_${project}_${name}" ); # Each project role assignment zitadel_user_grant = cfg.organization |> select [ "project" "assign" ] (org: project: user: roles: { roleKeys = roles; } - |> withRef "org" org - |> withRef "project" "${org}_${project}" - |> withRef "user" "${org}_${user}" + |> withRef "org" org + |> withRef "project" "${org}_${project}" + |> withRef "user" "${org}_${user}" |> toResource "${org}_${project}_${user}" ); # Users - zitadel_human_user = - cfg.organization - |> select [ "user" ] (org: name: { email, userName, firstName, lastName, ... }: + zitadel_human_user = + cfg.organization + |> select [ "user" ] (org: name: { email, userName, firstName, lastName, ... }: { inherit email userName firstName lastName; isEmailVerified = true; - } + } |> withRef "org" org |> toResource "${org}_${name}" ) - |> append + |> append [ (forEach "local.extra_users" [ "org" "name" ] { orgId = lib.tfRef "local.orgs[each.value.org]"; @@ -446,7 +446,7 @@ in email = lib.tfRef "each.value.email"; firstName = lib.tfRef "each.value.firstName"; lastName = lib.tfRef "each.value.lastName"; - + isEmailVerified = true; } |> toResource "extraUsers") @@ -454,20 +454,20 @@ in ; # Global user roles - zitadel_instance_member = - cfg.organization + zitadel_instance_member = + cfg.organization |> filterAttrsRecursive (n: v: !(v ? "instanceRoles" && (length v.instanceRoles) == 0)) - |> select [ "user" ] (org: name: { instanceRoles, ... }: - { roles = instanceRoles; } + |> select [ "user" ] (org: name: { instanceRoles, ... }: + { roles = instanceRoles; } |> withRef "user" "${org}_${name}" |> toResource "${org}_${name}" ); # Organazation specific roles - zitadel_org_member = + zitadel_org_member = cfg.organization |> filterAttrsRecursive (n: v: !(v ? "roles" && (length v.roles) == 0)) - |> select [ "user" ] (org: name: { roles, ... }: + |> select [ "user" ] (org: name: { roles, ... }: { inherit roles; } |> withRef "org" org |> withRef "user" "${org}_${name}" @@ -475,9 +475,9 @@ in ); # Organazation's actions - zitadel_action = cfg.organization |> select [ "action" ] (org: name: { timeout, allowedToFail, script, ...}: - { - inherit allowedToFail name; + zitadel_action = cfg.organization |> select [ "action" ] (org: name: { timeout, allowedToFail, script, ...}: + { + inherit allowedToFail name; timeout = "${toString timeout}s"; script = "const ${name} = ${script}"; } @@ -486,20 +486,20 @@ in ); # Organazation's action assignments - zitadel_trigger_actions = + zitadel_trigger_actions = cfg.organization |> concatMapAttrs (org: { triggers, ... }: triggers |> imap0 (i: { flowType, triggerType, actions, ... }: (let name = "trigger_${toString i}"; in { - inherit flowType triggerType; + inherit flowType triggerType; - actionIds = - actions + actionIds = + actions |> map (action: (lib.tfRef "zitadel_action.${org}_${toSnakeCase action}.id")); - } - |> withRef "org" org - |> toResource "${org}_${name}" + } + |> withRef "org" org + |> toResource "${org}_${name}" )) |> listToAttrs ); @@ -516,7 +516,7 @@ in }; # Client credentials per app - local_sensitive_file = cfg.organization |> select [ "project" "application" ] (org: project: name: { exportMap, ... }: + local_sensitive_file = cfg.organization |> select [ "project" "application" ] (org: project: name: { exportMap, ... }: nameValuePair "${org}_${project}_${name}" { content = '' ${if exportMap.client_id != null then exportMap.client_id else "CLIENT_ID"}=${lib.tfRef "resource.zitadel_application_oidc.${org}_${project}_${name}.client_id"} @@ -530,7 +530,7 @@ in }) ]; }; - in + in mkIf cfg.enable { ${namespace}.services.persistance.postgresql.enable = true; @@ -548,7 +548,7 @@ in wantedBy = [ "multi-user.target" ]; wants = [ "zitadel.service" ]; - + script = '' #!/usr/bin/env bash @@ -628,7 +628,7 @@ in Org = { Name = "kruining"; - + Human = { UserName = "chris"; FirstName = "Chris"; @@ -639,7 +639,7 @@ in }; Password = "KaasIsAwesome1!"; }; - + Machine = { Machine = { Username = "terraform-service-user"; @@ -648,7 +648,7 @@ in MachineKey = { ExpirationDate = "2026-01-01T00:00:00Z"; Type = 1; }; # Pat = { ExpirationDate = "2026-01-01T00:00:00Z"; }; }; - + # LoginClient.Machine = { # Username = "terraform-service-user"; # Name = "Terraform"; @@ -689,7 +689,7 @@ in ''; }; }; - + networking.firewall.allowedTCPPorts = [ 80 443 ]; # Secrets diff --git a/modules/nixos/services/communication/matrix/default.nix b/modules/nixos/services/communication/matrix/default.nix index ce92df4..6405932 100644 --- a/modules/nixos/services/communication/matrix/default.nix +++ b/modules/nixos/services/communication/matrix/default.nix @@ -1,5 +1,10 @@ -{ config, lib, pkgs, namespace, ... }: -let +{ + config, + lib, + pkgs, + namespace, + ... +}: let inherit (builtins) toString toJSON; inherit (lib) mkIf mkEnableOption; @@ -10,8 +15,7 @@ let port = 4001; database = "synapse"; -in -{ +in { options.${namespace}.services.communication.matrix = { enable = mkEnableOption "Matrix server (Synapse)"; }; @@ -22,13 +26,13 @@ in # virtualisation.podman.enable = true; }; - networking.firewall.allowedTCPPorts = [ 4001 ]; + networking.firewall.allowedTCPPorts = [4001]; services = { matrix-synapse = { enable = true; - extras = [ "oidc" ]; + extras = ["oidc"]; extraConfigFiles = [ config.sops.templates."synapse-oidc.yaml".path @@ -52,7 +56,7 @@ in backchannel_logout_enabled = true; sso = { - client_whitelist = [ "http://[::1]:9092" ]; + client_whitelist = ["http://[::1]:9092"]; update_profile_information = true; }; @@ -75,7 +79,7 @@ in resources = [ { - names = [ "client" "federation" "openid" "metrics" "media" "health" ]; + names = ["client" "federation" "openid" "metrics" "media" "health"]; compress = true; } ]; @@ -132,7 +136,7 @@ in postgresql = { enable = true; - ensureDatabases = [ database ]; + ensureDatabases = [database]; ensureUsers = [ { name = database; @@ -192,7 +196,7 @@ in localpart_template: "{{ user.preferred_username }}" display_name_template: "{{ user.name }}" ''; - restartUnits = [ "matrix-synapse.service" ]; + restartUnits = ["matrix-synapse.service"]; }; }; }; diff --git a/modules/nixos/services/development/forgejo/default.nix b/modules/nixos/services/development/forgejo/default.nix index 52f026f..c7aff89 100644 --- a/modules/nixos/services/development/forgejo/default.nix +++ b/modules/nixos/services/development/forgejo/default.nix @@ -1,12 +1,16 @@ -{ config, lib, pkgs, namespace, ... }: -let +{ + config, + lib, + pkgs, + namespace, + ... +}: let inherit (builtins) toString; inherit (lib) mkIf mkEnableOption mkOption; cfg = config.${namespace}.services.development.forgejo; domain = "git.amarth.cloud"; -in -{ +in { options.${namespace}.services.development.forgejo = { enable = mkEnableOption "Forgejo"; @@ -26,7 +30,7 @@ in virtualisation.podman.enable = true; }; - environment.systemPackages = with pkgs; [ forgejo ]; + environment.systemPackages = with pkgs; [forgejo]; services = { forgejo = { @@ -141,7 +145,7 @@ in }; }; - openssh.settings.AllowUsers = [ "forgejo" ]; + openssh.settings.AllowUsers = ["forgejo"]; gitea-actions-runner = { package = pkgs.forgejo-runner; @@ -184,14 +188,14 @@ in "forgejo/action_runner_token" = { owner = "gitea-runner"; group = "gitea-runner"; - restartUnits = [ "gitea-runner-default.service" ]; + restartUnits = ["gitea-runner-default.service"]; }; "forgejo/email" = { owner = "forgejo"; group = "forgejo"; key = "email/chris_kruining_eu"; - restartUnits = [ "forgejo.service" ]; + restartUnits = ["forgejo.service"]; }; }; }; diff --git a/modules/nixos/services/media/mydia/default.nix b/modules/nixos/services/media/mydia/default.nix new file mode 100644 index 0000000..6fa94ca --- /dev/null +++ b/modules/nixos/services/media/mydia/default.nix @@ -0,0 +1,51 @@ +{ + config, + lib, + namespace, + inputs, + system, + ... +}: let + inherit (lib) mkIf mkEnableOption; + + cfg = config.${namespace}.services.media.mydia; +in { + imports = [ + inputs.mydia.nixosModules.default + ]; + + options.${namespace}.services.media.mydia = { + enable = mkEnableOption "Enable Mydia"; + }; + + config = mkIf cfg.enable { + services.mydia = { + enable = true; + package = inputs.mydia.packages.${system}.default; + + port = 2010; + openFirewall = true; + + secretKeyBaseFile = config.sops.secrets."mydia/secret_key_base".path; + guardianSecretKeyFile = config.sops.secrets."mydia/guardian_secret".path; + + oidc = { + enable = true; + issuer = "https://auth.kruining.eu"; + clientIdFile = config.sops.secrets."mydia/oidc_id".path; + clientSecretFile = config.sops.secrets."mydia/oidc_secret".path; + scopes = ["openid" "profile" "email"]; + }; + }; + + sops.secrets = + ["secret_key_base" "guardian_secret" "oidc_id" "oidc_secret"] + |> lib.map (name: + lib.nameValuePair "mydia/${name}" { + owner = config.services.mydia.user; + group = config.services.mydia.group; + restartUnits = ["mydia.service"]; + }) + |> lib.listToAttrs; + }; +} diff --git a/modules/nixos/services/media/servarr/default.nix b/modules/nixos/services/media/servarr/default.nix index c67e52d..733fe99 100644 --- a/modules/nixos/services/media/servarr/default.nix +++ b/modules/nixos/services/media/servarr/default.nix @@ -1,14 +1,20 @@ -{ pkgs, config, lib, namespace, inputs, system, ... }: -let +{ + pkgs, + config, + lib, + namespace, + inputs, + system, + ... +}: let inherit (builtins) toString; inherit (lib) mkIf mkEnableOption mkOption types; cfg = config.${namespace}.services.media.servarr; -in -{ +in { options.${namespace}.services.media = { servarr = mkOption { - type = types.attrsOf (types.submodule ({ name, ... }: { + type = types.attrsOf (types.submodule ({name, ...}: { options = { enable = mkEnableOption "Enable ${name}"; debug = mkEnableOption "Use tofu plan instead of tofu apply for ${name} "; @@ -28,9 +34,13 @@ in }; config = { - services = + services = cfg - |> lib.mapAttrsToList (service: { enable, port, ... }: (mkIf enable { + |> lib.mapAttrsToList (service: { + enable, + port, + ... + }: (mkIf enable { "${service}" = { enable = true; openFirewall = true; @@ -58,31 +68,44 @@ in }; })) |> lib.mergeAttrsList - |> (set: set // { - postgresql = { - ensureDatabases = cfg |> lib.attrNames; - ensureUsers = cfg |> lib.attrNames |> lib.map (service: { - name = service; - ensureDBOwnership = true; - }); - }; - }) - ; + |> (set: + set + // { + postgresql = { + ensureDatabases = cfg |> lib.attrNames; + ensureUsers = + cfg + |> lib.attrNames + |> lib.map (service: { + name = service; + ensureDBOwnership = true; + }); + }; + }); - systemd = + systemd = cfg - |> lib.mapAttrsToList (service: { enable, debug, port, rootFolders, ... }: (mkIf enable { + |> lib.mapAttrsToList (service: { + enable, + debug, + port, + rootFolders, + ... + }: (mkIf enable { tmpfiles.rules = [ "d /var/lib/${service}ApplyTerraform 0755 ${service} ${service} -" ]; - services."${service}ApplyTerraform" = - let + services."${service}ApplyTerraform" = let terraformConfiguration = inputs.terranix.lib.terranixConfiguration { inherit system; modules = [ - ({ config, lib, ... }: { + ({ + config, + lib, + ... + }: { config = { variable = { api_key = { @@ -102,23 +125,21 @@ in }; resource = { - "${service}_root_folder" = + "${service}_root_folder" = rootFolders - |> lib.imap (i: f: lib.nameValuePair "local${toString i}" { path = f; }) - |> lib.listToAttrs - ; + |> lib.imap (i: f: lib.nameValuePair "local${toString i}" {path = f;}) + |> lib.listToAttrs; }; }; }) ]; }; - in - { + in { description = "${service} terraform apply"; - wantedBy = [ "multi-user.target" ]; - wants = [ "${service}.service" ]; - + wantedBy = ["multi-user.target"]; + wants = ["${service}.service"]; + script = '' #!/usr/bin/env bash @@ -141,7 +162,11 @@ in # Run the infrastructure code ${lib.getExe pkgs.opentofu} \ - ${if debug then "plan" else "apply -auto-approve"} \ + ${ + if debug + then "plan" + else "apply -auto-approve" + } \ -var-file='${config.sops.templates."${service}/config.tfvars".path}' ''; @@ -158,31 +183,29 @@ in }; }; })) - |> lib.mergeAttrsList - ; + |> lib.mergeAttrsList; - users.users = + users.users = cfg - |> lib.mapAttrsToList (service: { enable, ... }: (mkIf enable { - "${service}".extraGroups = [ "media" ]; + |> lib.mapAttrsToList (service: {enable, ...}: (mkIf enable { + "${service}".extraGroups = ["media"]; })) - |> lib.mergeAttrsList - ; + |> lib.mergeAttrsList; - sops = + sops = cfg - |> lib.mapAttrsToList (service: { enable, ... }: (mkIf enable { + |> lib.mapAttrsToList (service: {enable, ...}: (mkIf enable { secrets."${service}/apikey" = { owner = service; group = service; - restartUnits = [ "${service}.service" ]; + restartUnits = ["${service}.service"]; }; templates = { "${service}/config.env" = { owner = service; group = service; - restartUnits = [ "${service}.service" ]; + restartUnits = ["${service}.service"]; content = '' ${lib.toUpper service}__AUTH__APIKEY="${config.sops.placeholder."${service}/apikey"}" ''; @@ -191,18 +214,16 @@ in "${service}/config.tfvars" = { owner = service; group = service; - restartUnits = [ "${service}.service" ]; + restartUnits = ["${service}.service"]; content = '' api_key = "${config.sops.placeholder."${service}/apikey"}" ''; }; }; })) - |> lib.mergeAttrsList - ; + |> lib.mergeAttrsList; }; - # cfg # |> lib.mapAttrsToList (service: { enable, debug, port, rootFolders, ... }: (mkIf enable { diff --git a/modules/nixos/shells/default.nix b/modules/nixos/shells/default.nix index 6b5c058..37afd9b 100644 --- a/modules/nixos/shells/default.nix +++ b/modules/nixos/shells/default.nix @@ -1,2 +1,5 @@ -{ ... }: -{} \ No newline at end of file +{...}: { + config = { + programs.bash.enableCompletion = true; + }; +} diff --git a/packages/mydia/default.nix b/packages/mydia/default.nix deleted file mode 100644 index 769bef3..0000000 --- a/packages/mydia/default.nix +++ /dev/null @@ -1,101 +0,0 @@ -{ - lib, - fetchFromGitHub, - pkgs, - stdenv, - ... -}: let - erlang = pkgs.beam.packagesWith pkgs.beam.interpreters.erlang; - - erlangSystem = - { - aarch64-darwin = "macos-arm64"; - aarch64-linux = "linux-arm64"; - armv7l-linux = "linux-armv7"; - x86_64-darwin = "macos-x64"; - x86_64-linux = "linux-x64"; - } - .${ - stdenv.hostPlatform.system - }; - - version = "v0.6.0"; - pname = "mydia"; - src = fetchFromGitHub { - owner = "getmydia"; - repo = "mydia"; - rev = version; - hash = "sha256-JGT52ulnqcx8o+3e0l50TLAwLIWXEI8nwFGUsA95vH0="; - }; - mixFodDeps = erlang.fetchMixDeps { - inherit version src; - pname = "mix-deps-${pname}-${version}"; - hash = "sha256-19q56IZe8YjuUBXirFGgmBsewJ0cmdOoO1yfiMaWGWk="; - }; - npmFodDeps = pkgs.fetchNpmDeps { - src = "${src}/assets"; - hash = "sha256-0cz75pxhxvzo1RogsV8gTP6GrgLIboWQXcKpq42JZ6o="; - }; -in - erlang.mixRelease { - inherit pname version src mixFodDeps; - - enableDebugInfo = true; - - nativeBuildInputs = with pkgs; [ - which - ffmpeg_6 - fdk_aac - sqlite - postgresql - tailwindcss_4 - esbuild - pkg-config - ]; - - env = { - EXQLITE_USE_SYSTEM = "1"; - EXQLITE_SYSTEM_CFLAGS = "-I${pkgs.sqlite.dev}/include"; - EXQLITE_SYSTEM_LDFLAGS = "-L${pkgs.sqlite.out}/lib -lsqlite3"; - DATABASE_TYPE = "postgres"; - }; - - preInstall = '' - ln -s ${lib.getExe pkgs.tailwindcss_4} _build/tailwind-${erlangSystem} - ln -s ${lib.getExe pkgs.esbuild} _build/esbuild-${erlangSystem} - ln -s ${npmFodDeps} assets/node_modules - - mix do \ - deps.loadpaths --no-deps-check, \ - tailwind default --minify + esbuild default --minify + phx.digest, \ - assets.deploy - ''; - - meta = { - description = "Your personal media companion, built with Phoenix LiveView"; - longDescription = '' - A modern, self-hosted media management platform for tracking, organizing, and monitoring your media library. - - # ✨ Features - - - 📺 Unified Media Management – Track both movies and TV shows with rich metadata from TMDB/TVDB - - 🤖 Automated Downloads – Background search and download with quality profiles and smart release ranking - - ⬇️ Download Clients – qBittorrent, Transmission, SABnzbd, and NZBGet support - - 🔎 Indexer Integration – Search via Prowlarr and Jackett for finding releases - - 📚 Built-in Indexer Library – Native Cardigann support (experimental, limited testing) - - 👥 Multi-User System – Built-in admin/guest roles with request approval workflow - - 🔐 SSO Support – Local authentication plus OIDC/OpenID Connect integration - - 🔔 Release Calendar – Track upcoming releases and monitor episodes - - 🎨 Modern Real-Time UI – Phoenix LiveView with instant updates and responsive design - ''; - - homepage = "https://github.com/getmydia/mydia"; - changelog = "https://github.com/getmydia/mydia/releases"; - license = lib.licenses.agpl3Only; - - maintainers = []; - - platforms = lib.platforms.all; - mainProgram = pname; - }; - } diff --git a/shells/default/default.nix b/shells/default/default.nix index 03756be..5bd5b5f 100644 --- a/shells/default/default.nix +++ b/shells/default/default.nix @@ -15,6 +15,7 @@ mkShell { alejandra nil nixd + openssl inputs.clan-core.packages.${stdenv.hostPlatform.system}.clan-cli ]; } diff --git a/systems/x86_64-linux/ulmo/default.nix b/systems/x86_64-linux/ulmo/default.nix index 0310818..93171d8 100644 --- a/systems/x86_64-linux/ulmo/default.nix +++ b/systems/x86_64-linux/ulmo/default.nix @@ -1,5 +1,4 @@ -{ ... }: -{ +{...}: { imports = [ ./disks.nix ./hardware.nix @@ -8,7 +7,10 @@ networking = { interfaces.enp2s0 = { ipv6.addresses = [ - { address = "2a0d:6e00:1dc9:0::dead:beef"; prefixLength = 64; } + { + address = "2a0d:6e00:1dc9:0::dead:beef"; + prefixLength = 64; + } ]; useDHCP = true; @@ -39,7 +41,7 @@ sneeuwvlok = { services = { backup.borg.enable = true; - + authentication.zitadel = { enable = true; @@ -51,8 +53,8 @@ firstName = "Chris"; lastName = "Kruining"; - roles = [ "ORG_OWNER" ]; - instanceRoles = [ "IAM_OWNER" ]; + roles = ["ORG_OWNER"]; + instanceRoles = ["IAM_OWNER"]; }; kaas = { @@ -78,27 +80,27 @@ }; assign = { - chris = [ "jellyfin" "jellyfin_admin" ]; - kaas = [ "jellyfin" ]; + chris = ["jellyfin" "jellyfin_admin"]; + kaas = ["jellyfin"]; }; application = { jellyfin = { - redirectUris = [ "https://jellyfin.kruining.eu/sso/OID/redirect/zitadel" ]; - grantTypes = [ "authorizationCode" ]; - responseTypes = [ "code" ]; + redirectUris = ["https://jellyfin.kruining.eu/sso/OID/redirect/zitadel"]; + grantTypes = ["authorizationCode"]; + responseTypes = ["code"]; }; forgejo = { - redirectUris = [ "https://git.amarth.cloud/user/oauth2/zitadel/callback" ]; - grantTypes = [ "authorizationCode" ]; - responseTypes = [ "code" ]; + redirectUris = ["https://git.amarth.cloud/user/oauth2/zitadel/callback"]; + grantTypes = ["authorizationCode"]; + responseTypes = ["code"]; }; vaultwarden = { - redirectUris = [ "https://vault.kruining.eu/identity/connect/oidc-signin" ]; - grantTypes = [ "authorizationCode" ]; - responseTypes = [ "code" ]; + redirectUris = ["https://vault.kruining.eu/identity/connect/oidc-signin"]; + grantTypes = ["authorizationCode"]; + responseTypes = ["code"]; exportMap = { client_id = "SSO_CLIENT_ID"; client_secret = "SSO_CLIENT_SECRET"; @@ -106,9 +108,15 @@ }; matrix = { - redirectUris = [ "https://matrix.kruining.eu/_synapse/client/oidc/callback" ]; - grantTypes = [ "authorizationCode" ]; - responseTypes = [ "code" ]; + redirectUris = ["https://matrix.kruining.eu/_synapse/client/oidc/callback"]; + grantTypes = ["authorizationCode"]; + responseTypes = ["code"]; + }; + + mydia = { + redirectUris = ["http://localhost:2010/auth/oidc/callback"]; + grantTypes = ["authorizationCode"]; + responseTypes = ["code"]; }; }; }; @@ -121,9 +129,9 @@ if (ctx.v1.user.grants == undefined || ctx.v1.user.grants.count == 0) { return; } - + const roles = ctx.v1.user.grants.grants.flatMap(({ roles, projectId }) => roles.map(role => projectId + ':' + role)); - + api.v1.claims.setClaim('nix:zitadel:custom', JSON.stringify({ roles })); }; ''; @@ -131,8 +139,16 @@ }; triggers = [ - { flowType = "customiseToken"; triggerType = "preUserinfoCreation"; actions = [ "flattenRoles" ]; } - { flowType = "customiseToken"; triggerType = "preAccessTokenCreation"; actions = [ "flattenRoles" ]; } + { + flowType = "customiseToken"; + triggerType = "preUserinfoCreation"; + actions = ["flattenRoles"]; + } + { + flowType = "customiseToken"; + triggerType = "preAccessTokenCreation"; + actions = ["flattenRoles"]; + } ]; }; }; @@ -146,6 +162,7 @@ media.enable = true; media.homer.enable = true; + media.mydia.enable = true; media.nfs.enable = true; media.servarr = { # radarr = { @@ -190,7 +207,7 @@ database = { # type = "sqlite"; # file = "/var/lib/vaultwarden/state.db"; - + type = "postgresql"; host = "localhost"; port = 5432; -- 2.51.2 From b64cfa9e7363f2b261a790b2cbf19189f4f2854c Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Mon, 1 Dec 2025 14:49:33 +0100 Subject: [PATCH 12/22] fix: forEach implementation in zitadel module --- .just/machine.just | 8 +++---- .../authentication/zitadel/default.nix | 24 ++++++++++++------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/.just/machine.just b/.just/machine.just index 1ab5ca8..098e101 100644 --- a/.just/machine.just +++ b/.just/machine.just @@ -2,10 +2,10 @@ [doc('List machines')] @list: - ls -1 ../systems/x86_64-linux/ + ls -1 ../systems/x86_64-linux/ -[no-exit-message] [doc('Update the target machine')] +[no-exit-message] @update machine: - just assert '-d "../systems/x86_64-linux/{{ machine }}"' "Machine {{ machine }} does not exist, must be one of: $(ls ../systems/x86_64-linux/ | tr '\n' ' ')" - nixos-rebuild switch --use-remote-sudo --target-host {{ machine }} --flake ..#{{ machine }} \ No newline at end of file + just assert '-d "../systems/x86_64-linux/{{ machine }}"' "Machine {{ machine }} does not exist, must be one of: $(ls ../systems/x86_64-linux/ | sed ':a;N;$!ba;s/\n/, /g')" + nixos-rebuild switch --use-remote-sudo --target-host {{ machine }} --flake ..#{{ machine }} diff --git a/modules/nixos/services/authentication/zitadel/default.nix b/modules/nixos/services/authentication/zitadel/default.nix index 8a80902..ee06900 100644 --- a/modules/nixos/services/authentication/zitadel/default.nix +++ b/modules/nixos/services/authentication/zitadel/default.nix @@ -335,14 +335,6 @@ in ; append = attrList: set: set // (listToAttrs attrList); - forEach = src: key: set: - let - _key = concatMapStringsSep "_" (k: "\${item.${k}}") key; - in - { - forEach = "{ for item in ${src} : \"${_key}\" => item }"; - } - // set; config' = config; @@ -352,7 +344,21 @@ in modules = [ ({ config, lib, ... }: { - config = { + config = + let + forEach = src: key: set: + let + _key = concatMapStringsSep "_" (k: "\${item.${k}}") key; + in + { + forEach = lib.tfRef ''{ + for item in ${src} : + "''${item.org}_''${item.name}" => item + }''; + } + // set; + in + { terraform.required_providers.zitadel = { source = "zitadel/zitadel"; version = "2.2.0"; -- 2.51.2 From ac4cc09ab5879a8a4c0eb4d6816ebddd0bf4af01 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 1 Dec 2025 14:26:40 +0000 Subject: [PATCH 13/22] chore(secrets): set secret "mydia/oidc_id" for machine "ulmo" --- systems/x86_64-linux/ulmo/secrets.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/systems/x86_64-linux/ulmo/secrets.yml b/systems/x86_64-linux/ulmo/secrets.yml index b0d432e..3d163b6 100644 --- a/systems/x86_64-linux/ulmo/secrets.yml +++ b/systems/x86_64-linux/ulmo/secrets.yml @@ -20,7 +20,7 @@ lidarr: prowlarr: apikey: ENC[AES256_GCM,data:pyZ2WGEs/PlIdhDsQq2TPGJbplkd5fLF0ZkBjITqIJlnAzYHb+rl+KOM4rHqQcI6yAJM8X1Y3ymGrD7vG7GiRxB7yoEG13SKhZIWOddTnxIhbkz81RfrL2fUJIydOaP6sS//9Q==,iv:Tr6MWoC6nC7rdVTOjT1T2itT+lVL4GnUiAr5/+IHAs0=,tag:keIJNuGeVht8+xSN3FnBGA==,type:str] mydia: - oidc_id: ENC[AES256_GCM,data:ymZdkUjbbTuJuGvI5T9d,iv:ccKpjKnzUH+/sGEBnmxnMNU3lY+j8NPUjvj8q4phprs=,tag:11H0Vd28gPajyU+3uAUYUQ==,type:str] + oidc_id: ENC[AES256_GCM,data:LfYWh9EC0aio3w1Xsj/jtU6z,iv:+dX9KkNtfQMYSX4yr83KyXalWMD/aWby7fC8aL4ZT3I=,tag:CvdbMoMTuC9FohTMIE5pmg==,type:str] oidc_secret: ENC[AES256_GCM,data:N7qdoueB9ayGx0RWdw/w,iv:k09TaKjNShaFWImZ82Fjqvjj4CPVIqVhCPZ7o1DgjX4=,tag:q+HMYN4zd7pFqCX90uaWgQ==,type:str] secret_key_base: ENC[AES256_GCM,data:yG7HJ5r74Qtxbeyf8F6dA0uHv2pQ8YAJKlKiKjS+m24JRvJWQaTThJ+c5HbuUa6R3e9XtVHchhlVPkF0Is/b+g==,iv:v65xdRr4JdKZmBtjZ08/J3LLqnphSGt9QfVPNQ2x/xg=,tag:n7tD2dhr4IJn1LWM9WW8UA==,type:str] guardian_secret: ENC[AES256_GCM,data:OjnNFSHlecL+qXwlhTm++itRM6ga5E5KrSJxbgIUpbMEkIWgu3xhRtnPdipXbedgall0XdO/s+jnWCagZX94BA==,iv:DukdKvm9vey8BWUiml20tgA/Vji1XVX4+sUPge9nTk0=,tag:q3HdvgUYqR0APiaFz0ul5Q==,type:str] @@ -44,7 +44,7 @@ sops: TTRWaHhpNWlkVDFmMFN4ZTNHMUxyNVkKV693pzTKRkZboQCMPr9IyMGSgxfuHXcb Y6BNcp6Qg6PWtX5QI7wRkPNINAK1TEbRBba+b8h6gMmVU4DliQyFiQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-12-01T09:05:11Z" - mac: ENC[AES256_GCM,data:6gFet+aW7tlQqy4aSulBTJ+mYpu1OxfK8Wa3noXNNDlFwTEpCWEhdwFDqWZ+sd5opINQoPrHD23BwiXYoJtKPeLd9/kpn//CgHvYcwgGDpPzCMbyDOLutlspyY4pfYrEezm8+yg3r5TkJK3o7U2Q8kkfdQQcfEGIsr9GDRKSplw=,iv:PYclBivPBifGreNWeCCZ74koSb51xBMYeviHf0SaxbA=,tag:Lb+vlcBUgpJE0XfJ/gwDiw==,type:str] + lastmodified: "2025-12-01T14:26:39Z" + mac: ENC[AES256_GCM,data:UFp+14rzSop6XoqLQcihDd935hQOmihyjBxXQGweLGHHZZapk0rCsgkO5/zZnjRgTf0Aeyr9u5fQHGcZn7lFASkx4yiTdoRgjnezeI+hHd3tSqYt6cfsY5jm0w24AIve7JCF16hdLMUP5ho4jusX1beKfnb7HQYJjfqR4dGhxek=,iv:IaUd1X73GH1RSn+nf2C/XVlPXmSOAGrrEbvKM7G5Xn4=,tag:oWZSb+QIc2dg1EvweuWrXA==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 -- 2.51.2 From 0e57c4f4252207eed4ad646df5a1effc15f77bfa Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 1 Dec 2025 14:27:13 +0000 Subject: [PATCH 14/22] chore(secrets): set secret "mydia/oidc_secret" for machine "ulmo" --- systems/x86_64-linux/ulmo/secrets.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/systems/x86_64-linux/ulmo/secrets.yml b/systems/x86_64-linux/ulmo/secrets.yml index 3d163b6..9e80086 100644 --- a/systems/x86_64-linux/ulmo/secrets.yml +++ b/systems/x86_64-linux/ulmo/secrets.yml @@ -21,7 +21,7 @@ prowlarr: apikey: ENC[AES256_GCM,data:pyZ2WGEs/PlIdhDsQq2TPGJbplkd5fLF0ZkBjITqIJlnAzYHb+rl+KOM4rHqQcI6yAJM8X1Y3ymGrD7vG7GiRxB7yoEG13SKhZIWOddTnxIhbkz81RfrL2fUJIydOaP6sS//9Q==,iv:Tr6MWoC6nC7rdVTOjT1T2itT+lVL4GnUiAr5/+IHAs0=,tag:keIJNuGeVht8+xSN3FnBGA==,type:str] mydia: oidc_id: ENC[AES256_GCM,data:LfYWh9EC0aio3w1Xsj/jtU6z,iv:+dX9KkNtfQMYSX4yr83KyXalWMD/aWby7fC8aL4ZT3I=,tag:CvdbMoMTuC9FohTMIE5pmg==,type:str] - oidc_secret: ENC[AES256_GCM,data:N7qdoueB9ayGx0RWdw/w,iv:k09TaKjNShaFWImZ82Fjqvjj4CPVIqVhCPZ7o1DgjX4=,tag:q+HMYN4zd7pFqCX90uaWgQ==,type:str] + oidc_secret: ENC[AES256_GCM,data:PgI4hmP/3wt9uj+1QvCYcT8Wav0hgCRADouzWM3V695SSfXfbwDgez8tA/tm1/1jymAU2F2sZH8G2hZ1cdHyHQ==,iv:h3o3jsTmnoNE3+mGX12J3ZU0/6PlQNjdndEvaj/czj0=,tag:p3+p4E8fBtR7a8UpM8cUsg==,type:str] secret_key_base: ENC[AES256_GCM,data:yG7HJ5r74Qtxbeyf8F6dA0uHv2pQ8YAJKlKiKjS+m24JRvJWQaTThJ+c5HbuUa6R3e9XtVHchhlVPkF0Is/b+g==,iv:v65xdRr4JdKZmBtjZ08/J3LLqnphSGt9QfVPNQ2x/xg=,tag:n7tD2dhr4IJn1LWM9WW8UA==,type:str] guardian_secret: ENC[AES256_GCM,data:OjnNFSHlecL+qXwlhTm++itRM6ga5E5KrSJxbgIUpbMEkIWgu3xhRtnPdipXbedgall0XdO/s+jnWCagZX94BA==,iv:DukdKvm9vey8BWUiml20tgA/Vji1XVX4+sUPge9nTk0=,tag:q3HdvgUYqR0APiaFz0ul5Q==,type:str] sops: @@ -44,7 +44,7 @@ sops: TTRWaHhpNWlkVDFmMFN4ZTNHMUxyNVkKV693pzTKRkZboQCMPr9IyMGSgxfuHXcb Y6BNcp6Qg6PWtX5QI7wRkPNINAK1TEbRBba+b8h6gMmVU4DliQyFiQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-12-01T14:26:39Z" - mac: ENC[AES256_GCM,data:UFp+14rzSop6XoqLQcihDd935hQOmihyjBxXQGweLGHHZZapk0rCsgkO5/zZnjRgTf0Aeyr9u5fQHGcZn7lFASkx4yiTdoRgjnezeI+hHd3tSqYt6cfsY5jm0w24AIve7JCF16hdLMUP5ho4jusX1beKfnb7HQYJjfqR4dGhxek=,iv:IaUd1X73GH1RSn+nf2C/XVlPXmSOAGrrEbvKM7G5Xn4=,tag:oWZSb+QIc2dg1EvweuWrXA==,type:str] + lastmodified: "2025-12-01T14:27:13Z" + mac: ENC[AES256_GCM,data:v8t65zlWw6UuFeFQ5oBNVGjnuewPlZZG7ea8P4cEHXN+JnSAE67HivSCyjhUAFmX/UbksxnSLYdl72swTb9ASv6JaW2FVJsaF+5zmZbuM5pAjZl4MR6Y7+Vc9YqAi+axnSE1s8pRe9U1PYmcbLWaY9kRZdccavfM2bsoAIpJRTk=,iv:EevmWMh6ygEAlf9RE4qZ1KVKm6yDR5dTZeraoFHmdRg=,tag:sCdtEYc9iNjfEvyYyXH8rQ==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 -- 2.51.2 From 5396c9bab6a13133a8e9fccb53a8203e90fccc82 Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Mon, 1 Dec 2025 15:30:47 +0100 Subject: [PATCH 15/22] chore: revert bash option --- modules/nixos/shells/default.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/nixos/shells/default.nix b/modules/nixos/shells/default.nix index 37afd9b..ea8f50d 100644 --- a/modules/nixos/shells/default.nix +++ b/modules/nixos/shells/default.nix @@ -1,5 +1,2 @@ {...}: { - config = { - programs.bash.enableCompletion = true; - }; } -- 2.51.2 From 7a7e8bb088c38b6bf8c33f8da034ac0e0a9cd027 Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Mon, 1 Dec 2025 15:31:14 +0100 Subject: [PATCH 16/22] fix: zitadel script --- .../services/authentication/zitadel/default.nix | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/nixos/services/authentication/zitadel/default.nix b/modules/nixos/services/authentication/zitadel/default.nix index ee06900..1b400bb 100644 --- a/modules/nixos/services/authentication/zitadel/default.nix +++ b/modules/nixos/services/authentication/zitadel/default.nix @@ -555,7 +555,11 @@ in wantedBy = [ "multi-user.target" ]; wants = [ "zitadel.service" ]; - script = '' + script = + let + tofu = lib.getExe pkgs.opentofu; + in + '' #!/usr/bin/env bash if [ "$(systemctl is-active zitadel)" != "active" ]; then @@ -570,11 +574,11 @@ in cp -f ${terraformConfiguration} config.tf.json # Initialize OpenTofu - ${lib.getExe pkgs.opentofu} init + ${tofu} init # Run the infrastructure code - # ${lib.getExe pkgs.opentofu} plan - ${lib.getExe pkgs.opentofu} apply -auto-approve + ${tofu} plan -refresh=false -out=tfplan + ${tofu} apply -auto-approve tfplan ''; serviceConfig = { -- 2.51.2 From 70fd7c3d7a2a5eb68813e04b4bafee18f164a58f Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Mon, 1 Dec 2025 20:56:56 +0100 Subject: [PATCH 17/22] . --- .../nixos/services/media/mydia/default.nix | 1 + .../services/security/vaultwarden/default.nix | 131 +++++++++--------- 2 files changed, 68 insertions(+), 64 deletions(-) diff --git a/modules/nixos/services/media/mydia/default.nix b/modules/nixos/services/media/mydia/default.nix index 6fa94ca..aa44856 100644 --- a/modules/nixos/services/media/mydia/default.nix +++ b/modules/nixos/services/media/mydia/default.nix @@ -24,6 +24,7 @@ in { package = inputs.mydia.packages.${system}.default; port = 2010; + listenAddress = "0.0.0.0"; openFirewall = true; secretKeyBaseFile = config.sops.secrets."mydia/secret_key_base".path; diff --git a/modules/nixos/services/security/vaultwarden/default.nix b/modules/nixos/services/security/vaultwarden/default.nix index abab566..07f7058 100644 --- a/modules/nixos/services/security/vaultwarden/default.nix +++ b/modules/nixos/services/security/vaultwarden/default.nix @@ -1,25 +1,31 @@ -{ pkgs, config, lib, namespace, ... }: -let +{ + pkgs, + config, + lib, + namespace, + ... +}: let inherit (builtins) toString; inherit (lib) mkIf mkEnableOption mkOption types getAttrs toUpper concatMapAttrsStringSep; cfg = config.${namespace}.services.security.vaultwarden; - databaseProviderSqlite = types.submodule ({ ... }: { + databaseProviderSqlite = types.submodule ({...}: { options = { type = mkOption { - type = types.enum [ "sqlite" ]; + type = types.enum ["sqlite"]; }; file = mkOption { - type = types.str; - description = ''''; + type = types.path; + description = '' + Path to sqlite database file. + ''; }; }; }); - databaseProviderPostgresql = types.submodule ({ ... }: - let + databaseProviderPostgresql = types.submodule ({...}: let urlOptions = lib.${namespace}.options.mkUrlOptions { host = { description = '' @@ -40,36 +46,36 @@ let example = "postgres"; }; }; - in - { - options = { - type = mkOption { - type = types.enum [ "postgresql" ]; - }; + in { + options = + { + type = mkOption { + type = types.enum ["postgresql"]; + }; - sslMode = mkOption { - type = types.enum [ "verify-ca" "verify-full" "require" "prefer" "allow" "disabled" ]; - default = "verify-full"; - example = "verify-ca"; - description = '' - How to verify the server's ssl + sslMode = mkOption { + type = types.enum ["verify-ca" "verify-full" "require" "prefer" "allow" "disabled"]; + default = "verify-full"; + example = "verify-ca"; + description = '' + How to verify the server's ssl - | mode | eavesdropping protection | MITM protection | Statement | - |-------------|--------------------------|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------| - | disable | No | No | I don't care about security, and I don't want to pay the overhead of encryption. | - | allow | Maybe | No | I don't care about security, but I will pay the overhead of encryption if the server insists on it. | - | prefer | Maybe | No | I don't care about encryption, but I wish to pay the overhead of encryption if the server supports it. | - | require | Yes | No | I want my data to be encrypted, and I accept the overhead. I trust that the network will make sure I always connect to the server I want. | - | verify-ca | Yes | Depends on CA policy | I want my data encrypted, and I accept the overhead. I want to be sure that I connect to a server that I trust. | - | verify-full | Yes | Yes | I want my data encrypted, and I accept the overhead. I want to be sure that I connect to a server I trust, and that it's the one I specify. | - - [Source](https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-SSLMODE-STATEMENTS) - ''; - }; - } // (urlOptions |> getAttrs [ "protocol" "host" "port" ]); + | mode | eavesdropping protection | MITM protection | Statement | + |-------------|--------------------------|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------| + | disable | No | No | I don't care about security, and I don't want to pay the overhead of encryption. | + | allow | Maybe | No | I don't care about security, but I will pay the overhead of encryption if the server insists on it. | + | prefer | Maybe | No | I don't care about encryption, but I wish to pay the overhead of encryption if the server supports it. | + | require | Yes | No | I want my data to be encrypted, and I accept the overhead. I trust that the network will make sure I always connect to the server I want. | + | verify-ca | Yes | Depends on CA policy | I want my data encrypted, and I accept the overhead. I want to be sure that I connect to a server that I trust. | + | verify-full | Yes | Yes | I want my data encrypted, and I accept the overhead. I want to be sure that I connect to a server I trust, and that it's the one I specify. | + + [Source](https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-SSLMODE-STATEMENTS) + ''; + }; + } + // (urlOptions |> getAttrs ["protocol" "host" "port"]); }); -in -{ +in { options.${namespace}.services.security.vaultwarden = { enable = mkEnableOption "enable vaultwarden"; @@ -136,7 +142,7 @@ in postgresql = { enable = true; - ensureDatabases = [ "vaultwarden" ]; + ensureDatabases = ["vaultwarden"]; ensureUsers = [ { name = "vaultwarden"; @@ -171,7 +177,7 @@ in owner = config.users.users.vaultwarden.name; group = config.users.users.vaultwarden.name; key = "email/chris_kruining_eu"; - restartUnits = [ "vaultwarden.service" ]; + restartUnits = ["vaultwarden.service"]; }; }; @@ -183,34 +189,31 @@ in owner = config.users.users.vaultwarden.name; group = config.users.groups.vaultwarden.name; }; - temp-db-output.content = - let - config = - cfg.database - |> ({ type, ... }@db: - if type == "sqlite" then - { inherit (db) type file; } - else if type == "postgresql" then - { - inherit (db) type; - url = lib.${namespace}.strings.toUrl { - inherit (db) protocol host port; - path = "vaultwarden"; - query = { - sslmode = db.sslMode; - }; + temp-db-output.content = let + config = + cfg.database + |> ( + {type, ...} @ db: + if type == "sqlite" + then {inherit (db) type file;} + else if type == "postgresql" + then { + inherit (db) type; + url = lib.${namespace}.strings.toUrl { + inherit (db) protocol host port; + path = "vaultwarden"; + query = { + sslmode = db.sslMode; }; - } - else - {} - ) - |> concatMapAttrsStringSep "\n" (n: v: "${toUpper n}=${v}") - ; - in - '' - # GENERATED VALUES - ${config} - ''; + }; + } + else {} + ) + |> concatMapAttrsStringSep "\n" (n: v: "${toUpper n}=${v}"); + in '' + # GENERATED VALUES + ${config} + ''; }; }; }; -- 2.51.2 From 2130c44388f94e466c9c748797772206c65e779d Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Tue, 2 Dec 2025 09:18:02 +0100 Subject: [PATCH 18/22] . --- .gitattributes | 1 + .just/machine.just | 22 ++-- .just/vars.just | 70 +++++------ .justfile | 64 +++++----- flake.lock | 88 ++++++-------- flake.nix | 3 +- homes/x86_64-linux/chris@mandos/default.nix | 9 +- homes/x86_64-linux/chris@manwe/default.nix | 9 +- homes/x86_64-linux/chris@orome/default.nix | 9 +- homes/x86_64-linux/chris@tulkas/default.nix | 9 +- .../home/application/onlyoffice/default.nix | 16 ++- modules/home/application/steam/default.nix | 110 +++++++++--------- .../home/application/teamspeak/default.nix | 30 ++--- modules/home/shell/toolset/git/default.nix | 34 +++--- modules/nixos/application/steam/default.nix | 15 ++- .../authentication/zitadel/default.nix | 2 - .../nixos/services/media/mydia/default.nix | 6 +- 17 files changed, 254 insertions(+), 243 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..176a458 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.just/machine.just b/.just/machine.just index 098e101..cc7665e 100644 --- a/.just/machine.just +++ b/.just/machine.just @@ -1,11 +1,11 @@ -@_default: list - -[doc('List machines')] -@list: - ls -1 ../systems/x86_64-linux/ - -[doc('Update the target machine')] -[no-exit-message] -@update machine: - just assert '-d "../systems/x86_64-linux/{{ machine }}"' "Machine {{ machine }} does not exist, must be one of: $(ls ../systems/x86_64-linux/ | sed ':a;N;$!ba;s/\n/, /g')" - nixos-rebuild switch --use-remote-sudo --target-host {{ machine }} --flake ..#{{ machine }} +@_default: list + +[doc('List machines')] +@list: + ls -1 ../systems/x86_64-linux/ + +[doc('Update the target machine')] +[no-exit-message] +@update machine: + just assert '-d "../systems/x86_64-linux/{{ machine }}"' "Machine {{ machine }} does not exist, must be one of: $(ls ../systems/x86_64-linux/ | sed ':a;N;$!ba;s/\n/, /g')" + nixos-rebuild switch --use-remote-sudo --target-host {{ machine }} --flake ..#{{ machine }} diff --git a/.just/vars.just b/.just/vars.just index 0d381ef..d8bd181 100644 --- a/.just/vars.just +++ b/.just/vars.just @@ -1,36 +1,36 @@ -set unstable - -base_path := invocation_directory() / "systems/x86_64-linux" -# sops := "nix shell nixpkgs#sops --command sops" -# yq := "nix shell nixpkgs#yq --command yq" -sops := "sops" -yq := "yq" - -@_default: - just --list - -[doc('list all vars of the target machine')] -list machine: - sops decrypt {{ base_path }}/{{ machine }}/secrets.yml - -@edit machine: - sops edit {{ base_path }}/{{ machine }}/secrets.yml - -@set machine key value: - sops set {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" "\"$(echo '{{ value }}' | sed 's/\"/\\\"/g')\"" - - git add {{ base_path }}/{{ machine }}/secrets.yml - git commit -m 'chore(secrets): set secret "{{ key }}" for machine "{{ machine}}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null - - echo "Done" - -@get machine key: - sops decrypt {{ base_path }}/{{ machine }}/secrets.yml | yq ".$(echo "{{ key }}" | sed -E 's/\//./g')" - -@remove machine key: - sops unset {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" - - git add {{ base_path }}/{{ machine }}/secrets.yml - git commit -m 'chore(secrets): removed secret "{{ key }}" from machine "{{ machine}}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null - +set unstable + +base_path := invocation_directory() / "systems/x86_64-linux" +# sops := "nix shell nixpkgs#sops --command sops" +# yq := "nix shell nixpkgs#yq --command yq" +sops := "sops" +yq := "yq" + +@_default: + just --list + +[doc('list all vars of the target machine')] +list machine: + sops decrypt {{ base_path }}/{{ machine }}/secrets.yml + +@edit machine: + sops edit {{ base_path }}/{{ machine }}/secrets.yml + +@set machine key value: + sops set {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" "\"$(echo '{{ value }}' | sed 's/\"/\\\"/g')\"" + + git add {{ base_path }}/{{ machine }}/secrets.yml + git commit -m 'chore(secrets): set secret "{{ key }}" for machine "{{ machine}}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null + + echo "Done" + +@get machine key: + sops decrypt {{ base_path }}/{{ machine }}/secrets.yml | yq ".$(echo "{{ key }}" | sed -E 's/\//./g')" + +@remove machine key: + sops unset {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" + + git add {{ base_path }}/{{ machine }}/secrets.yml + git commit -m 'chore(secrets): removed secret "{{ key }}" from machine "{{ machine}}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null + echo "Done" \ No newline at end of file diff --git a/.justfile b/.justfile index 87563d0..3a15d20 100644 --- a/.justfile +++ b/.justfile @@ -1,33 +1,33 @@ -@_default: - just --list --list-submodules - -[doc('Manage vars')] -mod vars '.just/vars.just' - -[doc('Manage machines')] -mod machine '.just/machine.just' - -[doc('Show information about project')] -@show: - echo "show" - -[doc('update the flake dependencies')] -@update: - nix flake update - git commit -m 'chore: update dependencies' -- ./flake.lock > /dev/null - echo "Done" - -[doc('Introspection on flake output')] -@select key: - nix eval --json .#{{ key }} | jq . - - - -#=============================================================================================== -# Utils -#=============================================================================================== -[no-exit-message] -[no-cd] -[private] -@assert condition message: +@_default: + just --list --list-submodules + +[doc('Manage vars')] +mod vars '.just/vars.just' + +[doc('Manage machines')] +mod machine '.just/machine.just' + +[doc('Show information about project')] +@show: + echo "show" + +[doc('update the flake dependencies')] +@update: + nix flake update + git commit -m 'chore: update dependencies' -- ./flake.lock > /dev/null + echo "Done" + +[doc('Introspection on flake output')] +@select key: + nix eval --json .#{{ key }} | jq . + + + +#=============================================================================================== +# Utils +#=============================================================================================== +[no-exit-message] +[no-cd] +[private] +@assert condition message: [ {{ condition }} ] || { echo -e 1>&2 "\n\x1b[1;41m Error \x1b[0m {{ message }}\n"; exit 1; } \ No newline at end of file diff --git a/flake.lock b/flake.lock index 4f55a24..5fda659 100644 --- a/flake.lock +++ b/flake.lock @@ -320,6 +320,27 @@ } }, "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "mydia", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1763759067, + "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { "inputs": { "nixpkgs-lib": [ "nvf", @@ -340,7 +361,7 @@ "type": "github" } }, - "flake-parts_3": { + "flake-parts_4": { "inputs": { "nixpkgs-lib": [ "stylix", @@ -361,7 +382,7 @@ "type": "github" } }, - "flake-parts_4": { + "flake-parts_5": { "inputs": { "nixpkgs-lib": [ "terranix", @@ -402,7 +423,7 @@ }, "flake-utils-plus": { "inputs": { - "flake-utils": "flake-utils_5" + "flake-utils": "flake-utils_4" }, "locked": { "lastModified": 1715533576, @@ -457,25 +478,7 @@ }, "flake-utils_4": { "inputs": { - "systems": "systems_5" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_5": { - "inputs": { - "systems": "systems_7" + "systems": "systems_6" }, "locked": { "lastModified": 1694529238, @@ -682,19 +685,19 @@ }, "mydia": { "inputs": { - "flake-utils": "flake-utils_3", + "flake-parts": "flake-parts_2", "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1764568388, - "narHash": "sha256-kl8165eI0lUz9E96sdreZ48/nApydDfJP8IksjBveAw=", - "owner": "getmydia", + "lastModified": 1764661298, + "narHash": "sha256-sdYGCZnrbjshBDvGDI34MepTHAJsdL3FZQHdqRJzPSk=", + "owner": "chris-kruining", "repo": "mydia", - "rev": "74f0cf9a8ca782581ec0a35acf6526fccfbb6e2a", + "rev": "a5a03289332c435946c4ebdcaee70d96380bc1a7", "type": "github" }, "original": { - "owner": "getmydia", + "owner": "chris-kruining", "repo": "mydia", "type": "github" } @@ -745,7 +748,7 @@ "nix-minecraft": { "inputs": { "flake-compat": "flake-compat_3", - "flake-utils": "flake-utils_4", + "flake-utils": "flake-utils_3", "nixpkgs": "nixpkgs_6" }, "locked": { @@ -1065,10 +1068,10 @@ "nvf": { "inputs": { "flake-compat": "flake-compat_4", - "flake-parts": "flake-parts_2", + "flake-parts": "flake-parts_3", "mnw": "mnw", "nixpkgs": "nixpkgs_8", - "systems": "systems_6" + "systems": "systems_5" }, "locked": { "lastModified": 1762622004, @@ -1239,11 +1242,11 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_3", + "flake-parts": "flake-parts_4", "gnome-shell": "gnome-shell", "nixpkgs": "nixpkgs_10", "nur": "nur", - "systems": "systems_8", + "systems": "systems_7", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", "tinted-schemes": "tinted-schemes", @@ -1384,28 +1387,13 @@ "type": "github" } }, - "systems_9": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "terranix": { "inputs": { - "flake-parts": "flake-parts_4", + "flake-parts": "flake-parts_5", "nixpkgs": [ "nixpkgs" ], - "systems": "systems_9" + "systems": "systems_8" }, "locked": { "lastModified": 1762472226, diff --git a/flake.nix b/flake.nix index 5668380..7ccab59 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,8 @@ }; mydia = { - url = "github:getmydia/mydia"; + url = "github:chris-kruining/mydia"; + # url = "github:getmydia/mydia"; }; }; diff --git a/homes/x86_64-linux/chris@mandos/default.nix b/homes/x86_64-linux/chris@mandos/default.nix index 6989314..ba87e73 100644 --- a/homes/x86_64-linux/chris@mandos/default.nix +++ b/homes/x86_64-linux/chris@mandos/default.nix @@ -1,10 +1,11 @@ -{ osConfig, ... }: -{ +{osConfig, ...}: { home.stateVersion = osConfig.system.stateVersion; programs.git = { - userName = "Chris Kruining"; - userEmail = "chris@kruining.eu"; + settings.user = { + name = "Chris Kruining"; + email = "chris@kruining.eu"; + }; }; sneeuwvlok = { diff --git a/homes/x86_64-linux/chris@manwe/default.nix b/homes/x86_64-linux/chris@manwe/default.nix index 9abe613..0aced9b 100644 --- a/homes/x86_64-linux/chris@manwe/default.nix +++ b/homes/x86_64-linux/chris@manwe/default.nix @@ -1,10 +1,11 @@ -{ osConfig, ... }: -{ +{osConfig, ...}: { home.stateVersion = osConfig.system.stateVersion; programs.git = { - userName = "Chris Kruining"; - userEmail = "chris@kruining.eu"; + settings.user = { + name = "Chris Kruining"; + email = "chris@kruining.eu"; + }; }; sneeuwvlok = { diff --git a/homes/x86_64-linux/chris@orome/default.nix b/homes/x86_64-linux/chris@orome/default.nix index dece506..7a1dc43 100644 --- a/homes/x86_64-linux/chris@orome/default.nix +++ b/homes/x86_64-linux/chris@orome/default.nix @@ -1,10 +1,11 @@ -{ osConfig, ... }: -{ +{osConfig, ...}: { home.stateVersion = osConfig.system.stateVersion; programs.git = { - userName = "Chris Kruining"; - userEmail = "chris@kruining.eu"; + settings.user = { + name = "Chris Kruining"; + email = "chris@kruining.eu"; + }; }; sneeuwvlok = { diff --git a/homes/x86_64-linux/chris@tulkas/default.nix b/homes/x86_64-linux/chris@tulkas/default.nix index 6989314..ba87e73 100644 --- a/homes/x86_64-linux/chris@tulkas/default.nix +++ b/homes/x86_64-linux/chris@tulkas/default.nix @@ -1,10 +1,11 @@ -{ osConfig, ... }: -{ +{osConfig, ...}: { home.stateVersion = osConfig.system.stateVersion; programs.git = { - userName = "Chris Kruining"; - userEmail = "chris@kruining.eu"; + settings.user = { + name = "Chris Kruining"; + email = "chris@kruining.eu"; + }; }; sneeuwvlok = { diff --git a/modules/home/application/onlyoffice/default.nix b/modules/home/application/onlyoffice/default.nix index 8153b68..0479539 100644 --- a/modules/home/application/onlyoffice/default.nix +++ b/modules/home/application/onlyoffice/default.nix @@ -1,16 +1,20 @@ -{ inputs, config, lib, pkgs, namespace, ... }: -let +{ + inputs, + config, + lib, + pkgs, + namespace, + ... +}: let inherit (lib) mkIf mkEnableOption; cfg = config.${namespace}.application.onlyoffice; -in -{ +in { options.${namespace}.application.onlyoffice = { enable = mkEnableOption "enable onlyoffice"; }; config = mkIf cfg.enable { - home.packages = with pkgs; [ onlyoffice-bin ]; - # fonts.packages = with pkgs; [ corefonts ]; + home.packages = with pkgs; [onlyoffice-desktopeditors]; }; } diff --git a/modules/home/application/steam/default.nix b/modules/home/application/steam/default.nix index ec47942..8c87b40 100644 --- a/modules/home/application/steam/default.nix +++ b/modules/home/application/steam/default.nix @@ -1,55 +1,55 @@ -{ inputs, config, lib, pkgs, namespace, ... }: -let - inherit (lib) mkIf mkEnableOption; - - cfg = config.${namespace}.application.steam; -in -{ - options.${namespace}.application.steam = { - enable = mkEnableOption "enable steam"; - }; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ protonup-ng ]; - - home.sessionVariables = { - STEAM_EXTRA_COMPAT_TOOLS_PATHS = "\${HOME}/.steam/root/compatibilitytools.d"; - }; - - programs = { - # steam = { - # enable = true; - # package = pkgs.steam-small.override { - # extraEnv = { - # DXVK_HUD = "compiler"; - # MANGOHUD = true; - # }; - # }; - - # gamescopeSession = { - # enable = true; - # args = ["--immediate-flips"]; - # }; - # }; - - # https://github.com/FeralInteractive/gamemode - # gamemode = { - # enable = true; - # enableRenice = true; - # settings = {}; - # }; - - # gamescope = { - # enable = true; - # capSysNice = true; - # env = { - # DXVK_HDR = "1"; - # ENABLE_GAMESCOPE_WSI = "1"; - # WINE_FULLSCREEN_FSR = "1"; - # WLR_RENDERER = "vulkan"; - # }; - # args = ["--hdr-enabled"]; - # }; - }; - }; -} +{ inputs, config, lib, pkgs, namespace, ... }: +let + inherit (lib) mkIf mkEnableOption; + + cfg = config.${namespace}.application.steam; +in +{ + options.${namespace}.application.steam = { + enable = mkEnableOption "enable steam"; + }; + + config = mkIf cfg.enable { + home.packages = with pkgs; [ protonup-ng ]; + + home.sessionVariables = { + STEAM_EXTRA_COMPAT_TOOLS_PATHS = "\${HOME}/.steam/root/compatibilitytools.d"; + }; + + programs = { + # steam = { + # enable = true; + # package = pkgs.steam-small.override { + # extraEnv = { + # DXVK_HUD = "compiler"; + # MANGOHUD = true; + # }; + # }; + + # gamescopeSession = { + # enable = true; + # args = ["--immediate-flips"]; + # }; + # }; + + # https://github.com/FeralInteractive/gamemode + # gamemode = { + # enable = true; + # enableRenice = true; + # settings = {}; + # }; + + # gamescope = { + # enable = true; + # capSysNice = true; + # env = { + # DXVK_HDR = "1"; + # ENABLE_GAMESCOPE_WSI = "1"; + # WINE_FULLSCREEN_FSR = "1"; + # WLR_RENDERER = "vulkan"; + # }; + # args = ["--hdr-enabled"]; + # }; + }; + }; +} diff --git a/modules/home/application/teamspeak/default.nix b/modules/home/application/teamspeak/default.nix index aab3c5d..d234e9a 100644 --- a/modules/home/application/teamspeak/default.nix +++ b/modules/home/application/teamspeak/default.nix @@ -1,15 +1,15 @@ -{ inputs, config, lib, pkgs, namespace, ... }: -let - inherit (lib) mkIf mkEnableOption; - - cfg = config.${namespace}.application.teamspeak; -in -{ - options.${namespace}.application.teamspeak = { - enable = mkEnableOption "enable teamspeak"; - }; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ teamspeak3 teamspeak6-client ]; - }; -} +{ inputs, config, lib, pkgs, namespace, ... }: +let + inherit (lib) mkIf mkEnableOption; + + cfg = config.${namespace}.application.teamspeak; +in +{ + options.${namespace}.application.teamspeak = { + enable = mkEnableOption "enable teamspeak"; + }; + + config = mkIf cfg.enable { + home.packages = with pkgs; [ teamspeak3 teamspeak6-client ]; + }; +} diff --git a/modules/home/shell/toolset/git/default.nix b/modules/home/shell/toolset/git/default.nix index 299b2a6..dd138c8 100644 --- a/modules/home/shell/toolset/git/default.nix +++ b/modules/home/shell/toolset/git/default.nix @@ -1,10 +1,14 @@ -{ config, lib, pkgs, namespace, ... }: -let +{ + config, + lib, + pkgs, + namespace, + ... +}: let inherit (lib) mkEnableOption mkIf; cfg = config.${namespace}.shell.toolset.git; -in -{ +in { options.${namespace}.shell.toolset.git = { enable = mkEnableOption "version-control system"; }; @@ -12,7 +16,7 @@ in config = mkIf cfg.enable { home.sessionVariables.GITHUB_TOKEN = "$(cat /run/agenix/tokenGH)"; - home.packages = with pkgs; [ lazygit lazyjj jujutsu ]; + home.packages = with pkgs; [lazygit lazyjj jujutsu]; programs = { zsh.initContent = '' @@ -29,14 +33,6 @@ in git = { enable = true; package = pkgs.gitFull; - difftastic = { - enable = true; - options = { - background = "dark"; - color = "always"; - display = "inline"; - }; - }; ignores = [ # General: @@ -69,7 +65,7 @@ in "*.elc" ]; - extraConfig = { + settings = { init.defaultBranch = "main"; core = { editor = "nvim"; @@ -106,6 +102,16 @@ in }; }; }; + + difftastic = { + enable = true; + git.enable = true; + options = { + background = "dark"; + color = "always"; + display = "inline"; + }; + }; }; }; } diff --git a/modules/nixos/application/steam/default.nix b/modules/nixos/application/steam/default.nix index 6170e8a..735aa80 100644 --- a/modules/nixos/application/steam/default.nix +++ b/modules/nixos/application/steam/default.nix @@ -1,10 +1,15 @@ -{ inputs, config, lib, pkgs, namespace, ... }: -let +{ + inputs, + config, + lib, + pkgs, + namespace, + ... +}: let inherit (lib) mkIf mkEnableOption; cfg = config.${namespace}.application.steam; -in -{ +in { options.${namespace}.application.steam = { enable = mkEnableOption "enable steam"; }; @@ -13,7 +18,7 @@ in programs = { steam = { enable = true; - package = pkgs.steam-small.override { + package = pkgs.steam.override { extraEnv = { DXVK_HUD = "compiler"; MANGOHUD = true; diff --git a/modules/nixos/services/authentication/zitadel/default.nix b/modules/nixos/services/authentication/zitadel/default.nix index 1b400bb..c0d9dc5 100644 --- a/modules/nixos/services/authentication/zitadel/default.nix +++ b/modules/nixos/services/authentication/zitadel/default.nix @@ -560,8 +560,6 @@ in tofu = lib.getExe pkgs.opentofu; in '' - #!/usr/bin/env bash - if [ "$(systemctl is-active zitadel)" != "active" ]; then echo "Zitadel is not running" exit 1 diff --git a/modules/nixos/services/media/mydia/default.nix b/modules/nixos/services/media/mydia/default.nix index aa44856..1dbacda 100644 --- a/modules/nixos/services/media/mydia/default.nix +++ b/modules/nixos/services/media/mydia/default.nix @@ -21,12 +21,16 @@ in { config = mkIf cfg.enable { services.mydia = { enable = true; - package = inputs.mydia.packages.${system}.default; port = 2010; listenAddress = "0.0.0.0"; openFirewall = true; + database = { + type = "postgres"; + uri = "postgres://localhost:5432/mydia?sslMode=disable"; + }; + secretKeyBaseFile = config.sops.secrets."mydia/secret_key_base".path; guardianSecretKeyFile = config.sops.secrets."mydia/guardian_secret".path; -- 2.51.2 From 37600b71161d342b4ef5fa608eefbfbf321b85be Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 4 Dec 2025 11:24:36 +0000 Subject: [PATCH 19/22] chore(secrets): set secret "qbittorrent/password_hash" for machine "ulmo" --- systems/x86_64-linux/ulmo/secrets.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/systems/x86_64-linux/ulmo/secrets.yml b/systems/x86_64-linux/ulmo/secrets.yml index 9e80086..b50f9c5 100644 --- a/systems/x86_64-linux/ulmo/secrets.yml +++ b/systems/x86_64-linux/ulmo/secrets.yml @@ -24,6 +24,8 @@ mydia: oidc_secret: ENC[AES256_GCM,data:PgI4hmP/3wt9uj+1QvCYcT8Wav0hgCRADouzWM3V695SSfXfbwDgez8tA/tm1/1jymAU2F2sZH8G2hZ1cdHyHQ==,iv:h3o3jsTmnoNE3+mGX12J3ZU0/6PlQNjdndEvaj/czj0=,tag:p3+p4E8fBtR7a8UpM8cUsg==,type:str] secret_key_base: ENC[AES256_GCM,data:yG7HJ5r74Qtxbeyf8F6dA0uHv2pQ8YAJKlKiKjS+m24JRvJWQaTThJ+c5HbuUa6R3e9XtVHchhlVPkF0Is/b+g==,iv:v65xdRr4JdKZmBtjZ08/J3LLqnphSGt9QfVPNQ2x/xg=,tag:n7tD2dhr4IJn1LWM9WW8UA==,type:str] guardian_secret: ENC[AES256_GCM,data:OjnNFSHlecL+qXwlhTm++itRM6ga5E5KrSJxbgIUpbMEkIWgu3xhRtnPdipXbedgall0XdO/s+jnWCagZX94BA==,iv:DukdKvm9vey8BWUiml20tgA/Vji1XVX4+sUPge9nTk0=,tag:q3HdvgUYqR0APiaFz0ul5Q==,type:str] +qbittorrent: + password_hash: ENC[AES256_GCM,data:QWuQYmfBn9eLDYztH7TmQvw74MvmzCQ98OlBtyjm1Icr2c63epRuHWzQbm+Q+1jrCSiQreOB3ZyjLzkeV6SlLonryUSD71uBWVwctgPXO0XDrxE1Vi6dkiwC3TF65JTMDhyjDLEj1YkiMP25Fz5NidJTP/r9GlXTfM7gjWo=,iv:bpgL5IoAv+1PUtgNIjLcbzN8C9z55ndypz4LEELAhLc=,tag:VB+XTCwLeIEYKnOr/0f7zA==,type:str] sops: age: - recipient: age19qfpf980tadguqq44zf6xwvjvl428dyrj46ha3n6aeqddwhtnuqqml7etq @@ -44,7 +46,7 @@ sops: TTRWaHhpNWlkVDFmMFN4ZTNHMUxyNVkKV693pzTKRkZboQCMPr9IyMGSgxfuHXcb Y6BNcp6Qg6PWtX5QI7wRkPNINAK1TEbRBba+b8h6gMmVU4DliQyFiQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-12-01T14:27:13Z" - mac: ENC[AES256_GCM,data:v8t65zlWw6UuFeFQ5oBNVGjnuewPlZZG7ea8P4cEHXN+JnSAE67HivSCyjhUAFmX/UbksxnSLYdl72swTb9ASv6JaW2FVJsaF+5zmZbuM5pAjZl4MR6Y7+Vc9YqAi+axnSE1s8pRe9U1PYmcbLWaY9kRZdccavfM2bsoAIpJRTk=,iv:EevmWMh6ygEAlf9RE4qZ1KVKm6yDR5dTZeraoFHmdRg=,tag:sCdtEYc9iNjfEvyYyXH8rQ==,type:str] + lastmodified: "2025-12-04T11:24:33Z" + mac: ENC[AES256_GCM,data:vj6S7BjI7WqsdXxn2QGawJ1joiaCXYm42VJ/qw8ZMeoNBUJfyokYvdTxEG7jPJxBP0MSnbXPfkPXk7TPh6q2HiWG4QEbawTkoHZ9BFWZlqmyRxwHuTOU07+AgV1+DywScwrVlbFRo3vd1LkWZl/gyLWm7oYPfsknzxBDYpOf04M=,iv:mlK1eEG0m7tnjCzf++q4dNfAn4EZtT5INyiyMv2ZZGI=,tag:Gd2Swbq2JhDeyUm4svlGUg==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 -- 2.51.2 From f079fa7487c76103cf89afbea906ad7b2198d275 Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 4 Dec 2025 11:24:52 +0000 Subject: [PATCH 20/22] chore(secrets): set secret "qbittorrent/password" for machine "ulmo" --- systems/x86_64-linux/ulmo/secrets.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/systems/x86_64-linux/ulmo/secrets.yml b/systems/x86_64-linux/ulmo/secrets.yml index b50f9c5..086d86d 100644 --- a/systems/x86_64-linux/ulmo/secrets.yml +++ b/systems/x86_64-linux/ulmo/secrets.yml @@ -26,6 +26,7 @@ mydia: guardian_secret: ENC[AES256_GCM,data:OjnNFSHlecL+qXwlhTm++itRM6ga5E5KrSJxbgIUpbMEkIWgu3xhRtnPdipXbedgall0XdO/s+jnWCagZX94BA==,iv:DukdKvm9vey8BWUiml20tgA/Vji1XVX4+sUPge9nTk0=,tag:q3HdvgUYqR0APiaFz0ul5Q==,type:str] qbittorrent: password_hash: ENC[AES256_GCM,data:QWuQYmfBn9eLDYztH7TmQvw74MvmzCQ98OlBtyjm1Icr2c63epRuHWzQbm+Q+1jrCSiQreOB3ZyjLzkeV6SlLonryUSD71uBWVwctgPXO0XDrxE1Vi6dkiwC3TF65JTMDhyjDLEj1YkiMP25Fz5NidJTP/r9GlXTfM7gjWo=,iv:bpgL5IoAv+1PUtgNIjLcbzN8C9z55ndypz4LEELAhLc=,tag:VB+XTCwLeIEYKnOr/0f7zA==,type:str] + password: ENC[AES256_GCM,data:UepYY6UjJV/jo2aXTOEnKRtsjSqOSYPQlKlrAa7rf9rdnt2UXGjCkvN+A72pICuIBCAmhXZBAUMvmWTV9trk6NREHe0cY1xTC7pNv3x9TM/ZQmH498pbT/95pYAKwouHp9heJQ==,iv:FzjF+xPoaOp+gplxpz940V2dkWSTWe8dWUxexCoxxHc=,tag:TDZsboq9fEmmBrwJN/HTpQ==,type:str] sops: age: - recipient: age19qfpf980tadguqq44zf6xwvjvl428dyrj46ha3n6aeqddwhtnuqqml7etq @@ -46,7 +47,7 @@ sops: TTRWaHhpNWlkVDFmMFN4ZTNHMUxyNVkKV693pzTKRkZboQCMPr9IyMGSgxfuHXcb Y6BNcp6Qg6PWtX5QI7wRkPNINAK1TEbRBba+b8h6gMmVU4DliQyFiQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-12-04T11:24:33Z" - mac: ENC[AES256_GCM,data:vj6S7BjI7WqsdXxn2QGawJ1joiaCXYm42VJ/qw8ZMeoNBUJfyokYvdTxEG7jPJxBP0MSnbXPfkPXk7TPh6q2HiWG4QEbawTkoHZ9BFWZlqmyRxwHuTOU07+AgV1+DywScwrVlbFRo3vd1LkWZl/gyLWm7oYPfsknzxBDYpOf04M=,iv:mlK1eEG0m7tnjCzf++q4dNfAn4EZtT5INyiyMv2ZZGI=,tag:Gd2Swbq2JhDeyUm4svlGUg==,type:str] + lastmodified: "2025-12-04T11:24:52Z" + mac: ENC[AES256_GCM,data:jIgkl1lcVDSlKqJs9fjaHUAZsGL+22T86/qqKyDziHl0+VU763Ezwm8P+la+55jIIT2zLhFcUjhn2BabBi90OeEPztAC4rGpZj6+ZZ0GDCj/JhjPAAo3LgAKOCG0Xgf8MZWr/rXd6bLhW7Qj36PMJnap26rjEiUZeSvpWS2dz8g=,iv:CDx8fBI9Dl1uwrbMD1fa7/h3C7haK3xZxJI59mtL1LA=,tag:2UDRFJoevGEBKZA/9eUiOw==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 -- 2.51.2 From a787c8c646be6dff1ff3fdda18c3540914391de9 Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Sat, 6 Dec 2025 17:42:02 +0100 Subject: [PATCH 21/22] chore: update deps --- flake.lock | 148 ++++++++++++++---- .../authentication/himmelblau/default.nix | 15 +- 2 files changed, 128 insertions(+), 35 deletions(-) diff --git a/flake.lock b/flake.lock index 5fda659..66f4631 100644 --- a/flake.lock +++ b/flake.lock @@ -38,11 +38,11 @@ "base16-helix": { "flake": false, "locked": { - "lastModified": 1752979451, - "narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=", + "lastModified": 1760703920, + "narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", "owner": "tinted-theming", "repo": "base16-helix", - "rev": "27cf1e66e50abc622fb76a3019012dc07c678fac", + "rev": "d646af9b7d14bff08824538164af99d0c521b185", "type": "github" }, "original": { @@ -206,11 +206,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1758112371, - "narHash": "sha256-lizRM2pj6PHrR25yimjyFn04OS4wcdbc38DCdBVa2rk=", + "lastModified": 1764724327, + "narHash": "sha256-OkFLrD3pFR952TrjQi1+Vdj604KLcMnkpa7lkW7XskI=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "0909cfe4a2af8d358ad13b20246a350e14c2473d", + "rev": "66b7c635763d8e6eb86bd766de5a1e1fbfcc1047", "type": "github" }, "original": { @@ -369,11 +369,11 @@ ] }, "locked": { - "lastModified": 1756770412, - "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", + "lastModified": 1763759067, + "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "4524271976b625a4a605beefd893f270620fd751", + "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", "type": "github" }, "original": { @@ -532,11 +532,11 @@ "flake": false, "locked": { "host": "gitlab.gnome.org", - "lastModified": 1762869044, - "narHash": "sha256-nwm/GJ2Syigf7VccLAZ66mFC8mZJFqpJmIxSGKl7+Ds=", + "lastModified": 1764524476, + "narHash": "sha256-bTmNn3Q4tMQ0J/P0O5BfTQwqEnCiQIzOGef9/aqAZvk=", "owner": "GNOME", "repo": "gnome-shell", - "rev": "680e3d195a92203f28d4bf8c6e8bb537cc3ed4ad", + "rev": "c0e1ad9f0f703fd0519033b8f46c3267aab51a22", "type": "gitlab" }, "original": { @@ -574,11 +574,19 @@ "rust-overlay": "rust-overlay" }, "locked": { +<<<<<<< HEAD "lastModified": 1764617621, "narHash": "sha256-Eq0TvWs6xhKZs5HXH1hlrNasrHD7AOEdeLkTis//X7w=", "owner": "himmelblau-idm", "repo": "himmelblau", "rev": "c19494250d8c15e7c75e9301bdc271579a6dc77a", +======= + "lastModified": 1764787446, + "narHash": "sha256-RUfGGM8kiXSQA3ct1BZXN5Sm8hxr3XF0P/eR/WGLaGU=", + "owner": "himmelblau-idm", + "repo": "himmelblau", + "rev": "8ab33affe6db4cf5e9c17c2abcd7f3b2cedcfbd8", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { @@ -594,11 +602,19 @@ ] }, "locked": { +<<<<<<< HEAD "lastModified": 1764603455, "narHash": "sha256-Q70rxlbrxPcTtqWIb9+71rkJESxIOou5isZBvyOieXw=", "owner": "nix-community", "repo": "home-manager", "rev": "effe4c007d6243d9e69ce2242d76a2471c1b8d5c", +======= + "lastModified": 1764839789, + "narHash": "sha256-QCgaXEj8036JlfyVM2e5fgKIxoF7IgGRcAi8LkehKvo=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "d441981b200305ebb8e2e2921395f51d207fded6", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { @@ -636,11 +652,19 @@ ] }, "locked": { +<<<<<<< HEAD "lastModified": 1764612577, "narHash": "sha256-sHI+7m/ryVYf7agWkutYbvzUS07aAd8g2NVWgUqhxLg=", "owner": "Jovian-Experiments", "repo": "Jovian-NixOS", "rev": "bcb22e208cf8883004fcec3a33f2500e7dc319a5", +======= + "lastModified": 1764746434, + "narHash": "sha256-6ymFuw+Z1C90ezf8H0BP3c2JFZhJYwMq31px2StwWHU=", + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "rev": "b4c0b604148adacf119b89824ed26df8926ce42c", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { @@ -689,11 +713,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1764661298, - "narHash": "sha256-sdYGCZnrbjshBDvGDI34MepTHAJsdL3FZQHdqRJzPSk=", + "lastModified": 1764840646, + "narHash": "sha256-ffhLaQWDm4iyf7j3uxmMXg5k7FRimaj8PXA4Jj9EpB0=", "owner": "chris-kruining", "repo": "mydia", - "rev": "a5a03289332c435946c4ebdcaee70d96380bc1a7", + "rev": "035fa63a276ed4dd9743fdf5ff50a651cabb9bcd", "type": "github" }, "original": { @@ -752,11 +776,19 @@ "nixpkgs": "nixpkgs_6" }, "locked": { +<<<<<<< HEAD "lastModified": 1764556167, "narHash": "sha256-/b+oEls56HDRzsSp60tsRfPFRjFebBPHq6k1I+hfPqw=", "owner": "Infinidoge", "repo": "nix-minecraft", "rev": "849d1b2b1adddfc7bddbd3be6bffd218a3f5a6fe", +======= + "lastModified": 1764813963, + "narHash": "sha256-Vs7Mamto+T8r1evk9myHepgHGNJkS2Kr0BF64NIei94=", + "owner": "Infinidoge", + "repo": "nix-minecraft", + "rev": "491200d6848402bbab1421cccbc15a46f08c7f78", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { @@ -852,11 +884,19 @@ ] }, "locked": { +<<<<<<< HEAD "lastModified": 1764591717, "narHash": "sha256-T/HMA0Bb/O6UnlGQ0Xt+wGe1j8m7eyyQ5+vVcCJslsM=", "owner": "nix-community", "repo": "nixos-wsl", "rev": "84d1dab290feb4865d0cfcffc7aa0cf9bc65c3b7", +======= + "lastModified": 1764730608, + "narHash": "sha256-FxKIa3OCSRVC23qrk7VT68vExUcmSruJ8OobVlSWOxc=", + "owner": "nix-community", + "repo": "nixos-wsl", + "rev": "10124c58674360765adcb38c9a8b081fb72904e4", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { @@ -898,11 +938,11 @@ }, "nixpkgs_10": { "locked": { - "lastModified": 1762977756, - "narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=", + "lastModified": 1764517877, + "narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55", + "rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c", "type": "github" }, "original": { @@ -914,11 +954,19 @@ }, "nixpkgs_2": { "locked": { +<<<<<<< HEAD "lastModified": 1764547213, "narHash": "sha256-pGXM6frMKLRJmeMcQ228O1QQBuNEUjzmWx9uBd+CbXM=", "owner": "nixos", "repo": "nixpkgs", "rev": "64de27c1c985895c1a9f92aaeaab4e6a4c0960f5", +======= + "lastModified": 1764811743, + "narHash": "sha256-Ypfd8oBuG3HWtzcY7VtYiI6Pawznag7YHWy8RoOfiBs=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4a6ebaabd716d6479b39fa234a8f895f0ec1cb88", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { @@ -946,11 +994,19 @@ }, "nixpkgs_4": { "locked": { +<<<<<<< HEAD "lastModified": 1764618760, "narHash": "sha256-QTUgygkdUq4sq7mXoO2Q2IPpvkKOZtTAJkbTaTjMi0A=", "owner": "NixOS", "repo": "nixpkgs", "rev": "29a7d6eec7e1177020f62f7599e5021317219c37", +======= + "lastModified": 1764856222, + "narHash": "sha256-yEJmtoFu4cJre1NuU4fb8q57Oux+NTbocnALtJ64aEI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ece6e266caf1effab32eceef0403b797b4330373", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { @@ -994,11 +1050,19 @@ }, "nixpkgs_7": { "locked": { +<<<<<<< HEAD "lastModified": 1764517877, "narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=", "owner": "nixos", "repo": "nixpkgs", "rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c", +======= + "lastModified": 1764667669, + "narHash": "sha256-7WUCZfmqLAssbDqwg9cUDAXrSoXN79eEEq17qhTNM/Y=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "418468ac9527e799809c900eda37cbff999199b6", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { @@ -1052,11 +1116,11 @@ ] }, "locked": { - "lastModified": 1758998580, - "narHash": "sha256-VLx0z396gDCGSiowLMFz5XRO/XuNV+4EnDYjdJhHvUk=", + "lastModified": 1764773531, + "narHash": "sha256-mCBl7MD1WZ7yCG6bR9MmpPO2VydpNkWFgnslJRIT1YU=", "owner": "nix-community", "repo": "NUR", - "rev": "ba8d9c98f5f4630bcb0e815ab456afd90c930728", + "rev": "1d9616689e98beded059ad0384b9951e967a17fa", "type": "github" }, "original": { @@ -1139,11 +1203,19 @@ "rust-analyzer-src": { "flake": false, "locked": { +<<<<<<< HEAD "lastModified": 1764525349, "narHash": "sha256-vR3vU9AwzMsBvjNeeG2inA5W/2MwseFk5NIIrLFEMHk=", "owner": "rust-lang", "repo": "rust-analyzer", "rev": "d646b23f000d099d845f999c2c1e05b15d9cdc78", +======= + "lastModified": 1764778537, + "narHash": "sha256-SNL+Fj1ZWiBqCrHJT1S9vMZujrWxCOmf3zkT66XSnhE=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "633cff25206d5108043d87617a43c9d04aa42c88", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { @@ -1254,11 +1326,19 @@ "tinted-zed": "tinted-zed" }, "locked": { +<<<<<<< HEAD "lastModified": 1764550443, "narHash": "sha256-ArO2V1YEHmEILilTj4KPtqF4gqc1q2HBrrrmygQ/UyU=", "owner": "nix-community", "repo": "stylix", "rev": "794b6e1fa75177ebfeb32967f135858a1ab1ba15", +======= + "lastModified": 1764798099, + "narHash": "sha256-IIwR5ZWo7tjxjRpkz0tViF9KFbQ1YXs9Wkan46WQbfk=", + "owner": "nix-community", + "repo": "stylix", + "rev": "4b9e0e7ba3cccb86fe2bf0f4a2dd18256bef1cc6", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { @@ -1445,11 +1525,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1757716333, - "narHash": "sha256-d4km8W7w2zCUEmPAPUoLk1NlYrGODuVa3P7St+UrqkM=", + "lastModified": 1763914658, + "narHash": "sha256-Hju0WtMf3iForxtOwXqGp3Ynipo0EYx1AqMKLPp9BJw=", "owner": "tinted-theming", "repo": "schemes", - "rev": "317a5e10c35825a6c905d912e480dfe8e71c7559", + "rev": "0f6be815d258e435c9b137befe5ef4ff24bea32c", "type": "github" }, "original": { @@ -1461,11 +1541,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1757811970, - "narHash": "sha256-n5ZJgmzGZXOD9pZdAl1OnBu3PIqD+X3vEBUGbTi4JiI=", + "lastModified": 1764465359, + "narHash": "sha256-lbSVPqLEk2SqMrnpvWuKYGCaAlfWFMA6MVmcOFJjdjE=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "d217ba31c846006e9e0ae70775b0ee0f00aa6b1e", + "rev": "edf89a780e239263cc691a987721f786ddc4f6aa", "type": "github" }, "original": { @@ -1477,11 +1557,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1757811247, - "narHash": "sha256-4EFOUyLj85NRL3OacHoLGEo0wjiRJzfsXtR4CZWAn6w=", + "lastModified": 1764464512, + "narHash": "sha256-rCD/pAhkMdCx6blsFwxIyvBJbPZZ1oL2sVFrH07lmqg=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "824fe0aacf82b3c26690d14e8d2cedd56e18404e", + "rev": "907dbba5fb8cf69ebfd90b00813418a412d0a29a", "type": "github" }, "original": { @@ -1519,11 +1599,19 @@ ] }, "locked": { +<<<<<<< HEAD "lastModified": 1764598958, "narHash": "sha256-sJQHRL8trBoG/ArR+mUlyp5cyKU0pgQY+qDQzZGnVgM=", "owner": "0xc000022070", "repo": "zen-browser-flake", "rev": "8cded25e10b13e2999241f1c73a7d4e5e5d6f69e", +======= + "lastModified": 1764825646, + "narHash": "sha256-QkKEkj3GXpkPxJz9S1RgaMlxstkyaj5IKVWvxIbtC8w=", + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "rev": "8c9284cc227a5c7cd8f1e1fa7a6882b0907187c8", +>>>>>>> ba1d4e1 (chore: update deps) "type": "github" }, "original": { diff --git a/modules/nixos/services/authentication/himmelblau/default.nix b/modules/nixos/services/authentication/himmelblau/default.nix index 1228759..d39d4cf 100644 --- a/modules/nixos/services/authentication/himmelblau/default.nix +++ b/modules/nixos/services/authentication/himmelblau/default.nix @@ -1,10 +1,15 @@ -{ inputs, lib, config, namespace, ... }: let +{ + inputs, + lib, + config, + namespace, + ... +}: let inherit (lib) mkEnableOption mkIf; cfg = config.${namespace}.services.authentication.himmelblau; -in -{ - imports = [ inputs.himmelblau.nixosModules.himmelblau ]; +in { + imports = [inputs.himmelblau.nixosModules.himmelblau]; options.${namespace}.services.authentication.himmelblau = { enable = mkEnableOption "enable azure entra ID authentication"; @@ -14,7 +19,7 @@ in services.himmelblau = { enable = true; settings = { - domains = []; + domain = ""; pam_allow_groups = []; local_groups = []; }; -- 2.51.2 From 98425c9dcc393aec60b5775bde56c71d4db98209 Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Sat, 6 Dec 2025 17:39:16 +0100 Subject: [PATCH 22/22] kaas --- .forgejo/workflows/action.yml | 2 +- .just/machine.just | 2 +- .just/vars.just | 36 +- .justfile | 4 +- flake.lock | 6 +- .../services/development/forgejo/default.nix | 8 + modules/nixos/services/media/default.nix | 323 ++++++++++-------- .../nixos/services/media/mydia/default.nix | 44 ++- 8 files changed, 251 insertions(+), 174 deletions(-) diff --git a/.forgejo/workflows/action.yml b/.forgejo/workflows/action.yml index 684cfad..2c61087 100644 --- a/.forgejo/workflows/action.yml +++ b/.forgejo/workflows/action.yml @@ -12,4 +12,4 @@ jobs: steps: - name: Echo run: | - nix --version \ No newline at end of file + nix --version diff --git a/.just/machine.just b/.just/machine.just index cc7665e..ca10e1c 100644 --- a/.just/machine.just +++ b/.just/machine.just @@ -8,4 +8,4 @@ [no-exit-message] @update machine: just assert '-d "../systems/x86_64-linux/{{ machine }}"' "Machine {{ machine }} does not exist, must be one of: $(ls ../systems/x86_64-linux/ | sed ':a;N;$!ba;s/\n/, /g')" - nixos-rebuild switch --use-remote-sudo --target-host {{ machine }} --flake ..#{{ machine }} + nixos-rebuild switch -L --use-remote-sudo --target-host {{ machine }} --flake ..#{{ machine }} diff --git a/.just/vars.just b/.just/vars.just index d8bd181..3b706da 100644 --- a/.just/vars.just +++ b/.just/vars.just @@ -1,36 +1,38 @@ -set unstable +set unstable := true base_path := invocation_directory() / "systems/x86_64-linux" + # sops := "nix shell nixpkgs#sops --command sops" # yq := "nix shell nixpkgs#yq --command yq" + sops := "sops" yq := "yq" @_default: - just --list + just --list [doc('list all vars of the target machine')] list machine: - sops decrypt {{ base_path }}/{{ machine }}/secrets.yml - + sops decrypt {{ base_path }}/{{ machine }}/secrets.yml + @edit machine: - sops edit {{ base_path }}/{{ machine }}/secrets.yml - + sops edit {{ base_path }}/{{ machine }}/secrets.yml + @set machine key value: - sops set {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" "\"$(echo '{{ value }}' | sed 's/\"/\\\"/g')\"" + sops set {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" "\"$(echo '{{ value }}' | sed 's/\"/\\\"/g')\"" - git add {{ base_path }}/{{ machine }}/secrets.yml - git commit -m 'chore(secrets): set secret "{{ key }}" for machine "{{ machine}}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null + git add {{ base_path }}/{{ machine }}/secrets.yml + git commit -m 'chore(secrets): set secret "{{ key }}" for machine "{{ machine }}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null + + echo "Done" - echo "Done" - @get machine key: - sops decrypt {{ base_path }}/{{ machine }}/secrets.yml | yq ".$(echo "{{ key }}" | sed -E 's/\//./g')" - + sops decrypt {{ base_path }}/{{ machine }}/secrets.yml | yq ".$(echo "{{ key }}" | sed -E 's/\//./g')" + @remove machine key: - sops unset {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" + sops unset {{ base_path }}/{{ machine }}/secrets.yml "$(printf '%s\n' '["{{ key }}"]' | sed -E 's#/#"]["#g; s/\["([0-9]+)"\]/[\1]/g')" - git add {{ base_path }}/{{ machine }}/secrets.yml - git commit -m 'chore(secrets): removed secret "{{ key }}" from machine "{{ machine}}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null + git add {{ base_path }}/{{ machine }}/secrets.yml + git commit -m 'chore(secrets): removed secret "{{ key }}" from machine "{{ machine }}"' -- {{ base_path }}/{{ machine }}/secrets.yml > /dev/null - echo "Done" \ No newline at end of file + echo "Done" diff --git a/.justfile b/.justfile index 3a15d20..75537e1 100644 --- a/.justfile +++ b/.justfile @@ -19,7 +19,7 @@ mod machine '.just/machine.just' [doc('Introspection on flake output')] @select key: - nix eval --json .#{{ key }} | jq . + nix eval --show-trace --json .#{{ key }} | jq . @@ -30,4 +30,4 @@ mod machine '.just/machine.just' [no-cd] [private] @assert condition message: - [ {{ condition }} ] || { echo -e 1>&2 "\n\x1b[1;41m Error \x1b[0m {{ message }}\n"; exit 1; } \ No newline at end of file + [ {{ condition }} ] || { echo -e 1>&2 "\n\x1b[1;41m Error \x1b[0m {{ message }}\n"; exit 1; } diff --git a/flake.lock b/flake.lock index 66f4631..9d00509 100644 --- a/flake.lock +++ b/flake.lock @@ -713,11 +713,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1764840646, - "narHash": "sha256-ffhLaQWDm4iyf7j3uxmMXg5k7FRimaj8PXA4Jj9EpB0=", + "lastModified": 1764866402, + "narHash": "sha256-0NOWsPks+/vV5ZM9ti71hUPMLy3FzbEIlFI6vxARvuY=", "owner": "chris-kruining", "repo": "mydia", - "rev": "035fa63a276ed4dd9743fdf5ff50a651cabb9bcd", + "rev": "458fc9a21c6987d994bc7932efb6c49df25ba806", "type": "github" }, "original": { diff --git a/modules/nixos/services/development/forgejo/default.nix b/modules/nixos/services/development/forgejo/default.nix index c7aff89..114726e 100644 --- a/modules/nixos/services/development/forgejo/default.nix +++ b/modules/nixos/services/development/forgejo/default.nix @@ -184,6 +184,14 @@ in { }; }; + users = { + users."gitea-runner" = { + isSystemUser = true; + group = "gitea-runner"; + }; + groups."gitea-runner" = {}; + }; + sops.secrets = { "forgejo/action_runner_token" = { owner = "gitea-runner"; diff --git a/modules/nixos/services/media/default.nix b/modules/nixos/services/media/default.nix index 1950bf0..c880580 100644 --- a/modules/nixos/services/media/default.nix +++ b/modules/nixos/services/media/default.nix @@ -1,13 +1,19 @@ -{ pkgs, lib, namespace, config, inputs, system, ... }: -let +{ + pkgs, + lib, + namespace, + config, + inputs, + system, + ... +}: let inherit (lib) mkIf mkEnableOption mkOption; inherit (lib.types) str; cfg = config.${namespace}.services.media; - arr = ["radarr" ]; -in -{ + arr = ["radarr"]; +in { options.${namespace}.services.media = { enable = mkEnableOption "Enable media services"; @@ -69,117 +75,132 @@ in # Services #========================================================================= services = let - arr-services = + arr-services = arr |> lib.imap (i: service: { name = service; - value = { - enable = true; - openFirewall = true; + value = + { + enable = true; + openFirewall = true; - environmentFiles = [ - config.sops.templates."${service}/config.env".path - ]; + environmentFiles = [ + config.sops.templates."${service}/config.env".path + ]; - settings = { - auth.authenticationMethod = "External"; + settings = { + auth.authenticationMethod = "External"; - server = { - bindaddress = "0.0.0.0"; - port = 2000 + i; + server = { + bindaddress = "0.0.0.0"; + port = 2000 + i; + }; + + postgres = { + host = "localhost"; + port = "5432"; + user = service; + maindb = service; + logdb = service; + }; }; - - postgres = { - host = "localhost"; - port = "5432"; - user = service; - maindb = service; - logdb = service; - }; - }; - } - // (if service != "prowlarr" then { user = cfg.user; group = cfg.group; } else {}); + } + // ( + if service != "prowlarr" + then { + user = cfg.user; + group = cfg.group; + } + else {} + ); }) - |> lib.listToAttrs - ; - in - arr-services // { - bazarr = { - enable = true; - openFirewall = true; - user = cfg.user; - group = cfg.group; - listenPort = 2005; - }; - - # port is harcoded in nixpkgs module - jellyfin = { - enable = true; - openFirewall = true; - user = cfg.user; - group = cfg.group; - }; - - flaresolverr = { - enable = true; - openFirewall = true; - port = 2007; - }; - - qbittorrent = { - enable = true; - openFirewall = true; - webuiPort = 2008; - - serverConfig = { - LegalNotice.Accepted = true; + |> lib.listToAttrs; + in + arr-services + // { + bazarr = { + enable = true; + openFirewall = true; + user = cfg.user; + group = cfg.group; + listenPort = 2005; }; - user = cfg.user; - group = cfg.group; - }; + # port is harcoded in nixpkgs module + jellyfin = { + enable = true; + openFirewall = true; + user = cfg.user; + group = cfg.group; + }; - # port is harcoded in nixpkgs module - sabnzbd = { - enable = true; - openFirewall = true; - configFile = "${cfg.path}/sabnzbd/config.ini"; + flaresolverr = { + enable = true; + openFirewall = true; + port = 2007; + }; - user = cfg.user; - group = cfg.group; - }; + qbittorrent = { + enable = true; + openFirewall = true; + webuiPort = 2008; - postgresql = - let - databases = arr |> lib.concatMap (s: [ s "${s}-log" ]); - in - { - enable = true; - ensureDatabases = arr; - ensureUsers = arr |> lib.map (service: { - name = service; - ensureDBOwnership = true; - }); - }; + serverConfig = { + LegalNotice.Accepted = true; - caddy = { - enable = true; - virtualHosts = { - "jellyfin.kruining.eu".extraConfig = '' - reverse_proxy http://[::1]:8096 - ''; + Prefecences.WebUI = { + Username = "admin"; + }; + }; + + user = cfg.user; + group = cfg.group; + }; + + # port is harcoded in nixpkgs module + sabnzbd = { + enable = true; + openFirewall = true; + configFile = "${cfg.path}/sabnzbd/config.ini"; + + user = cfg.user; + group = cfg.group; + }; + + postgresql = let + databases = arr |> lib.concatMap (s: [s "${s}-log"]); + in { + enable = true; + ensureDatabases = arr; + ensureUsers = + arr + |> lib.map (service: { + name = service; + ensureDBOwnership = true; + }); + }; + + caddy = { + enable = true; + virtualHosts = { + "jellyfin.kruining.eu".extraConfig = '' + reverse_proxy http://[::1]:8096 + ''; + }; }; }; - }; - systemd.services.radarrApplyTerraform = - let + systemd.services.radarrApplyTerraform = let # this is a nix package, the generated json file to be exact terraformConfiguration = inputs.terranix.lib.terranixConfiguration { inherit system; modules = [ - ({ config, lib, ... }: { + ({ + config, + lib, + ... + }: { config = { variable = { api_key = { @@ -207,13 +228,12 @@ in }) ]; }; - in - { + in { description = "Radarr terraform apply"; - wantedBy = [ "multi-user.target" ]; - wants = [ "radarr.service" ]; - + wantedBy = ["multi-user.target"]; + wants = ["radarr.service"]; + script = '' #!/usr/bin/env bash @@ -255,53 +275,70 @@ in systemd.services.jellyfin.serviceConfig.killSignal = lib.mkForce "SIGKILL"; sops = { - secrets = - arr - |> lib.map (service: { - name = "${service}/apikey"; - value = { + secrets = let + arrSecrets = + arr + |> lib.map (service: { + name = "${service}/apikey"; + value = { + owner = cfg.user; + group = cfg.group; + restartUnits = ["${service}.service"]; + }; + }) + |> lib.listToAttrs; + in + arrSecrets + // { + # "qbittorrent/password" = {}; + "qbittorrent/password_hash" = {}; + }; + + templates = let + apikeys = + arr + |> lib.map (service: { + name = "${service}/config.env"; + value = { + owner = cfg.user; + group = cfg.group; + restartUnits = ["${service}.service"]; + content = '' + ${lib.toUpper service}__AUTH__APIKEY="${config.sops.placeholder."${service}/apikey"}" + ''; + }; + }) + |> lib.listToAttrs; + + tfvars = + arr + |> lib.map (service: { + name = "${service}/config.tfvars"; + value = { + owner = cfg.user; + group = cfg.group; + restartUnits = ["${service}ApplyTerraform.service"]; + content = '' + api_key = "${config.sops.placeholder."${service}/apikey"}" + ''; + }; + }) + |> lib.listToAttrs; + + qbittorrent = { + "qbittorrent/password.conf" = { owner = cfg.user; group = cfg.group; - restartUnits = [ "${service}.service" ]; + restartUnits = ["qbittorrent.service"]; + path = "${config.services.qbittorrent.profileDir}/qBittorrent/config/password.conf"; + content = '' + [Preferences] + WebUI\Password_PBKDF2="${config.sops.placeholder."qbittorrent/password_hash"}" + ''; }; - }) - |> lib.listToAttrs - ; - - templates = - let - apikeys = - arr - |> lib.map (service: { - name = "${service}/config.env"; - value = { - owner = cfg.user; - group = cfg.group; - restartUnits = [ "${service}.service" ]; - content = '' - ${lib.toUpper service}__AUTH__APIKEY="${config.sops.placeholder."${service}/apikey"}" - ''; - }; - }) - |> lib.listToAttrs; - - tfvars = - arr - |> lib.map(service: { - name = "${service}/config.tfvars"; - value = { - owner = cfg.user; - group = cfg.group; - restartUnits = [ "${service}ApplyTerraform.service" ]; - content = '' - api_key = "${config.sops.placeholder."${service}/apikey"}" - ''; - }; - }) - |> lib.listToAttrs; - in - apikeys // tfvars - ; + }; + in + apikeys // tfvars // qbittorrent; }; }; } diff --git a/modules/nixos/services/media/mydia/default.nix b/modules/nixos/services/media/mydia/default.nix index 1dbacda..2bee38a 100644 --- a/modules/nixos/services/media/mydia/default.nix +++ b/modules/nixos/services/media/mydia/default.nix @@ -26,9 +26,17 @@ in { listenAddress = "0.0.0.0"; openFirewall = true; + mediaLibraries = [ + "/var/mydia/movies" + "/var/mydia/series" + ]; + database = { + # type = "sqlite"; + # uri = "file:///var/lib/mydia/mydia.db"; type = "postgres"; - uri = "postgres://localhost:5432/mydia?sslMode=disable"; + uri = "postgres://mydia@localhost:5432/mydia?sslmode=disable"; + passwordFile = config.sops.secrets."mydia/qbittorrent_password".path; }; secretKeyBaseFile = config.sops.secrets."mydia/secret_key_base".path; @@ -41,16 +49,38 @@ in { clientSecretFile = config.sops.secrets."mydia/oidc_secret".path; scopes = ["openid" "profile" "email"]; }; + + downloadClients = { + qbittorrent = { + type = "qbittorrent"; + host = "localhost"; + port = 2008; + username = "admin"; + passwordFile = config.sops.secrets."mydia/qbittorrent_password".path; + useSsl = false; + }; + }; }; - sops.secrets = - ["secret_key_base" "guardian_secret" "oidc_id" "oidc_secret"] - |> lib.map (name: - lib.nameValuePair "mydia/${name}" { + sops.secrets = let + base = + ["secret_key_base" "guardian_secret" "oidc_id" "oidc_secret"] + |> lib.map (name: + lib.nameValuePair "mydia/${name}" { + owner = config.services.mydia.user; + group = config.services.mydia.group; + restartUnits = ["mydia.service"]; + }) + |> lib.listToAttrs; + in + base + // { + "mydia/qbittorrent_password" = { owner = config.services.mydia.user; group = config.services.mydia.group; restartUnits = ["mydia.service"]; - }) - |> lib.listToAttrs; + key = "qbittorrent/password"; + }; + }; }; } -- 2.51.2