From 3b09a24e0a5733f4fb527120a9c710f511862023 Mon Sep 17 00:00:00 2001 From: Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> Date: Sun, 13 Jul 2025 03:56:55 +0530 Subject: Removed unecessary junk. --- modules/graphical/sxhkd/default.nix | 37 +++++++++++++ modules/graphical/sxhkd/keybindings/bspwm.nix | 45 +++++++++++++++ modules/graphical/sxhkd/scripts/keybindings.sh | 77 ++++++++++++++++++++++++++ 3 files changed, 159 insertions(+) create mode 100644 modules/graphical/sxhkd/default.nix create mode 100644 modules/graphical/sxhkd/keybindings/bspwm.nix create mode 100755 modules/graphical/sxhkd/scripts/keybindings.sh (limited to 'modules/graphical/sxhkd') diff --git a/modules/graphical/sxhkd/default.nix b/modules/graphical/sxhkd/default.nix new file mode 100644 index 0000000..1b362cf --- /dev/null +++ b/modules/graphical/sxhkd/default.nix @@ -0,0 +1,37 @@ +{ pkgs, config, lib, ... }: + +{ + config = lib.mkIf config.graphical.enable { + services.sxhkd.enable = true; + services.sxhkd.keybindings = + let + modKey = "alt"; + createKeybinding = keybinding: description: command: { + "# ${description}\n${modKey} + ${keybinding}" = command; + }; + in lib.mkMerge [ + (import ./keybindings/bspwm.nix { inherit pkgs createKeybinding lib; }) + + (createKeybinding + "s" + "Show keybindings." + "kitty --title 'Keybindings' --class floating-termial -e ${pkgs.writeShellScript "keybindings.sh" (builtins.readFile ./scripts/keybindings.sh)}" + ) + + (createKeybinding + "r" + "Application launcher." + "rofi") + + (createKeybinding + "t" + "Launch terminal." + "kitty") + + # (createKeybinding + # "f" + # "Launch File Manager." + # "kitty --title 'File Manager' --class floating-termial -e ${config.tools.file-manager.command}") + ]; + }; +} diff --git a/modules/graphical/sxhkd/keybindings/bspwm.nix b/modules/graphical/sxhkd/keybindings/bspwm.nix new file mode 100644 index 0000000..ed62ed4 --- /dev/null +++ b/modules/graphical/sxhkd/keybindings/bspwm.nix @@ -0,0 +1,45 @@ +{ createKeybinding, pkgs, lib }: + +let + bspc = "${pkgs.bspwm}/bin/bspc"; +in lib.mkMerge [ + (createKeybinding + "q" + "Kill current window." + "${bspc} node -c") + + (createKeybinding + "{1-9,0}" + "Switch workspace." + "${bspc} desktop -f {1-9,10}") + + (createKeybinding + "shift + {1-9,0}" + "Move window to workspace." + "${bspc} node -d {1-9,10} --follow") + + (createKeybinding + "{n,d,m}" + "Set current window mode (tiled, floating, fullscreen)." + "${bspc} node focused -t {tiled,floating,fullscreen}") + + (createKeybinding + "{_,shift + }{h,j,k,l}" + "Navigate between windows." + "${bspc} node --{focus,swap} {west,south,north,east}") + + # the indentation for each line is required to work with the help prompt + (createKeybinding + "ctrl + {h,j,k,l}" + "Resize current window." + '' + ${bspc} node {@parent/second -z left -20 0; \ + @parent/first -z right -20 0, \ + @parent/second -z top 0 +20; \ + @parent/first -z bottom 0 +20, \ + @parent/first -z bottom 0 -20; \ + @parent/second -z top 0 -20, \ + @parent/first -z right +20 0; \ + @parent/second -z left +20 0} +'') +] diff --git a/modules/graphical/sxhkd/scripts/keybindings.sh b/modules/graphical/sxhkd/scripts/keybindings.sh new file mode 100755 index 0000000..01bb05f --- /dev/null +++ b/modules/graphical/sxhkd/scripts/keybindings.sh @@ -0,0 +1,77 @@ +#!/bin/sh + +# Path to your sxhkd config file +SXHKD_FILE="$HOME/.config/sxhkd/sxhkdrc" + +# Function to wrap text to a specified width +wrap_text() { + local text="$1" + local width="$2" + echo "$text" | fold -s -w "$width" +} + +# Get terminal width +terminal_width=$(tput cols) + +# Set the table width to the full terminal width, leaving space for borders +table_width=$((terminal_width - 4)) # 4 for the borders and space between columns + +# Set keybinding column width to half of the available width +max_keybinding_length=$((table_width / 2)) + +# Length of the cotent inside the cell (2 spaces are substracted for padding) +max_keybinding_content_length=$((max_keybinding_length - 2)) + +# Set the description column width to the other half +description_width=$((table_width - max_keybinding_length - 1)) # 1 for the separator between columns + +# Length of the cotent inside the cell (2 spaces are substracted for padding) +description_content_width=$((description_width - 2)) + +# Generate the top border line and row separator +border_line="├$(printf '%.0s─' $(seq 1 $max_keybinding_length))┼$(printf '%.0s─' $(seq 1 $description_width))┤" + +# Pipe all output to less +{ + # Print table header with borders + echo "┌$(printf '%.0s─' $(seq 1 $max_keybinding_length))┬$(printf '%.0s─' $(seq 1 $description_width))┐" + printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "KEYBINDING" "$description_content_width" "DESCRIPTION" + + # Initialize variables + description="" + + # Load the sxhkd file into an array + mapfile -t lines < "$SXHKD_FILE" + + # Loop through lines for output + for line in "${lines[@]}"; do + # Check if the line is a comment + if [[ $line =~ ^# ]]; then + # Remove the "#" and any leading/trailing whitespace to capture the description + description="${line#\# }" + elif [[ $line =~ ^[^#[:space:]] ]]; then + # If it's a keybinding line, store it + keybinding="$line" + # Move to the next line for the command + command="${lines[((++i))]}" + + # Wrap the description to the calculated width + wrapped_description=$(wrap_text "$description" "$description_width") + + # Print the keybinding with a border line above and below it + echo "$border_line" + printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "$keybinding" "$description_content_width" "$(echo "$wrapped_description" | head -n 1)" + + # Print wrapped description lines with empty keybinding column + echo "$wrapped_description" | sed '1d' | while read -r continuation; do + printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "" "$description_content_width" "$continuation" + done + + # Reset description for the next keybinding + description="" + fi + done + + # Print the final border line + echo "└$(printf '%.0s─' $(seq 1 $max_keybinding_length))┴$(printf '%.0s─' $(seq 1 $description_width))┘" +} | less -- cgit v1.2.3