diff options
-rwxr-xr-x | install | 13 | ||||
-rw-r--r-- | nixos.nix | 49 | ||||
-rw-r--r-- | pkgs.nix | 69 | ||||
-rw-r--r-- | shellrc-desktop.d/shortcuts | 14 | ||||
-rw-r--r-- | shellrc-desktop.d/sway | 32 | ||||
-rw-r--r-- | shellrc-desktop.d/xorg | 27 | ||||
-rw-r--r-- | shellrc.d/alias | 4 | ||||
-rw-r--r-- | shellrc.d/desktop (renamed from shellrc-desktop.d/desktop) | 21 | ||||
-rw-r--r-- | shellrc.d/function | 4 | ||||
-rw-r--r-- | shellrc.d/shortcuts | 20 | ||||
-rw-r--r-- | shellrc.d/ssh (renamed from shellrc-desktop.d/ssh) | 2 | ||||
-rw-r--r-- | shellrc.d/sway | 19 | ||||
-rw-r--r-- | shellrc.d/xorg | 14 |
13 files changed, 107 insertions, 181 deletions
@@ -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" @@ -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 }) ]; } @@ -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" <<EOF - # Load ShellRC files - for p in \$NIX_PROFILES; do - for sh in \$p/etc/shellrc.d/*; do - [ -r "\$sh" ] && . "\$sh" - done - done + mkdir -p "$out/bin" + cat >"$out/bin/shellrc-bash" <<EOF + #!/usr/bin/env bash + echo source ${./bashrc.d}/*; + echo source ${./shellrc.d}/*; EOF + chmod +x "$out/bin/shellrc-bash" for comp in bash-completion/*; do installShellCompletion --bash --name "''${comp##*/}.bash" "$comp" done @@ -41,35 +22,31 @@ src = ./.; nativeBuildInputs = [pkgs.installShellFiles]; installPhase = '' - mkdir -p "$out/etc/zshrc.d" - cp -r ./zshrc.d/. "$out/etc/zshrc.d/" - cat >"$out/etc/zshrc.d/shellrc" <<EOF - # Load ShellRC files - for profile in \''${=NIX_PROFILES}; do - for sh in \$profile/etc/shellrc.d/*; do - [ -r "\$sh" ] && . "\$sh" - done + mkdir -p "$out/bin" + cat >"$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 <<EOF - for sh in ~/.nix-profile/etc/bashrc.d/*; do - [ -r "\$sh" ] || continue - source "\$sh" - done - EOF - cat >~/.zshrc <<EOF - for sh in ~/.nix-profile/etc/zshrc.d/*; do - [ -r "\$sh" ] || continue - source "\$sh" - done - EOF + cmdbash='eval $(shellrc-bash)' + cmdzsh='eval $(shellrc-zsh)' + if command -v shellrc-bash 2>/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/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/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-desktop.d/desktop b/shellrc.d/desktop index 64f0431..f3995d6 100644 --- a/shellrc-desktop.d/desktop +++ b/shellrc.d/desktop @@ -1,14 +1,25 @@ # 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 +# 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 @@ -17,8 +28,8 @@ __insurf_callback() { local SPID=$1 shift "$@" - echo kill $SPID SIGHUP - kill -s SIGHUP $SPID || exit 1 + 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 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-desktop.d/ssh b/shellrc.d/ssh index 0de644e..e2882c8 100644 --- a/shellrc-desktop.d/ssh +++ b/shellrc.d/ssh @@ -1,6 +1,4 @@ # 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() { 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 +} |