diff --git a/config/home-manager.nix b/config/home-manager.nix index f545ddc..9dd8fd4 100644 --- a/config/home-manager.nix +++ b/config/home-manager.nix @@ -2,14 +2,46 @@ inputs, config, pkgs, + lib, + osConfig, ... }: +let + inherit (pkgs) fd fzf; + inherit (inputs.jawz-scripts.packages.x86_64-linux) pokemon-colorscripts; + shellType = osConfig.my.shell.type; + commonInit = '' + ${pokemon-colorscripts}/bin/pokemon-colorscripts -r --no-title + export command_timeout=60 + ''; + commonAliases = { + cp = "cp -i"; + mv = "mv -i"; + mkdir = "mkdir -p"; + mkcd = "(){ mkdir -p \"$1\" && cd \"$1\" }"; + copy = "xclip -selection clipboard"; + cdp = "pwd | copy"; + cfp = "(){ readlink -f \"$1\" | copy }"; + ".." = "cd .."; + "..." = "cd ../.."; + ".3" = "cd ../../.."; + ".4" = "cd ../../../.."; + ".5" = "cd ../../../../.."; + c = "cat"; + sc = "systemctl --user"; + jc = "journalctl --user -xefu"; + open-gallery = '' + cd /srv/pool/scrapping/JawZ/gallery-dl && + xdg-open "$(${fd}/bin/fd . ./ Husbands wikifeet -tdirectory -d 1 | ${fzf}/bin/fzf -i)"''; + }; +in { home.stateVersion = "23.05"; programs = { direnv = { enable = true; - enableBashIntegration = true; + enableBashIntegration = shellType == "bash"; + enableZshIntegration = shellType == "zsh"; nix-direnv.enable = true; }; git = { @@ -17,45 +49,30 @@ userName = "Danilo Reyes"; userEmail = "CaptainJawZ@protonmail.com"; }; - bash = - let - inherit (pkgs) fd fzf; - inherit (inputs.jawz-scripts.packages.x86_64-linux) pokemon-colorscripts; - in - { - enable = true; - historyFile = "\${XDG_STATE_HOME}/bash/history"; - historyControl = [ - "erasedups" - "ignorespace" - "ignoredups" - ]; - shellAliases = { - cp = "cp -i"; - mv = "mv -i"; - mkdir = "mkdir -p"; - mkcd = "(){ mkdir -p \"$1\" && cd \"$1\" }"; - copy = "xclip -selection clipboard"; - cdp = "pwd | copy"; - cfp = "(){ readlink -f \"$1\" | copy }"; - ".." = "cd .."; - "..." = "cd ../.."; - ".3" = "cd ../../.."; - ".4" = "cd ../../../.."; - ".5" = "cd ../../../../.."; - c = "cat"; - sc = "systemctl --user"; - jc = "journalctl --user -xefu"; - open-gallery = '' - cd /srv/pool/scrapping/JawZ/gallery-dl && - xdg-open "$(${fd}/bin/fd . ./ Husbands wikifeet -tdirectory -d 1 | ${fzf}/bin/fzf -i)"''; - }; - enableVteIntegration = true; - initExtra = '' - ${pokemon-colorscripts}/bin/pokemon-colorscripts -r --no-title - export command_timeout=60 - ''; + bash = lib.mkIf (shellType == "bash") { + enable = true; + historyFile = "\${XDG_STATE_HOME}/bash/history"; + shellAliases = commonAliases; + enableVteIntegration = true; + initExtra = commonInit; + historyControl = [ + "erasedups" + "ignorespace" + "ignoredups" + ]; + }; + zsh = lib.mkIf (shellType == "zsh") { + enable = true; + dotDir = ".config/zsh"; + shellAliases = commonAliases; + initContent = commonInit; + history = { + path = "\${XDG_STATE_HOME}/zsh/history"; + expireDuplicatesFirst = true; + ignoreSpace = true; + ignoreAllDups = true; }; + }; }; xdg = { enable = true; diff --git a/hosts/workstation/configuration.nix b/hosts/workstation/configuration.nix index e1cbb4f..f6732f1 100644 --- a/hosts/workstation/configuration.nix +++ b/hosts/workstation/configuration.nix @@ -1,8 +1,10 @@ { pkgs, + config, ... }: let + shellType = config.my.shell.type; krita-thumbnailer = pkgs.writeTextFile { name = "krita-thumbnailer"; destination = "/share/thumbnailers/kra.thumbnailer"; @@ -38,7 +40,8 @@ in ghostty = { enable = true; package = pkgs.ghostty; - enableBashIntegration = true; + enableBashIntegration = shellType == "bash"; + enableZshIntegration = shellType == "zsh"; installBatSyntax = true; installVimSyntax = true; }; diff --git a/modules/dev/emacs.nix b/modules/dev/emacs.nix index b91a1f5..e0c17a6 100644 --- a/modules/dev/emacs.nix +++ b/modules/dev/emacs.nix @@ -14,7 +14,7 @@ "doom/templates/programming.org".source = ../../dotfiles/doom/templates/programming.org; }; services.lorri.enable = true; - programs.bash.shellAliases = { + programs.${config.my.shell.type}.shellAliases = { edit = "emacsclient -t"; e = "edit"; }; diff --git a/modules/dev/nix.nix b/modules/dev/nix.nix index b3a127c..a0365bf 100644 --- a/modules/dev/nix.nix +++ b/modules/dev/nix.nix @@ -5,6 +5,7 @@ ... }: let + shellType = config.my.shell.type; packages = builtins.attrValues { inherit (pkgs) nixfmt-rfc-style # formatting @@ -31,7 +32,7 @@ in }; config = lib.mkIf config.my.dev.nix.enable { users.users.jawz = { inherit packages; }; - home-manager.users.jawz.programs.bash.shellAliases = { + home-manager.users.jawz.programs.${shellType}.shellAliases = { nixformat = '' nix run unstable#deadnix -- -e && \ nix run unstable#nixfmt-tree && \ diff --git a/modules/scripts/download.nix b/modules/scripts/download.nix index 62f79ac..506fef9 100644 --- a/modules/scripts/download.nix +++ b/modules/scripts/download.nix @@ -16,21 +16,33 @@ inherit (inputs.jawz-scripts.packages.x86_64-linux) download; in { - home-manager.users.jawz = { - programs.bash = { - shellAliases = { - dl = "${download}/bin/download -u jawz -i"; - comic = ''dl "$(cat "$LC" | fzf --multi --exact -i)"''; - gallery = ''dl "$(cat "$LW" | fzf --multi --exact -i)"''; - }; - initExtra = '' - list_root=$XDG_CONFIG_HOME/jawz/lists/jawz - export LW=$list_root/watch.txt - export LI=$list_root/instant.txt - export LC=$list_root/comic.txt - ''; + home-manager.users.jawz.programs.${config.my.shell.type} = { + shellAliases = { + dl = "${download}/bin/download -u jawz -i"; + comic = ''dl "$(cat "$LC" | fzf --multi --exact -i)"''; + gallery = ''dl "$(cat "$LW" | fzf --multi --exact -i)"''; }; - }; + } + // ( + if config.my.shell.type == "bash" then + { + initExtra = '' + list_root=$XDG_CONFIG_HOME/jawz/lists/jawz + export LW=$list_root/watch.txt + export LI=$list_root/instant.txt + export LC=$list_root/comic.txt + ''; + } + else + { + initContent = '' + list_root=$XDG_CONFIG_HOME/jawz/lists/jawz + export LW=$list_root/watch.txt + export LI=$list_root/instant.txt + export LC=$list_root/comic.txt + ''; + } + ); systemd.user = { services = let diff --git a/modules/shell/config.nix b/modules/shell/config.nix new file mode 100644 index 0000000..0535cb8 --- /dev/null +++ b/modules/shell/config.nix @@ -0,0 +1,20 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + options.my.shell.type = lib.mkOption { + type = lib.types.enum [ + "bash" + "zsh" + ]; + default = "bash"; + description = "The shell to use system-wide (bash or zsh)"; + }; + config = { + users.users.jawz.shell = pkgs.${config.my.shell.type}; + programs.zsh.enable = config.my.shell.type == "zsh"; + }; +} diff --git a/modules/shell/tools.nix b/modules/shell/tools.nix index f0bf982..0730553 100644 --- a/modules/shell/tools.nix +++ b/modules/shell/tools.nix @@ -5,6 +5,9 @@ inputs, ... }: +let + shellType = config.my.shell.type; +in { options.my.shell.tools.enable = lib.mkEnableOption "shell tools and utilities"; config = lib.mkIf config.my.shell.tools.enable { @@ -16,15 +19,10 @@ }; zoxide = { enable = true; - enableBashIntegration = true; + enableBashIntegration = shellType == "bash"; + enableZshIntegration = shellType == "zsh"; }; - bash = { - initExtra = '' - if command -v fzf-share >/dev/null; then - source "$(fzf-share)/key-bindings.bash" - source "$(fzf-share)/completion.bash" - fi - ''; + ${shellType} = { shellAliases = { cd = "z"; hh = "hstr"; @@ -37,7 +35,27 @@ tr '[:upper:]' '[:lower:]' | sort | uniq --count | sort -rn''; }; - }; + } + // ( + if shellType == "bash" then + { + initExtra = '' + if command -v fzf-share >/dev/null; then + source "$(fzf-share)/key-bindings.bash" + source "$(fzf-share)/completion.bash" + fi + ''; + } + else + { + initContent = '' + if command -v fzf-share >/dev/null; then + source "$(fzf-share)/key-bindings.bash" + source "$(fzf-share)/completion.bash" + fi + ''; + } + ); bat = { enable = true; config.pager = "less -FR";