tv xdpytools: init
This commit is contained in:
parent
1ff4a60b8d
commit
a94d2ce6c7
31
tv/5pkgs/simple/xdpytools/default.nix
Normal file
31
tv/5pkgs/simple/xdpytools/default.nix
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{ lib, pkgs }:
|
||||||
|
|
||||||
|
let
|
||||||
|
install = name: { path }: /* sh */ ''
|
||||||
|
(
|
||||||
|
mkdir -p $out/bin
|
||||||
|
touch $out/bin/${name}
|
||||||
|
chmod +x $out/bin/${name}
|
||||||
|
exec >$out/bin/${name}
|
||||||
|
|
||||||
|
echo '#! ${pkgs.dash}/bin/dash'
|
||||||
|
echo export PATH=${lib.makeBinPath path}
|
||||||
|
sed 1d ${./src + "/${name}"}
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
|
||||||
|
pkgs.runCommand "xdpytools" {}
|
||||||
|
(toString
|
||||||
|
(lib.mapAttrsToList install {
|
||||||
|
xdpychvt.path = [
|
||||||
|
"$out"
|
||||||
|
"/run/wrappers/'$LOGNAME'"
|
||||||
|
"/run/wrappers"
|
||||||
|
];
|
||||||
|
xdpysel.path = [
|
||||||
|
"$out"
|
||||||
|
pkgs.findutils
|
||||||
|
pkgs.jq
|
||||||
|
];
|
||||||
|
}))
|
11
tv/5pkgs/simple/xdpytools/src/xdpychvt
Executable file
11
tv/5pkgs/simple/xdpytools/src/xdpychvt
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# usage: xdpychvt {prev,next}
|
||||||
|
# Changes to the VT based on the selected X display.
|
||||||
|
#
|
||||||
|
# This allows switching between X servers when display names and VT numbers
|
||||||
|
# correlate. A more sophisticated tool would try to determine the correct VT
|
||||||
|
# by e.g. looking at /proc, but this might not possible when e.g. using
|
||||||
|
# security.hideProcessInformation.
|
||||||
|
#
|
||||||
|
|
||||||
|
chvt "$(xdpysel "$1")"
|
49
tv/5pkgs/simple/xdpytools/src/xdpysel
Executable file
49
tv/5pkgs/simple/xdpytools/src/xdpysel
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# usage: xdpysel {prev,next}
|
||||||
|
# Print the number of the selected X display.
|
||||||
|
|
||||||
|
find /tmp/.X11-unix -mindepth 1 -maxdepth 1 |
|
||||||
|
jq -Rrs --arg command "$1" '
|
||||||
|
(
|
||||||
|
split("\n") |
|
||||||
|
map(
|
||||||
|
select(.!="") |
|
||||||
|
match("^.*/X([0-9]+)$").captures[0].string |
|
||||||
|
tonumber
|
||||||
|
)
|
||||||
|
)
|
||||||
|
as $all_displays |
|
||||||
|
|
||||||
|
(
|
||||||
|
env.DISPLAY |
|
||||||
|
match("^:([0-9]+)(?:[.][0-9]+)?$").captures[0].string |
|
||||||
|
tonumber
|
||||||
|
)
|
||||||
|
as $current_display |
|
||||||
|
|
||||||
|
($all_displays | length) as $all_displays_count |
|
||||||
|
|
||||||
|
($all_displays|index($current_display))
|
||||||
|
as $current_index |
|
||||||
|
|
||||||
|
(($current_index + 1) % $all_displays_count)
|
||||||
|
as $next_index |
|
||||||
|
|
||||||
|
(($all_displays_count + $current_index - 1) % $all_displays_count)
|
||||||
|
as $prev_index |
|
||||||
|
|
||||||
|
$all_displays[$prev_index] as $prev_display |
|
||||||
|
$all_displays[$next_index] as $next_display |
|
||||||
|
|
||||||
|
{
|
||||||
|
prev: $prev_display,
|
||||||
|
next: $next_display,
|
||||||
|
}[$command]
|
||||||
|
as $result |
|
||||||
|
|
||||||
|
if $result | type == "number" then
|
||||||
|
$result
|
||||||
|
else
|
||||||
|
"xdpysel: bad argument: \($command)\n" | halt_error(-1)
|
||||||
|
end
|
||||||
|
'
|
Loading…
Reference in New Issue
Block a user