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