;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; various workspaces used day to day

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; load most recent auto save
(defun kmn/workspace-load-auto ()
  (interactive)
  (persp-load-state-from-file "persp-auto-save")
  (persistent-scratch-restore)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; save the current workspace to `latest` filename
(defun kmn/workspace-save-latest ()
  (interactive)
  (persp-save-state-to-file "latest")
  (persistent-scratch-save-to-file
    (expand-file-name ".persistent-scratch-latest" user-emacs-directory))
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; load `latest` file name to current workspace
(defun kmn/workspace-load-latest ()
  (interactive)
  (persp-load-state-from-file  "latest")
  (persistent-scratch-restore-from-file 
    (expand-file-name ".persistent-scratch-latest" user-emacs-directory))
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Reusable hugo dev workspace
(defun kmn/workspace-hugo-generic (src-sub-dir)
  (delete-other-windows)
  (centaur-tabs-mode t)
  (setq src-sub-dir (concat "~/src/" src-sub-dir))
  (interactive)
  (kmn/dired-directory-on-left src-sub-dir nil nil -1)
  (kmn/eshell-on-left src-sub-dir nil nil 0)
  (kmn/eww-on-right "http://localhost:1313")
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Hugo blog workspace
(defun kmn/workspace-hugo-blog ()
  (interactive)
  (kmn/workspace-hugo-generic "blog.kemonine.info")
  (find-file "~/org/blog/_blog.org")
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Hugo accessible.tips workspace
(defun kmn/workspace-hugo-accessible-tips ()
  (interactive)
  (kmn/workspace-hugo-generic "accessible.tips")
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Hugo culinary.kemonine.info workspace
(defun kmn/workspace-hugo-culinary ()
  (interactive)
  (kmn/workspace-hugo-generic "culinary")
  (find-file "~/org/culinary/_culinary.org")
  (find-file "~/org/culinary/_recipes.org")
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; org-mode workspace
(when (not kmn/is-dayjob)
(defun kmn/workspace-org ()
  (interactive)
  ; start with fresh frame
  (delete-other-windows)
  (kmn/kill-other-buffers)
  (ignore-errors (kill-buffer "*scratch*"))
  ; top window for habits/scheduled
  (org-agenda nil "h")
  (goto-char 0)
  ; main todo/slipbox
  (split-window-below)
  (next-multiframe-window)
  (org-agenda nil "t")
  (goto-char 0)
  ; show kmn health notes/data tracker
  ;(split-window-below)
  ;(next-multiframe-window)
  ;(find-file "~/org/health/health_mike.org")
  ;(goto-char 0)
  ; focus top most frame
  (next-multiframe-window)
)
)

(when kmn/is-dayjob
(defun kmn/workspace-org ()
  (interactive)
  ; start with fresh frame
  (delete-other-windows)
  (kmn/kill-other-buffers)
  (ignore-errors (kill-buffer "*scratch*"))
  ; show varied org files so their buffers exist prior to jumping in from org-agenda
  (find-file "~/org/_habits.org")
  (find-file "~/org/_index.org")
  (find-file "~/org/_todo.org")
  (find-file "~/org/_slipbox.org")
  ; front load org-agenda so it doesnt reshuffle the frame layout on us
  (org-agenda nil "r")
  ; show scratch on right
  (kmn/scratch-text-on-right)
  ; delete the current window (agenda triggers a vertical split on my computer, this undoes that non desired outcome)
  (delete-window)
  ; switch to top of agenda window where i prefer to start my reading
  (goto-char 0)
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; org-mode workspace for termux devices (mobile / android)
(when (not kmn/is-dayjob)
(defun kmn/workspace-org-single-window ()
  (interactive)
  ; start with fresh frame
  (delete-other-windows)
  (kmn/kill-other-buffers)
  (ignore-errors (kill-buffer "*scratch*"))
  ; Open main files used as 'gateway' to everything else
  (find-file "~/org/health/health_houdini.org")
  (find-file "~/org/health/health_mike.org")
  (find-file "~/org/orgzly/_habits.org")
  (find-file "~/org/orgzly/_todo.org")
  (find-file "~/org/orgzly/_slipbox.org")
  (find-file "~/org/_index.org")
  ; Personal startup screen - orgmode agenda with all TODO
  (org-agenda nil "r")
  ; start at the top of the agenda
  (goto-char 0)
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; empty code workspace
(defun kmn/workspace-code-empty (&optional dir_path)
  (interactive)
  (delete-other-windows)
  (kmn/kill-other-buffers)
  (ignore-errors (kill-buffer "*scratch*"))
  (scratch 'text-mode)
  ; show dired at `~` in left side window
  (kmn/dired-directory-on-left dir_path)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; emacs config development
(defun kmn/workspace-code-emacs-config()
  (interactive)
  (kmn/workspace-code-empty "~/.emacs.d.profiles")
  (find-file "~/.emacs.d.profiles/org/init.el")
  (find-file "~/.emacs.d.profiles/code/init.el")
  (find-file "~/.emacs.d.profiles/common/_global.el")
  (find-file "~/.emacs.d.profiles/common/generic_functions.el")
  (find-file "~/.emacs.d.profiles/common/workspaces.el")
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; hugo development
(defun kmn/workspace-code-generic()
  (interactive)
  (kmn/workspace-code-empty "~/src")
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; scratch buffers frame - use 'scratch and prompts to manage as needed
(defun kmn/workspace-frame-scratch()
  (interactive)
  (let ((frame (make-frame)))
    (select-frame-set-input-focus frame)
    (delete-other-windows)
    (scratch 'text-mode)
  )
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; scratch buffers frame, prompt for initial mode - use 'scratch and prompts to manage as needed
(defun kmn/workspace-frame-scratch-prompt()
  (interactive)
  (let ((frame (make-frame)))
    (select-frame-set-input-focus frame)
    (delete-other-windows)
    (scratch (let ((current-prefix-arg t)) (scratch--buffer-querymode)))
  )
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; warframe game workspace
(defun kmn/workspace-game-warframe ()
  (interactive)
    (let ((frame (make-frame)))
    (select-frame-set-input-focus frame)
    (delete-other-windows)
    (find-file "~/org/games/_games.org")
    (find-file "~/org/games/games_warframe.org")
    (goto-char 0)
  )
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; destiny game workspace
(defun kmn/workspace-game-destiny ()
  (interactive)
    (let ((frame (make-frame)))
    (select-frame-set-input-focus frame)
    (delete-other-windows)
    (find-file "~/org/games/_games.org")
    (find-file "~/org/games/games_destiny.org")
    (goto-char 0)
  )
)
