Final commit (hopefully)

- I'll be switching over to a more organized tree ASAP
- This will fix several problems this config has
- I'll keep you posted :wave:
diff --git a/src/apps/personal/element.nix b/src/apps/personal/element.nix
index 9278df0..ced87ce 100644
--- a/src/apps/personal/element.nix
+++ b/src/apps/personal/element.nix
@@ -1,5 +1,6 @@
 { pkgs, ... }: {
     home.packages = with pkgs; [
         element-desktop-wayland
+        cinny
     ];
 }
diff --git a/src/apps/personal/email.nix b/src/apps/personal/email.nix
new file mode 100644
index 0000000..45c2d5f
--- /dev/null
+++ b/src/apps/personal/email.nix
@@ -0,0 +1,66 @@
+{ pkgs, ... }: {
+    accounts.email.accounts = {
+        collabora = {
+            astroid = {
+                enable = true;
+                sendMailCommand = "${pkgs.msmtp}/bin/msmtpq --read-envelope-from --read-recipients";
+            };
+            msmtp.enable = true;
+            himalaya.enable = true;
+            neomutt.enable = true;
+            mbsync = {
+                enable = true;
+                create = "maildir";
+            };
+            notmuch.enable = true;
+            address = "skyler.grey@collabora.com";
+            imap = {
+                host = "mail.collabora.com";
+                port = 143;
+                tls.useStartTls = true;
+            };
+            smtp = {
+                host = "mail.collabora.com";
+                port = 587;
+                tls.useStartTls = true;
+            };
+            userName = "skyler";
+            realName = "Skyler Grey";
+            primary = true;
+            signature = {
+                showSignature = "append";
+                text = ''
+                Miss Skyler Grey
+                Intern
+
+                Collabora Ltd.
+                Platinum Building, St John's Innovation Park, Cambridge CB4 0DS, UK
+                Registered in England & Wales, no. 5513718'';
+            };
+            passwordCommand = "${pkgs.coreutils}/bin/cat /run/secrets/collabora-password";
+        };
+    };
+    programs.astroid.enable = true;
+    programs.msmtp.enable = true;
+    services.mbsync = {
+        enable = true;
+        postExec = "${pkgs.notmuch}/bin/notmuch new";
+    };
+    programs.mbsync.enable = true;
+    programs.himalaya.enable = true;
+    programs.neomutt = {
+        enable = true;
+        sidebar.enable = true;
+        settings = {
+            preferred_languages = "en";
+        };
+        extraConfig = ''
+        auto_view text/html
+        '';
+    };
+    programs.notmuch.enable = true;
+    home.packages = [ pkgs.lynx ];
+    home.file.".mailcap".text = ''
+    text/html; ${pkgs.lynx}/bin/lynx -force_html -dump %s; copiousoutput
+    '';
+}
diff --git a/src/apps/personal/gpg.nix b/src/apps/personal/gpg.nix
index 58d57ca..9c8f74f 100644
--- a/src/apps/personal/gpg.nix
+++ b/src/apps/personal/gpg.nix
@@ -1,6 +1,6 @@
 { pkgs, ... }: let
     pinentry-multiplexed = pkgs.writeScriptBin "pinentry-multiplexed" ''
-        case $PINENTRY_USER_DATA in
+        case "$${PINENTRY_USER_DATA-}" in
         tty)
             exec ${pkgs.pinentry.tty}/bin/pinentry "$@"
             ;;
diff --git a/src/apps/personal/grep.nix b/src/apps/personal/grep.nix
index 4fc02a1..fe29812 100644
--- a/src/apps/personal/grep.nix
+++ b/src/apps/personal/grep.nix
@@ -1,11 +1,12 @@
 { pkgs, ... }: {
-  home.packages = [
-    pkgs.ripgrep
-    pkgs.gnugrep
-  ];
+    home.packages = [
+        pkgs.ripgrep
+        pkgs.gnugrep
+    ];
 
-  home.shellAliases = {
-    "git-todo" = "${pkgs.git}/bin/git log | ${pkgs.gnugrep}/bin/grep 'TODO\|DONE'";
-    todo = "${pkgs.ripgrep}/bin/rg TODO:";
-  };
+    home.shellAliases = {
+        "git-todo" = "${pkgs.git}/bin/git log | ${pkgs.gnugrep}/bin/grep 'TODO\|DONE'";
+        todo = "${pkgs.ripgrep}/bin/rg TODO:";
+        rg = "${pkgs.ripgrep}/bin/rg -S";
+    };
 }
