{ username ? throw "username argument is required", }: { lib, config, pkgs, ... }: let hmConfig = config.home-manager.users.${username}; in { nixpkgs.overlays = [ (final: prev: { qalculate-gtk = prev.qalculate-gtk.overrideAttrs (oldAttrs: { patches = oldAttrs.patches or [ ] ++ [ ./skip-save-prefs.patch ]; }); }) ]; environment.persistence."/cache".users.${username}.files = [ "${hmConfig.xdg.relativeConfigHome}/qalculate/qalculate-gtk.history" ]; home-manager.users.${username} = { home.packages = with pkgs; [ qalculate-gtk ]; xdg.configFile."qalculate/qalculate-gtk.cfg".source = (pkgs.formats.ini { }).generate "qalculate-gtk.cfg" { General = { allow_multiple_instances = 1; width = 500; save_history_separately = 1; auto_update_exchange_rates = 1; local_currency_conversion = 1; use_binary_prefixes = 1; persistent_keypad = 1; copy_ascii = 1; copy_ascii_without_units = 1; }; Mode = { calculate_as_you_type = 1; excessive_parenthesis = 1; }; }; wayland.windowManager.hyprland.settings = { bind = [ ", XF86Calculator, exec, ${lib.meta.getExe pkgs.qalculate-gtk}" ]; windowrulev2 = [ "float, class:(qalculate-gtk)" ]; }; }; }