diff --git a/modules/desktop.nix b/modules/desktop.nix
index 7fdd9e4..de19389 100644
--- a/modules/desktop.nix
+++ b/modules/desktop.nix
@@ -5,6 +5,7 @@ let
window-screenshot = pkgs.writeShellScriptBin "window-screenshot.sh" (builtins.readFile ../scripts/desktop/window-screenshot.sh);
# desktop-ctl = pkgs.writeShellScriptBin "desktop-ctl.sh" (builtins.readFile ../scripts/desktop/desktop-ctl.sh);
desktop-ctl = import ../scripts/desktop/desktopctl.nix { pkgs = pkgs; };
+ permaclip = import ../scripts/desktop/permaclip { pkgs = pkgs; };
em-record = pkgs.writeShellScriptBin "em-record.sh" (builtins.readFile ../scripts/desktop/macros/record.sh);
em-play = pkgs.writeShellScriptBin "em-play.sh" (builtins.readFile ../scripts/desktop/macros/play.sh);
em-play-loop = pkgs.writeShellScriptBin "em-play-loop.sh" (builtins.readFile ../scripts/desktop/macros/play-loop.sh);
@@ -28,6 +29,7 @@ in with lib; {
libqalculate # needed by menu-qalc
# custom scripts
window-screenshot desktop-ctl em-record em-play em-play-loop ocr-screenshot menu-qalc
+ permaclip
# themes
gruvbox-dark-gtk gruvbox-dark-icons-gtk
@@ -103,7 +105,7 @@ in with lib; {
"${mod}+Shift+space" = "floating toggle";
# focus parents/children
"${mod}+Shift+a" = "focus parent";
- "${mod}+c" = "focus child";
+ "${mod}+Shift+c" = "focus child";
# screenshot
"${mod}+w" = "exec window-screenshot.sh";
"${mod}+s" = "exec flameshot gui -c -p $HOME/Pictures/screenshots";
@@ -135,6 +137,10 @@ in with lib; {
"${mod}+q" = "exec em-record.sh";
"${mod}+p" = "exec em-play.sh";
"${mod}+Shift+p" = "exec em-play-loop.sh";
+
+ # permaclip
+ "${mod}+c" = "rofi -show permaclip -modes \"permaclip:${permaclip.outPath}/bin/pc-set\" -theme gruvbox-dark";
+ "${mod}+v" = "rofi -show permaclip -modes \"permaclip:${permaclip.outPath}/bin/pc-get\" -theme gruvbox-dark";
};
# }}}
# Visuals {{{
diff --git a/scripts/desktop/macros/play-loop.sh b/scripts/desktop/macros/play-loop.sh
index d5b23c7..a38f47e 100644
--- a/scripts/desktop/macros/play-loop.sh
+++ b/scripts/desktop/macros/play-loop.sh
@@ -1,3 +1,5 @@
+mkdir -p $HOME/xmacros
+
register=$(ls $HOME/xmacros | rofi -dmenu)
count=$(echo "2;5;10;20;50;100" | rofi -dmenu -sep ";" -l 5)
diff --git a/scripts/desktop/macros/play.sh b/scripts/desktop/macros/play.sh
index 6063fef..60587fd 100644
--- a/scripts/desktop/macros/play.sh
+++ b/scripts/desktop/macros/play.sh
@@ -1,3 +1,5 @@
+mkdir -p $HOME/xmacros
+
register=$(ls $HOME/xmacros | rofi -dmenu)
xmacroplay "$DISPLAY" < $HOME/xmacros/$register
diff --git a/scripts/desktop/macros/record.sh b/scripts/desktop/macros/record.sh
index 082f0cc..b768c5b 100644
--- a/scripts/desktop/macros/record.sh
+++ b/scripts/desktop/macros/record.sh
@@ -1,3 +1,5 @@
+mkdir -p $HOME/xmacros
+
register=$(ls $HOME/xmacros | rofi -dmenu)
count=$(echo "2;5;10;20;50;100" | rofi -dmenu -sep ";" -l 5)
diff --git a/scripts/desktop/permaclip/default.nix b/scripts/desktop/permaclip/default.nix
new file mode 100644
index 0000000..db2e02e
--- /dev/null
+++ b/scripts/desktop/permaclip/default.nix
@@ -0,0 +1,37 @@
+{ pkgs, ... }:
+pkgs.writeShellScriptBin "pc-set" ''
+ # create ~/permaclip if it doesnt exist already
+ mkdir -p $HOME/permaclip
+
+ tr_name=$(echo $@ | xargs)
+ if [ x"$tr_name" != x"" ]; then
+ tr_name="''${tr_name% (*}"
+ clipdata=$(xclip -selection c -o)
+ echo $clipdata > $HOME/permaclip/$tr_name
+ fi
+
+ echo -e "\0markup-rows\x1ftrue"
+
+ for reg in $(ls ~/permaclip); do
+ content=$(cat ~/permaclip/$reg)
+ echo -e "$reg (''${content:0:30})"
+ done
+'';
+
+pkgs.writeShellScriptBin "pc-get" ''
+ # create ~/permaclip if it doesnt exist already
+ mkdir -p $HOME/permaclip
+
+ tr_name=$(echo ''${@% (*} | xargs)
+ if [ x"$tr_name" != x"" ]; then
+ xclip -selection c -i $HOME/permaclip/''${tr_name% (*} &> /dev/null
+ exit 0
+ fi
+
+ echo -e "\0markup-rows\x1ftrue"
+
+ for reg in $(ls ~/permaclip); do
+ content=$(cat ~/permaclip/$reg)
+ echo -e "$reg (''${content:0:50}...)"
+ done
+'';