about summary refs log tree commit diff
path: root/modules/common
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2023-11-23 04:20:34 +0300
committerAzat Bahawi <azat@bahawi.net>2023-11-23 04:20:34 +0300
commit67b82386d8ad8ae3eea5083bd22809f6192d92a8 (patch)
tree41829a0b3e05a9dbb4b0189e34a7b53e401f489e /modules/common
parent2023-11-19 (diff)
2023-11-23
Diffstat (limited to 'modules/common')
-rw-r--r--modules/common/bat.nix36
-rw-r--r--modules/common/common/shell/default.nix266
-rw-r--r--modules/common/common/shell/functions.bash18
-rw-r--r--modules/common/emacs/default.nix48
-rw-r--r--modules/common/git.nix16
-rw-r--r--modules/common/mpv.nix252
-rw-r--r--modules/common/nmap.nix16
-rw-r--r--modules/common/profiles/dev/containers.nix97
8 files changed, 352 insertions, 397 deletions
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
+      ];
     };
   };
 }

Consider giving Nix/NixOS a try! <3