flameshot-once: add config
This commit is contained in:
parent
7f40ff9b5c
commit
1b526ec1a5
krebs/5pkgs/simple
|
@ -1,15 +0,0 @@
|
||||||
{ pkgs }:
|
|
||||||
|
|
||||||
pkgs.symlinkJoin {
|
|
||||||
name = "flameshot-once-wrapper";
|
|
||||||
paths = [
|
|
||||||
(pkgs.writeDashBin "flameshot-once" ''
|
|
||||||
export PATH=${pkgs.stdenv.lib.makeBinPath [
|
|
||||||
pkgs.flameshot
|
|
||||||
pkgs.qt5.qtbase
|
|
||||||
]}
|
|
||||||
exec ${pkgs.haskellPackages.flameshot-once}/bin/flameshot-once "$@"
|
|
||||||
'')
|
|
||||||
pkgs.haskellPackages.flameshot-once
|
|
||||||
];
|
|
||||||
}
|
|
26
krebs/5pkgs/simple/flameshot-once/default.nix
Normal file
26
krebs/5pkgs/simple/flameshot-once/default.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
with import <stockholm/lib>;
|
||||||
|
{ pkgs, ... }@args:
|
||||||
|
|
||||||
|
let
|
||||||
|
# config cannot be declared in the input attribute set because that would
|
||||||
|
# cause callPackage to inject the wrong config. Instead, get it from ...
|
||||||
|
# via args.
|
||||||
|
config = args.config or {};
|
||||||
|
in
|
||||||
|
|
||||||
|
pkgs.symlinkJoin {
|
||||||
|
name = "flameshot-once-wrapper";
|
||||||
|
paths = [
|
||||||
|
(pkgs.writeDashBin "flameshot-once" ''
|
||||||
|
export PATH=${makeBinPath [
|
||||||
|
pkgs.flameshot
|
||||||
|
pkgs.qt5.qtbase
|
||||||
|
]}
|
||||||
|
${optionalString (config != null) /* sh */ ''
|
||||||
|
. ${import ./profile.nix { inherit config pkgs; }}
|
||||||
|
''}
|
||||||
|
exec ${pkgs.haskellPackages.flameshot-once}/bin/flameshot-once "$@"
|
||||||
|
'')
|
||||||
|
pkgs.haskellPackages.flameshot-once
|
||||||
|
];
|
||||||
|
}
|
123
krebs/5pkgs/simple/flameshot-once/profile.nix
Normal file
123
krebs/5pkgs/simple/flameshot-once/profile.nix
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
with import <stockholm/lib>;
|
||||||
|
{ config, pkgs }:
|
||||||
|
let
|
||||||
|
|
||||||
|
# Refs https://github.com/lupoDharkael/flameshot/blob/master/src/widgets/capture/capturebutton.h
|
||||||
|
ButtonType = {
|
||||||
|
PENCIL = 0;
|
||||||
|
DRAWER = 1;
|
||||||
|
ARROW = 2;
|
||||||
|
SELECTION = 3;
|
||||||
|
RECTANGLE = 4;
|
||||||
|
CIRCLE = 5;
|
||||||
|
MARKER = 6;
|
||||||
|
SELECTIONINDICATOR = 7;
|
||||||
|
MOVESELECTION = 8;
|
||||||
|
UNDO = 9;
|
||||||
|
COPY = 10;
|
||||||
|
SAVE = 11;
|
||||||
|
EXIT = 12;
|
||||||
|
IMAGEUPLOADER = 13;
|
||||||
|
OPEN_APP = 14;
|
||||||
|
BLUR = 15;
|
||||||
|
REDO = 16;
|
||||||
|
PIN = 17;
|
||||||
|
TEXT = 18;
|
||||||
|
};
|
||||||
|
|
||||||
|
cfg = eval.config;
|
||||||
|
|
||||||
|
eval = evalModules {
|
||||||
|
modules = singleton {
|
||||||
|
_file = toString ./config.nix;
|
||||||
|
imports = singleton config;
|
||||||
|
options = {
|
||||||
|
buttons = mkOption {
|
||||||
|
apply = map (name: ButtonType.${name});
|
||||||
|
default = [
|
||||||
|
"PENCIL"
|
||||||
|
"DRAWER"
|
||||||
|
"ARROW"
|
||||||
|
"SELECTION"
|
||||||
|
"RECTANGLE"
|
||||||
|
"CIRCLE"
|
||||||
|
"MARKER"
|
||||||
|
"SELECTIONINDICATOR"
|
||||||
|
"MOVESELECTION"
|
||||||
|
"UNDO"
|
||||||
|
"COPY"
|
||||||
|
"SAVE"
|
||||||
|
"EXIT"
|
||||||
|
"BLUR"
|
||||||
|
];
|
||||||
|
type = types.listOf (types.enum (attrNames ButtonType));
|
||||||
|
};
|
||||||
|
disabledTrayIcon = mkOption {
|
||||||
|
default = true;
|
||||||
|
type = types.bool;
|
||||||
|
};
|
||||||
|
drawThickness = mkOption {
|
||||||
|
default = 8;
|
||||||
|
type = types.positive;
|
||||||
|
};
|
||||||
|
savePath = mkOption {
|
||||||
|
default = "/tmp";
|
||||||
|
type = types.absolute-pathname;
|
||||||
|
};
|
||||||
|
showDesktopNotification = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
};
|
||||||
|
showHelp = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
hexchars = stringToCharacters "0123456789abcdef";
|
||||||
|
|
||||||
|
# Encode integer to C-escaped string of bytes, little endian / LSB 0
|
||||||
|
le = rec {
|
||||||
|
x1 = i: let
|
||||||
|
i0 = mod i 16;
|
||||||
|
i1 = i / 16;
|
||||||
|
in
|
||||||
|
"\\x${elemAt hexchars i1}${elemAt hexchars i0}";
|
||||||
|
|
||||||
|
x2 = i: let
|
||||||
|
i0 = mod i 256;
|
||||||
|
i1 = i / 256;
|
||||||
|
in
|
||||||
|
"${x1 i0}${x1 i1}";
|
||||||
|
|
||||||
|
x4 = i: let
|
||||||
|
i0 = mod i 65536;
|
||||||
|
i1 = i / 65536;
|
||||||
|
in
|
||||||
|
"${x2 i0}${x2 i1}";
|
||||||
|
};
|
||||||
|
|
||||||
|
toQList = t: xs:
|
||||||
|
assert t == "int";
|
||||||
|
"QList<${t}>${le.x4 0}${le.x4 (length xs)}${concatMapStrings le.x4 xs}";
|
||||||
|
|
||||||
|
XDG_CONFIG_HOME = pkgs.write "flameshot-config" {
|
||||||
|
"/Dharkael/flameshot.ini".text = ''
|
||||||
|
[General]
|
||||||
|
buttons=@Variant(\0\0\0\x7f\0\0\0\v${toQList "int" cfg.buttons})
|
||||||
|
disabledTrayIcon=${toJSON cfg.disabledTrayIcon}
|
||||||
|
drawThickness=${toJSON cfg.drawThickness}
|
||||||
|
savePath=${toJSON cfg.savePath}
|
||||||
|
showDesktopNotification=${toJSON cfg.showDesktopNotification}
|
||||||
|
showHelp=${toJSON cfg.showHelp}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
pkgs.writeDash "flameshot.profile" ''
|
||||||
|
export FLAMESHOT_CAPTURE_PATH=${cfg.savePath}
|
||||||
|
export XDG_CONFIG_HOME=${XDG_CONFIG_HOME}
|
||||||
|
''
|
Loading…
Reference in a new issue