home-manager: programs.valw.noctalia.enable; README and checklist
This commit is contained in:
1 parent
127d44040e
commit
9fa71fd399
4 files changed
+62
-11
No files matched your search
@@ -61,7 +61,7 @@ binds {
|
|||||||
| `valw region` | Drag a region; Shift locks an axis, Alt grows from the centre, Space moves it; Space before dragging switches to window mode |
|
| `valw region` | Drag a region; Shift locks an axis, Alt grows from the centre, Space moves it; Space before dragging switches to window mode |
|
||||||
| `valw window [--pick]` | Pick a window from cards over a liquid-paint background (Tab/arrows, Enter, Esc); `--pick` clicks it on screen instead |
|
| `valw window [--pick]` | Pick a window from cards over a liquid-paint background (Tab/arrows, Enter, Esc); `--pick` clicks it on screen instead |
|
||||||
| `valw zoom` | Freeze the screen and zoom: wheel, drag, `f` flashlight, `c` capture the view, `0` reset, Esc |
|
| `valw zoom` | Freeze the screen and zoom: wheel, drag, `f` flashlight, `c` capture the view, `0` reset, Esc |
|
||||||
| `valw toolbar` | Pick a mode from a floating bar, with a timer and options |
|
| `valw toolbar` | Pick a mode from a floating bar, with a timer and options; `--state`, `--set KEY=VALUE` and `--run [MODE]` drive it without the bar (the Noctalia plugin uses them) |
|
||||||
| `valw edit FILE` | The markup editor (clicking a preview opens it) |
|
| `valw edit FILE` | The markup editor (clicking a preview opens it) |
|
||||||
| `valw backdrop` | Keep running: the liquid-paint background behind niri's overview (below) |
|
| `valw backdrop` | Keep running: the liquid-paint background behind niri's overview (below) |
|
||||||
| `valw doctor` | What the compositor and system support |
|
| `valw doctor` | What the compositor and system support |
|
||||||
@@ -89,6 +89,24 @@ With Noctalia, turn its own backdrop off (`[backdrop] enabled = false`).
|
|||||||
Colours elsewhere (the region dim, the window picker's fallback) follow
|
Colours elsewhere (the region dim, the window picker's fallback) follow
|
||||||
Noctalia's current community palette when there is one.
|
Noctalia's current community palette when there is one.
|
||||||
|
|
||||||
|
## Noctalia
|
||||||
|
|
||||||
|
With [Noctalia](https://noctalia.dev), valw comes as a plugin: a camera
|
||||||
|
button on the bar (left click: the toolbar, right click: a region shot),
|
||||||
|
the toolbar as a Noctalia panel and a control-center tile. Noctalia draws
|
||||||
|
them, so they follow your Noctalia theme.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
programs.valw.noctalia.enable = true;
|
||||||
|
```
|
||||||
|
|
||||||
|
Then enable `elars/valw` in Noctalia, add a widget of type `elars/valw:bar`
|
||||||
|
to a bar, and bind the toolbar:
|
||||||
|
|
||||||
|
```kdl
|
||||||
|
Mod+Shift+T { spawn "noctalia" "msg" "panel-toggle" "elars/valw:toolbar"; }
|
||||||
|
```
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Every key is optional; these are the defaults.
|
Every key is optional; these are the defaults.
|
||||||
|
|||||||
@@ -188,3 +188,15 @@ image, a cancel brought the thumbnail back, and a swipe still dismissed it.
|
|||||||
- The backdrop calls every lock error "another backdrop is running"; it keeps its first scale after a scale change.
|
- The backdrop calls every lock error "another backdrop is running"; it keeps its first scale after a scale change.
|
||||||
- libEGL is unloaded when the last backdrop surface goes; a removed output leaks its viewport object.
|
- libEGL is unloaded when the last backdrop surface goes; a removed output leaks its viewport object.
|
||||||
- Holding Tab doesn't repeat in the picker; "no windows" exits as an error instead of a cancel.
|
- Holding Tab doesn't repeat in the picker; "no windows" exits as an error instead of a cancel.
|
||||||
|
|
||||||
|
## Noctalia plugin
|
||||||
|
|
||||||
|
- [ ] `programs.valw.noctalia.enable` + `elars/valw` enabled: the camera button appears where the widget is placed; its tooltip says Screenshot.
|
||||||
|
- [ ] Left click opens the toolbar panel next to the bar; it uses Noctalia's colours, font, corners and border; switching the palette or light/dark restyles it.
|
||||||
|
- [ ] The remembered mode is highlighted; Screen / Region / Window / Zoom each capture, and the panel is never in the shot.
|
||||||
|
- [ ] Timer and the three toggles persist, and match what `valw toolbar` (the self-drawn bar) shows, both ways; the timer shows valw's countdown.
|
||||||
|
- [ ] Right click on the button: a region shot (no timer).
|
||||||
|
- [ ] Control-center tile: click closes the control center, then a region shot; right click opens the toolbar panel.
|
||||||
|
- [ ] `noctalia msg panel-toggle elars/valw:toolbar` (Mod+Shift+T) opens and closes the panel.
|
||||||
|
- [ ] With valw off Noctalia's PATH: "valw is not available" and a notification, no crash.
|
||||||
|
- [ ] Turkish locale: the Turkish strings appear.
|
||||||
+22
-10
@@ -13,28 +13,32 @@
|
|||||||
# The home-manager module, evaluated with stand-ins for the two
|
# The home-manager module, evaluated with stand-ins for the two
|
||||||
# home-manager options it sets (no home-manager input needed).
|
# home-manager options it sets (no home-manager input needed).
|
||||||
homeModule =
|
homeModule =
|
||||||
settings:
|
valwConfig:
|
||||||
(lib.evalModules {
|
(lib.evalModules {
|
||||||
modules = [
|
modules = [
|
||||||
self.homeModules.default
|
self.homeModules.default
|
||||||
(
|
(
|
||||||
{ lib, ... }:
|
{ lib, ... }:
|
||||||
{
|
let
|
||||||
options.home.packages = lib.mkOption {
|
files = lib.mkOption {
|
||||||
type = lib.types.listOf lib.types.package;
|
|
||||||
default = [ ];
|
|
||||||
};
|
|
||||||
options.xdg.configFile = lib.mkOption {
|
|
||||||
type = lib.types.attrsOf (
|
type = lib.types.attrsOf (
|
||||||
lib.types.submodule { options.source = lib.mkOption { type = lib.types.path; }; }
|
lib.types.submodule { options.source = lib.mkOption { type = lib.types.path; }; }
|
||||||
);
|
);
|
||||||
default = { };
|
default = { };
|
||||||
};
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.home.packages = lib.mkOption {
|
||||||
|
type = lib.types.listOf lib.types.package;
|
||||||
|
default = [ ];
|
||||||
|
};
|
||||||
|
options.xdg.configFile = files;
|
||||||
|
options.xdg.dataFile = files;
|
||||||
config._module.args.pkgs = pkgs;
|
config._module.args.pkgs = pkgs;
|
||||||
config.programs.valw = {
|
config.programs.valw = {
|
||||||
enable = true;
|
enable = true;
|
||||||
inherit settings;
|
}
|
||||||
};
|
// valwConfig;
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
];
|
];
|
||||||
@@ -58,12 +62,19 @@
|
|||||||
let
|
let
|
||||||
plain = homeModule { };
|
plain = homeModule { };
|
||||||
set = homeModule {
|
set = homeModule {
|
||||||
|
settings = {
|
||||||
preview.timeout_secs = 3;
|
preview.timeout_secs = 3;
|
||||||
sound.volume = 0.4;
|
sound.volume = 0.4;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
noctalia = homeModule { noctalia.enable = true; };
|
||||||
in
|
in
|
||||||
assert lib.assertMsg (plain.home.packages == [ valw ]) "the module installs valw";
|
assert lib.assertMsg (plain.home.packages == [ valw ]) "the module installs valw";
|
||||||
assert lib.assertMsg (plain.xdg.configFile == { }) "no settings, no config file";
|
assert lib.assertMsg (plain.xdg.configFile == { }) "no settings, no config file";
|
||||||
|
assert lib.assertMsg (plain.xdg.dataFile == { }) "no Noctalia plugin unless asked";
|
||||||
|
assert lib.assertMsg (
|
||||||
|
noctalia.xdg.dataFile."noctalia/plugins/valw".source == "${valw}/share/valw/noctalia-plugin"
|
||||||
|
) "the plugin is linked where Noctalia looks";
|
||||||
pkgs.runCommand "valw-home-module" { } ''
|
pkgs.runCommand "valw-home-module" { } ''
|
||||||
grep -qx 'timeout_secs = 3' ${set.xdg.configFile."valw/config.toml".source}
|
grep -qx 'timeout_secs = 3' ${set.xdg.configFile."valw/config.toml".source}
|
||||||
grep -qx 'volume = 0.4' ${set.xdg.configFile."valw/config.toml".source}
|
grep -qx 'volume = 0.4' ${set.xdg.configFile."valw/config.toml".source}
|
||||||
@@ -79,7 +90,8 @@
|
|||||||
let
|
let
|
||||||
fails =
|
fails =
|
||||||
settings:
|
settings:
|
||||||
pkgs.testers.testBuildFailure (homeModule settings).xdg.configFile."valw/config.toml".source;
|
pkgs.testers.testBuildFailure
|
||||||
|
(homeModule { inherit settings; }).xdg.configFile."valw/config.toml".source;
|
||||||
in
|
in
|
||||||
pkgs.runCommand "valw-home-module-rejects" { } ''
|
pkgs.runCommand "valw-home-module-rejects" { } ''
|
||||||
grep -q 'sound.volume must be between 0 and 1' ${fails { sound.volume = 2; }}/testBuildFailure.log
|
grep -q 'sound.volume must be between 0 and 1' ${fails { sound.volume = 2; }}/testBuildFailure.log
|
||||||
|
|||||||
@@ -45,6 +45,12 @@
|
|||||||
valw at build time. Empty means valw's defaults.
|
valw at build time. Empty means valw's defaults.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
noctalia.enable = lib.mkEnableOption ''
|
||||||
|
valw's Noctalia plugin (a bar button, the toolbar as a Noctalia
|
||||||
|
panel and a control-center tile), linked into
|
||||||
|
`$XDG_DATA_HOME/noctalia/plugins/valw`. Enable `elars/valw` and
|
||||||
|
place its widget in Noctalia's own settings
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
@@ -52,6 +58,9 @@
|
|||||||
xdg.configFile."valw/config.toml" = lib.mkIf (cfg.settings != { }) {
|
xdg.configFile."valw/config.toml" = lib.mkIf (cfg.settings != { }) {
|
||||||
source = checked cfg.settings;
|
source = checked cfg.settings;
|
||||||
};
|
};
|
||||||
|
xdg.dataFile."noctalia/plugins/valw" = lib.mkIf cfg.noctalia.enable {
|
||||||
|
source = "${cfg.package}/share/valw/noctalia-plugin";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user