diff --git a/modules/home/scripts/commands/icanhazip.nix b/modules/home/scripts/commands/icanhazip.nix index 2580b88..ec5d536 100644 --- a/modules/home/scripts/commands/icanhazip.nix +++ b/modules/home/scripts/commands/icanhazip.nix @@ -1,6 +1,23 @@ { pkgs }: -pkgs.writeShellScriptBin "icanhazip" '' - echo "Public IP: $(curl -s icanhazip.com -4)" - ip route | awk '/default/ {print "Default Gateway: " $3} /src/ {print "Local IP: " $9}' | head -n 2 -'' +pkgs.writeShellApplication { + name = "icanhazip"; + runtimeInputs = with pkgs; [ + iproute2 + curl + gawk + coreutils + ]; + text = '' + if [ $# -eq 0 ]; then + echo "Public IP: $(curl -s icanhazip.com -4)" + ip route | awk '/default/ {print "Default Gateway: " $3} /src/ {print "Local IP: " $9}' | head -n 2 + else case $1 in + "-p" ) echo "Public IP: $(curl -s icanhazip.com -4)";; + "-d" ) ip route | awk '/default/ {print $3}';; + "-l" ) ip route | awk '/src/ {print $9}';; + * ) echo "Options: -p, -d or -l for public ip, default gateway, and local ip respectively"; echo "i.e. icanhazip -p" + esac + fi + ''; +} diff --git a/modules/home/scripts/commands/invoke.nix b/modules/home/scripts/commands/invoke.nix index 8fad057..7febc0c 100755 --- a/modules/home/scripts/commands/invoke.nix +++ b/modules/home/scripts/commands/invoke.nix @@ -1,9 +1,11 @@ { - self, - pkgs, + pkgs }: -pkgs.writeShellScriptBin "invoke" '' - cmd="$1" - shift - nix run nixpkgs#"$cmd" -- "$@" -'' +pkgs.writeShellApplication { + name = "invoke"; + text = '' + cmd="$1" + shift + nix run nixpkgs#"$cmd" -- "$@" + ''; +} diff --git a/modules/home/scripts/commands/mkbackup.nix b/modules/home/scripts/commands/mkbackup.nix deleted file mode 100644 index c576053..0000000 --- a/modules/home/scripts/commands/mkbackup.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ pkgs }: - -pkgs.writeShellScriptBin "mkbackup" '' -if ! findmnt | grep share; then - echo "Mounting shared filesystem..." - if ! sshfs pagedmov@192.168.1.200:/home/pagedmov/share $HOME/share; then - echo "failed to mount shared storage to $HOME/share" >&2 - exit 1 - fi - echo "Done" -fi - -echo "Copying files..." -if printf '%s\0' "$@" | xargs -0 -I {} cp {} -v "$HOME/share"; then - echo "Done" -else - echo "Failed to copy files to shared directory." - exit 1 -fi - -echo "Moving files to backup folder on serverside..." -if ssh pagedmov@192.168.1.200 "IFS=' ' read -rA files <<< \"$@\"; for file in \''${files[@]}; do echo -n \"\$(whoami)@\$(hostname): \"; mv -v ~/share/\"\$file\" ~/backup; done"; then - echo "Backup completed." - umount $HOME/share -else - echo "Failed to move files on serverside. Unmounting shared filesystem." - umount $HOME/share - exit 1 -fi -'' diff --git a/modules/home/scripts/commands/runbg.nix b/modules/home/scripts/commands/runbg.nix index eed6626..54cc5b7 100755 --- a/modules/home/scripts/commands/runbg.nix +++ b/modules/home/scripts/commands/runbg.nix @@ -1,22 +1,29 @@ { - self, pkgs, }: -pkgs.writeShellScriptBin "runbg" '' - #!/usr/bin/env bash +pkgs.writeShellApplication { + name = "runbg"; + runtimeInputs = with pkgs; [ + coreutils # Provides `basename`, `which`, etc. + bash # Provides the Bash shell + util-linux # Provides `tty` + ]; + text = '' + #!/usr/bin/env bash - [ $# -eq 0 ] && { # $# is number of args - echo "$(basename $0): missing command" >&2 - exit 1 - } - prog="$(which "$1")" # see below - [ -z "$prog" ] && { - echo "$(basename $0): unknown command: $1" >&2 - exit 1 - } - shift # remove $1, now $prog, from args - tty -s && exec /dev/null # if stdout is a terminal, redirect to null - tty -s <&2 && exec 2>&1 # stderr to stdout (which might not be null) - "$prog" "$@" & # $@ is all args -'' + [ $# -eq 0 ] && { # $# is number of args + echo "$(basename "$0"): missing command" >&2 + exit 1 + } + prog="$(which "$1")" # see below + [ -z "$prog" ] && { + echo "$(basename "$0"): unknown command: $1" >&2 + exit 1 + } + shift # remove $1, now $prog, from args + tty -s && exec /dev/null # if stdout is a terminal, redirect to null + tty -s <&2 && exec 2>&1 # stderr to stdout (which might not be null) + "$prog" "$@" & # $@ is all args + ''; +} diff --git a/modules/home/scripts/commands/splash.nix b/modules/home/scripts/commands/splash.nix index 8c1b412..7b15b5d 100755 --- a/modules/home/scripts/commands/splash.nix +++ b/modules/home/scripts/commands/splash.nix @@ -1,13 +1,18 @@ { - self, - pkgs, + pkgs }: -pkgs.writeShellScriptBin "splash" '' - #!/bin/bash - - echo "NixOS kernel ver. $(uname -a | awk '{print $3}') x86_64 GNU/Linux" - date +"%A %B %-d %Y" - echo - echo " NixOS" | toilet -f 3d | lolcat -S 25 - echo -'' +pkgs.writeShellApplication { + name = "splash"; + runtimeInputs = with pkgs; [ + lolcat + toilet + coreutils + ]; + text = '' + echo "NixOS kernel ver. $(uname -a | awk '{print $3}') x86_64 GNU/Linux" + date +"%A %B %-d %Y" + echo + echo " NixOS" | toilet -f 3d | lolcat -S 25 + echo + ''; +} diff --git a/modules/home/scripts/commands/toolbelt.nix b/modules/home/scripts/commands/toolbelt.nix index bf52ab8..37dcc43 100755 --- a/modules/home/scripts/commands/toolbelt.nix +++ b/modules/home/scripts/commands/toolbelt.nix @@ -1,81 +1,95 @@ -{pkgs, ...}: -pkgs.writeShellScriptBin "toolbelt" '' - cliphistory() { - selection=$(cliphist list | fzf --preview=" - index=\$(echo {} | awk '{print \$1}'); \ - mime=\$(cliphist decode \$index | file -i -); \ - if echo \"\$mime\" | grep -q 'image'; then \ - echo \$(cliphist list | rg \"^\$index\" | cut -d ' ' -f 2- | fmt -w 30); \ - else \ - cliphist decode \"\$index\" | fmt -w 30; \ - fi" --prompt="> " | awk '{print $1}') - [ -z "$selection" ] && return 1 - cliphist decode "$selection" | wl-copy - } - btop_cmd() { - local hostname=$(cat /etc/hostname) - if [ "$hostname" = "oganesson" ]; then - hyprctl dispatch resizeactive 20% 155% && - moveonscreen --center && - btop && - hyprctl dispatch resizeactive exact 40% 25% && - moveonscreen - else - hyprctl dispatch resizeactive exact 60% 68% && - moveonscreen --center && - btop && - hyprctl dispatch resizeactive exact 40% 25% && - moveonscreen - fi - } +{pkgs}: +pkgs.writeShellApplication { + name = "toolbelt"; + runtimeInputs = with pkgs; [ + cliphist + fzf + ripgrep + gawk + wl-clipboard + hyprland + alsa-utils + btop + coreutils + ]; + text = '' + cliphistory() { + selection=$(cliphist list | fzf --preview=" + index=\$(echo {} | awk '{print \$1}'); \ + mime=\$(cliphist decode \$index | file -i -); \ + if echo \"\$mime\" | grep -q 'image'; then \ + echo \$(cliphist list | rg \"^\$index\" | cut -d ' ' -f 2- | fmt -w 30); \ + else \ + cliphist decode \"\$index\" | fmt -w 30; \ + fi" --prompt="> " | awk '{print $1}') + [ -z "$selection" ] && return 1 + cliphist decode "$selection" | wl-copy + } + btop_cmd() { - running=true + if [ "$(cat /etc/hostname)" = "oganesson" ]; then + hyprctl dispatch resizeactive 20% 155% && + moveonscreen --center && + btop && + hyprctl dispatch resizeactive exact 40% 25% && + moveonscreen + else + hyprctl dispatch resizeactive exact 60% 68% && + moveonscreen --center && + btop && + hyprctl dispatch resizeactive exact 40% 25% && + moveonscreen + fi + } - declare -A commands=( - ["Change Wallpaper"]="moveonscreen --center && if chpaper; then running=false; else moveonscreen; fi" - ["Change System Color Scheme"]="hyprctl dispatch resizeactive 10% 80% && moveonscreen --center && if chscheme; then running=false; else hyprctl dispatch resizeactive exact 40% 25% && moveonscreen; fi" - ["Open System Monitor"]="btop_cmd" - ["Open Volume Controls"]="hyprctl dispatch resizeactive 10% 80% && moveonscreen --center && alsamixer && hyprctl dispatch resizeactive exact 40% 25% && moveonscreen" - ["Open Keyring"]="hyprctl dispatch resizeactive -300 0 && moveonscreen && if keyring; then running=false; else hyprctl dispatch resizeactive exact 40% 25% && moveonscreen; fi" - ["View Clipboard History"]="hyprctl dispatch resizeactive 45% 120% && moveonscreen --center && if cliphistory;then running=false; else hyprctl dispatch resizeactive exact 40% 25% && moveonscreen; fi" - ) + running=true - ordered_commands=( - "Open Keyring" - "Open System Monitor" - "Open Volume Controls" - "Change Wallpaper" - "Change System Color Scheme" - "View Clipboard History" - ) + declare -A commands=( + ["Change Wallpaper"]="moveonscreen --center && if chpaper; then running=false; else moveonscreen; fi" + ["Change System Color Scheme"]="hyprctl dispatch resizeactive 10% 80% && moveonscreen --center && if chscheme; then running=false; else hyprctl dispatch resizeactive exact 40% 25% && moveonscreen; fi" + ["Open System Monitor"]="btop_cmd" + ["Open Volume Controls"]="hyprctl dispatch resizeactive 10% 80% && moveonscreen --center && alsamixer && hyprctl dispatch resizeactive exact 40% 25% && moveonscreen" + ["Open Keyring"]="hyprctl dispatch resizeactive -300 0 && moveonscreen && if keyring; then running=false; else hyprctl dispatch resizeactive exact 40% 25% && moveonscreen; fi" + ["View Clipboard History"]="hyprctl dispatch resizeactive 45% 120% && moveonscreen --center && if cliphistory;then running=false; else hyprctl dispatch resizeactive exact 40% 25% && moveonscreen; fi" + ) - # Use fzf to select a command with preview - while $running; do - selected_command=$(printf "%s\n" "''${ordered_commands[@]}" | fzf --preview=" - cleaned_key=\$(echo {} | tr -d \"'\"); \ - echo \"Cleaned key: \$cleaned_key\"; \ - declare -A descriptions=( - [\"Change Wallpaper\"]=\"Choose a wallpaper to switch to from the assets/wallpapers folder in the system flake directory. Requires rebuilding the system and restarting hyprpaper.\" - [\"Change System Color Scheme\"]=\"Changes the base16 color scheme used by stylix to color system applications.\" - [\"Open System Monitor\"]=\"Opens a btop window.\" - [\"Open Volume Controls\"]=\"Opens alsamixer.\" - [\"Open Keyring\"]=\"Opens a fuzzy finder with all of the paths held in ~/.password-store. Selecting one uses pass to copy that password to the clipboard. Password is cleared from clipboard after 45 seconds, and isn't saved to clipboard history.\" - [\"View Clipboard History\"]=\"Opens clipboard history. Selecting an item copies it to the clipboard.\" - ); \ - if [[ -v descriptions[\$cleaned_key] ]]; then \ - clear; \ - echo \''${descriptions[\$cleaned_key]} | fmt -w 28; \ - else \ - clear; \ - echo \"No description available\"; \ - fi" --prompt="> ") + ordered_commands=( + "Open Keyring" + "Open System Monitor" + "Open Volume Controls" + "Change Wallpaper" + "Change System Color Scheme" + "View Clipboard History" + ) + + # Use fzf to select a command with preview + while $running; do + selected_command=$(printf "%s\n" "''${ordered_commands[@]}" | fzf --preview=" + cleaned_key=\$(echo {} | tr -d \"'\"); \ + echo \"Cleaned key: \$cleaned_key\"; \ + declare -A descriptions=( + [\"Change Wallpaper\"]=\"Choose a wallpaper to switch to from the assets/wallpapers folder in the system flake directory. Requires rebuilding the system and restarting hyprpaper.\" + [\"Change System Color Scheme\"]=\"Changes the base16 color scheme used by stylix to color system applications.\" + [\"Open System Monitor\"]=\"Opens a btop window.\" + [\"Open Volume Controls\"]=\"Opens alsamixer.\" + [\"Open Keyring\"]=\"Opens a fuzzy finder with all of the paths held in ~/.password-store. Selecting one uses pass to copy that password to the clipboard. Password is cleared from clipboard after 45 seconds, and isn't saved to clipboard history.\" + [\"View Clipboard History\"]=\"Opens clipboard history. Selecting an item copies it to the clipboard.\" + ); \ + if [[ -v descriptions[\$cleaned_key] ]]; then \ + clear; \ + echo \''${descriptions[\$cleaned_key]} | fmt -w 28; \ + else \ + clear; \ + echo \"No description available\"; \ + fi" --prompt="> ") - #Execute the selected command if selection is not empty - if [[ -n $selected_command ]]; then - eval "''${commands[$selected_command]}" - else - running=false - fi - done -'' + #Execute the selected command if selection is not empty + if [[ -n $selected_command ]]; then + eval "''${commands[$selected_command]}" + else + running=false + fi + done + ''; +} diff --git a/modules/home/scripts/commands/viconf.nix b/modules/home/scripts/commands/viconf.nix index 4861803..92b9858 100755 --- a/modules/home/scripts/commands/viconf.nix +++ b/modules/home/scripts/commands/viconf.nix @@ -1,22 +1,31 @@ {pkgs}: -pkgs.writeShellScriptBin "viconf" '' - #!/usr/bin/env bash +pkgs.writeShellApplication { + name = "viconf"; + runtimeInputs = with pkgs; [ + coreutils + fd + ripgrep + fzf + ]; + text = '' + #!/usr/bin/env bash - [ ! $# -eq 1 ] && echo "Usage: viconf <*.nix>" && exit 1 + [ ! $# -eq 1 ] && echo "Usage: viconf <*.nix>" && exit 1 - results=$(find "$FLAKEPATH" -wholename "*$1*" -exec find {} \; | sort | uniq | rg '\.nix$') - numresults=$(echo "$results" | wc -l) + results=$(find "$FLAKEPATH" -wholename "*$1*" -exec find {} \; | sort | uniq | rg '\.nix$') + numresults=$(echo "$results" | wc -l) - [ "$numresults" -eq 0 ] && echo "$1 not found in \$FLAKEPATH" && exit 1 + [ "$numresults" -eq 0 ] && echo "$1 not found in \$FLAKEPATH" && exit 1 - if [ "$numresults" -gt 1 ]; then - # cut up the paths to give shorter path names to fuzzy finder - results_prefix=$(echo "$results" | tail -n 1 | cut -d'/' -f-3) - results=$(echo "$results" | cut -d'/' -f4-) - results=$(echo "$results" | grep "$1") + if [ "$numresults" -gt 1 ]; then + # cut up the paths to give shorter path names to fuzzy finder + results_prefix=$(echo "$results" | tail -n 1 | cut -d'/' -f-3) + results=$(echo "$results" | cut -d'/' -f4-) + results=$(echo "$results" | grep "$1") - echo "$results" | tr ' ' '\n' | fzf | xargs -I {} nvim "$results_prefix"/{} - else - nvim "$results" - fi -'' + echo "$results" | tr ' ' '\n' | fzf | xargs -I {} nvim "$results_prefix"/{} + else + nvim "$results" + fi + ''; +} diff --git a/modules/home/scripts/default.nix b/modules/home/scripts/default.nix index d7db7d6..d6c5691 100755 --- a/modules/home/scripts/default.nix +++ b/modules/home/scripts/default.nix @@ -6,16 +6,15 @@ pkgs, ... }: let - keyring = import ./wm-controls/keyring.nix { inherit self pkgs; }; - invoke = import ./commands/invoke.nix { inherit self pkgs; }; - splash = import ./commands/splash.nix { inherit self pkgs; }; - runbg = import ./commands/runbg.nix { inherit self pkgs; }; - mkbackup = import ./commands/mkbackup.nix { inherit pkgs; }; + keyring = import ./wm-controls/keyring.nix { inherit pkgs; }; + invoke = import ./commands/invoke.nix { inherit pkgs; }; + splash = import ./commands/splash.nix { inherit pkgs; }; + runbg = import ./commands/runbg.nix { inherit pkgs; }; icanhazip = import ./commands/icanhazip.nix { inherit pkgs; }; - garbage-collect = import ./nix/garbage-collect.nix { inherit self pkgs; }; - nsp = import ./nix/nsp.nix { inherit self pkgs; }; - scheck = import ./wm-controls/s_check.nix { inherit self pkgs; }; - switchmon = import ./wm-controls/switchmon.nix { inherit self pkgs; }; + garbage-collect = import ./nix/garbage-collect.nix { inherit pkgs; }; + nsp = import ./nix/nsp.nix { inherit pkgs; }; + scheck = import ./wm-controls/s_check.nix { inherit pkgs; }; + switchmon = import ./wm-controls/switchmon.nix { inherit pkgs; }; rebuild = import ./nix/rebuild.nix { inherit host self pkgs; }; moveonscreen = import ./wm-controls/moveonscreen.nix { inherit pkgs; }; toolbelt = import ./commands/toolbelt.nix { inherit pkgs; }; @@ -44,8 +43,6 @@ in { lib.mkEnableOption "Enables all Nix shortcut scripts"; # Individual options using scriptOverride or mkEnableOption directly - movScripts.commandScripts.mkbackup.enable = - scriptOverride "Enables the mkbackup command" "commandScripts" "mkbackup"; movScripts.commandScripts.icanhazip.enable = scriptOverride "Enables the icanhazip command" "commandScripts" "icanhazip"; movScripts.commandScripts.invoke.enable = @@ -86,7 +83,6 @@ in { config = lib.mkIf config.movScripts.enable { home.packages = lib.optionals config.movScripts.commandScripts.invoke.enable [ invoke ] ++ lib.optionals config.movScripts.commandScripts.runbg.enable [ runbg ] - ++ lib.optionals config.movScripts.commandScripts.mkbackup.enable [ mkbackup ] ++ lib.optionals config.movScripts.commandScripts.icanhazip.enable [ icanhazip ] ++ lib.optionals config.movScripts.commandScripts.splash.enable [ splash ] ++ lib.optionals config.movScripts.commandScripts.toolbelt.enable [ toolbelt ] diff --git a/modules/home/scripts/nix/garbage-collect.nix b/modules/home/scripts/nix/garbage-collect.nix index 2273c76..7b09257 100755 --- a/modules/home/scripts/nix/garbage-collect.nix +++ b/modules/home/scripts/nix/garbage-collect.nix @@ -1,41 +1,52 @@ { - self, - pkgs, + pkgs }: -pkgs.writeShellScriptBin "garbage-collect" '' - #!/run/current-system/sw/bin/bash +pkgs.writeShellApplication { + name = "garbage-collect"; + runtimeInputs = with pkgs; [ + bash + coreutils + gnugrep + bc + alsa-utils + findutils + nix + ]; + text = '' + #!/run/current-system/sw/bin/bash - echo "This will delete all unused paths in the nix store and delete any files in the gtrash folder." - echo -e "\033[1;4;38;2;243;139;168mThis process is irreversible.\033[0m Are you sure?" - select yn in "Yes" "No"; do - case $yn in - Yes ) echo "Sweeping system..."; scheck && runbg aplay "$HOME/assets/sound/sys/collectgarbage.wav"; break;; - No ) echo "Canceling garbage collection."; return;; - esac - done + echo "This will delete all unused paths in the nix store and delete any files in the gtrash folder." + echo -e "\033[1;4;38;2;243;139;168mThis process is irreversible.\033[0m Are you sure?" + select yn in "Yes" "No"; do + case $yn in + Yes ) echo "Sweeping system..."; scheck && runbg aplay "$HOME/assets/sound/sys/collectgarbage.wav"; break;; + No ) echo "Canceling garbage collection."; return;; + esac + done - output=$(nix-collect-garbage | tee /dev/tty) - nix_freed=$(echo "$output" | grep -oP '\d+(\.\d+)? MiB freed' | cut -d' ' -f1) + output=$(nix-collect-garbage | tee /dev/tty) + nix_freed=$(echo "$output" | grep -oP '\d+(\.\d+)? MiB freed' | cut -d' ' -f1) - # Get the size of the trash folder before deleting - if [ "$(ls -A ~/.local/share/Trash/files/ 2>/dev/null)" ]; then - rm_freed=$(du -sm ~/.local/share/Trash/files | awk '{print $1}') - /run/current-system/sw/bin/rm -rfv ~/.local/share/Trash/files/* # Verbose output - mkdir -p ~/.local/share/Trash/files - else - rm_freed="0" - fi + # Get the size of the trash folder before deleting + if [ "$(ls -A ~/.local/share/Trash/files/ 2>/dev/null)" ]; then + rm_freed=$(du -sm ~/.local/share/Trash/files | awk '{print $1}') + /run/current-system/sw/bin/rm -rfv ~/.local/share/Trash/files/* # Verbose output + mkdir -p ~/.local/share/Trash/files + else + rm_freed="0" + fi - total_freed=$(echo "$nix_freed + $rm_freed" | bc) + total_freed=$(echo "$nix_freed + $rm_freed" | bc) - units=("MB" "GB" "TB" "PB") - divisions=0 - while [ "$(echo "$total_freed >= 1024.0" | bc -l)" -eq 1 ]; do - total_freed=$(echo "scale=2; $total_freed / 1024" | bc -l) - divisions=$((divisions + 1)) - done + units=("MB" "GB" "TB" "PB") + divisions=0 + while [ "$(echo "$total_freed >= 1024.0" | bc -l)" -eq 1 ]; do + total_freed=$(echo "scale=2; $total_freed / 1024" | bc -l) + divisions=$((divisions + 1)) + done - echo -e "System cleaning complete, freed \033[1;4;38;2;166;227;161m$total_freed ''${units[$divisions]}\033[0m in total" + echo -e "System cleaning complete, freed \033[1;4;38;2;166;227;161m$total_freed ''${units[$divisions]}\033[0m in total" - scheck && runbg aplay "$HOME/assets/sound/sys/rm.wav" -'' + scheck && runbg aplay "$HOME/assets/sound/sys/rm.wav" + ''; +} diff --git a/modules/home/scripts/nix/nsp.nix b/modules/home/scripts/nix/nsp.nix index 8e07916..d514247 100755 --- a/modules/home/scripts/nix/nsp.nix +++ b/modules/home/scripts/nix/nsp.nix @@ -1,9 +1,11 @@ { - self, - pkgs, + pkgs }: -pkgs.writeShellScriptBin "nsp" '' - #!/run/current-system/sw/bin/bash +pkgs.writeShellApplication { + name = "nsp"; + text = '' + #!/run/current-system/sw/bin/bash - nix-shell -p "$@" --run zsh -'' + nix-shell -p "$@" --run zsh + ''; +} diff --git a/modules/home/scripts/nix/rebuild.nix b/modules/home/scripts/nix/rebuild.nix index df8580a..06f863f 100755 --- a/modules/home/scripts/nix/rebuild.nix +++ b/modules/home/scripts/nix/rebuild.nix @@ -3,16 +3,16 @@ self, pkgs, }: -pkgs.writeShellScriptBin "rebuild" '' - #!/run/current-system/sw/bin/bash - - scheck && runbg aplay ${self}/assets/sound/nixswitch-start.wav - set -e - nh os switch -H ${host} $HOME/.sysflake - sudo nixos-rebuild switch --flake "$HOME/.sysflake#${host}" - if [ $? -eq 0 ]; then - scheck && runbg aplay ${self}/assets/sound/update.wav - else - scheck && runbg aplay ${self}/assets/sound/error.wav - fi -'' +pkgs.writeShellApplication { + name = "rebuild"; + text = '' + scheck && runbg aplay ${self}/assets/sound/nixswitch-start.wav + set -e + nh os switch -H ${host} "$HOME"/.sysflake + if sudo nixos-rebuild switch --flake "$HOME/.sysflake#${host}"; then + scheck && runbg aplay ${self}/assets/sound/update.wav + else + scheck && runbg aplay ${self}/assets/sound/error.wav + fi + ''; +} diff --git a/modules/home/scripts/wm-controls/chpaper.nix b/modules/home/scripts/wm-controls/chpaper.nix index 82aa49b..1188f66 100755 --- a/modules/home/scripts/wm-controls/chpaper.nix +++ b/modules/home/scripts/wm-controls/chpaper.nix @@ -1,15 +1,25 @@ {pkgs}: -pkgs.writeShellScriptBin "chpaper" '' - paper="$\{self}/assets/wallpapers/$(find "$FLAKEPATH"/assets/wallpapers -exec basename {} \; | rg "\.\w+$" | fzf --preview "chafa -s 30x40 $FLAKEPATH/assets/wallpapers/{}")" - [ "$paper" = "$\{self}/assets/wallpapers/" ] && echo "Cancelling wallpaper change" && exit 1 - echo "$paper" | xargs -I {} sed -i '/wallpaper =/s|"[^"]*"|"{}"|' "$FLAKEPATH"/modules/sys/environment/stylix.nix - echo "Successfully changed wallpaper. Rebuild now?" && \ - select choice in "Yes" "No"; do - case $choice in - "Yes") - rebuild;systemctl --user restart hyprpaper;exit 0;; - "No") - echo "Exiting...";exit 0;; - esac - done -'' +pkgs.writeShellApplication { + name = "chpaper"; + runtimeInputs = with pkgs; [ + chafa + fzf + ripgrep + findutils + coreutils + ]; + text = '' + paper="$\{self}/assets/wallpapers/$(find "$FLAKEPATH"/assets/wallpapers -exec basename {} \; | rg "\.\w+$" | fzf --preview "chafa -s 30x40 $FLAKEPATH/assets/wallpapers/{}")" + [ "$paper" = "$\{self}/assets/wallpapers/" ] && echo "Cancelling wallpaper change" && exit 1 + echo "$paper" | xargs -I {} sed -i '/wallpaper =/s|"[^"]*"|"{}"|' "$FLAKEPATH"/modules/sys/environment/stylix.nix + echo "Successfully changed wallpaper. Rebuild now?" && \ + select choice in "Yes" "No"; do + case $choice in + "Yes") + rebuild;systemctl --user restart hyprpaper;exit 0;; + "No") + echo "Exiting...";exit 0;; + esac + done + ''; +} diff --git a/modules/home/scripts/wm-controls/chscheme.nix b/modules/home/scripts/wm-controls/chscheme.nix index b9df5bd..e3219a5 100755 --- a/modules/home/scripts/wm-controls/chscheme.nix +++ b/modules/home/scripts/wm-controls/chscheme.nix @@ -1,40 +1,46 @@ -{pkgs}: -pkgs.writeShellScriptBin "chscheme" '' - selected_scheme=$(/usr/bin/env ls "$(nix-build '' -A base16-schemes)"/share/themes | \ - sed 's/\.yaml//g' | \ - fzf --preview 'cat $(nix-build "" -A base16-schemes)/share/themes/{}.yaml | \ - while IFS=": " read -r key value; do \ - if [[ $key =~ base0[0-9A-F] ]]; then \ - clean_value=$(echo $value | tr -d "\""); \ - r=$((16#''${clean_value:0:2})); \ - g=$((16#''${clean_value:2:2})); \ - b=$((16#''${clean_value:4:2})); \ - printf "\033[48;2;%d;%d;%dm %-20s %s \033[0m\n" $r $g $b $key $clean_value; \ - fi; \ - done') +{ pkgs }: +pkgs.writeShellApplication { + name = "chscheme"; + runtimeInputs = with pkgs; [ + fzf + coreutils + ]; + text = '' + selected_scheme=$(/usr/bin/env ls "$(nix-build '' -A base16-schemes)"/share/themes | \ + sed 's/\.yaml//g' | \ + fzf --preview "cat \"$(nix-build '' -A base16-schemes)/share/themes/{}.yaml\" | \ + while IFS=\": \" read -r key value; do \ + if [[ \$key =~ base0[0-9A-F] ]]; then \ + clean_value=\$(echo \"\$value\" | tr -d '\"'); \ + r=\$((16#\''${clean_value:0:2})); \ + g=\$((16#\''${clean_value:2:2})); \ + b=\$((16#\''${clean_value:4:2})); \ + printf \"\\033[48;2;%d;%d;%dm %-20s %s \\033[0m\\n\" \$r \$g \$b \$key \$clean_value; \ + fi; \ + done") - if [[ -z "$selected_scheme" ]]; then - echo "Aborting color scheme change." - exit 1 - fi + if [[ -z "$selected_scheme" ]]; then + echo "Aborting color scheme change." + exit 1 + fi - echo "$selected_scheme" | xargs -I {} sed -i '/^[[:space:]]*scheme\s*=\s*"/s/"[^"]*"/"{}"/' "$FLAKEPATH"/modules/sys/environment/stylix.nix - if [ $? -ne 0 ]; then - echo "Failed to change color scheme." - exit 1 - fi + if ! echo "$selected_scheme" | xargs -I {} sed -i '/^[[:space:]]*scheme\s*=\s*"/s/"[^"]*"/"{}"/' "$FLAKEPATH"/modules/sys/environment/stylix.nix; then + echo "Failed to change color scheme." + exit 1 + fi - echo "Successfully changed system color scheme. Rebuild now?" - select choice in "Yes" "No"; do - case $choice in - "Yes") - rebuild - exit 0 - ;; - "No") - echo "Exiting..." - exit 0 - ;; - esac - done -'' + echo "Successfully changed system color scheme. Rebuild now?" + select choice in "Yes" "No"; do + case $choice in + "Yes") + rebuild + exit 0 + ;; + "No") + echo "Exiting..." + exit 0 + ;; + esac + done + ''; +} diff --git a/modules/home/scripts/wm-controls/keyring.nix b/modules/home/scripts/wm-controls/keyring.nix index ebd6960..1965fd3 100755 --- a/modules/home/scripts/wm-controls/keyring.nix +++ b/modules/home/scripts/wm-controls/keyring.nix @@ -1,35 +1,42 @@ { - self, - pkgs, - ... + pkgs }: -pkgs.writeShellScriptBin "keyring" '' - #!/run/current-system/sw/bin/bash +pkgs.writeShellApplication { + name = "keyring"; + runtimeInputs = with pkgs; [ + pass + findutils + ripgrep + fzf + wl-clipboard + coreutils + ]; + text = '' + #!/run/current-system/sw/bin/bash - # prevent multiple instances, conditional check happens in the hyprland bind - touch /tmp/keyringfile - trap "[ -f /tmp/keyringfile ] && /run/current-system/sw/bin/rm /tmp/keyringfile" EXIT SIGHUP SIGINT + # prevent multiple instances, conditional check happens in the hyprland bind + touch /tmp/keyringfile + trap "[ -f /tmp/keyringfile ] && /run/current-system/sw/bin/rm /tmp/keyringfile" EXIT SIGHUP SIGINT - # get passwords from password store, remove .password store/ prefix and .gpg suffix, exlude .gpg-id file, open results in fzf - pass_string=$(find $HOME/.password-store -type f | sed 's|.*/.password-store/||; s|\.gpg$||' | sed 's|^\([^/]*\)|\x1b[32m\1\x1b[0m|' | rg -v "\.git|.gpg-id" | sort -r | fzf --border --border-label="$(whoami)'s keyring" --ansi --layout=reverse) + # get passwords from password store, remove .password store/ prefix and .gpg suffix, exlude .gpg-id file, open results in fzf + pass_string=$(find "$HOME"/.password-store -type f | sed 's|.*/.password-store/||; s|\.gpg$||' | sed 's|^\([^/]*\)|\x1b[32m\1\x1b[0m|' | rg -v "\.git|.gpg-id" | sort -r | fzf --border --border-label="$(whoami)'s keyring" --ansi --layout=reverse) - [ $? = 0 ] || { [ -f /tmp/keyringfile ] && /run/current-system/sw/bin/rm /tmp/keyringfile; exit 1; } + # prevents cliphist from writing passwords to the clipboard history + pkill -STOP wl-paste - # prevents cliphist from writing passwords to the clipboard history - pkill -STOP wl-paste + # copy password + pass -c "$pass_string" > /dev/null + echo "Password copied. Clearing clipboard in 10 seconds." - # copy password - pass -c "$pass_string" > /dev/null - echo "Password copied. Clearing clipboard in 10 seconds." + # start a timer for 10 seconds, clear clipboard, resume cliphist tracking + nohup bash <<-EOF > /dev/null & + sleep 10 + wl-copy -c + pkill -CONT wl-paste + EOF - # start a timer for 10 seconds, clear clipboard, resume cliphist tracking - nohup bash <<-EOF > /dev/null & - sleep 10 - wl-copy -c - pkill -CONT wl-paste - EOF - - /run/current-system/sw/bin/rm /tmp/keyringfile - sleep 0.5 - exit 0 -'' + /run/current-system/sw/bin/rm /tmp/keyringfile + sleep 0.5 + exit 0 + ''; +} diff --git a/modules/home/scripts/wm-controls/mkscreenshots.nix b/modules/home/scripts/wm-controls/mkscreenshots.nix index 604f02a..190fc71 100644 --- a/modules/home/scripts/wm-controls/mkscreenshots.nix +++ b/modules/home/scripts/wm-controls/mkscreenshots.nix @@ -1,58 +1,70 @@ { pkgs }: -pkgs.writeShellScriptBin "mkscreenshots" '' - if [ -n "$(hyprctl clients -j | jq -r '.[] | select(.workspace.name == "4")')" ]; then - echo "There are windows in workspace 4. This script uses workspace 4, so move those windows and run it again." - exit 1 - fi - - prev_workspace=$(hyprctl activeworkspace -j | jq '.id') - - hyprctl dispatch focusmonitor 0 - - screenshotfetch() { +pkgs.writeShellApplication { + name = "mkscreenshots"; + runtimeInputs = with pkgs; [ + jq neofetch + kitty + coreutils + nemo + grimblast + git + ]; + text = '' + if [ -n "$(hyprctl clients -j | jq -r '.[] | select(.workspace.name == "4")')" ]; then + echo "There are windows in workspace 4. This script uses workspace 4, so move those windows and run it again." + exit 1 + fi - kitty @ scroll-window 20- + prev_workspace=$(hyprctl activeworkspace -j | jq '.id') - exec sleep infinity - } + hyprctl dispatch focusmonitor 0 - closewindows() { - hyprctl clients -j | jq -r '.[] | select(.workspace.name == "4") | .address' | while read -r addr; do - hyprctl dispatch closewindow address:"$addr" - done - } + screenshotfetch() { + neofetch - temp_script=$(mktemp) - screenshotfetch_var=$(declare -f screenshotfetch) - echo "$screenshotfetch_var" > "$temp_script" - echo "screenshotfetch" >> "$temp_script" - chmod +x "$temp_script" + kitty @ scroll-window 20- - hyprctl dispatch workspace 4 - hyprctl dispatch exec "[float;size 40% 25%;move 1% 66%] kitty bash -c '$temp_script'" - hyprctl dispatch exec "[float;size 40% 50%;move 57% 8%] nemo" + exec sleep infinity + } - sleep 1 - grimblast save output "$FLAKEPATH"/assets/screens/desktop-neofetch.png + closewindows() { + hyprctl clients -j | jq -r '.[] | select(.workspace.name == "4") | .address' | while read -r addr; do + hyprctl dispatch closewindow address:"$addr" + done + } - closewindows + temp_script=$(mktemp) + screenshotfetch_var=$(declare -f screenshotfetch) + echo "$screenshotfetch_var" > "$temp_script" + echo "screenshotfetch" >> "$temp_script" + chmod +x "$temp_script" - hyprctl dispatch exec 'kitty nvim' - hyprctl dispatch exec 'kitty yazi' - hyprctl dispatch exec 'kitty' + hyprctl dispatch workspace 4 + hyprctl dispatch exec "[float;size 40% 25%;move 1% 66%] kitty bash -c '$temp_script'" + hyprctl dispatch exec "[float;size 40% 50%;move 57% 8%] nemo" - sleep 1 - grimblast save output "$FLAKEPATH"/assets/screens/desktop-busy.png + sleep 1 + grimblast save output "$FLAKEPATH"/assets/screens/desktop-neofetch.png - ( - cd "$FLAKEPATH" - latest_hash=$(git rev-parse HEAD) - sed -i "s|\(https://github.com/pagedMov/nixos-config/commit/\)[a-f0-9]\{40\}|\1$latest_hash|" "$FLAKEPATH"/README.md - ) + closewindows - closewindows + hyprctl dispatch exec 'kitty nvim' + hyprctl dispatch exec 'kitty yazi' + hyprctl dispatch exec 'kitty' - hyprctl dispatch workspace "$prev_workspace" -'' + sleep 1 + grimblast save output "$FLAKEPATH"/assets/screens/desktop-busy.png + + ( + cd "$FLAKEPATH" + latest_hash=$(git rev-parse HEAD) + sed -i "s|\(https://github.com/pagedMov/nixos-config/commit/\)[a-f0-9]\{40\}|\1$latest_hash|" "$FLAKEPATH"/README.md + ) + + closewindows + + hyprctl dispatch workspace "$prev_workspace" + ''; +} diff --git a/modules/home/scripts/wm-controls/moveonscreen.nix b/modules/home/scripts/wm-controls/moveonscreen.nix index 4ec1f56..fc4a810 100755 --- a/modules/home/scripts/wm-controls/moveonscreen.nix +++ b/modules/home/scripts/wm-controls/moveonscreen.nix @@ -1,76 +1,85 @@ {pkgs}: -pkgs.writeShellScriptBin "moveonscreen" '' - center_window=false - if [[ $1 == "--center" ]]; then - center_window=true - fi +pkgs.writeShellApplication { + name = "moveonscreen"; + runtimeInputs = with pkgs; [ + hyprland + jq + coreutils + gawk + ]; + text = '' + center_window=false + if [[ ! $# -eq 0 ]] && [[ $1 == "--center" ]]; then + center_window=true + fi - cursor_pos=$(hyprctl cursorpos | sed 's/,//') - cursor_x=$(echo "$cursor_pos" | awk '{print $1}') - cursor_y=$(echo "$cursor_pos" | awk '{print $2}') + cursor_pos=$(hyprctl cursorpos | sed 's/,//') + cursor_x=$(echo "$cursor_pos" | awk '{print $1}') + cursor_y=$(echo "$cursor_pos" | awk '{print $2}') - window_info=$(hyprctl activewindow -j) - window_width=$(echo "$window_info" | jq ".size[0]") - window_height=$(echo "$window_info" | jq ".size[1]") + window_info=$(hyprctl activewindow -j) + window_width=$(echo "$window_info" | jq ".size[0]") + window_height=$(echo "$window_info" | jq ".size[1]") - if [ "$center_window" = true ]; then - cursor_x=$((cursor_x - window_width / 2)) - cursor_y=$((cursor_y - window_height / 2)) + if [ "$center_window" = true ]; then + cursor_x=$((cursor_x - window_width / 2)) + cursor_y=$((cursor_y - window_height / 2)) - if (( cursor_x < 10 )); then - cursor_x=10 - fi - if (( cursor_y < 54 )); then - cursor_y=54 - fi - fi + if (( cursor_x < 10 )); then + cursor_x=10 + fi + if (( cursor_y < 54 )); then + cursor_y=54 + fi + fi - monitors=$(hyprctl monitors -j) + monitors=$(hyprctl monitors -j) - monitor_x_min=0 - monitor_x_max=0 - monitor_y_min=0 - monitor_y_max=0 - focused_monitor=-1 + monitor_x_min=0 + monitor_x_max=0 + monitor_y_min=0 + monitor_y_max=0 + focused_monitor=-1 - for ((i = 0; i < $(echo "$monitors" | jq 'length'); i++)); do - mon_x=$(echo "$monitors" | jq ".[$i].x") - mon_y=$(echo "$monitors" | jq ".[$i].y") - mon_width=$(echo "$monitors" | jq ".[$i].width") - mon_height=$(echo "$monitors" | jq ".[$i].height") - is_focused=$(echo "$monitors" | jq ".[$i].focused") + for ((i = 0; i < $(echo "$monitors" | jq 'length'); i++)); do + mon_x=$(echo "$monitors" | jq ".[$i].x") + mon_y=$(echo "$monitors" | jq ".[$i].y") + mon_width=$(echo "$monitors" | jq ".[$i].width") + mon_height=$(echo "$monitors" | jq ".[$i].height") + is_focused=$(echo "$monitors" | jq ".[$i].focused") - if [ "$is_focused" = true ]; then - monitor_x_min=$((mon_x + 10)) - monitor_x_max=$((mon_x + mon_width - 10)) - monitor_y_min=$((mon_y + 10)) - monitor_y_max=$((mon_y + mon_height - 10)) - focused_monitor=$i - break - fi - done + if [ "$is_focused" = true ]; then + monitor_x_min=$((mon_x + 10)) + monitor_x_max=$((mon_x + mon_width - 10)) + monitor_y_min=$((mon_y + 10)) + monitor_y_max=$((mon_y + mon_height - 10)) + focused_monitor=$i + break + fi + done - if [ "$focused_monitor" -eq -1 ]; then - exit 1 - fi + if [ "$focused_monitor" -eq -1 ]; then + exit 1 + fi - if (( cursor_x < monitor_x_min )); then - adjusted_x=$monitor_x_min - elif (( cursor_x + window_width > monitor_x_max )); then - adjusted_x=$((monitor_x_max - window_width)) - else - adjusted_x=$cursor_x - fi + if (( cursor_x < monitor_x_min )); then + adjusted_x=$monitor_x_min + elif (( cursor_x + window_width > monitor_x_max )); then + adjusted_x=$((monitor_x_max - window_width)) + else + adjusted_x=$cursor_x + fi - if (( cursor_y < monitor_y_min )); then - adjusted_y=$monitor_y_min - elif (( cursor_y + window_height > monitor_y_max )); then - adjusted_y=$((monitor_y_max - window_height)) - else - adjusted_y=$cursor_y - fi + if (( cursor_y < monitor_y_min )); then + adjusted_y=$monitor_y_min + elif (( cursor_y + window_height > monitor_y_max )); then + adjusted_y=$((monitor_y_max - window_height)) + else + adjusted_y=$cursor_y + fi - hyprctl dispatch moveactive exact "$adjusted_x $adjusted_y" > /dev/null 2>&1 -'' + hyprctl dispatch moveactive exact "$adjusted_x $adjusted_y" > /dev/null 2>&1 + ''; +} diff --git a/modules/home/scripts/wm-controls/s_check.nix b/modules/home/scripts/wm-controls/s_check.nix index d7344f1..27a2864 100755 --- a/modules/home/scripts/wm-controls/s_check.nix +++ b/modules/home/scripts/wm-controls/s_check.nix @@ -1,9 +1,11 @@ { - self, pkgs, }: -pkgs.writeShellScriptBin "scheck" '' - #!/run/current-system/sw/bin/bash +pkgs.writeShellApplication { + name = "scheck"; + text = '' + #!/run/current-system/sw/bin/bash - [ "$SOUNDS_ENABLED" -eq 1 ] -'' + [ "$SOUNDS_ENABLED" -eq 1 ] + ''; +} diff --git a/modules/home/scripts/wm-controls/switchmon.nix b/modules/home/scripts/wm-controls/switchmon.nix index 8da0e33..80d7591 100755 --- a/modules/home/scripts/wm-controls/switchmon.nix +++ b/modules/home/scripts/wm-controls/switchmon.nix @@ -1,9 +1,11 @@ { - self, pkgs, }: -pkgs.writeShellScriptBin "switchmon" '' - #!/bin/zsh +pkgs.writeShellApplication { + name = "switchmon"; + text = '' + #!/bin/zsh - hyprctl dispatch focusmonitor $(echo "$(hyprctl -j monitors)" | jq -r '.[] | select(.focused == false) | .name') -'' + hyprctl dispatch focusmonitor "$(hyprctl -j monitors | jq -r '.[] | select(.focused == false) | .name')" + ''; +}