aboutsummaryrefslogtreecommitdiff
path: root/modules/terminal
diff options
context:
space:
mode:
authorCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2025-06-09 17:40:46 +0000
committerCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2025-06-09 17:40:46 +0000
commita45c4551712c1ba5cb82eaf290f311ab0e8690e4 (patch)
treef62b23489fb31f8ea58fef77f99619efd784eb36 /modules/terminal
big changes
Diffstat (limited to 'modules/terminal')
-rw-r--r--modules/terminal/home/default.nix5
-rw-r--r--modules/terminal/home/emulators/blackbox.nix30
-rw-r--r--modules/terminal/options.nix77
-rw-r--r--modules/terminal/system/default.nix25
-rw-r--r--modules/terminal/system/programs/cmus.nix83
-rw-r--r--modules/terminal/system/programs/fish.nix57
-rw-r--r--modules/terminal/system/programs/git.nix29
-rw-r--r--modules/terminal/system/programs/helix.nix139
-rw-r--r--modules/terminal/system/programs/lazygit.nix26
-rw-r--r--modules/terminal/system/programs/starship.nix48
-rw-r--r--modules/terminal/system/programs/tmux.nix164
11 files changed, 683 insertions, 0 deletions
diff --git a/modules/terminal/home/default.nix b/modules/terminal/home/default.nix
new file mode 100644
index 0000000..a874872
--- /dev/null
+++ b/modules/terminal/home/default.nix
@@ -0,0 +1,5 @@
+{pkgs, ...}: {
+ imports = [
+ ./emulators/blackbox.nix # can't do dbus with hjem
+ ];
+}
diff --git a/modules/terminal/home/emulators/blackbox.nix b/modules/terminal/home/emulators/blackbox.nix
new file mode 100644
index 0000000..7da15a9
--- /dev/null
+++ b/modules/terminal/home/emulators/blackbox.nix
@@ -0,0 +1,30 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.terminal.terminalEmulators.blackbox;
+in
+ lib.mkIf cfg.enable {
+ home.packages = [pkgs.blackbox-terminal];
+
+ dconf = {
+ enable = true;
+ settings = {
+ "com/raggesilver/BlackBox" = {
+ context-aware-header-bar = true;
+ fill-tabs = true;
+ notify-process-completion = true;
+ opacity = 100;
+ pixel-scrolling = true;
+ pretty = true;
+ show-scrollbars = false;
+ terminal-padding = "(10, 10, 10, 10)";
+
+ floating-controls = false;
+ show-headerbar = true;
+ };
+ };
+ };
+ }
diff --git a/modules/terminal/options.nix b/modules/terminal/options.nix
new file mode 100644
index 0000000..b728f99
--- /dev/null
+++ b/modules/terminal/options.nix
@@ -0,0 +1,77 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}: let
+ inherit (lib) mkOption mkEnableOption types;
+
+ mkProgramOption' = name: extraOpts:
+ {
+ enable = mkEnableOption "whether to enable ${name}";
+ theme = mkOption {
+ type = types.enum ["catppuccin" "adwaita"];
+ default = config.collinux.terminal.theme;
+ };
+ }
+ // extraOpts;
+
+ mkProgramOption = name: mkProgramOption' name {};
+in {
+ options = {
+ collinux.terminal = {
+ theme = mkOption {
+ type = types.enum ["catppuccin" "adwaita"];
+ default = config.collinux.theme;
+ };
+
+ shells = {
+ fish = mkProgramOption "fish shell";
+ bash = mkProgramOption "bash shell";
+
+ defaultShell = mkOption {
+ type = types.package;
+ description = "which shell is default";
+ default = let
+ cfg = config.collinux.terminal.shells;
+ in
+ if (cfg.fish.enable && !cfg.bash.enable)
+ then pkgs.fish
+ else if (!cfg.fish.enable && cfg.bash.enable)
+ then pkgs.bash
+ else null;
+ };
+ };
+
+ programs = {
+ # Themed
+ starship = mkProgramOption "starship prompt";
+ lazygit.enable = mkEnableOption "lazygit";
+ nh.enable = mkEnableOption "nh";
+
+ cmus = mkProgramOption "cmus";
+
+ git = {
+ enable = mkEnableOption "git";
+ userName = mkOption {
+ type = types.str;
+ default = config.collinux.user.name;
+ };
+ userEmail = mkOption {
+ type = types.str;
+ };
+ };
+
+ helix = mkProgramOption' "helix text editor" {
+ hardMode = mkOption {
+ type = types.bool;
+ description = "Disable arrow keys and mouse";
+ default = false;
+ };
+ };
+
+ tmux = mkProgramOption "tmux terminal multiplexer";
+ };
+ };
+ };
+}
diff --git a/modules/terminal/system/default.nix b/modules/terminal/system/default.nix
new file mode 100644
index 0000000..32ca3f9
--- /dev/null
+++ b/modules/terminal/system/default.nix
@@ -0,0 +1,25 @@
+{
+ config,
+ pkgs,
+ ...
+}: let
+ cfg = config.collinux.terminal.shells;
+in {
+ imports = [
+ ./programs/helix.nix
+ ./programs/tmux.nix
+ ./programs/fish.nix
+ ./programs/starship.nix
+ ./programs/lazygit.nix
+ ./programs/cmus.nix
+ ./programs/git.nix
+ ];
+
+ programs.command-not-found.enable = false; # broken without nix-channels
+
+ users.users."${config.collinux.user.name}" = {
+ shell = cfg.defaultShell;
+ ignoreShellProgramCheck = true;
+ packages = [pkgs.nh]; # Couldn't figure out where else to put this
+ };
+}
diff --git a/modules/terminal/system/programs/cmus.nix b/modules/terminal/system/programs/cmus.nix
new file mode 100644
index 0000000..3f1639b
--- /dev/null
+++ b/modules/terminal/system/programs/cmus.nix
@@ -0,0 +1,83 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.terminal.programs.cmus;
+
+ scripts.statusDisplay = pkgs.writeShellScriptBin "status.sh" ''
+ while [ $# -ge 2 ]; do
+ eval _$1='$2'
+ shift
+ shift
+ done
+
+ [ -d ~/.local/share/cmus ] || mkdir ~/.local/share/cmus
+
+ if [ -n "$_file" ]; then
+ ${pkgs.ffmpeg}/bin/ffmpeg -i "$_file" -y -an -c:v copy ~/.local/share/cmus/curr_cover.jpg || rm ~/.local/share/cmus/curr_cover.jpg
+ fi
+
+ if [[ "$_status" = "playing" ]]; then
+ notify-send -t 3000 -u low -i ~/.local/share/cmus/curr_cover.jpg "Now Playing: $_title" "$_artist"
+ fi
+ '';
+
+ cmus_theme = pkgs.writeText "catppuccin.theme" ''
+ set color_cmdline_bg=default
+ set color_cmdline_fg=default
+ set color_error=211
+ set color_info=223
+ set color_separator=8
+ set color_statusline_bg=default
+ set color_statusline_fg=default
+ set color_titleline_bg=183
+ set color_titleline_fg=8
+ set color_titleline_attr=bold
+ set color_win_bg=default
+ set color_win_cur=117
+ set color_win_cur_sel_bg=117
+ set color_win_cur_sel_fg=235
+ set color_win_dir=default
+ set color_win_fg=default
+ set color_win_inactive_cur_sel_bg=0
+ set color_win_inactive_cur_sel_fg=default
+ set color_win_inactive_sel_bg=0
+ set color_win_inactive_sel_fg=default
+ set color_win_sel_bg=15
+ set color_win_sel_fg=235
+ set color_win_title_bg=default
+ set color_win_title_fg=183
+ set color_win_title_attr=bold
+ '';
+
+ cmus_rc = pkgs.writeText "rc" ''
+ colorscheme catppuccin
+ set status_display_program=${scripts.statusDisplay}/bin/status.sh
+ '';
+
+ cava_config = pkgs.writeText "config" ''
+ [color]
+ gradient=1
+ gradient_color_1='#94e2d5'
+ gradient_color_2='#89dceb'
+ gradient_color_3='#74c7ec'
+ gradient_color_4='#89b4fa'
+ gradient_color_5='#cba6f7'
+ gradient_color_6='#f5c2e7'
+ gradient_color_7='#eba0ac'
+ gradient_color_8='#f38ba8'
+ '';
+in
+ lib.mkIf cfg.enable {
+ hjem.users."${config.collinux.user.name}" = {
+ files = {
+ ".config/cmus/rc".source = cmus_rc;
+ ".config/cmus/catppuccin.theme".source = cmus_theme;
+ ".config/cava/config".source = cava_config;
+ };
+
+ packages = with pkgs; [cava cmus];
+ };
+ }
diff --git a/modules/terminal/system/programs/fish.nix b/modules/terminal/system/programs/fish.nix
new file mode 100644
index 0000000..89d26ef
--- /dev/null
+++ b/modules/terminal/system/programs/fish.nix
@@ -0,0 +1,57 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.terminal.shells.fish;
+
+ init = pkgs.writeText "config.fish" ''
+ set fish_greeting
+
+ function starship_transient_prompt_func
+ ${pkgs.starship}/bin/starship module character
+ end
+
+ if status is-interactive
+ alias cat bat
+
+ alias eza "eza -A -w 80 --group-directories-first -I '.git*'"
+ alias ls eza
+ alias tree "ls -T"
+
+ ${pkgs.fzf}/bin/fzf --fish | source
+ ${pkgs.starship}/bin/starship init fish | source
+
+ enable_transience
+
+ # env vars
+ set -x EDITOR hx
+ set -x NH_FLAKE "$HOME/nixos"
+
+ set -x BAT_THEME "base16"
+ set -x FZF_DEFAULT_OPTS "--color bg:#1E1E2E,bg+:#313244,border:#313244,fg:#CDD6F4,fg+:#CDD6F4,header:#F38BA8,hl:#F38BA8,hl+:#F38BA8,info:#CBA6F7,label:#CDD6F4,marker:#B4BEFE,pointer:#F5E0DC,prompt:#CBA6F7,selected-bg:#45475A,spinner:#F5E0DC"
+ end
+ '';
+in
+ lib.mkIf cfg.enable {
+ hjem.users."${config.collinux.user.name}" = {
+ files = {
+ ".config/fish/config.fish".source = init;
+ };
+
+ packages = with pkgs; [
+ fish
+ bat
+ eza
+ fzf
+ ripgrep
+ fd
+ moreutils
+ zip
+ unzip
+ btop
+ jq
+ ];
+ };
+ }
diff --git a/modules/terminal/system/programs/git.nix b/modules/terminal/system/programs/git.nix
new file mode 100644
index 0000000..b7c85bc
--- /dev/null
+++ b/modules/terminal/system/programs/git.nix
@@ -0,0 +1,29 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}: let
+ cfg = config.collinux.terminal.programs.git;
+
+ git_config = pkgs.writeText "config" ''
+ [alias]
+ stage = "add"
+ unstage = "restore --staged"
+
+ [init]
+ defaultBranch = "main"
+
+ [user]
+ email = "${cfg.userEmail}"
+ name = "${cfg.userName}"
+ '';
+in {
+ hjem.users."${config.collinux.user.name}" = {
+ files = {
+ ".config/git/config".source = git_config;
+ };
+
+ packages = [pkgs.git];
+ };
+}
diff --git a/modules/terminal/system/programs/helix.nix b/modules/terminal/system/programs/helix.nix
new file mode 100644
index 0000000..4ba78d0
--- /dev/null
+++ b/modules/terminal/system/programs/helix.nix
@@ -0,0 +1,139 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.terminal.programs.helix;
+ toml' = pkgs.formats.toml {};
+
+ languages = toml'.generate "languages.toml" {
+ language = [
+ {
+ name = "nix";
+ file-types = ["nix"];
+ language-servers = ["nil"];
+ indent = {
+ tab-width = 2;
+ unit = " ";
+ };
+ formatter.command = "${pkgs.alejandra}/bin/alejandra";
+ auto-format = true;
+ }
+ {
+ name = "html";
+ file-types = ["html"];
+ language-servers = ["superhtml"];
+ auto-format = true;
+ }
+ ];
+ };
+
+ customCatppuccinTheme = toml'.generate "catppuccin_mocha_transparent.toml" {
+ inherits = "catppuccin_mocha";
+ "ui.background" = {};
+ };
+
+ mkHelixConfig = {
+ theme,
+ hardMode ? false,
+ }:
+ toml'.generate "config.toml" {
+ inherit theme;
+ editor = {
+ gutters = ["diff" "diagnostics" "line-numbers" "spacer" "spacer"];
+ cursorline = true;
+ color-modes = true;
+
+ mouse = !hardMode;
+
+ lsp.display-inlay-hints = true;
+
+ statusline = {
+ left = ["mode" "file-name" "spacer" "file-modification-indicator"];
+ right = ["spinner" "spacer" "workspace-diagnostics" "file-type"];
+ separator = "x";
+ };
+
+ cursor-shape = {
+ insert = "bar";
+ normal = "block";
+ select = "underline";
+ };
+ };
+ keys = {
+ normal =
+ {
+ "C-space" = "expand_selection";
+ "A-j" = ["extend_to_line_bounds" "delete_selection" "paste_after"];
+ "A-k" = ["extend_to_line_bounds" "delete_selection" "move_line_up" "paste_before"];
+ "X" = ["extend_line_up" "extend_to_line_bounds"];
+ "C-left" = "goto_line_start";
+ "C-right" = "goto_line_end";
+ ";" = "flip_selections";
+ "esc" = ["collapse_selection" "keep_primary_selection"];
+
+ # I don't even use these anyway
+ "pageup" = "no_op";
+ "pagedown" = "no_op";
+ "home" = "no_op";
+ "end" = "no_op";
+ }
+ // (
+ if hardMode
+ then {
+ "up" = "no_op";
+ "down" = "no_op";
+ "left" = "no_op";
+ "right" = "no_op";
+ }
+ else {}
+ );
+
+ insert =
+ {
+ "pageup" = "no_op";
+ "pagedown" = "no_op";
+ "home" = "no_op";
+ "end" = "no_op";
+ }
+ // (
+ if hardMode
+ then {
+ "up" = "no_op";
+ "down" = "no_op";
+ "left" = "no_op";
+ "right" = "no_op";
+ }
+ else {}
+ );
+
+ select = {
+ "esc" = ["collapse_selection" "insert_mode"];
+ };
+ };
+ };
+
+ settings = mkHelixConfig {
+ inherit (cfg) hardMode;
+ theme =
+ if cfg.theme == "catppuccin"
+ then "catppuccin_mocha_transparent"
+ else if cfg.theme == "adwaita"
+ then "adwaita_dark"
+ else "";
+ };
+in
+ lib.mkIf cfg.enable {
+ hjem.users."${config.collinux.user.name}" = {
+ files = {
+ ".config/helix/config.toml".source = settings;
+ ".config/helix/languages.toml".source = languages;
+ ".config/helix/themes/catppuccin_mocha_transparent.toml".source = customCatppuccinTheme;
+ };
+
+ packages = [
+ pkgs.helix
+ ];
+ };
+ }
diff --git a/modules/terminal/system/programs/lazygit.nix b/modules/terminal/system/programs/lazygit.nix
new file mode 100644
index 0000000..4c048a0
--- /dev/null
+++ b/modules/terminal/system/programs/lazygit.nix
@@ -0,0 +1,26 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.terminal.programs.lazygit;
+ yaml' = pkgs.formats.yaml {};
+
+ settings = yaml'.generate "config.yml" {
+ git.paging.pager = "${pkgs.diff-so-fancy}/bin/diff-so-fancy";
+ gui = {
+ showRandomTip = false;
+ commitLength.show = false;
+ };
+ };
+in
+ lib.mkIf cfg.enable {
+ hjem.users."${config.collinux.user.name}" = {
+ files = {
+ ".config/lazygit/config.yml".source = settings;
+ };
+
+ packages = [pkgs.lazygit];
+ };
+ }
diff --git a/modules/terminal/system/programs/starship.nix b/modules/terminal/system/programs/starship.nix
new file mode 100644
index 0000000..60fcc00
--- /dev/null
+++ b/modules/terminal/system/programs/starship.nix
@@ -0,0 +1,48 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.terminal.programs.starship;
+ toml' = pkgs.formats.toml {};
+
+ settings = toml'.generate "starship.toml" {
+ format = ''$directory$git_branch$git_status $character'';
+
+ add_newline = false;
+ scan_timeout = 10;
+
+ character = {
+ success_symbol = "[λ](green bold)";
+ error_symbol = "[Σ](red bold)";
+ };
+
+ git_branch.format = "[@$branch](underline)";
+
+ git_status = {
+ format = "$modified$staged$ahead$behind";
+ modified = "[!](red bold)";
+ staged = "[+](green bold)";
+ ahead = "[](green)";
+ behind = "[](red)";
+ };
+
+ directory = {
+ format = "$path";
+ truncation_length = 3;
+ truncate_to_repo = true;
+ };
+ };
+in
+ lib.mkIf cfg.enable {
+ hjem.users."${config.collinux.user.name}" = {
+ files = {
+ ".config/starship.toml".source = settings;
+ };
+
+ packages = [
+ pkgs.starship
+ ];
+ };
+ }
diff --git a/modules/terminal/system/programs/tmux.nix b/modules/terminal/system/programs/tmux.nix
new file mode 100644
index 0000000..b947d95
--- /dev/null
+++ b/modules/terminal/system/programs/tmux.nix
@@ -0,0 +1,164 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.terminal.programs.tmux;
+
+ scripts.bat = pkgs.writeShellScriptBin "battery.sh" ''
+ energy_now=$(cat /sys/class/power_supply/BAT0/energy_now)
+ energy_full=$(cat /sys/class/power_supply/BAT0/energy_full)
+ percentage=$((energy_now * 100 / energy_full))
+ printf "%.0f%%" "$percentage"
+ '';
+
+ scripts.primeProjects = pkgs.writeShellScriptBin "projects.sh" ''
+ FZF_DEFAULT_OPTS="--color bg:#1E1E2E,bg+:#313244,border:#313244,fg:#CDD6F4,fg+:#CDD6F4,header:#F38BA8,hl:#F38BA8,hl+:#F38BA8,info:#CBA6F7,label:#CDD6F4,marker:#B4BEFE,pointer:#F5E0DC,prompt:#CBA6F7,selected-bg:#45475A,spinner:#F5E0DC"
+
+ projects="
+ $(find $HOME/projects -maxdepth 1 -mindepth 1 -type d)
+ $HOME/Documents/brain2.0
+ $HOME/Music
+ $HOME/nixos
+ "
+ if [ $# -eq 1 ]; then
+ selected="$1"
+ else
+ selected="$(echo "$projects" | fzf --tmux --style=minimal --info=hidden $FZF_DEFAULT_OPTS)"
+ fi
+
+ [ -z "$selected" ] && exit
+
+ session_name="$(basename "$selected" | tr '.' '_')"
+
+ if tmux list-sessions | grep -q "^$session_name:"; then
+ # session already exists, switch to it
+ tmux switch -t "$session_name"
+ else
+ # session doesn't exist, create it and switch to it
+ tmux new-session -ds "$session_name" -c "$selected"
+ tmux switch -t "$session_name"
+ fi
+ '';
+
+ scripts.cleanSessions = pkgs.writeShellScriptBin "clean-sessions.sh" ''
+ current="$(tmux display-message -p '#S')"
+
+ tmux list-sessions -F '#S' | while read -r line; do
+ if [[ "$line" != "$current" && "$line" =~ ^[[:digit:]]+$ ]]; then
+ tmux kill-session -t "$line"
+ fi
+ done
+ '';
+
+ scripts.bar = pkgs.writeShellScriptBin "bar.sh" ''
+ text="#c6d0f5"
+ text_dark="#7F849C"
+ blue="#b3befe"
+ green="#a6d189"
+ red="#f38ba8"
+ bg_dark="#181825"
+ bg_light="#1E1E2E"
+
+ tset() {
+ tmux set -gq "$@"
+ }
+
+ tset status on
+
+ tset status-position bottom
+ tset status-justify absolute-centre
+ tset status-bg $bg_light
+
+ tset status-left-style fg=$green
+ tset status-left "  #{client_session} "
+
+ tset window-status-style fg=$text_dark
+ tset window-status-format "#I:#W"
+ tset window-status-current-style fg=$blue,bold
+ tset window-status-current-format "#I:#W"
+ tset window-status-separator " "
+
+ tset status-right-style fg=$red
+ tset status-right "#(${scripts.bat}/bin/battery.sh)"
+
+ ## pane borders
+ tset pane-border-style fg=$bg_dark,bg=$bg_dark
+ tset pane-active-border-style fg=$bg_dark,bg=$bg_dark
+
+ ## pane backgrounds
+ # Set the foreground/background color for the active window
+ tset window-active-style bg=$bg_light
+
+ # Set the foreground/background color for all other windows
+ tset window-style bg=$bg_dark
+ '';
+
+ plugins.tmux-resurrect = builtins.fetchGit {
+ url = "https://github.com/tmux-plugins/tmux-resurrect";
+ rev = "cff343cf9e81983d3da0c8562b01616f12e8d548";
+ };
+
+ tmux-conf = pkgs.writeText "tmux.conf" ''
+ # Resurrect
+ run-shell ${plugins.tmux-resurrect}/resurrect.tmux
+ set -g @resurrect-dir "$HOME/.local/share/tmux-resurrect"
+ set -g @resurrect-processes 'hx cmus cava nix-shell'
+
+ set -g mouse on
+
+ # bell
+ set -g visual-activity off
+ set -g visual-bell off
+ set -g visual-silence off
+ setw -g monitor-activity off
+ set -g bell-action none
+
+ # Panes
+ bind-key -n C-w kill-pane
+
+ bind -n C-Enter if -F '#{e|>:#{e|/:#{pane_width},#{pane_height}},2.5}' {
+ split-window -h -c '#{pane_current_path}'
+ } {
+ split-window -v -c '#{pane_current_path}'
+ }
+
+ unbind -n MouseDown3Pane ## disable right click menu
+ bind-key -n M-z resize-pane -Z ## Pane zoom
+
+ # Windows
+ bind-key -n C-t new-window -c '#{pane_current_path}'
+ bind-key -n C-Tab next-window
+ bind-key -n C-S-Tab previous-window # doesn't work in foot :(
+
+ set -g renumber-windows on
+ set -g allow-rename off
+
+ # Statusbar
+ set-hook -g client-attached 'if -F "#{==:#{session_windows},1}" { set status off } { set status on }'
+ set-hook -g window-linked 'if -F "#{==:#{session_windows},1}" { set status off } { set status on }'
+ set-hook -g window-unlinked 'if -F "#{==:#{session_windows},1}" { set status off } { set status on }'
+
+ run-shell "${scripts.bar}/bin/bar.sh"
+
+ # Sessions
+ # set-hook -ag client-detached 'run-shell ${scripts.cleanSessions}/bin/clean-sessions.sh'
+ # set-hook -ag client-session-changed 'run-shell ${scripts.cleanSessions}/bin/clean-sessions.sh'
+
+ bind-key -n C-f run-shell "${scripts.primeProjects}/bin/projects.sh"
+ bind-key -n M-1 run-shell "${scripts.primeProjects}/bin/projects.sh ~/Music"
+ bind-key -n M-2 run-shell "${scripts.primeProjects}/bin/projects.sh ~/Documents/brain2.0"
+ bind-key -n M-3 run-shell "${scripts.primeProjects}/bin/projects.sh ~/nixos"
+
+ bind-key -n C-g display-popup -E -w 80% -h 80% -x C -y C -d "#{pane_current_path}" "${pkgs.lazygit}/bin/lazygit"
+ '';
+in
+ lib.mkIf cfg.enable {
+ hjem.users."${config.collinux.user.name}" = {
+ files = {
+ ".config/tmux/tmux.conf".source = tmux-conf;
+ };
+ packages = [pkgs.tmux];
+ };
+ }