diff --git a/src/apps/personal/ssh.nix b/src/apps/personal/ssh.nix
index 3ab03fc..a912f0f 100644
--- a/src/apps/personal/ssh.nix
+++ b/src/apps/personal/ssh.nix
@@ -8,6 +8,10 @@
                 port = 29418;
                 user = "Minion3665";
             };
+            transplace = {
+                hostname = "95.217.87.112";
+                identityFile = "~/.ssh/id_transplace";
+            };
         };
     };
 
diff --git a/src/apps/personal/timetracking.nix b/src/apps/personal/timetracking.nix
index b7d0f2f..52220e3 100644
--- a/src/apps/personal/timetracking.nix
+++ b/src/apps/personal/timetracking.nix
@@ -1,6 +1,11 @@
 { pkgs, ... }: {
     home.packages = [
         pkgs.gtimelog
+# pkgs.gtimelog.overrideAttrs(prev: {
+        #     src = fetchGit {
+        #         url = "git@gitlab.collabora.com:
+        #     };
+        # })
         pkgs.haskellPackages.arbtt
     ];
 }
diff --git a/src/apps/personal/vim.nix b/src/apps/personal/vim.nix
index ccd3434..145b8c7 100644
--- a/src/apps/personal/vim.nix
+++ b/src/apps/personal/vim.nix
@@ -1,4 +1,4 @@
-{ pkgs, ... }: {
+{ pkgs, vim-ctrlspace, ... }: {
     home.file.".config/nvim/autoload/airline/themes/onehalf.vim".text = ''
     let g:airline#themes#onehalf#palette = {}
     function! airline#themes#onehalf#refresh()
@@ -31,21 +31,24 @@
     let g:airline#themes#onehalf#palette.visual      = s:generateAirlinePalette(s:purple)
     let g:airline#themes#onehalf#palette.select      = s:generateAirlinePalette(s:purple)
     let g:airline#themes#onehalf#palette.multi       = s:generateAirlinePalette(s:purple)
-    let g:airline#themes#onehalf#palette.insert      = s:generateAirlinePalette(s:blue)
+    let g:airline#themes#onehalf#palette.insert      = s:generateAirlinePalette(s:yellow)
     let g:airline#themes#onehalf#palette.commandline = s:generateAirlinePalette(s:red)
     let g:airline#themes#onehalf#palette.terminal    = s:generateAirlinePalette(s:cyan)
-    let g:airline#themes#onehalf#palette.replace     = s:generateAirlinePalette(s:yellow)
-    let g:airline#themes#onehalf#palette.ctrlp       = s:generateAirlinePalette(s:white)
-    let g:airline#themes#onehalf#palette.inactive    = s:generateAirlinePalette(s:lightgrey)
+    let g:airline#themes#onehalf#palette.replace     = s:generateAirlinePalette(s:blue)
+    let g:airline#themes#onehalf#palette.inactive    = s:generateAirlinePalette(s:white)
     let g:airline#themes#onehalf#palette.normal_modified      = s:generateAirlinePalette(s:green)
     let g:airline#themes#onehalf#palette.visual_modified      = s:generateAirlinePalette(s:purple)
     let g:airline#themes#onehalf#palette.select_modified      = s:generateAirlinePalette(s:purple)
     let g:airline#themes#onehalf#palette.multi_modified       = s:generateAirlinePalette(s:purple)
-    let g:airline#themes#onehalf#palette.insert_modified      = s:generateAirlinePalette(s:blue)
+    let g:airline#themes#onehalf#palette.insert_modified      = s:generateAirlinePalette(s:yellow)
     let g:airline#themes#onehalf#palette.commandline_modified = s:generateAirlinePalette(s:red)
     let g:airline#themes#onehalf#palette.terminal_modified    = s:generateAirlinePalette(s:cyan)
-    let g:airline#themes#onehalf#palette.replace_modified     = s:generateAirlinePalette(s:yellow)
-    let g:airline#themes#onehalf#palette.ctrlp_modified       = s:generateAirlinePalette(s:white)
+    let g:airline#themes#onehalf#palette.replace_modified     = s:generateAirlinePalette(s:blue)
+
+
+    let g:airline#themes#onehalf#palette.tabline = {
+        \ 'airline_tabtype' : [s:white.gui, s:lightgrey.gui, s:white.cterm, s:lightgrey.cterm]}
+
     endfunction
 
     call airline#themes#onehalf#refresh()
@@ -57,7 +60,9 @@
             settings = {
                 "suggest.noselect" = false;
                 "cSpell.checkOnlyEnabledFileTypes" = false;
+                "rust-analyzer.serverPath" = "${pkgs.rust-analyzer}/bin/rust-analyzer";
             };
+
         };
         viAlias = true;
         vimAlias = true;
