(require 'package)
(package-initialize)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
(unless (package-installed-p 'use-package)
  (package-install 'use-package))
(require 'use-package)

(use-package rainbow-mode :ensure t)
(use-package treemacs
  :ensure t
  :config
  (treemacs-follow-mode t)            ;; Enable follow mode
  (setq treemacs-show-hidden-files t) ;; Show hidden files (optional)
  (treemacs-fringe-indicator-mode t)  ;; Show fringe indicators
  (treemacs-git-mode 'deferred)       ;; Enable Git integration
  (global-set-key (kbd "C-\\") 'treemacs-select-window)
  (global-set-key (kbd "M-`") 'treemacs-edit-workspaces)
  (global-set-key (kbd "M-0") 'treemacs-switch-workspace)
  )  ;; Keybinding to open Treemacs

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 ;; '(custom-enabled-themes '(tango-dark)) ;; Use a themes that available by emacs
 '(package-selected-packages nil) )
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

; Custom themes that I download from internet
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/")
(load-theme 'dracula t)
(add-to-list 'default-frame-alist '(background-color . "unspecified-bg"))

; make backup to a designated dir, mirroring the full path
(defun xah-backup-nested-dir-file-path (Fpath)
  "Return a new file path and create dirs.
If the new path's directories does not exist, create them.
version 2022-06-09"
  (let* ($backupRoot $backupFilePath)
    (setq $backupRoot "~/.emacs.d/backup/")
    ;; remove Windows driver letter in path, e.g. C:
    (setq $backupFilePath
          (format "%s%s~" $backupRoot (replace-regexp-in-string "^[A-Za-z]:/" "" Fpath)))
    (make-directory
     (file-name-directory $backupFilePath)
     (file-name-directory $backupFilePath))
    $backupFilePath
    ))
(setq make-backup-file-name-function 'xah-backup-nested-dir-file-path)

; disable backup
; (setq backup-inhibited t)

; disable auto save
(setq auto-save-default nil)

;; For example, set the default tab width to 4 spaces
(setq-default tab-width 4)
;; For Python mode, set the indentation style
(add-hook 'python-mode-hook
          (lambda ()
            (setq indent-tabs-mode nil) ; Use spaces instead of tabs
            (setq python-indent-offset 4) )) ; Set the indentation offset
;; For JavaScript mode, set the indentation style
(add-hook 'js-mode-hook
          (lambda ()
            (setq indent-tabs-mode nil) ; Use spaces instead of tabs
            (setq js-indent-level 4))) ; Set the indentation offset