diff --git a/flake.lock b/flake.lock index 7f3bf8d..d0ffe15 100644 --- a/flake.lock +++ b/flake.lock @@ -1,57 +1,46 @@ { "nodes": { - "flake-utils": { + "home-manager": { "inputs": { - "systems": "systems" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "lastModified": 1745071558, + "narHash": "sha256-bvcatss0xodcdxXm0LUSLPd2jjrhqO3yFSu3stOfQXg=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "9676e8a52a177d80c8a42f66566362a6d74ecf78", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "nix-community", + "repo": "home-manager", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1742707865, - "narHash": "sha256-RVQQZy38O3Zb8yoRJhuFgWo/iDIDj0hEdRTVfhOtzRk=", + "lastModified": 1744932701, + "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "dd613136ee91f67e5dba3f3f41ac99ae89c5406b", + "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", "type": "github" }, "original": { - "id": "nixpkgs", - "type": "indirect" + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" } }, "root": { "inputs": { - "flake-utils": "flake-utils", + "home-manager": "home-manager", "nixpkgs": "nixpkgs" } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 70db964..4897d20 100644 --- a/flake.nix +++ b/flake.nix @@ -2,10 +2,17 @@ description = "jiriks74's ZSH configuration"; inputs = { - flake-utils.url = "github:numtide/flake-utils"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + home-manager.url = "github:nix-community/home-manager"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = {nixpkgs, ...}: let + outputs = { + self, + nixpkgs, + ... + }: let # Supported systems for your flake packages, shell, etc. systems = [ "aarch64-linux" @@ -20,25 +27,10 @@ in { formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra); homeManagerModules = { - default = { - config, - lib, - pkgs, - ... - }: { - inport = ./zsh.nix; - }; - withPackages = { - config, - lib, - pkgs, - ... - }: { - imports = [ - ./zsh.nix - ./packages.nix - ]; + zsh = {...}: { + imports = [./modules]; }; + default = self.outputs.homeManagerModules.zsh; }; }; } diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..f606762 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,262 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.jiriks74.zsh; +in { + meta.maintainers = with lib.maintainers; [jiriks74]; + + imports = [ + ./gitTools.nix + ./netTools.nix + ./kubernetes.nix + ./qolPackages.nix + ]; + + options.jirks74.zsh.enable = lib.mkEnableOption "Enable jiriks74's zsh config"; + + config = lib.mkIf cfg.enable { + programs = { + # thefuck = { + # enable = true; + # enableZshIntegration = true; + # }; + direnv = { + enable = true; + enableZshIntegration = true; + nix-direnv.enable = true; + }; + + zsh = { + enable = true; + enableVteIntegration = true; + + enableCompletion = true; + completionInit = '' + ''; + + autosuggestion = { + enable = true; + strategy = [ + "match_prev_cmd" + "completion" + "history" + ]; + }; + + autocd = true; # I'll try this out, may be removed later + + antidote = { + enable = true; + plugins = [ + "getantidote/use-omz" # Handle OMZ dependencies + # Load lib only if things break + # "ohmyzsh/ohmyzsh path:lib" # Load OMZ's library + "ohmyzsh/ohmyzsh path:plugins/colored-man-pages" # Load OMZ plugins + # "ohmyzsh/ohmyzsh path:plugins/magic-enter" + "ohmyzsh/ohmyzsh path:plugins/command-not-found" # Provide suggested packages to be installed if a command cannot be found + "ohmyzsh/ohmyzsh path:plugins/dirhistory kind:defer" # shortcuts for navigating directory history and hierarchy + + "romkatv/powerlevel10k kind:fpath" # A Zsh theme + + "z-shell/F-Sy-H kind:defer" # Feature-rich Syntax Highlighting for Zsh + "zsh-users/zsh-autosuggestions kind:defer" # Simple plugin installation + # { name = "zsh-users/zsh-syntax-highlighting"; } + "zsh-users/zsh-completions kind:fpath path:src" # Adds some missing completions to zsh + "zsh-users/zsh-history-substring-search kind:defer" # ZSH port of Fish history search (up arrow) + + "jiriks74/git-aliases kind:defer" # Aliases for git + "MichaelAquilina/zsh-you-should-use" # Did you forget to use an alias? + + # "babarot/enhancd" # Includes simmilar functionality to zsh-z + "agkozak/zsh-z" # Jump arount your filesystem with ease + "supercrabtree/k" # Directory listings for Zsh with git features. + + "belak/zsh-utils path:completion" # Load and initialize the built-in zsh completion system + "belak/zsh-utils path:editor" # Override and fill in the gaps of the default keybinds + "belak/zsh-utils path:utility kind:defer" # Common shell utilities + + "gko/ssh-connect" # List of most used ssh connections + "sineto/web-search kind:defer" # zsh plugin for web searching + ]; + }; + + initExtraFirst = '' + # Basic auto/tab complete: + autoload -U compinit + zstyle ':completion:*' menu select + zmodload zsh/complist + _comp_options+=(globdots) # Include hidden files. + + if [[ "''${ZSH_PROFILE}" -eq 1 ]]; then + zmodload zsh/zprof # Profiling. Enable `zprof` at the end of initExtra too. + fi + ''; + + initExtra = '' + # From antidote (for p10k): + # prompts: + # with prompt plugins, remember to add this to your .zshrc: + # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. + [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh + autoload -Uz promptinit && promptinit && prompt powerlevel10k + + # Remove nix from path if we are in a container (distrobox) + if [ -v DISTROBOX_ENTER_PATH ]; then + export PATH=$(echo $PATH | tr ':' '\n' | grep -vE '/nix/|/run/wrappers|\.nix-profile|/etc/profiles/per-user/jirka/bin|/run/current-system/sw/bin' | tr '\n' ':') + export PATH=$(echo $PATH | sed 's/:$//') + fi + + if [ -v ASCIINEMA_REC ]; then + _zsh_autosuggest_disable + fi + + bindkey '^ ' autosuggest-accept # Bind CTRL + Space + bindkey '^Y' autosuggest-accept # Bind CTRL + Y + + bindkey "$terminfo[kcuu1]" history-substring-search-up + bindkey "$terminfo[kcud1]" history-substring-search-down + bindkey -M vicmd 'k' history-substring-search-up + bindkey -M vicmd 'j' history-substring-search-down + + # Extracting + ex () + { + if [ -f $1 ] ; then + case $1 in + *.tar.bz2) tar xjf $1 ;; + *.tar.gz) tar xzf $1 ;; + *.tar.xz) tar xJf $1 ;; + *.bz2) bunzip3 $1 ;; + *.rar) unrar x $1 ;; + *.gz) gunzip $1 ;; + *.tar) tar xf $1 ;; + *.tbz2) tar xjf $1 ;; + *.tgz) tar xzf $1 ;; + *.zip) unzip $1 ;; + *.Z) uncompress $1;; + *.7z) 7z x $1 ;; + *) echo "'$1' cannot be extracted via ex()" ;; + esac + else + echo "'$1' is not a valid file" + fi + } + + # Kitty binds + if [ "$TERM" = "xterm-kitty" ]; then + alias kssh="kitty +kitten ssh" + alias icat="kitty +kitten icat" + alias d="kitty +kitten diff" + alias get="kitty +kitten transfer" + alias put="kitty +kitten transfer --direction=upload" + alias kclip="kitty +kitten clipboard" + fi + + if [[ "''${ZSH_PROFILE}" -eq 1 ]]; then + zprof + fi + ''; + + localVariables = { + YSU_MESSAGE_POSITION = "after"; + # ASCIINEMA_API_URL = "https://asciinema.stefka.eu"; + }; + + shellAliases = { + # update = "sudo nixos-rebuild switch"; + + ls = "lsd"; + # ls, the common ones I use a lot shortened for rapid fire usage + l = "ls -lFh"; #size,show type,human readable + la = "ls -lAFh"; #long list,show almost all,show type,human readable + lr = "ls -tRFh"; #sorted by date,recursive,show type,human readable + lt = "ls -ltFh"; #long list,sorted by date,show type,human readable + ll = "ls -l"; #long list + ldot = "ls -ld .*"; + lS = "ls -1FSsh"; + lart = "ls -1Fcart"; + lrt = "ls -1Fcrt"; + + grep = "grep --color"; + sgrep = "grep -R -n -H -C 5 --exclude-dir={.git,.svn,CVS} "; + + t = "tail -f"; + + dud = "du -d 1 -h"; + duf = "du -sh *"; + # fd="find . -type d -name"; + ff = "find . -type f -name"; + + h = "history"; + hgrep = "fc -El 0 | grep"; + help = "man"; + p = "ps -f"; + sortnr = "sort -n -r"; + unexport = "unset"; + + # Use trash instead of rm if available + rm = "trash"; + cp = "cp -i"; + mv = "mv -i"; + + cls = "clear"; + + sshc = "ssh-connect"; + }; + + shellGlobalAliases = { + H = "| head"; + T = "| tail"; + G = "| grep"; + L = "| less"; + M = "| most"; + LL = "2>&1 | less"; + CA = "2>&1 | cat -A"; + NE = "2> /dev/null"; + NUL = "> /dev/null 2>&1"; + P = "2>&1| pygmentize -l pytb"; + }; + + history = { + # ignoreAllDups = true; + path = "${config.xdg.cacheHome}/zhistory"; + save = 10000; + size = 10000; + share = false; + }; + }; + }; + + home.packages = with pkgs; [ + nix-zsh-completions + + python3Packages.pygments # For antidote + + # tools for aliases, etc. + lsd + bat + eza + trash-cli + # ^ tools for aliases, etc. + + # packages for enhancd + fzf # enhancd + fd # enhancd + # ^ packages for enhancd + + # rofi # for fd + + # packags for ex + gnutar + bzip3 + unzip + p7zip + unrar + gzip + # ^ packages for ex + ]; + }; +} diff --git a/modules/gitTools.nix b/modules/gitTools.nix new file mode 100644 index 0000000..e83af85 --- /dev/null +++ b/modules/gitTools.nix @@ -0,0 +1,29 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.jiriks74.zsh; +in { + meta.maintainers = with lib.maintainers; [jiriks74]; + + options.jirks74.zsh.gitTools = lib.mkEnableOption "Install usefull git tools"; + + config = lib.mkIf cfg.gitTools { + # assertions = [ + # { + # # Condition that must be true + # assertion = cfg.enable; + # # Error message if the assertion fails + # message = '' + # Home-Manager module jiriks74.zsh.gitTools is enabled but jiriks74.zsh is not! + # ''; + # } + # ]; + home.packages = with pkgs; [ + gh + tea + ]; + }; +} diff --git a/modules/kubernetes.nix b/modules/kubernetes.nix new file mode 100644 index 0000000..67685ba --- /dev/null +++ b/modules/kubernetes.nix @@ -0,0 +1,35 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.jiriks74.zsh; +in { + meta.maintainers = with lib.maintainers; [jiriks74]; + + options.jirks74.zsh.kubernetes = lib.mkEnableOption "Install Kubernetes packages including those for local development"; + + config = lib.mkIf cfg.kubernetes { + services.podman.enable = true; + + home.file.minikube = { + enable = true; + target = ".minikube/config/config.json"; + text = '' + { + "container-runtime": "containerd", + "driver": "podman", + "rootless": true + } + ''; + }; + + home.packages = with pkgs; [ + minikube + kubectl + kubectx + k9s + ]; + }; +} diff --git a/modules/netTools.nix b/modules/netTools.nix new file mode 100644 index 0000000..ee6187e --- /dev/null +++ b/modules/netTools.nix @@ -0,0 +1,22 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.jiriks74.zsh; +in { + meta.maintainers = with lib.maintainers; [jiriks74]; + + options.jirks74.zsh.netTools = lib.mkEnableOption "Install usefull network tools"; + + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + dig + inetutils + iputils + lsof + nmap + ]; + }; +} diff --git a/modules/qolPackages.nix b/modules/qolPackages.nix new file mode 100644 index 0000000..2761c0e --- /dev/null +++ b/modules/qolPackages.nix @@ -0,0 +1,41 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.jiriks74.zsh; +in { + meta.maintainers = with lib.maintainers; [jiriks74]; + + options.jirks74.zsh.qolPackages = lib.mkEnableOption "Install QualityOfLife packages"; + + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + # asciinema + asciinema_3 # Terminal recording + asciinema-agg # Convert asciinema recordings + libnotify # Notifications + # ^ asciinema + + curl + + # parsing + gawk + jq + yq + # ^ parsing + + python3 + + # useful dev/everyday tools + encfs + file + htop-vim + tldr + tmux + tree + # ^ useful dev/everyday tools + ]; + }; +} diff --git a/packages.nix b/packages.nix deleted file mode 100644 index 7c0b3a4..0000000 --- a/packages.nix +++ /dev/null @@ -1,19 +0,0 @@ -{pkgs, ...}: { - home.packages = with pkgs; [ - # asciinema - asciinema # Terminal recording - asciinema-agg # Convert asciinema recordings - libnotify # Notifications - websocat # For asciinema v2 streams - # ^ asciinema - - # useful dev/everyday tools - encfs - file - htop-vim - tldr - tmux - tree - # ^ useful dev/everyday tools - ]; -} diff --git a/zsh.nix b/zsh.nix deleted file mode 100644 index 05ee619..0000000 --- a/zsh.nix +++ /dev/null @@ -1,246 +0,0 @@ -{ - config, - pkgs, - ... -}: { - programs = { - # thefuck = { - # enable = true; - # enableZshIntegration = true; - # }; - direnv = { - enable = true; - enableZshIntegration = true; - nix-direnv.enable = true; - }; - - zsh = { - enable = true; - enableVteIntegration = true; - - enableCompletion = true; - completionInit = '' - ''; - - autosuggestion = { - enable = true; - strategy = [ - "match_prev_cmd" - "completion" - "history" - ]; - }; - - autocd = true; # I'll try this out, may be removed later - - antidote = { - enable = true; - plugins = [ - "getantidote/use-omz" # Handle OMZ dependencies - # Load lib only if things break - # "ohmyzsh/ohmyzsh path:lib" # Load OMZ's library - "ohmyzsh/ohmyzsh path:plugins/colored-man-pages" # Load OMZ plugins - # "ohmyzsh/ohmyzsh path:plugins/magic-enter" - "ohmyzsh/ohmyzsh path:plugins/command-not-found" # Provide suggested packages to be installed if a command cannot be found - "ohmyzsh/ohmyzsh path:plugins/dirhistory kind:defer" # shortcuts for navigating directory history and hierarchy - - "romkatv/powerlevel10k kind:fpath" # A Zsh theme - - "z-shell/F-Sy-H kind:defer" # Feature-rich Syntax Highlighting for Zsh - "zsh-users/zsh-autosuggestions kind:defer" # Simple plugin installation - # { name = "zsh-users/zsh-syntax-highlighting"; } - "zsh-users/zsh-completions kind:fpath path:src" # Adds some missing completions to zsh - "zsh-users/zsh-history-substring-search kind:defer" # ZSH port of Fish history search (up arrow) - - "jiriks74/git-aliases kind:defer" # Aliases for git - "MichaelAquilina/zsh-you-should-use" # Did you forget to use an alias? - - # "babarot/enhancd" # Includes simmilar functionality to zsh-z - "agkozak/zsh-z" # Jump arount your filesystem with ease - "supercrabtree/k" # Directory listings for Zsh with git features. - - "belak/zsh-utils path:completion" # Load and initialize the built-in zsh completion system - "belak/zsh-utils path:editor" # Override and fill in the gaps of the default keybinds - "belak/zsh-utils path:utility kind:defer" # Common shell utilities - - "gko/ssh-connect" # List of most used ssh connections - "sineto/web-search kind:defer" # zsh plugin for web searching - ]; - }; - - initExtraFirst = '' - # Basic auto/tab complete: - autoload -U compinit - zstyle ':completion:*' menu select - zmodload zsh/complist - _comp_options+=(globdots) # Include hidden files. - - if [[ "''${ZSH_PROFILE}" -eq 1 ]]; then - zmodload zsh/zprof # Profiling. Enable `zprof` at the end of initExtra too. - fi - ''; - - initExtra = '' - # From antidote (for p10k): - # prompts: - # with prompt plugins, remember to add this to your .zshrc: - # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. - [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh - autoload -Uz promptinit && promptinit && prompt powerlevel10k - - # Remove nix from path if we are in a container (distrobox) - if [ -v DISTROBOX_ENTER_PATH ]; then - export PATH=$(echo $PATH | tr ':' '\n' | grep -vE '/nix/|/run/wrappers|\.nix-profile|/etc/profiles/per-user/jirka/bin|/run/current-system/sw/bin' | tr '\n' ':') - export PATH=$(echo $PATH | sed 's/:$//') - fi - - if [ -v ASCIINEMA_REC ]; then - _zsh_autosuggest_disable - fi - - bindkey '^ ' autosuggest-accept # Bind CTRL + Space - bindkey '^Y' autosuggest-accept # Bind CTRL + Y - - bindkey "$terminfo[kcuu1]" history-substring-search-up - bindkey "$terminfo[kcud1]" history-substring-search-down - bindkey -M vicmd 'k' history-substring-search-up - bindkey -M vicmd 'j' history-substring-search-down - - # Extracting - ex () - { - if [ -f $1 ] ; then - case $1 in - *.tar.bz2) tar xjf $1 ;; - *.tar.gz) tar xzf $1 ;; - *.tar.xz) tar xJf $1 ;; - *.bz2) bunzip3 $1 ;; - *.rar) unrar x $1 ;; - *.gz) gunzip $1 ;; - *.tar) tar xf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1;; - *.7z) 7z x $1 ;; - *) echo "'$1' cannot be extracted via ex()" ;; - esac - else - echo "'$1' is not a valid file" - fi - } - - # Kitty binds - if [ "$TERM" = "xterm-kitty" ]; then - alias kssh="kitty +kitten ssh" - alias icat="kitty +kitten icat" - alias d="kitty +kitten diff" - alias get="kitty +kitten transfer" - alias put="kitty +kitten transfer --direction=upload" - alias kclip="kitty +kitten clipboard" - fi - - if [[ "''${ZSH_PROFILE}" -eq 1 ]]; then - zprof - fi - ''; - - localVariables = { - YSU_MESSAGE_POSITION = "after"; - ASCIINEMA_API_URL = "https://asciinema.stefka.eu"; - }; - - shellAliases = { - # update = "sudo nixos-rebuild switch"; - - ls = "lsd"; - # ls, the common ones I use a lot shortened for rapid fire usage - l = "ls -lFh"; #size,show type,human readable - la = "ls -lAFh"; #long list,show almost all,show type,human readable - lr = "ls -tRFh"; #sorted by date,recursive,show type,human readable - lt = "ls -ltFh"; #long list,sorted by date,show type,human readable - ll = "ls -l"; #long list - ldot = "ls -ld .*"; - lS = "ls -1FSsh"; - lart = "ls -1Fcart"; - lrt = "ls -1Fcrt"; - - grep = "grep --color"; - sgrep = "grep -R -n -H -C 5 --exclude-dir={.git,.svn,CVS} "; - - t = "tail -f"; - - dud = "du -d 1 -h"; - duf = "du -sh *"; - # fd="find . -type d -name"; - ff = "find . -type f -name"; - - h = "history"; - hgrep = "fc -El 0 | grep"; - help = "man"; - p = "ps -f"; - sortnr = "sort -n -r"; - unexport = "unset"; - - # Use trash instead of rm if available - rm = "trash"; - cp = "cp -i"; - mv = "mv -i"; - - cls = "clear"; - - sshc = "ssh-connect"; - }; - - shellGlobalAliases = { - H = "| head"; - T = "| tail"; - G = "| grep"; - L = "| less"; - M = "| most"; - LL = "2>&1 | less"; - CA = "2>&1 | cat -A"; - NE = "2> /dev/null"; - NUL = "> /dev/null 2>&1"; - P = "2>&1| pygmentize -l pytb"; - }; - - history = { - # ignoreAllDups = true; - path = "${config.xdg.cacheHome}/zhistory"; - save = 10000; - size = 10000; - share = false; - }; - }; - }; - - home.packages = with pkgs; [ - nix-zsh-completions - - python312Packages.pygments # For antidote - - # tools for aliases, etc. - lsd - bat - eza - trash-cli - # ^ tools for aliases, etc. - - # packages for enhancd - fzf # enhancd - fd # enhancd - # ^ packages for enhancd - - # rofi # for fd - - # packags for ex - gnutar - bzip3 - unzip - p7zip - unrar - gzip - # ^ packages for ex - ]; -}