113 lines
2.7 KiB
Nix
113 lines
2.7 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
let
|
|
cfg = config.nix-config.style;
|
|
|
|
powerMenu = pkgs.writeShellScriptBin "power-menu" ''
|
|
options=" Power Off\n Reboot\n Lock\n Suspend"
|
|
selected=$(echo -e "$options" | fuzzel --dmenu --prompt "Power Menu" --lines 4 --width 20)
|
|
|
|
case "$selected" in
|
|
" Power Off") systemctl poweroff ;;
|
|
" Reboot") systemctl reboot ;;
|
|
" Lock") hyprlock ;;
|
|
" Suspend") systemctl suspend ;;
|
|
*) exit 1 ;;
|
|
esac
|
|
'';
|
|
|
|
filePicker = pkgs.writeShellScriptBin "file-picker" ''
|
|
files=$(${lib.getExe pkgs.fd} . $HOME --type f)
|
|
filesShortened=$(echo "$files" | sed "s|$HOME|~|g" | awk -F/ '{print $(NF)" ("$0")"}')
|
|
|
|
selected=$(echo "$filesShortened" | fuzzel --dmenu --prompt "🔎 " --placeholder "File search" --index)
|
|
|
|
|
|
if [ -n "$selected" ]; then
|
|
# Since fuzzel was launched with the --index option the actual path is now files[selected]
|
|
selectedPlusOne=$((selected + 1))
|
|
file=$(echo "$files" | sed -n "''${selectedPlusOne}p")
|
|
xdg-open "$file"
|
|
# plus one
|
|
else
|
|
echo "No file selected"
|
|
exit 1
|
|
fi
|
|
'';
|
|
in
|
|
{
|
|
|
|
options.nix-config = {
|
|
powerMenu = lib.mkOption {
|
|
description = "Package to use as a power menu";
|
|
type = lib.types.package;
|
|
default = powerMenu;
|
|
};
|
|
|
|
launcher = lib.mkOption {
|
|
description = "Configuration for the launcher";
|
|
type = lib.types.package;
|
|
default = pkgs.fuzzel;
|
|
};
|
|
|
|
filePicker = lib.mkOption {
|
|
description = "Package to use as a file picker";
|
|
type = lib.types.package;
|
|
default = filePicker;
|
|
};
|
|
};
|
|
|
|
config = {
|
|
programs.fuzzel = {
|
|
enable = true;
|
|
|
|
settings = {
|
|
main = {
|
|
font = "monospace:size=${builtins.toString (cfg.fontSizes.applications - 1)}";
|
|
terminal = "${lib.getExe pkgs.kitty}";
|
|
layer = "overlay"; #or top?
|
|
use-bold = true;
|
|
dpi-aware = true;
|
|
icons-enabled = true;
|
|
match-mode = "fzf";
|
|
horizontal-pad = cfg.fontSizes.applications + 5;
|
|
vertical-pad = cfg.fontSizes.applications + 5;
|
|
inner-pad = cfg.fontSizes.applications;
|
|
show-actions = true;
|
|
lines = 12;
|
|
width = 50;
|
|
};
|
|
|
|
colors = {
|
|
background = "000000aa";
|
|
text = "ffffffaa";
|
|
|
|
# prompt
|
|
|
|
# placeholder
|
|
|
|
# input
|
|
|
|
match = "ffffffaa";
|
|
|
|
selection = "00000000";
|
|
|
|
selection-text = "ffffffbb";
|
|
|
|
selection-match = "ffffffaa";
|
|
};
|
|
|
|
border = {
|
|
width = 0;
|
|
radius = 15;
|
|
};
|
|
};
|
|
};
|
|
|
|
|
|
home.packages = with pkgs; [
|
|
powerMenu
|
|
filePicker
|
|
];
|
|
};
|
|
}
|