Unverified Commit c0a0fb06 authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

crossmacro: init at 0.9.6 (#481216)

parents 1253ffb0 d5b6a136
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1421,6 +1421,12 @@
      { fingerprint = "DF68 C500 4024 23CC F9C5  E6CA 3D17 C832 4696 FE70"; }
    ];
  };
  alper-han = {
    email = "contact@zynix.net";
    github = "alper-han";
    githubId = 89567766;
    name = "Zynix";
  };
  alternateved = {
    email = "alternateved@pm.me";
    github = "alternateved";
+1 −0
Original line number Diff line number Diff line
@@ -558,6 +558,7 @@
  ./services/desktops/blueman.nix
  ./services/desktops/bonsaid.nix
  ./services/desktops/cpupower-gui.nix
  ./services/desktops/crossmacro.nix
  ./services/desktops/dleyna.nix
  ./services/desktops/dunst.nix
  ./services/desktops/espanso.nix
+119 −0
Original line number Diff line number Diff line
{
  config,
  lib,
  pkgs,
  ...
}:

let
  cfg = config.services.crossmacro;
in
{
  options.services.crossmacro = {
    enable = lib.mkEnableOption "CrossMacro, a cross-platform mouse and keyboard macro application";

    package = lib.mkPackageOption pkgs "crossmacro" { };

    daemonPackage = lib.mkPackageOption pkgs "crossmacro-daemon" { };

    users = lib.mkOption {
      type = lib.types.listOf lib.types.str;
      default = [ ];
      example = [
        "alice"
        "bob"
      ];
      description = "List of users granted permission to use CrossMacro.";
    };
  };

  config = lib.mkIf cfg.enable {
    assertions = [
      {
        assertion = cfg.users != [ ];
        message = "CrossMacro: You must specify at least one user. Set `services.crossmacro.users`.";
      }
    ];

    environment.systemPackages = [ cfg.package ];

    hardware.uinput.enable = true;

    services.udev.extraRules = ''
      KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"
      ACTION=="add|change", KERNEL=="event*", ATTRS{name}=="CrossMacro Virtual Input Device", ENV{LIBINPUT_ATTR_POINTER_ACCEL}="0"
    '';

    environment.etc."polkit-1/actions/org.crossmacro.policy".source =
      "${cfg.daemonPackage}/share/polkit-1/actions/org.crossmacro.policy";

    environment.etc."polkit-1/rules.d/50-crossmacro.rules".source =
      "${cfg.daemonPackage}/share/polkit-1/rules.d/50-crossmacro.rules";

    users.groups.crossmacro = { };

    users.users =
      lib.listToAttrs (
        map (user: {
          name = user;
          value = {
            extraGroups = [ "crossmacro" ];
          };
        }) cfg.users
      )
      // {
        crossmacro = {
          isSystemUser = true;
          group = "input";
          extraGroups = [
            "crossmacro"
            "uinput"
          ];
          description = "CrossMacro Input Daemon User";
        };
      };

    systemd.services.crossmacro = {
      description = "CrossMacro Input Daemon Service";
      documentation = [ "https://github.com/alper-han/CrossMacro" ];

      wantedBy = [ "multi-user.target" ];
      after = [
        "network.target"
        "dbus.service"
        "polkit.service"
      ];
      wants = [
        "dbus.service"
        "polkit.service"
      ];

      path = [ pkgs.polkit ];

      serviceConfig = {
        Type = "notify";
        User = "crossmacro";
        Group = "input";
        ExecStart = lib.getExe cfg.daemonPackage;
        Restart = "always";
        RestartSec = 5;
        RuntimeDirectory = "crossmacro";
        RuntimeDirectoryMode = "0755";
        CapabilityBoundingSet = [
          "CAP_SYS_ADMIN"
          "CAP_SETUID"
          "CAP_SETGID"
          "CAP_CHOWN"
          "CAP_DAC_READ_SEARCH"
        ];
        AmbientCapabilities = [
          "CAP_SYS_ADMIN"
          "CAP_CHOWN"
          "CAP_DAC_READ_SEARCH"
        ];
      };
    };
  };

  meta.maintainers = with lib.maintainers; [ alper-han ];
}
+218 −0
Original line number Diff line number Diff line
[
  {
    "pname": "Avalonia",
    "version": "11.3.11",
    "hash": "sha256-FSMuXVA5q5L5evwos5bIsuT81suO8FbCjEF3OvAL9p0="
  }
,
  {
    "pname": "Avalonia.Angle.Windows.Natives",
    "version": "2.1.25547.20250602",
    "hash": "sha256-LE/lENAHptmz6t3T/AoJwnhpda+xs7PqriNGzdcfg8M="
  }
,
  {
    "pname": "Avalonia.BuildServices",
    "version": "11.3.2",
    "hash": "sha256-6wx06tjSKWQOlX2czdp6Wh0nuwVapx5qf/s8Qj5we40="
  }
,
  {
    "pname": "Avalonia.Controls.ColorPicker",
    "version": "11.3.11",
    "hash": "sha256-Ki6O9HYbseQPV3DsvwmJ+ERimi/WmvzelNJDKP6loo0="
  }
,
  {
    "pname": "Avalonia.Desktop",
    "version": "11.3.11",
    "hash": "sha256-oFivO8/0rir4BwQsTeWs3bSnb7RmldwxYmI77j5pt8k="
  }
,
  {
    "pname": "Avalonia.Diagnostics",
    "version": "11.3.11",
    "hash": "sha256-p38+O0VDqZ8u5VOzImP21/U5wyP1BUp2UrLLc9HSfwE="
  }
,
  {
    "pname": "Avalonia.Fonts.Inter",
    "version": "11.3.11",
    "hash": "sha256-S0DWwcZHulVUIckiv2HM1Vbqno64c/Xt+mPhZp1tfsA="
  }
,
  {
    "pname": "Avalonia.FreeDesktop",
    "version": "11.3.11",
    "hash": "sha256-UE2/w9cw3YDzsw3HuhI2sTPy8reH9C71ufmHOpzvlSQ="
  }
,
  {
    "pname": "Avalonia.Native",
    "version": "11.3.11",
    "hash": "sha256-vw67lp/oOt+2lqdJ5PK2FY93jqPTcgZqOAXLtSXlJ8s="
  }
,
  {
    "pname": "Avalonia.Remote.Protocol",
    "version": "11.3.11",
    "hash": "sha256-l1f3rVygtI268llwbN0NvTDSfXwZE3CyRw8w5tbHBC4="
  }
,
  {
    "pname": "Avalonia.Skia",
    "version": "11.3.11",
    "hash": "sha256-89TGu50JfEVFo+QZgyOR0uOagC/xoJvqfnrHep3W/cc="
  }
,
  {
    "pname": "Avalonia.Themes.Fluent",
    "version": "11.3.11",
    "hash": "sha256-tiJ0xAFf0UVSH7LASPtg/7ils7+vZjw2UKBMydyUR3Q="
  }
,
  {
    "pname": "Avalonia.Themes.Simple",
    "version": "11.3.11",
    "hash": "sha256-AJS5Ls0tJ6PCr2mnr1PpxGWX4sII8mpe2R+VCFYRg44="
  }
,
  {
    "pname": "Avalonia.Win32",
    "version": "11.3.11",
    "hash": "sha256-6/NG4OrB/4YisXzJ51GPuq3uDn8oEUWyJRAqejyMCQw="
  }
,
  {
    "pname": "Avalonia.X11",
    "version": "11.3.11",
    "hash": "sha256-2fiQvKxU/r71UOAQgy0zwSHVCM2uG2sdEUhObd5TrQQ="
  }
,
  {
    "pname": "CommunityToolkit.Mvvm",
    "version": "8.4.0",
    "hash": "sha256-a0D550q+ffreU9Z+kQPdzJYPNaj1UjgyPofLzUg02ZI="
  }
,
  {
    "pname": "HarfBuzzSharp",
    "version": "8.3.1.1",
    "hash": "sha256-614yv6bK9ynhdUnvW4wIkgpBe2sqTh28U9cDZzdhPc0="
  }
,
  {
    "pname": "HarfBuzzSharp.NativeAssets.Linux",
    "version": "8.3.1.1",
    "hash": "sha256-sBbez6fc9axVcsBbIHbpQh/MM5NHlMJgSu6FyuZzVyU="
  }
,
  {
    "pname": "HarfBuzzSharp.NativeAssets.macOS",
    "version": "8.3.1.1",
    "hash": "sha256-hK20KbX2OpewIO5qG5gWw5Ih6GoLcIDgFOqCJIjXR/Q="
  }
,
  {
    "pname": "HarfBuzzSharp.NativeAssets.WebAssembly",
    "version": "8.3.1.1",
    "hash": "sha256-mLKoLqI47ZHXqTMLwP1UCm7faDptUfQukNvdq6w/xxw="
  }
,
  {
    "pname": "HarfBuzzSharp.NativeAssets.Win32",
    "version": "8.3.1.1",
    "hash": "sha256-Um4iwLdz9XtaDSAsthNZdev6dMiy7OBoHOrorMrMYyo="
  }
,
  {
    "pname": "MicroCom.Runtime",
    "version": "0.11.0",
    "hash": "sha256-VdwpP5fsclvNqJuppaOvwEwv2ofnAI5ZSz2V+UEdLF0="
  }
,
  {
    "pname": "Microsoft.Extensions.DependencyInjection",
    "version": "10.0.2",
    "hash": "sha256-/9UWQRAI2eoocnJWWf1ktnAx/1Gt65c16fc0Xqr9+CQ="
  }
,
  {
    "pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
    "version": "10.0.2",
    "hash": "sha256-UF9T13V5SQxJy2msfLmyovLmitZrjJayf8gHH+uK2eg="
  }
,
  {
    "pname": "Serilog",
    "version": "4.3.0",
    "hash": "sha256-jyIy4BjsyFXge3aO4GRFAdnX4/rz1MHfBkBDIpCDsTw="
  }
,
  {
    "pname": "Serilog.Sinks.Async",
    "version": "2.1.0",
    "hash": "sha256-LDoLpXkleD2MVPK2KBsLGRf5yqrwckBiAnYDbuIbaUM="
  }
,
  {
    "pname": "Serilog.Sinks.Console",
    "version": "6.1.1",
    "hash": "sha256-CfIg4Us4kSMQAn6rU2rsAeE22g6MpFiZdhoZWySpZeY="
  }
,
  {
    "pname": "Serilog.Sinks.File",
    "version": "7.0.0",
    "hash": "sha256-LxZYUoUPkCjIIVarJilnXnqQiMrFNJtoRilmzTNtUjo="
  }
,
  {
    "pname": "SkiaSharp",
    "version": "2.88.9",
    "hash": "sha256-jZ/4nVXYJtrz9SBf6sYc/s0FxS7ReIYM4kMkrhZS+24="
  }
,
  {
    "pname": "SkiaSharp.NativeAssets.Linux",
    "version": "2.88.9",
    "hash": "sha256-mQ/oBaqRR71WfS66mJCvcc3uKW7CNEHoPN2JilDbw/A="
  }
,
  {
    "pname": "SkiaSharp.NativeAssets.Linux.NoDependencies",
    "version": "2.88.9",
    "hash": "sha256-WjpcM78Q6kaW0eU5iqDR5+fGcF+06/tawWHsJRK57Es="
  }
,
  {
    "pname": "SkiaSharp.NativeAssets.macOS",
    "version": "2.88.9",
    "hash": "sha256-qvGuAmjXGjGKMzOPBvP9VWRVOICSGb7aNVejU0lLe/g="
  }
,
  {
    "pname": "SkiaSharp.NativeAssets.WebAssembly",
    "version": "2.88.9",
    "hash": "sha256-vgFL4Pdy3O1RKBp+T9N3W4nkH9yurZ0suo8u3gPmmhY="
  }
,
  {
    "pname": "SkiaSharp.NativeAssets.Win32",
    "version": "2.88.9",
    "hash": "sha256-kP5XM5GgwHGfNJfe4T2yO5NIZtiF71Ddp0pd1vG5V/4="
  }
,
  {
    "pname": "Tmds.DBus",
    "version": "0.23.0",
    "hash": "sha256-BwWQSqOOMS+Cf2fM8MIuiHey8QnGH4WvYjOn9haq5e0="
  }
,
  {
    "pname": "Tmds.DBus.Protocol",
    "version": "0.21.2",
    "hash": "sha256-gaK/5aAummyin6ptnhaJbnA0ih4+2xADrtrLfFbHwYI="
  }

]
+71 −0
Original line number Diff line number Diff line
{
  lib,
  stdenv,
  buildDotnetModule,
  dotnetCorePackages,
  fetchFromGitHub,
  nix-update-script,
  autoPatchelfHook,
  clang,
  patchelf,
  systemd,
  zlib,
}:

