defmodule LivebookWeb.SettingsLive do use LivebookWeb, :live_view import LivebookWeb.UserHelpers alias LivebookWeb.{SidebarHelpers, PageHelpers} @impl true def mount(_params, _session, socket) do file_systems = Livebook.Settings.file_systems() {:ok, socket |> SidebarHelpers.shared_home_handlers() |> assign( file_systems: file_systems, autosave_path_state: %{ file: autosave_dir(), dialog_opened?: false }, page_title: "Livebook - Settings" )} end @impl true def render(assigns) do ~H"""

Here you can change global Livebook configuration. Keep in mind that this configuration gets persisted and will be restored on application launch.

About

<.labeled_text label="Livebook" text={"v#{Application.spec(:livebook, :vsn)}"} /> <.labeled_text label="Elixir" text={"v#{System.version()}"} />
<%= live_redirect to: Routes.live_dashboard_path(@socket, :home), class: "button-base button-outlined-gray" do %> <.remix_icon icon="dashboard-2-line" class="align-middle mr-1" /> Open dashboard <% end %>

Autosave location

A directory to temporarily keep notebooks until they are persisted.

<.autosave_path_select state={@autosave_path_state} />

File systems

User settings

The configuration in this section changes only your Livebook experience and is saved in your browser.

Code editor

<.switch_checkbox name="editor_auto_completion" label="Show completion list while typing" checked={false} /> <.switch_checkbox name="editor_auto_signature" label="Show function signature while typing" checked={false} /> <.switch_checkbox name="editor_font_size" label="Increase font size" checked={false} /> <.switch_checkbox name="editor_high_contrast" label="Use high contrast theme" checked={false} />
<.current_user_modal current_user={@current_user} /> <%= if @live_action == :add_file_system do %> <.modal id="add-file-system-modal" show class="w-full max-w-3xl" patch={Routes.settings_path(@socket, :page)}> <.live_component module={LivebookWeb.SettingsLive.AddFileSystemComponent} id="add-file-system" return_to={Routes.settings_path(@socket, :page)} /> <% end %> """ end defp autosave_path_select(%{state: %{dialog_opened?: true}} = assigns) do ~H"""
<.live_component module={LivebookWeb.FileSelectComponent} id="autosave-path-component" file={@state.file} extnames={[]} running_files={[]} submit_event={:set_autosave_path} file_system_select_disabled={true} >
""" end defp autosave_path_select(assigns) do ~H"""
""" end @impl true def handle_params(%{"file_system_id" => file_system_id}, _url, socket) do {:noreply, assign(socket, file_system_id: file_system_id)} end def handle_params(_params, _url, socket), do: {:noreply, socket} @impl true def handle_event("cancel_autosave_path", %{}, socket) do {:noreply, update( socket, :autosave_path_state, &%{&1 | dialog_opened?: false, file: autosave_dir()} )} end def handle_event("set_autosave_path", %{}, socket) do path = socket.assigns.autosave_path_state.file.path Livebook.Settings.set_autosave_path(path) {:noreply, update( socket, :autosave_path_state, &%{&1 | dialog_opened?: false, file: autosave_dir()} )} end @impl true def handle_event("reset_autosave_path", %{}, socket) do {:noreply, update( socket, :autosave_path_state, &%{&1 | file: default_autosave_dir()} )} end def handle_event("open_autosave_path_select", %{}, socket) do {:noreply, update(socket, :autosave_path_state, &%{&1 | dialog_opened?: true})} end def handle_event("detach_file_system", %{"id" => file_system_id}, socket) do Livebook.Settings.remove_file_system(file_system_id) file_systems = Livebook.Settings.file_systems() {:noreply, assign(socket, file_systems: file_systems)} end @impl true def handle_info({:file_systems_updated, file_systems}, socket) do {:noreply, assign(socket, file_systems: file_systems)} end def handle_info({:set_file, file, _info}, socket) do {:noreply, update(socket, :autosave_path_state, &%{&1 | file: file})} end def handle_info(:set_autosave_path, socket) do handle_event("set_autosave_path", %{}, socket) end def handle_info(_message, socket), do: {:noreply, socket} defp autosave_dir() do Livebook.Settings.autosave_path() |> Livebook.FileSystem.Utils.ensure_dir_path() |> Livebook.FileSystem.File.local() end defp default_autosave_dir() do Livebook.Settings.default_autosave_path() |> Livebook.FileSystem.Utils.ensure_dir_path() |> Livebook.FileSystem.File.local() end end