aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--flake.nix3
-rw-r--r--modules/desktop/i3/default.nix8
-rw-r--r--modules/desktop/i3/keybindings.nix4
-rw-r--r--modules/desktop/i3/keybindings.sh67
-rw-r--r--modules/scripts/default.nix32
-rw-r--r--utils/default.nix3
-rw-r--r--utils/scripts.nix33
7 files changed, 121 insertions, 29 deletions
diff --git a/flake.nix b/flake.nix
index 2ea5d88..b715b61 100644
--- a/flake.nix
+++ b/flake.nix
@@ -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}
+ '';
+ };
+}