mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-04-13 23:47:47 +00:00
nixos/buffyboard: init (#358941)
This commit is contained in:
commit
5c8a2cab3f
@ -24,6 +24,8 @@
|
||||
|
||||
- [mqtt-exporter](https://github.com/kpetremann/mqtt-exporter/), a Prometheus exporter for exposing messages from MQTT. Available as [services.prometheus.exporters.mqtt](#opt-services.prometheus.exporters.mqtt.enable).
|
||||
|
||||
- [Buffyboard](https://gitlab.postmarketos.org/postmarketOS/buffybox/-/tree/master/buffyboard), a framebuffer on-screen keyboard. Available as [services.buffyboard](option.html#opt-services.buffyboard).
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
## Backward Incompatibilities {#sec-release-25.05-incompatibilities}
|
||||
|
@ -588,6 +588,7 @@
|
||||
./services/hardware/bluetooth.nix
|
||||
./services/hardware/bolt.nix
|
||||
./services/hardware/brltty.nix
|
||||
./services/hardware/buffyboard.nix
|
||||
./services/hardware/ddccontrol.nix
|
||||
./services/hardware/display.nix
|
||||
./services/hardware/fancontrol.nix
|
||||
|
138
nixos/modules/services/hardware/buffyboard.nix
Normal file
138
nixos/modules/services/hardware/buffyboard.nix
Normal file
@ -0,0 +1,138 @@
|
||||
# INTEGRATION NOTES:
|
||||
# Buffyboard integrates as a virtual device in /dev/input
|
||||
# which reads touch or pointer events from other input devices
|
||||
# and generates events based on where those map to the keys it renders to the framebuffer.
|
||||
#
|
||||
# Buffyboard generates these events whether or not its onscreen keyboard is actually visible.
|
||||
# Hence special care is needed if running anything which claims ownership of the display (such as a desktop environment),
|
||||
# to avoid unwanted input events being triggered during normal desktop operation.
|
||||
#
|
||||
# Desktop users are recommended to either:
|
||||
# 1. Stop buffyboard once your DE is started.
|
||||
# e.g. `services.buffyboard.unitConfig.Conflicts = [ "my-de.service" ];`
|
||||
# 2. Configure your DE to ignore input events from buffyboard (product-id=25209; vendor-id=26214; name=rd)
|
||||
# e.g. `echo 'input "26214:25209:rd" events disabled' > ~/.config/sway/config`
|
||||
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
utils,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.services.buffyboard;
|
||||
ini = pkgs.formats.ini { };
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ colinsane ];
|
||||
|
||||
options = {
|
||||
services.buffyboard = with lib; {
|
||||
enable = mkEnableOption "buffyboard framebuffer keyboard (on-screen keyboard)";
|
||||
package = mkPackageOption pkgs "buffybox" { };
|
||||
|
||||
extraFlags = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
description = ''
|
||||
Extra CLI arguments to pass to buffyboard.
|
||||
'';
|
||||
example = [
|
||||
"--geometry=1920x1080@640,0"
|
||||
"--dpi=192"
|
||||
"--rotate=2"
|
||||
"--verbose"
|
||||
];
|
||||
};
|
||||
|
||||
configFile = mkOption {
|
||||
type = lib.types.path;
|
||||
default = ini.generate "buffyboard.conf" (lib.filterAttrsRecursive (_: v: v != null) cfg.settings);
|
||||
defaultText = lib.literalExpression ''ini.generate "buffyboard.conf" cfg.settings'';
|
||||
description = ''
|
||||
Path to an INI format configuration file to provide Buffyboard.
|
||||
By default, this is generated from whatever you've set in `settings`.
|
||||
If specified manually, then `settings` is ignored.
|
||||
|
||||
For an example config file see [here](https://gitlab.postmarketos.org/postmarketOS/buffybox/-/blob/master/buffyboard/buffyboard.conf)
|
||||
'';
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
description = ''
|
||||
Settings to include in /etc/buffyboard.conf.
|
||||
Every option here is strictly optional:
|
||||
Buffyboard will use its own baked-in defaults for those options left unset.
|
||||
'';
|
||||
type = types.submodule {
|
||||
freeformType = ini.type;
|
||||
|
||||
options.input.pointer = mkOption {
|
||||
type = types.nullOr types.bool;
|
||||
default = null;
|
||||
description = ''
|
||||
Enable or disable the use of a hardware mouse or other pointing device.
|
||||
'';
|
||||
};
|
||||
options.input.touchscreen = mkOption {
|
||||
type = types.nullOr types.bool;
|
||||
default = null;
|
||||
description = ''
|
||||
Enable or disable the use of the touchscreen.
|
||||
'';
|
||||
};
|
||||
|
||||
options.theme.default = mkOption {
|
||||
type = types.either types.str (
|
||||
types.enum [
|
||||
null
|
||||
"adwaita-dark"
|
||||
"breezy-dark"
|
||||
"breezy-light"
|
||||
"nord-dark"
|
||||
"nord-light"
|
||||
"pmos-dark"
|
||||
"pmos-light"
|
||||
]
|
||||
);
|
||||
default = null;
|
||||
description = ''
|
||||
Selects the default theme on boot. Can be changed at runtime to the alternative theme.
|
||||
'';
|
||||
};
|
||||
options.quirks.fbdev_force_refresh = mkOption {
|
||||
type = types.nullOr types.bool;
|
||||
default = null;
|
||||
description = ''
|
||||
If true and using the framebuffer backend, this triggers a display refresh after every draw operation.
|
||||
This has a negative performance impact.
|
||||
'';
|
||||
};
|
||||
};
|
||||
default = { };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
systemd.packages = [ cfg.package ];
|
||||
systemd.services.buffyboard = {
|
||||
# upstream provides the service (including systemd hardening): we just configure it to start by default
|
||||
# and override ExecStart so as to optionally pass extra arguments
|
||||
serviceConfig.ExecStart = [
|
||||
"" # clear default ExecStart
|
||||
(utils.escapeSystemdExecArgs (
|
||||
[
|
||||
(lib.getExe' cfg.package "buffyboard")
|
||||
"--config-override"
|
||||
cfg.configFile
|
||||
]
|
||||
++ cfg.extraFlags
|
||||
))
|
||||
];
|
||||
wantedBy = [ "getty.target" ];
|
||||
before = [ "getty.target" ];
|
||||
};
|
||||
};
|
||||
}
|
60
pkgs/by-name/bu/buffybox/package.nix
Normal file
60
pkgs/by-name/bu/buffybox/package.nix
Normal file
@ -0,0 +1,60 @@
|
||||
{
|
||||
fetchFromGitLab,
|
||||
inih,
|
||||
lib,
|
||||
libdrm,
|
||||
libinput,
|
||||
libxkbcommon,
|
||||
meson,
|
||||
ninja,
|
||||
pkg-config,
|
||||
scdoc,
|
||||
stdenv,
|
||||
unstableGitUpdater,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "buffybox";
|
||||
version = "3.2.0-unstable-2024-11-10";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.postmarketos.org";
|
||||
owner = "postmarketOS";
|
||||
repo = "buffybox";
|
||||
fetchSubmodules = true; # to use its vendored lvgl
|
||||
rev = "07e324c17564cb9aab573259a8e0824a6806a751";
|
||||
hash = "sha256-JY9WqtRjDsQf1UVFnM6oTwyAuhlJvrhcSNJdEZ0zIus=";
|
||||
};
|
||||
|
||||
depsBuildBuild = [
|
||||
pkg-config
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
meson
|
||||
ninja
|
||||
pkg-config
|
||||
scdoc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
inih
|
||||
libdrm
|
||||
libinput
|
||||
libxkbcommon
|
||||
];
|
||||
|
||||
env.PKG_CONFIG_SYSTEMD_SYSTEMD_SYSTEM_UNIT_DIR = "${placeholder "out"}/lib/systemd/system";
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
passthru.updateScript = unstableGitUpdater { };
|
||||
|
||||
meta = with lib; {
|
||||
description = "A suite of graphical applications for the terminal";
|
||||
homepage = "https://gitlab.postmarketos.org/postmarketOS/buffybox";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ colinsane ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
})
|
Loading…
Reference in New Issue
Block a user