Commit 2c996bd9bdac

Vincent Demeester <vincent@sbr.pm>
2025-04-18 01:10:47
systems and home: working on a first usable configuration…
… for kyushu Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 2ea6b36
home/common/desktop/sway/default.nix
@@ -0,0 +1,320 @@
+{ config, pkgs, ... }:
+let
+  emacs-in-folder = pkgs.writeScript "emacs-in-folder" ''
+    #!/usr/bin/env bash
+    fd . -d 3 --type d ~/src | ${pkgs.wofi}/bin/wofi -dmenu | xargs -I {} zsh -i -c "cd {}; emacs ."
+  '';
+  fontConf = {
+    names = [ "JetBrains Mono" ];
+    size = 12.0;
+  };
+in
+{
+  imports = [
+    ./kanshi.nix
+    ./mako.nix
+    ./rofi.nix
+    ./swayidle.nix
+  ];
+
+  home.packages = with pkgs; [
+    swaybg
+    pinentry-gnome3
+    i3-back
+
+    grim
+    slurp
+
+    wf-recorder
+    wl-clipboard
+    wtype
+
+    zenity
+    wofi
+  ];
+
+  services = {
+    avizo.enable = true;
+    wlsunset = {
+      enable = true;
+      latitude = "48.87";
+      longitude = "2.33";
+    };
+    cliphist = {
+      enable = true;
+      package = pkgs.cliphist;
+    };
+  };
+
+  # FIXME: simplify by spliting keybindings and window-rules in their own configuration
+  wayland.windowManager.sway = {
+    enable = true;
+    wrapperFeatures.gtk = true;
+    # systemd.enable = true;
+    extraSessionCommands = ''
+      export SDL_VIDEODRIVER=wayland
+      export QT_QPA_PLATFORM=wayland
+      export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
+      export _JAVA_AWT_WM_NONREPARTENTING=1
+      export MOZ_ENABLE_WAYLAND=1
+    '';
+    checkConfig = false;
+    config = {
+      gaps = {
+        inner = 2;
+        outer = 2;
+      };
+      colors = {
+        focused = {
+          border = "#BD93F9";
+          background = "#282A36";
+          text = "#ffffff";
+          indicator = "#8BE9FD";
+          childBorder = "#BD93F9";
+        };
+        focusedInactive = {
+          border = "#BD93F9";
+          background = "#282A36";
+          text = "#F8F8F2";
+          indicator = "#44475A";
+          childBorder = "#44475A";
+        };
+        unfocused = {
+          border = "#44475A";
+          background = "#282A36";
+          text = "#BFBFBF";
+          indicator = "#282A36";
+          childBorder = "#282A36";
+        };
+      };
+      modifier = "Mod4";
+      terminal = "${pkgs.kitty}/bin/kitty";
+      menu = "${pkgs.wofi}/bin/wofi -G --show drun -modi 'drun,run,window,ssh'";
+      bindkeysToCode = true;
+      input = {
+        "type:keyboard" = {
+          xkb_layout = "fr,fr,us";
+          xkb_variant = "bepo,ergol,";
+          xkb_options = "grp:menu_toggle,grp_led:caps,compose:caps";
+        };
+      };
+      output = {
+        "*" = {
+          bg = "~/desktop/pictures/lockscreen fill";
+        };
+      };
+      fonts = fontConf;
+      bars = [ ];
+      keybindings =
+        let
+          mod = config.wayland.windowManager.sway.config.modifier;
+          inherit (config.wayland.windowManager.sway.config) left down up right menu terminal;
+        in
+        {
+          "${mod}+Return" = "exec ${terminal}";
+
+          "${mod}+Shift+Return" = "exec emacsclient -c";
+          "${mod}+Control+Return" = "exec emacs";
+          "${mod}+Control+Shift+Return" = "exec ${emacs-in-folder}";
+
+          "${mod}+Left" = "focus left";
+          "${mod}+Down" = "focus down";
+          "${mod}+Up" = "focus up";
+          "${mod}+Right" = "focus right";
+
+          "${mod}+Shift+Left" = "move left";
+          "${mod}+Shift+Down" = "move down";
+          "${mod}+Shift+Up" = "move up";
+          "${mod}+Shift+Right" = "move right";
+
+          "${mod}+Control+Left" = "workspace prev_on_output";
+          "${mod}+Control+Down" = "workspace prev";
+          "${mod}+Control+Up" = "workspace next";
+          "${mod}+Control+Right" = "workspace next_on_output";
+
+          "${mod}+Shift+Control+Left" = "move workspace to output left";
+          "${mod}+Shift+Control+Down" = "move workspace to output down";
+          "${mod}+Shift+Control+Up" = "move workspace to output up";
+          "${mod}+Shift+Control+Right" = "move workspace to output right";
+
+          "${mod}+Shift+space" = "floating toggle";
+          "${mod}+space" = "focus mode_toggle";
+          "${mod}+Tab" = "[con_mark=_back] focus";
+
+          # "XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set 10%+";
+          # "XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set 10%-";
+          "XF86MonBrightnessUp" = "exec ${pkgs.avizo}/bin/lightctl up";
+          "XF86MonBrightnessDown" = "exec ${pkgs.avizo}/bin/lightctl down";
+          "Shift+XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set 1%+";
+          "Shift+XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set 1%-";
+        };
+      window.commands = [
+        {
+          command = "inhibit_idle fullscreen";
+          criteria.app_id = "firefox";
+        }
+        {
+          command = "inhibit_idle fullscreen";
+          criteria.app_id = "mpv";
+        }
+        {
+          # spotify doesn't set its WM_CLASS until it has mapped, so the assign is not reliable
+          command = "move to workspace 10";
+          criteria.class = "Spotify";
+        }
+        {
+          command = "move to scratchpad, scratchpad show";
+          criteria = {
+            app_id = "metask";
+          };
+        }
+        {
+          command = "move to scratchpad, scratchpad show";
+          criteria = {
+            app_id = "emacs";
+            title = "^_emacs scratchpad_$";
+          };
+        }
+        {
+          criteria = { title = "Save File"; };
+          command = "floating enable, resize set width 600px height 800px";
+        }
+        {
+          criteria = { class = "pwvucontrol"; };
+          command = "floating enable";
+        }
+        {
+          criteria = { title = "(Sharing Indicator)"; };
+          command = "inhibit_idle visible, floating enable";
+        }
+        {
+          # browser zoom|meet|bluejeans
+          criteria = { title = "(Blue Jeans)|(Meet)|(Zoom Meeting)"; };
+          command = "inhibit_idle visible";
+        }
+        # for_window [app_id="^chrome-.*"] shortcuts_inhibitor disable
+        {
+          criteria = { app_id = "^chrome-.*"; };
+          command = "shortcuts_inhibitor disable";
+        }
+      ];
+      startup = [
+        { command = "dbus-update-activation-environment --systemd WAYLAND_DISPLAY DISPLAY DBUS_SESSION_BUS_ADDRESS SWAYSOCK XDG_SESSION_TYPE XDG_SESSION_DESKTOP XDG_CURRENT_DESKTOP"; } #workaround
+        # Make sure we update systemd service env variables with the current ones. This is required for dbus to work properly.
+        { command = "dbus-update-activation-environment --systemd --all"; }
+        { command = "systemctl --user restart kanshi"; always = true; }
+        { command = "${pkgs.pa-notify}/bin/pa-notify -u0"; always = true; }
+        # Probably put a condition here.
+        { command = "emacs --fg-daemon"; }
+        { command = "i3-back"; }
+        { command = "firefox"; }
+        { command = "${pkgs.kitty}/bin/kitty --title metask --class metask"; }
+      ];
+    };
+    extraConfig =
+      let
+        mod = config.wayland.windowManager.sway.config.modifier;
+        inherit (config.wayland.windowManager.sway.config) left down up right menu terminal;
+      in
+      ''
+        bindcode ${mod}+33 exec "${menu}"
+        bindcode ${mod}+Shift+33 exec "raffi -I"
+        bindcode ${mod}+Control+33 exec "${pkgs.wofi-emoji}/bin/wofi-emoji -G"
+        bindcode ${mod}+Shift+24 kill
+        bindcode ${mod}+38 focus parent
+        bindcode ${mod}+39 layout stacking
+        bindcode ${mod}+25 layout tabbed
+        bindcode ${mod}+26 layout toggle split
+        bindcode ${mod}+Shift+54 reload
+        bindcode ${mod}+Shift+26 exec "swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'"
+
+        mode "resize" {
+            bindsym Shift+Left resize grow width 5px
+            bindsym Shift+Down resize shrink height 5px
+            bindsym Shift+Up resize grow height 5px
+            bindsym Shift+Right resize shrink width 5px
+
+            bindsym Control+Left resize grow width 50px
+            bindsym Control+Down resize shrink height 50px
+            bindsym Control+Up resize grow height 50px
+            bindsym Control+Right resize shrink width 50px
+
+            # Ditto, with arrow keys
+            bindsym Left resize grow width 15px
+            bindsym Down resize shrink height 15px
+            bindsym Up resize grow height 15px
+            bindsym Right resize shrink width 15px
+
+            # Return to default mode
+            bindsym Return mode "default"
+            bindsym Escape mode "default"
+        }
+
+        bindcode ${mod}+32 mode "resize"
+
+        bindcode ${mod}+Shift+32 exec "${pkgs.swaylock}/bin/swaylock -i $HOME/desktop/pictures/lockscreen"
+
+        bindcode ${mod}+24 exec notify-send --icon=battery --category=info --urgency=critical "$(acpi)"
+        # bindcode ${mod}+58 exec
+        bindcode ${mod}+28 exec notify-send --icon=clock --category=info --urgency=critical "$(date +"%I:%M")"
+        bindcode ${mod}+Shift+28 exec notify-send --icon=clock --category=info --urgency=critical "$(date)" 
+
+        # switch to workspace
+        bindcode ${mod}+10 workspace number 1
+        bindcode ${mod}+11 workspace number 2
+        bindcode ${mod}+12 workspace number 3
+        bindcode ${mod}+13 workspace number 4
+        bindcode ${mod}+14 workspace number 5
+        bindcode ${mod}+15 workspace number 6
+        bindcode ${mod}+16 workspace number 7
+        bindcode ${mod}+17 workspace number 8
+        bindcode ${mod}+18 workspace number 9
+        bindcode ${mod}+19 workspace number 10
+
+        # move focused container to workspace
+        bindcode ${mod}+Shift+10 move container to workspace number 1
+        bindcode ${mod}+Shift+11 move container to workspace number 2
+        bindcode ${mod}+Shift+12 move container to workspace number 3
+        bindcode ${mod}+Shift+13 move container to workspace number 4
+        bindcode ${mod}+Shift+14 move container to workspace number 5
+        bindcode ${mod}+Shift+15 move container to workspace number 6
+        bindcode ${mod}+Shift+16 move container to workspace number 7
+        bindcode ${mod}+Shift+17 move container to workspace number 8
+        bindcode ${mod}+Shift+18 move container to workspace number 9
+        bindcode ${mod}+Shift+19 move container to workspace number 10
+
+        bindcode ${mod}+Control+39 split h
+        bindcode ${mod}+41 fullscreen toggle
+
+        # bindsym XF86AudioRaiseVolume exec ${pkgs.pamixer}/bin/pamixer -ui 5 && ${pkgs.pamixer}/bin/pamixer --get-volume > $SWAYSOCK.wob
+        # bindsym XF86AudioLowerVolume exec ${pkgs.pamixer}/bin/pamixer -ud 5 && ${pkgs.pamixer}/bin/pamixer --get-volume > $SWAYSOCK.wob
+        # bindsym XF86AudioMute exec ${pkgs.pamixer}/bin/pamixer --toggle-mute && ( ${pkgs.pamixer}/bin/pamixer --get-mute && echo 0 > $SWAYSOCK.wob ) || ${pkgs.pamixer}/bin/pamixer --get-volume > $SWAYSOCK.wob
+        bindsym XF86AudioRaiseVolume exec ${pkgs.avizo}/bin/volumectl -u up
+        bindsym XF86AudioLowerVolume exec ${pkgs.avizo}/bin/volumectl -u down
+        bindsym XF86AudioMute exec exec ${pkgs.avizo}/bin/volumectl toogle-mute
+
+        bindsym XF86AudioPlay exec "playerctl play-pause"
+        bindsym XF86Messenger exec "playerctl play-pause"
+        bindsym XF86AudioNext exec "playerctl next"
+        bindsym XF86Go exec "playerctl next"
+        bindsym XF86AudioPrev exec "playerctl previous"
+        bindsym Cancel exec "playerctl previous"
+
+        bindcode ${mod}+49 exec swaymsg [app_id="metask"] scratchpad show || exec ${pkgs.kitty}/bin/kitty --title metask --class metask
+        bindsym --whole-window button8 exec sswaymsg [app_id="metask"] scratchpad show || exec ${pkgs.kitty}/bin/kitty --title metask --class metask
+        bindcode ${mod}+Shift+49 exec swaymsg '[app_id="emacs" title="^_emacs scratchpad_$"]' scratchpad show || exec ${config.programs.emacs.package}/bin/emacsclient -c -F "((name . \"_emacs scratchpad_\"))"
+        bindsym --whole-window button9 exec swaymsg '[app_id="emacs" title="^_emacs scratchpad_$"]' scratchpad show || exec ${config.programs.emacs.package}/bin/emacsclient -c -F "((name . \"_emacs scratchpad_\"))"
+
+        # Mouse
+        # Disabled as it doesn't play well with thinkpad's trackpoint :D
+        # bindsym --whole-window button6 workspace next_on_output
+        # bindsym --whole-window button7 workspace prev_on_output
+
+        bindsym ${mod}+F10 exec ${pkgs.my.scripts}/bin/shot %d
+        bindsym ${mod}+Shift+F10 exec ${pkgs.my.scripts}/bin/shotf %d
+
+        bindsym ${mod}+F9 exec ${pkgs.mako}/bin/makoctl mode -s do-not-disturb
+        bindsym ${mod}+Shift+F9 exec ${pkgs.mako}/bin/makoctl mode -s default
+      '';
+  };
+}
home/common/desktop/sway/kanshi.nix
@@ -0,0 +1,34 @@
+_: {
+  services.kanshi = {
+    enable = true;
+    settings = [
+      # Make it configurable per host
+      {
+        profile.name = "aomi";
+        profile.outputs = [
+          { criteria = "eDP-1"; status = "disable"; }
+          { criteria = "DP-1"; status = "enable"; position = "0,0"; mode = "3440x1440"; scale = 1.0; }
+        ];
+      }
+      {
+        profile.name = "home-undocked";
+        profile.outputs = [
+          # Output eDP-1 'AU Optronics 0xD291 Unknown'
+          { criteria = "eDP-1"; status = "enable"; position = "0,0"; mode = "1920x1200"; scale = 1.0; }
+        ];
+      }
+      {
+        profile.name = "home-docked";
+        profile.outputs = [
+          # Old: Output eDP-1 'AU Optronics 0xD291 Unknown'
+          # Output eDP-1 'Unknown 0xD291 Unknown'
+          # Output DP-5 'LG Electronics LG ULTRAWIDE 0x0005D10C' (focused)
+          # { criteria = "LG Electronics LG ULTRAWIDE 0x0000D50C"; status = "enable"; position = "0,0"; mode = "3440x1440"; scale = 1.0; }
+          { criteria = "DP-5"; status = "enable"; position = "0,0"; mode = "3440x1440"; scale = 1.0; }
+          # Use it as a "shareable" screen when needed
+          { criteria = "eDP-1"; status = "enable"; position = "1460,1440"; mode = "1920x1200"; scale = 1.0; }
+        ];
+      }
+    ];
+  };
+}
home/common/desktop/sway/mako.nix
@@ -0,0 +1,60 @@
+_:
+{
+  services.mako = {
+    enable = true;
+    font = "JetBrains Mono 12";
+    defaultTimeout = 8000; # 5s timeout
+    groupBy = "app-name,summary";
+    # FIXME: hide pulseaudio notifications (maybe they don't show up without pasystray)
+    extraConfig = ''
+      width=400
+      on-button-left=dismiss
+      on-button-middle=invoke-default-action
+      on-button-right=dismiss
+      border-radius=6
+      border-size=3
+      border-color=#db7508
+      format=<b>%s</b>\n%b\n<i>%a</i>
+      icon-path=/run/current-system/sw/share/icons/Qogir-dark:/run/current-system/sw/share/icons/hicolor
+
+      [urgency=low]
+      background-color=#282c30
+      text-color=#888888
+      default-timeout=2000
+
+      [urgency=normal]
+      background-color=#282c30
+      text-color=#ffffff
+      default-timeout=5000
+
+      [urgency=high]
+      background-color=#900000
+      text-color=#ffffff
+      border-color=#ff0000
+
+      [app-name="pa-notify"]
+      background-color=#0080ff
+      text-color=#333333
+      anchor=bottom-right
+      format=<b>%s</b>\n%b
+
+      [category="build"]
+      anchor=bottom-right
+      format=<b>%s</b>\n%b
+
+      [category="recording"]
+      anchor=bottom-right
+      format=<b>%s</b>\n%b
+
+      [category="info"]
+      anchor=center
+      format=<b>%s</b> %b
+
+      #[app-name="Google Chrome" body~="calendar.google.com.*"]
+      #max-visible=2
+
+      [mode=do-not-disturb]
+      invisible=1
+    '';
+  };
+}
home/common/desktop/sway/rofi.nix
@@ -0,0 +1,15 @@
+{ lib, pkgs, ... }:
+{
+  home.packages = with pkgs; [
+    fuzzel
+    raffi
+  ];
+
+  # FIXME updates this
+  xdg.configFile."raffi/raffi.yaml".text = lib.generators.toYAML { } {
+    "firefox" = {
+      binary = "firefox";
+      args = [ "--marionette" ];
+    };
+  };
+}
home/common/desktop/sway/swayidle.nix
@@ -0,0 +1,21 @@
+{ pkgs, ... }:
+{
+  home.packages = with pkgs; [
+    swaylock
+    swayidle
+  ];
+  services.swayidle = {
+    enable = true;
+    events = [
+      { event = "before-sleep"; command = "${pkgs.swaylock}/bin/swaylock --daemonize -i $HOME/desktop/pictures/lockscreen"; }
+      { event = "lock"; command = "${pkgs.swaylock}/bin/swaylock --daemonize -i $HOME/desktop/pictures/lockscreen"; }
+    ];
+    timeouts = [
+      {
+        timeout = 600;
+        command = ''${pkgs.sway}/bin/swaymsg "output * power off"'';
+        resumeCommand = ''${pkgs.sway}/bin/swaymsg "output * power on"'';
+      }
+    ];
+  };
+}
home/common/desktop/default.nix
@@ -0,0 +1,52 @@
+{ config, pkgs, desktop, ... }:
+{
+  imports = [
+    # FIXME why the infinite recusion
+    # (./. + "/${desktop}")
+    ./sway
+
+    ./firefox.nix
+    ./gtk.nix
+    ./kitty.nix
+    ./mpv.nix
+    ./passage.nix
+    ./xdg.nix
+  ];
+
+  home.packages = with pkgs; [
+    aspell
+    aspellDicts.en
+    aspellDicts.fr
+    ffmpeg-full
+    hunspell
+    hunspellDicts.en_GB-ize
+    hunspellDicts.en_US-large
+    hunspellDicts.fr-any
+    libnotify
+    loupe
+    papers
+    playerctl
+    pwvucontrol
+    trash-cli
+    yt-dlp
+
+    unstable.signal-desktop
+  ];
+
+  home.pointerCursor = {
+    gtk.enable = true;
+    x11.enable = true;
+    package = pkgs.qogir-icon-theme;
+    name = "Qogir";
+    size = 24;
+  };
+
+  services = {
+    udiskie.enable = true;
+  };
+
+  home.file.".oath" = {
+    source = config.lib.file.mkOutOfStoreSymlink "/home/vincent/desktop/documents/.oath";
+    recursive = true;
+  };
+}
home/common/desktop/firefox.nix
@@ -0,0 +1,117 @@
+{ pkgs, ... }:
+
+{
+  programs.firefox = {
+    enable = true;
+    # Temporary fix
+    # https://github.com/nix-community/home-manager/issues/1641
+    # (https://github.com/NixOS/nixpkgs/pull/105796)
+    package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
+      extraPolicies = {
+        ExtensionSettings = { };
+        CaptivePortal = false;
+        DisableFirefoxStudies = true;
+        DisablePocket = true;
+        DisableTelemetry = true;
+        # DisableFirefoxAccounts = true;
+        FirefoxHome = {
+          Pocket = false;
+          # Snippets = false;
+        };
+        UserMessaging = {
+          ExtensionRecommendations = false;
+          SkipOnboarding = true;
+        };
+      };
+    };
+
+    profiles.default = {
+      id = 0;
+      isDefault = true;
+      settings = {
+        "general.warnOnAboutConfig" = false;
+        "browser.aboutConfig.showWarning" = false;
+        # It keeps asking me on startup if I want firefox as default
+        "browser.shell.checkDefaultBrowser" = false;
+        # Disable pocket
+        "extensions.pocket.enabled" = false;
+        "extensions.pocket.site" = "";
+        "extensions.pocket.oAuthConsumerKey" = "";
+        "extensions.pocket.api" = "";
+        "extensions.htmlaboutaddons.recommendations.enabled" = false;
+        # performance
+        "browser.download.animateNotifications" = false;
+        "browser.tabs.animate" = false;
+        "toolkit.cosmeticAnimations.enabled" = false;
+        "html5.offmainthread" = true;
+        "layers.acceleration.force-enabled" = true;
+        "layers.async-video.enabled" = true;
+        "layers.offmainthreadcomposition.async-animations" = true;
+        "layers.offmainthreadcomposition.enabled" = true;
+        "layout.frame_rate.precise" = true;
+        "webgl.force-enabled" = true;
+        "gfx.xrender.enabled" = true;
+        "gfx.webrender.all" = true;
+        "gfx.webrender.enable" = true;
+        # Misc
+        "privacy.donottrackheader.enabled" = true;
+        # "privacy.firstparty.isolate" = true;
+        #"privacy.resistFingerprinting" = true;
+        "privacy.trackingprotection.cryptomining.enabled" = true;
+        "privacy.trackingprotection.enabled" = true;
+        "privacy.trackingprotection.fingerprinting.enabled" = true;
+        "privacy.trackingprotection.socialtracking.enabled" = true;
+        # FIXME(vdemeester) Enable thoses
+        #"privacy.clearOnShutdown.history" = true;
+        #"privacy.clearOnShutdown.siteSettings" = true;
+        "browser.formfill.enable" = false;
+        "browser.newtabpage.activity-stream.feeds.telemetry" = false;
+        "browser.newtabpage.activity-stream.telemetry" = false;
+        "browser.ping-centre.telemetry" = false;
+        "browser.safebrowsing.enabled" = false;
+        "browser.search.geoip.url" = "";
+        "browser.selfsupport.url" = "";
+        "browser.send_pings" = false;
+        "browser.send_pings.require_same_host" = true;
+        "browser.sessionstore.privacy_level" = 2;
+        "browser.startup.homepage_override.buildID" = "";
+        "browser.startup.homepage_override.mstone" = "ignore";
+        "browser.urlbar.speculativeConnect.enabled" = false;
+        "browser.contentblocking.category" = "strict";
+        "browser.ctrlTab.recentlyUsedOrder" = false;
+        "network.dns.disablePrefetch" = true;
+        "network.dnsCacheEntries" = 100;
+        "network.dnsCacheExpiration" = 60;
+        #"network.http.referer.XOriginPolicy" = 2;
+        #"network.http.referer.XOriginTrimmingPolicy" = 2;
+        #"network.http.referer.spoofSource" = true;
+        "network.http.sendRefererHeader" = 2;
+        #"network.http.sendSecureXSiteReferrer" = false;
+        #"network.http.speculative-parallel-limit" = 0;
+        "network.predictor.enabled" = false;
+        "network.prefetch-next" = false;
+        "media.peerconnection.enabled" = false;
+        "media.peerconnection.turn.disable" = true;
+        "media.peerconnection.video.enabled" = false;
+        "media.peerconnection.identity.timeout" = 1;
+        "dom.battery.enabled" = false;
+        # "dom.event.clipboardevents.enabled" = false;
+        "dom.event.contextmenu.enabled" = false;
+        "toolkit.telemetry.archive.enabled" = false;
+        "toolkit.telemetry.bhrPing.enabled" = false;
+        "toolkit.telemetry.cachedClientID" = "";
+        "toolkit.telemetry.enabled" = false;
+        "toolkit.telemetry.firstShutdownPing.enabled" = false;
+        "toolkit.telemetry.hybridContent.enabled" = false;
+        "toolkit.telemetry.newProfilePing.enabled" = false;
+        "toolkit.telemetry.reportingpolicy.firstRun" = false;
+        "toolkit.telemetry.server" = "";
+        "toolkit.telemetry.shutdownPingSender.enabled" = false;
+        "toolkit.telemetry.unified" = false;
+        "toolkit.telemetry.updatePing.enabled" = false;
+        # Red Hat specific
+        "network.negotiate-auth.trusted-uris" = ".redhat.com";
+      };
+    };
+  };
+}
home/common/desktop/gtk.nix
@@ -0,0 +1,17 @@
+{ pkgs, config, ... }:
+{
+  gtk = {
+    enable = true;
+    iconTheme = {
+      name = "Arc";
+      package = pkgs.arc-icon-theme;
+    };
+    theme = {
+      name = "Arc";
+      package = pkgs.arc-theme;
+    };
+    gtk2 = {
+      configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
+    };
+  };
+}
home/common/desktop/kitty.nix
@@ -0,0 +1,35 @@
+_: {
+  programs.kitty = {
+    enable = true;
+    shellIntegration.enableZshIntegration = true;
+    settings = {
+      term = "xterm-256color";
+      close_on_child_death = "yes";
+      font_family = "JetBrains Mono";
+      tab_bar_edge = "top";
+      listen_on = "unix:/tmp/my kitty";
+      allow_remote_control = "yes";
+      macos_option_as_alt = "yes";
+      copy_on_select = "yes";
+      notify_on_cmd_finish = "invisible 5.0 notify";
+
+      active_tab_foreground = "#C6A0F6";
+      active_tab_background = "#0c0c0c";
+      inactive_tab_foreground = "#6E738D";
+      inactive_tab_background = "#0c0c0c";
+    };
+    font = {
+      name = "JetBrains Mono";
+      size = 12;
+    };
+    keybindings = {
+      "shift+left" = "neighboring_window left";
+      "shift+right" = "neighboring_window right";
+      "shift+up" = "neighboring_window up";
+      "shift+down" = "neighboring_window down";
+    };
+    theme = "Tango Light";
+    # action_alias mkh kitten hints --alphabet asdfghjklqwertyuiopzxcvbnmASDFGHJKLQWERTYUIOPZXCVBNM 
+    # map kitty_mod+n    mkh --type=linenum emacsclient -c -nw +{line} {path}
+  };
+}
home/common/desktop/mpv.nix
@@ -0,0 +1,10 @@
+{ pkgs, ... }:
+{
+  programs.mpv = {
+    enable = true;
+    config = {
+      hwdec = "auto";
+    };
+    scripts = [ pkgs.mpvScripts.mpris pkgs.mpvScripts.modernz ];
+  };
+}
home/common/desktop/passage.nix
@@ -0,0 +1,11 @@
+{ config, pkgs, ... }:
+{
+  home.sessionVariables = {
+    "PASSAGE_DIR" = "${config.xdg.dataHome}/passage";
+    "PASSAGE_IDENTITIES_FILE" = "${config.xdg.dataHome}/passage/identities";
+  };
+
+  home.packages = with pkgs; [
+    passage
+  ];
+}
home/common/desktop/xdg.nix
@@ -0,0 +1,91 @@
+{ pkgs, ... }:
+let
+  browser = [ "firefox.desktop" ];
+  videoPlayer = [ "mpv.desktop" ];
+  imageViewer = [ "org.gnome.Loupe.desktop" ];
+in
+{
+  home.packages = with pkgs; [
+    desktop-file-utils
+    xdg-user-dirs
+    xdg-utils
+  ];
+  xdg = {
+    enable = true;
+    portal = {
+      enable = true;
+      xdgOpenUsePortal = true;
+      extraPortals = with pkgs; [
+        xdg-desktop-portal-hyprland
+        xdg-desktop-portal-gtk
+      ];
+      config = {
+        common = {
+          default = [
+            "gtk"
+          ];
+        };
+      };
+    };
+    mimeApps = {
+      enable = true;
+      defaultApplications = {
+        "application/x-extension-htm" = browser;
+        "application/x-extension-html" = browser;
+        "application/x-extension-shtml" = browser;
+        "application/x-extension-xht" = browser;
+        "application/x-extension-xhtml" = browser;
+        "application/xhtml+xml" = browser;
+        "text/html" = browser;
+        "x-scheme-handler/about" = browser;
+        "x-scheme-handler/chrome" = browser;
+        "x-scheme-handler/ftp" = browser;
+        "x-scheme-handler/http" = browser;
+        "x-scheme-handler/https" = browser;
+        "x-scheme-handler/unknown" = browser;
+
+        "audio/*" = videoPlayer;
+        "video/*" = videoPlayer;
+        "image/*" = imageViewer;
+
+        "application/json" = browser;
+
+        "application/pdf" = [ "org.gnome.Papers.desktop" ];
+
+        # Images
+        "image/jpeg" = imageViewer;
+        "image/png" = imageViewer;
+        "image/gif" = imageViewer;
+        "image/webp" = imageViewer;
+        "image/tiff" = imageViewer;
+        "image/x-tga" = imageViewer;
+        "image/vnd-ms.dds" = imageViewer;
+        "image/x-dds" = imageViewer;
+        "image/bmp" = imageViewer;
+        "image/vnd.microsoft.icon" = imageViewer;
+        "image/vnd.radiance" = imageViewer;
+        "image/x-exr" = imageViewer;
+        "image/x-portable-bitmap" = imageViewer;
+        "image/x-portable-graymap" = imageViewer;
+        "image/x-portable-pixmap" = imageViewer;
+        "image/x-portable-anymap" = imageViewer;
+        "image/x-qoi" = imageViewer;
+        "image/svg+xml" = imageViewer;
+        "image/svg+xml-compressed" = imageViewer;
+        "image/avif" = imageViewer;
+        "image/heic" = imageViewer;
+        "image/jxl" = imageViewer;
+      };
+    };
+    desktopEntries = {
+      firefox = {
+        name = "Firefox";
+        genericName = "Web Browser";
+        exec = "firefox %U";
+        terminal = false;
+        categories = [ "Application" "Network" "WebBrowser" ];
+        mimeType = [ "text/html" "text/xml" ];
+      };
+    };
+  };
+}
home/common/shell/tmux/tmux.conf
@@ -0,0 +1,97 @@
+# Tmux configuration file
+# Documented by Vincent Demeester.
+# Note that I am using bepo keyboard (that why key binding might be a
+# little weird for you).
+# First thing first, quickly reload $HOME/.tmux.conf
+#bind o source-file ~/.tmux.conf; display "tmux configuration reloaded."
+set -g history-limit 500000
+# Be sure to deactive the mode
+# set -g mode-mouse off
+# By default tmux adds a small delay when sending commands.
+# Reducing this delay by setting escape-time.
+set -sg escape-time 1
+bind v paste-buffer
+# Vim-behavior for moving between panes
+bind c select-pane -L
+bind t select-pane -D
+bind s select-pane -U
+bind r select-pane -R
+# Re-binding new-window and kill-pane to something more bepo-ish
+bind x new-window
+unbind c
+bind y kill-pane
+# Re-binding list-of-session
+bind u list-sessions
+# Vim-behavior for moving between windows
+bind -r C-t select-window -t :-
+bind -r C-s select-window -t :+
+# Vim-behavior for resizing panes
+bind -r C resize-pane -L 5
+bind -r T resize-pane -D 5
+bind -r S resize-pane -U 5
+bind -r R resize-pane -R 5
+# vi-mode for copy.
+set -g mode-key vi
+# `PREFIX`-`ESCAPE` for going into copy mode
+bind-key ESCAPE copy-mode
+bind-key b copy-mode
+# Rebinding some vi-copy keys in a more bepoish fashion.
+#bind-key -Tvi-copy 'v' begin-selection
+#bind-key -Tvi-copy 'y' copy-selection
+#bind-key -Tvi-copy 'C' top-line
+#bind-key -Tvi-copy 'T' scroll-down
+#bind-key -Tvi-copy 'S' scroll-up
+#bind-key -Tvi-copy 'R' bottom-line
+#bind-key -Tvi-copy 'c' cursor-left
+#bind-key -Tvi-copy 't' cursor-down
+#bind-key -Tvi-copy 's' cursor-up
+#bind-key -Tvi-copy 'r' cursor-right
+# Telling childs that this is a 256 terminal multiplexer
+set -g default-terminal "screen-256color"
+# Maximizing/Restoring panes (useful for *a lot* of workflows)
+unbind Up
+bind Up new-window -d -n tmp \; swap-pane -s tmp \; select-window -t tmp
+unbind Down
+bind Down last-window \; swap-pane -s tmp \; kill-window -t tmp
+# Recording pane content to a file. (This is crasy !)
+bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"
+
+# titles
+# set -g show -g says
+set -g set-titles on
+set -g set-titles-string "tmux - #S:#I.#P (#W)"
+# Set window notifications
+setw -g monitor-activity on
+set -g visual-activity on
+# Rather than constraining window size to the maximum size of any client
+# connected to the *session*, constrain window size to the maximum size of any
+# client connected to *that window*. Much more reasonable.
+setw -g aggressive-resize on
+# binding
+bind-key C-a last-window
+bind-key C-r command-prompt 'rename-window %%'
+bind-key '"' split-window -v -c '#{pane_current_path}'
+bind-key '%' split-window -h -c '#{pane_current_path}'
+
+# Custom status line
+set-option -g status-left '-- #[fg=colour253]#S - '
+set-window-option -g window-status-format '#[fg=colour244]#I/#[fg=colour253] #W '
+set-window-option -g window-status-current-format '#[fg=colour244]#I/#[fg=colour253,bg=colour238] #W '
+set-option -g status-right '#[fg=colour250] %Y-%m-%d #[fg=colour254]%H.%M'
+set-option -g status-bg colour234
+set-option -g status-fg colour007
+set-option -g status-position top
+
+# Custom split colours
+set -g pane-active-border-style bg=colour234,fg=colour234
+set -g pane-border-style bg=colour234,fg=colour234
+
+# loud or quiet?
+set-option -g visual-activity off
+set-option -g visual-bell on
+set-option -g visual-silence off
+set-window-option -g monitor-activity on
+set-option -g bell-action none
+
+bind m switch-client -l
+bind M command-prompt -p 'switch session:' "run \"tm.sh '%%'\""
\ No newline at end of file
home/common/shell/zsh/_kubectl
@@ -0,0 +1,8634 @@
+#compdef kubectl
+
+# Copyright 2016 The Kubernetes Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+__kubectl_bash_source() {
+	alias shopt=':'
+	alias _expand=_bash_expand
+	alias _complete=_bash_comp
+	emulate -L sh
+	setopt kshglob noshglob braceexpand
+
+	source "$@"
+}
+
+__kubectl_type() {
+	# -t is not supported by zsh
+	if [ "$1" == "-t" ]; then
+		shift
+
+		# fake Bash 4 to disable "complete -o nospace". Instead
+		# "compopt +-o nospace" is used in the code to toggle trailing
+		# spaces. We don't support that, but leave trailing spaces on
+		# all the time
+		if [ "$1" = "__kubectl_compopt" ]; then
+			echo builtin
+			return 0
+		fi
+	fi
+	type "$@"
+}
+
+__kubectl_compgen() {
+	local completions w
+	completions=( $(compgen "$@") ) || return $?
+
+	# filter by given word as prefix
+	while [[ "$1" = -* && "$1" != -- ]]; do
+		shift
+		shift
+	done
+	if [[ "$1" == -- ]]; then
+		shift
+	fi
+	for w in "${completions[@]}"; do
+		if [[ "${w}" = "$1"* ]]; then
+			echo "${w}"
+		fi
+	done
+}
+
+__kubectl_compopt() {
+	true # don't do anything. Not supported by bashcompinit in zsh
+}
+
+__kubectl_ltrim_colon_completions()
+{
+	if [[ "$1" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then
+		# Remove colon-word prefix from COMPREPLY items
+		local colon_word=${1%${1##*:}}
+		local i=${#COMPREPLY[*]}
+		while [[ $((--i)) -ge 0 ]]; do
+			COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"}
+		done
+	fi
+}
+
+__kubectl_get_comp_words_by_ref() {
+	cur="${COMP_WORDS[COMP_CWORD]}"
+	prev="${COMP_WORDS[${COMP_CWORD}-1]}"
+	words=("${COMP_WORDS[@]}")
+	cword=("${COMP_CWORD[@]}")
+}
+
+__kubectl_filedir() {
+	local RET OLD_IFS w qw
+
+	__kubectl_debug "_filedir $@ cur=$cur"
+	if [[ "$1" = \~* ]]; then
+		# somehow does not work. Maybe, zsh does not call this at all
+		eval echo "$1"
+		return 0
+	fi
+
+	OLD_IFS="$IFS"
+	IFS=$'\n'
+	if [ "$1" = "-d" ]; then
+		shift
+		RET=( $(compgen -d) )
+	else
+		RET=( $(compgen -f) )
+	fi
+	IFS="$OLD_IFS"
+
+	IFS="," __kubectl_debug "RET=${RET[@]} len=${#RET[@]}"
+
+	for w in ${RET[@]}; do
+		if [[ ! "${w}" = "${cur}"* ]]; then
+			continue
+		fi
+		if eval "[[ \"\${w}\" = *.$1 || -d \"\${w}\" ]]"; then
+			qw="$(__kubectl_quote "${w}")"
+			if [ -d "${w}" ]; then
+				COMPREPLY+=("${qw}/")
+			else
+				COMPREPLY+=("${qw}")
+			fi
+		fi
+	done
+}
+
+__kubectl_quote() {
+    if [[ $1 == \'* || $1 == \"* ]]; then
+        # Leave out first character
+        printf %q "${1:1}"
+    else
+	printf %q "$1"
+    fi
+}
+
+autoload -U +X bashcompinit && bashcompinit
+
+# use word boundary patterns for BSD or GNU sed
+LWORD='[[:<:]]'
+RWORD='[[:>:]]'
+if sed --help 2>&1 | grep -q GNU; then
+	LWORD='\<'
+	RWORD='\>'
+fi
+
+__kubectl_convert_bash_to_zsh() {
+	sed \
+	-e 's/declare -F/whence -w/' \
+	-e 's/_get_comp_words_by_ref "\$@"/_get_comp_words_by_ref "\$*"/' \
+	-e 's/local \([a-zA-Z0-9_]*\)=/local \1; \1=/' \
+	-e 's/flags+=("\(--.*\)=")/flags+=("\1"); two_word_flags+=("\1")/' \
+	-e 's/must_have_one_flag+=("\(--.*\)=")/must_have_one_flag+=("\1")/' \
+	-e "s/${LWORD}_filedir${RWORD}/__kubectl_filedir/g" \
+	-e "s/${LWORD}_get_comp_words_by_ref${RWORD}/__kubectl_get_comp_words_by_ref/g" \
+	-e "s/${LWORD}__ltrim_colon_completions${RWORD}/__kubectl_ltrim_colon_completions/g" \
+	-e "s/${LWORD}compgen${RWORD}/__kubectl_compgen/g" \
+	-e "s/${LWORD}compopt${RWORD}/__kubectl_compopt/g" \
+	-e "s/${LWORD}declare${RWORD}/builtin declare/g" \
+	-e "s/\\\$(type${RWORD}/\$(__kubectl_type/g" \
+	<<'BASH_COMPLETION_EOF'
+# bash completion for kubectl                              -*- shell-script -*-
+
+__kubectl_debug()
+{
+    if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then
+        echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
+    fi
+}
+
+# Homebrew on Macs have version 1.3 of bash-completion which doesn't include
+# _init_completion. This is a very minimal version of that function.
+__kubectl_init_completion()
+{
+    COMPREPLY=()
+    _get_comp_words_by_ref "$@" cur prev words cword
+}
+
+__kubectl_index_of_word()
+{
+    local w word=$1
+    shift
+    index=0
+    for w in "$@"; do
+        [[ $w = "$word" ]] && return
+        index=$((index+1))
+    done
+    index=-1
+}
+
+__kubectl_contains_word()
+{
+    local w word=$1; shift
+    for w in "$@"; do
+        [[ $w = "$word" ]] && return
+    done
+    return 1
+}
+
+__kubectl_handle_reply()
+{
+    __kubectl_debug "${FUNCNAME[0]}"
+    case $cur in
+        -*)
+            if [[ $(type -t compopt) = "builtin" ]]; then
+                compopt -o nospace
+            fi
+            local allflags
+            if [ ${#must_have_one_flag[@]} -ne 0 ]; then
+                allflags=("${must_have_one_flag[@]}")
+            else
+                allflags=("${flags[*]} ${two_word_flags[*]}")
+            fi
+            COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") )
+            if [[ $(type -t compopt) = "builtin" ]]; then
+                [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
+            fi
+
+            # complete after --flag=abc
+            if [[ $cur == *=* ]]; then
+                if [[ $(type -t compopt) = "builtin" ]]; then
+                    compopt +o nospace
+                fi
+
+                local index flag
+                flag="${cur%=*}"
+                __kubectl_index_of_word "${flag}" "${flags_with_completion[@]}"
+                COMPREPLY=()
+                if [[ ${index} -ge 0 ]]; then
+                    PREFIX=""
+                    cur="${cur#*=}"
+                    ${flags_completion[${index}]}
+                    if [ -n "${ZSH_VERSION}" ]; then
+                        # zsh completion needs --flag= prefix
+                        eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
+                    fi
+                fi
+            fi
+            return 0;
+            ;;
+    esac
+
+    # check if we are handling a flag with special work handling
+    local index
+    __kubectl_index_of_word "${prev}" "${flags_with_completion[@]}"
+    if [[ ${index} -ge 0 ]]; then
+        ${flags_completion[${index}]}
+        return
+    fi
+
+    # we are parsing a flag and don't have a special handler, no completion
+    if [[ ${cur} != "${words[cword]}" ]]; then
+        return
+    fi
+
+    local completions
+    completions=("${commands[@]}")
+    if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
+        completions=("${must_have_one_noun[@]}")
+    fi
+    if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
+        completions+=("${must_have_one_flag[@]}")
+    fi
+    COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") )
+
+    if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
+        COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") )
+    fi
+
+    if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
+        declare -F __custom_func >/dev/null && __custom_func
+    fi
+
+    # available in bash-completion >= 2, not always present on macOS
+    if declare -F __ltrim_colon_completions >/dev/null; then
+        __ltrim_colon_completions "$cur"
+    fi
+
+    # If there is only 1 completion and it is a flag with an = it will be completed
+    # but we don't want a space after the =
+    if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then
+       compopt -o nospace
+    fi
+}
+
+# The arguments should be in the form "ext1|ext2|extn"
+__kubectl_handle_filename_extension_flag()
+{
+    local ext="$1"
+    _filedir "@(${ext})"
+}
+
+__kubectl_handle_subdirs_in_dir_flag()
+{
+    local dir="$1"
+    pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1
+}
+
+__kubectl_handle_flag()
+{
+    __kubectl_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
+
+    # if a command required a flag, and we found it, unset must_have_one_flag()
+    local flagname=${words[c]}
+    local flagvalue
+    # if the word contained an =
+    if [[ ${words[c]} == *"="* ]]; then
+        flagvalue=${flagname#*=} # take in as flagvalue after the =
+        flagname=${flagname%=*} # strip everything after the =
+        flagname="${flagname}=" # but put the = back
+    fi
+    __kubectl_debug "${FUNCNAME[0]}: looking for ${flagname}"
+    if __kubectl_contains_word "${flagname}" "${must_have_one_flag[@]}"; then
+        must_have_one_flag=()
+    fi
+
+    # if you set a flag which only applies to this command, don't show subcommands
+    if __kubectl_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
+      commands=()
+    fi
+
+    # keep flag value with flagname as flaghash
+    # flaghash variable is an associative array which is only supported in bash > 3.
+    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
+        if [ -n "${flagvalue}" ] ; then
+            flaghash[${flagname}]=${flagvalue}
+        elif [ -n "${words[ $((c+1)) ]}" ] ; then
+            flaghash[${flagname}]=${words[ $((c+1)) ]}
+        else
+            flaghash[${flagname}]="true" # pad "true" for bool flag
+        fi
+    fi
+
+    # skip the argument to a two word flag
+    if __kubectl_contains_word "${words[c]}" "${two_word_flags[@]}"; then
+        c=$((c+1))
+        # if we are looking for a flags value, don't show commands
+        if [[ $c -eq $cword ]]; then
+            commands=()
+        fi
+    fi
+
+    c=$((c+1))
+
+}
+
+__kubectl_handle_noun()
+{
+    __kubectl_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
+
+    if __kubectl_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
+        must_have_one_noun=()
+    elif __kubectl_contains_word "${words[c]}" "${noun_aliases[@]}"; then
+        must_have_one_noun=()
+    fi
+
+    nouns+=("${words[c]}")
+    c=$((c+1))
+}
+
+__kubectl_handle_command()
+{
+    __kubectl_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
+
+    local next_command
+    if [[ -n ${last_command} ]]; then
+        next_command="_${last_command}_${words[c]//:/__}"
+    else
+        if [[ $c -eq 0 ]]; then
+            next_command="_kubectl_root_command"
+        else
+            next_command="_${words[c]//:/__}"
+        fi
+    fi
+    c=$((c+1))
+    __kubectl_debug "${FUNCNAME[0]}: looking for ${next_command}"
+    declare -F "$next_command" >/dev/null && $next_command
+}
+
+__kubectl_handle_word()
+{
+    if [[ $c -ge $cword ]]; then
+        __kubectl_handle_reply
+        return
+    fi
+    __kubectl_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
+    if [[ "${words[c]}" == -* ]]; then
+        __kubectl_handle_flag
+    elif __kubectl_contains_word "${words[c]}" "${commands[@]}"; then
+        __kubectl_handle_command
+    elif [[ $c -eq 0 ]]; then
+        __kubectl_handle_command
+    else
+        __kubectl_handle_noun
+    fi
+    __kubectl_handle_word
+}
+
+# call kubectl get $1,
+__kubectl_override_flag_list=(--kubeconfig --cluster --user --context --namespace --server -n -s)
+__kubectl_override_flags()
+{
+    local ${__kubectl_override_flag_list[*]##*-} two_word_of of var
+    for w in "${words[@]}"; do
+        if [ -n "${two_word_of}" ]; then
+            eval "${two_word_of##*-}=\"${two_word_of}=\${w}\""
+            two_word_of=
+            continue
+        fi
+        for of in "${__kubectl_override_flag_list[@]}"; do
+            case "${w}" in
+                ${of}=*)
+                    eval "${of##*-}=\"${w}\""
+                    ;;
+                ${of})
+                    two_word_of="${of}"
+                    ;;
+            esac
+        done
+    done
+    for var in "${__kubectl_override_flag_list[@]##*-}"; do
+        if eval "test -n \"\$${var}\""; then
+            eval "echo \${${var}}"
+        fi
+    done
+}
+
+__kubectl_config_get_contexts()
+{
+    __kubectl_parse_config "contexts"
+}
+
+__kubectl_config_get_clusters()
+{
+    __kubectl_parse_config "clusters"
+}
+
+__kubectl_config_get_users()
+{
+    __kubectl_parse_config "users"
+}
+
+# $1 has to be "contexts", "clusters" or "users"
+__kubectl_parse_config()
+{
+    local template kubectl_out
+    template="{{ range .$1  }}{{ .name }} {{ end }}"
+    if kubectl_out=$(kubectl config $(__kubectl_override_flags) -o template --template="${template}" view 2>/dev/null); then
+        COMPREPLY=( $( compgen -W "${kubectl_out[*]}" -- "$cur" ) )
+    fi
+}
+
+# $1 is the name of resource (required)
+# $2 is template string for kubectl get (optional)
+__kubectl_parse_get()
+{
+    local template
+    template="${2:-"{{ range .items  }}{{ .metadata.name }} {{ end }}"}"
+    local kubectl_out
+    if kubectl_out=$(kubectl get $(__kubectl_override_flags) -o template --template="${template}" "$1" 2>/dev/null); then
+        COMPREPLY+=( $( compgen -W "${kubectl_out[*]}" -- "$cur" ) )
+    fi
+}
+
+__kubectl_get_resource()
+{
+    if [[ ${#nouns[@]} -eq 0 ]]; then
+      local kubectl_out
+      if kubectl_out=$(kubectl api-resources $(__kubectl_override_flags) -o name --cached --request-timeout=5s --verbs=get 2>/dev/null); then
+          COMPREPLY=( $( compgen -W "${kubectl_out[*]}" -- "$cur" ) )
+          return 0
+      fi
+      return 1
+    fi
+    __kubectl_parse_get "${nouns[${#nouns[@]} -1]}"
+}
+
+__kubectl_get_resource_namespace()
+{
+    __kubectl_parse_get "namespace"
+}
+
+__kubectl_get_resource_pod()
+{
+    __kubectl_parse_get "pod"
+}
+
+__kubectl_get_resource_rc()
+{
+    __kubectl_parse_get "rc"
+}
+
+__kubectl_get_resource_node()
+{
+    __kubectl_parse_get "node"
+}
+
+__kubectl_get_resource_clusterrole()
+{
+    __kubectl_parse_get "clusterrole"
+}
+
+# $1 is the name of the pod we want to get the list of containers inside
+__kubectl_get_containers()
+{
+    local template
+    template="{{ range .spec.initContainers }}{{ .name }} {{end}}{{ range .spec.containers  }}{{ .name }} {{ end }}"
+    __kubectl_debug "${FUNCNAME} nouns are ${nouns[*]}"
+
+    local len="${#nouns[@]}"
+    if [[ ${len} -ne 1 ]]; then
+        return
+    fi
+    local last=${nouns[${len} -1]}
+    local kubectl_out
+    if kubectl_out=$(kubectl get $(__kubectl_override_flags) -o template --template="${template}" pods "${last}" 2>/dev/null); then
+        COMPREPLY=( $( compgen -W "${kubectl_out[*]}" -- "$cur" ) )
+    fi
+}
+
+# Require both a pod and a container to be specified
+__kubectl_require_pod_and_container()
+{
+    if [[ ${#nouns[@]} -eq 0 ]]; then
+        __kubectl_parse_get pods
+        return 0
+    fi;
+    __kubectl_get_containers
+    return 0
+}
+
+__kubectl_cp()
+{
+    if [[ $(type -t compopt) = "builtin" ]]; then
+        compopt -o nospace
+    fi
+
+    case "$cur" in
+        /*|[.~]*) # looks like a path
+            return
+            ;;
+        *:*) # TODO: complete remote files in the pod
+            return
+            ;;
+        */*) # complete <namespace>/<pod>
+            local template namespace kubectl_out
+            template="{{ range .items }}{{ .metadata.namespace }}/{{ .metadata.name }}: {{ end }}"
+            namespace="${cur%%/*}"
+            if kubectl_out=( $(kubectl get $(__kubectl_override_flags) --namespace "${namespace}" -o template --template="${template}" pods 2>/dev/null) ); then
+                COMPREPLY=( $(compgen -W "${kubectl_out[*]}" -- "${cur}") )
+            fi
+            return
+            ;;
+        *) # complete namespaces, pods, and filedirs
+            __kubectl_parse_get "namespace" "{{ range .items  }}{{ .metadata.name }}/ {{ end }}"
+            __kubectl_parse_get "pod" "{{ range .items  }}{{ .metadata.name }}: {{ end }}"
+            _filedir
+            ;;
+    esac
+}
+
+__custom_func() {
+    case ${last_command} in
+        kubectl_get | kubectl_describe | kubectl_delete | kubectl_label | kubectl_edit | kubectl_patch |\
+        kubectl_annotate | kubectl_expose | kubectl_scale | kubectl_autoscale | kubectl_taint | kubectl_rollout_* |\
+        kubectl_apply_edit-last-applied | kubectl_apply_view-last-applied)
+            __kubectl_get_resource
+            return
+            ;;
+        kubectl_logs)
+            __kubectl_require_pod_and_container
+            return
+            ;;
+        kubectl_exec | kubectl_port-forward | kubectl_top_pod | kubectl_attach)
+            __kubectl_get_resource_pod
+            return
+            ;;
+        kubectl_rolling-update)
+            __kubectl_get_resource_rc
+            return
+            ;;
+        kubectl_cordon | kubectl_uncordon | kubectl_drain | kubectl_top_node)
+            __kubectl_get_resource_node
+            return
+            ;;
+        kubectl_config_use-context | kubectl_config_rename-context)
+            __kubectl_config_get_contexts
+            return
+            ;;
+        kubectl_config_delete-cluster)
+            __kubectl_config_get_clusters
+            return
+            ;;
+        kubectl_cp)
+            __kubectl_cp
+            return
+            ;;
+        *)
+            ;;
+    esac
+}
+
+_kubectl_annotate()
+{
+    last_command="kubectl_annotate"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--field-selector=")
+    local_nonpersistent_flags+=("--field-selector=")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--local")
+    local_nonpersistent_flags+=("--local")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--overwrite")
+    local_nonpersistent_flags+=("--overwrite")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--resource-version=")
+    local_nonpersistent_flags+=("--resource-version=")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_api-resources()
+{
+    last_command="kubectl_api-resources"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--api-group=")
+    local_nonpersistent_flags+=("--api-group=")
+    flags+=("--cached")
+    local_nonpersistent_flags+=("--cached")
+    flags+=("--namespaced")
+    local_nonpersistent_flags+=("--namespaced")
+    flags+=("--no-headers")
+    local_nonpersistent_flags+=("--no-headers")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--verbs=")
+    local_nonpersistent_flags+=("--verbs=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_api-versions()
+{
+    last_command="kubectl_api-versions"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_apply_edit-last-applied()
+{
+    last_command="kubectl_apply_edit-last-applied"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--windows-line-endings")
+    local_nonpersistent_flags+=("--windows-line-endings")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_apply_set-last-applied()
+{
+    last_command="kubectl_apply_set-last-applied"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--create-annotation")
+    local_nonpersistent_flags+=("--create-annotation")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_apply_view-last-applied()
+{
+    last_command="kubectl_apply_view-last-applied"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_apply()
+{
+    last_command="kubectl_apply"
+    commands=()
+    commands+=("edit-last-applied")
+    commands+=("set-last-applied")
+    commands+=("view-last-applied")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--cascade")
+    local_nonpersistent_flags+=("--cascade")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--experimental-field-manager=")
+    local_nonpersistent_flags+=("--experimental-field-manager=")
+    flags+=("--experimental-force-conflicts")
+    local_nonpersistent_flags+=("--experimental-force-conflicts")
+    flags+=("--experimental-server-side")
+    local_nonpersistent_flags+=("--experimental-server-side")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--force")
+    local_nonpersistent_flags+=("--force")
+    flags+=("--grace-period=")
+    local_nonpersistent_flags+=("--grace-period=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--openapi-patch")
+    local_nonpersistent_flags+=("--openapi-patch")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--overwrite")
+    local_nonpersistent_flags+=("--overwrite")
+    flags+=("--prune")
+    local_nonpersistent_flags+=("--prune")
+    flags+=("--prune-whitelist=")
+    local_nonpersistent_flags+=("--prune-whitelist=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--server-dry-run")
+    local_nonpersistent_flags+=("--server-dry-run")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--timeout=")
+    local_nonpersistent_flags+=("--timeout=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--wait")
+    local_nonpersistent_flags+=("--wait")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_attach()
+{
+    last_command="kubectl_attach"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--container=")
+    two_word_flags+=("-c")
+    local_nonpersistent_flags+=("--container=")
+    flags+=("--pod-running-timeout=")
+    local_nonpersistent_flags+=("--pod-running-timeout=")
+    flags+=("--stdin")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--stdin")
+    flags+=("--tty")
+    flags+=("-t")
+    local_nonpersistent_flags+=("--tty")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_auth_can-i()
+{
+    last_command="kubectl_auth_can-i"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all-namespaces")
+    flags+=("-A")
+    local_nonpersistent_flags+=("--all-namespaces")
+    flags+=("--list")
+    local_nonpersistent_flags+=("--list")
+    flags+=("--no-headers")
+    local_nonpersistent_flags+=("--no-headers")
+    flags+=("--quiet")
+    flags+=("-q")
+    local_nonpersistent_flags+=("--quiet")
+    flags+=("--subresource=")
+    local_nonpersistent_flags+=("--subresource=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_auth_reconcile()
+{
+    last_command="kubectl_auth_reconcile"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--remove-extra-permissions")
+    local_nonpersistent_flags+=("--remove-extra-permissions")
+    flags+=("--remove-extra-subjects")
+    local_nonpersistent_flags+=("--remove-extra-subjects")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_auth()
+{
+    last_command="kubectl_auth"
+    commands=()
+    commands+=("can-i")
+    commands+=("reconcile")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_autoscale()
+{
+    last_command="kubectl_autoscale"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--cpu-percent=")
+    local_nonpersistent_flags+=("--cpu-percent=")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--max=")
+    local_nonpersistent_flags+=("--max=")
+    flags+=("--min=")
+    local_nonpersistent_flags+=("--min=")
+    flags+=("--name=")
+    local_nonpersistent_flags+=("--name=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_flag+=("--max=")
+    must_have_one_noun=()
+    must_have_one_noun+=("deployment")
+    must_have_one_noun+=("replicaset")
+    must_have_one_noun+=("replicationcontroller")
+    noun_aliases=()
+}
+
+_kubectl_certificate_approve()
+{
+    last_command="kubectl_certificate_approve"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--force")
+    local_nonpersistent_flags+=("--force")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_certificate_deny()
+{
+    last_command="kubectl_certificate_deny"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--force")
+    local_nonpersistent_flags+=("--force")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_certificate()
+{
+    last_command="kubectl_certificate"
+    commands=()
+    commands+=("approve")
+    commands+=("deny")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_cluster-info_dump()
+{
+    last_command="kubectl_cluster-info_dump"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all-namespaces")
+    flags+=("-A")
+    local_nonpersistent_flags+=("--all-namespaces")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--namespaces=")
+    local_nonpersistent_flags+=("--namespaces=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--output-directory=")
+    local_nonpersistent_flags+=("--output-directory=")
+    flags+=("--pod-running-timeout=")
+    local_nonpersistent_flags+=("--pod-running-timeout=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_cluster-info()
+{
+    last_command="kubectl_cluster-info"
+    commands=()
+    commands+=("dump")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_completion()
+{
+    last_command="kubectl_completion"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--help")
+    flags+=("-h")
+    local_nonpersistent_flags+=("--help")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    must_have_one_noun+=("bash")
+    must_have_one_noun+=("zsh")
+    noun_aliases=()
+}
+
+_kubectl_config_current-context()
+{
+    last_command="kubectl_config_current-context"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_delete-cluster()
+{
+    last_command="kubectl_config_delete-cluster"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_delete-context()
+{
+    last_command="kubectl_config_delete-context"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_get-clusters()
+{
+    last_command="kubectl_config_get-clusters"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_get-contexts()
+{
+    last_command="kubectl_config_get-contexts"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--no-headers")
+    local_nonpersistent_flags+=("--no-headers")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_rename-context()
+{
+    last_command="kubectl_config_rename-context"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_set()
+{
+    last_command="kubectl_config_set"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--set-raw-bytes")
+    local_nonpersistent_flags+=("--set-raw-bytes")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_set-cluster()
+{
+    last_command="kubectl_config_set-cluster"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--embed-certs")
+    local_nonpersistent_flags+=("--embed-certs")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_set-context()
+{
+    last_command="kubectl_config_set-context"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--current")
+    local_nonpersistent_flags+=("--current")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_set-credentials()
+{
+    last_command="kubectl_config_set-credentials"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--auth-provider=")
+    local_nonpersistent_flags+=("--auth-provider=")
+    flags+=("--auth-provider-arg=")
+    local_nonpersistent_flags+=("--auth-provider-arg=")
+    flags+=("--embed-certs")
+    local_nonpersistent_flags+=("--embed-certs")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_unset()
+{
+    last_command="kubectl_config_unset"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_use-context()
+{
+    last_command="kubectl_config_use-context"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config_view()
+{
+    last_command="kubectl_config_view"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--flatten")
+    local_nonpersistent_flags+=("--flatten")
+    flags+=("--merge")
+    local_nonpersistent_flags+=("--merge")
+    flags+=("--minify")
+    local_nonpersistent_flags+=("--minify")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--raw")
+    local_nonpersistent_flags+=("--raw")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_config()
+{
+    last_command="kubectl_config"
+    commands=()
+    commands+=("current-context")
+    commands+=("delete-cluster")
+    commands+=("delete-context")
+    commands+=("get-clusters")
+    commands+=("get-contexts")
+    commands+=("rename-context")
+    commands+=("set")
+    commands+=("set-cluster")
+    commands+=("set-context")
+    commands+=("set-credentials")
+    commands+=("unset")
+    commands+=("use-context")
+    commands+=("view")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_convert()
+{
+    last_command="kubectl_convert"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--local")
+    local_nonpersistent_flags+=("--local")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--output-version=")
+    local_nonpersistent_flags+=("--output-version=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_cordon()
+{
+    last_command="kubectl_cordon"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_cp()
+{
+    last_command="kubectl_cp"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--container=")
+    two_word_flags+=("-c")
+    local_nonpersistent_flags+=("--container=")
+    flags+=("--no-preserve")
+    local_nonpersistent_flags+=("--no-preserve")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_clusterrole()
+{
+    last_command="kubectl_create_clusterrole"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--aggregation-rule=")
+    local_nonpersistent_flags+=("--aggregation-rule=")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--non-resource-url=")
+    local_nonpersistent_flags+=("--non-resource-url=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--resource=")
+    local_nonpersistent_flags+=("--resource=")
+    flags+=("--resource-name=")
+    local_nonpersistent_flags+=("--resource-name=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--verb=")
+    local_nonpersistent_flags+=("--verb=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_clusterrolebinding()
+{
+    last_command="kubectl_create_clusterrolebinding"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--clusterrole=")
+    flags_with_completion+=("--clusterrole")
+    flags_completion+=("__kubectl_get_resource_clusterrole")
+    local_nonpersistent_flags+=("--clusterrole=")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--group=")
+    local_nonpersistent_flags+=("--group=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--serviceaccount=")
+    local_nonpersistent_flags+=("--serviceaccount=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_configmap()
+{
+    last_command="kubectl_create_configmap"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--append-hash")
+    local_nonpersistent_flags+=("--append-hash")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--from-env-file=")
+    local_nonpersistent_flags+=("--from-env-file=")
+    flags+=("--from-file=")
+    local_nonpersistent_flags+=("--from-file=")
+    flags+=("--from-literal=")
+    local_nonpersistent_flags+=("--from-literal=")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_cronjob()
+{
+    last_command="kubectl_create_cronjob"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--image=")
+    local_nonpersistent_flags+=("--image=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--restart=")
+    local_nonpersistent_flags+=("--restart=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--schedule=")
+    local_nonpersistent_flags+=("--schedule=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_deployment()
+{
+    last_command="kubectl_create_deployment"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--image=")
+    local_nonpersistent_flags+=("--image=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_flag+=("--image=")
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_job()
+{
+    last_command="kubectl_create_job"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--from=")
+    local_nonpersistent_flags+=("--from=")
+    flags+=("--image=")
+    local_nonpersistent_flags+=("--image=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_namespace()
+{
+    last_command="kubectl_create_namespace"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_poddisruptionbudget()
+{
+    last_command="kubectl_create_poddisruptionbudget"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--max-unavailable=")
+    local_nonpersistent_flags+=("--max-unavailable=")
+    flags+=("--min-available=")
+    local_nonpersistent_flags+=("--min-available=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--selector=")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_priorityclass()
+{
+    last_command="kubectl_create_priorityclass"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--description=")
+    local_nonpersistent_flags+=("--description=")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--global-default")
+    local_nonpersistent_flags+=("--global-default")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--value=")
+    local_nonpersistent_flags+=("--value=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_quota()
+{
+    last_command="kubectl_create_quota"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--hard=")
+    local_nonpersistent_flags+=("--hard=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--scopes=")
+    local_nonpersistent_flags+=("--scopes=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_role()
+{
+    last_command="kubectl_create_role"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--resource=")
+    local_nonpersistent_flags+=("--resource=")
+    flags+=("--resource-name=")
+    local_nonpersistent_flags+=("--resource-name=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--verb=")
+    local_nonpersistent_flags+=("--verb=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_rolebinding()
+{
+    last_command="kubectl_create_rolebinding"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--clusterrole=")
+    local_nonpersistent_flags+=("--clusterrole=")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--group=")
+    local_nonpersistent_flags+=("--group=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--role=")
+    local_nonpersistent_flags+=("--role=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--serviceaccount=")
+    local_nonpersistent_flags+=("--serviceaccount=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_secret_docker-registry()
+{
+    last_command="kubectl_create_secret_docker-registry"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--append-hash")
+    local_nonpersistent_flags+=("--append-hash")
+    flags+=("--docker-email=")
+    local_nonpersistent_flags+=("--docker-email=")
+    flags+=("--docker-password=")
+    local_nonpersistent_flags+=("--docker-password=")
+    flags+=("--docker-server=")
+    local_nonpersistent_flags+=("--docker-server=")
+    flags+=("--docker-username=")
+    local_nonpersistent_flags+=("--docker-username=")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--from-file=")
+    local_nonpersistent_flags+=("--from-file=")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_flag+=("--docker-password=")
+    must_have_one_flag+=("--docker-username=")
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_secret_generic()
+{
+    last_command="kubectl_create_secret_generic"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--append-hash")
+    local_nonpersistent_flags+=("--append-hash")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--from-env-file=")
+    local_nonpersistent_flags+=("--from-env-file=")
+    flags+=("--from-file=")
+    local_nonpersistent_flags+=("--from-file=")
+    flags+=("--from-literal=")
+    local_nonpersistent_flags+=("--from-literal=")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--type=")
+    local_nonpersistent_flags+=("--type=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_secret_tls()
+{
+    last_command="kubectl_create_secret_tls"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--append-hash")
+    local_nonpersistent_flags+=("--append-hash")
+    flags+=("--cert=")
+    local_nonpersistent_flags+=("--cert=")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--key=")
+    local_nonpersistent_flags+=("--key=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_secret()
+{
+    last_command="kubectl_create_secret"
+    commands=()
+    commands+=("docker-registry")
+    commands+=("generic")
+    commands+=("tls")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_service_clusterip()
+{
+    last_command="kubectl_create_service_clusterip"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--clusterip=")
+    local_nonpersistent_flags+=("--clusterip=")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--tcp=")
+    local_nonpersistent_flags+=("--tcp=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_service_externalname()
+{
+    last_command="kubectl_create_service_externalname"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--external-name=")
+    local_nonpersistent_flags+=("--external-name=")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--tcp=")
+    local_nonpersistent_flags+=("--tcp=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_flag+=("--external-name=")
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_service_loadbalancer()
+{
+    last_command="kubectl_create_service_loadbalancer"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--tcp=")
+    local_nonpersistent_flags+=("--tcp=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_service_nodeport()
+{
+    last_command="kubectl_create_service_nodeport"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--node-port=")
+    local_nonpersistent_flags+=("--node-port=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--tcp=")
+    local_nonpersistent_flags+=("--tcp=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_service()
+{
+    last_command="kubectl_create_service"
+    commands=()
+    commands+=("clusterip")
+    commands+=("externalname")
+    commands+=("loadbalancer")
+    commands+=("nodeport")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create_serviceaccount()
+{
+    last_command="kubectl_create_serviceaccount"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_create()
+{
+    last_command="kubectl_create"
+    commands=()
+    commands+=("clusterrole")
+    commands+=("clusterrolebinding")
+    commands+=("configmap")
+    commands+=("cronjob")
+    commands+=("deployment")
+    commands+=("job")
+    commands+=("namespace")
+    commands+=("poddisruptionbudget")
+    commands+=("priorityclass")
+    commands+=("quota")
+    commands+=("role")
+    commands+=("rolebinding")
+    commands+=("secret")
+    commands+=("service")
+    commands+=("serviceaccount")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--edit")
+    local_nonpersistent_flags+=("--edit")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--raw=")
+    local_nonpersistent_flags+=("--raw=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--windows-line-endings")
+    local_nonpersistent_flags+=("--windows-line-endings")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_delete()
+{
+    last_command="kubectl_delete"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--all-namespaces")
+    flags+=("-A")
+    local_nonpersistent_flags+=("--all-namespaces")
+    flags+=("--cascade")
+    local_nonpersistent_flags+=("--cascade")
+    flags+=("--field-selector=")
+    local_nonpersistent_flags+=("--field-selector=")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--force")
+    local_nonpersistent_flags+=("--force")
+    flags+=("--grace-period=")
+    local_nonpersistent_flags+=("--grace-period=")
+    flags+=("--ignore-not-found")
+    local_nonpersistent_flags+=("--ignore-not-found")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--now")
+    local_nonpersistent_flags+=("--now")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--timeout=")
+    local_nonpersistent_flags+=("--timeout=")
+    flags+=("--wait")
+    local_nonpersistent_flags+=("--wait")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_describe()
+{
+    last_command="kubectl_describe"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all-namespaces")
+    flags+=("-A")
+    local_nonpersistent_flags+=("--all-namespaces")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--show-events")
+    local_nonpersistent_flags+=("--show-events")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_diff()
+{
+    last_command="kubectl_diff"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--experimental-field-manager=")
+    local_nonpersistent_flags+=("--experimental-field-manager=")
+    flags+=("--experimental-force-conflicts")
+    local_nonpersistent_flags+=("--experimental-force-conflicts")
+    flags+=("--experimental-server-side")
+    local_nonpersistent_flags+=("--experimental-server-side")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_drain()
+{
+    last_command="kubectl_drain"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--delete-local-data")
+    local_nonpersistent_flags+=("--delete-local-data")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--force")
+    local_nonpersistent_flags+=("--force")
+    flags+=("--grace-period=")
+    local_nonpersistent_flags+=("--grace-period=")
+    flags+=("--ignore-daemonsets")
+    local_nonpersistent_flags+=("--ignore-daemonsets")
+    flags+=("--pod-selector=")
+    local_nonpersistent_flags+=("--pod-selector=")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--timeout=")
+    local_nonpersistent_flags+=("--timeout=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_edit()
+{
+    last_command="kubectl_edit"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--output-patch")
+    local_nonpersistent_flags+=("--output-patch")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--windows-line-endings")
+    local_nonpersistent_flags+=("--windows-line-endings")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_exec()
+{
+    last_command="kubectl_exec"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--container=")
+    two_word_flags+=("-c")
+    local_nonpersistent_flags+=("--container=")
+    flags+=("--stdin")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--stdin")
+    flags+=("--tty")
+    flags+=("-t")
+    local_nonpersistent_flags+=("--tty")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_explain()
+{
+    last_command="kubectl_explain"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--api-version=")
+    local_nonpersistent_flags+=("--api-version=")
+    flags+=("--recursive")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_expose()
+{
+    last_command="kubectl_expose"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--cluster-ip=")
+    local_nonpersistent_flags+=("--cluster-ip=")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--external-ip=")
+    local_nonpersistent_flags+=("--external-ip=")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--labels=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--labels=")
+    flags+=("--load-balancer-ip=")
+    local_nonpersistent_flags+=("--load-balancer-ip=")
+    flags+=("--name=")
+    local_nonpersistent_flags+=("--name=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--overrides=")
+    local_nonpersistent_flags+=("--overrides=")
+    flags+=("--port=")
+    local_nonpersistent_flags+=("--port=")
+    flags+=("--protocol=")
+    local_nonpersistent_flags+=("--protocol=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--selector=")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--session-affinity=")
+    local_nonpersistent_flags+=("--session-affinity=")
+    flags+=("--target-port=")
+    local_nonpersistent_flags+=("--target-port=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--type=")
+    local_nonpersistent_flags+=("--type=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    must_have_one_noun+=("deployment")
+    must_have_one_noun+=("pod")
+    must_have_one_noun+=("replicaset")
+    must_have_one_noun+=("replicationcontroller")
+    must_have_one_noun+=("service")
+    noun_aliases=()
+}
+
+_kubectl_get()
+{
+    last_command="kubectl_get"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all-namespaces")
+    flags+=("-A")
+    local_nonpersistent_flags+=("--all-namespaces")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--chunk-size=")
+    local_nonpersistent_flags+=("--chunk-size=")
+    flags+=("--field-selector=")
+    local_nonpersistent_flags+=("--field-selector=")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--ignore-not-found")
+    local_nonpersistent_flags+=("--ignore-not-found")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--label-columns=")
+    two_word_flags+=("-L")
+    local_nonpersistent_flags+=("--label-columns=")
+    flags+=("--no-headers")
+    local_nonpersistent_flags+=("--no-headers")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--raw=")
+    local_nonpersistent_flags+=("--raw=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--server-print")
+    local_nonpersistent_flags+=("--server-print")
+    flags+=("--show-kind")
+    local_nonpersistent_flags+=("--show-kind")
+    flags+=("--show-labels")
+    local_nonpersistent_flags+=("--show-labels")
+    flags+=("--sort-by=")
+    local_nonpersistent_flags+=("--sort-by=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--watch")
+    flags+=("-w")
+    local_nonpersistent_flags+=("--watch")
+    flags+=("--watch-only")
+    local_nonpersistent_flags+=("--watch-only")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_kustomize()
+{
+    last_command="kubectl_kustomize"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_label()
+{
+    last_command="kubectl_label"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--field-selector=")
+    local_nonpersistent_flags+=("--field-selector=")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--list")
+    local_nonpersistent_flags+=("--list")
+    flags+=("--local")
+    local_nonpersistent_flags+=("--local")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--overwrite")
+    local_nonpersistent_flags+=("--overwrite")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--resource-version=")
+    local_nonpersistent_flags+=("--resource-version=")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_logs()
+{
+    last_command="kubectl_logs"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all-containers")
+    local_nonpersistent_flags+=("--all-containers")
+    flags+=("--container=")
+    two_word_flags+=("-c")
+    local_nonpersistent_flags+=("--container=")
+    flags+=("--follow")
+    flags+=("-f")
+    local_nonpersistent_flags+=("--follow")
+    flags+=("--limit-bytes=")
+    local_nonpersistent_flags+=("--limit-bytes=")
+    flags+=("--max-log-requests=")
+    local_nonpersistent_flags+=("--max-log-requests=")
+    flags+=("--pod-running-timeout=")
+    local_nonpersistent_flags+=("--pod-running-timeout=")
+    flags+=("--previous")
+    flags+=("-p")
+    local_nonpersistent_flags+=("--previous")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--since=")
+    local_nonpersistent_flags+=("--since=")
+    flags+=("--since-time=")
+    local_nonpersistent_flags+=("--since-time=")
+    flags+=("--tail=")
+    local_nonpersistent_flags+=("--tail=")
+    flags+=("--timestamps")
+    local_nonpersistent_flags+=("--timestamps")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_options()
+{
+    last_command="kubectl_options"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_patch()
+{
+    last_command="kubectl_patch"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--local")
+    local_nonpersistent_flags+=("--local")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--patch=")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--patch=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--type=")
+    local_nonpersistent_flags+=("--type=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_flag+=("--patch=")
+    must_have_one_flag+=("-p")
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_plugin_list()
+{
+    last_command="kubectl_plugin_list"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--name-only")
+    local_nonpersistent_flags+=("--name-only")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_plugin()
+{
+    last_command="kubectl_plugin"
+    commands=()
+    commands+=("list")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_port-forward()
+{
+    last_command="kubectl_port-forward"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--address=")
+    local_nonpersistent_flags+=("--address=")
+    flags+=("--pod-running-timeout=")
+    local_nonpersistent_flags+=("--pod-running-timeout=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_proxy()
+{
+    last_command="kubectl_proxy"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--accept-hosts=")
+    local_nonpersistent_flags+=("--accept-hosts=")
+    flags+=("--accept-paths=")
+    local_nonpersistent_flags+=("--accept-paths=")
+    flags+=("--address=")
+    local_nonpersistent_flags+=("--address=")
+    flags+=("--api-prefix=")
+    local_nonpersistent_flags+=("--api-prefix=")
+    flags+=("--disable-filter")
+    local_nonpersistent_flags+=("--disable-filter")
+    flags+=("--keepalive=")
+    local_nonpersistent_flags+=("--keepalive=")
+    flags+=("--port=")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--port=")
+    flags+=("--reject-methods=")
+    local_nonpersistent_flags+=("--reject-methods=")
+    flags+=("--reject-paths=")
+    local_nonpersistent_flags+=("--reject-paths=")
+    flags+=("--unix-socket=")
+    two_word_flags+=("-u")
+    local_nonpersistent_flags+=("--unix-socket=")
+    flags+=("--www=")
+    two_word_flags+=("-w")
+    local_nonpersistent_flags+=("--www=")
+    flags+=("--www-prefix=")
+    two_word_flags+=("-P")
+    local_nonpersistent_flags+=("--www-prefix=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_replace()
+{
+    last_command="kubectl_replace"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--cascade")
+    local_nonpersistent_flags+=("--cascade")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--force")
+    local_nonpersistent_flags+=("--force")
+    flags+=("--grace-period=")
+    local_nonpersistent_flags+=("--grace-period=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--timeout=")
+    local_nonpersistent_flags+=("--timeout=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--wait")
+    local_nonpersistent_flags+=("--wait")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_rollout_history()
+{
+    last_command="kubectl_rollout_history"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--revision=")
+    local_nonpersistent_flags+=("--revision=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    must_have_one_noun+=("daemonset")
+    must_have_one_noun+=("deployment")
+    must_have_one_noun+=("statefulset")
+    noun_aliases=()
+}
+
+_kubectl_rollout_pause()
+{
+    last_command="kubectl_rollout_pause"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    must_have_one_noun+=("deployment")
+    noun_aliases=()
+}
+
+_kubectl_rollout_resume()
+{
+    last_command="kubectl_rollout_resume"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    must_have_one_noun+=("deployment")
+    noun_aliases=()
+}
+
+_kubectl_rollout_status()
+{
+    last_command="kubectl_rollout_status"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--revision=")
+    local_nonpersistent_flags+=("--revision=")
+    flags+=("--timeout=")
+    local_nonpersistent_flags+=("--timeout=")
+    flags+=("--watch")
+    flags+=("-w")
+    local_nonpersistent_flags+=("--watch")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    must_have_one_noun+=("daemonset")
+    must_have_one_noun+=("deployment")
+    must_have_one_noun+=("statefulset")
+    noun_aliases=()
+}
+
+_kubectl_rollout_undo()
+{
+    last_command="kubectl_rollout_undo"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--to-revision=")
+    local_nonpersistent_flags+=("--to-revision=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    must_have_one_noun+=("daemonset")
+    must_have_one_noun+=("deployment")
+    must_have_one_noun+=("statefulset")
+    noun_aliases=()
+}
+
+_kubectl_rollout()
+{
+    last_command="kubectl_rollout"
+    commands=()
+    commands+=("history")
+    commands+=("pause")
+    commands+=("resume")
+    commands+=("status")
+    commands+=("undo")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_run()
+{
+    last_command="kubectl_run"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--attach")
+    local_nonpersistent_flags+=("--attach")
+    flags+=("--cascade")
+    local_nonpersistent_flags+=("--cascade")
+    flags+=("--command")
+    local_nonpersistent_flags+=("--command")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--env=")
+    local_nonpersistent_flags+=("--env=")
+    flags+=("--expose")
+    local_nonpersistent_flags+=("--expose")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--force")
+    local_nonpersistent_flags+=("--force")
+    flags+=("--generator=")
+    local_nonpersistent_flags+=("--generator=")
+    flags+=("--grace-period=")
+    local_nonpersistent_flags+=("--grace-period=")
+    flags+=("--hostport=")
+    local_nonpersistent_flags+=("--hostport=")
+    flags+=("--image=")
+    local_nonpersistent_flags+=("--image=")
+    flags+=("--image-pull-policy=")
+    local_nonpersistent_flags+=("--image-pull-policy=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--labels=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--labels=")
+    flags+=("--leave-stdin-open")
+    local_nonpersistent_flags+=("--leave-stdin-open")
+    flags+=("--limits=")
+    local_nonpersistent_flags+=("--limits=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--overrides=")
+    local_nonpersistent_flags+=("--overrides=")
+    flags+=("--pod-running-timeout=")
+    local_nonpersistent_flags+=("--pod-running-timeout=")
+    flags+=("--port=")
+    local_nonpersistent_flags+=("--port=")
+    flags+=("--quiet")
+    local_nonpersistent_flags+=("--quiet")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--replicas=")
+    two_word_flags+=("-r")
+    local_nonpersistent_flags+=("--replicas=")
+    flags+=("--requests=")
+    local_nonpersistent_flags+=("--requests=")
+    flags+=("--restart=")
+    local_nonpersistent_flags+=("--restart=")
+    flags+=("--rm")
+    local_nonpersistent_flags+=("--rm")
+    flags+=("--save-config")
+    local_nonpersistent_flags+=("--save-config")
+    flags+=("--schedule=")
+    local_nonpersistent_flags+=("--schedule=")
+    flags+=("--service-generator=")
+    local_nonpersistent_flags+=("--service-generator=")
+    flags+=("--service-overrides=")
+    local_nonpersistent_flags+=("--service-overrides=")
+    flags+=("--serviceaccount=")
+    local_nonpersistent_flags+=("--serviceaccount=")
+    flags+=("--stdin")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--stdin")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--timeout=")
+    local_nonpersistent_flags+=("--timeout=")
+    flags+=("--tty")
+    flags+=("-t")
+    local_nonpersistent_flags+=("--tty")
+    flags+=("--wait")
+    local_nonpersistent_flags+=("--wait")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_flag+=("--image=")
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_scale()
+{
+    last_command="kubectl_scale"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--current-replicas=")
+    local_nonpersistent_flags+=("--current-replicas=")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--replicas=")
+    local_nonpersistent_flags+=("--replicas=")
+    flags+=("--resource-version=")
+    local_nonpersistent_flags+=("--resource-version=")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--timeout=")
+    local_nonpersistent_flags+=("--timeout=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_flag+=("--replicas=")
+    must_have_one_noun=()
+    must_have_one_noun+=("deployment")
+    must_have_one_noun+=("replicaset")
+    must_have_one_noun+=("replicationcontroller")
+    must_have_one_noun+=("statefulset")
+    noun_aliases=()
+}
+
+_kubectl_set_env()
+{
+    last_command="kubectl_set_env"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--containers=")
+    two_word_flags+=("-c")
+    local_nonpersistent_flags+=("--containers=")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--env=")
+    two_word_flags+=("-e")
+    local_nonpersistent_flags+=("--env=")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--from=")
+    local_nonpersistent_flags+=("--from=")
+    flags+=("--keys=")
+    local_nonpersistent_flags+=("--keys=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--list")
+    local_nonpersistent_flags+=("--list")
+    flags+=("--local")
+    local_nonpersistent_flags+=("--local")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--overwrite")
+    local_nonpersistent_flags+=("--overwrite")
+    flags+=("--prefix=")
+    local_nonpersistent_flags+=("--prefix=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--resolve")
+    local_nonpersistent_flags+=("--resolve")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_set_image()
+{
+    last_command="kubectl_set_image"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--local")
+    local_nonpersistent_flags+=("--local")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_set_resources()
+{
+    last_command="kubectl_set_resources"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--containers=")
+    two_word_flags+=("-c")
+    local_nonpersistent_flags+=("--containers=")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--limits=")
+    local_nonpersistent_flags+=("--limits=")
+    flags+=("--local")
+    local_nonpersistent_flags+=("--local")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--requests=")
+    local_nonpersistent_flags+=("--requests=")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_set_selector()
+{
+    last_command="kubectl_set_selector"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--local")
+    local_nonpersistent_flags+=("--local")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--resource-version=")
+    local_nonpersistent_flags+=("--resource-version=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_set_serviceaccount()
+{
+    last_command="kubectl_set_serviceaccount"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--local")
+    local_nonpersistent_flags+=("--local")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--record")
+    local_nonpersistent_flags+=("--record")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_set_subject()
+{
+    last_command="kubectl_set_subject"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--group=")
+    local_nonpersistent_flags+=("--group=")
+    flags+=("--kustomize=")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kustomize=")
+    flags+=("--local")
+    local_nonpersistent_flags+=("--local")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--serviceaccount=")
+    local_nonpersistent_flags+=("--serviceaccount=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_set()
+{
+    last_command="kubectl_set"
+    commands=()
+    commands+=("env")
+    commands+=("image")
+    commands+=("resources")
+    commands+=("selector")
+    commands+=("serviceaccount")
+    commands+=("subject")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_taint()
+{
+    last_command="kubectl_taint"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--overwrite")
+    local_nonpersistent_flags+=("--overwrite")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--validate")
+    local_nonpersistent_flags+=("--validate")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    must_have_one_noun+=("node")
+    noun_aliases=()
+}
+
+_kubectl_top_node()
+{
+    last_command="kubectl_top_node"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--heapster-namespace=")
+    local_nonpersistent_flags+=("--heapster-namespace=")
+    flags+=("--heapster-port=")
+    local_nonpersistent_flags+=("--heapster-port=")
+    flags+=("--heapster-scheme=")
+    local_nonpersistent_flags+=("--heapster-scheme=")
+    flags+=("--heapster-service=")
+    local_nonpersistent_flags+=("--heapster-service=")
+    flags+=("--no-headers")
+    local_nonpersistent_flags+=("--no-headers")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_top_pod()
+{
+    last_command="kubectl_top_pod"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all-namespaces")
+    flags+=("-A")
+    local_nonpersistent_flags+=("--all-namespaces")
+    flags+=("--containers")
+    local_nonpersistent_flags+=("--containers")
+    flags+=("--heapster-namespace=")
+    local_nonpersistent_flags+=("--heapster-namespace=")
+    flags+=("--heapster-port=")
+    local_nonpersistent_flags+=("--heapster-port=")
+    flags+=("--heapster-scheme=")
+    local_nonpersistent_flags+=("--heapster-scheme=")
+    flags+=("--heapster-service=")
+    local_nonpersistent_flags+=("--heapster-service=")
+    flags+=("--no-headers")
+    local_nonpersistent_flags+=("--no-headers")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_top()
+{
+    last_command="kubectl_top"
+    commands=()
+    commands+=("node")
+    commands+=("pod")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_uncordon()
+{
+    last_command="kubectl_uncordon"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--dry-run")
+    local_nonpersistent_flags+=("--dry-run")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_version()
+{
+    last_command="kubectl_version"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--client")
+    local_nonpersistent_flags+=("--client")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--short")
+    local_nonpersistent_flags+=("--short")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_wait()
+{
+    last_command="kubectl_wait"
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    local_nonpersistent_flags+=("--all")
+    flags+=("--all-namespaces")
+    flags+=("-A")
+    local_nonpersistent_flags+=("--all-namespaces")
+    flags+=("--allow-missing-template-keys")
+    local_nonpersistent_flags+=("--allow-missing-template-keys")
+    flags+=("--field-selector=")
+    local_nonpersistent_flags+=("--field-selector=")
+    flags+=("--filename=")
+    flags_with_completion+=("--filename")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    two_word_flags+=("-f")
+    flags_with_completion+=("-f")
+    flags_completion+=("__kubectl_handle_filename_extension_flag json|yaml|yml")
+    local_nonpersistent_flags+=("--filename=")
+    flags+=("--for=")
+    local_nonpersistent_flags+=("--for=")
+    flags+=("--output=")
+    two_word_flags+=("-o")
+    local_nonpersistent_flags+=("--output=")
+    flags+=("--recursive")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--recursive")
+    flags+=("--selector=")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--selector=")
+    flags+=("--template=")
+    flags_with_completion+=("--template")
+    flags_completion+=("_filedir")
+    local_nonpersistent_flags+=("--template=")
+    flags+=("--timeout=")
+    local_nonpersistent_flags+=("--timeout=")
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_kubectl_root_command()
+{
+    last_command="kubectl"
+    commands=()
+    commands+=("annotate")
+    commands+=("api-resources")
+    commands+=("api-versions")
+    commands+=("apply")
+    commands+=("attach")
+    commands+=("auth")
+    commands+=("autoscale")
+    commands+=("certificate")
+    commands+=("cluster-info")
+    commands+=("completion")
+    commands+=("config")
+    commands+=("convert")
+    commands+=("cordon")
+    commands+=("cp")
+    commands+=("create")
+    commands+=("delete")
+    commands+=("describe")
+    commands+=("diff")
+    commands+=("drain")
+    commands+=("edit")
+    commands+=("exec")
+    commands+=("explain")
+    commands+=("expose")
+    commands+=("get")
+    commands+=("kustomize")
+    commands+=("label")
+    commands+=("logs")
+    commands+=("options")
+    commands+=("patch")
+    commands+=("plugin")
+    commands+=("port-forward")
+    commands+=("proxy")
+    commands+=("replace")
+    commands+=("rollout")
+    commands+=("run")
+    commands+=("scale")
+    commands+=("set")
+    commands+=("taint")
+    commands+=("top")
+    commands+=("uncordon")
+    commands+=("version")
+    commands+=("wait")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alsologtostderr")
+    flags+=("--as=")
+    flags+=("--as-group=")
+    flags+=("--cache-dir=")
+    flags+=("--certificate-authority=")
+    flags+=("--client-certificate=")
+    flags+=("--client-key=")
+    flags+=("--cluster=")
+    flags_with_completion+=("--cluster")
+    flags_completion+=("__kubectl_config_get_clusters")
+    flags+=("--context=")
+    flags_with_completion+=("--context")
+    flags_completion+=("__kubectl_config_get_contexts")
+    flags+=("--insecure-skip-tls-verify")
+    flags+=("--kubeconfig=")
+    flags+=("--log-backtrace-at=")
+    flags+=("--log-dir=")
+    flags+=("--log-file=")
+    flags+=("--log-flush-frequency=")
+    flags+=("--logtostderr")
+    flags+=("--match-server-version")
+    flags+=("--namespace=")
+    flags_with_completion+=("--namespace")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    two_word_flags+=("-n")
+    flags_with_completion+=("-n")
+    flags_completion+=("__kubectl_get_resource_namespace")
+    flags+=("--password=")
+    flags+=("--profile=")
+    flags+=("--profile-output=")
+    flags+=("--request-timeout=")
+    flags+=("--server=")
+    two_word_flags+=("-s")
+    flags+=("--skip-headers")
+    flags+=("--stderrthreshold=")
+    flags+=("--token=")
+    flags+=("--user=")
+    flags_with_completion+=("--user")
+    flags_completion+=("__kubectl_config_get_users")
+    flags+=("--username=")
+    flags+=("--v=")
+    two_word_flags+=("-v")
+    flags+=("--vmodule=")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+__start_kubectl()
+{
+    local cur prev words cword
+    declare -A flaghash 2>/dev/null || :
+    if declare -F _init_completion >/dev/null 2>&1; then
+        _init_completion -s || return
+    else
+        __kubectl_init_completion -n "=" || return
+    fi
+
+    local c=0
+    local flags=()
+    local two_word_flags=()
+    local local_nonpersistent_flags=()
+    local flags_with_completion=()
+    local flags_completion=()
+    local commands=("kubectl")
+    local must_have_one_flag=()
+    local must_have_one_noun=()
+    local last_command
+    local nouns=()
+
+    __kubectl_handle_word
+}
+
+if [[ $(type -t compopt) = "builtin" ]]; then
+    complete -o default -F __start_kubectl kubectl
+else
+    complete -o default -o nospace -F __start_kubectl kubectl
+fi
+
+# ex: ts=4 sw=4 et filetype=sh
+
+BASH_COMPLETION_EOF
+}
+
+__kubectl_bash_source <(__kubectl_convert_bash_to_zsh)
+_complete kubectl 2>/dev/null
home/common/shell/zsh/_rg
@@ -0,0 +1,608 @@
+#compdef rg
+
+##
+# zsh completion function for ripgrep
+#
+# Run ci/test_complete.sh after building to ensure that the options supported by
+# this function stay in synch with the `rg` binary.
+#
+# For convenience, a completion reference guide is included at the bottom of
+# this file.
+#
+# Originally based on code from the zsh-users project — see copyright notice
+# below.
+
+_rg() {
+  local curcontext=$curcontext no='!' descr ret=1
+  local -a context line state state_descr args tmp suf
+  local -A opt_args
+
+  # ripgrep has many options which negate the effect of a more common one — for
+  # example, `--no-column` to negate `--column`, and `--messages` to negate
+  # `--no-messages`. There are so many of these, and they're so infrequently
+  # used, that some users will probably find it irritating if they're completed
+  # indiscriminately, so let's not do that unless either the current prefix
+  # matches one of those negation options or the user has the `complete-all`
+  # style set. Note that this prefix check has to be updated manually to account
+  # for all of the potential negation options listed below!
+  if
+    # We also want to list all of these options during testing
+    [[ $_RG_COMPLETE_LIST_ARGS == (1|t*|y*) ]] ||
+    # (--[imnp]* => --ignore*, --messages, --no-*, --pcre2-unicode)
+    [[ $PREFIX$SUFFIX == --[imnp]* ]] ||
+    zstyle -t ":complete:$curcontext:*" complete-all
+  then
+    no=
+  fi
+
+  # We make heavy use of argument groups here to prevent the option specs from
+  # growing unwieldy. These aren't supported in zsh <5.4, though, so we'll strip
+  # them out below if necessary. This makes the exclusions inaccurate on those
+  # older versions, but oh well — it's not that big a deal
+  args=(
+    + '(exclusive)' # Misc. fully exclusive options
+    '(: * -)'{-h,--help}'[display help information]'
+    '(: * -)'{-V,--version}'[display version information]'
+    '(: * -)'--pcre2-version'[print the version of PCRE2 used by ripgrep, if available]'
+
+    + '(buffered)' # buffering options
+    '--line-buffered[force line buffering]'
+    $no"--no-line-buffered[don't force line buffering]"
+    '--block-buffered[force block buffering]'
+    $no"--no-block-buffered[don't force block buffering]"
+
+    + '(case)' # Case-sensitivity options
+    {-i,--ignore-case}'[search case-insensitively]'
+    {-s,--case-sensitive}'[search case-sensitively]'
+    {-S,--smart-case}'[search case-insensitively if pattern is all lowercase]'
+
+    + '(context-a)' # Context (after) options
+    '(context-c)'{-A+,--after-context=}'[specify lines to show after each match]:number of lines'
+
+    + '(context-b)' # Context (before) options
+    '(context-c)'{-B+,--before-context=}'[specify lines to show before each match]:number of lines'
+
+    + '(context-c)' # Context (combined) options
+    '(context-a context-b)'{-C+,--context=}'[specify lines to show before and after each match]:number of lines'
+
+    + '(column)' # Column options
+    '--column[show column numbers for matches]'
+    $no"--no-column[don't show column numbers for matches]"
+
+    + '(count)' # Counting options
+    {-c,--count}'[only show count of matching lines for each file]'
+    '--count-matches[only show count of individual matches for each file]'
+
+    + '(encoding)' # Encoding options
+    {-E+,--encoding=}'[specify text encoding of files to search]: :_rg_encodings'
+    $no'--no-encoding[use default text encoding]'
+
+    + file # File-input options
+    '(1)*'{-f+,--file=}'[specify file containing patterns to search for]: :_files'
+
+    + '(file-match)' # Files with/without match options
+    '(stats)'{-l,--files-with-matches}'[only show names of files with matches]'
+    '(stats)--files-without-match[only show names of files without matches]'
+
+    + '(file-name)' # File-name options
+    {-H,--with-filename}'[show file name for matches]'
+    {-I,--no-filename}"[don't show file name for matches]"
+
+    + '(file-system)' # File system options
+    "--one-file-system[don't descend into directories on other file systems]"
+    $no'--no-one-file-system[descend into directories on other file systems]'
+
+    + '(fixed)' # Fixed-string options
+    {-F,--fixed-strings}'[treat pattern as literal string instead of regular expression]'
+    $no"--no-fixed-strings[don't treat pattern as literal string]"
+
+    + '(follow)' # Symlink-following options
+    {-L,--follow}'[follow symlinks]'
+    $no"--no-follow[don't follow symlinks]"
+
+    + glob # File-glob options
+    '*'{-g+,--glob=}'[include/exclude files matching specified glob]:glob'
+    '*--iglob=[include/exclude files matching specified case-insensitive glob]:glob'
+
+    + '(heading)' # Heading options
+    '(pretty-vimgrep)--heading[show matches grouped by file name]'
+    "(pretty-vimgrep)--no-heading[don't show matches grouped by file name]"
+
+    + '(hidden)' # Hidden-file options
+    '--hidden[search hidden files and directories]'
+    $no"--no-hidden[don't search hidden files and directories]"
+
+    + '(hybrid)' # hybrid regex options
+    '--auto-hybrid-regex[dynamically use PCRE2 if necessary]'
+    $no"--no-auto-hybrid-regex[don't dynamically use PCRE2 if necessary]"
+
+    + '(ignore)' # Ignore-file options
+    "(--no-ignore-global --no-ignore-parent --no-ignore-vcs --no-ignore-dot)--no-ignore[don't respect ignore files]"
+    $no'(--ignore-global --ignore-parent --ignore-vcs --ignore-dot)--ignore[respect ignore files]'
+
+    + '(ignore-file-case-insensitive)' # Ignore-file case sensitivity options
+    '--ignore-file-case-insensitive[process ignore files case insensitively]'
+    $no'--no-ignore-file-case-insensitive[process ignore files case sensitively]'
+
+    + '(ignore-global)' # Global ignore-file options
+    "--no-ignore-global[don't respect global ignore files]"
+    $no'--ignore-global[respect global ignore files]'
+
+    + '(ignore-parent)' # Parent ignore-file options
+    "--no-ignore-parent[don't respect ignore files in parent directories]"
+    $no'--ignore-parent[respect ignore files in parent directories]'
+
+    + '(ignore-vcs)' # VCS ignore-file options
+    "--no-ignore-vcs[don't respect version control ignore files]"
+    $no'--ignore-vcs[respect version control ignore files]'
+
+    + '(ignore-dot)' # .ignore-file options
+    "--no-ignore-dot[don't respect .ignore files]"
+    $no'--ignore-dot[respect .ignore files]'
+
+    + '(json)' # JSON options
+    '--json[output results in JSON Lines format]'
+    $no"--no-json[don't output results in JSON Lines format]"
+
+    + '(line-number)' # Line-number options
+    {-n,--line-number}'[show line numbers for matches]'
+    {-N,--no-line-number}"[don't show line numbers for matches]"
+
+    + '(line-terminator)' # Line-terminator options
+    '--crlf[use CRLF as line terminator]'
+    $no"--no-crlf[don't use CRLF as line terminator]"
+    '(text)--null-data[use NUL as line terminator]'
+
+    + '(max-columns-preview)' # max column preview options
+    '--max-columns-preview[show preview for long lines (with -M)]'
+    $no"--no-max-columns-preview[don't show preview for long lines (with -M)]"
+
+    + '(max-depth)' # Directory-depth options
+    '--max-depth=[specify max number of directories to descend]:number of directories'
+    '!--maxdepth=:number of directories'
+
+    + '(messages)' # Error-message options
+    '(--no-ignore-messages)--no-messages[suppress some error messages]'
+    $no"--messages[don't suppress error messages affected by --no-messages]"
+
+    + '(messages-ignore)' # Ignore-error message options
+    "--no-ignore-messages[don't show ignore-file parse error messages]"
+    $no'--ignore-messages[show ignore-file parse error messages]'
+
+    + '(mmap)' # mmap options
+    '--mmap[search using memory maps when possible]'
+    "--no-mmap[don't search using memory maps]"
+
+    + '(multiline)' # Multiline options
+    {-U,--multiline}'[permit matching across multiple lines]'
+    $no'(multiline-dotall)--no-multiline[restrict matches to at most one line each]'
+
+    + '(multiline-dotall)' # Multiline DOTALL options
+    '(--no-multiline)--multiline-dotall[allow "." to match newline (with -U)]'
+    $no"(--no-multiline)--no-multiline-dotall[don't allow \".\" to match newline (with -U)]"
+
+    + '(only)' # Only-match options
+    {-o,--only-matching}'[show only matching part of each line]'
+
+    + '(passthru)' # Pass-through options
+    '(--vimgrep)--passthru[show both matching and non-matching lines]'
+    '!(--vimgrep)--passthrough'
+
+    + '(pcre2)' # PCRE2 options
+    {-P,--pcre2}'[enable matching with PCRE2]'
+    $no'(pcre2-unicode)--no-pcre2[disable matching with PCRE2]'
+
+    + '(pcre2-unicode)' # PCRE2 Unicode options
+    $no'(--no-pcre2 --no-pcre2-unicode)--pcre2-unicode[enable PCRE2 Unicode mode (with -P)]'
+    '(--no-pcre2 --pcre2-unicode)--no-pcre2-unicode[disable PCRE2 Unicode mode (with -P)]'
+
+    + '(pre)' # Preprocessing options
+    '(-z --search-zip)--pre=[specify preprocessor utility]:preprocessor utility:_command_names -e'
+    $no'--no-pre[disable preprocessor utility]'
+
+    + pre-glob # Preprocessing glob options
+    '*--pre-glob[include/exclude files for preprocessing with --pre]'
+
+    + '(pretty-vimgrep)' # Pretty/vimgrep display options
+    '(heading)'{-p,--pretty}'[alias for --color=always --heading -n]'
+    '(heading passthru)--vimgrep[show results in vim-compatible format]'
+
+    + regexp # Explicit pattern options
+    '(1 file)*'{-e+,--regexp=}'[specify pattern]:pattern'
+
+    + '(replace)' # Replacement options
+    {-r+,--replace=}'[specify string used to replace matches]:replace string'
+
+    + '(sort)' # File-sorting options
+    '(threads)--sort=[sort results in ascending order (disables parallelism)]:sort method:((
+      none\:"no sorting"
+      path\:"sort by file path"
+      modified\:"sort by last modified time"
+      accessed\:"sort by last accessed time"
+      created\:"sort by creation time"
+    ))'
+    '(threads)--sortr=[sort results in descending order (disables parallelism)]:sort method:((
+      none\:"no sorting"
+      path\:"sort by file path"
+      modified\:"sort by last modified time"
+      accessed\:"sort by last accessed time"
+      created\:"sort by creation time"
+    ))'
+    '!(threads)--sort-files[sort results by file path (disables parallelism)]'
+
+    + '(stats)' # Statistics options
+    '(--files file-match)--stats[show search statistics]'
+    $no"--no-stats[don't show search statistics]"
+
+    + '(text)' # Binary-search options
+    {-a,--text}'[search binary files as if they were text]'
+    "--binary[search binary files, don't print binary data]"
+    $no"--no-binary[don't search binary files]"
+    $no"(--null-data)--no-text[don't search binary files as if they were text]"
+
+    + '(threads)' # Thread-count options
+    '(sort)'{-j+,--threads=}'[specify approximate number of threads to use]:number of threads'
+
+    + '(trim)' # Trim options
+    '--trim[trim any ASCII whitespace prefix from each line]'
+    $no"--no-trim[don't trim ASCII whitespace prefix from each line]"
+
+    + type # Type options
+    '*'{-t+,--type=}'[only search files matching specified type]: :_rg_types'
+    '*--type-add=[add new glob for specified file type]: :->typespec'
+    '*--type-clear=[clear globs previously defined for specified file type]: :_rg_types'
+    # This should actually be exclusive with everything but other type options
+    '(: *)--type-list[show all supported file types and their associated globs]'
+    '*'{-T+,--type-not=}"[don't search files matching specified file type]: :_rg_types"
+
+    + '(word-line)' # Whole-word/line match options
+    {-w,--word-regexp}'[only show matches surrounded by word boundaries]'
+    {-x,--line-regexp}'[only show matches surrounded by line boundaries]'
+
+    + '(zip)' # Compression options
+    '(--pre)'{-z,--search-zip}'[search in compressed files]'
+    $no"--no-search-zip[don't search in compressed files]"
+
+    + misc # Other options — no need to separate these at the moment
+    '(-b --byte-offset)'{-b,--byte-offset}'[show 0-based byte offset for each matching line]'
+    '--color=[specify when to use colors in output]:when:((
+      never\:"never use colors"
+      auto\:"use colors or not based on stdout, TERM, etc."
+      always\:"always use colors"
+      ansi\:"always use ANSI colors (even on Windows)"
+    ))'
+    '*--colors=[specify color and style settings]: :->colorspec'
+    '--context-separator=[specify string used to separate non-continuous context lines in output]:separator'
+    '--debug[show debug messages]'
+    '--dfa-size-limit=[specify upper size limit of generated DFA]:DFA size (bytes)'
+    "(1 stats)--files[show each file that would be searched (but don't search)]"
+    '*--ignore-file=[specify additional ignore file]:ignore file:_files'
+    '(-v --invert-match)'{-v,--invert-match}'[invert matching]'
+    '(-M --max-columns)'{-M+,--max-columns=}'[specify max length of lines to print]:number of bytes'
+    '(-m --max-count)'{-m+,--max-count=}'[specify max number of matches per file]:number of matches'
+    '--max-filesize=[specify size above which files should be ignored]:file size (bytes)'
+    "--no-config[don't load configuration files]"
+    '(-0 --null)'{-0,--null}'[print NUL byte after file names]'
+    '--path-separator=[specify path separator to use when printing file names]:separator'
+    '(-q --quiet)'{-q,--quiet}'[suppress normal output]'
+    '--regex-size-limit=[specify upper size limit of compiled regex]:regex size (bytes)'
+    '*'{-u,--unrestricted}'[reduce level of "smart" searching]'
+
+    + operand # Operands
+    '(--files --type-list file regexp)1: :_guard "^-*" pattern'
+    '(--type-list)*: :_files'
+  )
+
+  # This is used with test_complete.sh to verify that there are no options
+  # listed in the help output that aren't also defined here
+  [[ $_RG_COMPLETE_LIST_ARGS == (1|t*|y*) ]] && {
+    print -rl - $args
+    return 0
+  }
+
+  # Strip out argument groups where unsupported (see above)
+  [[ $ZSH_VERSION == (4|5.<0-3>)(.*)# ]] &&
+  args=( ${(@)args:#(#i)(+|[a-z0-9][a-z0-9_-]#|\([a-z0-9][a-z0-9_-]#\))} )
+
+  _arguments -C -s -S : $args && ret=0
+
+  case $state in
+    colorspec)
+      if [[ ${IPREFIX#--*=}$PREFIX == [^:]# ]]; then
+        suf=( -qS: )
+        tmp=(
+          'column:specify coloring for column numbers'
+          'line:specify coloring for line numbers'
+          'match:specify coloring for match text'
+          'path:specify coloring for file names'
+        )
+        descr='color/style type'
+      elif [[ ${IPREFIX#--*=}$PREFIX == (column|line|match|path):[^:]# ]]; then
+        suf=( -qS: )
+        tmp=(
+          'none:clear color/style for type'
+          'bg:specify background color'
+          'fg:specify foreground color'
+          'style:specify text style'
+        )
+        descr='color/style attribute'
+      elif [[ ${IPREFIX#--*=}$PREFIX == [^:]##:(bg|fg):[^:]# ]]; then
+        tmp=( black blue green red cyan magenta yellow white )
+        descr='color name or r,g,b'
+      elif [[ ${IPREFIX#--*=}$PREFIX == [^:]##:style:[^:]# ]]; then
+        tmp=( {,no}bold {,no}intense {,no}underline )
+        descr='style name'
+      else
+        _message -e colorspec 'no more arguments'
+      fi
+
+      (( $#tmp )) && {
+        compset -P '*:'
+        _describe -t colorspec $descr tmp $suf && ret=0
+      }
+      ;;
+
+    typespec)
+      if compset -P '[^:]##:include:'; then
+        _sequence -s , _rg_types && ret=0
+      # @todo This bit in particular could be better, but it's a little
+      # complex, and attempting to solve it seems to run us up against a crash
+      # bug — zsh # 40362
+      elif compset -P '[^:]##:'; then
+        _message 'glob or include directive' && ret=1
+      elif [[ ! -prefix *:* ]]; then
+        _rg_types -qS : && ret=0
+      fi
+      ;;
+  esac
+
+  return ret
+}
+
+# Complete encodings
+_rg_encodings() {
+  local -a expl
+  local -aU _encodings
+
+  # This is impossible to read, but these encodings rarely if ever change, so it
+  # probably doesn't matter. They are derived from the list given here:
+  # https://encoding.spec.whatwg.org/#concept-encoding-get
+  _encodings=(
+    {{,us-}ascii,arabic,chinese,cyrillic,greek{,8},hebrew,korean}
+    logical visual mac {,cs}macintosh x-mac-{cyrillic,roman,ukrainian}
+    866 ibm{819,866} csibm866
+    big5{,-hkscs} {cn-,cs}big5 x-x-big5
+    cp{819,866,125{0..8}} x-cp125{0..8}
+    csiso2022{jp,kr} csiso8859{6,8}{e,i}
+    csisolatin{{1..6},9} csisolatin{arabic,cyrillic,greek,hebrew}
+    ecma-{114,118} asmo-708 elot_928 sun_eu_greek
+    euc-{jp,kr} x-euc-jp cseuckr cseucpkdfmtjapanese
+    {,x-}gbk csiso58gb231280 gb18030 {,cs}gb2312 gb_2312{,-80} hz-gb-2312
+    iso-2022-{cn,cn-ext,jp,kr}
+    iso8859{,-}{{1..11},13,14,15}
+    iso-8859-{{1..11},{6,8}-{e,i},13,14,15,16} iso_8859-{{1..9},15}
+    iso_8859-{1,2,6,7}:1987 iso_8859-{3,4,5,8}:1988 iso_8859-9:1989
+    iso-ir-{58,100,101,109,110,126,127,138,144,148,149,157}
+    koi{,8,8-r,8-ru,8-u,8_r} cskoi8r
+    ks_c_5601-{1987,1989} ksc{,_}5691 csksc56011987
+    latin{1..6} l{{1..6},9}
+    shift{-,_}jis csshiftjis {,x-}sjis ms_kanji ms932
+    utf{,-}8 utf-16{,be,le} unicode-1-1-utf-8
+    windows-{31j,874,949,125{0..8}} dos-874 tis-620 ansi_x3.4-1968
+    x-user-defined auto none
+  )
+
+  _wanted encodings expl encoding compadd -a "$@" - _encodings
+}
+
+# Complete file types
+_rg_types() {
+  local -a expl
+  local -aU _types
+
+  _types=( ${(@)${(f)"$( _call_program types rg --type-list )"}%%:*} )
+
+  _wanted types expl 'file type' compadd -a "$@" - _types
+}
+
+_rg "$@"
+
+################################################################################
+# ZSH COMPLETION REFERENCE
+#
+# For the convenience of developers who aren't especially familiar with zsh
+# completion functions, a brief reference guide follows. This is in no way
+# comprehensive; it covers just enough of the basic structure, syntax, and
+# conventions to help someone make simple changes like adding new options. For
+# more complete documentation regarding zsh completion functions, please see the
+# following:
+#
+# * http://zsh.sourceforge.net/Doc/Release/Completion-System.html
+# * https://github.com/zsh-users/zsh/blob/master/Etc/completion-style-guide
+#
+# OVERVIEW
+#
+# Most zsh completion functions are defined in terms of `_arguments`, which is a
+# shell function that takes a series of argument specifications. The specs for
+# `rg` are stored in an array, which is common for more complex functions; the
+# elements of the array are passed to `_arguments` on invocation.
+#
+# ARGUMENT-SPECIFICATION SYNTAX
+#
+# The following is a contrived example of the argument specs for a simple tool:
+#
+#   '(: * -)'{-h,--help}'[display help information]'
+#   '(-q -v --quiet --verbose)'{-q,--quiet}'[decrease output verbosity]'
+#   '!(-q -v --quiet --verbose)--silent'
+#   '(-q -v --quiet --verbose)'{-v,--verbose}'[increase output verbosity]'
+#   '--color=[specify when to use colors]:when:(always never auto)'
+#   '*:example file:_files'
+#
+# Although there may appear to be six specs here, there are actually nine; we
+# use brace expansion to combine specs for options that go by multiple names,
+# like `-q` and `--quiet`. This is customary, and ties in with the fact that zsh
+# merges completion possibilities together when they have the same description.
+#
+# The first line defines the option `-h`/`--help`. With most tools, it isn't
+# useful to complete anything after `--help` because it effectively overrides
+# all others; the `(: * -)` at the beginning of the spec tells zsh not to
+# complete any other operands (`:` and `*`) or options (`-`) after this one has
+# been used. The `[...]` at the end associates a description with `-h`/`--help`;
+# as mentioned, zsh will see the identical descriptions and merge these options
+# together when offering completion possibilities.
+#
+# The next line defines `-q`/`--quiet`. Here we don't want to suppress further
+# completions entirely, but we don't want to offer `-q` if `--quiet` has been
+# given (since they do the same thing), nor do we want to offer `-v` (since it
+# doesn't make sense to be quiet and verbose at the same time). We don't need to
+# tell zsh not to offer `--quiet` a second time, since that's the default
+# behaviour, but since this line expands to two specs describing `-q` *and*
+# `--quiet` we do need to explicitly list all of them here.
+#
+# The next line defines a hidden option `--silent` — maybe it's a deprecated
+# synonym for `--quiet`. The leading `!` indicates that zsh shouldn't offer this
+# option during completion. The benefit of providing a spec for an option that
+# shouldn't be completed is that, if someone *does* use it, we can correctly
+# suppress completion of other options afterwards.
+#
+# The next line defines `-v`/`--verbose`; this works just like `-q`/`--quiet`.
+#
+# The next line defines `--color`. In this example, `--color` doesn't have a
+# corresponding short option, so we don't need to use brace expansion. Further,
+# there are no other options it's exclusive with (just itself), so we don't need
+# to define those at the beginning. However, it does take a mandatory argument.
+# The `=` at the end of `--color=` indicates that the argument may appear either
+# like `--color always` or like `--color=always`; this is how most GNU-style
+# command-line tools work. The corresponding short option would normally use `+`
+# — for example, `-c+` would allow either `-c always` or `-calways`. For this
+# option, the arguments are known ahead of time, so we can simply list them in
+# parentheses at the end (`when` is used as the description for the argument).
+#
+# The last line defines an operand (a non-option argument). In this example, the
+# operand can be used any number of times (the leading `*`), and it should be a
+# file path, so we tell zsh to call the `_files` function to complete it. The
+# `example file` in the middle is the description to use for this operand; we
+# could use a space instead to accept the default provided by `_files`.
+#
+# GROUPING ARGUMENT SPECIFICATIONS
+#
+# Newer versions of zsh support grouping argument specs together. All specs
+# following a `+` and then a group name are considered to be members of the
+# named group. Grouping is useful mostly for organisational purposes; it makes
+# the relationship between different options more obvious, and makes it easier
+# to specify exclusions.
+#
+# We could rewrite our example above using grouping as follows:
+#
+#   '(: * -)'{-h,--help}'[display help information]'
+#   '--color=[specify when to use colors]:when:(always never auto)'
+#   '*:example file:_files'
+#   + '(verbosity)'
+#   {-q,--quiet}'[decrease output verbosity]'
+#   '!--silent'
+#   {-v,--verbose}'[increase output verbosity]'
+#
+# Here we take advantage of a useful feature of spec grouping — when the group
+# name is surrounded by parentheses, as in `(verbosity)`, it tells zsh that all
+# of the options in that group are exclusive with each other. As a result, we
+# don't need to manually list out the exclusions at the beginning of each
+# option.
+#
+# Groups can also be referred to by name in other argument specs; for example:
+#
+#   '(xyz)--aaa' '*: :_files'
+#   + xyz --xxx --yyy --zzz
+#
+# Here we use the group name `xyz` to tell zsh that `--xxx`, `--yyy`, and
+# `--zzz` are not to be completed after `--aaa`. This makes the exclusion list
+# much more compact and reusable.
+#
+# CONVENTIONS
+#
+# zsh completion functions generally adhere to the following conventions:
+#
+# * Use two spaces for indentation
+# * Combine specs for options with different names using brace expansion
+# * In combined specs, list the short option first (as in `{-a,--text}`)
+# * Use `+` or `=` as described above for options that take arguments
+# * Provide a description for all options, option-arguments, and operands
+# * Capitalise/punctuate argument descriptions as phrases, not complete
+#   sentences — 'display help information', never 'Display help information.'
+#   (but still capitalise acronyms and proper names)
+# * Write argument descriptions as verb phrases — 'display x', 'enable y',
+#   'use z'
+# * Word descriptions to make it clear when an option expects an argument;
+#   usually this is done with the word 'specify', as in 'specify x' or
+#   'use specified x')
+# * Write argument descriptions as tersely as possible — for example, articles
+#   like 'a' and 'the' should be omitted unless it would be confusing
+#
+# Other conventions currently used by this function:
+#
+# * Order argument specs alphabetically by group name, then option name
+# * Group options that are directly related, mutually exclusive, or frequently
+#   referenced by other argument specs
+# * Use only characters in the set [a-z0-9_-] in group names
+# * Order exclusion lists as follows: short options, long options, groups
+# * Use American English in descriptions
+# * Use 'don't' in descriptions instead of 'do not'
+# * Word descriptions for related options as similarly as possible. For example,
+#   `--foo[enable foo]` and `--no-foo[disable foo]`, or `--foo[use foo]` and
+#   `--no-foo[don't use foo]`
+# * Word descriptions to make it clear when an option only makes sense with
+#   another option, usually by adding '(with -x)' to the end
+# * Don't quote strings or variables unnecessarily. When quotes are required,
+#   prefer single-quotes to double-quotes
+# * Prefix option specs with `$no` when the option serves only to negate the
+#   behaviour of another option that must be provided explicitly by the user.
+#   This prevents rarely used options from cluttering up the completion menu
+################################################################################
+
+# ------------------------------------------------------------------------------
+# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above copyright
+#       notice, this list of conditions and the following disclaimer in the
+#       documentation and/or other materials provided with the distribution.
+#     * Neither the name of the zsh-users nor the
+#       names of its contributors may be used to endorse or promote products
+#       derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# ------------------------------------------------------------------------------
+# Description
+# -----------
+#
+#  Completion script for ripgrep
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+#  * arcizan <ghostrevery@gmail.com>
+#  * MaskRay <i@maskray.me>
+#
+# ------------------------------------------------------------------------------
+
+# Local Variables:
+# mode: shell-script
+# coding: utf-8-unix
+# indent-tabs-mode: nil
+# sh-indentation: 2
+# sh-basic-offset: 2
+# End:
+# vim: ft=zsh sw=2 ts=2 et
home/common/shell/zsh/_tkn
@@ -0,0 +1,518 @@
+#compdef _tkn tkn
+
+
+
+
+function _tkn {
+  local -a commands
+
+  _arguments -C \
+    "1: :->cmnds" \
+    "*::arg:->args"
+
+  case $state in
+  cmnds)
+    commands=(
+      "clustertask:Manage clustertasks"
+      "completion:Prints shell completion scripts"
+      "help:Help about any command"
+      "pipeline:Manage pipelines"
+      "pipelinerun:Manage pipelineruns"
+      "resource:Manage pipeline resources"
+      "task:Manage tasks"
+      "taskrun:Manage taskruns"
+      "version:Prints version information"
+    )
+    _describe "command" commands
+    ;;
+  esac
+
+  case "$words[1]" in
+  clustertask)
+    _tkn_clustertask
+    ;;
+  completion)
+    _tkn_completion
+    ;;
+  help)
+    _tkn_help
+    ;;
+  pipeline)
+    _tkn_pipeline
+    ;;
+  pipelinerun)
+    _tkn_pipelinerun
+    ;;
+  resource)
+    _tkn_resource
+    ;;
+  task)
+    _tkn_task
+    ;;
+  taskrun)
+    _tkn_taskrun
+    ;;
+  version)
+    _tkn_version
+    ;;
+  esac
+}
+
+
+function _tkn_clustertask {
+  local -a commands
+
+  _arguments -C \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    "1: :->cmnds" \
+    "*::arg:->args"
+
+  case $state in
+  cmnds)
+    commands=(
+      "delete:Delete a clustertask resource in a cluster"
+      "list:Lists clustertasks in a namespace"
+    )
+    _describe "command" commands
+    ;;
+  esac
+
+  case "$words[1]" in
+  delete)
+    _tkn_clustertask_delete
+    ;;
+  list)
+    _tkn_clustertask_list
+    ;;
+  esac
+}
+
+function _tkn_clustertask_delete {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-f --force)'{-f,--force}'[Whether to force deletion (default: false)]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_clustertasks'
+}
+
+function _tkn_clustertask_list {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace'
+}
+
+function _tkn_completion {
+  _arguments \
+    '(-h --help)'{-h,--help}'[help for completion]' \
+    '1: :("bash" "zsh")'
+}
+
+function _tkn_help {
+  _arguments
+}
+
+
+function _tkn_pipeline {
+  local -a commands
+
+  _arguments -C \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    "1: :->cmnds" \
+    "*::arg:->args"
+
+  case $state in
+  cmnds)
+    commands=(
+      "delete:Delete a pipeline in a namespace"
+      "describe:Describes a pipeline in a namespace"
+      "list:Lists pipelines in a namespace"
+      "logs:Show pipeline logs"
+      "start:Start pipelines"
+    )
+    _describe "command" commands
+    ;;
+  esac
+
+  case "$words[1]" in
+  delete)
+    _tkn_pipeline_delete
+    ;;
+  describe)
+    _tkn_pipeline_describe
+    ;;
+  list)
+    _tkn_pipeline_list
+    ;;
+  logs)
+    _tkn_pipeline_logs
+    ;;
+  start)
+    _tkn_pipeline_start
+    ;;
+  esac
+}
+
+function _tkn_pipeline_delete {
+  _arguments \
+    '(-a --all)'{-a,--all}'[Whether to delete related resources (pipelineruns) (default: false)]' \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-f --force)'{-f,--force}'[Whether to force deletion (default: false)]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_pipeline'
+}
+
+function _tkn_pipeline_describe {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_pipeline'
+}
+
+function _tkn_pipeline_list {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace'
+}
+
+function _tkn_pipeline_logs {
+  _arguments \
+    '(-a --all)'{-a,--all}'[show all logs including init steps injected by tekton]' \
+    '(-f --follow)'{-f,--follow}'[stream live logs]' \
+    '(-l --last)'{-l,--last}'[show logs for last run]' \
+    '(-L --limit)'{-L,--limit}'[lists number of pipelineruns]:()' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_pipeline'
+}
+
+function _tkn_pipeline_start {
+  _arguments \
+    '(-l --last)'{-l,--last}'[re-run the pipeline using last pipelinerun values]' \
+    '(*-p *--param)'{\*-p,\*--param}'[pass the param as key=value]:()' \
+    '(*-r *--resource)'{\*-r,\*--resource}'[pass the resource name and ref as name=ref]:()' \
+    '(-s --serviceaccount)'{-s,--serviceaccount}'[pass the serviceaccount name]: :__kubectl_get_serviceaccount' \
+    '*--task-serviceaccount[pass the service account corresponding to the task]: :__kubectl_get_serviceaccount' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_pipeline'
+}
+
+
+function _tkn_pipelinerun {
+  local -a commands
+
+  _arguments -C \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    "1: :->cmnds" \
+    "*::arg:->args"
+
+  case $state in
+  cmnds)
+    commands=(
+      "cancel:Cancel the PipelineRun"
+      "delete:Delete a pipelinerun in a namespace"
+      "describe:Describe a pipelinerun in a namespace"
+      "list:Lists pipelineruns in a namespace"
+      "logs:Show the logs of PipelineRun"
+    )
+    _describe "command" commands
+    ;;
+  esac
+
+  case "$words[1]" in
+  cancel)
+    _tkn_pipelinerun_cancel
+    ;;
+  delete)
+    _tkn_pipelinerun_delete
+    ;;
+  describe)
+    _tkn_pipelinerun_describe
+    ;;
+  list)
+    _tkn_pipelinerun_list
+    ;;
+  logs)
+    _tkn_pipelinerun_logs
+    ;;
+  esac
+}
+
+function _tkn_pipelinerun_cancel {
+  _arguments \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_pipelinerun'
+}
+
+function _tkn_pipelinerun_delete {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-f --force)'{-f,--force}'[Whether to force deletion (default: false)]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_pipelinerun'
+}
+
+function _tkn_pipelinerun_describe {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_pipelinerun'
+}
+
+function _tkn_pipelinerun_list {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-l --limit)'{-l,--limit}'[limit pipelineruns listed (default: return all pipelineruns)]:()' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace'
+}
+
+function _tkn_pipelinerun_logs {
+  _arguments \
+    '(-a --all)'{-a,--all}'[show all logs including init steps injected by tekton]' \
+    '(-f --follow)'{-f,--follow}'[stream live logs]' \
+    '(*-t *--only-tasks)'{\*-t,\*--only-tasks}'[show logs for mentioned tasks only]:()' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_pipelinerun'
+}
+
+
+function _tkn_resource {
+  local -a commands
+
+  _arguments -C \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    "1: :->cmnds" \
+    "*::arg:->args"
+
+  case $state in
+  cmnds)
+    commands=(
+      "delete:Delete a pipeline resource in a namespace"
+      "describe:Describes a pipeline resource in a namespace"
+      "list:Lists pipeline resources in a namespace"
+    )
+    _describe "command" commands
+    ;;
+  esac
+
+  case "$words[1]" in
+  delete)
+    _tkn_resource_delete
+    ;;
+  describe)
+    _tkn_resource_describe
+    ;;
+  list)
+    _tkn_resource_list
+    ;;
+  esac
+}
+
+function _tkn_resource_delete {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-f --force)'{-f,--force}'[Whether to force deletion (default: false)]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_pipelineresource'
+}
+
+function _tkn_resource_describe {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_pipelineresource'
+}
+
+function _tkn_resource_list {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-t --type)'{-t,--type}'[Pipeline resource type]:()' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace'
+}
+
+
+function _tkn_task {
+  local -a commands
+
+  _arguments -C \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    "1: :->cmnds" \
+    "*::arg:->args"
+
+  case $state in
+  cmnds)
+    commands=(
+      "delete:Delete a task resource in a namespace"
+      "list:Lists tasks in a namespace"
+    )
+    _describe "command" commands
+    ;;
+  esac
+
+  case "$words[1]" in
+  delete)
+    _tkn_task_delete
+    ;;
+  list)
+    _tkn_task_list
+    ;;
+  esac
+}
+
+function _tkn_task_delete {
+  _arguments \
+    '(-a --all)'{-a,--all}'[Whether to delete related resources (taskruns) (default: false)]' \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-f --force)'{-f,--force}'[Whether to force deletion (default: false)]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_task'
+}
+
+function _tkn_task_list {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace'
+}
+
+
+function _tkn_taskrun {
+  local -a commands
+
+  _arguments -C \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    "1: :->cmnds" \
+    "*::arg:->args"
+
+  case $state in
+  cmnds)
+    commands=(
+      "delete:Delete a taskrun in a namespace"
+      "list:Lists taskruns in a namespace"
+      "logs:Show taskruns logs"
+    )
+    _describe "command" commands
+    ;;
+  esac
+
+  case "$words[1]" in
+  delete)
+    _tkn_taskrun_delete
+    ;;
+  list)
+    _tkn_taskrun_list
+    ;;
+  logs)
+    _tkn_taskrun_logs
+    ;;
+  esac
+}
+
+function _tkn_taskrun_delete {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-f --force)'{-f,--force}'[Whether to force deletion (default: false)]' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_taskrun'
+}
+
+function _tkn_taskrun_list {
+  _arguments \
+    '--allow-missing-template-keys[If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.]' \
+    '(-l --limit)'{-l,--limit}'[limit taskruns listed (default: return all taskruns)]:()' \
+    '(-o --output)'{-o,--output}'[Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.]:()' \
+    '--template[Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates \[http://golang.org/pkg/text/template/#pkg-overview\].]:filename:_files' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace'
+}
+
+function _tkn_taskrun_logs {
+  _arguments \
+    '(-a --all)'{-a,--all}'[show all logs including init steps injected by tekton]' \
+    '(-f --follow)'{-f,--follow}'[stream live logs]' \
+    '(-k --kubeconfig)'{-k,--kubeconfig}'[kubectl config file (default: $HOME/.kube/config)]: :_filedir' \
+    '(-n --namespace)'{-n,--namespace}'[namespace to use (default: from $KUBECONFIG)]: :__kubectl_get_namespace' \
+    '1: :__tkn_get_taskrun'
+}
+
+function _tkn_version {
+  _arguments \
+    '(-c --check)'{-c,--check}'[check if a newer version is available]'
+}
+
+
+# Custom function for Completions
+function __tkn_get_object() {
+    local type=$1
+    local util=$2
+    local template begin tkn_out
+    template="{{ range .items  }}{{ .metadata.name }} {{ end }}"
+
+    if [[ ${util} == "kubectl" ]];then
+        tkn_out=($(kubectl get ${type} -o template --template="${template}" 2>/dev/null))
+    elif [[ ${util} == "tkn" ]];then
+        tkn_out=($(tkn ${type} ls -o template --template="${template}" 2>/dev/null))
+    fi
+
+    if [[ -n ${tkn_out} ]]; then
+        [[ -n ${BASH_VERSION} ]] && COMPREPLY=( $( compgen -W "${tkn_out}" -- "$cur" ) )
+        [[ -n ${ZSH_VERSION} ]] && compadd ${tkn_out}
+    fi
+}
+
+function __kubectl_get_namespace() { __tkn_get_object namespace kubectl ;}
+function __kubectl_get_serviceaccount() { __tkn_get_object serviceaccount kubectl ;}
+function __tkn_get_pipeline() { __tkn_get_object pipeline tkn ;}
+function __tkn_get_pipelinerun() { __tkn_get_object pipelinerun tkn ;}
+function __tkn_get_taskrun() { __tkn_get_object taskrun tkn ;}
+function __tkn_get_pipelineresource() { __tkn_get_object resource tkn ;}
+function __tkn_get_clustertasks() { __tkn_get_object clustertasks tkn ;}
home/common/shell/zsh/auto-expanding-aliases.zsh
@@ -0,0 +1,127 @@
+# Definition of abbrev-alias for auto-expanding aliases
+# Autoexpand some aliases
+typeset -ga _vbe_abbrevations
+abbrev-alias() {
+    alias $1
+    _vbe_abbrevations+=(${1%%\=*})
+}
+_vbe_zle-autoexpand() {
+    local -a words; words=(${(z)LBUFFER})
+    if (( ${#_vbe_abbrevations[(r)${words[-1]}]} )); then
+        zle _expand_alias
+    fi
+    zle magic-space
+}
+zle -N _vbe_zle-autoexpand
+bindkey -M emacs " " _vbe_zle-autoexpand
+bindkey -M emacs "^ " magic-space
+bindkey -M isearch " " magic-space
+
+# Correct common typos
+(( $+commands[git] )) && abbrev-alias gti=git
+(( $+commands[grep] )) && abbrev-alias grpe=grep
+(( $+commands[sudo] )) && abbrev-alias suod=sudo
+(( $+commands[ssh] )) && abbrev-alias shs=ssh
+
+# Save a few keystrokes
+(( $+commands[git] )) && abbrev-alias gls="git ls-files"
+(( $+commands[ip] )) && {
+  abbrev-alias ip6='ip -6'
+  abbrev-alias ipb='ip -brief'
+}
+
+abbrev-alias tailf="tail -F"
+
+(( $+commands[mpv] )) && abbrev-alias mpva="mpv --no-video"
+
+# System init-related aliases
+() {
+    local cmd
+    local -a cmds
+    cmds=(start stop reload restart status)
+
+    if [[ -d /run/systemd/system ]]; then
+        # systemd
+        for cmd ($cmds) {
+            abbrev-alias $cmd="${(%):-%(#..sudo )}systemctl $cmd"
+            abbrev-alias u$cmd="systemctl --user $cmd"
+        }
+            else
+                # generic service
+                for cmd ($cmds) {
+                    function $cmd() {
+                        name=$1 ; shift
+                        ${(%):-%(#..sudo)} service $name $0 "$@"
+                    }
+                    (( $+functions[compdef] )) && compdef _services $cmd
+                }
+                fi
+}
+
+# grep aliases
+() {
+    # If GNU grep is available, use it
+    local grep=grep
+    (( $+commands[ggrep] )) && grep=ggrep # GNU grep
+
+    # Check if grep supports colors
+    local colors="--color=auto"
+    $grep -q $colors . <<< yes 2> /dev/null || colors=""
+
+    # Declare aliases
+    alias grep="command ${grep} ${colors}"
+    abbrev-alias rgrep="grep -r"
+    abbrev-alias egrep="grep -E"
+    abbrev-alias fgrep="grep -F"
+    # --color=auto doesn't work. See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=792135
+    (( $+commands[zgrep] )) && alias zgrep="GREP=${grep} command zgrep ${colors}"
+}
+
+# (( $+commands[emacsclient] * $+commands[git] )) && magit() {
+#         local root=$(git rev-parse --show-toplevel)
+#         [[ -n $root ]] || return
+#         emacsclient -e "(progn
+#                     (select-frame-set-input-focus
+#                       (window-frame
+#                         (get-buffer-window
+#                            (magit-status \"${root}\"))))
+#                     (delete-other-windows))"
+# }
+
+(( $+commands[nix] )) && nixpkgs() {
+    cmd=$1
+    shift
+    nix run nixpkgs\#${cmd} -- "$@"
+}
+
+v() {
+    case $(file --brief --mime-type $1 2> /dev/null) in
+        image/svg+xml) ;;
+        image/*)
+            (( $+commands[nsxiv] )) && ${I3SOCK+i3-tabbed} nsxiv $1
+            return
+            ;;
+        video/*)
+            (( $+commands[mpv] )) && ${I3SOCK+i3-tabbed} mpv --no-fs $1
+            return
+    esac
+    if (( $+commands[bat] )); then
+        if (( ! $# )); then
+            gzip -cdfq | bat
+        else
+            for f in "$@"; do
+                gzip -cdfq -- $f | bat --file-name ${f%.gz}
+            done
+        fi
+    elif (( $+commands[less] )); then
+        gzip -cdfq -- "$@" | less -FX
+    elif (( $+commands[zmore] )); then
+        zmore "$@"
+    elif (( $+commands[more] )); then
+        gzip -cdfq -- "$@" | more
+    else
+        gzip -cdfq -- "$@"
+    fi
+}
+
+function clean() {}
home/common/shell/zsh/completion.zsh
@@ -0,0 +1,85 @@
+zstyle ':completion:*' menu select
+# Use caching to make completion for commands such as dpkg and apt usable.
+zstyle ':completion::complete:*' use-cache on
+zstyle ':completion::complete:*' cache-path "$ZSH_CACHE/zcompcache"
+
+# Case-insensitive (all), partial-word, and then substring completion.
+zstyle ':completion:*' matcher-list '' \
+       'm:{a-z\-}={A-Z\_}' \
+       'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
+       'r:[[:ascii:]]||[[:ascii:]]=** r:|=* m:{a-z\-}={A-Z\_}'
+
+# Group matches and describe.
+zstyle ':completion:*:*:*:*:*' menu select
+zstyle ':completion:*:matches' group 'yes'
+zstyle ':completion:*:options' description 'yes'
+zstyle ':completion:*:options' auto-description '%d'
+zstyle ':completion:*:corrections' format ' %F{green}-- %d (errors: %e) --%f'
+zstyle ':completion:*:descriptions' format ' %F{yellow}-- %d --%f'
+zstyle ':completion:*:messages' format ' %F{purple} -- %d --%f'
+zstyle ':completion:*:warnings' format ' %F{red}-- no matches found --%f'
+zstyle ':completion:*:default' list-prompt '%S%M matches%s'
+zstyle ':completion:*' format ' %F{yellow}-- %d --%f'
+zstyle ':completion:*' group-name ''
+zstyle ':completion:*' verbose yes
+
+# Fuzzy match mistyped completions.
+zstyle ':completion:*' completer _complete _list _match _approximate
+zstyle ':completion:*:match:*' original only
+zstyle ':completion:*:approximate:*' max-errors 1 numeric
+
+# Increase the number of errors based on the length of the typed word.
+zstyle -e ':completion:*:approximate:*' max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3))numeric)'
+
+# Don't complete unavailable commands.
+zstyle ':completion:*:functions' ignored-patterns '(_*|pre(cmd|exec))'
+
+# Array completion element sorting.
+zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
+
+# Directories
+zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
+zstyle ':completion:*:*:cd:*' ignore-parents parent pwd
+zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories
+zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
+zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'
+zstyle ':completion:*' squeeze-slashes true
+zstyle ':completion:*' special-dirs true
+# Environmental Variables
+zstyle ':completion::*:(-command-|export):*' fake-parameters ${${${_comps[(I)-value-*]#*,}%%,*}:#-*-}
+
+# Populate hostname completion.
+zstyle -e ':completion:*:hosts' hosts 'reply=(
+  ${=${=${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) 2>/dev/null)"}%%[#| ]*}//\]:[0-9]*/ }//,/ }//\[/ }
+  ${=${${${${(@M)${(f)"$(cat ~/.ssh/config 2>/dev/null)"}:#Host *}#Host }:#*\**}:#*\?*}}
+)'
+
+# Don't complete uninteresting users...
+zstyle ':completion:*:*:*:users' ignored-patterns \
+  adm amanda apache avahi beaglidx bin cacti canna clamav daemon \
+  dbus distcache dovecot fax ftp games gdm gkrellmd gopher \
+  hacluster haldaemon halt hsqldb ident junkbust ldap lp mail \
+  mailman mailnull mldonkey mysql nagios \
+  named netdump news nfsnobody nobody nscd ntp nut nx openvpn \
+  operator pcap postfix postgres privoxy pulse pvm quagga radvd \
+  rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs '_*'
+
+# ... unless we really want to.
+zstyle '*' single-ignored show
+
+# Ignore multiple entries.
+zstyle ':completion:*:(rm|kill|diff):*' ignore-line other
+zstyle ':completion:*:rm:*' file-patterns '*:all-files'
+
+# Man
+zstyle ':completion:*:manuals' separate-sections true
+zstyle ':completion:*:manuals.(^1*)' insert-sections true
+
+# SSH/SCP/RSYNC
+zstyle ':completion:*:(scp|rsync):*' tag-order 'hosts:-host:host hosts:-domain:domain hosts:-ipaddr:ip\ address *'
+zstyle ':completion:*:(scp|rsync):*' group-order users files all-files hosts-domain hosts-host hosts-ipaddr
+zstyle ':completion:*:ssh:*' tag-order 'hosts:-host:host hosts:-domain:domain hosts:-ipaddr:ip\ address *'
+zstyle ':completion:*:ssh:*' group-order users hosts-domain hosts-host users hosts-ipaddr
+zstyle ':completion:*:(ssh|scp|rsync):*:hosts-host' ignored-patterns '*(.|:)*' loopback ip6-loopback localhost ip6-localhost broadcasthost
+zstyle ':completion:*:(ssh|scp|rsync):*:hosts-domain' ignored-patterns '<->.<->.<->.<->' '^[-[:alnum:]]##(.[-[:alnum:]]##)##' '*@*'
+zstyle ':completion:*:(ssh|scp|rsync):*:hosts-ipaddr' ignored-patterns '^(<->.<->.<->.<->|(|::)([[:xdigit:].]##:(#c,2))##(|%*))' '127.0.0.<->' '255.255.255.255' '::1' 'fe80::*'
home/common/shell/zsh/j
@@ -0,0 +1,30 @@
+local root=~/src/
+local res results args
+
+while getopts "np" opt; do
+  if [[ $opt = "?" ]]; then
+    print -r -- "$myname: unrecognized option: -$OPTARG" >&2
+    return 1
+  fi
+  eval "opt_$opt=\${OPTARG:--\$opt}"
+done
+(( OPTIND > 1 )) && shift $(( OPTIND - 1 ))
+
+local fnd=$1
+type -f zshz 2>/dev/null >/dev/null || opt_n=true
+
+if [[ -n ${fnd} ]];then
+
+    [[ -z ${opt_n} ]] && {
+        local zz=$(zshz -e ${fnd})
+        [[ -n ${zz} ]] && { echo "ZSHZ: ${zz}"; [[ -z ${opt_p} ]] && cd ${zz}; return;}
+    }
+
+    local results=($(fd -d 3 -t d . ${root}|egrep -i "${fnd}"))
+    [[ ${#results} == 1 ]] && { echo ${results}; [[ -z ${opt_p} ]] && cd ${results} ; return;}
+    [[ ${#results} == 0 ]] && { echo "No results found for ${fnd}"; return 1;}
+    args="-q ${fnd}"
+fi
+
+res=$(fd -d 3 -t d . ${root}|sed "s,${root},,"|fzf --height 50% --border ${args})
+[[ -n ${res} ]] && {echo ${root}${res}; [[ -z ${opt_p} ]]  && cd ${root}${res} ; }
home/common/shell/zsh/prompt.zsh
@@ -0,0 +1,907 @@
+# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate
+# your own config based on it.
+#
+# Tip: Looking for a nice color? Here's a one-liner to print colormap.
+#
+#   for i in {0..255}; do print -Pn "%${i}F${(l:3::0:)i}%f " ${${(M)$((i%8)):#7}:+$'\n'}; done
+
+# Temporarily change options.
+'builtin' 'local' '-a' 'p10k_config_opts'
+[[ ! -o 'aliases'         ]] || p10k_config_opts+=('aliases')
+[[ ! -o 'sh_glob'         ]] || p10k_config_opts+=('sh_glob')
+[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
+'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
+
+() {
+  emulate -L zsh
+  setopt no_unset extended_glob
+  zmodload zsh/langinfo
+  if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then
+    local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8}
+  fi
+
+  # Unset all configuration options. This allows you to apply configiguration changes without
+  # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`.
+  unset -m 'POWERLEVEL9K_*'
+
+  # The list of segments shown on the left. Fill it with the most important segments.
+  typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
+      # =========================[ Line #1 ]=========================
+      # os_icon               # os identifier
+      status                  # exit code of the last command
+      context                 # user@hostname
+      dir                     # current directory
+      vcs                     # git status
+      go_version            # go version (https://golang.org)
+      rust_version          # rustc version (https://www.rust-lang.org)
+      background_jobs         # presence of background jobs
+      direnv                  # direnv status (https://direnv.net/)
+      virtualenv              # python virtual environment (https://docs.python.org/3/library/venv.html)
+      in_nix_shell
+      docker_host
+      kubecontext             # current kubernetes context (https://kubernetes.io/)
+      prompt_char             # prompt symbol
+  )
+
+  # The list of segments shown on the right. Fill it with less important segments.
+  # Right prompt on the last prompt line (where you are typing your commands) gets
+  # automatically hidden when the input line reaches it. Right prompt above the
+  # last prompt line gets hidden if it would overlap with left prompt.
+  typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
+      # =========================[ Line #1 ]=========================
+      # command_execution_time  # duration of the last command
+      #anaconda                # conda environment (https://conda.io/)
+      # pyenv                   # python environment (https://github.com/pyenv/pyenv)
+      #nodenv                  # node.js version from nodenv (https://github.com/nodenv/nodenv)
+      #nvm                     # node.js version from nvm (https://github.com/nvm-sh/nvm)
+      #nodeenv                 # node.js environment (https://github.com/ekalinin/nodeenv)
+      # node_version          # node.js version
+      # dotnet_version        # .NET version (https://dotnet.microsoft.com)
+      #rbenv                   # ruby version from rbenv (https://github.com/rbenv/rbenv)
+      #rvm                     # ruby version from rvm (https://rvm.io)
+      # terraform               # terraform workspace (https://www.terraform.io)
+      #aws                     # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
+      # aws_eb_env            # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/)
+      # azure                 # azure account name (https://docs.microsoft.com/en-us/cli/azure)
+      #nordvpn                 # nordvpn connection status, linux only (https://nordvpn.com/)
+      #ranger                  # ranger shell (https://github.com/ranger/ranger)
+      # vpn_ip                # virtual private network indicator
+      # ram                   # free RAM
+      # load                  # CPU load
+      # time                    # current time
+      # =========================[ Line #2 ]=========================
+      #newline
+      # public_ip             # public IP address
+      # proxy                 # system-wide http/https/ftp proxy
+      #battery                # internal battery
+      # example               # example user-defined segment (see prompt_example function below)
+  )
+
+  # Basic style options that define the overall look of your prompt. You probably don't want to
+  # change them.
+  typeset -g POWERLEVEL9K_BACKGROUND=                            # transparent background
+  typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE=  # no surrounding whitespace
+  typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' '  # separate segments with a space
+  typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR=        # no end-of-line symbol
+
+  # To disable default icons for all segments, set POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION=''.
+  #
+  # To enable default icons for all segments, don't define POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION
+  # or set it to '${P9K_VISUAL_IDENTIFIER}'.
+  #
+  # To remove spaces from all default icons, set POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION
+  # to '${P9K_VISUAL_IDENTIFIER// }'. You'll know that you you need this option if you see extra
+  # spaces after icons.
+  #
+  # To enable default icons for one segment (e.g., dir), set
+  # POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'.
+  #
+  # To assign a specific icon to one segment (e.g., dir), set
+  # POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='⭐'.
+  #
+  # To assign a specific icon to a segment in a given state (e.g., dir in state NOT_WRITABLE),
+  # set POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'.
+  #
+  # Note: You can use $'\u2B50' instead of '⭐'. It's especially convenient when specifying
+  # icons that your text editor cannot render. Don't forget to put $ and use single quotes when
+  # defining icons via Unicode codepoints.
+  #
+  # Note: Many default icons cannot be displayed with system fonts. You'll need to install a
+  # capable font to use them. See POWERLEVEL9K_MODE below.
+  typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION=
+
+  # This option makes a difference only when default icons are enabled for all or some prompt
+  # segments (see POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION above). LOCK_ICON can be printed as
+  # $'\uE0A2', $'\uE138' or $'\uF023' depending on POWERLEVEL9K_MODE. The correct value of this
+  # parameter depends on the provider of the font your terminal is using.
+  #
+  #   Font Provider                    | POWERLEVEL9K_MODE
+  #   ---------------------------------+-------------------
+  #   Powerline                        | powerline
+  #   Font Awesome                     | awesome-fontconfig
+  #   Adobe Source Code Pro            | awesome-fontconfig
+  #   Source Code Pro                  | awesome-fontconfig
+  #   Awesome-Terminal Fonts (regular) | awesome-fontconfig
+  #   Awesome-Terminal Fonts (patched) | awesome-patched
+  #   Nerd Fonts                       | nerdfont-complete
+  #   Other                            | compatible
+  #
+  # If this looks overwhelming, either stick with a preinstalled system font and set
+  # POWERLEVEL9K_MODE=compatible, or install the recommended Powerlevel10k font from
+  # https://github.com/romkatv/powerlevel10k/#recommended-meslo-nerd-font-patched-for-powerlevel10k
+  # and set POWERLEVEL9K_MODE=nerdfont-complete.
+  typeset -g POWERLEVEL9K_MODE=nerdfont-complete
+
+  # When set to true, icons appear before content on both sides of the prompt. When set
+  # to false, icons go after content. If empty or not set, icons go before content in the left
+  # prompt and after content in the right prompt.
+  #
+  # You can also override it for a specific segment:
+  #
+  #   POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false
+  #
+  # Or for a specific segment in specific state:
+  #
+  #   POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false
+  typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true
+
+  # Add an empty line before each prompt.
+  typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
+
+  # Connect left prompt lines with these symbols.
+  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=
+  typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX=
+  typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX=
+  # Connect right prompt lines with these symbols.
+  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=
+  typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=
+  typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=
+
+  # The left end of left prompt.
+  typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL=
+  # The right end of right prompt.
+  typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL=
+
+  # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll
+  # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and
+  # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below.
+  typeset -g POWERLEVEL9K_SHOW_RULER=false
+  typeset -g POWERLEVEL9K_RULER_CHAR='─'        # reasonable alternative: '·'
+  typeset -g POWERLEVEL9K_RULER_FOREGROUND=240
+
+  # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─'
+  # to make it easier to see the alignment between left and right prompt and to separate prompt
+  # from command output. It serves the same purpose as ruler (see above) without increasing
+  # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false
+  # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact
+  # prompt.
+  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '
+  if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then
+    # The color of the filler.
+    typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240
+    # Add a space between the end of left prompt and the filler.
+    typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' '
+    # Add a space between the filler and the start of right prompt.
+    typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' '
+    # Start filler from the edge of the screen if there are no left segments on the first line.
+    typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}'
+    # End filler on the edge of the screen if there are no right segments on the first line.
+    typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}'
+  fi
+
+  #################################[ os_icon: os identifier ]##################################
+  # OS identifier color.
+  typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=
+  # Make the icon bold.
+  typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='%B${P9K_CONTENT}'
+
+  ################################[ prompt_char: prompt symbol ]################################
+  # Green prompt symbol if the last command succeeded.
+  typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76
+  # Red prompt symbol if the last command failed.
+  typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196
+  # Default prompt symbol.
+  typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='$'
+  # Prompt symbol in command vi mode.
+  typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮'
+  # Prompt symbol in visual vi mode.
+  typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='Ⅴ'
+  # Prompt symbol in overwrite vi mode.
+  typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶'
+  typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true
+  typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=''
+
+  ##################################[ dir: current directory ]##################################
+  # Default current directory color.
+  typeset -g POWERLEVEL9K_DIR_FOREGROUND=31
+  # If directory is too long, shorten some of its segments to the shortest possible unique
+  # prefix. The shortened directory can be tab-completed to the original.
+  typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_from_right # truncate_to_unique
+  # typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
+  # Replace removed segment suffixes with this symbol.
+  typeset -g POWERLEVEL9K_SHORTEN_DELIMITER=
+  # Color of the shortened directory segments.
+  typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103
+  # Color of the anchor directory segments. Anchor segments are never shortened. The first
+  # segment is always an anchor.
+  typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39
+  # Display anchor directory segments in bold.
+  typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true
+  # Don't shorten directories that contain any of these files. They are anchors.
+  local anchor_files=(
+    .bzr
+    .citc
+    .git
+    .hg
+    .node-version
+    .python-version
+    .ruby-version
+    .shorten_folder_marker
+    .svn
+    .terraform
+    CVS
+    Cargo.toml
+    composer.json
+    go.mod
+    package.json
+  )
+  typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})"
+  # Don't shorten this many last directory segments. They are anchors.
+  typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
+  # Shorten directory if it's longer than this even if there is space for it. The value can
+  # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty,
+  # directory will be shortened only when prompt doesn't fit or when other parameters demand it
+  # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below).
+  typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80
+  # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this
+  # many columns for typing commands.
+  typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40
+  # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least
+  # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands.
+  typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50
+  # If set to true, embed a hyperlink into the directory. Useful for quickly
+  # opening a directory in the file manager simply by clicking the link.
+  # Can also be handy when the directory is shortened, as it allows you to see
+  # the full directory that was used in previous commands.
+  typeset -g POWERLEVEL9K_DIR_HYPERLINK=false
+
+  # Enable special styling for non-writable directories.
+  typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=true
+  # Show this icon when the current directory is not writable. POWERLEVEL9K_DIR_SHOW_WRITABLE
+  # above must be set to true for this parameter to have effect.
+  # typeset -g POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  # Custom prefix.
+  # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin '
+
+  # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons for different directories.
+  # It must be an array with 3 * N elements. Each triplet consists of:
+  #
+  #   1. A pattern against which the current directory is matched. Matching is done with
+  #      extended_glob option enabled.
+  #   2. Directory class for the purpose of styling.
+  #   3. Icon.
+  #
+  # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. If there
+  # are no matches, the directory will have no icon.
+  #
+  # Example:
+  #
+  #   typeset -g POWERLEVEL9K_DIR_CLASSES=(
+  #       '~/work(/*)#'  WORK     '(╯°□°)╯︵ ┻━┻'
+  #       '~(/*)#'       HOME     '⌂'
+  #       '*'            DEFAULT  '')
+  #
+  # With these settings, the current directory in the prompt may look like this:
+  #
+  #   (╯°□°)╯︵ ┻━┻ ~/work/projects/important/urgent
+  #
+  # Or like this:
+  #
+  #   ⌂ ~/best/powerlevel10k
+  #
+  # You can also set different colors for directories of different classes. Remember to override
+  # FOREGROUND, SHORTENED_FOREGROUND and ANCHOR_FOREGROUND for every directory class that you wish
+  # to have its own color.
+  #
+  #   typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31
+  #   typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103
+  #   typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39
+  #
+  # typeset -g POWERLEVEL9K_DIR_CLASSES=()
+
+  #####################################[ vcs: git status ]######################################
+  # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon.
+  typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=
+  POWERLEVEL9K_VCS_BRANCH_ICON=${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}
+
+  # Untracked files icon. It's really a question mark, your font isn't broken.
+  # Change the value of this parameter to show a different icon.
+  typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?'
+  POWERLEVEL9K_VCS_UNTRACKED_ICON=${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}
+
+  # Formatter for Git status.
+  #
+  # Example output: master ⇣42⇡42 *42 merge ~42 +42 !42 ?42.
+  #
+  # You can edit the function to customize how Git status looks.
+  #
+  # VCS_STATUS_* parameters are set by gitstatus plugin. See reference:
+  # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh.
+  function my_git_formatter() {
+    emulate -L zsh
+
+    if [[ -n $P9K_CONTENT ]]; then
+      # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from
+      # gitstatus plugin). VCS_STATUS_* parameters are not available in this case.
+      typeset -g my_git_format=$P9K_CONTENT
+      return
+    fi
+
+    if (( $1 )); then
+      # Styling for up-to-date Git status.
+      local       meta='%f'     # default foreground
+      local      clean='%76F'   # green foreground
+      local   modified='%178F'  # yellow foreground
+      local  untracked='%39F'   # blue foreground
+      local conflicted='%196F'  # red foreground
+    else
+      # Styling for incomplete and stale Git status.
+      local       meta='%244F'  # grey foreground
+      local      clean='%244F'  # grey foreground
+      local   modified='%244F'  # grey foreground
+      local  untracked='%244F'  # grey foreground
+      local conflicted='%244F'  # grey foreground
+    fi
+
+    local res
+    local where  # branch name, tag or commit
+    if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then
+      res+="${clean}${POWERLEVEL9K_VCS_BRANCH_ICON}"
+      where=${(V)VCS_STATUS_LOCAL_BRANCH}
+    elif [[ -n $VCS_STATUS_TAG ]]; then
+      res+="${meta}#"
+      where=${(V)VCS_STATUS_TAG}
+    else
+      res+="${meta}@"
+      where=${VCS_STATUS_COMMIT[1,8]}
+    fi
+
+    # If local branch name or tag is at most 32 characters long, show it in full.
+    # Otherwise show the first 12 … the last 12.
+    (( $#where > 32 )) && where[13,-13]="…"
+    res+="${clean}${where//\%/%%}"  # escape %
+
+    # Show tracking branch name if it differs from local branch.
+    if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then
+      res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}"  # escape %
+    fi
+
+    # ⇣42 if behind the remote.
+    (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}"
+    # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42.
+    (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" "
+    (( VCS_STATUS_COMMITS_AHEAD  )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}"
+    # *42 if have stashes.
+    (( VCS_STATUS_STASHES        )) && res+=" ${clean}*${VCS_STATUS_STASHES}"
+    # 'merge' if the repo is in an unusual state.
+    [[ -n $VCS_STATUS_ACTION     ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}"
+    # ~42 if have merge conflicts.
+    (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}"
+    # +42 if have staged changes.
+    (( VCS_STATUS_NUM_STAGED     )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}"
+    # !42 if have unstaged changes.
+    (( VCS_STATUS_NUM_UNSTAGED   )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}"
+    # ?42 if have untracked files. It's really a question mark, your font isn't broken.
+    # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon.
+    # Remove the next line if you don't want to see untracked files at all.
+    (( VCS_STATUS_NUM_UNTRACKED  )) && res+=" ${untracked}${POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}"
+
+    typeset -g my_git_format=$res
+  }
+  functions -M my_git_formatter 2>/dev/null
+
+  # Disable the default Git status formatting.
+  typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true
+  # Install our own Git status formatter.
+  typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}'
+  typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}'
+  # Enable counters for staged, unstaged, etc.
+  typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1
+
+  # Icon color.
+  typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76
+  typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐'
+  # Custom prefix.
+  # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon '
+
+  # Show status of repositories of these types. You can add svn and/or hg if you are
+  # using them. If you do, your prompt may become slow even when your current directory
+  # isn't in an svn or hg reposotiry.
+  typeset -g POWERLEVEL9K_VCS_BACKENDS=(git)
+
+  # These settings are used for respositories other than Git or when gitstatusd fails and
+  # Powerlevel10k has to fall back to using vcs_info.
+  typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76
+  typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76
+  typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178
+
+  ##########################[ status: exit code of the last command ]###########################
+  # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and
+  # style them independently from the regular OK and ERROR state.
+  typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true
+
+  # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as
+  # it will signify success by turning green.
+  typeset -g POWERLEVEL9K_STATUS_OK=false
+  typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70
+  typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔'
+
+  # Status when some part of a pipe command fails but the overall exit status is zero. It may look
+  # like this: 1|0.
+  typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true
+  typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70
+  typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔'
+
+  # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as
+  # it will signify error by turning red.
+  typeset -g POWERLEVEL9K_STATUS_ERROR=false
+  typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160
+  typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘'
+
+  # Status when the last command was terminated by a signal.
+  typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true
+  typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160
+  # Use terse signal names: "INT" instead of "SIGINT(2)".
+  typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false
+  typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘'
+
+  # Status when some part of a pipe command fails and the overall exit status is also non-zero.
+  # It may look like this: 1|0.
+  typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true
+  typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160
+  typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘'
+
+  ###################[ command_execution_time: duration of the last command ]###################
+  # Show duration of the last command if takes longer than this many seconds.
+  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3
+  # Show this many fractional digits. Zero means round to seconds.
+  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
+  # Execution time color.
+  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=101
+  # Duration format: 1d 2h 3m 4s.
+  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐'
+  # Custom prefix.
+  # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook '
+
+  #######################[ background_jobs: presence of background jobs ]#######################
+  # Don't show the number of background jobs.
+  typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false
+  # Background jobs color.
+  typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=70
+  # Icon to show when there are background jobs.
+  typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⇶'
+
+  #######################[ direnv: direnv status (https://direnv.net/) ]########################
+  # Direnv color.
+  typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178
+  # Icon to show when direnv is active.
+  typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'
+
+  ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]###########
+  # NordVPN connection indicator color.
+  typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39
+  # Hide NordVPN connection indicator when not connected.
+  typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION=
+  typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION=
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]##################
+  # Ranger shell color.
+  typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ######################################[ ram: free RAM ]#######################################
+  # RAM color.
+  typeset -g POWERLEVEL9K_RAM_FOREGROUND=66
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ######################################[ load: CPU load ]######################################
+  # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15.
+  typeset -g POWERLEVEL9K_LOAD_WHICH=5
+  # Load color when load is under 50%.
+  typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66
+  # Load color when load is between 50% and 70%.
+  typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178
+  # Load color when load is over 70%.
+  typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ##################################[ context: user@hostname ]##################################
+  # Default context color.
+  typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180
+  # Default context format: %n is username, %m is hostname.
+  typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m'
+
+  # Context color when running with privileges.
+  typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178
+  # Context format when running with privileges: bold user@hostname.
+  typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m'
+
+  # Don't show context unless running with privileges or in SSH.
+  # Tip: Remove the next line to always show context.
+  typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=
+
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐'
+  # Custom prefix.
+  # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith '
+
+  ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]###
+  # Python virtual environment color.
+  typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37
+  # Don't show Python version next to the virtual environment name.
+  typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
+  # Separate environment name from Python version only with a space.
+  typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  #####################[ anaconda: conda environment (https://conda.io/) ]######################
+  # Anaconda environment color.
+  typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37
+  # Don't show Python version next to the anaconda environment name.
+  typeset -g POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION=false
+  # Separate environment name from Python version only with a space.
+  typeset -g POWERLEVEL9K_ANACONDA_{LEFT,RIGHT}_DELIMITER=
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################
+  # Pyenv color.
+  typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37
+  # Don't show the current Python version if it's the same as global.
+  typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]##########
+  # Nodenv color.
+  typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70
+  # Don't show node version if it's the same as global: $(nodenv version-name) == $(nodenv global).
+  typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]###############
+  # Nvm color.
+  typeset -g POWERLEVEL9K_NVM_FOREGROUND=70
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############
+  # Nodeenv color.
+  typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70
+  # Don't show Node version next to the environment name.
+  typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false
+  # Separate environment name from Node version only with a space.
+  typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER=
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ##############################[ node_version: node.js version ]###############################
+  # Node version color.
+  typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70
+  # Show node version only when in a directory tree containing package.json.
+  typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  #######################[ go_version: go version (https://golang.org) ]########################
+  # Go version color.
+  typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37
+  # Show go version only when in a go project subdirectory.
+  typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  #################[ rust_version: rustc version (https://www.rust-lang.org) ]##################
+  # Rust version color.
+  typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37
+  # Show rust version only when in a rust project subdirectory.
+  typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################
+  # .NET version color.
+  typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134
+  # Show .NET version only when in a .NET project subdirectory.
+  typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]##############
+  # Rbenv color.
+  typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168
+  # Hide ruby version if it doesn't come from one of these sources.
+  typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global)
+  # If set to false, hide ruby version if it's the same as global:
+  # $(rbenv version-name) == $(rbenv global).
+  typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  #######################[ rvm: ruby version from rvm (https://rvm.io) ]########################
+  # Rvm color.
+  typeset -g POWERLEVEL9K_RVM_FOREGROUND=168
+  # Don't show @gemset at the end.
+  typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false
+  # Don't show ruby- at the front.
+  typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]#############
+  # Kubernetes context classes for the purpose of using different colors, icons and expansions with
+  # different contexts.
+  #
+  # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element
+  # in each pair defines a pattern against which the current kubernetes context gets matched.
+  # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
+  # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters,
+  # you'll see this value in your prompt. The second element of each pair in
+  # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The
+  # first match wins.
+  #
+  # For example, given these settings:
+  #
+  #   typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
+  #     '*prod*'  PROD
+  #     '*test*'  TEST
+  #     '*'       DEFAULT)
+  #
+  # If your current kubernetes context is "deathray-testing/default", its class is TEST
+  # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'.
+  #
+  # You can define different colors, icons and content expansions for different classes:
+  #
+  #   typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28
+  #   typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
+  #   typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
+  typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
+      # '*prod*'  PROD    # These values are examples that are unlikely
+      # '*test*'  TEST    # to match your needs. Customize them as needed.
+      '*'       DEFAULT)
+  typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134
+
+  # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext
+  # segment. Parameter expansions are very flexible and fast, too. See reference:
+  # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion.
+  #
+  # Within the expansion the following parameters are always available:
+  #
+  # - P9K_CONTENT                The content that would've been displayed if there was no content
+  #                              expansion defined.
+  # - P9K_KUBECONTEXT_NAME       The current context's name. Corresponds to column NAME in the
+  #                              output of `kubectl config get-contexts`.
+  # - P9K_KUBECONTEXT_CLUSTER    The current context's cluster. Corresponds to column CLUSTER in the
+  #                              output of `kubectl config get-contexts`.
+  # - P9K_KUBECONTEXT_NAMESPACE  The current context's namespace. Corresponds to column NAMESPACE
+  #                              in the output of `kubectl config get-contexts`. If there is no
+  #                              namespace, the parameter is set to "default".
+  #
+  # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS),
+  # the following extra parameters are available:
+  #
+  # - P9K_KUBECONTEXT_CLOUD_NAME     Either "gke" or "eks".
+  # - P9K_KUBECONTEXT_CLOUD_ACCOUNT  Account/project ID.
+  # - P9K_KUBECONTEXT_CLOUD_ZONE     Availability zone.
+  # - P9K_KUBECONTEXT_CLOUD_CLUSTER  Cluster.
+  #
+  # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example,
+  # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01":
+  #
+  #   - P9K_KUBECONTEXT_CLOUD_NAME=gke
+  #   - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account
+  #   - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a
+  #   - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
+  #
+  # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01":
+  #
+  #   - P9K_KUBECONTEXT_CLOUD_NAME=eks
+  #   - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012
+  #   - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1
+  #   - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
+  typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION='%F{13}${${${:-$KCS_PROFILE}:-$P9K_KUBECONTEXT_CLUSTER}}%f'
+  # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION=
+  # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME.
+  # POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}'
+  POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='/%F{3}${${:-$P9K_KUBECONTEXT_NAMESPACE}:-default}%f'
+  # Append the current context's namespace if it's not "default".
+  # POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}'
+
+  # Custom prefix.
+  # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat '
+
+  ################[ terraform: terraform workspace (https://www.terraform.io) ]#################
+  # Terraform color.
+  typeset -g POWERLEVEL9K_TERRAFORM_FOREGROUND=38
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_TERRAFORM_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]#
+  # AWS profile color.
+  typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208
+  # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element
+  # in each pair defines a pattern against which the current AWS profile gets matched.
+  # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
+  # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters,
+  # you'll see this value in your prompt. The second element of each pair in
+  # POWERLEVEL9K_AWS_CLASSES defines the context class. Patterns are tried in order. The
+  # first match wins.
+  #
+  # For example, given these settings:
+  #
+  #   typeset -g POWERLEVEL9K_AWS_CLASSES=(
+  #     '*prod*'  PROD
+  #     '*test*'  TEST
+  #     '*'       DEFAULT)
+  #
+  # If your current AWS profile is "company_test", its class is TEST
+  # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'.
+  #
+  # You can define different colors, icons and content expansions for different classes:
+  #
+  #   typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28
+  #   typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
+  #   typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
+  typeset -g POWERLEVEL9K_AWS_CLASSES=(
+      # '*prod*'  PROD    # These values are examples that are unlikely
+      # '*test*'  TEST    # to match your needs. Customize them as needed.
+      '*'       DEFAULT)
+  # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]#
+  # AWS Elastic Beanstalk environment color.
+  typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]##########
+  # Azure account name color.
+  typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ###############################[ public_ip: public IP address ]###############################
+  # Public IP color.
+  typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ########################[ vpn_ip: virtual private network indicator ]#########################
+  # VPN IP color.
+  typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81
+  # When on VPN, show just an icon without the IP address.
+  typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION=
+  # Regular expression for the VPN network interface. Run ifconfig while on VPN to see the
+  # name of the interface.
+  typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(wg|(.*tun))[0-9]*'
+  # Icon to show when on VPN.
+  typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'
+
+  #########################[ proxy: system-wide http/https/ftp proxy ]##########################
+  # Proxy color.
+  typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  ################################[ battery: internal battery ]#################################
+  # Show battery in red when it's below this level and not connected to power supply.
+  typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20
+  typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160
+  # Show battery in green when it's charging or fully charged.
+  typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70
+  # Show battery in yellow when it's discharging.
+  typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178
+  # Battery pictograms going from low to high level of charge.
+  typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█')
+  # Don't show the remaining time to charge/discharge.
+  typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false
+
+  ####################################[ time: current time ]####################################
+  # Current time color.
+  typeset -g POWERLEVEL9K_TIME_FOREGROUND=66
+  # Format for the current time: 09:51:02. See `man 3 strftime`.
+  typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
+  # If set to true, time will update when you hit enter. This way prompts for the past
+  # commands will contain the start times of their commands as opposed to the default
+  # behavior where they contain the end times of their preceding commands.
+  typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
+  # Custom icon.
+  # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐'
+  # Custom prefix.
+  # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat '
+
+  function prompt_in_nix_shell() {
+    if test -n "${IN_NIX_SHELL}"; then
+      if test -n "${NIX_SHELL_PACKAGES}"; then
+        p10k segment -f yellow -i '🛡' -t "{ ${NIX_SHELL_PACKAGES} }"
+      else
+        p10k segment -f yellow -t "🛡"
+      fi
+    fi
+  }
+
+  function prompt_docker_host() {
+      if test -n "${DOCKER_HOST}"; then
+          p10k segment -f blue -i '🐋' -t "${DOCKER_HOST}"
+      fi
+  }
+  # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job
+  # is to generate the prompt segment for display in instant prompt. See
+  # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
+  #
+  # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function
+  # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k
+  # will replay these calls without actually calling instant_prompt_*. It is imperative that
+  # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this
+  # rule is not observed, the content of instant prompt will be incorrect.
+
+  function instant_prompt_in_nix_shell() {
+    prompt_in_nix_shell
+  }
+
+  function instant_prompt_docker_host() {
+      prompt_docker_host
+  }
+
+  # User-defined prompt segments can be customized the same way as built-in segments.
+  # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208
+  # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+  # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
+  # when accepting a command line. Supported values:
+  #
+  #   - off:      Don't change prompt when accepting a command line.
+  #   - always:   Trim down prompt when accepting a command line.
+  #   - same-dir: Trim down prompt when accepting a command line unless this is the first command
+  #               typed after changing current working directory.
+  typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off
+
+  # Instant prompt mode.
+  #
+  #   - off:     Disable instant prompt. Choose this if you've tried instant prompt and found
+  #              it incompatible with your zsh configuration files.
+  #   - quiet:   Enable instant prompt and don't print warnings when detecting console output
+  #              during zsh initialization. Choose this if you've read and understood
+  #              https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
+  #   - verbose: Enable instant prompt and print a warning when detecting console output during
+  #              zsh initialization. Choose this if you've never tried instant prompt, haven't
+  #              seen the warning, or if you are unsure what this all means.
+  typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose
+
+  # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
+  # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
+  # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
+  # really need it.
+  typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true
+
+  # If p10k is already loaded, reload configuration.
+  # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true.
+  #(( ! $+functions[p10k] )) || p10k reload
+}
+
+(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
+'builtin' 'unset' 'p10k_config_opts'
home/common/shell/atuin.nix
@@ -0,0 +1,46 @@
+{ pkgs, ... }:
+{
+  programs.atuin = {
+    enable = true;
+    enableZshIntegration = true;
+    flags = [ "--disable-up-arrow" ];
+    settings = {
+      auto_sync = true;
+      sync_frequency = "10m";
+      sync_address = "http://sakhalin.sbr.pm:8888";
+      search_mode = "skim";
+      filter_mode = "global";
+      enter_accept = false;
+      prefers_reduced_motion = true;
+      common_prefix = [ "sudo" ];
+      ignored_commands = [
+        "cd"
+        "fg"
+        "ls"
+        "rm"
+        "vi"
+        "vim"
+        "p"
+        "d"
+        "ll"
+        "j"
+        "g"
+        ":"
+        "mv"
+        "cat"
+        "echo"
+      ];
+      # history_filter = [
+      #   "^curl"
+      #   "^wget"
+      #   "^monolith"
+      #   "^sherlock"
+      #   "^yt-dlp"
+      #   "^yt-dl"
+      #   "^gallery-dl"
+      #   "^archivebox"
+      #   "^fanficfare"
+      # ];
+    };
+  };
+}
home/common/shell/default.nix
@@ -0,0 +1,32 @@
+{ pkgs, ... }:
+{
+  imports = [
+    ./atuin.nix
+    ./direnv.nix
+    ./git.nix
+    ./htop.nix
+    ./tmux.nix
+    ./xdg.nix
+    ./zsh.nix
+  ];
+
+  programs = {
+    broot = {
+      enable = true;
+      enableZshIntegration = true;
+    };
+    eza.enable = true;
+    fd.enable = true;
+    git.enable = true;
+    jq.enable = true;
+  };
+
+  home.packages = with pkgs; [
+    age
+    enchive
+    mosh
+    ripgrep
+
+    # ugrep
+  ];
+}
home/common/shell/direnv.nix
@@ -0,0 +1,14 @@
+{ pkgs, ... }:
+
+{
+  programs.direnv = {
+    enable = true;
+    enableZshIntegration = true;
+    stdlib = ''
+      mkdir -p $HOME/.cache/direnv/layouts
+      pwd_hash=$(echo -n $PWD | shasum | cut -d ' ' -f 1)
+      direnv_layout_dir=$HOME/.cache/direnv/layouts/$pwd_hash
+      source ${pkgs.nix-direnv}/share/nix-direnv/direnvrc
+    '';
+  };
+}
home/common/shell/fzf.nix
@@ -0,0 +1,13 @@
+_: {
+  programs.fzf = {
+    enable = true;
+    enableZshIntegration = true;
+    defaultOptions = [ "--bind=ctrl-j:accept" ];
+    changeDirWidgetOptions = [ "--preview 'tree -C {} | head -200'" ];
+    fileWidgetCommand = "rg --files";
+    fileWidgetOptions = [
+      "--preview 'bat -n --color=always {}'"
+      "--bind 'ctrl-/:change-preview-window(down|hidden|)'"
+    ];
+  };
+}
home/common/shell/git.nix
@@ -0,0 +1,242 @@
+{ config, lib, pkgs, ... }:
+let
+  redhat_folders = [
+    "src/github.com/containers"
+    "src/github.com/google"
+    "src/github.com/knative"
+    "src/github.com/kubernetes"
+    "src/github.com/openshift"
+    "src/github.com/openshift-knative"
+    "src/github.com/openshift-pipelines"
+    "src/github.com/operator-framework"
+    "src/github.com/redhat-developer"
+    "src/github.com/tektoncd"
+    "src/gitlab.cee.redhat.com"
+    "src/gitlab.corp.redhat.com"
+    "src/k8s.io"
+    "src/osp"
+    "src/pkg.devel.redhat.com"
+    "src/tektoncd"
+    "src/backstage"
+    "src/knative.dev"
+    "src/knative-sandbox"
+  ];
+in
+{
+  xdg.configFile."git/allowed_signers".text = ''
+  '';
+  home.packages = with pkgs; [
+    git-lfs
+    gh
+    codeberg-cli
+    mr
+    delta
+    difftastic
+  ];
+  programs.git = {
+    enable = true;
+    package = pkgs.git;
+
+    userName = "Vincent Demeester";
+    userEmail = "vincent@sbr.pm";
+
+    includes = [ ] ++ lib.lists.forEach redhat_folders (x: {
+      condition = "gitdir:${config.home.homeDirectory}/${x}/**";
+      contents.users.emal = "vdemeest@redhat.com";
+    });
+
+    signing = {
+      # key = "6EB699A3";
+      # FIXME: This should change depending on the host (could be different yubikey, …)
+      key = "${pkgs.writeText "yubikey5-c1" "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGHMa4rHuBbQQYv+8jvlkFCD2VYRGA4+5fnZAhLx8iDirzfEPqHB60UJWcDeixnJCUlpJjzFbS4crNOXhfCTCTE="}";
+      signByDefault = false;
+    };
+
+    aliases = {
+      b = "branch - -color - v";
+      br = "branch";
+      ca = "commit --amend";
+      ci = "commit --signoff";
+      co = "checkout";
+      conflicts = "!git ls-files --unmerged | cut -c51- | sort -u | xargs $EDITOR";
+      dft = "difftool";
+      lg = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative";
+      lga = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative --branches --remotes";
+      lol = "log --pretty=oneline --abbrev-commit --graph --decorate";
+      ls-ignored = "ls-files --exclude-standard --ignored --others";
+      resolve = "!git ls-files --unmerged | cut -c51- | sort -u | xargs git add";
+      st = "status";
+      su = "submodule update --init --recursive";
+      unstage = "reset HEAD";
+      w = "status -sb";
+      wdiff = "diff --color-words";
+      kdiff = "difftool --tool=kitty --no-symlinks --dir-diff";
+    };
+    attributes = [
+      "*.org   diff=org"
+    ];
+    extraConfig = {
+      core = {
+        pager = "${pkgs.delta}/bin/delta";
+        abbrev = 12;
+        # pager = "${pkgs.delta}/bin/delta --syntax-theme GitHub";
+        # editor = "${pkgs.emacs}/bin/emacsclient -t";
+      };
+      gpg = {
+        format = "ssh";
+        ssh = {
+          defaultKeyCommand = "sh -c 'echo key::$(ssh-add -L | head -n1)'";
+          allowedSignersFile = "${config.xdg.configHome}/git/allowed_signers";
+        };
+      };
+      commit = {
+        gpgSign = true;
+      };
+      tag = {
+        gpgSign = true;
+      };
+      init = {
+        defaultBranch = "main";
+      };
+      color = {
+        status = "auto";
+        diff = "auto";
+        branch = "auto";
+        interactive = "auto";
+        ui = "auto";
+        sh = "auto";
+      };
+      "color.branch" = {
+        current = "cyan reverse";
+        local = "cyan";
+        remote = "green";
+      };
+      "color.diff" = {
+        current = "white reverse";
+        frag = "magenta reverse";
+        old = "red";
+        new = "green";
+      };
+      "color.status" = {
+        added = "green";
+        changed = "yellow";
+        untracked = "red";
+      };
+      # Either use this *or* git maintenance
+      # fetch = {
+      #   writeCommitGraph = true;
+      # };
+      diff = {
+        algorithm = "histogram";
+        colormoved = "default";
+        colormovedws = "allow-indentation-change";
+        # external = "difft";
+        # tool = "difftastic";
+      };
+      "diff.org" = {
+        xfuncname = "\"^\\\\*+.*\"";
+      };
+      difftool = {
+        prompt = false;
+        trustExitCode = true;
+      };
+      "difftool.difftastic" = {
+        cmd = "difft \"$LOCAL\" \"$REMOTE\"";
+      };
+      "difftool.kitty" = {
+        cmd = "kitten diff $LOCAL $REMOTE";
+      };
+      pager = {
+        difftool = true;
+      };
+      pretty = {
+        fixes = "Fixes: %h (\"%s\")";
+      };
+      forge = {
+        remote = "upstream";
+      };
+      rerere = {
+        enabled = true;
+      };
+      hub = {
+        protocol = true;
+      };
+      pull = {
+        rebase = true;
+      };
+      push = {
+        default = "upstream";
+        recurseSubmodules = "check";
+      };
+      rebase = {
+        autosquash = true;
+      };
+      status = {
+        short = true;
+        branch = true;
+      };
+      branch = {
+        sort = "-committerdate";
+      };
+      advice = {
+        statusHints = false;
+        pushNonFastForward = false;
+      };
+      http = {
+        # sslCAinfo = "${ca-bundle_crt}";
+        sslverify = true;
+      };
+      delta = {
+        syntax-theme = "GitHub";
+        features = "decorations";
+      };
+
+      "delta \"decorations\"" = {
+        commit-decoration-style = "blue ol";
+        commit-style = "raw";
+        file-style = "omit";
+        hunk-header-decoration-style = "blue box";
+        hunk-header-file-style = "red";
+        hunk-header-line-number-style = "#067a00";
+        hunk-header-style = "file line-number syntax";
+        navigate = true;
+      };
+
+      credential = {
+        "https://github.com" = {
+          helper = "!${pkgs.gh}/bin/gh auth git-credential";
+        };
+        "https://gist.github.com" = {
+          helper = "!${pkgs.gh}/bin/gh auth git-credential";
+        };
+      };
+      github.user = "vdemeester";
+      "filter \"lfs\"" = {
+        clean = "${pkgs.git-lfs}/bin/git-lfs clean -- %f";
+        smudge = "${pkgs.git-lfs}/bin/git-lfs smudge --skip -- %f";
+        required = true;
+      };
+      "url \"git@github.com:\"".insteadOf = "git://github.com/";
+    };
+
+    ignores = [
+      "*.elc"
+      "*.vo"
+      "*.aux"
+      "*.v.d"
+      "*.o"
+      "*.a"
+      "*.la"
+      "*.so"
+      "*.dylib"
+      "*.pyc"
+      "*.pyo"
+      ".idea"
+      "*.iml"
+      "*~"
+      "#*#"
+      ".makefile"
+      ".clean"
+    ];
+  };
+}
home/common/shell/htop.nix
@@ -0,0 +1,21 @@
+{ config, ... }:
+{
+  programs.htop = {
+    enable = true;
+    settings = {
+      delay = 10;
+    } // (with config.lib.htop; leftMeters [
+      (bar "AllCPUs2")
+      (bar "Memory")
+      (bar "Swap")
+    ]) // (with config.lib.htop; rightMeters [
+      (text "Clock")
+      (text "Hostname")
+      (text "Tasks")
+      (text "LoadAverage")
+      (text "Uptime")
+      (text "Battery")
+      (text "Systemd")
+    ]);
+  };
+}
home/common/shell/tmux.nix
@@ -0,0 +1,20 @@
+{ config, pkgs, ... }:
+
+{
+  programs.tmux = {
+    enable = true;
+    #sensibleOnTop = true;
+    #aggressiveResize = true;
+    clock24 = true;
+    escapeTime = 0;
+    newSession = true;
+    #plugins = with pkgs.tmuxPlugins; [ prefix-highlight ];
+    #secureSocket = false;
+    terminal = "tmux-256color";
+    #historyLimit = 30000;
+    extraConfig = ''
+      source-file ${config.xdg.configHome}/tmux/tmux.conf
+    '';
+  };
+  xdg.configFile."tmux/tmux.conf".source = ./tmux/tmux.conf;
+}
home/common/shell/xdg.nix
@@ -0,0 +1,32 @@
+{ config, lib, ... }:
+let
+  desktopDirectory = config.home.homeDirectory + "/desktop";
+in
+{
+  xdg = {
+    enable = true;
+
+    configHome = config.home.homeDirectory + "/.config";
+    cacheHome = config.home.homeDirectory + "/.local/cache";
+    dataHome = config.home.homeDirectory + "/.local/share";
+    stateHome = config.home.homeDirectory + "/.local/state";
+
+    userDirs = {
+      enable = true;
+      createDirectories = lib.mkDefault true;
+
+      desktop = desktopDirectory;
+      documents = desktopDirectory + "documents";
+      download = desktopDirectory + "/downloads";
+      music = desktopDirectory + "/music";
+      pictures = desktopDirectory + "/pictures";
+      publicShare = desktopDirectory + "/www";
+      templates = desktopDirectory + "/documents/templates";
+      videos = desktopDirectory + "/videos";
+
+      extraConfig = {
+        XDG_SCREENSHOTS_DIR = "${desktopDirectory}/pictures/screenshots";
+      };
+    };
+  };
+}
home/common/shell/zsh.nix
@@ -0,0 +1,164 @@
+{ config, pkgs, ... }: {
+  home.packages = with pkgs; [
+    nix-zsh-completions
+  ];
+
+  programs.zsh = {
+    enable = true;
+    enableCompletion = true;
+    autosuggestion.enable = true;
+    autocd = true;
+    dotDir = "${config.xdg.configHome}/zsh";
+    defaultKeymap = "emacs";
+    history = {
+      expireDuplicatesFirst = true;
+      extended = true;
+      ignoreDups = true;
+      path = "${config.xdg.dataHome}/zsh_history";
+      save = 10000;
+      share = true;
+    };
+    envExtra = ''
+      export PATH=$HOME/bin:$PATH
+      export LESSHISTFILE="${config.xdg.dataHome}/less_history"
+      export WEBKIT_DISABLE_COMPOSITING_MODE=1;
+      if [ -d $HOME/.krew/bin ]; then
+        export PATH=$HOME/.krew/bin:$PATH
+      fi
+      # TODO Move somewhere else
+      export TLDR_CACHE_DIR="$XDG_CACHE_HOME"/tldr 
+    '';
+    # TODO Extract this to files.
+    initExtra = ''
+      # c.f. https://wiki.gnupg.org/AgentForwarding
+      # gpgconf --create-socketdir &!
+      path+="$HOME/${config.programs.zsh.dotDir}/functions"
+      fpath+="$HOME/.nix-profile/share/zsh/site-functions"
+      fpath+="$HOME/${config.programs.zsh.dotDir}/functions"
+      for func ($HOME/${config.programs.zsh.dotDir}/functions) autoload -U $func/*(x:t)
+      autoload -Uz select-word-style; select-word-style bash
+      if [ -e /home/vincent/.nix-profile/etc/profile.d/nix.sh ]; then . /home/vincent/.nix-profile/etc/profile.d/nix.sh; fi
+      #if [ -n "$INSIDE_EMACS" ]; then
+      #  chpwd() { print -P "\033AnSiTc %d" }
+      #  print -P "\033AnSiTu %n"
+      #  print -P "\033AnSiTc %d"
+      #fi
+      if [[ "$TERM" == "dumb" || "$TERM" == "emacs" ]]
+      then
+        TERM=eterm-color
+        unsetopt zle
+        unsetopt prompt_cr
+        unsetopt prompt_subst
+        unfunction precmd
+        unfunction preexec
+        PS1='$ '
+        return
+      fi
+      # eval "$(${config.programs.atuin.package}/bin/atuin init zsh)"
+      # make sure navigation using emacs keybindings works on all non-alphanumerics
+      # syntax highlighting
+      source $HOME/${config.programs.zsh.dotDir}/plugins/zsh-nix-shell/nix-shell.plugin.zsh
+      source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+      ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
+      ZSH_HIGHLIGHT_PATTERNS+=('rm -fR *' 'fg=white,bold,bg=red')
+      ZSH_HIGHLIGHT_PATTERNS+=('rm -fr *' 'fg=white,bold,bg=red')
+      source $HOME/${config.programs.zsh.dotDir}/completion.zsh
+      source $HOME/${config.programs.zsh.dotDir}/plugins/powerlevel10k/powerlevel10k.zsh-theme
+      source $HOME/${config.programs.zsh.dotDir}/prompt.zsh
+      source $HOME/${config.programs.zsh.dotDir}/plugins/kubectl-config-switcher/kubectl-config-switcher.plugin.zsh
+      source $HOME/${config.programs.zsh.dotDir}/auto-expanding-aliases.zsh
+      setopt HIST_IGNORE_SPACE
+      alias -g L="|less"
+      alias -g EEL=' 2>&1 | less'
+      alias -g GB='`git rev-parse --abbrev-ref HEAD`'
+      alias -g GR='`git rev-parse --show-toplevel`'
+      alias -s {ape,avi,flv,m4a,mkv,mov,mp3,mp4,mpeg,mpg,ogg,ogm,wav,webm}=mpv
+      alias -s org=emacs
+      (( $+commands[jq] )) && alias -g MJ="| jq -C '.'"  || alias -g MJ="| ${pkgs.python3}/bin/python -mjson.tool"
+      (( $+functions[zshz] )) && compdef _zshz j
+      [[ -n $INSIDE_EMACS ]] && \
+      function ff () {
+        print "\e]51;Efind-file $(readlink -f $1)\e\\"
+      }
+
+      export _Z_DATA="${config.xdg.dataHome}/z"
+
+
+      [ -n "$EAT_SHELL_INTEGRATION_DIR" ] && \
+        source "$EAT_SHELL_INTEGRATION_DIR/zsh"
+    '';
+    loginExtra = ''
+      if [[ -z $DISPLAY && $TTY = /dev/tty1 ]]; then
+        exec dbus-run-session sway
+      fi
+    '';
+    profileExtra = ''
+      if [ -e /home/vincent/.nix-profile/etc/profile.d/nix.sh ]; then . /home/vincent/.nix-profile/etc/profile.d/nix.sh; fi
+    '';
+    sessionVariables = { RPROMPT = ""; };
+
+    shellAliases = {
+      mkdir = ''mkdir --parents --verbose'';
+      rm = ''rm --interactive'';
+      cp = ''cp --interactive'';
+      mv = ''mv --interactive'';
+      gcd = ''cd (git root)'';
+      # ls = ''exa'';
+      ll = ''ls -l'';
+      la = ''ls -a'';
+      l = ''ls -lah'';
+      # t = ''exa --tree --level=2'';
+      map = ''xargs -n1'';
+      k = ''kubectl'';
+      wget = ''wget -c --hsts-file=${config.xdg.dataHome}/wget-hsts'';
+    };
+
+    plugins = [
+      {
+        name = "kubectl-config-switcher";
+        src = pkgs.fetchFromGitHub {
+          owner = "chmouel";
+          repo = "kubectl-config-switcher";
+          rev = "5679aa70383cee93fc15351dd4895c29c90b78a5";
+          sha256 = "sha256-Aifa5ms2p/l0FkZE8Tep8QiDWUdfFfdKrTIbJNurxw4=";
+        };
+      }
+      {
+        name = "zsh-z";
+        src = pkgs.fetchFromGitHub {
+          owner = "agkozak";
+          repo = "zsh-z";
+          rev = "aaafebcd97424c570ee247e2aeb3da30444299cd";
+          sha256 = "sha256-9Wr4uZLk2CvINJilg4o72x0NEAl043lP30D3YnHk+ZA=";
+        };
+      }
+      {
+        name = "async";
+        src = pkgs.fetchFromGitHub {
+          owner = "mafredri";
+          repo = "zsh-async";
+          rev = "v1.8.5";
+          sha256 = "sha256-mpXT3Hoz0ptVOgFMBCuJa0EPkqP4wZLvr81+1uHDlCc=";
+        };
+      }
+      {
+        name = "powerlevel10k";
+        src = pkgs.fetchFromGitHub {
+          owner = "romkatv";
+          repo = "powerlevel10k";
+          rev = "v1.20.0";
+          sha256 = "sha256-ES5vJXHjAKw/VHjWs8Au/3R+/aotSbY7PWnWAMzCR8E=";
+        };
+      }
+      {
+        name = "zsh-nix-shell";
+        src = pkgs.fetchFromGitHub {
+          owner = "chisui";
+          repo = "zsh-nix-shell";
+          rev = "v0.8.0";
+          sha256 = "sha256-Z6EYQdasvpl1P78poj9efnnLj7QQg13Me8x1Ryyw+dM=";
+        };
+      }
+    ];
+  };
+}
home/default.nix
@@ -0,0 +1,54 @@
+{ desktop
+, hostname
+, lib
+, pkgs
+, outputs
+, stateVersion
+, username
+, inputs
+, ...
+}: {
+  imports = [
+    ./common/shell
+  ]
+  ++ lib.optional (builtins.isString desktop) ./common/desktop
+  ++ lib.optional
+    (builtins.pathExists (
+      ./. + "/common/users/${username}"
+    )) ./common/users/${username};
+
+  home = {
+    inherit username stateVersion;
+    homeDirectory = "/home/${username}";
+  };
+
+  nixpkgs = {
+    overlays = [
+
+      # FIXME remove those
+      # (import ./nix/overlays).tekton
+      (import ../nix/overlays/sbr.nix)
+      # Our own flake exports (from overlays and pkgs dir)
+      outputs.overlays.additions
+      outputs.overlays.modifications
+      outputs.overlays.unstable-packages
+
+      # And from other flakes
+      inputs.emacs-overlay.overlay
+      inputs.chapeau-rouge.overlays.openshift
+      inputs.chick-group.overlays.default
+      inputs.agenix.overlays.default
+
+      # Migrate to "modifications"
+      (_: prev: {
+        inherit (inputs.buildkit-tekton.packages.${prev.system}) tkn-local;
+        inherit (inputs.dagger.packages.${prev.system}) dagger;
+      })
+    ];
+    config = {
+      allowUnfree = true;
+      # Workaround for https://github.com/nix-community/home-manager/issues/2942
+      allowUnfreePredicate = _: true;
+    };
+  };
+}
nix/overlays/default.nix
@@ -12,7 +12,7 @@
   # When applied, the unstable nixpkgs set (declared in the flake inputs) will
   # be accessible through 'pkgs.unstable'
   unstable-packages = final: _prev: {
-    master = import inputs.master {
+    master = import inputs.nixpkgs-master {
       inherit (final) system;
       config.allowUnfree = true;
       overlays = [
@@ -23,7 +23,7 @@
         })
       ];
     };
-    unstable = import inputs.unstable {
+    unstable = import inputs.nixpkgs {
       inherit (final) system;
       config.allowUnfree = true;
       overlays = [
systems/common/users/vincent.nix
@@ -2,6 +2,10 @@
 , lib
 , config
 , desktop
+, hostname
+, outputs
+, stateVersion
+, inputs
 , ...
 }:
 let
@@ -62,7 +66,11 @@ in
   # '';
 
   # Do I user home-manager nixosModule *or* home-manager on its own
-  # home-manager.users.vincent = …
+  home-manager.users.vincent =
+    (import ../../../home/default.nix {
+      inherit pkgs lib hostname desktop outputs inputs stateVersion;
+      username = "vincent";
+    });
   # This is a workaround for not seemingly being able to set $EDITOR in home-manager
   environment.sessionVariables = {
     EDITOR = "emacs";
flake.nix
@@ -57,6 +57,7 @@
       ];
     in
     {
+      # Standalone home configurations
       homeConfigurations = {
         # headless machine
         "vincent@aion" = libx.mkHome {