From 7be0acbb1cd6b6d3c4c3df95611cb86be4b46915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Tue, 21 Mar 2023 18:19:32 +0100 Subject: Drop desktop variant and rework nix packages --- install | 13 +-------- nixos.nix | 49 ++++++-------------------------- pkgs.nix | 69 +++++++++++++++------------------------------ shellrc-desktop.d/desktop | 48 ------------------------------- shellrc-desktop.d/shortcuts | 14 --------- shellrc-desktop.d/ssh | 25 ---------------- shellrc-desktop.d/sway | 32 --------------------- shellrc-desktop.d/xorg | 27 ------------------ shellrc.d/alias | 4 +++ shellrc.d/desktop | 59 ++++++++++++++++++++++++++++++++++++++ shellrc.d/function | 4 +-- shellrc.d/shortcuts | 20 +++++++++++++ shellrc.d/ssh | 23 +++++++++++++++ shellrc.d/sway | 19 +++++++++++++ shellrc.d/xorg | 14 +++++++++ 15 files changed, 173 insertions(+), 247 deletions(-) delete mode 100644 shellrc-desktop.d/desktop delete mode 100644 shellrc-desktop.d/shortcuts delete mode 100644 shellrc-desktop.d/ssh delete mode 100644 shellrc-desktop.d/sway delete mode 100644 shellrc-desktop.d/xorg create mode 100644 shellrc.d/desktop create mode 100644 shellrc.d/shortcuts create mode 100644 shellrc.d/ssh create mode 100644 shellrc.d/sway create mode 100644 shellrc.d/xorg diff --git a/install b/install index e5e12a2..9580cad 100755 --- a/install +++ b/install @@ -6,7 +6,6 @@ I_PREFIX=/ U_BASE=true U_BASH=false U_ZSH=false -U_DESKTOP=false while [ $# -gt 0 ]; do case "$1" in @@ -16,14 +15,12 @@ while [ $# -gt 0 ]; do echo "Options:" echo " -h, --help" echo " Print this help text." - echo " -d, --desktop" - echo " Install desktop specific configuration extensions for shellrc" echo " -b, --bash" echo " Install bash configuration" echo " -z, --zsh" echo " Install zsh configuration" echo " --no-base" - echo " Do not install base only bash or zsh or desktop is installed" + echo " Do not install base only bash or zsh is installed" echo " --prefix PATH" echo " Install prefix (in default set to /)" exit 0 @@ -37,9 +34,6 @@ while [ $# -gt 0 ]; do --no-base) U_BASE=false ;; - -d|--desktop) - U_DESKTOP=true - ;; --prefix) shift I_PREFIX="$1" @@ -58,11 +52,6 @@ if $U_BASE; then cp -r shellrc.d/. "$I_PREFIX/usr/share/shellrc/" fi -if $U_DESKTOP; then - mkdir -p "$I_PREFIX/usr/share/shellrc" - cp -r shellrc-desktop.d/. "$I_PREFIX/usr/share/shellrc/" -fi - if $U_BASH; then mkdir -p "$I_PREFIX/etc/bash" cp -r bashrc.d/. "$I_PREFIX/etc/bash/bashrc.d" diff --git a/nixos.nix b/nixos.nix index 4dc23c9..ca4edd2 100644 --- a/nixos.nix +++ b/nixos.nix @@ -8,56 +8,23 @@ with lib; let cnf = config.programs.shellrc; zshEnable = config.programs.zsh.enable; in { - options = { - programs.shellrc = { - enable = mkOption { - type = types.bool; - default = true; - description = "If shellrc should be enabled."; - }; - desktop = mkOption { - type = types.bool; - default = false; - description = "If shellrc's desktop specific files should be used."; - }; - }; - }; + options.programs.shellrc = mkEnableOption "shellrc"; config = mkMerge [ { nixpkgs.overlays = overlays; + } + (mkIf cnf { + # Disable default prompt as we have our own + programs.bash.promptInit = ""; + programs.zsh.promptInit = ""; # Disable default prompt as we have our own - environment.pathsToLink = ["/etc/shellrc.d" "/etc/bashrc.d"] ++ optional zshEnable "/etc/zshrc.d"; programs.bash.interactiveShellInit = '' - # Load files provided by packages - for p in $NIX_PROFILES; do - [ -e $p/etc/bashrc.d ] || continue - for file in $p/etc/bashrc.d/*; do - [ -f "$file" ] || continue - . "$file" - done - done + eval $(${pkgs.shellrc-bash}/bin/shellrc-bash) ''; programs.zsh.interactiveShellInit = mkIf zshEnable '' - # Load files provided by packages - for p in ''${=NIX_PROFILES}; do - [ -e $p/etc/zshrc.d ] || continue - for file in $p/etc/zshrc.d/*; do - [ -f "$file" ] || continue - . "$file" - done - done + eval $(${pkgs.shellrc-zsh}/bin/shellrc-zsh) ''; - } - (mkIf cnf.enable { - environment.systemPackages = - [pkgs.shellrc-generic pkgs.shellrc-bash] - ++ optional cnf.desktop pkgs.shellrc-desktop - ++ optional zshEnable pkgs.shellrc-zsh; - - # Disable default prompt as we have our own - programs.bash.promptInit = ""; - programs.zsh.promptInit = ""; # Disable default prompt as we have our own }) ]; } diff --git a/pkgs.nix b/pkgs.nix index 0f5b6a8..ab36908 100644 --- a/pkgs.nix +++ b/pkgs.nix @@ -1,36 +1,17 @@ {pkgs}: let shellrcPkgs = { - shellrc-generic = pkgs.stdenvNoCC.mkDerivation { - name = "shellrc-generic"; - src = ./.; - installPhase = '' - mkdir -p "$out/etc/shellrc.d" - cp -r ./shellrc.d/. "$out/etc/shellrc.d/" - ''; - }; - shellrc-desktop = pkgs.stdenvNoCC.mkDerivation { - name = "shellrc-desktop"; - src = ./.; - installPhase = '' - mkdir -p "$out/etc/shellrc.d" - cp -r ./shellrc-desktop.d/. "$out/etc/shellrc.d/" - ''; - }; shellrc-bash = pkgs.stdenvNoCC.mkDerivation { name = "shellrc-bash"; src = ./.; nativeBuildInputs = [pkgs.installShellFiles]; installPhase = '' - mkdir -p "$out/etc/bashrc.d" - cp -r ./bashrc.d/. "$out/etc/bashrc.d/" - cat >"$out/etc/bashrc.d/shellrc" <"$out/bin/shellrc-bash" <"$out/etc/zshrc.d/shellrc" <"$out/bin/shellrc-zsh" <<"EOF" + #!/usr/bin/env zsh + for file in ${./zshrc.d}/* ${./shellrc.d}/*; do + echo "source $file;" done EOF + chmod +x "$out/bin/shellrc-zsh" for comp in zsh-completion/*; do installShellCompletion --zsh --name "''${comp##*/}" "$comp" done ''; }; - shellrc-setup = pkgs.writeScriptBin "shellrc-setup" '' + shellrc-user-setup = pkgs.writeScriptBin "shellrc-user-setup" '' #!/usr/bin/env bash - cat >~/.bashrc <~/.zshrc </dev/null >&2 \ + && ! grep -xf "$cmdbash" ~/.bashrc; then + echo "$cmdbash" >>~/.bashrc + fi + if command -v shellrc-zsh 2>/dev/null >&2 \ + && ! grep -xf "$cmdzsh" ~/.zshrc; then + echo "$cmdzsh" >>~/.zshrc + fi ''; }; in diff --git a/shellrc-desktop.d/desktop b/shellrc-desktop.d/desktop deleted file mode 100644 index 64f0431..0000000 --- a/shellrc-desktop.d/desktop +++ /dev/null @@ -1,48 +0,0 @@ -# vim: ft=sh: -# This is handy only on desktop and is useless on server - -alias sdcv='sdcv -c' - -# Following section is applicable for any desktop but only for graphics########## -# TODO add check for wayland -[ -z "$DISPLAY" ] && return - -alias feh='feh --conversion-timeout 10 -.' - - -# This function should not be called externaly -# It expects PID of surf instace as first argument and all other arguments should -# be command to be called before kill is sent. -__insurf_callback() { - local SPID=$1 - shift - "$@" - echo kill $SPID SIGHUP - kill -s SIGHUP $SPID || exit 1 -} - -# Same as inrun but it opens first argument it founds in surf and then reloads -# that instance automatically. -insurf() { - ( - set -e - # Run surf - surf "$1" & - local SPID=$! - trap "kill $SPID; trap '' EXIT; exit 0" EXIT INT QUIT TERM ABRT - # Insert our callback - local ISFIRST=true - for ARG in "$@"; do - if $ISFIRST; then - shift $# - ISFIRST=false - fi - set "$@" "$ARG" - if [ "$ARG" = "--" ]; then - set "$@" "__insurf_callback" "$SPID" - fi - done - # Run inrun - inrun "$@" - ) -} diff --git a/shellrc-desktop.d/shortcuts b/shellrc-desktop.d/shortcuts deleted file mode 100644 index 4be240a..0000000 --- a/shellrc-desktop.d/shortcuts +++ /dev/null @@ -1,14 +0,0 @@ -# vim: ft=sh: -# There are desktop specific shortcuts - -turris() { - cd ~/turris/"$1" -} - -projects() { - cd ~/projects/"$1" -} - -admin() { - projects admin/"$1" -} diff --git a/shellrc-desktop.d/ssh b/shellrc-desktop.d/ssh deleted file mode 100644 index 0de644e..0000000 --- a/shellrc-desktop.d/ssh +++ /dev/null @@ -1,25 +0,0 @@ -# vim: ft=sh: -# These are general ssh helpers that are most likely not usable on server side -# anyway thus they are deployed on desktop only. - -# SSHFS in client mode. In other words it is reverse sshfs mount. -sshcfs() { - local target="$1" - local local_dir="$2" - local remote_dir="$3" - shift 3 - [[ "$local_dir" = /* ]] || local_dir="$PWD/$local_dir" - - local sftp_server="/usr/lib64/misc/sftp-server" - if [ -e /run/current-system/sw/bin/ssh ]; then - sftp_server="$(readlink -f /run/current-system/sw/bin/ssh)" - sftp_server="${sftp_server%/bin/ssh}/libexec/sftp-server" - fi - - ssh "$@" "$target" mkdir -p "$remote_dir" - dpipe \ - "$sftp_server" \ - = \ - ssh "$@" "$target" sshfs -o idmap=user -o passive -o allow_other \ - ":$local_dir" "$remote_dir" -} diff --git a/shellrc-desktop.d/sway b/shellrc-desktop.d/sway deleted file mode 100644 index 1032a91..0000000 --- a/shellrc-desktop.d/sway +++ /dev/null @@ -1,32 +0,0 @@ -# vim: ft=sh: -# These are utility functions loaded when we are running in Sway -[ "$XDG_CURRENT_DESKTOP" = "sway" ] || return - -alias swm='swaymsg' - - -# Clip stdin to clipboard -clip() { - wl-copy --trim-newline -} - -# Clip current HEAD hash to clipboard -# Optionally you can pass commit as argument -gitclip() { - [ -n "$1" ] && local CMT="$1" || local CMT=HEAD - git rev-parse "$CMT"| clip -} -# Clip current head message to clipboard -# Optionally you can pass commit as argument -gitmclip() { - [ -n "$1" ] && local CMT="$1" || local CMT=HEAD - git log --format=%B -n 1 "$CMT" | clip -} - - -sway_outputs() { - swaymsg -t get_outputs -} -sway_inputs() { - swaymsg -t get_inputs -} diff --git a/shellrc-desktop.d/xorg b/shellrc-desktop.d/xorg deleted file mode 100644 index 91c9f07..0000000 --- a/shellrc-desktop.d/xorg +++ /dev/null @@ -1,27 +0,0 @@ -# vim: ft=sh: -# These are utility functions loaded when we are running in Xserver - -[ -n "$DISPLAY" ] || return # Ignore if there is no display set -[ -z "$WAYLAND_DISPLAY" ] || return - -alias i='i3-msg' - - -# Clip stdin to clipboard -clip() { - # Note: printf as magic to remove trailing new lines - printf %s "$(cat)" | xclip -selection clipboard -} - -# Clip current HEAD hash to clipboard -# Optionally you can pass commit as argument -gitclip() { - [ -n "$1" ] && local CMT="$1" || local CMT=HEAD - git rev-parse "$CMT"| clip -} -# Clip current head message to clipboard -# Optionally you can pass commit as argument -gitmclip() { - [ -n "$1" ] && local CMT="$1" || local CMT=HEAD - git log --format=%B -n 1 "$CMT" | clip -} diff --git a/shellrc.d/alias b/shellrc.d/alias index f9a60e4..f237db5 100644 --- a/shellrc.d/alias +++ b/shellrc.d/alias @@ -24,3 +24,7 @@ if pidof systemd >/dev/null 2>/dev/null; then alias jrn='journalctl' alias ujrn='jrn --user' fi + +if command -v sdcv 2>/dev/null >&2; then + alias sdcv='sdcv -c' +fi diff --git a/shellrc.d/desktop b/shellrc.d/desktop new file mode 100644 index 0000000..f3995d6 --- /dev/null +++ b/shellrc.d/desktop @@ -0,0 +1,59 @@ +# vim: ft=sh: +# This is handy only on desktop and is useless on server + + +# Following section is applicable for any desktop but only for graphics +# The check is for XOrg but thanks to XWayland it works for Wayland as well. +[ -z "$DISPLAY" ] && return + +alias feh='feh --conversion-timeout 10 -.' + +# Clip current HEAD hash to clipboard +# Optionally you can pass commit as argument +gitclip() { + git rev-parse "${1:-HEAD}"| clip +} +# Clip current head message to clipboard +# Optionally you can pass commit as argument +gitmclip() { + git log --format=%B -n 1 "${1:-HEAD}" | clip +} +# NOTE: clip comes either from xorg or sway file + + +# This function should not be called externaly +# It expects PID of surf instace as first argument and all other arguments should +# be command to be called before kill is sent. +__insurf_callback() { + local SPID=$1 + shift + "$@" + echo "kill $SPID SIGHUP" + kill -s SIGHUP "$SPID" || exit 1 +} + +# Same as inrun but it opens first argument it founds in surf and then reloads +# that instance automatically. +insurf() { + ( + set -e + # Run surf + surf "$1" & + local SPID=$! + trap "kill $SPID; trap '' EXIT; exit 0" EXIT INT QUIT TERM ABRT + # Insert our callback + local ISFIRST=true + for ARG in "$@"; do + if $ISFIRST; then + shift $# + ISFIRST=false + fi + set "$@" "$ARG" + if [ "$ARG" = "--" ]; then + set "$@" "__insurf_callback" "$SPID" + fi + done + # Run inrun + inrun "$@" + ) +} diff --git a/shellrc.d/function b/shellrc.d/function index 2251726..3035e34 100644 --- a/shellrc.d/function +++ b/shellrc.d/function @@ -9,7 +9,7 @@ mcd() { # Run process in background tbg() { mkdir -p /tmp/tbg-log - nohup "$@" >/dev/null >"/tmp/tbg-log/$0-$(date +%g%m%d%H%M%S%N)" & + nohup "$@" >"/tmp/tbg-log/$0-$(date +%g%m%d%H%M%S%N)" & } # Generate random password (optionally takes length of password as first argument) @@ -43,7 +43,7 @@ inrun () { local tmpfs tmpfs="$(mktemp --tmpdir inrun.XXXXXXXX)" trap "rm '\$tmpfs'; trap '' EXIT; exit 0" EXIT INT QUIT TERM ABRT - while [ $# -gt 0 -a "$1" != "--" ]; do + while [ $# -gt 0 ] && [ "$1" != "--" ]; do echo "$1" >> "$tmpfs" shift done diff --git a/shellrc.d/shortcuts b/shellrc.d/shortcuts new file mode 100644 index 0000000..93b6283 --- /dev/null +++ b/shellrc.d/shortcuts @@ -0,0 +1,20 @@ +# vim: ft=sh: +# There are desktop specific shortcuts + +if [ -d ~/turris ]; then + turris() { + cd ~/turris/"$1" || return + } +fi + +if [ -d ~/projects ]; then + + projects() { + cd ~/projects/"$1" || return + } + + admin() { + projects admin/"$1" + } + +fi diff --git a/shellrc.d/ssh b/shellrc.d/ssh new file mode 100644 index 0000000..e2882c8 --- /dev/null +++ b/shellrc.d/ssh @@ -0,0 +1,23 @@ +# vim: ft=sh: + +# SSHFS in client mode. In other words it is reverse sshfs mount. +sshcfs() { + local target="$1" + local local_dir="$2" + local remote_dir="$3" + shift 3 + [[ "$local_dir" = /* ]] || local_dir="$PWD/$local_dir" + + local sftp_server="/usr/lib64/misc/sftp-server" + if [ -e /run/current-system/sw/bin/ssh ]; then + sftp_server="$(readlink -f /run/current-system/sw/bin/ssh)" + sftp_server="${sftp_server%/bin/ssh}/libexec/sftp-server" + fi + + ssh "$@" "$target" mkdir -p "$remote_dir" + dpipe \ + "$sftp_server" \ + = \ + ssh "$@" "$target" sshfs -o idmap=user -o passive -o allow_other \ + ":$local_dir" "$remote_dir" +} diff --git a/shellrc.d/sway b/shellrc.d/sway new file mode 100644 index 0000000..4713914 --- /dev/null +++ b/shellrc.d/sway @@ -0,0 +1,19 @@ +# vim: ft=sh: +# These are utility functions loaded when we are running in Sway +[ "$XDG_CURRENT_DESKTOP" != "sway" ] && return + +alias swm='swaymsg' + + +# Clip stdin to clipboard +clip() { + wl-copy --trim-newline +} + + +sway_outputs() { + swaymsg -t get_outputs +} +sway_inputs() { + swaymsg -t get_inputs +} diff --git a/shellrc.d/xorg b/shellrc.d/xorg new file mode 100644 index 0000000..f55e961 --- /dev/null +++ b/shellrc.d/xorg @@ -0,0 +1,14 @@ +# vim: ft=sh: +# These are utility functions loaded when we are running in Xserver + +[ -z "$DISPLAY" ] && return # Ignore if there is no display set +[ -n "$WAYLAND_DISPLAY" ] && return + +alias i='i3-msg' + + +# Clip stdin to clipboard +clip() { + # Note: printf as magic to remove trailing new lines + printf %s "$(cat)" | xclip -selection clipboard +} -- cgit v1.2.3