@@ -80,10 +85,14 @@
         set nocompatible
         set hidden
         set encoding=utf-8
-        set scrolloff=5
+        set scrolloff=3
         set signcolumn=yes
+        set guicursor=v-r-cr:hor50,i:ver50
         colorscheme onehalfdark
 
+        hi clear SpellBad
+        hi SpellBad cterm=undercurl gui=undercurl
+
         command W w
         command Wq wq
 
@@ -138,8 +147,12 @@
         nmap <leader>+ <Plug>AirlineSelectNextTab
         let g:airline_skip_empty_sections = 1
 
-        let g:ctrlp_map = '<c-p>'
-        let g:ctrlp_cmd = 'CtrlP'
+        let g:CtrlSpaceDefaultMappingKey = "<C-space> "
+        let g:CtrlSpaceGlobCommand = 'rg --color=never --files'
+        let g:CtrlSpaceSearchTiming = 500
+        let g:CtrlSpaceLoadLastWorkspaceOnStart = 1
+        let g:CtrlSpaceSaveWorkspaceOnSwitch = 1
+        let g:CtrlSpaceSaveWorkspaceOnExit = 1
 
         nmap <silent> ]c :call CocAction('diagnosticNext')<cr>
         nmap <silent> [c :call CocAction('diagnosticPrevious')<cr>
@@ -179,7 +192,25 @@
 
         nnoremap <silent> K :call <SID>show_documentation()<CR>
 
-        autocmd BufWritePre * Neoformat
+        function FormatChangedHunks()
+        let formattedLines = 0
+        let formattedHunks = 0
+
+        for hunk in gitgutter#hunk#hunks(bufnr(""))
+            let line1 = hunk[2] - 1
+            let line2 = hunk[2] + hunk[3]
+            let formattedLines = formattedLines + line2 - line1
+            let formattedHunks = formattedHunks + 1
+            silent call neoformat#Neoformat(0, "", line1, line2)
+        endfor
+
+        echomsg "Reformatted " . string(formattedLines) . " changed lines in " . string(formattedHunks) . " hunks"
+        endfunction
+
+        autocmd BufWritePre * undojoin | try | undojoin | Neoformat | catch /^Vim\%((\a\+)\)\=:E790/ | finally | silent Neoformat | endtry
+        " call FormatChangedHunks()
+        autocmd CursorHoldI,CursorHold,BufLeave ?* silent! update
+        let g:cursorhold_updatetime = 1000
 
         let g:neoformat_try_node_exe = 1
 
@@ -191,7 +222,42 @@
         endif
         endfunction
 
+        let s:darkred     = { "gui": "#844C55", "cterm": "167" }
+        let s:darkyellow  = { "gui": "#877658", "cterm": "136" }
+        let s:darkgreen   = { "gui": "#607857", "cterm": "71"  }
+        let s:darkcyan    = { "gui": "#3F717B", "cterm": "31"  }
+        let s:darkblue    = { "gui": "#456E92", "cterm": "31"  }
+        let s:darkpurple  = { "gui": "#775289", "cterm": "127" }
+        let s:white       = { "gui": "#dcdfe4", "cterm": "188" }
+
+        exec "highlight IndentBlanklineContextChar ctermfg=" . s:white.cterm . " guifg=" . s:white.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineContextStart ctermfg=NONE guifg=NONE guisp=white ctermbg=NONE guibg=NONE gui=underline term=underline"
+        exec "highlight IndentBlanklineIndent1 ctermfg=" . s:darkred.cterm . " guifg=" . s:darkred.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineIndent2 ctermfg=" . s:darkyellow.cterm . " guifg=" . s:darkyellow.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineIndent3 ctermfg=" . s:darkgreen.cterm . " guifg=" . s:darkgreen.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineIndent4 ctermfg=" . s:darkcyan.cterm . " guifg=" . s:darkcyan.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineIndent5 ctermfg=" . s:darkblue.cterm . " guifg=" . s:darkblue.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineIndent6 ctermfg=" . s:darkpurple.cterm . " guifg=" . s:darkpurple.gui . " ctermbg=NONE guibg=NONE"
+
         lua << EOF
+        vim.opt.list = true
+        vim.opt.listchars:append "space:⋅"
+        vim.opt.listchars:append "eol:↴"
+
+        require("indent_blankline").setup {
+            space_char_blankline = " ",
+            show_current_context = true,
+            show_current_context_start = true,
+            char_highlight_list = {
+                "IndentBlanklineIndent1",
+                "IndentBlanklineIndent2",
+                "IndentBlanklineIndent3",
+                "IndentBlanklineIndent4",
+                "IndentBlanklineIndent5",
+                "IndentBlanklineIndent6",
+            },
+        }
+
         require('neorg').setup {
             load = {
                 ["core.defaults"] = {}
@@ -209,6 +275,23 @@
                 enable = true,
                 extended_mode = true,
                 max_file_lines = nil,
+                colors = {
+                    "#e06c75",
+                    "#e5c07b",
+                    "#98c379",
+                    "#56b6c2",
+                    "#61afef",
+                    "#c678dd",
+
+                },
+                termcolors = {
+                    "168",
+                    "180",
+                    "114",
+                    "73",
+                    "75",
+                    "176",
+                },
             },
             incremental_selection = {
                 enable = true,
@@ -231,8 +314,7 @@
         set foldexpr=nvim_treesitter#foldexpr()
 
         set viewoptions-=options
-        autocmd BufWinLeave ?* mkview!
-        autocmd BufWinEnter ?* normal zR
+        autocmd BufWinLeave ?* silent! mkview!
 
         function! s:loadViewOrUnfold()
         try
@@ -244,10 +326,41 @@
 
         autocmd BufWinEnter ?* call s:loadViewOrUnfold()
 
-
         let g:airline_highlighting_cache = 1
         let g:airline_theme = "onehalf"
         autocmd VimEnter * call vista#RunForNearestMethodOrFunction()
+
+        let g:list_of_disabled_keys = ["<UP>", "<DOWN>", "<LEFT>", "<RIGHT>"]
+
+        let g:hardtime_default_on = 1
+        let g:hardtime_allow_different_key = 1
+        let g:hardtime_motion_with_count_resets = 1
+
+        let g:himalaya_mailbox_picker = 'telescope'
+
+        nnoremap <leader>tf <cmd>Telescope find_files<cr>
+        nnoremap <leader>tc <cmd>Telescope coc<cr>
+        nnoremap <leader>ts <cmd>Telescope ultisnips<cr>
+        nnoremap <leader>tg <cmd>Telescope live_grep<cr>
+        nnoremap <leader>tb <cmd>Telescope buffers<cr>
+        nnoremap <leader>th <cmd>Telescope help_tags<cr>
+
+        lua << EOF
+        require("telescope").setup({
+
+        });
+
+        require("telescope").load_extension("coc");
+        require("telescope").load_extension("ui-select");
+        require("telescope").load_extension("ultisnips");
+        require("telescope").load_extension("zoxide");
+        require("telescope").load_extension("fzf");
+        require("telescope").load_extension("file_browser");
+        EOF
+
+        lua << EOF
+        require("colorizer").setup();
+        EOF
         '';
 
         plugins = with pkgs.vimPlugins; [
@@ -257,7 +370,7 @@
             coc-tsserver
             coc-eslint
             coc-rust-analyzer
-            coc-spell-checker
+            # pkgs-minion.coc-spell-checker
             coc-json
             coc-jest
             coc-css
@@ -279,16 +392,41 @@
             airline
             vista-vim
             vim-gitgutter
-            ctrlp-vim
             vim-airline-clock
             lazygit-nvim
+            FixCursorHold-nvim
+            indent-blankline-nvim
+            vim-hardtime
+            vim-commentary
+            coc-snippets
+            ultisnips
+            vim-surround
+            himalaya-vim
+            telescope-ui-select-nvim
+            telescope-ultisnips-nvim
+            telescope-symbols-nvim
+            telescope-zoxide
+            telescope-fzf-native-nvim
+            telescope-coc-nvim
+            telescope-file-browser-nvim
+            telescope-nvim
+            nvim-colorizer-lua
+            (pkgs.vimUtils.buildVimPlugin {
+                name = "vim-ctrlspace";
+                src = vim-ctrlspace;
+            })
             (nvim-treesitter.withPlugins (plugins: pkgs.tree-sitter.allGrammars))
         ];
+
+        extraPackages = with pkgs; [
+            rust-analyzer
+        ];
     };
 
     home.packages = with pkgs; [
         universal-ctags
         nodePackages.cspell
+        fd
     ];
 
     home.sessionVariables.EDITOR = "${pkgs.neovim}/bin/nvim";
diff --git a/src/apps/personal/waybar.nix b/src/apps/personal/waybar.nix
index c67beea..db1d7f2 100644
--- a/src/apps/personal/waybar.nix
+++ b/src/apps/personal/waybar.nix
@@ -22,9 +22,9 @@
                         tooltip = false;
                         format = "{icon}";
                         format-icons = {
-                            notification = "<span foreground='red'><sup></sup></span>";
+                            notification = "<span foreground='red'><sup>*</sup></span>";
                             none = "";
-                            dnd-notification = "<span foreground='red'><sup></sup></span>";
+                            dnd-notification = "<span foreground='red'><sup>*</sup></span>";
                             dnd-none = "";
                         };
                         "return-type" = "json";
diff --git a/src/apps/personal/zsh.nix b/src/apps/personal/zsh.nix
index ad970ab..ef2eaaa 100644
--- a/src/apps/personal/zsh.nix
+++ b/src/apps/personal/zsh.nix
@@ -14,40 +14,74 @@
             extended = true;
         };
         initExtra = ''
-            bindkey -v
-            bindkey "\'\'$\{key[Up]}" up-line-or-search
+        bindkey -v
+        bindkey "\'\'$\{key[Up]}" up-line-or-search
 
-            command_not_found_handler ()
-            {
-                local p='/nix/store/ycclzpk99snlrk8sg9n4j8pm1927gavw-command-not-found/bin/command-not-found';
-                if [ -x "$p" ] && [ -f '/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite' ]; then
-                    "$p" "$@" 2>&1 | sed -r 's/nix-shell -p (\S+)/nix shell nixpkgs#\1/g' 1>&2;
-                  if [ $? = 126 ]; then
-                        "$@";
-                    else
-                        return 127;
-                    fi;
-                else
-                    echo "$1: command not found" 1>&2;
-                    return 127;
-                fi
-            }
+        command_not_found_handler ()
+        {
+            local p='/nix/store/ycclzpk99snlrk8sg9n4j8pm1927gavw-command-not-found/bin/command-not-found';
+            if [ -x "$p" ] && [ -f '/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite' ]; then
+            "$p" "$@" 2>&1 | sed -r 's/nix-shell -p (\S+)/nix shell nixpkgs#\1/g' 1>&2;
+            if [ $? = 126 ]; then
+            "$@";
+            else
+            return 127;
+            fi;
+            else
+            echo "$1: command not found" 1>&2;
+            return 127;
+            fi
+        }
 
-            ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=243';
-            ZSH_HIGHLIGHT_STYLES[comment]='fg=248';
+        ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=243';
+        ZSH_HIGHLIGHT_STYLES[comment]='fg=248';
 
-            if [[ $SHLVL != "1" ]]; then
-                export RPS1=$'%{\033[38;5;248m%}(%{$fg[red]%}L$SHLVL%{\033[38;5;248m%})%{\033[39m\033[49m%}'
-                fi
 
-            function TRAPINT {
-                print -n "$fg_bold[red]^C$fg_no_bold[default]"
-                return $(( 128 + $1 ))
-            }
+        function task_indicator {
+            if [ `task +READY +OVERDUE count 2> /dev/null` -gt "0" ]  ; then
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[magenta]%%}$(task +READY +OVERDUE count) OVERDUE%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            elif [ `task +READY +DUETODAY count 2> /dev/null` -gt "0" ]  ; then
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[red]%%}$(task +READY +DUETODAY count) DUE TODAY%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            elif [ `task +READY +DUETomorrow count 2> /dev/null` -gt "0" ]  ; then
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[yellow]%%}$(task +READY +DUETomorrow count) DUE TOMORROW%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            elif [ `task +READY urgency \> 10 count 2> /dev/null` -gt "0" ]  ; then
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[red]%%}$(task +READY urgency \\\> 10 count) URGENT%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            elif [ `task +READY count 2> /dev/null` -gt "0" ]  ; then
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[cyan]%%}$(task +READY count) TASKS%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            else
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[green]%%}NO TASKS%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            fi
+        }
 
