diff --git a/flake.nix b/flake.nix index eae8541..710ef7e 100644 --- a/flake.nix +++ b/flake.nix @@ -26,7 +26,6 @@ {_module.args = {inherit inputs;};} ]; home-manager.users.steph = { imports = [ ./home.nix ./platforms/linux/home.nix ]; }; - home-manager.useGlobalPkgs = true; home-manager.extraSpecialArgs = { inherit inputs ; os = "linux"; }; } ]; @@ -42,7 +41,6 @@ {_module.args = {inherit inputs;};} ]; home-manager.users.steph = { imports = [ ./home.nix ./platforms/linux/home.nix ]; }; - home-manager.useGlobalPkgs = true; home-manager.extraSpecialArgs = { inherit inputs ; os = "linux"; }; } ]; diff --git a/git-identity.sh b/git-identity.sh new file mode 100755 index 0000000..171361e --- /dev/null +++ b/git-identity.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +IFS="" + +function print_menu() # selected_item, ...menu_items +{ + local function_arguments=($@) + + local selected_item="$1" + local menu_items=(${function_arguments[@]:1}) + local menu_size="${#menu_items[@]}" + + for (( i = 0; i < $menu_size; ++i )) + do + if [ "$i" = "$selected_item" ] + then + echo -e "\033[1;34m > \033[0m\e[1m${menu_items[i]}\033[0m" + else + echo " ${menu_items[i]}" + fi + done +} + +function run_menu() # selected_item, ...menu_items +{ + local function_arguments=($@) + + local selected_item="$1" + local menu_items=(${function_arguments[@]:1}) + local menu_size="${#menu_items[@]}" + local menu_limit=$((menu_size - 1)) + + print_menu "$selected_item" "${menu_items[@]}" + + while read -rsn1 input + do + case "$input" + in + $'\x1B') # ESC ASCII code (https://dirask.com/posts/ASCII-Table-pJ3Y0j) + read -rsn1 -t 0.1 input + if [ "$input" = "[" ] # occurs before arrow code + then + read -rsn1 -t 0.1 input + case "$input" + in + A) # Up Arrow + if [ "$selected_item" -ge 1 ] + then + selected_item=$((selected_item - 1)) + echo -en "\033[s\033[${menu_size}A" + print_menu "$selected_item" "${menu_items[@]}" + echo -en "\033[u\033[0m" + fi + ;; + B) # Down Arrow + if [ "$selected_item" -lt "$menu_limit" ] + then + selected_item=$((selected_item + 1)) + echo -en "\033[s\033[${menu_size}A" + print_menu "$selected_item" "${menu_items[@]}" + echo -en "\033[u\033[0m" + fi + ;; + esac + fi + read -rsn5 -t 0.1 # flushing stdin + ;; + "") # Enter key + return "$selected_item" + ;; + esac + done +} + + +# Usage example: + +selected_item=0 +menu_items=("Stephan Stanisic " + "Stephan Stanisic " + "Stephan Stanisic " + "Steph ") + +run_menu "$selected_item" "${menu_items[@]}" +menu_result="$?" + +echo + +sel=${menu_items[$menu_result]} + +name=$(echo $sel | cut -d \< -f 1 | head -c -2) +email=$(echo $sel | cut -d \< -f 2 | head -c -2) + +echo "Setting username to $name and email to $email" + +git config user.email "$email" +git config user.name "$name" + diff --git a/home.nix b/home.nix index f200d20..cda5a84 100644 --- a/home.nix +++ b/home.nix @@ -42,7 +42,6 @@ vscodium wget zip - coreutils # fonts (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" ]; }) @@ -53,5 +52,10 @@ google-fonts vistafonts ]; + + home.file.".local/bin/git-identity" = { + executable = true; + source = "${./git-identity.sh}"; + }; }; } \ No newline at end of file diff --git a/nixos.nix b/nixos.nix index 7cbea58..4164be3 100644 --- a/nixos.nix +++ b/nixos.nix @@ -85,6 +85,7 @@ virtualisation.podman.enable = true; virtualisation.docker.enable = true; + environment.localBinInPath = true; environment.systemPackages = with pkgs; [ fprintd libfprint-2-tod1-vfs0090 diff --git a/platforms/linux/home.nix b/platforms/linux/home.nix index 0eb9cfd..297ba45 100644 --- a/platforms/linux/home.nix +++ b/platforms/linux/home.nix @@ -78,7 +78,6 @@ "signal-desktop.desktop" "element-desktop.desktop" "org.telegram.desktop.desktop" - "im.dino.Dino.desktop" ]; }; "org/gnome/desktop/background" = { diff --git a/programs/bash.nix b/programs/bash.nix index cf0f122..66bad34 100644 --- a/programs/bash.nix +++ b/programs/bash.nix @@ -47,5 +47,6 @@ $NEW_PROMPT_COMMAND" programs.bash.sessionVariables = { NIX_SHELL_PRESERVE_PROMPT = 1; NIXPKGS_ALLOW_UNFREE = 1; + HISTCONTROL = "ignoreboth:erasedups"; }; } \ No newline at end of file diff --git a/programs/git-identity.nix b/programs/git-identity.nix new file mode 100644 index 0000000..6080a18 --- /dev/null +++ b/programs/git-identity.nix @@ -0,0 +1,115 @@ +{ pkgs, lib, config, specialArgs, options, modulesPath }: + +with pkgs; + +let + + git-identity = (writeShellApplication { + name = "git-identity"; + text = '' +#!/usr/bin/env bash + +IFS="" + +function print_menu() # selected_item, ...menu_items +{ + local function_arguments=("''$@") + + local selected_item="''$1" + local menu_items=("''${function_arguments[@]:1}") + local menu_size="''${#menu_items[@]}" + + for (( i = 0; i < menu_size; ++i )) + do + if [ "''$i" = "''$selected_item" ] + then + echo -e "\033[1;34m > \033[0m\e[1m''${menu_items[i]}\033[0m" + else + echo " ''${menu_items[i]}" + fi + done +} + +function run_menu() # selected_item, ...menu_items +{ + local function_arguments=("''$@") + + local selected_item="''$1" + local menu_items=("''${function_arguments[@]:1}") + local menu_size="''${#menu_items[@]}" + local menu_limit=''$((menu_size - 1)) + + print_menu "''$selected_item" "''${menu_items[@]}" + + while read -rsn1 input + do + case "''$input" + in + ''$'\x1B') # ESC ASCII code (https://dirask.com/posts/ASCII-Table-pJ3Y0j) + read -rsn1 -t 0.1 input + if [ "''$input" = "[" ] # occurs before arrow code + then + read -rsn1 -t 0.1 input + case "''$input" + in + A) # Up Arrow + if [ "''$selected_item" -ge 1 ] + then + selected_item=''$((selected_item - 1)) + echo -en "\033[s\033[''${menu_size}A" + print_menu "''$selected_item" "''${menu_items[@]}" + echo -en "\033[u\033[0m" + fi + ;; + B) # Down Arrow + if [ "''$selected_item" -lt "''$menu_limit" ] + then + selected_item=''$((selected_item + 1)) + echo -en "\033[s\033[''${menu_size}A" + print_menu "''$selected_item" "''${menu_items[@]}" + echo -en "\033[u\033[0m" + fi + ;; + esac + fi + read -rsn5 -t 0.1 # flushing stdin + ;; + "") # Enter key + echo "enter key" + return "''$selected_item" + ;; + esac + done +} + + +# Usage example: + +selected_item=0 +menu_items=("Stephan Stanisic " + "Stephan Stanisic " + "Stephan Stanisic " + "Steph ") + +run_menu "''$selected_item" "''${menu_items[@]}" +menu_result="''$?" + +echo + +sel=''${menu_items[''$menu_result]} + +name=''$(echo "''$sel" | cut -d \< -f 1 | head -c -2) +email=''$(echo "''$sel" | cut -d \< -f 2 | head -c -2) + +echo "Setting username to ''$name and email to ''$email" + +git config user.email "''$email" +git config user.name "''$name" + + ''; + }); + +in +{ + environment.systemPackages = [ git-identity ]; +}