buildDotnetModule rec {
  pname = "crossmacro-daemon";
  version = "0.9.6";

  src = fetchFromGitHub {
    owner = "alper-han";
    repo = "CrossMacro";
    tag = "v${version}";
    hash = "sha256-6Cc1mC34l+4dUPD1LAYxlXxzNF76l4HoOmbqTdTJVk0=";
  };

  projectFile = "src/CrossMacro.Daemon/CrossMacro.Daemon.csproj";
  nugetDeps = ./deps.json;

  dotnet-sdk = dotnetCorePackages.sdk_10_0;
  dotnet-runtime = null;

  selfContainedBuild = true;
  executables = [ "CrossMacro.Daemon" ];
  buildType = "Release";

  nativeBuildInputs = [
    autoPatchelfHook
    clang
    patchelf
  ];

  buildInputs = [
    systemd
    zlib
  ];

  dotnetFlags = [ "-p:Version=${version}" ];

  postInstall = ''
    install -Dm644 scripts/assets/org.crossmacro.policy \
      $out/share/polkit-1/actions/org.crossmacro.policy

    install -Dm644 scripts/assets/50-crossmacro.rules \
      $out/share/polkit-1/rules.d/50-crossmacro.rules
  ''
  + lib.optionalString stdenv.hostPlatform.isLinux ''
    patchelf --add-needed libsystemd.so.0 $out/lib/crossmacro-daemon/CrossMacro.Daemon
  '';

  passthru.updateScript = nix-update-script { };

  meta = {
    description = "Privileged input daemon for CrossMacro";
    homepage = "https://github.com/alper-han/CrossMacro";
    changelog = "https://github.com/alper-han/CrossMacro/releases/tag/v${version}";
    license = lib.licenses.gpl3Plus;
    platforms = lib.platforms.linux;
    mainProgram = "CrossMacro.Daemon";
    maintainers = with lib.maintainers; [ alper-han ];
  };
}
Loading