forked from Nexus/nexus
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
7988fd23a5 |
|||
|
949d5f26a9 |
|||
|
aae9bf9655 |
|||
|
1691fa981a |
|||
|
393d03d1b7 |
|||
|
c5cc5a052f |
|||
|
11d74b2b2d |
|||
|
69c392a51f |
|||
|
1689cb1007 |
|||
|
2d8cd4eff2 |
|||
|
7b542d8d1e |
|||
|
f106db5948 |
|||
| af99de75da | |||
|
f1f0fea114 |
|||
|
a4141de01d |
|||
|
ab3b9cc83f |
|||
|
ffbb0ad9e2 |
|||
|
d5f29dc344 |
|||
|
05d25869ef |
|||
|
a09ae01b4e |
|||
|
8aada9a895 |
|||
|
a5711d2ded |
|||
|
ecac985d90 |
|||
|
272241f338 |
|||
|
8692527105 |
|||
|
ac31fbb74d |
|||
|
c658034d3b |
|||
|
995afe1412 |
|||
|
bf2aa50556 |
|||
|
d1aa91fbbd |
|||
|
274256dfe4 |
|||
|
1da836e20d |
|||
|
e609bcebcd |
|||
|
bf8490896c |
|||
|
a229fcc598 |
|||
|
06ba23d3c0 |
|||
|
dbc42b0ec2 |
|||
|
29840d595a |
|||
|
5eed03c10e |
|||
|
ee28ddeddd |
|||
|
b29f801f37 |
|||
|
d61de252fb |
|||
|
a701bc6413 |
|||
|
545fdd1f6b |
|||
|
4061b7b51e |
|||
|
b5fe2d4967 |
|||
|
ea29889e5c |
|||
|
e899bb3929 |
|||
|
7f7bdbf525 |
|||
|
47645ea327 |
|||
|
e382499a2a |
|||
|
033c7f9c05 |
|||
|
256e5fadbe |
|||
|
39b8242867 |
|||
|
28ba67cb59 |
|||
|
a0605a3617 |
|||
|
6d9a8e812b |
|||
|
ecc4618ccd |
|||
|
b201b1159e |
|||
|
029efe7c0a |
|||
|
522df86976 |
|||
|
ff9166966d |
|||
|
20eed13884 |
|||
|
b6c6ac35d9 |
|||
|
a8e045bb3a |
|||
|
b154b4ee2e |
|||
|
b4d5a632dd |
|||
|
2580cc8c1c |
|||
|
2fc5a9bf85 |
|||
|
8650c44266 |
|||
|
3fc33a5ac9 |
|||
|
f35f715b81 |
|||
|
e398043a49 |
|||
|
e9b009d1b9 |
|||
|
641341ed90 |
|||
|
3a8d977f11 |
|||
|
979068fc3a |
|||
|
b55a6e0e83 |
|||
|
7007c9af89 |
|||
|
f6aaf49164 |
|||
|
40f5d0f459 |
|||
|
bcb0c57015 |
|||
|
45b3ec10bf |
|||
|
7baf56adef |
|||
|
51e3fe1007 |
|||
|
9e1d2f6921 |
|||
|
c9172e92eb |
|||
|
cb983701ca |
|||
|
285e6ad76a |
|||
|
cd60163caf |
|||
|
a2638d5c82 |
|||
|
f971c50df0 |
|||
|
1efbc131b4 |
|||
|
4b329b4c6f |
|||
|
2041b81141 |
|||
|
a3ef4f8135 |
|||
|
0a09a4ee0a |
|||
|
62e200f305 |
|||
|
dd01ad9d74 |
|||
|
853116ab2f |
|||
|
53d9c2b1e6 |
|||
|
401b527714 |
|||
|
3754bc2feb |
|||
|
868023a4a1 |
|||
|
9e6951818a |
|||
|
0743c4cfc6 |
|||
|
6336764da0 |
|||
|
3a39f1c5ac |
|||
|
6e2d56ec75 |
|||
|
4e140e9fc7 |
|||
|
e5dd53ed6c |
|||
|
c0f4c053b0 |
|||
|
ee36a9b1c8 |
|||
|
f5371382d7 |
|||
|
2937c241e0 |
|||
|
9dcddb3fbe |
|||
|
3014a9d029 |
|||
|
4a9f151d92 |
|||
|
d4ae5ebccf |
|||
|
850bd33b18 |
|||
|
8fbfcde9c5 |
|||
|
e0b5dc58d0 |
|||
|
ffbf2722f7 |
|||
|
3e1552f246 |
|||
|
44a1ec667e |
|||
|
479279b68e |
|||
|
b0dd452926 |
|||
|
fcfe4eed1e |
|||
|
b390dbbbe1 |
|||
|
8e51852ae3 |
|||
|
48c04d9b3e |
|||
|
7f30150e95 |
|||
|
c8e1aef74b |
|||
|
5ee3449f02 |
|||
|
1715ee785e |
|||
|
e38307657d |
|||
|
e14ab3e708 |
|||
|
f5645db6ea |
|||
|
0fcbc275cd |
|||
|
a54004736b |
|||
|
427e06be3e |
|||
|
a1a15af30d |
|||
| 800fb5566d | |||
|
80197aff00 |
|||
|
78162efbde |
|||
|
a2906746b9 |
|||
|
6659f21ceb |
|||
|
a065b823bb |
|||
|
765e96cce4 |
|||
|
9cf16db669 |
|||
|
2c8a4da2a8 |
|||
|
cb426cd27e |
|||
|
bfd259543d |
|||
|
9f0b80072d |
|||
|
b6ee5aec64 |
|||
|
deac9ef24e |
|||
|
e24e99fd8e |
|||
|
4580110da0 |
|||
|
d1724932b2 |
|||
|
a6fe80fea2 |
|||
|
9f45cbc1e7 |
|||
|
eca2b0b558 |
|||
|
4e6ba571fc |
|||
|
200e03f082 |
|||
|
8180338d99 |
|||
|
72c5e7d819 |
|||
|
254b7e134f |
|||
|
ef25e765d4 |
|||
|
58a27fdd9e |
|||
|
6d42477041 |
|||
|
2f17f5b6c6 |
|||
|
1380233f2e |
|||
|
a3a3781252 |
|||
|
81851bdc42 |
|||
|
f19a51939c |
|||
|
0ad85f24d5 |
|||
|
1c2ba2971b |
|||
|
fb0af571ed |
|||
|
9cd43f4e3c |
|||
|
0fa0f57738 |
|||
|
00f22d46b7 |
|||
|
23046f08a9 |
|||
|
784e5254e2 |
|||
|
7193ac0dba |
|||
|
7ab4b5e59f |
|||
|
c23dc19c6e |
|||
|
0b79aac7af |
|||
|
e4f290eaa6 |
|||
|
d309754c60 |
|||
|
a5dedb0d38 |
|||
|
659e76b8f8 |
|||
|
ab3eda0beb |
|||
|
b71a7f0bd6 |
|||
|
8d944831f5 |
|||
|
9117663c48 |
|||
|
ba258c2fcd |
|||
|
485383e99c |
|||
|
ed84410039 |
|||
|
df592b3f38 |
|||
|
d47c4ae15c |
|||
|
d308ef98cb |
|||
|
f082a75d9c |
|||
|
36f61a62d8 |
|||
|
27137c488d |
|||
|
ce5c7b972b |
|||
|
76d78596cd |
|||
|
ed2d08ed40 |
|||
|
24e516e6dd |
|||
|
66a437094a |
|||
|
d37ec2878b |
|||
|
dbf30c3706 |
|||
|
2d619bf1ad |
|||
|
07700c1eff |
|||
|
a5fef138dd |
|||
|
7353955d4e |
|||
|
012ecd9249 |
|||
|
8fda43ccf8 |
|||
|
3a33bf7bfe |
|||
|
9237a3dbed |
|||
|
30a5fa100c |
|||
|
f198888635 |
|||
|
be945031cd |
|||
|
ad525b338c |
|||
|
0010160714 |
|||
|
f741a6790d |
|||
|
7be1dfe0bc |
|||
|
08dcfdab75 |
|||
|
c81000d6c6 |
|||
|
3c6c610f7c |
|||
|
61c5aa94c2 |
|||
|
02ba9180db |
|||
|
3c6f9f5da2 |
|||
|
1d4af179d4 |
|||
|
9974a6c225 |
|||
|
9c83ae573a |
|||
|
66cfb0e2c6 |
|||
|
02c486e1b3 |
|||
|
b694da31f9 |
|||
|
f931615890 |
|||
|
ae8fa17db3 |
|||
|
a63f4674fd |
|||
|
a46d93dfc5 |
|||
|
294723fdfb |
|||
|
5e3c7ffa68 |
|||
|
1fd9810b83 |
|||
|
d119370816 |
|||
|
ffaa516dcd |
|||
|
e480e6193b |
|||
|
e41efd92c1 |
|||
|
b253fc1d96 |
|||
|
967fe66a1b |
|||
|
658fa562cf |
|||
|
fe33ae2e97 |
|||
|
bcb085c035 |
|||
|
eae79d943d |
|||
|
bdac4a11d7 |
|||
|
2ed2443298 |
|||
|
7f71adab4c |
|||
|
0a3ec830a3 |
|||
|
650f1ac8e4 |
|||
|
af5f238db0 |
|||
|
006008f61d |
|||
|
f23a29e7c1 |
|||
|
493776e3dd |
|||
|
25afcf4acd |
|||
|
e54b059bc9 |
|||
|
b8b074b229 |
|||
|
9ffad93469 |
|||
|
3875c3a14a |
|||
|
a86748e85f |
|||
|
19363baa8d |
|||
|
41bdb04b72 |
|||
|
8da46dffe4 |
|||
|
49f2dc55b8 |
|||
|
f9ff04405f |
|||
|
ecb965994a |
|||
|
36917bbea5 |
|||
|
684d6bad82 |
|||
|
45d69b0b9f |
|||
|
3b2cf6b2a4 |
|||
|
a61cac130b |
|||
|
ec30adc0e3 |
|||
|
a63d182c50 |
|||
|
64a8edda7d |
|||
|
2e85b26511 |
|||
|
a91b45be31 |
|||
|
d9062f68c4 |
|||
|
b3b873ffce |
|||
|
ab69bfe553 |
|||
|
98108d013e |
|||
|
bdf8fc6ce1 |
|||
|
b738c1d0e0 |
|||
|
93b832839b |
|||
|
301bcd94f2 |
|||
|
da7f2dcf4e |
|||
|
b92aaed610 |
|||
|
1e4aab08ad |
|||
| 1c4bf99be2 | |||
|
597112f5d3 |
|||
|
c8b9654219 |
|||
|
9bc2d9955a |
|||
|
ead463262c |
|||
|
281bab0202 |
|||
|
9e024fb6f2 |
|||
|
a0036bdda3 |
|||
|
bd7cd0b10c |
|||
|
ec0934110f |
|||
|
1cfda9c68b |
|||
|
1758815cc9 |
|||
|
9f4702b9d1 |
|||
|
195d212d68 |
|||
|
a698cf8c28 |
|||
|
338d5dfee9 |
|||
|
efa3681816 |
|||
|
3824ca1c13 |
|||
|
01566894a6 |
|||
|
64e548f0c5 |
|||
|
4bde7875fb |
|||
|
07f8e58a4c |
|||
|
a220e27877 |
|||
|
5304f22456 |
|||
|
e5b39507c8 |
|||
|
d37538b69f |
|||
|
e300f4efc9 |
|||
|
bab699658f |
|||
|
1c1f585362 |
|||
|
c90a1c41b0 |
|||
|
9f070fcdba |
|||
|
d712bb3193 |
|||
|
3217c17ea0 |
|||
|
031fbe326c |
|||
|
0149aa2f84 |
|||
|
a1efdb0f46 |
|||
| 389b65ae61 | |||
|
3429a3ed98 |
|||
|
7ab92f76bf |
|||
|
aecfac9533 |
|||
|
c7b89b8e56 |
|||
|
721727d48c |
|||
|
004c3bcd0d |
|||
|
943cd85e22 |
|||
|
09904536e7 |
|||
|
856072e0b0 |
|||
|
110caff170 |
|||
|
eeb2e2f54b |
|||
|
529a2e35c4 |
|||
|
6ad4657d76 |
|||
|
38fd19ad1a |
|||
|
0636366359 |
|||
|
efe9262a97 |
|||
|
2763a0fdf5 |
|||
|
a5da44fdea |
|||
|
ccca02a0bc |
|||
|
721349ca21 |
|||
|
5d994bf2bb |
|||
|
a90bf00f18 |
|||
|
f2efbbeb9f |
|||
|
ed761d6071 |
|||
|
8f35ea2435 |
|||
|
023e75e063 |
|||
|
4d0a4605d6 |
|||
|
faa7292001 |
|||
|
027033ad9e |
|||
|
ece3d16318 |
|||
|
5738239da2 |
|||
|
a2791a6717 |
|||
|
f910d87a23 |
|||
|
f4142859ba |
|||
|
775c77194b |
|||
|
41806be9bf |
|||
|
6e47594a91 |
|||
|
386b3ad1cf |
|||
|
61f2aa7f2a |
|||
|
0c660a98a7 |
|||
|
09534a6775 |
|||
|
0cd815dc79 |
|||
|
800ed0636d |
|||
|
e4cf2a837c |
|||
|
11dca9bf14 |
|||
|
436b8642b3 |
|||
|
269d97be8f |
|||
|
43f70f35a3 |
|||
|
92b148f5b6 |
|||
|
00a42b5f1a |
|||
|
700b4e720f |
|||
|
2a11bcb7e8 |
|||
|
fea39e4191 |
|||
|
deaf564c36 |
|||
|
c0d14ac30e |
|||
|
1a6a5c36ea |
|||
|
35ef82accd |
|||
|
f40dd22277 |
|||
|
1cfea5a819 |
|||
|
b3023d8147 |
|||
|
e8fb3a8523 |
|||
|
0d1ace3fd0 |
|||
|
3d690c26d8 |
|||
|
3fee789c90 |
|||
|
d7c64fea80 |
|||
|
87e7e093f7 |
|||
|
8b7e29ae33 |
|||
|
673c5bd894 |
|||
|
650c62fb99 |
|||
|
4f3b77f9f3 |
|||
|
85bb653980 |
|||
|
a9d2ccbcd1 |
|||
|
73c4a7d07f |
|||
|
57f9498aa3 |
|||
|
cfab803fa0 |
|||
|
f23a35384d |
|||
|
7f7fb451e6 |
|||
|
5d62e66cd9 |
|||
|
009ba504e3 |
|||
|
30b922d390 |
|||
|
63183e0824 |
|||
|
163947fc90 |
|||
|
11457470a0 |
|||
|
dca0b7dd7d |
|||
|
e5dc270f83 |
|||
|
810a0b102b |
|||
|
ec1603b828 |
|||
| 5acdbb5be0 | |||
|
e21c9e8c22 |
|||
|
ea687471bc |
|||
|
8c440447f2 |
|||
|
8ebec15324 |
|||
|
cd8d551e26 |
|||
|
118e5a5826 |
|||
|
6ca9b2a948 |
|||
|
23e01c7a0d |
|||
|
9e7fcdbef7 |
|||
|
9507d69458 |
|||
|
13d90df226 |
|||
|
e925f9657c |
|||
|
b8882d6e48 |
|||
| ff9bf3bec4 | |||
|
6e42902322 |
|||
|
c105a6035c |
|||
|
3d7ef9b32f |
|||
|
51ef66174a |
|||
|
1efb68ebe0 |
|||
|
0a667fda0b |
|||
|
da352cd035 |
|||
|
0201f71e5d |
|||
|
4314c88d5c |
|||
|
88cdcf9863 |
|||
|
e2f25749e0 |
|||
|
47a3d9d92f |
|||
|
a680c5cd0c |
|||
|
0887421f3e |
|||
|
a090d88a23 |
|||
|
32693fb3b5 |
|||
|
4e1f1b64bc |
|||
|
20f1c784f6 |
|||
|
9b79304edc |
|||
|
b797b8de9c |
|||
|
56bb75866c |
|||
|
3baea40669 |
|||
|
2e72ecd559 |
|||
| 077044ec19 | |||
|
01b13b4764 |
|||
|
050e42cc6f |
|||
|
67cee201b6 |
|||
|
2d7b067c93 |
|||
|
a9993013f5 |
|||
|
9c488e8981 |
|||
|
5c16f42d20 |
|||
|
092fc616e6 |
|||
|
6cbf78be6b |
|||
|
68f4bb0c03 |
|||
|
9e24f4cb31 |
|||
|
43d2e94d62 |
|||
|
62fe37c6ae |
|||
|
b9dfbd3ca2 |
|||
|
620440e2a1 |
|||
|
724171384c |
|||
|
1bd677eb23 |
|||
|
41658c3a9d |
|||
|
b011cc2166 |
|||
|
75ad6cbd02 |
|||
|
6c1d3d8894 |
|||
|
842ab0a82c |
|||
|
a0e5d2fb9e |
|||
|
a2cdc3df68 |
|||
|
07f8a35b74 |
|||
|
85b9007c47 |
|||
|
5bbd51c4bc |
|||
|
21a0e0db70 |
|||
|
a5f42fe56e |
|||
|
185c1d2714 |
|||
|
7eab09585b |
|||
|
c84f0e7e93 |
|||
|
f7847d587c |
|||
|
56dbd91c96 |
|||
| 7bb4d87638 | |||
|
bf31f5510a |
|||
|
bd185824f9 |
|||
|
2afd5ae258 |
|||
|
76f9175857 |
|||
|
e32941f062 |
|||
|
cf89604ff5 |
|||
|
83e8084213 |
|||
|
ae5b6e2b40 |
|||
|
1621e917c0 |
|||
|
d1c2b2dd0a |
|||
|
82a0dd90b0 |
|||
|
f97c5548a3 |
|||
|
115bec5f05 |
|||
|
fc4aa5a10d |
|||
|
f3c31db244 |
|||
|
419d75ca83 |
|||
|
9831446c66 |
|||
|
d7f49568a7 |
|||
|
f0f426a647 |
|||
|
80fa9673bb |
|||
|
8c25228bd9 |
|||
|
9bf664624a |
|||
|
e8b90591d5 |
|||
|
b2813a0eb5 |
|||
|
9298eb815d |
|||
|
06075f75c5 |
|||
|
60968f5f3e |
|||
|
afd6168535 |
|||
|
2a1cc33ee3 |
|||
|
5f13d3fbf5 |
|||
|
eca9d3b411 |
|||
|
16fdf0c420 |
|||
|
3536f74851 |
|||
|
fa451621de |
|||
|
90230651e6 |
|||
|
92b88e46ac |
|||
|
1799e02844 |
|||
|
cf26ec7130 |
|||
|
716541b457 |
|||
|
965c7ea2dc |
|||
|
85d02f2ac9 |
|||
|
1c446c4cdf |
|||
|
51430d2830 |
|||
|
4e208764f5 |
|||
|
eecc307f04 |
|||
|
6221eb4a7a |
|||
|
370549072e |
|||
|
80b938c0be |
|||
|
87e1ef0d9b |
|||
|
f8c705531c |
|||
|
2a91959333 |
|||
|
34ddd6d32b |
|||
|
a8726feef6 |
|||
|
bd1bad76d7 |
|||
|
c4f63d18b5 |
|||
|
a8285548e8 |
|||
|
cdad9b760e |
|||
|
06c5411dfc |
|||
|
f6b5bd4057 |
|||
|
0da3b4da22 |
|||
|
a557cffdbf |
|||
|
9d7156d176 |
|||
|
b792247575 |
|||
|
35fbe1094f |
|||
|
05d1c3b04a |
|||
|
22e58e3d05 |
|||
|
09bc9bdcbd |
|||
| 7d106ad3a2 | |||
|
5df975f607 |
|||
|
8f3f9fbef1 |
|||
|
a9ac891ec4 |
|||
|
7992f0e815 |
|||
|
15d441e4c4 |
|||
|
7492d3a3d4 |
|||
|
518b0dd11e |
|||
| 0ef9b25320 | |||
|
06824784cb |
|||
|
08d67553be |
|||
|
8b2d354a60 |
|||
|
8773faf7c4 |
|||
| 818e582ddd | |||
|
71a4274ff2 |
|||
|
7b734a89ac |
|||
|
ceb749d272 |
|||
|
45240f6cb0 |
|||
|
4c90fbd7d1 |
|||
|
8e76da4ac2 |
|||
|
195ebc776a |
|||
|
a1e217ac78 |
|||
|
148bc8f95c |
|||
|
b037dc06c8 |
|||
|
3c7c74f745 |
|||
|
b727d0342d |
|||
|
db5735e9e2 |
|||
|
7c01611859 |
|||
|
632c02a517 |
|||
|
355c564123 |
|||
|
1af957d4a1 |
|||
|
1986e2a627 |
|||
| ab40600746 | |||
|
2d0f41000e |
|||
|
3349ca7253 |
|||
|
18657eb980 |
|||
|
b4b157c39f |
|||
|
a76b6e6ed3 |
|||
|
5bbd472999 |
|||
|
6c0e149c25 |
|||
|
b26c144eea |
|||
|
ddc8db8326 |
|||
|
bc307cbcda |
|||
|
e40de37b9d |
|||
|
7757825e27 |
|||
|
795e9b6e9b |
|||
|
abba60c28b |
|||
|
8cea4b6cf3 |
|||
|
d46646d781 |
|||
|
e15d947fac |
|||
|
562ce5d4ff |
|||
|
f60189bfb8 |
|||
|
309d0df581 |
|||
|
3310d9b907 |
|||
|
8c047827de |
|||
|
d513e466fd |
|||
|
84a729aea8 |
|||
|
23e0aa3c4e |
|||
|
f0a26b58d1 |
|||
|
78b5abea7d |
|||
|
e1d7a30a06 |
|||
|
0c61623a94 |
|||
|
0a9b71230b |
|||
|
15c057707f |
|||
|
9cc18e16b8 |
|||
|
240984a832 |
|||
|
633e83b915 |
|||
|
c5122fc34f |
|||
|
457de3c77c |
|||
|
c9aa0173d8 |
|||
|
22aa26fd05 |
|||
|
c10c74a1f3 |
|||
|
46136c09ad |
|||
|
5f9622e1c9 |
|||
|
6e02cce84f |
|||
|
7e7e6877e2 |
|||
|
895ab3c96f |
|||
|
b25840756d |
|||
|
735a3357d7 |
|||
|
02b7892fb0 |
|||
|
3afb4befa5 |
|||
|
a11663eece |
|||
|
7f12efd338 |
|||
|
fcdada6f3e |
|||
|
0c950247b0 |
|||
|
27dca24889 |
|||
|
621bb74cc9 |
|||
|
33c3a568f9 |
|||
|
561f6ecc84 |
|||
|
a7ccf0ff00 |
|||
|
0e984fd95b |
|||
|
c898b2671a |
|||
|
e63e5a8c08 |
|||
|
a87c9dc678 |
|||
|
5fcc31b427 |
|||
|
99270f4bd1 |
|||
|
d2ec5f035b |
|||
|
6281c1d13a |
|||
|
60315de04a |
|||
|
eb87cbc17b |
|||
|
130dbac879 |
|||
|
2dd3fed62f |
|||
|
f60a499875 |
|||
|
a72ef5ea2d |
|||
|
1b81e31c13 |
|||
|
db12fd2e9a |
|||
|
60454ed249 |
|||
|
0a333e92d1 |
|||
|
31c3173bb5 |
|||
|
c6904e9766 |
|||
|
e5b7512e79 |
|||
|
5daa861a31 |
|||
|
82860deff1 |
|||
|
2ec442b35b |
|||
|
786c8cb3e2 |
|||
|
a150ef2ecf |
|||
|
bb037c8162 |
|||
|
eac59c58f5 |
|||
|
4e5c709fb9 |
|||
|
451875b137 |
|||
|
e1c81b504a |
|||
|
f27db22151 |
|||
|
3d6ebedd94 |
|||
|
70eba46c76 |
|||
|
ec64a81fed |
|||
|
2ba620350d |
|||
|
a0c2eefc1e |
|||
|
9939e59429 |
|||
|
e69f04f6e7 |
|||
|
4848840538 |
|||
|
64b3127fd1 |
|||
|
b836c3b06e |
|||
|
d9f62a9de9 |
|||
|
32dd08fd91 |
|||
|
6de046bf7b |
|||
|
ebbb4dc662 |
|||
|
1d6a121ec4 |
|||
|
ed0292468a |
|||
|
8b310c955d |
|||
|
14b140e23d |
|||
|
b47e61e005 |
|||
|
05bc9034d1 |
|||
|
d7ea233b18 |
|||
|
70ffbedba4 |
|||
|
a1386790a9 |
|||
|
68d2f654cc |
|||
|
5368bacf1d |
|||
| 564fe3c964 | |||
| 16cf126df4 | |||
|
bd1d5ea745 |
|||
|
1ca802c78b |
|||
|
7b9eda2d36 |
|||
|
63eb001c09 |
|||
|
00c3503c1f |
|||
|
469a625c40 |
|||
|
66ef2de027 |
|||
|
972c143de2 |
|||
|
2f39985afb |
|||
|
0ab466d011 |
|||
|
7857bcdc2e |
|||
|
9faff092ed |
|||
|
0949fa6523 |
|||
|
e310f0f60e |
|||
|
7d8b267986 |
|||
|
c945c26413 |
|||
|
4dc16a5529 |
|||
|
ebd4b8a765 |
|||
|
26b95fac69 |
|||
|
152331b262 |
|||
|
5f56c52fe0 |
|||
|
a8ae10c9ce |
|||
| ad36dcb2f3 | |||
|
|
8b4cd75076 | ||
|
5a99616e9c |
|||
|
def69d85e7 |
|||
|
f4b2dcb824 |
|||
|
50e1a8e4c7 |
|||
|
82dab26fd4 |
|||
|
313dc377ec |
|||
|
b93f4c979c |
|||
|
b701da19dc |
|||
|
327c4066f3 |
|||
|
1282a8b897 |
|||
|
6ca974e6fc |
|||
|
e16a780fa3 |
|||
|
dc1eb52fe0 |
|||
|
3e8eba0872 |
|||
|
4954fb8c09 |
|||
|
4ff507e93f |
|||
|
1dcf3018a2 |
|||
|
6b8eef3f17 |
|||
|
f997e257a2 |
|||
|
07decc10e2 |
|||
|
e9b78a14d5 |
|||
|
7b2a6b84ad |
|||
|
5154e0fc6b |
|||
|
3cfbe7c078 |
|||
|
133e613214 |
|||
|
5e07cec14d |
|||
|
116649e8d7 |
|||
|
5f5ad911c2 |
|||
|
624127f3a8 |
|||
|
f860d9651f |
|||
|
2850b015a1 |
|||
|
3a7e708e39 |
|||
|
798eb3c3fd |
|||
|
ee648ab105 |
|||
|
2c23951ea8 |
|||
|
f4b2669f3d |
|||
|
6fe5677a13 |
|||
|
729f71e529 |
|||
|
b80bd557dd |
|||
|
15d02458ab |
|||
|
8dff27c56f |
|||
|
c857b89899 |
|||
|
06d6bf0cbc |
|||
|
9fdf08a5d8 |
|||
|
7fc314036e |
|||
|
aac843d793 |
|||
|
639d27a5fc |
|||
|
92f6b2fbba |
|||
|
4aa962193d |
|||
|
24f5f7d0b6 |
|||
|
9464b2bf78 |
|||
|
fd4b16c700 |
|||
|
a8383951ba |
|||
|
185ee37f04 |
|||
|
f38715c8ef |
|||
|
63535fb462 |
|||
|
7c1918857a |
|||
|
20f0ce9fa5 |
|||
|
fa8b8ddd14 |
|||
|
c3ca1e3491 |
|||
|
8154d41dc5 |
|||
|
d70c439278 |
|||
|
5796d250c7 |
|||
|
a9c4acaa74 |
|||
|
73ac0018ca |
|||
|
a64cfd35be |
|||
|
f460a3bacc |
|||
|
51dd8c5668 |
|||
|
35bf379f03 |
|||
|
f4624c2866 |
|||
|
cadd5c1255 |
|||
|
3a1bcb5b8f |
|||
|
c130d28b93 |
|||
|
e669ede6fe |
|||
|
5a0a5cb138 |
|||
|
e30355a6f1 |
|||
|
4e4e387aa2 |
|||
|
2ead857805 |
|||
|
a562d043a8 |
|||
|
bb842abfb1 |
|||
|
0b9ddbfbc8 |
|||
|
7ee165b300 |
|||
|
60b7f22566 |
|||
|
e42aaeb30a |
|||
|
6d903a8882 |
|||
|
388e09abb7 |
|||
|
4dc692634e |
|||
|
0a6c097c50 |
|||
|
08cca4d3d3 |
|||
|
cdba3c480e |
|||
|
55ecbc3590 |
|||
|
8c7adbc9d3 |
|||
|
60be7aaf72 |
|||
|
e0ba99d9b9 |
|||
|
e2d29439d5 |
|||
|
92e5206326 |
|||
| ecc40bfe49 | |||
| eaf1f3a178 | |||
|
18ee13901c |
|||
|
c784094a4c |
|||
|
690d2549bc |
|||
|
ab61338382 |
|||
|
48adf82b7e |
|||
|
1f274307ad |
|||
|
c609de8279 |
|||
|
1d33eed829 |
|||
|
e6c47c036d |
|||
|
c6767863eb |
|||
|
f5c277e8b0 |
|||
|
84bed89632 |
|||
|
6c064cfcef |
|||
|
2c4d5670e5 |
|||
|
a51c869d7e |
|||
|
a1401f20ea |
|||
|
f8d6dcead5 |
|||
|
02c79a6d7c |
|||
|
11aef9fc5a |
|||
|
2f39949a2e |
|||
|
166295fdb5 |
|||
|
607cd54e02 |
|||
|
67b96ae731 |
|||
|
ed81b4afa1 |
|||
|
345fa3b5ff |
|||
|
f50fb6ab09 |
|||
|
5601fb27c0 |
|||
|
0d1f7c1819 |
|||
|
4bbf694479 |
|||
|
dd9b9fdc62 |
|||
|
8b7f88cc0b |
|||
|
70793a2f77 |
|||
|
b2c763deef |
|||
|
5c66d35017 |
|||
|
a25f9d2e73 |
|||
|
4a3b7e9a14 |
|||
|
6974e5cc06 |
|||
|
42c32b1b1c |
|||
|
87466f9d05 |
|||
|
ea72654887 |
|||
|
f1af130a63 |
|||
|
e7b772ef66 |
|||
|
28dfe9e981 |
|||
|
d4c98a0cfb |
|||
|
01772b567a |
|||
|
f9927d1eb3 |
|||
|
0d44d10e05 |
|||
|
11ecec5ab3 |
|||
|
b407bbfdee |
|||
|
04b7ab8e2e |
|||
|
0cae2692bc |
|||
|
b387f0755a |
|||
|
840f2fe464 |
|||
|
e5062683e8 |
|||
|
ffe879680d |
|||
|
32dfba178a |
|||
|
fe845e6cd6 |
|||
|
d3e6340b28 |
|||
|
b6e7bb82da |
|||
|
eb503ba647 |
|||
|
cda971a335 |
|||
| e4f666b824 | |||
| cf2150466e | |||
| 23bbbb533e | |||
|
db9fc597f3 |
|||
|
6839f0bdae |
|||
|
6f4ad046b0 |
|||
|
4494705ef9 |
|||
|
237886971c |
|||
|
95a4e03f00 |
|||
|
9054b6b357 |
|||
|
8b056d8ed1 |
|||
|
edbc647a06 |
|||
| 91516c2f20 |
620 changed files with 35716 additions and 5940 deletions
28
.forgejo/workflows/e2e.yml
Normal file
28
.forgejo/workflows/e2e.yml
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
name: "End-to-end tests"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: ["main"]
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
e2e:
|
||||||
|
runs-on: ["large", "debian-13-x86_64"]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Lix GHA Installer Action
|
||||||
|
uses: samueldr/lix-gha-installer-action@v2026-02-22
|
||||||
|
with:
|
||||||
|
extra_nix_config: experimental-features = nix-command flakes flake-self-attrs
|
||||||
|
|
||||||
|
- name: Generate code
|
||||||
|
run: nix develop --command bash -c "flutter pub get && dart scripts/generate.dart && flutter pub run build_runner build"
|
||||||
|
|
||||||
|
- name: Run end-to-end tests
|
||||||
|
run: nix run .#e2e-headless
|
||||||
39
.github/workflows/android.yml
vendored
Normal file
39
.github/workflows/android.yml
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
name: "Build APK"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: ["main"]
|
||||||
|
tags: ["*"]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-apk:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Lix GHA Installer Action
|
||||||
|
uses: samueldr/lix-gha-installer-action@v2026-02-22
|
||||||
|
with:
|
||||||
|
extra_nix_config: experimental-features = nix-command flakes flake-self-attrs
|
||||||
|
|
||||||
|
- name: Decode keystore
|
||||||
|
run: echo "$KEYSTORE_CONTENT" | base64 --decode > keystore.jks
|
||||||
|
env:
|
||||||
|
KEYSTORE_CONTENT: ${{ secrets.KEYSTORE_CONTENT }}
|
||||||
|
|
||||||
|
- name: Build app
|
||||||
|
run: nix develop --command bash -c "flutter pub get && dart scripts/generate.dart && flutter pub run build_runner build && flutter build apk --target-platform android-arm64 --split-per-abi --dart-define=GIT_COMMIT=${{ github.sha }}"
|
||||||
|
env:
|
||||||
|
KEYSTORE_PATH: ../../keystore.jks
|
||||||
|
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Upload installer artifact
|
||||||
|
uses: actions/upload-artifact@v6
|
||||||
|
with:
|
||||||
|
name: APK
|
||||||
|
path: build/app/outputs/flutter-apk/app-arm64-v8a-release.apk
|
||||||
73
.github/workflows/flatpak.yml
vendored
Normal file
73
.github/workflows/flatpak.yml
vendored
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
name: "Build Flatpaks"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: ["main"]
|
||||||
|
tags: ["*"]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-flatpak:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- arch: x86_64
|
||||||
|
runner: ubuntu-latest
|
||||||
|
- arch: aarch64
|
||||||
|
runner: ubuntu-24.04-arm
|
||||||
|
runs-on: ${{ matrix.runner }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Lix GHA Installer Action
|
||||||
|
uses: samueldr/lix-gha-installer-action@v2026-02-22
|
||||||
|
with:
|
||||||
|
extra_nix_config: experimental-features = nix-command flakes flake-self-attrs
|
||||||
|
|
||||||
|
- name: Build app
|
||||||
|
run: nix build .#flatpak
|
||||||
|
|
||||||
|
- name: Upload installer artifact
|
||||||
|
uses: actions/upload-artifact@v6
|
||||||
|
with:
|
||||||
|
name: flatpak-${{ matrix.arch }}
|
||||||
|
path: result/nexus.federated.nexus.flatpak
|
||||||
|
|
||||||
|
publish:
|
||||||
|
needs: build-flatpak
|
||||||
|
if: github.ref == 'refs/heads/main'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pages: write
|
||||||
|
id-token: write
|
||||||
|
environment:
|
||||||
|
name: github-pages
|
||||||
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
|
steps:
|
||||||
|
- name: Install flatpak tooling
|
||||||
|
run: sudo apt-get update && sudo apt-get install -y flatpak ostree
|
||||||
|
|
||||||
|
- name: Download bundles
|
||||||
|
uses: actions/download-artifact@v7
|
||||||
|
with:
|
||||||
|
pattern: flatpak-*
|
||||||
|
path: bundles
|
||||||
|
|
||||||
|
- name: Build OSTree repo
|
||||||
|
run: |
|
||||||
|
ostree init --repo=repo --mode=archive-z2
|
||||||
|
for bundle in bundles/*/nexus.federated.nexus.flatpak; do
|
||||||
|
flatpak build-import-bundle repo "$bundle"
|
||||||
|
done
|
||||||
|
flatpak build-update-repo --prune repo
|
||||||
|
|
||||||
|
- uses: actions/upload-pages-artifact@v4
|
||||||
|
with:
|
||||||
|
path: repo
|
||||||
|
|
||||||
|
- name: Deploy to Pages
|
||||||
|
id: deployment
|
||||||
|
uses: actions/deploy-pages@v4
|
||||||
48
.github/workflows/ios.yml
vendored
Normal file
48
.github/workflows/ios.yml
vendored
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
name: "Build iOS App"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: ["main"]
|
||||||
|
tags: ["*"]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-app:
|
||||||
|
runs-on: macos-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Set up Flutter
|
||||||
|
uses: subosito/flutter-action@v2
|
||||||
|
with:
|
||||||
|
flutter-version: 3.47.4
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v6
|
||||||
|
with:
|
||||||
|
go-version-file: gomuks/go.mod
|
||||||
|
|
||||||
|
- name: Build app
|
||||||
|
run: |
|
||||||
|
flutter pub get
|
||||||
|
dart scripts/generate.dart
|
||||||
|
flutter pub run build_runner build
|
||||||
|
flutter build ios --no-codesign --dart-define=GIT_COMMIT=${{ github.sha }}
|
||||||
|
|
||||||
|
# Unsigned IPA: SideStore/AltStore re-sign this on-device with the
|
||||||
|
# user's own Apple ID at install time, so no certificate is needed here.
|
||||||
|
- name: Package unsigned IPA
|
||||||
|
run: |
|
||||||
|
mkdir Payload
|
||||||
|
cp -r build/ios/iphoneos/Runner.app Payload/
|
||||||
|
zip -r Nexus.ipa Payload
|
||||||
|
|
||||||
|
- name: Upload IPA artifact
|
||||||
|
uses: actions/upload-artifact@v6
|
||||||
|
with:
|
||||||
|
name: Nexus.ipa
|
||||||
|
path: Nexus.ipa
|
||||||
47
.github/workflows/macos.yml
vendored
Normal file
47
.github/workflows/macos.yml
vendored
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
name: "Build MacOS App"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: ["main"]
|
||||||
|
tags: ["*"]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-app:
|
||||||
|
runs-on: macos-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Set up Flutter
|
||||||
|
uses: subosito/flutter-action@v2
|
||||||
|
with:
|
||||||
|
flutter-version: 3.47.4
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v6
|
||||||
|
with:
|
||||||
|
go-version-file: gomuks/go.mod
|
||||||
|
|
||||||
|
- name: Build App
|
||||||
|
run: |
|
||||||
|
flutter pub get
|
||||||
|
dart scripts/generate.dart
|
||||||
|
flutter pub run build_runner build
|
||||||
|
flutter build macos --dart-define=GIT_COMMIT=${{ github.sha }}
|
||||||
|
|
||||||
|
- name: Create DMG
|
||||||
|
id: create-dmg
|
||||||
|
uses: L-Super/create-dmg-actions@28511e988b13ca34096d439159a66d468b8e724f
|
||||||
|
with:
|
||||||
|
dmg_name: nexus
|
||||||
|
src_dir: build/macos/Build/Products/Release/Nexus.app
|
||||||
|
|
||||||
|
- name: Upload DMG
|
||||||
|
uses: actions/upload-artifact@v6
|
||||||
|
with:
|
||||||
|
name: nexus.dmg
|
||||||
|
path: ${{ steps.create-dmg.outputs.dmg_path }}
|
||||||
94
.github/workflows/windows.yml
vendored
94
.github/workflows/windows.yml
vendored
|
|
@ -1,46 +1,74 @@
|
||||||
name: "Build Windows Version"
|
name: "Build EXE"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
push:
|
||||||
|
branches: ["main"]
|
||||||
|
tags: ["*"]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-windows:
|
build-exe:
|
||||||
runs-on: "windows-latest"
|
runs-on: windows-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout repository"
|
- name: Checkout repository
|
||||||
uses: "actions/checkout@v4"
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
- name: "Set up Flutter"
|
- name: Set up Flutter
|
||||||
uses: "subosito/flutter-action@v2"
|
uses: subosito/flutter-action@v2
|
||||||
|
with:
|
||||||
|
flutter-version: 3.47.4
|
||||||
|
|
||||||
- name: "Set up Rust"
|
- name: Set up Go
|
||||||
uses: "dtolnay/rust-toolchain@stable"
|
uses: actions/setup-go@v6
|
||||||
with:
|
with:
|
||||||
targets: "x86_64-pc-windows-msvc"
|
go-version-file: gomuks/go.mod
|
||||||
|
|
||||||
- name: "Install Flutter dependencies"
|
- name: Setup MSYS2
|
||||||
run: flutter pub get
|
uses: msys2/setup-msys2@v2
|
||||||
|
with:
|
||||||
|
msystem: CLANG64
|
||||||
|
install: >-
|
||||||
|
mingw-w64-x86_64-gcc
|
||||||
|
|
||||||
- name: "Run build_runner & build Windows EXE"
|
- name: Go build
|
||||||
run: |
|
run: |
|
||||||
flutter pub run build_runner build --delete-conflicting-outputs
|
cd gomuks/pkg/ffi
|
||||||
flutter build windows --release
|
go build -tags goolm,sqlite_fts5 -o ../../../libgomuks.dll -buildmode=c-shared
|
||||||
|
|
||||||
- name: "Upload exe zip"
|
- name: Build with Flutter
|
||||||
uses: "actions/upload-artifact@v4"
|
run: |
|
||||||
with:
|
flutter pub get
|
||||||
name: "windows-portable"
|
dart scripts/generate.dart
|
||||||
path: "build/windows/x64/runner/Release/"
|
flutter pub run build_runner build
|
||||||
|
flutter build windows --dart-define=GIT_COMMIT=${{ github.sha }}
|
||||||
|
|
||||||
- name: "Install Inno Setup"
|
- name: Copy MinGW runtime DLLs
|
||||||
run: choco install innosetup -y
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
cp /mingw64/bin/libgcc_s_seh-1.dll build/windows/x64/runner/Release/
|
||||||
|
cp /mingw64/bin/libwinpthread-1.dll build/windows/x64/runner/Release/
|
||||||
|
cp /mingw64/bin/libstdc++-6.dll build/windows/x64/runner/Release/
|
||||||
|
|
||||||
- name: "Build Inno Setup installer"
|
- name: Copy MSVC runtime DLLs
|
||||||
run: iscc windows/installer.iss
|
shell: powershell
|
||||||
|
run: |
|
||||||
|
$release = "build/windows/x64/runner/Release"
|
||||||
|
|
||||||
- name: "Upload installer artifact"
|
Copy-Item C:\Windows\System32\MSVCP140.dll $release -Force
|
||||||
uses: "actions/upload-artifact@v4"
|
Copy-Item C:\Windows\System32\VCRUNTIME140.dll $release -Force
|
||||||
with:
|
Copy-Item C:\Windows\System32\VCRUNTIME140_1.dll $release -Force
|
||||||
name: "windows-installer"
|
|
||||||
path: "windows/dist/Nexus-Setup.exe"
|
- name: Install Inno Setup
|
||||||
|
run: choco install innosetup -y
|
||||||
|
|
||||||
|
- name: Build Inno Setup installer
|
||||||
|
run: iscc windows/installer.iss
|
||||||
|
|
||||||
|
- name: Upload installer artifact
|
||||||
|
uses: actions/upload-artifact@v6
|
||||||
|
with:
|
||||||
|
name: windows-installer
|
||||||
|
path: windows/dist/Nexus-Setup.exe
|
||||||
|
|
|
||||||
8
.gitignore
vendored
8
.gitignore
vendored
|
|
@ -36,7 +36,11 @@ key.properties
|
||||||
# Generated Files
|
# Generated Files
|
||||||
*.g.dart
|
*.g.dart
|
||||||
*.freezed.dart
|
*.freezed.dart
|
||||||
src/
|
|
||||||
|
|
||||||
# Devel Password
|
# Devel Password
|
||||||
password.txt
|
password.txt
|
||||||
|
|
||||||
|
# Nix
|
||||||
|
/result
|
||||||
|
# Widget Preview related
|
||||||
|
.widget_preview/
|
||||||
|
|
|
||||||
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[submodule "gomuks"]
|
||||||
|
path = gomuks
|
||||||
|
url = https://github.com/gomuks/gomuks
|
||||||
|
branch = quad/nexus
|
||||||
12
.metadata
12
.metadata
|
|
@ -4,7 +4,7 @@
|
||||||
# This file should be version controlled and should not be manually edited.
|
# This file should be version controlled and should not be manually edited.
|
||||||
|
|
||||||
version:
|
version:
|
||||||
revision: "nixpkgs000000000000000000000000000000000"
|
revision: "6b182d2c7585eba26d4edce0f97630effd256c33"
|
||||||
channel: "stable"
|
channel: "stable"
|
||||||
|
|
||||||
project_type: app
|
project_type: app
|
||||||
|
|
@ -13,11 +13,11 @@ project_type: app
|
||||||
migration:
|
migration:
|
||||||
platforms:
|
platforms:
|
||||||
- platform: root
|
- platform: root
|
||||||
create_revision: nixpkgs000000000000000000000000000000000
|
create_revision: 6b182d2c7585eba26d4edce0f97630effd256c33
|
||||||
base_revision: nixpkgs000000000000000000000000000000000
|
base_revision: 6b182d2c7585eba26d4edce0f97630effd256c33
|
||||||
- platform: windows
|
- platform: ios
|
||||||
create_revision: nixpkgs000000000000000000000000000000000
|
create_revision: 6b182d2c7585eba26d4edce0f97630effd256c33
|
||||||
base_revision: nixpkgs000000000000000000000000000000000
|
base_revision: 6b182d2c7585eba26d4edce0f97630effd256c33
|
||||||
|
|
||||||
# User provided section
|
# User provided section
|
||||||
|
|
||||||
|
|
|
||||||
17
.vscode/launch.json
vendored
Normal file
17
.vscode/launch.json
vendored
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Flutter",
|
||||||
|
"type": "dart",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "lib/main.dart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Flutter (Headless)",
|
||||||
|
"type": "dart",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "lib/main.dart",
|
||||||
|
"env": { "FLUTTER_HEADLESS": "1" }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
13
.vscode/settings.json
vendored
13
.vscode/settings.json
vendored
|
|
@ -2,8 +2,19 @@
|
||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
"Appbar",
|
"Appbar",
|
||||||
"Displayname",
|
"Displayname",
|
||||||
|
"fluttertagger",
|
||||||
|
"Gomuks",
|
||||||
"Homeserver",
|
"Homeserver",
|
||||||
|
"Linkified",
|
||||||
|
"localpart",
|
||||||
|
"msgtype",
|
||||||
|
"muks",
|
||||||
"prefs",
|
"prefs",
|
||||||
"vodozemac"
|
"recents",
|
||||||
|
"unban",
|
||||||
|
"underride",
|
||||||
|
"unifiedpush",
|
||||||
|
"unredact",
|
||||||
|
"webpush"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
104
DEVELOPMENT.md
Normal file
104
DEVELOPMENT.md
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
# Development Documentation
|
||||||
|
|
||||||
|
## Build instructions
|
||||||
|
|
||||||
|
Build instructions can be found in [README.md](./README.md#build-it-yourself).
|
||||||
|
|
||||||
|
## Updating Gomuks
|
||||||
|
|
||||||
|
You can run the following command to update the Gomuks submodule:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git submodule update --remote
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code Style
|
||||||
|
|
||||||
|
See [Effective Dart: Style](https://dart.dev/effective-dart/style) for general rules. There are some extra rules detailed below:
|
||||||
|
|
||||||
|
### Controllers and Helpers ([Riverpod](https://pub.dev/packages/riverpod))
|
||||||
|
|
||||||
|
Controllers live in `lib/controllers/` and provide a source that exposes data and logic via Riverpod providers, allowing other parts of the code to watch state changes with ref.watch (`ref.watch(MyController.provider)`), access the current value with ref.read (`ref.read(MyController.provider)`), and run helper methods on those classes using the notifier:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
ref.read(MyController.provider.notifier).helperMethod()
|
||||||
|
```
|
||||||
|
|
||||||
|
We use an object oriented style for controllers, where `provider` is a static member on the controller class. E.g.
|
||||||
|
|
||||||
|
```dart
|
||||||
|
class MyController(final SomeInputType input)
|
||||||
|
extends AsyncNotifier<DataThisControllerExposes> {
|
||||||
|
@override
|
||||||
|
Future<DataThisControllerExposes> build() async {
|
||||||
|
return input.foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
static final provider =
|
||||||
|
AsyncNotifierProvider.family<MyController, DataThisControllerExposes, SomeInputType>(
|
||||||
|
MyController.new,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `watch` vs `read`
|
||||||
|
|
||||||
|
Only use `ref.watch` in a `build` method, where you want to rebuild when the value changes. Everywhere else, like callbacks, `useEffect`, and methods on a controller, use `ref.read`.
|
||||||
|
|
||||||
|
Use `.select` to narrow down what you depend on, e.g. `ref.watch(RoomsController.provider.select((rooms) => rooms[roomId]))`.
|
||||||
|
|
||||||
|
Providers which are not controllers, e.g. they expose no data, only methods, should instead live in `lib/helpers/`. For an example, see `lib/helpers/launch_helper.dart`. Other, non-provider helpers, like extensions or helper methods can also go in `lib/helpers/`.
|
||||||
|
|
||||||
|
### Don't use StatefulWidgets ([Flutter Hooks](https://pub.dev/packages/flutter_hooks))
|
||||||
|
|
||||||
|
This project uses Flutter Hooks to help with boilerplate that StatefulWidgets create. Instead of using a StatefulWidget, we just use hooks like `useState` or `useEffect` in the build method of a `HookWidget`, which is a drop in replacement for `StatelessWidget`. If you need both a `WidgetRef` to watch providers, and access to hooks, use `HookConsumerWidget`.
|
||||||
|
|
||||||
|
### Models ([Freezed](https://pub.dev/packages/freezed))
|
||||||
|
|
||||||
|
We use Freezed for our models to avoid boilerplate and enforce an immutable style of state and data modeling throughout the code. See their documentation for more info, or see our existing models in `lib/models/`.
|
||||||
|
|
||||||
|
### Immutable Data Collections ([Fast Immutable Collections](https://pub.dev/packages/fast_immutable_collections))
|
||||||
|
|
||||||
|
When possible, use immutable collections instead of the mutable equivalent. For example, use `IMap` over `Map`, `IList` over `List`, `ISet` over `Set`. This matches the immutable style of Riverpod and Freezed.
|
||||||
|
|
||||||
|
### Don't create globals
|
||||||
|
|
||||||
|
When possible, we prefer not to create global variables or methods. You can usually replace a global variable with a Riverpod controller, and a global method with an extension method.
|
||||||
|
|
||||||
|
I'm also not a big fan of unneeded private methods or variables, but this is contextual.
|
||||||
|
|
||||||
|
### Modern Dart syntax
|
||||||
|
|
||||||
|
We try to use newer Dart language features where they make code shorter:
|
||||||
|
|
||||||
|
- Primary constructors for classes, including widgets, e.g. `class const MemberList(final String roomId, {super.key}) extends HookConsumerWidget`.
|
||||||
|
- Dot shorthands wherever the type can be inferred, e.g. `.new(...)`, `padding: .all(8)`, `relationType == .reply`.
|
||||||
|
- Patterns and switch expressions over null checks and casts, e.g. `if (event.content case MessageContent(:final body?))` rather than checking `is` then using `!`.
|
||||||
|
|
||||||
|
### Prefer `map` over inline `for` loops
|
||||||
|
|
||||||
|
When building a list (or set, or map) from another collection, use `.map`, `.expand` and friends rather than a `for` inside the collection literal:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
// Prefer
|
||||||
|
children: rooms.map((room) => RoomTile(room)).toList(),
|
||||||
|
|
||||||
|
// Over
|
||||||
|
children: [for (final room in rooms) RoomTile(room)],
|
||||||
|
```
|
||||||
|
|
||||||
|
Regular `for` statements are fine for logic that doesn't just build a collection.
|
||||||
|
|
||||||
|
### Async values and errors
|
||||||
|
|
||||||
|
When rendering an `AsyncValue`, use the `betterWhen` extension, which shows our standard loading and error widgets, or a switch expression if you need more control (e.g. `AsyncData(:final value) || AsyncLoading(:final value?)` to keep showing old data while reloading).
|
||||||
|
|
||||||
|
For futures started from the UI that nothing awaits, like button presses, add `.onError(showError)` so failures are shown to the user instead of being lost.
|
||||||
|
|
||||||
|
## LLM/AI Assisted Contributions
|
||||||
|
|
||||||
|
LLM generated code is NOT allowed. All contributions should be written by humans. Using LLMs for interacting with others, e.g. for Comments, PRs, etc, is also not allowed.
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
|
||||||
|
All contributions must follow the [Federated Nexus Code of Conduct](https://federated.nexus/code/).
|
||||||
239
README.md
239
README.md
|
|
@ -1,11 +1,8 @@
|
||||||
# Nexus Client
|
# Nexus Client
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Nexus Client is still heavily in development, and is not ready for use!
|
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
A simple and user-friendly Matrix client made with Flutter and the Matrix Dart SDK.
|
A simple and user-friendly Matrix client made with Flutter and a Gomuks backend.
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
|
|
@ -13,135 +10,109 @@ A simple and user-friendly Matrix client made with Flutter and the Matrix Dart S
|
||||||
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------: |
|
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------: |
|
||||||
|  |  |
|
|  |  |
|
||||||
|
|
||||||
## Progress
|
## Try it out
|
||||||
|
|
||||||
- [ ] New logo
|
If you want to try out Nexus, download the [latest release](https://git.federated.nexus/Nexus/nexus/releases/latest).
|
||||||
- [ ] Make context menus appear as bottom sheets on mobile
|
|
||||||
- [x] Move from the Dart SDK to the Gomuks SDK with Dart bindings: https://git.federated.nexus/Henry-Hiles/nexus/pulls/2
|
|
||||||
- [ ] Allow using remote gomuks over websocket
|
|
||||||
- [ ] Platform Support
|
|
||||||
- [x] Linux
|
|
||||||
- [x] Windows
|
|
||||||
- [ ] MacOS
|
|
||||||
- [ ] Android
|
|
||||||
- [ ] iOS
|
|
||||||
- [ ] Web (may not be possible)
|
|
||||||
- [x] Login
|
|
||||||
- [x] Username / password auth
|
|
||||||
- [ ] OAuth / OIDC
|
|
||||||
- [x] Improve initial sync experience
|
|
||||||
- [x] Rooms / Spaces
|
|
||||||
- [x] Displaying and choosing
|
|
||||||
- [x] Reading, showing unread
|
|
||||||
- [x] Mark as read button on rooms and spaces
|
|
||||||
- [ ] Searching
|
|
||||||
- [ ] Creating (Rooms, Spaces, and DMs)
|
|
||||||
- [x] Joining
|
|
||||||
- [ ] Parse vias
|
|
||||||
- [x] Using a text/uri/link
|
|
||||||
- [x] Plain text
|
|
||||||
- [x] `matrix:` Uri
|
|
||||||
- [x] Matrix.to link
|
|
||||||
- [ ] From space
|
|
||||||
- [ ] Exploring
|
|
||||||
- [x] Leaving
|
|
||||||
- [x] Subspaces
|
|
||||||
- [x] Messages
|
|
||||||
- [x] Encryption
|
|
||||||
- [x] Restoring crypto identity from a recovery passphrase/key
|
|
||||||
- [x] Sending
|
|
||||||
- [x] Plain text
|
|
||||||
- [x] HTML/Markdown
|
|
||||||
- [x] Replies
|
|
||||||
- [x] Choose ping on/off
|
|
||||||
- [ ] Attachments
|
|
||||||
- [ ] Commands with [MSC4391](https://github.com/matrix-org/matrix-spec-proposals/pull/4391)
|
|
||||||
- [x] Mentions
|
|
||||||
- [x] Users
|
|
||||||
- [x] Rooms
|
|
||||||
- [ ] Inline emoji picker (Putting this here since it'll be implemented the same way as mentions)
|
|
||||||
- [ ] Custom emojis/stickers
|
|
||||||
- [ ] GIFs using Gomuks' GIF proxies
|
|
||||||
- [x] Recieving
|
|
||||||
- [x] Plain text
|
|
||||||
- [x] HTML
|
|
||||||
- [x] Replies
|
|
||||||
- [x] Viewing
|
|
||||||
- [ ] Jump to original message
|
|
||||||
- [x] In loaded timeline
|
|
||||||
- [ ] Out of loaded timeline
|
|
||||||
- [x] Edits
|
|
||||||
- [x] Attachments
|
|
||||||
- [x] Unencrypted
|
|
||||||
- [ ] Encrypted
|
|
||||||
- [x] Blurhashing
|
|
||||||
- [ ] Downloading attachments
|
|
||||||
- [x] Opening attachments in their own view
|
|
||||||
- [ ] Polls: Waiting on https://github.com/SwanFlutter/dynamic_polls/issues/1
|
|
||||||
- [x] Mentions
|
|
||||||
- [x] Users
|
|
||||||
- [x] Rooms
|
|
||||||
- [ ] Plain text (not sure if I want to add this or not, I probably won't unless there's interest)
|
|
||||||
- [x] Matrix URIs
|
|
||||||
- [x] Matrix.to links
|
|
||||||
- [ ] Do some fancy fetching to get nice names
|
|
||||||
- [ ] Make clickable
|
|
||||||
- [x] Custom emojis/stickers
|
|
||||||
- [x] History loading
|
|
||||||
- [x] Backwards
|
|
||||||
- [ ] Forwards
|
|
||||||
- [x] Editing
|
|
||||||
- [x] Deleting
|
|
||||||
- [ ] Reactions: Waiting on https://github.com/flyerhq/flutter_chat_ui/pull/838 or me doing a custom impl
|
|
||||||
- [ ] Pins
|
|
||||||
- [ ] Displaying
|
|
||||||
- [ ] Creating
|
|
||||||
- [ ] Threads
|
|
||||||
- [ ] Profile popouts
|
|
||||||
- [ ] Copy link to [room, space]
|
|
||||||
- [ ] Reporting
|
|
||||||
- [x] Events
|
|
||||||
- [ ] Rooms
|
|
||||||
- [ ] Notifications using UnifiedPush
|
|
||||||
- [ ] Group calls using [MSC4195](https://github.com/matrix-org/matrix-spec-proposals/pull/4195)
|
|
||||||
- [ ] Invites
|
|
||||||
- [ ] Settings
|
|
||||||
- [ ] Light/Dark mode
|
|
||||||
- [ ] SSD or CSD
|
|
||||||
- [ ] Show media by default
|
|
||||||
- [ ] Dynamic Theming
|
|
||||||
- [ ] Devices
|
|
||||||
- [ ] Viewing devices
|
|
||||||
- [ ] Verifying devices
|
|
||||||
- [ ] URL preview: Server / Client / None
|
|
||||||
- [ ] Account changes
|
|
||||||
- [ ] Display name
|
|
||||||
- [ ] Profile picture
|
|
||||||
- [ ] Timezone
|
|
||||||
- [ ] Pronouns
|
|
||||||
- [ ] Password
|
|
||||||
- [ ] About
|
|
||||||
- [x] Log Out
|
|
||||||
|
|
||||||
## Build Instructions
|
### Nightly Builds
|
||||||
|
|
||||||
First, clone and open the repo:
|
For the newest changes, grab one of the following nightly artifacts, built by CI from the latest commit on `main`.
|
||||||
|
|
||||||
```sh
|
- [Android APK](https://nightly.link/Henry-Hiles/nexus/workflows/android/main/APK.zip)
|
||||||
git clone https://git.federated.nexus/Henry-Hiles/nexus
|
- [Unsigned iOS IPA](https://nightly.link/Henry-Hiles/nexus/workflows/ios/main/Nexus.ipa.zip)
|
||||||
cd nexus
|
- [Unsigned MacOS DMG](https://nightly.link/Henry-Hiles/nexus/workflows/macos/main/nexus.dmg.zip)
|
||||||
|
- [Windows EXE](https://nightly.link/Henry-Hiles/nexus/workflows/windows/main/windows-installer.zip)
|
||||||
|
|
||||||
|
Or, use one of the below methods:
|
||||||
|
|
||||||
|
### Nightly Flatpak Repo
|
||||||
|
|
||||||
|
Make sure Flatpak is set up on your system, then run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
flatpak install --user https://nexus.federated.nexus/flatpak/nexus.flatpakref
|
||||||
```
|
```
|
||||||
|
|
||||||
|
This adds the Nexus remote and installs the app for your user only, so no root access is needed (x86_64 and aarch64 are supported). To install system-wide instead, use `--system` in place of `--user`. Updates arrive through `flatpak update` or your software center.
|
||||||
|
|
||||||
|
### NixOS Module
|
||||||
|
|
||||||
|
Add Nexus as a flake input, following `nixpkgs` for less fetches:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
nexus = {
|
||||||
|
url = "git+https://git.federated.nexus/Nexus/nexus";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
This tracks the latest commit on `main`. To stay on a release instead, pin the input to its tag:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
url = "git+https://git.federated.nexus/Nexus/nexus?ref=refs/tags/v1.0.1";
|
||||||
|
```
|
||||||
|
|
||||||
|
Then import the module and enable it in your NixOS configuration:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
imports = [ inputs.nexus.nixosModules.default ];
|
||||||
|
|
||||||
|
programs.nexus = {
|
||||||
|
enable = true;
|
||||||
|
enableNotifications = true; # optional: push notifications via UnifiedPush
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This installs Nexus system-wide. With `enableNotifications`, it also installs KUnifiedPush and registers its systemd and D-Bus services so notifications work. The `package` option lets you override the package if you need to.
|
||||||
|
|
||||||
|
## Build it yourself
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
#### Linux
|
#### Linux
|
||||||
|
|
||||||
- With Nix: Either use direnv, or `nix flake develop`
|
- On NixOS: Either use direnv and `direnv allow`, or `nix develop`
|
||||||
- Without Nix: Install Flutter, Go, Olm, Git, Clang, and GLibc.
|
- On other distros: Install Flutter, Go, Git, Libclang, Libass, MPV, and Glibc. Do not use any Snap packages, they cause various compilation issues.
|
||||||
|
|
||||||
#### Windows / MacOS
|
#### Windows
|
||||||
|
|
||||||
I don't really know. You will need Flutter, Git, Olm, Go, and Visual Studio tools, and otherwise I guess just keep installing stuff until there aren't any errors. I will look into this sometimeTM.
|
You will need:
|
||||||
|
|
||||||
|
- Flutter
|
||||||
|
- Git
|
||||||
|
- Libass
|
||||||
|
- MPV
|
||||||
|
- Go
|
||||||
|
- Visual Studio 2022 (Desktop development with C++)
|
||||||
|
- [MSYS2/MinGW-w64 GCC](https://www.msys2.org/) (for CGO)
|
||||||
|
- [LLVM/Clang + libclang](https://clang.llvm.org/get_started.html) (for `ffigen`)
|
||||||
|
|
||||||
|
On Windows, make sure these are available in your shell `PATH`:
|
||||||
|
|
||||||
|
- `C:\msys64\ucrt64\bin` (or your MinGW bin path containing `x86_64-w64-mingw32-gcc.exe`)
|
||||||
|
- `C:\Program Files\LLVM\bin` (contains `clang.exe` and `libclang.dll`)
|
||||||
|
|
||||||
|
For `dart scripts/generate.dart`, you may also need:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
$env:CPATH = "C:\msys64\ucrt64\include"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### MacOS
|
||||||
|
|
||||||
|
Similar prerequisites apply (Flutter, Git, Go, C toolchain, LLVM/libclang), but exact setup has not been fully documented yet.
|
||||||
|
|
||||||
|
### Clone repo
|
||||||
|
|
||||||
|
First, clone and open the repo:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git clone --recurse-submodules https://git.federated.nexus/Nexus/nexus
|
||||||
|
cd nexus
|
||||||
|
```
|
||||||
|
|
||||||
### Set up Flutter
|
### Set up Flutter
|
||||||
|
|
||||||
|
|
@ -151,22 +122,23 @@ Get dependencies:
|
||||||
flutter pub get
|
flutter pub get
|
||||||
```
|
```
|
||||||
|
|
||||||
Get dependencies:
|
Generate Gomuks bindings:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
flutter pub get
|
dart scripts/generate.dart
|
||||||
```
|
```
|
||||||
|
|
||||||
Clone Gomuks and generate bindings:
|
> [!NOTE]
|
||||||
|
> If you are having issues with `stddef.h` not being found, try setting CPATH manually:
|
||||||
```sh
|
>
|
||||||
scripts/generate.sh
|
> ```sh
|
||||||
```
|
> export CPATH="$(clang -v 2>&1 | grep "Selected GCC installation" | rev | cut -d' ' -f1 | rev)/include"
|
||||||
|
> ```
|
||||||
|
|
||||||
Build generated files, and watch for new changes:
|
Build generated files, and watch for new changes:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
flutter pub run build_runner watch --delete-conflicting-outputs
|
flutter pub run build_runner watch
|
||||||
```
|
```
|
||||||
|
|
||||||
Run the app:
|
Run the app:
|
||||||
|
|
@ -175,6 +147,13 @@ Run the app:
|
||||||
flutter run
|
flutter run
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Development instructions can be found in [DEVELOPMENT.md](./DEVELOPMENT.md).
|
||||||
|
|
||||||
## Community
|
## Community
|
||||||
|
|
||||||
Join the [Nexus Client Matrix Room](https://matrix.to/#/#nexus:federated.nexus) for questions or help with developing or using Nexus Client.
|
Join the [Nexus Client Matrix room](https://matrix.to/#/#nexus:federated.nexus) for questions or help with developing or using Nexus Client.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
Thank you Hylke Bons (https://planetpeanut.studio) for making the amazing icon for Nexus!
|
||||||
|
Thank you Tulir Asokan for making [Gomuks](https://github.com/gomuks/gomuks), and helping us integrate it into Nexus!
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,18 @@
|
||||||
analyzer:
|
analyzer:
|
||||||
errors:
|
errors:
|
||||||
invalid_annotation_target: ignore
|
invalid_annotation_target: ignore
|
||||||
avoid_print: ignore
|
avoid_print: ignore
|
||||||
exclude:
|
exclude:
|
||||||
- "build/**"
|
- "build/**"
|
||||||
- "**/*.g.dart"
|
- "**/*.g.dart"
|
||||||
- "**/*.freezed.dart"
|
- "**/*.freezed.dart"
|
||||||
|
- android/**
|
||||||
|
- ios/**
|
||||||
|
- web/**
|
||||||
|
- windows/**
|
||||||
|
- macos/**
|
||||||
|
- linux/**
|
||||||
include: package:flutter_lints/flutter.yaml
|
include: package:flutter_lints/flutter.yaml
|
||||||
linter:
|
linter:
|
||||||
rules:
|
rules:
|
||||||
prefer_double_quotes: true
|
prefer_double_quotes: true
|
||||||
|
|
|
||||||
|
|
@ -1,72 +0,0 @@
|
||||||
plugins {
|
|
||||||
id "com.android.application"
|
|
||||||
id "kotlin-android"
|
|
||||||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
|
||||||
id "dev.flutter.flutter-gradle-plugin"
|
|
||||||
}
|
|
||||||
|
|
||||||
def localProperties = new Properties()
|
|
||||||
def localPropertiesFile = rootProject.file("local.properties")
|
|
||||||
if (localPropertiesFile.exists()) {
|
|
||||||
localPropertiesFile.withReader("UTF-8") { reader ->
|
|
||||||
localProperties.load(reader)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
|
|
||||||
if (flutterVersionCode == null) {
|
|
||||||
flutterVersionCode = "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
def flutterVersionName = localProperties.getProperty("flutter.versionName")
|
|
||||||
if (flutterVersionName == null) {
|
|
||||||
flutterVersionName = "1.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
def keystoreProperties = new Properties()
|
|
||||||
def keystorePropertiesFile = rootProject.file('key.properties')
|
|
||||||
if (keystorePropertiesFile.exists()) {
|
|
||||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
|
||||||
namespace = "nexus.federated.Nexus"
|
|
||||||
ndkVersion = flutter.ndkVersion
|
|
||||||
compileSdk = 34
|
|
||||||
|
|
||||||
compileOptions {
|
|
||||||
sourceCompatibility = JavaVersion.VERSION_17
|
|
||||||
targetCompatibility = JavaVersion.VERSION_17
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
applicationId = "nexus.federated.Nexus"
|
|
||||||
minSdk = 29
|
|
||||||
targetSdkVersion flutter.targetSdkVersion
|
|
||||||
versionCode = flutterVersionCode.toInteger()
|
|
||||||
versionName = flutterVersionName
|
|
||||||
}
|
|
||||||
|
|
||||||
signingConfigs {
|
|
||||||
release {
|
|
||||||
keyAlias "key"
|
|
||||||
storeFile keystoreProperties['path'] ? file(keystoreProperties['path']) : file(System.getenv("KEYSTORE_PATH"))
|
|
||||||
keyPassword keystoreProperties['password'] ?: System.getenv("KEYSTORE_PASSWORD")
|
|
||||||
storePassword keystoreProperties['password'] ?: System.getenv("KEYSTORE_PASSWORD")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
signingConfig signingConfigs.release
|
|
||||||
}
|
|
||||||
|
|
||||||
debug {
|
|
||||||
applicationIdSuffix = ".debug"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
flutter {
|
|
||||||
source = "../.."
|
|
||||||
}
|
|
||||||
84
android/app/build.gradle.kts
Normal file
84
android/app/build.gradle.kts
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
import java.util.Properties
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id("com.android.application")
|
||||||
|
id("dev.flutter.flutter-gradle-plugin")
|
||||||
|
}
|
||||||
|
|
||||||
|
val keystoreProperties = Properties()
|
||||||
|
val keystorePropertiesFile = rootProject.file("key.properties")
|
||||||
|
|
||||||
|
if (keystorePropertiesFile.exists()) {
|
||||||
|
keystorePropertiesFile.inputStream().use {
|
||||||
|
keystoreProperties.load(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = "nexus.federated.nexus"
|
||||||
|
compileSdk = 36
|
||||||
|
ndkVersion = flutter.ndkVersion
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
isCoreLibraryDesugaringEnabled = true
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_21
|
||||||
|
targetCompatibility = JavaVersion.VERSION_21
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
applicationId = "nexus.federated.nexus"
|
||||||
|
|
||||||
|
minSdk = 29
|
||||||
|
targetSdk = flutter.targetSdkVersion
|
||||||
|
|
||||||
|
versionCode = flutter.versionCode
|
||||||
|
versionName = flutter.versionName
|
||||||
|
|
||||||
|
multiDexEnabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
create("release") {
|
||||||
|
keyAlias = "key"
|
||||||
|
|
||||||
|
val storePath =
|
||||||
|
keystoreProperties["path"]?.toString()
|
||||||
|
?: System.getenv("KEYSTORE_PATH")
|
||||||
|
|
||||||
|
storeFile = storePath?.let { file(it) }
|
||||||
|
|
||||||
|
keyPassword =
|
||||||
|
keystoreProperties["password"]?.toString()
|
||||||
|
?: System.getenv("KEYSTORE_PASSWORD")
|
||||||
|
|
||||||
|
storePassword =
|
||||||
|
keystoreProperties["password"]?.toString()
|
||||||
|
?: System.getenv("KEYSTORE_PASSWORD")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig = signingConfigs.getByName("release")
|
||||||
|
}
|
||||||
|
|
||||||
|
debug {
|
||||||
|
applicationIdSuffix = ".debug"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation("org.unifiedpush.android:embedded-fcm-distributor:3.1.0")
|
||||||
|
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
compilerOptions {
|
||||||
|
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
flutter {
|
||||||
|
source = "../.."
|
||||||
|
}
|
||||||
|
|
@ -1,16 +1,20 @@
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.READ_EXTERNAL_STORAGE"
|
android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||||
android:maxSdkVersion="32" />
|
android:maxSdkVersion="32" />
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||||
android:maxSdkVersion="29" />
|
android:maxSdkVersion="29" />
|
||||||
|
<!-- Until https://github.com/flutter/flutter/issues/145290 is fixed, we need enableOnBackInvokedCallback as false -->
|
||||||
<application
|
<application
|
||||||
|
android:enableOnBackInvokedCallback="false"
|
||||||
android:label="Nexus"
|
android:label="Nexus"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:roundIcon="@mipmap/nexus_round"
|
android:roundIcon="@mipmap/ic_launcher"
|
||||||
android:allowBackup="false"
|
android:allowBackup="false"
|
||||||
android:fullBackupContent="false">
|
android:fullBackupContent="false">
|
||||||
<activity
|
<activity
|
||||||
|
|
@ -22,6 +26,21 @@
|
||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
android:hardwareAccelerated="true"
|
android:hardwareAccelerated="true"
|
||||||
android:windowSoftInputMode="adjustResize">
|
android:windowSoftInputMode="adjustResize">
|
||||||
|
<meta-data android:name="flutter_deeplinking_enabled" android:value="false" />
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
|
||||||
|
<data android:scheme="nexus.federated.nexus" />
|
||||||
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
|
||||||
|
<data android:scheme="matrix" />
|
||||||
|
</intent-filter>
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="io.flutter.embedding.android.NormalTheme"
|
android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
android:resource="@style/NormalTheme"
|
android:resource="@style/NormalTheme"
|
||||||
|
|
@ -41,6 +60,16 @@
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2" />
|
android:value="2" />
|
||||||
|
<!-- Needed by pasteboard, for pasting files from the clipboard -->
|
||||||
|
<provider
|
||||||
|
android:name="androidx.core.content.FileProvider"
|
||||||
|
android:authorities="${applicationId}.provider"
|
||||||
|
android:exported="false"
|
||||||
|
android:grantUriPermissions="true">
|
||||||
|
<meta-data
|
||||||
|
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||||
|
android:resource="@xml/provider_paths" />
|
||||||
|
</provider>
|
||||||
</application>
|
</application>
|
||||||
<!-- Required to query activities that can process text, see:
|
<!-- Required to query activities that can process text, see:
|
||||||
https://developer.android.com/training/package-visibility and
|
https://developer.android.com/training/package-visibility and
|
||||||
|
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
package nexus.federated.Nexus
|
|
||||||
|
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
|
||||||
|
|
||||||
class MainActivity: FlutterActivity()
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
package nexus.federated.nexus
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import android.view.WindowInsets
|
||||||
|
import android.view.WindowInsetsAnimation
|
||||||
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
|
|
||||||
|
// TODO: Revert this commit once https://github.com/flutter/flutter/issues/191156 is fixed
|
||||||
|
class MainActivity: FlutterActivity() {
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) return
|
||||||
|
|
||||||
|
window.decorView.setWindowInsetsAnimationCallback(
|
||||||
|
object : WindowInsetsAnimation.Callback(DISPATCH_MODE_CONTINUE_ON_SUBTREE) {
|
||||||
|
override fun onProgress(
|
||||||
|
insets: WindowInsets,
|
||||||
|
runningAnimations: List<WindowInsetsAnimation>,
|
||||||
|
) = insets
|
||||||
|
|
||||||
|
override fun onEnd(animation: WindowInsetsAnimation) {
|
||||||
|
if ((animation.typeMask and WindowInsets.Type.ime()) != 0) reapplyInsets()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onWindowFocusChanged(hasFocus: Boolean) {
|
||||||
|
super.onWindowFocusChanged(hasFocus)
|
||||||
|
if (hasFocus && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) reapplyInsets()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Posted so it runs after Flutter has applied any insets it deferred.
|
||||||
|
private fun reapplyInsets() {
|
||||||
|
val view = findViewById<View>(FLUTTER_VIEW_ID) ?: return
|
||||||
|
view.post { view.rootWindowInsets?.let(view::onApplyWindowInsets) }
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 5.5 KiB |
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue