From 7e8cc7201949ad75daca5520c57479229711ed31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Mon, 4 Apr 2022 15:54:26 +0200 Subject: Add flake.nix --- bashrc.d/shellrc | 5 ---- flake.lock | 25 ++++++++++++++++ flake.nix | 71 +++++++++++++++++++++++++++++++++++++++++++++ install | 19 ++++++++++-- shellrc-desktop.d/desktop | 48 ++++++++++++++++++++++++++++++ shellrc-desktop.d/shortcuts | 14 +++++++++ shellrc-desktop.d/ssh | 19 ++++++++++++ shellrc-desktop.d/sway | 32 ++++++++++++++++++++ shellrc-desktop.d/xorg | 27 +++++++++++++++++ shellrc.d-desktop/desktop | 48 ------------------------------ shellrc.d-desktop/shortcuts | 14 --------- shellrc.d-desktop/ssh | 19 ------------ shellrc.d-desktop/sway | 32 -------------------- shellrc.d-desktop/xorg | 27 ----------------- zshrc | 5 ---- zshrc.d/prompt | 3 ++ zshrc.d/shellrc | 5 ---- 17 files changed, 256 insertions(+), 157 deletions(-) delete mode 100644 bashrc.d/shellrc create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 shellrc-desktop.d/desktop create mode 100644 shellrc-desktop.d/shortcuts create mode 100644 shellrc-desktop.d/ssh create mode 100644 shellrc-desktop.d/sway create mode 100644 shellrc-desktop.d/xorg delete mode 100644 shellrc.d-desktop/desktop delete mode 100644 shellrc.d-desktop/shortcuts delete mode 100644 shellrc.d-desktop/ssh delete mode 100644 shellrc.d-desktop/sway delete mode 100644 shellrc.d-desktop/xorg delete mode 100644 zshrc delete mode 100644 zshrc.d/shellrc diff --git a/bashrc.d/shellrc b/bashrc.d/shellrc deleted file mode 100644 index e938444..0000000 --- a/bashrc.d/shellrc +++ /dev/null @@ -1,5 +0,0 @@ -# vim: ft=sh - -for sh in /usr/share/shellrc/*; do - [ -r "$sh" ] && . "$sh" -done diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..6ad3dfd --- /dev/null +++ b/flake.lock @@ -0,0 +1,25 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1648219316, + "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..ec21822 --- /dev/null +++ b/flake.nix @@ -0,0 +1,71 @@ +{ + description = "Cynerd's shell configuration"; + + outputs = { self, nixpkgs }: { + + nixosModule = { config, lib, pkgs, ... }: + with lib; + let + zsh-completion = pkgs.stdenv.mkDerivation rec { + name = "shellrc-completion"; + src = ./.; + nativeBuildInputs = [ pkgs.installShellFiles ]; + installPhase = '' + for comp in bash-completion/*; do + installShellCompletion --bash --name "$${comp##*/}.bash" "$comp" + done + for comp in zsh-completion/*; do + installShellCompletion --zsh --name "$${comp##*/}" "$comp" + done + ''; + }; + in { + + options = { + programs.shellrc = { + enable = mkOption { + type = types.bool; + default = false; + description = "If shellrc should be enabled."; + }; + desktop = mkOption { + type = types.bool; + default = false; + description = "If shellrc's desktop specific files should be used."; + }; + }; + }; + + config = mkIf config.programs.shellrc.enable { + environment.loginShellInit = '' + for sh in ${./shellrc.d}/*; do + [ -r "$sh" ] && . "$sh" + done + '' + optionalString config.programs.shellrc.desktop '' + for sh in ${./shellrc-desktop.d}/*; do + [ -r "$sh" ] && . "$sh" + done + ''; + + programs.bash.loginShellInit = '' + for sh in ${./bashrc.d}/*; do + [ -r "$sh" ] && . "$sh" + done + ''; + + programs.zsh.loginShellInit = mkIf config.programs.zsh.enable '' + for sh in ${./zshrc.d}/*; do + [ -r "$sh" ] && . "$sh" + done + ''; + + environment.systemPackages = [ + zsh-completion + ]; + + }; + + }; + + }; +} diff --git a/install b/install index cd42670..f54b249 100755 --- a/install +++ b/install @@ -60,20 +60,35 @@ fi if $U_DESKTOP; then mkdir -p "$I_PREFIX/usr/share/shellrc" - cp -r shellrc.d-desktop/. "$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" + cat >"$I_PREFIX/etc/bash/bashrc.d/shellrc" <<-"EOF" + for sh in /usr/share/shellrc/*; do + [ -r "$sh" ] && . "$sh" + done + EOF mkdir -p "$I_PREFIX/usr/share/bash-completion/completions" cp -r bash-completion/. "$I_PREFIX/usr/share/bash-completion/completions/" fi if $U_ZSH; then mkdir -p "$I_PREFIX/etc/zsh" - cp zshrc "$I_PREFIX/etc/zsh/zshrc" + cat >"$I_PREFIX/etc/zsh/zshrc" <<-"EOF" + [[ -o interactive ]] || return # skip on initialization if not interactive + for sh in /etc/zsh/zshrc.d/*; do + [ -r "$sh" ] && . "$sh" + done + EOF cp -r zshrc.d/. "$I_PREFIX/etc/zsh/zshrc.d" + cat >"$I_PREFIX/etc/zsh/zshrc.d/shellrc" <<-"EOF" + for sh in /usr/share/shellrc/*; do + [ -r "$sh" ] && . "$sh" + done + EOF mkdir -p "$I_PREFIX/usr/share/zsh/site-functions" cp -r zsh-completion/. "$I_PREFIX/usr/share/zsh/site-functions" fi diff --git a/shellrc-desktop.d/desktop b/shellrc-desktop.d/desktop new file mode 100644 index 0000000..64f0431 --- /dev/null +++ b/shellrc-desktop.d/desktop @@ -0,0 +1,48 @@ +# 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 new file mode 100644 index 0000000..4be240a --- /dev/null +++ b/shellrc-desktop.d/shortcuts @@ -0,0 +1,14 @@ +# 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 new file mode 100644 index 0000000..7a1b71f --- /dev/null +++ b/shellrc-desktop.d/ssh @@ -0,0 +1,19 @@ +# 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" + + ssh "$@" "$target" mkdir -p "$remote_dir" + dpipe \ + /usr/lib64/misc/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 new file mode 100644 index 0000000..1032a91 --- /dev/null +++ b/shellrc-desktop.d/sway @@ -0,0 +1,32 @@ +# 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 new file mode 100644 index 0000000..91c9f07 --- /dev/null +++ b/shellrc-desktop.d/xorg @@ -0,0 +1,27 @@ +# 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-desktop/desktop b/shellrc.d-desktop/desktop deleted file mode 100644 index 64f0431..0000000 --- a/shellrc.d-desktop/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.d-desktop/shortcuts b/shellrc.d-desktop/shortcuts deleted file mode 100644 index 4be240a..0000000 --- a/shellrc.d-desktop/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.d-desktop/ssh b/shellrc.d-desktop/ssh deleted file mode 100644 index 7a1b71f..0000000 --- a/shellrc.d-desktop/ssh +++ /dev/null @@ -1,19 +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" - - ssh "$@" "$target" mkdir -p "$remote_dir" - dpipe \ - /usr/lib64/misc/sftp-server \ - = \ - ssh "$@" "$target" sshfs -o idmap=user -o passive -o allow_other \ - ":$local_dir" "$remote_dir" -} diff --git a/shellrc.d-desktop/sway b/shellrc.d-desktop/sway deleted file mode 100644 index 1032a91..0000000 --- a/shellrc.d-desktop/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.d-desktop/xorg b/shellrc.d-desktop/xorg deleted file mode 100644 index 91c9f07..0000000 --- a/shellrc.d-desktop/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/zshrc b/zshrc deleted file mode 100644 index ee5d8a8..0000000 --- a/zshrc +++ /dev/null @@ -1,5 +0,0 @@ -[[ -o interactive ]] || return # skip on initialization if not interactive - -for sh in /etc/zsh/zshrc.d/*; do - [ -r "$sh" ] && . "$sh" -done diff --git a/zshrc.d/prompt b/zshrc.d/prompt index 08e7ad1..72cbf44 100644 --- a/zshrc.d/prompt +++ b/zshrc.d/prompt @@ -1,5 +1,8 @@ # vim: ft=zsh +# Disable default prompt +command -v prompt >/dev/null && prompt off + [ $UID -eq 0 ] && NCOLOR="red" || NCOLOR="green" PROMPT="%(?..%{$fg_bold[yellow]%}EXIT: %? )%{$fg_bold[$NCOLOR]%}%n@%m:%{$fg_bold[blue]%}%1~%{$fg_bold[$NCOLOR]%}%(!.#.$)%{$reset_color%} " diff --git a/zshrc.d/shellrc b/zshrc.d/shellrc deleted file mode 100644 index 049e5fc..0000000 --- a/zshrc.d/shellrc +++ /dev/null @@ -1,5 +0,0 @@ -# vim: ft=zsh - -for sh in /usr/share/shellrc/*; do - [ -r "$sh" ] && . "$sh" -done -- cgit v1.2.3