-            function tempd {
-                cd "$(mktemp -d)"
-            }
+        if [[ $SHLVL != "1" ]]; then
+        export RPS1=$'%{\033[38;5;248m%}(%{$fg[red]%}L$SHLVL%{\033[38;5;248m%})%{\033[39m\033[49m%} '
+        fi
+
+        RPS1+='$(task_indicator)'
+
+        function TRAPINT {
+            print -n "$fg_bold[red]^C$fg_no_bold[default]"
+            return $(( 128 + $1 ))
+        }
+
+        # function zle-line-init {
+        #     if [[ -n $ZLE_LINE_ABORTED ]]; then
+        #     MY_LINE_ABORTED="$ZLE_LINE_ABORTED"
+        #     fi
+
+        #     if [[ -n $MY_LINE_ABORTED ]]; then
+        #     local savebuf="$BUFFER" savecur="$CURSOR"
+        #     BUFFER="$MY_LINE_ABORTED"
+        #     CURSOR="$#BUFFER"
+        #     zle split-undo
+        #     BUFFER="$savebuf" CURSOR="$savecur"
+        #     fi
+        # }
+        # zle -N zle-line-init
+
+        function tempd {
+            cd "$(mktemp -d)"
+        }
 
             # disable sort when completing `git checkout`
             zstyle ':completion:*:git-checkout:*' sort false
@@ -63,14 +97,18 @@
 
             alias compinit="true"
             source ${./zsh/completions}/*
-        '';
-        enableSyntaxHighlighting = true;
-        enableAutosuggestions = true;
-        autocd = true;
-        dotDir = ".local/share/zsh";
-    };
+            '';
+            enableSyntaxHighlighting = true;
+            enableAutosuggestions = true;
+            autocd = true;
+            dotDir = ".local/share/zsh";
+        };
 
-    home.packages = [
-        pkgs.fzf
-    ];
-}
+        home.packages = [
+            pkgs.fzf
+        ];
+
+        home.shellAliases = {
+            ":q" = "exit";
+        };
+    }