diff --git a/NEW_TODO b/NEW_TODO new file mode 100644 index 0000000..b206852 --- /dev/null +++ b/NEW_TODO @@ -0,0 +1,2 @@ +- [ ] True using `gitHashes` argument instead of patching? + diff --git a/hosts/hyrule/default.nix b/hosts/hyrule/default.nix index c2c0461..1a1dafd 100755 --- a/hosts/hyrule/default.nix +++ b/hosts/hyrule/default.nix @@ -459,6 +459,8 @@ in { fish.enable = true; bash = { + completion.enable = true; + interactiveShellInit = '' if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] then diff --git a/hosts/imbored/default.nix b/hosts/imbored/default.nix index 0e0e268..c5df73c 100755 --- a/hosts/imbored/default.nix +++ b/hosts/imbored/default.nix @@ -9,7 +9,7 @@ sha256 = "19w63qccz78v0spx03911z98w1bvlxvd07hb0ma14a4vdzi4ninj"; }; in { - # TODO: + # TODO: # - add github:charmbracelet/soft-serve # - add forgejo @@ -42,7 +42,7 @@ in { networkmanager.enable = true; firewall.allowedTCPPorts = [ 22 # sshd - ] + ]; }; users = { @@ -80,5 +80,8 @@ in { ]; programs = { + bash = { + completion.enable = true; + }; }; } diff --git a/hosts/lolcathost/default.nix b/hosts/lolcathost/default.nix index d60e71f..6c3daa8 100755 --- a/hosts/lolcathost/default.nix +++ b/hosts/lolcathost/default.nix @@ -1,7 +1,6 @@ { pkgs, inputs, - lib, ... }: let home-manager = builtins.fetchTarball { @@ -16,6 +15,10 @@ in { ../modules/steam.nix ../modules/obsidian.nix + + ../modules/angryoxide.nix + ../modules/flipperzero.nix + ../modules/chameleonultragui.nix ]; programs.spicetify = let @@ -230,6 +233,8 @@ in { doggo tldr btop + eza + ripgrep # TODO: once upgraded past Nix-24.07 this line won't be necessary (I think) # helix will support nixd by default @@ -241,6 +246,7 @@ in { git-filter-repo brightnessctl acpi + upower vim powertop gcc @@ -270,6 +276,8 @@ in { # cause it isn't POSIX compliant, so instead Bash is my login and # will just exec fish (^-^) bash = { + completion.enable = true; + interactiveShellInit = '' if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] then diff --git a/hosts/modules/angryoxide.nix b/hosts/modules/angryoxide.nix new file mode 100644 index 0000000..ae4faa7 --- /dev/null +++ b/hosts/modules/angryoxide.nix @@ -0,0 +1,5 @@ +{pkgs, ...}: { + environment.systemPackages = with pkgs; [ + (callPackage ../packages/angryoxide {}) + ]; +} diff --git a/hosts/modules/chameleonultragui.nix b/hosts/modules/chameleonultragui.nix new file mode 100644 index 0000000..6999022 --- /dev/null +++ b/hosts/modules/chameleonultragui.nix @@ -0,0 +1,5 @@ +{pkgs, ...}: { + environment.systemPackages = with pkgs; [ + (callPackage ../packages/chameleonultragui {}) + ]; +} diff --git a/hosts/modules/flipperzero.nix b/hosts/modules/flipperzero.nix new file mode 100644 index 0000000..7c466ad --- /dev/null +++ b/hosts/modules/flipperzero.nix @@ -0,0 +1,6 @@ +{pkgs, ...}: { + environment.systemPackages = with pkgs; [ + # flipper zero desktop app + qflipper + ]; +} diff --git a/hosts/myputer/default.nix b/hosts/myputer/default.nix index 7e8c5ce..78ddafb 100755 --- a/hosts/myputer/default.nix +++ b/hosts/myputer/default.nix @@ -273,6 +273,8 @@ in { # cause it isn't POSIX compliant, so instead Bash is my login and # will just exec fish (^-^) bash = { + completion.enable = true; + interactiveShellInit = '' if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] then diff --git a/hosts/packages/README b/hosts/packages/README new file mode 100644 index 0000000..e6e892c --- /dev/null +++ b/hosts/packages/README @@ -0,0 +1,5 @@ +This directory (`hosts/packages`) contains custom package derivations, and differs +from `hosts/modules/` which contains importable modules for my nixdots. + +Often each package I write will have a corresponding module that simply +calls `pkgs.callPackage` to install the derivation to the system environment. diff --git a/hosts/packages/angryoxide/default.nix b/hosts/packages/angryoxide/default.nix new file mode 100644 index 0000000..8111339 --- /dev/null +++ b/hosts/packages/angryoxide/default.nix @@ -0,0 +1,84 @@ +{ + pkgs, + lib, + ... +}: let + # shared/global properties + angryoxide-owner = "Ragnt"; + angryoxide-pname = "AngryOxide"; + angryoxide-version = "0.8.32"; + angryoxide-meta = { + homepage = "https://github.com/${angryoxide-owner}/${angryoxide-pname}"; + license = lib.licenses.gpl3; + maintainers = [lib.maintainers.emileclarkb]; + }; + + # "Vendored LibWifi used in AngryOxide" + angryoxide-libwifi-src = pkgs.fetchFromGitHub { + owner = angryoxide-owner; + repo = "libwifi"; + # this specific revision is requested (by rev "e1352..." of AngryOxide) + rev = "71268e1898ad88b8b5d709e186836db417b33e81"; + sha256 = "0af9y7bvr3rban6bslsd9smrvibfp1b7d4nfw7wkdxfp49kx6zyr"; + }; + + # Using `mkDerivation` not `buildRustPackage` because + # AngryOxide uses Git submodules for a patched version of "LibWifi", + # and these aren't moved into `/build/source/libs/` for the `buildPhase`. + # Simply fix right? Well no I can't override `buildPhase`... + angryoxide-src = pkgs.stdenv.mkDerivation rec { + pname = "${angryoxide-pname}-source"; + version = angryoxide-version; + + src = pkgs.fetchFromGitHub { + owner = "Ragnt"; + repo = pname; + rev = "e1352c8aad370efa8db69d175686e4353c6002bd"; + sha256 = "07nhvy7kp7z4y0fdslv56pw7kz6idcpma42f4hyilrmazjbbjmja"; + # clone git submodules (needed for the rust workspace libs) + fetchSubmodules = true; + }; + + buildPhase = '' + # ensure $out and /libwifi paths exist + mkdir -p $out/libs/libwifi + # copy only the necessary source files + cp Cargo.toml Cargo.lock $out/ + cp -r $src/.cargo $src/assets $src/completions $src/libs $src/src $out/ + # ensure libwifi submodule is copied to the build environment + cp -r ${angryoxide-libwifi-src}/. $out/libs/libwifi/ + ''; + + installPhase = let + # SOURCE + completionScriptBash = "completions/bash_angry_oxide_completions"; + # DESTINATION + completionDirBash = "$out/share/bash-completion/completions"; + in '' + # mkdir -p $out/bin + #mkdir $out/bin + #cp target/release/angryoxide $out/bin + + # add bash completions + #mkdir -p ${completionDirBash} + #cp ${completionScriptBash} ${completionDirBash}/angryoxide + ''; + + meta = + { + description = "AngryOxide's source files isolated by (@emileclarkb) into a separate Nix derivation."; + } + // angryoxide-meta; + }; +in + pkgs.rustPackages.rustPlatform.buildRustPackage { + pname = angryoxide-pname; + version = angryoxide-version; + src = angryoxide-src; + cargoHash = "sha256-Dxo1iLxl+wn2qAZh3+bf2n00MPE2LlG5boB6iJC/CDA="; + meta = + { + description = "802.11 Attack Tool"; + } + // angryoxide-meta; + } diff --git a/hosts/packages/chameleonultragui/default.nix b/hosts/packages/chameleonultragui/default.nix new file mode 100644 index 0000000..0aa10ec --- /dev/null +++ b/hosts/packages/chameleonultragui/default.nix @@ -0,0 +1,483 @@ +{ + pkgs, + lib, + makeDesktopItem, + copyDesktopItems, + ... +}: +# ChameleonUltraGUI requires flutter sdk >3.0.0 +pkgs.flutter324.buildFlutterApplication +rec { + pname = "ChameleonUltraGUI"; + version = "1.1.2"; + + src = pkgs.fetchFromGitHub { + owner = "GameTec-live"; + repo = "ChameleonUltraGUI"; + sha256 = "1mb6wkqk6vaamrhflfhsgp5gvqiw2qkvmy7j65abcx7sn5990i27"; + rev = "11424abaccb4a010fcbeab9799ae8f675d8afe99"; + }; + + desktopItems = [ + (makeDesktopItem { + name = pname; + desktopName = pname; + genericName = pname; + + icon = "chameleonultragui"; + comment = meta.description; + + exec = "chameleonultragui %u"; + type = "Application"; + terminal = false; + + categories = ["Utility"]; + keywords = [ + "Flutter" + "share" + "files" + "chameleon" + "chameleonultra" + "chameleonlite" + ]; + }) + ]; + + # path to application within fetched sources + sourceRoot = "source/chameleonultragui"; + + buildInputs = [ + pkgs.imagemagick # creating mipmaps for share/icons + pkgs.yj # converting pubspec.lock yaml->json + ]; + + nativeBuildInputs = [ + copyDesktopItems + ]; + + buildArguments = ["--release"]; + + # source files compile with Flutter >3.29.0 but this + # derivation uses 3.24.0 (so we patch for compatability) + postPatch = let + argbPatch = '' + --- general.dart.old 2025-05-11 15:59:51.812132078 +1000 + +++ general.dart 2025-05-11 15:58:14.755856407 +1000 + @@ -211,7 +211,7 @@ + } + + String colorToHex(Color color) { + - return '#\''${color.toARGB32().toRadixString(16).padLeft(8, '0').substring(2)}'; + + return '#\''${color.value.toRadixString(16).padLeft(8, '0').substring(2)}'; + } + + Color hexToColor(String hex) { + ''; + in '' + # patch source files using Color.toARGB32 method (not defined in Flutter 3.24) + argbPatch="${argbPatch}" + patch lib/helpers/general.dart <(echo "$argbPatch") + ''; + + postInstall = '' + # create mipmaps of desktop logo + logoOriginal="assets/logo-color-desktop.png" + for i in 16 32 64 128 256 512; do + res="$i"x"$i" + d="$out"/share/icons/hicolor/"$res"/apps + mkdir -p $d + ${pkgs.imagemagick}/bin/magick $logoOriginal -resize $res $d/chameleonultragui.png + done + ''; + + # Nix doesn't natively have a fromYAML function (so I made this instead) + pubspecLock = let + appRoot = "${src}/chameleonultragui"; + + # when generating patch files use -u flag and then + # make sure to escape all " characters for Nix string + pubspecLockPatch = '' + --- pubspec.lock.bak2025-05-10 15:42:44.287730979 +1000 + +++ pubspec.lock2025-05-10 15:41:23.778480048 +1000 + @@ -5,18 +5,23 @@ + dependency: transitive + description: + name: _fe_analyzer_shared + - sha256: dc27559385e905ad30838356c5f5d574014ba39872d732111cd07ac0beff4c57 + + sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 + url: \"https://pub.dev\" + source: hosted + - version: \"80.0.0\" + + version: \"72.0.0\" + + _macros: + + dependency: transitive + + description: dart + + source: sdk + + version: \"0.3.2\" + analyzer: + dependency: transitive + description: + name: analyzer + - sha256: \"192d1c5b944e7e53b24b5586db760db934b177d4147c42fbca8c8c5f1eb8d11e\" + + sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 + url: \"https://pub.dev\" + source: hosted + - version: \"7.3.0\" + + version: \"6.7.0\" + archive: + dependency: \"direct main\" + description: + @@ -37,26 +42,26 @@ + dependency: \"direct main\" + description: + name: async + - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + + sha256: \"947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c\" + url: \"https://pub.dev\" + source: hosted + - version: \"2.12.0\" + + version: \"2.11.0\" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + - sha256: \"8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea\" + + sha256: \"6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66\" + url: \"https://pub.dev\" + source: hosted + - version: \"2.1.2\" + + version: \"2.1.1\" + characters: + dependency: transitive + description: + name: characters + - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + + sha256: \"04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.4.0\" + + version: \"1.3.0\" + checked_yaml: + dependency: transitive + description: + @@ -77,18 +82,18 @@ + dependency: transitive + description: + name: clock + - sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: \"https://pub.dev\" + source: hosted + - version: \"1.1.2\" + + version: \"1.1.1\" + collection: + dependency: \"direct main\" + description: + name: collection + - sha256: \"2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76\" + + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: \"https://pub.dev\" + source: hosted + - version: \"1.19.1\" + + version: \"1.18.0\" + convert: + dependency: \"direct main\" + description: + @@ -157,10 +162,10 @@ + dependency: transitive + description: + name: fake_async + - sha256: \"6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc\" + + sha256: \"511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.3.2\" + + version: \"1.3.1\" + ffi: + dependency: \"direct main\" + description: + @@ -196,11 +201,10 @@ + file_saver: + dependency: \"direct main\" + description: + - path: \".\" + - ref: fix-windows + - resolved-ref: \"3038d74d5560dcca528423fffd745abf31eb88ae\" + - url: \"https://github.com/Foxushka/file_saver.git\" + - source: git + + name: file_saver + + sha256: \"017a127de686af2d2fbbd64afea97052d95f2a0f87d19d25b87e097407bf9c1e\" + + url: \"https://pub.dev\" + + source: hosted + version: \"0.2.14\" + fixnum: + dependency: transitive + @@ -234,11 +238,10 @@ + flutter_libserialport: + dependency: \"direct main\" + description: + - path: \".\" + - ref: main + - resolved-ref: \"6740aae075505a220a98492910b090824efc7910\" + - url: \"https://github.com/NeariX67/flutter_libserialport.git\" + - source: git + + name: flutter_libserialport + + sha256: d193b5ac819db6540d20cc8d20d9f5ec9e3396edb4d2c4a23c97863fa9132336 + + url: \"https://pub.dev\" + + source: hosted + version: \"0.5.0\" + flutter_lints: + dependency: \"direct dev\" + @@ -347,18 +350,18 @@ + dependency: transitive + description: + name: leak_tracker + - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + + sha256: \"3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05\" + url: \"https://pub.dev\" + source: hosted + - version: \"10.0.8\" + + version: \"10.0.5\" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + + sha256: \"932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806\" + url: \"https://pub.dev\" + source: hosted + - version: \"3.0.9\" + + version: \"3.0.5\" + leak_tracker_testing: + dependency: transitive + description: + @@ -399,14 +402,22 @@ + url: \"https://pub.dev\" + source: hosted + version: \"1.3.0\" + + macros: + + dependency: transitive + + description: + + name: macros + + sha256: \"0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536\" + + url: \"https://pub.dev\" + + source: hosted + + version: \"0.1.2-main.4\" + matcher: + dependency: transitive + description: + name: matcher + - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: \"https://pub.dev\" + source: hosted + - version: \"0.12.17\" + + version: \"0.12.16+1\" + material_color_utilities: + dependency: transitive + description: + @@ -419,10 +430,10 @@ + dependency: transitive + description: + name: meta + - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + url: \"https://pub.dev\" + source: hosted + - version: \"1.16.0\" + + version: \"1.15.0\" + mobile_scanner: + dependency: \"direct main\" + description: + @@ -467,10 +478,10 @@ + dependency: \"direct main\" + description: + name: path + - sha256: \"75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5\" + + sha256: \"087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.9.1\" + + version: \"1.9.0\" + path_provider: + dependency: transitive + description: + @@ -723,15 +734,15 @@ + dependency: transitive + description: flutter + source: sdk + - version: \"0.0.0\" + + version: \"0.0.99\" + source_span: + dependency: transitive + description: + name: source_span + - sha256: \"254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c\" + + sha256: \"53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.10.1\" + + version: \"1.10.0\" + sprintf: + dependency: transitive + description: + @@ -744,42 +755,42 @@ + dependency: transitive + description: + name: stack_trace + - sha256: \"8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1\" + + sha256: \"73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.12.1\" + + version: \"1.11.1\" + stream_channel: + dependency: transitive + description: + name: stream_channel + - sha256: \"969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d\" + + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: \"https://pub.dev\" + source: hosted + - version: \"2.1.4\" + + version: \"2.1.2\" + string_scanner: + dependency: transitive + description: + name: string_scanner + - sha256: \"921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43\" + + sha256: \"556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.4.1\" + + version: \"1.2.0\" + term_glyph: + dependency: transitive + description: + name: term_glyph + - sha256: \"7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e\" + + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: \"https://pub.dev\" + source: hosted + - version: \"1.2.2\" + + version: \"1.2.1\" + test_api: + dependency: transitive + description: + name: test_api + - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + + sha256: \"5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb\" + url: \"https://pub.dev\" + source: hosted + - version: \"0.7.4\" + + version: \"0.7.2\" + typed_data: + dependency: transitive + description: + @@ -855,12 +866,11 @@ + usb_serial: + dependency: \"direct main\" + description: + - path: \".\" + - ref: fix-usbserial + - resolved-ref: \"9fcbacc92bec19ea02d33a40d9f39e45d19cf637\" + - url: \"https://github.com/Foxushka/usbserial.git\" + - source: git + - version: \"0.5.1\" + + name: usb_serial + + sha256: a605a600e34e7f28d4e80851ca3999ef747e42e406138887b8a88b8c382a8b07 + + url: \"https://pub.dev\" + + source: hosted + + version: \"0.5.2\" + uuid: + dependency: \"direct main\" + description: + @@ -881,10 +891,10 @@ + dependency: transitive + description: + name: vm_service + - sha256: \"0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14\" + + sha256: \"5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d\" + url: \"https://pub.dev\" + source: hosted + - version: \"14.3.1\" + + version: \"14.2.5\" + wakelock_plus: + dependency: \"direct main\" + description: + @@ -958,5 +968,5 @@ + source: hosted + version: \"2.2.1\" + sdks: + - dart: \">=3.7.0-0 <4.0.0\" + + dart: \">=3.5.0 <4.0.0\" + flutter: \">=3.24.0\" + ''; + in + builtins.fromJSON + ( + builtins.readFile (pkgs.runCommand "${pname}-buildenv" { + inputs = [ + # DEBUG (both lines commented) + #pkgs.flutter324 # ChameleonUltraGUI requires sdk >3.0.0 + #pkgs.yj + ]; + } '' + # copy source files to a temporary path to rebuild the lockfile + buildPath=$(mktemp -d) + cp -r "${appRoot}/." "$buildPath/" + + outPubspecLock="$buildPath/pubspec.lock" + # MUST define variables to use multiline Nix string in bash scripting + pubspecLockPatch="${pubspecLockPatch}" + + # apply the pubspec.yaml patch and regenerate lock file + # (create a temporary home directory for flutter to play in) + #(cd $buildPath && chmod -R +w . \ + # && patch ./pubspec.yaml <(echo "$pubspecYamlPatch") \ + # && export HOME=$(mktemp -d) \ + # && flutter --disable-analytics \ + # && flutter config --no-cli-animations \ + # && ${pkgs.flutter}/bin/flutter pub get) + + # patch the lockfile + chmod +w $outPubspecLock + patch $outPubspecLock <(echo "$pubspecLockPatch") + + # convert new lockfile to json and return + ${pkgs.yj}/bin/yj < "$buildPath/pubspec.lock" > $out + '') + ); + + # TODO: try this instead of patching + # gitHashes = { + # dartssh2 = "sha256-2pypKwurziwGLZYuGaxlS2lzN3UvJp3bRTvvYYxEqRI="; + # hotkey_manager_linux = "sha256-aO0h94YZvgV/ggVupNw8GjyZsnXrq3qTHRDtuhNv3oI="; + # system_info2 = "sha256-fly7E2vG+bQ/+QGzXk+DYba73RZccltdW2LpZGDKX60="; + # tray_menu = "sha256-riiAiBEms+9ARog8i+MR1fto1Yqx+gwbBWyNbNq6VTM="; + # window_size = "sha256-71PqQzf+qY23hTJvcm0Oye8tng3Asr42E2vfF1nBmVA="; + # xterm = "sha256-h8vIonTPUVnNqZPk/A4ZV7EYCMyM0rrErL9ZOMe4ZBE="; + # }; + + meta = with lib; { + description = "A GUI for the Chameleon Ultra written in Flutter for crossplatform"; + homepage = "https://github.com/GameTec-live/ChameleonUltraGUI"; + license = licenses.gpl3; + maintainers = [maintainers.emileclarkb]; + platforms = platforms.linux; + }; +} +# find /nix/store -type f -print 2>/dev/null | rg "share/applications" +# NOTE: this command will show that there the desktop file was generated +# at some point. just not anymore?? +# NOTE2: read over ~/workshop/packaging/nixpkgs-24.11/pkgs/build-support/make-desktopitem/default.nix +# and see exactly how makeDesktopItem is defined! +# perhaps the item is added to the build environment but not the output? +# NOTE: see how it builds derivations for the desktop and makes the desktop items? +# (every time I build it does actually make the desktop items) +# HOWEVER I just dont think they're being copied over... +# /nix/store/4hqs6dkxqngi6wi95dmizbvmgm7l5cf0-ChameleonUltraGUI.desktop/share/applications/ChameleonUltraGUI.desktop +# /nix/store/869gy031lf243k0x9ir7gmrsfksipca1-ChameleonUltraGUI.desktop/share/applications/ChameleonUltraGUI.desktop +# /nix/store/adqq7slakkhpjc4hln19jd6p22cc9ci6-ChameleonUltraGUI.desktop/share/applications/ChameleonUltraGUI.desktop +# /nix/store/x9fa3na0is70h4ya4dbfsivk4m3mab57-ChameleonUltraGUI.desktop/share/applications/ChameleonUltraGUI.desktop + diff --git a/hosts/packages/chameleonultragui/default.nix.bak1 b/hosts/packages/chameleonultragui/default.nix.bak1 new file mode 100644 index 0000000..158877a --- /dev/null +++ b/hosts/packages/chameleonultragui/default.nix.bak1 @@ -0,0 +1,474 @@ +{ + pkgs, + lib, + ... +}: +# ChameleonUltraGUI requires flutter sdk >3.0.0 +pkgs.flutter324.buildFlutterApplication +(self: { + pname = "ChameleonUltraGUI"; + version = "1.1.2"; + + src = pkgs.fetchFromGitHub { + owner = "GameTec-live"; + repo = "ChameleonUltraGUI"; + sha256 = "1mb6wkqk6vaamrhflfhsgp5gvqiw2qkvmy7j65abcx7sn5990i27"; + rev = "11424abaccb4a010fcbeab9799ae8f675d8afe99"; + }; + + desktopItems = [ + (pkgs.makeDesktopItem { + name = self.pname; + desktopName = "Chameleon Ultra GUI"; + icon = self.pname; + comment = self.meta.description; + + exec = "chameleonultragui"; + terminal = false; + + categories = [ + "Utility" + ]; + }) + ]; + + # path to application within fetched sources + sourceRoot = "source/chameleonultragui"; + + buildInputs = [ + pkgs.imagemagick # creating mipmaps for share/icons + pkgs.yj # converting pubspec.lock yaml->json + ]; + + buildArguments = ["--release"]; + + # source files compile with Flutter >3.29.0 but this + # derivation uses 3.24.0 (so we patch for compatability) + postPatch = let + argbPatch = '' + --- general.dart.old 2025-05-11 15:59:51.812132078 +1000 + +++ general.dart 2025-05-11 15:58:14.755856407 +1000 + @@ -211,7 +211,7 @@ + } + + String colorToHex(Color color) { + - return '#\''${color.toARGB32().toRadixString(16).padLeft(8, '0').substring(2)}'; + + return '#\''${color.value.toRadixString(16).padLeft(8, '0').substring(2)}'; + } + + Color hexToColor(String hex) { + ''; + in '' + # patch source files using Color.toARGB32 method (not defined in Flutter 3.24) + argbPatch="${argbPatch}" + patch lib/helpers/general.dart <(echo "$argbPatch") + ''; + + # installPhase = '' + # runHook preInstall + + # # create mipmaps of desktop logo + # logoOriginal="assets/logo-color-desktop.png" + # for i in 16 32 64 128 256 512; do + # res="$i"x"$i" + # logoOut="$out"/share/icons/hicolor/"$res"/apps + # mkdir -p $logoOut + # ${pkgs.imagemagick}/bin/magick $logoOriginal -resize $res $logoOut/${pname}.png + # done + + # runHook postInstall + # ''; + + # Nix doesn't natively have a fromYAML function (so I made this instead) + pubspecLock = let + appRoot = "${self.src}/chameleonultragui"; + + # when generating patch files use -u flag and then + # make sure to escape all " characters for Nix string + pubspecLockPatch = '' + --- pubspec.lock.bak2025-05-10 15:42:44.287730979 +1000 + +++ pubspec.lock2025-05-10 15:41:23.778480048 +1000 + @@ -5,18 +5,23 @@ + dependency: transitive + description: + name: _fe_analyzer_shared + - sha256: dc27559385e905ad30838356c5f5d574014ba39872d732111cd07ac0beff4c57 + + sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 + url: \"https://pub.dev\" + source: hosted + - version: \"80.0.0\" + + version: \"72.0.0\" + + _macros: + + dependency: transitive + + description: dart + + source: sdk + + version: \"0.3.2\" + analyzer: + dependency: transitive + description: + name: analyzer + - sha256: \"192d1c5b944e7e53b24b5586db760db934b177d4147c42fbca8c8c5f1eb8d11e\" + + sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 + url: \"https://pub.dev\" + source: hosted + - version: \"7.3.0\" + + version: \"6.7.0\" + archive: + dependency: \"direct main\" + description: + @@ -37,26 +42,26 @@ + dependency: \"direct main\" + description: + name: async + - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + + sha256: \"947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c\" + url: \"https://pub.dev\" + source: hosted + - version: \"2.12.0\" + + version: \"2.11.0\" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + - sha256: \"8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea\" + + sha256: \"6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66\" + url: \"https://pub.dev\" + source: hosted + - version: \"2.1.2\" + + version: \"2.1.1\" + characters: + dependency: transitive + description: + name: characters + - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + + sha256: \"04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.4.0\" + + version: \"1.3.0\" + checked_yaml: + dependency: transitive + description: + @@ -77,18 +82,18 @@ + dependency: transitive + description: + name: clock + - sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: \"https://pub.dev\" + source: hosted + - version: \"1.1.2\" + + version: \"1.1.1\" + collection: + dependency: \"direct main\" + description: + name: collection + - sha256: \"2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76\" + + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: \"https://pub.dev\" + source: hosted + - version: \"1.19.1\" + + version: \"1.18.0\" + convert: + dependency: \"direct main\" + description: + @@ -157,10 +162,10 @@ + dependency: transitive + description: + name: fake_async + - sha256: \"6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc\" + + sha256: \"511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.3.2\" + + version: \"1.3.1\" + ffi: + dependency: \"direct main\" + description: + @@ -196,11 +201,10 @@ + file_saver: + dependency: \"direct main\" + description: + - path: \".\" + - ref: fix-windows + - resolved-ref: \"3038d74d5560dcca528423fffd745abf31eb88ae\" + - url: \"https://github.com/Foxushka/file_saver.git\" + - source: git + + name: file_saver + + sha256: \"017a127de686af2d2fbbd64afea97052d95f2a0f87d19d25b87e097407bf9c1e\" + + url: \"https://pub.dev\" + + source: hosted + version: \"0.2.14\" + fixnum: + dependency: transitive + @@ -234,11 +238,10 @@ + flutter_libserialport: + dependency: \"direct main\" + description: + - path: \".\" + - ref: main + - resolved-ref: \"6740aae075505a220a98492910b090824efc7910\" + - url: \"https://github.com/NeariX67/flutter_libserialport.git\" + - source: git + + name: flutter_libserialport + + sha256: d193b5ac819db6540d20cc8d20d9f5ec9e3396edb4d2c4a23c97863fa9132336 + + url: \"https://pub.dev\" + + source: hosted + version: \"0.5.0\" + flutter_lints: + dependency: \"direct dev\" + @@ -347,18 +350,18 @@ + dependency: transitive + description: + name: leak_tracker + - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + + sha256: \"3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05\" + url: \"https://pub.dev\" + source: hosted + - version: \"10.0.8\" + + version: \"10.0.5\" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + + sha256: \"932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806\" + url: \"https://pub.dev\" + source: hosted + - version: \"3.0.9\" + + version: \"3.0.5\" + leak_tracker_testing: + dependency: transitive + description: + @@ -399,14 +402,22 @@ + url: \"https://pub.dev\" + source: hosted + version: \"1.3.0\" + + macros: + + dependency: transitive + + description: + + name: macros + + sha256: \"0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536\" + + url: \"https://pub.dev\" + + source: hosted + + version: \"0.1.2-main.4\" + matcher: + dependency: transitive + description: + name: matcher + - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: \"https://pub.dev\" + source: hosted + - version: \"0.12.17\" + + version: \"0.12.16+1\" + material_color_utilities: + dependency: transitive + description: + @@ -419,10 +430,10 @@ + dependency: transitive + description: + name: meta + - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + url: \"https://pub.dev\" + source: hosted + - version: \"1.16.0\" + + version: \"1.15.0\" + mobile_scanner: + dependency: \"direct main\" + description: + @@ -467,10 +478,10 @@ + dependency: \"direct main\" + description: + name: path + - sha256: \"75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5\" + + sha256: \"087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.9.1\" + + version: \"1.9.0\" + path_provider: + dependency: transitive + description: + @@ -723,15 +734,15 @@ + dependency: transitive + description: flutter + source: sdk + - version: \"0.0.0\" + + version: \"0.0.99\" + source_span: + dependency: transitive + description: + name: source_span + - sha256: \"254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c\" + + sha256: \"53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.10.1\" + + version: \"1.10.0\" + sprintf: + dependency: transitive + description: + @@ -744,42 +755,42 @@ + dependency: transitive + description: + name: stack_trace + - sha256: \"8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1\" + + sha256: \"73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.12.1\" + + version: \"1.11.1\" + stream_channel: + dependency: transitive + description: + name: stream_channel + - sha256: \"969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d\" + + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: \"https://pub.dev\" + source: hosted + - version: \"2.1.4\" + + version: \"2.1.2\" + string_scanner: + dependency: transitive + description: + name: string_scanner + - sha256: \"921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43\" + + sha256: \"556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde\" + url: \"https://pub.dev\" + source: hosted + - version: \"1.4.1\" + + version: \"1.2.0\" + term_glyph: + dependency: transitive + description: + name: term_glyph + - sha256: \"7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e\" + + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: \"https://pub.dev\" + source: hosted + - version: \"1.2.2\" + + version: \"1.2.1\" + test_api: + dependency: transitive + description: + name: test_api + - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + + sha256: \"5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb\" + url: \"https://pub.dev\" + source: hosted + - version: \"0.7.4\" + + version: \"0.7.2\" + typed_data: + dependency: transitive + description: + @@ -855,12 +866,11 @@ + usb_serial: + dependency: \"direct main\" + description: + - path: \".\" + - ref: fix-usbserial + - resolved-ref: \"9fcbacc92bec19ea02d33a40d9f39e45d19cf637\" + - url: \"https://github.com/Foxushka/usbserial.git\" + - source: git + - version: \"0.5.1\" + + name: usb_serial + + sha256: a605a600e34e7f28d4e80851ca3999ef747e42e406138887b8a88b8c382a8b07 + + url: \"https://pub.dev\" + + source: hosted + + version: \"0.5.2\" + uuid: + dependency: \"direct main\" + description: + @@ -881,10 +891,10 @@ + dependency: transitive + description: + name: vm_service + - sha256: \"0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14\" + + sha256: \"5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d\" + url: \"https://pub.dev\" + source: hosted + - version: \"14.3.1\" + + version: \"14.2.5\" + wakelock_plus: + dependency: \"direct main\" + description: + @@ -958,5 +968,5 @@ + source: hosted + version: \"2.2.1\" + sdks: + - dart: \">=3.7.0-0 <4.0.0\" + + dart: \">=3.5.0 <4.0.0\" + flutter: \">=3.24.0\" + ''; + in + builtins.fromJSON + ( + builtins.readFile (pkgs.runCommand "${self.pname}-buildenv" { + inputs = [ + # DEBUG (both lines commented) + #pkgs.flutter324 # ChameleonUltraGUI requires sdk >3.0.0 + #pkgs.yj + ]; + } '' + # copy source files to a temporary path to rebuild the lockfile + buildPath=$(mktemp -d) + cp -r "${appRoot}/." "$buildPath/" + + outPubspecLock="$buildPath/pubspec.lock" + # MUST define variables to use multiline Nix string in bash scripting + pubspecLockPatch="${pubspecLockPatch}" + + # apply the pubspec.yaml patch and regenerate lock file + # (create a temporary home directory for flutter to play in) + #(cd $buildPath && chmod -R +w . \ + # && patch ./pubspec.yaml <(echo "$pubspecYamlPatch") \ + # && export HOME=$(mktemp -d) \ + # && flutter --disable-analytics \ + # && flutter config --no-cli-animations \ + # && ${pkgs.flutter}/bin/flutter pub get) + + # patch the lockfile + chmod +w $outPubspecLock + patch $outPubspecLock <(echo "$pubspecLockPatch") + + # convert new lockfile to json and return + ${pkgs.yj}/bin/yj < "$buildPath/pubspec.lock" > $out + '') + ); + + # TODO: try this instead of patching + # gitHashes = { + # dartssh2 = "sha256-2pypKwurziwGLZYuGaxlS2lzN3UvJp3bRTvvYYxEqRI="; + # hotkey_manager_linux = "sha256-aO0h94YZvgV/ggVupNw8GjyZsnXrq3qTHRDtuhNv3oI="; + # system_info2 = "sha256-fly7E2vG+bQ/+QGzXk+DYba73RZccltdW2LpZGDKX60="; + # tray_menu = "sha256-riiAiBEms+9ARog8i+MR1fto1Yqx+gwbBWyNbNq6VTM="; + # window_size = "sha256-71PqQzf+qY23hTJvcm0Oye8tng3Asr42E2vfF1nBmVA="; + # xterm = "sha256-h8vIonTPUVnNqZPk/A4ZV7EYCMyM0rrErL9ZOMe4ZBE="; + # }; + + meta = with lib; { + description = "A GUI for the Chameleon Ultra written in Flutter for crossplatform"; + homepage = "https://github.com/GameTec-live/ChameleonUltraGUI"; + license = licenses.gpl3; + maintainers = [maintainers.emileclarkb]; + platforms = platforms.linux; + }; +}) +.overrideAttrs ( + previousAttrs: { + installPhase = + previousAttrs.installPhase + + '' + # create mipmaps of desktop logo + logoOriginal="assets/logo-color-desktop.png" + for i in 16 32 64 128 256 512; do + res="$i"x"$i" + logoOut="$out"/share/icons/hicolor/"$res"/apps + mkdir -p $logoOut + ${pkgs.imagemagick}/bin/magick $logoOriginal -resize $res $logoOut/${previousAttrs.pname}.png + done + ''; + } +)