aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xinstall13
-rw-r--r--nixos.nix49
-rw-r--r--pkgs.nix69
-rw-r--r--shellrc-desktop.d/shortcuts14
-rw-r--r--shellrc-desktop.d/sway32
-rw-r--r--shellrc-desktop.d/xorg27
-rw-r--r--shellrc.d/alias4
-rw-r--r--shellrc.d/desktop (renamed from shellrc-desktop.d/desktop)21
-rw-r--r--shellrc.d/function4
-rw-r--r--shellrc.d/shortcuts20
-rw-r--r--shellrc.d/ssh (renamed from shellrc-desktop.d/ssh)2
-rw-r--r--shellrc.d/sway19
-rw-r--r--shellrc.d/xorg14
13 files changed, 107 insertions, 181 deletions
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" <<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
+}