module Proteome.Settings where

import Path (Abs, Dir, File, Path, Rel, relfile)
import Ribosome.Data.Setting (Setting (Setting))

import Proteome.Data.ActiveProject (ActiveProject)
import Proteome.Data.ProjectConfig (ProjectConfig (ProjectConfig))
import Proteome.Data.ProjectName (ProjectName)
import Proteome.Data.ProjectSpec (ProjectSpec)
import Proteome.Data.ProjectType (ProjectType)

mainProjectDir :: Setting (Path Abs Dir)
mainProjectDir :: Setting (Path Abs Dir)
mainProjectDir = Text -> Bool -> Maybe (Path Abs Dir) -> Setting (Path Abs Dir)
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"main_project_dir" Bool
True Maybe (Path Abs Dir)
forall a. Maybe a
Nothing

projects :: Setting [ProjectSpec]
projects :: Setting [ProjectSpec]
projects = Text -> Bool -> Maybe [ProjectSpec] -> Setting [ProjectSpec]
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"projects" Bool
True ([ProjectSpec] -> Maybe [ProjectSpec]
forall a. a -> Maybe a
Just [])

projectConfig :: Setting ProjectConfig
projectConfig :: Setting ProjectConfig
projectConfig = Text -> Bool -> Maybe ProjectConfig -> Setting ProjectConfig
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"project_config" Bool
True (ProjectConfig -> Maybe ProjectConfig
forall a. a -> Maybe a
Just ([Path Abs Dir]
-> Map ProjectType [Path Abs Dir]
-> Map ProjectType [Path Abs Dir]
-> Map ProjectType [ProjectType]
-> Map ProjectType [Text]
-> Map ProjectType ProjectLang
-> Map ProjectLang [ProjectLang]
-> ProjectConfig
ProjectConfig [Path Abs Dir]
forall a. Default a => a
def Map ProjectType [Path Abs Dir]
forall a. Default a => a
def Map ProjectType [Path Abs Dir]
forall a. Default a => a
def Map ProjectType [ProjectType]
forall a. Default a => a
def Map ProjectType [Text]
forall a. Default a => a
def Map ProjectType ProjectLang
forall a. Default a => a
def Map ProjectLang [ProjectLang]
forall a. Default a => a
def))

mainName :: Setting ProjectName
mainName :: Setting ProjectName
mainName = Text -> Bool -> Maybe ProjectName -> Setting ProjectName
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"main_name" Bool
True Maybe ProjectName
forall a. Maybe a
Nothing

mainType :: Setting ProjectType
mainType :: Setting ProjectType
mainType = Text -> Bool -> Maybe ProjectType -> Setting ProjectType
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"main_type" Bool
True Maybe ProjectType
forall a. Maybe a
Nothing

active :: Setting ActiveProject
active :: Setting ActiveProject
active = Text -> Bool -> Maybe ActiveProject -> Setting ActiveProject
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"active" Bool
True Maybe ActiveProject
forall a. Maybe a
Nothing

tagsEnable :: Setting Bool
tagsEnable :: Setting Bool
tagsEnable = Text -> Bool -> Maybe Bool -> Setting Bool
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"tags_enable" Bool
True (Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
True)

tagsCommand :: Setting Text
tagsCommand :: Setting Text
tagsCommand = Text -> Bool -> Maybe Text -> Setting Text
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"tags_command" Bool
True (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"ctags")

tagsArgs :: Setting Text
tagsArgs :: Setting Text
tagsArgs = Text -> Bool -> Maybe Text -> Setting Text
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"tags_args" Bool
True (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"-R --languages={langsComma} -f {tagFile} {root}")

tagsFork :: Setting Bool
tagsFork :: Setting Bool
tagsFork = Text -> Bool -> Maybe Bool -> Setting Bool
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"tags_fork" Bool
True (Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
True)

tagsFileName :: Setting (Path Rel File)
tagsFileName :: Setting (Path Rel File)
tagsFileName = Text -> Bool -> Maybe (Path Rel File) -> Setting (Path Rel File)
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"tags_file_name" Bool
True (Path Rel File -> Maybe (Path Rel File)
forall a. a -> Maybe a
Just [relfile|.tags|])

grepCmdline :: Setting Text
grepCmdline :: Setting Text
grepCmdline =
  Text -> Bool -> Maybe Text -> Setting Text
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"grep_cmdline" Bool
True Maybe Text
forall a. Maybe a
Nothing

filesUseRg :: Setting Bool
filesUseRg :: Setting Bool
filesUseRg =
  Text -> Bool -> Maybe Bool -> Setting Bool
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"files_use_rg" Bool
True (Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
True)

filesExcludeHidden :: Setting Bool
filesExcludeHidden :: Setting Bool
filesExcludeHidden =
  Text -> Bool -> Maybe Bool -> Setting Bool
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"files_exclude_hidden" Bool
True (Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
True)

filesExcludeFiles :: Setting [Text]
filesExcludeFiles :: Setting [Text]
filesExcludeFiles =
  Text -> Bool -> Maybe [Text] -> Setting [Text]
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"files_exclude_files" Bool
True ([Text] -> Maybe [Text]
forall a. a -> Maybe a
Just [])

filesExcludeDirectories :: Setting [Text]
filesExcludeDirectories :: Setting [Text]
filesExcludeDirectories =
  Text -> Bool -> Maybe [Text] -> Setting [Text]
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"files_exclude_directories" Bool
True ([Text] -> Maybe [Text]
forall a. a -> Maybe a
Just [])

filesExcludeWildIgnore :: Setting Bool
filesExcludeWildIgnore :: Setting Bool
filesExcludeWildIgnore =
  Text -> Bool -> Maybe Bool -> Setting Bool
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"files_exclude_wildignore" Bool
True (Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
True)

buffersCurrentLast :: Setting Bool
buffersCurrentLast :: Setting Bool
buffersCurrentLast =
  Text -> Bool -> Maybe Bool -> Setting Bool
forall a. Text -> Bool -> Maybe a -> Setting a
Setting Text
"buffers_current_last" Bool
True (Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
False)