diff --git a/modules/default.nix b/modules/default.nix index 4206fa938..aae9b2d50 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -24,6 +24,7 @@ let ./programs/htop.nix ./programs/info.nix ./programs/lesspipe.nix + ./programs/oh-my-zsh.nix ./programs/ssh.nix ./programs/texlive.nix ./programs/zsh.nix diff --git a/modules/programs/oh-my-zsh.nix b/modules/programs/oh-my-zsh.nix new file mode 100644 index 000000000..654c68e1b --- /dev/null +++ b/modules/programs/oh-my-zsh.nix @@ -0,0 +1,63 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.zsh.oh-my-zsh; + +in + +{ + options = { + programs.zsh.oh-my-zsh = { + enable = mkEnableOption "oh-my-zsh"; + + plugins = mkOption { + default = []; + example = [ "git" "sudo" ]; + type = types.listOf types.str; + description = '' + List of oh-my-zsh plugins + ''; + }; + + custom = mkOption { + default = ""; + type = types.str; + example = "$HOME/my_customizations"; + description = '' + Path to a custom oh-my-zsh package to override config of oh-my-zsh. + See: https://github.com/robbyrussell/oh-my-zsh/wiki/Customization + ''; + }; + + theme = mkOption { + default = ""; + example = "robbyrussell"; + type = types.str; + description = '' + Name of the theme to be used by oh-my-zsh. + ''; + }; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ pkgs.oh-my-zsh ]; + programs.zsh.initExtra = with pkgs; '' + # oh-my-zsh configuration generated by NixOS + export ZSH=${oh-my-zsh}/share/oh-my-zsh + ${optionalString (cfg.plugins != []) + "plugins=(${concatStringsSep " " cfg.plugins})" + } + ${optionalString (cfg.custom != "") + "ZSH_CUSTOM=\"${cfg.custom}\"" + } + ${optionalString (cfg.theme != "") + "ZSH_THEME=\"${cfg.theme}\"" + } + source $ZSH/oh-my-zsh.sh + ''; + }; +}