mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-17 05:41:29 +02:00
Avoids any confusion / potential trademark friction with HashWallet
(Spanish hardware-wallet company). Hash Bags is a more distinctive
name, harder to collide with, and we can still rank for 'hash wallet'
search via App Store / Play Store subtitle ('Hash Bags - A Wallet
for your Coins').
What changed (all user-visible strings):
- Launcher labels: android/app.properties, scripts/android/app_env.sh,
scripts/ios/app_env.sh, linux window title (CMakeLists +
my_application.cc)
- In-app text: lib/generated/i18n.dart + ARB sources under res/values/
- Brand docs: README.md, CONTRIBUTING.md, PRIVACY.md,
assets/text/Terms_of_Use.txt, assets/text/Release_Notes.txt
- hash.boats website: index.html, og-image.svg + regen og-image.png,
site.webmanifest, styles.css comment, splash/confirm/pulse/mark/
lockup svg titles, report/index.html, server/server.js
- CI workflow display names ("Hash Bags Linux build", etc.)
What did NOT change (deliberate):
- Bundle ID / Package: com.suchsoftware.hashwallet (immutable app
identity on App Store + Play Store — changing == orphaning the app)
- Binary name: hash_wallet (Linux executable)
- Dart import paths: package:hash_wallet/...
- Git repo: hash-wallet (Such-Software/hash-wallet)
- URL scheme: hashwallet:// (internal deep links)
- support@such.software (no domain change yet)
- App Store / Play Store listing names (whatever was registered there
stays; we updated launcher label only)
- hash.boats domain (still the wallet site)
Also kept the '#ash Wallet' wordplay in the nav but updated to
'#ash Bags' so the # mark still serves as the H. Nav reads:
[# mark] #ash Bags
Website hero tagline now matches the App Store sub-title concept:
'A wallet for your coins. Open-source, non-custodial, multi-chain.
Privacy-leaning by default.'
108 files modified, ~674 string replacements.
68 lines
2.4 KiB
Dart
68 lines
2.4 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
import 'utils/utils.dart';
|
|
|
|
const configPath = 'tool/.secrets-config.json';
|
|
const outputPath = 'lib/.secrets.g.dart';
|
|
|
|
const evmChainsConfigPath = 'tool/.evm-secrets-config.json';
|
|
const evmChainsOutputPath = 'cw_evm/lib/.secrets.g.dart';
|
|
|
|
const bitcoinConfigPath = 'tool/.bitcoin-secrets-config.json';
|
|
const bitcoinOutputPath = 'cw_bitcoin/lib/.secrets.g.dart';
|
|
|
|
const nanoConfigPath = 'tool/.nano-secrets-config.json';
|
|
const nanoOutputPath = 'cw_nano/lib/.secrets.g.dart';
|
|
|
|
Future<void> main(List<String> args) async => importSecretsConfig();
|
|
|
|
Future<void> importSecretsConfig() async {
|
|
final outputFile = File(outputPath);
|
|
final input = json.decode(File(configPath).readAsStringSync()) as Map<String, dynamic>;
|
|
final output = input.keys.fold('', (String acc, String val) => acc + generateConst(val, input));
|
|
|
|
final evmChainsOutputFile = File(evmChainsOutputPath);
|
|
final evmChainsInput =
|
|
json.decode(File(evmChainsConfigPath).readAsStringSync()) as Map<String, dynamic>;
|
|
final evmChainsOutput = evmChainsInput.keys
|
|
.fold('', (String acc, String val) => acc + generateConst(val, evmChainsInput));
|
|
|
|
final nanoOutputFile = File(nanoOutputPath);
|
|
final nanoInput = json.decode(File(nanoConfigPath).readAsStringSync()) as Map<String, dynamic>;
|
|
final nanoOutput =
|
|
nanoInput.keys.fold('', (String acc, String val) => acc + generateConst(val, nanoInput));
|
|
|
|
// Hash Bags: upstream Cake declares bitcoinConfigPath/bitcoinOutputPath
|
|
// but never processes them, leaving cw_bitcoin/lib/.secrets.g.dart missing
|
|
// and the build broken on a fresh clone. Add it to the pipeline.
|
|
final bitcoinOutputFile = File(bitcoinOutputPath);
|
|
final bitcoinInput =
|
|
json.decode(File(bitcoinConfigPath).readAsStringSync()) as Map<String, dynamic>;
|
|
final bitcoinOutput =
|
|
bitcoinInput.keys.fold('', (String acc, String val) => acc + generateConst(val, bitcoinInput));
|
|
|
|
if (outputFile.existsSync()) {
|
|
await outputFile.delete();
|
|
}
|
|
|
|
await outputFile.writeAsString(output);
|
|
|
|
if (evmChainsOutputFile.existsSync()) {
|
|
await evmChainsOutputFile.delete();
|
|
}
|
|
|
|
await evmChainsOutputFile.writeAsString(evmChainsOutput);
|
|
|
|
if (nanoOutputFile.existsSync()) {
|
|
await nanoOutputFile.delete();
|
|
}
|
|
|
|
await nanoOutputFile.writeAsString(nanoOutput);
|
|
|
|
if (bitcoinOutputFile.existsSync()) {
|
|
await bitcoinOutputFile.delete();
|
|
}
|
|
|
|
await bitcoinOutputFile.writeAsString(bitcoinOutput);
|
|
}
|