From 67b82386d8ad8ae3eea5083bd22809f6192d92a8 Mon Sep 17 00:00:00 2001 From: Azat Bahawi Date: Thu, 23 Nov 2023 04:20:34 +0300 Subject: 2023-11-23 --- modules/common/bat.nix | 36 ++-- modules/common/common/shell/default.nix | 266 ++++++++++++++--------------- modules/common/common/shell/functions.bash | 18 +- modules/common/emacs/default.nix | 48 ++++-- modules/common/git.nix | 16 +- modules/common/mpv.nix | 252 +++++++++++++-------------- modules/common/nmap.nix | 16 +- modules/common/profiles/dev/containers.nix | 97 +++++------ 8 files changed, 352 insertions(+), 397 deletions(-) (limited to 'modules/common') diff --git a/modules/common/bat.nix b/modules/common/bat.nix index 7f78a59..d95f709 100644 --- a/modules/common/bat.nix +++ b/modules/common/bat.nix @@ -6,32 +6,22 @@ with lib; let cfg = config.nixfiles.modules.bat; in { - options.nixfiles.modules.bat.enable = - mkEnableOption "bat, an alternative to cat"; + options.nixfiles.modules.bat.enable = mkEnableOption "bat, an alternative to cat"; config = mkIf cfg.enable { - hm.programs = { - bat = { - enable = true; - config = { - style = "plain"; - tabs = "4"; - theme = "base16"; - wrap = "never"; - }; - }; - - bash = { - shellAliases = { - baj = "bat --language=json --tabs 2"; - bay = "bat --language=yaml --tabs 2"; - bas = "bat --language=syslog"; - }; + nixfiles.modules.common.shell.aliases = { + baj = "bat --language=json --tabs 2"; + bay = "bat --language=yaml --tabs 2"; + bas = "bat --language=syslog"; + }; - initExtra = mkAfter '' - _complete_alias bay _bat bat - _complete_alias baj _bat bat - ''; + hm.programs.bat = { + enable = true; + config = { + style = "plain"; + tabs = "4"; + theme = "base16"; + wrap = "never"; }; }; }; diff --git a/modules/common/common/shell/default.nix b/modules/common/common/shell/default.nix index b05b279..b50459d 100644 --- a/modules/common/common/shell/default.nix +++ b/modules/common/common/shell/default.nix @@ -1,150 +1,148 @@ { + config, lib, pkgs, - pkgsStable, this, ... }: -with lib; { - hm = { - programs = { - bash = { - enable = true; - - shellOptions = [ - "autocd" - "cdspell" - "checkjobs" - "checkwinsize" - "dirspell" - "extglob" - "globstar" - "histappend" - "histreedit" - "histverify" - ]; - - profileExtra = '' - export _PROFILE_SOURCED=1 - ''; - - initExtra = '' - set -o notify - - # Apropriated from the default NixOS prompt settings. - if [ "$TERM" != "dumb" ] || [ -n "$INSIDE_EMACS" ]; then - PROMPT_COLOR="1;31m" - ((UID)) && PROMPT_COLOR="1;32m" - if [ -n "$INSIDE_EMACS" ] || [ "$TERM" = "eterm" ] || [ "$TERM" = "eterm-color" ]; then - PS1="\n\[\033[$PROMPT_COLOR\][\u@\h:\w]\\$\[\033[0m\] " - else - PS1="\n\[\033[$PROMPT_COLOR\][\[\e]0;\u@\h: \w\a\]\u@\h:\w]\\$\[\033[0m\] " - fi - if test "$TERM" = "xterm"; then - PS1="\[\033]2;\h:\u:\w\007\]$PS1" - fi - fi - - ${readFile ./functions.bash} - - # https://github.com/garabik/grc?tab=readme-ov-file#bash - GRC_ALIASES=true - source ${pkgs.grc}/etc/profile.d/grc.sh +with lib; let + cfg = config.nixfiles.modules.common.shell; +in { + options.nixfiles.modules.common.shell.aliases = mkOption { + description = "An attribute set of shell aliases."; + type = with types; attrsOf str; + default = {}; + }; - # https://github.com/akermu/emacs-libvterm?tab=readme-ov-file#shell-side-configuration - vterm_printf() { - if [ -n "$TMUX" ] && ([ "''${TERM%%-*}" = "tmux" ] || [ "''${TERM%%-*}" = "screen" ]); then - printf "\ePtmux;\e\e]%s\007\e\\" "$1" - elif [ "''${TERM%%-*}" = "screen" ]; then - printf "\eP\e]%s\007\e\\" "$1" - else - printf "\e]%s\e\\" "$1" + config = { + hm = { + programs = { + bash = { + enable = true; + + initExtra = let + aliasCompletions = + concatStringsSep "\n" + (mapAttrsToList + (name: _: "complete -F _complete_alias ${name}") + cfg.aliases); + in '' + # Apropriated from the default NixOS prompt settings. + if [ "$TERM" != "dumb" ] || [ -n "$INSIDE_EMACS" ]; then + PROMPT_COLOR="1;31m" + ((UID)) && PROMPT_COLOR="1;32m" + if [ -n "$INSIDE_EMACS" ] || [ "$TERM" = "eterm" ] || [ "$TERM" = "eterm-color" ]; then + PS1="\n\[\033[$PROMPT_COLOR\][\u@\h:\w]\\$\[\033[0m\] " + else + PS1="\n\[\033[$PROMPT_COLOR\][\[\e]0;\u@\h: \w\a\]\u@\h:\w]\\$\[\033[0m\] " + fi + if test "$TERM" = "xterm"; then + PS1="\[\033]2;\h:\u:\w\007\]$PS1" + fi fi - } - - # This makes sure we always source these tweaks for both interactive - # and login sessions. - if [ -z "$_PROFILE_SOURCED" ] && [ -f "$HOME/.profile" ]; then - source "$HOME/.profile" - fi - ''; - - shellAliases = - listToAttrs - (map - ({ - name, - value, - }: - nameValuePair name (with pkgs; let - pkg = - if this.isHeadful - then - # FIXME Update this to 9.3 when patches[1] become available - # - # [1]: https://github.com/jarun/advcpmv - (pkgsStable.coreutils.overrideAttrs (_: _: { - patches = [ - (fetchpatch { - url = "https://raw.githubusercontent.com/jarun/advcpmv/ea268d870b475edd5960dcd55d5378abc9705958/advcpmv-0.9-9.1.patch"; - hash = "sha256-d+SRT/R4xmfHLAdOr7m4R3WFiW64P5ZH6iqDvErYCyg="; - }) - ]; - })) - else coreutils; - in "${pkg}/bin/coreutils --coreutils-prog=${value}")) - ( - let - mkAlias = { - name ? head command, - command, - }: { - inherit name; - value = concatStringsSep " " command; - }; - - progressBar = optionalString this.isHeadful "--progress-bar"; - in [ - (mkAlias {command = ["cp" "--interactive" "--recursive" progressBar];}) - (mkAlias {command = ["mv" "--interactive" progressBar];}) - (mkAlias {command = ["rm" "--interactive=once"];}) - (mkAlias {command = ["ln" "--interactive"];}) - (mkAlias {command = ["mkdir" "--parents"];}) - (mkAlias {command = ["rmdir" "--parents"];}) - (mkAlias { - name = "lower"; - command = ["tr" "'[:upper:]'" "'[:lower:]'"]; - }) - (mkAlias { - name = "upper"; - command = ["tr" "'[:lower:]'" "'[:upper:]'"]; - }) - ] - )) - // genAttrs ["grep" "egrep" "fgrep"] - (name: "${pkgs.gnugrep}/bin/${name} --color=always"); - historyControl = ["erasedups" "ignoredups" "ignorespace"]; + source "${./functions.bash}" + + source "${getExe' pkgs.complete-alias "complete_alias"}" + ${aliasCompletions} + + # https://github.com/garabik/grc?tab=readme-ov-file#bash + GRC_ALIASES=true + source ${pkgs.grc}/etc/profile.d/grc.sh + ''; + + shellOptions = [ + "autocd" + "cdspell" + "checkjobs" + "checkwinsize" + "dirspell" + "extglob" + "globstar" + "histappend" + "histreedit" + "histverify" + ]; + + historyControl = [ + "erasedups" + "ignoredups" + "ignorespace" + ]; + + shellAliases = + listToAttrs + (map + ({ + name, + value, + }: + nameValuePair name (with pkgs; let + pkg = + if this.isHeadful + then + (pkgs.coreutils.overrideAttrs (_: super: { + patches = + (super.patches or []) + ++ [ + (fetchpatch { + url = "https://raw.githubusercontent.com/jarun/advcpmv/a1f8b505e691737db2f7f2b96275802c45f65c59/advcpmv-0.9-9.3.patch"; + hash = "sha256-I25F7uHESUsMDZFYTv8/56eR8QwelIPpABRXTgvszQI="; + }) + ]; + })) + else coreutils; + in "${getExe' pkg "coreutils"} --coreutils-prog=${value}")) + ( + let + mkAlias = { + name ? head command, + command, + }: { + inherit name; + value = concatStringsSep " " command; + }; + + progressBar = optionalString this.isHeadful "--progress-bar"; + in [ + (mkAlias {command = ["cp" "--interactive" "--recursive" progressBar];}) + (mkAlias {command = ["mv" "--interactive" progressBar];}) + (mkAlias {command = ["rm" "--interactive=once"];}) + (mkAlias {command = ["ln" "--interactive"];}) + (mkAlias {command = ["mkdir" "--parents"];}) + (mkAlias {command = ["rmdir" "--parents"];}) + (mkAlias { + name = "lower"; + command = ["tr" "'[:upper:]'" "'[:lower:]'"]; + }) + (mkAlias { + name = "upper"; + command = ["tr" "'[:lower:]'" "'[:upper:]'"]; + }) + ] + )) + // (genAttrs ["grep" "egrep" "fgrep"] (name: "${pkgs.gnugrep}/bin/${name} --color=always")) + // cfg.aliases; + }; + + command-not-found.enable = false; + + dircolors.enable = true; }; - command-not-found.enable = false; - - dircolors.enable = true; + home.packages = with pkgs; [grc]; }; - home.packages = with pkgs; [grc]; - }; - - environment = { - etc."grc.conf".source = "${pkgs.grc}/etc/grc.conf"; + environment = { + etc."grc.conf".source = "${pkgs.grc}/etc/grc.conf"; - systemPackages = with pkgs; [ - bash-completion - bc - gawk - hr - moreutils - pv - ]; + systemPackages = with pkgs; [ + bc + gawk + hr + moreutils + pv + ]; + }; }; } diff --git a/modules/common/common/shell/functions.bash b/modules/common/common/shell/functions.bash index c18104f..d947d0f 100644 --- a/modules/common/common/shell/functions.bash +++ b/modules/common/common/shell/functions.bash @@ -1,30 +1,16 @@ -_complete_alias() { - local alias_name=$1 - local base_function=$2 - local function_name=_alias_$alias_name - shift 2 - eval "$function_name() { - COMP_WORDS=( ${*@Q} \"\${COMP_WORDS[@]:1}\" ) - (( COMP_CWORD += $# - 1 )) - _completion_loader $1 - $base_function - }" - complete -F "$function_name" "$alias_name" -} - function where() { local s s="$(type -P "$1")" realpath "$s" } -_complete_alias where _complete complete +complete -F _command where function what() { local s s="$(where "$1")" printf "%s\n" "${s%/*/*}" } -_complete_alias what _complete complete +complete -F _command what function cat() { if (($# == 1)) && [[ -d $1 ]]; then diff --git a/modules/common/emacs/default.nix b/modules/common/emacs/default.nix index fe2618d..3db4393 100644 --- a/modules/common/emacs/default.nix +++ b/modules/common/emacs/default.nix @@ -222,23 +222,37 @@ in { }; }; - programs.emacs = { - enable = true; - package = - (pkgs.emacs29.override (finalAttrs: { - stdenv = with pkgs; - useMoldLinker - (withCFlags ["-O3"] - (impureUseNativeOptimizations finalAttrs.stdenv)); - })) - .overrideAttrs (_: final: { - configureFlags = - final.configureFlags - ++ [ - "--without-mailutils" - "--without-pop" - ]; - }); + programs = { + emacs = { + enable = true; + package = + (pkgs.emacs29.override (finalAttrs: { + stdenv = pkgs.useMoldLinker finalAttrs.stdenv; + })) + .overrideAttrs (_: final: { + configureFlags = + (final.configureFlags or []) + ++ [ + "--without-mailutils" + "--without-pop" + ]; + }); + }; + + bash.initExtra = mkAfter '' + # https://github.com/akermu/emacs-libvterm + if [[ "$INSIDE_EMACS" = vterm ]] && [[ -n "$EMACS_VTERM_PATH" ]] && [[ -f "$EMACS_VTERM_PATH/etc/emacs-vterm-bash.sh" ]]; then + source "$EMACS_VTERM_PATH/etc/emacs-vterm-bash.sh" + + message() { + vterm_cmd message "%s" "$*" + } + + find-file() { + vterm_cmd find-file "$(realpath "''${@:-.}")" + } + fi + ''; }; }; }; diff --git a/modules/common/git.nix b/modules/common/git.nix index aa157ed..fbd7ec7 100644 --- a/modules/common/git.nix +++ b/modules/common/git.nix @@ -31,6 +31,11 @@ in { }; }; + nixfiles.modules.common.shell.aliases = { + gl = "glab"; + ht = "hut"; + }; + hm = { home.packages = with pkgs; [ git-extras @@ -149,17 +154,6 @@ in { enable = true; settings.git_protocol = "ssh"; }; - - bash = { - shellAliases = { - gl = "glab"; - ht = "hut"; - }; - initExtra = mkAfter '' - _complete_alias gl __start_glab glab - _complete_alias ht __start_hut hut - ''; - }; }; }; }; diff --git a/modules/common/mpv.nix b/modules/common/mpv.nix index 37fbe4c..596d163 100644 --- a/modules/common/mpv.nix +++ b/modules/common/mpv.nix @@ -10,143 +10,133 @@ in { options.nixfiles.modules.mpv.enable = mkEnableOption "mpv"; config = mkIf cfg.enable { - hm.programs = { - mpv = { - enable = true; - - package = with pkgs; - wrapMpv mpv-unwrapped { - scripts = with mpvScripts; [ - autoload - sponsorblock - ]; - }; - - bindings = { - "RIGHT" = "seek 10"; - "LEFT" = "seek -10"; - "UP" = "seek 60"; - "DOWN" = "seek -60"; - - "Shift+RIGHT" = "no-osd seek 1 exact"; - "Shift+LEFT" = "no-osd seek -1 exact"; - "Shift+UP" = "no-osd seek 5 exact"; - "Shift+DOWN" = "no-osd seek -5 exact"; - - "Alt+h" = "add sub-delay +1"; - "Alt+l" = "add sub-delay -1"; - - "Alt+k" = "add sub-scale +0.1"; - "Alt+j" = "add sub-scale -0.1"; - - "B" = ''cycle-values background "#000000" "#ffffff"''; + hm.programs.mpv = { + enable = true; + + package = with pkgs; + wrapMpv mpv-unwrapped { + scripts = with mpvScripts; [ + autoload + sponsorblock + ]; }; - profiles = { - "protocol.http".force-window = "immediate"; - "protocol.https".profile = "protocol.http"; - - "extension.gif" = { - cache = false; - loop-file = true; - }; - "extension.png" = { - profile = "extension.gif"; - video-aspect-override = 0; - }; - "extension.jpeg".profile = "extension.png"; - "extension.jpg".profile = "extension.png"; - }; + bindings = { + "RIGHT" = "seek 10"; + "LEFT" = "seek -10"; + "UP" = "seek 60"; + "DOWN" = "seek -60"; - config = let - lang = concatStringsSep "," [ - "Japanese" - "japanese" - "jp" - "jpn" - "jaJP" - "ja-JP" - "English" - "english" - "en" - "eng" - "enUS" - "en-US" - "Russian" - "russian" - "ru" - "rus" - "ruRU" - "ru-RU" - ]; - in { - autofit-larger = "100%x95%"; - cache = true; - cursor-autohide = 1000; - cursor-autohide-fs-only = true; - demuxer-max-back-bytes = "20M"; - demuxer-max-bytes = "20M"; - force-seekable = true; - fullscreen = true; - msg-color = true; - msg-module = true; - prefetch-playlist = true; - save-position-on-quit = true; - screenshot-format = "png"; - screenshot-template = "%F [%p]"; - stop-screensaver = true; - term-osd-bar = true; - use-filedir-conf = true; - - osd-bar-align-y = 0; - osd-bar-h = 2; - osd-bar-w = 60; - osd-border-color = "#FF262626"; - osd-border-size = 2; - osd-color = "#FFFFFFFF"; - osd-duration = 1000; - osd-font-size = 40; - osd-fractions = true; - osd-level = 1; - osd-shadow-color = "#33000000"; - - osc = false; - - blend-subtitles = true; - embeddedfonts = false; - sub-ass-force-margins = true; - sub-ass-force-style = "kerning=yes"; - sub-auto = "fuzzy"; - sub-border-color = "#FF262626"; - sub-border-size = 2.5; - sub-color = "#FFFFFFFF"; - sub-file-paths-append = "srt"; - sub-fix-timing = true; - sub-font-size = 40; - sub-scale-with-window = true; - sub-shadow-color = "#33000000"; - sub-shadow-offset = 1; - sub-spacing = 0.5; - sub-use-margins = true; - - audio-file-auto = "fuzzy"; - volume = 100; - volume-max = 200; - - alang = lang; - slang = lang; - - ytdl = true; - ytdl-raw-options = ''sub-lang="${lang}",write-sub=''; - }; + "Shift+RIGHT" = "no-osd seek 1 exact"; + "Shift+LEFT" = "no-osd seek -1 exact"; + "Shift+UP" = "no-osd seek 5 exact"; + "Shift+DOWN" = "no-osd seek -5 exact"; + + "Alt+h" = "add sub-delay +1"; + "Alt+l" = "add sub-delay -1"; + + "Alt+k" = "add sub-scale +0.1"; + "Alt+j" = "add sub-scale -0.1"; + + "B" = ''cycle-values background "#000000" "#ffffff"''; }; - bash = { - shellAliases.cam = "mpv av://v4l2:/dev/video0"; + profiles = { + "protocol.http".force-window = "immediate"; + "protocol.https".profile = "protocol.http"; + + "extension.gif" = { + cache = false; + loop-file = true; + }; + "extension.png" = { + profile = "extension.gif"; + video-aspect-override = 0; + }; + "extension.jpeg".profile = "extension.png"; + "extension.jpg".profile = "extension.png"; + }; - initExtra = mkAfter '' - _complete_alias cam _mpv mpv - ''; + config = let + lang = concatStringsSep "," [ + "Japanese" + "japanese" + "jp" + "jpn" + "jaJP" + "ja-JP" + "English" + "english" + "en" + "eng" + "enUS" + "en-US" + "Russian" + "russian" + "ru" + "rus" + "ruRU" + "ru-RU" + ]; + in { + autofit-larger = "100%x95%"; + cache = true; + cursor-autohide = 1000; + cursor-autohide-fs-only = true; + demuxer-max-back-bytes = "20M"; + demuxer-max-bytes = "20M"; + force-seekable = true; + fullscreen = true; + msg-color = true; + msg-module = true; + prefetch-playlist = true; + save-position-on-quit = true; + screenshot-format = "png"; + screenshot-template = "%F [%p]"; + stop-screensaver = true; + term-osd-bar = true; + use-filedir-conf = true; + + osd-bar-align-y = 0; + osd-bar-h = 2; + osd-bar-w = 60; + osd-border-color = "#FF262626"; + osd-border-size = 2; + osd-color = "#FFFFFFFF"; + osd-duration = 1000; + osd-font-size = 40; + osd-fractions = true; + osd-level = 1; + osd-shadow-color = "#33000000"; + + osc = false; + + blend-subtitles = true; + embeddedfonts = false; + sub-ass-force-margins = true; + sub-ass-force-style = "kerning=yes"; + sub-auto = "fuzzy"; + sub-border-color = "#FF262626"; + sub-border-size = 2.5; + sub-color = "#FFFFFFFF"; + sub-file-paths-append = "srt"; + sub-fix-timing = true; + sub-font-size = 40; + sub-scale-with-window = true; + sub-shadow-color = "#33000000"; + sub-shadow-offset = 1; + sub-spacing = 0.5; + sub-use-margins = true; + + audio-file-auto = "fuzzy"; + volume = 100; + volume-max = 200; + + alang = lang; + slang = lang; + + ytdl = true; + ytdl-raw-options = ''sub-lang="${lang}",write-sub=''; }; }; }; diff --git a/modules/common/nmap.nix b/modules/common/nmap.nix index ba06af3..6c6192c 100644 --- a/modules/common/nmap.nix +++ b/modules/common/nmap.nix @@ -11,6 +11,11 @@ in { options.nixfiles.modules.nmap.enable = mkEnableOption "Nmap"; config = mkIf cfg.enable { + nixfiles.modules.common.shell.aliases = { + nmap-vulners = "nmap -sV --script=vulners/vulners.nse"; + nmap-vulscan = "nmap -sV --script=vulscan/vulscan.nse"; + }; + hm = { home = { file = { @@ -25,17 +30,6 @@ in { ''; }; - programs.bash = { - shellAliases = { - nmap-vulners = "nmap -sV --script=vulners/vulners.nse"; - nmap-vulscan = "nmap -sV --script=vulscan/vulscan.nse"; - }; - initExtra = mkAfter '' - _complete_alias nmap-vulners _nmap nmap - _complete_alias nmap-vulscan _nmap nmap - ''; - }; - systemd.user = { services.update-nmap-vulscan-lists = { Service = { diff --git a/modules/common/profiles/dev/containers.nix b/modules/common/profiles/dev/containers.nix index 6e9346a..027c685 100644 --- a/modules/common/profiles/dev/containers.nix +++ b/modules/common/profiles/dev/containers.nix @@ -14,63 +14,52 @@ in { }; config = mkIf cfg.enable { - hm = { - home = { - sessionVariables = { - MINIKUBE_IN_STYLE = "false"; - WERF_DEV = "true"; - WERF_INSECURE_REGISTRY = "true"; - WERF_LOG_DEBUG = "true"; - WERF_LOG_PRETTY = "false"; - WERF_LOG_VERBOSE = "true"; - WERF_SYNCHRONIZATION = ":local"; - WERF_TELEMETRY = "false"; - }; + nixfiles.modules.common.shell.aliases = { + b = "buildah"; + h = "helm"; + k = "kubectl"; + kns = "kubens"; + ktx = "kubectx"; + }; - packages = with pkgs; [ - argocd - chart-testing - clusterctl - cmctl - datree - istioctl - k9s - kubeconform - kubectl - kubectl-doctor - kubectl-images - kubectl-tree - kubectx - kubelogin-oidc - kubent - kubernetes-helm - kubeseal - kubespy - minikube - skaffold - skopeo - stern - telepresence2 - werf - ]; + hm.home = { + sessionVariables = { + MINIKUBE_IN_STYLE = "false"; + WERF_DEV = "true"; + WERF_INSECURE_REGISTRY = "true"; + WERF_LOG_DEBUG = "true"; + WERF_LOG_PRETTY = "false"; + WERF_LOG_VERBOSE = "true"; + WERF_SYNCHRONIZATION = ":local"; + WERF_TELEMETRY = "false"; }; - programs.bash = { - shellAliases = { - b = "buildah"; - h = "helm"; - k = "kubectl"; - kns = "kubens"; - ktx = "kubectx"; - }; - initExtra = mkAfter '' - _complete_alias b _buildah buildah - _complete_alias h __start_helm helm - _complete_alias k __start_kubectl kubectl - _complete_alias kns _kube_namespaces kubens - _complete_alias ktx _kube_contexts kubectx - ''; - }; + packages = with pkgs; [ + argocd + chart-testing + clusterctl + cmctl + datree + istioctl + k9s + kubeconform + kubectl + kubectl-doctor + kubectl-images + kubectl-tree + kubectx + kubelogin-oidc + kubent + kubernetes-helm + kubeseal + kubespy + minikube + skaffold + skopeo + stern + telepresence2 + werf + ]; }; }; } -- cgit v1.2.3