diff options
| author | Arpit Chakladar <arpitchakladar@proton.me> | 2026-04-22 19:07:39 +0530 |
|---|---|---|
| committer | Arpit Chakladar <arpitchakladar@proton.me> | 2026-04-22 19:07:39 +0530 |
| commit | 667cb52ab1583401742e4bcdc79321c3fcbfa2c0 (patch) | |
| tree | d02325e80008fd5fd5f1680ae07c562c6bb94246 | |
| parent | f0244e9a7c7fa5a6a708d41f1d3f928daa7989f8 (diff) | |
| download | home-manager-config-667cb52ab1583401742e4bcdc79321c3fcbfa2c0.tar.gz home-manager-config-667cb52ab1583401742e4bcdc79321c3fcbfa2c0.zip | |
created a utils library for the home manager config
| -rw-r--r-- | flake.nix | 3 | ||||
| -rw-r--r-- | modules/desktop/i3/default.nix | 8 | ||||
| -rw-r--r-- | modules/desktop/i3/keybindings.nix | 4 | ||||
| -rw-r--r-- | modules/desktop/i3/keybindings.sh | 67 | ||||
| -rw-r--r-- | modules/scripts/default.nix | 32 | ||||
| -rw-r--r-- | utils/default.nix | 3 | ||||
| -rw-r--r-- | utils/scripts.nix | 33 |
7 files changed, 121 insertions, 29 deletions
@@ -49,6 +49,9 @@ in home-manager.lib.homeManagerConfiguration { inherit pkgs; + extraSpecialArgs = { + utils = import ./utils; + }; modules = [ ./users/arpit.nix ./modules diff --git a/modules/desktop/i3/default.nix b/modules/desktop/i3/default.nix index ed29e91..3f96aaf 100644 --- a/modules/desktop/i3/default.nix +++ b/modules/desktop/i3/default.nix @@ -54,10 +54,12 @@ window.commands = [ { + command = "floating enable, sticky enable, resize set 1400 800, move position center"; + criteria.class = "file-explorer"; + } + { command = "floating enable, sticky enable, resize set 1000 600, move position center"; - criteria = { - class = "floating-termial"; - }; + criteria.class = "application-launcher"; } ]; diff --git a/modules/desktop/i3/keybindings.nix b/modules/desktop/i3/keybindings.nix index d67f235..b635161 100644 --- a/modules/desktop/i3/keybindings.nix +++ b/modules/desktop/i3/keybindings.nix @@ -12,11 +12,11 @@ in # --- General Applications --- "${mod}+r" = lib.mkIf (config.tools.fzf.enable && config.tools.kitty.enable) - "exec ${lib.getExe pkgs.kitty} --class floating-termial -e ${lib.getExe config.scripts.fzf-launcher}"; + "exec ${lib.getExe pkgs.kitty} --class application-launcher -e ${lib.getExe config.scripts.fzf-launcher}"; "${mod}+t" = lib.mkIf config.tools.kitty.enable "exec ${lib.getExe pkgs.kitty}"; "${mod}+f" = lib.mkIf (config.tools.kitty.enable && config.tools.lf.enable) - "exec ${lib.getExe pkgs.kitty} --title 'File Manager' --class floating-termial -e ${lib.getExe config.programs.lf.package}"; + "exec ${lib.getExe pkgs.kitty} --title 'File Manager' --class file-explorer -e ${lib.getExe config.programs.lf.package}"; "${mod}+s" = lib.mkIf config.tools.kitty.enable "exec ${lib.getExe pkgs.kitty} --title 'Keybindings' --class floating-termial -e keybindings.sh"; "${mod}+q" = "kill"; diff --git a/modules/desktop/i3/keybindings.sh b/modules/desktop/i3/keybindings.sh new file mode 100644 index 0000000..f3300ff --- /dev/null +++ b/modules/desktop/i3/keybindings.sh @@ -0,0 +1,67 @@ +# Path to your i3 config file +I3_CONFIG="$HOME/.config/i3/config" + +# Function to wrap text +wrap_text() { + local text="$1" + local width="$2" + echo "$text" | fold -s -w "$width" +} + +# Get terminal width and calculate columns +terminal_width=$(tput cols) +table_width=$((terminal_width - 4)) +max_keybinding_length=$((table_width / 3)) # Keybindings are usually shorter in i3 +max_keybinding_content_length=$((max_keybinding_length - 2)) +description_width=$((table_width - max_keybinding_length - 1)) +description_content_width=$((description_width - 2)) + +# Border lines +top_border="┌$(printf '%.0s─' $(seq 1 $max_keybinding_length))┬$(printf '%.0s─' $(seq 1 $description_width))┐" +row_sep="├$(printf '%.0s─' $(seq 1 $max_keybinding_length))┼$(printf '%.0s─' $(seq 1 $description_width))┤" +bottom_border="└$(printf '%.0s─' $(seq 1 $max_keybinding_length))┴$(printf '%.0s─' $(seq 1 $description_width))┘" + +{ + echo "$top_border" + printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "KEYBINDING" "$description_content_width" "DESCRIPTION" + + last_comment="" + + # Read i3 config line by line + while IFS= read -r line; do + # If line is a comment, store it as a potential description + if [[ $line =~ ^#\ (.*) ]]; then + last_comment="${BASH_REMATCH[1]}" + + # If line contains a bindsym + elif [[ $line =~ ^bindsym ]]; then + # Extract the key combo (the parts between 'bindsym' and the start of the command/exec) + # This regex captures bindsym [options] <keysym> <command> + keybinding=$(echo "$line" | awk '{print $2}') + + # If the comment is empty, use the command itself as the description + if [[ -z "$last_comment" ]]; then + display_desc=$(echo "$line" | cut -d' ' -f3-) + else + display_desc="$last_comment" + fi + + wrapped_description=$(wrap_text "$display_desc" "$description_content_width") + + echo "$row_sep" + + # Print first line of binding and description + printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "$keybinding" "$description_content_width" "$(echo "$wrapped_description" | head -n 1)" + + # Print subsequent lines of wrapped description + echo "$wrapped_description" | sed '1d' | while read -r continuation; do + printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "" "$description_content_width" "$continuation" + done + + # Reset comment after use + last_comment="" + fi + done < "$I3_CONFIG" + + echo "$bottom_border" +} | less -R diff --git a/modules/scripts/default.nix b/modules/scripts/default.nix index f6efb3f..c70c3a0 100644 --- a/modules/scripts/default.nix +++ b/modules/scripts/default.nix @@ -2,40 +2,24 @@ config, lib, pkgs, + utils, ... }: let - shell = - if config.tools.zsh.enable then (lib.getExe config.programs.zsh.package) else "/usr/bin/env sh"; - - mkScript = - name: path: env: - let - envVars = lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "${n}=\"${toString v}\"") env); - in - pkgs.writeTextFile { - name = name; - executable = true; - destination = "/bin/${name}"; - text = '' - #!${shell} - ${envVars} - ${builtins.readFile path} - ''; - }; + scriptUtils = utils.scripts { inherit pkgs lib config; }; scripts = { - deep-clean = mkScript "deep-clean" ./deep-clean.sh { }; + deep-clean = scriptUtils.mkScript "deep-clean" ./deep-clean.sh { }; fzf-launcher = lib.mkIf config.tools.fzf.enable ( - mkScript "fzf-launcher" ./fzf-launcher.sh { + scriptUtils.mkScript "fzf-launcher" ./fzf-launcher.sh { FZF = lib.getExe pkgs.fzf; SETSID = lib.getExe' pkgs.util-linux "setsid"; } ); screen-recording = lib.mkIf (config.tools.ffmpeg.enable && config.tools.slop.enable) ( - mkScript "screen-recording" ./screen-recording.sh { + scriptUtils.mkScript "screen-recording" ./screen-recording.sh { FFMPEG = lib.getExe pkgs.ffmpeg-full; SLOP = lib.getExe pkgs.slop; } @@ -50,7 +34,7 @@ let && config.tools.kitty.enable ) ( - mkScript "system-monitor" ./system-monitor.sh { + scriptUtils.mkScript "system-monitor" ./system-monitor.sh { BTM = lib.getExe pkgs.bottom; NVTOP = lib.getExe pkgs.nvtopPackages.full; TMUX = lib.getExe pkgs.tmux; @@ -59,7 +43,7 @@ let ); vpn-connect = lib.mkIf (config.tools.openvpn.enable && config.tools.fzf.enable) ( - mkScript "vpn-connect" ./vpn-connect.sh { + scriptUtils.mkScript "vpn-connect" ./vpn-connect.sh { FZF = lib.getExe pkgs.fzf; OPENVPN = lib.getExe pkgs.openvpn; SYSTEMD_RESOLVED = "${pkgs.openvpn}/libexec/update-systemd-resolved"; @@ -67,7 +51,7 @@ let ); vpn-disconnect = lib.mkIf (config.tools.openvpn.enable && config.tools.fzf.enable) ( - mkScript "vpn-disconnect" ./vpn-disconnect.sh { } + scriptUtils.mkScript "vpn-disconnect" ./vpn-disconnect.sh { } ); }; in diff --git a/utils/default.nix b/utils/default.nix new file mode 100644 index 0000000..b4dac37 --- /dev/null +++ b/utils/default.nix @@ -0,0 +1,3 @@ +{ + scripts = import ./scripts.nix; +} diff --git a/utils/scripts.nix b/utils/scripts.nix new file mode 100644 index 0000000..87639c6 --- /dev/null +++ b/utils/scripts.nix @@ -0,0 +1,33 @@ +{ + lib, + pkgs, + config, +}: + +{ + # We define mkScript as a function that takes the context it needs + mkScript = + name: path: env: + let + # Logic inside the helper + defaultShell = + if (config.tools.zsh.enable or false) then + (lib.getExe config.programs.zsh.package) + else + "/usr/bin/env sh"; + + envVars = lib.concatStringsSep "\n" ( + lib.mapAttrsToList (n: v: "export ${n}=\"${toString v}\"") env + ); + in + pkgs.writeTextFile { + inherit name; + executable = true; + destination = "/bin/${name}"; + text = '' + #!${defaultShell} + ${envVars} + ${builtins.readFile path} + ''; + }; +} |
