diff --git a/pkgs/lucem/default.nix b/pkgs/lucem/default.nix new file mode 100644 index 0000000..af38d71 --- /dev/null +++ b/pkgs/lucem/default.nix @@ -0,0 +1,61 @@ +{ + lib, + buildNimPackage, + curl, + gtk4, + libadwaita, + pkg-config, + openssl, + xorg, + libxkbcommon, + libGL, + wayland, + wayland-protocols, + wayland-scanner, + fetchFromGitHub, +}: +buildNimPackage (finalAttrs: { + pname = "lucem"; + version = "2.1.2"; + + src = fetchFromGitHub { + owner = "xTrayambak"; + repo = "lucem"; + tag = finalAttrs.version; + hash = "sha256-9i7YMXG6hXMcQmVdPYX+YxrtQPHZE1RZb+gv5dGEff8="; + }; + + patches = [ + ./lucem-disable-auto-updater.patch + ]; + + lockFile = ./lock.json; + + buildInputs = [ + gtk4.dev + libadwaita.dev + openssl.dev + curl.dev + xorg.libX11 + xorg.libXcursor.dev + xorg.libXrender + xorg.libXext + libxkbcommon.dev + libGL.dev + wayland.dev + wayland-protocols + wayland-scanner.dev + ]; + nativeBuildInputs = [ + pkg-config + ]; + + # env.LD_LIBRARY_PATH = lib.makeLibraryPath [ + # gtk4.dev + # libadwaita.dev + # pkg-config + # curl.dev + # openssl.dev + # wayland.dev + # ]; +}) diff --git a/pkgs/lucem/lock.json b/pkgs/lucem/lock.json new file mode 100644 index 0000000..3ffad34 --- /dev/null +++ b/pkgs/lucem/lock.json @@ -0,0 +1,291 @@ +{ + "depends": [ + { + "method": "fetchzip", + "path": "/nix/store/n3pckbrnpfnlcm7n0c5i75lgl47ghgha-source", + "rev": "d9ee0328d5cec8fd216d3ce8676cebf1976e9272", + "sha256": "02wq4wad7r517rls5n1i9gww9a138a20kiy3d2ax723s3h6s0srg", + "url": "https://github.com/4zv4l/colored_logger/archive/d9ee0328d5cec8fd216d3ce8676cebf1976e9272.tar.gz", + "ref": "HEAD", + "packages": [ + "colored_logger" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/bzcq8q439rdsqhhihikzv3rsx4l4ybdm-source", + "rev": "ea811bec7fa50f5abd3088ba94cda74285e93f18", + "sha256": "1720iqsxjhqmhw1zhhs7d2ncdz25r8fqadls1p1iry1wfikjlnba", + "url": "https://github.com/treeform/jsony/archive/ea811bec7fa50f5abd3088ba94cda74285e93f18.tar.gz", + "ref": "1.1.5", + "packages": [ + "jsony" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/f3ghbm17akdg7dj5sarr616hvma09dr5-source", + "rev": "fea85b27f0badcf617033ca1bc05444b5fd8aa7a", + "sha256": "1m96c3k83sj1z2vgjp55fplzf0kym6hhhym4ywydjl9x4zw1a5la", + "url": "https://github.com/status-im/nim-toml-serialization/archive/fea85b27f0badcf617033ca1bc05444b5fd8aa7a.tar.gz", + "ref": "HEAD", + "packages": [ + "toml_serialization" + ], + "srcDir": "" + }, + { + "method": "fetchzip", + "path": "/nix/store/idsbhi7xb4dmfqbmbl5dq47qh2vs6mjj-source", + "rev": "9e770046c5cdf23d395d6b21c4657345481b1c76", + "sha256": "1li0r6ng3ynzh5qb12qs6czmaaay7gw45khs2niz291nia6navl1", + "url": "https://github.com/treeform/pretty/archive/9e770046c5cdf23d395d6b21c4657345481b1c76.tar.gz", + "ref": "0.2.0", + "packages": [ + "pretty" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/ax2p5d7wz6ipj0y2zpd9rckzzj7a6f0q-source", + "rev": "861092dc931e754650a735af590fbc34becc3942", + "sha256": "100vxxdpzayj44syfkwn5nrpk5189qiky43xh7w3k908yxrq0jbj", + "url": "https://github.com/can-lehmann/owlkettle/archive/861092dc931e754650a735af590fbc34becc3942.tar.gz", + "ref": "v3.0.0", + "packages": [ + "owlkettle" + ], + "srcDir": "" + }, + { + "method": "fetchzip", + "path": "/nix/store/y4f3wxlh76h10kflz7vqmkd4vniqp6kw-source", + "rev": "309d6ed8164ad184ed5bbb171c9f3d9d1c11ff81", + "sha256": "0b7givvg0lij4qkv8xpisp0ahcadggavpb85jds5z5k19palh74c", + "url": "https://github.com/nimgl/nimgl/archive/309d6ed8164ad184ed5bbb171c9f3d9d1c11ff81.tar.gz", + "ref": "1.3.2", + "packages": [ + "nimgl" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/nqnhn3vpi49aj4pn722c1qpinnzq056b-source", + "rev": "7b4266458b7435349b28a4468e0af58f1674b198", + "sha256": "12j4rzlxpibxy2jfah21qj1lf63rbkkki971y5i52dmnp84bhjzp", + "url": "https://github.com/treeform/netty/archive/7b4266458b7435349b28a4468e0af58f1674b198.tar.gz", + "ref": "0.2.1", + "packages": [ + "netty" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/cbzq2fmn5582kqx3w9ima7ll4x19cmx1-source", + "rev": "a0f42baacbc48f4e5924b18854c0df9dcc251466", + "sha256": "0033kxrh8s3wmmh5ky6vlbjk2mq3c3vy0syvl5rwah2zmg0k6wzf", + "url": "https://github.com/guzba/curly/archive/a0f42baacbc48f4e5924b18854c0df9dcc251466.tar.gz", + "ref": "1.1.1", + "packages": [ + "curly" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/nzqdyy9q0q0rrlpmjmihrq084nyskidd-source", + "rev": "44dc097236de00c09ffed13d4e4aeaff1473870e", + "sha256": "0m7bdiz3dnmdb5cc8k4sksmb71mlg1n75582zv5hhvp2jsj9sxsa", + "url": "https://github.com/johnnovak/nim-nanovg/archive/44dc097236de00c09ffed13d4e4aeaff1473870e.tar.gz", + "ref": "v0.4.0", + "packages": [ + "nanovg" + ], + "srcDir": "" + }, + { + "method": "fetchzip", + "path": "/nix/store/85w9njq4kkp7cjhz40bmmksiv0053p50-source", + "rev": "9ce9aa3efa84f55bbf3d29ef0517b2411d08a357", + "sha256": "1lm4iynl0c8hzizwc723b29ss6cw78hhr6k62a7x7ddycmxyxsnm", + "url": "https://github.com/levovix0/siwin/archive/9ce9aa3efa84f55bbf3d29ef0517b2411d08a357.tar.gz", + "packages": [ + "siwin" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/dvv6cgzl9xmax5rmjxnp5wrr08ibvjaw-source", + "rev": "8e2e098f82dc5eefd874488c37b5830233cd18f4", + "sha256": "01csz5bl4jiv7jx76k7izgknl7k73y2i9hd9s6brlhfqhq7cqxmz", + "url": "https://github.com/nim-lang/opengl/archive/8e2e098f82dc5eefd874488c37b5830233cd18f4.tar.gz", + "ref": "1.2.9", + "packages": [ + "opengl" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/h98460b96pynrpwxawaq21w6rjhamlvi-source", + "rev": "ec7732a4810441a937fe3059494ba338090c4957", + "sha256": "0dw33jprxrc23bj0b6ypbg6n940nzxlrxa57df88q4ly1xvi6w1h", + "url": "https://github.com/euantorano/semver.nim/archive/ec7732a4810441a937fe3059494ba338090c4957.tar.gz", + "ref": "v1.2.3", + "packages": [ + "semver" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/d6c7dvmzzvc1ja7kf65jbclbjv74zll7-source", + "rev": "2086c99608b4bf472e1ef5fe063710f280243396", + "sha256": "1m7c9bvxarw167kd5mpfnddzydji03azhz347hvad592qfw4vwrc", + "url": "https://github.com/status-im/nim-serialization/archive/2086c99608b4bf472e1ef5fe063710f280243396.tar.gz", + "ref": "v0.2.6", + "packages": [ + "serialization" + ], + "srcDir": "" + }, + { + "method": "fetchzip", + "path": "/nix/store/a5kmnnbk27rxk9vsx1vchiiq9znkpijf-source", + "rev": "79e4fa5a9d3374db17ed63622714d3e1094c7f34", + "sha256": "0x92sgnxczwx5ak067d6169j9qm0cdpbrcpp1ijrzgyfgknpyq0r", + "url": "https://github.com/status-im/nim-stew/archive/79e4fa5a9d3374db17ed63622714d3e1094c7f34.tar.gz", + "ref": "v0.2.0", + "packages": [ + "stew" + ], + "srcDir": "" + }, + { + "method": "fetchzip", + "path": "/nix/store/vx0a8hw7hs5an0dnbrn6l16bd6is7hdr-source", + "rev": "07f6ba8ab96238e5bd1264cf0cea1d1746abb00c", + "sha256": "005nrldaasfl09zdsni1vi8s7dk0y85ijv6rm2wpj94435x66s36", + "url": "https://github.com/treeform/flatty/archive/07f6ba8ab96238e5bd1264cf0cea1d1746abb00c.tar.gz", + "ref": "0.3.4", + "packages": [ + "flatty" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/bqmdy8vic5wfvpc9hqp4rfrhjlxz4d7c-source", + "rev": "45b2b0bb753fe2376a205a183b2b3f291e19ba14", + "sha256": "1yz1lcclmhvji34ccymglzg535b3xfz0x4m12n3n22cxz156j63x", + "url": "https://github.com/Araq/libcurl/archive/45b2b0bb753fe2376a205a183b2b3f291e19ba14.tar.gz", + "ref": "v1.0.0", + "packages": [ + "libcurl" + ], + "srcDir": "" + }, + { + "method": "fetchzip", + "path": "/nix/store/zcd2hmjxlkp1bpb7c9xrpg153ssj3w0b-source", + "rev": "a99f6a7d8a8e3e0213b3cad0daf0ea974bf58e3f", + "sha256": "16qdnyql8d7nm7nwwpq0maflm3p6cpbb2jfaqx6xkld9xkc9lsbv", + "url": "https://github.com/guzba/zippy/archive/a99f6a7d8a8e3e0213b3cad0daf0ea974bf58e3f.tar.gz", + "ref": "0.10.16", + "packages": [ + "zippy" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/4q986rlniaxascxkvx4q8rsx12frjd51-source", + "rev": "325d6ade0970562bee7d7d53961a2c3287f0c4bc", + "sha256": "0qa8hzvamsdszygra3lcc92zk6rzm3gh1mzgjq9khbanzbg3y67n", + "url": "https://github.com/treeform/webby/archive/325d6ade0970562bee7d7d53961a2c3287f0c4bc.tar.gz", + "ref": "0.2.1", + "packages": [ + "webby" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/lk4hcmvwvliliyyidx7k3fk9yfijddc5-source", + "rev": "b2e71179174e040884ebf6a16cbac711c84620b9", + "sha256": "0pi6cq43ysm1wy5vva3i2dqvyh4dqppjjjl04yj9wfq7mngpqaa1", + "url": "https://github.com/treeform/chroma/archive/b2e71179174e040884ebf6a16cbac711c84620b9.tar.gz", + "ref": "0.2.7", + "packages": [ + "chroma" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/f9dp6njaay5rf32f6l9gkw0dm25gim47-source", + "rev": "7282ae1247f2f384ebeaec3826d7fa38fd0e1df1", + "sha256": "1plw9lfrm42qar01rnjhm0d9mkzsc7c3b8kz43w5pb8j8drx1lyn", + "url": "https://github.com/treeform/vmath/archive/7282ae1247f2f384ebeaec3826d7fa38fd0e1df1.tar.gz", + "ref": "2.0.0", + "packages": [ + "vmath" + ], + "srcDir": "src" + }, + { + "method": "fetchzip", + "path": "/nix/store/8qaywzr8nzsiddjba77nhf75hzmxx0d9-source", + "rev": "29aca5e519ebf5d833f63a6a2769e62ec7bfb83a", + "sha256": "16npqgmi2qawjxaddj9ax15rfpdc7sqc37i2r5vg23lyr6znq4wc", + "url": "https://github.com/nim-lang/x11/archive/29aca5e519ebf5d833f63a6a2769e62ec7bfb83a.tar.gz", + "ref": "1.2", + "packages": [ + "x11" + ], + "srcDir": "" + }, + { + "method": "fetchzip", + "path": "/nix/store/cxdwn7p4cis5hd5w4jsn8lql5vzx5civ-source", + "rev": "2b08c774afaafd600cf4c6f994cf78b8aa090c0c", + "sha256": "10zl9a5phdsjj811v8by0yzadfc8d3azaj878an2hr8qsfi9y1ps", + "url": "https://github.com/status-im/nim-faststreams/archive/2b08c774afaafd600cf4c6f994cf78b8aa090c0c.tar.gz", + "ref": "HEAD", + "packages": [ + "faststreams" + ], + "srcDir": "" + }, + { + "method": "fetchzip", + "path": "/nix/store/2ksmfd7p93a1a7ibcv3qzsk8h3c3shz7-source", + "rev": "845b6af28b9f68f02d320e03ad18eccccea7ddb9", + "sha256": "1c55kl05pbavm9v5dv42n43sql9qcrblhh3hnp99p5xmlv20c9vf", + "url": "https://github.com/status-im/nim-unittest2/archive/845b6af28b9f68f02d320e03ad18eccccea7ddb9.tar.gz", + "ref": "v0.2.3", + "packages": [ + "unittest2" + ], + "srcDir": "" + }, + { + "method": "fetchzip", + "path": "/nix/store/17gj9sw2hw818cbxvd6i94n734inm1vf-source", + "rev": "df8113dda4c2d74d460a8fa98252b0b771bf1f27", + "sha256": "1h7amas16sbhlr7zb7n3jb5434k98ji375vzw72k1fsc86vnmcr9", + "url": "https://github.com/arnetheduck/nim-results/archive/df8113dda4c2d74d460a8fa98252b0b771bf1f27.tar.gz", + "ref": "v0.5.1", + "packages": [ + "results" + ], + "srcDir": "" + } + ] +} diff --git a/pkgs/lucem/lucem-disable-auto-updater.patch b/pkgs/lucem/lucem-disable-auto-updater.patch new file mode 100644 index 0000000..c8a2e68 --- /dev/null +++ b/pkgs/lucem/lucem-disable-auto-updater.patch @@ -0,0 +1,13 @@ +diff --git a/src/config.nim b/src/config.nim +index 64e4370..92aee9a 100644 +--- a/src/config.nim ++++ b/src/config.nim +@@ -32,7 +32,7 @@ type + + LucemConfig* = object + discord_rpc*: bool = false +- auto_updater*: bool = true ++ auto_updater*: bool = false + notify_server_region*: bool = true + loading_screen*: bool = true + polling_delay*: uint = 100 diff --git a/pkgs/lucem/nim_lk-rev-order-fix.patch b/pkgs/lucem/nim_lk-rev-order-fix.patch new file mode 100644 index 0000000..837a46c --- /dev/null +++ b/pkgs/lucem/nim_lk-rev-order-fix.patch @@ -0,0 +1,90 @@ +diff --git a/src/nim_lk.nim b/src/nim_lk.nim +index 2b8b0bc..68d8b64 100644 +--- a/src/nim_lk.nim ++++ b/src/nim_lk.nim +@@ -4,7 +4,7 @@ + # https://cyclonedx.org/docs/1.6/json/ + + import +- std/[algorithm, deques, httpclient, json, options, os, osproc, parseutils, parseopt, streams, strutils, tables, uri], ++ std/[algorithm, deques, httpclient, json, options, os, osproc, parseutils, parseopt, streams, strutils, tables, uri, re], + pkg/nimblepkg/options, + pkg/nimblepkg/packageinfo, + pkg/nimblepkg/packageinfotypes, +@@ -89,6 +89,13 @@ proc startProcess(cmd: string; cmdArgs: varargs[string]): Process = + type GitPair = object + `ref`, `rev`: string + ++proc cleanVersion(version: string): string = ++ let pattern = re"^v?(\d+\.\d+\.\d+.*)$" # Captures valid semantic versions ++ var matches: array[1, string] ++ if version.find(pattern, matches) >= 0: ++ return matches[0] ++ return version ++ + proc gitLsRemote(url: string; tagsArg = false): seq[GitPair] = + var line, rev, refer: string + var process = +@@ -104,12 +111,15 @@ proc gitLsRemote(url: string; tagsArg = false): seq[GitPair] = + const + refsTags = "refs/tags/" + headsTags = "refs/heads/" ++ headRef = "HEAD" + if refer.startsWith(refsTags): + refer.removePrefix(refsTags) + result.add GitPair(`ref`: refer, `rev`: rev) + elif refer.startsWith(headsTags): + refer.removePrefix(headsTags) + result.add GitPair(`ref`: refer, `rev`: rev) ++ elif refer == headRef: ++ result.add GitPair(`ref`: refer, `rev`: rev) + stderr.write(process.errorStream.readAll) + close(process) + if tagsArg and result.len == 0: +@@ -120,22 +130,40 @@ proc matchRev(url: string; wanted: VersionRange): GitPair = + let special = $wanted.spe + if special[0] == '#': + result.rev = special[1..special.high] ++ return # early return + else: + quit("unhandled version " & url & " " & $wanted) + else: + let withTags = wanted.kind != verAny + let pairs = gitLsRemote(url, withTags) + var resultVersion: Version ++ var latestTag: GitPair ++ + for pair in pairs: + try: +- var tagVer = pair.`ref`.newVersion +- if tagVer.withinRange(wanted) and resultVersion < tagVer: ++ var tagVer = cleanVersion(pair.`ref`).newVersion ++ if (tagVer.withinRange(wanted) or not withTags) and resultVersion < tagVer: + resultVersion = tagVer +- result = pair ++ latestTag = pair + except ParseVersionError: discard +- if result.rev == "" and pairs.len > 0: +- result = pairs[pairs.high] +- doAssert result.rev != "", url ++ ++ if latestTag.rev != "": ++ result = latestTag ++ return # early return ++ ++ let headPairs = gitLsRemote(url, false) ++ var headPair: GitPair ++ ++ for pair in headPairs: ++ if pair.`ref` == "HEAD": ++ headPair = pair ++ ++ if headPair.rev != "": ++ result = headPair ++ return # early return ++ ++ ++ doAssert false, "No matching revision found for " & url + + proc collectMetadata(data: JsonNode) = + let storePath = data{"path"}.getStr diff --git a/pkgs/lucem/update.nix b/pkgs/lucem/update.nix new file mode 100644 index 0000000..7f7b0f2 --- /dev/null +++ b/pkgs/lucem/update.nix @@ -0,0 +1,40 @@ +{ nixpkgs ? , pkgs ? (import nixpkgs) { } }: +let + inherit (pkgs) callPackage fetchFromSourcehut fetchFromGitHub lib; + inherit (lib) escapeShellArg; + + lucem = pkgs.callPackage ./. { }; + + nim_lk_patched = pkgs.nim_lk.overrideAttrs (final: prev: { + src = pkgs.fetchFromSourcehut { + owner = "~ehmry"; + repo = "nim_lk"; + rev = "c2d601095d1961d8f59f1fffe5b56788b255c3de"; + hash = "sha256-1WD1UVi6N7tftE69LAhx86Qxc97oMHKARFsCVGqtEm4="; + }; + patches = [ + ./nim_lk-rev-order-fix.patch + ]; + }); + +in + pkgs.stdenvNoCC.mkDerivation { + name = "lucem-lock.json"; + + src = lucem.src; + + nativeBuildInputs = with pkgs; [ + nim_lk_patched + nix-prefetch-git + nix + # cacert + git + ]; + + SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"; + + buildPhase = '' + find . + nim_lk > $out + ''; + } diff --git a/pkgs/module.nix b/pkgs/module.nix index e84bb71..47d1542 100644 --- a/pkgs/module.nix +++ b/pkgs/module.nix @@ -4,6 +4,7 @@ config = { perSystem = { system, inputs', self', pkgs, ...}: { packages = { + lucem = pkgs.callPackage ./lucem { }; }; }; };